Mercurial > hg > Members > kono > Cerium
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 } |