从pyopencl内核返回一个结果

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

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

谢谢
Tim

使用一个简化内核来找到最小值。

使用一个简化内核来找到最小值。

使用一个简化内核来找到最小值。

安德烈亚斯是对的:简化是解决方案。这里有一个来自AMD的好例子,解释了如何实现简单的缩减。它讨论了不同的方法及其带来的性能收益。本文中的示例是关于对所有元素求和,而不是求最小值,但是修改给定代码是相当简单的


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

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


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

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


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

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

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