Mercurial > hg > Members > kono > Cerium
view example/word_count_test/ppe/Print.cc @ 666:4615489c5faa
simplify word_count
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 03 Dec 2009 02:11:31 +0900 |
parents | 68f0253f5a71 |
children | d753b4f6b129 |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include "Print.h" #include "Func.h" /* これは必須 */ SchedDefineTask(Print); static int run(SchedTask *s, void *rbuf, void *wbuf) { unsigned long long *idata = (unsigned long long*)s->get_input(rbuf, 0); unsigned long long *head_tail_flag= (unsigned long long*)s->get_input(rbuf,1); long task_num = (long)s->get_param(0); long status_num = (long)s->get_param(1); int out_task_num = (int)s->get_param(2); int pad = (int)s->get_param(3); unsigned long long word_data[task_num]; int flag_cal_sum = 0; //printf("pad %d\n",pad); /* head_tail_flag : task = 2 : 1 * * head_tail_flag[2] * ___________ __________ * | | | * | head_flag | tail_fag | * |___________|__________| * [0] [1] * * |----------------------| * unsigned long long * 16byte * * 配列先頭の head_flag はみない * 配列末尾の tail_flag はみない * 担当範囲前の末尾文字が「改行と、スペース以外」(tail_flag = 1)で、 * 担当範囲の先頭文字が「改行とスペース」(head_flag = 0)の場合 * 単語数を +1 することで、整合性がとれる。 * * ex. * task_num 4 * head_tail_flag[8] * * 0 1 2 3 4 5 6 7 * ___ ___ ___ ___ ___ ___ ___ ___ * | h | t | h | t | h | t | h | t | * |___|___|___|___|___|___|___|___| * |-------|-------|-------| * 比較 比較 比較 * */ for (int i = 1; i < out_task_num * pad - pad; i += pad) { //printf("%llu ",head_tail_flag[i]); //printf("%llu\n",head_tail_flag[i+1]); if((head_tail_flag[i] == 1) && (head_tail_flag[i+1] == 0)) { flag_cal_sum++; } } s->printf("start sum\n"); for (int i = 0; i < status_num; i++) { word_data[i] = 0; } for (int i = 0; i < task_num*status_num; i += status_num) { for (int j = 0; j < status_num; j++) { word_data[j] += idata[i+j]; } } word_data[0] += flag_cal_sum; for (int i = status_num-1; i >= 0; i--) { s->printf("%llu ",word_data[i]); } //printf("j = %d\n",j); s->printf("\n"); return 0; }