GPUプログラミング

CUDAの共有メモリのバンク競合の説明として正しいものはどれか。

  1. A2つのGPUが同じ銀行口座を使う問題
  2. B共有メモリの容量が足りなくなって、プログラムが止まる問題
  3. C共有メモリは32個のバンクに分かれていて、ワープの複数のスレッドが同じバンクの別の番地を同時に読むと、アクセスが順番に行われて遅くなる
答えと解説を見る

正解:C. 共有メモリは32個のバンクに分かれていて、ワープの複数のスレッドが同じバンクの別の番地を同時に読むと、アクセスが順番に行われて遅くなる

共有メモリは、4バイトごとに順番に割り当てた32個のバンクでできていて、それぞれのバンクは1回に1つの番地しか読み書きできません。ワープの32本が別々のバンクを使えば1回で済みますが、2本が同じバンクの違う番地を使うと2回に分かれます。例えば32要素おきに読むと、全員が同じバンクに集まり、32回に分かれてしまいます。全員が同じ番地を読む場合は、一斉に配られるので競合しません。

  • A. お金の話ではありません。
  • B. 容量の問題ではありません。
  • C. 正しい。同じ番地なら一斉に配れるので競合しません。
この分野を解く 分野ページへ

GPUプログラミングのほかの問題

  1. 32×32のfloatの表を共有メモリに置き、ワープの32本で列の方向(縦)に読むとバンク競合が起きる。よく使われる対策はどれか。
  2. GPUで大きな行列の積を計算するとき、行列を小さなタイルに分けて共有メモリに読み込む理由として正しいものはどれか。
  3. GPUのカーネルで、1スレッドあたりのレジスタの使用量が多すぎると起こりうることとして正しいものはどれか。
  4. GPUの占有率(オキュパンシー)の説明として正しいものはどれか。
  5. GPUがメモリの長い遅延(数百クロック)を隠す主な方法として正しいものはどれか。