GPUプログラミング

CUDAの共有メモリ(シェアードメモリ)の特徴として正しいものはどれか。

  1. AすべてのGPUとCPUで共有する、大容量の主記憶
  2. BGPUのメモリをハードディスクと共有する領域
  3. C同じブロックのスレッドで共有できる、チップ上の小さく高速なメモリで、プログラムが明示的に使う
答えと解説を見る

正解:C. 同じブロックのスレッドで共有できる、チップ上の小さく高速なメモリで、プログラムが明示的に使う

共有メモリは、各SMの中にある1ブロックあたり数十KB程度の高速なメモリで、グローバルメモリ(GPUのDRAM)より何十倍も速く読み書きできます。同じブロックのスレッドがデータを置いて共有できるので、グローバルメモリから一度だけ読み込んで何度も使う、スレッドどうしで途中の結果を受け渡す、といった用途に使います。キャッシュと違い、何を置くかをプログラムが決めます。

  • A. それはグローバルメモリやユニファイドメモリに近い説明です。
  • B. ディスクとは関係ありません。
  • C. 正しい。プログラムで管理するキャッシュのように使えます。
この分野を解く 分野ページへ

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

  1. CUDAの__syncthreads()の働きとして正しいものはどれか。
  2. CUDAで、__syncthreads()を「if (threadIdx.x < 16)」の中に書き、一部のスレッドだけが通るようにした。起こりうることとして正しいものはどれか。
  3. CUDAの共有メモリのバンク競合の説明として正しいものはどれか。
  4. 32×32のfloatの表を共有メモリに置き、ワープの32本で列の方向(縦)に読むとバンク競合が起きる。よく使われる対策はどれか。
  5. GPUで大きな行列の積を計算するとき、行列を小さなタイルに分けて共有メモリに読み込む理由として正しいものはどれか。