Tegra X2のアーキテクチャについて

CUDAとかを呼び出すにあたって、アーキテクチャを知らないと性能でないよね。って話でちょっと調べてみた。

ここ*1とかここ*2、後はデータシートを参考にさせてもらってGPU部分の想像図を書いてみた。


Tegra X2のGPU部分想像図


Tegra X2のGPUはGP10Bというコードネームらしくて、同じ?Pascal世代のTesla GP100とかGTX1080 GP104とも少し構成が違うみたい。

Shared MemoryがThread Blockごとに48KBもある。かなり大きいね。本当かなぁ?間違ってたらごめんなさい。
あと、SMにCUDA Coreが128個の構成なのはGP104に近いかと思えば、Register Fileが32KなのはむしろGP100と同じだし。
ディープラーニング向け?に構成を寄せているのかもしれないね。


とりあえずShared MemoryとRegister Fileが多めに載っているということは、大量のWarpを投入して平行で動かさないと性能を出せない、あるいは大量に処理できるように意図して設計されているって感じなのかな。
いや、そもそもメモリがGDDR5ではないからメモリアクセスレイテンシを隠すための大量のインフライトWarpってだけの話かな。


2017/07/22 11:30追記 想像図を差し替え
ってやっぱり間違ってるじゃないですかー!
CUDAのCompute Capabilityって観点で調査して判明したのだけど、48KBってのはthread blockに割り当て可能な最大容量であって、Shared Memoryそのものの容量ではない様子。


GP10BのCompute Capabilityはここ*3とかここ*4を参照すると6.2ってことみたい。spec一覧に「Maximum amount of shared memory per multiprocessor」という項目があってそちらに64KBと書かれていた。
それで、「multiprocessor」というのがいわゆるSM。世代によってSMMとかSMXとかいろいろ呼ばれるようだけど、の機能ブロックを指しているらしい。


ただ、Register Fileについては結局よくわからなかった。
「Number of 32-bit registers per multiprocessor」が64KになってるからCUDA Core32個あたり16Kと思われるけど、いまいち確証が持てない。
2017/08/06 19:30追記 想像図を再度差し替え
TX2にCUDAをインストールしたら、/usr/local/cuda-8.0/tools/CUDA_Occupancy_Calculator.xlsにExcelファイルが入っていて、これでスレッドの並列度を計算できるらしいんだけど、これで計算してみるとRegister FileもSMで共有しているように見える。
ということで、想像図を差し替えてみた。