clEnqueueReadBuffer sometimes too slow(2second)
Hello, I'm making real-time application but sometimes clEnqueueReadBuffer is too slow.
I tested clEnqueueReadBuffer with attached code. But I don't know why it is slow. Please help.
this is my environment.
OS: Windows 10 Pro 64 bits
CPU: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
GPU : Intel(R) HD Graphics 630
OpenCL: 1.2 version.
Intel OpenCL SDK:
Version=6.3.0.1904
InternalVersion=dkdnfngdfkjndfkjgndfndfgk
Visual Studio Professional 2015.
below is my test code. full project is attached.
cl_mem d_buf; unsigned char * h_in; unsigned char * h_out; int byte; unsigned long tick_start; unsigned long tick_end; int idx; // initialize byte = 4096; h_in = new unsigned char[4096]; h_out = new unsigned char[4096]; d_buf = clCreateBuffer( ocl.context, CL_MEM_READ_WRITE, byte, NULL, &err ); ::memset( h_in, 0, byte ); err = clEnqueueWriteBuffer( ocl.commandQueue, d_buf, CL_TRUE, 0, byte, h_in, 0, NULL,NULL ); if ( CL_SUCCESS != err ) { printf( "WriteError %d \r\n", err ); DebugBreak(); } // main loop for ( idx = 0 ; idx <= 500000 ; idx ++ ) { tick_start = ::GetTickCount(); err = clEnqueueReadBuffer( ocl.commandQueue, d_buf, CL_TRUE, 0, byte, h_out, 0, NULL, NULL ); if ( CL_SUCCESS != err ) { printf( "ReadError %d \r\n", err ); DebugBreak(); } tick_end = ::GetTickCount(); // for check progress if ( idx %10000 == 0 ) { printf( "idx: %d \r\n", idx ); } // for check large delay if ( tick_end - tick_start > 100 ) { printf( "idx: %d, Elapsed: %d ms \r\n", idx, (int)(tick_end - tick_start)); } } // rlease memory clReleaseMemObject( d_buf ); delete [] h_in; delete [] h_out;