JP2005166057A - 障害検出コンピュータシステム - Google Patents

障害検出コンピュータシステム Download PDF

Info

Publication number
JP2005166057A
JP2005166057A JP2004349450A JP2004349450A JP2005166057A JP 2005166057 A JP2005166057 A JP 2005166057A JP 2004349450 A JP2004349450 A JP 2004349450A JP 2004349450 A JP2004349450 A JP 2004349450A JP 2005166057 A JP2005166057 A JP 2005166057A
Authority
JP
Japan
Prior art keywords
code
execution
processor
program
calculation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004349450A
Other languages
English (en)
Inventor
Benjamin Daniel Osecky
ベンジャミン・ダニエル・オセッキー
Blaine Douglas Gaither
ブライネ・ダグラス・ガイサー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of JP2005166057A publication Critical patent/JP2005166057A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1633Error detection by comparing the output of redundant processing systems using mutual exchange of the output between the redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1497Details of time redundant execution on a single processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Retry When Errors Occur (AREA)
  • Hardware Redundancy (AREA)

Abstract

【課題】プログラムを実行するデジタルプロセッサの計算エラーを検出できる方法を提供する。
【解決手段】最初に、プログラムは計算セグメントに分割され、それらのセグメントの少なくとも1つのソースコードがコンパイルされて、2つの冗長なコードセクションが生成される。また、これらの2つのコードセクションの実行によって生成された結果を比較する比較コードも生成される。コードセクションのそれぞれは、次に、異なる計算領域で実行されて、各結果が生成される。各結果が同一である場合にのみ、計算結果が実行されて、プログラムのその後のフローが変更される。
【選択図】図2

Description

コンピュータ上で発生するエラーを検出する方法に関する。
計算システムで発生すると考えられる、ハードウェアに関連したエラーの2つの部類は、ハードエラーおよびソフトエラーである。
ハードエラーは、コンピュータシステムのオペレーションの不適切な振る舞いとして示される。
このハードエラーは、存続し、最初のエラーが起こったあと、かなりの期間の間、継続してシステムに不適当な挙動を発生させる。
ソフトエラーは、コンピュータハードウェアデバイスの一時的な異常によって生成される非再発性のエラーである。
ソフトエラーは、一定の期間を超えて持続しないコンピュータシステムの不適切な振る舞いを伴う。
この時間が経過した後、システムのその後のオペレーションが正常に進む。
コンピュータシステムを構成する物理デバイスが、より小さく、かつ、より多くなったことに伴い、今や、多くの再発性の物理現象が、これらのデバイスのオペレーションに一時的な障害を引き起こす可能性がより高くなっている。
この一時的な障害は、コンピュータシステムを構成するデジタル論理回路のオペレーションおよび状態の混乱を招き、多くの場合、ソフトエラーを招く。
ソフトエラーは、一般に、ハードエラーよりも検出するのが困難である。
ソフトエラーエラーは、ハードエラーよりも頻度が高いと考えられ、また、それらの影響がコンピュータシステムの設計において考慮されるべきであるほど十分多く発生するとも考えられる。
ソフトエラーが検出されないことによって、誤った結果が計算結果として報告される可能性があったり、破損したデータがディスクもしくは他の永続的な媒体に記憶されるか、または、ネットワーク接続を介して送信される可能性があったり、プログラムまたはコンピュータシステム全体の振る舞いが異常になる可能性がある。
ソフトエラーの検出およびオプションとしてハードエラーの検出を実現する技法を使用して、最も高いエラー率を有するコンピュータシステムアーキテクチャのサブシステム用のエラー検出カバレッジ(error detection coverage)を提供することが望ましい。
これらのサブシステムは、通常、システムメインメモリ、さまざまなレベルのプロセッサキャッシュ、ならびにシステムTLB(変換索引バッファ)、I/Oおよび相互接続「ファブリック」を含む。
エラーが検出されると、計算が継続して正しい結果を生成できるように、多くの場合、そのエラーを訂正する方法を提供することが望ましい。
エラーがこれらのサブシステムの1つに発生すると、そのエラーは、他のサブシステムに配信される前に、検出され、訂正される。
それによって、他のサブシステムは、エラーに対処する必要がなくなる。
これは、保護されていない(uncovered)サブシステムに取り組むことが残されている。
多くのコンピュータシステム設計では、中央処理装置の大部分が、エラー検出によってもエラー訂正によっても保護されていない。
VLSIプロセッサの継続した発展によりコンポーネント密度がさらに増加するに伴い、これらのプロセッサが、宇宙線やアルファ粒子等のソースによって引き起こされる「ソフト」エラーの影響を受けやすいということが、計算システムの設計において問題になってきている。
エラー検出コードおよびエラー訂正コードは、コンピュータシステムメモリ、キャッシュ、および相互接続ファブリックの設計に広く適用されて、正しいオペレーションを検証し、ソフトエラーまたはハードエラーのいずれかが発生した場合には、データの表現の訂正を提供する。
プロセッサは、コンピュータメモリデバイスよりも複雑で多様性のあるさらに多くの構造を有するので、プロセッサ電子機器を保護することは、より困難な作業である。
プロセッサ電子機器を保護する既存のハードウェア技法は、プロセッサを構成するコア構造に発生しうるエラーのチェック、封じ込め(contain)、および回復を行う大幅な論理構造の設計および組み込みを必要とする。
他のプロセッサ指向のエラー検出技法は、「ロックステップ」で同じ命令を実行する複数のプロセッサおよび関連したセルフチェックハードウェアを設けて、各プロセッサから外部に見ることができるすべての結果が、その仲間のそれぞれ(または過半数)の結果と一致することを検証し、正しいオペレーションを保証することを含んでいる。
これらの技法の実施においては、比較が一致しない場合、さらなる複雑さが必要とされて、誤った状態の伝播を制限する。
さらに、特別な手順が実行されて、計算結果を無効として規制するか、または、計算の状態を回復しなければならない。
このすべてが、システム設計のコストおよび複雑さを増大させる。
また、計算のエラーに対処するソフトウェア技法も提案されてきた。
これらの技法のいくつかは、結果が一致するまで、プログラムを複数回完全に実行し、その結果を比較し、次いで、計算を再実行することを含む。
上記技法のすべては、計算が完了するのに必要な計算資源および時間を増大させる。
さらに、これらの技法のいくつかは、一定の部類のハードエラーを検出しない。
他のソフトウェアフォールトトレランス技法は、計算が停止するか、もしくは、「フェイルファスト」になるように機能しなくなるとみなすか、または、エラーが、プロセッサ設計に標準的に組み込まれたエラー例外チェックロジックによって検出されるとみなす。
これらの技法は、ソフトエラーの不十分なカバレッジを提供する場合がある。
上記から、コンピュータシステムの不適切なオペレーションを検出する方法は、多くの場合、不適切なオペレーションの検出をサポートし、不適切なオペレーションによる誤った結果に起因する損傷を最小にし、また、検出された障害にかかわらず処理を回復して継続するのに必要な特別の動作の個数および程度も最小にするための大規模なハードウェアおよびソフトウェアを必要とすることがわかる。
このようなシステムは、多くの場合、基本的な計算環境自体に対する要求を超えて、2倍または3倍の冗長なハードウェアおよび大規模なチェックおよび訂正のロジックを使用していた。
代替的なソフトウェアフォールトトレランス技法は、通常、特殊化されたプログラミング技法を採用する必要がある。
この特殊化されたプログラミング技法は、システムおよびアプリケーションソフトウェアの設計に影響を与える可能性があるか、または、プログラムを複数回実行し、その後、2つ以上のプログラムの実行結果を比較することを必要とする。
このように、ソフトエラーを検出する既存の技法の実施は、ハードウェアベースまたはソフトウェアベースのいずれであっても、重大で付加的なハードウェア、ソフトウェア、および/または他の資源を必要とする。
プログラムを実行するデジタルプロセッサの計算エラーを検出するシステムが開示される。
最初に、プログラムは計算セグメントに分割され、それらのセグメントの少なくとも1つのソースコードがコンパイルされて、2つの冗長なコードセクションが生成される。
また、これらの2つのコードセクションの実行によって生成された結果を比較する比較コードも生成される。
コードセクションのそれぞれは、次に、異なる計算領域で実行されて、各結果が生成される。
各結果が同一である場合にのみ、計算結果が実行されて、プログラムのその後のフローが変更される。
本明細書では、デジタルプロセッサに関係したエラーを検出するソフトウェア技法に関係のあるシステムが説明される。
これらのシステムは、既存のコンピュータアーキテクチャと組み合わされると、プロセッサの有効な障害検出カバレッジを提供する。
用語「プロセッサ」は、この文書では、中央処理装置(「CPU」)に加えて、他のタイプの機能を提供するデジタルプロセッサを指すためにも使用される。
本明細書で説明される障害検出技法が使用されて、検出された障害状況からの効率的な回復を提供しうる。
例示の実施の形態では、これらの技法は、アプリケーションプログラムのアーキテクチャ、構造、またはソースコードの変更を必要とせずに使用されうる。
図1は、本システムでの使用に適したIntel Itanium II等の例示のVLIW(Very Long [or Large] Instruction Word;超長命令語)プロセッサ101の関連部分のブロック図である。
VLIWは、コンパイラが、複数の基本的な相互依存しないオペレーションを、同じ命令語の中に詰め込む命令セットの思想を表す。
これらの固定長の語(命令)は、キャッシュまたはメモリからプロセッサにフェッチされると、数個の短い長さの命令に分割される。
これらの短い長さの命令は、独立した機能ユニット(「実行ユニット」としても知れられている)にディスパッチされ、機能ユニットにおいて並列に実行される。
図1に示すプロセッサでは、以下で説明するように、命令キャッシュ110の命令が、命令キュー109に入れられ、発行ポート108を介して発行され、関連したレジスタ106A/106Bを使用して機能ユニット102〜105を介して実行される。
プロセッサ101は、2つの分岐/比較ユニット102A/102Bと、2つの整数ユニット103A/103Bと、2つのロード/記憶ユニット104A/104Bと、2つの浮動小数点ユニット105A/105Bとを含む。
これらの機能ユニットのそれぞれは、対応するレジスタまたはレジスタセットを有する。
このレジスタまたはレジスタセットは、パーティション106Aおよび106Bによって示されるように、対応するが別々である2つの部分に区画される。
レジスタ106A/106Bの2つのグループは、一括して「レジスタファイル」107と呼ばれる。
本システムは、並列な分岐/比較ユニット102Bがなくても機能することができるが、本明細書に示す例は、2つの比較ユニット102A/Bがプロセッサ101上で利用可能であることを前提とする。
区画されたレジスタを使用することによって、レジスタファイル107のエラーまたはレジスタファイルへの経路もしくはレジスタファイルからの経路のエラーの検出および修復が可能になる。
本システムは、異なるレジスタ名を冗長な命令(例えば、ロード、記憶、比較)に符号化して、これらの区画されたレジスタを利用することを含む。
[時間的複製(temporal replication)]
プロセッサに影響を与えるソフトエラーは、主として、物理現象(例えば、アルファ粒子および宇宙線)の結果である。
これらの物理現象は、ランダムに発生するように観測されるが、或る平均発生率を有し、システムが誤って振舞う事象継続時間またはシステムの状態が変更されている事象継続時間の確率分布を有する。
さらに、この混乱は、一般に、VLSIチップ上の単一のアクティブデバイスまたは一群の物理的に隣接したデバイスに限定される。
これらの事象の発生間の平均時間は、混乱の最大継続時間よりもはるかに大きいという観測がなされうる。
さらに、同じ回路が、第1の事象の影響が終了した後の第2の事象によって、同様に混乱する確率も、極めて小さい。
その結果、2つの独立した同一の連続したエラーが、同じ計算ユニットにおいて、ほぼ同時に発生する確率は、無視されうる。
したがって、時間的複製の技法が使用されて、計算がソフトエラーによって大幅に混乱していなかったことを検証するのに使用されうる複数の計算領域を作成できる。
事象継続時間の確率分布から、最大混乱期間Dmaxは、事象継続時間がDmaxよりも長くなる確率が十分小さく、それより長い継続時間が考慮される必要がないように特定されうる。
宇宙線、アルファ粒子、および他のランダムに発生する混乱現象による混乱事象の平均最大継続時間は、Dmaxの値が、或る事前に決定できるプロセッサクロックサイクル数に等しいことを要求する。
これらの混乱事象の継続時間は、半導体プロセスの特性およびプロセッサチップ上のデバイスの設計の特性と共に、粒子のタイプおよびエネルギーの関数である。
したがって、Dmaxの実際の値は、あらゆる現実のプロセッサ設計に対して決定されうる。
特定のプロセッサのDmaxに適用できる値は、設計プロセスの一部として、ソフトエラーの原因の詳細なシミュレーションによって決定されうるし、プロセッサを構成する実際のデバイスの個体数の測定によっても決定されうるし、あるいは、促進されたエラー率測定技法を通じても決定されうる。
例えば、約1ギガヘルツのクロック周波数を有するプロセッサの場合、Dmaxは、数個のCPUクロックサイクルの値を有することができる。
図2は、時間的複製障害検出システム200の例示のコンポーネントおよびプロセスフローを示す図である。
図2に示すように、対象となっているプログラムのソースコード201は、モデルに基づいて、コンパイラ202により、計算セグメント207に分割される。
このモデルでは、各セグメントは、一組の入力を取り込み、その入力値に対して計算を実行し、その後の計算に一組の出力を公開する。
各コードセグメントは、コンパイラ202によって処理され、その結果生成されたコード203は、オプティマイザ205に渡される。
オプティマイザ205は、オペレーションの実行をスケジューリングして、特定のプロセッサの利用可能な資源を最も良く利用する。
本方法は、コード生成段階前に、通常のコンパイラで実施される大幅な変更を必要としない。
1つの可能な変更は、エラーチェックをオンまたはオフにするコンパイラフラグの処理を含む。
(ソースコード構文解析段階に続く)コード生成段階では、コンパイラ202は、プログラムセマンティクスの中間コード化されたもの(intermediate encoding)を読み出し、標準的なオペレーションを実行する。
この標準的なオペレーションは、識別子および一時のもの(temporaries)にアドレスを割り当てる等、対象コンピュータに空間および資源を割り当てることを含む。
通常のコンパイラによって実行されるこれらのオペレーションに加えて、コンパイラ202は、一時的な値を保持する資源(レジスタ等)の割り当ておよび再割り当てを行うオペレーションのコードも生成する。
コンパイラ202のコード生成段階は、変更されて、エラーハンドリングコード204を生成する。
このエラーハンドリングコード204は、実行されると、プログラムの各セグメントの正しいオペレーションを検証する。
プロセッサ101の資源が使用されて、冗長なチェック計算が、初期の計算を実行する領域とは異なる計算領域で、それぞれ実行される。
コンパイラ202によって生成されたエラーハンドリングコード204はさらに構成されて、エラーの封じ込めに適した動作がなされ、代替的な実施の形態では、回復動作がエラーの検出時に開始される。
本プロセッサは、通常、複数の実行ユニットを自身の設計に組み込んで、プロセッサの性能を改善する。
複数の、すなわち冗長な実行ユニットは、通常、HPPA(「Hewlett-Packard Precision Architecture(ヒューレットパッカード精密アーキテクチャ)」)やSPARC(スカラープロセッサアーキテクチャ(Scalar Processor ARChitecture))等の複数命令同時発行アーキテクチャ(multiple issue architecture)に存在し、また、EPIC IPF(「Explicitly Parallel Instruction Computer Itanium Processor Family(明示的並列命令コンピュータItaniumプロセッサファミリ)」)等のVLIWアーキテクチャにも存在する。
I/Oオペレーションおよびメモリオペレーションに伴うシリアル化により、実行ユニットが十分に利用されないことが頻繁に発生する。
その結果、プログラム実行時間に大きな影響を与えることなく、冗長なチェック計算の実行をスケジューリングできることが多い。
これらの資源のスケジューリングの制御は、通常、複数命令同時発行アーキテクチャには設けられず、いくつかのVLIW設計の場合には、明白ではない場合がある。
したがって、資源スケジューリングは、オプティマイザ205によって行われる。
オプティマイザ205は、コードを並べ替え、オペレーションの実行をスケジューリングして、機能ユニット、タイミングおよび待ち時間等のプロセッサの利用可能な資源を最も良く利用する。
本時間的複製方法では、オプティマイザ205が、冗長なコードセクション210/215の実行をスケジューリングして、最少のクロックサイクル数(すなわち、最少時間量)が、コンパイルされたソースコードの特定のセグメントの1次コピー210の実行と2次コピー215の実行との間で、経過する。
1次/2次の対のコードセクション210/215による同じハードウェア資源206の利用の間の時間が或るデルタ、例えばDmaxよりも大きい限り、コピーの実行順序は重要ではない。
プログラムがコンパイルされて一定のプロセッサ上で実行する時に、Dmaxが判明しているとすると、本システム200のコンパイラ202は、冗長な計算およびチェックを実行する各コードセクション215が、初期計算/チェックを実行するコードセクション210から独立して、少なくともDmaxのプロセッササイクルで確実に実行されるようにする。
オプティマイザ205は、2つのコードセクション210/215の間に、ノーオペレーション(「Nop」)を挿入するか、または、他のオペレーションをスケジューリングして、適切な実行時間間隔を確保できる。
代替的な実施の形態では、プロセッサ101上で実行するプログラムによりインターロゲートされうる方法で、Dmaxに対応する時間の長さを組み込むメカニズムが、設けられる。
例えば、Dmaxの値は、冗長なスレッドの実行をタイムスキューして、それに応じて、Dmaxにほぼ等しい待ち時間量を可能にするように、これらのプログラム(コンパイラ202以外)により使用されうる。
以下の表1に示すコンパイルされたコードは、オペレーションA+B=Cが、プロセッサ101等の例示のVLIWプロセッサ上で、どのように実行されうるかを示す例である。
表1に示す例では、VLIWプロセッサは、サイクルの命令語の中に、サイクルごとの5つのオペレーションを許可する。
1つの分岐/比較ユニットのみが示されている。
プロセッサが、オペランドを待つことを引き伸ばしていない限り、表1の各行に示される命令は、クロックサイクルごとに発行される。
以下の例において、「BRUnit」は分岐/比較ユニット(102A/102B)であり、「ALU/cmpU」は整数ユニット(103A/103B)であり、「Load/storeU」はロード/記憶ユニット(104A/104B)であり、R1〜R3はレジスタ(106A/106B)である。
上記で示されたVLIWプロセッサの特徴は、以下に述べるその後のすべての例にも適用可能である。
Figure 2005166057
上記プロセッサは並列実行可能であるが、上述のコンパイルされたコードには、まだ多数のNopが存在する。
コンパイラ202は、サイクルごとにより多くのオペレーションをスケジューリングすることおよび待ち時間を短縮することによって性能を向上させるために、利用可能なスロットに命令をスケジューリングするコード、プリフェッチを発行するコード等を含むことができる。
以下の表2に示すコンパイルおよび最適化がなされたコードは、表1に示すA+B=Cのオペレーションを実行する本時間的複製方法の例である。
表2に示すように、レジスタR1およびR2に値AおよびBをそれぞれロードするオペレーションは、クロックサイクル1で最初に実行され、その後、クロックサイクル4で同じレジスタを使用して繰り返される。
最初の加算オペレーションの結果は、サイクル2でレジスタR3に保存され、ステップ220において、検証コード204により、第2の加算オペレーションの結果(サイクル5でレジスタR4に記憶される)と比較される。
レジスタR3およびR4に記憶された値が等しくない場合、エラーハンドリングルーチン230への分岐が行われる。
そうでない場合、処理は、ステップ225における次のコードセグメントに続く。
コンパイラ202は、プログラムをセグメント207に分割して、2つのオペレーションの結果は、当該結果が「公開」される前、または、当該結果が使用されてプログラムのその後の実行フローを変更する前に、チェックされる。
結果は、I/Oデバイスに書き込まれることによって、公開されうる。
あるいは、プログラムの制御フローを変更することもあるし、しないこともある条件分岐の実行時には、結果は、別のプロセスもしくはプロセッサにより見られうるメモリ領域に書き込まれることによって、公開されうる。
エラー回復が実施される場合、セグメント207に関して追加される制約は、チェックが成功して完了されるまで、セグメントはその入力を破棄しないことである。
オプティマイザ205により、他のプログラム命令文を実行する隣接した計算セグメントからのコードは、表2に示すようなセグメントの実行およびチェックのコードに重なることができる。
この条件は、各命令文の時間的冗長が個別に維持され、順序付けが維持されて、プログラムの順序で、かつ、各命令文のチェックシーケンスの実行が成功した後にのみ、結果が公開されることである。
エラーハンドリングルーチン230は、エラーのあるオペレーションを所定の回数、再試行してもよいし、あるいは、オペレーションを再試行する代わりに、障害を引き起こすか、または、他の動作を取ってもよい。
表2に示す例では、Nopが、コンパイラ202によって、クロックサイクル3に挿入されている。
コンパイルされたコードのセグメントの1次コピー210の実行と2次コピー215の実行との間に置かれるクロックサイクル数は、上述したように、特定のプロセッサのDmaxの値の関数である。
表2の例において、レジスタR1〜R4は、図1のレジスタファイル106A/106Bのレジスタに対応し、「Error」は、エラーハンドリングルーチン230のラベルである。
表2に示すコードは、3サイクルのDmaxについてコンパイル/最適化されている。
すなわち、冗長コードセクションの実行間に、3つのクロックサイクルが存在する。
例えば、最初の「Load R1=A」オペレーションはコンパイルされて、クロックサイクル(1)の期間中に実行され、この同じオペレーションの冗長な実行は、コンパイルされて、3サイクル後のクロックサイクル(4)の期間中に実行される。
Figure 2005166057
[エラーハンドリング]
本システムは、図2の判定ブロック220(および図3のブロック320)によって示されるように、1つまたは複数のチェックを実行し、2つの独立した計算領域(すなわち、時間領域または空間領域)でコードセクションについて実行された計算の結果が、その後の計算にそのコードを公開する前、または、その結果を使用して分岐オペレーションを指令する前に、同一であることを確実にする。
これは、分岐が実際に行われる前および後の双方で行われて、オプティマイザ205による最適化の機会を提供できる。
不一致が、冗長な計算間に検出された場合、プログラムは、エラーハンドリングコード230に分岐する。
回復は、エラーの表示およびプログラム実行の終了(「フェイルファスト」)と同程度に単純であってよい。
この技法は、他の回復のレベルがシステムによって提供される場合に、十分でありうる。
あるいは、プログラムは、その開始から再起動されうる。
ただし、この手順は、いくつかの種類の対話型アプリケーションには受け入れられない場合がある。
より包括的な回復手順では、最後のプログラムセグメントが再実行される。
すべての計算がチェックされるまで、計算された値は公開されないので、エラーのある結果を生成するプログラムステージ、すなわちセグメントは、その開始から安全に再実行されて、エラーから回復できる。
代替的な実施の形態では、エラー回復オペレーションが進行中であることを示すフラグがセットされる。
このフラグは、この計算のステージが正しく終了すると、クリアされる。
このプログラムステージの実行を試みる際に、第2のエラーは発生すると、ハードエラーが発生したとの表示が与えられる。
さらに代替的なエラーハンドリング技法は、結果が、異なる領域で3回以上計算されるように、プログラムを構成することが含む。
この場合、プログラムコードは、計算領域の大部分によって配信された計算結果が、そのコードの特定のセグメントの実行結果として公開されるように、構成される。
この保護レベルを必要とするコードにおいてのみ、任意のこれらの方法が、選択的に使用されうることに留意されたい。
[空間的複製(spatial replication)]
図3は、空間的複製障害検出システム300の例示のコンポーネントおよびプロセスフローを示す図である。
この空間的複製方法では、各実行経路が、機能ユニットおよびレジスタを含む別々のプロセッサ資源を使用しながら、特定のプログラムのコードは、2回以上実行されうる。
図3に示すように、対象となっているプログラムのソースコード201は、最初に、モデルに基づいて、コンパイラ202により、計算セグメント207に分割される。
このモデルでは、各セグメントが一組の入力を取り込み、その入力値に対して計算を実行し、その後の計算に一組の出力を公開する。
各コードセグメント207は、次に、コンパイラ202によってコンパイルされて、1次コンパイル済みコードセクション303、2次コンパイル済みコードセクション305、および検証コード304を生成する。
これらは、オプティマイザ205に入力される。
オプティマイザ205は、次に、コードセグメント303および305に対応するコードの1次コピー306および2次コピー307を生成し、これらの1次コピーおよび2次コピーが、異なるレジスタおよび機能ユニット206(1)/206(2)(さらに、プログラムによって利用される他のあらゆる実行資源)をそれぞれ使用して、確実に実行されるようにする。
検証コード304の最適化されたコピー308も、オプティマイザ205によって生成される。
オプティマイザ205は、1対の1次オペレーションまたは2次オペレーションを削除しない限り、または、それらのオペレーションが同じ資源上で実行されるようにしない限り、または、結果が同一であることをチェックコードが検証するまで結果を公開しない限り、コピー306/307のオペレーションを並べ替えることができる。
時間的複製の場合のように、コンパイラは、コードをセグメントに分割して、チェックは、あらゆる結果の公開前または制御の転送前に、実行される。
代替的な実施の形態では、タグ等の「ヒント」が提供されて、計算領域を、他の計算領域に使用される資源と交わらない一組の実行資源およびデータ資源に、関連付けることを可能にする。
異なる計算領域の実行は、重なり合うことを許容されうる。
コンパイラ202は、冗長な計算および結果のチェック用の第2のコードセグメントと共に、プログラム実行の各ステージの実行用の第1のコードセグメントを生成して、各セグメントに異なる計算領域を指定する。
例えば、プログラムの実行ステージにおいて、s=sin(a)の割り当てが必要な場合、コンパイラ202は、以下のようなコードを生成できる。
ts=sin(a);第1の計算領域
rs=sin(a);第2の計算領域
if(ts<>rs) go to 回復ルーチン:
[この時点で、sは、その後の計算に公開されうる]
s=ts;
次に、後続のプログラムステージのコードが生成される。
本実施の形態では、一方の計算領域が、第1の組の実行ユニット、例えば機能ユニット102A〜105Aおよびレジスタグループ106Aのレジスタを使用し、他方の計算領域が、第2の組の実行ユニット、例えば機能ユニット102B〜105Bおよびレジスタグループ106Bのレジスタを使用する。
命令の各グループが関連付けられる計算領域を指定する情報により、命令のグループにタグを付けることによって、「ヒント」は、プロセッサの実行ユニットスケジューリングロジックに与えられうる。
また、ヒントが、コンパイルされたコードに含まれて、オプティマイザまたはハードウェアが複製されたオペレーションを廃棄しないことを確実にできる。
計算結果が公開される前またはその後の計算に使用される前に、冗長な結果のチェックが実行される。
判定ブロック310によって示されるように、コンパイラ202によって生成された検証コード304が実行されて、1次および2次のコードコピー306/307の実行結果が比較される。
また、このチェックは、現在の計算に使用されている計算領域とは異なる計算領域においても、実行されうる。
結果が一致しない場合には、上記セクションの時間的複製において、図2に関して説明された回復動作と同様の回復動作が、試みられることができる。
コンパイラ202は、多くのVLIWプロセッサの命令セットで利用可能な明示的なスケジューリングを利用して、冗長なコード対が同じ機能ユニットによって実行されないことを確実にすることができる。
結果の不一致が検出されると、適切な回復動作が、エラーハンドリングルーチン320によって行われる。
この回復動作は、再実行、停止、または、ソフトウェアもしくはオペレーティングシステムハンドラへのトラップを含んでよい。
以下の表3に示すコンパイルされるコードは、表1に示すA+B=Cのオペレーションを実行する本空間的複製方法の例である。
表3に示すように、クロックサイクル1において、レジスタR1およびR11に値Aがロードされ、クロックサイクル2において、レジスタR2およびR12に値Bがロードされる。
レジスタR1およびR2は、例えば、レジスタグループ106Aの一部であり、レジスタR11およびR12はレジスタグループ106Bの一部である。
クロックサイクル3の期間中に、レジスタR3およびR13が使用されて、レジスタR1/R2の内容とR11/R12の内容とがそれぞれ合計される。
次に、記憶された値「C」がレジスタR4にロードされ、次いで、クロックサイクル4(図3のステップ310)において、第1の加算オペレーションの結果が、検証コピー304/308によって、第2の加算オペレーションの結果と比較される。
レジスタR3およびR13に記憶された値が等しくない場合には、サイクル5において、エラーハンドリングルーチン320への分岐が行われる。
クロックサイクル6の期間中に、レジスタR13に記憶された合計値はプロセッサメモリに「C」として記憶される。
レジスタR3およびR13に記憶された値が一致する場合には、クロックサイクル7において、レジスタ3および4に記憶された値が比較される。
この際、メモリに記憶されたオペランドの値が再ロードされ、そのフェッチされた値は、記憶されるはずであった値と比較される。
これがなされて、レジスタからメモリへの経路またはメモリコントローラにエラーがないことが確認される。
レジスタR3およびR4に記憶された値が等しくない場合には、サイクル8において、エラーハンドリングルーチン320への分岐が行われ、等しい場合には、ステップ315において、処理は、次のコードセグメントに続く。
2つのオペレーションの結果は、公開される前またはプログラムのその後の実行フローの変更に使用される前にチェックされる。
エラーハンドリングルーチン320は、以下の動作の任意の組み合わせを提供できる。
すなわち、エラーのあるオペレーションを所定の回数再試行すること;オペレーションを再試行する代わりに、停止させるかまたは他の動作を行うこと;エラー報告を行うこと;および総計値を収集することの任意の組み合わせが提供されうる。
表3の各列の命令は、プロセッサ101の特定の機能ユニットに加えて、レジスタファイル107のグループ106Aまたは106Bのいずれかの特定のレジスタのグループによって実行される。
レジスタファイル107が区画されて、同じレジスタ資源は、1次および2次のコードコピー306/307によって使用されない。
Figure 2005166057
オプティマイザ205は、上記に示したコードのNopの箇所のいくつかに、後続のオペレーションをスケジューリングできることに留意されたい。
表3の例に示すように、複製されたコードが、異なる結果レジスタを使用することによって、機能ユニット、レジスタまたはそれらの間の経路にエラーが存在するかどうかが、結果の比較により、判断されうる。
同じことは、オペレーションの比較にも同様に当てはまる。
代替的な実施の形態では、分岐のターゲットアドレスまたはラベル(または制御オペレーションの他の変更)が、レジスタにロードされて、レジスタに記憶された値を、分岐が行われたラベルに関連付けられたアドレスのリテラル値と比較することによって、制御の変更が正しく実行されたかどうかについて、判断がなされうる。
記憶および比較がなされた値は、アドレスである必要はなく、ラベルまたはエントリポイントに対して十分一意である値である必要があり、それによって、誤った分岐が、同一に符号化されたラベルまたはエントリポイントで制御する可能性を小さくできる。
さらに別の代替的な実施の形態では、冗長な戻りアドレスまたはコマンドコードを渡すことを含めて、プロシージャコールおよびシステムコールのパラメータは、複製されうる。
同様に、複製された結果は、戻されうる。
これらの技法は、呼び出されたルーチンへのパラメータおよび呼び出されたルーチンからの結果が正しいことを確実にするのに役立つ。
ホストシステムが、メモリならびにメモリへの経路およびメモリからの経路の十分なエラー検出および訂正を有しない場合には、1次および2次のコードコピー306/307によって表されるような2つの別々のデータ領域が保持されることもできる。
データは、冗長な領域からフェッチされ、比較されて、データが正確であることを保証する。
代替的な実施の形態では、2つの空間的に異なる計算の結果を比較し、エラーハンドリングルーチンに分岐するかまたはコードを再実行するのではなく、特定のプログラムのコードが3つ以上の空間領域で実行され、その結果が採決されて、どの結果(過半数または一致した結果)が実行されるかが決定されうる。
図4は、図2および図3に示されるシステムのオペレーション中に実行される例示のステップを示すフローチャートである。
図4に示すように、ステップ405において、プログラムのソースコードは、まず、ステップ406で、計算セグメントにセグメント化され、次いで、2つの形態のうちの1つでコンパイルされ、最適化される。
いずれの形態でも、その結果のコンパイルされたオブジェクトコードは、最初の計算を実行する領域とは異なる計算領域で、冗長な計算を実行する。
結果のコンパイルされたコードが、(図2について上述したように)タイムスキューされた方法で実行される場合には、ステップ407において、コンパイラ202およびオプティマイザ205は、2つの冗長なコードセグメントを生成し、その実行をスケジューリングして、最少のクロックサイクル数が、コンパイルされたソースコードの特定のセグメントの1次コピー210の実行と2次コピー215の実行との間に、経過する。
コンパイルされたコードが、異なるハードウェアエンティティを介して実行される場合には、ステップ408において、コンパイラ202/オプティマイザ205は、特定のコードセグメントの本質的に冗長な1次コピー306および2次コピー307を生成して、1次コピーおよび2次コピーが、異なるレジスタおよび機能ユニット206(1)/206(2)を使用することを確実にする。
これらの2つのコピーは、機能的に同一であり、同じ計算(または複数の同じ計算)を実行するが、各コピーの実行では異なるレジスタおよび機能ユニットが使用されるので、厳密には同一でないことから、本質的に冗長であると言われる。
(ステップ407および408で説明した)上記の場合のいずれにおいても、本明細書で説明したように、コンパイラ202は構成されて、オプティマイザ205の追加された機能を実行できることに留意すべきである。
対応するコードセグメントのコンパイル中に、ステップ410において、検証コードが、コンパイラ202によって生成される。
ステップ420において、コンパイルされたコードセグメントの冗長なコピーが、プロセッサ101によって実行される。
ステップ410で生成された検証コードが、ステップ425で実行されて、1次コピーおよび2次コピー306/307の各実行結果が、比較される。
判定ブロック430において、結果に不一致が検出されると、適切なエラーハンドリングルーチン230/320によって、適切な動作が行われる。
このエラー回復動作は、再実行(N1−ステップ433)、停止またはソフトウェアもしくはオペレーティングシステムハンドラへのトラップ(N2−ステップ432)を含んでよい。
1次コピーおよび2次コピー306/307の各実行結果が同一である場合には、ステップ434において、それらの結果がコミットされ、次のコードセグメントの冗長なコピーが、ステップ420で実行される。
代替的な実施の形態では、コンパイラによって生成された検証コード自体が構成されて、検証が、複数の計算領域で、冗長に実行されうる。
上述したオペレーションは、標準的なコンパイラで実施されうるし、「ジャストインタイム」(JIT)コンパイラで行われるような、ネイティブマシンコードまたはオブジェクトフォーマットに、コードを動的に変換するツールでも、実施されうる。
別の実施態様またはツールでは、本方法に従い、静的または動的なコードの再編成または最適化を行うソフトウェアが使用されて、レガシーコードを冗長な形態に動的に変換するか、または、既存のコードを徐々に変換できる。
本システムに準拠した設計は、上記技法のすべてまたは一部を使用できる。
すべてにするかそれとも一部にするかは、要求される保護の量、さらにはコードの性能要求によって決定される。
また、この使用がなされると、エラー検出メカニズムが関連ハードウェアに組み込まれるものなら何でも、適切に増強される。
図2〜図4について説明されたオペレーションを実行する命令は、コンピュータ可読記憶媒体に記憶されうる。
これらの命令は、図1のプロセッサ101等のプロセッサによって、検索および実行されて、プロセッサに指令して、本システムに従って動作させうる。
また、命令は、ファームウェアにも記憶されうる。
記憶媒体の例は、メモリデバイス、テープ、ディスク、集積回路、およびサーバを含む。
本システムの範囲から逸脱することなく、一定の変更が、上記方法およびシステムにおいてなされうる。
上記説明に含まれるか、または、添付図面に示されるすべての事項は、例示として解釈されるべきであり、限定する意味に解釈されるべきではないことに留意すべきである。
例えば、図1に示されるプロセッサは、図1に示されるコンポーネント以外のコンポーネントを含むように構成されることができ、これらのコンポーネントは、他の構成で、配置されうる。
図2〜図4に示す要素およびステップも、上記のように説明したシステムの精神から逸脱することなく、本明細書で説明した方法に従って変更されうる。
例示のVLIWプロセッサ(従来技術)の一定のコンポーネントを示す図である。 時間的複製障害検出システムの例示のコンポーネントおよびプロセスフローを示す図である。 空間的複製障害検出システムの例示のコンポーネントおよびプロセスフローを示す図である。 図2および図3に示すシステムのオペレーション中に実行される例示のステップを示すフローチャートである。
符号の説明
101・・・プロセッサ
102・・・分岐/比較ユニット
103・・・整数ユニット
104・・・ロード/記憶ユニット
105・・・浮動小数点ユニット
106・・・レジスタ
107・・・レジスタファイル
108・・・発行ポート
109・・・命令キュー
110・・・命令キャッシュ
200・・・時間的複製障害検出システム
201・・・ソースコード
202・・・コンパイラ
203・・・コード
204・・・検証コード
205・・・オプティマイザ
206・・・機能ユニット
207・・・コードセグメント
230・・・エラーハンドリングルーチン
300・・・空間的複製障害検出システム
303・・・1次コードセクション
304・・・検証コード
305・・・2次コードセクション
308・・・検証コピー
320・・・エラーハンドリングルーチン

Claims (10)

  1. プログラムを実行するデジタルプロセッサ(101)の計算エラーを検出する方法であって、
    前記プログラムを、計算セグメント(207)に分けるステップと、
    前記セグメント(207)の少なくとも1つのソースコード(201)をコンパイルするステップであって、それによって、2つのコードセクション(210/215)を生成し、この2つのコードセクションの一方が、他方に対して機能的に冗長であるステップと、
    前記2つのコードセクション(210/215)の実行によって生成された結果を比較する検証コード(204)を生成するステップと、
    前記コードセクション(210/215)それぞれを、異なる計算領域で実行するステップであって、それによって、各結果を生成するステップと、
    前記検証コード(204)を使用して、前記各結果を比較するステップと、
    前記各結果が同一である場合にのみ、前記コードセクション(210/215)の1つを実行するステップであって、それによって、前記プログラムの実行のその後のフローを変更するステップと
    を含む方法。
  2. 前記計算領域は、時間領域を含む
    請求項1に記載の方法。
  3. 前記コンパイルするステップは、
    前記コードセクション(210/215)の第1のコードセクションの実行と、前記コードセクション(210/215)の他方のコードセクションの実行との間で経過するプロセッサクロックサイクル数が最少となるように、前記ソースコード(201)をコンパイルして、実行をスケジューリングすること
    を含む
    請求項1に記載の方法。
  4. 前記最少のプロセッサクロックサイクル数は、前記計算エラーを引き起こす混乱事象の継続時間の統計的特性の関数として、事前に決定される
    請求項3に記載の方法。
  5. 前記計算領域は、空間領域を含む
    請求項1に記載の方法。
  6. 前記コンパイルするステップは、
    前記コードセクション(210/215)それぞれが、前記プロセッサ(101)の別々の資源を使用して実行されるように、前記ソースコード(210)をコンパイルする
    ことを含む
    請求項1に記載の方法。
  7. 前記資源は、機能ユニット(102A/B〜105A/B)および区画されたレジスタ(106A/B)を備える
    請求項6に記載の方法。
  8. 前記区画されたレジスタ(106A/B)は、使用されて、前記レジスタ(106A/B)のエラーおよび前記レジスタ(106A/B)への/からの経路のエラーの検出および修復を行う
    請求項7に記載の方法。
  9. 前記各結果は、前記コードセクション(210/215)の1つが実行された前記領域とは異なる計算領域で、前記検証コード(204)を実行することによって比較される
    請求項1に記載の方法。
  10. 前記計算セグメント(207)それぞれは、一組の入力を受け取り、前記入力値に対して少なくとも1つの計算を実行し、その後の計算に一組の出力を公開する
    請求項1に記載の方法。
JP2004349450A 2003-12-03 2004-12-02 障害検出コンピュータシステム Pending JP2005166057A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/726,976 US7584405B2 (en) 2003-12-03 2003-12-03 Fault-detecting computer system

Publications (1)

Publication Number Publication Date
JP2005166057A true JP2005166057A (ja) 2005-06-23

Family

ID=34677109

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004349450A Pending JP2005166057A (ja) 2003-12-03 2004-12-02 障害検出コンピュータシステム

Country Status (2)

Country Link
US (1) US7584405B2 (ja)
JP (1) JP2005166057A (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7318169B2 (en) * 2002-05-15 2008-01-08 David Czajkowski Fault tolerant computer
US7237148B2 (en) * 2002-09-05 2007-06-26 David Czajkowski Functional interrupt mitigation for fault tolerant computer
US7971095B2 (en) * 2005-02-16 2011-06-28 Honeywell International Inc. Fault recovery for real-time, multi-tasking computer system
US7765427B2 (en) * 2005-08-05 2010-07-27 Honeywell International Inc. Monitoring system and methods for a distributed and recoverable digital control system
US7725215B2 (en) * 2005-08-05 2010-05-25 Honeywell International Inc. Distributed and recoverable digital control system
US8260492B2 (en) * 2005-08-05 2012-09-04 Honeywell International Inc. Method and system for redundancy management of distributed and recoverable digital control system
US7793147B2 (en) * 2006-07-18 2010-09-07 Honeywell International Inc. Methods and systems for providing reconfigurable and recoverable computing resources
US20080155504A1 (en) * 2006-12-21 2008-06-26 International Business Machines Corporation Method and system for automated merging of multiple versions of a software component for an application
CN101689150B (zh) * 2007-06-20 2011-11-30 富士通株式会社 信息处理装置及控制方法
KR101418969B1 (ko) * 2008-02-27 2014-08-13 삼성전자주식회사 프로세서 및 컴파일 방법
US20110099439A1 (en) * 2009-10-23 2011-04-28 Infineon Technologies Ag Automatic diverse software generation for use in high integrity systems
DE102009054637A1 (de) * 2009-12-15 2011-06-16 Robert Bosch Gmbh Verfahren zum Betreiben einer Recheneinheit
US20110208948A1 (en) * 2010-02-23 2011-08-25 Infineon Technologies Ag Reading to and writing from peripherals with temporally separated redundant processor execution
US8516356B2 (en) 2010-07-20 2013-08-20 Infineon Technologies Ag Real-time error detection by inverse processing
US9361104B2 (en) * 2010-08-13 2016-06-07 Freescale Semiconductor, Inc. Systems and methods for determining instruction execution error by comparing an operand of a reference instruction to a result of a subsequent cross-check instruction
US8935679B2 (en) * 2012-10-10 2015-01-13 Freescale Semiconductor, Inc. Compiler optimized safety mechanism
US9274904B2 (en) * 2013-06-18 2016-03-01 Advanced Micro Devices, Inc. Software only inter-compute unit redundant multithreading for GPUs
JP6155933B2 (ja) * 2013-07-22 2017-07-05 大日本印刷株式会社 携帯型記憶媒体
KR101983125B1 (ko) 2014-05-08 2019-05-28 마이크로 모우션, 인코포레이티드 페일세이프 계산들을 수행하기 위한 방법
WO2015185071A1 (en) * 2014-06-04 2015-12-10 Giesecke & Devrient Gmbh Method for enhanced security of computational device with multiple cores
FR3026205B1 (fr) * 2014-09-23 2016-11-04 Commissariat Energie Atomique Execution speculative et iterative de graphes de flot de donnees temporises
US9524205B1 (en) 2016-01-04 2016-12-20 International Business Machines Corporation Code fingerprint-based processor malfunction detection
US10303472B2 (en) * 2016-11-22 2019-05-28 Advanced Micro Devices, Inc. Bufferless communication for redundant multithreading using register permutation
GB2565338B (en) * 2017-08-10 2020-06-03 Mips Tech Llc Fault detecting and fault tolerant multi-threaded processors
US11778420B2 (en) 2020-06-29 2023-10-03 Ickovic & Bliss, Inc. Systems, methods, and program products for digital PET identification
CN112084071B (zh) * 2020-09-14 2023-09-19 海光信息技术股份有限公司 一种计算单元运算加固方法、并行处理器及电子设备

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60198645A (ja) 1984-03-22 1985-10-08 Fujitsu Ltd デ−タ処理システム
JPS62293441A (ja) 1986-06-12 1987-12-21 Nec Corp デ−タ出力方式
US5594903A (en) * 1991-02-26 1997-01-14 Lynx Real-Time Systems, Inc. Operating System architecture with reserved memory space resident program code identified in file system name space
US5537559A (en) * 1994-02-08 1996-07-16 Meridian Semiconductor, Inc. Exception handling circuit and method
JPH1011309A (ja) 1996-06-19 1998-01-16 Hitachi Ltd プロセッサ出力比較方法およびコンピュータシステム
US7043728B1 (en) * 1999-06-08 2006-05-09 Invensys Systems, Inc. Methods and apparatus for fault-detecting and fault-tolerant process control
US6795895B2 (en) * 2001-03-07 2004-09-21 Canopy Group Dual axis RAID systems for enhanced bandwidth and reliability
US7139306B2 (en) * 2001-03-14 2006-11-21 Mercury Computer Systems, Inc. Wireless communication systems and methods for long-code communications for regenerative multiple user detection involving pre-maximal combination matched filter outputs
US6880112B2 (en) * 2001-04-04 2005-04-12 Nec Corporation Method and apparatus for online detection and correction of faults affecting system-on-chip buses
US7168008B2 (en) * 2002-01-18 2007-01-23 Mobitv, Inc. Method and system for isolating and protecting software components
JP2003316599A (ja) 2002-02-22 2003-11-07 Seiko Epson Corp 集積回路

Also Published As

Publication number Publication date
US7584405B2 (en) 2009-09-01
US20050138485A1 (en) 2005-06-23

Similar Documents

Publication Publication Date Title
US7584405B2 (en) Fault-detecting computer system
US7861228B2 (en) Variable delay instruction for implementation of temporal redundancy
US11263073B2 (en) Error recovery for intra-core lockstep mode
KR101546033B1 (ko) Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행
Reis et al. SWIFT: Software implemented fault tolerance
Reis et al. Automatic instruction-level software-only recovery
KR102484125B1 (ko) 벡터 처리회로를 사용한 에러 검출
US20080244354A1 (en) Apparatus and method for redundant multi-threading with recovery
US8935678B2 (en) Methods and apparatus to form a resilient objective instruction construct
US7467327B2 (en) Method and system of aligning execution point of duplicate copies of a user program by exchanging information about instructions executed
JP2005129053A (ja) フォールトトレラント・マルチコア・マイクロプロセッシング
Zarandi et al. Two efficient software techniques to detect and correct control-flow errors
Nakka et al. Processor-level selective replication
Sartor et al. A novel phase-based low overhead fault tolerance approach for VLIW processors
JP2006252548A (ja) 時間的冗長性を実施するための可変遅延命令
US8745440B1 (en) Computer-implemented system and method for providing software fault tolerance
Rebaudengo et al. Software-level soft-error mitigation techniques
Maghsoudloo et al. CCDA: Correcting control-flow and data errors automatically
Mokhtarpour et al. PB-IFMC: A selective soft error protection method based on instruction fault masking capability
Haas Fault-tolerant execution of parallel applications on x86 multi-core processors with hardware transactional memory
Carretero et al. Implementing end-to-end register data-flow continuous self-test
Buchanan A Fault Tolerant Core for Parallel Execution of Ultra Reduced Instruction Set (URISC) and MIPS Instructions
Braga et al. Improving GPU Reliability with Software-Managed Pipeline Parity for Error Detection and Correction
Didehban Software Techniques For Dependable Execution
Li et al. Compiler-assisted soft error correction by duplicating instructions for VLIW architecture

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070404

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070627

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080407

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20080514

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20081226