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というスイッチチップを開発した。
次の図の左の写真は8台のGPUを使う仮想通貨のマイニング用の装置、右はDGX-2の写真である。多数のGPUを搭載するという点では同じであるが、この2つの装置は何が違うのであろうか?
V100 GPUからのメモリアクセス
1つのGPUの場合、SM(緑の箱)からXBAR(GPUのチップ内のクロスバ)とL2キャッシュを経由してHBMメモリをアクセスする。また、SMはXBAR、HUB、PCIe I/Oを経由してPCIeバスに接続し、CPU側のメモリをアクセスすることもできる。
2つのGPUがある場合は、PCIe BUSを通って他方のGPUに行き、他方のGPUに接続されているHBM2メモリをアクセスすることもできる。しかし、他のGPUへ行くBUSはPCIeバスのバンド幅で制限され、PCIe Gen3のx16バスで32GB/s(双方向の合計)である。