Pointers OpenCL缓冲区之间的指针

Pointers OpenCL缓冲区之间的指针,pointers,memory,opencl,Pointers,Memory,Opencl,考虑以下几点。在一个上下文中,存在两个在设备内存中分配的缓冲区,即缓冲区a和缓冲区B。一个缓冲区包含指向另一个缓冲区中某物的指针。假设主机将在内核调用之间保持缓冲区的活动状态,那么进行此设置安全吗?特别是它保证了实现不会移动缓冲区从而使指针无效?至少在上下文有多个设备的情况下,似乎不会 Сlause5.4.4迁移本规范中的内存对象,除其他外,规定: 通常,内存对象会隐式迁移到设备以进行 使用内存对象的排队命令的目标 而且似乎没有办法禁止这种迁移,也没有关于在一个上下文中只有一个设备时会发生什么的

考虑以下几点。在一个上下文中,存在两个在设备内存中分配的缓冲区,即缓冲区
a
和缓冲区
B
。一个缓冲区包含指向另一个缓冲区中某物的指针。假设主机将在内核调用之间保持缓冲区的活动状态,那么进行此设置安全吗?特别是它保证了实现不会移动缓冲区从而使指针无效?

至少在上下文有多个设备的情况下,似乎不会 Сlause
5.4.4迁移本规范中的内存对象
,除其他外,规定:

通常,内存对象会隐式迁移到设备以进行 使用内存对象的排队命令的目标

而且似乎没有办法禁止这种迁移,也没有关于在一个上下文中只有一个设备时会发生什么的信息


遗憾的是,保持寻址一致的唯一方法似乎是分配一个巨大的缓冲区,并对其内容进行手动内存管理,将所有地址存储为缓冲区开头的偏移量。

OpenCL 1.2不支持指向缓冲区中指针的指针,但OpenCL 2.0似乎允许这样做。请参阅中标题为“SVM:共享虚拟内存”的幻灯片。

它与指向指针的指针无关,即使是缓冲区中指向同一缓冲区中某些数据的指针,如果重新定位缓冲区,也会失效。我的意思是指向的指针(缓冲区中的指针)无论他们在哪里,都不能保证,你应该避免这样做。相反,保留偏移量而不是指针。如果缓冲区移动,它们仍然有效。y=bufferB[bufferA[x]]