我使用以下代码运行openCL程序:
CL_CHECK( clEnqueueNDRangeKernel(this->commands, this->kernel,
settings.dimCount, NULL, settings.globalWorkSize, settings.localWorkSize,
0, NULL, NULL) );
,其中
settings.dimCount = 3
settings.globalWorkSize = {100, 1, 1}
settings.localWorkSize = {10, 1, 1}
但是我的get_global_id(0)给出的输出数据总是在< 0,100>范围内。从来没有更多。为什么?我希望得到范围< 0,1000>
我的内核
__kernel void main(
__global float* output)
{
//int i = get_local_id(0) + get_local_size(0) * get_group_id(0); //should be same as get_global_id
int i = get_global_id(0);
output[i] = i;
}
答案 0 :(得分:1)
全球工作规模是将要处理的项目总数。如果它是100,那么您将拥有100个项目,不再有。
本地工作大小是分配给每个工作组的项目数。然后,通过将一个工作组除以另一个来确定工作组的总数 - 在您的情况下,您将有10个工作组,每个工作组处理10个工作项。
答案 1 :(得分:0)
致电时:
clEnqueueNDRangeKernel(this->commands, this->kernel,
settings.dimCount, NULL, settings.globalWorkSize, settings.localWorkSize,
0, NULL, NULL)
全局和本地工作尺寸正是您设定的尺寸。
在你的情况下,
settings.globalWorkSize = {100, 1, 1}
settings.localWorkSize = {10, 1, 1}
为什么您希望这些值有所不同?
尝试一些实验:更改值并重新运行代码。