KNLではチップ内ネットワークは6×9メッシュになった
KNLのメッシュネットワークは、次の図に見られるように、6×9の2次元メッシュになっている。したがって、ノードは全部で54ノードあるが、MCDRAMの接続に8ノード、DDRメモリの接続に2ノード、IOの接続に4ノード、その他の接続に2ノードが使われており、プロセサタイルに使えるのは38ノードである。
しかし、KNLは72コア、36タイルであるので、2タイルが余る計算となる。この2タイルはスペアとして、不良タイルを置き換えて製造歩留まりを改善するなどの目的で使われると思われる。
メッシュによる通信は、まずY方向に進み、目的ノードと同じY座標のところまで進んだら方向を90°変えてX方向に進んで目的ノードに到着するというやり方でパケットを運ぶ。
このネットワークは、データの転送だけでなく、キャッシュのコヒーレンシプロトコルのパケットの伝送にも使われている。キャッシュコヒーレンシプロトコルはXeon CPUでも使われているMESIFで、分散ディレクトリで管理を行っている。
メッシュの使い方であるが、チップ全体を6×9の1つのネットワークとして使うのがAll-to-Allというモードである。(1)でL2キャッシュのアクセスミスが発生すると、ミスの情報はアクセスしたアドレスのメモリを管理するディレクトリをもつ(2)のノードに送られる。
(2)のノードはディレクトリを見て、そのアドレスの最新のデータを持つ(3)のノードにデータに転送要求を送る。そして、(3)のノードはそのデータを要求元のノードに送るというふうにメモリアクセスが行われる。
このAll-to-Allモードではチップの全域を1つのネットワークにしているので、赤線で示した伝送の経路が長くなってしまう。次に示すQuadrantモードではチップを仮想的に4つの領域に分割する。そして、あるメモリアドレスを分担するメモリと、そのメモリアドレスを管理するディレクトリは同じ1/4領域に入るように割り当てを行う。このようにすると、ディレクトリの読み出しからメモリアクセスまでの経路が短くなり、ネットワークの遅延を減らし、メモリバンド幅を大きくする事ができる。
第3のSub NUMA Clusteringモードでは、チップ全体を4分割し、あたかも4ソケットのXeonシステムのように領域内に閉じたメモリアクセスを行わせる。このように1/4領域に閉じた通信を行うので、遅延はさらに小さく、メモリバンド幅も大きくなる。しかし、1/4領域以外のアドレスのメモリをアクセスする場合は、Quadrantモードと同じでありアクセス時間は長くなる。このため、アプリケーションソフトウェアは、メモリアクセスができるだけ1/4領域内に閉じるようなNUMA最適化を行うことが必要になる。
大規模システムを構成する場合はOmni Pathを使う
KNLの大規模システムは基本的に1チップがシステムの構成単位で、構成単位同士をシステムレベルのインタコネクトで接続するという形態になる。Intelは、このインタコネクトとしてOmni Pathを発表している。Hot Chips 27ではOmni Pathの詳細は発表されなかったが、直後に開催されたHot Interconnectという学会でOmni Pathが発表された。EDR InfiniBandと同じ100Gbit/sの伝送路を持ち、InfiniBandよりレーテンシが短く、コスト的にも有利とのことであり、現在はスパコンのインタコネクトの標準となっているInfiniBandの強力なライバルになりそうである。
KNLでは、このOmni Pathのインタフェースチップをプロセサチップと同じパッケージに搭載し、 x16 PCIe 2リンクで接続する。ただし、これは1つの製品形態で、Omni Pathのインタフェースを搭載しない製品も作られる。
KNLの性能は?
肝心のKNLの性能であるが、今回の発表では、Xeon E5-2697 v3 2ソケットのシステムの性能を基準として、KNL 1ソケットの性能を相対値として表している。KNLのTDPは200W、Xeon E5-2697 v3は2×145Wであり、消費電力的にはXeon CPU 2個の方が大きい。
この性能比較では、最初の2つの棒グラフではrate_baseと書いてあって紛らわしいが、CINT2006_rateとCFP2006_rateを使っていると考えられるので、KNL側は72コアを使い、Xeon側は2チップ合計で28コアを使用する状態での比較と考えられる。性能を表す左のグラフでは、KNLはCINTでは0.6倍程度、CFPでは0.9倍程度の性能である。ということはXeon 2ソケットの方が実行時間は短いことを示している。右のグラフは性能/Wで、CINTでは1.0で同等、CFPでは1.3倍程度で若干KNL有利という結果であるが、CINTやCFPのベンチマークプログラムのようなプログラムを実行する場合は、並列度が大きくても、KNLを選択する理由はほとんど無い。
しかし、Deep LearningのAlexNetのトレーニングのような大量の浮動小数点演算があり並列度が高い負荷を実行する場合は、性能で2.5倍、性能/電力では3.8倍程度の性能が得られている。この結果を見る限りは、KNLを使えば何でも性能が上がるという訳ではなく、自分のところで使うアプリケーションに対して、性能や性能/電力がどの程度改善できるのかをよく見極めて採用を決める必要がありそうである。