在 OpenCL 中大步循环
Loop with strides in OpenCL
如果我在 C++ 中有一个 for 循环,我如何在 OpenCL 内核中并行化它。
例如:
for(int i=0;i<100;i++4)
for(int j=0;j<60;j++4)
{
a[i]= b[j]+2;
}
在 OpenCL 中,如果我想并行化循环,我可以考虑使用 "/" 或 "%",但是还有其他解决方案吗?
我在想这样的事情:
int id1= get_global_id(0);
int id2= get_global_id(1);
if((id1%4==0) && (id2%4==0))
{
a[id1] = b[id2]+2;
}
这只是一个例子,正如我想知道的,步幅如何工作。还有其他办法吗?
将 id1 和 id2 乘以 4,并在启动内核时将全局大小设置为 100/4 和 60/4。
int id1= get_global_id(0)*4;
int id2= get_global_id(1)*4;
a[id1] = b[id2]+2;
如果我在 C++ 中有一个 for 循环,我如何在 OpenCL 内核中并行化它。
例如:
for(int i=0;i<100;i++4)
for(int j=0;j<60;j++4)
{
a[i]= b[j]+2;
}
在 OpenCL 中,如果我想并行化循环,我可以考虑使用 "/" 或 "%",但是还有其他解决方案吗? 我在想这样的事情:
int id1= get_global_id(0);
int id2= get_global_id(1);
if((id1%4==0) && (id2%4==0))
{
a[id1] = b[id2]+2;
}
这只是一个例子,正如我想知道的,步幅如何工作。还有其他办法吗?
将 id1 和 id2 乘以 4,并在启动内核时将全局大小设置为 100/4 和 60/4。
int id1= get_global_id(0)*4;
int id2= get_global_id(1)*4;
a[id1] = b[id2]+2;