Discussion created by mejlango on Mar 20, 2011
Latest reply on Mar 29, 2011 by mejlango




 I would like to ask what is the cause of this error. The documentation says:

if the read and write operations are blocking and the execution status of any of the events in event_wait_list is a negative integer value. 

 ,but it didn't help me to find out why my program ends with this error.

Everything worked with no error, until I passed bigger buffer to kernel. After that, the result of the kernel seems to be correct, but clWaitForEvents(...) ends with -14 error code. Also the warning with message "Display driver AMD stopped responding and has successfully recovered."

Global memory size: 268435456
Constant buffer size: 65536
Max number of constant args: 8
Local memory type: Global
Local memory size: 16384
Kernel Preferred work group size multiple: 32


thanks for help

cl_mem m_matrix = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, 5971968, matrix, &errCode);//5,9MB cl_mem m_cnt = clCreateBuffer(context, CL_MEM_WRITE_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int), cnt, &errCode); clSetKernelArg(clManager->GetKernels()[0], 0, sizeof(m_matrix), (void*)&m_matrix); clSetKernelArg(clManager->GetKernels()[0], 1, sizeof(int), (void*)&arg1); clSetKernelArg(clManager->GetKernels()[0], 2, sizeof(int), (void*)&arg2); clSetKernelArg(clManager->GetKernels()[0], 3, sizeof(int), (void*)&arg3); clSetKernelArg(clManager->GetKernels()[0], 4, sizeof(m_cnt), (void*)&m_cnt); cl_event event1 = NULL; cl_event event2 = NULL; cl_uint NDRange = 1; size_t* globalThreads = new size_t[NDRange]; globalThreads[0] = (((2*_nvars-1)/64)+1)*64; //ceil size_t* localThreads = new size_t[NDRange]; localThreads[0] = 64; cl_int status = clEnqueueNDRangeKernel(commandQueue, kernel, NDRange, NULL, globalThreads, localThreads, 0, NULL, &event1); //status = 0 status = clWaitForEvents(1, &event1); //status = 0 status = clEnqueueReadBuffer(commandQueue, m_matrix, CL_TRUE, 0, 5971968, matrix, 0, NULL, &event2); //status = 0 status = clWaitForEvents(1, &event2); //status = -14 if(status != CL_SUCCESS) { return -1; }