2013-03-14 44 views
3

對於OpenCL中的所有硬件/平臺上的第一個工作組,我可以假設get_local_id(0)等於get_global_id(0)我可以假設本地ID等於OpenCL中第一個工作組的所有平臺的全局ID

問題是,如果產生的每個工作項都在全局空間中被賦予了id 0,1,2,3,4,5,6,7,然後在本地空間中被賦予了0,1,2,3 | 0,1,2,3

替代它可能是本地空間,0,2,4,6 | 1,3,5,7。在哪裏|在這個兩個工作組和8個工作項目的例子中拆分了兩個工作組。

回答

7

這在OpenCL 1.2 specification的3.2節(執行模型)中進行了描述,但在6.12.1節(工作項目函數)中未引用。

global_id(d) = global_offset(d) + local_id(d) + group_id(d) * local_size(d) 
global_size(d) = local_size(d) * num_groups(d) 

如果global_offset是(0,0,0),那麼您的假設是正確的。

+0

謝謝。沒讀過那部分。但是從規範:global_offset當使用en..NDkernel時,必須當前爲NULL值。 – 2013-03-14 23:01:23

+0

我不確定這個限制是否仍然適用於OpenCL 1.2。 – 2013-03-14 23:17:18

+0

好的。還有一點評論,我問,因爲我正在尋找合併內存訪問。但是如果我所有的工作項目需要同時訪問全局內存m [0]會怎麼樣呢? (每個工作組的所有local_id)。他們是否會等待彼此獲取內存,或者是否會快速將這一項加載到每個工作項目中。替代方案我可以將所有工作項目全部移到1個項目上? – 2013-03-14 23:25:53

相關問題