4

ブロック間同期(N次元と他のメモリ転送操作の合計)を実行する必要があるコードを書いています。問題の次元をインクリメントすると、結果は間違っています。

との同期を行っていますが__threadfence()、最初のディメンション(N <192)は問題ありませんが__threadfence()、コードに他のディメンションを挿入すると、より多くのディメンションに対して正しい結果が得られます。

同期するには1つでthreadfence()は不十分ですか?さらに、データ結果は同じブロックで使用されます。

プログラミングガイドの情報は、threadfenceすべてのメモリスペースの準備ができていることを示しています(共有およびグローバル)

4

2 に答える 2

11

ブロック間の同期を実行する良い方法はありません。スピン待機と GPU メモリ帯域幅を食い尽くすハックなアプローチを採用するか、カーネルを終了して新しいカーネルを開始することができます。

__threadfence()ブロック間の同期用ではありません。__threadfence()共有およびグローバル メモリへの以前のすべての書き込みが他のスレッドから見えるようになるまで、現在のスレッドを停止するために使用されます。ただし、停止したり、他のスレッドの位置に影響を与えたりすることはありません!

次の質問を確認できます。

于 2012-07-20T16:12:34.183 に答える