OpenCL get_global_id
OpenCL get_global_id
我正在尝试使用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 。运行时确保所有工作项目都运行。它们可能平行于串行或组(某些组合)。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 错误:令牌 { '{' 之前应存在非限定 ID
- 断言"id < 0"在Qt ActiveX中失败
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 如何根据两个因素组织向量:id 和数量?(C++)
- 在返回 0 之前应为非限定 ID
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 编译时检查特征专用化是否具有唯一 ID
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误