【问题标题】:Best method for GPU to CPU communication in OpenCLOpenCL 中 GPU 到 CPU 通信的最佳方法
【发布时间】:2017-05-10 12:43:55
【问题描述】:

我有一个不接受任何输入的内核,并且其工作项之间不相互通信。每个工作项根据其global_id 对不同的参数进行操作,但这没有传入。我希望每个工作项处理其任务,根据某些标准筛选结果,并将结果写回全局内存数组如果它符合这个标准。做这个的最好方式是什么?我考虑了一个__global 索引,该索引将从0 开始并在每次写入时递增,但是此访问没有锁定,并且并行进程最终处于一堆竞争条件中,所以我不知道从哪里说输出数组中要写入的每个工作项。

如果这是一种更高级别的语言,我希望能够传入一个共享哈希或其他东西,然后将成功的输出推送到它上面,由global_id 键入,但我无法弄清楚最合适的方法是在 OpenCL 领域。有什么想法吗?我使用的是普通 C,而不是 C++。

【问题讨论】:

    标签: c opencl gpu gpgpu


    【解决方案1】:

    This 看起来正是我所需要的,我只是缺少 googlefu 来获得它!

    如果您对最佳实践有任何其他建议,请回复,但为了将来参考,以上加上__global 内存缓冲区将满足我的需求。

    【讨论】:

    • Atomics 确实可以解决这个问题,但如果结果不是稀疏的(即,如果大多数工作项访问 atomic,将会有很多序列化),则速度会很慢。如果许多或大多数工作项返回结果,只需让每个工作项产生一个结果(一些可以为空或空),然后 CPU 可以通过结果并提取有效数据。如果值得的话,或者在 GPU 上运行 reduction(性能方面)。
    • 谢谢!对于我的用例,在大约 1000 万个中,只有 8-10 个工作项需要访问原子全局,因此非常适合。不过我会考虑减少,这听起来像是我想为另一个项目拉动的线程......
    猜你喜欢
    • 2011-07-23
    • 2011-02-07
    • 2018-12-10
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多