Mercurial > hg > Game > Cerium
annotate example/fileread/main.cc @ 2048:6796d85f3d6b draft
remove error
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 28 Jan 2016 00:05:49 +0900 |
parents | d703157bb280 |
children |
rev | line source |
---|---|
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 #include <stdio.h> |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 #include <stdlib.h> |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 #include <string.h> |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 #include <sys/stat.h> |
1722
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
5 #include <sys/time.h> |
1864
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
6 #include <sys/types.h> |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
7 #include <sys/mman.h> |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 #include "TaskManager.h" |
1827 | 9 #include "SchedTask.h" |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 #include "Func.h" |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
11 #include "FileRead.h" |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 extern void task_init(void); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
1722
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
15 static double st_time; |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
16 static double ed_time; |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 static int spe_num = 1; |
1876
5e17ab506299
change CPU_TYPE SPE_ANY to IO/0 ( cannot running )
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1871
diff
changeset
|
18 static CPU_TYPE spe_cpu = IO_0; |
1984
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
19 static int READ_TYPE = MY_MMAP; |
1962 | 20 static int DIVISION_SIZE = 1024*256*256; |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 extern TaskManager *manager; |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 const char *usr_help_str = "Usage: ./fileread [-cpu cpu_num] [-file filename]\n\ |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 -cpu Number of SPE (default 1) \n\ |
1722
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
25 -file Opne file\n"; |
1824 | 26 |
1864
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
27 typedef struct { |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
28 caddr_t file_mmap; |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
29 off_t size; |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
30 } st_mmap_t; |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
31 |
1909
c228dbede5df
rename Task name in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1876
diff
changeset
|
32 SchedDefineTask1(RUN_READ_BLOCKS,read_run); |
1824 | 33 |
34 static int | |
1909
c228dbede5df
rename Task name in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1876
diff
changeset
|
35 read_run(SchedTask *manager, void *in, void *out) { |
1825
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
36 |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
37 FileReadPtr fr = (FileReadPtr)in; |
1868
14225fec047c
implements mmap read & divide read(pread) in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
38 char* read_text = (char*)out; |
1824 | 39 HTaskPtr wait; |
40 | |
1827 | 41 for (int i = 0; (fr->left_size > 0) && (i < fr->task_blocks); i++) { |
1824 | 42 HTaskPtr read = manager->create_task(Read_task); |
1825
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
43 read->set_cpu(fr->cpu); |
1824 | 44 |
1828
f0dab5fffe7a
cannot running probrem resolve in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1827
diff
changeset
|
45 if (i == fr->task_blocks / 2) wait = read; |
1824 | 46 |
47 read->set_param(0,(long)fr->task_number); //生成するTaskが何番目か | |
48 read->set_param(1,(long)fr->division_size); //1つのタスクが読み込む量 | |
49 if(fr->left_size <= fr->division_size){ | |
50 read->set_param(2,(long)fr->left_size); | |
51 }else{ | |
52 read->set_param(2,(long)fr->division_size); | |
53 } | |
1840
0305732326ca
change *fd to fd & change set_inData to set_param
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1828
diff
changeset
|
54 read->set_param(3,(long)fr->fd); //fdの番号の受け渡し |
1868
14225fec047c
implements mmap read & divide read(pread) in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
55 |
14225fec047c
implements mmap read & divide read(pread) in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
56 read->set_outData(0,read_text + fr->task_number*fr->division_size, fr->division_size); |
1867
7706faa6b0c9
resolve waitfor in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
57 |
7706faa6b0c9
resolve waitfor in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
58 fr->t_print->wait_for(read); |
1824 | 59 read->spawn(); |
60 | |
61 fr->left_size -= fr->division_size; | |
1827 | 62 fr->task_number++; |
1824 | 63 } |
64 | |
65 if (fr->left_size > 0) { | |
1871 | 66 |
1909
c228dbede5df
rename Task name in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1876
diff
changeset
|
67 HTaskPtr next = manager->create_task(RUN_READ_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),read_text,fr->filesize); |
1871 | 68 |
1867
7706faa6b0c9
resolve waitfor in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
69 fr->t_print->wait_for(next); |
1825
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
70 next->wait_for(wait); |
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
71 next->spawn(); |
1824 | 72 } |
1825
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
73 return 0; |
1824 | 74 } |
1722
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
75 |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
76 static double |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
77 getTime(){ |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
78 struct timeval tv; |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
79 gettimeofday(&tv,NULL); |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
80 return tv.tv_sec + (double)tv.tv_usec*1e-6; |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
81 } |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
82 |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
83 void |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
84 TMend(TaskManager *manager) |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
85 { |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
86 ed_time = getTime(); |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
87 printf("Time: %0.6f\n",ed_time-st_time); |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
88 } |
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
89 |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 static char* |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 init(int argc, char **argv) |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 { |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 char *filename = 0; |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 for (int i = 1; argv[i]; ++i) { |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 if (strcmp(argv[i], "-cpu") == 0) { |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 spe_num = atoi(argv[i+1]); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 } else if (strcmp(argv[i], "-file") == 0) { |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 filename = argv[i+1]; |
1984
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
102 } else if (strcmp(argv[i], "-br") == 0) { |
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
103 READ_TYPE = BLOCKED_READ; |
1985
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
104 } else if (strcmp(argv[i], "-r") == 0) { |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
105 READ_TYPE = MY_READ; |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
106 } else if (strcmp(argv[i], "-m") == 0) { |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
107 READ_TYPE = MY_MMAP; |
1740 | 108 } |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 } |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 if (filename==0){ |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 puts(usr_help_str); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 exit(1); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 } |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 return filename; |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 } |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 |
1864
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
119 |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
120 SchedDefineTask1(MMAP,my_mmap); |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
121 |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
122 static int |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
123 my_mmap(SchedTask *s, void *in, void *out) |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
124 { |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
125 |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
126 FileReadPtr fr = (FileReadPtr)in; |
1864
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
127 /*マッピングだよ!*/ |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
128 |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
129 int fd = fr->fd; |
1985
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
130 read(fd, fr->read_text, fr->filesize); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
131 if (fr->read_text == (caddr_t)-1) { |
1864
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
132 fprintf(stderr,"Can't mmap file\n"); |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
133 |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
134 perror(NULL); |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
135 exit(0); |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
136 } |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
137 |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
138 return 0; |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
139 } |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
140 |
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
141 |
1985
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
142 SchedDefineTask1(READ,my_read); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
143 |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
144 static int |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
145 my_read(SchedTask *s, void *in, void *out) |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
146 { |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
147 |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
148 FileReadPtr fr = (FileReadPtr)in; |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
149 /*マッピングだよ!*/ |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
150 |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
151 int map = MAP_PRIVATE; |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
152 |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
153 int fd = fr->fd; |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
154 fr->read_text = (char*)mmap(NULL,fr->filesize,PROT_READ,map,fd,(off_t)0); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
155 if (fr->read_text == (caddr_t)-1) { |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
156 fprintf(stderr,"Can't mmap file\n"); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
157 |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
158 perror(NULL); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
159 exit(0); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
160 } |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
161 |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
162 return 0; |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
163 } |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
164 |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 static void |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 run_start(TaskManager *manager,char *filename) |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 { |
1840
0305732326ca
change *fd to fd & change set_inData to set_param
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1828
diff
changeset
|
168 long fd = (long)manager->allocate(sizeof(long)); |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 struct stat *sb = (struct stat*)manager->allocate(sizeof(struct stat)); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 |
1840
0305732326ca
change *fd to fd & change set_inData to set_param
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1828
diff
changeset
|
171 if ((fd=open(filename,O_RDONLY,0666))==0) { |
1827 | 172 fprintf(stderr,"can't open %s\n",filename); |
1740 | 173 } |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 |
1840
0305732326ca
change *fd to fd & change set_inData to set_param
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1828
diff
changeset
|
175 if (fstat(fd,sb)) { |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 fprintf(stderr,"can't fstat %s\n",filename); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 } |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
179 FileReadPtr fr = (FileReadPtr)manager->allocate(sizeof(FileRead)); |
1802
e08f6133f5d7
change iterator to spawn in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1740
diff
changeset
|
180 |
1861
9e96c8c52574
some fix in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1840
diff
changeset
|
181 fr->self = fr; |
1827 | 182 fr->fd = fd; |
183 fr->cpu = spe_cpu; | |
1824 | 184 fr->task_blocks = 16; |
185 fr->filesize = sb->st_size; | |
1825
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
186 fr->left_size = fr->filesize; |
1824 | 187 fr->division_size = DIVISION_SIZE; |
188 fr->task_num = fr->filesize / DIVISION_SIZE; | |
189 fr->task_num += ((fr->filesize % DIVISION_SIZE) != 0); | |
1802
e08f6133f5d7
change iterator to spawn in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1740
diff
changeset
|
190 |
1825
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
191 printf("filesize : %ld\n",fr->filesize); |
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
192 printf("one_task_size: %ld\n",fr->division_size); |
82c2b9eec625
remove error and warning fileread(but cannot running)
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1824
diff
changeset
|
193 printf("task_num : %ld\n",fr->task_num); |
1740 | 194 |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
195 HTaskPtr run = NULL; |
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
196 HTaskPtr t_print = manager->create_task(Print_task, (memaddr)&fr->self, sizeof(memaddr),0,0); |
1867
7706faa6b0c9
resolve waitfor in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
197 fr->t_print = t_print; |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
198 |
1984
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
199 if (READ_TYPE == MY_MMAP) { |
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
200 run = manager->create_task(MMAP , (memaddr)&fr->self, sizeof(memaddr),0,0); |
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
201 printf("+ in mmap mode +\n"); |
1985
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
202 }else if (READ_TYPE == MY_READ) { |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
203 run = manager->create_task(READ , (memaddr)&fr->self, sizeof(memaddr),0,0); |
d703157bb280
add Read mode in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1984
diff
changeset
|
204 printf("+ in Read mode +\n"); |
1984
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
205 }else { |
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
206 //my_mmap(filename, fd, fr); |
7bea670cdba0
divide read flag change enum type
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1962
diff
changeset
|
207 printf("+ in Blocked Read mode +\n"); |
1868
14225fec047c
implements mmap read & divide read(pread) in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
208 char *read_text = (char*)manager->allocate(fr->filesize); |
1909
c228dbede5df
rename Task name in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1876
diff
changeset
|
209 run = manager->create_task(RUN_READ_BLOCKS, (memaddr)&fr->self, sizeof(memaddr),read_text,fr->filesize); |
1868
14225fec047c
implements mmap read & divide read(pread) in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
210 fr->read_text = read_text; |
1864
7211816380bd
implement my_mmap in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1861
diff
changeset
|
211 } |
1867
7706faa6b0c9
resolve waitfor in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1866
diff
changeset
|
212 |
1865
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
213 t_print->wait_for(run); |
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
214 run->spawn(); |
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
215 |
a009522ed6c6
add FileRead.h
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1864
diff
changeset
|
216 t_print->spawn(); |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 } |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 int |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 TMmain(TaskManager *manager, int argc, char *argv[]) |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 { |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 char *filename = 0; |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 filename = init(argc,argv); |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 if (filename < 0) { |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 return -1; |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 } |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 task_init(); |
1722
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
231 st_time = getTime(); |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 run_start(manager, filename); |
1722
264a36d30f7f
add time measurement function in fileread
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1721
diff
changeset
|
233 manager->set_TMend(TMend); |
1721
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 return 0; |
797e3ec1ca74
add fileread only example
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 } |