创建线程的网格我写了针对OpenCL内核,我初始化一个三维阵列中的所有元素 - >我* I * I + J *∫*∫。我现在在创建一个线程网格来执行元素初始化(并发)时遇到了问题。我知道我现在使用的代码只使用3个线程,我该如何扩展?OpenCL中
请帮忙。我是OpenCL的新手,所以任何建议或解释可能都很方便。谢谢!
这是代码:
_kernel void initialize (
int X;
int Y;
int Z;
_global float*A) {
// Get global position in X direction
int dirX = get_global_id(0);
// Get global position in Y direction
int dirY = get_global_id(1);
// Get global position in Z direction
int dirZ = get_global_id(2);
int A[2000][100][4];
int i,j,k;
for (i=0;i<2000;i++)
{
for (j=0;j<100;j++)
{
for (k=0;k<4;k++)
{
A[dirX*X+i][dirY*Y+j][dirZ*Z+k] = i*i*i + j*j*j;
}
}
}
}
它看起来像这样的代码通过甲在作为__global浮子*,然后redeclares它作为一个int数组,这是固有的私人。那是故意的吗? – boiler96
嗨,除了隐藏锅炉96突出显示的'A'变量,为什么你说你只使用3个线程?你的工作组大小有3个维度(X,Y和Z),所以我怀疑你在调用代码中创建了多于3个线程(工作项目)。你想要什么尺寸的最终输出数组 - 2000x100x4或这些尺寸的倍数? –
@ boiler96我认为这是我犯的一个错误,它应该是一个数组。你能帮助解决这个问题吗? –