1

OpenCL カーネルで奇妙なバグが発生しています。基本的に、これは N != pow of 2 にアップグレードされたバイトニック ソートです。私がしていることは、シーケンスが正しく順序付けられているかどうかをホストで確認することです。

現在、バグはランダムに発生するため、追跡が非常に困難です。毎回同じ方法で生成する多くの異なるシーケンスをソートすると、1 つのシーケンスがソートされず、次に別のシーケンスがソートされることがあります。ただし、出力の割合が高く、サイクルのホスト実装でも同じ入力が正しくソートされます。最も面白いのは、入力を保持してデバイスでもう一度実行すると、突然正しくソートされることです。

そのように動作するため、これは競合状態である可能性があるという考えを思いつきました。ただし、デバイスコードにはそのような場所がないため、可能性はホストだけです。順番待ちキューがあり、読み取りと書き込みがブロックされているため、問題はないはずですが、カーネルを実行した後に同期ポイントがありません。

そのような同期は必要ですか? in-order キューに対する OpenCL の保証は何ですか? カーネルが同じメモリピースですべての操作を完了する前に読んでいる可能性がありますか?

このランダムな発生に対する他の唯一のアイデアは、デバイスのメモリ障害ですが、これは私が受け入れる最後のオプションです。そのため、OpenCL でランダムな結果/バグが発生した場合の他のアイデアも歓迎します。

4

1 に答える 1

1

仕様によると、順序どおりのキューがある場合、カーネルとメモリの読み取り/書き込みは、キューに入れられた順序で完了します。ここで clCreateCommandQueue を参照してください http://www.khronos.org/registry/cl/sdk /1.1/docs/man/xhtml/ .

それが事実であることを100%確認したい場合は、メモリを読み取る前にバリアをキューに入れることができます。

于 2012-08-23T09:13:41.267 に答える