全国高校eスポーツ選手権運営の舞台裏。GPU世代と比較すると、その特徴が際立つ。NVIDIAは、Fermi→Kepler→Maxwellと、GPUアーキテクチャを発展させて来た。FermiとKeplerでは大きく設計思想が変わった。MaxwellはKeplerの発展形で、一見、Pascalもその延長にある。Pascalで強化されているポイントを見ると、Maxwellとは明確に設計の思想が変化していることが分かる。NVIDIAの4世代のTesla製品のスペック比較。GFLOPSはベース動作周波数で比較し、ブースト周波数時の性能はカッコ内に記載。Fermiではシェーダプロセッサ動作周波数PDF版はこちらスーパーコンピュータにとって重要な、演算とメモリ帯域の関係を、4世代のTesla系GPU製品で比較すると下のようになる。GPUの演算性能に対するメモリ帯域の比率であるByte/FLOPSはガクッと半分に落ちる。演算性能の伸びに、メモリ転送レートの高速化が追いつかなかったためだ。4世代のTesla製品の演算性能とメモリ帯域の比較PDF版はこちらMaxwell世代でもGDDR5のメモリ転送レートは据え置きで、そのためメモリ帯域はKepler世代と同等の288GB/secに留まった。それに対して、FP32の演算性能は上がったことで、Byte/FLOPS比率はさらに下がった。GPUは、演算性能こそ上がったものの、メモリ帯域の足枷がどんどんキツくなっていったことが分かる。メモリバウンドのアプリケーションが難しくなっていった。Pascalではそれが大幅に緩和される。MaxwellからPascalで、演算性能の1.6倍の上昇に対して、メモリ帯域は2.5倍に上昇。演算に対するメモリ帯域の比率はKepler世代より高くなった。Fermi世代の比率にまでは戻っていないが、低下の一途を辿っていたByte/FLOPS比率が急転して上昇し始めた。重要な点は、Pascal世代でGPU内部のレジスタファイルやキャッシュも大幅に増量された点。レジスタファイルは、Maxwell世代のGM200がGPU全体で6.1MBだったのに対して、Pascal世代のGP100では14.3MBと、2.3倍に増えている。GP100は3.6MB。これも約1.56倍となっている。GP100の3,584個へと1.17倍しか増えていない。相対的に演算ユニットに対するレジスタやメモリの量は大幅に増えた。NVIDIAの4世代のTesla製品における、浮動小数点演算ユニット数と内部メモリ&レジスタの量の比較PDF版はこちらGPUアーキテクチャ世代毎のユニット数を比較すると、Maxwell/KeplerからPascalで、演算ユニットに対するレジスタ量が飛躍的に増えていることが分かる。Pascalのレジスタは、Maxwellの2.3倍、Keplerの3.7倍だ。インフライトで走るスレッド数を倍増させるレジスタの増量は、GPUが走らせることができるスレッド数の増加に繋がる。GPUでは物理レジスタファイルの量に比例して、GPUが立ち上げることができるスレッド数が増大するためだ。NVIDIAのGPUは、「Warp」と呼ばれるスレッドバッチを単位として実行する。Warpは、コンピュータアーキテクチャ的に言えば論理ベクタで、NVIDIAの場合は32エレメンツをまとめて同じ命令を実行する。Warpの32の各レーンは、見かけ上はそれぞれ独立したスレッドのように実行されるが、マスクレジスタを使ったプレディケーションによって、32-wayの各レーン毎に命令を実行するかしないかを制御する。Thread)実行と呼んでいる。簡単に言えば、シングル命令ストリームのように実行できるスレッドが32個集まるとWarpになる。上位のプログラミングモデル上の概念として、最大32個のWarpで構成するスレッドブロックがある。Thread)型実行のフローPDF版はこちらGPUでは、CPUと異なりスレッドあたりのレジスタ本数は固定されていない。動的な割り当てが可能で、初期のGPUでは、スレッド当たりのレジスタ本数が非常に少なかった。GPUでは、スレッドあたりのレジスタは最大255本まで割り当てることができる。標準的には32レジスタ/スレッドだ。そのため、同じ32レジスタ/スレッドなら、レジスタ数が多いアーキテクチャが、より多くのスレッドを立ち上げることが可能となる。GP100の場合は、GPU全体で3,670,016本のレジスタを備え、GPU全体で3,584のWarpをインフライトで制御できる。各Warpは32スレッドのバッチであるため、インフライトで制御できるスレッド数はGPU全体で114,688となる。367万のレジスタに対して、11.4万のスレッドだ。各スレッド毎に32本のレジスタの計算となる。GM200と比較すると2.3倍、Keplerと比較すると3.7倍以上だ。GPUの演算ユニット数は、Kepler以来、増加のペースが衰えたが、インフライトWarp数は大幅に伸びていることが分かる。簡単に言えば、PascalにおけるNVIDIAのアーキテクチャ的な目的は、インフライトで実行できるスレッド、つまりWarp数を増やすことにある。そのためにレジスタファイルの量を増やす必要があった。レジスタ増量では、スレッドあたりのレジスタ数割り当てを増やすことが容易になることも利点だが、それよりもインフライトWarp数の増大の方が主眼だろう。共有メモリも各スレッド毎に一定量が欲しいため、インフライトWarp数が増えると共有メモリ量も増える。大きなワークロードに対応するためのスレッドリソースの増強もちろん、ワークロードによっては、これだけ膨大な数のスレッドを必要としないものも多い。NVIDIA)は次のように説明する。「原則的には、設計上のリソースの量を増やせば、それだけ多くのコードを走らせることができる。それほど多くのコードを走らせる必要がないタスクもあるだろう。タスクによっては、増やしたリソースを活かすことができる。設計思想として、我々は200~300Wの電力の枠の中で、ほとんど誰もが基本的に必要とすることが確実なリソースのエリア効率を追求するだけでなく、追加のリソースも加える。付加したリソースでより多くのコードを走らせることで、他のユーザーのニーズにも応える」。Computing)のような、問題のサイズが大きなワークロードでもベネフィットを得られるようにPascalのアーキテクチャを拡張しているようだ。ノードあたり11万以上のスレッドを、インフライトで立ち上げる必要があるようなワークロードだ。軽いタスクでは不要な機能であっても、それを必要とする有力な市場が存在するリソースは強化する方針だ。その背景には、時代とともにGPUコンピューティングが必要なワークロードの規模が大きくなり、ワンノードにより多くのリソースが必要になるだろうというNVIDIAの読みがある。Unit)化を推し進めようとしたAMDと発想が異なる点だ。乱暴に言うと、AMDはGPUが実行するタスクの粒度が小さくても快適に利用できるようにと指向し、NVIDIAはGPUが実行するタスクの粒度が大きい時に最大の効率を発揮できるように指向して来た。AMDは方向性が変わりつつある。Multiprocessor)の構成PDF版はこちらメモリアクセスレイテンシを隠蔽できるインフライトスレッドの倍増GPUのレジスタ量の変化は、メモリアクセスレイテンシの隠蔽とも関係がある。CPUとGPUでは、メモリアクセスレイテンシの隠蔽の方法が異なる。CPUは実行時の遅延がクリティカルであるため、キャッシュを使ってメモリアクセスのレイテンシを隠蔽する。それに対して、膨大な数のスレッドを並列実行できるGPUでは、スレッドの並列性でメモリアクセスレンテンシを隠蔽する。あるスレッドがメモリアクセス待ちでストールしている間も、別なスレッドを走らせることで、アクセスレイテンシを隠蔽してしまう。現在のGPUはキャッシュも搭載しているが、それでもマルチスレッディングによるメモリレイテンシ隠蔽の傾向は強い。スレッディングでレイテンシを隠蔽するためには、レジスタ数が必要となる。GPUはメモリ帯域が大幅に増えたため、インフライトのスレッド数を増やすことが可能になったとも言える。Maxwell/Kepler世代では、メモリ帯域の制約がキツいため、インフライトのWarp数を増やしても、アクセス競合でストールしてしまう。Pascalではメモリ帯域制約が緩んだために、Warp数を増やしてメモリアクセスレイテンシをカバーする意味が出てきたとも見える。比較すると下の図のようになる。GFLOPSと比較すると、レジスタ数とWarpの増大はそれなりに釣り合っているように見える。実効GFLOPSを向上させるには、それだけスレッド数を増やす必要があるという発想も見える。レジスタ&メモリ量の比較PDF版はこちらFinFET化による動作周波数の向上で性能をKepler世代の2.2倍にPascalでCUDAコア(FP32演算ユニット)の数は117%にしか増えていないのに、FP32性能が1.63倍に増えているのは、動作周波数が上がったからだ。M40(GM200)の動作周波数はベースが948MHz、ブーストが1,114MHzだった。P100(GP100)では、それがベース1,328MHz/ブースト1,480MHzに上がっている。継続動作が可能なベース周波数は1.4倍、ブースト時の周波数は1.32倍に上がった。K40(GK110)と比較すると、ベース周波数で1.78倍、ブースト周波数で1.69倍にもなる。動作周波数、CUDAコア数の比較PDF版はこちらプロセッサはパイプラインアーキテクチャを変えて、段数を深くすれば動作周波数を上げることができる。Alben氏はそうした設計を否定する。「Maxwell世代では、Keplerと比べて動作周波数が上がった。この理由の1つは、Maxwellでは電力効率がKeplerより上がったことで、動作周波数を上げる余裕ができた為だった。今回のPascalは、FinFETの低電力なプロセス技術となった。そのため、自然に(動作周波数を)引き上げることができた。我々は、より深いパイプラインなどの設計は試みていない」。3Dトランジスタ、16FF+プロセスの効果で、性能/電力効率が大幅に改善された。そのため、動作周波数の向上だけで、CUDAコア数を17%しか増やさなくても、性能を63%増やすことが可能になった。実際には、多くのTeslaユーザーはKepler世代に留まっているため、性能アップの幅はより大きい。P100(GP100)は、FP32ではベース周波数時に2.2倍、FP64では3.3倍、FP16では4.4倍の性能となる。ちなみにNVIDIAは、Fermi世代までは、GPUのプロセッサコア部分を部分的にハンドメイド設計にして、動作周波数を他のユニットの2倍にしていた。M2090(GF110)では、ベースは650MHzでも、プロセッサコアだけは1,300MHzで動作していた。Pascalの動作周波数は、Fermi世代のプロセッサコア周波数に到達したことになる。