Compute Capability 2.0 (Fermi) がリリースされた後、共有メモリの使用例が残っているのではないかと考えていました。つまり、L1 にバックグラウンドでマジックを実行させるよりも、共有メモリを使用する方がよいのはどのような場合でしょうか?
共有メモリは、CC < 2.0 用に設計されたアルゴリズムを変更せずに効率的に実行できるようにするためのものですか?
共有メモリを介して共同作業を行うには、ブロック内のスレッドが共有メモリに書き込み、 と同期し__syncthreads()
ます。単純にグローバル メモリに (L1 を介して) 書き込み、 と同期しないのはなぜ__threadfence_block()
ですか? 後者のオプションは、値の 2 つの異なる場所に関連付ける必要がないため実装が容易であり、グローバルから共有メモリへの明示的なコピーがないため高速です。データは L1 にキャッシュされるため、スレッドはデータが実際にグローバル メモリに到達するまで待機する必要はありません。
共有メモリを使用すると、そこに置かれた値がブロックの期間中ずっとそこに残ることが保証されます。これは、十分に頻繁に使用されない場合に削除される L1 の値とは対照的です。アルゴリズムが実際に持っている使用パターンに基づいて L1 に管理させるよりも、このようなめったに使用されないデータを共有メモリにキャッシュした方がよい場合はありますか?