GTC Japan 2015においてNVIDIAの成瀬彰氏が「GPUコンピューティング最新情報」と題して、MaxwellアーキテクチャとCUDA7.5に関する発表を行った。Maxwellは同社の最新のGPUであるが、その中身に関する情報は比較的少ない。

これはTSMCなどの20nmプロセスが、期待したほどのチップ縮小効果が得られず、各社は28nmプロセスに留まることになったため、NVIDIAも倍精度浮動小数点演算器を多数搭載するHPC向けのハイエンドなMaxwellを作るのを諦めたことが関係している。HPCユーザはハードに即したチューニングを行って最高性能を引き出そうとするので、ハードウェアアーキテクチャの情報を必要とするが、ゲーマーはプログラムを作る訳ではないので、アーキテクチャ情報は必要とせず、少数のゲームエンジンなどの開発者だけに情報を提供すれば済む。

Maxwellでは倍精度浮動小数点演算性能が弱体でHPCユーザはほとんど使わないので、NVIDIAにとって、Maxwellのアーキテクチャ情報を開示するメリットがない。このため、情報が出てこないという状況になっていると考えられる。

色々な改良が施されている「Maxwell GPU」

しかし、今回の成瀬氏の発表で、実はMaxwellは次世代のPascalのベースとなるアーキテクチャであることが明らかにされた。Maxwellのストリームマルチプロセサ(SM)はKeplerからは一新されており、PascalのSMと基本はほぼ同じであり、Pascal ≈ Maxwell + Mixed Precision + 3D Memory + NVLinkであるという。

また、次の表は、各アーキテクチャでの浮動小数点演算器の搭載状況を示すもので、Maxwellでは32bitのFP32演算器だけの搭載であることが明らかとなった。そして、Pascalでは16bitのFP16、32bitのFP32、64bitのFP64の演算器がすべて搭載されこれらを混合して使用できるMixed Precisionとなる。

MaxwellのSMはKeplerから一新され、PascalもこのSMに近い構成となる。Pascal ≈ Maxwell + Mixed Precision + 3D Memory + NVLinkであるという

前世代のKeplerでは1つのSMに192個のCUDAコアが搭載されていたが、MaxwellではCUDAコアの数が128個に削減され、32個ごとにコントローラを持つ構造に変更されている。これはサイクルあたりの命令発行能力を増やし、CUDAコアを無駄なく使うための変更である。

また、Maxwellでは、Keplerと比べて演算器のレーテンシが短縮されているという。GPUでは命令レーテンシを隠ぺいするために多数のワープを切り替えながら実行するが、演算のレーテンシが短くなれば、その分、並列に実行するワープ数は少なくて済む。並列実行するワープは、レジスタファイルやシェアードメモリを共用して実行されるので、並行して実行されるワープ数が減ると、1つのワープが使用できるレジスタ数やシェアードメモリ量が増え、それだけプログラムの性能が改善できることになる。

さらに、後に述べるように、データパスの変更や共有メモリの増加が行われており、これらも性能の向上に寄与する。

MaxwellではSMあたりのCUDAコア数を128に減らし、32コアごとにコントローラを設けた

次の表は、Keplerアーキテクチャの最上位の「Tesla K40」と、Maxwellの現状での最上位の「Quadro M6000」の諸元の比較である。MaxwellにはFP64演算器がないなどの違いがあり、公平な比較ではないが、現状ではこのように比較する以外にやりようが無い。 Keplerと比較すると、Maxellでは、SMあたりのCUDAコア数を192から128に減らしたが、チップに搭載するSM数を15から24に増やしており、チップ全体のCUDAコア数は2880から3072と若干増加している。また、SMあたりのシェアードメモリは48KBから96KBと倍増し、L2キャッシュも1.5MBから3MBと倍増している。

MaxwellにはFP64演算器がないなどの違いがあり、公平な比較ではないが、Keplerの最上位のTesla K40と、Maxwellの現状での最上位のQuadro M6000の諸元の比較。Maxwellは、SMのCUDAコア数を減らしたが、チップ全体のCUDAコア数は若干増加している。また、シェアードメモリやL2キャッシュの容量を倍増している

KeplerではシェアードメモリとL1キャッシュが一方のデータパスを共用し、もう一方のデータパスはテクスチャキャッシュ専用となっていた。これをMaxwellでは、一方のデータパスはシェアードメモリ専用とし、L1キャッシュとテクスチャキャッシュを一体化して1本のデータパスを使う構造に変更した。科学技術計算ではテクスチャキャッシュはあまり使われないので、Keplerの構成では、一方のデータパスはほとんど遊んでしまう。これに対して、Maxwellの構成ではシェアードメモリとL1キャッシュのアクセスに2本のデータパスを有効に利用することができるようになった。

KeplerではシェアードメモリとL1$がデータパスを共用し、もう一方のデータパスはテクスチャキャッシュ専用であった。これをMaxwellでは一方のデータパスはシェアードメモリ専用とし、L1キャッシュとテクスチャキャッシュを一体化した