Mercurial > hg > Game > Cerium
view example/word_count/ppe/Print.cc @ 2054:2e7a6f40672f draft
add param(4) in FileMapReduce.cc
author | masa |
---|---|
date | Fri, 29 Jan 2016 15:56:28 +0900 |
parents | 030b8efcf357 |
children |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include "Print.h" #include "Func.h" #include "FileMapReduce.h" #define STATUS_NUM 2 /* これは必須 */ SchedDefineTask1(Print,run_print); static int run_print(SchedTask *s, void *rbuf, void *wbuf) { MapReduce *w = (MapReduce*)s->get_input(0); unsigned long long *idata = w->o_data; long status_num = STATUS_NUM; int out_task_num = w->task_num; /* * head_flag * o_data[0] * o_data[1] * */ unsigned long long word_data[STATUS_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 2 * head_tail_flag[5] * * 0 1 | 2 3 4 5 * ___ ___ ___ ___ ___ ___ ___ ___ * | W | L | h | t | W | L | h | t | * |___|___|___|___|___|___|___|___| * | * |-----------| * 比較 * */ s->printf("start sum\n"); for (int i = 0; i < STATUS_NUM; i++) { word_data[i] = 0; } int out_size = w->division_out_size / sizeof(unsigned long long); for (int i = 0; i < out_task_num ; i++) { word_data[0] += idata[i*out_size+0]; // printf("idata[%d]=%lld\n",i*w->out_size+0,idata[i*w->out_size+0]); word_data[1] += idata[i*out_size+1]; unsigned long long *head_tail_flag = &idata[i*out_size+2]; if((i!=out_task_num-1)&& (head_tail_flag[1] == 1) && (head_tail_flag[4] == 0)) { flag_cal_sum++; } } 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; }