我有一种情况,我(可能)想尝试使用 a std::vector
(或更准确地说是它的存储)作为buffer
带有CL_MEM_USE_HOST_PTR
. vector
如果调整大小并因此重新分配其内存,这显然会出现问题。对 my 的修改vector
是在程序的阶段,buffer
没有使用,所以我的想法是检查缓冲区的主机指针是否与指向第一个元素的指针相同,vector
如果不是则重新创建缓冲区案子。我的问题是我无法确定拥有 a 是否合法,如果未使用buffer
主机指针已被释放的主机指针。buffer
我当然可以在使用它的阶段结束时销毁缓冲区,但是我事先不知道向量内容和/或长度是否被修改,如果不是,我宁愿保留旧缓冲区,因为 afaik 可以让它保持缓存在设备上,从而减少需要通过 pci-e 总线传输的数据量。
我的问题是:如果该对象仅存在但未在内核中使用,是否允许buffer
使用CL_MEM_USE_HOST_PTR
其主机指针已经删除主机指针的opencl。buffer
作为记录,我目前正在针对 nvidias opencl 实现进行开发,使用 Tesla 2070 作为 gpu,并且该软件可能会在不久的将来移植到 amd gpus/cpus(后者是使用的主要原因CL_MEM_USE_HOST_PTR
)。因此,如果答案是特定于实现的,那么这些是主要目标,尽管我对一般答案更感兴趣,因为我不知道以后还会运行什么。