我在" OpenCL Programming Guide for Mac"中制作了基本的OpenCL示例。 (rev.2013-08-08)。它工作得很完美。然后我替换并添加了我自己的代码(用于光学计算),但随后崩溃,调试器显示" gcl_log_cl_fatal(错误,"执行计算失败");"。经过一些实验,我现在知道崩溃发生在哪里,它发生在内核中的以下代码行中,
float M = angle[i];
float K = sqrt(1.0f - M*M); // program crashes
使用这些代码行进行的一些实验可以得到各种结果
示例1
float M = angle[i];
float K = sqrt(M*M); // works perfect
例2
float M = angle[i];
float MM = 1.0f - M*M; // program crash
float K = sqrt(MM);
示例3
float M = angle[i];
float MM = M*M;
float K = sqrt(1.0f - MM); // works perfect
似乎当每行有超过2个操作数时,在内核代码中,它会崩溃。可能不是硬件问题因为APPLE的NBody-demo有效(我有ATI 4850; Xcode 5.1; osx 10.9)。我使用推荐的库,没有额外的库,我已经检查了Build-Settings。 使用2-opernd语句制作程序有效,但很难看,我不明白发生了什么。
Tommy Landberg,瑞典斯德哥尔摩