Opencl &引用;“随机”;运行分钟后内核崩溃。。。。HEP!?——[同一问题张贴在Khronos上]

Opencl &引用;“随机”;运行分钟后内核崩溃。。。。HEP!?——[同一问题张贴在Khronos上],opencl,Opencl,我有一个非常复杂的内核来处理音频输入数据。它将运行几分钟,每秒60次,然后挂起。那是在GPU上;在CPU上,它将运行数小时。输入数据不断变化,但每个变量始终在规定范围内。在每一帧将输入上传到内核之前,我已经插入了测试代码;在这个测试代码中,我可以强制这些输入远低于它们的有效输入范围,但它最终还是会崩溃。(假设一个特定输入的有效范围是0->400;我可以强制它到0->1,它最终还是会崩溃。我可以强制它到0.1以下,它最终还是会死掉。)然而,如果我强制输入变量为零,GPU会高兴地跳上几个小时。当然,

我有一个非常复杂的内核来处理音频输入数据。它将运行几分钟,每秒60次,然后挂起。那是在GPU上;在CPU上,它将运行数小时。输入数据不断变化,但每个变量始终在规定范围内。在每一帧将输入上传到内核之前,我已经插入了测试代码;在这个测试代码中,我可以强制这些输入远低于它们的有效输入范围,但它最终还是会崩溃。(假设一个特定输入的有效范围是0->400;我可以强制它到0->1,它最终还是会崩溃。我可以强制它到0.1以下,它最终还是会死掉。)然而,如果我强制输入变量为零,GPU会高兴地跳上几个小时。当然,这种无输入的舞蹈并不是特别有趣

虽然我有线索,但到目前为止我还是不知所措。如果输入变量在其批准的范围内很高,我可以使其崩溃速度快于2分钟。在适当的情况下,我可以在不到10秒内使它崩溃。但是,我似乎不能放弃那些特定的情况,让它们消失。如上所述,我可以强制输入变量进入其有效范围的极小部分,内核(我们称他为Harlan Sanders)最终将崩溃。但是,如果它们被强制为零,没有问题,小狗,我们可以整天跑步

再说一遍,我有点不知所措——虽然我有一些看起来像线索的东西,但我还没有弄明白它们在暗示什么,尽管我已经尝试了几天。坦率地说,我不希望通过在这里提问来找到真正的解决办法;每当我在opencl中遇到一个问题时,似乎我的命运就是第一个阐明这个问题。我想这是在一项技术的幼年时期参与其中的一部分乐趣!!!!!!!!!!但是,我想对这个“婴儿”(或者,可能是“蹒跚学步的孩子”)做一些严肃、可持续的工作

操作细节:MacBookPro 2010,操作系统10.6.8,nv 330M GPU,xcode 3.2.5,短裤,T恤

对于已经阅读到这篇文章的读者,包括一个相关的问题: 我的笔记本电脑,它已经被证明是一个士兵,对于下一个阶段来说还不够强大。我必须卖掉一些股票/债券并购买Mac Pro。我正在看ATI 5870。所以,当我为ATI编译.cl时,也许我的问题就消失了???也许我在nV实现中遇到了一个bug。也许我的内核太复杂了,以至于我遇到了未检测到的资源限制(1300行代码)。所以,既然我在CPU上运行良好,也许我在ATI卡上就不会有任何bug,或者不同的bug

有什么想法吗

谢谢,伙计们-- Dave

在CPU端使用“cl_”数据类型,因为可能您没有正确处理数据,或者GPU不理解数据。这可能导致GPU在处理数据时挂起无效指针。 您还应该尝试-Werror,并读取错误输出。你可能做错了smt


没有任何代码,我们只能猜测。但是我在实际的OpenCL NV或ATI实现中没有发现任何错误。

请确保释放所有资源。必须释放排队函数返回的事件。有时在访问超出范围的缓冲区后会发生此错误。

谢谢您的建议。我将尝试找出如何通过xcode将-Werror传递到opencl编译器。在排队读取时,我希望得到比无效命令队列更好的错误信息。我也可以尝试cl_uu数据类型;我现在只是在传递一个单一的结构充满了浮动,短裤和字符。有趣的是,在内核中注释掉像“T=1.-T”这样的东西可以修复它(加载的参数被规范化为0->1,所以这应该没有过程效果。)有趣的是,它将运行~5400x b4失败。很抱歉不会让你有1300行,核心算法是敏感材料。如果我能把它砍掉,我会的!谢谢我确实想到了,但我在传递NULL,它将传递回事件,我认为,所以它们不需要被释放?。。。i、 e.“err=clEnqueueWriteBuffer(queue,invars,CL_-TRUE,0,sizeof(varholder),&f,0,NULL,NULL);”和“err=clenqueueendrangekernel(queue,kernel,2,NULL,glbsz,NULL,0,NULL);“err=clenqueueureradbuffer(queue,extuff,CL_-TRUE,0,obufsize,buf,0,NULL);”