OpenCL學習筆記(14)--工作組和工作項函數

1.主機應用程序先設定內核數據的維度,每個維度上工作項的數量以及每個維度上各個工作組中工作項的數量,然後,調用函數clEnqueueNDRangeKernel來進行配置。當工作項開始執行時,他需要事先知道所要訪問的數據所在的位置,即當前工作項在所有工作項中的ID.如果工作項還屬於某個工作組,那還需要知道工作項在這個工作組中的ID.

2.維度和工作項:工作項ID的維度數就是你訪問一個包含工作項數據的數組中各個元素所需要的索引數。一個工作項是內核的一種實現,每個工作項都有唯一標識符來區別運行內核的其他工作項。這個標識符就是全局ID,一個由無符號整數所組成的數組–其中的元素與數據的各個維度相對應。工作項還可以通過調用函數get_global_id來獲取其全局ID.和工作項有關的函數(全局信息):
(1)uint get_work_dim() --返回內核索引空間的維度數;
(2)size_t get_global_size(uint dim)–返回給定維度上的工作項的數量;
(3)size_t get_global_id(uint dim)–返回給定維度上工作項的全局ID;
(4)size_t get_global_offset(uint dim)–返回用於計算全局ID的初始偏移量。

3.OpenCL中,循環迭代對應的是工作項,循環索引對應的是工作項的全局ID.一個工作項可以通過調用函數get_global_id(0)和函數 get_gobal_id(1)來獲取其全局ID.同樣,通過調用函數get_global_size(0)和函數get_global_size(1),可以知道各個維度上有多少個工作項會被執行。嵌套循環中,第一次迭代的索引對是(3,5).這個索引對應的是OpenCL的全局偏移量,而它也是第一個鞏固走向的全局ID.工作項可以通過調用函數get_global_offset(0)和函數get_global_offset(1)來獲取其全局偏移量。

4.工作組:如果工作項間需要同步執行,工作組就變得相當重要。函數get_global_id返回的是當前工作項在執行內核的所有工作項中的位置,而get_local_id返回的是當前工作項和同意工作組中的各個工作項間的相對位置關係。如果執行相同內核的兩個工作項所在的工作組不同,那麼,它們的局部ID有可能一樣,但全局ID絕對不同。和工作組相關的函數:
(1)size_t get_num_groups(uint dim)–返回給定維度下工作組的數量;
(2)size_t get_group_id(uint dim)–返回給定維度下工作項的全局ID;
(3)size_t get_local_id(uint dim)–返回給定維度下工作項的局部ID;
(4)size_t get_local_size(uint dim)–返回給定維度下工作組中工作項的數量;

同樣的,函數get_global_size返回的是執行同一內核的所有工作項的數量,而函數get_local_size返回的是所在工作組中工作項的數量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章