JP2022542007A - テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 - Google Patents

テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 Download PDF

Info

Publication number
JP2022542007A
JP2022542007A JP2022500767A JP2022500767A JP2022542007A JP 2022542007 A JP2022542007 A JP 2022542007A JP 2022500767 A JP2022500767 A JP 2022500767A JP 2022500767 A JP2022500767 A JP 2022500767A JP 2022542007 A JP2022542007 A JP 2022542007A
Authority
JP
Japan
Prior art keywords
machine instructions
executable code
generating
computer
level
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.)
Granted
Application number
JP2022500767A
Other languages
English (en)
Other versions
JP7410269B2 (ja
JPWO2021019401A5 (ja
Inventor
アイルランド、イアン、アレクサンダー
コープランド、レイド
キールストラ、アラン
シーグワルト、デイヴィッド、ケヴィン
俊彦 孝壽
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2022542007A publication Critical patent/JP2022542007A/ja
Publication of JPWO2021019401A5 publication Critical patent/JPWO2021019401A5/ja
Application granted granted Critical
Publication of JP7410269B2 publication Critical patent/JP7410269B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

高水準コンストラクトの最適化の自動検証のための方法は、高水準コンストラクトを含むコンピュータ・プログラムをコンパイルすることによって第1の実行可能コードを生成することを含む。コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および高水準コンストラクトに対するコンパイル時情報を格納することを含む。この方法はさらに、第1の実行可能コードを最適化することを含み、最適化することは、第1の実行可能コードを中間言語表現に変換することを含む。この最適化はさらに、第2の実行可能コードを生成することを含む。第2の実行可能コードを生成するために、この方法は、中間言語表現から、高水準コンストラクトに対する第2の一組の機械命令を生成することを含む。第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致する場合には、第2の実行可能コードに第2の一組の機械命令が含められ、一致しない場合には、第1の一組の機械命令が含められる。

Description

本開示は一般にコンピューティング技術に関し、より詳細には、実行可能プログラム・コードの性能を向上させるための方法、コンピュータ・プログラム製品、およびデータ処理システムに関する。
コンピュータ・ソフトウェアは、データ処理システムによって実行される一組の命令を含む。コンピュータ・ソフトウェアは、データ処理システムが、例えばワード・プロセッシング・デバイス、スプレッドシート・デバイス、またはインターネット・ブラウジング・デバイス、データ・レポジトリなどとして機能することを可能にする命令を提供する。コンピュータ・ソフトウェアを使用することができる幅広い多様な異なるデータ処理システムが存在する。それに応じて、本明細書で使用されるとき、用語「データ処理システム」は幅広い意味を有することが意図されており、この用語は、パーソナル・コンピュータ、ラップトップ・コンピュータ、パームトップ・コンピュータ、ハンドヘルド・コンピュータ、ネットワーク・コンピュータ、サーバ、メインフレーム、ワークステーション、移動電話および同種の無線デバイス、パーソナル・デジタル・アシスタント、ならびにコンピュータ・ソフトウェアをインストールすることができる他の電子デバイスを含むことがある。用語「コンピュータ」、「コンピュータ・ソフトウェア」、「コンピュータ・プログラム」、「コンピュータ・プログラミング」、「ソフトウェア」、「ソフトウェア・プログラム」および関連用語も、同様に幅広い意味を有することが意図されている。
一般に、現代のコンピュータ・ソフトウェアは元来、プログラマが理解できる構文コンストラクト(syntactic construct)を使用してソフトウェアの中に実装する命令を表現する「高水準(high level)」コンピュータ・プログラミング言語で書かれている。高水準コンピュータ・プログラミング言語の構文コンストラクトは、プログラマがコンピュータ・ソフトウェアを作成することをより容易にするため、高水準コンピュータ・プログラミング言語は有用である。コンピュータ・ソフトウェアの作成が容易になるのは、データ処理システムが直接に理解するであろう言語でプログラマが命令を書く必要がないためである。データ処理システムが直接に理解するであろう言語と任意の人間の言語とはほとんどまたは全く似ていないため、データ処理システムが直接に理解するであろう言語で命令を書く方がはるかに難しいであろう。
しかしながら、データ処理システムは一般に、高水準コンピュータ・プログラミング言語で書かれた命令を直接に理解および実施することができない。したがって、高水準コンピュータ・プログラミング言語で書かれたコンピュータ・プログラムは、データ処理システムによって使用され得る前に、最初に、ターゲット・データ処理システムによって理解される言語に「コンパイル」される。コンパイルは、普通は「コンパイラ」と呼ばれるコンピュータ・プログラムによって実行されるプロセスであり、このプロセスでは、本質的に、高水準コンピュータ・プログラミング言語の構文コンストラクトが、ターゲット・データ処理システムによって理解される言語で書かれた命令に(ことによると中間ソフトウェア層を介して)翻訳される。「コンパイル(compilingまたはcompilation)」プロセスの結果は、「実行可能コード」または「バイナリ・コード」として知られており、これは、データ処理システムが直接にまたは中間ソフトウェア層によって実行することができるコンピュータ・プログラム・コードを意味し、ターゲット・データ処理システムによって理解される命令は「機械」命令を意味する。
高水準コンピュータ・プログラミング言語は、幅広い2つのタイプの言語、すなわち静的にコンパイルされる言語(statically compiled language)(以後、静的コンパイル言語)および動的にコンパイルされる言語(dynamically compiled language)(以後、動的コンパイル言語)のうちの一方に含まれると考えることができる。静的コンパイル言語では、コードが実行される前にコンパイル・プロセスが一度実行される。コンパイルの結果は、中間ソフトウェア層なしでデータ処理システムによって直接に実施することができる実行可能コードである。静的コンパイル言語はC、C++、FORTRAN、PL/I、COBOL、およびAdaを含む。Java(R)(TM)などの動的コンパイル言語では、ソース・コードが最初に、Java(R)バーチャル・マシン(JVM)などの中間ソフトウェア層によって実施することができる中間形態にコンパイルされる。Java(R)では、この中間形態が「バイトコード」として知られている。必ずというわけではないが、中間ソフトウェア層は通常、コンピュータ・プログラムが実行されるたびに追加のコンパイルを実行して、普通は、ソース・コードの中間形態を、データ処理システムによって直接に実行することができる実行可能コードに翻訳する。Java(R)およびJava(R)をベースにした全ての商標およびロゴは、Oracle(R)もしくはその系列会社またはその両方の商標または登録商標である。
したがって、当技術分野では、上述の課題を解決することが求められている。
第1の態様から見ると、本発明は、高水準コンストラクトの最適化の自動検証のためのコンピュータ実施方法を提供し、この方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含み、このコンピュータ・プログラムは高水準コンストラクトを含み、コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報(compile-time information)を格納することを含み、この方法はさらに、バイナリ・オプティマイザ(binary optimizer)によって、第1の実行可能コードを最適化することを含み、最適化することは、第1の実行可能コードを、コンピュータ・プログラムの中間言語(intermediate language)(IL)表現に変換することを含み、このIL表現は、コンパイル時情報に基づく、高水準コンストラクトに対応する一組のIL命令を含み、最適化することはさらに、コンピュータ・プログラムのIL表現に基づいて第2の実行可能コードを生成することを含み、第2の実行可能コードを生成することは、高水準コンストラクトのIL表現に基づいて、高水準コンストラクトに対する第2の一組の機械命令を生成すること、第1の一組の機械命令と第2の一組の機械命令との振る舞い(behavior)が一致するとの判定に基づいて、第2の実行可能コードに第2の一組の機械命令を含めること、および第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、第2の実行可能コードに第1の一組の機械命令を含めることを含む。
別の一態様から見ると、本発明はシステムを提供し、このシステムは、メモリと、このメモリに結合されたプロセッサとを備え、このプロセッサは、高水準コンストラクトの最適化の自動検証のための方法を実行するように構成されており、この方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含み、このコンピュータ・プログラムは高水準コンストラクトを含み、コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報を格納することを含み、この方法はさらに、バイナリ・オプティマイザによって、第1の実行可能コードを最適化することを含み、最適化することは、第1の実行可能コードを中間言語(IL)表現に変換することを含み、このIL表現は、コンパイル時情報に基づく、高水準コンストラクトに対応する一組のIL命令を含み、最適化することはさらに、IL表現に基づいて第2の実行可能コードを生成することを含み、第2の実行可能コードは、高水準コンストラクトに対する第2の一組の機械命令を含み、最適化することはさらに、バイナリ・オプティマイザによって、第1の一組の機械命令と第2の一組の機械命令とを比較すること、および第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致するとの判定に基づいて、第1の実行可能コードを第2の実行可能コードに置き換えることを含む。
別の一態様から見ると、本発明は、高水準コンストラクトの最適化の自動検証のためのコンピュータ・プログラム製品を提供し、このコンピュータ・プログラム製品は、処理回路によって可読のコンピュータ可読ストレージ媒体であり、本発明のステップを実行するための方法を実行するためにこの処理回路が実行するための命令を記憶した、コンピュータ可読ストレージ媒体を含む。
別の一態様から見ると、本発明は、コンピュータ可読媒体上に記憶された、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、このプログラムがコンピュータ上で実行されたときに本発明のステップを実行するためのソフトウェア・コード部分を含む、コンピュータ・プログラムを提供する。
別の一態様から見ると、本発明は、プログラム命令が実装されたコンピュータ可読ストレージ媒体を含むコンピュータ・プログラム製品を提供し、このプログラム命令は、高水準コンストラクトの最適化の自動検証のための方法をコンピュータ・プロセッサに実行させるために、このコンピュータ・プロセッサによって実行可能であり、この方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含み、このコンピュータ・プログラムは高水準コンストラクトを含み、コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報を格納することを含み、この方法はさらに、バイナリ・オプティマイザによって、第1の実行可能コードを最適化することを含み、最適化することは、第1の実行可能コードを、コンピュータ・プログラムの中間言語(IL)表現に変換することを含み、このIL表現は、コンパイル時情報に基づく、高水準コンストラクトに対応する一組のIL命令を含み、最適化することはさらに、コンピュータ・プログラムのIL表現に基づいて第2の実行可能コードを生成することを含み、第2の実行可能コードを生成することは、高水準コンストラクトのIL表現に基づいて、高水準コンストラクトに対する第2の一組の機械命令を生成すること、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致するとの判定に基づいて、第2の実行可能コードに第2の一組の機械命令を含めること、および第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、第2の実行可能コードに第1の一組の機械命令を含めることを含む。
別の一態様から見ると、本発明は、高水準コンストラクトの最適化の自動検証のためのコンピュータ実施方法を提供し、この方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含み、このコンピュータ・プログラムは高水準コンストラクトを含み、コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報を格納することを含み、この方法はさらに、オプティマイザによって、第1の実行可能コードを最適化することを含み、最適化することは、第1の実行可能コードを中間言語(IL)表現に変換することを含み、このIL表現は、コンパイル時情報に基づく、高水準コンストラクトに対応する一組のIL命令を含み、最適化することはさらに、IL表現に基づいて第2の実行可能コードを生成することを含み、第2の実行可能コードは、高水準コンストラクトに対する第2の一組の機械命令を含み、最適化することはさらに、一組の入力について、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、第1の一組の機械命令と、第2の一組の機械命令と、高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、この入力が所定の一組の入力からのものであることに応答して第1の一組の機械命令を実行させ、そうでないことに応答して第2の一組の機械命令を実行させる、第3の実行可能コードを生成することを含む。
別の一態様から見ると、本発明はシステムを提供し、このシステムは、メモリと、このメモリに結合されたプロセッサとを備え、このプロセッサは、高水準コンストラクトの最適化の自動検証のための方法を実行するように構成されており、この方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含み、このコンピュータ・プログラムは高水準コンストラクトを含み、コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報を格納することを含み、この方法はさらに、オプティマイザによって、第1の実行可能コードを最適化することを含み、最適化することは、第1の実行可能コードを中間言語(IL)表現に変換することを含み、このIL表現は、コンパイル時情報に基づく、高水準コンストラクトに対応する一組のIL命令を含み、最適化することはさらに、IL表現に基づいて第2の実行可能コードを生成することを含み、第2の実行可能コードは、高水準コンストラクトに対する第2の一組の機械命令を含み、最適化することはさらに、一組の入力について、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、第1の一組の機械命令と、第2の一組の機械命令と、高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、この入力が所定の一組の入力からのものであることに応答して第1の一組の機械命令を実行させ、そうでないことに応答して第2の一組の機械命令を実行させる、第3の実行可能コードを生成することを含む。
本発明の1つまたは複数の実施形態によれば、高水準コンストラクトの最適化の自動検証のためのコンピュータ実施方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含む。このコンピュータ・プログラムは高水準コンストラクトを含み、コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報を格納することを含む。この方法はさらに、バイナリ・オプティマイザによって、第1の実行可能コードを最適化することを含む。最適化することは、第1の実行可能コードを、コンピュータ・プログラムの中間言語(IL)表現に変換することを含む。このIL表現は、コンパイル時情報に基づく、高水準コンストラクトに対応する一組のIL命令を含む。最適化することはさらに、コンピュータ・プログラムのIL表現に基づいて第2の実行可能コードを生成することを含み、第2の実行可能コードを生成することは、高水準コンストラクトのIL表現に基づいて、高水準コンストラクトに対する第2の一組の機械命令を生成することを含む。第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致するとの判定に基づいて、第2の実行可能コードに第2の一組の機械命令が含められる。あるいは、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、第2の実行可能コードに第1の一組の機械命令が含められる。
1つまたは複数の例では、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致するとの判定が充足可能性ソルバ(satisfiability solver)に基づく。第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致すると判定することは、複数のテストを含むテスト・ベクタ(test vector)を生成すること、テスト・ベクタの中のそれぞれのテストを、高水準コンストラクトに関連する第1の一組の機械命令および第2の一組の機械命令に対して実行することを含む。判定することはさらに、テスト・ベクタの中のそれぞれのテストの出力を比較することを含み、第1の一組の機械命令と第2の一組の機械命令とに関してそれぞれの出力が一致することに基づいて、振る舞いは一致すると判定される。
テスト・ベクタの中のテストを実行することは、第1の一組の機械命令に対する第1のラッパ関数(wrapper function)を生成すること、および実行するテストに応じた入力を用いて第1のラッパ関数を実行し、第1の一組の出力を収集することを含む。さらに、テストを実行することは、第2の一組の機械命令に対する第2のラッパ関数を生成すること、および実行するテストに応じた入力を用いて第2のラッパ関数を実行することを含む。テストを実行することはさらに、第2の一組の出力を収集することを含む。1つまたは複数の例では、第1のラッパ関数が第1の例外ハンドラでエンクローズされており(enclosed in)、第2のラッパ関数が第2の例外ハンドラでエンクローズされている。1つまたは複数の例では、テストの第1の出力が第1の一組の機械命令に対する例外であること、および前記テストの第2の出力が第2の一組の機械命令に対する前記例外であることに基づいて、振る舞いは一致すると判定される。
1つまたは複数の例では、高水準コンストラクトに対するコンパイル時情報を格納することが、高水準コンストラクトに対応する前記テストに入力を格納することを含む。
1つまたは複数の例では、コンパイル時情報が、高水準コンストラクトの識別(identity)、第1の一組の機械命令の位置、第1の一組の機械命令に対する入力および出力の位置を含む。
1つまたは複数の例では、第1のコンパイラが、コンパイラの第1のインスタンス(instance)であり、第1のコンパイラの設定とは異なる設定を有する前記コンパイラの第2のインスタンスが、第2の実行可能コードを生成する目的に使用される。
本発明の1つまたは複数の実施形態によれば、高水準コンストラクトの最適化の自動検証のための方法は、コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成することを含み、このコンピュータ・プログラムは高水準コンストラクトを含む。コンパイルすることは、高水準コンストラクトに対する第1の一組の機械命令を生成すること、および第1の実行可能コードに、高水準コンストラクトに対するコンパイル時情報を格納することを含む。この方法はさらに、オプティマイザによって、第1の実行可能コードを最適化することを含む。最適化することは、第1の実行可能コードをプログラムの中間言語(IL)表現に変換することを含み、この変換は、高水準コンストラクトを、コンパイル時情報に基づいて、高水準コンストラクトのIL表現に変換することを含む。最適化することは、プログラムのIL表現に基づいて第2の実行可能コードを生成することを含み、この第2の実行可能コードは、高水準コンストラクトのIL表現に基づく、高水準コンストラクトに対する第2の一組の機械命令を含む。最適化することはさらに、一組の入力について、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、第1の一組の機械命令と、第2の一組の機械命令と、高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、この入力が所定の一組の入力からのものであることに応答して第1の一組の機械命令を実行させ、そうでないことに応答して第2の一組の機械命令を実行させる、第3の実行可能コードを生成することを含む。
1つまたは複数の例では、第1の一組の機械命令と第2の一組の機械命令との振る舞いが一致すると判定することが、複数のテストを含むテスト・ベクタを生成すること、およびテスト・ベクタの中のそれぞれのテストを、高水準コンストラクトに関連する第1の一組の機械命令および第2の一組の機械命令に対して実行することを含む。テスト・ベクタの中のそれぞれのテストの出力が比較され、第1の一組の機械命令と第2の一組の機械命令とに関してそれぞれの出力が一致することに基づいて、振る舞いは一致すると判定される。さらに、テスト・ベクタの中のテストを実行することは、第1の一組の機械命令に対する第1のラッパ関数を生成すること、実行するテストに応じた入力を用いて第1のラッパ関数を実行すること、および第1の一組の出力を収集することを含む。さらに、テストを実行することは、第2の一組の機械命令に対する第2のラッパ関数を生成すること、実行するテストに応じた入力を用いて第2のラッパ関数を実行すること、および第2の一組の出力を収集することを含む。
上述の特徴はさらに、少なくともシステム、コンピュータ・プログラム製品、および機械によって提供することができる。
本発明の技術によって、追加の特徴および利点が実現される。本明細書には、本発明の他の実施形態および態様が詳細に記載されており、それらは、請求の発明の一部と見なされる。本発明ならびに本発明の利点および特徴をより十分に理解するため、以下の説明および図面を参照されたい。
本発明と見なされる主題は、本明細書の末尾の特許請求の範囲に具体的に示されており、明確に主張されている。本発明の上記の特徴および利点ならびにその他の特徴および利点は、添付図面とともに解釈される以下の詳細な説明から明らかである。
本発明の1つまたは複数の実施形態による、クラウド・コンピューティング環境を示す図である。 本発明の1つまたは複数の実施形態による、クラウド・コンピュータ環境の抽象化モデル層を示す図である。 本発明の1つまたは複数の実施形態を実施するのに利用することができる例示的なコンピュータ処理システムを示すブロック図である。 本発明の1つまたは複数の実施形態による、最適化システムのブロック図である。 本発明の1つまたは複数の実施形態による、テスト・ベクタを使用して高水準コンストラクトの最適化を自動的に検証する方法の流れ図である。 本発明の1つまたは複数の実施形態による、どの実行可能コードを第2の実行可能プログラムに含めるのかを決定するための方法の流れ図である。
本明細書に示された図は例示のためのものである。本発明の範囲を逸脱しない、図または図に記載された操作に対する多くの変形態様が存在し得る。例えば、動作を異なる順序で実行することができ、または動作を追加、削除もしくは変更することができる。また、用語「結合された」およびその変異語は、2つの要素間に通信経路を有することを示し、要素間に介在要素/接続がない要素間の直接接続を含意しない。これらの変形態様は全て本明細書の一部と見なされる。
添付図および記載された実施形態の以下の詳細な説明では、図に示されたさまざまな要素が2桁または3桁の参照符号を有する。少数の例外を除き、それぞれの参照符号の左端の数字はその要素が最初に示された図に対応する。
本明細書では、本発明のさまざまな実施形態が関連図を参照して説明される。本発明の範囲を逸脱することなく本発明の代替実施形態を考案することができる。以下の説明および図面には、要素間のさまざまな接続および位置関係(例えば上、下、隣りなど)が示されている。これらの接続もしくは位置関係またはその両方は、特に指定されていない限り、直接的なものであることまたは間接的なものであることができ、この点に関して本発明は限定を意図したものではない。したがって、実体(entity)の結合は、直接結合または間接結合のいずれかであることができ、実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書には詳細に記載されていない追加のステップまたは機能を有する、より包括的な手順またはプロセスに、本明細書に記載されたさまざまなタスクおよびプロセス・ステップを組み込むことができる。
特許請求の範囲および本明細書の解釈のために、以下の定義および略語が使用される。本明細書で使用されるとき、用語「備える(comprises)」、「備えている(comprising)」、「含む(includes)」、「含んでいる(including)」、「有する(has)」、「有している(having)」、「含有する(contains)」もしくは「含有している(containing)」、またはこれらの用語の任意の他の変異語は、非排他的包含(non-exclusive inclusion)をカバーすることが意図されている。例えば、要素のリストを含む組成物、混合物、プロセス、方法、物品、または装置は、必ずしもそれらの要素だけに限定されるわけではなく、明示的にはリストに入れられていない他の要素、あるいはこのような組成物、混合物、プロセス、方法、物品、または装置に固有の他の要素を含み得る。
さらに、本明細書では、用語「例示的な」が、「一例、事例、または実例として役立つ」ことを意味するものとして使用されている。本明細書に「例示的」として記載された任意の実施形態または設計は必ずしも、他の実施形態または設計よりも好ましいまたは有利であるとは解釈されない。用語「少なくとも1つの」および「1つまたは複数の」は、1以上の任意の整数、すなわち1、2、3、4などを含むと理解してもよい。用語「複数の」は、2以上の任意の整数、すなわち2、3、4、5などを含むと理解してもよい。用語「接続」は、間接「接続」と直接「接続」の両方を含むことがある。
用語「約」、「実質的に」、「およそ」、およびこれらの用語の変異語は、特定の数量の大きさに関連した、本出願の提出時に利用可能な機器に基づく誤差の程度を含むことが意図されている。例えば、「約」は、所与の値の±8%または5%または2%の範囲を含み得る。
簡潔にするため、本明細書では、本発明の態様を製作および使用することに関係した従来の技術が、詳細に説明されることもあり、または詳細には説明されないこともある。特に、本明細書に記載されたさまざまな技術的特徴を実施するためのコンピュータ・システムおよび特定のコンピュータ・プログラムのさまざまな態様はよく知られている。したがって、本明細書では、簡潔にするために、よく知られたシステムもしくはプロセスまたはその両方の詳細を提供することなく、従来の多くの実施態様の詳細が簡単にしか言及されておらず、または完全に省かれている。
本発明の1つまたは複数の実施形態は、クラウド・コンピューティングを使用して実施することができる。とは言え、本開示はクラウド・コンピューティングに関する詳細な説明を含むものの、本明細書に記載された教示の実施態様はクラウド・コンピューティング環境だけに限定されないことを予め理解されたい。むしろ、本発明の実施形態は、現在知られているまたは後に開発される他の任意のタイプのコンピューティング環境に関連して実施することができる。
クラウド・コンピューティングは、最小限の管理労力またはサービスのプロバイダとの最小限のインタラクションで迅速に供給およびリリースすることができる構成可能なコンピューティング・リソース(例えばネットワーク、ネットワーク・バンド幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想機械、およびサービス)の共用プールへの便利なオンデマンド・ネットワーク・アクセスを可能にするサービス配信モデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つの展開(deployment)モデルを含むことができる。
特徴は以下のとおりである。
オンデマンド・セルフサービス:クラウド・コンシューマは、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能を、このサービスのプロバイダとのヒューマン・インタラクションを必要とすることなく必要に応じて自動的に一方向的に設定することができる。
ブロード・ネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、機能には、異種のシンまたはシック・クライアント・プラットフォーム(例えば移動電話、ラップトップ、およびPDA)による使用を促進する標準的機構を通してアクセスされる。
リソース・プーリング(resource pooling):マルチテナント・モデルを使用して多数のコンシューマにサービスを提供するために、プロバイダのコンピューティング・リソースがプールされており、要求に応じて、異なる物理および仮想リソースが動的に割当ておよび再割当てされる。コンシューマは一般に、提供されたリソースの正確な位置を制御できずまたは正確な位置を知らないが、より高次の抽象化レベル(例えば国、州、またはデータセンター)で位置を指定することができることがあるという意味で、位置独立の感覚がある。
ラピッド・エラスティシティ(rapid elasticity):機能は、素早くスケールアウトするために迅速かつ弾力的に、場合によっては自動的に割り当てることができ、素早くスケールインするために迅速にリリースすることができる。コンシューマにとって、割当てに利用可能な機能はしばしば無限であるように見え、いつでも好きな量だけ購入することができる。
メジャード・サービス(measured service):クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、バンド幅、および使用中ユーザ・アカウント)に対して適切なある抽象化レベルで計測機能に介入することによって、リソースの使用状況を自動的に制御および最適化する。リソースの使用状況を監視、制御、および報告して、利用されているサービスのプロバイダとコンシューマの両方に透明性を提供することができる。
ソフトウェア・アズ・ア・サービス(SaaS):コンシューマに提供されるこの機能は、クラウド・インフラストラクチャ上で実行しているプロバイダのアプリケーションを使用する機能である。ウェブ・ブラウザなどのシン・クライアント・インタフェース(例えばウェブ・ベースの電子メール)を通してさまざまなクライアント・デバイスからそれらのアプリケーションにアクセス可能である。場合によっては限られたユーザ固有のアプリケーション構成の設定を除けば、コンシューマは、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能さえを含む基礎をなすクラウド・インフラストラクチャを管理も制御もしない。
プラットフォーム・アズ・ア・サービス(PaaS):コンシューマに提供されるこの機能は、クラウド・インフラストラクチャ上で、プロバイダがサポートするプログラミング言語およびツールを使用して作成されたコンシューマ作成または取得のアプリケーションを展開する機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基礎をなすクラウド・インフラストラクチャを管理も制御もしないが、展開されたアプリケーションおよび場合によってはアプリケーション・ホスティング環境構成は制御することができる。
インフラストラクチャ・アズ・ア・サービス(IaaS):コンシューマに提供されるこの機能は、処理、ストレージ、ネットワーク、および他の基本的なコンピューティング・リソースを割り当てる機能であり、ここで、コンシューマは任意のソフトウェアを展開および実行することができ、これらのソフトウェアは、オペレーティング・システムおよびアプリケーションを含むことができる。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理も制御もしないが、オペレーティング・システム、ストレージ、および展開されたアプリケーションは制御することができ、場合によっては、選択されたネットワーク構成要素(例えばホスト・ファイアウォール)を限定的に制御することができる。
展開モデルは以下のとおりである。
プライベート・クラウド:このクラウド・インフラストラクチャは、組織体のためだけに運営される。インフラストラクチャは、その組織体または第三者が管理することができ、オンプレミス(on-premises)またはオフプレミス(off-premises)で存在することができる。
コミュニティ・クラウド:このクラウド・インフラストラクチャは、いくつかの組織体によって共有され、利害(例えばミッション、セキュリティ要件、ポリシー、およびコンプライアンス上の問題)を共有する特定のコミュニティをサポートする。インフラストラクチャは、その組織体または第三者が管理することができ、オンプレミスまたはオフプレミスで存在することができる。
パブリック・クラウド:このクラウド・インフラストラクチャは、一般大衆または大きな産業グループが利用可能であり、クラウド・サービスを販売している組織体によって所有される。
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、固有の実体を維持しているが、データおよびアプリケーション・ポータビリティを可能にする標準化された技術または独占技術(例えばクラウド間のロード・バランシングのためのクラウド・バースティング(cloud bursting))によって1つに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の合成体である。
クラウド・コンピューティング環境は、無国籍、低結合、モジュール性、および意味論的相互運用性(semantic interoperability)に重きを置くサービス指向の環境である。クラウド・コンピューティングの中心には、相互接続されたノードのネットワークを含むインフラストラクチャがある。
次に図1を参照すると、例示的なクラウド・コンピューティング環境50が示されている。示されているとおり、クラウド・コンピューティング環境50は1つまたは複数のクラウド・コンピューティング・ノード10を含み、クラウド・コンシューマによって使用されるローカル・コンピューティング・デバイス、例えばパーソナル・デジタル・アシスタント(PDA)もしくは移動電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または他の何らかのコンピュータ・システムもしくはデバイスあるいはこれらの組合せは、これらのノードと通信することができる。ノード10は互いに通信することができる。それらのノードは、本明細書において上で説明したように、プライベート、コミュニティ、パブリック、もしくはハイブリッド・クラウド、またはこれらの組合せなどの1つまたは複数のネットワークに、物理的にまたは仮想的にグループ分けされていることがある(図示せず)。これによって、クラウド・コンピューティング環境50は、インフラストラクチャ、プラットフォーム、もしくはソフトウェア、またはこれらの組合せをサービスとして提供することができ、そのため、クラウド・コンシューマは、ローカル・コンピューティング・デバイス上にリソースを維持する必要がない。図1に示されたタイプのコンピューティング・デバイス54A~54Cは単なる例であることが意図されていること、ならびにコンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意のタイプのネットワーク上もしくはアドレス指定可能なネットワーク接続上またはその両方で(例えばウェブ・ブラウザを使用して)、コンピュータ化された任意のタイプのデバイスと通信することができることが理解される。
次に図2を参照すると、クラウド・コンピューティング環境50によって提供される一組の機能抽象化層が示されている。図2に示されている構成要素、層、および機能は単なる例であることが意図されており、本発明の実施形態はそれらに限定されないことを予め理解しておくべきである。図示のとおり、以下の層および対応する機能が提供される。ハードウェアおよびソフトウェア層60は、ハードウェア構成要素およびソフトウェア構成要素を含む。ハードウェア構成要素の例は、メインフレーム61、RISC(縮小命令セット・コンピュータ)アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ(blade server)64、ストレージ・デバイス65、ならびにネットワークおよびネットワーキング構成要素66を含む。いくつかの実施形態では、ソフトウェア構成要素が、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。仮想化層70は抽象化層を提供し、この層から、仮想実体の以下の例を提供することができる:仮想サーバ71、仮想ストレージ72、仮想専用ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75。
一例では、管理層80が以下の機能を提供することができる。リソース供給81は、クラウド・コンピューティング環境内でタスクを実行する目的に利用されるコンピューティング・リソースおよびその他のリソースの動的調達を提供する。計量および価格決定82は、クラウド・コンピューティング環境内でリソースが利用されたときの費用追跡、およびこれらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースがアプリケーション・ソフトウェア・ライセンスを含むことがある。セキュリティは、クラウド・コンシューマおよびタスクの識別確認ならびにデータおよび他のリソースの保護を提供する。ユーザ・ポータル83は、コンシューマおよびシステム管理者に、クラウド・コンピューティング環境へのアクセスを提供する。サービス水準管理84は、必要なサービス水準が達成されるようなクラウド・コンピューティング・リソースの割振りおよび管理を提供する。サービス水準合意(Service Level Agreement)(SLA)計画および履行85は、SLAに従って将来必要になると予想されるクラウド・コンピューティング・リソースの事前調整および調達を提供する。
ワークロード層90は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロードおよび機能の例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育配信93、データ解析処理94、トランザクション処理95、ならびに高水準プログラム命令のコンパイルを実行するための学習モデル処理96を含む。
図3を参照すると、本明細書の教示を実施するために通信ネットワークを横切ってクラウド・コンピューティング環境50の1つまたは複数のノード10と通信する、一般にコンピュータ・システム100と呼ぶデータ処理システムの一実施形態が示されている。コンピュータ・システム100は、1つまたは複数の中央処理ユニット(プロセッサ)121a、121b、121cなど(これらをひとまとめにしてまたは総称してプロセッサ121と呼ぶ)を有する。1つまたは複数の実施形態では、プロセッサ121がそれぞれ、縮小命令セット・コンピュータ(reduced instruction set computer)(RISC)マイクロプロセッサを含むことができる。プロセッサ121は、システム・バス133を介してシステム・メモリ(RAM)134および他のさまざまな構成要素に結合されている。システム・バス133にはリード・オンリ・メモリ(ROM)122が結合されており、ROM122は、コンピュータ・システム100のある種の基本機能を制御する基本入出力システム(basic input/output system)(BIOS)を含むことができる。
図3はさらに、システム・バス133に結合された入力/出力(I/O)アダプタ127およびネットワーク・アダプタ126を示している。I/Oアダプタ127は、ハード・ディスク123もしくはテープ・ストレージ・ドライブ125またはその両方あるいは他の任意の同種の構成要素と通信するスモール・コンピュータ・システム・インタフェース(small computer system interface)(SCSI)アダプタとすることができる。本明細書では、I/Oアダプタ127、ハード・ディスク123、およびテープ・ストレージ・デバイス125をひとまとめにしてマス・ストレージ(mass storage)124と呼ぶ。
マス・ストレージ124に、処理システム100上で実行するオペレーティング・システム140を記憶することができる。しかしながら、オペレーティング・システム140を、コンピュータ・システム100のRAM134に記憶することもできる。本発明の実施形態によるオペレーティング・システムは例えば、UNIX(R)(TM)、Linux(R)(TM)、Microsoft(R) XP(TM)、AIX(R)(TM)、およびIBM(R)のi5/OS(TM)を含む。
ネットワーク・アダプタ126がバス133を外部ネットワーク136に相互接続して、コンピュータ・システム100が他の同様のシステムと通信することを可能にする。システム・バス133にはディスプレイ・アダプタ132によってスクリーン(例えばディスプレイ・モニタ)135が接続されており、ディスプレイ・アダプタ132は、グラフィクス集中型アプリケーション(graphics intensive application)の性能を向上させるグラフィクス・アダプタ、およびビデオ・コントローラを含むことができる。一実施形態では、アダプタ127、126、および132を、中間バス・ブリッジ(図示せず)を介してシステム・バス133に接続された1つまたは複数のI/Oバスに接続することができる。ハード・ディスク・コントローラ、ネットワーク・アダプタ、およびグラフィクス・アダプタなどの周辺デバイスを接続するための適当なI/Oバスは通常、ペリフェラル・コンポーネント・インターコネクト(Peripheral Component Interconnect)(PCI)などの一般的なプロトコルを含む。ユーザ・インタフェース・アダプタ128およびディスプレイ・アダプタ132を介してシステム・バス133に接続されたように追加の入力/出力デバイスが示されている。ユーザ・インタフェース・アダプタ128を介してバス133にキーボード129、マウス130、およびスピーカ131が相互接続されており、ユーザ・インタフェース・アダプタ128は例えば、多数のデバイス・アダプタを単一の集積回路に統合したSuper I/Oチップを含むことができる。
例示的な実施形態では、コンピュータ・システム100がグラフィクス処理ユニット141を含む。グラフィクス処理ユニット141は、ディスプレイに出力することが意図されたフレーム・バッファ内での画像の生成を加速するようメモリを操作および変更するように設計された専門電子回路(specialized electronic circuit)である。一般に、グラフィクス処理ユニット141は、コンピュータ・グラフィクスおよび画像処理の操作において非常に効率的であり、大きなデータ・ブロックの処理を並行して実行するアルゴリズムに関して、グラフィクス処理ユニット141を汎用CPUよりも効果的にする高度に並列の構造を有する。
したがって、図3の構成のとおり、コンピュータ・システム100は、プロセッサ121の形態の処理機能、RAM134およびマス・ストレージ124を含む記憶機能、キーボード129およびマウス130などの入力手段、ならびにスピーカ131およびディスプレイ135を含む出力機能を含む。一実施形態では、図3に示されたさまざまな構成要素の機能を調整するために、RAM134およびマス・ストレージ124の一部分がオペレーティング・システムを共同で記憶している。
本明細書に記載されているとおり、静的コンパイル・プログラムの場合、コンピュータ・プログラムは、結果として生成される実行可能コードが実行される前にコンパイルされる。静的コンパイル言語に関して、技術的課題は、実行時(すなわちコンピュータ・プログラムが実行されるとき)にだけ集めることができる、コンピュータ・プログラムの効率に対して重大な影響を有し得る情報を、コンピュータ・プログラムがコンパイルされるときに、コンパイラ・プログラムが持っていないことである。追加の技術的課題は、コンパイラ・プログラムが、結果として生じる実行可能コードがその上で実行される特定のデータ処理システムを知らないことがあり、したがって、実行可能コードがその上で実行するデータ処理システムのハードウェア特徴に実行可能コードを適合させることができないことである。このような技術的課題に対処するため、および実行可能コードを効率的にするために、実行可能コードを実行するために使用されるデータ処理システムが変更されたときに、コンピュータ・プログラムは、再コンパイラによって再コンパイルされる。
この手法の技術的課題は、コンピュータ・プログラムを再コンパイルするのに使用されるコンパイラも、現在使用されているデータ処理システムのハードウェア変更および他の変更を利用するために、変更されていることがあることである。さらに、COBOL言語などの使用されているプログラミング言語は、未定義の振る舞い(undefined behavior)のインスタンスを有し得る。例えば、特にCOBOLのような言語に関しては、コンパイラのあるバージョンで使用されるデータ型が、別のバージョンの同じデータ型の仕様に従わない不適格なデータ(ill-formed data)を有することが起こり得る。さらに、問題は、より古いコンパイラ・バージョンによる特定の低水準コード生成選択により、この不適格なデータに起因する観察可能な問題が偶然に隠され得る/隠蔽され得ることである。新しいコンパイラ・バージョンが、仕様が準拠されていることを前提とするコードを生成したとき、この不適格なデータに起因するこれらの問題は表面化する。
全てのビット・パターンが1つの値に対応するように2進値が使用される言語の場合、これが問題にならないこともあることに留意すべきである。例えば、COBOLで使用される一般的なデータ型は、「パック10進数」型および「ゾーン10進数」型を含む。これらの2進化10進数(Binary Coded Decimal)(BCD)型は無効符号化の範囲を有する。無効符号化に対する特定のプログラム・振る舞いは言語によって明示的に定義されず、特定の無効符号化とこの無効データに対して動作するコンパイラによって生成された正確な機械命令シーケンスとの産物である。この説明では、本発明の実施形態がCOBOL言語に関して説明される。しかしながら、本発明の実施形態は、他のプログラミング言語にも適用可能である。
COBOLの場合、データ型によるこのような未定義の振る舞いのため、より新しいコンパイラを用いてプログラムを再コンパイルすることは、大部分の言語よりもリスクが大きい。未定義の振る舞いの結果は予測不可能であり、コンパイラごとに、または同じコンパイラ内のコンパイラ最適化レベル間で異なる可能性がある。未定義の振る舞いを含むプログラムを再コンパイルすることは、より古いコンパイラによって生成された(あるいは、同じコンパイラであっても、異なる環境で実行したとき、またはコンパイラ最適化レベルもしくは任意の他のコンパイラ・オプションなどの異なるコンパイラ・オプションが使用されたときに生成された)古い実行可能コードとは異なる実行に帰着する実行可能コードを生成し得る。COBOLのような言語における可能な不適格なデータの典型的な例として、ゾーン10進数データ項目の中のそれぞれのバイトの上位4ビットが適正に初期化されないソース・コードを考える。この言語仕様によれば、これらの4つのビットは0xFであるはずであり、符号付き項目に関して、最下位バイトの4つのビットは有効符号コード0xA->0xFであるはずである。別の可能性は、パックまたはゾーン10進数データ項目の符号コードを不適正にセットすることを含む。別の潜在的な課題は、COBOLの2進数2の補数データ項目が、指定された数の10進数とともに宣言されることに起因する。したがって、宣言された数の10進数によって実際に表現することができる数よりも多くの2進ビットを含めることによって、故意にまたは偶然に、2進項目を「過密にする(over-populate)」ことが可能である。別の例は、偶数パック10進数データ項目(evenpacked decimal data item)の最上位バイトの上位4ビットをクリアしない(または偶然にセットする)ことである。偶数精密パック10進数項目(even precision packed decimal item)は、それらの全ての桁を表現するために最上位バイトの半分だけを必要とし、そのため、このバイトの上位4ビットは、言語仕様に従ってゼロにセットされると仮定される。さまざまな他の例が可能である。
このような技術的課題に対処するため、本明細書ではバイナリ・オプティマイザと呼ぶ2進2進最適化ツール(binary to binary optimization tool)が使用される。このツールはバイナリ・トランスレータと呼ばれることもある。バイナリ・オプティマイザは、(古いバージョン/より古い最適化レベルを有する)コンパイルされた実行可能コードの中の古いバイナリ・モジュールを別の形態に変換し、その形態のバイナリ・モジュールを、異なる(例えばより新しい)コンパイラ技術を使用して最適化する。このケースでは、「変換」が、バイナリ・コードをソース・コードに戻すことを指していないことに留意すべきである。そうではなしに、バイナリ・トランスレータまたはバイナリ・オプティマイザは、元のバイナリ・コードをプログラムの中間言語(IL)表現に変換するため、したがって、新しい最適化およびコンパイル技術を使用して最適化し、次いで新しいバイナリ・モジュールを生成するために、(より古いバージョンもしくはより低い最適化レベルまたはその両方による)元のバイナリ・コードを分解および分析する。バイナリ・オプティマイザは、コンパイルされたバイナリ実行可能コードを入力として使用するため、未定義の振る舞いの場合であっても、最適化されたバージョンが同じ振る舞いを有することが仮定されている。しかしながら、この手法は、より古いバージョンのコンパイラに限定される。より新しいバージョンのコンパイラは、よりアグレッシブな最適化を使用し、バイナリ・コードを分析することを極端に難しくする。
例えば、高水準コンストラクトの専門インライン展開の生成を考える。「高水準コンストラクト」は、IBM(R)z/Architecture(R)命令セットなどの高水準言語または機械言語における文(statement)または命令(instruction)であって、その実行可能表現が複数の低水準機械命令の複雑なコード・シーケンスとなるであろう十分に複雑な文または命令である。高水準コンストラクトの例は、COBOL言語のINSPECT、およびIBM(R)z/Architecture(R)命令セットのED、EDMKである。いくつかのケースでは、より新しいバージョンのCOBOLコンパイラが、実行時ライブラリ呼出しまたはより低速の命令シーケンスを用いるより一般的だが効率に劣るやり方で処理する代わりに、高水準コンストラクトを表現するために、専門コード・シーケンスを生成する。例えば、COBOLにおいて、「INSPECT」文は、ストリングを探索および変形することができる。より初期のバージョンのCOBOLでは普通、COBOL実行時ルーチンにコールアウトすることによって、非自明な(non-trivial)INSPECT文が実行された。より新しいバージョンでは、バイナリ実行可能コード自体の中でインラインのより高速な実施態様が生成される。INSPECTの全ての可能なバージョンを処理しなければならなかった実行時ルーチンとは違い、実行しなければならない特定のバージョンに対してインライン・コピーを専門化することができる。同様に、専門コード・シーケンスを用いることによって、以前に使用された一般的なハードウェア命令EDおよびEDMKを用いるよりも高速に、数値編集型から数値データ型への変換を実行することができる。EDおよびEDMK命令は入力としてパターンをとり、可能な任意のパターンを処理しなければならない。実行可能コードで使用される特定のパターンに対して専門化されたシーケンスを生成する方が高速である。IBM(R)およびz/Architectureは、世界中の多くの法域で登録されたインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。
より新しい、より効率的なコンパイラによるコンパイル中、プログラムをコンパイラ最適化している間は通常、高水準コンストラクトに対応するこのような演算は高水準で表現されており、低水準専門シーケンスに変換されるのはコード生成中だけである。このことは、コンパイラ最適化が、高水準コンストラクトの意味論に関する情報を利用することを可能にする。
これらの高水準コンストラクトに対して生成されるコード・シーケンスは、高水準コンストラクトの詳細によって大幅に変化し得る。このようなコード・シーケンスの範囲および目的を、コンパイルされたバイナリ・コードだけに基づいて識別することは、極端に難しい技術的課題である。現状技術のバイナリ・オプティマイザの能力は、対応するIL表現を回復することだけに限定される。このようなバイナリ・オプティマイザは、より古いバージョンのコンパイラによってコンパイルされたコードを変換することができ、第1の実行可能コードはIL表現に簡単に変換することができ、このコンパイラは活発な開発下にない。そのような場合、高水準コンストラクトのIL表現は容易に決定でき、変化を受けないため、このバイナリ・オプティマイザは高水準コンストラクトを最適化することができる。しかし、開発下のコンパイラ、したがって新しいコンパイラ最適化技術を使用するコンパイラに関してはそうではない。その結果、(INSPECTまたは数値編集のような既存の高水準コンストラクトに対するものであっても)より多くのタイプのまたは異なるタイプのこれらのシーケンスが生成され得る。
本発明の1つまたは複数の実施形態は、このような技術的課題を解決し、より新しいバージョンのコンパイラによってコンパイルされたコードを、本発明の1つまたは複数の実施形態によるバイナリ・オプティマイザによって最適化することを容易にする。このことは、そのバイナリ・オプティマイザが、新しい、より効率的なコード・シーケンスを生成することを可能にする。これは、新規のコード・シーケンスを生成するためにコンパイラが変更されるたびにバイナリ・オプティマイザを変更することを必要とすることなく実行され、バイナリ・オプティマイザが既存の振る舞いを維持することを容易にする。
図4は、本発明の1つまたは複数の実施形態による、最適化システムのブロック図を示している。本明細書で使用されるとき、「コンピュータ・プログラムをコンパイルすること」は、ソース言語で書かれたコンピュータ・プログラムから、バイナリ実行可能コード、すなわちプロセッサが実行することができる機械命令を生成することを含む。さらに、本明細書で使用されるとき、「実行可能コードを最適化すること」は、新たなバイナリ実行可能コードを生成することにより、コンピュータ・プログラムを、バイナリ実行可能コードから最適化することを指す。新たなバイナリ実行可能コードを生成することは、最初のバイナリ実行可能コードをIL表現に変換することを含む。本明細書で使用されるとき、ILは、プログラムを表現することができる任意の言語であることができることに留意すべきである。例えば、ILは、内部言語(internal language)であることができ、コンピュータ・プログラムのソース言語であることができ、内部アノテーション(internal annotation)を有するソース言語であることができ、別のバイナリ言語であることができ、または他の任意のタイプの表現であることができる。これらは全て、第1の実行可能コードと第2の実行可能コードとの間の中間にあるものの例であり、第2の実行可能コードは第1の実行可能コードを最適化したものである。
図示のシナリオでは、第1のバイナリ実行可能コード430を生成するために、コンピュータ・プログラム410がコンパイラ420によってコンパイルされる。コンピュータ・プログラム410は、1つまたは複数の高水準コンストラクト412を含むことができる。1つのコンストラクト412だけが示されているが、プログラム410は、1つまたは複数のコンストラクト412を含むことができることが理解される。
コードを最適化するとき、例えば新しいハードウェアに対してコードを最適化するときには、バイナリ・オプティマイザ440が使用される。バイナリ・オプティマイザ440は実行可能コード430の変換を実行することができ、さらに、第2の実行可能コード470を生成するための最適化および最終コード生成を実行することができる。1つまたは複数の例では、最終コード生成(またはそれよりも低いレベルの追加の最適化)のために第2のコンパイラ(図示せず)に渡される、第1の実行可能コード430のIL(またはさらにソース)表現を生成するなど、他の可能性に対してバイナリ・オプティマイザ440を使用することができることに留意すべきである。例えば、第2のコンパイラはコンパイラ420よりも新しいコンパイラである。あるいは、第2のコンパイラは、使用される最適化レベルなど異なる設定を使用する、コンパイラ420のインスタンスである。
バイナリ・オプティマイザ440は、第1の実行可能コード430を入力として受け取り、実行可能コード430を変換して、コンピュータ・プログラムのIL表現450を出力する。バイナリ・オプティマイザ440は次いで、コンピュータ・プログラムのIL表現450を最適化して、第2のバイナリ実行可能コード470を生成する。すなわち、コンパイラ420は、後にさらに説明する追加のコンパイル時情報を含むことができる第1の実行可能コード430を生成し、バイナリ・オプティマイザ440は、第1の実行可能コード430およびコンパイル時情報を消費する。コンパイラ420によって格納される任意のコンパイル時情報は、最適化された第2の実行可能コード470を生成する最適化のための情報である。
上述のとおり、コンパイラ420のさまざまなバージョン、特に、より新しいコンパイラ技術によって、第1のバイナリ実行可能コード430を分析することは技術的に難しい。これは、このような分析を移動目標(moving target)とし得る実行時指示文(runtime directive)に起因する。現在の現状技術のバイナリ・オプティマイザは、バイナリ実行可能コード430をIL表現450に変換することができず、その結果として、コンパイラ420が通常生成する高水準コンストラクト412の実行可能表現から、高水準コンストラクト412を変換することができない。
この技術的課題を解決するため、およびこのようなコンパイラ(例えばより新しいコンパイラ)を用いてコンパイルされたプログラムに対してバイナリ・オプティマイザ440を使用することを可能にするために、本発明の1つまたは複数の実施形態は、上述のとおり、コンパイルされたバイナリ実行可能コード430に追加のコンパイル時情報を含めることを容易にする。この追加情報を使用して、プログラム410の意味に関する情報を伝達することができる。
本発明の1つまたは複数の実施形態では、バイナリ・オプティマイザ440が、コンストラクト412を、プログラムのIL表現450に含めるコンストラクト412のIL表現に変換すること、高水準コンストラクトのIL表現を最適化すること、および高水準コンストラクトを第2の実行可能コード470に潜在的に含めるための新しい命令シーケンスを生成することを可能にするために、コンパイラ420が、第1の実行可能コード430に、プログラム410の中のそれぞれの高水準コンストラクト412に関するコンパイル時情報を含める。
この最適化により、いくつかの入力上で、新たに最適化された命令が、古い命令と同じ振る舞いを持たないことが起こり得る。これに対処するため、本発明の1つまたは複数の実施形態は、テスト・ベクタ、すなわち自動的に生成された一組の入力を使用して、高水準コンストラクトに対して生成された新しい命令シーケンスと古い命令シーケンスとの振る舞いを比較する。これらの2つのシーケンスが、テスト・ベクタの中の全ての入力に対して同じ出力を与える場合、高水準コンストラクトに対する新しい命令を第2の実行可能コード470に含めることは安全であると見なされる。さらに、最適化中に、新しい命令シーケンスの振る舞いが古いシーケンスと比較されるため、高水準コンストラクトに対する最適化されたコード470は、バグまで含めた互換性(bug-for-bug compatibility)を維持する。
図5は、本発明の1つまたは複数の実施形態による、テスト・ベクタを使用して高水準コンストラクトの最適化を自動的に検証する方法の流れ図を示している。この方法は、510で、コンパイラ420を使用してプログラム410をコンパイルすることを含む。このコンパイルは、512で、プログラム410の中の高水準コンストラクト412のそれぞれのインライン展開に関するコンパイル時情報をエミットする(emit)ことを含む。この情報は、展開中の高水準コンストラクト412の識別子、例えば「edit-and-mark」または「inspect tallying」を含む。この情報はさらに、第1の実行可能コード430内における、インライン展開によって生成された一組の命令の位置を含む。コンパイラ420によって実行された、命令スケジューリングなどの最適化のため、これらの命令は、連続した範囲を形成していないことがある。
コンパイル時情報はさらに、高水準コンストラクト412への入力ごとに、その入力がどこにあるのかに関する情報を含む。例えば、edit-and-mark演算に入力される値がレジスタ内またはメモリ内にあることがある。コンパイル時情報はさらに、高水準コンストラクトの出力ごとに、その出力が、レジスタ内またはメモリ内など、どこに置かれるのかに関する情報を含む。入力が読み出される/出力が書き込まれるメモリもしくはレジスタまたはその両方はそれぞれ、メモリ・アドレスまたはレジスタ・アドレスを使用して識別される。この情報は、実行可能バイナリ・コード430に格納される。
520で、コンパイラ420を使用して第1の実行可能コード430が生成され、このコードは、バイナリ・オプティマイザ440を使用してこのコードが最適化されると決められるまで、実行に使用することができる。このコードが最適化されると決められるのは、例えば、より新しいバイナリ・オプティマイザまたはより新しいハードウェアが使用可能になったときである。しかしながら、他のいくつかの理由でこの最適化を実行することもできる。530で、バイナリ・オプティマイザ440が、第1の実行可能コード430を、プログラムのIL表現450に変換する。この変換中に、532で、バイナリ・オプティマイザ440は、実行可能バイナリ・コード430に格納された、エミットされたコンパイル時情報を使用して、高水準コンストラクト412を、そのIL表現として生成する。
IL表現450の中に、高水準コンストラクト412に対して生成された機械命令は明示的に表現されていない。バイナリ・オプティマイザ440の省略時動作は通常、元の全ての入力機械命令を、それを最適化するために、IL表現450の中の対応する構造体として表現することである。しかしながら、本明細書で論じられている(inspectおよび数値編集のような)より高水準のコンストラクトに関しては、高水準コンストラクトのIL表現450を生成するこのやり方は避けるべきである。このように表現することは、バイナリ・オプティマイザ440が、これらの入力命令の1つの範囲にわたって実行されている全体的なより高水準の演算を決定することを非常に難しくし、または不可能にし得る。したがって、入力命令の1つの範囲にわたるこのようなより高水準の演算に関する情報がバイナリ・コード430の中に存在するとき、バイナリ・オプティマイザ440は、実行されているより高水準の演算をカプセル化するために、同様に高水準のIL表現を選択する。
さらに、540で、プログラム410の最適化のため、バイナリ・オプティマイザ440は、高水準コンストラクト412のIL表現450から、高水準コンストラクト412に対する最適化された新しい命令を生成するために使用される。これらの新しい命令は、コンパイラ420によって生成された命令と比較される。
この時点で、第1のバイナリ実行可能コード430の中のコンパイル時情報およびステップ540の完了によって得られた情報に基づいて、高水準コンストラクト412ごとに以下の情報が使用可能である。コンパイル時情報は、高水準コンストラクト412の識別、コンパイラ420によって生成された、高水準コンストラクト412に対する古い命令の位置、ならびにコンパイラ420によるそれらの古い命令に対する入力および出力の位置を含み、ステップ540の完了によって得られた情報は、バイナリ・オプティマイザ440によって生成された、高水準コンストラクト412に対する新しい命令、ならびにバイナリ・オプティマイザ440によるそれらの新しい命令に対する入力および出力の位置を含む。
この方法はさらに、550で、コンパイル時情報を使用して、高水準コンストラクト412ごとに、2つのラッパ関数、すなわちF_newおよびF_oldを生成することを含む。「F_new」および「F_old」は例示的な名称であること、ならびに他の例では他の名称/識別を使用することができることが理解される。これらのラッパ関数を生成することは、552で、入力および出力パラメータ、ならびにラッパ関数の一部である命令を構成することを含む。これらの関数への入力は高水準コンストラクト412への入力である。これらの関数の戻り値は高水準コンストラクト412の出力である。内部的には、それぞれの関数は、F_oldに関しては古い命令の、F_newに関しては新しい命令のコピーとして実装され、古い命令は、コンパイラ420による命令であり、新しい命令は、バイナリ・オプティマイザ440による命令である。
さらに、560で、高水準コンストラクト412の型ごとに、テスト・ベクタを生成するための手順が定義される。テスト・ベクタは、コンパイラ420およびバイナリ・オプティマイザ440によって生成されたコード・シーケンスの振る舞いを比較するテストのリストである。テスト・ベクタは、高水準コンストラクトへの有効入力(valid input)と無効入力(invalid input)の両方を含む。任意選択で、バイナリ・オプティマイザ440が、(以前の演算を調べることによって)その無効入力がこの点に到達することができないと規定した場合には、ある種の無効入力を省略するように、テスト・ベクタに制約を課すことができる。テスト・ベクタは、高水準コンストラクト512の型に基づく所定の一組のテストを含むことができ、ここで、高水準コンストラクト412の型は、コンパイル時情報からの識別に基づいて決定される。
570で、テスト・ベクタの中のテストごとに、F_newおよびF_oldラッパ関数が実行され、対応する出力が収集される。580で、高水準コンストラクト412に対してどの命令を第2の実行可能コード470に含めるのかを決定するために、2つのラッパ関数からの出力が比較される。本発明の1つまたは複数の実施形態によれば、出力を収集するために、F_newおよびF_oldの実行が例外ハンドラでラップされる。ラッパ関数への無効入力はハードウェア例外を引き起こし得る。古い命令と新しい命令が同じハードウェア例外を引き起こす限り、このことは許容され得る。テスト・ベクタは、古い命令と新しい命令との振る舞いが実質的に同一であることを保証するために使用される。
高水準コンストラクト412に対するテストの出力の比較に基づいて、その高水準コンストラクト412に対してどの命令を第2の実行可能コード470に含めるのかが決定される。さらに、この方法では、これらの出力が一致しない場合、たとえテスト・ベクタからの単一の出力が一致しない場合であっても、580で、第2のバイナリ実行可能コード470に含める、高水準コンストラクト412に対する命令が決定される。新しい命令と古い命令とが同じ出力を提供しない場合にはいくつかの選択肢がある。これらの選択肢のうちのどの1つの選択肢をこれらの選択肢から選択するのかは、後にさらに説明するようにいくつかの因子に基づく。この選択に基づくそれぞれの高水準コンストラクトに対する命令の振る舞いが、第1の実行可能プログラム430の中の高水準コンストラクトに対する対応する命令と一致した後、590で、バイナリ・オプティマイザ440は、選択されたそれぞれの高水準コンストラクトに対する対応する命令を含む第2の実行可能プログラム470を生成およびエミットする。
図6は、本発明の1つまたは複数の実施形態による、高水準コンストラクト412に対するどの命令を第2の実行可能プログラム470に含めるのかを決定するための方法の流れ図を示している。610で、テスト・ベクタの中の全ての入力に関してF_newとF_oldとが同じ出力を与える場合、620で、第2のバイナリ実行可能プログラム470に新しい命令が含められる。
本発明の1つまたは複数の実施形態では、高水準コンストラクト412に対する新しい命令が古い命令の振る舞いと一致しない場合、630で、ユーザは、第2の実行可能プログラム470にどの命令を含めるのかを選択するよう促され得る。本発明の1つまたは複数の実施形態によれば、このようなケースが生じた場合に第2の実行可能プログラム470にどの命令を含めるのかを選択するための選択肢が、オプティマイザ440に対して、オプティマイザ440が実行される前に設定される。その代わりに、またはそれに加えて、本発明の1つまたは複数の実施形態では、それに対してそのテストが結果として生じる高水準コンストラクト412に対する新しい命令が一致しない場合、630で、コンパイラ420からの元の命令が第2の実行可能コードにエミットされる。これを、630で、実行される選択の省略時動作とすることができる。1つまたは複数の例では、振る舞いが一致することを保証するために、テスト・ベクタからのテストが再び実行される。
その代わりに、またはそれに加えて、この選択が、新しい命令による性能向上(performancegain)に基づいて容易にされる。例えば、高水準コンストラクト412の新しいコード・シーケンスによる予想される性能向上が、古いコード・シーケンスの性能向上に比べて十分に大きい場合、ユーザは、よりアグレッシブな選択肢を選択することができる。ここで、十分に大きな性能向上は、実行時間、コンピュータ・リソース使用量、または任意の他の指標(metric)に基づいて決定することができる。古いコードと新しいコードとのこのような指標の比較が、少なくとも所定のしきい値向上に帰結する場合、新しいコードは十分に大きな性能向上を有すると見なすことができる。例えば、実行時間に関して、実行時間が、少なくとも10%、25%、50%だけ、または任意の他の同様の比率(もしくは他のタイプのしきい値)だけ向上する場合、新しいコードは十分に大きな性能向上を有すると見なすことができ、ユーザは、(たとえそれが異なる振る舞いを有するとしても)新しいコードを選択することができる。
その代わりに、またはそれに加えて、新しいコード・シーケンスが、(あるタイプの)無効データに関して異なる結果を与えるだけであり、(それらのタイプの)無効データを検出するための実行時テストのコストが、新しいコード・シーケンスによる性能向上よりも小さい場合、バイナリ・オプティマイザ440は、古いコード・シーケンスと新しいコード・シーケンスの両方を含む新たな(第3の)バイナリ実行可能コードであって、この実行時テストによって監視された(guarded)新たな(第3の)バイナリ実行可能コードを生成することができる。このテストに合格した場合には新しいコード・シーケンスが使用される。このテストに合格しなかった場合には古いコード・シーケンスが使用される。これは、全体的な性能向上を提供し、その一方で同一の結果を依然として保証する。
さらに、本発明の1つまたは複数の実施形態では、テスト・ベクタを使用する代わりに、ブール充足可能性(SAT)ソルバまたは他の同様のツールを使用して、高水準コンストラクト412に対する新しいコードとその高水準コンストラクト412に対する古いコードとの一致が判定される。この一致テストは、バイナリ・オプティマイザ440による最適化の一部として実行されるため、およびSATソルバはかなりの時間を要し得るため、バイナリ・オプティマイザ440を使用したこの最適化は、上述のようにテスト・ベクタの使用に比べて要する時間が長すぎると考えられ得る。
その上さらに、1つまたは複数の例では、何らかの理由で第1の実行可能コード430の中にコンパイル時情報が存在しない場合に、(第1の実行可能コード430をソース・コードに逆に変換する真のデコンパイラ(図示せず)などの)別のツールまたはバイナリ・オプティマイザ440が、より高水準の演算を分析および発見し、次いで、本明細書に記載されたテスト・ベクタ手法を続けることができる。
それに応じて、本発明の1つまたは複数の実施形態は、COBOLなどの言語に対する静的コンパイル・コードの最適化を向上させる実用的なアプリケーションを提供する。それに応じて、本発明の1つまたは複数の実施形態は、コンピューティング技術、特にコンパイラおよびオプティマイザの改良を提供する。本発明の1つまたは複数の実施形態は、テスト・ベクタを使用して高水準コンストラクトの最適化の検証を容易にする。
例えば、この検証は、スマート・バイナリ対応コンパイラ(smart-binary-enabled compiler)を使用してプログラムをコンパイルすることを含む。「スマート・バイナリ対応」コンパイラは、展開中の高水準コンストラクトを含むそれぞれのインライン展開に関する情報を、生成中のバイナリ・コードにエミットおよび格納する。格納された情報は、インライン展開によって生成された一組の命令の識別を含む。この情報はさらに、高水準コンストラクトへの入力ごとに、入力する1つまたは複数の入力パラメータがどこに位置するのかに関する情報を含む。例えば、入力パラメータの位置を、メモリ内の位置アドレス、ファイル内の位置、または任意の他の同様の指示として提供することができる。この情報はさらに、高水準コンストラクトの出力ごとに、出力がどこに置かれるのかに関する情報を含む。例えば、出力の位置を、1つまたは複数の出力パラメータが格納される、メモリ内の位置アドレス、ファイル内の位置、または任意の他の同様の指示として提供することができる。
生成されたコード(古い命令)を含むプログラムを(バイナリ・オプティマイザなどの)オプティマイザによって最適化することは、生成された(バイナリ)コードをIL表現に変換することを含む。生成されたコードは、プログラムのソース・コードの中で使用される高水準コンストラクトに対する1つまたは複数の命令を含み得る。さらに、プログラムが最適化されたことに応答して、別のバイナリ実行可能コード(新しい命令)が生成され、このコードは、高水準コンストラクトに対する改訂された一組の命令を含むことができる。1つまたは複数の例では、コンパイル時情報が、高水準コンストラクトの識別、古い命令の位置、古い命令に対する入力および出力の位置を含む。
この検証はさらに、コンピュータによって、高水準コンストラクトごとに、ラッパ関数F_newおよびF_oldを生成することを含み、これらの関数への入力は高水準コンストラクトへの入力であり、これらの関数の戻り値は高水準コンストラクトの出力である。本発明の1つまたは複数の実施形態では、古い命令と新しい命令との振る舞いを比較するように設計されたテストのリストを含むテスト・ベクタを生成するための手順が生成され、このテスト・ベクタは有効入力および無効入力を含む。F_new関数およびF_old関数はそれぞれ、テスト・ベクタの中のそれぞれのテストに対して、それぞれの出力を収集するために実行され、テストすることは、プログラムの最適化の一部として実行される。F_new関数とF_old関数とが、テスト・ベクタの中の全ての入力に対して同じ出力を与えるとコンピュータが判定してことに応答して、最適化されたプログラムの中の新しい命令の使用は安全である(すなわち古い振る舞いと一致する)との指示が提供される。F_new関数とF_old関数とが、テスト・ベクタの中の全ての入力に対して同じ出力を与えるわけではないとコンピュータが判定したことに応答して、コンピュータは、一組の所定の選択肢からの選択を容易にすることができる。
本発明は、システム、方法、もしくはコンピュータ・プログラム製品、またはこれらの組合せであることがある。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体を含むことがある。
このコンピュータ可読ストレージ媒体は、命令実行デバイスが使用するための命令を保持および記憶することができる有形のデバイス(tangible device)とすることができる。このコンピュータ可読ストレージ媒体は例えば、限定はされないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適当な組合せとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能なプログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、機械的にコード化されたデバイス、例えばパンチカードまたはその上に命令が記録された溝の中の一段高くなった構造体、およびこれらの任意の適当な組合せを含む。本明細書で使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が一過性の信号、例えば電波もしくは他の自由に伝搬する電磁波、ウェーブガイドもしくは他の伝送体内を伝搬する電磁波(例えば光ファイバ・ケーブル内を通る光パルス)、または電線を通して伝送される電気信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスにダウンロードすることができ、またはネットワークを介して、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはこれらの組合せを介して外部コンピュータもしくは外部ストレージ・デバイスにダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはこれらの組合せを含むことができる。それぞれのコンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インタフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に記憶するために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、もしくは状態設定データであってもよく、またはSmalltalk(R)、またはC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同種のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードのいずれかであってもよい。このコンピュータ可読プログラム命令は、全体がユーザのコンピュータ上で実行されてもよく、一部がユーザのコンピュータ上で実行されてもよく、独立型ソフトウェア・パッケージとして実行されてもよく、一部がユーザのコンピュータ上で、一部がリモート・コンピュータ上で実行されてもよく、または全体がリモート・コンピュータもしくはリモート・サーバ上で実行されてもよい。上記の最後のシナリオでは、リモート・コンピュータが、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、またはこの接続が、外部コンピュータに対して(例えばインターネット・サービス・プロバイダを使用してインターネットを介して)実施されてもよい。いくつかの実施形態では、本発明の態様を実施するために、例えばプログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラム可能論理アレイ(PLA)を含む電子回路が、このコンピュータ可読プログラム命令の状態情報を利用してその電子回路をパーソナライズすることにより、このコンピュータ可読プログラム命令を実行してもよい。
本明細書では、本発明の態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方の図を参照して説明される。それらの流れ図もしくはブロック図またはその両方の図のそれぞれのブロック、およびそれらの流れ図もしくはブロック図またはその両方の図のブロックの組合せは、コンピュータ可読プログラム命令によって実施することができることが理解される。
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行される命令が、流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/動作を実施する手段を生成するような態様で、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はさらに、命令が記憶されたコンピュータ可読ストレージ媒体が、流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/動作の態様を実施する命令を含む製品を含むような態様で、コンピュータ可読ストレージ媒体に記憶され、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイス、またはこれらの組合せに特定の方式で機能するように指示することができるものであってもよい。
これらのコンピュータ可読プログラム命令はさらに、コンピュータ、他のプログラム可能装置、または他のデバイス上で実施される命令が、流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/動作を実施するような態様で、コンピュータによって実施されるプロセスを生み出すために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
添付図中の流れ図およびブロック図は、本発明のさまざまな実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能、および動作を示す。この点に関して、それらの流れ図またはブロック図のそれぞれのブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または部分を表すことがある。いくつかの代替実施態様では、ブロックに示された機能を、図に示された順序とは異なる順序で実行することができる。例えば、連続して示された2つのブロックが、実際は、実質的に同時に実行されることがあり、または、含まれる機能によってはそれらのブロックが逆の順序で実行されることもある。それらのブロック図もしくは流れ図またはその両方の図のそれぞれのブロック、ならびにそれらのブロック図もしくは流れ図またはその両方の図のブロックの組合せを、指定された機能もしくは動作を実行しまたは専用ハードウェアとコンピュータ命令との組合せを実施するハードウェアベースの専用システムによって実施することができることにも留意すべきである。
本発明のさまざまな実施形態の説明は例示のために示したものであり、それらの説明が網羅的であること、または開示された実施形態に限定されることは意図されていない。当業者には、記載された実施形態の範囲および思想を逸脱しない多くの変更および変形が明らかとなろう。本明細書で使用されている用語は、実施形態の原理、実際的用途、もしくは市場に出ている技術には見られない技術的改良を最もうまく説明するように、または本明細書に開示された実施形態を他の当業者が理解することができるように選択した。

Claims (28)

  1. 高水準コンストラクトの最適化の自動検証のためのコンピュータ実施方法であって、
    前記方法が、
    コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成すること
    を含み、前記コンピュータ・プログラムが高水準コンストラクトを含み、
    前記コンパイルすることが、
    前記高水準コンストラクトに対する第1の一組の機械命令を生成すること、および
    前記第1の実行可能コードに、前記高水準コンストラクトに対するコンパイル時情報を格納すること
    を含み、
    前記方法がさらに、
    バイナリ・オプティマイザによって、前記第1の実行可能コードを最適化すること
    を含み、
    前記最適化することが、
    前記第1の実行可能コードを、前記コンピュータ・プログラムの中間言語(IL)表現に変換すること
    を含み、前記IL表現が、前記コンパイル時情報に基づく、前記高水準コンストラクトに対応する一組のIL命令を含み、
    前記最適化することがさらに、
    前記コンピュータ・プログラムの前記IL表現に基づいて第2の実行可能コードを生成すること
    を含み、
    前記第2の実行可能コードを生成することが、
    前記高水準コンストラクトの前記IL表現に基づいて、前記高水準コンストラクトに対する第2の一組の機械命令を生成すること、
    前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致するとの判定に基づいて、前記第2の実行可能コードに前記第2の一組の機械命令を含めること、および
    前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、前記第2の実行可能コードに前記第1の一組の機械命令を含めること
    を含む、
    コンピュータ実施方法。
  2. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致するとの前記判定が充足可能性ソルバに基づく、
    請求項1に記載のコンピュータ実施方法。
  3. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致すると判定することが、
    複数のテストを含むテスト・ベクタを生成すること、
    前記テスト・ベクタの中のそれぞれのテストを、前記高水準コンストラクトに関連する前記第1の一組の機械命令および前記第2の一組の機械命令に対して実行すること、ならびに
    前記テスト・ベクタの中の前記それぞれのテストの出力を比較すること
    を含み、
    前記第1の一組の機械命令と前記第2の一組の機械命令とに関してそれぞれの前記出力が一致することに基づいて、前記振る舞いは一致すると判定される、
    請求項1または2に記載のコンピュータ実施方法。
  4. 前記テスト・ベクタの中のテストを実行することが、
    前記第1の一組の機械命令に対する第1のラッパ関数を生成すること、
    実行する前記テストに応じた入力を用いて前記第1のラッパ関数を実行し、第1の一組の出力を収集すること、
    前記第2の一組の機械命令に対する第2のラッパ関数を生成すること、および
    実行する前記テストに応じた前記入力を用いて前記第2のラッパ関数を実行し、第2の一組の出力を収集すること
    を含む、
    請求項3に記載のコンピュータ実施方法。
  5. 前記第1のラッパ関数が第1の例外ハンドラでエンクローズされており、前記第2のラッパ関数が第2の例外ハンドラでエンクローズされている、
    請求項4に記載のコンピュータ実施方法。
  6. テストの第1の出力が前記第1の一組の機械命令に対する例外であること、および前記テストの第2の出力が前記第2の一組の機械命令に対する前記例外であることに基づいて、前記振る舞いは一致すると判定される、
    請求項3ないし5のいずれかに記載のコンピュータ実施方法。
  7. 前記コンパイル時情報が、前記高水準コンストラクトの識別、前記第1の一組の機械命令の位置、前記第1の一組の機械命令に対する入力および出力の位置を含む、
    請求項1ないし6のいずれかに記載のコンピュータ実施方法。
  8. 前記コンパイラが、コンパイラの第1のインスタンスであり、前記コンパイラの前記第1のインスタンスの設定とは異なる設定を有する前記コンパイラの第2のインスタンスが、前記第2の実行可能コードを生成する目的に使用される、
    請求項1ないし7のいずれかに記載のコンピュータ実施方法。
  9. 前記方法がさらに、一組の入力について、前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、
    前記第1の一組の機械命令と、前記第2の一組の機械命令と、前記高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、前記入力が所定の一組の入力からのものであることに応答して前記第1の一組の機械命令を実行させ、そうでないことに応答して前記第2の一組の機械命令を実行させる、前記第3の実行可能コードを生成すること
    を含む、
    請求項1ないし8のいずれかに記載のコンピュータ実施方法。
  10. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致すると判定することが、
    複数のテストを含むテスト・ベクタを生成すること、
    前記テスト・ベクタの中のそれぞれのテストを、前記高水準コンストラクトに関連する前記第1の一組の機械命令および前記第2の一組の機械命令に対して実行すること、ならびに
    前記テスト・ベクタの中の前記それぞれのテストの出力を比較すること
    を含み、
    前記第1の一組の機械命令と前記第2の一組の機械命令とに関してそれぞれの前記出力が一致することに基づいて、前記振る舞いは一致すると判定される、
    請求項9に記載の方法。
  11. 前記テスト・ベクタの中のテストを実行することが、
    前記第1の一組の機械命令に対する第1のラッパ関数を生成すること、
    実行する前記テストに応じた入力を用いて前記第1のラッパ関数を実行し、第1の一組の出力を収集すること、
    前記第2の一組の機械命令に対する第2のラッパ関数を生成すること、および
    実行する前記テストに応じた前記入力を用いて前記第2のラッパ関数を実行し、第2の一組の出力を収集すること
    を含む、
    請求項10に記載のコンピュータ実施方法。
  12. システムであって、
    メモリと、
    前記メモリに結合されたプロセッサと
    を備え、前記プロセッサが、高水準コンストラクトの最適化の自動検証のための方法を実行するように構成されており、
    前記方法が、
    コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成すること
    を含み、前記コンピュータ・プログラムが高水準コンストラクトを含み、
    前記コンパイルすることが、
    前記高水準コンストラクトに対する第1の一組の機械命令を生成すること、および
    前記第1の実行可能コードに、前記高水準コンストラクトに対するコンパイル時情報を格納すること
    を含み、
    前記方法がさらに、
    バイナリ・オプティマイザによって、前記第1の実行可能コードを最適化すること
    を含み、
    前記最適化することが、
    前記第1の実行可能コードを中間言語(IL)表現に変換すること
    を含み、前記IL表現が、前記コンパイル時情報に基づく、前記高水準コンストラクトに対応する一組のIL命令を含み、
    前記最適化することがさらに、
    前記IL表現に基づいて第2の実行可能コードを生成すること
    を含み、前記第2の実行可能コードが、前記高水準コンストラクトに対する第2の一組の機械命令を含み、
    前記最適化することがさらに、
    前記バイナリ・オプティマイザによって、前記第1の一組の機械命令と前記第2の一組の機械命令とを比較すること、および
    前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致するとの判定に基づいて、前記第1の実行可能コードを前記第2の実行可能コードに置き換えること
    を含む、
    システム。
  13. 前記第1の一組の機械命令と前記第2の一組の機械命令との前記振る舞いが一致するとの前記判定が充足可能性ソルバに基づく、
    請求項12に記載のシステム。
  14. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致すると判定することが、
    複数のテストを含むテスト・ベクタを生成すること、
    前記テスト・ベクタの中のそれぞれのテストを、前記高水準コンストラクトに関連する前記第1の一組の機械命令および前記第2の一組の機械命令に対して実行すること、ならびに
    前記テスト・ベクタの中の前記それぞれのテストの出力を比較すること
    を含み、
    前記第1の一組の機械命令と前記第2の一組の機械命令とに関してそれぞれの前記出力が一致することに基づいて、前記振る舞いは一致すると判定される、
    請求項12または13に記載のシステム。
  15. 前記テスト・ベクタの中のテストを実行することが、
    前記第1の一組の機械命令に対する第1のラッパ関数を生成すること、
    実行する前記テストに応じた入力を用いて前記第1のラッパ関数を実行し、第1の一組の出力を収集すること、
    前記第2の一組の機械命令に対する第2のラッパ関数を生成すること、および
    実行する前記テストに応じた前記入力を用いて前記第2のラッパ関数を実行し、第2の一組の出力を収集すること
    を含む、
    請求項14に記載のシステム。
  16. 前記第1のラッパ関数が第1の例外ハンドラでエンクローズされており、前記第2のラッパ関数が第2の例外ハンドラでエンクローズされている、
    請求項15に記載のシステム。
  17. テストの第1の出力が前記第1の一組の機械命令に対する例外であること、および前記テストの第2の出力が前記第2の一組の機械命令に対する前記例外であることに基づいて、前記振る舞いは一致すると判定される、
    請求項14ないし16のいずれかに記載のシステム。
  18. 前記コンパイル時情報が、前記高水準コンストラクトの識別、前記第1の一組の機械命令の位置、前記第1の一組の機械命令に対する入力および出力の位置を含む、
    請求項12ないし17のいずれかに記載のシステム。
  19. 前記コンパイラが、コンパイラの第1のインスタンスであり、前記コンパイラの前記第1のインスタンスの設定とは異なる設定を有する前記コンパイラの第2のインスタンスが、前記第2の実行可能コードを生成する目的に使用される、
    請求項12ないし18のいずれかに記載のシステム。
  20. 前記方法がさらに、一組の入力について、前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、
    前記第1の一組の機械命令と、前記第2の一組の機械命令と、前記高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、前記入力が所定の一組の入力からのものであることに応答して前記第1の一組の機械命令を実行させ、そうでないことに応答して前記第2の一組の機械命令を実行させる、前記第3の実行可能コードを生成すること
    を含む、
    請求項12ないし19のいずれかに記載のシステム。
  21. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致すると判定することが、
    複数のテストを含むテスト・ベクタを生成すること、
    前記テスト・ベクタの中のそれぞれのテストを、前記高水準コンストラクトに関連する前記第1の一組の機械命令および前記第2の一組の機械命令に対して実行すること、ならびに
    前記テスト・ベクタの中の前記それぞれのテストの出力を比較すること
    を含み、
    前記第1の一組の機械命令と前記第2の一組の機械命令とに関してそれぞれの前記出力が一致することに基づいて、前記振る舞いは一致すると判定される、
    請求項20に記載のシステム。
  22. 高水準コンストラクトの最適化の自動検証のためのコンピュータ・プログラム製品であって、
    前記コンピュータ・プログラム製品が、
    処理回路によって可読のコンピュータ可読ストレージ媒体であり、請求項1ないし11のいずれかに記載の方法を実行するために前記処理回路が実行するための命令を記憶した、前記コンピュータ可読ストレージ媒体
    を含む、
    コンピュータ・プログラム製品。
  23. コンピュータ可読媒体上に記憶された、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、
    前記プログラムがコンピュータ上で実行されたときに請求項1ないし11のいずれかに記載の方法を実行するためのソフトウェア・コード部分を含む、
    コンピュータ・プログラム。
  24. 高水準コンストラクトの最適化の自動検証のためのコンピュータ実施方法であって、
    前記方法が、
    コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成すること
    を含み、前記コンピュータ・プログラムが高水準コンストラクトを含み、
    前記コンパイルすることが、
    前記高水準コンストラクトに対する第1の一組の機械命令を生成すること、および
    前記第1の実行可能コードに、前記高水準コンストラクトに対するコンパイル時情報を格納すること
    を含み、
    前記方法がさらに、
    オプティマイザによって、前記第1の実行可能コードを最適化すること
    を含み、
    前記最適化することが、
    前記第1の実行可能コードを中間言語(IL)表現に変換すること
    を含み、前記IL表現が、前記コンパイル時情報に基づく、前記高水準コンストラクトに対応する一組のIL命令を含み、
    前記最適化することがさらに、
    前記IL表現に基づいて第2の実行可能コードを生成すること
    を含み、前記第2の実行可能コードが、前記高水準コンストラクトに対する第2の一組の機械命令を含み、
    前記最適化することがさらに、
    一組の入力について、前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、
    前記第1の一組の機械命令と、前記第2の一組の機械命令と、前記高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、前記入力が所定の一組の入力からのものであることに応答して前記第1の一組の機械命令を実行させ、そうでないことに応答して前記第2の一組の機械命令を実行させる、前記第3の実行可能コードを生成すること
    を含む、
    コンピュータ実施方法。
  25. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致すると判定することが、
    複数のテストを含むテスト・ベクタを生成すること、
    前記テスト・ベクタの中のそれぞれのテストを、前記高水準コンストラクトに関連する前記第1の一組の機械命令および前記第2の一組の機械命令に対して実行すること、ならびに
    前記テスト・ベクタの中の前記それぞれのテストの出力を比較すること
    を含み、
    前記第1の一組の機械命令と前記第2の一組の機械命令とに関してそれぞれの前記出力が一致することに基づいて、前記振る舞いは一致すると判定される、
    請求項24に記載のコンピュータ実施方法。
  26. 前記テスト・ベクタの中のテストを実行することが、
    前記第1の一組の機械命令に対する第1のラッパ関数を生成すること、
    実行する前記テストに応じた入力を用いて前記第1のラッパ関数を実行し、第1の一組の出力を収集すること、
    前記第2の一組の機械命令に対する第2のラッパ関数を生成すること、および
    実行する前記テストに応じた前記入力を用いて前記第2のラッパ関数を実行し、第2の一組の出力を収集すること
    を含む、
    請求項25に記載のコンピュータ実施方法。
  27. システムであって、
    メモリと、
    前記メモリに結合されたプロセッサと
    を備え、前記プロセッサが、高水準コンストラクトの最適化の自動検証のための方法を実行するように構成されており、
    前記方法が、
    コンパイラによって、第1の実行可能コードを、コンピュータ・プログラムをコンパイルすることにより生成すること
    を含み、前記コンピュータ・プログラムが高水準コンストラクトを含み、
    前記コンパイルすることが、
    前記高水準コンストラクトに対する第1の一組の機械命令を生成すること、および
    前記第1の実行可能コードに、前記高水準コンストラクトに対するコンパイル時情報を格納すること
    を含み、
    前記方法がさらに、
    オプティマイザによって、前記第1の実行可能コードを最適化すること
    を含み、
    前記最適化することが、
    前記第1の実行可能コードを中間言語(IL)表現に変換すること
    を含み、前記IL表現が、前記コンパイル時情報に基づく、前記高水準コンストラクトに対応する一組のIL命令を含み、
    前記最適化することがさらに、
    前記IL表現に基づいて第2の実行可能コードを生成すること
    を含み、前記第2の実行可能コードが、前記高水準コンストラクトに対する第2の一組の機械命令を含み、
    前記最適化することがさらに、
    一組の入力について、前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致しないとの判定に基づいて、
    前記第1の一組の機械命令と、前記第2の一組の機械命令と、前記高水準コンストラクトへの入力を調べる追加された関数とを含む第3の実行可能コードであり、前記入力が所定の一組の入力からのものであることに応答して前記第1の一組の機械命令を実行させ、そうでないことに応答して前記第2の一組の機械命令を実行させる、前記第3の実行可能コードを生成すること
    を含む、
    システム。
  28. 前記第1の一組の機械命令と前記第2の一組の機械命令との振る舞いが一致すると判定することが、
    複数のテストを含むテスト・ベクタを生成すること、
    前記テスト・ベクタの中のそれぞれのテストを、前記高水準コンストラクトに関連する前記第1の一組の機械命令および前記第2の一組の機械命令に対して実行すること、ならびに
    前記テスト・ベクタの中の前記それぞれのテストの出力を比較すること
    を含み、
    前記第1の一組の機械命令と前記第2の一組の機械命令とに関してそれぞれの前記出力が一致することに基づいて、前記振る舞いは一致すると判定される、
    請求項27に記載のシステム。
JP2022500767A 2019-07-31 2020-07-24 テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 Active JP7410269B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/527,362 2019-07-31
US16/527,362 US10776255B1 (en) 2019-07-31 2019-07-31 Automatic verification of optimization of high level constructs using test vectors
PCT/IB2020/057017 WO2021019401A1 (en) 2019-07-31 2020-07-24 Automatic verification of optimization of high level constructs using test vectors

Publications (3)

Publication Number Publication Date
JP2022542007A true JP2022542007A (ja) 2022-09-29
JPWO2021019401A5 JPWO2021019401A5 (ja) 2022-12-08
JP7410269B2 JP7410269B2 (ja) 2024-01-09

Family

ID=72425773

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022500767A Active JP7410269B2 (ja) 2019-07-31 2020-07-24 テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証

Country Status (6)

Country Link
US (1) US10776255B1 (ja)
JP (1) JP7410269B2 (ja)
CN (1) CN114174983B (ja)
DE (1) DE112020003634T5 (ja)
GB (1) GB2604237B (ja)
WO (1) WO2021019401A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11886848B2 (en) 2022-05-25 2024-01-30 International Business Machines Corporation Binary translation using raw binary code with compiler produced metadata

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4057938B2 (ja) 2003-03-26 2008-03-05 株式会社東芝 コンパイラ、コンパイル方法、及びプログラム開発ツール
US20060031820A1 (en) * 2004-08-09 2006-02-09 Aizhong Li Method for program transformation and apparatus for COBOL to Java program transformation
US7624384B2 (en) * 2004-11-30 2009-11-24 Intel Corporation Apparatus, system, and method of dynamic binary translation with translation reuse
US8103674B2 (en) 2007-12-21 2012-01-24 Microsoft Corporation E-matching for SMT solvers
US8381175B2 (en) * 2010-03-16 2013-02-19 Microsoft Corporation Low-level code rewriter verification
US8832672B2 (en) * 2011-01-28 2014-09-09 International Business Machines Corporation Ensuring register availability for dynamic binary optimization
CN102622260B (zh) * 2012-02-27 2014-12-10 中国科学院计算技术研究所 一种在线迭代编译的优化方法和优化系统
US8959495B2 (en) * 2012-09-14 2015-02-17 Oracle International Corporation Unifying static and dynamic compiler optimizations in source-code bases
JP5967618B2 (ja) * 2013-04-17 2016-08-10 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 二進化十進数型変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにそのコンピュータ及びコンピュータ・プログラム
JP5988444B2 (ja) 2014-02-14 2016-09-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
US9442707B2 (en) * 2014-06-25 2016-09-13 Microsoft Technology Licensing, Llc Incremental whole program compilation of code
US10261889B2 (en) * 2014-06-25 2019-04-16 Microsoft Technology Licensing, Llc Techniques for edit-and-continue and enhanced optimized debugging on optimized code
US9563536B1 (en) * 2015-10-19 2017-02-07 International Business Machines Corporation Performance neutral isolation of runtime discrepancies in binary code
US9715377B1 (en) 2016-01-04 2017-07-25 International Business Machines Corporation Behavior based code recompilation triggering scheme
CA3016684A1 (en) * 2016-03-11 2017-09-14 Lzlabs Gmbh Load module compiler
US10579498B2 (en) * 2016-07-31 2020-03-03 Microsoft Technology Licensing, Llc. Debugging tool for a JIT compiler
US10809985B2 (en) 2017-03-09 2020-10-20 Microsoft Technology Licensing, Llc Instrumenting program code
US10514909B2 (en) * 2017-03-29 2019-12-24 Technion Research & Development Foundation Limited Similarity of binaries
US10339837B1 (en) * 2018-06-01 2019-07-02 Polyverse Corporation Distribution of scrambled binary output using a randomized compiler

Also Published As

Publication number Publication date
GB2604237B (en) 2023-03-22
US10776255B1 (en) 2020-09-15
GB2604237A (en) 2022-08-31
CN114174983B (zh) 2022-10-11
JP7410269B2 (ja) 2024-01-09
CN114174983A (zh) 2022-03-11
DE112020003634T5 (de) 2022-06-09
WO2021019401A1 (en) 2021-02-04

Similar Documents

Publication Publication Date Title
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
US8732674B1 (en) Revertable managed execution image instrumentation
JP5951022B2 (ja) デコード時間命令最適化を用いた、強化されたアプリケーション・バイナリ・インターフェース(abi)のためのコードのリンク
JP6044968B2 (ja) デコード時間命令最適化を用いた、強化されたアプリケーション・バイナリ・インターフェース(abi)のためのコードのコンパイル
US11074154B2 (en) Identifying a source file for use in debugging compiled code
JP2017516210A (ja) 動的に生成されたパターンベースクラスの構造識別
TW201308209A (zh) 運行時間系統
CN111124420A (zh) 编译方法、装置、电子设备及可读存储介质
JP2023507709A (ja) 統合された参照及び二次のマーキング
US9250936B2 (en) Enhanced array class
JP7410269B2 (ja) テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証
US9519566B2 (en) Modeling memory use of applications
US11983090B2 (en) Setting breakpoints for source code segments enclosed by macros
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
US10248554B2 (en) Embedding profile tests into profile driven feedback generated binaries
US11347523B2 (en) Updated shared library reloading without stopping the execution of an application
US11157252B2 (en) Assessment of the benefit of post-inlining program transformation in inlining decisions
US20150220310A1 (en) Object field optimization
US20220058006A1 (en) Runtime type identification of an object utilizing class inheritance relationships

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20220518

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221128

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221223

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231130

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: 20231205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20231221

R150 Certificate of patent or registration of utility model

Ref document number: 7410269

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150