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