インテル QuickPath インターコネクト
インテル QuickPath インターコネクト (QuickPath Interconnect, QPI)はインテルが開発したポイント・ツー・ポイントのプロセッサ接続技術である。名前が発表される前、インテルはCommon System Interface (CSI)と称していた。それ以前には、YAP(Yet Another Protocol)、YAP+として知られていた。開発は、DECのAlpha開発グループからインテルに移籍したメンバーによってインテルのMMDC (Massachusetts Microprocessor Design Center) で行われた。QPIはデスクトップ、Xeon、Itaniumプラットフォームのフロントサイドバスを置き換える。2008年11月、インテルは最初にIntel Core i7デスクトッププロセッサとIntel X58チップセットの組み合わせで採用した。2009年3月にNehalemマイクロアーキテクチャベースのXeon5500に使用され、将来はNehalemマイクロアーキテクチャベースのXeonプロセッサとTukwilaベースのItaniumプロセッサで使用される予定である。
QPIは、QuickPath technologyを実装するQuickPathアーキテクチャの一部である。最も単純な構成であるシングルプロセッサ(ユニプロセッサ)マザーボードでは、1つのQPIがプロセッサをIOハブと接続するためだけに(たとえばIntel Core i7とIntel X58を接続するために)使用される。より複雑なデュアルプロセッサやマルチプロセッサマザーボードにおいて、個々のQPIリンクは各プロセッサ同士とIOハブまたはルーティングハブを相互接続し、すべてのコンポーネントが個々のQPIリンクで構成されたネットワークを経由して他のコンポーネントに接続することを可能にする。すなわちAMDのHyperTransportと同様にQuickPath architectureは、各プロセッサが(メモリコントローラを統合していて)ローカルメモリを配下に持っていたとしても、それら個々のCPU用メモリ群をNUMAとして使えるようにする。
シングルプロセッサ(ユニプロセッサ)でしか動作しないCPUとそれをホストするIOハブが装備しているべき最低QPIリンク数は1である。デュアルプロセッサやマルチプロセッサとしても使えるCPUやそれをホストするIOハブが装備しているQPIリンク数は2以上である。例えば、あるクアッドCPU構成の場合、1つのCPUは他の3つのCPUと相互通信するために3つのQPIリンクを消費する。さらにこのCPUはIOハブと接続するためにさらにQPIリンクを持っていなければならない。
各QPIは、全二重の20レーンのデータリンクと、各方向で独立したクロックより形成され、全部で42個の信号を伝達する。各信号は平衡接続なので、ピンの総数は84である。20個のデータレーンは、5レーンずつ4つの「象限」に分割される。基本的な伝送の単位は80ビットの「フリット (Flit :Flow control unit)」であり、2クロック(クロック当たり2回、全部で4回)で転送される。80ビットの「フリット」はエラー検出のための8ビット、「リンクレイヤヘッダー」のための8ビット、データの64ビットにより構成される。QPIの帯域幅は、2クロックごとの各方向の64ビットの転送を計算することによって求められる。
初期の実装では単一の、4象限リンクを使用するが、QPIの仕様ではその他の実装も認められている。各象限は独立して使用することができる。また。高い信頼性を求められるサーバでは、QPIリンクは劣化モードで動作することができる。20+1のシグナルのうち1つ以上が失敗するならば、インターフェイスは10+1個または5+1個の残っている信号で、クロックが失敗した場合にはデータシグナルにクロックを再割り当てして動作するであろう。
初期のNehalemでの実装では単一の4象限の25.6GB/秒のリンクを使用する。これはインテルのX48チップセットで使用された1600MHzのFSBの理論的な帯域幅の2倍である。
QPIは2.4GHzと3.2GHzのどちらかのクロック速度で動作する。実際のクロック速度はリンクの終端のコンポーネントの機能と、プリント基板上の信号経路の特性(主として寄生容量)に依存する。Core i7 920または940では、基準クロックの2.4GHzの周波数に制限される。ビット転送はクロックの立ち上がりと立ち下がりの両方で行われるので、転送速度はクロック速度の2倍である。インテルは、各80ビットの「フリット」において64ビットのデータのペイロードのみを数えることによって、データスループット(GB/s)を算出する。しかし、QPIは双方向であるため、インテルはその結果を2倍にする。したがって、インテルは3.2GHzのクロックを持つ20ビットのQPIリンクを、25.6GB/sのデータ転送速度を持つと評価する。2.4GHzのクロック速度では19.2GB/sのデータ転送速度である。より一般的には、20レーンのQPIは各方向4バイト、合計8バイトをクロックごとに転送する。
以上のことは以下のとおり計算される:
3.2GHz
x 2 bits/Hz   (2倍のデータ転送速度)
x 20          (QPIのリンクの幅)
x (64/80)     (データビット/フリット全体のビット)
x 2           (双方向)
/ 8           (ビット/バイト)
= 25.6 GB/s
QPIは物理的、リンク、ルーティング、トランスポート、プロトコルの5レイヤアーキテクチャーで規定される。Core i7やXeon DPプロセッサなどの転送なしでポイントツーポイントのQPIのみを意図したデバイスでは、トランスポートレイヤは存在せず、ルーティングレイヤは最小である。
物理層は、実際の配線と差動トランスミッターとレシーバー、および物理層単位で転送と受信を行う最も低レベルのロジックによって構成される。物理層単位は20ビットの「phit」である。20ビットのphitを送るとき、20レーンすべてが使用可能であるときには20レーンを用いてシングルクロックで転送し、失敗のため再設定される際は10レーン・5レーンを使用する。
リンク層は、80ビットのフリットを送受信することを担当する。各フリットは4つの20ビットのphitとして物理層に送られる。各フリットはリンク層のトランスミッタによって生成された8ビットのCRCを含む。リンク層のレシーバがCRCエラーを検出したとき、レシーバはフリットを経由してトランスミッタに通知し、トランスミッタはフリットを再送する。レシーバのバッファがオーバーフローを起こさないために、リンク層は貸方/借方の手法を用いたフロー制御を行う。
リンク層は、上位層がキャッシュの一貫性を保つため、データフリットをデータでないメッセージと区別できるよう6個のクラスをサポートする。QuickPath architectureの複雑な実装の中で、リンク層を、違うクラスのために別のフローとフロー制御を維持するように設定することができる。これがシングルプロセッサとデュアルプロセッサの実装のために必要であるか、実装されるかは明らかではない。
ルーティング層は8ビットのヘッダと64ビットのペイロードからなる72ビットのユニットを送る。ヘッダはあて先とメッセージタイプを含む。ルーティング層がユニットを受け取ると、ユニットがその目的地に到着したかどうかを判定するために、ルーティングテーブルを調査する。正しく到着したならば、より上位の層に送られる。到着していないならば、正しい外向きのQPIに送られる。一つしかQPIが存在しない機器であれば、ルーティング層は最小である。より複雑な実装では、ルーティング層のルーティングテーブルはより複雑であり、故障したQPIのリンクを避けるために動的に修正される。
トランスポート層は必須ではなく、Core i7のようにポイントツーポイント接続しかない機器には存在しない。直接接続されないかもしれない(すなわち、データが介在機器によって発送されたかもしれない)他のデバイス上のQPIのピアからQPIネットワークを横断してデータを送受信する。トランスポート層は、データが完全であることを確認し、そうでなければ、再送をそのピアに要求する。
プロトコル層は機器のためにパケットを送受信する。典型的なパケットはメモリキャッシュ列である。プロトコル層はまた、キャッシュの一貫性のメッセージを送受信することによって、キャッシュ一貫性の維持に関与する。