(57)【要約】【課題】  本発明は、ＣＰＵのディジタル演算処理に対して耐障害性を提供することを目的とする。【解決手段】  同じタイプの複数の実行ユニットを有するターゲットマイクロプロセッサ上で実行すべきプログラムをコンパイルする方法に関する。この方法は、実行ユニットの中からテストする実行ユニットを選択するステップと、プログラムコードおよび診断コードの並列実行をスケジューリングするステップとを含む。上記診断コードは、選択された実行ユニットで実行されるようにスケジューリングされ、上記プログラムコードは、同じタイプの残りの実行ユニットで実行されるようにスケジューリングされる。【選択図】図７
2005122736.tif 000002
【特許請求の範囲】
【請求項１】
対象となるマイクロプロセッサにおいて実行されるプログラムをコンパイルする方法であって、前記マイクロプロセッサは、複数の同種の実行ユニットを有し、
検査するために１つの実行ユニットを選択し、
選択された実行ユニットにおける診断コードの実行をスケジューリングし、
同種の残りの実行ユニットにおけるプログラムコードの実行をスケジューリングする
ことを含む方法。
【請求項２】
検査のための実行ユニットの前記選択は、
複数の前記実行ユニットそれぞれを検査することを保証するアルゴリズムを利用する
請求項１に記載の方法。
【請求項３】
実行ユニットそれぞれを検査することを保証する前記アルゴリズムは、ラウンドロビンタイプのアルゴリズムを有する
請求項２に記載の方法。
【請求項４】
実行ユニットの検査のスケジューリングに積極性レベルを設定すること
をさらに含む
請求項１に記載の方法。
【請求項５】
前記積極性レベルに依存するアルゴリズムを適用して、利用可能な全ての実行ユニットがプログラムコードを実行するようにスケジューリングすべき時と、プログラムコードおよび診断コードを並行して実行するようにスケジューリングすべき時とを決定すること
をさらに含む
請求項４に記載の方法。
【請求項６】
最も低い前記積極性レベルは、前記検査の停止を含む
請求項５に記載の方法。
【請求項７】
複数の前記実行ユニットは、算術論理演算ユニットを含む
請求項１に記載の方法。
【請求項８】
複数の前記実行ユニットは、浮動小数点演算ユニットを含む
請求項１に記載の方法。
【請求項９】
複数の前記実行ユニットは、少なくとも、前記マイクロプロセッサ集積回路上に集積される４つの同種の実行ユニットを含む
請求項１に記載の方法。
【請求項１０】
スケジューリングされた前記診断コードは、既定の演算結果を有する演算処理を実行させるテストパターンに基づいて、診断処理を実施させる
請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的にはコンピュータシステムに関する。より詳細には、本発明はマイクロプロセッサおよびコンパイラに関する。
【背景技術】
【０００２】
中央演算装置（ＣＰＵ）によるデジタル演算処理において、耐障害性を提供する手段としては、複数のＣＰＵを多重化したコンピュータシステムがある。例えば、多重化されたＣＰＵは、常にロックステップ処理を行うことにより、演算処理において一定レベルの耐障害性を実現する。このようなロックステップ処理は、非常に複雑な多数決判定処理を用いて実現される。
実質的には、余分なシステムハードウェアが必要となる（例えば、通常、冗長性のないシステムの三倍程度必要とされる）。このように、ロックステップ処理による解決手段は、不都合なことに、付加的なシステムハードウェアと、これをサポートする設備とを要する。
【０００３】
中央演算装置（ＣＰＵ）によるデジタル演算処理において耐障害性を提供する他の手段としては、ソフトウェアによる検査を用いるものがある。このソフトウェア検査は、同一のコンピュータ上、または、異なるコンピュータ上で、何度も検査用プログラムを実行することにより実現される。
この検査用プログラムは、通常、少なくとも３回繰り返し実行され、ソフトウェア検査を行わない場合の３倍以上の実効演算時間を要する結果となる。このように、ソフトウェア検査による解決手段は、長い実行時間を要する点、または、複数のコンピュータを要する点で、不都合である。
【０００４】
他の手段としては、システムの自己検査またはオフライン診断がある。このような検査は、ＣＰＵの実行ユニットに対する品質検査を実現する。しかしながら、このような検査を行うプログラムを実行するために、コンピュータシステムは、シャットダウンを行う必要がある。すなわち、望ましくないシステムダウンタイムが必要となる。
【特許文献１】米国特許第５２０２９７５号
【特許文献２】米国特許第５４１２６７１号
【特許文献３】米国特許第５８１９０８８号
【特許文献４】米国特許第５８３５７７６号
【特許文献５】米国特許第６４０８３７７号
【特許文献６】米国特許第６４３４７１２号
【特許文献７】米国特許第６５５３５３０号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記のような従来の手段は、費用またはシステムパフォーマンスの点で代償が大きい。したがって、ＣＰＵのディジタル演算処理に対して耐障害性を提供するシステムまたは方法の改善が、強く要望されている。
【課題を解決するための手段】
【０００６】
本発明の一実施形態は、同じタイプの複数の実行ユニットを有するターゲットマイクロプロセッサ上で実行すべきプログラムをコンパイルする方法に関する。この方法は、実行ユニットの中からテストする実行ユニットを選択すること、およびプログラムコードおよび診断コードの並列実行をスケジューリングすることを含む。上記診断コードは、選択された実行ユニットで実行されるようにスケジューリングされる。そして、上記プログラムコードは、同じタイプの残りの実行ユニットで実行されるようにスケジューリングされる。
【０００７】
本発明の別の実施形態は、同じタイプの複数の実行ユニットが集積されたターゲットマイクロプロセッサ上で実行されるコンピュータ可読プログラム製品に関する。このプログラム製品は診断コードおよびプログラムコードを含む。上記診断コードは、複数の実行ユニットの中の選択された実行ユニットで実行されるように構成され、上記プログラムコードは、同じタイプの残りの実行ユニットで実行されるように構成される。
【０００８】
本発明の別の実施形態は、診断コードを含むコンピュータ可読プログラム製品に関する。この診断コードは、複数の実行ユニットの中の選択された実行ユニットで実行されるように構成され、複数のマルチスレッドオペレーティングシステムでバックグラウンドタイプのプロセスで実行されるようにさらに構成される。この選択される実行ユニットは、各実行ユニットがテストされるように複数の実行ユニットの間でローテーションする。
【発明を実施するための最良の形態】
【０００９】
上に述べたように、ＣＰＵによるデジタル処理に耐故障性を提供する従来技術によるシステムおよび方法は様々な欠点を有する。本発明は、ＣＰＵにより実行される計算の信頼性を向上させるシステムおよび方法に関する。
【００１０】
ますます多くのトランジスタが、ますます小さな機構サイズおよび低い電圧レベルを有する集積回路に実装されるにつれ、オンチップ耐故障性機能に対する必要性が増してきている。通常、エラー訂正符号化を使用してエラーを検出し訂正することができる。不都合なことに、演算論理ユニット（ＡＬＵ）および浮動小数点ユニット（ＦＰＵ）等、ＣＰＵ実行ユニットにエラー訂正符号化を完全に適用することは困難である。この問題に対して業界で利用可能な方策は、ロックステップＣＰＵを提供することである。不都合なことに、これはコストおよびシステムインフラストラクチャの観点から非常に高価である。したがって、こういったユニットに耐故障性を提供する別の方策が必要である。
【００１１】
本発明が用いられる環境は、サーバ、ワークステーション、または他のコンピューティングシステム等、汎用コンピュータシステムを包含する。汎用コンピュータの要素のいくつかを図１に示す。図１には、入力／出力（「Ｉ／Ｏ」）セクション２、マイクロプロセッサまたは中央演算処理装置（「ＣＰＵ」）３、およびメモリセクション４を備えたコンピューティングシステム１が示される。Ｉ／Ｏセクション２は、キーボードおよび／または他の入力装置５、表示ユニットおよび／または他の出力装置６、１つまたは複数の固定記憶ユニット９、および／または取り外し可能記憶ユニット７に接続される。取り外し可能記憶ユニット７は、プログラム１０および他のデータを通常含むデータ記憶媒体８を読み取ることができる。
【００１２】
図２は、図１に例示されたコンピュータシステムのソフトウェア要素の例を示す。アプリケーションプログラム２６が示される。このようなアプリケーション２６は、本発明の教示に組み込まれるコンパイラ３４を使用してコンパイルすることができる。コンパイルされたアプリケーションプログラム２６は、実行中のサービスのために実行時ライブラリ３４にアクセスし、そして実行時ライブラリ３４はシステムサービスのためにオペレーティングシステム３２にアクセスする。コンパイラ３４は、アプリケーションプログラム２６のコンパイル中、システムサービスのためにオペレーティングシステム３２にもアクセスする。
【００１３】
本発明の教示を組み込むコンパイラ３４は、ターゲットマイクロプロセッサシステム上で実行されるネイティブコンパイラ、または別のマイクロプロセッサシステム上で実行されるクロスコンパイラを構成することができる。本発明の一実施形態によれば、コンパイラのターゲットマイクロプロセッサは、同じタイプの複数の機能ユニットを有する。たとえば、マイクロプロセッサは、スーパースカラアーキテクチャを有する機能ユニットを含む場合がある。
【００１４】
次に図３ａおよび図３ｂを参照すると、これらブロック図はコンパイラの一実施形態を示す。図３ａに示すように、本実施形態では、コンパイラ３４は、本発明の教示に組み込まれる、パーサ３８、中間表現ビルダ４０、およびコードジェネレータ４２を備える。パーサ３８は、コンパイルすべきプログラムのソースコードを入力として受け取る。これに応答して、パーサ３８はソース言語ステートメントをオペランド解析し、トークン分割されたステートメントを出力する。中間表現ビルダ４０は、トークン分割されたステートメントを入力として受け取る。これに応答して、中間表現ビルダ４０は、トークン分割されたステートメントの中間表現を構築する。コードジェネレータ４２は、中間表現を入力として受け取る。これに応答して、コードジェネレータ４２は、プログラムのオブジェクトコードを生成する。コンパイラ３４は、他の実施形態により別様に構成されることができる。
【００１５】
図３ｂに示すように、本実施形態では、コードジェネレータ４２は、トランスレータ４４、オプティマイザ４６、レジスタアロケータ４８、ループアンローラ５０、スケジューラ５２、およびアセンブリコードジェネレータ５４を備えるように構成される。トランスレータ４４は、中間表現を入力として受け取る。これに応答して、トランスレータ４４はループテーブルの構築、命令ブロックの順序付け、およびデータフローグラフの構築等を行う。オプティマイザ４６は、中間表現、およびループテーブルおよびデータフローグラフを含む関連情報を入力として受け取る。これに応答して、オプティマイザ４６は様々な最適化を実行する。レジスタアロケータ４８は、最適化された中間表現および関連情報を入力として受け取る。これに応答して、レジスタアロケータ４８は、ターゲットマイクロプロセッサのレジスタを生成中の命令に割り当てる。ループアンローラ５０は、レジスタが割り当てられた、最適化された中間表現および関連情報を入力として受け取る。これに応答して、ループアンローラ５０は、生成中の命令を再構成し、ターゲットマイクロプロセッサにおいて利用可能な資源に応じた最適な時間量を目標に、生成中の命令の中のループをアンロールする。スケジューラ５２は、再構成された中間表現および関連情報を入力として受け取る。これに応答して、スケジューラ５２は、生成すべき命令を並列処理に向けてさらに再構成する。最後に、アセンブリコードジェネレータ５４は、最適化され、レジスタが割り当てられ、かつ再構成された中間表現および関連情報を入力として受け取る。これに応答して、アセンブリコードジェネレータ５４は、コンパイル中のプログラムのオブジェクトコードを生成する。コードジェネレータ４２は、他の実施形態により別様に構成されることができる。
【００１６】
上記実施形態では、理解を容易にするために、コードジェネレータ４２は、生成中の命令の中のループをアンロールし、並列化用に命令をスケジューリングする前にレジスタを割り当てることが説明されているが、これに限定されるものではなく、上記とは異なる順序（レジスタ割り当て、ループアンロール、およびスケジューリングの順序）で、レジスタ割り当て、ループアンロールおよびスケジューリング手法を行い、本発明を実現できることができることが上記説明に基づいて理解されよう。
【００１７】
図４は、一例における複数の演算論理ユニットを有するＣＰＵの選択された構成要素を示す概略図である。もちろん、実際のＣＰＵは図示していない他の多くの構成要素を有する。
【００１８】
説明を目的として示される構成要素は、命令フェッチユニット７２、命令キャッシュメモリ７４、命令復号／発行回路７６、複数の論理演算ユニット（ＡＬＵ）７８、およびレジスタ８０を含む。図４におけるこれら構成要素の構成は、単に構成の一例にすぎない。図示された構成は、４つのＡＬＵ７８を示すが、本発明の実施形態は、２以上の任意の数のＡＬＵを有するマイクロプロセッサにおいて実施することが可能である。
【００１９】
命令キャッシュ７４は、頻繁に実行される命令を記憶する。同様にデータキャッシュ（図示せず）も、命令を実行するために頻繁にアクセスされるデータを記憶することができる。実施例によっては、命令キャッシュおよびデータキャッシュが１つのメモリに組み合わせられてもよい。また通常、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ディスクドライブ、および他の形の大容量記憶装置へのアクセス（図示せず）もある。
【００２０】
命令およびメモリのアドレスは、命令フェッチユニット７２内の回路により生成される。たとえば、フェッチユニット７２は、連続したアドレスに記憶されている連続した命令を順次読み出すために、命令キャッシュ７４内の開始アドレスから連続したアドレスを順次増分するプログラムカウンタを包含するように構成されることができる。命令復号／発行回路７６は、キャッシュ７４から命令を受け取り、受け取った命令を復号化し、かつ／または実行のためにＡＬＵ７８に発行する。たとえば、命令復号／発行回路７６は、４つの別個の命令を復号化し、特定のサイクルで実行するために４つのＡＬＵ７８Ａ〜７８Ｄそれぞれに１つずつ発行することができる。ＡＬＵ７８は、マイクロプロセッサにおける特定のレジスタ８０に対する実行結果を出力するように構成することができる。命令の実行にオペランドを供給する回路等、他の回路は図示されていない。
【００２１】
図５は、一例における複数の浮動小数点ユニットを有するＣＰＵの選択された構成要素を示すブロック図である。もちろん、実際のＣＰＵは図示されていない他の多くの構成要素を有する。
【００２２】
説明を目的として示される構成要素は、命令フェッチユニット７２、命令キャッシュメモリ７４、命令復号／発行回路７６、複数の浮動小数点ユニット（ＦＰＵ）９２、および浮動小数点レジスタファイル９４を含む。図５におけるこれら構成要素の構成は、単に構成の一例にすぎない。図示の構成は４つのＦＰＵ９２を有するが、本発明の実施形態は、２つ以上の任意の数のＦＰＵを有するマイクロプロセッサにおいて実施することが可能である。
【００２３】
フェッチユニット７２、命令キャッシュ７４、および復号／発行ユニット７６は、図４に関連して上に述べたものと同じまたは同様の機能を有する。この場合、命令復号／発行回路７６は、キャッシュ７４から浮動小数点型の命令を受け取り、受け取った命令を復号化し、かつ／または実行のためにＦＰＵ９２に発行する。たとえば、４つの別個の浮動小数点命令を復号化し、特定のサイクルで実行するために４つのＦＰＵ９２Ａ〜９２Ｄそれぞれに１つずつ発行することができる。ＦＰＵ９２は、マイクロプロセッサにおける特定の浮動小数点レジスタ９４に対する実行結果を出力するように構成することができる。浮動小数点演算の実行にオペランドを供給する回路等、他の回路は図示されていない。
【００２４】
図４および図５は複数のＡＬＵおよびＦＰＵを示しているが、本発明の実施形態は、他のタイプの機能ユニットまたは実行ユニットも同様に利用することが可能である。こういった機能ユニットまたは実行ユニットとしては、コンパイラによりスケジューリングすることができる資源（リソース）が含まれる。
【００２５】
図６は、本発明の一実施形態による実行ユニットの実行時品質検証をスケジューリングする方法（１００）を示すフローチャートである。図６の方法（１００）は、同じタイプの複数の実行ユニットを有するターゲットマイクロプロセッサに利用することができる。たとえば、ターゲットマイクロプロセッサは複数のＡＬＵおよび／または複数のＦＰＵを有してもよい。
【００２６】
図６の方法（１００）によれば、事前ステップは、実行ユニットテストの可変積極性レベル（スケジュール優先度）を設定すること（１０１）を含むことができる。一実施形態では、可変積極性レベルは、１つまたは複数の可変コンパイラフラグを使用して実施することができる。たとえば、可変フラグによりテストの頻度を指定することができる。別の例としては、可変フラグにより、このようなテストが占めるべき最大パフォーマンスオーバヘッド量を指定することができる。積極性レベルを設定することにより、ユーザはパフォーマンスと耐故障性の間で意識的にトレードオフを行うことができる。選択された積極性レベルは、たとえば、コンパイル中のアプリケーションおよびそのアプリケーションに意図される特定の用途に依存することができる。高いパフォーマンスを必要とするアプリケーションの場合、低いレベルのテストを指定することができる。ダウンタイムに対してより高い耐故障性および保護を必要とするアプリケーションの場合、より高いレベルのテストをスケジューリングすることができる（いくらかのパフォーマンスの低下を犠牲にして）。一実施形態では、各タイプの複数の機能ユニットに別個の積極性レベルを設定してもよい。
【００２７】
一実施形態では、コンパイラがアルゴリズムを使用して、積極性レベルを適用する（１０２）。アルゴリズムは、ユーザコードの実行と並列して実行ユニットのテストをスケジューリングするに適したときを判断する（１０４）。積極性レベルが高いほど、テストが含まれる頻度は高くなる。積極性レベルが低いほど、テスト（検査）が含まれる頻度は低くなる。最低レベルでは、テストを「停止」させることができる。
【００２８】
アルゴリズムが、テストを含めるときではないと判断する場合、コンパイラは、関係するタイプの利用可能なすべての実行ユニットをユーザコードの実行に使用すべきであるとスケジューリングする（１０６）。アルゴリズムが、テストを含めるときであると判断する場合、コンパイラは、ユーザコードおよび診断テストの並列実行をスケジューリングする（１０８）。このような並列実行についてはさらに以下で述べる。本発明の一実施形態によれば、アルゴリズムは、受けるパフォーマンスオーバーヘッドの量を低減するように、ユーザ（またはカーネル）コードの中に、状況に応じて適切に診断ルーチンをスケジューリングするように構成される。
【００２９】
図７は、本発明の一実施形態によるユーザコードおよび機能ユニット診断の並列実行をスケジューリングするプロセス（１１０）を示すフローチャートである。図７のプロセス（１１０）は、同じタイプのＮ個の実行ユニットを有するターゲットマイクロプロセッサに利用することができる。ここで、Ｎは２以上である。たとえば、コンパイラがこのプロセス（１１０）を適用して、図６の並列スケジューリングステップ（１０８）を実施することができる。
【００３０】
図７に示す実施形態によれば、同じタイプのＮ個の実行ユニットの１つが選択（１１２）され、テスト目的のために「オフライン」になる。言い換えれば、選択された実行ユニットは、ユーザコード実行のスケジューリングに利用不可にされ、診断演算のスケジューリングに確保される。一実施形態によれば、選択（１１２）は、Ｎ個の実行ユニットをすべて確実にカバーするアルゴリズムによって実行することができる。たとえば、アルゴリズムはラウンドロビン型の方法を使用してテスト（検査）すべきユニットを選択（１１２）することができる。
【００３１】
その後、コンパイラは、ユーザコードを残りの（Ｎ−１）個の実行ユニットで実行するようにスケジューリングし（１１４）、それと並列して、選択された実行ユニットでの診断をスケジューリングする（１１６）。好ましい実施形態では、同じタイプの複数の実行ユニットの中の１つのみが、任意特定のサイクルで診断にスケジューリングされるが、代替の実施形態は、一度に２つ以上のユニットを診断にスケジューリングすることができる。しかし、この代替の実施形態は通常、より高いパフォーマンスオーバーヘッドを有する。
【００３２】
スケジューリングされた各診断演算は、所定のテストパターンから選択することができる。このようなテストパターンは、診断演算、および、これに対応する既知の結果を含むことが好ましい。より好ましくは、テストパターンは、テスト（検査）される機能ユニットの様々な構成要素の固有の機能について有効な試行を提供することとなるように選択される。有効なテストパターンの詳細は、テストされる実行ユニットの詳細に依存する。本発明の一実施形態によれば、テストの範囲は設定可能である。たとえば、テストの数、パターンタイプは、コンパイラフラグを使用して設定することができる。
【００３３】
図８は、本発明の一実施形態による実行ユニットの適宜演算を検証するようにスケジューリングする（１１６）ことができる診断プロセス（１２０）を示すフローチャートである。図８に示すプロセス（１２０）は説明を目的としたプロセスの一例であることに留意する。
【００３４】
スケジューリングされた診断演算が実行ユニット上で実行される（１２２）。これは、期待される演算結果に関する既定の情報を用いて実行される。次に、実際の結果と期待される結果が比較され（１２４）、比較された結果が同じであるか否かについて判断が行われる（１２６）。結果が同じ場合、エラーは示されず、命令の実行は続行される（１２８）。結果が同じではない場合、実行ユニットにおける故障が示され、故障ハンドラへのジャンプ（１３０）を行うことができる。故障ハンドラはしかるべき処置をとるように構成することができる。
【００３５】
一実施形態によれば、診断テストに失敗した機能ユニットを「ブラックリスト」に入れ、コード実行における使用から除外することができる。言い換えれば、実行ユニットを役に立たないもの（使用すべきではない）とマークすることができる。このような役立たずの機能は、特定のハードウェア回路により実施することができる。１つのユニットを役に立たないとマークすると、使用可能なユニットの数は１だけ少なくなり、Ｎ−１になる。その後、診断を実行ユニットに対して引き続き実行することができる。その場合、１つのユニットが診断テストに確保されている以上、オンラインのユニットはＮ−２個のみである。以下同様。
【００３６】
別の実施形態によれば、機能ユニットの１つが故障している場合、システムを停止させることができる。このようなシステムの停止は、ユーザデータが影響を受け得る前に利用して、考えられるデータ不良を回避することができる。
【００３７】
本発明の特定の一実施形態は、マルチスレッドオペレーティングシステムにおいてバックグラウンドで実行されるプログラムの作成を含む。プログラムは、たとえば、診断以外は「何もしなく」てもよく、コンパイラフラグが「オン」になっている場合に、最大積極性レベルを上限としてコンパイルされ得る。このようなプログラムは、限られたシステムオーバヘッドで良好なレベルの故障チェックを提供することができる。
【００３８】
あらゆるＣＰＵチップに完全にバーンインする（既知の「バスタブ曲線」の左側を越えて）ことは普通、コストが高すぎるため、ＣＰＵチップに特定の潜在的欠陥率は通常「許容可能」と見なされる。有利なことに、本発明の一実施形態は、実行ユニットの潜伏性欠陥または弱ラッチは、時間の経過に伴って「弱化」する傾向があるという点で事前に予測可能であるということを利用する。本発明の一実施形態によれば、このような欠陥は実行時に、見つけることができる。また、この実施形態によれば、このような欠陥は、データ不良が引き起こされる前に、または、マシンチェックおよびシステム故障が引き起こされる前に見つけることができる。
【００３９】
さらに、本発明の一実施形態は、追加のハードウェア回路をＣＰＵ中に設計する必要なくＣＰＵに対して或るレベルの耐故障性を実現する。追加のハードウェア回路をＣＰＵ中に設計するのではなく、一度に１つの機能ユニットを「借り」て、同じタイプの残りの機能ユニットが引き続きユーザコードを実行している間、借りた機能ユニットの特定の演算処理をテスト（検査）するようにコンパイラをソフトウェア変更することによって耐故障性を提供することができる。さらに、有利なことに、既知のデータパターンを使用することにより、計算された結果がコンパイル時に予め計算し得る既知の結果と比較されるため、パフォーマンスオーバーヘッドを低減することができる。
【００４０】
本発明の一実施形態は、有利なことに、低価格仕様システムに耐故障機能を提供する。従来、このような耐故障機能は、費用重視で設計されるため、このような低価格仕様システムでは利用することができない場合があった。
【００４１】
本発明の一実施形態による故障チェックを提供するコンパイラは、特定のＣＰＵアーキテクチャに限定されない。ＣＰＵが本発明の一実施形態によりスケジューリングし得る同じタイプの複数の機能ユニットを有する場合、任意の適したＣＰＵのコンパイラをそのように変更することが可能である。さらに、上記考察では、本発明についてユーザコードをコンパイルする文脈の中で説明しているが、本発明は、非ユーザコード、たとえばオペレーティングシステムのカーネルコード等のコンパイルにも適用することが可能である。
【図面の簡単な説明】
【００４２】
【図１】図１は、本発明を具現し得る、ＣＰＵおよび従来のメモリを含むコンピュータの一部を示す図である。
【図２】図２は、実例としての図１のコンピュータシステムのソフトウェア要素の一例を示す図である。
【図３Ａ】図３Ａは、一例におけるコンパイラの構成要素を示すブロック図である。
【図３Ｂ】図３Ｂは、一例におけるコードジェネレータの構成要素を示すブロック図である。
【図４】一例における複数の演算論理ユニットを有するＣＰＵの選択された構成要素を示す概略図である。
【図５】一例における複数の浮動小数点ユニットを有するＣＰＵの選択された構成要素を示す概略図である。
【図６】図６は、本発明の一実施形態による実行ユニットの実行時品質検証をスケジューリングする方法を示すフローチャートである。
【図７】図７は、本発明の一実施形態によるユーザコードおよび機能ユニット診断の並列実行をスケジューリングするプロセスを示すフローチャートである。
【図８】図８は、本発明の一実施形態による実行ユニットの適宜演算を検証する診断プロセスを示すフローチャートである。
【符号の説明】
【００４３】
４・・・メモリ
２６・・・アプリケーション
３２・・・オペレーティングシステム
３４・・・コンパイラおよび実行時ライブラリ
３８・・・パーサ
４０・・・中間表現ビルダ
４２・・・コードジェネレータ
４４・・・トランスレータ
４６・・・オプティマイザ
４８・・・レジスタアロケータ
５０・・・ループアンローラ
５２・・・スケジューラ
５４・・・アセンブリジェネレータ
７２・・・命令フェッチユニット
７４・・・命令キャッシュメモリ
７６・・・命令復号／発行
８０・・・レジスタ
９４・・・浮動小数点レジスタファイル
【図１】
2005122736.tif 000003
【図２】
2005122736.tif 000004
【図３Ａ】
2005122736.tif 000005
【図３Ｂ】
2005122736.tif 000006
【図４】
2005122736.tif 000007
【図５】
2005122736.tif 000008
【図６】
2005122736.tif 000009
【図７】
2005122736.tif 000010
【図８】
2005122736.tif 000011