後藤弘茂のWeekly海外ニュース

IDF 2012の目玉の1つ、メニイコア「Knights Corner」



●IDFでもセッションが行なわれるKnights Corner

 Intelの開発者向けカンファレンス「Intel Developer Forum(IDF)」が11日(現地時間)から米サンフランシスコで始まる。プロセッサ面では、今回のIDFは、完全に新しいマイクロアーキテクチャの「Haswell(ハスウェル)」の説明が行なわれるなど、話題が多い。そして、IntelのHPC(High Performance Computing)向けメニイコア「Xeon Phi(Knights Corner:ナイツコーナー)」についても、プログラミングのセッションが複数設けられている。プログラミング面に与えるKnights Cornerのインパクトが大きいから(Haswellもトランザクショナルメモリがある)で、KnightsもIDFの重要トピックの1つとなっている。

 IntelのHPC向けメニイコアは「MIC(マイク:Many Integrated Core)」アーキテクチャと総称されている。Knights Cornerは、MICアーキテクチャで、最初に本格的に提供される製品となる。シンプルメニイコアのKnightsファミリは、通常のIntel CPUとはマイクロアーキテクチャが大きく異なっている。Intelは8月27日~29日にかけて米クパチーノ(Cupertino)で開催された半導体チップカンファレンス「Hot Chips 24」で、Knights Cornerの技術的な内容を一部発表した。Knights Cornerは50個以上のプロセッサコアを搭載しており、各コアの内部ブロックは、下のスライドのようになっている。

コアの内部ブロック

 プロセッサコア自体は、GPUコアにシンプルなスカラプロセッサを統合したようなスタイルだ。2命令デコード&イシューのインオーダ実行コアに、512-bit幅のSIMD(Single Instruction Stream, Multiple Data Stream)ユニットが組み込まれている。この構造自体は、キャンセルになったグラフィックス&HPC向けメニイコア「Larrabee(ララビー)」とよく似ている。下は、Knights Cornerのブロック図と、以前にIntelの説明をベースに作成したLarrabeeのブロック図だ。

Knights Cornerのブロック図
PDF版はこちら
Larrabeeのブロック図
PDF版はこちら

 Knights Cornerのプロセッサの命令セットは、Intelのx86をベースに拡張している。x86のレガシーが走ることがKnights Cornerの強味で、Hot Chipsでは、x86互換にしたことによるコアのダイ面積のコストは、わずか2%以下(コア+L2エリアに対して)だったと強調した。チップ全体で見るとさらに少ないという。ほとんどコストをかけずに、x86の利点を活かすことができると主張している。少量のダイエリアの追加によって、x86互換性を得られるなら、その方がいいとIntelが判断したことを意味している。

●Atom型ではなく従来のLarrabee型のパイプライン

 Knights Cornerのパイプラインは次のような構造となっている。整数演算で7ステージと非常に短い。Hot Chipsで発表を行なったIntelのGeorge Chrysos氏(Senior Principal Engineer, Intel)は、Knights Cornerのマイクロアーキテクチャのフィロソフィは、できるだけ短いパイプラインにして、電力消費を抑えることにあったと説明する。

Knights Cornerのベクタユニット
Knights Cornerのパイプライン
PDF版はこちら

 Intelは、Larrabeeの時は、3世代目でスカラパイプラインを、Pentiumを発展させたコアから、Atomベースのコアへと切り替えると説明していた。しかし、パイプラインを見ると、Knights Cornerは依然としてPentium型の浅いパイプラインで、Atom型のやや深いパイプラインとは異なる。スカラパイプライン自体は、それほど変わっていない可能性が高い。

 ベクタ側のパイプラインでは、VPUレジスタファイルアクセスで1サイクルしか取っていないことがわかる。 VPUレジスタは512-bit長で、3リードと1ライトが可能だ。積和算ではソースのオペランドが3つ必要になるためだ。

 512-bit幅のベクタプロセッサは、単精度と倍精度の両方をサポートする。単精度の場合は16-way、倍精度では8-wayとなる。2対1の比率だ。また、Knights CornerはLarrabee同様にマスクレジスタを備えており、マスクによりベクタコントロールフローの制御ができる。例えば、16-wayのベクタの各レーンのストリームが、条件分岐でそれぞれ異なるパスへと分岐した場合、マスクレジスタで各レーンの分岐を判別、それぞれのレーンが異なるパスだけを実行するように制御する。見かけ上、ベクタの各レーンがそれぞれ個別に条件分岐しているように見える。従来のIntel CPUのSIMD拡張命令は、マスクレジスタを備えておらず(汎用レジスタをマスクに使うことはできる)、こうしたベクタのプレディケーションを効率よく行なうことはできなかった。

 また、マスクレジスタはスキャッタ/ギャザにも使う。離散したアドレスからのロードであるギャザとストアであるスキャッタは、Larrabeeから引き継がれている。ベクタロード/ストアで、1アドレスで16-wideのベクタをロード/ストアする代わりに、最大16の異なるアドレスに対してロード/ストアを行なうことができる。パイプライン上では、スキャッタ/ギャザは2ステージを占めているが、実際にはアドレスがまたがるキャッシュラインの数によってレイテンシが異なると推測される。Larrabeeでは、16のキャッシュラインにまたがる場合、最大16サイクルが必要だった。

512-bit幅のベクタプロセッサ
スキャッタ/ギャザのマスクレジスタ
ベクタの条件分岐
PDF版はこちら

●キャッシュを前世代から2倍容量に倍増

 Knights Cornerのコアは32KBのL1データキャッシュを備える。従来はデータキャッシュへのポートは512-bit 1ポートだけだったのが、Knights Cornerからは、512-bitのロードと512-bitのライトの2ポートが並列動作できるようになった。データキャッシュへの帯域が倍になったことになる。

 Knights Cornerの各コアは、それぞれプライベートL2キャッシュを備えている。キャッシュ量は、Knights Ferryの256KBから512KBへと倍増された。また、L2キャッシュに対しては、物理メモリアドレスをキャッシュする「Translation Lookaside Buffer (TLB)」が64エントリ設けられた。さらに、データを先読みするハードウェアプリフェッチャ(HWP)も加えられた。従来はプリフェッチ命令によるソフトウェアプリフェッチだけだったが、コンパイラが完全とはいかないため、16ストリームディテクタのプリフェッチャハードウェアを実装することにしたという。

Knights Cornerのキャッシュ

 こうしたさまざまな改良によって、Knights Cornerはコア当たりのシングルスレッドの浮動小数点演算性能だけを見ても、従来の製品より向上しているという。向上幅は平均で80%だと説明していた。

従来と比較しての性能向上
バス幅の比較

●3重になったリングバス

 Knights Cornerは、リングバスによってコアやその他のユニットを接続している。リングは双方向で、片方向に独立した3リングがある。最も大きいリングはデータブロックのリングで「BL」と呼ばれている。BLは64-byte(512-bit)幅でちょうどKnights Cornerのベクタ幅と一致している。

 2つ目のリングはアドレスリングの「AD」で、名前の通りメモリアクセスのアドレスの送受信に使われる。3つ目はアクノレジメントリング「AK」で、コヒーレントメッセージなどの送受信に使われる。

 Knights Cornerは、各コアがそれぞれプライベート512KBのL2キャッシュを備え、キャッシュ間のコヒーレンシをハードウェアで取っている。そのために、コアはメモリアクセスに際してL2のタグを参照する必要がある。タグ参照のホットスポットを避けるために、Knights Cornerでは各コアにタグディレクトリ(TD)を持たせている。タグディレクトリは、どのアドレスのメモリ内容がどのL2にキャッシュされているのかをトラックしている。メモリアクセスがL2キャッシュミスをした場合は、タグディレクトリにリクエストが送られ、そのラインが他のコアのL2にキャッシュされていないかどうかをチェックすることになる。

リングバスの構造
タグディレクトリ

 タグが見つからなかった場合は、タグディレクトリからメモリコントローラにメモリアドレスが送られる。メモリアクセスに関しては、リングにホットスポットが発生しないように配分されるという。

インターリーブのメモリアクセス

 また、Knights Corner設計に当たっては、コア数が増えたため、シミュレーションを行なった結果、アドレス(AD)とアクノレッジメント(AK)のリングの幅を倍増することにしたという。その結果、30コア以上にコア数をスケールアップしても、パフォーマンスの飽和を避けることができたという。

ADとAKのリングバス
設計にあたってシミュレーションを行なった結果

●階層型の省電力機能でアイドル時は電力を低減

 Knights Cornerの省電力制御は、Intelの他のCPUと似通っている。フルに動作している時は、全コアとユニットがアクティブになっている。しかし、コアがアイドル状態になると「Core C1」ステイトに入り、そのコアのクロックが低下する。さらに、一定時間が経つと、プログラマブルタイマーによって、コアは電圧も低くなる「Core C6」ステイトに入り、リーク電流(Leakage)が抑えられる。

全体のパワーマネジメント。図はフル稼働時
Core C1ステイト時
Core C6ステイト時

 全てのコアがCore C6ステイトに入り、コア以外のアンコア部分が何も動作がないことを検知すると、今度はL2キャッシュやタグディレクトリ、リングバス、メモリコントローラなどのクロックが抑制される。これが「Package Auto C3」ステイトで、自動的に入る。

 さらに、実行するタスクがない場合は、OS側からドライバによって、Knights Cornerのカード全体がより深いアイドルステイトに「Package C6」にセットされる。この状態になると、コア以外のアンコア部分もパワーゲートで電力がカットされ、GDDR5メモリはセルフリフレッシュモードに入る。PCI Expressロジックの一部だけが、ウェイクアップのトリガを待つ状態となる。この状態のKnights Cornerカードは、ほとんど電力を消費しない。

Auto C3ステイト
Package C6ステイト

●Knights FerryとKepler 2の違い

 Intelはもともと、CPUの内蔵グラフィックスコアは、Larrabee系へと置き換えて行く予定だった。次々世代のCPUアーキテクチャ「Sky Lake」で、LarrabeeコアをCPUに統合する計画だった。しかし、その計画は流れ、現在は、PC系は従来のIntelグラフィックスコアを拡張してプログラム性を高めたコアを搭載し続ける方針となっている。

 その一方で、HPCにはLarrabeeから流れたMICアーキテクチャのKnightsファミリを投入しようとしているため、アーキテクチャが2分してしまっている。AMDもNVIDIAも、上から下まで、高スループット/GPUコアのアーキテクチャの統一性が取れているのに、Intelだけは分断された状態だ。長期的に見ると、この分断は、プログラミングの統一性の面で大きな問題となりそうだ。

 Knights CornerをGPUと比べると、その設計思想の違いが浮き彫りになる。NVIDIAのKepler 2(GK110)と比較したのが下の図だ。Knights Cornerは物理的には54コア以上のコアを備えており、ベクタユニットの浮動小数点演算ユニット数の合計は、おそらく900個を越える。アクティブなコアが54個だとすれば、アクティブな演算ユニットは864個となる。

Knights CornerとKepler 2の違い
PDF版はこちら

 それに対して、NVIDIAのGK110は、192個の演算ユニットを備えるクラスタ「SMX」を15個備えると発表されている。ダイ上に実際には16クラスタで1クラスタが無効されているのか、もともと15クラスタしかないのかわからない。製品では14クラスタがアクティブとも伝えられている。いずれにせよ、浮動小数点演算ユニット数は2,800個以上で、Knights Cornerの3倍ほどだ。

 ところが、キャッシュメモリ量を見ると、Knights Cornerが28MB前後以上の膨大なL2を搭載しているのに対して、GK110はL2がわずか1.5MB。GK110の方がレジスタの数は多い(スレッディングでメモリレイテンシを隠蔽するのがGPUの思想)ものの、プロセッサ全体で見た場合のオンダイメモリ量はずっと少ないことは確かだ。

 NVIDIAはKepler系アーキテクチャからパイプライン段数を半分にしてプロセッサクロックを1GHzをちょっと越える程度にまで落とした。Knights Cornerも整数演算で7段の浅いパイプの低クロック設計で、Knights Ferryでは1.2GHzだった。両者の動作周波数はそれほど違いがないはずだ。

 つまり、メニイコアを低クロックで動作させるという思想は同じだが、より多くのコアを少ない内部メモリで走らせるのか、それとも相対的に少ないコアを内部メモリを活用して走らせるのかという発想の違いがある。

●Intelに追いつけないAMD

 Knights Cornerは、PC市場でのIntelのライバルであるAMDの問題も浮き彫りにする。シンプルに言えば、なぜIntelはKnightsファミリを出せるのに、AMDはHPC向けのFusionを、まだ出せないのか。AMDはディスクリートのGPUをHPCに出していると言われるかも知れない。しかし、あれだけ以前から、ワンチップ化したヘテロジニアスプロセッサの利点を説いてきたAMDが、その思想に基づいた製品をHPC市場に投入できないのは、不可解だ。

 実際には、AMDのハイエンドのFusionのプランは、何度もウワサに登っている。マッシブなFusionで、下のスライドのようにCPUコアとGPUコアがより密接なクラスタになるようなアーキテクチャも示された。しかし、いまだに実現しておらず、現在もトップエンドのサーバーCPUでは、まだFusion化の計画がない。

AMDのFusion

 Intelは製品化もしないようなリサーチチップを実際に試作したり、Knights CornerのようなプランをXeonとは別に走らせたり、幅広く手を伸ばすだけの余力がある。それに対して、AMDは絞り込んだ製品を作るのが精一杯で、リサーチや少量しか出ない製品に力を割く余裕がないように見える。こうした体力の差が、今の結果となっているように見える。