GPUプログラミング

GPUのSIMT(単一命令・複数スレッド)の方式と、CPUのSIMD命令の違いとして正しいものはどれか。

  1. ASIMTは1つのデータに複数の命令を同時に行い、SIMDは1つの命令を1つのデータに行う
  2. BSIMTとSIMDはまったく同じもので、名前が違うだけである
  3. CSIMTでは各スレッドを独立したプログラムとして書け、分岐もハードウェアが処理するが、SIMDではプログラマやコンパイラが幅の決まったベクトルの命令を明示的に使う
答えと解説を見る

正解:C. SIMTでは各スレッドを独立したプログラムとして書け、分岐もハードウェアが処理するが、SIMDではプログラマやコンパイラが幅の決まったベクトルの命令を明示的に使う

CPUのSIMDでは、4個や8個のデータをまとめたベクトルのレジスタに1つの命令をかけるので、プログラムはベクトルの幅を意識して書きます。GPUのSIMTでは、プログラマは1本のスレッドの処理を普通に書き、ハードウェアが32本ずつ束ねて同じ命令で動かします。スレッドごとに分岐してもよく、ハードウェアが分岐した経路を順に実行しますが、そのときは効率が下がります。

  • A. どちらも1つの命令を複数のデータに行います。
  • B. プログラムの書き方と分岐の扱いが違います。
  • C. 正しい。中では同じ命令で動きますが、書き方が違います。
この分野を解く 分野ページへ

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

  1. 1つのワープの中で、条件分岐によってスレッドの半分がif側、残りの半分がelse側に分かれた(ワープダイバージェンス)。一般にどう実行されるか。
  2. 上の(1)と(2)は、どちらもスレッドの半分にA、残りにBを実行させる。ワープの効率の点で正しい説明はどれか(1ワープ32スレッドとする)。
  3. GPUのメモリ合体アクセス(コアレッシング)の説明として正しいものはどれか。
  4. 各スレッドの番号をiとして、上のように32要素おきに配列を読むと、a[i]を読む場合に比べて遅くなる。主な理由はどれか。
  5. 粒子の位置x、y、zを持つデータをGPUで処理するとき、メモリ合体アクセスの点で有利な並べ方はどれか。