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