我在 OpenCL 中遇到了一些关于 clCreateBuffer 的问题。我正在使用 AMD Fusion 处理器 (A10-5800k),因此两个设备(CPU 和 GPU)应该能够在彼此的内存上工作。
对于读取和结果缓冲区,我这样做:
bufRead = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, size, data, &err);
bufWrite = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, size, result, &err);
当我调用我的内核时,“结果”数组不会改变。我知道普通的 GPU 会将数据复制到设备内存并进行处理。普通的 GPU 会在之后将数据复制回来吗?
但是,我确实希望 Fusion GPU 不会复制数据,因为它可以在同一个指针上工作。不幸的是,我没有看到“结果”数组有任何变化。当我用 clEnqueueReadBuffer 阅读“bufWrite”时,我看到了变化。(我在阅读“结果”之前做了clFinish,所以应该写入数据)
有谁知道如何真正使用 CPU 和 GPU 在同一个阵列上工作?我真的很想避免使用 clEnqueueReadBuffer。
谢谢,
托马斯