2013-10-14 52 views
0

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

感谢 添

回答

1

使用降低内核可以找到最低。

2

安德烈亚斯是正确的:减少是解决方案。这里有一个很好的来自AMD的article解释如何实现简单的减少。它讨论了不同的方法以及它们带来的性能收益。文章中的例子是关于总结所有元素,而不是找到最小值,但修改给定的代码并不重要。

顺便说一句,也许我不太明白你的第一句话,但以全局大小(512,512)启动的内核不会运行262,144次,但只有一次262,144个线程计划。