スレッドごとに小さな連想配列を維持する必要があるCUDAカーネルを書いています。小さいとは、最悪の場合に最大8つの要素を意味し、予想されるエントリ数は2程度です。だから何も派手ではありません。キーの配列と値の配列だけであり、インデックス付けと挿入は、上記の配列のループによって行われます。
今、私はスレッドローカルメモリを使ってこれを行います。つまり、識別子[サイズ]です。ここで、sizeはコンパイル時定数です。ある状況ではこのメモリはオフチップに保存され、ある状況ではオンチップに保存されると聞いたことがあります。明らかに、私はすべての状況下で後者が欲しいです。私は、共有メモリのブロックを使用してこれを実現できることを理解しています。共有メモリでは、各スレッドを独自のプライベートブロックで動作させます。でも本当に?私はスレッド間で何も共有したくありません、そしてそれは恐ろしい恨みでしょう。
この記憶がどこに行くかについての規則は正確には何ですか?nvidiaから単語が見つからないようです。記録のために、私はCUDA5を使用し、Keplerをターゲットにしています。