2017-12-03 189 views
0

我試圖將一段OpenCL內核代碼移植到SideFX Houdini,使用其內部腳本語言調用VEX(代表vector expression)使用 。OpenCL get_global_id

但是,我有理解這些索引做什麼和他們如何工作的問題。 據我所知,get_global_id()返回索引到一個給定的工作項目的工作(讀它的地方),但我真的不明白到底是什麼。 (也許與計算機核心有關,我猜?)

如果輸入是由x和y中的500像素形成的2D網格,並且假設每個像素都有一些屬性(我傳入內核的那個屬性參數,與name_in,而name_out要更新相同的屬性值),他在做這些索引操作?

它究竟如何工作,我怎樣才能在c例如做同樣的事情?

許多預先感謝您, 亞歷山德羅

__kernel void rd_compute(__global float4 *a_in, __global float4 *b_in, __global float4 *c_in, __global float4 *d_in, __global float4 *e_in, __global float4 *f_in, __global float4 *g_in, __global float4 *h_in, __global float4 *i_in, __global float4 *a_out, __global float4 *b_out, __global float4 *c_out, __global float4 *d_out, __global float4 *e_out, __global float4 *f_out, __global float4 *g_out, __global float4 *h_out, __global float4 *i_out) 
{ 
    const int index_x = get_global_id(0); 
    const int index_y = get_global_id(1); 
    const int index_z = get_global_id(2); 
    const int X = get_global_size(0); 
    const int Y = get_global_size(1); 
    const int Z = get_global_size(2); 
    const int index_here = X*(Y*index_z + index_y) + index_x; 

回答

2

請仔細閱讀許多偉大的入門教程。

在串行代碼,如果你使用一個循環(例如,for (int i=0; i<10; i++))然後int i = get_global_id(0)替換這樣你就可以得到當前工作項目的指數。運行時確保所有工作項目都運行。它們可能是平行的,串聯的或成組的(某種組合)。

+0

好的會做,非常感謝你的回覆,這很有幫助。 –