JP5988444B2 - 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム - Google Patents
最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム Download PDFInfo
- Publication number
- JP5988444B2 JP5988444B2 JP2014026911A JP2014026911A JP5988444B2 JP 5988444 B2 JP5988444 B2 JP 5988444B2 JP 2014026911 A JP2014026911 A JP 2014026911A JP 2014026911 A JP2014026911 A JP 2014026911A JP 5988444 B2 JP5988444 B2 JP 5988444B2
- Authority
- JP
- Japan
- Prior art keywords
- binary module
- module
- optimized
- computer
- execution
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するステップと、
選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」ともいう)を作成するステップと、
上記最適化バイナリー・モジュールと上記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させて、上記最適化バイナリー・モジュールの実行の出力と上記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって上記最適化バイナリー・モジュールを検証するステップと
を実行することを含む。
所定の時間の経過後に、上記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、上記選択した対象領域を縮小するステップと、
縮小した対象領域について、上記作成するステップ及び上記検証するステップを再実行するステップと
をさらに実行することを含みうる。
上記所定の時間の経過後に、上記最適化バイナリー・モジュール内の上記最適化バイナリー・コード領域の分岐網羅が達成されないこと且つテスト時間が超過したことに応じて、分岐をトレースに含めるかを判断する為の閾値を上げるステップ
をさらに含みうる。上記閾値は、分岐先に分岐した回数を総分岐実行回数で除した分岐確率の閾値である。
上記プロファイル情報を用いて、上記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで上記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出するステップと、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出するステップ
を含みうる。そして、上記コンピュータは、検出したトレースを上記最適化の対象領域として用いる。
上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成するステップ
を含みうる。そして、上記コンピュータは、上記結合領域を上記最適化の対象領域として用いる。
本発明の一つの実施態様において、上記分岐網羅される見込みのある領域を選択するステップが、
トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択するステップと:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット(exit)先;又は、
(S3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントするステップと、
上記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示すトレースの末尾候補までを1つのトレースとするステップと:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルー(fall through)する命令);
(E3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は
(E5)プログラムの終端
を含みうる。
上記最適化バイナリー・モジュールのチェックポイントを、上記オリジナルのバイナリー・モジュールと同等の入力と出力結果とを持つように最適化するステップ
を含みうる。
上記最適化バイナリー・モジュールのチェックポイントの呼び出しが、上記オリジナルのバイナリー・モジュール中の同等のチェックポイントの呼び出しと同じ順番となるように、上記オリジナルのバイナリー・モジュールを最適化するステップ
を含みうる。
上記オリジナルのバイナリー・モジュールを検証用プロセスにロードし、上記最適化バイナリー・モジュールをテスト用プロセスにロードするステップと、
上記チェックポイントで、上記検証用プロセスと上記テスト用プロセスとを同期するステップと
を含みうる。
上記テスト用プロセスの出力と上記検証用プロセスの出力とを比較するステップ
を含みうる。
上記最適化バイナリー・モジュールの終了コード及び終了ステータスと、上記オリジナルのバイナリー・モジュールの終了コード及び終了ステータスとをそれぞれ比較することによって上記最適化バイナリー・モジュールを検証するステップ
を含みうる。
上記最適化バイナリー・モジュールの実行の上記出力と上記オリジナルのバイナリー・モジュールの実行の上記出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行するステップと、
上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュールを実行しているプロセスにコピーするステップと
をさらに実行することを含みうる。
上記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存するステップと、
上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記最適化バイナリー・モジュールのテストを実行するステップと
をさらに実行することを含みうる。
上記テスト用プロセスの出力と上記検証用プロセスの出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記検証用プロセスでのみ実行するステップと、
上記検証用プロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記テスト用プロセスにコピーするステップ
をさらに実行することを含みうる。
上記チェックポイントへの入力と、当該チェックポイントのコードを上記検証用プロセスでのみ実行した実行結果とを、バッファに格納するステップと、
上記バッファに上記チェックポイントへの全ての入力と上記実行結果とが格納されていることに応じて、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記テスト用プロセスでのテストを実行するステップと
をさらに実行することを含みうる。
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する対象領域選択手段と、
選択した対象領域を最適化したバイナリー・モジュール(最適化バイナリー・モジュール)を作成する最適化バイナリー・モジュール作成手段と、
上記最適化バイナリー・モジュールと上記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させて、上記最適化バイナリー・モジュールの実行の出力と上記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって上記最適化バイナリー・モジュールを検証する検証手段と
を備えている。
所定の時間の経過後に、上記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、上記選択した対象領域を縮小する縮小手段
をさらに備えており、
上記最適化バイナリー・モジュール作成手段が、縮小した対象領域を最適化したバイナリー・モジュールを作成することをさらに実行し、及び
上記検証手段が、上記縮小した対象領域を最適化した最適化バイナリー・モジュールと上記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させて、上記縮小した対象領域を最適化した上記最適化バイナリー・モジュールの実行の出力と上記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって上記縮小した対象領域を最適化した上記最適化バイナリー・モジュールを検証することをさらに実行しうる。
上記プロファイル情報を用いて、上記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで上記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出すること、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションし、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出すること
を実行しうる。そして、上記最適化バイナリー・モジュール作成手段は、検出したトレースを上記最適化の対象領域として用いうる。
上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成することを実行しうる。そして、上記最適化バイナリー・モジュール作成手段は、上記結合領域を上記最適化の対象領域として用いうる。
トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択すること:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット先;又は、
(S3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントすること、
上記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示す領域の末尾候補までを1つのトレースとすること:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルーする命令);
(E3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は
(E5)プログラム終端
を実行しうる。
上記オリジナルのバイナリー・モジュールを検証用プロセスにロードし、上記最適化バイナリー・モジュールをテスト用プロセスにロードすること、
上記チェックポイントで、上記検証用プロセスと上記テスト用プロセスとを同期すること
を実行しうる。
上記テスト用プロセスの出力と上記検証用プロセスの出力とを比較すること
を実行しうる。
上記最適化バイナリー・モジュールの実行の上記出力と上記オリジナルのバイナリー・モジュールの実行の上記出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行する実行手段と、
上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュールを実行しているプロセスにコピーするコピー手段と
をさらに備えうる。
上記実行手段が、上記テスト用プロセスの出力と上記検証用プロセスの出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記検証用プロセスでのみ実行し、
上記コピー手段が、上記検証用プロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記テスト用プロセスにさらにコピーすることを実行しうる。
上記実行手段が、
上記バッファに上記チェックポイントへの全ての入力と上記実行結果とが格納されていることに応じて、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記テスト用プロセスでのテストをさらに実行しうる。
(本発明に従う第3の態様)
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット先;又は、
(S3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先(すなわち、下記(E3)において分岐確率が低いと判断された分命令のうちのいずれかの分岐先である)。
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルーする命令);
(E3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は、
(E5)プログラムの終端。
2)コンピュータ(101)は、(S1)の条件より、領域Fからトレースを開始しようと試みる。コンピュータ(101)は、領域Gを発見し、(E3)の条件から領域Gの分岐命令の直前の命令(すなわち、領域Fの命令)までをトレースに含める。
3)領域Gは、分岐確率が低い分岐先を持つ分岐なので除外される。
4)コンピュータ(101)は、(S3)及び(E1)の条件より、領域H,J及びKをトレースとして選択する。
5)領域Iは、分岐確率が0%であり、実行されない為にトレースの対象外である。
6)コンピュータ(101)は、(S2)の条件より、領域Lからトレースを開始し、領域Mの次は領域Nを選択し(トレース構築時にMからNに分岐したものとする)、(E5)の条件よりプログラム終端(すなわち、領域P)まで(すなわち、領域L,M,N,及びP)をトレースとして選択する。
7)コンピュータ(101)は、(S2)及び(E2)の条件より、領域Oをトレースとして選択する。
2)コンピュータ(101)は、(S1)の条件より、領域Fからトレースを開始しようと試みる。コンピュータ(101)は、領域Gを発見し、(E3)の条件から領域Gの分岐命令の直前の命令(すなわち、領域Fの命令)までをトレースに含める。
3)領域Gは、分岐確率が低い分岐先を持つ分岐なので除外される。
4)コンピュータ(101)は、(S3)及び(E4)の条件より、領域Hをトレースとして選択する。
5)コンピュータ(101)は、(S2)及び(E1)の条件より、領域J及びKをトレースとして選択する。
6)領域Iは、実行されない為にトレースの対象外である。
7)コンピュータ(101)は、(S2)の条件より、領域Lからトレースを開始し、領域Mの次に領域Nを選択し(トレース構築時にMからNに分岐したものとする)、(E4)の条件でNまでをトレースとして選択する。
8)コンピュータ(101)は、(S2)及び(E4)の条件より、領域Oをトレースとして選択する。
9)コンピュータ(101)は、(S2)の条件より、領域Pからトレースを開始し、プログラムの終端に達するので、(E5)の条件より領域Pまでをトレースとして選択する。
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット先;又は、
(S3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
上記選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントすること、
上記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示す領域の末尾候補までを1つのトレースとすること:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルーする命令);
(E3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は、
(E5)プログラムの終端
を実行しうる。
Claims (20)
- 最適化したバイナリー・モジュールをテストする方法であって、コンピュータが、
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するステップと、
選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成するステップと、
前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証するステップと
を実行することを含み、
前記コンピュータが、
所定の時間の経過後に、前記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、前記選択した対象領域を縮小するステップと、
縮小した対象領域について、前記作成するステップ及び前記検証するステップを再実行するステップと
をさらに実行することを含む、前記方法。 - 最適化したバイナリー・モジュールをテストする方法であって、コンピュータが、
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するステップと、
選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成するステップと、
前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証するステップと
を実行することを含み、
前記選択するステップが、
前記プロファイル情報を用いて、前記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで前記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出するステップと、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出するステップ
を含み、
検出したトレースが前記最適化の対象領域として用いられる、
前記方法。 - 前記選択した対象領域を縮小するステップが、
前記所定の時間の経過後に、前記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないこと且つテスト時間が超過したことに応じて、分岐をトレースに含めるかを判断する為の閾値を上げるステップであって、前記閾値は、分岐先に分岐した回数を総分岐実行回数で除した分岐確率の閾値である、前記閾値を上げるステップと
をさらに含む、請求項2に記載の方法。 - 前記選択するステップが、
前記プロファイル情報を用いて、前記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで前記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出するステップと、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出するステップ
を含み、
検出したトレースが前記最適化の対象領域として用いられる、
請求項1に記載の方法。 - 前記選択するステップが、
前記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成するステップ
を含み、
前記結合領域が前記最適化の対象領域として用いられる、
請求項2又は4に記載の方法。 - 前記選択するステップが、
トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択するステップと:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット(exit)先;又は、
(S3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントするステップと、
前記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示すトレースの末尾候補までを1つのトレースとするステップと:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令;
(E3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)前記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令、又は
(E5)プログラムの終端
を含む、請求項4又は5に記載の方法。 - 前記コンピュータが、
前記最適化バイナリー・モジュールの実行の前記出力と前記オリジナルのバイナリー・モジュールの実行の前記出力との比較の結果、前記最適化バイナリー・モジュールが正しく実行されていることに応じて、前記チェックポイントのコードを前記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行するステップと、
前記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された前記チェックポイントのコードの実行結果を、前記最適化バイナリー・モジュールを実行しているプロセスにコピーするステップと
をさらに実行することを含む、請求項1〜6のいずれか一項に記載の方法。 - 前記検証するステップが、
前記最適化バイナリー・モジュールの終了コード及び終了ステータスと、前記オリジナルのバイナリー・モジュールの終了コード及び終了ステータスとをそれぞれ比較することによって前記最適化バイナリー・モジュールを検証するステップ
を含む、請求項1〜7のいずれか一項に記載の方法。 - 前記コンピュータが、
前記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存するステップと、
前記コンピュータの負荷が所定の閾値よりも小さい時間帯において、前記最適化バイナリー・モジュールのテストを実行するステップと
をさらに実行することを含む、請求項1〜8のいずれか一項に記載の方法。 - 前記最適化バイナリー・モジュールを作成するステップが、
前記最適化バイナリー・モジュールのチェックポイントを、前記オリジナルのバイナリー・モジュールと同等の入力と出力結果とを持つように最適化するステップ、又は、
前記最適化バイナリー・モジュールのチェックポイントの呼び出しが、前記オリジナルのバイナリー・モジュール中の同等のチェックポイントの呼び出しと同じ順番となるように、前記オリジナルのバイナリー・モジュールを最適化するステップ
を含む、請求項1〜9のいずれか一項に記載の方法。 - 前記最適化の対象領域が、分岐確率が小さいサイド・イグジット(side exit)を含まない、請求項1〜10のいずれか一項に記載の方法。
- 前記チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させるステップが、
前記オリジナルのバイナリー・モジュールを検証用プロセスにロードし、前記最適化バイナリー・モジュールをテスト用プロセスにロードするステップと、
前記チェックポイントで、前記検証用プロセスと前記テスト用プロセスとを同期するステップと
を含む、請求項1〜11のいずれか一項に記載の方法。 - 前記最適化バイナリー・モジュールの実行の前記出力と前記オリジナルのバイナリー・モジュールの実行の前記出力とを比較するステップが、
前記テスト用プロセスの出力と前記検証用プロセスの出力とを比較するステップ
を含む、請求項12に記載の方法。 - 前記コンピュータが、
前記テスト用プロセスの出力と前記検証用プロセスの出力との比較の結果、前記最適化バイナリー・モジュールが正しく実行されていることに応じて、前記チェックポイントのコードを前記検証用プロセスでのみ実行するステップと、
前記検証用プロセスでのみ実行された前記チェックポイントのコードの実行結果を、前記テスト用プロセスにコピーするステップ
をさらに実行することを含む、請求項13に記載の方法。 - 前記コンピュータが、
前記チェックポイントへの入力と、当該チェックポイントのコードを前記検証用プロセスでのみ実行した実行結果とを、バッファに格納するステップと、
前記バッファに前記チェックポイントへの全ての入力と前記実行結果とが格納されていることに応じて、前記コンピュータの負荷が所定の閾値よりも小さい時間帯において、前記テスト用プロセスでのテストを実行するステップと
をさらに実行することを含む、請求項14に記載の方法。 - 前記プロファイル情報が、タイマー・サンプリング(timer sampling)、又は、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーション(Runtime Instrumentation)を利用することによって得られる情報である、請求項1〜15のいずれか一項に記載の方法。
- 前記チェックポイントが、システム・コール又は標準ライブラリ・コールである、請求項1〜16のいずれか一項に記載の方法。
- 最適化したバイナリー・モジュールをテストするためのコンピュータであって、
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する対象領域選択手段と、
選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成する最適化バイナリー・モジュール作成手段と、
前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証する検証手段と
を備えており、
前記対象領域選択手段が、
所定の時間の経過後に、前記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、前記選択した対象領域を縮小する縮小手段
をさらに備えており、
前記最適化バイナリー・モジュール作成手段が、縮小した対象領域を最適化したバイナリー・モジュールを作成することをさらに実行し、及び
前記検証手段が、前記縮小した対象領域を最適化した最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記縮小した対象領域を最適化した前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記縮小した対象領域を最適化した前記最適化バイナリー・モジュールを検証することをさらに実行する、
前記コンピュータ。 - 最適化したバイナリー・モジュールをテストするためのコンピュータであって、
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する対象領域選択手段と、
選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成する最適化バイナリー・モジュール作成手段と、
前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証する検証手段と
を備えており、
前記対象領域選択手段が、
前記プロファイル情報を用いて、前記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで前記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出すること、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出すること
を実行し、前記最適化バイナリー・モジュール作成手段は、検出したトレースを前記最適化の対象領域として用いる、
前記コンピュータ。 - 最適化したバイナリー・モジュールをテストするためのコンピュータ・プログラムであって、コンピュータに、請求項1〜17のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014026911A JP5988444B2 (ja) | 2014-02-14 | 2014-02-14 | 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム |
US14/621,890 US9563547B2 (en) | 2014-02-14 | 2015-02-13 | Testing optimized binary modules |
US14/749,049 US9569347B2 (en) | 2014-02-14 | 2015-06-24 | Testing optimized binary modules |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014026911A JP5988444B2 (ja) | 2014-02-14 | 2014-02-14 | 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015153191A JP2015153191A (ja) | 2015-08-24 |
JP5988444B2 true JP5988444B2 (ja) | 2016-09-07 |
Family
ID=53798229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014026911A Expired - Fee Related JP5988444B2 (ja) | 2014-02-14 | 2014-02-14 | 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム |
Country Status (2)
Country | Link |
---|---|
US (2) | US9563547B2 (ja) |
JP (1) | JP5988444B2 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9959197B2 (en) * | 2015-08-31 | 2018-05-01 | Vmware, Inc. | Automated bug detection with virtual machine forking |
US9563536B1 (en) | 2015-10-19 | 2017-02-07 | International Business Machines Corporation | Performance neutral isolation of runtime discrepancies in binary code |
US9547484B1 (en) * | 2016-01-04 | 2017-01-17 | International Business Machines Corporation | Automated compiler operation verification |
US10037260B2 (en) * | 2016-05-31 | 2018-07-31 | Red Hat, Inc. | System for expression evaluation at debug time |
CN107229565B (zh) * | 2017-05-31 | 2020-05-01 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
CN107451057B (zh) * | 2017-07-31 | 2020-11-24 | 苏州浪潮智能科技有限公司 | 一种分支确定方法及装置 |
US10346293B2 (en) | 2017-10-04 | 2019-07-09 | International Business Machines Corporation | Testing pre and post system call exits |
US11175924B2 (en) | 2017-10-06 | 2021-11-16 | International Business Machines Corporation | Load-store unit with partitioned reorder queues with single cam port |
US10417002B2 (en) | 2017-10-06 | 2019-09-17 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
US10606591B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10514890B2 (en) * | 2017-11-15 | 2019-12-24 | Accenture Global Solutions Limited | Test case and data selection using a sampling methodology |
US10503626B2 (en) * | 2018-01-29 | 2019-12-10 | Oracle International Corporation | Hybrid instrumentation framework for multicore low power processors |
US10754630B2 (en) * | 2018-06-06 | 2020-08-25 | International Business Machines Corporation | Build-time code section-specific compiler selection |
US10832399B2 (en) * | 2018-10-23 | 2020-11-10 | International Business Machines Corporation | Detection for abnormal connectivity on a product |
KR101995285B1 (ko) * | 2018-10-31 | 2019-07-02 | 한국인터넷진흥원 | 취약점이 존재하는 바이너리 패치 방법 및 그 장치 |
US10776255B1 (en) * | 2019-07-31 | 2020-09-15 | International Business Machines Corporation | Automatic verification of optimization of high level constructs using test vectors |
US11670190B1 (en) | 2020-02-03 | 2023-06-06 | Architecture Technology Corporation | Training apparatus using augmented and virtual reality |
US11042369B1 (en) * | 2020-02-03 | 2021-06-22 | Architecture Technology Corporation | Systems and methods for modernizing and optimizing legacy source code |
US11599342B2 (en) * | 2020-09-28 | 2023-03-07 | Red Hat, Inc. | Pathname independent probing of binaries |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5274811A (en) * | 1989-06-19 | 1993-12-28 | Digital Equipment Corporation | Method for quickly acquiring and using very long traces of mixed system and user memory references |
JPH06236295A (ja) | 1992-03-16 | 1994-08-23 | Nippon Telegr & Teleph Corp <Ntt> | プログラム移植支援システム |
US6105124A (en) * | 1996-01-26 | 2000-08-15 | Intel Corporation | Method and apparatus for merging binary translated basic blocks of instructions |
US5732210A (en) * | 1996-03-15 | 1998-03-24 | Hewlett-Packard Company | Use of dynamic translation to provide fast debug event checks |
JPH09288580A (ja) | 1996-04-19 | 1997-11-04 | Nec Corp | ソースプログラムの最適化装置および最適化方法 |
US5909578A (en) * | 1996-09-30 | 1999-06-01 | Hewlett-Packard Company | Use of dynamic translation to burst profile computer applications |
US5940622A (en) * | 1996-12-11 | 1999-08-17 | Ncr Corporation | Systems and methods for code replicating for optimized execution time |
US6164841A (en) * | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
US6405367B1 (en) * | 1998-06-05 | 2002-06-11 | Hewlett-Packard Company | Apparatus and method for increasing the performance of Java programs running on a server |
US6223339B1 (en) * | 1998-09-08 | 2001-04-24 | Hewlett-Packard Company | System, method, and product for memory management in a dynamic translator |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6434738B1 (en) * | 1999-04-22 | 2002-08-13 | David Arnow | System and method for testing computer software |
US6968542B2 (en) * | 2000-06-16 | 2005-11-22 | Hewlett-Packard Development Company, L.P. | Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths |
US6944754B2 (en) * | 2002-10-02 | 2005-09-13 | Wisconsin Alumni Research Foundation | Method and apparatus for parallel execution of computer software using a distilled program |
JP3992102B2 (ja) * | 2003-06-04 | 2007-10-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 |
US7228528B2 (en) * | 2003-06-26 | 2007-06-05 | Intel Corporation | Building inter-block streams from a dynamic execution trace for a program |
US7206969B2 (en) * | 2003-09-10 | 2007-04-17 | Hewlett-Packard Development Company, L.P. | Opportunistic pattern-based CPU functional testing |
FR2865047B1 (fr) | 2004-01-14 | 2006-04-07 | Commissariat Energie Atomique | Systeme de generation automatique de codes optimises |
US7506318B1 (en) * | 2005-06-28 | 2009-03-17 | Replay Solutions, Inc. | Recording and replaying computer programs |
US20070089097A1 (en) * | 2005-10-13 | 2007-04-19 | Liangxiao Hu | Region based code straightening |
JP2008276735A (ja) | 2007-04-03 | 2008-11-13 | Toshiba Corp | プログラムコード変換装置及びプログラムコード変換方法 |
US20100115494A1 (en) * | 2008-11-03 | 2010-05-06 | Gorton Jr Richard C | System for dynamic program profiling |
JP4886826B2 (ja) * | 2009-08-24 | 2012-02-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | フォールト・トレラント・コンピュータ・システム、方法及びプログラム |
US8752008B2 (en) | 2009-09-02 | 2014-06-10 | Advanced Micro Devices, Inc. | Lightweight service based dynamic binary rewriter framework |
US8756581B2 (en) * | 2011-02-03 | 2014-06-17 | International Business Machines Corporation | Adaptive next-executing-cycle trace selection for trace-driven code optimizers |
-
2014
- 2014-02-14 JP JP2014026911A patent/JP5988444B2/ja not_active Expired - Fee Related
-
2015
- 2015-02-13 US US14/621,890 patent/US9563547B2/en not_active Expired - Fee Related
- 2015-06-24 US US14/749,049 patent/US9569347B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20150234736A1 (en) | 2015-08-20 |
US20150370695A1 (en) | 2015-12-24 |
US9563547B2 (en) | 2017-02-07 |
US9569347B2 (en) | 2017-02-14 |
JP2015153191A (ja) | 2015-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5988444B2 (ja) | 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム | |
Zhang et al. | A comprehensive benchmark of deep learning libraries on mobile devices | |
US20120260132A1 (en) | Test selection based on an n-wise combinations coverage | |
US20200341752A1 (en) | Electronic apparatus and method for controlling thereof | |
US9720793B2 (en) | Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads | |
EP2972878B1 (en) | Mechanism for facilitating dynamic and efficient management of instruction atomicity violations in software programs at computing systems | |
US9396095B2 (en) | Software verification | |
JP6303749B2 (ja) | ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体 | |
US9697040B2 (en) | Software replayer for transactional memory programs | |
Peters et al. | How does migrating to kotlin impact the run-time efficiency of android apps? | |
US8972784B2 (en) | Method and device for testing a system comprising at least a plurality of software units that can be executed simultaneously | |
US11983097B2 (en) | Ranking tests based on code change and coverage | |
JP6723483B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
US8671396B2 (en) | Dynamic interface reduction for software model checking | |
Dou et al. | ShortCut: accelerating mostly-deterministic code regions | |
US9015673B2 (en) | Method for developing software in a parallel computing environment | |
US9860155B1 (en) | Code coverage and data analysis | |
US20150161006A1 (en) | Information processing apparatus and method for testing same | |
JP5545133B2 (ja) | 静的解析処理システム、方法、およびプログラム | |
TWI417786B (zh) | 幫助一處理環境中之指令執行的方法、系統及程式產品 | |
US9218272B2 (en) | System level architecture verification of a transactional execution | |
CN116775202A (zh) | 模糊测试方法、装置、介质、电子设备及计算机程序产品 | |
Zhang et al. | Benchmarking of DL Libraries and Models on Mobile Devices | |
US10534691B2 (en) | Apparatus and method to improve accuracy of performance measurement for loop processing in a program code | |
JP2012059202A (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160119 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20160128 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20160128 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160408 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20160408 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160519 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160615 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20160615 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160715 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20160719 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20160719 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160805 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5988444 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |