【发布时间】:2013-02-25 13:44:17
【问题描述】:
我在 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。
谢谢,
托马斯
【问题讨论】:
-
我现在没有时间回答你的问题,但这是我不久前写的关于 APU 的答案,可能会有所帮助:stackoverflow.com/questions/12766578/…
标签: opencl