OpenCL get_global_id

OpenCL get_global_id

本文关键字:id global OpenCL get      更新时间:2023-10-16

我正在尝试使用OpenCL内核代码将opencl内核代码移到sidefx houdini上它的内部脚本语言呼叫vex(代表vector expression)。

但是,我在理解这些索引的工作以及它们的工作方式方面有问题。我知道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)替换了该循环,因此您可以获得当前工作项目的 index 。运行时确保所有工作项目都运行。它们可能平行于串行或组(某些组合)。