OpenCL中不允许使用可变长度数组声明 - 为什么?

ein*_*ica 7 memory arrays memory-management c99 opencl

我想在我的OpenCL内核中创建一个本地数组,其大小取决于内核的参数.似乎不允许 - 至少在AMD APP上.

你的经历与众不同吗?也许它只是APP?或者这里有一些理由吗?

编辑:我现在建议在CPU端代码中也应该允许变长数组,这是C标准委员会的一个不幸的调用; 但问题是.

mfa*_*mfa 4

您可以动态分配本地块的大小。您需要将其作为内核的参数,并在调用 clSetKernelArg 时定义其大小。

定义示例:

__kernel void kernelName(__local float* myLocalFloats, ...)
Run Code Online (Sandbox Code Playgroud)

主机代码:

clSetKernelArg(kernel, 0, myLocalFloatCount * sizeof(float), NULL); // <-- set the size to the correct number of bytes to allocate, but use NULL for the data.
Run Code Online (Sandbox Code Playgroud)

在执行此操作之前,请确保您了解设备上本地内存的限制。调用 clGetDeviceInfo,并轮询“CL_DEVICE_LOCAL_MEM_SIZE”值。