上記リンクをクリックすると、ページ内の該当箇所に移動します
はじめに
IBMは、1990年2月にRS/6000製品の提供を開始しました。IBMは、UNIXオペレーティングシステムを搭載したワークステーションやミッドレンジシステムに対するお客様のニーズに応えるために、これらの製品を開発しました。これらの製品に搭載されていたプロセッサーは、第2世代縮小命令セットコンピューター(RISC)アーキテクチャーであるPOWERアーキテクチャーを搭載したものでした。
POWERアーキテクチャーには、他のほとんどのRISCアーキテクチャーに共通した特性が組み込まれています。命令は固定長(4バイト)であり、一貫した形式によって命令のデコードメカニズムをシンプルにしています。すべてのメモリーアクセスは、ロード命令とストア命令によって処理されます。また、メモリーアドレスの計算などの固定小数点演算用に、汎用レジスター(GPR)のセットが用意されています。浮動小数点演算用の浮動小数点レジスター(FPR)のセットは別に用意されています。すべての演算は、どちらかのレジスターセットからソースオペランドを検索して、同じレジスターセットに結果を書き込みます。ほとんどの命令は、1つのシンプルな演算のみを実行します。
既存のRISCアーキテクチャーにおいて、POWERアーキテクチャーは機能単位で分割されているという点でユニークであり、プログラムフロー制御、固定小数点演算、および浮動小数点演算を別々の機能として実装しています。このようなアーキテクチャーの分割により、複数の機能ユニットが独立した命令を同時に実行するスーパー・スケーラー・デザインの実装が容易となります(図1参照)。
POWERアーキテクチャーは、ある意味で、他のほとんどのRISCアーキテクチャーが選んだ道から分岐したものだと言えます。これらのアーキテクチャーの主な目的は、プロセッサーが命令を最速のクロックレートで実行できるように、アーキテクチャーを十分に簡素化してサイクル時間を非常に短くすることでした。これに対してPOWERアーキテクチャーの設計者は、タスクを完了させるために必要な合計時間を最小限に抑えることを最優先させました。この合計時間は、パス長、命令を完了させるのに必要なサイクル数、およびサイクル時間を掛け合わせたものです。
ほとんどのプログラムでは、実行される命令の20~30%をロードおよびストア動作が占めています。さらに、多くのアプリケーションでは、メモリー・アクセス・パターンが一定であることの多い配列を扱っています(「すべてのn番目の要素」など)。これらの事実を踏まえ、POWERアーキテクチャーでは、ほとんどのロードおよびストア命令にアップデート形式を加えました(アップデート形式では、メモリーアクセスを実行して、アップデートされたアドレスをベース・アドレス・レジスターに書き込みます)。これらの命令を使用することで、各アクセス後にアドレスを個別計算する必要が無くなります。
さらに、多くの浮動小数点演算アルゴリズムに共通の演算として、2つの値の積に別の値を加算するというものがあります。そのため、この演算を実行するための浮動小数点乗算加算命令を追加しました。
最初のPOWER実装は、比類のない性能を実現しました。プロセッサー複合体(メモリーコントローラー、命令キャッシュ、およびデータキャッシュを含む)は、7個または9個(システムモデルに依存)のチップで構成されていました。7チップ複合体は32KB、9チップ複合体は62KBのデータキャッシュを搭載していました。また、命令キャッシュはどちらも8KBであり、後に32KBに拡張されています。

2番目のPOWERプロセッサーデザインは、1個のチップに100万個のトランジスターを集積可能にしたシリコン技術の発達によって実現しました。このRISCシングルチップ(RSC)デザインは、低価格のデスクトップシステム向けに開発されたもので、シンプルな分岐ユニット、固定小数点ユニット、浮動小数点ユニット、統合キャッシュ、メモリーコントローラー、およびI/Oコントローラーを1個のシリコンチップに集積していました。このプロセッサーを搭載した製品の提供は、1992年4月に開始されました。
POWER2デザイン(『POWER2: Next Generation of the RS/6000 Family』で詳解)は、実行ユニット数を2倍にすることで、初期のPOWERデザインより高い性能を実現しました。このプロセッサーを搭載した製品の提供は、1993年10月に開始されました。
アプリケーション市場を拡張
企業ユーザーがコンピューターシステムを購入する際に重視するポイントは、性能だけではありません。コンピューターシステムを導入する目的は、従業員の生産性を高め、業務のランニングコストを抑えることです。これらの目標を達成するためのカギは、システムがどれだけ多くの種類のタスクを実行できるかにあります。したがって、より豊富なアプリケーションが用意されているシステムの方が好まれるのです。このようなシステムでは、性能、価格、従業員のスキル、アプリケーション統合要件、および他の特定のニーズに従って、アプリケーションを選ぶことができます。
1990年には、5つのRISCアーキテクチャーが市場シェアを争っており、すべてのアーキテクチャーがワークステーション市場で成功することは考えられませんでした。5つのアーキテクチャーによって分断されたアプリケーション市場では、各アーキテクチャー向けの製品では少ない数の顧客しか獲得できないため、開発者にとってはさほど魅力的ではありませんでした。
さらに、マルチプロセッサーシステムのほうが、ユニプロセッサーシステムよりも優れたコストパフォーマンスと性能を実現していたため、ユーザーもマルチプロセッサーシステムに惹かれ始めていました。このような市場の情勢を鑑みて、Apple、Motorola、そしてIBMは、POWERアーキテクチャーから派生させた共通のアーキテクチャーを利用することを目的としたパートナーシップを確立しました。
PowerPCアーキテクチャー
1991年の初めに、これら3社のプロセッサー設計者、コンパイラー専門家、オペレーティングシステム開発者、プロセッサー設計者、システム設計者、およびシステム開発者が結集し、3社のアライアンスのニーズを満足できるアーキテクチャーの開発に取りかかりました。ユーザーのニーズをタイムリーに満足させるためには、完全に新しいアーキテクチャーを開発することは不可能であったため、これら3社は、POWERアーキテクチャーをスタートポイントとして使用することに決めました。POWERアーキテクチャーに改良を加えることで、多くの目標を達成することにしたのです。新しいアーキテクチャーに対する課題は以下の通りでした。
- 低価格コントローラーから高性能プロセッサーまで、幅広い実装を可能にすること
- 非常に短いサイクル時間を実現するプロセッサーデザインを可能にするために、十分にシンプルであること
- 意欲的なスーパースケーラー実装の設計を阻害するような要因を最小限に抑えること
- マルチプロセッサーの特性を取り入れること
- 32ビットアーキテクチャーのスーパーセットである64ビットアーキテクチャーを定義し、32ビットアプリケーションとのバイナリー互換性を保証すること
アプリケーションやオペレーティングシステムのニーズを分析し、典型的な命令ミックスを検討して、アプリケーションおよびオペレーティング・システム・トレースを調べた結果、アーキテクチャーグループはPowerPCアーキテクチャー定義の合意に至りました。このアーキテクチャーは、上記の目標を達成しつつ、POWERアーキテクチャーのユーザーが既存のアプリケーションを新しいシステム上で動作させ、既存のシステム上で新しいアプリケーションを動作させることができるようにしました。
PowerPCアーキテクチャーには、ほとんどのPOWER命令が含まれています。除外されたPOWER命令は、(ほぼすべてが)あまり実行されない命令であり、両方のアーキテクチャーにある他の複数の命令を組み合わせることで同等の機能が得られる命令です。除外された命令をPowerPCプロセッサー上で実行すると、不当命令タイプのプログラム割込みが発生します。これらの命令は、AIXオペレーティングシステムによってエミュレートされます。ほとんどのPOWERアプリケーションは、新しいPowerPCプロセッサーの高い性能によって恩恵を受けることができます。また、除外された命令を使用して以下に示す演算を頻繁に実行していたアプリケーションは、PowerPCシステムでも同じ結果を生じますが、再コンパイルしない限り、動作が遅くなります。
- 拡張精度ビット文字列計算
- 拡張精度乗算
- 整数除算
- 実行する命令の生成または変更
最初のPowerPCプロセッサーである601は、2つを除いた非特権POWER命令を実装しています。このブリッジプロセッサーの目的の1つは、アプリケーションベンダーが製品をPowerPCシステム向けに再コンパイルするための時間を用意することでした。ほとんどの既存POWERアプリケーションは、601ベースシステムでも正常に動作します。コードを生成または変更するアプリケーションは、POWERアーキテクチャーのキャッシュフラッシュ命令を使用していることがあります。この命令は601では実装されていません。このようなプログラムも(この動作をAIXがエミュレートしているため)正常な結果を生じますが、再コンパイルしなければ動作は遅くなります。上述のように、601は除外されたほとんどすべての非特権POWER命令を実装していますが、他のPowerPCプロセッサーはこれらの命令を実装しないため、新しいアプリケーションでは、除外された命令を使用するべきではありません。
PowerPCアーキテクチャーは、64ビットアーキテクチャーです。このアーキテクチャーは、アドレッシングと固定小数点演算を64ビットに拡張し、64ビットモードと32ビットモードの動的な切り替えをサポートしています。32ビットモードでは、64ビットPowerPCプロセッサーは、32ビット・サブセット・アーキテクチャー用にコンパイルされているアプリケーションバイナリーを実行します。このホワイトペーパーでアーキテクチャー全体を説明することはできないため、ここではユーザーモードの32ビット・サブセット・アーキテクチャーに影響する変更点のみを取り上げます。
POWERアーキテクチャーをスリムに
PowerPCアーキテクチャーでは、一部のPOWER命令を除外しただけではなく、重要ではない一部の条件を削除または緩和しました。また、新しい命令や特長を加えることでアーキテクチャーの完成度を高め、アーキテクチャーグループが設定した目標を達成しています。
アーキテクチャーグループは、制約が厳しい、負担が大きい、もしくは費用対効果の悪いPOWERアーキテクチャーの特性を見極め、その結果、32のプロブレム状態命令を除外しました。その理由は以下の通りです。
POWERアーキテクチャーには、スーパースケーラーデザインを複雑にしてしまう2つの特性を持ったMQレジスターがあります。このレジスターの使用は暗黙的であり、また、このレジスターは単独のリソースでした。新しいデザインでMQレジスターを使用するためには、MQレジスターを使用するすべての命令を特定し、MQレジスター用に特別なリネームメカニズムを実装するための命令ディスパッチ機能が必要でした。MQレジスターがもたらす機能は、この複雑さに見合うものではありませんでした。MQレジスターを除外したことで、15の拡張精度シフト命令、2つの除算命令、そして1つの拡張精度乗算命令が除外されました。
POWERアーキテクチャーのいくつかの命令は、将来のプロセッサーデザインを非常に複雑にしてしまいます。たとえば、3つの固定小数点ローテートインサート命令は、3つのソースオペランドを必要とします。ソースオペランドが余分に必要であるということは、追加のレジスター・ファイル・ポートが必要になることを意味し、スーパースケーラーデザインのリネームメカニズムが大幅に複雑化します。また、絶対値を計算する2つの命令と、下限値が0の減算を実行する他の2つの命令では、演算後のレジスターファイルへのライトバック前に選択ロジックが必要です。演算後に選択ロジックが必要であるということは、一部の実装では最小サイクル時間が長くなることを意味します。
PowerPCアーキテクチャーでは、ほとんど使用されないプロブレム状態命令をさらに5つ除外しました。POWERアーキテクチャーで最も複雑な命令であるストリングロードおよびバイト比較命令などです。
PowerPCでは、メモリー管理メカニズムの仕様や他の関連する変更により、POWERアーキテクチャーのキャッシュ管理命令が除外されました。また、POWERメモリーモデルの特長であるデータベースロックおよびトラッキングメカニズムも、メモリー管理を大幅に複雑化し、ほとんどのアプリケーションで必要とされる粒度を提供しないという理由から除外されています。
一部の分野では、PowerPCの条件はPOWERより柔軟になっています。POWERアーキテクチャーでは、アップデート形式のロード命令によって、ターゲット(RT)とベースアドレス(RA)に同じレジスターが指定されることがあります。この場合、プロセッサーはロードを実行し、アップデートを抑制します。この場合、プロセッサーはアップデートされたアドレスを事実上、破棄していることになるため、PowerPCアーキテクチャーでは、アップデート形式の命令を使用する理由がないと判断し、この条件を緩和しました。PowerPCアーキテクチャーでは、アップデート形式のロード命令は不当となり、使用した場合の結果は未定義となります。同じ問題は、RAがGPR 0であるアップデート形式のロードおよびストア命令にも存在します。RAがGPR 0である場合、実効アドレスの計算では、GPR 0の内容ではなく、値0を使用します。次回の使用時にもRA(GPR 0)の値が無視されるのに、アップデートされた実効アドレスを保存するのは意味がありません。したがって、この操作はPowerPCアーキテクチャーでは不当となり、結果は未定義になります。
また、命令フォーマットに関しても、特定の命令では必要のないフィールドを対象として条件が緩和されています。たとえば、多くのPOWER命令フォーマットには、操作の結果を記述したステータス情報を条件コードに記録するかどうかを制御するRcビットがあります。POWERアーキテクチャーでは、ステータス情報が不適切である命令(ロードおよびストアなど)ではRcビットが1となり、命令が正常に実行されても、ステータス情報には未定義の値が入ります。PowerPCアーキテクチャーでは、このようなフォーマットを不当とみなします。プロセッサーが不当フォーマットの命令を実行すると、結果は未定義となりますが、メモリー保護および特権の条件には違反しません。
POWERアーキテクチャーで定義されているタイミング機能は、マネージメントや、システム・クロックの非整数倍のクロックで制御されているプロセッサー環境では、実装が非常に困難です。これに対してPowerPCアーキテクチャーのタイミング機能は柔軟に定義されており、より費用対効果の高いデザインを可能としています。ただし、このアプローチの結果、タイミング機能を直接使用するためにはシステムのみが利用できる環境変数が必要となるため、PowerPCアプリケーションは、通常はシステムサービスを利用して正確なタイミングを得なければなりません。
ソフトウェアやハードウェアの技術が急速に変化したため、一部のPOWERアーキテクチャー機能の費用と価値との関係は変わりました。PowerPCでは、POWERアーキテクチャーの一部の条件を緩和することで、デザインの大幅な複雑化の原因となっていたPOWERアーキテクチャーの要因を排除し、実装をスピードアップすると共に、スーパースケーラーデザインが実装できる実行ユニット数の制限を撤廃しました。
これらの要因を除外すると、POWERアーキテクチャーでは機能不足となります。さらにPOWERアーキテクチャーには、変化の激しい市場での競争に必要な他の特性が不足しています。たとえば、単精度浮動小数点性能に優れた低価格プロセッサーや、シンメトリック・マルチプロセッサー・システム用のプロセッサーでは、POWERアーキテクチャーを使用することができませんでした。
PowerPCアーキテクチャーの完成
PowerPCアーキテクチャーには、両方の機能不足を解消する特性が追加されています。これらの追加機能を定義する際には、ソフトウェアエラーを処理するためにハードウェアが複雑にならないように配慮し、ソフトウェアがエラーを回避しやすくなっています。たとえば、特定の命令のフィールドに0を書き込むようソフトウェアに要求する、などです。
PowerPCアーキテクチャーでは、フルセットの単精度浮動小数点演算命令と、浮動小数点値を整数に変換する2つの命令が追加されました。これらの命令のほとんどは、既存の倍精度命令の単精度バージョンであるため、新しい命令が追加されたことによる複雑さの増加は最小限に抑えられています。
また、MQレジスターに伴う複雑さを排除しつつ、通常精度および拡張精度の計算を実行できるように、固定小数点除算および乗算命令が追加されました。他の2つの新しい命令(キャリーなし減算と符号バイト拡張)により、固定小数点演算セットが完成しています。
命令セットの変更以外の最も大きな変更は、メモリーモデルとメモリー管理の定義です。POWERアーキテクチャーでは、プロセッサーは、データメモリーと、I/Oアクセスや命令フェッチとの一貫性を管理しませんでした。これらの一貫性については、ソフトウェアが管理しなければなりません。たとえば、メモリー領域をディスクにコピーする際には、データキャッシュに入っていたメモリー領域の修正コピーがメインメモリーに書き込まれたことを、事前にソフトウェアが確認しなければなりません。ディスクからデータを読み出す際には、データキャッシュにメモリー領域のコピーが格納されていないことをソフトウェアが確認しなければなりません。また、ある動作を要求したプログラムを再起動する際には、命令キャッシュ内のメモリー領域のコピーを無効化しなければなりません。
POWERプロセッサーは、常にキャッシュを介してメインメモリーにアクセスしていました。キャッシュを使用しない唯一のメモリーアクセスは、「T=1空間」として参照される独立したアドレス空間へのアクセスのみでした。プログラムドI/O(PIO)動作では、このアドレス空間にアクセスします。
PowerPCのメモリーモデルでは、柔軟性を高めています。仮想メモリーの各ページに関連付けられている属性により、ソフトウェアはシステムのメモリーアクセス方法を制御することができます。このメモリーモデルでは、I/Oが行われていることを示す属性や、他の不安定な特性を示す属性を持っていないページに対して、投機的なアクセスを実行することができます。ほかにも、ページがキャッシュ可能である、ページのキャッシュが必須である、またはメインメモリーを介したストア付きキャッシュが可能であることを示す属性があります。この新しい定義によって、I/Oをメインメモリー空間にマッピングできるようになりました。また、プロセッサーにデータメモリーの一貫性を管理させることで、I/O動作とメモリーとの一貫性を管理する義務からソフトウェアを解放しています。POWERのメモリーモデルと同じように、PowerPCのメモリーモデルでも、命令メモリーとデータメモリーとの一貫性はソフトウェアが管理しなければなりません。命令を変更または生成するプログラムは、これらの命令を実行する前に、新しい命令が格納されたメモリーエリアのキャッシュコピーがメインメモリーと一貫していることを保証しなければなりません。
PowerPCアーキテクチャーでは命令メモリーの一貫性をソフトウェアで管理しなければならず、また、POWERアーキテクチャーのキャッシュ管理命令を除外したため、5つの新しいキャッシュ管理命令が定義されています。
PowerPCのメモリーモデルは、一貫性の要求が低く抑えられているため、メモリーアクセスを順不同で完了することができます。また、強制順序的I/O実行(eieio)命令により、I/Oデバイスへのアクセスを完了させる順序を制御するための効率的な手段をソフトウェアに提供しています。
POWERアーキテクチャーにはアトミックなメモリー操作が定義されていなかったため、PowerPCアーキテクチャーでは、メモリー位置の読み出しと変更を1つのアトミック動作として実行するための2つの新しい命令が定義されています。これらの命令は、 ローレンスリバモア国立研究所のレポートで提案されている命令と似ています。ワードロードおよび予約(lwarx)命令は、ターゲットメモリー位置の内容(ロック変数として扱うことができます)を他のレジスターにコピーして、そのメモリー位置を予約します。プログラムは、ロードされた値を使用して、ロック変数にストアされる新しい値を計算することができます。プロセッサーは、条件ワードストア(stwcx)命令を実行して、新しい値をストアします。lwarx命令の完了後からロック変数が変更されていない場合、プロセッサーはストアを実行します。変更されている場合には、ストアを実行しません。どちらの場合でも、プロセッサーはステータスを記録して結果を示します。stwcx命令がストアに失敗した場合には、シーケンスを繰り返すことができます。
これらはPOWERアプリケーションのバイナリー互換性には影響しない新しい命令であるため、PowerPCアーキテクチャーでは、これらの命令をワードアラインされたメモリー位置へのアクセスのみに使用するように定義しています。これらの命令を使用してワードアラインされていないメモリー位置へのアクセスを試みた場合のアクセス結果は、PowerPCアーキテクチャーでは定義されていません。この定義によって、回避が容易なプログラミングエラーをハードウェアでチェックする必要がなくなるため、実装がシンプルになります。
POWERのメモリーモデルはビッグエンディアンでした。PowerPCのメモリーモデルへの最後の変更は、ビッグエンディアンとリトルエンディアンのメモリーモデルを両方サポートできるようにしたことです。ソフトウェアによって制御されるエンディアンモードは、現在のメモリーセマンティクスがビッグエンディアンとリトルエンディアンのどちらであるかを指定します。これにより、ビッグ・エンディアン・アプリケーション、リトル・エンディアン・アプリケーション、およびこれらの両方を実行するように設計されているシステムのいずれにおいてでも、PowerPCプロセッサーを使用することができます。
まとめ
1991年の初めに、Apple、Motorola、およびIBMの技術者が結集し、POWERアーキテクチャーを基礎として、拡張機能を持つ、よりコンパクトで洗練されたアーキテクチャーの開発を開始しました。その結果として誕生したPowerPCアーキテクチャーは、低価格コントローラーから高性能プロセッサーまで、幅広い実装を可能にします。PowerPCアーキテクチャーは、デスクトップやノート型PC向けのプロセッサーを実装できる一方で、高機能マルチプロセッサーシステムに適したプロセッサーを効率的に実装するための特性も備えています。
参考文献
- IBM RS/6000 Technology, SA23-2619, IBM Corporation, 1990.
- IBM Journal of Research and Development, Volume 34, 1990.
- Moore, Balser, Muhich, and East, IBM Single Chip RISC Processor (RSC)," Proceedings of the International Conference on Computer Design, 1992.
- Steven W. White and Sudhir Dhawan, POWER2: Next Generation of the RS/6000 Family," PowerPC and POWER2: Technical Aspects of the New IBM RS/6000, IBM Corporation, SA23-2737, pp. 8-18.
- Paap and Silha, PowerPC: A Performance Architecture," Proceedings of the IEEE Computer Society International Computer Conference, 1993.
- A New Approach to Exclusive Data Access in Shared Memory Multiprocessors," Lawrence Livermore National Laboratory Report UCRL-97663, November 1987.
