2011-08-30 9 views
13

私は、ローカルメモリがレジスタメモリよりも遅い、スレッドごとに2つのタイプであるという発言を発見しました。ローカルメモリはCUDAの共有メモリよりも遅いですか?

共有メモリは高速だと思われますが、スレッドのローカルメモリより高速ですか?

私がやりたいことは、メディアンフィルタのようなものですが、中央値ではなくパーセンタイルを使用しています。したがって、私はリストの塊を取って並べ替え、適切なものを選ぶ必要があります。しかし、共有メモリのリストをソートすることはできません。ローカルメモリにコピーするだけで多くのパフォーマンスが失われますか?

+0

これは実際にプログラミング関連ではありませんか?私はMathematicaタグへの強力なリンクも見ません。 –

+7

@Sjoerd C. de Vries:CUDAの文脈では、プログラミングに関連する質問です。アーキテクチャには一様でないメモリ空間があり、プログラマはどのコードでどのメモリの種類とアクセス方法を使用するかを明示的に選択する必要があります書きます。これはCUDAプログラミングの基本的な教訓です。 – talonmies

+0

@talonmies私はそれを理解していますが、まだこの問題は、プログラム的にメモリを選択すること、APIの違いをプログラミングすること、レジスタをプログラミングすること、共有メモリをプログラミングすることなどに関することではありません。それはハードウェアの問題です。 OPは、例えばCUDAの共有メモリを使用してデータの特定のパーセンタイルを見つけるという問題の方向に質問を言い換えるべきだと感じています。 –

答えて

23

ローカルメモリはスレッドローカルグローバルメモリに過ぎません。レジスタや共有メモリよりもはるかに低速です(帯域幅とレイテンシの両方)。また、グローバルメモリトランザクションで使用可能なメモリコントローラの帯域幅を消費します。スペルや故意にローカルメモリを使用することによるパフォーマンスへの影響は、使用するハードウェアとローカルメモリの使用方法に応じて、軽微から重大なものになります。ワシーリーボルコフの研究によると

からBetter performance at lower occupancypdf)を参照してください - が共有メモリとの間の実効帯域幅で8差の要因についてですとフェルミのGPUに登録(約1000 Gb/sの共有メモリと8000 Gb/sのためにレジスタ用)。これは、CUDAのドキュメントとは多少矛盾しています。これは、共有メモリがレジスタと同等の速度を持つことを意味します。

+0

はい、この情報をサポートしている私の実験結果をさらに詳しく説明するために、talonmiesに感謝します。私の問題を伴うローカルメモリでの作業は、本当に桁違いに遅いです。私のプログラムはブロックあたりのハードウェア共有メモリサイズの限界ですでに動作しているので、再計算に共有メモリを使用できませんでしたので、パーセンタイルを探すためにスマートなレジスタメモリアルゴリズムを使用しなければなりませんでした。とにかく – JohnKay

関連する問題