2015年2月8日 星期日

在 Linux Mint 17.1 上面安裝 Altera OpenCL 14.1 (三)

標題怎樣不管了
這是之二
這邊整理了 Altera OpenCL 特有的一些屬性
可以對 kernel, pointer 標記一些優化用的性質
或是一些特有功能


對 kernel 的標記

告訴 compiler,限制最大的 work group 大小,或是直接指定

__attribute__((max_work_group_size(64,1,1)))
__attribute__((reqd_work_group_size(64,1,1)))

對 work group 或是 work item 平行展開

__attribute__((num_compute_units(2)))
__attribute__((num_simd_work_items(4)))

num_simd_work_items & reqd_work_group_size 一起用時,會要求整除

對 memory 的標記

Local memory 的大小

這個不像 GPU 可以動態給的樣子,default 是 16384
__attribute__((local_mem_size(1024)))

__restrict__

看起來是盡量加就對了
告訴 compiler 這個 pointer 指向的內容只會被這個 pointer 的運算結果存取

Memory Bank

Default 情形下 Altera 會把記憶體切割成交錯的兩個 bank
有時候使用者會想手動把不同的 global memory 放在不同的 bank
編譯硬體時就要關掉上面那個功能
記憶體就會只被分割成兩個大 bank
在 OpenCL host 宣告記憶體的時候
加入這兩個 flag 就可以宣告在想要的 bank 了
CL_MEM_HETEROGENEOUS_ALTERA | CL_MEM_BANK_1_ALTERA
(前面好像一定要加,後面可以不加,他就會放在 default 了那個 bank)

Channel

可以讓資料不須經過 global memory,直接在 kernel 之間流動
另外,因為要同時執行多個 kernel
而 Altera OpenCL 不支援 OOO (out of order) 的 command queue commit
所以要用的時候要對 device 生成多個 command queue
也就是手動管理 OOO 的意思

另外,這東西好像不能直接模擬
這邊先寫注意事項
詳細部份改天再寫

沒有留言:

張貼留言