2015-09-04 45 views
1

大多數用於並行減少的算法使用共享(本地)內存。opencl-並行減少不帶本地內存

Nvidia,AMD,Intel等。

但是,如果設備沒有共享(本地)內存。

我該怎麼辦?

如果我使用相同的算法,但在全局內存上存儲臨時值,它會工作正常嗎?

+1

是,使用全局內存應該工作正常,但:*您必須爲所有工作組分配足夠的全局內存並分配工作組的內存塊*您必須使用'CLK_GLOBAL_MEM_FENCE',而不是'CLK_LOCAL_MEM_FENCE' *您失去了大量的表現 – Baiz

回答

1

如果我考慮一下,我的評論已經是完整的答案。

是的,你可以使用全局內存作爲本地存儲的替代品,但:

  • 你必須爲所有工作組分配足夠的全局內存並分配工作組的內存塊(因爲本地內存,只需要specifiy因爲需要單個工作組儘可能多的內存和每個工作組將分配必須使用CLK_GLOBAL_MEM_FENCE代替CLK_LOCAL_MEM_FENCE
  • 指定的內存量)
  • 你將失去​​的性能顯著大寫金額

如果我今天晚上有時間,我會發表一個簡單的例子。

3

如果設備支持的OpenCL 2.0然後work_group_reduce可以使用:

gentype work_group_reduce <運算>(gentype X)

<運算>work_group_reduce_ <運算>work_group_scan_exclusive_ <運算>work_group_scan_inclusive_ <運算>定義了操作員,並且可以是添加分鐘最大