HyperTransport

HyperTransportは、AMDが提唱したPoint to Point式の汎用接続技術。

以前はLightning Data Transport  と呼ばれていたものである。双方向、シリアル/パラレル、広帯域、低遅延を特徴とするコンピュータバスであり、2001年4月2日に導入された。 この技術はx86プロセッサではAMDとトランスメタ、MIPSアーキテクチャではPMC-Sierra、Broadcom、Raza Microelectoronics、PCチップセットではAMD、NVIDIA、VIA、SiS、ULi/ALi、HP、サーバではHP、サン・マイクロシステムズ、IBM、IWill、ストレージでは、Network Appliance、ハイパフォーマンスコンピューティングではクレイ、Newisys、PathScale、ルーターではシスコシステムズが用いている。

HyperTransportコンソーシアムがHyperTransportテクノロジの普及と開発に努めている。

1. 概要
-----

HyperTransportには4つバージョンがある。1.x、2.0、3.0そして3.1である。これらは200MHzから3.2GHzまで動作する。このバスはDDR接続され、クロック信号の立ち上がりと立ち下りの両方でデータを送信する。これにより、3.2GHz動作時に最大毎秒64億回送信が可能である。この周波数は自動的に調整される。

HyperTransportは2つの2bitラインから2つの32bitラインまであることから、ビット幅を自動的に調整する機能をサポートしている。HyperTransport 3.1の場合、フルサイズ、フルスピードで双方向に32bit接続すると、51.2 GB/s  の送信速度が出る。これは多くの既存の標準バスよりもかなり速い。また一つのシステム内で様々なバス幅を混在させることができる。これにより、メインメモリとCPU間にはより高速な接続を用い、周辺機器同士にはより遅い接続を用いることができる。また、HyperTransportは他のバスと比較してかなり低遅延である。

HyperTransportはパケットベースであり、物理的な接続幅にかかわらず、それぞれのパケットは32ビットワードの組み合わせで構成されている。パケットの1ワード目は常にコマンドワードである。もしパケットにアドレスが含まれていたならば、コマンドワードの最後の8ビットは次の32ビットワードとつながって40ビットアドレスを構成する。64ビットアドレッシングが必要な時には、追加の32bitコントロールパケットによって可能になる。1パケット内の32ビットワードはデータペイロードである。転送は実際の長さにかかわらず、常に複数の32ビットにパディングして行われる。

HyperTransportパケットはbit timeとして知られるセグメント内に入れられる。パケットが必要とするbit timeの数は相互接続のバス幅に依存する。HyperTransportはシステム管理メッセージを発生、シグナル割り込み、デバイスやプロセッサを調整するためのプローブ発行、汎用I/Oやデータトランザクションに使うことができる。また、posted writeとnon-posted writeの2つの異なるwriteコマンドを使うことができる。Posted writeはターゲットからのレスポンスを必要としないwriteコマンドである。これはUMAトラフィックやDMA転送のような広帯域のデバイスに通常用いられる。Non-posted writeは受信側から「ターゲット動作完了」のレスポンスを受け取ることを必要とする。読み出しもまた受信側がreadレスポンスを発生させる。

また、HyperTransportはACPIに準拠することでパワーマネジメントを強くサポートしている。このことにより、プロセッサのスリープ状態  が変化することによって、デバイスの状態  を変化させる信号を出すことができることを意味する。すなわちCPUがスリープしたらディスクの電源を切ることができる。

電気的には、HyperTransport/LDTは2.5V動作のLow voltage differential signaling  に似ている。

HyperTransportを省略してHTと呼称することも多いが、これはインテルCPUに実装されているHyperThreading Technologyの略称と混同されやすい。この潜在的な間違えやすさのために、HyperTransportコンソーシアムは常に「HyperTransport」として表記するようにしている。

2. HyperTransportの適用例
---------------------

2.1. フロントサイドバスの置き換え
-------------------

HyperTransportの主要な用途はフロントサイドバスの置き換えである。フロントサイドバスは現在すべてのマシンで異なっている。システムを拡張するために、フロントサイドバスはAGPやPCIのような様々な標準バス用のアダプタを通して接続しなければならない。これらは普通各々のコントローラの機能の中に含まれていて、ノースブリッジやサウスブリッジとして呼ばれている。

理論上、HyperTransportで実装された大方のコンピュータは、処理速度が速いと同時に柔軟性に富んでいる。PCIとHyperTransportを変換するチップはHyperTransportを使用可能などのマイクロプロセッサでも動作できるであろうし、これらのプロセッサでPCIカードを用いることも可能である。例えば、NVIDIAのnForceチップセットはノースブリッジとサウスブリッジを接続するのにHyperTransportを用いている。

2.2. マルチプロセッサ間接続
----------------

HyperTransportの別の用途として、NUMAマルチプロセッサのチップ間接続がある。AMDはOpteronとAthlon 64のプロセッサ商品群にDirect Connect Architectureの一部として独自のキャッシュコヒーレンシー拡張を持つHyperTransportを使用している 。NewisysのHORUS接続はこの考えをより大きなクラスターマシンに拡張したものである。

2.3. ルーターないしスイッチバスの置き換え
-----------------------

また、HyperTransportはルーターやスイッチ内でバスとしても用いられる。ルーターやスイッチは複数の接続ポートを持ち、できる限り速くポート間でデータをやりとりしなければならない。例えば、4つの100MBit/sのポートを持つイーサネットルーターは800MBits/sより速いバスが必要である。HyperTransportはこの用途に必要とされる帯域よりは遥かに高速である。

2.4. HTXとコプロセッサ間接続
------------------

CPUとコプロセッサとの間の帯域の問題はいつも実用的な実装を行う際の悩みの種となってきた。この問題が公にならないまま数年後、近年導入されたHyperTransportインタフェースを用いて設計された拡張用は、HyperTransport eXpansion  として知られる。16レーンのPCI Expressスロットと同じ機構のコネクタを用いており、HTXは挿入されたカードがCPUへの直接アクセスとシステムRAMへのDMAアクセスができるように開発された。近年、HyperTransportバスにアクセスできるFPGAが現れており、コプロセッサはマザーボード上での最優遇住人となってきている。主要なメーカーの両方が出している現世代のFPGAはHyperTransportを直接サポートしており、IPコアも使うことができる。 しかし、HTXの仕様では、HyperTransportデバイスはHTXコネクタを通してHyperTransportの最大スループットのたった1/4しか通信できない。これは、32ビット、2.8GHzで動作可能な初期のSamtecコネクタにもかかわらず、16ビットのPCI Expressコネクタを使って1.4GHzにクロックを落として使っているようなものである。

3. 実装
-----

AMD AMD64とDirect Connect ArchitectureをベースとしているCPU
OpenCoreプロジェクトからリリースされているht_tunnel
AMD プロセッサ向けのATI Radeon Xpress 200
NVIDIA nForce Professional MCP
ServerWorks HT-2000 HyperTransport SystemI/Oコントローラ
Apple Power Mac G5シリーズ, iMac G5シリーズで使われているIBM PowerPC 970シリーズとコントーラU3, U4

4. 周波数の仕様
---------


AMD Opteron と、 Athlon 64 を含むそれ以降の CPU は 16 ビット幅でリンクしている。古いタイプの Opteron あるいは Athlon 64 は 800 MHz から 1 GHz で接続していて、比較的新しいでは、2.6 GHz までで接続されている。HyperTransport は 32 ビット リンクが可能であるが、その帯域幅を AMD は現在使用していない。

5. 外部リンク
--------

[1]
[2]
[3]