我有一个完全复杂的内核处理音频输入数据。它将运行几分钟,每秒60次,然后挂起。这是在GPU上;在CPU上它会运行几个小时。输入数据不断变化,但每个变量始终在禁止范围内。我在每帧上传输入到内核之前插入了测试代码;在这个测试代码中,我可以强制这些输入远低于它们的有效输入范围,但它最终仍会崩溃。 (假设特定输入的有效范围是0-> 400;我可以强制它为0-> 1并且它仍然会最终崩溃。我可以强制它低于0.1并且它仍将最终咬住灰尘。 )但是,如果我强制输入变量为零,GPU将很乐意跳舞几个小时。当然,那种无投入的舞蹈并不是特别有趣。
到目前为止,我很茫然,尽管我有线索。如果输入变量在其批准范围内很高,我可以使其崩溃快于2分钟。在适当的情况下,我可以在不到10秒的时间内使其崩溃。但是,我似乎无法_off_off_of_那些某些情况,他们会离开。如上所述,我可以强制输入变量进入其有效范围的可笑小部分,并且内核(让我们称之为Harlan Sanders)最终会变得瘫痪。但是,如果他们被迫实际零,小狗没问题,我们可以整天跑。重复一遍,我有点不知所措 - 尽管我看起来像线索,我还没弄清楚他们暗示的是什么,虽然我已经尝试了几天。坦率地说,我不希望通过在这里询问来找到真正的解决方案;每当我偶然发现opencl中的问题时,我的命运似乎是第一个明确表达这个问题的人。我想这是在婴儿时期进入技术的乐趣的一部分!!!!!!!!!!但是,我想用这个“宝贝”(或者,也许是“幼儿”)做一些认真的,可持续的工作。
操作细节:MacBook Pro 2010,OS 10.6.8,nv 330M GPU,xcode 3.2.5,短裤,teeshirt。
奖金P.S.对于那些读过这篇文章的人,包括一个相关的问题: 事实证明,我的笔记本电脑,战士在下一阶段还不够强大。我必须出售一些股票/债券并购买Mac Pro。我正在看ATI 5870.所以,当我为ATI编译.cl时,PERHAPS我的问题就会消失也许我遇到了nV实现中的错误。也许我的内核非常复杂,以至于我遇到了未检测到的资源限制(这是1300行代码)。那么,自从我在CPU上运行正常,也许我在ATI卡上没有错误或不同的错误???
有什么想法吗?
谢谢,伙计们和娃娃 - 戴夫
答案 0 :(得分:0)
在CPU端使用“cl_”数据类型,因为您可能没有以正确的方式处理数据,或者GPU没有理解它。这可能导致GPU在处理数据时挂起无效指针。 您还应该尝试-Werror,并读取错误输出。你可能做错了。
没有任何代码,我们只能猜测。但我没有在实际的OpenCL NV或ATI实现中发现任何错误。
答案 1 :(得分:0)
确保释放所有资源。必须释放Enqueue函数返回的事件。访问缓冲区超出范围后,有时会发生此错误。