remove opencl event tracking since it causes memory leak

This commit is contained in:
Uldis Locans
2017-08-18 14:11:35 +02:00
parent 74b12ebdc0
commit ba701a5744
2 changed files with 13 additions and 28 deletions

View File

@ -675,17 +675,14 @@ cl_mem OpenCLBase::ocl_allocateMemory(size_t size, cl_int &ierr) {
/* /*
write data specified by in_data to device memory, device memory space defined by cl_mem write data specified by in_data to device memory, device memory space defined by cl_mem
*/ */
int OpenCLBase::ocl_writeData(cl_mem mem_ptr, const void * in_data, size_t size, size_t offset, int blocking) { int OpenCLBase::ocl_writeData(cl_mem mem_ptr, const void * in_data, size_t size,
size_t offset, int blocking)
{
cl_int ierr; cl_int ierr;
//std::cout << "Write: " << size*1e-9 << " gb of data" << std::endl;
ierr = clEnqueueWriteBuffer(m_command_queue, mem_ptr, blocking, offset, size, in_data, 0, NULL, &m_last_event);
//m_events[m_num_events] = m_last_event;
m_events.push_back(m_last_event);
ierr = clEnqueueWriteBuffer(m_command_queue, mem_ptr, blocking, offset, size,
in_data, 0, NULL, NULL);
if (ierr != CL_SUCCESS) { if (ierr != CL_SUCCESS) {
DEBUG_MSG("Error writing data to device, OpenCL error: " << ierr); DEBUG_MSG("Error writing data to device, OpenCL error: " << ierr);
@ -752,28 +749,16 @@ int OpenCLBase::ocl_executeKernel(cl_uint ndim, const size_t *work_items,
const size_t *work_group_size) const size_t *work_group_size)
{ {
cl_int ierr; cl_int ierr;
cl_event tmp_event;
if (m_last_event == NULL) { ierr = clEnqueueNDRangeKernel(m_command_queue, m_kernel, ndim, NULL,
ierr = clEnqueueNDRangeKernel(m_command_queue, m_kernel, ndim, NULL, work_items, work_group_size,
work_items, work_group_size, 0, NULL, NULL);
0, NULL, &tmp_event);
} else {
ierr = clEnqueueNDRangeKernel(m_command_queue, m_kernel, ndim, NULL,
work_items, work_group_size,
1, &m_last_event, &tmp_event);
}
clFlush(m_command_queue);
if (ierr != CL_SUCCESS) if (ierr != CL_SUCCESS)
DEBUG_MSG("Error executing kernel, OpenCL error: " << ierr DEBUG_MSG("Error executing kernel, OpenCL error: " << ierr
<< " work items: " << *work_items << ", " << " work items: " << *work_items << ", "
<< " work group: " << *work_group_size); << " work group: " << *work_group_size);
clReleaseEvent(tmp_event);
//m_last_event = tmp_event;
//m_events.push_back(m_last_event);
return ierr; return ierr;
} }
@ -781,12 +766,13 @@ int OpenCLBase::ocl_executeKernel(cl_uint ndim, const size_t *work_items,
read data from device, mem_ptr points to data on device out_data points to memory in host read data from device, mem_ptr points to data on device out_data points to memory in host
blocking specifies wether the read operation is blocking (default CL_TRUE) or non blocking (CL_FALSE) blocking specifies wether the read operation is blocking (default CL_TRUE) or non blocking (CL_FALSE)
*/ */
int OpenCLBase::ocl_readData(cl_mem mem_ptr, void * out_data, size_t size, size_t offset, int blocking) { int OpenCLBase::ocl_readData(cl_mem mem_ptr, void * out_data, size_t size,
size_t offset, int blocking)
{
cl_int ierr; cl_int ierr;
ierr = clEnqueueReadBuffer(m_command_queue, mem_ptr, blocking, offset, size, out_data, 0, NULL, &m_last_event);
m_events.push_back(m_last_event); ierr = clEnqueueReadBuffer(m_command_queue, mem_ptr, blocking, offset, size,
out_data, 0, NULL, NULL);
if (ierr != CL_SUCCESS) if (ierr != CL_SUCCESS)
DEBUG_MSG("Error reading data from device, OpenCL error: " << ierr); DEBUG_MSG("Error reading data from device, OpenCL error: " << ierr);

View File

@ -98,7 +98,6 @@ double OpenCLChiSquareRuntime::calculateSum(cl_mem data, int length) {
tmp_ptr = m_oclbase->ocl_allocateMemory(work_groups * sizeof(double), ierr); tmp_ptr = m_oclbase->ocl_allocateMemory(work_groups * sizeof(double), ierr);
//execute sum kernel //execute sum kernel
//ocl_createKernel("parallelReductionSum");
m_oclbase->ocl_createKernel("parallelReductionTwoPhase"); m_oclbase->ocl_createKernel("parallelReductionTwoPhase");
m_oclbase->ocl_setKernelArg(0, sizeof(cl_mem), &data); m_oclbase->ocl_setKernelArg(0, sizeof(cl_mem), &data);
m_oclbase->ocl_setKernelArg(1, sizeof(cl_mem), &tmp_ptr); m_oclbase->ocl_setKernelArg(1, sizeof(cl_mem), &tmp_ptr);