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