【发布时间】:2016-09-10 12:10:13
【问题描述】:
对于 OpenCL,具体来说: 本地浮点数组的最大尺寸是多少?
我是这样设置内核的:
__kernel void mykern( unsigned int N, __global float* input, __global float* output, __local float* sdata )
{
// ...
}
我可以将 sdata 的大小设置为(在 OpenCL 中)的最大值是多少?
我在 C++ OpenCL 中做了以下操作:
clSetKernelArg(kf_myvred,3,(lws[0])*sizeof(cl_float),NULL);
clEnqueueNDRangeKernel(mycommandq,kf_myvred,1,NULL,work,lws,0,NULL,NULL);
如果大小太大,则 clEnqueueNDRangeKernel 返回错误 CL_OUT_OF_RESOURCES。但我不确定限制是多少。
【问题讨论】:
-
如果我使用 global_work_size 作为尺寸,那么它会给我一个错误。但是如果我使用 local_work_size,它不会给我一个错误。
-
C++ 标准没有指定数组的最大大小。实际的最大大小取决于您的 C++ 实现,并且显然会根据给定时间的可用内存量而有所不同。
-
@SamVarshavchik 是否指定了所有实现都需要支持的大小?
-
在许多实现中,限制实际上是堆栈帧的大小。所以这是对所有局部变量的组合大小的限制,而不是任何单个数组。
-
没有。 C++ 标准没有规定。