(57)【要約】【課題】ＣＰＵによるフォールトトレラントデジタル処理を提供するためにシステムおよび方法を改良する。【解決手段】  本発明は、ＣＰＵの機能試験を提供する方法に関する。ＣＰＵにおける同じ種類の複数の機能ユニット上で、オペレーションが実行される。これら複数の機能ユニットの出力が、自動的に比較される。冗長なオペレーションのときに、比較の結果がチェックされる。あるいは、本発明は、組み込み機能試験能力を有するマイクロプロセッサに関する。このマイクロプロセッサは、同じ種類の複数の機能ユニットと、これら複数の機能ユニットから出力を受け取るレジスタとを含む。さらに、複数の機能ユニットから出力を受け取って、それらの出力を比較し、それによって、機能試験を提供するコンパレータ回路も組み込まれる。【選択図】図５
2005085276.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵの機能試験を提供する方法であって、
前記ＣＰＵにおける同じ種類の複数の機能ユニット上でオペレーションを実行することと、
前記複数の機能ユニットからの出力を自動的に比較することと、
冗長なオペレーションのときに、前記比較の結果をチェックすることと
を含む方法。
【請求項２】
前記複数の機能ユニットからの出力を自動的に比較することは、前記ＣＰＵ内の前記出力を受け取るように接続されたコンパレータ回路によって行われる
請求項１に記載の方法。
【請求項３】
前記コンパレータ回路の出力に基づいて、比較フラグをセットすること
をさらに含む請求項２に記載の方法。
【請求項４】
前記比較の結果をチェックすることは、前記比較フラグを検査することによって行われる
請求項３に記載の方法。
【請求項５】
前記比較フラグの検査がエラーを示すときに、前記実行を停止し、前記エラーの通知を提供すること
をさらに含む請求項４に記載の方法。
【請求項６】
前記冗長なオペレーションは、利用されなければサイクル中にアイドルとなる機能ユニットを利用するように、コンパイラによって好機をねらってスケジューリングされる
請求項１に記載の方法。
【請求項７】
前記コンパイラは、前記冗長なオペレーションのスケジューリングに関して、１つ以上の積極性レベルで構成される
請求項６に記載の方法。
【請求項８】
前記積極性レベルは、
利用されなければアイドルとなる機能ユニットを単に利用することよりも積極的なレベル
を含む
請求項７に記載の方法。
【請求項９】
高い積極性レベルは、ある機能ユニット上のすべてのオペレーションを、同じ種類の別の機能ユニット上で重複して実行させる
請求項８に記載の方法。
【請求項１０】
前記機能ユニットは、
浮動小数点演算ユニット
を含む
請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的には、コンピュータシステムに関する。
より詳細には、本発明は、コンパイラに関する。
【背景技術】
【０００２】
中央処理装置（ＣＰＵ）によるデジタル処理にフォールトトレランスを提供する従来の１つの解は、コンピュータシステムが複数のＣＰＵを有することである。
例えば、複数のＣＰＵを完全なロックステップで動作させることによって、それら複数のＣＰＵの計算に、フォールトトレランスレベルを達成することができる、このような解は、不利なことに、追加のシステムハードウェアおよびサポートする基盤装置が必要となる点において高価である。
【０００３】
中央処理装置（ＣＰＵ）によるデジタル処理にフォールトトレランスを提供する従来の別の解は、ソフトウェア検証を使用するものである。
ソフトウェア検証は、同じコンピュータまたは別のコンピュータのいずれかでプログラムを複数回実行することによって行うことができる。
しかしながら、この解は、不都合なことに、ランタイムを長く必要としたり、複数のコンピュータを必要としたりすることがある点において高価である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述した従来の解は、コストおよび／またはシステム性能の点で高価である。
したがって、ＣＰＵによるフォールトトレラントデジタル処理を提供するシステムおよび方法の改良が非常に望まれている。
【課題を解決するための手段】
【０００５】
本発明の一実施の形態は、ＣＰＵの機能試験を提供する方法に関する。
ＣＰＵにおける同じ種類の複数の機能ユニット上で、オペレーションが実行される。
これら複数の機能ユニットの出力が、自動的に比較される。
冗長なオペレーションのときに、比較の結果がチェックされる。
【０００６】
本発明の別の実施の形態は、組み込み機能試験能力を有するマイクロプロセッサに関する。
このマイクロプロセッサは、同じ種類の複数の機能ユニットと、これら複数の機能ユニットから出力を受け取るレジスタとを含む。
さらに、複数の機能ユニットから出力を受け取って、それらの出力を比較し、それによって、機能試験を提供するコンパレータ回路も組み込まれる。
【発明を実施するための最良の形態】
【０００７】
上述したように、ＣＰＵによるフォールトトレラントデジタル処理の従来のシステムおよび方法は、さまざまな不都合を有する。
本発明は、ＣＰＵによって行われる計算の信頼性を改善するシステムおよび方法に関する。
【０００８】
加工寸法がますます小さくなり、かつ、電圧レベルが低くなることで、集積回路上にますます多くのトランジスタが配置されるにつれて、オンチップのフォールトトレランス機能の必要性が増大している。
通常、誤りの検出および訂正を行うには、誤り訂正符号化を使用することができる。
残念なことに、算術論理演算ユニット（ＡＬＵ）や浮動小数点演算ユニット（ＦＰＵ）などのＣＰＵの演算実行ユニットに誤り訂正符号化を十分に適用することは難しい。
【０００９】
本発明が使用される環境は、一般的な分散コンピューティングシステムを包含する。
この分散コンピューティングシステムでは、汎用コンピュータ、ワークステーション、またはパーソナルコンピュータが、クライアントサーバ配置で、さまざまな種類の通信リンクを介して接続されており、多くはオブジェクトの形のプログラムおよびデータが、システムのさまざまなメンバーによって利用可能にされ、システムの他のメンバーによって実行され、アクセスされる。
汎用コンピュータの要素のいくつかを図１に示す。
図１では、コンピューティングシステム１が示されている。
コンピューティングシステム１は、入出力（「Ｉ／Ｏ」）部２、マイクロプロセッサまたは中央処理装置（「ＣＰＵ」）３、およびメモリ部４を有する。
Ｉ／Ｏ部２は、キーボードおよび／またはそれ以外の入力デバイス５、表示ユニットおよび／またはそれ以外の出力デバイス６、１つまたは複数の固定記憶ユニット９および／または着脱可能記憶ユニット７に接続されている。
着脱可能記憶ユニット７は、通常、プログラム１０およびそれ以外のデータを含んだデータ記憶媒体８を読み出すことができる。
【００１０】
図２は、図１の例示のコンピュータシステムのソフトウェアエレメントの例を示している。
アプリケーションプログラム２６が示されている。
このようなアプリケーション２６は、本発明の教示と一体となったコンパイラ３４を使用してコンパイルすることができる。
コンパイルされたアプリケーションプログラム２６は、実行中にランタイムライブラリ３４にアクセスしてサービスを得る。
ランタイムライブラリ３４は、オペレーティングシステム３２にアクセスしてシステムサービスを得る。
また、コンパイラ３４も、アプリケーションプログラム２６のコンパイル中に、オペレーティングシステム３２にアクセスしてシステムサービスを得る。
【００１１】
本発明の教示を組み込んだコンパイラ３４は、対象となるマイクロプロセッサシステム上で動作するネイティブコンパイラまたは別のマイクロプロセッサシステム上で動作するクロスコンパイラのいずれかを備えることができる。
本発明の一実施の形態によれば、このコンパイラの対象となるマイクロプロセッサは、同じ種類の複数の機能ユニットを有する。
例えば、マイクロプロセッサは、スーパースカラーアーキテクチャを有するマイクロプロセッサを備えることができる。
【００１２】
次に、図３ａおよび図３ｂを参照して、これらのブロック図は、コンパイラの一実施の形態を示している。
図３ａに図示するように、この実施の形態では、コンパイラ３４は、パーサ３８、中間表現ビルダ４０、および本発明の教示と一体となったコードジェネレータ４２を備える。
パーサ３８は、コンパイルされるプログラムのソースコードを入力として受け取る。
これに応じて、パーサ３８は、ソース言語の命令文を構文解析して、トークン化された命令文を出力する。
中間表現ビルダ４０は、トークン化された命令文を入力として受け取る。
これに応じて、中間表現ビルダ４０は、トークン化された命令文の中間表現を構築する。
コードジェネレータ４２は、中間表現を入力として受け取る。
これに応じて、コードジェネレータ４２は、プログラムのオブジェクトコードを生成する。
コンパイラ３４は、他の実施の形態に従い異なって構成することもできる。
【００１３】
図３ｂに示すように、この実施の形態では、コードジェネレータ４２は、トランスレータ４４、オプティマイザ４６、レジスタアロケータ４８、ループ展開器（loop unroller）５０、スケジューラ５２、およびアセンブリコードジェネレータ５４を含むように構成される。
トランスレータ４４は、中間表現を入力として受け取る。
これに応じて、トランスレータ４４は、ループテーブルの形成、命令ブロックの配列、データフローグラフの構築などを行う。
オプティマイザ４６は、ループテーブルおよびデータフローグラフを含めて、中間表現および関連情報を入力として受け取る。
これに応じて、オプティマイザ４６は、さまざまな最適化を行う。
レジスタアロケータ４８は、最適化された中間表現および関連情報を入力として受け取る。
これに応じて、レジスタアロケータ４８は、対象となるマイクロプロセッサのレジスタを、生成中の命令に割り当てる。
ループ展開器５０は、割り当てられたレジスタを有する最適化された中間表現および関連情報を入力として受け取る。
これに応じて、ループ展開器５０は、生成中の命令を再構成し、生成中の命令内のループを展開して、対象となるマイクロプロセッサで利用可能な資源と整合した最適な時間量を得る。
スケジューラ５２は、再構成された中間表現および関連情報を入力として受け取る。
これに応じて、スケジューラ５２は、生成される命令をさらに再構成して、並列性を得る。
最後に、最適化され、レジスタ割り当てを受け、かつ、再構成された中間表現および関連情報を、アセンブリコードジェネレータ５４が入力として受け取る。
これに応じて、アセンブリコードジェネレータ５４は、コンパイル中のプログラムのオブジェクトコードを生成する。
コードジェネレータ４２は、他の実施の形態に従い異なって構成することもできる。
【００１４】
上述した実施の形態は、生成中の命令内のループの展開および命令のスケジューリングを行って並列性を得る前にレジスタを割り当てるものであり、理解を容易にするために、この上述した実施の形態でコードジェネレータ４２を説明しているが、以下の説明に基づくと、本発明は、異なるレジスタ割り当て、ループ展開、およびスケジューリング順序を有する他のレジスタ割り当て、ループ展開、およびスケジューリングの手法でも実践できることが理解されよう。
【００１５】
図４ａは、本発明の一実施の形態によるコンパイラによる命令のスケジューリングに関係したステップを示すフローチャートである。
図４ａの方法は、同じ種類の複数の機能ユニットを有するマイクロプロセッサまたは中央処理装置（ＣＰＵ）において利用することができる。
例えば、ＣＰＵは、複数の算術論理演算ユニット（ＡＬＵ）または複数の浮動小数点演算ユニット（ＦＰＵ）を有することができる。
【００１６】
従来、これらのユニットのすべてをできるだけビジーに維持することがコンパイラスケジューラの機能である。
それにもかかわらず、あるユニットがアイドルになるか、または、ｎｏ−ｏｐ（ノーオペレーション）を実行する周期が存在する。
【００１７】
本発明の一実施の形態によれば、図４ａの方法６０により、機能ユニットがアイドルとなるこのようなサイクルが特定される（６２）。
コンパイラは、ユニットをアイドルにする代わりに、そのアイドルなユニットに冗長なオペレーションをスケジューリングして（６４）、好機をねらったその機能の障害チェックを提供する。
ユーザは、より多くの障害チェックを望む場合に、「スライダ」をコンパイラに設定して、ハードウェアコンパレータをより積極的に使用することができる。
一例として、スライダを０から１０の任意の値に設定できると仮定する。
値「０」は、機能ユニットが、スケジューリングされなければアイドルとなる場合に、比較をスケジューリングすることのみを意味することができる。
値「１０」は、すべてのアイドルなサイクルを使用し、その上、すべてのＦＰＵ／ＡＬＵ命令を強制的に冗長なものにすることを意味することができる。
積極性レベルが高くなるほど、提供される障害チェックレベルは（性能を犠牲にして）大きくなる。
コンパイラのさまざまな積極性レベルを設定するのに、他のメカニズムも使用することができる。
【００１８】
例えば、２つの浮動小数点演算ユニットＦＰ＿ＡおよびＦＰ＿Ｂを有するＣＰＵについて考察する。
ほとんどの場合、双方のユニットが独立してオペレーションを行うようにスケジューリングすることができ、比較フラグをチェックする必要はない。
しかしながら、コンパイラは、所与のサイクルの間、ＦＰ＿Ａのオペレーションをスケジューリングできるが、そのサイクルの間、ＦＰ＿Ｂのスケジューリングに利用可能な別のオペレーションが存在しないことがある。
本発明の一実施の形態によれば、コンパイラは、この機会を特定し（６２）、ＦＰ＿ＡおよびＦＰ＿Ｂの双方に同じオペレーションをスケジューリングする（６４）。
【００１９】
図４ｂは、本発明の一実施の形態による、コンパイルされたプログラムの実行中のステップを示すフローチャートである。
図４ｂの方法６５により、ＣＰＵ内の複数の機能ユニットによって、オペレーションが実行される（６６）。
本発明の一実施の形態によれば、これらのオペレーションは、コンパイラによってスケジューリングされる。
通常、異なるオペレーションが、スケジューリングされ、サイクル中に複数の機能ユニット上で実行される。
ときに、上述したように、知的スケジューラは、障害チェック目的で重複して実行されるオペレーションを好機をねらってスケジューリングする。
【００２０】
複数の機能ユニットからの出力は、自動的に、対象となるマイクロプロセッサ内のコンパレータ回路によって互いに比較される（６７）。
コンパレータ回路の結果出力に基づいて、比較フラグがセットまたはリセットされる（６８）。
これは、複数の機能ユニット上で異なるオペレーションが実行されたのか、それとも冗長なオペレーションが実行されたのかにかかわらず、各サイクルで行われる。
【００２１】
しかしながら、比較フラグのチェックおよび比較フラグに従った動作は、このような冗長なオペレーションの実行後にしか行われない（６９）。
異なるオペレーションが複数の機能ユニットによって実行された場合には、その結果は異なることが予想されるので、冗長でないオペレーションの実行後には、比較フラグはチェックされず、また、それに従って動作も行われないことになる。
換言すると、結果の相違は、通常、機能ユニットの１つによるエラーを示すものではない。
一方、冗長なオペレーションが、複数の機能ユニット上で実行された場合には、機能ユニットの１つによるエラーが存在しない限り、それらの結果は、同じであると予想される。
【００２２】
上記例では、ＦＰ＿Ａの出力およびＦＰ＿Ｂの出力をハードウェアコンパレータに直接接続するように構成することができる。
このハードウェアコンパレータの出力は、これら２つの結果が同じ場合には「１」となり、これら２つの結果が異なる場合には「０」となる（「１」と「０」は逆になってもよい）。
通常のオペレーション中、ＦＰ＿ＡおよびＦＰ＿Ｂが、異なるデータに対してオペレーションを実行すると、コンパレータの出力は「０」になるが、この情報は使用されない。
冗長なオペレーションがＦＰ＿ＡおよびＦＰ＿Ｂの双方で実行された場合にのみ、このフラグはチェックされて、（結果が異なるために）「０」によってエラーが示されると、このフラグに従った動作が行われる。
この例は、浮動小数点演算ユニットを引用しているが、この原理は、コンパイラによってスケジューリングされる複数の複製が存在するあらゆるプロセッサ資源に適用可能である。
【００２３】
さらに、比較フラグのチェックによって、機能ユニットに１つによるエラーが示された場合には、フォールトトレランスおよび性能の所望のレベルに応じて、そのエラーを取り扱うさまざまな方法が存在する。
一実施の形態によれば、どの機能ユニットがエラーを有するかがまだ判明していないので、可能な動作は、ＣＰＵを停止して、その問題についてユーザに警告することである。
その実施の形態では、さらに診断をオフラインで実行することができる。
他の実施の形態では、より高機能なアルゴリズムを利用することができる。
比較がハードウェアにおいて「インライン」で行われたことにより、ＯＳまたはアプリケーションの割り込みなしに復旧する機会が大幅に増加する。
【００２４】
図５は、本発明の一実施の形態における複数のＡＬＵ出力に接続されたコンパレータ回路を有するマイクロプロセッサの選択されたコンポーネントを示すブロック図である。
もちろん、実際のマイクロプロセッサは、図示しないいくつかの他のコンポーネントを有する。
説明向けに図示したコンポーネントは、命令フェッチユニット７２、命令キャッシュメモリ７４、命令デコード／発行回路７６、複数の算術論理演算ユニット（ＡＬＵ）７８、レジスタ８０、コンパレータ回路１０２、および比較フラグ１０４を含む。
図５のこれらのコンポーネントの構成は、単なる一例の構成にすぎない。
図示した構成は、２つのＡＬＵ７８を有するが、本発明の実施の形態は、３つ以上のＡＬＵを有するマイクロプロセッサにおいても実施することができる。
【００２５】
命令キャッシュ７４は、高い頻度で実行される命令を記憶する。
同様に、データキャッシュ（図示せず）も、命令を実行するために高い頻度でアクセスされるデータを記憶することができる。
いくつかの実施の形態では、これらの命令キャッシュおよびデータキャッシュを１つのメモリに結合することができる。
また、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ディスクドライブ、および他の形式のマスストレージへの通常のアクセス（図示せず）も行われる。
【００２６】
命令およびメモリのアドレスは、命令フェッチユニット７２の回路によって生成することができる。
例えば、フェッチユニット７２は、命令キャッシュ７４内のアドレスに記憶されている連続した命令を連続的に読み出すために、命令キャッシュ７４内の開始アドレスから後続のアドレスにわたって連続的にインクリメントするプログラムカウンタを含むように構成することができる。
命令デコード／発行回路７６は、キャッシュ７４から命令を受け取り、それらの命令をデコードし、かつ／または、ＡＬＵ７８に発行して実行させる。
例えば、２つの個別の命令をデコードして、２つのＡＬＵ７８Ａおよび７８Ｂにそれぞれ１つずつ発行し、特定のサイクルで実行させることができる。
これらのＡＬＵ７８は、マイクロプロセッサの特定のレジスタ８０に実行結果を出力するように構成することができる。
さらに、ＡＬＵ７８の出力は、コンパレータ回路１０２に接続されるように構成される。
コンパレータ回路１０２は、その複数の入力を比較して、それらの入力が同じであるのか、それとも異なるのかに応じた値を出力する。
例えば、コンパレータ回路１０２は、その入力が同じである場合にはデジタル値「１」を出力することができ、その入力が異なる場合にはデジタル値「０」を出力することができる（「１」と「０」は逆であってもよい）。
この命令実行用のオペランドを供給する回路など、他の回路は図示していない。
【００２７】
本発明の一実施の形態によれば、図５の回路を利用して、２つのＡＬＵ７８Ａおよび７８Ｂが１つの命令のみを実行する必要がある場合に与えられる機会、例えばサイクルを活用することができる。
その状況では、コンパイラは、この機会を特定し（６２）、その命令を重複して実行するように双方のＡＬＵ７８にスケジューリングする（６４）ことができる。
【００２８】
コンパイルされたプログラムの実行中、複数のＡＬＵ７８の実行結果は、ハードウェアコンパレータ１０２によって自動的に比較され（６７）、比較フラグ１０４は、コンパレータ１０２の出力に応じて、自動的にセットまたはリセットされる（６８）。
しかしながら、比較フラグ１０４のチェックおよび比較フラグ１０４に従った動作（６９）は、冗長なオペレーションが複数のＡＬＵ７８上で実行された後にのみ行われる。
【００２９】
図６は、本発明の一実施の形態における複数のＦＰＵ出力に接続されたコンパレータ回路を有するマイクロプロセッサの選択されたコンポーネントを示すブロック図である。
もちろん、実際のマイクロプロセッサは、図示しないいくつかの他のコンポーネントを有する。
説明向けに図示したコンポーネントは、命令フェッチユニット７２、命令キャッシュメモリ７４、命令デコード／発行回路７６、複数の浮動小数点演算ユニット（ＦＰＵ）９２、浮動小数点レジスタファイル９４、コンパレータ回路１１２、および比較フラグ１１４を含む。
図６のこれらのコンポーネントの構成は、単なる一例の構成にすぎない。
図示した構成は、２つのＦＰＵ９２を有するが、本発明の実施の形態は、３つ以上のＦＰＵを有するマイクロプロセッサにおいても実施することができる。
【００３０】
フェッチユニット７２、命令キャッシュ７４、およびデコード／発行ユニット７６は、図５について上述したものと同じまたは類似した機能を有する。
この例では、命令デコード／発行回路７６は、キャッシュ７４から浮動小数点型命令を受け取り、それらの命令をデコードし、かつ／または、ＦＰＵ９２に発行して実行させる。
例えば、２つの個別の浮動小数点命令をデコードして、２つのＦＰＵ９２Ａおよび９２Ｂにそれぞれ１つずつ発行し、特定のサイクルで実行させることができる。
これらのＦＰＵ９２は、マイクロプロセッサの特定の浮動小数点レジスタ９４に実行結果を出力するように構成することができる。
この浮動小数点オペレーション実行用のオペランドを供給する回路など、他の回路は図示していない。
【００３１】
本発明の一実施の形態によれば、図６の回路を利用して、２つのＦＰＵ９２Ａおよび９２Ｂが１つの命令のみを実行する必要がある場合に与えられる機会、例えばサイクルを活用することができる。
その状況では、コンパイラは、この機会を特定し（６２）、その命令を重複して実行するように双方のＦＰＵ９２Ａおよび９２Ｂにスケジューリングする（６４）ことができる。
【００３２】
コンパイルされたプログラムの実行中、複数のＦＰＵ９２の実行結果は、ハードウェアコンパレータ１０２によって自動的に比較され（６７）、比較フラグ１０４は、コンパレータ１０２の出力に応じて、自動的にセットまたはリセットされる（６８）。
しかしながら、比較フラグ１０４のチェックおよび比較フラグ１０４に従った動作（６９）は、冗長なオペレーションが複数のＦＰＵ９２上で実行された後にのみ行われる。
【００３３】
図５および図６は、複数のＡＬＵおよびＦＰＵを有するマイクロプロセッサ回路を説明しているが、本発明の実施の形態は、他の種類の機能ユニットも同様に利用することができる。
これらの機能ユニットも、アイドルなサイクルを好機をねらって利用し、障害チェックを実行するように、コンパイラによってスケジューリングできる資源を備えることができる。
さらに、これらの同じ種類の複数の機能ユニットは、必ずしも、全く同一に構成される必要はないが、それぞれ、上述した障害チェック目的で少なくとも１つの同じ命令を実行できるように構成されるべきである。
【００３４】
さらに、上記例は、同じ種類の２つの機能ユニットを有する構成を説明しているが、本発明の他の実施の形態は、対象となるマイクロプロセッサが同じ種類の３つまたは４つ以上の機能ユニットを有するものを利用することもできる。
上記例では、同じ種類の２つの機能ユニットのみが存在し、したがって、それら２つの機能ユニットの出力を比較するのに、コンパレータが１つだけ必要とされる。
任意の所与の機能ユニットを３つ以上有するＣＰＵの場合、チップ上のエリアの可用性と、障害チェック用に冗長トランザクションをスケジューリングするコンパイラにとって望ましい柔軟性とに応じて、コンパレータの個数は増加する。
ローエンドになると、機能ユニットの各対に１つのコンパレータが設けられることがある。
他方では、同じ機能ユニットの考えられるすべての対をコンパレータに接続することができる。
例えば、３つのＦＰＵ（ＦＰ＿Ａ、ＦＰ＿Ｂ、およびＦＰ＿Ｃ）を有する場合、ローエンド構成は、比較（ＦＰ＿Ａ，ＦＰ＿Ｂ）および比較（ＦＰ＿Ａ，ＦＰ＿Ｃ）を行う２つのコンパレータを含み、ハイエンド構成は、比較（ＦＰ＿Ｂ，ＦＰ＿Ｃ）を加えた３つのコンパレータを含むことになる。
別の例として、４つのＦＰＵ（ＦＰ＿Ａ、ＦＰ＿Ｂ、ＦＰ＿Ｃ、およびＦＰ＿Ｄ）を有する場合、ローエンド構成は、比較（ＦＰ＿Ａ，ＦＰ＿Ｂ）および比較（ＦＰ＿Ｃ，ＦＰ＿Ｄ）の２つのコンパレータを含み、ハイエンド構成は、比較（ＦＰ＿Ａ，ＦＰ＿Ｃ）、（ＦＰ＿Ａ，ＦＰ＿Ｄ）、（ＦＰ＿Ｂ，ＦＰ＿Ｃ）、および（ＦＰ＿Ｂ，ＦＰ＿Ｄ）を加えた６つの比較を含むことになる。
【００３５】
実行ユニットは、経時的に「故障しやすくなる」傾向を有するので、本発明の一実施の形態は、潜在的なＣＰＵの欠陥が、事前に予測可能になる傾向を有するという事実を利用する。
ａ）アイドルなまたはｎｏ−ｏｐのサイクルが知的なコンパイラスケジューリングを通じて利用され、それによって、機能試験が行われること、および
ｂ）ハードウェアコンパレータ回路がなければ、個別の比較オペレーションをスケジューリングして実行する必要があるが、ハードウェアコンパレータ回路によってこの必要がなくなることから、出願人は、本発明によって、ＣＰＵのフォールトトレランスレベルが、性能にほとんど影響を与えることなく達成されると考える。
【００３６】
本発明の一実施の形態は、余分な外部ハードウェア回路を必要とせずに、ＣＰＵのフォールトトレランスレベルを達成する。
その代わり、フォールトトレランスは、コンパイラにソフトウェアの変更を加え、ＣＰＵ内部に最小の更なる回路を加えることによって提供される。
【００３７】
本発明の一実施の形態による障害チェックを提供するコンパイラは、特定のＣＰＵアーキテクチャに限定されるものではない。
任意のＣＰＵアーキテクチャが、本発明の一実施の形態に従ってスケジューリング可能な同じ種類の複数の機能ユニットを有する場合に、更なる回路を加え、そのＣＰＵアーキテクチャのコンパイラを変更することができる。
【００３８】
本発明の一実施の形態は、フォールトトレラント機能をよりローエンドなシステムで利用可能にする。
従来、このようなローエンドなシステムでは、それらのシステムのコストセンシティブな性質のため、このようなフォールトトレラント機能を利用可能にできないことがあった。
【００３９】
上記説明では、本発明の実施の形態の十分な理解を提供するために、いくつかの具体的な細部を与えている。
しかしながら、本発明の例示の実施の形態の上記説明は、網羅することを目的とするものでもなく、また、本発明を、開示した正確な形に限定することを目的とするものでもない。
具体的な細部の１つまたは複数のものがなくても本発明を実践でき、または、他の方法、コンポーネントなどで本発明を実践できることが、当業者には理解されよう。
本発明の態様を分かりにくくことを回避するために、それ以外の例では、既知の構造またはオペレーションを図示していないし、詳細に説明していない。
本発明の具体的な実施の形態および例は、本明細書では例示の目的で説明されており、さまざまな等価な変更が、本発明の範囲内で可能であることが、当業者に理解されよう。
【００４０】
上記詳細な説明に鑑みると、これらの変更を本発明に行うことができる。
特許請求項に使用される用語は、明細書および特許請求項に開示した具体的な実施の形態に本発明を限定するように解釈されるべきではない。
その代わりに、本発明の範囲は、特許請求項によって画定されるべきものであり、特許請求項は、特許請求項の解釈の確立した原則に従って解釈されるべきである。
【図面の簡単な説明】
【００４１】
【図１】説明を具体化できるＣＰＵおよび従来のメモリを含んだコンピュータの一部を示す図である。
【図２】図１の例示のコンピュータシステムのソフトウェアエレメントの例を示す図である。
【図３ａ】一例におけるコンパイラのコンポーネントを示すブロック図である。
【図３ｂ】一例におけるコードジェネレータのコンポーネントを示すブロック図である。
【図４ａ】本発明の一実施の形態によるコンパイラによる命令のスケジューリングに関係したステップを示すフローチャートである。
【図４ｂ】図４ｂは、本発明の一実施の形態による、コンパイルされたプログラムの実行中のステップを示すフローチャートである。
【図５】本発明の一実施の形態における複数の算術論理演算ユニット出力に接続されたコンパレータ回路を有するマイクロプロセッサの選択されたコンポーネントを示すブロック図である。
【図６】本発明の一実施の形態における複数の浮動小数点演算ユニット出力に接続されたコンパレータ回路を有するマイクロプロセッサの選択されたコンポーネントを示すブロック図である。
【符号の説明】
【００４２】
４・・・メモリ、
２６・・・アプリケーション、
３４・・・コンパイラおよびランタイムライブラリ、
３２・・・オペレーティングシステム、
３８・・・パーサ、
４０・・・中間表現ビルダ、
４２・・・コードジェネレータ、
４４・・・トランスレータ、
４６・・・オプティマイザ、
４８・・・レジスタアロケータ、
５０・・・ループ展開器、
５２・・・スケジューラ、
５４・・・アセンブリジェネレータ、
７２・・・命令フェッチユニット、
７４・・・命令キャッシュメモリ、
７６・・・命令デコード／発行、
８０・・・レジスタ、
１０２・・・比較器、
１０４・・・フラグ、
７２・・・命令フェッチユニット、
７４・・・命令キャッシュメモリ、
７６・・・命令デコード／発行、
９４・・・浮動小数点レジスタファイル、
１１２・・・比較器、
１１４・・・フラグ、
【図１】
2005085276.tif 000003
【図２】
2005085276.tif 000004
【図３ａ】
2005085276.tif 000005
【図３ｂ】
2005085276.tif 000006
【図４ａ】
2005085276.tif 000007
【図４ｂ】
2005085276.tif 000008
【図５】
2005085276.tif 000009
【図６】
2005085276.tif 000010