
TRIPS は、テキサス大学オースティン校のチームがIBM、Intel、Sun Microsystemsと共同で設計したマイクロプロセッサアーキテクチャです。TRIPS は、独立した処理要素で実行できる大きな命令グループ (グラフ) に簡単に分割できるように設計された命令セット アーキテクチャを使用します。この設計では、関連データをグラフに収集し、コストのかかるデータの読み取りと書き込みを回避し、処理要素に近い高速メモリにデータを保持します。プロトタイプの TRIPS プロセッサには、このような要素が 16 個含まれています。TRIPS は、2003 年から 2006 年にかけて発表された論文ごとに、単一のプロセッサで1 TFLOP を達成することを目指していました。 [1]
角
TRIPSは、明示的データグラフ実行(EDGE)コンセプトに基づいたプロセッサです。EDGEは、現代のシステムで主流となっている特定のパフォーマンスボトルネックを回避しようとします。[2]
EDGE は、プロセッサが送られてくる命令ストリームをより良く理解できることを前提としています。プロセッサは、命令ストリームを個々の命令の線形ストリームとしてではなく、分離されたデータを使用する単一のタスクに関連する命令ブロックとして認識します。EDGE は、これらすべての命令をブロックとして実行し、処理に必要なデータとともに内部的に分散させます。[3]コンパイラはコードを調べ、特定の方法で情報を共有するコード ブロックを見つけます。次に、これらはコンパイルされた「ハイパー ブロック」に組み立てられ、CPU に送られます。コンパイラはこれらのブロックが特定の相互依存関係を持つことを保証しているため、プロセッサはコードを独自のローカルメモリを持つ単一の機能ユニットに分離できます。
たとえば、メモリから 2 つの数値を加算し、その結果をメモリ内の別の値に加算するプログラムの場合、従来のプロセッサは依存関係を認識し、命令を 1 つずつ実行するようにスケジュールし、中間結果をレジスタに格納する必要があります。EDGE プロセッサでは、コード内のデータ間の相互依存関係はコンパイラによって認識され、これらの命令が 1 つのブロックにコンパイルされます。次に、そのブロックは、完了するために必要なすべてのデータとともに、1 つの機能ユニットと専用のレジスタ セットに送られます。これにより、追加のメモリ フェッチが不要になり、レジスタがそれらの値を必要とする機能ユニットの物理的近くに保持されます。
この中間データに依存しないコードは、個別のハイパーブロックにコンパイルされます。もちろん、プログラム全体で同じデータを使用することは可能です。そのため、コンパイラは、データが他のコードに渡され、その後元のブロックによって事実上放棄されるインスタンスも探します。これは一般的なアクセス パターンです。この場合、コンパイラは 2 つの個別のハイパーブロックを生成しますが、単に共有メモリの場所に格納したままにするのではなく、データのハンドオフを明示的にエンコードします。そうすることで、プロセッサはこれらの通信イベントを「確認」し、適切な順序で実行するようにスケジュールできます。かなりの相互依存性を持つブロックは、トランスポートのボトルネックを回避するために、コンパイラによって通信を分散するように再配置されます。
これにより、個々の機能ユニットの分離が大幅に向上しました。EDGE プロセッサの並列処理は、オンチップ システムではなく、コンパイラの機能によって制限されます。最新のプロセッサは 4 ワイド並列処理で頭打ちになっていますが、EDGE 設計では、はるかに広い範囲に拡張できます。また、共有値による競合を減らすようにスケジュールされたチェーンで、あるユニットから別のユニットにブロックを渡すことで、より「深く」拡張することもできます。
旅行
テキサス大学オースティン校による EDGE コンセプトの実装は、TRIPSプロセッサ ( Tera-op、Reliable、Intelligently adaptive Processing System)です。TRIPS CPU は、単一の基本機能ユニットを必要な回数だけ繰り返すことによって構築されます。TRIPS 設計では、大量にロードされるハイパーブロックを使用することで、投機的実行を大幅に向上させることができます。従来の設計では、機能ユニットへのスケジュール可能性を調べるために数百の命令が必要な場合がありますが、TRIPS 設計では、ハイパーブロックごとに数千、数百の命令があり、数百のハイパーブロックが調べられます。これにより、機能ユニットの使用率が大幅に向上します。パフォーマンスを一般的な 4 発行スーパースカラー設計にスケーリングすると、TRIPS はサイクルごとに約 3 倍の命令を処理できます。
従来の設計ではさまざまなユニットを使用して、4 ワイド スケジューラで可能になるよりも多くの並列処理を可能にしていますが、TRIPS では、すべてのユニットをアクティブに保つために、命令ストリームにすべてのタイプの命令を含めます。実際にはそうならないことが多いため、従来の CPU にはアイドル状態の機能ユニットが多数あります。TRIPS では、個々のユニットは汎用であり、どのコアでもどの命令でも実行できます。これにより、異なる種類のコアの数を慎重にバランスさせる必要がなくなるだけでなく、特定のパフォーマンス要件を満たすために必要な数のコアを使用して TRIPS 設計を構築できることも意味します。簡素化された (または削除された) スケジューラを備えたシングル コアの TRIPS CPU は、数百のコアを持つものとまったく同じようにハイパーブロックのセットを実行しますが、速度は遅くなります。
パフォーマンスは、入力されるデータのタイプにも依存しません。つまり、TRIPS CPU は、同じレベルのパフォーマンスで、はるかに幅広いタスクを実行できます。たとえば、従来の CPU に数学的な負荷がかかった場合、すべての浮動小数点ユニットがビジー状態になるとすぐに CPU は低速になり、整数ユニットはアイドル状態になります。データベース ジョブのようなデータ集約型プログラムが CPU に入力された場合、浮動小数点ユニットはアイドル状態になり、整数ユニットは低速になります。TRIPS CPU では、すべてのタスクがすべてのユニットで実行できるため、すべての機能ユニットがすべてのタスクのパフォーマンスを向上させます。設計者はこれを「ポリモーフィック プロセッサ」と呼んでいます。
TRIPS と同様に、DSP はデータの相互依存性を制限することでパフォーマンスをさらに高めますが、TRIPS とは異なり、非常に限られたワークフローのみを実行できるようにすることでパフォーマンスを高めます。TRIPS はこれらのワークロードではカスタム DSP と同程度の速度ですが、同時に他のワークロードも同じように実行できます。TRIPS プロセッサは、最新のグラフィックス カードのGPU のような高度にカスタマイズされた設計を置き換えることはできないかもしれませんが、メディア処理に使用されるような多くの低パフォーマンス チップを置き換えるか、それを上回るパフォーマンスを発揮できる可能性があります。
グローバル レジスタ ファイルの縮小により、目に見えない利点も生まれます。最新のプロセッサに新しい回路が追加されたため、プロセス サイズが小さくなっても、プロセッサ全体のサイズはほぼ同じままです。その結果、レジスタ ファイルまでの相対的な距離が長くなり、通信遅延によりサイクル速度が制限されます。EDGE では、データは一般に、明確に定義されたコア間リンクでよりローカルまたは分離されているため、大きな「チップ間」遅延は発生しません。つまり、個々のコアは、はるかに短いデータ パスの信号時間によって制限されるものの、より高速で実行できます。
これら 2 つの設計変更を組み合わせることで、システム パフォーマンスが大幅に向上します。ただし、2008 年時点で、ATIとNVIDIAの GPU は、すでに 1 テラフロップスの壁を超えています (ただし、特殊なアプリケーションの場合)。従来の CPU については、2 コアの Intel Xeonを搭載した最新の (2007 年) Mac Pro は、単一のアプリケーションで約 5 GFLOP しか実行できません。[4]
2003 年、TRIPS チームはプロトタイプ チップの実装を開始しました。各チップには 2 つの完全なコアがあり、各コアには 4 幅 4 深度の配置で 16 の機能ユニットがあります。現在の実装では、コンパイラはそれぞれ 128 命令の「ハイパーブロック」を構築し、システムが同時に 8 つのブロックを「実行中」にしておくことができるため、コアあたり合計 1,024 命令になります。基本設計では、最大 32 個のチップを相互接続して、500 GFLOPS に近づくことができます。[5]
参考文献
- ^ TRIPS: 2012 年までに 1 秒あたり 1 兆回の計算
- ^ ISCA 2005 での TRIPS チュートリアル
- ^ TRIPS 技術概要
- ^ Mac Pro Geekbenchスコア
- ^ TRIPSプロトタイプシステム
