Xcode opencl内核操作数太多

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

我在“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 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获得一个好的构建日志文件。但是在编译分派队列块时会发生错误。汤米