从pyopencl内核返回一个结果

时间:2013-10-14 00:36:57

标签: opencl pyopencl

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

由于 添

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用缩减内核找到最小值。