(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-05
(54)【発明の名称】入力コンピュータプログラムを出力コンピュータプログラムに変換する方法及びシステム
(51)【国際特許分類】
G06F 17/10 20060101AFI20241128BHJP
【FI】
G06F17/10 Z
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024555617
(86)(22)【出願日】2023-01-30
(85)【翻訳文提出日】2024-05-13
(86)【国際出願番号】 JP2023003682
(87)【国際公開番号】W WO2023162642
(87)【国際公開日】2023-08-31
(32)【優先日】2022-02-25
(33)【優先権主張国・地域又は機関】EP
(81)【指定国・地域】
(71)【出願人】
【識別番号】503163527
【氏名又は名称】ミツビシ・エレクトリック・アールアンドディー・センター・ヨーロッパ・ビーヴィ
【氏名又は名称原語表記】MITSUBISHI ELECTRIC R&D CENTRE EUROPE B.V.
【住所又は居所原語表記】Capronilaan 46, 1119 NS Schiphol Rijk, The Netherlands
(74)【代理人】
【識別番号】100110423
【氏名又は名称】曾我 道治
(74)【代理人】
【識別番号】100111648
【氏名又は名称】梶並 順
(74)【代理人】
【識別番号】100122437
【氏名又は名称】大宅 一宏
(74)【代理人】
【識別番号】100147566
【氏名又は名称】上田 俊一
(74)【代理人】
【識別番号】100188514
【氏名又は名称】松岡 隆裕
(72)【発明者】
【氏名】ボワイエ、ブノワ
(72)【発明者】
【氏名】ファイソル、フロリアン
(72)【発明者】
【氏名】メルキオンド、ギョーム
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056CC01
(57)【要約】
本開示は、入力コンピュータプログラムを、目標グローバル精度を有する出力コンピュータプログラムに変換するコンピュータ実装方法に関する。この方法は、入力コンピュータプログラムに含まれる各数学関数の目標内部精度を受け取ることと、入力コンピュータプログラムを解析して、数学関数呼び出し間の依存関係を記述する依存関係グラフを求めることとを含む。数学関数は、依存関係グラフに従って、各処理される数学関数について、値範囲決定ツールを使用して、処理される数学関数が依存関係グラフに従って依存する数学関数について取得される各合成数学関数に基づいて、処理される数学関数の値範囲を生成することと、合成ツールを使用して、目標内部精度を有する合成数学関数を生成することと、によって処理される。出力コンピュータプログラムは、各数学関数呼び出しをその対応する合成数学関数の呼び出しに置き換えることによって生成される。
【特許請求の範囲】
【請求項1】
入力コンピュータプログラムを、目標グローバル精度を達成する出力コンピュータプログラムに変換するコンピュータ実装の方法であって、前記入力コンピュータプログラムは、浮動小数点変数に適用される数学関数を含み、前記目標グローバル精度は、数学関数の近似及び/又は浮動小数点の丸め誤差に起因したグローバル誤差の限度に対応し、前記方法は、
前記入力コンピュータプログラムに含まれる各数学関数の目標内部精度を受け取ることであって、前記目標内部精度は、前記目標グローバル精度を達成するために必要とされる前記数学関数の内部誤差のそれぞれの限度に対応することと、
前記入力コンピュータプログラムを解析して、数学関数呼び出し間の依存関係を記述する依存関係グラフを求めることと、
を含み、
前記方法は、
前記依存関係グラフに従って前記数学関数を処理すること、
を更に含み、
前記処理することは、処理される数学関数のそれぞれについて、
値範囲決定ツールを使用して、前記処理される数学関数が前記依存関係グラフに従って依存する数学関数について取得される各合成数学関数に基づいて、前記処理される数学関数の各変数の値範囲を生成することと、
合成ツールを使用して、前記処理される数学関数の各変数の値範囲に基づいて、前記処理される数学関数の目標内部精度を有する合成数学関数を生成することと、
を含み、
前記方法は、前記入力コンピュータプログラムにおいて、前記数学関数呼び出しのそれぞれをその対応する合成数学関数の呼び出しに置き換えることによって前記出力コンピュータプログラムを生成することを更に含む、コンピュータ実装方法。
【請求項2】
前記目標グローバル精度に基づいて前記出力コンピュータプログラムを注釈づけし、形式的検証ツールを使用することによって前記出力コンピュータプログラムの前記注釈づけを検証することを更に含む、請求項1に記載の方法。
【請求項3】
前記出力コンピュータプログラムは、前記数学関数の値範囲と、前記合成数学関数の目標内部精度とに基づいて更に注釈づけされる、請求項2に記載の方法。
【請求項4】
前記形式的検証ツールは、演繹的検証ツールである、請求項2又は3に記載の方法。
【請求項5】
前記演繹的検証ツールは、自動定理証明器を使用する、請求項4に記載の方法。
【請求項6】
前記演繹的検証ツールは、数学関数の近似に関する証明責務と、浮動小数点の丸め誤差に関する証明責務とについて異なる自動定理証明器を使用する、請求項5に記載の方法。
【請求項7】
生成された出力コンピュータプログラムが前記目標グローバル精度を達成しないとき、前記方法は、前記目標グローバル精度を達成する出力コンピュータプログラムが生成されるまで、以下のステップ、すなわち、
前記目標内部精度の全て又は一部を更に制約することによって前記目標内部精度を更新するステップと、
前記入力コンピュータプログラムの前記数学関数の処理を繰り返して、更新された目標内部精度に基づいて、更新された合成数学関数を生成するステップと、
前記更新された合成数学関数に基づいて前記出力コンピュータプログラムを生成するステップと、
を反復することを更に含む、請求項2又は3に記載の方法。
【請求項8】
前記入力コンピュータプログラムにおいて異なる呼び出し位置を有する同じ数学関数について、異なる合成数学関数が合成される、請求項1~3のいずれか1項に記載の方法。
【請求項9】
前記値範囲決定ツールは、抽象解釈ツールである、請求項1~3のいずれか1項に記載の方法。
【請求項10】
少なくとも1つのプロセッサによって実行されると、前記少なくとも1つのプロセッサに請求項1~3のいずれか1項に記載の方法を実行させる命令を備えるコンピュータプログラム製品。
【請求項11】
少なくとも1つのプロセッサによって実行されると、前記少なくとも1つのプロセッサに請求項1~3のいずれか1項に記載の方法を実行させる命令を備えるコンピュータ可読記憶媒体。
【請求項12】
入力コンピュータプログラムを、目標グローバル精度を有する出力コンピュータプログラムに変換するシステムであって、前記入力コンピュータプログラムは、浮動小数点変数に適用される数学関数を含み、前記目標グローバル精度は、数学関数の近似及び/又は浮動小数点の丸め誤差に起因したグローバル誤差の限度に対応し、前記システムは、少なくとも1つのプロセッサ及び少なくとも1つのメモリを備え、前記少なくとも1つのプロセッサは、請求項1~3のいずれか1項に記載の方法を実行するように構成される、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピュータプログラム開発に関し、より具体的には、浮動小数点変数に適用される数学関数を含む入力コンピュータプログラムを、目標グローバル精度を達成する出力コンピュータプログラムに変換する方法及びシステムに関する。目標グローバル精度は、出力コンピュータプログラムに許容されるグローバル誤差の上限に対応し、これらの誤差は、数学関数の近似及び/又は浮動小数点の丸め誤差に関係するものである。
【背景技術】
【0002】
数値計算は、これを必要とする様々な産業領域、例えば、信号処理又は画像処理、自動制御等において普遍的に存在する。例えば、そのような数値計算は、自動車制御又は原子力プラント制御等の多様なアプリケーションの組み込みシステムのコンピュータプログラムにおいて広く使用されている。
【0003】
しかしながら、そのような数値計算には、近似が行われることに関係した固有の計算誤差がある。
【0004】
例えば、組み込みシステム上で動作しているコンピュータプログラムは、コンピュータ演算、特に浮動小数点演算の有効桁数が有限であるため、丸め誤差の影響を受ける。実際、そのようなコンピュータプログラムは、実際の数を使用するのではなく、対応する浮動小数点近似を使用しており、この近似が誤差を生じさせる。この誤差は、いくつかの場合には無視することができる場合もあるが、特に重なり合ったループが存在する場合には、コンピュータプログラムの実行中に蓄積し、無視することができなくなる可能性もある。
【0005】
計算誤差のもう1つの要因は、数学関数を実装する際に行われる近似にある。例えば、物理システムの数学関数の実装は、浮動小数点演算に起因した近似に依存しているが、物理システムの数学モデル自体が近似されていることにも依存している。例えば、余弦関数及び正弦関数等の三角関数は、多項式関数によって近似されるが、これらの多項式は数値計算に誤差をもたらす。また、物理システムが、例えば、微分方程式によってモデル化されている場合、そのような微分方程式は、数学関数(例えば、ルンゲ-クッタ法)によって解くことができるが、得られる解は、物理システムをモデル化した微分方程式の実際の解を近似したものにすぎない。
【0006】
これら2つの誤差の要因(すなわち、浮動小数点の丸め誤差及び数学関数の近似)は、予測及びデバッグすることが特に困難である。これは、libm等の数学関数ライブラリをコンピュータプログラムにおいて使用するときに特に当てはまる。その理由は、数学関数の実際の実装体が、一般にブラックボックスであり、アーキテクチャに依存するからである。
【0007】
しかしながら、コンピュータプログラムに固有のグローバル誤差(すなわち、浮動小数点の丸め誤差及び/又は数学関数の近似)を求めることができ、コンピュータプログラムのグローバル誤差が所望の目標上限未満に維持されていることを保証できることは重要である。
【0008】
現在の解決策は、コンピュータプログラムの数値精度の検証を対象としている。これらの技法は、経験的/確率的なものか又は形式的検証方法に基づくものかのいずれかである。前者のカテゴリーのツールは、数学関数呼び出しを有する任意のコンピュータプログラムについて結果を与える一方、後者のカテゴリーのツールは、数学関数のブラックボックス実装体とともに使用することができず、その精度を静的に検証することができない。
【0009】
したがって、現在の解決策によると、いくつかの場合には、グローバル誤差を求めることはできる(ただし、数学関数のブラックボックス実装体が使用されるときにそれを形式的に証明することは可能ではない)が、浮動小数点の丸め誤差及び/又は数学関数の近似に起因したグローバル誤差が目標上限未満に維持されていることを保証することはできない。
【発明の概要】
【発明が解決しようとする課題】
【0010】
本開示は、この状況を改善することを目的とする。特に、本開示は、数学関数のブラックボックス実装体が使用されるときであっても、所定の目標グローバル精度(すなわち、所定の上限未満のグローバル誤差)を有するコンピュータプログラムを取得することを可能にする解決策を提案することによって、上述した従来技術の限界のうちの少なくともいくつかを克服することを目的とする。
【0011】
また、少なくともいくつかの実施の形態において、本開示は、取得されたコンピュータプログラムが目標グローバル精度を達成することを形式的に証明することを可能にする解決策を提案することを目的とする。
【課題を解決するための手段】
【0012】
この目的のために、第1の態様によれば、本開示は、入力コンピュータプログラムを、目標グローバル精度を有する出力コンピュータプログラムに変換するコンピュータ実装方法に関する。入力コンピュータプログラムは、浮動小数点変数に適用される数学関数を含み、目標グローバル精度は、数学関数の近似及び/又は浮動小数点の丸め誤差に起因したグローバル誤差の限度に対応する。本方法は、
入力コンピュータプログラムに含まれる各数学関数の目標内部精度を受け取ることであって、目標内部精度は、目標グローバル精度を達成するために必要とされる数学関数の内部誤差のそれぞれの限度に対応することと、
入力コンピュータプログラムを解析して、数学関数呼び出し間の依存関係を記述する依存関係グラフを求めることと、
を含み、
本方法は、
依存関係グラフに従って数学関数を処理すること、
を更に含み、
上記処理することは、各処理される数学関数について、
値範囲決定ツールを使用して、処理される数学関数が依存関係グラフに従って依存する数学関数について取得されるいずれかの合成数学関数に基づいて、処理される数学関数の各変数の値範囲を生成することと、
合成ツールを使用して、処理される数学関数の各変数の値範囲に基づいて、処理される数学関数の目標内部精度を有する合成数学関数を生成することと、
を含み、
本方法は、入力コンピュータプログラムにおいて、各数学関数呼び出しをその対応する合成数学関数の呼び出しに置き換えることによって出力コンピュータプログラムを生成することを更に含む。
【0013】
したがって、提案された解決策は、数学関数の実装体(ブラックボックスであってもよいし、不十分な目標内部精度を有するものであってもよいし、複雑過ぎて形式的に検証することが困難なものであってもよい)を、コンピュータプログラム用に設定された目標グローバル精度を達成することを共同で可能にする、目標内部精度(対応する数学関数にローカルな目標精度)を達成する合成実装体に置き換える数学関数合成に依存している。
【0014】
合成ツールは、通常、合成される数学関数が使用する変数の値の範囲に関する事前知識を必要とする。そのような値の範囲は、抽象解釈ツール又は統計ツール等の値範囲決定ツール等を使用することによって求めることができる。しかしながら、重なり合った数学関数、すなわち別の数学関数において呼び出される数学関数の場合には、呼び出す側の数学関数の値の範囲は、呼び出される側の数学関数に依存し、合成された関数が代わりに使用されるときには変化する場合がある。したがって、呼び出す側の数学関数の値の範囲を求めるときには、その範囲は、呼び出される側の数学関数を、対応する合成実装体の呼び出しに置き換えることによって行う必要がある。したがって、提案された解決策は、数学関数の呼び出し間の依存関係グラフを求め、数学関数は、依存関係グラフによって提供される順序に従って処理される(合成される)。呼び出される側の数学関数は、この数学関数の目標内部精度を達成するその合成バージョンを取得するために最初に処理される。呼び出される側の数学関数の合成バージョンは、その後、呼び出す側の数学関数の処理中、特に、合成ツールによってその後使用される呼び出す側の数学関数の変数の値の範囲の決定中に使用される。
【0015】
したがって、数学関数の呼び出し間の依存関係を記述する依存関係グラフに従って値範囲決定ツール(例えば、抽象解釈ツール)を合成ツールと組み合わせることによって、本開示は、数学関数の目標内部精度を達成することが、出力コンピュータプログラム全体の目標グローバル精度を達成することを可能にすることを条件として、入力コンピュータプログラムを、目標グローバル精度を達成する出力コンピュータプログラムに変換することを可能にする。
【0016】
特定の実施の形態において、変換方法は、単独で又は技術的に可能な任意の組み合わせで考慮される以下の任意選択の特徴のうちの1つ以上を更に含むことができる。
【0017】
特定の実施の形態において、変換方法は、目標グローバル精度に基づいて出力コンピュータプログラムに注釈をつけることと、形式的検証ツールを使用することによって出力コンピュータプログラムの注釈を検証することを更に含む。
【0018】
したがって、目標グローバル精度を用いて出力コンピュータプログラムに注釈をつけることによって、出力コンピュータプログラムによって、目標グローバル精度が確かに達成されることを形式的に検証することが可能である。
【0019】
特定の実施の形態において、出力コンピュータプログラムは、数学関数の値の範囲と、合成数学関数の目標内部精度とに基づいて更に注釈をつけられる。
【0020】
特定の実施の形態において、形式的検証ツールは、演繹的検証ツールである。
【0021】
特定の実施の形態において、演繹的検証ツールは、自動定理証明器を使用する。
【0022】
特定の実施の形態において、演繹的検証ツールは、数学関数の近似に関する証明責務と、浮動小数点の丸め誤差に関する証明責務とについて異なる自動定理証明器を使用する。
【0023】
特定の実施の形態において、生成された出力コンピュータプログラムが目標グローバル精度を達成しないとき、本方法は、目標グローバル精度を達成する出力コンピュータプログラムが生成されるまで、以下のステップ、すなわち、
目標内部精度の全て又は一部を更に制約することによって目標内部精度を更新するステップと、
入力コンピュータプログラムの数学関数の処理を繰り返して、更新された目標内部精度に基づいて、更新された合成数学関数を生成するステップと、
更新された合成数学関数に基づいて出力コンピュータプログラムを生成するステップと、
を反復することを更に含む。
【0024】
したがって、目標内部精度が、出力コンピュータプログラムの目標グローバル精度を達成するのに十分でない場合には、生成された合成数学関数が、設定された目標グローバル精度を実際に達成する出力コンピュータプログラムを与えるまで、目標内部精度の全て又は一部に対する制約を反復的に増加させる(すなわち、数学関数の全て又は一部の内部誤差の目標上限を反復的に減少させる)ことが可能である。
【0025】
特定の実施の形態において、入力コンピュータプログラムにおいて異なる呼び出し位置を有する同じ数学関数について、異なる合成数学関数が合成される。
【0026】
実際、全ての呼び出し位置について同じ目標内部精度を有する必要なく、同じ数学関数を入力コンピュータプログラムにおける異なる位置において呼び出すことができる。そのような場合には、例えば、より大きな内部誤差を許容する呼び出し位置における計算複雑度を削減するために、同じ数学関数について異なるそれぞれの目標内部精度を有する異なる合成数学関数を生成することが可能である。
【0027】
特定の実施の形態において、値範囲決定ツールは、抽象解釈ツールである。
【0028】
第2の態様によれば、本開示は、少なくとも1つのプロセッサによって実行されるときに、少なくとも1つのプロセッサに本開示の実施の形態のいずれか1つによる変換方法を実行させる命令を備えるコンピュータプログラム製品に関する。
【0029】
第3の態様によれば、本開示は、少なくとも1つのプロセッサによって実行されるときに、少なくとも1つのプロセッサに本開示の実施の形態のいずれか1つによる変換方法を実行させる命令を備えるコンピュータ可読記憶媒体に関する。
【0030】
第4の態様によれば、本開示は、入力コンピュータプログラムを、目標グローバル精度を有する出力コンピュータプログラムに変換するシステムであって、入力コンピュータプログラムは、浮動小数点変数に適用される数学関数を含み、目標グローバル精度は、数学関数の近似及び/又は浮動小数点の丸め誤差に起因したグローバル誤差の限度に対応し、システムは、少なくとも1つのプロセッサ及び少なくとも1つのメモリを備え、少なくとも1つのプロセッサは、本開示の実施の形態のいずれか1つによる変換方法を実行するように構成される、システムに関する。
【0031】
本発明は、以下の説明を読むことでより良く理解される。以下の説明は、決して限定的なものではなく一例として与えられ、図に関して作成されている。
【0032】
これらの図において、図にわたって同一の参照符号は、同一又は類似の要素を示す。明瞭にするために、図示した要素は、別段の明示の指定がない限り、一律の縮尺でない。
【0033】
また、図に表されるステップの順序は、説明を目的として提供されているものにすぎず、本開示を限定することを意図するものではなく、本開示は、同じステップが異なる順序で実行される場合にも適用することができる。
【図面の簡単な説明】
【0034】
【
図1】入力コンピュータプログラムを出力コンピュータプログラムに変換する方法の一例示的な実施形態の主なステップを表す図である。
【
図2】入力コンピュータプログラムの一例を示す図である。
【
図3A】
図2の入力コンピュータプログラムの可能な依存関係グラフの例を示す図である。
【
図3B】
図2の入力コンピュータプログラムの可能な依存関係グラフの例を示す図である。
【
図4】入力コンピュータプログラムの変換方法の連続するステップの実行の概略図である。
【
図5】
図4において考慮された入力コンピュータプログラムの依存関係グラフの概略図である。
【
図6】別の入力コンピュータプログラムの変換方法の連続するステップの実行の概略図である。
【
図7】
図6において考慮された入力コンピュータプログラムの依存関係グラフの概略図である。
【発明を実施するための形態】
【0035】
図1は、入力コンピュータプログラムを出力コンピュータプログラムに変換する方法10の主なステップを概略的に表している。
【0036】
変換方法10は、コンピュータシステム(図示せず)によって実行される。好ましい実施形態において、コンピュータシステムは、1つ以上のプロセッサ(同じコンピュータに属する場合もあるし、異なるコンピュータに属する場合もある)と、変換方法10のステップの全て又は一部を実施するために実行される一組のプログラムコード命令の形態でコンピュータプログラム製品が記憶される1つ以上のメモリ(磁気ハードディスク、光ディスク、電子メモリ、又は任意のコンピュータ可読記憶媒体)とを備える。代替として、又はそれらの組み合わせとして、コンピュータシステムは、変換方法10の上記ステップの全て若しくは一部の実施に適合された1つ以上のプログラマブルロジック回路(FPGA、PLD等)、及び/又は1つ以上の専用集積回路(ASIC)等を備えることができる。換言すれば、コンピュータシステムは、変換方法10のステップを実施するようにソフトウェア(特定のコンピュータプログラム製品)及び/又はハードウェア(プロセッサ、FPGA、PLD、ASIC等)によって構成された一組の手段を備える。
【0037】
本開示において、変換の目標は、目標グローバル精度を達成することである。目標グローバル精度は、許容可能なグローバル誤差の上限に対応する。グローバル誤差は、全ての数学関数の近似に起因した誤差と、出力コンピュータプログラムによって行われる全ての浮動小数点の丸め誤差との組み合わせに対応する。
【0038】
入力コンピュータプログラムは、任意のコンピュータ言語、例えば、Cコンピュータ言語若しくはC++コンピュータ言語又はFortranコンピュータ言語で記述することができるソースコードによるコンピュータプログラムに対応する。入力コンピュータプログラムは、例えば、信号処理又は画像処理、自動制御等に関するタスクを実行するために組み込みシステム上で動作するように意図されている。入力コンピュータプログラムは、浮動小数点変数に適用される代入、制御構造(条件付き分岐、スイッチ、ループ等)、数学操作(加算、乗算等)及び数学関数(exp、log、sin、cos等)呼び出しを含む。非限定的な例によれば、数学関数は、ライブラリlibmに含まれる関数である。
【0039】
上述したように、入力コンピュータプログラムに含まれる数学関数の実装体は、それらのソースコードが利用可能でないという意味で、通常はブラックボックスである。通常、それらの実装体は、libmライブラリ等の外部ライブラリ内の数学関数の呼び出しとして含まれる。
【0040】
図1に示されるように、変換方法10は、入力コンピュータプログラムにおいて使用される各数学関数の目標内部精度を受け取るステップS10を含む。数学関数の目標内部精度は、考慮対象の数学関数において行われる全ての(数学モデルの)近似及び全ての浮動小数点の丸め誤差に起因した誤差に対応する内部誤差の上限に対応する。したがって、目標内部精度は、関連する数学関数にローカルな誤差を考慮する一方、目標グローバル精度は、とりわけ、呼び出された全ての数学関数のローカル誤差に依存するコンピュータプログラムレベルにおけるグローバル誤差を考慮する。本開示において、取得される目標内部精度は、数学関数の実装体がそれらのそれぞれの目標内部精度の達成を可能にする場合に、目標グローバル精度もコンピュータプログラムによって達成されるようになっている(又は少なくともそのようなっているとみなされる)ものである。
【0041】
目標内部精度が実際にどのようにして求められるのかは、本開示の範囲外であり、目標内部精度は、変換方法10の入力として提供されるものと仮定される。ただし、そのような目標内部精度は、例えば、モンテカルロ演算等の統計ツールを使用することによって取得することができることに留意されたい。実際、そのような技法は、コンピュータプログラムの所与の数学関数の精度低下の影響を求めるのに使用することができ、したがって、コンピュータプログラムのグローバル精度に対する上記所与の数学関数の内部精度の影響を評価するのに使用することができる(例えば[Defour2020]を参照)。
【0042】
本開示において、同じ数学関数の異なる呼び出し位置の数にかかわらず、数学関数ごとに単一の目標内部精度を取得すること、又は、同じ数学関数について複数の異なる目標内部精度、例えば、この数学関数の呼び出し位置ごとに1つ若しくは同じ数学関数について取得された異なる目標内部精度ごとに1つを取得することが可能であることに留意されたい。実際、所与の数学関数(例えば、sin)が、コンピュータプログラム内に数個の呼び出し位置を有するとき、グローバル誤差への数学関数の寄与度は、呼び出し位置ごとに変化する可能性がある。後述するように、数学関数の呼び出しは、同じ数学関数の異なる呼び出し位置について異なる合成数学関数を生成することができるように、所望の目標内部精度を有する合成数学関数の呼び出しに置き換えられる。もちろん、所与の数学関数の単一の合成数学関数を生成し、目標グローバル精度を達成できる内部誤差の上限の最も低い値に対応する目標内部精度を達成することも可能である。
【0043】
図1に示されるように、変換方法10は、入力コンピュータプログラムを解析して、数学関数の呼び出し間の依存関係を記述した依存関係グラフを求めるステップS11も含む。基本的に、解析ステップS11の間、変換方法10を実施するコンピュータシステムは、入力コンピュータプログラムを解析して、入力コンピュータプログラムによって呼び出される数学関数と、それらの呼び出し位置とを特定するとともに、以前の数学関数の呼び出しの結果を処理するために呼び出される数学関数を特定する(すなわち、数学関数の呼び出し間の依存関係を特定する)。
【0044】
図2は、簡単な例示的入力コンピュータプログラムのソースコードを概略的に表している。この例では、入力コンピュータプログラムは、4つの異なる数学関数、すなわち、log2(2を底とする対数)、pow(累乗)、exp(指数関数)及びlog(対数)を呼び出す。
図2からわかるように、数学関数powが入力として受け取る変数は、他のいずれの数学関数の結果にも依存せず、数学関数powの結果は、別の数学関数によって使用されない。数学関数logが入力として受け取る変数は、他のいずれの数学関数の結果にも依存せず、数学関数logの結果は、別の数学関数によって使用されない。数学関数expが入力として受け取る変数は、他のいずれの数学関数の結果にも依存しないが、この数学関数expの結果は、ループの内部で呼び出される数学関数log2によって使用される。ループの内部で呼び出される数学関数log2の結果は、別の数学関数によって使用されない。一方、数学関数log2は、ループの外部でも呼び出され、この数学関数が入力として受け取る変数は、別の数学関数の結果に依存せず、その結果は、別の数学関数によって使用されない。
【0045】
図3Aは、同じ数学関数の各呼び出しがそれぞれの目標内部精度に関連付けられている場合の依存関係グラフを概略的に表している。したがって、
図2の入力コンピュータプログラムにおいて2回呼び出される数学関数log2は、依存関係グラフにおいて2回登場する。別の数学関数の結果を使用しない各数学関数は、依存関係パスの起点である。
図3Aの例には、数学関数log2、pow、exp及びlogから開始する4つのそのようなパスが存在する。
【0046】
図3Bは、同じ数学関数が、入力コンピュータプログラムにおける呼び出し位置の数にかかわらず、単一の目標内部精度に関連付けられている場合の依存関係グラフを概略的に表している。したがって、
図2の入力コンピュータプログラムにおいて2回呼び出される数学関数log2は、依存関係グラフにおいて1回しか登場しない。ループの内部で呼び出される数学関数log2は、数学関数expの結果を処理するので、この呼び出し位置のみが依存関係グラフにおいて考慮されるように、この数学関数log2の呼び出し位置は、この数学関数の内部誤差の上限の最も低い値を必要とする呼び出し位置であると考えられる。
図3Bには、数学関数pow、exp及びlogから開始する3つのパスが存在する。
【0047】
呼び出される数学関数のリストを最初に作成し、その後、このリストに基づいてそれらの数学関数のそれぞれの目標内部精度を取得するために、ステップS10は、ステップS11の実行後に実行することもできることに留意されたい。例えば、依存関係グラフにおける各数学関数の出現ごとの目標内部精度を取得することが可能である。
【0048】
コンピュータシステムが、入力コンピュータプログラムの数学関数の目標内部精度、及び依存関係グラフを取得すると、コンピュータシステムは、依存関係グラフに従って数学関数を処理する。特に、同じパス上の数学関数は、パスの起点から連続して処理され、依存関係グラフにおける各数学関数の合成数学関数が生成される。
【0049】
より具体的には、各処理される数学関数について、変換方法10は、以下のステップS12及びS13を含む。
-S12は、値範囲決定ツールを使用して、処理される数学関数が依存関係グラフに従って依存する数学関数について取得された各合成数学関数に基づいて、処理される数学関数の各変数の値範囲を生成する。
-S13は、合成ツールを使用して、処理される数学関数の各変数の値範囲に基づいて、処理される数学関数の目標内部精度を有する合成数学関数を生成する。
【0050】
例えば、
図3Bにおける依存関係グラフを考えると、3つのパスが処理されることになる。
【0051】
数学関数powを起点として有するパスは、数学関数powしか含んでいない。したがって、数学関数powは最初に処理され、値範囲決定ツールが使用されて、その入力変数及び出力変数の値範囲を生成する。数学関数powは別の数学関数に依存しないので、数学関数powの値範囲を生成するために他の合成数学関数は使用されない。その後、合成ツールが使用されて、必要とされる目標内部精度を有する合成数学関数powを生成する。同じことは、数学関数logを起点として有するパスについても当てはまる。
【0052】
数学関数expを起点として有するパスは、数学関数log2も含む。したがって、数学関数expが最初に処理され、値範囲決定ツールが使用されて、その入力変数及び出力変数の値範囲を生成する。数学関数expは、別の数学関数に依存しないので、数学関数expの値範囲を生成するために他の合成数学関数は使用されない。その後、合成ツールが使用されて、必要とされる目標内部精度を有する合成数学関数expを生成する。その後、数学関数log2が処理され、値範囲決定ツールが使用されて、その入力変数及び出力変数の値範囲を生成する。数学関数log2は数学関数expに依存するので、数学関数expの合成実装体が、値範囲決定ツールによって使用されて、数学関数log2の値の範囲が生成される。その後、合成ツールが使用されて、必要とされる目標内部精度を有する合成数学関数log2を生成する。
【0053】
値の範囲の決定には、当業者に知られている任意の値範囲決定ツールを使用することができる。例えば、数学関数の値の範囲の決定には、モンテカルロ演算等の統計ツールを使用することができる。
【0054】
好ましい実施形態において、値範囲の決定に抽象解釈ツールが使用される。当業者に知られている任意の抽象解釈ツールを使用することができる。例えば、Fluctuatは、CEA(フランス原子力・代替エネルギー庁)において開発された抽象解釈ツールであり、大規模なC/C++コンピュータプログラムの浮動小数点の丸め誤差を完全自動化方式で解析するように設計されている([Goubault2013]参照)。Fldlibは、使用することができる抽象解釈ツールのもう1つの例であり、Vedrine他によって開発されたものである。RAI(ランタイム抽象解釈、[Ve'drine2021]参照)は、抽象解釈とランタイム検証とを組み合わせた別の例示的なツールであり、依存関係グラフにおける数学関数の変数の値範囲を求めるのに使用することができる。
【0055】
合成数学関数の生成には、当業者に知られている任意の合成ツールを使用することができる。例えば、Sollya[Chevillard2010]は、安全な浮動小数点コンピュータプログラムを開発するのに使用することができる合成ツールである。Sollyaは、数式が与えられると、この数式の多項式近似と、この数式を近似したときにコミットされる誤差の上限との双方の提供を試みる。その後、Sollyaは、誤差を妥当な区間に維持する多項式近似の浮動小数点実装体を提案する。言い換えると、Sollyaは、丸め誤差の寄与が多項式近似の質を破壊しない数学関数の実装体を提供する。また、Metalibm ANRプロジェクトは、目標精度、メモリ、速度、アーキテクチャ等のいくつかの基準を満たす数学関数及びデジタルフィルタの生成を自動化するツールの開発に取り組んでいる。全てのMetalibmツールが、ユーザ基準を満たすC関数を生成することができ、目標精度基準は、Sollya理論を使用することによって達成される。
【0056】
依存関係グラフの全てのパスが処理されると、入力コンピュータプログラムにおいて呼び出される各数学関数用に設定された目標内部精度を達成する各数学関数の合成数学関数(及び、場合によっては、同じ数学関数の各呼び出し位置)が得られる。変換方法10は、入力コンピュータプログラムにおいて各数学関数呼び出しをその対応する合成数学関数の呼び出しに置き換えることによって出力コンピュータプログラムを生成するステップS14を含む。したがって、出力コンピュータプログラムにおいて、各数学関数呼び出しは、既知(ホワイトボックス)の実装体を有するとともに目標内部精度を達成する合成数学関数の呼び出しに置き換えられている。目標内部精度が、目標グローバル精度の達成を共同して可能にする場合に、出力コンピュータプログラムは、このプログラム用に設定された目標グローバル精度を原理的に達成することになる。
【0057】
この段階において、出力コンピュータプログラムの目標グローバル精度は、形式的に証明されない。しかしながら、必要に応じて、変換方法10は、目標グローバル精度と、好ましくは入力コンピュータプログラムの入力変数の所定の値範囲(例えば、目標グローバル精度とともに受け取られる)とに基づいて、出力コンピュータプログラムを自動的に注釈づけすることを更に含むことができる。そのような注釈づけに基づくとともに、合成数学関数の実装体がこの時点で判明していることによって、変換方法10の任意選択の形式的検証ステップS15の間に、形式的検証ツールを使用して、出力コンピュータプログラム用に設定された目標グローバル精度を形式的に証明することが可能である。
【0058】
好ましい実施形態において、出力コンピュータプログラムの合成数学関数の目標内部精度を形式的に証明するために、数学関数の値範囲と合成数学関数の目標内部精度とに基づいて、出力コンピュータプログラムを更に注釈づけすることができる。
【0059】
出力コンピュータプログラムの形式的検証には、当業者に知られている任意の形式的検証ツールを使用することができる。例えば、数値精度の注釈づけ(アサーション)で強化されたコンピュータプログラムの形式的検証は、証明責務を専用証明器に自動的に解放する演繹的検証ツールを使用して行うことができる。例えば、いくつかのFrama-C[Kirchner2015]プラグインは、含まれる方法及び丸め誤差の解析機能をそれらの仕様言語に有する。これは、Gappa又はCoq証明アシスタントのような専用証明器との通信を担当する、Whyプラットフォームに基づくCaduceusプラグイン[Boldo2007]において最初に使用された。使用することができる演繹的検証ツールの別の非限定的な例は、浮動小数点数のWhy3理論に基づくJessieプラグイン[Ayad2010]である。
【0060】
演繹的検証ツールが使用することができる証明器の例として、CoqInterval[Daumas2005]及びGappa[Daumas2010]等の自動定理証明器がある。CoqIntervalは、浮動小数点演算のFlocq Coq形式化と区間算術計算(浮動小数点の下限及び上限を有する区間)とに基づくCoq証明アシスタント用のツールである。区間計算を使用すると、このツールは、実数値式に関する不等式を自動的に証明することができる。したがって、このツールは、数学関数又はモデルを近似する代数式の近似誤差を制限するのに使用することができる。Gappaは、簡単な数値プログラムの算術特性を検証するように設計されたツールである。Gappaは、いくつかの仮定の下で、アルゴリズムの丸め誤差の限度を自動的に証明するのに特に十分である。また、Gappaスクリプトから、限度が形式的に検証されるようにCoq証明アシスタントによって自動的に確認することができる証明書が取得される。また、Sollyaツール及びMetalibmツール等の合成ツールは、Gappaツールが、そのような合成ツールによって生成された合成数学関数の目標内部精度を形式的に証明するために使用することができるGappaスクリプトを生成することがある。
【0061】
したがって、変換方法10は、必要に応じて、出力コンピュータプログラムの目標グローバル精度及び数学関数の合成実装体の目標内部精度を形式的に証明することができる。全ての合成数学関数の目標内部精度が証明されるが、出力コンピュータプログラムの目標グローバル精度が証明されない場合に、これは、ステップS10の間に取得された目標内部精度が目標グローバル精度を達成するのに十分でないことを意味する。出力コンピュータプログラム用に設定された目標グローバル精度を達成することが必須である場合には、目標グローバル精度を達成する出力コンピュータプログラムが生成されるまで、数学関数用に設定された目標内部精度の全て又は一部を段階的に更に制約することによって変換方法10のステップを繰り返すことが可能である。本開示において、目標内部精度を「更に制約する」とは、対応する数学関数の内部誤差の目標上限を減少することを意味する。
【0062】
図4は、3つの数学関数f
1、f
2及びf
3を含む一例示的な入力コンピュータプログラムを考慮するとともに、数学関数の値範囲の決定において抽象解釈ツールが使用されることを考慮したときの変換方法10の連続するステップの実行を概略的に表している。ステップS11の間に取得されるこれらの数学関数f
1、f
2及びf
3の依存関係グラフは、
図5に示され、起点としての数学関数f
1と、その後に続く数学関数f
2と、その後のf
3とを有する単一のパスを含む。
【0063】
変換方法は、入力として以下のものを受け取る。
-入力コンピュータプログラム(ソースコード)、
-出力コンピュータプログラム用に設定された目標グローバル精度ε、
-数学関数f1、f2及びf3用にそれぞれ設定された目標内部精度ε1、ε2及びε3。
【0064】
図4に示されるように、変換方法10は、
図5における依存関係グラフに従って数学関数を処理し、数学関数f
1を最初に処理する。抽象解釈ツール(例えば、Fluctuat)が使用されて、数学関数f
1の値の範囲D
1を生成する。合成ツールが、数学関数f
1、値の範囲D
1及び目標内部精度ε
1を使用して、合成数学関数p
1を生成する。この例では、合成ツールは、目標内部精度ε
1がD
1においてp
1によって保証されることを確保する述語として証明書c
1も合成する。
【0065】
次に数学関数f2が処理される。抽象解釈ツールが使用されて、合成数学関数p1も使用することによって値の範囲D2を生成する。合成ツールが、数学関数f2、値の範囲D2及び目標内部精度ε2を使用して、合成数学関数p2及び証明書c2を生成する。
【0066】
次に数学関数f3が処理される。抽象解釈ツールが使用されて、合成数学関数p2及び合成数学関数p1も使用することによって値の範囲D3を生成する。合成ツールが、数学関数f3、値の範囲D3及び目標内部精度ε3を使用して、合成数学関数p3及び証明書c3を生成する。
【0067】
図4に示されるように、変換方法10は、その後、数学関数f
1、f
2及びf
3の呼び出しをそれぞれ合成実装体p
1、p
2及びp
3(合成数学関数)の呼び出しに置き換えることによって出力コンピュータプログラムを生成する。
【0068】
上述したように、いくつかの場合には、出力コンピュータプログラムは、例えば、以下の仮定、証明責務又はローカルアサーションに対応するいくつかの注釈づけで強化することもできる。
-ユーザが提供することができる、出力コンピュータプログラムの入力の値範囲を含む出力コンピュータプログラムに関するグローバル事前条件、
-出力コンピュータプログラム全体によって満たされなければならない目標グローバル精度εが満たされることに対応する出力コンピュータプログラムに関するグローバル事後条件、
-合成数学関数(それぞれ、ループエントリーの位置)の呼び出し位置における値範囲D1、D2及びD3に対応するアサーション(それぞれ、ループ不変条件)、
-値の範囲D1、D2及びD3に関する合成によってそれぞれ保証される目標内部精度ε1、ε2及びε3にそれぞれ対応する合成数学関数p1、p2及びp3の事後条件。
【0069】
全てのこれらの注釈づけは、例えばWhy3又はFrama-Cに基づいて、例えば演繹的検証ツールによって使用される。
【0070】
その後、必要に応じて、変換方法10は、最終目標として目標グローバル精度の形式的証明を考慮に入れて、自動的に生成された注釈の形式的検証を行う。
図4に示された例では、変換方法10は、演繹的検証ツールを使用して、証明責務(注釈づけ)を専用自動定理証明器に解放する。例えば、
-方法(数学的)誤差に関する証明責務は、実数算術式に関する不等式を自動的に調べる区間演算に基づくツールであるInterval、又はMetalibm技術が基づいているSollyaのようなツールに解放することができ、
-丸め誤差に関する証明責務は、例えば、目標内部精度を証明するGappaのような専用定理証明器に解放することができ、
-Fluctuatのような抽象解釈ツールに関する証明責務は、抽象解釈が形式的方法であるので、既に保証されており、したがって、これは、バックエンド証明器として再利用されることになり、
-数学関数の値範囲を求めるのに使用される統計ツールに関する証明責務は、抽象解釈ツール又はインタラクティブ定理証明器に解放することができる。
【0071】
図6は、3つの数学関数f
1、f
2及びf
3を含む別の例示的な入力コンピュータプログラムを考慮したときの変換方法10の連続するステップの実行を概略的に表している。ステップS11の間に取得されるこれらの数学関数f
1、f
2及びf
3の依存関係グラフは、
図7に示され、以下の2つのパスを含む。
-起点としての数学関数f
1と、その後に続く数学関数f
2とを有する第1のパス、
-起点として(及び単一の数学関数として)の数学関数f
3を有する第2のパス。
【0072】
図6に示されるように、これらの2つのパスは並列に処理される。それ以外において、変換方法10のステップは、変更されていない。
【0073】
したがって、本開示は、入力コンピュータプログラムから、数学関数の近似及び浮動小数点の丸め誤差に関する目標グローバル精度を達成する出力コンピュータプログラムを自動的に生成する方法論を提案する。これは、数学関数の呼び出し間の依存関係を記述する依存関係グラフに基づく値範囲決定ツール(抽象解釈ツール又は統計ツール等)及び合成ツールを組み合わせることによって達成される。出力コンピュータプログラムの目標グローバル精度は、必要に応じて、出力コンピュータプログラムを注釈づけし、例えば演繹的(形式的)検証ツールを使用することによって形式的に検証することもできる。
【0074】
提案された変換方法10は、完全自動であり、数値精度の網羅性保証を提供し、数学関数実装体を最適化する。変換方法10は、浮動小数点数値計算の集中使用に依存するソフトウェアの開発時間及び検証時間の双方を削減する。
【0075】
本開示は、上記の例示的な実施形態に限定されないことを強調しておく。上記の例示的な実施形態の変形もまた、本開示の範囲内である。
【0076】
(参考文献)
[Defour2020] Defour, D., de Oliveira Castro, P., Is,toan, M., & Petit, E. (2020, June), “Custom-precision mathematical library explorations for code profiling and optimization”, In 2020 IEEE 27th Symposium on Computer Arithmetic (ARITH) (pp. 121-124), IEEE.
[Goubault2013] Goubault, E., Putot, S. (2013, June), “Static analysis by abstract interpretation of numerical programs and systems, and FLUCTUAT”, In International Static Analysis Symposium (pp. 1-3), Springer, Berlin, Heidelberg.
[Ve'drine2021] Ve'drine, F., Jacquemin, M., Kosmatov, N., & Signoles, J. (2021), “Runtime Abstract Interpretation for Numerical Accuracy and Robustness”, In International Conference on Verification, Model Checking, and Abstract Interpretation (pp. 243-266), Springer, Cham.
[Chevillard2010] Chevillard S., Joldes, M., & Lauter C. (2010, September), “Sollya: An environment for the development of numerical codes”, In International Congress on Mathematical Software (pp. 28-31), Springer, Berlin, Heidelberg.
[Kirchner2015] Kirchner F., Kosmatov N., Prevosto V., Signoles J., & Yakobowski B. (2015), “Frama-C: A software analysis perspective”, Formal Aspects of Computing, 27(3), pp. 573-609.
[Boldo2007] Boldo S., & Fillia^tre J. C. (2007, June), “Formal verification of floating-point programs”, In 18th IEEE Symposium on Computer Arithmetic (ARITH'07) (pp. 187-194), IEEE.
[Ayad2010] Ayad A., & Marche' C. (2010, July), “Multi-prover verification of floating-point programs”, In International Joint Conference on Automated Reasoning (pp. 127-141), Springer, Berlin, Heidelberg.
[Daumas2005] Daumas M., Melquiond G., & Munoz C. (2005, June), “Guaranteed proofs using interval arithmetic”, In 17th IEEE Symposium on Computer Arithmetic (ARITH'05) (pp. 188-195), IEEE.
[Daumas2010] Daumas M., & Melquiond G. (2010), “Certification of bounds on expressions involving rounded operators”, ACM Transactions on Mathematical Software (TOMS), 37(1), pp. 1-20.
【国際調査報告】