(57)【要約】【課題】性能の低下を抑制したフォールトトレラントシステムを提供する。【解決手段】第１のコア内の第１のパイプラインユニットの故障ステージユニットにおける命令の実行において第１のエラーを検出し、前記第１のエラーの検出に応答して、前記命令を書き換えて書き換え版命令を、前記第１のパイプラインユニットにおいて実行する。この実行において第２のエラーが発生するか決定し、前記第２のエラーの検出に応答して、前記第１のコア内の第２のパイプラインユニットから前記故障ステージユニットに代わる第１の代替ステージユニットを選択し、第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットとにおいて命令を再実行する。前記故障ステージユニットの故障コンポーネントを特定し、前記故障コンポーネントのフォールバックユニットを確立する。【選択図】図５Ａ
2013122748.tif 000002
【特許請求の範囲】
【請求項１】
命令の実行についてのフォールトトレランスを提供するフォールトトレラントコンピュータシステムにおける方法であって、
第１のコア内の第１のパイプラインユニットの故障ステージユニットにおける命令の実行において第１のエラーを検出するステップと、
前記第１のエラーの検出に応答して、前記命令を書き換えて書き換え版命令を作成するステップと、
前記第１のパイプラインユニットにおいて前記書き換え版命令を実行するステップと、
前記書き換え版命令の実行において第２のエラーが発生するか決定するステップと、
前記第２のエラーの検出に応答して、前記第１のコア内の第２のパイプラインユニットから前記故障ステージユニットに代わる第１の代替ステージユニットを選択し、前記第１のコア内の、前記第２のパイプラインユニットの前記第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットにおいて命令を再実行するステップと、
前記故障ステージユニットの故障コンポーネントを特定するステップと、
前記故障コンポーネントのフォールバックユニットを確立するステップと、
を含む、方法。
【請求項２】
前記第２のパイプラインユニットの前記第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットにおける命令の実行において第３のエラーが発生するか決定するステップと、
前記第３のエラーの検出に応答して、第２のコア内の第３のパイプラインユニットの第２の代替ステージユニットと第１のコア内の非故障ステージユニットとにおいて前記命令を再実行するステップと、
をさらに含む請求項１に記載の方法。
【請求項３】
第２のコア内の第３のパイプラインユニットの第２の代替ステージユニットと第１のコア内の非故障ステージユニットとにおける前記命令の実行において第４のエラーが発生するか決定するステップと、
前記第４のエラーの検出に応答して、前記第２のコア内の第３のパイプラインユニットにおいて前記命令を再実行するステップと、
をさらに含む請求項２に記載の方法。
【請求項４】
前記フォールバックユニットの確立は、前記故障ステージユニットの故障コンポーネントと同等の機能を有するように、プログラマブルロジックアレイを構成することによって行われる、
請求項１〜３のいずれかに記載の方法。
【請求項５】
前記書き換え版命令は、前記命令とは異なるコンポーネントによって処理されるが、前記命令と同じ結果を得る処理を行うものである、
請求項１〜４のいずれかに記載の方法。
【請求項６】
前記代替ステージユニットは、前記故障ステージユニットが提供するのと同じ機能を提供するものである、
請求項１〜５のいずれかに記載の方法。
【請求項７】
前記第２のエラーの検出に応答して、前記故障ステージユニットに代わる第３の代替ステージユニットを、前記第１のコア内の第４のパイプラインユニットから選択するステップと、
前記第４のパイプラインユニット内の前記第３の代替ステージユニットおよび前記第１のコア内の前記第１のパイプラインユニット内の非故障ステージユニットにおいて前記命令を再実行するステップと、
をさらに含む請求項１〜６のいずれかに記載の方法。
【請求項８】
命令の実行についてのフォールトトレランスを提供するフォールトトレラントシステムであって、
第１のコア内の第１のパイプラインユニットの故障ステージユニットにおける命令の実行において第１のエラーを検出するエラー検出器であって、さらに前記第１のパイプラインユニット内での書き換え版命令の実行において第２のエラーが発生するかを検出するエラー検出器と、
前記エラー検出器と通信可能に接続された書き換えエンジンであって、前記第１のエラーの検出に応答して、前記命令を書き換えて書き換え版命令を作成する書き換えエンジンと、
前記エラー検出器および前記書き換えエンジンと通信可能に接続された回復エンジンであって、前記書き換え版命令を前記第１のパイプラインユニットにおいて実行し、前記第２のエラーの検出に応答して、前記第１のコア内の第２のパイプラインユニットから前記故障ステージユニットに代わる第１の代替ステージユニットを選択し、前記第１のコア内の、前記第２のパイプラインユニットの前記第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットにおいて命令を再実行する回復エンジンと、
前記エラー検出器および前記回復エンジンと通信可能に接続された故障ロケータであって、前記故障ステージユニットの故障コンポーネントを特定する故障ロケータと、
前記回復エンジンおよび前記故障ロケータと通信可能に接続されたフォールバックプログラミングモジュールであって、前記故障コンポーネントのフォールバックユニットを確立するフォールバックプログラミングモジュールと、
を備えるフォールトトレラントシステム。
【請求項９】
前記エラー検出器は、さらに、前記第２のパイプラインユニットの前記第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットにおける命令の実行において第３のエラーが発生するか決定し、
前記回復エンジンは、さらに、前記第３のエラーの検出に応答して、第２のコア内の第３のパイプラインユニットの第２の代替ステージユニットと第１のコア内の非故障ステージユニットとにおいて前記命令を再実行する、
請求項８に記載のフォールトトレラントシステム。
【請求項１０】
前記エラー検出器は、さらに、第２のコア内の第３のパイプラインユニットの第２の代替ステージユニットと第１のコア内の非故障ステージユニットとにおける前記命令の実行において第４のエラーが発生するか決定し、
前記回復エンジンは、さらに、前記第４のエラーの検出に応答して、前記第２のコア内の第３のパイプラインユニットにおいて前記命令を再実行する、
請求項９に記載のフォールトトレラントシステム。
【請求項１１】
前記フォールバックプログラミングモジュールは、さらに、前記故障ステージユニットの故障コンポーネントと同等の機能を有するように、プログラマブルロジックアレイを構成する、
請求項８〜１０のいずれかに記載のフォールトトレラントシステム。
【請求項１２】
前記書き換え版命令は、前記命令とは異なるコンポーネントによって処理されるが、前記命令と同じ結果を得る処理を行うものである、
請求項８〜１１のいずれかに記載のフォールトトレラントシステム。
【請求項１３】
前記代替ステージユニットは、前記故障ステージユニットが提供するのと同じ機能を提供するものである、
請求項８〜１２のいずれかに記載のフォールトトレラントシステム。
【請求項１４】
前記回復エンジンは、さらに、
前記第２のエラーの検出に応答して、前記故障ステージユニットに代わる第３の代替ステージユニットを、前記第１のコア内の第４のパイプラインユニットから選択し、
前記第４のパイプラインユニット内の前記第３の代替ステージユニットおよび前記第１のコア内の前記第１のパイプラインユニット内の非故障ステージユニットにおいて前記命令を再実行する、
請求項８〜１３のいずれかに記載のフォールトトレラントシステム。
【請求項１５】
コンピュータに、
第１のコア内の第１のパイプラインユニットの故障ステージユニットにおける命令の実行において第１のエラーを検出するステップと、
前記第１のエラーの検出に応答して、前記命令を書き換えて書き換え版命令を作成するステップと、
前記第１のパイプラインユニットにおいて前記書き換え版命令を実行するステップと、
前記書き換え版命令の実行において第２のエラーが発生するか決定するステップと、
前記第２のエラーの検出に応答して、前記第１のコア内の第２のパイプラインユニットから前記故障ステージユニットに代わる第１の代替ステージユニットを選択し、前記第１のコア内の、前記第２のパイプラインユニットの前記第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットにおいて命令を再実行するステップと、
前記故障ステージユニットの故障コンポーネントを特定するステップと、
前記故障コンポーネントのフォールバックユニットを確立するステップと、
を実行させるためのコンピュータプログラム。
【請求項１６】
前記第２のパイプラインユニットの前記第１の代替ステージユニットおよび前記第１のパイプラインユニットの非故障ステージユニットにおける命令の実行において第３のエラーが発生するか決定するステップと、
前記第３のエラーの検出に応答して、第２のコア内の第３のパイプラインユニットの第２の代替ステージユニットと第１のコア内の非故障ステージユニットとにおいて前記命令を再実行するステップと、
をさらにコンピュータに実行させる請求項１５に記載のコンピュータプログラム。
【請求項１７】
第２のコア内の第３のパイプラインユニットの第２の代替ステージユニットと第１のコア内の非故障ステージユニットとにおける前記命令の実行において第４のエラーが発生するか決定するステップと、
前記第４のエラーの検出に応答して、前記第２のコア内の第３のパイプラインユニットにおいて前記命令を再実行するステップと、
をさらにコンピュータに実行させる請求項１６に記載のコンピュータプログラム。
【請求項１８】
前記フォールバックユニットの確立は、前記故障ステージユニットの故障コンポーネントと同等の機能を有するように、プログラマブルロジックアレイを構成することによって行われる、
請求項１５〜１７のいずれかに記載のコンピュータプログラム。
【請求項１９】
前記書き換え版命令は、前記命令とは異なるコンポーネントによって処理されるが、前記命令と同じ結果を得る処理を行うものである、
請求項１５〜１８のいずれかに記載のコンピュータプログラム。
【請求項２０】
前記代替ステージユニットは、前記故障ステージユニットが提供するのと同じ機能を提供するものである、
請求項１５〜１９のいずれかに記載のコンピュータプログラム。
【請求項２１】
前記第２のエラーの検出に応答して、前記故障ステージユニットに代わる第３の代替ステージユニットを、前記第１のコア内の第４のパイプラインユニットから選択するステップと、
前記第４のパイプラインユニット内の前記第３の代替ステージユニットおよび前記第１のコア内の前記第１のパイプラインユニット内の非故障ステージユニットにおいて前記命令を再実行するステップと、
をさらにコンピュータに実行させる請求項１５〜２０のいずれかに記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、コンピュータシステムに関する。特に、本明細書は、フォールトトレラントコンピュータシステムに関する。
【背景技術】
【０００２】
現代の自動車は、多数の電子制御ユニット（ＥＣＵ）を用いるように設計されていることが多い。自動車によっては、７０を超えるＥＣＵを有するものもある。ＥＣＵは、自動車のなかの電気システムや電気サブシステムを制御するプロセッサベースのシステムである。例えば、ＥＣＵは、大半の自動車の内燃機関における燃料噴射機能及び点火タイミング機能を制御する。これらの機能は、自動車の動作にとって重要であり、それらの不具合は、自動車のユーザである人に対して致命的な影響を及ぼす恐れがある。
【０００３】
ＥＣＵ設計における昨近の傾向は、より小形状のトランジスタをベースにしたプロセッサを使用することである。より小形状のトランジスタをベースにしたプロセッサは、ＥＣＵ設計に多数の利益をもたらす。例えば、これらのプロセッサは、その他のプロセッサよりも安価である傾向があり、ゆえに、より低コストでのＥＣＵの生産を可能にする。更に、より小形状のトランジスタをベースにしたこれらのプロセッサは、より高速で動作し、より高価なその他のプロセッサと比べて消費電力要件が低い。
【０００４】
あいにく、より小形状のトランジスタをベースにしたプロセッサには、多数の不都合が伴う。１つ目の問題は、これらのプロセッサが一時誤り（ソフトエラー）を生じやすいことである。一時誤りは、プロセッサのデジタルロジックにおける短期的なエラーである。一時誤りは、太陽によって放出される荷電α粒子によって頻繁に引き起こされる。これらの粒子は、プロセッサ回路に衝突し、プロセッサの基板内に変化を生じさせる。この基板変化の結果、プロセッサは、短期的なデジタルロジックエラーに見舞われる。
【０００５】
より小形状のトランジスタをベースにしたプロセッサに伴う２つ目の問題は、これらのプロセッサが持続的誤りを生じやすいことである。持続的誤りは、プロセッサのデジタルロジックにおける長期的なエラーである。持続的誤りは、プロセッサのデジタル回路の金属マイグレーションや過熱によって頻繁に引き起こされる。
【０００６】
より小形状のトランジスタをベースにしたプロセッサに伴う３つ目の問題は、トランジスタの相互コンダクタンスや漏れなどの個々のコンポーネントパラメータが温度及び時間とともに大幅に変化し、結果として回路の耐性を低下させることであり、このため、動作条件が一時的及び持続的なロジックエラーの影響をより受けやすくなる。
【０００７】
ゆえに、プロセッサにおける一時的及び持続的なエラーを補正するフォールトトレラントシステムを実装することが望まれている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−１０９２２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、エラーを補正するための既存のシステムは、例えば、プロセッサをエラーから回復させるためにかなりの時間を要し、結果としてリアルタイムパフォーマンスを
大幅に低下させるゆえに、ＥＣＵ設計での実装には不完全で且つ望ましくないことが証明されている。この過剰なオーバーヘッド時間は、ＥＣＵでの実装には耐え難く且つ非実用的である。
【００１０】
本発明の目的は、リアルタイムパフォーマンスの大幅な低下を招かずにプロセッサをエラーから回復させることが可能なフォールトトレラントシステムを提供することにある。
【課題を解決するための手段】
【００１１】
本明細書は、先行技術の欠点及び限界を、少なくとも一部には、フォールトトレラント方式で命令を実行するフォールトトレラントシステムを提供することによって、克服する。システムは、エラー検出器と、書き換えモジュールと、回復エンジンと、故障ロケータと、フォールバックプログラミングモジュールとを含む。エラー検出器は、第１のコアのなかの第１のパイプラインユニットの故障ステージユニットにおける命令の実行において第１のエラーを検出する。書き換えモジュールは、第１のエラーの検出に応えて命令を書き換え、書き換え版命令を形成する。回復エンジンは、第１のパイプラインユニットにおいて書き換え版命令を実行する。エラー検出器は、書き換え版命令の実行において第２のエラーが発生するかどうかを決定する。第２のエラーの発生の決定に応えて、回復エンジンは、第１のコアのなかの第２のパイプラインユニットから、故障ステージユニットに代わる第１の代替ステージユニットを選択する。回復エンジンは、第１のコアのなかの、第２のパイプラインユニットの第１の代替ステージユニット及び第１のパイプラインユニットの非故障ステージユニットにおいて命令を再実行する。故障ロケータは、故障ステージユニットの故障コンポーネントを見つける。フォールバックプログラミングモジュールは、故障コンポーネントのためのフォールバックユニットを確立する。
【発明の効果】
【００１２】
本発明によれば、リアルタイムパフォーマンスの大幅な低下を招かずにプロセッサをエラーから回復させることができる。
【図面の簡単な説明】
【００１３】
【図１】フォールトトレラントシステムの１つの実施形態を示したハイレベルブロック図である。
【図２】フォールトトレラントプロセッサの１つの実施形態を示したブロック図である。
【図３】フォールトトレラントモジュールの１つの実施形態を示したブロック図である。
【図４Ａ】１つのコアのなかの２つのパイプラインユニット間におけるフォールバックの１つの実施形態を示したブロック図である。
【図４Ｂ】第１のコアのなかの第１のパイプラインユニットと第２のコアのなかの第２のパイプラインユニットとの間におけるフォールバックの１つの実施形態を示したブロック図である。
【図５Ａ】１つの実施形態にしたがった、パイプラインユニットの故障コンポーネントのためのフォールバックユニットを確立するプロセスを示したタイムチャートである。
【図５Ｂ】別の実施形態にしたがった、パイプラインユニットの故障コンポーネントのためのフォールバックユニットを確立するプロセスを示したタイムチャートである。
【図６Ａ】１つの実施形態にしたがった、命令を実行するためのフォールトトレラント方式を提供する方法を示したフローチャートである。
【図６Ｂ】１つの実施形態にしたがった、命令を実行するためのフォールトトレラント方式を提供する方法を示したフローチャートである。
【図６Ｃ】１つの実施形態にしたがった、命令を実行するためのフォールトトレラント方式を提供する方法を示したフローチャートである。
【図６Ｄ】１つの実施形態にしたがった、命令を実行するためのフォールトトレラント方式を提供する方法を示したフローチャートである。
【発明を実施するための形態】
【００１４】
本明細書は、同様の要素に言及するために類似の参照符号を使用される添付の図面において、限定目的ではなく例示目的で示されている。
【００１５】
命令を実行するためのフォールトトレラント方式を提供するシステム及び方法が、以下で説明される。以下の説明では、本発明を十分に理解できるように、多くの詳細について説明する。しかしながら、各実施形態はこれらの具体的な詳細無しでも良いことは当業者にとって明らかであろう。また、説明が不明瞭になることを避けるために、構造や装置をブロック図の形式で表すこともある。たとえば、一実施形態は、ユーザインタフェースおよび特定のハードウェアとともに説明される。しかし、ここでの説明は、データおよびコマンドを受信する任意のタイプの計算装置および任意の周辺機器について適用できる。
【００１６】
本明細書における「一実施形態」または「ある実施形態」等という用語は、その実施形態と関連づけて説明される特定の特徴・構造・性質が少なくとも本発明の一つの実施形態に含まれることを意味する。「一実施形態における」等という用語は本明細書内で複数用いられるが、これらは必ずしも同一の実施形態を示すものとは限らない。
【００１７】
以下の詳細な説明の一部は、非一時的（non-transitory）なコンピュータ可読記憶媒体に記憶されたデータビットに対する動作のアルゴリズムおよび記号的表現として提供される。これらのアルゴリズム的な説明および表現は、データ処理技術分野の当業者によって、他の当業者に対して自らの成果の本質を最も効果的に説明するために用いられるものである。なお、本明細書において（また一般に）アルゴリズムとは、所望の結果を得るための論理的な手順を意味する。処理のステップは、物理量を物理的に操作するものである。必ずしも必須ではないが、通常は、これらの量は記憶・伝送・結合・比較およびその他の処理が可能な電気的または磁気的信号の形式を取る。通例にしたがって、これらの信号をビット・値・要素・エレメント・シンボル・キャラクタ・項・数値などとして称することが簡便である
【００１８】
なお、これらの用語および類似する用語はいずれも、適切な物理量と関連付いているものであり、これら物理量に対する簡易的なラベルに過ぎないということに留意する必要がある。以下の説明から明らかなように、特に断らない限りは、本明細書において「処理」「計算」「コンピュータ計算（処理）」「判断」「表示」等の用語を用いた説明は、コンピュータシステムや類似の電子的計算装置の動作および処理であって、コンピュータシステムのレジスタやメモリ内の物理的（電子的）量を、他のメモリやレジスタまたは同様の情報ストレージや通信装置、表示装置内の物理量として表される他のデータへ操作および変形する動作および処理を意味する。
【００１９】
本発明は、本明細書で説明される動作を実行する装置にも関する。この装置は要求される目的のために特別に製造されるものであっても良いし、汎用コンピュータを用いて構成しコンピュータ内に格納されるプログラムによって選択的に実行されたり再構成されたりするものであっても良い。このようなコンピュータプログラムは、コンピュータのシステムバスに接続可能な、例えばフロッピー（登録商標）ディスク・光ディスク・ＣＤ−ＲＯＭ・ＭＯディスク・磁気ディスクなど任意のタイプのディスク、読み込み専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード、フラッシュメモリ、光学式カード、電子的命令を格納するために適した任意のタイプの媒体などの、非一時的なコンピュータ可読記憶媒体に記憶される。
【００２０】
発明の具体的な実施形態は、完全にハードウェアによって実現されるものでも良いし、完全にソフトウェアによって実現されるものでも良いし、ハードウェアとソフトウェアの両方によって実現されるものでも良い。好ましい実施形態は、ソフトウェアによって実現される。ここでソフトウェアとは、ファームウェア、常駐ソフトウェア、マイクロコードやその他のソフトウェアを含むものである。
【００２１】
さらに、ある実施形態は、コンピュータが利用あるいは読み込み可能な記憶媒体からアクセス可能なコンピュータプログラムプロダクトの形態を取る。この記憶媒体は、コンピュータや任意の命令実行システムによってあるいはそれらと共に利用されるプログラムコードを提供する。コンピュータが利用あるいは読み込み可能な記憶媒体とは、命令実行システムや装置によってあるいはそれらと共に利用されるプログラムを、保持、格納、通信、伝搬および転送可能な任意の装置を指す。
【００２２】
プログラムコードを格納・実行するために適したデータ処理システムは、システムバスを介して記憶素子に直接または間接的に接続された少なくとも１つのプロセッサを有する。記憶素子は、プログラムコードの実際の実行に際して使われるローカルメモリや、大容量記憶装置や、実行中に大容量記憶装置からデータを取得する回数を減らすためにいくつかのプログラムコードを一時的に記憶するキャッシュメモリなどを含む。
【００２３】
入力／出力（Ｉ／Ｏ）装置は、例えばキーボード、ディスプレイ、ポインティング装置などであるが、これらはＩ／Ｏコントローラを介して直接あるいは間接的にシステムに接続される。
【００２４】
システムにはネットワークアダプタも接続されており、これにより、私的ネットワークや公共ネットワークを介して他のデータ処理システムやリモートにあるプリンタや記憶装置に接続される。モデム、ケーブルモデム、イーサネット（登録商標）は、現在利用可能なネットワークアダプタのほんの一例である。
【００２５】
最後に、本明細書において提示されるアルゴリズムおよび表示は特定のコンピュータや他の装置と本来的に関連するものではない。本明細書における説明にしたがったプログラムを有する種々の汎用システムを用いることができるし、また要求された処理ステップを実行するための特定用途の装置を製作することが適した場合もある。これら種々のシステムに要求される構成は、以下の説明において明らかにされる。さらに、本発明は、特定のプログラミング言語と関連づけられるものではない。本明細書で説明される本発明の内容を実装するために種々のプログラミング言語を利用できることは明らかであろう。
【００２６】
システム概要
図１は、１つの実施形態にしたがったフォールトトレラントシステム１００のブロック図を示している。システム１００は、制御部１０２と、センサ１１０と、アクチュエータ１１２と、記憶装置１１４と、ネットワーク１１６と、外部システム１１８とを含む。外部システム１１８は、それがシステム１００のオプション機能であることを示すために、破線による長方形で描かれている。図１では、制御部１０２、センサ１１０、アクチュエータ１１２、記憶装置１１４、ネットワーク１１６はいずれも１つのみが描かれているが、当業者ならば、システム１００がこれらの要素を複数含んでいても良いことがわかるだろう。
【００２７】
例示の実施形態では、制御部１０２は、信号線１５５を通じてセンサ１１０と通信可能に接続されている。制御部１０２は、また、信号線１２５を通じてアクチュエータ１１２にも通信可能に接続されている。制御部１０２は、信号線１１５を通じて記憶装置１１４と通信可能に接続されている。制御部１０２は、信号線１３５を通じてネットワーク１１
６につながれている。外部システム１１８は、信号線１４５を通じてネットワーク１１６につながれている。
【００２８】
制御部１０２は、プロセッサベースの任意の計算装置である。１つの実施形態では、制御部１０２は、アクチュエータ１１２の動作を制御する電子装置である。例えば、制御部１０２は、自動車に実装された電子制御ユニット（ＥＣＵ）である。１つの実施形態では、制御部１０２は、システムオンチップ（ＳＯＣ）などの単一の集積回路チップを使用して実装される。制御部１０２は、なかでも特に、プロセッサ１０４と、インタフェース１０６とを含む。制御部１０２のコンポーネントは、互いに通信可能に接続されている。当業者ならば、制御部１０２が、メモリやバスなどのその他の任意のコンポーネントを含みうることがわかるだろう。
【００２９】
１つの実施形態では、制御部１２０は、センサ１１０から入力信号を受信し、該入力信号に少なくとも部分的に基づいて１つ以上の命令を実行し、該命令の実行に少なくとも部分的に基づいて出力信号を生成する。制御部１０２は、出力信号をアクチュエータ１１２に送信することによってアクチュエータ１１２を制御する。別の実施形態では、制御部１０２は、図２〜６Ｃを参照にして後ほど説明されるようにプロセッサ１０４において命令を実行するためのフォールトトレラント方式を提供するコード及びルーチンを含む。
【００３０】
１つの実施形態では、制御部１０２は、ＥＣＵであり、アクチュエータ１１２は、自動車のなかの燃料噴射器である。センサ１１０は、エンジン排気内の酸素の量を監視するためのセンサである。アクチュエータ１１２及びセンサ１１０は、後ほど更に詳しく説明される。自動車が安全に動作するために、もし、排気内の酸素の量が過剰に高い（自動車の乗員に対して安全上のリスクをもたらす恐れがあるリッチ燃料混合がエンジンのなかにあることを意味する）場合は、燃料噴射器によってエンジン（不図示）に送られる燃料の量が低減される。もし、エンジン排気内に危険な量の酸素がある場合は、センサ１１０は、ＥＣＵへ信号を中継する。ＥＣＵ（例えば制御部１０２）は、この信号をプロセッサ１０４を使用して処理し、アクチュエータ１１２（例えば燃料噴射器）用の出力信号を生成する。
【００３１】
例えば、制御部１０２内に含まれるプロセッサ１０４は、この信号に少なくとも部分的に基づいて燃料値を算出するために、減算器、加算器、及び乗算器を使用する。燃料値は、エンジンのなかで酸素と燃料との安全な混合を実現するために必要とされる特定の量の燃料を示している。プロセッサ１０４は、エンジンのなかの燃料の量をこの特定の量まで低減させるように燃料噴射器に指示する出力信号を生成する。プロセッサ１０４は、したがって、エンジンのなかの酸素と燃料との混合を調整するという、命を救える可能性がある機能を提供する。しかしながら、もし、燃料値の算出時に乗算器においてエラーの発生が検出されたならば、プロセッサ１０４は、燃料噴射器の動作を指示するために正しい燃料値を得る必要もある。そうでないと、誤った燃料値は、自動車の乗員にとって致命的な酸素の量をもたらす恐れがある。プロセッサ１０４にとって鍵となるのは、問題のある乗算器を迂回して正確な乗算の実行を維持できる能力である。したがって、フォールトトレラント方式で命令を実行することができるプロセッサ１０４を実装することが特に望まれている。
【００３２】
プロセッサ１０４は、計算を実施したり、メモリ（例えば記憶装置１１４）に保存されたデータを取り出したりするための、算術論理演算ユニット、マイクロプロセッサ、汎用コントローラ、又はその他の何らかのプロセッサアレイを含む。プロセッサ１０４は、データ信号を処理するものであり、複合命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、又は複数の命令セットの組み合わせを実行するアーキテクチャなどの、各種の計算アーキテクチャを含みうる。制
御部１０２では、１つのプロセッサのみが示されているが、複数のプロセッサが含まれてもよい。１つの実施形態では、プロセッサ１０４は、センサ１１０から入力信号を受信し、アクチュエータ１１２の動作を制御するための出力信号を生成する。
【００３３】
１つの実施形態では、プロセッサ１０４は、冗長ハードウェアリソースを含み尚且つフォールトトレラント方式で命令を実行するフォールトトレラントプロセッサである。例えば、プロセッサ１０４は、スーパスカラアーキテクチャの形で実装されたマルチコアを含み、パイプライン技術を使用して命令を実行する。スーパスカラアーキテクチャ及びパイプライン技術は、図２を参照にして後ほど更に詳しく説明される。１つの実施形態では、プロセッサ１０４がコアの第１のパイプラインユニットにおいて命令を実行するときにエラーが検出される。パイプラインユニットは、図２及び図４Ａ〜４Ｂを参照にして後ほど更に詳しく説明される。プロセッサ１０４は、命令を書き換え、同じコアの同じパイプラインユニットにおいて書き換え版命令を実行することによって、エラーからの回復を試みる。別の実施形態では、プロセッサ１０４は、同じコアの第２のパイプラインユニットにおいて命令を実行することによって、エラーからの回復を試みる。更に別の実施形態では、プロセッサ１０４は、別のコアの別のパイプラインユニットにおいて命令を実行することによって、エラーからの回復を試みる。プロセッサ１０４は、図２を参照にして後ほど更に詳しく説明される。
【００３４】
インタフェース１０６は、制御部１０２のコンポーネントと、システム１００のその他のエンティティとの間における通信を扱う装置である。例えば、インタフェース１０６は、制御部１０２からの信号及び／又はデータをセンサ１１０、アクチュエータ１１２、及び記憶装置１１４のうちの１つ以上に送信するとともに、センサ１１０、アクチュエータ１１２、及び記憶装置１１４のうちの１つ以上からの信号及び／又はデータを受信する入出力（Ｉ／Ｏ）インタフェースである。１つの実施形態では、インタフェース１０６は、電子回路を使用して実装される。
【００３５】
１つの実施形態では、インタフェース１０６は、制御部１０２をネットワーク１１６につなぐネットワークアダプタを含む。例えば、インタフェース１０６は、信号線１３５を通じて制御部１０２をネットワーク１１６につなぐネットワークコントローラを含む。
【００３６】
センサ１１０は、物理量を測定し、その物理量の測定結果を信号に変換するように適応された装置である。例えば、センサ１１０は、自動車内部の温度を測定し、その測定結果を信号に変換するサーモスタットである。物理量の非限定的な例として、温度、応力、圧力、力、光、音などが挙げられる。センサ１１０の非限定的な例として、圧力感知センサ、温度感知センサ、音感知センサ、力感知センサ、光感知センサなどが挙げられる。
【００３７】
１つの実施形態では、センサ１１０は、アクチュエータ１１２を監視し、監視結果を示す信号を生成する。センサ１１０は、信号を制御部１０２に送信する。例えば、センサ１１０は、信号を制御部１０２にリアルタイムで送信する。制御部１０２は、信号を受信し、該信号に少なくとも部分的に基づいてアクチュエータ１１２を制御する。例えば、制御部１０２は、センサ１１０から受信された信号に少なくとも部分的に基づいて弁の調節を制御する。１つの実施形態では、センサ１１０は、制御部１０２によってサポートされているフォーマットに信号をエンコードする。例えば、センサ１１０は、２進コードを使用して信号をエンコードする。
【００３８】
アクチュエータ１１２は、自動車における力を移動させる又は制御するための装置である。１つの実施形態では、アクチュエータ１１２は、自動車における機械的コンポーネント、電気的コンポーネント、又は機械的コンポーネントと電気的コンポーネントとの組み合わせを含む。アクチュエータ１１２の非限定的な例として、燃料噴射器、スパークプラ
グ、スロットル調整器、電子制御式の弁などが挙げられる。１つの実施形態では、アクチュエータ１１２は、制御部１０２によって制御される。
【００３９】
記憶装置１１４は、制御部１０２の機能を提供するために制御部１０２によって使用されるデータ及び情報を保存する非一時的なコンピュータ可読ストレージ媒体である。例えば、記憶装置１１４は、プロセッサ１０４において命令が実行されるときに発生する１つ以上のエラーやそれらのエラーを招く故障コンポーネントの識別子などを記述する情報を含むログを保存する。ログに含まれる情報は、「ログ情報」と称される。１つの実施形態では、記憶装置１１４は、本明細書で説明される機能を提供するために、センサ１１０、アクチュエータ１１２、外部システム１１８などから受信されるデータなどのその他の情報を保存する。
【００４０】
１つの実施形態では、記憶装置１１４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）装置、スタティックランダムアクセスメモリ（ＳＲＡＭ）装置、フラッシュメモリ、又は当該分野で知られるその他の何らかのメモリ装置である。別の実施形態では、記憶装置１１４は、ハードディスクドライブ、フロッピィディスクドライブ、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）装置、デジタル多用途ディスク読み出し専用メモリ（ＤＶＤ−ＲＯＭ）装置、デジタル多用途ディスクランダムアクセスメモリ（ＤＶＤ−ＲＡＭ）、書き換え可能デジタル多用途ディスク（ＤＶＤ−ＲＷ）装置、フラッシュメモリ装置、又は当該分野で知られるその他の何らかの不揮発性記憶装置などの、不揮発性メモリ又は同様の永久記憶装置及び媒体も含む。
【００４１】
ネットワーク１１６は、有線又は無線の、従来のタイプのネットワークであり、スター型構成、トークンリング構成、又は当業者に知られるその他の構成などの、任意の数の構成を含みうる。１つの実施形態では、ネットワーク１１６は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）（例えばインターネット）、及び／又は複数の装置がそれを通して通信し合うその他の任意の相互接続データ経路のうちの、１つ又は２つを含む。別の実施形態では、ネットワーク１１６は、ピアツーピアネットワークである。ネットワーク１１６は、データを種々様々な通信プロトコルで送信するために、電気通信ネットワークにつながれる又は電気通信ネットワークの部分を含む。例えば、ネットワークは、３Ｇネットワーク又は４Ｇネットワークである。更に別の実施形態では、ネットワーク１１６は、ショートメッセージングサービス（ＳＭＳ）、マルチメディアメッセージングサービス（ＭＭＳ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、直接データ接続、ワイヤレスアプリケーションプロトコル（ＷＡＰ）、ｅ−ｍａｉｌなどを介するなどしてデータを送受信するための、Ｂｌｕｅｔｏｏｔｈ（登録商標）通信ネットワーク又はセルラ式通信ネットワークを含む。更に別の実施形態では、ネットワーク１１６のなかのリンクの全部又は一部が、セキュアソケットレイヤ（ＳＳＬ）、セキュアＨＴＴＰ、及び／又は仮想プライベートネットワーク（ＶＰＮ）などの、従来の暗号化技術を使用して暗号化される。
【００４２】
外部システム１１８は、ネットワーク１１６を通じて制御部１０２と通信するシステムである。制御部１０２は、記憶装置１１４から情報（例えばログ情報）を読み出し、ネットワーク１１６を通じて外部システム１１８に送信する。１つの実施形態では、外部システム１１８は、複数の自動車に埋め込まれた制御部１０２から受信された情報を保存するデータベースを含む。別の実施形態では、外部システム１１８は、ストレージ１１４のためのバックアップとして機能する記憶装置を含む。その他の実施形態では、外部システム１１８は、受信された情報を処理し、１つ以上のレポートを作成する。例えば、外部システム１１８は、ある種のエラーに関連したログ情報を集め、それらのエラーの集合を記述するレポートを外部システム１１８の管理者に対して作成する。
【００４３】
フォールトトレラントプロセッサ
図２は、１つの実施形態にしたがったフォールトトレラントプロセッサ１０４を示したブロック図である。プロセッサ１０４は、なかでも特に、コアＡ２０１と、コアＢ２０３と、コアＮ２０５と、入出力インタフェース２０７と、フォールトトレラントモジュール２０９と、メモリ２１１と、スイッチマトリクス２１３とを含む。コアＡ２０１、コアＢ２０３、及びコアＮ２０５は、例として示されている。当業者ならば、プロセッサ１０４が任意の数のコアを含みうることがわかるだろう。当業者ならば、ファームウェア、デジタルロジック、及びオンチップストレージなどの追加のコンポーネントがプロセッサ１０４に含まれうることもわかるだろう。
【００４４】
コアＡ２０１は、コンピュータプログラムのための命令を読み出す及び実行する装置である。例えば、コアＡ２０１は、コンピュータにおける従来のプロセッサの従来のコアである。コアＡ２０１のブロック図の一例が、図４Ａに示されている。１つの実施形態では、コアＡ２０１は、命令の読み出し、実行、及び保存などの命令の処理のための複数の機能部を含む。機能部は、コアのなかで機能を実施するためのユニットである。例えば、機能部は、コアのなかで命令を保存するための電子回路である。１つの実施形態では、機能部は、パイプラインユニット、命令キャッシュ、命令デコーダ、命令キュー、プログラマブルロジックアレイ、スイッチマトリクス、及びレジスタなどの１つである。命令キャッシュ、命令デコーダ、命令キュー、プログラマブルロジックアレイ、スイッチマトリクス、及びレジスタは、図４Ａを参照にして後ほど説明される。
【００４５】
パイプラインユニットは、コアのなかの機能部であり、１つ以上のパイプラインステージを使用して命令を実行する。パイプラインステージは、命令を実行するための処理の一ステージである。例えば、パイプラインステージは、命令をフェッチすること、命令を実行すること、命令実行結果をバッファに入れること、命令実行結果をレジスタにライトバックすることの１つである。１つの実施形態では、パイプラインユニットは、１つ以上のパイプラインステージを実施するための１つ以上のステージユニットを含む。例えば、パイプラインユニットは、レジスタフェッチユニット、実行ユニット、データキャッシュ、及びライトバックユニットなどの１つ以上のステージユニットを含む。パイプラインユニットは、命令キューから命令をフェッチするためにレジスタフェッチユニットを使用し、命令を実行するために実行ユニットを使用し、命令実行結果をバッファに入れるためにデータキャッシュを使用し、命令実行結果をレジスタに保存するためにライトバックユニットを使用する。レジスタフェッチユニット、実行ユニット、データキャッシュ、及びライトバックユニットは、図４を参照にして後ほど更に詳しく説明される。
【００４６】
ステージユニットは、パイプラインステージを実装するユニットである。例えば、レジスタフェッチユニットは、命令をフェッチするというパイプラインステージを実施する。実行ユニットは、命令を実行するというパイプラインステージを実施する。データキャッシュは、命令実行結果をバッファに入れるというパイプラインステージを実施する。ライトバックユニットは、命令実行結果をレジスタにライトバックするというパイプラインステージを実施する。
【００４７】
１つの実施形態では、コアＡ２０１は、パイプライン技術を使用して実装される。パイプライン技術は、命令に対する実行プロセスを１つ以上のパイプラインステージに分けるための技術である。例えば、コアＡ２０１は、命令に対する実行プロセスを４つの順次パイプラインステージ（例えば、命令をフェッチすること、命令を実行すること、命令実行結果をバッファに入れること、命令実行結果をレジスタにライトバックすること）に分けるパイプラインユニットを含む。パイプラインユニットは、命令に対して４つのパイプラインステージを順次実施することによって命令を実行する。
【００４８】
パイプライン技術は、コアのなかの１つのパイプラインユニットが複数の命令を同時に処理することを可能にする。例えば、パイプラインユニットのレジスタフェッチユニットが命令キューから第１の命令をフェッチする間に、パイプラインユニットの実行ユニットが第２の命令を実行し、パイプラインユニットのデータキャッシュが第３の命令に対する命令実行結果をバッファに入れ、パイプラインユニットのライトバックユニットが第４の命令に対する命令実行結果をレジスタに書き込む。
【００４９】
別の実施形態では、コアＡ２０１は、スーパスカラアーキテクチャを使用して実装される。スーパスカラアーキテクチャは、コアが命令を並列に実行することを可能にするアーキテクチャである。例えば、スーパスカラアーキテクチャを有するコアＡ２０１は、３つ以上の命令実行ユニットを含み、各命令実行ユニットにおいて異なる命令を同時に実行することによって命令を並列に処理する。更なる例として、コアＡ２０１は、２つの命令実行ユニットを含み、第１の命令を第１の命令実行ユニットにおいて実行し、第２の命令を第２の命令実行ユニットにおいて実行する。命令実行ユニットは、命令を処理するための機能部である。例えば、命令実行ユニットは、パイプラインユニットである。当業者ならば、コアＡ２０１が、任意の数の命令を並列に処理するために任意の数の命令実行ユニットを含みうることがわかるだろう。
【００５０】
更に別の実施形態では、コアＡ２０１は、スーパスカラアーキテクチャ及びパイプライン技術を使用して実装される。コアＡ２０１は、したがって、スーパスカラパイプラインコアと呼ばれる。例えば、コアＡ２０１は、複数のパイプラインユニットを含む。複数のパイプラインユニットは、異なる命令を並列に処理するように構成され、各パイプラインユニットは、上述されたパイプライン技術を使用して命令を処理するようにも構成される。例えば、第１のパイプラインユニットは、パイプライン技術を使用して第１の命令セットを処理するように構成される。同時に、第２のパイプラインユニットは、パイプライン技術を使用して第２の命令セットを処理するように構成される。当業者ならば、各パイプラインユニットがパイプライン技術を使用して命令を処理するとして、コアＡ２０１が任意の数のパイプラインユニットを含みうることがわかるだろう。コアＡ２０１は、図４Ａを参照にして更に説明される。
【００５１】
スーパスカラアーキテクチャ及びパイプライン技術を使用してコアを実装するのが有益であるのは、なかでも特に、この実装が命令スループット（すなわち、単位時間あたりに実行される命令の数）を向上させるからである。また、この実装は、システム１００において命令を実行するためのフォールトトレラント方式を提供するためのオーバーヘッド時間も短縮させる。例えば、もし、コアの第１のパイプラインユニットにおける命令の実行時にエラーが発生したならば、その命令の実行は、そのコアの外の追加リソースに頼らずとも、同じコアのなかの第２のパイプラインユニットにおいて命令を実行することによって回復される。
【００５２】
コアＢ２０３及びコアＮ２０５は、コアＡ２０１と同様のユニットであり、コアＡ２０１と同様の機能性を提供する。コアＢ２０３及びコアＮ２０５に関する説明は、ここでは繰り返さない。プロセッサ１０４には複数のコアを実装することが有益であるのは、なかでも特に、複数のコアにおいて命令を並列に実行することによって、プロセッサ１０４の命令スループットが向上されるからである。また、複数のコアは、命令の実行において更なるフォールトトレランスを提供する。例えば、もし、第１のコアの第１のパイプラインユニットにおいて命令が実行されるときにエラーが発生したならば、その命令を、中断（interruption）を伴うことなく第２のコアの第２のパイプラインユニットに移して実行することができる。
【００５３】
入出力インタフェース２０７は、プロセッサ１０４と、１つ以上の入出力装置との間に
おける通信を扱う装置である。例えば、入出力インタフェース２０７は、１つ以上の入出力装置へデータを送信したり１つ以上の入出力装置からデータを受信したりする電子回路である。入出力装置は、キーボードやディスプレイなどの周辺装置である。１つの実施形態では、入出力インタフェース２０７は、周辺装置のアドレスを解釈し、ハンドシェイキングコマンドを使用して周辺装置との間でハンドシェイキングを実施し、プロセッサ１０４のコンポーネントと周辺装置との間で通信をセットアップする。１つの実施形態では、入出力インタフェース２０７は、インタフェース１０６内に含まれる。
【００５４】
フォールトトレラントモジュール２０９は、プロセッサ１０４にフォールトトレラント機能を提供するためのコード及びルーチンである。例えば、フォールトトレラントモジュール２０９は、プロセッサ１０４の１つ以上のコアにおいて命令が実行されるときにエラーを検出し、以下で説明されるフォールトトレラント機能を提供することによってそれらの命令の実行をエラーから回復させる。
【００５５】
１つの実施形態では、第１のコアの第１のパイプラインユニットのステージユニット（例えば実行ユニット）において命令が実行されるときに、第１のエラーが検出される。命令実行プロセスにおいてエラーを招いているステージユニットを、パイプラインユニットの「故障ステージユニット」と称する。エラーを招いていないその他のステージユニットは、パイプラインユニットの「非故障ステージユニット」と称する。１つの実施形態では、故障ステージユニットは、部分的に障害をきたしている。例えば、故障ステージユニットの１つあるいは数個のコンポーネントのみが誤動作し、エラーを引き起こしている。別の実施形態では、故障ステージユニットは、完全に障害をきたしている。例えば、故障ステージユニットの全てのコンポーネントが誤動作している。第１のエラーの検出に応えて、フォールトトレラントモジュール２０９は、命令を書き換え、書き換え版命令を生成する。フォールトトレラントモジュール２０９は、第１のコアの第１のパイプラインユニットにおいて書き換え版命令を実行する。
【００５６】
例えば、パイプラインユニットの実行ユニットにおいて命令が実行されているときに、エラーが検出されたとする。パイプラインユニットは、レジスタフェッチユニットと、実行ユニットと、データキャッシュと、ライトバックユニットとを含む。実行ユニットが、エラーが発生している故障ステージユニットである。レジスタフェッチユニット、データキャッシュ、及びライトバックユニットは、非故障ステージユニットである。フォールトトレラントモジュール２０９は、命令を書き換えて書き換え版命令を形成し、該書き換え版命令を、故障ステージユニット及びその他の非故障ステージユニットを含む第１のパイプラインユニットにおいて実行する。
【００５７】
もし、書き換え版命令が実行されたときに、第２のエラーが検出されたならば、フォールトトレラントモジュール２０９は、第１のコアの第２のパイプラインユニットから、故障ステージユニットに代わる第１の代替ステージユニットを選択する。代替ステージユニットは、故障ステージユニットの代替として機能するステージユニットであり、故障ステージユニットに代わって命令に対してパイプラインステージを実施する。例えば、もし、故障ステージユニットが第１のパイプラインユニットのなかの実行ユニットであるならば、故障ステージユニットに代わる代替ステージユニットは、第２のパイプラインユニットのなかの実行ユニットである。フォールトトレラントモジュール２０９は、第１のコアのなかの、第１のパイプラインユニットの非故障ステージユニット及び第２のパイプラインユニットの第１の代替ステージユニットにおいて命令を再実行する。
【００５８】
もし、第１のコアのなかの第２のパイプラインユニットの第１の代替ステージユニットにおいて命令が再実行されたときに、第３のエラーが検出されたならば、フォールトトレラントモジュール２０９は、第２のコアの第３のパイプラインユニットから、故障ステー
ジユニットに代わる第２の代替ステージユニットを選択する。フォールトトレラントモジュール２０９は、第１のコアのなかの第１のパイプラインユニットの非故障ステージユニット及び第２のコアのなかの第３のパイプラインユニットの第２の代替ステージユニットにおいて命令を再実行する。
【００５９】
もし、第２のコアのなかの第３のパイプラインユニットの第２の代替ステージユニットにおいて命令が再実行されたときに、第４のエラーが検出されたならば、フォールトトレラントモジュール２０９は、第１のコアのなかの第１のパイプラインユニットのどの非故障ステージユニットも使用せず、第２のコアの第３のパイプラインユニットにおいて命令を再実行する。
【００６０】
１つの実施形態では、フォールトトレラントモジュール２０９は、故障ステージユニットのなかの故障コンポーネントを見つけ、プログラマブルロジックアレイを使用して故障コンポーネントのためのフォールバックユニットを確立する。フォールバックユニットは、故障コンポーネントと同様な機能を提供する機能部である。例えば、故障コンポーネントは、乗算器であり、その故障コンポーネントのためのフォールバックユニットは、乗算器の機能を提供する。故障ステージユニットのなかの故障コンポーネントのためのフォールバックユニットを確立した後、フォールトトレラントモジュール２０９は、故障コンポーネントをフォールバックユニットに置き換えることによって、故障ステージユニットを含むパイプラインユニットにおいて次以降の命令を引き続き実行する。フォールトトレラントモジュール２０９は、図３を参照にして以下で更に詳しく説明される。
【００６１】
メモリ２１１は、プロセッサ１０４のコアＡ２０１、コアＢ２０３、及びコアＮ２０５などの１つ以上のコアによって実行可能な命令及び／又はデータを保存する非一時的なコンピュータ可読メモリである。１つの実施形態では、メモリ２１１は、各種の不揮発性オンチップ記憶装置を含む。記憶装置の非限定例として、Ｌ２／Ｌ３キャッシュ、命令キャッシュ、データキャッシュユニット、及びレジスタファイルが挙げられる。ストレージユニットは、本明細書では「オンチップストレージ」と総称される。
【００６２】
スイッチマトリクス２１３は、命令の実行を第１のコアから第２のコアに切り替えるための装置である。例えば、スイッチマトリクス２１３は、コアＡ２０１、コアＢ２０３、及びコアＮ２０５の間で任意にデータをルーティングするための電子回路である。更なる例として、コアＡ２０１における命令の実行プロセスにおいてエラーが検出されたときは、スイッチマトリクス２１３は、命令の実行をコアＡ２０１からコアＢ２０３に切り替える。１つの実施形態では、スイッチマトリクス２１３は、プロセッサ１０４のコンポーネント（例えば入出力インタフェース２０７やコアＡ２０１など）の間でデータ及び／又は信号を通信するためのバスも含む。プロセッサ１０４のコンポーネントは、バスを通じて互いと通信可能に接続されている。
【００６３】
フォールトトレラントモジュール
次に、フォールトトレラントモジュール２０９がより詳しく示された図３を参照する。図３は、１つの実施形態にしたがったフォールトトレラントモジュール２０９を示したブロック図である。フォールトトレラントモジュール２０９は、通信モジュール３０１と、エラー検出器３０３と、故障ロケータ３０５と、書き換えモジュール３０７と、回復エンジン３０９と、フォールバックプログラミングモジュール３１１とを含む。フォールトトレラントモジュール２０９のこれらのコンポーネントは、バス３２０を通じて互いに通信可能に接続されている。１つの実施形態では、バス３２０は、スイッチマトリックス２１３に含まれる。
【００６４】
通信モジュール３０１は、フォールトトレラントモジュール２０９のコンポーネントと
、プロセッサ１０４のその他のコンポーネントとの間における通信を扱うためのコード及びルーチンである。例えば、通信モジュール３０１は、フォールトトレラントモジュール２０９のその他のコンポーネントからのデータ及び／又は情報（例えば回復エンジン３０９からのコマンド）を受信し、プロセッサ１０４の１つ以上のコア（例えばコアＡ２０１やコアＢ２０３など）に送信する。１つの実施形態では、通信モジュール３０１は、プロセッサ１０４のオンチップストレージ（例えばメモリ２１１）に保存されている。通信モジュール３０１は、信号線３２２を通じてバス３２０と通信可能に接続されている。
【００６５】
１つの実施形態では、通信モジュール３０１は、プロセッサ１０４の１つ以上のコアからデータ及び／又は情報を受信し、フォールトトレラントモジュール２０９のその他のコンポーネントに送信する。別の実施形態では、通信モジュール３０１は、フォールトトレラントモジュール２０９のコンポーネント間における通信も扱う。例えば、通信モジュール３０１は、エラー検出器３０３によって生成されたエラー信号を書き換えモジュール３０７に送るために、エラー検出器３０３及び書き換えモジュール３０７と通信する。
【００６６】
エラー検出器３０３は、命令を実行するプロセスを監視し、そのプロセスにおいて発生するエラーを検出するためのコード及びルーチンである。例えば、エラー検出器３０３は、コアＡ２０１における命令の実行を監視し、その命令の実行中にエラーが発生したかどうかを決定する。１つの実施形態では、エラー検出器３０３は、プロセッサ１０４のオンチップストレージ（例えばメモリ２１１）に保存されている。エラー検出器３０３は、信号線３２４を通じてバス３２０と通信可能に接続されている。
【００６７】
１つの実施形態では、エラー検出器３０３は、コア（例えばコアＡ２０１やコアＢ２０３など）のパイプラインユニットにおいて命令が実行されるときのエラーを検出する。エラー検出器３０３は、エラーが発生している故障ステージユニットを決定する。上述されたように、エラーが発生しているステージユニットは、故障ステージユニットと称され、パイプラインユニットのなかのその他のステージユニットは、非故障ステージユニットと称される。例えば、エラー検出器３０３は、コアＡ２０１のなかのパイプラインユニットの実行ユニットにおいて命令が実行されるときに発生するエラーを検出し、実行ユニットのなかに故障ステージユニットがあることを決定する。１つの実施形態では、エラー検出器３０３は、エラー検出コード、シグニチャデータ、命令実行反復、ハッシュ関数などのエラー検出方法を使用してエラーを検出する。当業者ならば、エラー検出器３０３が、エラーを検出するためにその他のエラー検出技術も適用してもよいことがわかるだろう。
【００６８】
１つの実施形態では、エラー検出器３０３は、命令が複数回にわたって再実行されるときに、その命令に関連する複数のエラーを検出する。例えば、エラー検出器３０３は、命令がコアの第１のパイプラインユニットにおいて実行されるときに第１のエラーを、命令が同コアの第２のパイプラインユニットにおいて再実行されるときに第２のエラーを、命令が別のコアの第３のパイプラインユニットにおいて実行されるときに第３のエラーを検出する。当業者ならば、エラー検出器３０３が、１つの命令に関連してエラーが発生しうる限り任意の数のエラーを検出できることがわかるだろう。１つの実施形態では、エラー検出器３０３は、１つの命令を処理する際に発生したエラーの数を数えるためのエラーカウンタを含む。例えば、２の値を有するエラーカウンタは、命令を２回実行したときに２つのエラーが検出されたことを示す。
【００６９】
１つの実施形態では、エラー検出器３０３は、エラーを検出したときの出力としてエラー信号を生成する。エラー信号は、コアのなかのパイプラインユニットの故障ステージユニットにおいて命令が実行されたときにエラーが検出されたことを示す。１つの実施形態では、エラー信号は、エラーの識別子、故障ステージユニットの識別子、パイプラインユニットの識別子、及びコアの識別子のうちの１つ以上を含む。例えば、もし、エラー検出
器３０３が、コアＡ２０１のなかのパイプラインユニットの実行ユニットにおいて命令が実行されているときにエラーを検出したならば、エラー検出器３０３は、エラーの識別子と、故障ステージユニット（例えば実行ユニット）の識別子と、パイプラインユニットの識別子と、コアＡ２０１の識別子とを含むエラー信号を生成する。１つの実施形態では、エラー信号は、エラーカウンタの値も含む。１つの実施形態では、エラー検出器３０３は、故障ロケータ３０５、書き換えモジュール３０７、及び回復エンジン３９０のうちの１つ以上に対してエラー信号を出力する。
【００７０】
故障ロケータ３０５は、パイプラインユニットの故障コンポーネントを見つけるためのコード及びルーチンである。パイプラインユニットの故障コンポーネントは、パイプラインユニットのなかの故障ステージユニットの、エラーを招いているコンポーネントである。例えば、故障ロケータ３０５は、エラーが乗算器によって招かれたものであれば、パイプラインユニットの故障コンポーネントを、パイプラインユニットのなかの故障ステージユニット（例えば実行ユニット）の乗算器として識別する。１つの実施形態では、故障ロケータ３０５は、プロセッサ１０４のオンチップストレージに保存されている。故障ロケータ３０５は、信号線３２６を通じてバス３２０と通信可能に接続されている。１つの実施形態では、故障ロケータ３０５は、エラー検出器３０３から受信されたエラー信号を解析し、該エラー信号から、故障ステージユニットの識別子、パイプラインユニットの識別子、及びコアの識別子のうちの１つ以上を抽出する。
【００７１】
１つの実施形態では、故障ロケータ３０５は、モデルベースの技術を使用してパイプラインユニットの故障コンポーネントを見つける。モデルベースの技術の非限定的な例として、オブザーバを利用する手法、パリティスペース手法、パラメータ識別に基づく方法などが挙げられる。別の実施形態では、故障ロケータ３０５は、ビルトインセルフテスト（ＢＩＳＴ）を使用してパイプラインユニットの故障コンポーネントを見つける。当業者ならば、パイプラインユニットの故障コンポーネントを見つけるためのその他の技術が可能であることがわかるだろう。当業者ならば、また、故障ロケータ３０５がパイプラインユニットのなかの任意の数の故障コンポーネントを見つけられることもわかるだろう。
【００７２】
１つの実施形態では、故障ロケータ３０５は、パイプラインユニットの故障コンポーネントの識別子をフォールバックプログラミングモジュール３１１に対して出力する。例えば、故障ロケータ３０５は、コアのなかのパイプラインユニットの実行ユニットのなかの故障乗算器を識別する識別子をフォールバックプログラミングモジュール３１１に送信する。
【００７３】
書き換えモジュール３０７は、命令を書き換えて書き換え版命令を生成するためのコード及びルーチンである。命令及び書き換え版命令は、同じ動作を実施するための、形態の異なる命令である。例えば、書き換えられる命令が「乗算」命令であれば、乗算演算を実施するために加算とシフト演算との組み合わせを含む書き換え版命令を形成するように書き換えられる。１つの実施形態では、書き換えモジュール３０７は、エラー検出器３０３からエラー信号が受信されたときに、命令を書き換えて書き換え版命令を生成する。別の実施形態では、書き換えモジュール３０７は、回復エンジン３０９から書き換えコマンドが受信されたときに、命令を書き換えて書き換え版命令を形成する。回復エンジン３０９は、後ほど更に詳しく説明される。
【００７４】
命令を書き換えてその命令の書き換え版命令を生成する理由は、それらの命令及び書き換え版命令が、パイプラインユニットのなかの異なるコンポーネントによって処理されうるからである。もし、パイプラインユニットのなかの故障コンポーネントによってエラーが招かれたならば、書き換え版命令は故障コンポーネントとは異なるコンポーネントによって処理されるので、書き換え版命令を処理することによってそのエラーを回避すること
ができる。例えば、乗算器によって招かれたエラーは、「乗算」命令を加算とシフト演算との組み合わせを含む書き換え版命令に書き換えることによって回避される。書き換え版命令は、加算を実施する加算器と、シフト演算を実施するビットシフタとによって処理されるので、故障乗算器は、書き換え版命令の実行において使用されない。命令を書き換えること及び書き換え版命令を処理することによって、書き換え版命令は、追加リソースに頼らずとも、同じコアのなかの同じパイプラインユニットによって処理されるので、システム１００は、故障コンポーネントによって招かれたエラーから、最小限のオーバーヘッド時間で回復することができる。
【００７５】
１つの実施形態では、書き換えモジュール３０７は、プロセッサ１０４のオンチップストレージに保存されている。書き換えモジュール３０７は、信号線３２８を通じてバス３２０と通信可能に接続されている。１つの実施形態では、書き換えモジュール３０７は、バス３２０を通じて回復エンジン３０９に対して書き換え版命令を出力する。
【００７６】
回復エンジン３０９は、１つ以上のエラーから命令の実行を回復させるためのコード及びルーチンである。例えば、回復エンジン３０９は、エラー検出器３０３からエラー信号を受信し、命令の実行を以下で説明されるようにエラーから回復させる。１つの実施形態では、回復エンジン３０９は、上述されたエラー検出器３０３に含まれるエラーカウンタと同様な、命令に関連するエラーの数を数えるためのエラーカウンタを含む。例えば、エラーカウンタの或る数は、命令を２回実行したときに２つのエラーが発生したことを示す。１つの実施形態では、回復エンジン３０９は、エラー検出器３０３のエラーカウンタに保存されている値に少なくとも部分的に基づいて、エラーカウンタの値を更新する。１つの実施形態では、回復エンジン３０９は、プロセッサ１０４のオンチップストレージに保存されている。回復エンジン３０９は、信号線３３０を通じてバス３２０と通信可能に接続されている。
【００７７】
回復エンジン３０９は、以下で、例を挙げて説明される。例では、回復エンジン３０９は、第１のコア及び第２のコアにおいて命令を実行するためのフォールトトレランスを提供する。第１のコアは、第１のパイプラインユニットと、第２のパイプラインユニットとを含む。第２のコアは、第３のパイプラインユニットと、第４のパイプラインユニットとを含む。当業者ならば、回復エンジン３０９が、任意の数のパイプラインユニットを含む任意の数のコアにフォールトトレランスを提供しうることがわかるだろう。
【００７８】
１つの実施形態では、回復エンジン３０９は、第１のコアのなかの第１のパイプラインユニットの故障ステージユニットにおいて命令を実行したときに第１のエラーが発生したことを示す第１のエラー信号を、エラー検出器３０３から受信する。その命令が実行されたのは、これが初めてである。回復エンジン３０９は、エラー信号から、故障ステージユニットの識別子を取り出す。回復エンジン３０９は、第１のコアの第１のパイプラインユニットにおいて命令を再実行する。例えば、回復エンジン３０９は、コマンドを生成して第１のコアに送信し、第１のコアに、第１のコアのなかの第１のパイプラインユニットの故障ステージユニット及びその他の非故障ステージユニットにおいて命令を再実行させる。同じコアの同じパイプラインユニットにおけるこの命令の再実行は、ハードウェアの欠陥によって招かれたのではない一時的に発生する一時誤りから命令の実行を回復させる。１つの実施形態では、もし、第１のコアの第１のパイプラインユニットにおいて命令を再実行しているときに、他に何もエラー信号が受信されなかったならば、回復エンジン３０９は、次以降の命令を第１のコアの第１のパイプラインユニットにおいて引き続き実行する。例えば、回復エンジン３０９は、コマンドを生成して第１のコアに送信し、第１のコアに、第１のパイプラインユニットにおいて次以降の命令を実行させる。
【００７９】
１つの実施形態では、回復エンジン３０９は、第１のコアのなかの第１のパイプライン
ユニットの故障ステージユニットにおいて命令を再実行したときに第２のエラーが発生したことを示す第２のエラー信号を、エラー検出器３０３から受信する。回復エンジン３０９は、書き換えコマンドを生成し、書き換えモジュール３０７に送信する。書き換えコマンドは、命令を書き換えて書き換え版命令を生成するように書き換えモジュール３０７に指示するものである。回復エンジン３０９は、書き換えモジュール３０７から書き換え版命令を受信し、その書き換え版命令を第１のコアの第１のパイプラインユニットにおいて実行する。例えば、回復エンジン３０９は、コマンドを生成して第１のコアに送信し、第１のコアに、第１のパイプラインユニットの故障ステージユニット及びその他の非故障ステージユニットにおいて書き換え版命令を実行させる。この書き換え版命令の実行は、故障ステージユニットの部分的障害によって招かれたエラーから、命令の実行を回復させる。例えば、「乗算」命令の書き換え版命令の実行は、実行ユニットの故障乗算器によって招かれたエラーから、命令の実行を回復させる。
【００８０】
１つの実施形態では、もし、第１のパイプラインユニットにおいて書き換え版命令を実行したときに、他に何もエラー信号が受信されなかったならば、回復エンジン３０９は、次以降の命令を第１のコアの第１のパイプラインユニットにおいて引き続き実行する。例えば、回復エンジン３０９は、次以降の命令を書き換えて書き換え版命令を生成するように、書き換えモジュール３０７に指示する。回復エンジン３０９は、次以降の命令の書き換え版命令を第１のコアの第１のパイプラインユニットにおいて実行する。回復エンジン３０９は、また、故障ステージユニットのなかの、エラーを招いている故障コンポーネントを故障ロケータ３０５が見つけられるように、故障ステージユニットの識別子を故障ロケータ３０５に送信する。
【００８１】
１つの実施形態では、回復エンジン３０９は、第１のパイプラインユニットの故障ステージユニットにおいて書き換え版命令を実行したときに第３のエラーが発生したことを示す第３のエラー信号を、エラー検出器３０３から受信する。回復エンジン３０９は、第１のコアのなかの第２のパイプラインユニットから、故障ステージユニットに代わる第１の代替ステージユニットを選択する。例えば、もし、故障ステージユニットが、第１のコアの第１のパイプラインユニットのなかの実行ユニットであるならば、回復モジュール３０９は、故障ステージユニットに代わる第１の代替ステージユニットとして、第１のコアの第２のパイプラインユニットのなかの実行ユニットを選択する。１つの実施形態では、回復エンジン３０９は、第１のパイプラインユニットにおいて実行される命令が、第１のコアの第２のパイプラインユニットにおいて実行される命令よりも高い優先度を有するかどうかを決定する。もし、第１のパイプラインユニットにおいて実行される命令のほうが、高い優先度を有するならば、回復エンジン３０９は、第１のコアのなかの第２のパイプラインユニットから第１の代替ステージユニットを選択する。そうでなければ、回復エンジン３０９は、第１のコアのなかのその他のパイプラインユニットから、故障ステージユニットに代わる第１の代替ステージユニットを選択する。
【００８２】
回復エンジン３０９は、第１のコアの、第２のパイプラインユニットのなかの第１の代替ステージユニット及び第１のパイプラインユニットのなかのその他の非故障ステージユニットを使用して、命令を再実行する。例えば、故障ステージユニットが第１のコアの第１のパイプラインユニットのなかの実行ユニットであるとする。回復エンジン３０９は、コマンドを生成して第１のコアに送信し、第１のコアのなかの、第１のパイプラインユニットの非故障ステージユニット（例えばレジスタフェッチユニット、データキャッシュ、ライトバックユニットなど）及び第２のパイプラインユニットの第１の代替ステージユニット（例えば実行ユニット）において命令を再実行させる。同じコアのなかの異なるパイプラインユニットからの代替ステージユニットを使用した、この命令の再実行の一例が、図４Ａに示されている。
【００８３】
１つの実施形態では、もし、第１のコアのなかの、第２のパイプラインユニットの第１の代替ステージユニット及び第１のパイプラインユニットのその他の非故障ステージユニットを使用して命令を再実行したときに、他に何もエラー信号が受信されなかったならば、回復エンジン３０９は、次以降の命令を引き続き実行する。例えば、回復エンジン３０９は、第１のコアのなかの、第２のパイプラインユニットの第１の代替ステージユニット及び第１のパイプラインユニットのその他の非故障ステージユニットを使用して、次以降の命令を実行する。回復エンジン３０９は、また、故障ステージユニットのなかの、エラーを招いている故障コンポーネントを故障ロケータ３０５が見つけられるように、故障ステージユニットの識別子を故障ロケータ３０５に送信する。
【００８４】
１つの実施形態では、回復エンジン３０９は、第１のコアのなかの、第２のパイプラインユニットの第１の代替ステージユニット及び第１のパイプラインユニットのその他の非故障ステージユニットにおいて命令を再実行したときに第４のエラーが発生したことを示す第４のエラー信号を、エラー検出器３０３から受信する。回復エンジン３０９は、第２のコアのなかの第３のパイプラインユニットから、故障ステージユニットに代わる第２の代替ステージユニットを選択する。例えば、もし、故障ステージユニットが、第１のコアの第１のパイプラインユニットのなかの実行ユニットであるならば、回復モジュール３０９は、故障ステージユニットに代わる第２の代替ステージユニットとして、第２のコアの第３のパイプラインユニットのなかの実行ユニットを選択する。１つの実施形態では、回復エンジン３０９は、第１のパイプラインユニットにおいて実行される命令が、第２のコアの第３のパイプラインユニットにおいて実行される命令よりも高い優先度を有するかどうかを決定する。もし、第１のパイプラインユニットにおいて実行される命令のほうが、高い優先度を有するならば、回復エンジン３０９は、第２のコアのなかの第３のパイプラインユニットから、故障ステージユニットに代わる第２の代替ステージユニットを選択する。そうでなければ、回復エンジン３０９は、第２のコアのなかのその他のパイプラインユニットから第２の代替ステージユニットを選択する。
【００８５】
回復エンジン３０９は、第２のコアのなかの第３のパイプラインユニットの第２の代替ステージユニット及び第１のコアのなかの第１のパイプラインユニットのその他の非故障ステージユニットを使用して、命令を再実行する。例えば、故障ステージユニットが、第１のコアの第１のパイプラインユニットのなかの実行ユニットであるとする。回復エンジン３０９は、コマンドを生成して第１のコア及び第２のコアに送信し、これらのコアに、第１のコアのなかの第１のパイプラインユニットの非故障ステージユニット（例えばレジスタフェッチユニット、データキャッシュ、ライトバックユニットなど）及び第２のコアのなかの第３のパイプラインユニットの第２の代替ステージユニット（例えば実行ユニット）において、命令を再実行させる。別のコアのなかの異なるパイプラインユニットからの代替ステージユニットを使用した、この命令の再実行の一例が、図４Ｂに示されている。
【００８６】
１つの実施形態では、もし、第２のコアのなかの第３のパイプラインユニットの第２の代替ステージユニット及び第１のコアのなかの第１のパイプラインユニットのその他の非故障ステージユニットを使用して命令を再実行したときに、他に何もエラー信号が受信されなかったならば、回復エンジン３０９は、次以降の命令を引き続き実行する。例えば、回復エンジン３０９は、第２のコアのなかの第３のパイプラインユニットの第２の代替ステージユニット及び第１のコアのなかの第１のパイプラインユニットのその他の非故障ステージユニットを使用して、次以降の命令を実行する。回復エンジン３０９は、故障ステージユニットのなかの、エラーを招いている故障コンポーネントを故障ロケータ３０５が見つけられるように、故障ステージユニットの識別子を故障ロケータ３０５に送信する。
【００８７】
１つの実施形態では、回復エンジン３０９は、第２のコアのなかの第３のパイプライン
ユニットの第２の代替ステージユニット及び第１のコアのなかの第１のパイプラインユニットのその他の非故障ステージユニットにおいて命令を再実行したときに第５のエラーが発生したことを示す第５のエラー信号を、エラー検出器３０３から受信する。回復エンジン３０９は、第１のコアのなかのどのステージユニットも利用せずに、第２のコアの第３のパイプラインユニットのなかの１つ以上のステージユニットを使用して命令を再実行する。例えば、もし、第２のコアの第３のパイプラインユニットの実行ユニットにおいて命令を実行しているときに、エラーが発生したならば、回復エンジン３０９は、「命令をフェッチする」、「命令を実行する」、「命令実行結果をバッファに入れる」、「命令実行結果をライトバックする」などのパイプラインステージを実施するために、第２のコアのなかの第３のパイプラインユニットの１つ以上のステージユニットを使用して、命令を再実行する。１つの実施形態では、回復エンジン３０９は、第１のパイプラインユニットにおいて実行される命令が、第２のコアの第３のパイプラインユニットにおいて実行される命令よりも高い優先度を有するかどうかを決定する。もし、第１のパイプラインユニットにおいて実行される命令のほうが、高い優先度を有するならば、回復エンジン３０９は、第２のコアの第３のパイプラインユニットのなかの１つ以上のステージユニットを使用して、命令を再実行する。
【００８８】
１つの実施形態では、もし、第２のコアの第３のパイプラインユニットを使用して命令を再実行したときに、他に何もエラー信号が受信されなかったならば、回復エンジン３０９は、次以降の命令を引き続き実行する。例えば、回復エンジン３０９は、第２のコアのなかの第３のパイプラインユニットを使用して、次以降の命令を実行する。回復エンジン３０９は、また、故障ステージユニットのなかの、エラーを招いている故障コンポーネントを故障ロケータ３０５が見つけられるように、故障ステージユニットの識別子を故障ロケータ３０５に送信する。
【００８９】
命令の実行をエラーから回復させるために回復エンジン３０９によって実施される上述された機能性は、階層スケジューリング方法（hierarchical scheduling method）と称される。階層スケジューリング方法は、１つ以上のコアにおいて命令を実行するためのフォールトトレラント方式を提供する。階層スケジューリング方法は、とりわけ、故障ステージユニットにできるだけ近いリソースを使用して命令の再実行を試みることによって命令の実行をエラーから回復させるためのオーバーヘッド時間を短縮できるので、好都合である。例えば、上述されたように、回復エンジン３０９は、先ず、同じコアのなかの異なるパイプラインユニットから代替ステージユニットを選択する。命令の再実行が再び失敗したときにのみ、回復エンジン３０９は、異なるコアのなかのパイプラインユニットから別の代替ステージユニットを選択する。
【００９０】
１つの実施形態では、回復エンジン３０９は、上記の階層スケジューリング方法に少なくとも部分的に基づいて、１つ以上のコアにおいて命令を実行するためのフォールトトレランスを提供する。しかしながら、その他の実施形態では、回復エンジン３０９は、その他の方法を使用して、１つ以上のコアにおいて命令を実行するためのフォールトトレランスを提供する。例えば、第１のコアの第１のパイプラインユニットにおいて命令を実行したときにエラーが検出される限り、回復エンジン３０９は、階層スケジューリング方法の段階をたどることなく直接、第２のコアの第２のパイプラインユニットにおいて命令を再実行する。
【００９１】
１つの実施形態では、回復エンジン３０９は、１つ以上の検出されたエラーと、エラーを検出された故障ステージユニットとを記述したログ情報を生成する。１つの実施形態では、回復エンジン３０９は、ログ情報を記憶装置１１４に保存する。別の実施形態では、回復エンジン３０９は、ログ情報を外部システム１１８に保存する。
【００９２】
フォールバックプログラミングモジュール３１１は、パイプユニットの故障コンポーネントのためのフォールバックユニットを確立するためのコード及びルーチンである。１つの実施形態では、フォールバックプログラミングモジュール３１１は、プロセッサ１０４のオンチップストレージに保存されている。フォールバックプログラミングモジュール３１１は、信号線３３２を通じてバス３２０と通信可能に接続されている。１つの実施形態では、フォールバックプログラミングモジュール３１１は、パイプラインユニットの故障コンポーネントについての識別子を故障ロケータ３０５から受信する。フォールバックプログラミングモジュール３１１は、パイプラインユニットの故障コンポーネントを１つ以上のプログラマブルロジックアレイ（ＰＬＡ）に置き換えることによって新しい命令処理経路が確立されるように、１つ以上のＰＬＡを再構成して、パイプラインユニットの故障コンポーネントの機能性を実現する。
【００９３】
例えば、フォールバックプログラミングモジュール３１１は、コアＡ２０１のなかのパイプラインユニットの実行ユニットのなかの故障乗算器を識別する識別子を受信する。フォールバックプログラミングモジュール３１１は、乗算器の機能性を実現するようにＰＬＡをプログラムし、そのＰＬＡを、コアＡ２０１のなかのパイプラインユニットにおいて命令を実行するときに故障乗算器に置き換えて使用する。命令を実行するための新しい命令処理経路は、故障コンポーネントをＰＬＡで置き換えられた故障ステージユニットと、コアＡ２０１のなかのパイプラインユニットのその他の非故障ステージユニットとを含む。ＰＬＡは、図４Ａを参照にして後ほど更に詳しく説明される。
【００９４】
１つの実施形態では、フォールバックプログラミングモジュール３１１は、パイプラインユニットの故障コンポーネントについての識別子と、命令処理経路とを含むログ情報を記録する。１つの実施形態では、フォールバックプログラミングモジュール３１１は、ログ情報をストレージ１１４に保存する。別の実施形態では、フォールバックプログラミングモジュール３１１は、ログ情報を外部システム１１８に保存する。
【００９５】
フォールトトレランスの例
図４Ａは、１つの実施形態にしたがった、コアＡ２０１のなかの２つのパイプラインユニット間におけるフォールバックを示したブロック図４００である。例示の実施形態では、コアＡ２０１は、なかでも特に、命令キャッシュ４０１と、命令デコーダ４０２と、命令キュー４０４と、レジスタ４１１ａと、レジスタ４１１ｂと、プログラマブルロジックアレイ（ＰＬＡ）４１３と、スイッチマトリクス４１５と、パイプラインユニット４３５ａと、パイプラインユニット４３５ｂとを含む。図４Ａには、２つのパイプラインユニット４３５ａ及び４３５ｂのみが示されているが、当業者ならば、コアＡ２０１が任意の数のパイプラインユニットを含みうることがわかるだろう。
【００９６】
命令キャッシュ４０１は、命令を保存するための機能部である。例えば、命令キャッシュ４０１は、命令を一時的に保存するための、コアに組み込まれた従来のキャッシュである。１つの実施形態では、命令の処理を迅速にするために、命令は、メモリ２１１からフェッチされて命令キャッシュ４０１に保存される。
【００９７】
命令デコーダ４０２は、命令を復号するための機能部である。例えば、命令デコーダ４０２は、命令を復号する電子回路である。１つの実施形態では、命令デコーダ４０２は、命令キャッシュ４０１から命令を受信し、該命令をコアＡ２０１によって実行可能な形態に復号し、該復号された命令を命令キュー４０４に送信する。
【００９８】
命令キュー４０４は、復号された命令を保存するための機能部である。例えば、命令キュー４０４は、復号された命令を一時的に保存する、コアに含まれた従来のキャッシュである。１つの実施形態では、命令キュー４０４は、命令デコーダ４０２から１つ以上の命
令を受信して、キューに保存する。
【００９９】
１つの実施形態では、パイプラインユニット４３５ａは、レジスタフェッチユニット４０３ａ、実行ユニット４０５ａ、データキャッシュ４０７ａ、及びライトバックユニット４０９ａなどの、１つ以上のステージユニットを含む。
【０１００】
レジスタフェッチユニット４０３ａは、命令をフェッチするためのステージユニットである。例えば、レジスタフェッチユニット４０３ａは、「命令をフェッチする」というパイプラインステージを実施するための電子回路である。１つの実施形態では、レジスタフェッチユニット４０３ａは、命令キュー４０４から命令をフェッチして、一時的に保存する。
【０１０１】
実行ユニット４０５ａは、命令を実行するためのステージユニットである。例えば、実行ユニット４０５は、「命令を実行する」というパイプラインステージを実施するための電子回路である。１つの実施形態では、実行ユニット４０５ａは、１つ以上の算術演算（例えば加算、減算、乗算など）、及び／又は１つ以上の論理演算（例えばＡＮＤ、ＯＲ、ＮＡＮＤ、ＮＯＲなど）を実施するための、１つ以上の機能部を含む。例えば、実行ユニット４０５ａは、乗算器、加算器、ビットシフタ、並びに算術演算及び論理演算を実施するためのその他のコンポーネントを含む。１つの実施形態では、実行ユニット４０５ａは、算術論理演算ユニット（ＡＬＵ）を含む。１つの実施形態では、実行ユニット４０５ａは、レジスタフェッチユニット４０３ａから命令を取り出し、該命令を実行して命令実行結果を生成し、該命令実行結果をデータキャッシュ４０７ａに送信する。
【０１０２】
データキャッシュ４０７ａは、命令実行結果を一時的に保存するためのステージユニットである。例えば、データキャッシュ４０７ａは、「命令実行結果をバッファに入れる」というパイプラインステージを実施するための、コアに組み込まれた従来のキャッシュである。１つの実施形態では、データキャッシュ４０７ａは、実行ユニット４０５ａから命令実行結果を取り出して、一時的に保存する。
【０１０３】
ライトバックユニット４０９ａは、命令実行結果をレジスタに書き込むためのステージユニットである。例えば、ライトバックユニット４０９ａは、「命令実行結果をレジスタにライトバックする」というパイプラインステージを実施するための機能部である。１つの実施形態では、ライトバックユニット４０９ａは、データキャッシュ４０７ａから命令実行結果を取り出して、レジスタ４１１ａに書き込む。
【０１０４】
例示の実施形態では、パイプラインユニット４３５ｂは、パイプラインユニット４３５ａと同様の要素を有し、同様の機能性を実施する。パイプラインユニット４３５ｂは、なかでも特に、レジスタフェッチユニット４０３ｂ、実行ユニット４０５ｂ、データキャッシュ４０７ｂ、及びライトバックユニット４０９ｂを含む。同様の要素に言及するために、類似の参照符号が使用される。レジスタフェッチユニット４０３ｂ、実行ユニット４０５ｂ、データキャッシュ４０７ｂ、及びライトバックユニット４０９ｂに関する説明は、ここでは繰り返されない。
【０１０５】
レジスタ４１１ａは、命令実行結果を保存するための機能部である。例えば、レジスタ４１１ａは、コアに含まれた従来のレジスタである。１つの実施形態では、レジスタ４１１ａは、命令実行結果をメモリ２１１に保存する。レジスタ４１１ｂは、レジスタ４１１ａと同様の構造を有し、同様の機能性を実施する。レジスタ４１１ｂに関する説明は、ここでは繰り返されない。
【０１０６】
ＰＬＡ４１３は、パイプラインユニットのなかの故障コンポーネントの機能性を実現す
るための機能部である。例えば、ＰＬＡ４１３は、パイプラインユニット４３５ａ、４３５ｂのなかの故障コンポーネントの機能性を実現するように構成可能なフィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。１つの実施形態では、ＰＬＡ４１３は、パイプラインユニット４３５ａ、４３５ｂにおいて命令が処理されるときに、パイプラインユニット４３５ａ、４３５ｂのなかの故障コンポーネントに置き換わる。
【０１０７】
スイッチマトリクス４１５は、命令の実行をコアのなかの第１のパイプラインユニットから第２のパイプラインユニットに切り替えるための装置である。例えば、スイッチマトリクス４１５は、パイプラインユニット４３５ａとパイプラインユニット４３５ｂとの間で任意にデータをルーティングするための電子回路である。１つの実施形態では、コアの第１のパイプラインユニットにおける命令の実行においてエラーが検出されたときに、スイッチマトリクス４１５は、以下で説明されるように、その命令の実行を同じコアの第１のパイプラインユニットから第２のパイプラインユニットに切り替える。
【０１０８】
図４Ａに示されるように、パイプラインユニット４３５ａ、４３５ｂは、命令を並列に処理する。例えば、パイプラインユニット４３５ａが第１の命令セットを処理している間に、パイプラインユニット４３５ｂは、パイプラインユニット４３５ａと並列に第２の命令セットを処理することができる。各パイプラインユニット４３５ａ、４３５ｂは、命令をフェッチする、命令を実行する、命令実行結果をバッファに入れる、命令実行結果をレジスタにライトバックするなどのパイプラインステージを使用して命令を処理するために、パイプライン技術も用いる。１つの実施形態では、各パイプラインユニット４３５ａ、４３５ｂは、異なるステージユニットにおいて異なる命令を処理することによって、複数の命令を同時に処理する。例えば、パイプラインユニット４３５ａは、４つの命令を同時に処理する。プロセッサ１０４の１クロックサイクルにおいて、レジスタフェッチユニット４０３ａは、第１の命令をフェッチして、実行ユニット４０５ａは、第２の命令を実行し、データキャッシュ４０７ａは、第３の命令についての命令実行結果をバッファに入れ、ライトバックユニット４０９ａは、第４の命令についての命令実行結果をバッファ４１１ａに書き込む。
【０１０９】
図４Ａに示された例示の実施形態では、エラー検出器３０３は、コアＡ２０１のなかのパイプラインユニット４３５ｂの実行ユニット４０５ｂにおいて命令が実行されたときに、エラーを検出する。エラー検出器３０３は、エラー信号を生成し、回復エンジン３０９に送信する。図４Ａにおいて実行ユニット４０５ｂに描かれたバツ印によって示されるように、エラー信号は、実行ユニット４０５ｂが故障ステージユニットであることを示す。
【０１１０】
エラー信号の受信に応えて、１つの実施形態では、回復エンジン３０９は、パイプラインユニット４３５ａのなかの実行ユニット４０５ａを代替ステージユニットとして選択する。１つの実施形態では、回復エンジン３０９は、実行ユニット４０５ａがアイドル状態であるときに、故障実行ユニット４０５ｂに代わる代替ステージユニットとして実行ユニット４０５ａを選択する。別の実施形態では、実行ユニット４０５ａは、アイドル状態になく、実行ユニット４０５ｂにおいて実行される命令よりも低い優先度の別の命令を実行している。回復エンジン３０９は、実行ユニット４０５ａにおける低い優先度の命令の実行に割り込み、故障実行ユニット４０５ｂに代わる代替ステージユニットとして実行ユニット４０５ａを選択する。更に別の実施形態では、実行ユニット４０５ａは、実行ユニット４０５ｂにおいて実行される命令よりも高い優先度の別の命令を実行している。回復エンジン３０９は、実行ユニット４０５ａにおける高い優先度の命令の実行に割り込まず、故障実行ユニット４０５ｂに代わる代替ステージユニットとして同じコアの又は別のコア（例えばコアＢ２０３）の別のパイプラインユニット４３５のなかの別の実行ユニット４０５を選択する。
【０１１１】
１つの実施形態では、回復エンジン３０９は、パイプラインユニット４３５ｂのなかの非故障ステージユニット（例えばレジスタフェッチユニット４０３ｂ、データキャッシュ４０７ｂ、ライトバックユニット４０９ｂ）及びパイプラインユニット４３５ａのなかの実行ユニット４０５ａを使用して、命令を再実行する。回復エンジン３０９は、命令実行のためのデータ流をレジスタフェッチユニット４０３ｂから実行ユニット４０５ａへ迂回させ次いでデータキャッシュ４０７ｂに戻らせることによって命令の実行を実行ユニット４０５ｂから実行ユニット４０５ａに切り替えるように、スイッチマトリクス４１５に指示する。命令実行のためのデータ流は、図４Ａにおいて破線４２０として示されている。
【０１１２】
例えば、レジスタフェッチユニット４０３ｂは、命令キュー４０４から命令をフェッチして、一時的に保存する。スイッチマトリクス４１５は、レジスタフェッチユニット４０３ｂに保存されている命令を取り出して、実行ユニット４０５ａに送信する。実行ユニット４０５ａは、命令を実行し、該命令についての命令実行結果をスイッチマトリクス４１５に保存する。スイッチマトリクス４１５は、命令実行結果をデータキャッシュ４０７ｂに送信する。ライトバックユニット４０９ｂは、命令実行結果をデータキャッシュ４０７ｂから取り出して、レジスタ４１１ｂに書き込む。したがって、実行ユニット４０５ａを使用して実行ユニット４０５ｂのためのフォールバックが確立され、ゆえに、命令の実行は、たとえ実行ユニット４０５ｂの障害が発生したとしても中断することはない。
【０１１３】
別の実施形態では、回復エンジン３０９は、パイプラインユニット４３５ｂの非故障ステージユニット、並びにパイプラインユニット４３５ａの実行ユニット４０５ａ及びその他のステージユニット（例えばレジスタフェッチユニット４０３ａやデータキャッシュ４０７ａなど）を使用して、命令を再実行する。例えば、レジスタフェッチユニット４０３ｂは、命令キュー４０４から命令をフェッチして、一時的に保存する。スイッチマトリクス４１５は、フェッチされてレジスタフェッチユニット４０３ｂに保存されている命令を、レジスタフェッチユニット４０３ａに転送する。実行ユニット４０５ａは、その命令をレジスタフェッチユニット４０３ａから取り出して実行する。実行ユニット４０５ａは、その命令についての命令実行結果をデータキャッシュ４０７ａに保存する。スイッチマトリクス４１５は、データキャッシュ４０７ａに保存されている命令実行結果をデータキャッシュ４０７ｂに転送する。命令実行のためのデータの流れは、図４Ａにおいて破線４２２として示されている。ライトバックユニット４０９ｂは、命令実行結果をデータキャッシュ４０７ｂから取り出して、レジスタ４１１ｂに書き込む。
【０１１４】
当業者ならば、その他の実施形態では、レジスタフェッチユニット４０３ｂやデータキャッシュ４０７ｂなどのその他のステージユニットにおいてエラーが検出されうること、及び回復エンジン３０９が本明細書で説明されるような手順を踏むことによってその他のステージユニットのそれぞれについてフォールバックを確立しうることがわかるだろう。
【０１１５】
図４Ｂは、１つの実施形態にしたがった、第１のコアＡ２０１のなかの第１のパイプラインユニット４３５ａと、第２のコアＢ２０３のなかの第２のパイプラインユニット４３５ｂとの間におけるフォールバックを示したブロック図４５０である。同様の要素に言及するために、類似の参照符号が使用される。例えば、プログラマブルロジックアレイ４１３ａ、４１３ｂは、図４Ａに示されるプログラマブルロジックアレイ４１３と同様の構造を有し、同様の機能性を実施する。図４Ｂに関する説明は、ここでは繰り返されない。図４Ａと図４Ｂとの相違は、パイプラインユニット４３５ａとパイプラインユニット４３５ｂとが異なるコアのなかにあること、及びスイッチマトリクス２１３が２つのコアの間で命令の実行を切り替えることである。回復エンジン３０９は、故障実行ユニット４０５ｂに代わる代替ステージユニットとして、実行ユニット４０５ａを選択する。１つの実施形態では、回復エンジン３０９は、破線４４０によって描かれたデータ流をたどって命令を再実行する。別の実施形態では、回復エンジン３０９は、破線４４２によって描かれたデ
ータ流をたどって命令を再実行する。
【０１１６】
タイムチャート
図５Ａは、１つの実施形態にしたがった、パイプラインユニットの故障コンポーネントのためのフォールバックユニットを確立するプロセス５００を示したタイムチャートである。図５Ａは、横軸及び縦軸を含む座標で描かれている。横軸は時間を、縦軸はハードウェアリソースを表している。図５Ａは、また、コアＡ２０１及びコアＢ２０３も示している。コアＡ２０１は、なかでも特に、パイプラインユニット４３５ａ及びパイプラインユニット４３５ｂを含む。コアＢ２０３は、なかでも特に、パイプラインユニット４３５ｃ及びパイプラインユニット４３５ｄを含む。横軸における記号「Ｔ０」、「Ｔ１」、「Ｔ２」、「Ｔ３」、「Ｔ４」、及び「Ｔ５」は、異なるタイムインスタンスを表している。例えば、記号「Ｔ１」は、コアＡ２０１のパイプラインユニット４３５ａにおける命令の実行時にエラー検出器３０３がエラーを検出する、というタイムインスタンスを表している。
【０１１７】
タイムインスタンスＴ０では、１つ以上の命令を含むアプリケーション５１０ａが、コアＡ２０１のパイプラインユニット４３５ａにおいて実行される。同時に、アプリケーション５１０ｂが、コアＡ２０１のパイプラインユニット４３５ｂにおいて実行される。コアＢ２０３のパイプラインユニット４３５ｃでは、アプリケーション５１０ｃが実行される。コアＢ２０３のパイプラインユニット４３５ｄでは、アプリケーション５１０ｄが実行される。
【０１１８】
例示の実施形態では、アプリケーション５１０ａからの命令がパイプラインユニット４３５ａにおいて実行されるときに、エラー検出器３０３は、タイムインスタンスＴ１において第１のエラーを検出する。エラー検出器３０３は、パイプラインユニット４３５ａのなかの故障ステージユニットを決定する。例えば、エラー検出器３０３は、パイプラインユニット４３５ａの実行ユニットにおいて命令が実行されているときに、タイムインスタンスＴ１においてエラーを検出し、故障ステージユニットがパイプラインユニット４３５ａの実行ユニットであると決定する。エラー検出器３０３は、第１のエラー信号を生成し、回復エンジン３０９に送信する。回復エンジン３０９は、第１のエラー信号の受信に応えてパイプラインユニット４３５ａにおいて命令を再実行する。
【０１１９】
１つの実施形態では、エラー検出器３０３は、パイプラインユニット４３５ａにおいて命令が再実行されるときに、タイムインスタンスＴ２において第２のエラーを検出する。エラー検出器３０３は、第２のエラー信号を生成し、回復エンジン３０９に送信する。回復エンジン３０９は、書き換えコマンドを生成し、書き換えモジュール３０７に送信する。書き換えモジュール３０７は、命令を書き換えて書き換え版命令を形成し、回復エンジン３０９に送信する。回復エンジン３０９は、パイプラインユニット４３５ａにおいて書き換え版命令を再実行する。
【０１２０】
１つの実施形態では、エラー検出器３０３は、パイプラインユニット４３５ａにおいて書き換え版命令が実行されるときに、タイムインスタンスＴ３において第３のエラーを検出する。エラー検出器３０３は、第３のエラー信号を生成し、回復エンジン３０９に送信する。回復エンジン３０９は、図５Ａにおいて破線５２０によって示されるように、パイプラインユニット４３５ｂにおけるアプリケーション５１０ｂの実行に割り込んで、パイプラインユニット４３５ｂにおいて命令を再実行する。例えば、もし、パイプラインユニット４３５ａにおいて書き換え版命令を実行しているときにエラーが発生したならば、回復エンジン３０９は、命令の実行をパイプラインユニット４３５ａからパイプラインユニット４３５ｂに切り替えるように、スイッチマトリクス４１５に指示する。１つの実施形態では、回復エンジン３０９は、アプリケーション５１０ａがアプリケーション５１０ｂ
よりも高い優先度を有するときにのみ、パイプラインユニット４３５ｂにおけるアプリケーション５１０ｂの実行に割り込む。回復エンジン３０９は、アプリケーション５１０ａからの次以降の命令を実行するために、パイプラインユニット４３５ｂを引き続き使用する。
【０１２１】
１つの実施形態では、回復エンジン３０９は、故障ステージユニットに代わる代替ステージユニットをパイプラインユニット４３５ｂから選択し、パイプラインユニット４３５ａの非故障ステージユニットと、パイプラインユニット４３５ｂのなかの代替ステージユニットとを使用して命令を実行する。例えば、回復エンジン３０９は、パイプラインユニット４３５ａのフェッチレジスタユニットと、パイプラインユニット４３５ｂの実行ユニットと、パイプラインユニット４３５ａのデータキャッシュと、パイプラインユニット４３５ａのライトバックユニットとを使用して次以降の命令を実行する。
【０１２２】
故障ロケータ３０５は、エラーを発生させている、パイプラインユニット４３５ａのなかの故障ステージユニットの故障コンポーネントを探し始める。例えば、故障ロケータ３０５は、故障ステージユニットの故障コンポーネントを探すために、ＢＩＳＴ（Built-In
Self Test）回路を適用する。タイムインスタンスＴ４では、パイプラインユニット４３５ａのなかの故障ステージユニットの故障コンポーネントが見つかる。例えば、故障ロケータ３０５は、タイムインスタンスＴ４において、パイプラインユニット４３５ａのなかの故障ステージユニットの故障コンポーネントとして故障乗算器を見つける。フォールバックプログラミングモジュール３１１は、プログラマブルロジックアレイ４１３を、パイプラインユニット４３５ａのなかの故障ステージユニットの故障コンポーネントのためのフォールバックユニットを確立するように構成する。タイムインスタンスＴ５では、故障ステージユニットの故障コンポーネントのためのフォールバックユニットが確立され、命令実行のために故障コンポーネントに置き換えて使用される。回復エンジン３０９は、アプリケーション５１０ａのための命令を実行するためにパイプラインユニット４３５ｂを使用することを停止する。回復エンジン３０９は、破線５４０によって示されるように、故障コンポーネントをフォールバックユニットで置き換えられたパイプラインユニット４３５ａを使用して、命令を引き続き実行する。パイプラインユニット４３５ｂは、したがって、アプリケーション５１０ｂのための命令を引き続き実行する。
【０１２３】
図５Ｂは、別の実施形態にしたがった、パイプラインユニットの故障コンポーネントのためのフォールバックユニットを確立するプロセス５５０を示したタイムチャートである。同様の要素に言及するために、類似の参照符号が使用され、これらの要素に関する説明は、ここでは繰り返されない。図５Ａと図５Ｂとの相違は、図５Ｂでは、コアＢ２０３のパイプラインユニット４３５ｃがアイドル状態にあること、及びパイプラインユニット４３５ｂにおいて実行されているアプリケーション５１０ｂがパイプラインユニット４３５ａにおいて実行されているアプリケーション５１０ａよりも高い優先度を有することである。回復エンジン３０９は、タイムインスタンスＴ３においてパイプラインユニット４３５ａにおいてエラーが検出されたときに、パイプラインユニット４３５ｂにおけるアプリケーション５１０ｂの実行に割り込まない。その代わり、パイプラインユニット４３５ｃがアイドル状態にあるので、回復エンジン３０９は、破線５６０によって示されるように、コアＢ２０３のパイプラインユニット４３５ｃにおいて命令を再実行する。回復エンジン３０９は、アプリケーション５１０ａのための次以降の命令を引き続きパイプラインユニット４３５ｃにおいて実行する。
【０１２４】
タイムインスタンスＴ５において、フォールバックプログラミングモジュール３１１が、パイプラインユニット４３５ａの故障コンポーネントのためのフォールバックユニットを確立するようにプログラマブルロジックアレイ４１３を構成したら、回復エンジン３０９は、アプリケーション５１０ａのための命令を実行するためにパイプラインユニット４
３５ｃを使用することを停止する。回復エンジン３０９は、破線５８０によって示されるように、戻ってパイプラインユニット４３５ａのなかのリソースを使用してアプリケーション５１０ａのための命令を実行する。例えば、回復エンジン３０９は、アプリケーション５１０ａのための命令をパイプラインユニット４３５ａにおいて実行し、パイプラインユニット４３５ａの故障コンポーネント機能性を実施するためにプログラマブルロジックアレイ４１３を適用する。
【０１２５】
方法
図６Ａ〜６Ｄは、１つの実施形態にしたがった、命令を実行するためにフォールトトレラント方式を提供する方法６００を示したフローチャートである。図６Ａでは、第１のコアの第１のパイプラインユニットにおいて命令が実行される（６０２）。エラー検出器３０３は、命令の実行を監視し、第１のエラーが検出されるかどうかを決定する（６０４）。もし、エラー検出器３０３がエラーを検出しないならば、方法６００は、ステップ６０６に進む。そうでなければ、方法６００は、ステップ６０８に進む。ステップ６０６では、第１のコアの第１のパイプラインユニットにおいて次の命令が実行され、方法６００は終了する。ステップ６０８では、エラー検出器３０３は、第１のコアの第１のパイプラインユニットのなかの故障ステージユニットを決定する。例えば、エラー検出器３０３は、エラーが実行ユニットにおいて発生するのであれば、第１のパイプラインユニットのなかの実行ユニットが故障ステージユニットであることを決定する。エラー検出器３０３は、第１のエラー信号を生成し（６１０）、回復エンジン３０９に送信する。
【０１２６】
回復エンジン３０９は、第１のエラー信号をエラー検出器３０３から受信する。回復エンジン３０９は、第１のコアの第１のパイプラインユニットにおいて命令を再実行する（６１２）。例えば、回復エンジン３０９は、コマンドを生成して第１のコアに送信し、第１のコアに、第１のパイプラインユニットにおいて命令を再実行させる。エラー検出器３０３は、命令の再実行を監視し、第２のエラーが検出されるかどうかを決定する（６１４）。もし、エラー検出器３０３が他に何もエラーを検出しないならば、方法６００は、ステップ６０６に進む。そうでなければ、方法６００は、ステップ６１６に進む。ステップ６１６では、エラー検出器３０３は、故障ステージユニットの識別子を含む第２のエラー信号を生成し、回復エンジン３０９に送信する。
【０１２７】
回復エンジン３０９は、第２のエラー信号の受信に応え、命令を書き換える（６１８）ように書き換えモジュール３０７に指示する。書き換えモジュール３０７は、命令を書き換えて（６１８）、書き換え版命令を生成する。書き換えモジュール３０７は、書き換え版命令を回復エンジン３０９に送信する。
【０１２８】
次に、図６Ｂを参照すると、回復エンジン３０９は、第１のコアの第１のパイプラインユニットにおいて書き換え版命令を実行する（６２０）。例えば、回復エンジン３０９は、コマンドを生成して第１のコアに送信し、第１のコアに、第１のコアの第１のパイプラインユニットにおいて書き換え版命令を実行させる。エラー検出器３０３は、書き換え版命令の実行を監視し、第３のエラーが検出されるかどうかを決定する（６２２）。もし、エラー検出器３０３が他に何もエラーを検出しないならば、方法は、ステップ６２４に進む。そうでなければ、方法は、ステップ６２６に進む。ステップ６２４において、回復エンジン３０９は、第１のコアの第１のパイプラインユニットにおいて次の命令を実行する（６２４）。１つの実施形態では、書き換えモジュール３０７は、次の命令を書き換えて書き換え版命令を形成し、回復エンジン３０９は、次の命令の書き換え版命令を第１のコアの第１のパイプラインユニットにおいて実行する。
【０１２９】
ステップ６２６では、エラー検出器３０３は、故障ステージユニットの識別子を含む第３のエラー信号を生成し、回復エンジン３０９に送信する。回復エンジン３０９は、故障
ステージユニットの識別子を第３のエラー信号から取り出す。回復エンジン３０９は、第１のコアの第２のパイプラインユニットから、故障ステージユニットに代わる第１の代替ステージユニットを選択する（６２８）。１つの実施形態では、回復エンジン３０９は、第２のパイプラインユニットにおいて実行される命令が第１のパイプラインユニットにおいて実行される命令よりも低い優先度を有するときに、第１のコアの第２のパイプラインユニットから第１の代替ステージユニットを選択する。回復エンジン３０９は、第１のコアの、第２のパイプラインユニットのなかの第１の代替ステージユニットと、第１のパイプラインユニットのなかのその他の非故障ステージユニットとを使用して、命令を再実行する（６３０）。
【０１３０】
エラー検出器３０３は、第１のコアの、第２のパイプラインユニットのなかの第１の代替ステージユニットと、第１のパイプラインユニットのなかのその他の非故障ステージユニットとを使用した命令の再実行を監視する。エラー検出器３０３は、第４のエラーが検出されるかどうかを決定する（６３２）。もし、エラー検出器３０３が他に何もエラーを検出しないならば、方法は、ステップ６３４に進む。そうでなければ、方法６００は、ステップ６３６に進む。ステップ６３４では、回復エンジン３０９は、第１のコアの、第２のパイプラインユニットのなかの第１の代替ステージユニットと、第１のパイプラインユニットのなかのその他の非故障ステージユニットとを使用して、次の命令を実行する。
【０１３１】
ステップ６３６では、エラー検出器３０３は、第４のエラー信号を生成し、回復エンジン３０９に送信する。回復エンジン３０９は、第２のコアの第３のパイプラインユニットから、故障ステージユニットに代わる第２の代替ステージユニットを選択する（６３８）。１つの実施形態では、回復エンジン３０９は、第３のパイプラインユニットにおいて実行される命令が上記命令よりも低い優先度を有するときに、第２のコアの第３のパイプラインユニットから第２の代替ステージユニットを選択する。
【０１３２】
図６Ｃを参照すると、回復エンジン３０９は、第２のコアの第３のパイプラインユニットのなかの第２の代替ステージユニットと、第１のコアの第１のパイプラインユニットのなかのその他の非故障ステージユニットとを使用して、命令を再実行する（６４０）。エラー検出器３０３は、第２のコアの第３のパイプラインユニットのなかの第２の代替ステージユニットと、第１のコアの第１のパイプラインユニットのなかのその他の非故障ステージユニットとを使用した命令の再実行を監視する。エラー検出器３０３は、第５のエラーが検出されるかどうかを決定する（６４２）。もし、エラー検出器３０３が他に何もエラーを検出しないならば、方法は、ステップ６４４に進む。そうでなければ、方法６００は、ステップ６４６に進む。ステップ６４４では、回復エンジン３０９は、第２のコアの第３のパイプラインユニットのなかの第２の代替ステージユニットと、第１のコアの第１のパイプラインユニットのなかのその他の非故障ステージユニットとを使用して、次の命令を実行する。
【０１３３】
ステップ６４６では、エラー検出器３０３は、第５のエラー信号を生成し、回復エンジン３０９に送信する。回復エンジン３０９は、第１のコアの第１のパイプラインユニットのなかのどの非故障ステージユニットも使用せず、第２のコアの第３のパイプラインユニットにおいて命令を再実行する（６４８）。エラー検出器３０３は、第２のコアの第３のパイプラインユニットにおける命令の再実行を監視する。エラー検出器３０３は、第６のエラーが検出されるかどうかを決定する（６５０）。もし、エラー検出器３０３が他に何もエラーを検出しないならば、方法は、ステップ６５２に進む。そうでなければ、方法６００は、ステップ６５４に進む。ステップ６５２では、回復エンジン３０９は、第２のコアの第３のパイプラインユニットにおいて次の命令を実行する。
【０１３４】
ステップ６５４では、エラー検出器は、第６のエラー信号を生成し、回復エンジン３０
９に送信する。回復エンジン３０９は、命令の実行を終結させ（６５６）、エラーについてシステム１００の管理者に報告する。
【０１３５】
図６Ｄを参照すると、故障ロケータ３０５は、故障ステージユニットのなかの故障コンポーネントを見つける（６５８）。故障ロケータ３０５は、故障コンポーネントの識別子をフォールバックプログラミングモジュール３１１に送信する。フォールバックプログラミングモジュール３１１は、故障コンポーネントのためのフォールバックユニットを確立する（６６０）。回復エンジン３０９は、故障コンポーネントをフォールバックユニットに置き換えることによって、第１のコアの第１のパイプラインユニットにおいて命令を引き続き実行する（６６２）。
【０１３６】
実施形態の前述の説明は、例示と説明を目的として行われたものである。したがって、開示された実施形態が本発明の全てではないし、本発明を上記の実施形態に限定するものでもない。本発明は、上記の開示にしたがって、種々の変形が可能である。本発明の範囲は上述の実施形態に限定解釈されるべきではなく、特許請求の範囲にしたがって解釈されるべきである。本発明の技術に詳しい者であれば、本発明はその思想や本質的特徴から離れることなくその他の種々の形態で実現できることを理解できるであろう。同様に、モジュール・処理・特徴・属性・方法およびその他の本発明の態様に関する名前付けや分割方法は必須なものでものないし重要でもない。また、本発明やその特徴を実装する機構は異なる名前や分割方法や構成を備えていても構わない。さらに、当業者であれば、モジュール・処理・特徴・属性・方法およびその他の本発明の態様は、ソフトウェア、ハードウェア、ファームウェアもしくはこれらの組合せとして実装できることを理解できるであろう。また、本発明をソフトウェアとして実装する場合には、モジュールなどの各要素は、どのような様式で実装されても良い。例えば、スタンドアローンのプログラム、大きなプログラムの一部、異なる複数のプログラム、静的あるいは動的なリンクライブラリー、カーネルローダブルモジュール、デバイスドライバー、その他コンピュータプログラミングの当業者にとって既知な方式として実装することができる。さらに、本発明の実装は特定のプログラミング言語に限定されるものではないし、特定のオペレーティングシステムや環境に限定されるものでもない。以上のように、上記の本発明の説明は限定的なものではなく例示的なものであり、本発明の範囲は添付の特許請求の範囲にしたがって定められる。
【符号の説明】
【０１３７】
１００  フォールトトレラントシステム
１０２  制御部
１０４  プロセッサ
１０６  インタフェース
１１０  センサ
１１２  アクチュエータ
１１４  記憶装置
１１８  外部システム
２０１，２０３，２０５  コア
２０７  入出力インタフェース
２０９  フォールトトレラントモジュール
２１１  メモリ
２１３  スイッチマトリクス
３０１  通信モジュール
３０３  エラー検出器
３０５  故障ロケータ
３０７  書き換えモジュール
３０９  回復エンジン
３１１  フォールバックプログラミングモジュール
【図１】
2013122748.tif 000003
【図２】
2013122748.tif 000004
【図３】
2013122748.tif 000005
【図４Ａ】
2013122748.tif 000006
【図４Ｂ】
2013122748.tif 000007
【図５Ａ】
2013122748.tif 000008
【図５Ｂ】
2013122748.tif 000009
【図６Ａ】
2013122748.tif 000010
【図６Ｂ】
2013122748.tif 000011
【図６Ｃ】
2013122748.tif 000012
【図６Ｄ】
2013122748.tif 000013