comparison example/test/spe/_Print.cc_.cc @ 0:04e28d8d3c6f

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