IA-64 (Intel Architecture 64bit)
【アイ・エー・ロクジュウヨン】
別名
・IA64 (Intel Architecture 64bit) 【アイ・エー・ロクジュウヨン】
米Intel社とHewlett-Packard社によって提唱されている、次世代の64bitプロセッサのための命令セットアーキテクチャ。性能向上のための限界が見え始めている現在のIA-32アーキテクチャに代わって、両社の将来のプロセッサ戦略を担うべく開発された革新的なアーキテクチャである。
80386以降続いているIntel社の32bitプロセッサアーキテクチャであるIA-32は、典型的なCISCプロセッサであり、RISC系のプロセッサと比べると、性能向上が難しいとされている。それでもPentium Pro以降やx86互換構成のプロセッサなどでは、フェッチした命令をRISC風の命令に変換して、RISCプロセッサなどで使われている数々の高速化手法(投機実行、パイプライン化、スーパースカラー、アウトオブオーダー実行、レジスタリネーミング、高度な分岐予測、など)を駆使して高速化を図ってきた。しかしここにきてそのようなアプローチによる性能向上にも限界が見え始めてきた。さらに高速化を行うには、同時に実行する命令実行モジュールやレジスタリソースなどを増加させたり、分岐予測精度を高めたり、キャッシュなどを大容量化したりする必要があるが、これは、設計の複雑化、デバッグの困難化、製造技術の高度化、人的・資金的リソースの大規模化など、開発にかかる手間や資金、時間などのリソースが膨大になるという問題がある。また、いくら分岐予測精度をあげて、さらに並列に実行できる命令の数を増やしても、実際のプログラムでは相互に干渉せずに同時・並列に実行できる命令の数は2〜4命令といわれており、投入したリソースの割には得られる効果が少なくなってきている。
そこで、従来の逐次実行的なアーキテクチャを改め、まったく新しい、そして将来の性能向上も十分見込めるようなアーキテクチャの開発がIntel社とHP社の共同作業によって進められた。この結果開発されたのがIA-64アーキテクチャである。
IA-64における64という名称は、レジスタ幅や演算データ幅が64bitであるところから付けられている。IA-32アーキテクチャでは、フラットにアクセスできる最大アドレス空間は32bit(4Gbytes)しかなく、すでに大規模アプリケーションなどでは、アドレス空間が不足している。そこで64bitプロセッサや64bitオペレーティングシステムが求められ、すでに実用化が始まっている。IA-64では、プロセッサ構造の抜本的な改革を行うと同時に、データ処理幅の64bit化も行い、これからの需要にも十分応えられるようにしている。
IA-64では、EPIC(Explicitly Parallel Instruction Computing、明示的並列命令コンピューティング)と呼ばれる技術が核になっている。これは、あらかじめプログラミング時に、並列に実行できる命令を明示的に、静的にプログラム中に記述しておいて、実行時にはそれらの命令をすべて同時に実行する、という技術である。また、データの投機的なロード(データのロード開始と、データの使用を分離する)や、分岐成立時と不成立時の命令ストリームを並列に記述しておいて、条件に応じてどちらかしか実行しないということも行う。これにより、プロセッサが持つ演算ユニットを最大限並列に動作させて、さらにメモリロードの遅延によるパイプラインのストールや、分岐によるペナルティなどをなくして、性能を向上させることができる。
IA-64アーキテクチャは、2000年に出荷される開発コード名Mercedというプロセッサで最初にインプリメントされる予定である。IA-64は命令セットアーキテクチャであり、実際にインプリメントされるプロセッサにおける演算ユニットの数や、同時に実行可能な命令数などは、IA-64では定義されていない。Mercedでは6つの命令を同時実行できるとされているが、これらはインプリメンテーション依存であり、将来のプロセッサでは変わる可能性がある。
IA-64には、64bitの汎用整数レジスタが128本、82bitの浮動小数点レジスタが128本、1bitのプリディケーションレジスタが64本、分岐先レジスタ(間接分岐に使用)が8本ある。汎用レジスタや浮動小数点レジスタが128本もあるのは、並列に実行できる命令の数を多くするためと、関数呼び出し間でのパラメータの受け渡しなどにも使う(SPARCのレジスタウィンドウのように使う)ためである。また、ループ命令の実行時には、ループ内で使うレジスタを自動的にローテーションさせる機能(自動的なループアンローリング機能)も持っており、そのためにも大量のレジスタが必要になる(ローテーションさせないと、ループの繰り返しによって同じレジスタばかりが使用されることになり、リソースが衝突して、パイプラインがストールしてしまう)。
IA-64では、1つの命令は128bitとかなり長いが(これをバンドルという)、この中には41bit長の命令が3つ(3スロット)と、「テンプレート」と呼ばれる5bitの情報が含まれている。1つのバンドルには、3つの命令が含まれているが、実際にいくつの命令を同時に実行するのかは、テンプレート部で指示することになる。つまり、バンドルの長さと、実際に並列に実行される命令の数は異なっており、必要ならば2つ以上のバンドルにまたがる命令をすべて同時に実行することができる(実際にいくつの演算ユニットを持っているのかはインプリメンテーション依存)。41bitの命令コードの内訳は、命令の種類や演算長の指定のほか、ソース1、ソース2、ディスティネーションの各レジスタの指定、プリディケーションレジスタの指定、などが含まれている。プリディケーションレジスタには条件比較の結果を入れておき、このレジスタの内容が1ならその命令を実行するが、0なら命令を実行しないというふうに使う(プリディケーションレジスタ0を指定すると、無条件で常に実行される)。従来のアーキテクチャにおける分岐命令を、プリディケーションレジスタを使った条件付き命令に変換して実行すれば、分岐に伴うペナルティを避けることができる。
IA-64はまったく新しい命令セットアーキテクチャであるが、実際には過去のプロセッサ(x86アーキテクチャ)との互換性も考慮して、IA-32アーキテクチャも実装されることになっている。つまり、IA-64はIA-32のスーパーセットであり、従来のx86のプログラム(MMXや、Pentium IIIのStreaming SIMD Extension機能も含む)もモードを変えればそのままダイレクトに実行することができる(HPのPA-RISCにはエミュレーションで対応)。IA-32モードで実行する場合、IA-64の汎用レジスタや浮動小数点レジスタの一部が、IA-32の各レジスタなどを格納するために使われることになっている。
Copyright (C) 2000-2007 Digital Advantage Corp.