我正试图在ATI Radeo 4850卡上运行NVidia的OpenCL演示oclNbody.exe,但收到这样的错误:
生成日志:C: \DOCUME~1\DDIMEDR~1\LOCALS~1\Temp\OCL27C.tmp.cl(33):错误:标识符
"float3" is undefined
REAL3-bodyBodyInteraction(REAL3-ai,REAL4 bi,REAL4 bj,REALsofteningSquared)
^
对于使用的所有REAL3数据类型,依此类推。我看过OpenCL规范1.1,它清楚地表明float3是受支持的。我试着用float3改变REAL3,但没有成功。我的卡上有最新的驱动程序。使用Windows XP SP3 OS
如何修复或解决此错误?
float3
和其他三分量矢量类型不属于OpenCL 1.0规范的一部分;它们被添加到1.1版本中。根据AMD的驱动程序兼容性页面,Radeon HD 4800卡仅支持OpenCL 1.0。
编译器试图将float3
解释为标识符,这表明它不是可识别的类型。
我找到了一个解决方法:
- 使用float4而不是float3
- #定义ZERO4{0.0f,0.0f,0.0.f}并使用它来代替ZERO3
- 并将工作组的数量减少到64个(原来是256个)
它成功了!