PR

 2018年3月26日から開催された、米エヌビディア(NVIDIA)主催の開発者会議「GPU Technology Conference(GTC)2018」の目玉となったのは、最大16個のGPUを相互接続するスイッチチップ「NVSwitch」と、それを応用したGPUスパコンの「DGX-2」だ。一体何がすごいのか。2018年の到達点を見ていこう。

GPU同士をつなぐNVLink

 NVSwitchは、GPU間を接続するインターコネクト技術の「NVLink」用のスイッチだ。前提としてNVLinkがGPUの高速化にどう寄与するかを知っておこう。

 エヌビディアが2016年に発表した「Pascal」アーキテクチャーのGPUは、NVLinkを通して他のGPUが持つメモリー上のデータを取り込める。Pascalやその後継のVoltaアーキテクチャーでは、NVLinkで接続されたGPUはあたかも単一のGPUであるかのように振る舞う。開発者からすれば、複数のGPUを使い分けるプログラムを作成する手間が省ける。

 もともとGPUは、超多コアのプロセッサのようなものだ。内部的には「SM(Streaming Multi-Processor)」の集まりとして構成されており、各SMは同時実行が可能な32のスレッドをひとまとめにして実行する*1。製品によってSMの数などが違うため、実行時に利用可能なSMに演算処理を割り当てていく仕組み。このため、SM数が増えれば並列度が上がり、より多くの演算を同時に処理できる。

 問題はGPUにスレッド、つまりプログラムとデータを転送するメモリーの転送速度だ。GPUは直接つながっているメモリーからデータを受け取って演算する。通常は、メインCPUかGPU側メモリーにデータを転送し、演算処理が終わった段階でメインCPUがGPUメモリーを読み出して結果を受け取る。NVLinkで接続されていない独立した2枚のGPUボードをPCI Expressスロットに装着した場合などでは、メインCPUがGPU間でメモリー内容を転送しなければならない。PCI Expressよりも高速なNVLinkを使えば、GPUは他のGPUのメモリーに直接アクセスできるようになる。

 2017年のVoltaは片方向で25Gバイト/秒、双方向で50Gバイト/秒のNVLinkを6リンク備えている。GPU全体で300Gバイト/秒(片方向では150Gバイト/秒)の転送速度を持つ。Volta GPUは最大8個のGPUをNVLinkで接続できる。

DGX-1では、8つのTesla V100を内蔵していたが、その接続では、各GPUの6本のNVLinkをGPU接続に振り分けていた
DGX-1では、8つのTesla V100を内蔵していたが、その接続では、各GPUの6本のNVLinkをGPU接続に振り分けていた
(出所:米エヌビディア)
[画像のクリックで拡大表示]

 ただしNVLinkは各Volta GPUに6つしかないため、8個のGPUを相互接続するには足りない。GPU間の接続が1リンクになったり、直接接続できなかったりする組み合わせが生じる。このためNVLinkで直接接続していないGPUのメモリーを他のGPUから参照する場合にスループットが落ちるなど、GPU間のメモリーアクセスにかかる時間や速度は一様ではなかった。

*1 この処理単位を「Warp」と呼ぶ。Warpは縦糸の意味で、スレッド(糸)をまとめたことに由来する。