有一个具有一定数量内核(大约30个)的程序,该程序对公共数据(buffers-cl_mem)进行操作,并以一定顺序在循环中多次调用(例如, 100000)。传输到视频卡的数据量约为x * 10 MB,但是应用程序内存分配(RAM使用)达到了[[几个GB(在任务管理器中和在Visual Studio中都是) 。
算法如下:device, context, queue, programm
)cl_mem Xi = clCreateBuffer (...
分配大量缓冲区elquequeWriteBuffer (...
将源数据从RAM重新加载到缓冲区cl_kernel k_i = clCreateKernel (...
clSetKernelArg (...
global
和local
大小的指定clEnqueueNDRangeKernel (...
使用可执行的狗窝序列开始循环>for (long int i=0; i<100000; i++) {
err = clEnqueueNDRangeKernel (...
err |= clEnqueueNDRangeKernel (...
...
}
clEnqueueReadBuffer(
我不明白。我只使用cl_mem Xi = clCreateBuffer (...
一次,我没有在每次迭代中创建缓冲区,而是仅在GPU内存中创建这些缓冲区:
cl_mem buf_input = clCreateBuffer(context, CL_MEM_READ_WRITE, X * Y * sizeof(float), NULL, &err);
为什么主机(CPU RAM)上的内存使用率如此之高?
我尝试了各种clRelease ... (..MemObj, ..Kernel, etc.)
。我也尝试过让程序完全进入循环(即重载和重新复制cl代码)。一切都很好,但是记忆……正在增长!并且只有应用程序内存。在GPU RAM上的使用量约为x * 10兆字节。[具有一定数量内核(大约30个)的程序,该程序对公共数据(缓冲区-cl_mem)进行操作,并以一定顺序在循环中多次调用(例如,...)” >
&event
是主要问题!如果我使用