comparison TaskManager/Cuda/CudaScheduler.cc @ 1941:f19885ea776d draft

add wordcount for cuda. fix CudaScheduler. add makefile
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 04 Feb 2014 02:18:07 +0900
parents 67e50779feb4
children da22fc4db5b2
comparison
equal deleted inserted replaced
1936:e8ca9cae59fc 1941:f19885ea776d
91 } 91 }
92 for (int i=0; i<mem[cur-1].out_size; i++) { 92 for (int i=0; i<mem[cur-1].out_size; i++) {
93 if (mem[cur-1].event[i] != 0) 93 if (mem[cur-1].event[i] != 0)
94 cuEventDestroy(mem[cur-1].event[i]); 94 cuEventDestroy(mem[cur-1].event[i]);
95 mem[cur-1].event[i] = 0; 95 mem[cur-1].event[i] = 0;
96 if (mem[1-cur].memout[i]) 96 if (mem[cur-1].memout[i])
97 cuMemFree(mem[cur-1].memout[i]); 97 cuMemFree(mem[cur-1].memout[i]);
98 mem[cur-1].memout[i] = 0; 98 mem[cur-1].memout[i] = 0;
99 } 99 }
100 mem[cur-1].in_size = 0; 100 mem[cur-1].in_size = 0;
101 mem[cur-1].out_size = 0; 101 mem[cur-1].out_size = 0;
105 CudaScheduler::wait_for_event(CUevent* kernel_event, CudaBufferPtr cudabuffer, TaskListPtr taskList, int cur) { 105 CudaScheduler::wait_for_event(CUevent* kernel_event, CudaBufferPtr cudabuffer, TaskListPtr taskList, int cur) {
106 if (kernel_event[cur-1] == NOP_REPLY) { 106 if (kernel_event[cur-1] == NOP_REPLY) {
107 107
108 } else if (kernel_event[cur-1] != NULL){ 108 } else if (kernel_event[cur-1] != NULL){
109 ret = cuEventSynchronize(kernel_event[cur-1]); 109 ret = cuEventSynchronize(kernel_event[cur-1]);
110 110
111 if (ret!=0) { 111 if (ret!=0) {
112 error(convert_error_status(ret)); 112 error(convert_error_status(ret));
113 } 113 }
114 if (taskList!=NULL) { 114 if (taskList!=NULL) {
115 unsigned long start = 0; 115 unsigned long start = 0;
297 if (cur == 0) { 297 if (cur == 0) {
298 wait_for_event(kernel_event, cudabuffer, tasklist, STAGE); // to stop pipeline comment out this line 298 wait_for_event(kernel_event, cudabuffer, tasklist, STAGE); // to stop pipeline comment out this line
299 } else { 299 } else {
300 wait_for_event(kernel_event, cudabuffer, tasklist, cur); 300 wait_for_event(kernel_event, cudabuffer, tasklist, cur);
301 } 301 }
302 cur += 1; 302 cur++;
303 if (STAGE <= cur) 303 if (STAGE <= cur)
304 cur = 0; 304 cur = 0;
305 free(kernelParams); 305 free(kernelParams);
306 cuModuleUnload(module);
307 } 306 }
308 reply = (memaddr)tasklist->waiter; 307 reply = (memaddr)tasklist->waiter;
309 param_addr = (memaddr)tasklist->next; 308 param_addr = (memaddr)tasklist->next;
310 } 309 }
311 wait_for_event(kernel_event, cudabuffer, tasklist, cur); 310 if (cur == 0) {
311 wait_for_event(kernel_event, cudabuffer, tasklist, STAGE);
312 } else {
313 wait_for_event(kernel_event, cudabuffer, tasklist, cur);
314 }
312 for (int i = 0; i<STAGE; i++) { 315 for (int i = 0; i<STAGE; i++) {
313 ret = cuStreamSynchronize(cudabuffer[i].stream); 316 ret = cuStreamSynchronize(cudabuffer[i].stream);
314 if (ret!=0) { CudaTaskError(cudabuffer , cur, tasklist, ret); continue; } 317 if (ret!=0) { CudaTaskError(cudabuffer , cur, tasklist, ret); continue; }
315 } 318 }
316 319