【发布时间】:2014-08-26 05:08:52
【问题描述】:
缓冲区对象是使用clCreateBuffer() 创建的,但它驻留在哪里?以及如何控制这个位置?
【问题讨论】:
标签: opencl
缓冲区对象是使用clCreateBuffer() 创建的,但它驻留在哪里?以及如何控制这个位置?
【问题讨论】:
标签: opencl
它在目标设备中创建(您自己选择它对吗?否则会自动选择第一个可见设备)内存,但它可以映射到主机内存以进行 i/o 操作。当你创建它时,你给创建函数标志,如 CL_MEM_USE_HOST_PTR 等。
看看:AMD's opencl tutorial 和 NVIDIA's
例如,我正在使用
deviceType=CL_DEVICE_TYPE_CPU;
memoryModel=CL_MEM_READ_WRITE|CL_MEM_ALLOC_HOST_PTR;// uses host memory pointer
在我的 CPU 上编译并
deviceType=CL_DEVICE_TYPE_GPU;
memoryModel=CL_MEM_READ_WRITE; // on GPU memory.
为独立 GPU 尝试一些 GL-CL 互操作性测试。
clCreateBuffer(context,memoryModel,Sizeof.cl_float * numElms), null, null);
当缓冲区不在主机内存上时,如果您需要更改该缓冲区中的值,则需要显式缓冲区复制/写入。映射后,您不需要对主机内存进行显式读/写。对于某些系统,映射还可以通过 DMA 访问提供一些 i/o 性能。
【讨论】: