changeset 1860:d250caefe0ff draft

Register divide read as Cerium task
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Mon, 23 Dec 2013 15:29:11 +0900
parents 3ddcd27d4dc2
children 9e96c8c52574
files example/regex_mas/Func.h example/regex_mas/main.cc example/regex_mas/ppe/Exec.cc example/regex_mas/ppe/Read.cc example/regex_mas/task_init.cc
diffstat 5 files changed, 37 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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,
 };
--- 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);
--- 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;
 }
--- 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;
 }
--- 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);
 }