繁体   English   中英

如何在主机内存上分配一半的OpenCL缓冲区,在设备内存上分配另一半?

[英]How to allocate one half of an OpenCL buffer on host memory and the other half on device memory?

如果我对它的理解正确,那么在为设备内核执行访问主机内存分配CL缓冲区时,可以使用CL_MEM_USE_HOST_PTR。 我可以使用CL_MEM_COPY_HOST_PTR将数据复制到设备内存。 我的问题是:我能以某种方式分配一个数组A,其中一半分配在主机内存中,另一半分配在设备内存中。 假设前一半分配在主机内存中。 A [0〜(N / 2-1)]访问主机内存,而A [N / 2〜(N-1)]访问设备内存。

真正的事实是,您不知道内存在哪里

分配的对象内存在OpenCL“上下文”内部,该内存纯粹是虚拟的,可以在任何地方(设备或主机)。 如果要从指针获取内存,从指针复制内存或在主机中分配副本,则只能向OpenCL指定。 但是,这些都不保证任何时候主机端的内存一致性。 也就是说,主机上的内存可能不是该内存对象的最新版本。 由于OpenCL允许将内存缓存在设备中。

一些供应商指定在其实现和SDK中使用一些标志来在不同类型的内存之间进行选择(即:固定)。 但这取决于实现,并且不会改变您仍然需要使用clReadBuffer()或clMapBuffer()来确保主机端的值是内核的实际输出这一事实。

根据我的个人经验,如果您不使用繁琐的I / O。 您可以简单地使用CL_MEM_READ_WRITE标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM