在我的内核中,我需要一组累加器。
__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 中不允许空的初始值设定项列表)。
实际上,某些实现也可能在启动内核之前用零清除设备专用和/或本地内存,但这不是您可以依赖的行为。