Mercurial > hg > Game > Cerium
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 |