gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:46:04 26 4
gpt4 key购买 nike

如果我理解正确,我可以在分配 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 标志即可。

关于c++ - 如何在主机内存上分配 OpenCL 缓冲区的一半,在设备内存上分配另一半?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com