2016-12-17 17 views
1

私はopenSCLでクイックソート(recursiv)を1つのスレッドで行っていますが、いくつか問題があります。 intel cpu( "recursion detected" with openCL 2.0)用にコードをコンパイルしようとすると、openCLコンパイラはエラーを返しますが、nvidia 950M(openCL 1.2)ではほとんど再帰呼び出しがなくコンパイルされて動作します。なぜ地獄:1openCLスタック位置(再帰)

ファースト);

いくつかの調査の後、私は私のスタックが32KOよりも大きかったとき「OUT_OF_MEMORY」エラーが追加されていることがわかりましたので、私はあなたexpersのための2つの質問をしましたopenCL 1.2デバイスではなく、openCL 1.2デバイスで再帰を使用できますか? (openCL 1.2が再帰をサポートしていない場合)。

:プライベートメモリは(私のスタックの最大サイズのように)32Koを超えることはできません。だから、私のスタックは私のプライベートメモリに保存されていますか?または、同じ空間のある場所にいるだけですか?

答えて

0

再帰はOpenCLカーネルでは許可されません(「6.9制限」の項「i:「再帰はサポートされていません」を参照)。あなたのデバイスの1つで(部分的に)動作するという事実はバグです。

解決方法:再帰の代わりに反復を使用するようにカーネルを再コード化してください。

関連する問題