OpenCL 是否支持数组初始化器,包括默认初始化为 0?

Nic*_*rca 4 opencl

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

__kernel myKernel(...)
{
    float accum[SIZE] = {};

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

float accum[SIZE];
for(int i=0; i<SIZE; ++i) accum[i] = 0;
Run Code Online (Sandbox Code Playgroud)

use*_*016 5

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

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