首先,我很难弄清楚当通过 CL_MEM_ALLOC_HOST_PTR 时 clCreateBuffer() 是如何工作的。它是在设备上创建缓冲区并为主机分配内存,还是仅在主机上分配内存并在使用时将其缓存在设备上?
我的问题是这样的:如果我有相当多的对象具有 float* 字段的总空间比我的设备上可用的空间多,那么有没有更好的方法然后告诉运行时将主机指针(或使用它)复制到 OpenCL设备?是否可以让运行时创建主机指针并将其用于所有 float*,即使它们的总内存比设备的内存还要多?我不介意告诉它使用主机指针,但是如果我想在运行时在 CPU 上时避免内存复制,我将不得不对齐所有内存。
此外,任何关于在主机上使用比设备上可用内存更多的内存以使内存传输最有效并进行最少复制的好方法的任何提示。
谢谢。