diff example/fileread/main.cc @ 1864:7211816380bd draft

implement my_mmap in fileread
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Tue, 24 Dec 2013 19:16:49 +0900
parents 9e96c8c52574
children a009522ed6c6
line wrap: on
line diff
--- a/example/fileread/main.cc	Tue Dec 24 17:56:24 2013 +0900
+++ b/example/fileread/main.cc	Tue Dec 24 19:16:49 2013 +0900
@@ -3,6 +3,8 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <sys/time.h>
+#include <sys/types.h>
+#include <sys/mman.h>
 #include "TaskManager.h"
 #include "SchedTask.h"
 #include "Func.h"
@@ -12,6 +14,7 @@
 static double st_time;
 static double ed_time;
 static int spe_num = 1;
+int divide_read_flag = 0;
 static CPU_TYPE spe_cpu = SPE_ANY;
 static int DIVISION_SIZE = 4096 * 4;
 
@@ -31,6 +34,11 @@
    CPU_TYPE cpu;
 } Fileread, *FilereadPtr;
 
+typedef struct {
+    caddr_t file_mmap;
+    off_t size;
+} st_mmap_t;
+
 SchedDefineTask1(RUN_BLOCKS,run16);
 
 static int
@@ -94,6 +102,8 @@
             spe_num = atoi(argv[i+1]);
         } else if (strcmp(argv[i], "-file") == 0) {
             filename = argv[i+1];
+        } else if (strcmp(argv[i], "-dr") == 0) {
+            divide_read_flag = 1;
         }
     }
 
@@ -105,6 +115,36 @@
     return filename;
 }
 
+
+SchedDefineTask1(MMAP,my_mmap);
+
+static int
+my_mmap(SchedTask *s, void *in, void *out)
+{
+
+    FilereadPtr fr = (FilereadPtr)in;
+    /*マッピングだよ!*/
+
+    int map = MAP_PRIVATE;
+    st_mmap_t st_mmap;
+
+    int fd = fr->fd;
+    st_mmap.size = fr->filesize;
+    st_mmap.file_mmap = (char*)mmap(NULL,st_mmap.size,PROT_READ,map,fd,(off_t)0);
+    if (st_mmap.file_mmap == (caddr_t)-1) {
+        fprintf(stderr,"Can't mmap file\n");
+
+        perror(NULL);
+        exit(0);
+    }
+
+    //printf("%s\n",st_mmap.file_mmap);
+    printf("in mmap\n");
+
+    return 0;
+}
+
+
 static void
 run_start(TaskManager *manager,char *filename)
 {
@@ -135,8 +175,14 @@
     printf("one_task_size: %ld\n",fr->division_size);
     printf("task_num     : %ld\n",fr->task_num);
 
-    HTaskPtr run = manager->create_task(RUN_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),0,0);
-    run->spawn();
+    if (divide_read_flag != 0) {
+        HTaskPtr run = manager->create_task(RUN_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),0,0);
+        run->spawn();
+    }else {
+        //my_mmap(filename, fd, fr);
+        HTaskPtr run = manager->create_task(MMAP , (memaddr)&fr->self, sizeof(memaddr),0,0);
+        run->spawn();
+    }
 }