Hot Chips 29でKnights Millプロセサを発表するIntelのDennis Bradford氏

Hot Chips 29において、Intelはマシンラーニング向けと銘打った「Knights Millプロセサ」を発表した。Knights Millは、Knights Landingの次の世代と見られていたこともあるが、両者は、同じ世代のプロセサで、Knights Landing(KNL)はHPC向けのプロセサ、Knights Mill(KNM)はマシンラーニング向けのプロセサであると言う。 Knights Millプロセサは、ディープラーニング用に開発されたIntel初のプロセサであり、ディープラーニング向けのピーク演算性能は、KNLの4倍であるという。そして、第2世代のXeon PhiであるKNLをベースにして開発されており、効率の改善、スケールアウトの最適化、可変精度演算の強化、柔軟で大容量のメモリなどの特徴をもっている。

Knights MillプロセサはKnights Landingと同世代のディープラーニング向けのプロセサという位置づけである (このレポートのすべての図は、Hot Chips 29でのIntelの発表資料のコピーである)

KNMは36個のタイルを集積し、各タイルには2個のVPU(Vector Processing Unit)を持つ。したがって、一般的に言うと72コアのプロセサチップで、各コアは512ビット長のベクトル演算ができるコアになっている。KNLではVPUは16DP(Double Precision)演算を行うことができるが、KNMでは128SP(Single Precision)演算、256VP(Variable Precision)演算も行えるようになっている。

そして、高バンド幅の3D積層メモリであるMC DRAMを8個接続してメモリバンド幅を稼いでいる。高バンド幅メモリの容量は16GBである。また、DDR4 2400を6チャネルもっており、ここに最大384GBのDIMMを接続することができる。さらに、I/O接続用には、36レーンのPCIE Gen3ポートを持っている。

KNMは、KNLと同様に2個のVPUからなるタイルを36個集積したプロセサであるが、KNLのVPUが16DP演算であるのに対して、128SP演算、256VP演算ができるようになっている

KNMで新たに追加されたQuad FMA FP32命令は4組のFP32の積和演算を1命令で実行できる。次の図ではFMA1~4が直列に繋がっている絵が描かれているが、これは概念図と思われ、実際にこのように作られているかどうかはわからない。

新しく追加されたQuad FMA FP32命令は4組の32bit浮動小数点数の積和演算を1命令で実行できる

次の図は、Quad FMA FP32命令を使った行列積の計算の例である。行列積を計算する場合、行列Aは行方向なら、行列Bは列方向にアクセスする必要があり、一括して扱う場合には並べ直しが必要になったりするが、Quad FMA FP32命令は、行列Aのmem[*]は行方向、行列Bのzmm*0[i]は列方向にアクセスしてくれるので便利である。したがって、並べ変えのオーバヘッドなしに毎サイクル4回のFP32の積和演算を実行することができる。

Quad FMA FP32命令を使った行列積の計算の例。A、Bの行列は行方向優先で格納されているが、mem[*]は行方向、zmm*0[i]は列方向にアクセスしてくれる

また、新たに追加されたVNNI-16命令は、入力は16ビットの整数であるが、その積は32ビットで扱い、2つの32ビットの積を32ビット精度で加算するという命令である。32ビットのソースレジスタには2つの16ビット整数データを格納することができるので、同じ要素数の場合は必要なレジスタ数が半減するというメリットもある。

VNNI-16命令は32ビットレジスタの上半分と下半分に別のデータを入れ、1命令で2回のINT16の積と2回のINT32の加算を計算する

16ビット整数(INT16)によるニューラル計算は、FP16によるニューラル計算と比較すると、入力データの範囲を正規化する必要はあるが、数値を表す有効なビット数が多くなるので、計算精度が高いという。そしてIntelはFP16はディープラーニングの学習にはあまり広く使われておらず、INT16積算、INT32加算が良いという。

ただし、GoogleのTPU2やNVIDIAのVolta GPUのテンソル計算にはFP16の積和演算器を使用しており、Intelとは見解が違うようである。

右はFP16での計算で、有効数字は10ビットである。これに対して、INT16ではexやeyを別途計算して正規化しておけば15ビットを有効数字として使えるので精度が高いという主張(であるが、これは指数部を別途格納する必要がある)

それはともかく、QVNNI命令はQFMAとVNNI命令の複合したものであり、積はINT16、加算はINT32という可変精度で1命令で16回の積和演算を実行することができる。

QVNNI命令は積はINT16、加算はINT32という可変精度で1命令で16回の積和演算を実行することができる

KNMのコアはKNLコアを改良したもので、2wayのO-o-O実行、4wayのSMTという点は変わっていない。変わっているのは、VPUのパイプラインの構造である。

KNMコアはKNLコアの改良版で、基本構造は変わっていない。変わっているのはVPUの演算パイプラインである

左のKNLでは2つのDP/SP演算パイプラインであるが、KNMではそれぞれ2本のSP/VNNIパイプラインがP0ポートとP1ポートに接続され、P1ポートにはDPパイプラインも接続されている。

KNLとKNMのVPUの演算パイプライン。KNLはDP/SPパイプラインが2本であるが、KNMではSP/VNNIパイプラインが4本で、ポート1側にDPパイプラインが1本という構成になっている

まとめると、KNLとKNMは基本アーキテクチャは同じで、KNLはHPC、KNMはディープラーニングの学習という市場向けに最適化されたプロセサである。そのため、KNMでは、DPパイプラインは1本に減り、SPパイプラインは2倍の4本に増えている。そして4本のVNNIパイプラインが新たに加わっている。

KNMはディープラーニング向けに最適化されたプロセサであり、HPC向けのKNLと比べるとDPパイプラインは1本に減り、SPとVNNIパイプラインは4本になっている