インテル® Xeon Phi™ コプロセッサー – アーキテクチャー
この記事は、「Intel® Xeon Phi™ Coprocessor – the Architecture」の日本語参考訳です。
最初のインテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー製品
George Chrysos (インテル コーポレーション)
このホワイトペーパーは、2012 年 9 月の Hot Chips 24 で発表された、第 1 世代インテル® Xeon Phi™ コプロセッサー (開発コード名: Knights Corner) に関する George Chrysos のプレゼンテーションを文章にしたものです。この記事で紹介している測定結果は、インテル コーポレーションの開発ラボでプロトタイプのハードウェアとシステムを用いて測定された結果であり、製品版と若干異なることに注意してください。
インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーは、多くのインテル® プロセッサー・コアを 1 つのチップに統合したものです。インテル® MIC アーキテクチャーは、計算物理学、化学、生物学、金融サービスなどのさまざまな分野における、高度に並列化された、ハイパフォーマンス・コンピューティング (HPC) ワークロードをターゲットとしています。現在、この種のワークロードは大規模な計算クラスター上でタスク並列プログラムとして実行されています。
インテル® MIC アーキテクチャーは、設置スペースと電力に制約があるクラスター環境で高いスループット・パフォーマンスを達成することを目指しています。このマイクロアーキテクチャーの重要な特性は、インテル® Xeon® プロセッサーのプログラミング環境と同じ汎用プログラミング環境を提供するように構築されている点です。インテル® MIC アーキテクチャー・ベースのインテル® Xeon Phi™ コプロセッサーは、Linux* オペレーティング・システムを稼働し、x86 メモリー・オーダー・モデルと IEEE 754 浮動小数点演算をサポートし、Fortran、C、C++ などの業界標準のプログラミング言語で記述されたアプリケーションを実行できます。また、コンパイラー、スレッド・ライブラリーやハイパフォーマンス算術ライブラリーなどの多くのライブラリー、パフォーマンス解析/チューニング・ツール、デバッガーを含む、豊富な開発環境でサポートされています。
インテル® Xeon Phi™ コプロセッサーは、ホストであるインテル® Xeon® プロセッサーと PCI Express (PCIe) バス経由で接続されます。インテル® Xeon Phi™ コプロセッサー上では Linux* オペレーティング・システムが動作するため、仮想 TCP/IP スタックを PCIe バス上に実装し、ネットワーク・ノードとしてコプロセッサーにアクセスすることができます。このため、ユーザーは SSH を利用してコプロセッサーに接続し、個別のジョブを直接実行したり、バッチジョブを送信することができます。コプロセッサーは、アプリケーションの一部をホスト上で実行し、別の部分をコプロセッサー上で実行する、ヘテロジニアス・アプリケーションもサポートします。
図 1. 第 1 世代インテル® Xeon Phi™ コプロセッサー製品 (開発コード名: Knights Corner)
複数のインテル® Xeon Phi™ コプロセッサーを単一ホストシステムに搭載できます。単一システム内では、コプロセッサーは、PCIe ピア・ツー・ピア型インターコネクトにより、ホストを介在することなく互いに通信することができます。同様に、InfiniBand やイーサネットのようなネットワーク・カードも、ホストを介在することなく通信することもできます。
注: 上記の図では 50 コア以上となっていますが、2013 年 8 月時点でリリースされた製品には 57-61 個のバリエーションがあります。
140 ノードのプロトタイプのインテル® Xeon Phi™ コプロセッサーで構成されたインテルの初期開発クラスター「Endeavor」は、Linpack のスコアに基づく TOP500 スーパーコンピューターの 150 位にランクされました。電力消費の点から見た場合 (図 2)、このクラスターは TOP500 のほかのヘテロジニアス・システムに後れをとることなく、むしろ優れていました。
図 2. インテルのクラスターの Linpack パフォーマンスと消費電力
最適化されていないプロトタイプ・システムにおけるこれらの結果は、新しいプログラミング言語や API を導入することなく、計算集約型のワークロードで高レベルのパフォーマンス効率を達成できることを実証しています。
インテル® Xeon Phi™ コプロセッサーは、プロセシング・コア、キャッシュ、メモリー・コントローラー、PCIe クライアント・ロジック、帯域幅の高い双方向リング・インターコネクト (図 3) などから構成されます。各コアは、グローバル分散タグ・ディレクトリーにより完全にコヒーレントなプライベート L2 キャッシュを備えています。メモリー・コントローラーおよび PCIe クライアント・ロジックはそれぞれ、コプロセッサーの GDDR5 メモリーと PCIe バスに、ダイレクト・インターフェイスを提供します。これらのコンポーネントはすべて、リング・インターコネクトにより相互接続されます。
図 3. マイクロアーキテクチャー
インテル® Xeon Phi™ コプロセッサーの各コア (図 4) は、高度な並列ワークロードに高いスループットを提供しつつ、電力効率が高くなるように設計されています。より詳細に見ると、コアは短いインオーダーのパイプラインを使用し、ハードウェアで 4 つのスレッドをサポートすることが分かります。IA アーキテクチャーのレガシーな機能をサポートするためのコストは、コアの面積の 2% 程度であり、製品レベルではより少なくなると推測されます。このため、インテル® アーキテクチャーのレガシーな機能を市場に提供するためのコストはごくわずかです。
図 4. インテル® Xeon Phi™ コプロセッサーのコア
ベクトル・プロセシング・ユニット
インテル® Xeon Phi™ コプロセッサーのコアの重要なコンポーネントは、ベクトル・プロセシング・ユニット (VPU) (図 5) です。この VPU は、インテル® Initial Many Core Instructions (インテル® IMCI) として発表された、斬新な 512-ビット SIMD 命令セットを特長としています。つまり、1 サイクルごとに 16 の単精度または 8 つの倍精度演算を実行できます。また、積和演算 (FMA: Fused Multiply-Add) 命令をサポートしているため、1 サイクルごとに 32 の単精度または 16 の倍精度浮動小数点データの積和を実行できます。整数もサポートします。
図 5. ベクトル・プロセシング・ユニット
ベクトルユニットは HPC ワークロードで高い電力効率を実現します。単一の演算でたくさんのワークをエンコードできますが、多くの命令をフェッチ、デコード、リタイアするためのエネルギーコストがかかりません。ただし、広いビット幅の SIMD 命令をサポートするには、いくつかの改善が必要でした。例えば、レーン単位で実行を制御できるマスクレジスターが VPU に追加されました。短い条件分岐のベクトル化が可能になり、ソフトウェア・パイプライン全体の効率が向上しました。VPU は、ハードウェアで直接、非ユニットストライドのベクトル・メモリー・アクセスを行う、ギャザー命令とスキャッター命令もサポートしています。拡散するあるいは不規則なアクセスパターンを含むコードでは、ギャザー命令とスキャッター命令を利用することで、コードのベクトル化を維持できます。
VPU には、逆数、平方根、対数のような超越関数を実行できる拡張数学ユニット (EMU: Extended Math Unit) も搭載されており、これらの演算を高い帯域幅のベクトル形式で実行できます。EMU は、これらの関数の多項式近似を計算します。
インターコネクト
インターコネクト (図 6) は双方向リングバスとして実装されています。各方向は、3 つの独立したリングで構成されます。最も大きく、最もコストの高いリングは BL (データブロック) リングです。コア数が多いため、高い帯域幅をサポートするように BL リングは 64 ビット幅となっています。AD (アドレス) リングは小さく、読み取り/書き込みコマンドとメモリーアドレスを送るために使われます。最も小さく、最もコストの低いリングは、フロー・コントロールやコヒーレンス・メッセージを送る AK (応答) リングです。
図 6. インターコネクト
コアが L2 キャッシュにアクセス (図 7) してミスすると、AD リング経由でアドレスリクエストがタグ・ディレクトリーに送られます。リングでスムーズな転送が行われるように、メモリーアドレスはリングのタグ・ディレクトリー間で均一に分散されます。リクエストされたデータブロックが別のコアの L2 キャッシュで見つかると、AD リング経由でフォワーディング・リクエストがそのコアの L2 に送られ、BL リング経由でリクエストされたブロックがフォワードされます。リクエストされたデータがどのキャッシュにも見つからない場合、タグ・ディレクトリーからメモリー・コントローラーにメモリーアドレスが送られます。
図 7. 分散タグ・ディレクトリー
図 8 は、双方向リングにメモリー・コントローラーが分散して配置されている様子を示しています。メモリー・コントローラーは、リングで対称に配置されます。タグ・ディレクトリーからメモリー・コントローラーへ all-to-all (対全通信) のマッピングが行われます。アドレスはメモリー・コントローラーに均等に分散されます。その結果、hotspot が排除され、優れた帯域幅レスポンスに不可欠な、均一のアクセスパターンがもたらされます。
図 8. インターリーブ・メモリー・アクセス
メモリーアクセス中に、コアで L2 キャッシュミスが発生すると、コアは AD リング経由でアドレスリクエストを生成して、タグ・ディレクトリーに問い合わせます。データがタグ・ディレクトリーに見つからない場合、コアは別のアドレスリクエストを生成して、メモリーに問い合わせます。メモリー・コントローラーがメモリーからデータブロックをフェッチすると、AD リング経由でコアに返されます。つまり、このプロセス中に、1 つのデータブロック、2 つのアドレスリクエスト (およびプロトコルにより 2 つの ACK メッセージ) がリング経由で送られます。BL リングは最もコストが高く、必要なデータ帯域幅をサポートするように設計されているため、リングで多くのリクエストが行われることによって増加する帯域幅要件を満たすように、コストの低い AD リングと AK リングの数を 2 倍に増やしました (図 9)。
図 9. インターコネクト: 2x AD/AK
マルチスレッド Streams Triad
図 10 は、マルチスレッド Streams Triad ワークロードにおけるコアのスケーリングを示しています。これらの結果は、インターコネクトの方向ごとに 1 つの AD リングと 1 つの AK リングのみを備えた、プロトタイプのインテル® Xeon Phi™ コプロセッサーによるシミュレーターで生成されたものです。AD リングと AK リングがパフォーマンス・ボトルネックとなり、32 コア以上ではスケーラビリティーが制限されていることが分かります。
図 10. マルチスレッド Triad – 1 AD/AK リングの場合の飽和
製品版のインテル® Xeon Phi™ コプロセッサーは、2 つの AD バスと 2 つの AK バスを使用することで、50 コアおよびそれ以上のコア数でも優れたパフォーマンスのスケーリングを実現します (図 11)。リングの追加により合計帯域幅が 40% 以上増加していることが分かります。
図 11. マルチスレッド Triad – AD/AK を 2 倍にする利点
ストリーミング・ストア
さらにメモリー帯域幅を増加させるもう 1 つの重要な機能として、ストリーミング・ストアがあります。Streams Triad の擬似コードを以下に示します。
Streams Triad
for (i=0; i<HUGE; i++)
A[i] = k*B[i] + C[i];
Streams Triad カーネルは 2 つの配列 (B および C) を読み取り、1 つの配列 (A) を書き込みます。一般に、コアはデータを書き込む前にキャッシュラインを読み取ります。このため、書き込みに関連する読み取りのオーバーヘッドが発生します。ストリーミング・ストア命令を利用すると、コアは最初に読み取りを行うことなくキャッシュライン全体を書き込むことができます。これにより、反復ごとに転送されるバイト数は 256 バイトから 192 バイトに減ります (表 1)。
表 1: ストリーミング・ストア
ストリーミング・ストアなし | ストリーミング・ストアあり | |
動作 | A、B、C を読み取り、A を書き込む | B、C を読み取り、A を書き込む |
反復ごとにメモリーとの間で 転送されるバイト数 |
256 | 192 |
図 12 は、ストリーミング・ストアを利用した Streams Triad ワークロードのスケーリング結果です。ストリーミング・ストアにより、帯域幅が 30% 以上増加していることが分かります。つまり、方向ごとに 2 つのリングを追加してストリーミング・ストアを実装することにより、マルチスレッド Streams Triad の帯域幅を約 2 倍に増やすことができました。
図 12. マルチスレッド Triad – ストリーミング・ストアあり
その他の設計に関する特長
インテル® Xeon Phi™ コプロセッサーには、64 エントリーのセカンドレベル・トランスレーション・ルックアサイド・バッファー (TLB)、同時データ・キャッシュ・ロード/ストア、512KB L2 キャッシュなどのマイクロアーキテクチャーの最適化も実装されています。また、キャッシュヒットを向上させ、より高い帯域幅を提供するため、16 のストリーム・ハードウェア・プリフェッチャーを備えています。図 13 は、シングルコア、シングルスレッド用の SPECfp 2006 ベンチマーク・スイートにおけるパフォーマンスの向上を示しています。平均でサイクルあたり 80% 以上もパフォーマンスが向上していることが分かります (周波数による違いは考慮されていません)。
図 13. コアあたりの ST パフォーマンスの向上 (サイクルあたり)
キャッシュ
インテル® MIC アーキテクチャーは、GPU アーキテクチャーと比較して、L1 キャッシュと L2 キャッシュをより重視しています。インテル® Xeon Phi™ コプロセッサーは、最先端の、高い帯域幅のメモリーサブシステムを実装しています。各コアには、32KB L1 命令キャッシュ、32KB L1 データキャッシュおよび 512KB ユニファイド L2 キャッシュが装備されています。これらのキャッシュは完全にコヒーレントで、x86 メモリー・オーダー・モデルを実装しています。L1 キャッシュおよび L2 キャッシュの合計帯域幅は、合計メモリー帯域幅と比較して、それぞれ約 15 倍および 7 倍高速です。そのため、キャッシュを効率良く利用することが、インテル® Xeon Phi™ コプロセッサーのピーク・パフォーマンスを向上させる鍵です。帯域幅の向上に加えて、メモリーよりもコアにデータを提供するという点でも、キャッシュはよりエネルギー効率に優れています。図 14 は、メモリー、L1 キャッシュおよび L2 キャッシュから転送されるデータのバイトあたりのエネルギー消費量を示しています。エクサスケール・コンピューティング時代では、電力に制約がある環境で優れたパフォーマンスを達成するための重要な役割をキャッシュが果たすことになるでしょう。
図 14. メモリーとキャッシュの相対的な帯域幅の比較
ステンシル
物理シミュレーションで良く利用されるステンシル (図 15) は、キャッシュを効率良く利用することでパフォーマンスが大きく向上するワークロードの典型例です。
図 15. ステンシルの例
ステンシルは、時間に対するシステムの動作を研究するため、物理シミュレーションで使用されます。ワークロードがキャッシュに収まるようにプログラミングされていなければ、メモリー帯域幅によって制限されます。キャッシュのブロック化は、メモリーと比較して、キャッシュの帯域幅やエネルギー効率が増加した場合に、大幅にパフォーマンスが向上します。キャッシュのブロック化は、データがコアの L1 キャッシュや L2 キャッシュに収まるように物理構造や物理システムを変更することによりパフォーマンスを高めます。例えば、各時間ステップの間、同じコアは最後の時間ステップから L2 キャッシュにすでに存在するデータを処理でき、メモリーからフェッチする必要がないため、パフォーマンスが向上します。さらに、キャッシュ・コヒーレンスは、ほかのコアの L2 キャッシュに存在する最も近い隣のブロックから更新されたデータを自動的にフェッチして、ステンシル操作を支援します。つまり、ステンシルは、HPC ワークロードにおける効率良いキャッシュの利用とコヒーレンスの利点を明白に示しています。
電力管理
図 16. 電力管理: すべてオンで動作
インテル® Xeon Phi™ コプロセッサーはすべてのワークロードに適しているわけではありません。ホストでのみワークロードを実行することが適切なケースもあります。コプロセッサーが使われていない状況では、コプロセッサーを省電力モードに移行する必要があります。図 16 は、インテル® Xeon Phi™ コプロセッサーのすべてのコンポーネントが動作状態である場合を示しています。電力を節約するため、コアの 4 つのスレッドがすべて停止すると、そのコアへのクロックは停止されます (図 17)。クロックが一定のプログラム可能な時間、停止されれば、コアは自身の電力を停止して (図 18)、さらに電力を節約します。
図 17. C1 ステート: コアのクロックを停止
任意の数のコアの電力をいつでもオフ/オンにすることができます (図 18)。さらに、すべてのコアの電力が停止され、アクティブなコアが検出されない場合、タグ・ディレクトリー、インターコネクト、L2 キャッシュおよびメモリー・コントローラーのクロックが停止されます。
図 18. C6 ステート: コアの電力を停止
この時点で、ホストドライバーは、コプロセッサーをより深いスリープステートまたはアイドルステートに移行できます。すべてのアンコアの電力は停止され、GDDR はセルフリフレッシュ・モードになり、PCIe ロジックはウェイクアップ待機ステートになります。GDDR-IO ではほとんど電力が消費されません (図 19)。これらの電力管理手法により消費電力が大幅に削減されたことで、インテル® Xeon Phi™ コプロセッサーはデータセンター向けの優れた候補として注目されています。
図 19. パッケージ C3 ステート
まとめ
インテル® Xeon Phi™ コプロセッサーは、新しいプログラミング・モデル、API、言語、制約のあるメモリーモデルを必要とすることなく、高度な並列 HPC ワークロードで高いパフォーマンスおよびワットあたりの高いパフォーマンスを実現します。1 つのダイに複数のスレッド・コンテキスト、広いベクトルユニット、キャッシュ、高い帯域幅を備えた汎用コアを複数搭載し、メモリーのインターコネクトにより高いパフォーマンスを達成しています。Knights Corner は、エクサスケール・コンピューティング時代に対応することを目的として開発された、インテル® MIC アーキテクチャー・ファミリーの最初のインテル® Xeon Phi™ コプロセッサー製品です。
著作権と商標について
本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するものではありません。製品に付属の売買契約書『Intel’s Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証 (特定目的への適合性、商品適格性、あらゆる特許権、著作権、その他知的財産権の非侵害性への保証を含む) に関してもいかなる責任も負いません。
「ミッション・クリティカルなアプリケーション」とは、インテル製品がその欠陥や故障によって、直接的または間接的に人身傷害や死亡事故が発生するようなアプリケーションを指します。そのようなミッション・クリティカルなアプリケーションのためにインテル製品を購入または使用する場合は、直接的か間接的かにかかわらず、あるいはインテル製品やそのいかなる部分の設計、製造、警告にインテルまたは委託業者の過失があったかどうかにかかわらず、製造物責任、人身傷害や死亡の請求を起因とするすべての賠償請求費用、損害、費用、合理的な弁護士費用をすべて補償し、インテルおよびその子会社、委託業者および関連会社、およびそれらの役員、経営幹部、従業員に何らの損害も与えないことに同意するものとします。
インテル製品は、予告なく仕様や説明が変更される場合があります。機能または命令の一覧で「留保」または「未定義」と記されているものがありますが、その「機能が存在しない」あるいは「性質が留保付である」という状態を設計の前提にしないでください。これらの項目は、インテルが将来のために留保しているものです。インテルが将来これらの項目を定義したことにより、衝突が生じたり互換性が失われたりしても、インテルは一切責任を負いません。この情報は予告なく変更されることがあります。この情報だけに基づいて設計を最終的なものとしないでください。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
最新の仕様をご希望の場合や製品をご注文の場合は、お近くのインテルの営業所または販売代理店にお問い合わせください。
本資料で紹介されている資料番号付きのドキュメントや、インテルのその他の資料を入手するには、1-800-548-4725 (アメリカ合衆国) までご連絡いただくか、インテルの Web サイトを参照してください。
Intel、インテル、Intel ロゴ、Xeon、Xeon Phi は、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
© 2012 Intel Corporation. 無断での引用、転載を禁じます。
パフォーマンスに関する注意事項
* パフォーマンスおよびベンチマークの結果に関する詳細は、www.intel.com/benchmarks (英語) を参照してください。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。