# HG changeset patch # User Masataka Kohagura # Date 1378973632 -32400 # Node ID aff937b6a26a47b7b234ecdaf4b42053decd0a63 # Parent c595245aa59e43c6439b0273d1ba81271f67fffb fix diff -r c595245aa59e -r aff937b6a26a example/regex_mas/main.cc --- a/example/regex_mas/main.cc Tue Aug 20 13:34:20 2013 +0900 +++ b/example/regex_mas/main.cc Thu Sep 12 17:13:52 2013 +0900 @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include "TaskManager.h" #include "SchedTask.h" #include "Func.h" @@ -108,7 +110,7 @@ HTask **task_array = (HTask**)manager->allocate(sizeof(HTask*)*spe_num); Task **t_exec = (Task**)manager->allocate(sizeof(Task*)*spe_num); - for (int k = 0; k < spe_num; k++) { //このfor文いらない?? + for (int k = 0; k < spe_num; k++) { task_array[k] = manager->create_task_array(TASK_EXEC,array_task_num,1,1,1); t_exec[k] = 0; if (all) { @@ -134,10 +136,6 @@ 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); @@ -145,6 +143,7 @@ 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); w->size -= size; @@ -300,7 +299,7 @@ (memaddr)&w->self,sizeof(memaddr),0,0); w->t_print = t_print; - for(int i = 0;i<20;i++) { + for(int i = 0;i<2;i++) { /* Task を task_blocks ずつ起動する Task */ /* serialize されていると仮定する... */ HTaskPtr t_exec = manager->create_task(RUN_TASK_BLOCKS, diff -r c595245aa59e -r aff937b6a26a example/regex_mas/ppe/Exec.cc --- a/example/regex_mas/ppe/Exec.cc Tue Aug 20 13:34:20 2013 +0900 +++ b/example/regex_mas/ppe/Exec.cc Thu Sep 12 17:13:52 2013 +0900 @@ -1,5 +1,8 @@ #include #include +#include +#include +#include #include "Exec.h" #include "Func.h" #include "SchedTask.h" @@ -12,19 +15,28 @@ int BM_method(unsigned char *text,int *offset,int *text_length, unsigned char *pattern,unsigned long long *match_string) { - int skip[256]; + using std::vector; + //int skip[256]; int text_len = (long int)text_length; int pattern_len = strlen((char *)pattern); int i = 0; int match_counter = 0; - for (i = 0; i < 256; ++i){ - skip[i] = pattern_len; - } + std::vector vecSkipTable(256,pattern_len); + //for (i = 0; i < 256; ++i){ + // skip[i] = pattern_len; + //} - for (i = 0; i < pattern_len-1 ; ++i){ - skip[(int)pattern[i]] = pattern_len - i - 1; - } + vecSkipTable[100] = 4; + vecSkipTable[111] = 3; + vecSkipTable[105] = 2; + vecSkipTable[110] = 1; + + //for (i = 0; i < pattern_len-1 ; ++i){ + // skip[(int)pattern[i]] = pattern_len - i - 1; + //} + + i = pattern_len - 1; @@ -37,7 +49,8 @@ --i; --j; } - i = i + max((int)skip[(int)text[i]],pattern_len - j); + //i = i + max((int)skip[(int)text[i]],pattern_len - j); + i = i + max((int)vecSkipTable[(int)text[i]],pattern_len - j); } return match_counter; } @@ -49,6 +62,7 @@ unsigned long long *o_data = (unsigned long long*)wbuf; int *offset = (int*)s->get_param(0); int *length = (int*)s->get_param(1); + //unsigned char *search_word = (unsigned char*)s->get_input(2); unsigned char search_word[] = "doing"; o_data[0] = BM_method(i_data,offset,length,search_word,o_data);