E資格(エンジニア資格) 無料問題 10 / 10 ・ 分野5: 開発・運用環境
NVIDIA GPU の SIMT(Single Instruction, Multiple Threads)が SIMD と異なる点として、CUDA プログラミングガイドが述べているものはどれか。
- SIMT は、命令が1つのスレッドの実行と分岐の動きを指定する
- SIMT は、命令が処理要素の並びの幅をソフトウェアに公開する
- SIMT は、スレッドごとに別々の命令を同時に流して動かす
- SIMT は、1つの命令でワープ内の分岐先を1つに決める
正解と解説を見る
正解: A
正解の理由
SIMT も SIMD も、1つの命令で複数の処理要素を制御する。違いは、SIMD では処理要素の並びの幅がソフトウェアに見えるのに対し、SIMT では命令が1つのスレッドの実行と分岐の動きを指定することである。プログラマーはスレッド単位でコードを書き、ハードウェアが32スレッド(ワープ)ずつ束ねて、ワープごとに1つの共通の命令を実行する。
違う選択肢
「SIMT は、命令が処理要素の並びの幅をソフトウェアに公開する」… 幅をソフトウェアに公開するのは SIMD の側である。SIMT では、プログラマーは幅を意識せずに1つのスレッドの動きを書く。
「SIMT は、スレッドごとに別々の命令を同時に流して動かす」… SIMT も Single Instruction で、ワープは1度に1つの共通の命令を実行する。スレッドごとに別の命令を同時に流すのではなく、同じ命令を複数のスレッドが実行する。
「SIMT は、1つの命令でワープ内の分岐先を1つに決める」… SIMT のスレッドは、データに依存する条件分岐で別の経路をたどる。ワープの中で分かれると、各経路を順に実行して、通らないスレッドを無効にする。
押さえどころ
GPU は、同じ演算を大量のデータに行う処理(行列の積など)に強く、深層学習の学習と推論の高速化に使う。ワープ内でスレッドが同じ経路を通るときが最も効率がよく、分岐が多いと効率が落ちる。