changeset 1949:f3e9f811c387 draft

change some variables types int to long
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Thu, 06 Feb 2014 16:30:41 +0900
parents 6b03da068fbe
children 1f297d3eacb1 da22fc4db5b2
files example/regex_mas/WordCount.h example/regex_mas/main.cc example/regex_mas/ppe/Read.cc
diffstat 3 files changed, 35 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/example/regex_mas/WordCount.h	Thu Feb 06 01:23:17 2014 +0900
+++ b/example/regex_mas/WordCount.h	Thu Feb 06 16:30:41 2014 +0900
@@ -2,26 +2,26 @@
 typedef struct wordCount {
     struct wordCount *self;
     /* read task variable */
-    int fd;
+    long fd;
     long long read_filesize;
     CPU_TYPE read_cpu;
 
     long long size;             // remaining file size
-    int division_size;    // for each word count task
-    int division_out_size;
-    int out_size;
-    int out_size_;
-    int task_num;         // remaining task count
-    int task_blocks;      // spawn task one at a time
-    int status_num;
-    int task_spawned;
+    long division_size;    // for each word count task
+    long division_out_size;
+    long out_size;
+    long out_size_;
+    long task_num;         // remaining task count
+    long task_blocks;      // spawn task one at a time
+    long status_num;
+    long task_spawned;
     unsigned long long *o_data;
-    int out_task_num;
+    long out_task_num;
     char *file_mmap;
     long long file_size;
 
     /*set input Data variables*/
-    int last_task_size;
+    long last_task_size;
     unsigned char *search_word;
     int *BMskip_table;
     int search_word_len;
--- a/example/regex_mas/main.cc	Thu Feb 06 01:23:17 2014 +0900
+++ b/example/regex_mas/main.cc	Thu Feb 06 16:30:41 2014 +0900
@@ -169,31 +169,36 @@
 {
     WordCount *w = *(WordCount **)in;
 
-    HTaskPtr t_read = NULL;
+    HTaskPtr t_read = manager->create_task(READ_TASK);
+    w->t_print->wait_for(t_read);
+    t_read->set_cpu(read_spe_cpu);
+    t_read->set_param(0,w->fd);
 
     if (w->task_num < w->task_blocks) {
+        t_read->set_param(1,w->task_spawned*w->division_size);
+        t_read->set_outData(0, w->file_mmap + w->task_spawned * w->division_size, w->task_blocks * w->division_size);
+
         // last case
         while (w->size >= w->division_size)
             run_tasks(manager,w,w->task_num,t_read,w->t_print, w->division_size + w->extra_len);
         // remaining data
         while (w->size>0)
             run_tasks(manager,w,1,t_read,w->t_print, w->size);
+
+        t_read->set_param(2,w->task_spawned*w->division_size);
+        t_read->spawn();
         // printf("run16 last %d\n",w->task_num);
     } else {
-        t_read = manager->create_task(READ_TASK, (memaddr)&w->self,sizeof(memaddr),0,0);
-
         HTaskPtr t_next = manager->create_task(RUN_TASK_BLOCKS,
                                                (memaddr)&w->self,sizeof(memaddr),0,0);
         w->t_print->wait_for(t_next);
-        t_read->set_cpu(read_spe_cpu);
-        long task_spawned = w->task_spawned;
-        t_read->set_param(0,task_spawned*w->division_size);
-        t_read->set_outData(0, w->file_mmap + task_spawned * w->division_size, task_spawned * w->division_size);
+
+        t_read->set_param(1,w->task_spawned*w->division_size);
+        t_read->set_outData(0, w->file_mmap + w->task_spawned * w->division_size, w->task_blocks * w->division_size);
 
-        run_tasks(manager,w, w->task_blocks,t_read, t_next, w->division_size + w->extra_len);
+        run_tasks(manager,w, w->task_blocks, t_read, t_next, w->division_size + w->extra_len);
 
-        task_spawned = w->task_spawned;
-        t_read->set_param(1,task_spawned*w->division_size);
+        t_read->set_param(2,w->task_spawned*w->division_size);
 
         t_read->spawn();
         t_next->spawn();
@@ -257,7 +262,7 @@
 
 
     /* prepare BMSearch*/
-    int *skip = (int*)manager->allocate(256 * sizeof(int));
+    int *skip = (int*)manager->allocate(256 * sizeof(int));  // 文字列に対応した table を用意
     w->search_word = search_word;
     w->search_word_len = search_word_len;
     w->BMskip_table = create_BMskiptable(w->search_word, w->search_word_len, skip);
@@ -282,7 +287,7 @@
         w->division_size = w->size;
     }
 
-    printf("division_size %d\n",w->division_size);
+    printf("division_size %ld\n",w->division_size);
 
     /* "word num" and "line num" */
     w->status_num = 2;
@@ -298,8 +303,8 @@
     }
 
     w->out_task_num = out_task_num;
-    printf("task_num %d\n",w->task_num);
-    printf("out_task_num %d\n",w->out_task_num);
+    printf("task_num %ld\n",w->task_num);
+    printf("out_task_num %ld\n",w->out_task_num);
 
     /* out用のdivision_size. statusが2つなので、あわせて16byteになるように、long long(4byte)を使用 */
 
--- a/example/regex_mas/ppe/Read.cc	Thu Feb 06 01:23:17 2014 +0900
+++ b/example/regex_mas/ppe/Read.cc	Thu Feb 06 16:30:41 2014 +0900
@@ -17,18 +17,17 @@
 static int
 read_task(SchedTask *s, void *rbuf, void *wbuf)
 {
-    WordCount *w = *(WordCount **)rbuf;
-    long start_read = (long)s->get_param(0);
-    long end_read = (long)s->get_param(1);
+    long fd = (long)s->get_param(0);
+    long start_read_position = (long)s->get_param(1);
+    long end_read_position = (long)s->get_param(2) - 1;
     char *read_text = (char*)s->get_output(wbuf,0);
-    long fd = w->fd;
 
-    long read_size = end_read - start_read;
+    long read_size = end_read_position - start_read_position + 1;
 
     //char *read_text = (char*)s->get_output(wbuf,0);
     //s->printf("[read No %d : wbuf addr 0x%llx]\n",task_number,read_text);
 
-    pread(fd, read_text, read_size , start_read);
+    pread(fd, read_text, read_size , start_read_position);
 
     //s->printf("[start read task No. %d]\n",task_number);
     //s->printf("%s\n",read_text);