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 }