(57)【要約】      （修正有）【課題】フェイルセーフ計算を実施するための方法及びデバイス、ならびに、フェイルセーフ計算を実施するためのコードをコンパイルする方法を提供する。【解決手段】方法は、第1の結果214を生成するために第1の計算212を実施することを含む。第2の結果220を生成するために、スカラー216及び第1の計算212を使用して第2の計算218が実施される。第2の計算218は、スケーリングされた結果を生成するために第1の計算212にスカラー216を乗算することと、第2の結果220を生成するためにスケーリングされた結果をスカラー216で除算することとを含む。第1の結果214と第2の結果220とが、それらが等価であるか否かを判定するために比較される。【選択図】図２
2018185855.tif 000002
【特許請求の範囲】
【請求項１】
フェイルセーフ計算を実施するための方法であって、
第1の結果を生成するために第1の計算を実施するステップと、
第2の結果を生成するためにスカラー及び第1の計算を使用して第2の計算を実施するス
テップであって、第2の計算は、スケーリングされた結果を生成するために、第1の計算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果をス
カラーで除算することとを含むステップと、
第1の結果と第2の結果とが等価であるか否かを比較するステップを含む方法。
【請求項２】
第1の結果及び第2の結果が等価でない場合に、安全動作を実施するステップを更に含む、請求項１に記載の方法。
【請求項３】
第1の計算は1つまたは複数の演算を含み、1つまたは複数の演算は最終演算を含み、第2の計算は、最終演算の前にスカラーを乗算することを含む、請求項１に記載の方法。
【請求項４】
第1の結果は第1の2進表現を有し、スケーリングされた値は第2の2進表現を有し、スカ
ラーは、第1の2進表現と第2の2進表現との間の差を最大化するように選択される、請求項１に記載の方法。
【請求項５】
スカラーは整数、浮動小数点、またはダブルである、請求項１に記載の方法。
【請求項６】
スカラーは無理数である、請求項１に記載の方法。
【請求項７】
スカラーと1.0との間の差が、スケーリングされた結果の分解能を保持するために最小
化される、請求項１に記載の方法。
【請求項８】
第1の結果がゼロであると判定される場合に、第1の結果にオフセットを加算するステップをさらに含む、請求項１に記載の方法。
【請求項９】
ハードウェア(102)を動作させるためにフェイルセーフ計算を実施するためのデバイス
であって、
第1の結果(214)を生成するために第1の計算(212)を実施し、
第2の結果(220)を生成するためにスカラー(216)及び第1の計算(212)を使用して第2の計算(218)を実施し、第2の計算(218)は、スケーリングされた結果を生成するために、第1の計算(212)にスカラー(216)を乗算すること、及び第2の結果(220)を生成するために、スケーリングされた結果をスカラー(216)で除算することを含み、
第1の結果(214)と第2の結果(220)とが等価であるか否かを示すように構成されている電子機器(104)を備えた、デバイス。
【請求項１０】
前記電子機器(104)は、第1の結果(214)及び第2の結果(220)が等価でない場合に、安全
動作を実施するようにさらに構成されている、請求項９に記載のデバイス。
【請求項１１】
第1の計算(212)は1つまたは複数の演算を含み、1つまたは複数の演算は最終演算を含み、第2の計算(218)は、最終演算の前にスカラー(216)を乗算することを含む、請求項９に
記載のデバイス。
【請求項１２】
第1の結果(214)は第1の2進表現を有し、スケーリングされた値は第2の2進表現を有し、スカラー(216)は、第1の2進表現と第2の2進表現との間の差を最大化するように選択され
る、請求項９に記載のデバイス。
【請求項１３】
スカラー(216)は整数、浮動小数点、またはダブルである、請求項９に記載のデバイス
。
【請求項１４】
スカラー(216)は無理数である、請求項９に記載のデバイス。
【請求項１５】
スカラー(216)と1.0との間の差が、スケーリングされた結果の分解能を保持するために最小化される、請求項９に記載のデバイス。
【請求項１６】
前記電子機器(104)は、第1の結果(214)がゼロであると判定される場合に、第1の結果(214)にオフセットを加算するようにさらに構成されている、請求項９に記載のデバイス。
【請求項１７】
ハードウェアをフェイルセーフに動作させるためのコードをコンパイルするための方法であって、
第1の結果を生成するように構成されている第1の計算を識別するステップと、
第1の計算及びスカラーを含む第2の計算を生成するステップであって、第2の計算は、
第2の結果を生成し、第2の計算は、スケーリングされた結果を生成するために、第1の計
算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果
をスカラーで除算することを含むステップと、
第1の結果と第2の結果とが等価であるか否かの指示を生成するステップと、
第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップを含む、方法。
【請求項１８】
第1の計算及びスカラーを含む第2の計算を生成するステップ、ならびに、第1の結果と
第2の結果とが等価であるか否かの指示を生成するステップは、クラスを定義することを
含む、請求項１７に記載の方法。
【請求項１９】
第1の結果と第2の結果とを、メモリの離れた区画内に記憶するステップをさらに含む、請求項１７に記載の方法。
【請求項２０】
第1の計算と第2の計算とを、メモリの離れた区画内に記憶するステップをさらに含む、請求項１７に記載の方法。
【請求項２１】
第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップは、単一のプロセッサ上で動作させるために、実行可能プログラムをコンパイルすることを含む、請求項１７に記載の方法。
【請求項２２】
第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップは、単一の数学ライブラリを使用するために、実行可能プログラムをコンパイルすることを含む、請求項１７に記載の方法。
【請求項２３】
数学ライブラリを、計算エラーについて予備試験するステップをさらに含む、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピューティングに関し、より詳細には、コンピュータ上でフェイルセーフ計算を実施するための方法及びデバイスに関する。
【背景技術】
【０００２】
重要なシステム、すなわち、故障した場合に人間の健康及び環境に高い危険性を呈するシステムを安全に動作させることができる機器に対する需要が増大している。冗長なハードウェア構成要素を設計すること、及び、ソフトウェアにエラーがないことを保証することによって危険性を低減するという域を越えて、フェイルセーフ計算を保証するように重要なシステムを動作させることが望ましい場合もある。フェイルセーフ計算とは、ソフトウェア数学ライブラリまたはハードウェアベースのプロセッサに欠陥がある結果として計算エラーが導入されることがないことを意味する。
【０００３】
安全度水準、安全計装水準、安全計装システム、安全工学、計算完全性、または多重冗長算術演算としても参照される、フェイルセーフ計算を保証するための様々な規格が作成されている。フェイルセーフ計算は一般的に、任意の単一の計算エラーが検出されることを保証するために多重冗長算術演算を使用することを含む。たとえば、以下の計算を考える。
x = y * 2.0                    （計算A）
【０００４】
計算Aは、以下のソースコードを使用するCまたはC++プログラミング言語を使用して実
施することができる。
float x, y;                    （ソースコードA）
x = y * 2.0f;
【０００５】
ソースコードAをコンパイルする際、コンパイラは、浮動小数点エミュレーション数学
ライブラリ、または、利用可能である場合は、ハードウェアベースの浮動小数点コプロセッサを呼び出すことができる。数学ライブラリまたはコプロセッサにエラーが存在する場合、計算Aを正確に計算することができない。この種類のソフトウェア数学ライブラリに
よる、または、ハードウェアコプロセッサによるエラーは、ソフトウェアまたはハードウェアエラーを試験することによって検出することができない。上述したフェイルセーフ計算規格を実現するために、システムは、数学ライブラリ及びコプロセッサ計算エラーを検出することが可能でなければならない。
【０００６】
フェイルセーフ計算規格を満たすために使用される一般的な方法は、固有の数学ライブラリまたは独立したコプロセッサのいずれかを使用して各計算を2回完了させることであ
る。たとえば、以下のCまたはC++プログラミング言語コードは、2つの数学ライブラリを
使用してフェイルセーフ計算を実施する。
float x, y;                    （ソースコードB）
double xd, yd;
x = y*2.0f;
xd = yd *(double)2.0;
if ( x ! = xd ) { <code to put device in safe state> } // エラー検出！
【０００７】
ソースコードBにおいて、計算Aが2回、1回は浮動小数点数学ライブラリを使用して、1
回は倍精度数学ライブラリを使用して実施される。変数y及びydは同じ値を有するが、型
が異なる。その後、結果x及びxdが互いに比較されて、エラーが発生したか否かが判定さ
れる。計算AがソースコードBによって与えられるように実施されると、単一の計算の誤りを検出することができ、計算はフェイルセーフであると考えられる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
フェイルセーフ計算を保証するための現行の方法には多くの欠点がある。たとえば、フェイルセーフ計算を実施するために使用されることになる電子デバイスは、複数の数学ライブラリまたは複数のコプロセッサをサポートするというさらなる複雑度及びオーバヘッドを受けざるを得ない。
【０００９】
第2の欠点は、異なるデータ型において実行される算術演算が、異なる分解能、または
有効数字をサポートする場合があることである。これによって解析は必然的に、入力の範囲を所与として、計算を適切に実行するために上出来のカバレッジが提供されることを保証するために、複雑でエラーが起きやすいものとなる。
【００１０】
第3の欠点は、冗長計算をソースコードにコード化することは、特に単一の計算のみを
含むソースコードと比較して、設計及び保守管理上の危険要因となり得ることである。
【００１１】
第4の欠点は、メモリ破損によって計算が検出不可能な様式で乱されることがあり得な
いことを保証するために、フェイルセーフ計算が、メモリ保護を必要とし得るということに由来する。ソースコードAは、単一ビット不良を識別することが可能であり得るが、さ
らなるフェイルセーフ計算保護を可能にするために、破損ポインタ障害に対して防御するための追加の保護が必要とされ得る。たとえば、ソースコードAからの変数x、y、xd、及
びydは、メモリ内で同一場所に配置され得、従って、破損したポインタによってまとめて上書きされることに対して脆弱である。たとえば、破損したポインタによってx、y、xd、及びydにゼロが誤って書き込まれたとすると、xとxdとの間で単純に比較しても、この計
算障害は識別されない。破損ポインタ障害に対して保護するために、メモリ保護ユニットのような追加のハードウェア、xd、ydの反転記憶のような追加のソフトウェア、または、記憶場所が多様になることを保証するための特別なコンパイラ／リンカコマンドも、フェイルセーフ計算を提供するために必要とされ得る。
【００１２】
複数の数学ライブラリ、複数のハードウェア算術演算アクセラレータ、エラーが起きやすい固定小数点分解能解析、及び破損したポインタをなくすことを可能にするフェイルセーフ計算方法が必要とされている。理想的には、フェイルセーフ計算方法は、ソースコードをほとんど改変せずに、容易に実施及び保守管理される。
【課題を解決するための手段】
【００１３】
フェイルセーフ計算を実施するための方法が提供される。方法は、第1の結果を生成す
るために第1の計算を実施するステップを含む。方法は、第2の結果を生成するためにスカラー及び第1の計算を使用して第2の計算を実施するステップを含み、第2の計算は、スケ
ーリングされた結果を生成するために、第1の計算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果をスカラーで除算することとを含む。方法は、第1の結果と第2の結果とが等価であるか否かを比較するステップをさらに含む。
【００１４】
ハードウェアを動作させるためにフェイルセーフ計算を実施するためのデバイスが提供される。デバイスは、第1の結果を生成するために第1の計算を実施するように構成されている電子機器を含む。電子機器は、第2の結果を生成するためにスカラー及び第1の計算を使用して第2の計算を実施するようにさらに構成されている。第2の計算は、スケーリングされた結果を生成するために、第1の計算にスカラーを乗算することを含む。第2の計算は、第2の結果を生成するために、スケーリングされた結果をスカラーで除算することをさ
らに含む。電子機器は、第1の結果と第2の結果とが等価であるか否かを示すようにさらに構成されている。
【００１５】
ハードウェアをフェイルセーフに動作させるためのコードをコンパイルするための方法が提供される。方法は、第1の結果を生成するように構成されている第1の計算を識別するステップを含む。方法は、第1の計算及びスカラーを含む第2の計算を生成するステップをさらに含み、第2の計算は、第2の結果を生成する。第2の計算は、スケーリングされた結
果を生成するために、第1の計算にスカラーを乗算することを含む。第2の計算は、第2の
結果を生成するために、スケーリングされた結果をスカラーで除算することをさらに含む。方法は、第1の結果と第2の結果とが等価であるか否かの指示を生成するステップをさらに含む。方法は、第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップをさらに含む。
【００１６】
本出願の態様
方法の一実施形態において、方法は、第1の結果及び第2の結果が等価でない場合に、安全動作を実施するステップを含む。
方法の一実施形態において、第1の計算は1つまたは複数の演算を含み、1つまたは複数
の演算は最終演算を含み、第2の計算は、最終演算の前にスカラーを乗算することを含む
。
方法の一実施形態において、第1の結果は第1の2進表現を有し、スケーリングされた値
は第2の2進表現を有し、スカラーは、第1の2進表現と第2の2進表現との間の差を最大化するように選択される。
【００１７】
方法の一実施形態において、スカラーは整数、浮動小数点、またはダブルである。
方法の一実施形態において、スカラーは無理数である。
方法の一実施形態において、スカラーと1.0との間の差が、スケーリングされた結果の
分解能を保持するために最小化される。
方法の一実施形態において、方法は、第1の結果がゼロであると判定される場合に、第1の結果にオフセットを加算するステップをさらに含む。
【００１８】
デバイスの一実施形態において、電子機器は、第1の結果及び第2の結果が等価でない場合に、安全動作を実施するようにさらに構成されている。
デバイスの一実施形態において、第1の計算は1つまたは複数の演算を含み、1つまたは
複数の演算は最終演算を含み、第2の計算は、最終演算の前にスカラーを乗算することを
含む。
デバイスの一実施形態において、第1の結果は第1の2進表現を有し、スケーリングされ
た値は第2の2進表現を有し、スカラーは、第1の2進表現と第2の2進表現との間の差を最大化するように選択される。
【００１９】
デバイスの一実施形態において、スカラーは整数、浮動小数点、またはダブルである。
デバイスの一実施形態において、スカラーは無理数である。
デバイスの一実施形態において、スカラーと1.0との間の差が、スケーリングされた結
果の分解能を保持するために最小化される。
デバイスの一実施形態において、電子機器は、第1の結果がゼロであると判定される場
合に、第1の結果にオフセットを加算するようにさらに構成されている。
【００２０】
方法の一実施形態において、第1の計算及びスカラーを含む第2の計算を生成するステップ、ならびに、第1の結果と第2の結果とが等価であるか否かの指示を生成するステップは、クラスを定義することを含む。
方法の一実施形態において、方法は、第1の結果と第2の結果とを、メモリの離れた区画
内に記憶するステップをさらに含む。
方法の一実施形態において、方法は、第1の計算と第2の計算とを、メモリの離れた区画内に記憶するステップをさらに含む。
【００２１】
方法の一実施形態において、第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップは、単一のプロセッサ上で動作させるために、実行可能プログラムをコンパイルすることを含む。
方法の一実施形態において、第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップは、単一の数学ライブラリを使用するために、実行可能プログラムをコンパイルすることを含む。
方法の一実施形態において、方法は、数学ライブラリを、計算エラーについて予備試験するステップをさらに含む。
【図面の簡単な説明】
【００２２】
すべての図面上で、同じ参照符号は同じ要素を表す。図面は必ずしも、原寸に比例していない。
【図１】本出願の一実施形態によるフェイルセーフシステム100のブロック図である。
【図２】本出願の一実施形態によるフェイルセーフ計算ルーチン200を示す図である。
【図３】本出願の一実施形態によるフェイルセーフ計算方法300を示す図である。
【図４】本出願の一実施形態によるフェイルセーフ計算コンパイル方法400を示す図である。
【発明を実施するための形態】
【００２３】
図１〜図４及び以下の説明は、当業者に、本出願の最良の形態を作成及び使用する方法を教示するための特定の例を示す。本発明の原理を教示する目的で、いくつかの従来の態様は単純化または省略されている。当業者であれば、これらの例から、本出願の範囲内に入る変形形態を諒解しよう。当業者であれば、下記に記載されている特徴を様々な方法で組み合わせて、本出願の複数の変形形態を形成することができることを諒解しよう。結果として、本出願は、下記に記載されている特定の例には限定されず、特許請求の範囲及びその均等物によってのみ限定される。
【００２４】
図１は、本発明の一実施形態によるフェイルセーフシステム100のブロック図を示す。
フェイルセーフシステム100は、ハードウェア102と、電子機器104と、ハードウェア−ソ
フトウェア通信ライン106とを含む。フェイルセーフシステム100は、人間及び／または環境の健康及び安全にとって重要である計測器及び／または機器を含み得、それゆえ、フェイルセーフ環境において動作されなければならない。
【００２５】
ハードウェア102は、電子機器104によって動作、制御、監視、及び読み出しされ得る。ハードウェア102は、そのためにフェイルセーフ動作を可能にすることが特に望ましい、
任意の電子的に動作または読み出し可能な機器を含んでもよい。たとえば、ハードウェア102は、救急サービス、防火システム、遠隔通信、医療装置、原子炉、航空、または宇宙
飛行において見出されるシステムの構成要素であってもよい。ハードウェア102は、当業
者には理解されるように、他の用途にも含まれてもよい。一実施形態において、ハードウェア102は、測定または監視デバイスを含んでもよい。たとえば、ハードウェア102は、流体の流速、密度、または粘度を決定することができる振動流量計を含んでもよい。
【００２６】
通信ライン106を介して、ハードウェア102と電子機器104との間で相互に信号を送信す
ることができる。たとえば、電子機器104は、通信ライン106を介して、ハードウェア102
を構成して命令するため、または、データを要求するための信号を送信することができる。ハードウェア102はさらに、ハードウェア102内部のイベントによって促されるときに、電子機器104にデータを送信することができる。実施形態において、当業者には理解され
るように、通信ライン106は有線または無線であってもよいことは諒解されたい。
【００２７】
電子機器104は、インターフェース112と、処理システム108とをさらに含むことができ
る。処理システム108は、記憶システム110をさらに含むことができる。電子機器104は、
フェイルセーフシステム100の様々な特性を決定するために、ハードウェア102から受信される信号を処理することができる。
【００２８】
インターフェース112は、通信ライン106を介して、または、追加のリード線を介して、センサ信号を受信することができる。インターフェース112は、任意の様式のフォーマッ
ト化、増幅、バッファリングなどのような、任意の必要なまたは所望の信号調整を実施することができる。代替的に、信号調整のいくつかまたはすべては、処理システム108内で
実施されてもよい。加えて、インターフェース112は、電子機器104と外部デバイスとの間の通信を可能にすることができる。インターフェース112は、任意の様式の電子、光学、
または無線通信が可能であり得る。加えて、インターフェース112は、電子機器104と外部デバイスとの間の通信を可能にすることができる。インターフェース112は、任意の様式
の電子、光学、または無線通信が可能であり得る。
【００２９】
インターフェース112は、一実施形態において、デジタイザ（図示せず）を含むことが
でき、通信ライン106を介して受信されるセンサ信号は、アナログセンサ信号を含む。デ
ジタイザは、アナログセンサ信号をサンプリング及びデジタル化し、デジタルセンサ信号を生成することができる。デジタイザはまた、任意の必要とされるデシメーションをも実施することができ、必要とされる信号処理の量を低減し、処理時間を低減するために、デジタルセンサ信号がデシメーションされる。
【００３０】
処理システム108は、電子機器104の動作を実行し、ハードウェア102からの測定値及び
ハードウェア102へのコマンドを処理する。処理システム108はまた、フェイルセーフ計算ルーチン200のような1つまたは複数の処理ルーチンを実行することもできる。
【００３１】
処理システム108は、汎用コンピュータ、マイクロ処理システム、論理回路、または、
本明細書において記載されている機能を実施することが可能な任意の他の汎用またはカスタム処理デバイスを含んでもよい。処理システム108は、複数の処理デバイスの間で分散
されてもよい。処理システム108は、記憶システム110のような、任意の様式の一体型または独立型電子記憶媒体を含んでもよい。
【００３２】
記憶システム110は、動作パラメータ及びデータ、ソフトウェアルーチン、一定値、な
らびに変数値を記憶することができる。記憶システム110は、ランダムアクセスメモリ（RAM）のような主記憶装置またはメインメモリを含むことができる。実施形態において、記憶システム110は、ハードディスクドライブ、リムーバブル記憶デバイス、メモリカード
、フロッピーディスクドライブ、磁気テープドライブ、コンパクトディスクドライブ、デジタル多用途ディスク、Blue-rayディスク、光学記憶デバイス、テープバックアップ、または任意の他のコンピュータ使用可能または読み取り可能記憶媒体を含んでもよい。
【００３３】
電子機器104は、当該技術分野において一般的に知られている様々な他の構成要素及び
機能を含んでもよいことは理解されたい。これらの追加の特徴は、簡潔にするために、本明細書及び図面から省略されている。それゆえ、本発明は、図示及び論述されている特定の実施形態に限定されるべきではない。
【００３４】
図１は、電子機器104と通信している単一のハードウェア102のみを示しているが、当業者であれば、複数のハードウェアアセンブリが電子機器104と通信していてもよいことは
容易に諒解されよう。さらに、電子機器104は、様々な異なるハードウェアタイプを動作
させることが可能であり得る。電子機器104と通信しているハードウェア102のような各ハードウェアアセンブリは、そのハードウェアの動作に専用とされる、記憶システム110の
それぞれの区画を有することができる。
【００３５】
記憶システム110は、フェイルセーフ計算ルーチン200によって、ハードウェア102を安
全に動作させるために使用することができる変数を記憶することができる。たとえば、記憶システム110は、第1の結果214、スカラー216、第2の結果220、及びエラーインジケータ222を記憶することができる。記憶システム110はまた、フェイルセーフ計算ルーチン200
によって、ハードウェア102を安全に動作させるために使用することができる機能をも記
憶することができる。たとえば、記憶システム110は、第1の計算212、第2の計算218、第1の計算論理202、第2の計算論理204、比較論理206、及び安全動作論理208を記憶すること
ができる。記憶システム110はまた、フェイルセーフ計算ルーチン200をも記憶することができる。
【００３６】
一実施形態において、電子機器104は、ハードウェア102を安全に動作させるために、フェイルセーフ計算ルーチン200を開始し動作させることができる。実施形態において、フ
ェイルセーフ計算ルーチン200は、ハードウェア102からのデータの安全な操作及び解釈を保証するために冗長な算術演算を実施することができる。
【００３７】
図２は、本出願の一実施形態によるフェイルセーフ計算ルーチン200を示す。フェイル
セーフ計算ルーチン200は、第1の計算論理202と、第2の計算論理204と、比較論理206と、安全動作論理208とを含む。
【００３８】
フェイルセーフ計算ルーチン200は、第1の計算論理202によって開始する。第1の計算論理202は、第1の計算212を受信し、第1の結果214を生成する。第1の計算212は、プロセッ
サ上でフェイルセーフに実施することができる1つまたは複数の算術演算を含む。たとえ
ば、第1の計算論理202は、算術演算の以下の非排他的なリスト、すなわち、加算、減算、乗算、除算などを含むことができる。第1の結果214は、処理システム108上で第1の計算212を実施した結果である。実施形態において、第1の結果214は、以下の非排他的なリスト
、すなわち、整数、符号付き数、符号なし数、短整数、長整数、浮動小数点数、倍精度数、または、当業者に知られている任意の他のデータ型を含む、任意のデータ型または形式で表される数であってもよい。単純な一例において、第1の計算212は、以下の論理を含むことができる。
x1 = y1 * 2.0                  （計算B）
計算Bの例において、第1の計算212はy1*2.0であり、第1の結果214はx1である。
【００３９】
フェイルセーフ計算ルーチン200は、第2の計算論理204によって継続する。第2の計算論理204は、第1の計算212及びスカラー216を受信し、第2の計算218及び第2の結果220を生成する。スカラー216は、フェイルセーフ計算を実施する際に補助として使用することがで
きる数である。スカラー216は、限定ではないが、整数、一定値、符号付き数値、符号な
し数値、浮動小数点数、倍精度数、短整数、長整数、または、当業者に一般的に知られている任意の他の型を含む、任意のデータ型であってもよい。
【００４０】
すでに論述したように、第1の計算212は、1つまたは複数の算術演算を含む。第2の計算論理204は、スカラー216による乗算及び除算のさらなる算術演算を含めることによって、第2の計算218を生成する。ソースコードBは、第2の計算論理204の例示的な実施態様を与
える。
x1 = y1 * 2.0f;                    （ソースコードB）
x2 = ((y2 * 1.2f) * 2.0f ) / 1.2f);
【００４１】
ソースコードBにおいて、y1 * 2.0fは第1の計算212を表し、((y2 * 1.2f) * 2.0f ) / 1.2f)は第2の計算218を表し、スカラー216は1.2に等しく、第1の結果214はx1によって表
され、第2の結果220はx2によって表される。ソースコードB内の変数y1及びy2は同じ値を
有し、実施形態において、y1及びy2は、同じデータ型を有する場合もあれば、または、異なるデータ型を有する場合もある。ソースコードBにおいて、第1の計算212が、変数y1に
定数2.0fを乗算することを含むことが見てとれる。第2の計算論理204は、第1の計算212にスカラー216を乗算することによって、第1の計算212をスケーリングし、スカラーはソー
スコードBの例では1.2fであり、スケーリングされた結果が生成される。当業者であれば
、スケーリングされた結果を生成するために第1の計算212によって含まれる1つまたは複
数の演算のいずれかの前、後、または間にスカラー216が乗算されてもよいことは認識さ
れよう。一実施形態において、スカラー216を乗算する演算は、スケーリングされた結果
を生成するために第1の計算212の実施における最終演算の前に含まれてもよい。第2の計
算論理204は、スケーリングされた結果をスカラー216で除算することによって第1の計算212をさらに変換し、第2の結果220を生成する。第2の結果220は、限定ではないが、整数、一定値、符号付き数値、符号なし数値、浮動小数点数、倍精度数、短整数、長整数、または、当業者に一般的に知られている任意の他の型を含む、任意のデータ型であってもよい。
【００４２】
第1の計算212及び第2の計算218は冗長な算術演算をもたらし、第2の計算は単純に、第1の計算をスカラー216によって乗算及び除算することであることは諒解されたい。第1の計算212及び第2の計算218は同じプロセッサ上でまたは同じ数学ライブラリを用いて実施さ
れ得るということにもかかわらず、それらは異なる数のセットに対して実施される。それゆえ、ほとんどの状況において、第1の計算212及び第2の計算218は、固有の算術演算を表す。ソースコードBの例において、第1の計算212は、単純な乗算演算である。しかしなが
ら、これは限定であるようには意図されていない。さらなる実施形態において、第1の計
算212は、任意の数の算術演算を含んでもよい。
【００４３】
しかしながら、第1の計算212に使用される変数がゼロであるとき、第1の計算212及び第2の計算218は必ずしも、固有の算術演算を表すとは限らない場合がある。たとえば、ソースコードBのy1及びy2がゼロである場合、スカラー216を使用する結果として固有の計算がもたらされない。そのような状況において、第2の計算論理204は、計算の冗長性を保持するために、オフセットとスカラーの両方を使用することができる。ソースコードCは、オ
フセットとスカラーの両方を使用する例示的な実施態様を与える。
x1 =y1*2.0f;                    （ソースコードC）
x2 = ((((y2+z)* 1.2f)*2.0f ) / 1.2f) -(z*2.0f)
ソースコードCにおいて、zはオフセットを表す。それゆえ、y1及びy2がゼロである場合、第1の計算212及び第2の計算218の固有性が保持される。
【００４４】
しかしながら、オフセットを使用することによって、さらにコードが複雑になり、ソフトウェア実行時間が長くなる可能性がある。オフセットを含めることに対する代替形態は、第1の計算212及び第2の計算218に使用される変数がゼロである場合に成功することを証明するために、問題の数学ライブラリまたはコプロセッサを予備試験することである。
【００４５】
スカラー216の選択は解析を必要とし、使用される数学ライブラリ及び／またはコプロ
セッサに依存し得ることに留意されたい。一般的に言えば、スカラー216の値は1またはゼロに設定されるべきではなく、それは、そのような値が固有の第1の計算212及び第2の計
算218をもたらさないためである。一実施形態において、スカラー216は、誤った計算を検
出するのを補助するために、第1の結果214の2進表現とスケーリングされた結果の2進表現との間の差を最大化するように選択される。
【００４６】
実施形態において、スカラー216は、整数ベースの算術演算のために第1の計算212及び
第2の計算218の分解能を節約するために、1.0に近くなるように選択することができる。
実施形態において、スカラー216は、無理数であってもよい。たとえば、2.222222のスカ
ラー216の値は、IEEE-754浮動小数点表現における妥当な選択である。2進法の世界における無理数として、値2.222222は、根本的に異なる仮数をもたらし、これは、それらの数のビット表現の間に大きな差をもたらし得る。数及びそれらのスケーリングされた値の例を、IEEE-754表現及び2.222222のスカラーを使用して下記に与える。
1.000000                          （16進法では3F800000）
1.000000 X 2.222222 = 2.222222    （16進法では400E38E3）
1000000                           （16進法では49742400）
1000000 X 2.222222 = 2222222      （16進法では4A07A238）
0.4500000                          （16進法では3EE66666）
0.4500000 X 2.222222 = 1.000000    （16進法では3F800000）
それによって、第1の計算212及び第2の計算218の分解能を保持するスカラー216の値を
選択することによって、計算の誤りの検出を補助する利点がもたらされる。
【００４７】
フェイルセーフ計算ルーチン200は、比較論理206によって継続する。比較論理206は、
第1の結果214及び第2の結果220を受信し、エラーインジケータ222を生成する。比較論理206は、結果が同じであるか否かを判定するために、第1の結果214を第2の結果220と比較する。第1の計算212及び第2の計算218を同じコプロセッサ上でかつ／または同じ数学ライブラリを用いて実施することができるため、本出願の実施形態は、第1の結果214及び第2の
結果220が同じデータ型であり得るという点において、従来の方法にまさる利点をもたら
す。これによって、比較演算を大幅に単純化することができ、異なる型の値の比較において、エラーが起きやすい分解能解析を実施する必要がなくなる。第1の結果214及び第2の
結果220が同じである場合、計算はフェイルセーフであると考えられる。第1の結果214及
び第2の結果220が同じでない場合、エラー状態が存在し得、比較論理206は、エラーイン
ジケータ222を設定することによってエラー状態が存在することを示すことができる。実
施形態において、エラーインジケータ222は、ディスプレイまたは電子メッセージを介し
てユーザに報告することができる。
【００４８】
フェイルセーフ計算ルーチン200は、安全動作論理208によって継続する。安全動作論理208は、エラーインジケータ222を受信する。エラーが発生したことをエラーインジケータ222が示す場合、安全動作論理208は、失敗した計算に起因してもたらされ得る、人間または環境に対する損傷または被害を防止するための動作を実施することができる。実施形態において、安全動作論理208は、ハードウェア102に関する安全化手順を開始することができる。別の実施形態において、安全動作論理208は、ハードウェア102を用いて行われた測定が誤っている可能性があるとオペレータに警告することができる。
【００４９】
図３は、フェイルセーフ計算方法300を示す。フェイルセーフ計算方法300は、フェイルセーフ計算ルーチン200の例示的な実施形態である。処理システム108は、フェイルセーフ計算方法300を実行するために必要な信号及びデータ処理を実施するように構成すること
ができる。フェイルセーフ計算方法300は、ステップ302によって開始する。ステップ302
において、第1の結果を生成するために第1の計算が実施される。たとえば、上述したように、第1の結果214を生成するために、第1の計算論理202によって第1の計算212が実施されてもよい。
【００５０】
フェイルセーフ計算方法300は、ステップ304によって継続する。ステップ304において
、第2の結果を生成するためにスカラー及び第1の計算を使用して第2の計算が実施され、
第2の計算は、スケーリングされた結果を生成するために、第1の計算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果をスカラーで除算する
こととを含む。たとえば、第2の計算論理204が、スカラー216、第1の計算212を受信し、
第2の計算218を生成してもよい。第2の結果220は、上述したように、処理システム108上
で第2の計算218を実施した結果を含んでもよい。
【００５１】
フェイルセーフ計算方法300は、ステップ306によって継続する。ステップ306において
、第1の結果と第2の結果とが等価であるか否かが示される。たとえば、比較論理206は、
上述したように、第1の結果214及び第2の結果220を受信し、エラーインジケータ222を生
成してもよい。
【００５２】
図４は、フェイルセーフ計算コンパイル方法400を示す。フェイルセーフ計算コンパイ
ル方法400は、コードを、処理システム108上でフェイルセーフ計算を実行することができる実行可能ソフトウェアにコンパイルするために実施することができる。たとえば、フェイルセーフ計算コンパイル方法400は、フェイルセーフ計算ルーチン200またはフェイルセーフ計算方法300を実行するように構成されているコードをコンパイルするために実施す
ることができる。
【００５３】
方法400は、ステップ402によって開始する。ステップ402において、第1の結果を生成するように構成されている第1の計算が識別される。たとえば、第1の計算212または計算Aが、コンパイラによって識別され得る。
【００５４】
フェイルセーフ計算コンパイル方法400は、ステップ404によって継続する。ステップ404において、第1の計算及びスカラーを含む第2の計算が生成され、第2の計算は第2の結果
を生成し、第2の計算は、スケーリングされた結果を生成するために、第1の計算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果をスカラー
で除算することとを含む。たとえば、第2の計算論理204が、第1の計算212及びスカラー216を受信して、第2の計算218及び第2の結果220を生成してもよい。
【００５５】
フェイルセーフ計算コンパイル方法400は、ステップ406によって継続する。ステップ406において、第1の結果と第2の結果とが等価であるか否かの指示が生成される。たとえば
、上述したように、比較論理206がエラーインジケータ222を生成してもよい。
【００５６】
フェイルセーフ計算コンパイル方法400は、ステップ408によって継続する。ステップ408において、第1の計算、第2の計算、及び指示が、実行可能プログラム内に含められる。
実施形態において、実行可能プログラムは、当業者に一般的に知られている任意のタイプのコンピュータ上で動作するようにコンパイルされてもよい。実施形態において、ソフトウェアは、実行可能ソフトウェアプログラム、または、他の実行可能ソフトウェアプログラムによってアクセス可能なライブラリであってもよい。
【００５７】
すべてのフェイルセーフ計算についてステップ402、404、及び406を含むようにソフト
ウェアコードを書くことによって、相当量のコンパイルがソフトウェアエンジニアの作業に加わる可能性があることは諒解されよう。このさらなるコンパイルは、最終ソフトウェア製品のロバスト性及び品質に悪影響を与える可能性がある。それゆえ、実施形態において、ステップ408はさらに、ソフトウェアコンパイル中にステップ404及び406の機能が自
動的に生成され得ることを可能にする。ソフトウェアのコンパイル中にこのコードを「内部で」生成することによって、エラーのない、保守管理しやすい、ロバストなソフトウェ
アコードの利点をもたらすことができる。たとえば、ソフトウェアエンジニアは、ソースコードAを書くことができ、ソースコードBの機能が、コンパイル中に実行可能な最終製品ソフトウェア内に含められ得る。ソースコードAはソースコードBよりも、検査によってより容易に理解され、実施するのにはるかにエラーが起きにくく、他のプロセッサまたはコンピューティングシステムにより容易に移植される。
【００５８】
C、C++、Java（登録商標）、または当業者に知られている任意の他のプログラミング言語のような標的プログラミング言語の特徴を使用し、コンパイラを使用して、ソースコードAをコンパイルするときにソースコードBの機能をカプセル化することが可能である。たとえば、C及びC++プログラミング言語において、第1の計算212、第2の計算218、及び、第1の結果214と第2の結果220との間の比較をカプセル化するためのクラスを定義及び使用することができる。ほとんどのコンピュータ言語が、このタイプのカプセル化及び複雑性隠しに対する何らかのサポートを与える。
【００５９】
実施形態において、ステップ408は、独立した計算の結果を互いから離れているメモリ
の部分に記憶することを可能にすることによって、フェイルセーフ計算をさらにもたらすことができる。たとえば、第1の計算212、第1の結果214、スカラー216、第2の計算218、
及び第2の結果220の任意の組み合わせを、隣接していないかつ／または離れたメモリの区画に書き込むことができる。隣接していないかつ／または離れたメモリの区画は、同じメモリ空間内の隣接していないアドレスを有するメモリの区画、または、異なるハードウェア構成要素上に見られるメモリを含んでもよい。実施形態において、メモリのいくつかは、当業者には理解されるような、さらなるハードウェア及び／またはソフトウェア保護を含むことができる。ステップ402、404、及び406によって与えられる演算の結果を離れた
メモリに記憶することによって、破損したポインタに対して計算をさらに保護することができることは諒解されよう。
【００６０】
実施形態において、ステップ408は、第1の計算、第2の計算、及び指示を、単一のプロ
セッサ上で動作する実行可能プログラム内に含めることができる。さらなる実施形態において、ステップ408は、第1の計算、第2の計算、及び指示を、単一の数学ライブラリを利
用する実行可能プログラム内に含めることができる。さらなる実施形態において、ステップ408は、数学ライブラリをエラーについて予備試験することを含むことができる。
【００６１】
上記の実施形態の詳細な説明は、本出願の範囲内にあるべき、本発明者らによって企図されているすべての実施形態の包括的でない説明である。事実、当業者であれば、上述した実施形態の特定の要素は、さらなる実施形態を作成するために様々に組み合わせ、または、なくすことができ、そのようなさらなる実施形態が本出願の範囲及び教示の中に入ることは認識されよう。上述した実施形態は、本発明の範囲及び教示内の追加の実施形態を作成するために全体的にまたは部分的に組み合わせることができることも、当業者には諒解されよう。
【００６２】
従って、本出願の特定の実施形態及びその例が、本明細書において例示を目的として記載されているが、当業者であれば認識されるような、様々な均等な改変が本出願の範囲内で可能である。本明細書において与えられている教示は、上述されており、添付の図面に示されている実施形態だけでなく、他の計器にも適用することができる。従って、本出願の範囲は、添付の特許請求の範囲から決定されるべきである。
【図１】
2018185855.tif 000003
【図２】
2018185855.tif 000004
【図３】
2018185855.tif 000005
【図４】
2018185855.tif 000006
【手続補正書】
【提出日】平成30年7月19日(2018.7.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
フェイルセーフ計算を実施するための方法であって、
第1の結果を生成するために、1つまたは複数の演算を含む第1の計算を実施するステップと、
第2の結果を生成するためにスカラー及び第1の計算を使用して第2の計算を実施するステップであって、第2の計算は、スケーリングされた結果を生成するために、第1の計算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果をスカラーで除算することとを含むステップと、
第1の結果と第2の結果とが等価であるか否かを示すステップを含み、
第2の計算は、第１の計算に含まれる1つまたは複数の演算を含まない方法。
【請求項２】
第1の結果及び第2の結果が等価でない場合に、安全動作を実施するステップを更に含む、請求項１に記載の方法。
【請求項３】
第1の計算の1つまたは複数の演算は最終演算を含み、第2の計算は、最終演算の前にスカラーを乗算することを含む、請求項１に記載の方法。
【請求項４】
第1の結果は第1の2進表現を有し、スケーリングされた値は第2の2進表現を有し、スカラーは、第1の2進表現と第2の2進表現との間の差を最大化するように選択される、請求項１に記載の方法。
【請求項５】
スカラーは整数、浮動小数点、またはダブルである、請求項１に記載の方法。
【請求項６】
スカラーは無理数である、請求項１に記載の方法。
【請求項７】
スカラーと1.0との間の差が、スケーリングされた結果の分解能を保持するために最小化される、請求項１に記載の方法。
【請求項８】
第1の結果がゼロであると判定される場合に、第1の結果にオフセットを加算するステップをさらに含む、請求項１に記載の方法。
【請求項９】
ハードウェア(102)を動作させるためにフェイルセーフ計算を実施するためのデバイスであって、
第1の結果(214)を生成するために、1つまたは複数の演算を含む第1の計算(212)を実施し、
第2の結果(220)を生成するためにスカラー(216)及び第1の計算(212)を使用して第2の計算(218)を実施し、第2の計算(218)は、スケーリングされた結果を生成するために、第1の計算(212)にスカラー(216)を乗算すること、及び第2の結果(220)を生成するために、スケーリングされた結果をスカラー(216)で除算することを含み、
第1の結果(214)と第2の結果(220)とが等価であるか否かを示すように構成されている電子機器(104)を備え、第2の計算は、第１の計算に含まれる1つまたは複数の演算を含まないデバイス。
【請求項１０】
前記電子機器(104)は、第1の結果(214)及び第2の結果(220)が等価でない場合に、安全動作を実施するようにさらに構成されている、請求項９に記載のデバイス。
【請求項１１】
第1の計算(212)の1つまたは複数の演算は最終演算を含み、第2の計算(218)は、最終演算の前にスカラー(216)を乗算することを含む、請求項９に記載のデバイス。
【請求項１２】
第1の結果(214)は第1の2進表現を有し、スケーリングされた値は第2の2進表現を有し、スカラー(216)は、第1の2進表現と第2の2進表現との間の差を最大化するように選択される、請求項９に記載のデバイス。
【請求項１３】
スカラー(216)は整数、浮動小数点、またはダブルである、請求項９に記載のデバイス。
【請求項１４】
スカラー(216)は無理数である、請求項９に記載のデバイス。
【請求項１５】
スカラー(216)と1.0との間の差が、スケーリングされた結果の分解能を保持するために最小化される、請求項９に記載のデバイス。
【請求項１６】
前記電子機器(104)は、第1の結果(214)がゼロであると判定される場合に、第1の結果(214)にオフセットを加算するようにさらに構成されている、請求項９に記載のデバイス。
【請求項１７】
ハードウェアをフェイルセーフに動作させるためのコードをコンパイルするための方法であって、
第1の結果を生成するように構成されて1つまたは複数の演算を含む第1の計算を識別するステップと、
第1の計算及びスカラーを含む第2の計算を生成するステップであって、第2の計算は、第2の結果を生成し、第2の計算は、スケーリングされた結果を生成するために、第1の計算にスカラーを乗算することと、第2の結果を生成するために、スケーリングされた結果をスカラーで除算することを含むステップと、
第1の結果と第2の結果とが等価であるか否かの指示を生成するステップと、
第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップを含み、第2の計算は、第１の計算に含まれる1つまたは複数の演算を含まない方法。
【請求項１８】
第1の計算及びスカラーを含む第2の計算を生成するステップ、ならびに、第1の結果と第2の結果とが等価であるか否かの指示を生成するステップは、クラスを定義することを含む、請求項１７に記載の方法。
【請求項１９】
第1の結果と第2の結果とを、メモリの離れた区画内に記憶するステップをさらに含む、請求項１７に記載の方法。
【請求項２０】
第1の計算と第2の計算とを、メモリの離れた区画内に記憶するステップをさらに含む、請求項１７に記載の方法。
【請求項２１】
第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップは、単一のプロセッサ上で動作させるために、実行可能プログラムをコンパイルすることを含む、請求項１７に記載の方法。
【請求項２２】
第1の計算、第2の計算、及び指示を、実行可能プログラム内に含めるステップは、単一の数学ライブラリを使用するために、実行可能プログラムをコンパイルすることを含む、請求項１７に記載の方法。
【請求項２３】
数学ライブラリを、計算エラーについて予備試験するステップをさらに含む、請求項１７に記載の方法。
【外国語明細書】
2018185855000001.pdf