OpenCL - 用于循环和与GlobalWorkSize的关系

时间:2016-07-21 19:42:37

标签: arrays loops opencl

在阅读一些代码时,我有几个问题突然出现在脑海中。

假设我们在数组中有一百万个元素的globalWorkSize。

假设内核的目的是简单地一次取100个元素的总和并将这些值存储在输出中。例)内核第一次对元素0-99求和,然后它会做1-100,然后是2-101,依此类推。所有求和值都存储在一个数组中。

现在我们知道有100万个元素,当我们将它传递给clEnqueueNDRangeKernel时,这是否意味着内核将执行接近一百万次?

我注意到内核中的for循环只循环到一百个元素,然后该值只存储在另一个数组中。因此,通过检查for循环,人们会认为在100个元素之后它会停止。计算机如何知道我们何时达到100万个元素?是因为我们在clEnqueueNDRangeKernel中传递了参数,而在原子级别它知道需要处理更多元素吗?

1 个答案:

答案 0 :(得分:0)

设备无法知道阵列中有一百万个元素。因此,如果您将global_work_size设置为一百万,则最后99个内核将很乐意过度索引该数组,该数组可能会或可能不会根据设备进行故障。

当您使用N的工作类调用clEnqueueNDRangeKernel API调用时,信息将被发送到设备,并且设备将执行足够大小的工作组,直到它已执行内核N次。

希望这能回答你的问题。