OpenCL 是否支持数组初始值设定项,包括默认初始化为 0



在我的内核中,我需要一组累加器。

__kernel myKernel(...)
{
    float accum[SIZE] = {};
    for(i=0; i<ITER; ++i) {
       accum[...] += ...
    }
    ...
}

在 C 中,= {}会初始化数组让我用 0 填充,但我不确定 OpenCL 中是否是这种情况?我需要类似以下内容的东西,还是浪费周期?

float accum[SIZE];
for(int i=0; i<SIZE; ++i) accum[i] = 0;

OpenCL C 是 ISO/IEC 9899:1999 C 语言规范(又名 C99)的衍生产品。在这两个规范中,是的,= { 0 }将零初始化数组(注意0,C 中不允许空的初始值设定项列表)。

实际上,某些实现也可能在启动内核之前用零清除设备专用和/或本地内存,但这不是您可以依赖的行为。

最新更新