OpenCL/CUDAのメモリアクセスタイプごとにメモリレイテンシサイクルはいくつですか?
質問
プログラミングガイドとベストプラクティスガイドを調べましたが、グローバルメモリアクセスには400〜600サイクルが必要であると述べました。テクスチャキャッシュ、一定のキャッシュ、共有メモリなど、他のメモリタイプにはあまり見られませんでした。レジスタのメモリレイテンシーは0です。
一定のキャッシュは、すべてのスレッドが一定のキャッシュで同じアドレスを使用する場合、レジスタと同じだと思います。最悪の場合、私はよくわかりません。
共有メモリは、銀行の紛争がない限り、レジスタと同じですか?ある場合、レイテンシはどのように展開しますか?
テクスチャキャッシュはどうですか?
解決
共有/定数/テクスチャメモリのレイテンシーは小さく、どのデバイスがあるかによって異なります。一般に、GPUはスループットアーキテクチャとして設計されています。つまり、十分なスレッドを作成することにより、グローバルメモリを含む記憶へのレイテンシが隠されています。
ガイドがグローバルメモリへの遅延について話す理由は、他の記憶のレイテンシよりも桁違いが高いため、最適化のために考慮されるのは支配的なレイテンシであることを意味します。
特に一定のキャッシュに言及しました。ワープ内のすべてのスレッド(32スレッドのグループ)が同じアドレスにアクセスした場合、ペナルティはありません。つまり、値はキャッシュから読み取り、すべてのスレッドに同時にブロードキャストされます。ただし、スレッドが異なるアドレスにアクセスする場合、アクセスは シリアライズ キャッシュは一度に1つの値しか提供できないためです。 CUDAプロファイラーを使用している場合、これはシリアル化カウンターの下に表示されます。
共有メモリは、一定のキャッシュとは異なり、はるかに高い帯域幅を提供できます。をチェックしてください CUDAの最適化 詳細と銀行の紛争とその影響の説明については、お問い合わせください。
他のヒント
(ケプラー)テスラk20の場合、レイテンシは次のとおりです。
グローバルメモリ:440クロック
一定のメモリ
L1:48クロック
L2:120クロック
共有メモリ:48クロック
テクスチャメモリ
L1:108クロック
L2:240クロック
どうすればわかりますか?著者が記述したマイクロベンチマークを実行しました マイクロベンチマークを介したGPUマイクロアーキテクチャを分類します. 。それらは、古いGTX 280で同様の結果を提供します。
これはLinuxクラスターで測定され、ベンチマークを実行していたコンピューティングノードは、他のユーザーが使用したり、他のプロセスを実行したりしませんでした。これは、8つのコアXeonsと64 GB RAM、NVCC 6.5.12を備えたBullx Linuxです。私は変更しました sm_20
に sm_35
コンパイル用。
またあります オペランドのコスト PTX ISAの章はあまり役に立たないが、正確な数字を与えることなく、すでに期待していることを繰り返します。