2012-07-25 62 views
0

我正在從openCL的內核生成hadware模塊(對Verilog的描述)。我在讀關於這方面的文章,作者做一些預先處理內核,預處理的第一步是:內核函數中工作項的序列化 - OpenCL

序列化的內核函數裏面的工作項目,他們這樣解釋「工作組中的工作項可以按任意順序執行, 前提是在內核 函數中不存在同步操作。基於此觀察,我們通過將指令包含在工作項中來序列化 工作項的執行。內核 函數的主體函數轉換爲三重嵌套循環,假設wo內抽象索引空間中的最大維數爲 rkgroup是三個。 每個循環嵌套枚舉工作項目在相應 尺寸,從而序列化它們的執行「

,他們提供了這樣一個例子:

int __kernel_indices[3]; 

__kernel_indices[2] = 0; 
while (__kernel_indices[2]< __local_size[2]){ 
    __kernel_indices[1] = 0; 
    while (__kernel_indices[1]< __local_size[1]){ 
     __kernel_indices[0] = 0; 
     while (__kernel_indices[0]< __local_size[0]){ 

       //Kernel Body 

     } 
     __kernel_indices[0]++; 
    } 
    __kernel_indices[]++; 
} 
__kernel_indices[2]++; 

我不明白的意思序列化,當時是否執行一個工作項目?或者當時只有1個工作團隊的工作項目將在執行中?

感謝您閱讀這篇文章,並對我的英文不熟悉。

+0

你有鏈接到這篇文章? – 2012-07-25 22:54:47

回答

0

是的,上面的內核使不同的工作項按順序執行而不是一起運行。對我來說,看起來像越來越多的工作項目開始執行while循環運行。要理解這一點,請將每個工作項目視爲具有三維索引。