7

私は一連の数学関数を設計し、CPU と GPU (CUDA を使用) の両方のバージョンでそれらを実装しています。

これらの関数の一部は、ルックアップ テーブルに基づいています。ほとんどのテーブルは 4KB を使用し、一部のテーブルはそれ以上を使用します。ルックアップ テーブルに基づく関数は、入力を受け取り、ルックアップ テーブルの 1 つまたは 2 つのエントリを選択し、同様の手法を補間または適用して結果を計算します。

私の質問は次のとおりです。これらのルックアップ テーブルをどこに保存すればよいですか? CUDA デバイスには、値を格納するための多くの場所があります (グローバル メモリ、定数メモリ、テクスチャ メモリなど)。すべてのテーブルが多くのスレッドによって同時に読み取られる可能性があり、入力値、したがってルックアップ インデックスがすべてのワープのスレッド間で完全に無相関である (その結果、無相関のメモリ アクセスが発生する) 場合、どのメモリが最速のアクセスを提供しますか?

これらのテーブルの内容は事前に計算され、完全に一定であることを付け加えておきます。

編集

明確にするために、約 10 個の異なる 4KB ルックアップ テーブルを格納する必要があります。とにかく、この場合の解決策が、たとえば 100 個の 4KB テーブルまたはたとえば 10 個の 16KB ルックアップ テーブルの場合と同じであるかどうかを知ることは素晴らしいことです。

4

1 に答える 1