私のCUDAアプリケーションでは、デバイスメモリから共有メモリにデータをコピーしています。そのデータはL1にもキャッシュされていますか?
2 に答える
デフォルトでは、グローバルメモリからのすべてのメモリロードはL1にキャッシュされます。グローバルメモリロードのターゲットの場所は、L1キャッシングに影響を与えません(レジスタ、共有メモリ、スレッドローカルメモリのいずれであっても)。共有メモリ自体は明らかにキャッシュされていません。
これは、@talonmiesが言ったことを拡張するためだけのものです。
コピーは、低レベルでの2つの別個の操作、ロードとストアです。ロードとストアの両方がグローバルメモリにアクセスする場合、L1とL2にキャッシュできます。
コピーのロード部分はグローバルメモリからのものであるため、デフォルトではL1とL2の両方にキャッシュされます。したがって、コンパイラがグローバルから共有メモリにコピーするという特別な状況を検出し、キャッシュされていないロードを使用しない限り、共有メモリとL1キャッシュはで実装されているため、同じレイテンシでアクセスできるデータの2つのコピーになります。同じ物理オンチップメモリ。
CUDA Cプログラミングガイド4.2から:
マルチプロセッサごとにL1キャッシュがあり、すべてのマルチプロセッサで共有されるL2キャッシュがあります。どちらも、一時的なレジスタの流出を含め、ローカルまたはグローバルメモリへのアクセスをキャッシュするために使用されます。キャッシュの動作(たとえば、読み取りがL1とL2の両方にキャッシュされるか、L2のみにキャッシュされるか)は、ロードまたはストア命令の修飾子を使用して、アクセスごとに部分的に構成できます。
この動作がCUDACからどのように変更されるかについては何も見つかりませんでした。