2013-10-14 49 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個線程計劃。