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