# HG changeset patch # User Masataka Kohagura # Date 1387780151 -32400 # Node ID d250caefe0ffe3d3008d3a7b6c60547e884c6a32 # Parent 3ddcd27d4dc2bc4a524c51dede77f4cc24676a9c Register divide read as Cerium task diff -r 3ddcd27d4dc2 -r d250caefe0ff example/regex_mas/Func.h --- a/example/regex_mas/Func.h Mon Dec 23 00:02:53 2013 +0900 +++ b/example/regex_mas/Func.h Mon Dec 23 15:29:11 2013 +0900 @@ -3,6 +3,7 @@ Task_exec, Task_read, Task_print, + RUN_READ, RUN_TASK_BLOCKS, RUN_READ_BLOCKS, }; diff -r 3ddcd27d4dc2 -r d250caefe0ff example/regex_mas/main.cc --- a/example/regex_mas/main.cc Mon Dec 23 00:02:53 2013 +0900 +++ b/example/regex_mas/main.cc Mon Dec 23 15:29:11 2013 +0900 @@ -53,6 +53,7 @@ typedef struct fileread { struct filesize *self; + char *filename; long fd; long division_size; long task_number; @@ -111,9 +112,15 @@ return 0; } -static st_mmap_t -divide_read(TaskManager *manager,HTaskPtr run,char *filename, FilereadPtr fr) -{ +SchedDefineTask1(RUN_READ,divide_read); + +static int +//divide_read(TaskManager *manager,char *filename, FilereadPtr fr) +divide_read(SchedTask *manager, void *in, void *out) { + + FilereadPtr fr = (FilereadPtr)in; + char *filename = fr->filename; + st_mmap_t st_mmap; long fd = (long)manager->allocate(sizeof(long)); struct stat sb; @@ -140,12 +147,12 @@ fr->task_num += ((fr->filesize % 1024 * division) != 0); //HTaskPtr run = manager->create_task(RUN_READ_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),0,0); - run = manager->create_task(RUN_READ_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),0,0); + HTaskPtr run = manager->create_task(RUN_READ_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),0,0); run->spawn(); st_mmap.file_mmap = fr->read_text; - return st_mmap; + return 0; } static st_mmap_t @@ -302,14 +309,21 @@ run_start(TaskManager *manager, char *filename,unsigned char *search_word, int search_word_len) { HTaskPtr t_print; - HTaskPtr run = NULL; + HTaskPtr read_run = NULL; WordCount *w = (WordCount*)manager->allocate(sizeof(WordCount)); FilereadPtr fr = (FilereadPtr)manager->allocate(sizeof(FilereadPtr)); + //fr->self = fr; + fr->filename = filename; + st_mmap_t st_mmap; if (div_read != 0) { - st_mmap = divide_read(manager,run,filename,fr); + //st_mmap = divide_read(manager,filename,fr); + read_run = manager->create_task(RUN_READ, (memaddr)&fr->self, sizeof(memaddr),0,0); + read_run->spawn(); + printf("in divide read\n"); + }else { st_mmap = my_read(manager,filename); printf("in my read\n"); @@ -372,7 +386,7 @@ HTaskPtr t_exec = manager->create_task(RUN_TASK_BLOCKS, (memaddr)&w->self,sizeof(memaddr),0,0); - t_exec->wait_for(run); + if (read_run != NULL) t_exec->wait_for(read_run); t_print->wait_for(t_exec); t_exec->iterate(2); diff -r 3ddcd27d4dc2 -r d250caefe0ff example/regex_mas/ppe/Exec.cc --- a/example/regex_mas/ppe/Exec.cc Mon Dec 23 00:02:53 2013 +0900 +++ b/example/regex_mas/ppe/Exec.cc Mon Dec 23 15:29:11 2013 +0900 @@ -41,13 +41,16 @@ int sw_len = (int)s->get_inputSize(1); //get_param - //long task_count = (long)s->get_param(0); //何番目のtaskか - //s->printf("[task count: %lld]\n",task_count+1); + long task_count = (long)s->get_param(0); //何番目のtaskか + s->printf("[exec No: %lld]\n",task_count+1); unsigned long long *o_data = (unsigned long long*)s->get_output(wbuf,0); + o_data[0] = 0; o_data[0] = BM_method(i_data,length,search_word,sw_len,skip_table); + printf("match count : %llu\n",o_data[0]); + return 0; } diff -r 3ddcd27d4dc2 -r d250caefe0ff example/regex_mas/ppe/Read.cc --- a/example/regex_mas/ppe/Read.cc Mon Dec 23 00:02:53 2013 +0900 +++ b/example/regex_mas/ppe/Read.cc Mon Dec 23 15:29:11 2013 +0900 @@ -24,13 +24,14 @@ char *readtext = (char*)s->get_output(wbuf,0); - char *text = (char*)s->allocate(sizeof(char)*read_size + 1); + //char *text = (char*)s->allocate(sizeof(char)*read_size + 1); //char text[(long)read_size]; - text[(long)read_size + 1] = '\0'; + //text[(long)read_size + 1] = '\0'; + s->printf("[print : %lld]\n",task_number+1); - pread(fd, text, (long)read_size , division_size*task_number); + pread(fd, readtext, (long)read_size , division_size*task_number); - readtext = text; + //readtext = text; return 0; } diff -r 3ddcd27d4dc2 -r d250caefe0ff example/regex_mas/task_init.cc --- a/example/regex_mas/task_init.cc Mon Dec 23 00:02:53 2013 +0900 +++ b/example/regex_mas/task_init.cc Mon Dec 23 15:29:11 2013 +0900 @@ -8,8 +8,9 @@ #endif SchedExternTask(Task_print); SchedExternTask(Task_read); +SchedExternTask(RUN_READ); +SchedExternTask(RUN_READ_BLOCKS); SchedExternTask(RUN_TASK_BLOCKS); -SchedExternTask(RUN_READ_BLOCKS); /** * この関数は ../spe/spe-main と違って @@ -27,6 +28,7 @@ SchedRegister(Task_read); SchedRegister(Task_print); - SchedRegister(RUN_TASK_BLOCKS); + SchedRegister(RUN_READ); SchedRegister(RUN_READ_BLOCKS); + SchedRegister(RUN_TASK_BLOCKS); }