2017-12-03 168 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

好的会做,非常感谢你的回复,这很有帮助。 –