【问题标题】:returning one result from a pyopencl kernel从 pyopencl 内核返回一个结果
【发布时间】:2013-10-14 00:36:57
【问题描述】:

我的 pyopencl 内核程序以 (512,512) 的全局大小启动,我假设它将运行 512x512=262,144 次。我想在我的 512x512 图像中找到函数的最小值,但我不想将 262,144 个浮点数返回到我的 CPU 来计算最小值。我想运行另一个内核(可能在队列中等待)来找到所有 262,144 像素的最小值,然后将那个浮点数发送到 CPU。我认为这会更快。我的等待内核的全局大小应该是 (1,1), 吗?我希望在调用下一个内核之前,我使用 mf.COPY_HOST_PTR 创建的 262,144 大浮点缓冲区不会越过 GPU/CPU 总线。

谢谢 蒂姆

【问题讨论】:

    标签: opencl pyopencl


    【解决方案1】:

    Andreas 是对的:减少是解决方案。这是来自 AMD 的一个很好的article,解释了如何实现简单的归约。它讨论了不同的方法以及它们带来的性能方面的收益。文章中的示例是关于对所有元素求和而不是求最小值,但修改给定代码相当简单。

    顺便说一句,你的第一句话可能我不太理解,但是全局大小为 (512, 512) 的内核将不会运行 262,144 次,而只会运行一次,调度 262,144 个线程。

    【讨论】:

      【解决方案2】:

      使用归约核找到最小值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-26
        • 2013-10-25
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 2020-06-24
        相关资源
        最近更新 更多