Mercurial > hg > Game > Cerium
comparison example/regex_mas/main.cc @ 1647:0dcdaa4dfecb draft
fix bugs regex/mas
author | Masa <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 Jun 2013 20:44:27 +0900 |
parents | 4698c92bf2ca |
children | 89b24515fabf |
comparison
equal
deleted
inserted
replaced
1646:ab6b11476e02 | 1647:0dcdaa4dfecb |
---|---|
10 #include "TaskManager.h" | 10 #include "TaskManager.h" |
11 #include "SchedTask.h" | 11 #include "SchedTask.h" |
12 #include "Func.h" | 12 #include "Func.h" |
13 #include "WordCount.h" | 13 #include "WordCount.h" |
14 | 14 |
15 #define EXTRA_LENGTH 4 //多く取ってくる文字数(search word length - 1) | 15 #define EXTRA_LENGTH 2 //多く取ってくる文字数(search word length - 1) |
16 | 16 |
17 /* ;TODO | 17 /* ;TODO |
18 * PS3でCPU数が2以上の時に、あまりが計算されてない | 18 * PS3でCPU数が2以上の時に、あまりが計算されてない |
19 */ | 19 */ |
20 | 20 |
172 if (fstat(fd,&sb)) { | 172 if (fstat(fd,&sb)) { |
173 fprintf(stderr,"can't fstat %s\n",filename); | 173 fprintf(stderr,"can't fstat %s\n",filename); |
174 } | 174 } |
175 | 175 |
176 /*sizeをページングサイズの倍数にあわせる*/ | 176 /*sizeをページングサイズの倍数にあわせる*/ |
177 st_mmap.size = fix_byte(sb.st_size,4096 + EXTRA_LENGTH); | 177 st_mmap.size = fix_byte(sb.st_size,4096); |
178 | 178 |
179 st_mmap.file_mmap = (char*)mmap(NULL,st_mmap.size,PROT_READ,map,fd,(off_t)0); | 179 st_mmap.file_mmap = (char*)mmap(NULL,st_mmap.size,PROT_READ,map,fd,(off_t)0); |
180 if (st_mmap.file_mmap == (caddr_t)-1) { | 180 if (st_mmap.file_mmap == (caddr_t)-1) { |
181 fprintf(stderr,"Can't mmap file\n"); | 181 fprintf(stderr,"Can't mmap file\n"); |
182 perror(NULL); | 182 perror(NULL); |
267 int length = size/sizeof(char); | 267 int length = size/sizeof(char); |
268 const int ONE_TASK_LENGTH = w->division_size; | 268 const int ONE_TASK_LENGTH = w->division_size; |
269 | 269 |
270 t_exec[k] = task_array[k]->next_task_array(TASK_EXEC,t_exec[k]); | 270 t_exec[k] = task_array[k]->next_task_array(TASK_EXEC,t_exec[k]); |
271 t_exec[k]->set_param(0,(memaddr)length); | 271 t_exec[k]->set_param(0,(memaddr)length); |
272 t_exec[k]->set_param(0,(memaddr)length); | |
272 const int ONE_LOOP_LENGTH = array_task_num*spe_num*ONE_TASK_LENGTH; | 273 const int ONE_LOOP_LENGTH = array_task_num*spe_num*ONE_TASK_LENGTH; |
273 const int ARRAY_LENGTH_SIZE = spe_num * ONE_TASK_LENGTH; | 274 const int ARRAY_LENGTH_SIZE = spe_num * ONE_TASK_LENGTH; |
274 int offset = ONE_LOOP_LENGTH * i + ARRAY_LENGTH_SIZE*j + ONE_TASK_LENGTH*k; | 275 int offset = ONE_LOOP_LENGTH * i + ARRAY_LENGTH_SIZE*j + ONE_TASK_LENGTH*k; |
275 t_exec[k]->set_param(1,(memaddr)offset); | 276 t_exec[k]->set_param(1,(memaddr)offset); |
276 //printf("%s\n",search_word); | 277 //printf("%s\n",search_word); |
277 t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size + EXTRA_LENGTH); //ここっぽい | 278 if(size != w->size){ //ラストのタスクかどうかの判定 |
279 t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size+EXTRA_LENGTH); | |
280 }else{ | |
281 t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size); | |
282 } | |
278 t_exec[k]->set_outData(0,w->o_data + a*w->out_size, w->division_out_size); | 283 t_exec[k]->set_outData(0,w->o_data + a*w->out_size, w->division_out_size); |
279 | 284 |
280 w->size -= size; | 285 w->size -= size; |
281 w->task_num--; | 286 w->task_num--; |
282 } | 287 } |