Xcode opencl内核操作数太多
我在“Mac版OpenCL编程指南”(rev.2013-08-08)中给出了基本的OpenCL示例。它工作得很好。然后我替换并添加了我自己的代码(用于光学计算),但随后它崩溃了,调试器显示“gcl_log_cl_fatal(err,“Executing calculate failed”);”。经过一些实验,我现在知道崩溃发生在哪里了,它发生在内核中的以下代码行中Xcode opencl内核操作数太多,xcode,macos,kernel,opencl,Xcode,Macos,Kernel,Opencl,我在“Mac版OpenCL编程指南”(rev.2013-08-08)中给出了基本的OpenCL示例。它工作得很好。然后我替换并添加了我自己的代码(用于光学计算),但随后它崩溃了,调试器显示“gcl_log_cl_fatal(err,“Executing calculate failed”);”。经过一些实验,我现在知道崩溃发生在哪里了,它发生在内核中的以下代码行中 float M = angle[i]; float K = sqrt(1.0f - M*M); // program crashe
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个操作数时,它会崩溃。可能不是硬件问题,因为苹果的NBody演示正常(我有一个ATI 4850;Xcode 5.1;osx 10.9)。我使用了推荐的库,没有额外的库,并且我已经检查了构建设置。
用2-opernd语句编写程序是可行的,但很难看,我不明白发生了什么
Tommy Landberg,斯德哥尔摩,瑞典苹果的Opencl实现很差,我认为这可能是他们的编译器中的一个错误。您能给出Opencl API返回的“err”值吗?不是硬编码的信息。您还可以提供内核构建日志,这会很有帮助。嘿,Tommy,您可以尝试在不进行优化的情况下编译代码吗?当使用clBuildProgram时,传递“-cl opt disable”并查看是否有效。如果是这样的话,至少你知道这是他们的优化程序中的一个bug,你可以在启动另一个系统时编写代码。M^2是否曾经>1.0f?如果是这样的话,你就是在取负数的平方根。谢谢你的评论。这个问题与苹果的gcl有关。当使用标准OpenCL函数时,程序运行良好。这不是一个负平方根问题(敏锐的Ditermaster:),也与优化无关。不幸的是,我不够熟练,无法用gcl获得一个好的构建日志文件。但是在编译分派队列块时会发生错误。汤米