Mercurial > hg > Game > Cerium
diff example/regex_mas/main.cc @ 1680:e44e5a18392c draft
fix regex_mas.
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 Aug 2013 05:00:04 +0900 |
parents | 342c36d5582e |
children | 7bc7780e8ece |
line wrap: on
line diff
--- a/example/regex_mas/main.cc Sun Aug 04 02:14:18 2013 +0900 +++ b/example/regex_mas/main.cc Tue Aug 06 05:00:04 2013 +0900 @@ -12,7 +12,7 @@ #include "Func.h" #include "WordCount.h" -#define EXTRA_LENGTH 2 //多く取ってくる文字数(search word length - 1) +#define EXTRA_LENGTH 4 //多く取ってくる文字数(search word length - 1) /* ;TODO * PS3でCPU数が2以上の時に、あまりが計算されてない @@ -230,18 +230,25 @@ int a = w->task_spwaned++; if (w->size < size) size = w->size; - int length = size/sizeof(char); + + int set_one_task_length = size/sizeof(char); const int ONE_TASK_LENGTH = w->division_size; - - t_exec[k] = task_array[k]->next_task_array(TASK_EXEC,t_exec[k]); const int ONE_LOOP_LENGTH = array_task_num*spe_num*ONE_TASK_LENGTH; const int ARRAY_LENGTH_SIZE = spe_num * ONE_TASK_LENGTH; int offset = ONE_LOOP_LENGTH * i + ARRAY_LENGTH_SIZE*j + ONE_TASK_LENGTH*k; - t_exec[k]->set_param(0,(memaddr)length); - t_exec[k]->set_param(1,(memaddr)offset); - if(size != w->size){ //ラストのタスクかどうかの判定 + + t_exec[k] = task_array[k]->next_task_array(TASK_EXEC,t_exec[k]); + t_exec[k]->set_param(0,(memaddr)offset); + + /*set_inDataで多めに文字を取ってきているが、 + *Exec.ccに文字列検索をさせるときにはset_param(1)で + *設定した文字列しか検索してくれないようになっている。 + */ + if(size != w->size){ //最後のタスクかどうかの判定 + t_exec[k]->set_param(1,(memaddr)set_one_task_length + EXTRA_LENGTH); t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size+EXTRA_LENGTH); }else{ + t_exec[k]->set_param(1,(memaddr)set_one_task_length); t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size); } t_exec[k]->set_outData(0,w->o_data + a*w->out_size, w->division_out_size); @@ -371,8 +378,8 @@ w->division_size = w->size; } - /* "word num" and "line num" */ - w->status_num = 2; + /* exec output only "match_num" */ + w->status_num = 1; /* taskの数 */ w->task_num = w->size / w->division_size; w->task_num = w->task_num + (w->division_size*w->task_num < w->size);