(57)【要約】【課題】フォールトトレラントなデジタル処理を提供するシステムおよび方法を改良する。【解決手段】開示される一実施形態は、複数のＣＰＵコアを備えたターゲットマイクロプロセッサチップでプログラムコードを実行する方法（１００）に関する。テストするためにＣＰＵコアのうちの１つが選択され（１０２）、コア間コンテキストスイッチが行われる（１０４）。選択されたＣＰＵコアでの診断コードの実行と、残りのＣＰＵコアでのプログラムコードの実行とが並列に行われる（１０６及び１０８）。開示される別の実施形態は、マイクロプロセッサチップ上に集積された複数のＣＰＵコア（２０８）を有するマイクロプロセッサ（３）に関する。コア間通信回路（２１４）が、ＣＰＵコアの各々に結合され、ＣＰＵコア間のコンテキストスイッチを行うように構成される。【選択図】図４
2005129053.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコアを備えたターゲットマイクロプロセッサでプログラムコードを実行する方法であって、
テストのために前記ＣＰＵコアのうちの１つを選択すること、
コア間コンテキストスイッチを行うこと、
前記選択されたＣＰＵコアでの診断コードの実行と、残りのＣＰＵコアでの前記プログラムコードの実行とを並列に行うこと
とを備える方法。
【請求項２】
テストのための前記ＣＰＵコアの選択は、前記複数のＣＰＵコアの各々のテストを保証するアルゴリズムを利用する、請求項１に記載の方法。
【請求項３】
前記アルゴリズムは、ラウンドロビンタイプのアルゴリズムで構成される、請求項２に記載の方法。
【請求項４】
実行ユニットのテストをスケジューリングするためのアグレッシブネスレベルを設定すること
をさらに備えた請求項１に記載の方法。
【請求項５】
前記プログラムコードの実行のために利用可能なすべてのコアをスケジューリングすべき時と、前記プログラムコードと前記診断コードとの並列実行をスケジューリングすべき時とを判断するため、アグレッシブネス依存アルゴリズムを適用すること
をさらに含む請求項４に記載の方法。
【請求項６】
前記複数のＣＰＵコアは、前記マイクロプロセッサ集積回路上に集積された少なくとも４つのＣＰＵコアで構成される請求項１に記載の方法。
【請求項７】
前記複数のＣＰＵコアは、前記マイクロプロセッサ集積回路上に集積された少なくとも８つのＣＰＵコアで構成される請求項１に記載の方法。
【請求項８】
前記診断コードは、既知の期待される結果を有する動作で構成されるテストパターンから診断動作を行う、請求項１に記載の方法。
【請求項９】
前記診断コードは、実際の結果を既知の期待される結果と比較する、請求項８に記載の方法。
【請求項１０】
前記診断コードは、前記比較された結果が異なる場合、フォールトハンドラにジャンプする、請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータシステムに関する。より具体的には、本発明は、フォールトトレラント・コンピュータシステムに関する。
【背景技術】
【０００２】
デジタル処理システムにおいてフォールトトレランスを提供する従来のソリューションとしては、ハードウェアベースのソリューション、ソフトウェアベースのソリューション、または、両者の何らかの組合せが挙げられる。
【０００３】
ハードウェア方式は、多くの余分なシステムハードウェアを必要とする。冗長システムハードウェアは、たとえば、ロックステップで、または、複雑な投票方式を利用して動作させることができる。ソフトウェア方式は、プログラムを、同じコンピュータで複数回実行するか、あるいは、複数のコンピュータシステムで並列に実行するかによって実現することができる。
【０００４】
通常、プログラムは少なくとも３回再実行され、その結果、実際の実行時間はソフトウェア検証のない場合より３倍長くなる。したがって、不都合なことに、ソフトウェア・フォールトトレラント・ソリューションには、より長い実行時間が必要となるか、または複数のコンピュータシステムが必要となる。
【０００５】
組合せ方式は、少なくとも２倍の余分のハードウェアを必要とし、通常、ソフトウェア・チェックポインティングを利用する。ソフトウェア・チェックポインティングは、エラー時に特定の命令シーケンスを再実行する機能を含む。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述したソリューションはすべて、コストやシステム性能の点で高価である。したがって、フォールトトレラントなデジタル処理を提供するシステムおよび方法を改良することは大変望ましい。
【課題を解決するための手段】
【０００７】
本発明の一実施形態は、複数のＣＰＵコアを備えたターゲットマイクロプロセッサチップでプログラムコードを実行する方法に関する。テストするためにＣＰＵコアのうちの１つが選択され、コア間コンテキストスイッチが行われる。選択されたＣＰＵコアでの診断コードの実行と、残りのＣＰＵコアでのプログラムコードの実行とが並列に行われる。
【０００８】
本発明の別の実施形態は、マイクロプロセッサチップ上に集積された複数のＣＰＵコアを有するマイクロプロセッサに関する。コア間通信回路がＣＰＵコアの各々に結合され、ＣＰＵコア間のコンテキストスイッチを行うように構成される。
【発明を実施するための最良の形態】
【０００９】
上述したように、従来のフォールトトレラント・デジタル処理システムおよび方法は、さまざまな不都合を有する。本発明は、デジタル処理の信頼性を向上させるシステムおよび方法に関する。
【００１０】
本発明が使用される環境には、汎用コンピュータシステムが含まれる。典型的な汎用コンピュータシステムの要素のいくつかを図１に示す。同図には、入出力（「Ｉ／Ｏ」）部２と、マイクロプロセッサ３と、メモリ部４とを有するコンピューティングシステム１が示されている。Ｉ／Ｏ部２は、キーボードその他の入力装置５と、表示ユニットその他の出力装置６と、１つまたは複数の固定記憶ユニット９と、リムーバブル記憶ユニット７とに接続される。リムーバブル記憶ユニット７は、通常、プログラム１０および他のデータを収容するデータ記憶媒体８の読み取りができる。本発明の実施形態によれば、マイクロプロセッサ３は、マルチコア・マイクロプロセッサからなる。すなわち、マイクロプロセッサ３は、複数のＣＰＵコアを備える。
【００１１】
図２は、図１の説明のためのコンピュータシステムのソフトウェア要素例を示す。アプリケーションプログラム２６が示されている。かかるアプリケーション２６は、本発明の教示と組み合わされたコンパイラ３４を使用してコンパイルすることができる。コンパイルされたアプリケーションプログラム２６は、実行中にサービスを受けるためランタイムライブラリ３４にアクセスし、続いて、ランタイムライブラリ３４が、システムサービスを受けるためオペレーティングシステム３２にアクセスする。コンパイラ３４もまた、アプリケーションプログラム２６のコンパイル中にシステムサービスを受けるためオペレーティングシステム３２にアクセスする。
【００１２】
本発明の教示を実装したコンパイラ３４は、ターゲット（対象）マイクロプロセッサシステムで動作するネイティブコンパイラで構成してもよいし、異なるマイクロプロセッサシステムで動作するクロスコンパイラで構成してもよい。本発明の実施形態によれば、コンパイラのためのターゲットマイクロプロセッサは、同じタイプの複数の機能ユニットを有する。たとえば、マイクロプロセッサは、スーパースカラアーキテクチャを有するもので構成することができる。
【００１３】
次に、図３ａおよび図３ｂを参照すると、これらのブロック図は、コンパイラの一例を示している。図３ａに示すように、この例では、コンパイラ３４は、パーサ３８と、中間表現ビルダ４０と、本発明の教示と組み合わされるコードジェネレータ４２とを備える。パーサ３８は、入力として、コンパイルされるプログラムのソースコードを受け取る。これに応じて、パーサ３８は、ソース言語ステートメントを解析し、トークン化されたステートメントを出力する。中間表現ビルダ４０は、入力としてトークン化されたステートメントを受け取る。これに応じて、中間表現ビルダ４０は、トークン化されたステートメントに対する中間表現を生成する。コードジェネレータ４２は、入力として中間表現を受け取る。これに応じて、コードジェネレータ４２は、プログラムのオブジェクトコードを生成する。コンパイラ３４は、他の実施形態に従って、異なるように構成することもできる。
【００１４】
図３ｂに示すように、一例としてのコードジェネレータ４２は、トランスレータ４４と、オプティマイザ４６と、レジスタアロケータ４８と、ループアンローラ５０と、スケジューラ５２と、アセンブリコードジェネレータ５４とを有するように構成することができる。トランスレータ４４は、入力として中間表現を受け取る。これに応じて、トランスレータ４４は、ループテーブルの構築、命令ブロックの順序付け、データフローグラフの作成等を行う。オプティマイザ４６は、入力として、中間表現並びにループテーブルおよびデータフローグラフなどの関連情報を受け取る。これに応じて、オプティマイザ４６は、さまざまな最適化を行う。レジスタアロケータ４８は、入力として、最適化された中間表現および関連情報を受け取る。これに応じて、レジスタアロケータ４８は、ターゲットマイクロプロセッサのレジスタを、生成されている命令に割り当てる。ループアンローラ５０は、入力として、レジスタ割り当てがされた最適化された中間表現および関連情報を受け取る。これに応じて、ループアンローラ５０は、ターゲットマイクロプロセッサで利用可能な資源に合致した最適な時間に得るため、生成されている命令におけるループを展開して、生成されている命令を再構成する。スケジューラ５２は、入力として、再構成された中間表現および関連情報を受け取る。これに応じて、スケジューラ５２は、さらに、並列処理のために、生成される命令を再構成する。最後に、アセンブリコードジェネレータ５４は、入力として、最適化、レジスタ割り当て及び再構成がされた中間表現および関連情報を受け取る。これに応じて、アセンブリコードジェネレータ５４は、コンパイルされているプログラムのオブジェクトコードを生成する。コードジェネレータ４２を、他の実施形態に従って、異なるように構成してもよい。
【００１５】
理解を容易にするために、上述した実施形態において、コードジェネレータ４２は、生成されている命令におけるループの展開及び並列処理のための命令のスケジューリングの前に、レジスタの割り当てを行うものとして説明しているが、以下の説明に基づいて、本発明は、異なるレジスタ割り当て、ループ展開およびスケジューリング順序を有する、他のレジスタ割り付け、ループ展開およびスケジューリング手法で実施できることが分かるであろう。
【００１６】
図４は、本発明の実施形態によるフォールトトレラント・マルチコア・マイクロプロセッシングの方法を示すフローチャートである。図４の方法１００は、Ｎ個（Ｎは２以上）のＣＰＵコアを有するマルチコア・マイクロプロセッサで利用することができる。
【００１７】
図４に示した実施形態によれば、Ｎ個のＣＰＵコアのうちの１つが選択され、テストのために「オフライン」となる（１０２）。言い換えれば、選択されたＣＰＵコアは、ユーザコードやオペレーティングシステム（ＯＳ）コードの実行のためには利用不可とされるが、診断処理を実行するために確保されるのである。一実施形態によれば、１０２での選択は、Ｎ個のＣＰＵコアすべてのカバーを保証するアルゴリズムによって実行することができる。たとえば、アルゴリズムは、テストされるコアを１０２で選択するため、ラウンドロビンタイプの方法を使用することができる。
【００１８】
Ｎ−１個のコアでのコードの実行および選択されたコアでの診断の実行の前に、コア間コンテキストスイッチ１０４を実行する必要があることがある。かかるコンテキストスイッチは、典型的には、最近テストされたＣＰＵコアを、コードの実行に利用可能なコアのプールに戻すように切り替えること、また、選択されたコアを、診断を実行することができるようにプールから取り出すように切り替えることを含む。本発明の一実施形態によれば、マイクロプロセッサ・ダイに特別な専用通信リンクを設けることができる。専用通信リンクは、ＣＰＵコアが同じダイに配置されているので、これらが非常に近接していることを活かすように構成することができる。このように接近して構成されたリンクを使用することにより、最近テストされたコアと動作中のコアとの間のコンテキストスイッチを、比較的小さいパフォーマンスへの影響のみで、完了することができる。これは、データがチップの外へ移動する必要がないためである。データのチップ外へ移動は、ずっと低速なシステムレベルの通信リンクのため、コンテキストスイッチを低速にする。
【００１９】
続いて、残りの（Ｎ−１）個のＣＰＵコアでユーザコードやＯＳコードを実行し（１０６）、並列に、選択されたＣＰＵコアで診断を実行する（１０８）。好ましい実施形態では、一度にＣＰＵコアのうちの１つのみが診断を実行するが、代替実施形態では、一度に複数のコアで診断を実行してもよい。しかしながら、その代替実施形態では、通常、パフォーマンス・オーバヘッドが大きくなる。
【００２０】
各診断動作は、予め定められたテストパターンから選択することができる。かかるテストパターンは、診断動作と、付随する既知の結果とを含まなければならない。好ましくは、テストパターンは、テストしている機能ユニットのさまざまな構成要素が適切に機能することに関して効果的なテストを提供するように選択される。効果的なテストパターンの詳細は、テストしている実行ユニットの詳細によって決まる。本発明の実施形態によれば、テストカバレッジは設定可能である。
【００２１】
選択されたＣＰＵコアでの健全性チェックが終了すると、検証された健全なＣＰＵコアは、使用可能なＣＰＵコアのプールに戻すことができ、健全性チェックをするため、異なるＣＰＵを選択することができる（１０２）。なお、このフォールトチェックを行うために、システムをオフラインにする必要はない。ラウンドロビン等のアルゴリズムを使用することにより、ＣＰＵコアの各々のフォールトチェックを行い、その後、ユーザ／ＯＳコードを実行する状態に戻すことができる。
【００２２】
一実施形態では、ＣＰＵコアのローテーション制御は、オペレーティングシステムレベルで行うことができる。別の実施形態では、ＣＰＵコアのローテーション制御は、マイクロプロセッサ上の専用回路によりハードウェアレベルで行うことができる。
【００２３】
本発明の実施形態によれば、マイクロプロセッサは、オペレーティングシステムが、いかなる瞬間においても、それがどの実際の物理的ＣＰＵで実行されているかを知らない（または構わない）ように、ＣＰＵを「仮想化（virtualize）」する。たとえば、マイクロプロセッサチップ内に８つのＣＰＵコアがある場合、それらコアは、マイクロプロセッサハードウェアの内部的な用途のために、物理的に「０」〜「７」に番号付けすることができる。しかしながら、マイクロプロセッサハードウェアの外部的な用途のために、コアを、異なる仮想番号またはアドレスに割り当てることができる。これらの仮想または外部番号は、オペレーティングシステムが見て使用することができる。コアに対し、かかる仮想または外部番号付けを提供し使用することにより、オペレーティングシステムは、ＣＰＵコアの使用とテストとの切替えを非常に容易に処理することができ、都合がよい。そして、かかる仮想番号付けを使用することにより、オペレーティングシステムの観点からは、ＣＰＵコアは、あらゆる面で同じに見え得る。
【００２４】
したがって、本発明の実施形態によれば、マイクロプロセッサチップは、テストのために稼動状態からはずされるＣＰＵコアと、元の稼動状態に戻されるＣＰＵコアとの間で外部ＣＰＵ番号を交換するため、プログラマブルなハードウェア回路および／またはソフトウェアコードを含むことができる。かかる外部ＣＰＵ番号の交換により、オペレーティングシステムは、使用中のＣＰＵコアが変更されたことを知る必要さえない。マイクロプロセッサチップ上に８つのＣＰＵコアがある例を考える。さらに、チップが、オペレーティングシステムに対し、６つのコアのみを使用のために提示し、２つのコアが予備である場合を考える。この例では、６つは、「０」〜「５」と外部番号付けすることができ、２つの予備は、「６」および「７」と外部番号付けすることができる。たとえば、現在「１」と番号付けされたＣＰＵコアをテストする時がくると、「コンテキストスイッチ」の一部として、ＣＰＵ「６」に対してその新たな番号として「１」を与え、「１」に対しその新たな番号として「６」を与えることができる。欠陥のある（ブラックリストに載せられた）ＣＰＵは、それがシステムまたはマイクロプロセッサチップによって決して使用されないように、外部ＣＰＵ番号が恒久的に与えられる。
【００２５】
図５Ａは、一例における複数のＣＰＵコア２０８を有するマイクロプロセッサ３の選択された構成要素を示す概略図である。当然のことながら、実際のマルチコア・マイクロプロセッサ３は、図示していない多数の他の構成要素を有する。
【００２６】
説明のために図示した構成要素としては、命令フェッチユニット２０２と、命令キャッシュメモリ２０４と、命令デコード／発行回路２０６と、複数のＣＰＵコア２０８と、メモリシステム２１０とがある。図示した構成は、４つのＣＰＵコアを有するが、本発明の実施形態は、さまざまな数のコア、たとえば６つ、８つまたはそれ以上のコアを有するマイクロプロセッサで実装することもできる。
【００２７】
命令のアドレスは、命令フェッチユニット２０２内の回路によって生成することができる。たとえば、フェッチユニット２０２は、命令キャッシュ２０４内の開始アドレスから連続するアドレスを通じて順次インクリメントして、当該アドレスに格納された連続する命令を逐次読み出せるようにするプログラムカウンタを備えるように構成することができる。命令キャッシュ２０４は、頻繁に実行されている命令を格納する。同様に、データキャッシュ（不図示）は、命令を実行するために頻繁にアクセスされているデータを格納することができる。実装によっては、命令およびデータキャッシュを結合して１つのメモリユニットにすることもできる。
【００２８】
命令デコード／発行回路２０６は、キャッシュ２０４から命令を受け取り、それらをデコードし、実行のために複数のＣＰＵコア２０８に発行する。たとえば、４つの別々の命令をデコードし、４つのＣＰＵ２０８Ａ〜２０８Ｄの各々に対して１つ、実行のために発行することができる。ＣＰＵ２０８は、共有メモリシステム２１０とインタフェースするように構成することができる。メモリシステム２１０は、メモリシステムバスを備えることができ、オンチップおよびオフチップ両方のメモリコンポーネントを備えることができる。他の回路、例えば、命令実行のためにオペランドを供給するものは図示していない。
【００２９】
図５Ｂは、本発明の実施形態によるマルチコア・マイクロプロセッサ３上のコア間通信回路を示す概略図である。図示するように、各ＣＰＵコア２０８は、プロセッサコア２１１と、付随するローカルキャッシュメモリ２１２とを備えるように構成することができる。図４に関連して上述したようにコンテキストスイッチ１０４が必要な場合、コア間通信回路２１４を利用して、コンテキストスイッチに必要なコア間データ転送を行うことができる。コア間通信回路２１４は、迅速なコンテキストスイッチを容易にするために、個々のＣＰＵコア２０８の近く、かつ、それらの間に配置することができる。一実施形態によれば、コア間通信回路２１４は、クロスバースイッチ回路と、付随する制御回路とを備えることができる。コア間通信回路２１４に結合される制御回路２１６は、テストされるＣＰＵコア２０８の選択およびコア間通信回路２１４の制御に使用することができる。
【００３０】
なお、図５Ａおよび図５Ｂに示した回路構成要素は、必ずしも正しい縮尺で示されている訳ではいない。さらに、さまざまな構成要素が説明のための位置に示されているが、これらの位置は、必ずしもマイクロプロセッサ・ダイ上の特定のレイアウト位置を反映している訳ではいない。
【００３１】
図６は、本発明の実施形態によるＣＰＵコアの正常動作を検証するための診断手順を示すフローチャートである。なお、図６に示す手順１２０は、説明のための手順例である。
【００３２】
診断動作は、選択されたＣＰＵコア２０８で実行される（１２２）。それは、期待される結果に関する所定の知識を用いて行われる。そして、実際の結果と期待される結果が比較され（１２４）、比較された結果が同じであるか否かが判断される（１２６）。結果が同じである場合、エラーが示されることはなく、選択されたＣＰＵコアの正常動作が確認され（１２８）、そのＣＰＵコアは、コードの実行に利用可能な健全性チェック済みコアのプールに保持される。結果が同じでない場合、ＣＰＵコアの故障が示され、フォールトハンドラへのジャンプ（１３０）が生じ得る。フォールトハンドラは、適切な動作を行うよう構成され得る。
【００３３】
一実施形態によれば、診断テストに不合格のＣＰＵコアを「ブラックリストに載せ」、コードの実行に使用しないようにすることができる。言い換えれば、そのＣＰＵコアを、使用不可（使用しない）とマークすることができる。かかる使用不可機能は、特定のハードウェア回路によって実装することができる。１つのユニットを使用不可とマークすると、使用可能なＣＰＵコアの数が１つ減って、Ｎ−１になる。その後、診断を継続してＣＰＵコアで実行することができる。その場合、Ｎ−２個のコアのみがオンラインとなり、１つのコアが診断テストのために確保される。その後も同様である。
【００３４】
別の実施形態によれば、ＣＰＵコアのうちの１つの障害を、システム停止の原因とすることができる。かかるシステム停止を、ユーザデータに影響が及ぶ前に利用することで、将来生じ得るデータ破壊を防止することができる。
【００３５】
図７は、本発明の一実施形態による可変のアグレッシブネス（積極性）レベルを有するフォールトトレラント・マルチコア・マイクロプロセッシングをスケジューリングする方法１４０を示すフローチャートである。図７の方法１４０を、必要に応じて利用することにより、パフォーマンスとフォールトトレランスとのトレードオフを達成することができる。本方法１４０は、図３ａおよび図３ｂに関連して上述したもの等のコンパイラとともに実行することができる。本発明の他の実施形態は、かかるスケジューリング方法１４０を利用しなくてもよい。
【００３６】
図７の方法１４０によれば、準備段階として、実行ユニットのテストのために、可変のアグレッシブネスレベルを設定すること（１４１）を含むことができる。一実施形態では、可変のアグレッシブネスレベルは、可変のコンパイラ・フラグを１つまたは複数使って実装することができる。たとえば、可変フラグは、テストの頻度を指定することができる。別の例として、可変フラグは、かかるテストによって取られるパフォーマンスオーバヘッドの最大量を指定することもできる。アグレッシブネスレベルを設定することにより、システムパフォーマンスとフォールトトレランスとの間のトレードオフを意識的に行うことができる。
【００３７】
一実施形態では、アグレッシブネスレベルを適用するため、コンパイラによってアルゴリズムが使用される（１４２）。当該アルゴリズムは、ユーザ／ＯＳコードの実行とともに、ＣＰＵコアのテストをスケジューリングする適切な時がいつかを判断する（１４４）。アグレッシブネスレベルが高いほど、より頻繁にテストが含まれることになる。アグレッシブネスレベルが低いほど、テストが含まれる頻度がより低くなる。最低レベルにおいて、テストを「オフ」にすることができる。
【００３８】
アルゴリズムが、テストを含める時ではないと判断すると、コンパイラは、ユーザコードやオペレーティングシステムコードの実行に使用されることになる利用可能なすべてのＣＰＵコアのスケジューリングをする（１４６）。アルゴリズムが、テストを含める時であると判断すると、コンパイラは、コードと診断テストとの並列実行をスケジューリングする（１４８）。かかる並列実行については、図４に関連して、前に詳細に説明した。
【００３９】
すべてのマイクロプロセッサに対して（既知の「バスタブ曲線」の左側を越える）完全なバーンインを行うことは通常、コスト的に難しいため、ある程度のマイクロプロセッサの潜在的欠陥率は、通常、「許容可能」とみなされる。本発明の実施形態では、ＣＰＵコア内の潜在的欠陥または弱いラッチは、時間の経過とともに「弱くなる」傾向にあると言う点で予め予測可能な傾向にあるということを都合よく利用している。本発明の実施形態によれば、かかる欠陥を、実行時に、それらがデータ破壊をもたらしたり、マシンチェックおよびシステム障害をもたらす前に見つけることができる。
【００４０】
したがって、本発明の実施形態では、パフォーマンス・オーバヘッドを最小化し、限られた量の余分なハードウェアだけを必要としながら、マルチコア・マイクロプロセッサに対する一定のレベルのフォールトトレランスが得られる。ＣＰＵコアの健全性を、実行中にチェックすることにより、ユーザデータが破壊される前に潜在的なエラーを検出することができるようになり、都合がよい。マイクロプロセッサは、かかるフォールトチェックを、内部のＣＰＵコアで実行させるために、オフラインにする必要はない。一実施形態では、コア間の高速専用リンクを利用することにより、高速なコンテキストスイッチを可能にし、パフォーマンスへの影響を最小限にする。
【００４１】
本発明の実施形態は、フォールトトレラント機能をローエンド・システムで利用可能にできて、都合がよい。これらのフォールトトレラント機能は、ロックステップで動作する完全に冗長なプロセッサを必要とすることなく提供されるため、多大なハードウェアコストを不要にする。以前は、かかるフォールトトレラント機能は、かかるローエンド・システムでは、それらがコスト重視の性質を有するため、利用できない可能性があった。
【００４２】
上記説明において、本発明の実施形態を完全に理解できるようにするため、多数の具体的な詳細が示された。しかしながら、本発明の図示した実施形態の上記説明は、網羅的であるようにも、また、本発明を、開示した形態そのものに限定するようにも意図されていない。当業者であれば、本発明を、特定の詳細のうちの１つまたは複数を用いずに、または、他の方法、構成要素等を用いて実施することができることが分かるであろう。本発明の態様を不明瞭にすることを避けるために、既知の構成または動作については、図示しなかったり、詳細に説明しなかったりした場合がある。本発明の特定の実施形態および本発明のための例を、本明細書では例示のために説明したが、当業者であれば分かるように、本発明の範囲内で、さまざまな等価的変更が可能である。
【００４３】
本発明に対し、これらの変更を、上記詳細な説明に鑑みて行うことができる。添付の特許請求の範囲で使用される用語は、本発明を、明細書および特許請求の範囲で開示した特定の実施形態に限定するものと解釈してはならない。むしろ、本発明の範囲は、特許請求の範囲の解釈の確立された原則に従って解釈される特許請求の範囲によって、決められる。
【図面の簡単な説明】
【００４４】
【図１】本開示を実施できるＣＰＵと従来のメモリとを含むコンピュータの一部を示す図である。
【図２】図１のコンピュータシステム例のソフトウェア要素例を示す図である。
【図３ａ】一例におけるコンパイラの構成要素を示すブロック図である。
【図３ｂ】一例におけるコードジェネレータの構成要素を示すブロック図である。
【図４】本発明の実施形態によるフォールトトレラント・マルチコア・マイクロプロセッシングの方法を示すフローチャートである。
【図５Ａ】一例における複数のＣＰＵコアを有するマイクロプロセッサの選択された構成要素を示す概略図である。
【図５Ｂ】本発明の実施形態によるマイクロプロセッサ上のコア間通信回路を示す概略図である。
【図６】本発明の実施形態によるＣＰＵコアの正常動作を検証するための診断手順を示すフローチャートである。
【図７】本発明の一実施形態による可変アグレッシブネスレベルを有するフォールトトレラント・マルチコア・マイクロプロセッシングをスケジューリングする方法を示すフローチャートである。
【符号の説明】
【００４５】
１        コンピューティングシステム
２        入出力部
３        マルチコア・マイクロプロセッサ
４        メモリ部
５        入力装置
６        出力装置
７        リムーバブル記憶ユニット
８        データ記憶媒体
９        固定記憶ユニット
２６      アプリケーションプログラム
３４      コンパイラおよびランタイムライブラリ
３２      オペレーティングシステム
３８      パーサ
４０      中間表現ビルダ
４２      コードジェネレータ
４４      トランスレータ
４６      オプティマイザ
４８      レジスタアロケータ
５０      ループアンローラ
５２      スケジューラ
５４      アセンブリジェネレータ
２０２    命令フェッチユニット
２０４    命令キャッシュメモリ
２０６    命令デコード／発行回路
２０８    ＣＰＵコア
２１０    メモリシステム
２１１    プロセッサコア
２１２    ローカルキャッシュメモリ
２１４    コア間通信回路
２１６    制御回路
【図１】
2005129053.tif 000003
【図２】
2005129053.tif 000004
【図３ａ】
2005129053.tif 000005
【図３ｂ】
2005129053.tif 000006
【図４】
2005129053.tif 000007
【図５Ａ】
2005129053.tif 000008
【図５Ｂ】
2005129053.tif 000009
【図６】
2005129053.tif 000010
【図７】
2005129053.tif 000011