我正在使用 OpenCL 在具有 CPU 和 GPU(实际上是 AMD APU)的异构系统中开发一些东西。由于我将使用原子操作来保证数据的完整性,并且数据在 CPU 设备和 GPU 设备之间共享,每个设备上都有一个内核运行在共享数据上。我的问题是:这两个设备之间的原子操作仍然有效吗?希望任何人都可以帮助我。非常感谢。
OpenCL 规范的附录 A涵盖了不同设备之间内存对象的同步。不能保证两个设备都会访问同一物理位置的内存对象:其中一个设备可以在缓冲区的副本上工作,只有附录 A 中描述的同步才能确保其他设备获得它的副本。
您在 AMD APU 上的实现可能允许 CPU 和 GPU 共享相同的地址空间,并且可能不需要设备间同步。我建议检查 AMD 文档并进行实验。