0

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

谢谢蒂姆

4

2 回答 2

2

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

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

于 2013-10-15T14:31:07.460 回答
1

Use a reduction kernel to find the minimum.

于 2013-10-14T17:06:11.647 回答