OpenCL get_global_id

我试图将一段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;

回答:

请仔细阅读许多伟大的入门教程。

在串行代码,如果你使用一个循环(例如,for (int i=0; i<10; i++))然后int i = get_global_id(0)替换这样你就可以得到当前工作项目的指数。运行时确保所有工作项目都运行。它们可能是平行的,串联的或成组的(某种组合)。

以上是 OpenCL get_global_id 的全部内容, 来源链接: utcz.com/qa/259276.html

回到顶部