ale*_*ail 5 c opencl osx-yosemite
我正在尝试运行XCode文档中包含的噪声OpenCL示例项目.
我有一个我不明白的错误:
----------------------------------------------------------------------
Using active OpenGL context...
----------------------------------------------------------------------
Connecting to NVIDIA GeForce 320M...
----------------------------------------------------------------------
Loading kernel source from file 'noise_kernel.cl'...
----------------------------------------------------------------------
Building compute program...
[CL_DEVICE_NOT_AVAILABLE] : OpenCL Error : Error: Build Program driver returned (10007)
Break on OpenCLErrorBreak to debug.
OpenCL Warning : clBuildProgram failed: could not build program for 0x1022600 (GeForce 320M) (err:-2)
Break on OpenCLWarningBreak to debug.
[CL_BUILD_ERROR] : OpenCL Build Error : Compiler build log:
<program source>:58:21: error: global variables must have a constant address space qualifier
static const float4 ZERO_F4 = (float4)(0.0f, 0.0f, 0.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
最后一行有一个错误,它涉及一个const变量.你怎么解释这个?看起来编译器拒绝ZERO_F4,因为它不是const,但正如你所看到的,它实际上是.
看起来编译器拒绝ZERO_F4,因为它不是const,但正如你所看到的,它实际上是.
编译器拒绝它,因为ZERO_F4
它不在__constant
地址空间中(这与此无关const
).我相信这是XCode样本中的一个错误,因为OpenCL C规范清楚地说:
第6.5节地址空间限定符:
必须在
__constant
地址空间中声明所有程序范围变量.
因此替换这个:
static const float4 ZERO_F4 = (float4){ 0.0f, 0.0f, 0.0f, 0.0f };
static const float4 ONE_F4 = (float4){ 1.0f, 1.0f, 1.0f, 1.0f };
Run Code Online (Sandbox Code Playgroud)
有了这个:
__constant float4 ZERO_F4 = (float4){ 0.0f, 0.0f, 0.0f, 0.0f };
__constant float4 ONE_F4 = (float4){ 1.0f, 1.0f, 1.0f, 1.0f };
Run Code Online (Sandbox Code Playgroud)
它应该工作.