OpenCL意外的高RAM使用率

问题描述 投票:0回答:1

有一个具有一定数量内核(大约30个)的程序,该程序对公共数据(buffers-cl_mem)进行操作,并以一定顺序在循环中多次调用(例如, 100000)。传输到视频卡的数据量约为x * 10 MB,但是应用程序内存分配(RAM使用)达到了[[几个GB(在任务管理器中和在Visual Studio中都是) 。

算法如下:

    opencl的初始化(device, context, queue, programm
  • 将源数据加载到RAM中
  • 为中间数据cl_mem Xi = clCreateBuffer (...分配大量缓冲区
  • [使用elquequeWriteBuffer (...将源数据从RAM重新加载到缓冲区
  • 内核名称-cl_kernel k_i = clCreateKernel (...
  • 为每个内核设置参数-clSetKernelArg (...
  • 每个内核的globallocal大小的指定
  • 使用clEnqueueNDRangeKernel (...使用可执行的狗窝序列开始循环>
  • for (long int i=0; i<100000; i++) { err = clEnqueueNDRangeKernel (... err |= clEnqueueNDRangeKernel (... ... }
    读取缓冲区clEnqueueReadBuffer(
  • OpenCl计算所有内容。获得预期的结果。但是CPU RAM内存使用量异常增长/与处理的数据量成比例增长。

我不明白。我只使用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)进行操作,并以一定顺序在循环中多次调用(例如,...)” >

c++ gpu opencl gpgpu ram
1个回答
0
投票
宾果! &event是主要问题!

如果我使用

© www.soinside.com 2019 - 2024. All rights reserved.