comparison example/word_count/ppe/Print.cc @ 946:a8b6ee80c108

unify word count examples....
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 01 Aug 2010 21:05:35 +0900
parents ccf78a465459
children
comparison
equal deleted inserted replaced
945:a9c7784e5dae 946:a8b6ee80c108
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <string.h> 2 #include <string.h>
3 #include "Print.h" 3 #include "Print.h"
4 #include "Func.h" 4 #include "Func.h"
5 #include "WordCount.h"
5 6
6 /* これは必須 */ 7 /* これは必須 */
7 SchedDefineTask(Print); 8 SchedDefineTask1(Print,run_print);
8 9
9 static int 10 static int
10 run(SchedTask *s, void *rbuf, void *wbuf) 11 run_print(SchedTask *s, void *rbuf, void *wbuf)
11 { 12 {
12 unsigned long long *idata = (unsigned long long*)s->get_input(rbuf, 0); 13 WordCount *w = *(WordCount**)rbuf;
13 long task_num = (long)s->get_param(0); 14 unsigned long long *idata = w->o_data;
14 long status_num = (long)s->get_param(1); 15 // long task_num = w->task_num;
15 unsigned long long word_data[task_num]; 16 long status_num = w->status_num;
17 int out_task_num = w->out_task_num;
18
19 /*
20 * head_flag
21 * o_data[0]
22 * o_data[1]
23 *
24 */
25 unsigned long long word_data[2];
26
27 int flag_cal_sum = 0;
28 //printf("pad %d\n",pad);
29
30
31 /* head_tail_flag : task = 2 : 1
32 *
33 * head_tail_flag[2]
34 * ___________ __________
35 * | | |
36 * | head_flag | tail_fag |
37 * |___________|__________|
38 * [0] [1]
39 *
40 * |----------------------|
41 * unsigned long long
42 * 16byte
43 *
44 * 配列先頭の head_flag はみない
45 * 配列末尾の tail_flag はみない
46 * 担当範囲前の末尾文字が「改行と、スペース以外」(tail_flag = 1)で、
47 * 担当範囲の先頭文字が「改行とスペース」(head_flag = 0)の場合
48 * 単語数を +1 することで、整合性がとれる。
49 *
50 * ex.
51 * task_num 4
52 * head_tail_flag[8]
53 *
54 * 0 1 2 3 4 5 6 7
55 * ___ ___ ___ ___ ___ ___ ___ ___
56 * | h | t | h | t | h | t | h | t |
57 * |___|___|___|___|___|___|___|___|
58 * |-------|-------|-------|
59 * 比較 比較 比較
60 *
61 */
16 62
17 s->printf("start sum\n"); 63 s->printf("start sum\n");
18 64
19 for (int i = 0; i < status_num; i++) { 65 for (int i = 0; i < status_num; i++) {
20 word_data[i] = 0; 66 word_data[i] = 0;
21 } 67 }
22 68
23 for (int i = 0; i < task_num*status_num; i += status_num) { 69 for (int i = 0; i < out_task_num ; i++) {
24 for (int j = 0; j < status_num; j++) { 70 word_data[0] += idata[i*w->out_size+0];
25 word_data[j] += idata[i+j]; 71 word_data[1] += idata[i*w->out_size+1];
26 } 72 unsigned long long *head_tail_flag =
73 &idata[i*w->out_size+2];
74 if((i!=out_task_num-1)&&
75 (head_tail_flag[1] == 1) && (head_tail_flag[4] == 0)) {
76 flag_cal_sum++;
77 }
27 } 78 }
28 79
29 for (int i = 0; i < status_num; i++) { 80 word_data[0] += flag_cal_sum;
30 s->printf("%llu ",word_data[status_num - i - 1]); 81
82 for (int i = status_num-1; i >=0; i--) {
83 s->printf("%llu ",word_data[i]);
31 } 84 }
85
86 //printf("j = %d\n",j);
87
32 88
33 s->printf("\n"); 89 s->printf("\n");
34 90
35
36 return 0; 91 return 0;
37 } 92 }