我正在尝试运行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);
最后一行有一个错误,涉及一个const变量。你怎么解释这个?看起来编译器拒绝ZERO_F4,因为它不是const,但正如你所看到的,它实际上是。
答案 0 :(得分:8)
看起来编译器拒绝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 };
有了这个:
__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 };
它应该有用。