大多數用於並行減少的算法使用共享(本地)內存。opencl-並行減少不帶本地內存
Nvidia,AMD,Intel等。
但是,如果設備沒有共享(本地)內存。
我該怎麼辦?
如果我使用相同的算法,但在全局內存上存儲臨時值,它會工作正常嗎?
大多數用於並行減少的算法使用共享(本地)內存。opencl-並行減少不帶本地內存
Nvidia,AMD,Intel等。
但是,如果設備沒有共享(本地)內存。
我該怎麼辦?
如果我使用相同的算法,但在全局內存上存儲臨時值,它會工作正常嗎?
如果我考慮一下,我的評論已經是完整的答案。
是的,你可以使用全局內存作爲本地存儲的替代品,但:
如果我今天晚上有時間,我會發表一個簡單的例子。
如果設備支持的OpenCL 2.0然後work_group_reduce可以使用:
gentype work_group_reduce <運算>(gentype X)
的<運算>在work_group_reduce_ <運算>,work_group_scan_exclusive_ <運算>和work_group_scan_inclusive_ <運算>定義了操作員,並且可以是添加,分鐘或最大。
是,使用全局內存應該工作正常,但:*您必須爲所有工作組分配足夠的全局內存並分配工作組的內存塊*您必須使用'CLK_GLOBAL_MEM_FENCE',而不是'CLK_LOCAL_MEM_FENCE' *您失去了大量的表現 – Baiz