GTC 2019で、「All you need to know about programming NVIDIA's DGX-2」という発表が行われた。この原題は、これだけ知っていればDGX-2のプログラミングができるという意味であるが、CUDAの基本的なプログラミングの知識などは、この発表の内容を理解するためにも必要であり、この発表の知識だけ知っていれば良いとも言えないので、日本語の題としては少し弱めの題にしている。
NVIDIAのDGX-2は、10Uの筐体に16個のTesla V100 GPUを詰め込んだサーバで、これらのGPUがNVLink2でキャッシュコヒーレントに接続されている。そして、この接続を実現するため、NVIDIAは、NVSwitchというスイッチチップを開発した。
-
NVIDIAのDGX-2サーバ。左の写真がV100 GPUで、右の写真が18ポートのNVSwitchである。中央の写真が10Uの筐体に入ったDGX-2サーバ。DGX-2の中央の部分の上側に見える箱がベースボードで、8個のV100 GPUと6個のNVSwitchが搭載されている。このベースボードが上下に2枚あり、その下にXeon CPUなどが収容されている (この連載の資料はNVIDIAのLars Nyland氏とStephen Jones氏の発表資料のコピー)
次の図の左の写真は8台のGPUを使う仮想通貨のマイニング用の装置、右はDGX-2の写真である。多数のGPUを搭載するという点では同じであるが、この2つの装置は何が違うのであろうか?
V100 GPUからのメモリアクセス
1つのGPUの場合、SM(緑の箱)からXBAR(GPUのチップ内のクロスバ)とL2キャッシュを経由してHBMメモリをアクセスする。また、SMはXBAR、HUB、PCIe I/Oを経由してPCIeバスに接続し、CPU側のメモリをアクセスすることもできる。
-
1つのGPUの場合、SMからXBAR、L2キャッシュを経由してHBM2をアクセス。また、XBAR、HUB、PCIeI/O、PCIe BUSを経由してCPUのメモリをアクセスする。どちらに行くかはアクセスするメモリのアドレスによる
2つのGPUがある場合は、PCIe BUSを通って他方のGPUに行き、他方のGPUに接続されているHBM2メモリをアクセスすることもできる。しかし、他のGPUへ行くBUSはPCIeバスのバンド幅で制限され、PCIe Gen3のx16バスで32GB/s(双方向の合計)である。