KeplerアーキテクチャのGPUでL2キャッシュが参照の局所性に関してどのように機能しますか?たとえば、スレッドがグローバルメモリ内のアドレスにアクセスする場合、そのアドレスの値がL2キャッシュにないと仮定して、値はどのようにキャッシュされますか?それは一時的ですか?または、そのアドレスの近くにある他の値もL2キャッシュに持ち込まれていますか?KeplerのL2キャッシュ
以下の画像はNVIDIAホワイトペーパーのものです。
KeplerアーキテクチャのGPUでL2キャッシュが参照の局所性に関してどのように機能しますか?たとえば、スレッドがグローバルメモリ内のアドレスにアクセスする場合、そのアドレスの値がL2キャッシュにないと仮定して、値はどのようにキャッシュされますか?それは一時的ですか?または、そのアドレスの近くにある他の値もL2キャッシュに持ち込まれていますか?KeplerのL2キャッシュ
以下の画像はNVIDIAホワイトペーパーのものです。
統一L2キャッシュは、計算能力2.0以降で導入され、ケプラー・アーキテクチャ上に支持され続けました。使用されるキャッシング・ポリシーは、LRU(最近使用された最小)であり、主な目的はグローバル・メモリー帯域幅のボトルネックを回避することでした。 GPUアプリケーションは、両方のタイプの局所性(時間的および空間的)を呈することができる。
特定のメモリを読み込もうとすると、キャッシュL1とL2が見つからない場合は常に、キャッシュラインから128バイトがロードされます。これがデフォルトモードです。 128ビットのアクセスパターンが良い結果をもたらすのは、下の図からも同じことが理解できます。
上記投稿の最初の段落が質問に答えます。この回答の2番目の段落については、(デフォルトモードで)デバイスのアーキテクチャがFermiの場合にのみ当てはまります。コメントの中で@Robert Crovellaが述べたように、KeplerではL2キャッシュミスの結果、32バイトの負荷がかかります。また、私はダイアグラムが誤解を招くと思います。 SMが少数のスレッドで十分に活用されていない場合、より広いグローバルメモリ要求がグローバルメモリ帯域幅を飽和させる可能性があります。 SMがより多くのスレッドで占有されるようになると、4バイトの負荷でもグローバルなメモリ帯域幅が飽和します。 – Farzad
L2キャッシュは、計算能力2.0以降で導入され、ケプラー・アーキテクチャ上に支持され続けました。使用されるキャッシング・ポリシーは、LRU(最近使用された最小)であり、主な目的はグローバル・メモリー帯域幅のボトルネックを回避することでした。私は "Cuda Application design and development"という本から読みました。それがあなたの質問に答えるかどうかは分かりません。 –
L1キャッシュのキャッシュラインサイズは128バイトです。 L2キャッシュのキャッシュラインサイズは32バイトです。したがって、L2ミスは32バイトの負荷を引き起こします。ケプラーは通常、通常のグローバルロードではL1を有効にしません。 –