JP6375649B2 - ソフトウェアプログラムの効率を高める方法及びプロセッサ - Google Patents

ソフトウェアプログラムの効率を高める方法及びプロセッサ Download PDF

Info

Publication number
JP6375649B2
JP6375649B2 JP2014051457A JP2014051457A JP6375649B2 JP 6375649 B2 JP6375649 B2 JP 6375649B2 JP 2014051457 A JP2014051457 A JP 2014051457A JP 2014051457 A JP2014051457 A JP 2014051457A JP 6375649 B2 JP6375649 B2 JP 6375649B2
Authority
JP
Japan
Prior art keywords
software program
type information
software
variable
variables
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.)
Active
Application number
JP2014051457A
Other languages
English (en)
Other versions
JP2014186728A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2014186728A publication Critical patent/JP2014186728A/ja
Application granted granted Critical
Publication of JP6375649B2 publication Critical patent/JP6375649B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)

Description

本願で論じられる実施形態は、動的型付きソフトウェアの効率を高めることに関する。
電子機器の使用が増えるにつれて、それらの機器で実行されるソフトウェアプログラムの数も増える。そのようなソフトウェアプログラムの多くは、「動的型付きソフトウェア」とも呼ばれ得る動的型付きプログラミング言語を用いて作成される。動的型付きソフトウェアのコードは、ソフトウェアプログラムが実行されるまでタイプをチェックされない変数を含むことがある。然るに、変数についてのタイプ情報は、主として動的型付きソフトウェアの実行中に(ランタイム時に)決定され得る。動的型付き言語は、静的型付きプログラミング言語と比較してプログラミング時の柔軟性が高い。しかしながら、動的型付きソフトウェアにおいて変数のタイプ情報を決定するためのランタイム動作に一部起因して、動的型付きソフトウェアはまた、静的型付きソフトウェアよりも多くの電子機器の計算リソースを消費しうる。
本願で請求される対象は、如何なる欠点も解消し又は先に記載されたような環境においてのみ動作する実施形態に制限されない。むしろ、この背景は、本願で記載される幾つかの実施形態が実施され得る一例としての技術範囲を説明するためにのみ提供される。
本発明は、ソフトウェアプログラムの実行に使用されるリソースを低減してソフトウェアプログラムの効率を高める方法及びプロセッサを提供することを目的とする。
実施形態の一態様に従って、ソフトウェアプログラムの効率を高める方法は、動的型付きプログラミング言語に基づき作成されるソフトウェアプログラムを実行することを含んでよい。方法は、ソフトウェアプログラムの実行の間、ソフトウェアプログラムに含まれる変数についてタイプ情報を決定することを更に含んでよい。加えて、方法は、ソフトウェアプログラム及びタイプ情報に基づき、修正されたソフトウェアプログラムを生成し、その修正されたソフトウェアプログラムを配信することを含んでよい。
本願で記載される実施形態の目的及び利点は、少なくとも、特に特許請求の範囲において指摘される要素、特徴及び組み合わせによって、実現され達成されるであろう。
上記の概要及び下記の詳細な説明はいずれも例示及び説明のためであり、請求される発明の限定でないことが理解されるべきである。
本発明の実施形態によれば、ソフトウェアプログラムの実行に使用されるリソースを低減してソフトウェアプログラムの効率を高めることが可能となる。
動的型付きソフトウェアの効率を高めるシステムの例を表す。 動的型付きソフトウェアの効率を高めるよう構成されるタイプ情報モジュールの例を表す。 動的型付きソフトウェアの効率を高める方法の例のフローチャートである。
例となる実施形態は、添付の図面の使用を通じて、更なる特異性及び詳細を伴って記載及び説明されるであろう。
本願で記載される実施形態は、以降「動的型付きソフトウェア」とも呼ばれ得る動的型付き言語に基づくソフトウェアの効率を高める方法及びシステムに関する。動的型付きソフトウェアの変数は、例えば、制限なく、文字、文字列、整数、浮動小数、バイト、ダブル、ブーリアン型、ポインタ、アレイ、構造、クラスのオブジェクト又はインスタンス、及びエヌメレーションのようなタイプを有してよい。変数のタイプは、どのようなデータ(例えば、実際値)が変数に割り当てられ得るかを示す。例えば、整数値は、タイプが整数である変数に割り当てられてよく、一方、真偽値は、タイプがブーリアン型である変数に割り当てられてよい。
動的型付きソフトウェアのコードは、ソフトウェアプログラムが実行されるまでタイプがチェックされない変数を含むことがある。然るに、変数についてのタイプ情報は、主として動的型付きソフトウェアの実行中に(ランタイム時に)決定され得、これにより、動的型付きソフトウェアを実行するためのリソースの使用が増える。
以下で更に詳細に論じられるように、タイプ情報モジュールは、動的型付きソフトウェアが1又はそれ以上のユーザによる使用のために配信される前に、動的型付きソフトウェアに含まれる変数についてタイプ情報を決定するよう構成されてよい。変数のこのような事前の(AOT;ahead-of-time)タイプ情報決定は、動的型付きソフトウェアのその後の実行の間に変数のタイプ確認を行うために使用されるリソースを減らすことができる。
本開示の実施形態は、添付の図面を参照して説明されるであろう。
図1は、本願で記載される少なくとも1つの実施形態に従って配置される、動的型付きソフトウェアプログラム102の効率を高める例となるシステム100を表す。ソフトウェア102は変数を含んでよく、それらの変数のタイプは、ソフトウェア102の実行(又はランタイム)の間に確認されてよい。加えて、動的型付きソフトウェアの実行の間、動的型付きソフトウェアのどのデータ構造又はパスがその時点で実行されているのかに依存して、種々のタイプが変数に使用されてよい。変数タイプがソフトウェアの実行中に確認され得る動的型付きソフトウェアプログラミング言語の幾つかの例として、JaveScript、Phython、Ruby、MATLAB、LISP、Lua、及びAPLがあるが、これらに限られない。
幾つかの実施形態において、システム100のタイプ情報モジュール104は、ソフトウェア102の1又はそれ以上の変数に関連するタイプ情報を決定するようにソフトウェア102を実行するよう構成されてよい。幾つかの実施形態において、タイプ情報モジュール104は、図2を参照して以下で更に詳細に記載されるように、テストスイート又は記号的実行を用いてソフトウェア102を実行してよい。
タイプ情報は、ソフトウェア102の実行中にソフトウェア102の変数に使用され得るタイプに関連する情報を含んでよい。例えば、幾つかの実施形態において、タイプ情報は、ソフトウェア102の実行中に変数に割り当てられ得る種々のタイプを含んでよい。それらの又は他の実施形態において、タイプ情報は、どのタイプがソフトウェア102の特定のパス又はデータ構造の実行の間に変数に割り当てられ得るかを含んでよい。加えて、タイプ情報は、ソフトウェア102の特定のパス又はデータ構造における変数に関連するタイプを特定し且つそのようにして特定されたタイプに基づきどの動作を実行すべきかを示す命令の特定の組を含んでよい。
ソフトウェア102の実行の間、タイプ情報モジュール104は、ソフトウェア102に含まれる変数についてタイプ情報を決定するよう構成されてよく、また、変数について決定されタイプ情報を記憶しておくよう構成されてよい。幾つかの実施形態において、タイプ情報モジュール104は、ソフトウェア102の変数についてのタイプ情報を、その変数がソフトウェア102の実行中に使用される場合に、ルックアップするよう構成されてよい。
例えば、タイプ情報モジュール104は、ソフトウェア102の変数についてのタイプ情報を、その変数がソフトウェア102の実行中に呼び出され得るソフトウェア102の関数へ送られる場合に、ルックアップするよう構成されてよい。タイプ情報モジュール104はまた、呼び出された関数によって使用される変数に関連する変数のタイプ情報を記憶しておくよう構成されてよい。
図2に関連して更に詳細に記載されるように、幾つかの実施形態において、タイプ情報モジュール104は更に、タイプ情報を決定する部分として、ソフトウェア102のプロファイリングを実行するよう構成されてよい。更に、タイプ情報モジュール104は、決定されたタイプ情報に関してインライン・キャッシングを実行するよう構成されてよい。図2に関連して以下で更に詳細に論じられるように、タイプ情報モジュール104はまた、決定され且つ記憶されたタイプ情報とソフトウェア102とに基づき、修正された動的型付きソフトウェアプログラム106(「修正ソフトウェア106」)を生成するよう構成されてよい。例えば、修正ソフトウェア106は、タイプ情報を記憶したソフトウェア102を有してよい。加えて、幾つかの実施形態において、タイプ情報モジュール104は、インライン・キャッシングに基づき修正ソフトウェア106を生成して、ソフトウェア102に対するインライン・キャッシングの結果が修正ソフトウェア106に記憶され得るようにするよう構成されてよい。タイプ情報モジュール104はまた、修正された動的型付きソフトウェア106を記憶して、修正ソフトウェア106が次いで1又はそれ以上のユーザへ配信され得るようにするよう構成されてよい。
然るに、タイプ情報モジュール104は、修正ソフトウェア106が1又はそれ以上のユーザによる使用のために配信される前に、修正ソフトウェア106に含まれる変数の1又はそれ以上についてタイプ情報を決定するよう構成されてよい。これは、事前のタイプ情報決定と呼ばれることがある。事前に決定されたタイプ情報は、ソフトウェア102におけるようにタイプ情報が事前に決定され得ない動的型付きソフトウェアの実行中に使用されるリソースと比較して、修正ソフトウェア106の実行中に使用されるリソースを減らすことができる。
図2は、本願で記載される少なくとも1つの実施形態に従って配置されるタイプ情報モジュール204の実施例を表す。幾つかの実施形態において、タイプ情報モジュール204は、図1のタイプ情報モジュール104と同じであるよう構成されてよい。タイプ情報モジュール204は、プログラム、ソフトウェア、関数、ライブラリ、サース(SaaS;software-as-a-service)、アナログ若しくはデジタル回路、又はそれらの組み合わせのような如何なる適切なメカニズムによっても実施されてよい。幾つかの実施形態において、タイプ情報モジュール204は、プロセッサによる実行のためにメモリに常駐するロジック又は命令において具現されてよい。
プロセッサは、例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィルード・プログラマブル・ゲート・アレイ(FPGA)、あるいは、プログラム命令をインタプリット及び/又は実行するよう、及び/又はデータを処理するよう構成された何らかの他のデジタル又はアナログ回路を含んでよい。幾つかの実施形態において、プロセッサは、プログラム命令をインタプリット及び/又は実行し、且つ/あるいは、メモリに記憶されたデータを処理してよい。
メモリは、一定期間プログラム命令及び/又はデータを保持するよう構成される如何なる適切なコンピュータ可読媒体も含んでよい。一例として、制限なしに、そのようなコンピュータ可読媒体は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的消去可能プログラム可能ROM(EEPROM)、コンパクトディスクROM(CD−ROM)若しくは他の光ディスク記憶装置、磁気ディスク若しくは他の磁気記憶装置、フラッシュメモリ装置(例えば、固体状態メモリ装置)、又はコンピュータにより実行可能な命令若しくはデータ構造の形で所望のプログラムコードを搬送若しくは記憶するために使用され得且つプロセッサによってアクセスされ得る何らかの他の記憶媒体を含む有形なコンピュータ可読記憶媒体を含んでよい。それらの組み合わせもコンピュータ可読媒体の適用範囲内に含まれてよい。コンピュータにより実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ、又は専用プロセッシング装置(例えば、プロセッサ)に特定の機能又は機能のグループを実行させる命令及びデータを含んでよい。
幾つかの実施形態において、タイプ情報モジュール204は、実行モジュール210を有してよい。実行モジュール210は、動的型付きソフトウェアプログラム202(「ソフトウェア202」)を受け取って実行するよう構成されてよい。幾つかの実施形態において、実行モジュール210は、ソフトウェア202に関連する受け取られたテストスイート208を用いて、及び/又はソフトウェア202に関して記号的実行を行うことによって、ソフトウェア202を実行するよう構成されてよい。
テストスイート208は、ソフトウェア202の1又はそれ以上のパスが探索され得るようにソフトウェア202の1又はそれ以上の動作を開始するために使用され得るコマンド、命令、及び/又は具象な値(concrete value)のあらゆる適切な組であってよい。テストスイート208によるソフトウェア202の実行の間、ソフトウェア202の1又はそれ以上の変数が呼び出されてよく、それにより、それらの変数に関連するタイプ情報が決定され得る。然るに、実行モジュール210は、ソフトウェア202の1又はそれ以上の変数に関連するタイプ情報が決定され得るようにソフトウェア202を実行するためにテストスイート208を使用するよう構成されてよい。
上述されたように、それらの及び他の実施形態において、実行モジュール210はまた、ソフトウェア202を実行するために記号的実行を使用するよう構成されてよい。記号的実行は、ソフトウェアプログラムを動的に解析するための技術である。記号的実行は、入力値として具象な値に代えてシンボリック値を使用してよく、プログラム変数の値をシンボリック表現として表してよい。結果として、記号的に実行されるソフトウェアプログラムによって計算される出力は、シンボリック入力の関数として表され得る。記号的実行により、ソフトウェアプログラム内の各パスは記号的に実行されてよい。パスに沿った記号的実行が(正常に又はエラーを有して)終了すると、そのパスに関連する経路制約が確立され得る。
然るに、実行モジュール210は、記号的実行を実行してソフトウェア202を実行するよう構成されてよく、それにより、ソフトウェア202の1又はそれ以上の変数は、ソフトウェア202の記号的実行の間に呼び出され得る。このように、実行モジュール210は、ソフトウェア202の変数の1又はそれ以上に関連するタイプ情報を、それらの変数がソフトウェア202の記号的実行の間に呼び出される場合に、決定するよう構成されてよい。
(テストスイート208又は記号的実行による)ソフトウェア202の実行の間、実行モジュール210は、ソフトウェア202における変数に関連するタイプ情報を決定するよう構成されてよい。幾つかの実施形態において、実行モジュール210は、ソフトウェア202の実行中にランタイム・メソッド・バインディングを実行してタイプ情報を決定するよう構成されてよい。ランタイム・メソッド・バインディングは、タイプが特定されていない変数について、その変数が呼び出される特定のインスタンスにおいて、どのタイプが使用され得るかを決定するために使用されてよい。例えば、ランタイム・メソッド・バインディングの間、動的ルックアップメソッドが、特定のインスタンスにおいて変数が呼び出される場合にその変数のタイプを決定するよう、当該変数に関して実行されてよい。
上述されたように、異なるインスタンスにおいて、例えば、ソフトウェア202の異なる実行パス又はデータ構造内で、変数は異なるタイプを割り当てられてよい。結果として、ソフトウェア202における変数に関連するタイプ情報は、ソフトウェア202の実行中にそれらの変数に割り当てられ得る1又はそれ以上のタイプを含んでよい。例えば、変数についてのタイプ情報は、その変数がソフトウェア202における異なる実行パスにおいて整数、ダブル、及び/又は浮動小数として割り当てられ得ることを示してよい。
幾つかの実施形態において、実行モジュール210はインライン・キャッシングモジュール214を有してよい。インライン・キャッシングモジュール214は、ソフトウェア202の実行中にインライン・キャッシングを実行するよう構成されてよい。以下で更に詳細に論じられるように、インライン・キャッシングは、前に実行された動的ルックアップメソッドから得られたタイプ情報を記憶するために使用されてよい。インライン・キャッシングは、前に実行された動的ルックアップメソッドがタイプ情報を決定するために実行されたコールサイトに関連付けられ得るソフトウェア202のデータ構造においてタイプ情報を記憶するために使用されてよい。従って、タイプ情報は、タイプ情報を決定するための他の動的ルックアップメソッドを実行することに代えて、コールサイトがその後に引き起こされる場合にアクセスされてよい。インライン・キャッシングモジュール214は、単層的(monomorphic)インライン・キャッシング、多層的(polymorphic)インライン・キャッシング、及び/又はメタモルフィック(metamorphic)インライン・キャッシングを含むいずれかの適切な種類のインライン・キャッシングを実行するよう構成されてよい。
幾つかの実施形態において、ソフトウェア202の特定のコールサイトに関連する変数(例えば、特定のコールサイトにある関数へ引数として送られる変数)は、その特定のコールに関して、しばしば、同じタイプ、又は有限な数のタイプを有してよい。インライン・キャッシングモジュール214によって実行されるインライン・キャッシングはこの教えに基づいてよく、それにより、ソフトウェア202の特定のコールサイトにおける1又はそれ以上の変数のための動的ルックアップの結果から得られるタイプ情報は、その特定のコールサイトに関連し得るソフトウェア202のデータ構造(及びその対応するコード)とともにインラインで記憶されてよい。従って、特定のコールサイトに再び達する場合に、そのコールサイトに関連するデータ構造において記憶されたタイプ情報が、動的ルックアップメソッドを呼び出すことに代えて、アクセスされ得る。
幾つかの実施形態において、タイプ情報モジュール204の修正ソフトウェアモジュール216は、修正された動的型付きソフトウェアプログラム206(「修正ソフトウェア206」)を生成するよう構成されてよい。修正ソフトウェア206は、ソフトウェア206及び決定されたタイプ情報に基づいてよい。例えば、幾つかの実施形態において、修正ソフトウェアモジュール216は、修正ソフトウェア206としてソフトウェア202のインライン・キャッシングの結果を記憶するよう構成されてよく、それにより、修正ソフトウェア206は、ソフトウェア202と、インライン・キャッシングの間にソフトウェア202に加えられたタイプ情報とを含んでよい。
幾つかの実施形態において、実行モジュール210は、ソフトウェア202に関連するプロファイル情報を決定するよう構成されるプロファイリングモジュール212を更に有してよい。幾つかの実施形態において、プロファイリングモジュール212は、ソフトウェア202の実行中にソフトウェア202の動的プログラム解析を実行することによって、プロファイル情報を決定するよう構成されてよい。例えば、プロファイリングモジュール212は、ソフトウェア202のメモリ又は時間的コスト、ソフトウェア202内の特定の命令の使用、ソフトウェア202内の変数使用の頻度及び/又は期間、且つ/あるいは、ソフトウェア202内の関数呼び出しの頻度及び/又は期間を決定してプロファイル情報に含めるよう構成されてよい。加えて、プロファイリングモジュール212は、ソフトウェア202の実行の間の変数タイプの使用の頻度を決定してプロファイル情報に含めるよう構成されてよい。
幾つかの実施形態において、実行モジュール210は、プロファイル情報に基づきタイプ情報を決定するよう構成されてよい。例えば、幾つかの実施形態において、実行モジュール210は、プロファイル情報によって示されるような、どれくらいの頻度で変数が使用されるかに基づき、変数についてのタイプ情報の決定に優先順位をつけるよう構成されてよい。そのようなものとして、実行モジュール210は、使用頻度の低い変数についてのタイプ情報の決定に対して、より使用頻度の高い変数についてのタイプ情報の決定を優先してよい。
加えて、幾つかの実施形態において、実行モジュール210は、プロファイル情報によって示されるような、どれくらいの頻度で呼び出し頻度が高い関数が呼び出されるのかに基づき、1又はそれ以上の呼び出し頻度の高い関数に関してタイプ情報の決定に優先順位をつけるよう構成されてよい。例えば、実行モジュール210は、めったに呼び出されない関数に関連する変数についてのタイプ情報の決定に対して、呼び出し頻度の高い関数に関連する1又はそれ以上の変数についてのタイプ情報の決定を優先するよう構成されてよい。
それらの及び他の実施形態において、インライン・キャッシングモジュール214は、プロファイル情報に関してインライン・キャッシングを実行するよう構成されてよい。例えば、インライン・キャッシングモジュール214は、プロファイル情報に含まれ得るデータ構造に関連する関数呼び出しの頻度及び/又はデータ構造に関連する変数の使用の頻度に基づき、タイプ情報を格納すべきソフトウェア202のいずれかのデータ構造(例えば、ソフトウェア202のコールサイトに関連するデータ構造)を優先してよい。加えて、幾つかの実施形態において、インライン・キャッシングモジュール214は、1つのタイプが変数について他のタイプよりもよく使用される場合に、その変数についてのタイプの情報を含む関連のデータ構造において変数の当該1つのタイプについてのタイプ情報を変数の他のタイプに対して優先してよい。
修正ソフトウェアモジュール216はまた、プロファイル情報に基づき修正ソフトウェア206を生成するよう構成されてよい。例えば、上述されたように、インライン・キャッシングモジュール214は、関連のタイプ情報を格納すべきソフトウェア202のいずれかのデータ構造を優先するためにプロファイル情報を用いてインライン・キャッシングを実行してよい。修正ソフトウェアモジュール216は、ソフトウェア202を該ソフトウェア202に含まれる優先順位を付けられたタイプ情報とともに修正ソフトウェア206として記憶するよう構成されてよい。従って、修正ソフトウェア206は、プロファイル情報に含まれ得る使用頻度の高い変数、変数タイプ、及び/又は関数呼び出しに関連するタイプ情報を含んでよい。
幾つかの実施形態において、修正ソフトウェア206は、後の時点での使用又は実行のために、コンピュータ可読媒体に記憶されるか、及び/又は配信されてよい。上述されたように、修正ソフトウェア206は、決定されたタイプ情報が記憶されたソフトウェア202を含んでよい。従って、修正ソフトウェア206は、事前に決定された修正ソフトウェア206に記憶されているタイプ情報に基づき動作を実行してよく、これにより、修正ソフトウェア206の実行中に使用されるリソースを減らすことができる。加えて、修正ソフトウェア206を生成するよう実行され得る事前のインライン・キャッシングは、修正ソフトウェア206の実行中に実行され得るジャスト・イン・タイム(JIT;just-in-time)のインライン・キャッシングの量を低減又は削除することができる。従って、修正ソフトウェア206を実行するために使用されるプロセッシングリソースは、ソフトウェア202を実行するために使用されるプロセッシングリソースと比べて低減され得る。
変更、追加又は省略が、本開示の適用範囲から逸脱することなく図1及び図2に対してなされてよい。例えば、タイプ情報モジュール204のモジュールの1又はそれ以上は組み合わされ、又は追加モジュールに分割されてよい。モジュール間の区別は単に、タイプ情報モジュール204によって実行され得る種々の機能の理解を容易にするためである。
図3は、本願で記載される少なくとも1つの実施形態に従って配置される、動的型付きソフトウェアプログラムの効率を高める例となる方法300のフローチャートである。方法300は、幾つかの実施形態において、図1及び図2のタイプ情報モジュール104及び204の夫々のようなタイプ情報モジュールによって実施されてよい。別個のブロックとして表されているが、様々なブロックは、所望の実施に依存して、追加ブロックに分けられ、より少ないブロックへとまとめられ、又は削除されてよい。
方法300は開始し、ブロック302で、動的型付きソフトウェアプログラム(以降「ソフトウェアプログラム」と呼ばれる。)が受け取られてよい。ブロック304で、ソフトウェアプログラムは実行されてよい。上述されたように、幾つかの実施形態において、ソフトウェアプログラムはテストスイートを用いて実行されてよい。それらの又は他の実施形態において、ソフトウェアプログラムは記号的実行を用いて実行されてよい。
ブロック306で、ソフトウェアプログラムに含まれる変数についてのタイプ情報が、ソフトウェアプログラムの実行中に決定されてよい。例えば、上述されたように、タイプ情報はランタイム・メソッド・バインディングを用いて決定されてよい。幾つかの実施形態において、変数についてのタイプ情報は、それらの変数を使用するソフトウェアプログラムのコールサイトに関連するデータ構造において格納されてよい。幾つかの実施形態において、タイプ情報は、上述されたように、インライン・キャッシングを用いて関連のデータ構造において格納されてよい。
ブロック308で、動的型付きの修正されたソフトウェアプログラム(以降「修正ソフトウェアプログラム」と呼ばれる。)がソフトウェアプログラム及びタイプ情報に基づき生成されてよい。例えば、上述されたように、タイプ情報を記憶したソフトウェアプログラムが、修正ソフトウェアプログラムを生成するよう修正ソフトウェアプログラムとして記憶されてよい。
ブロック310で、修正ソフトウェアプログラムは後の時点の実行のために配信及び/又は記憶されてよい。上述されたように、修正ソフトウェアプログラムは、ブロック302で受け取られたソフトウェアプログラムの前の実行の間に事前に決定された修正ソフトウェアプログラムに含まれる変数についてのタイプ情報を含んでよい。加えて、修正ソフトウェアプログラムにおけるタイプ情報の包含は、ブロック302で受け取られたソフトウェアプログラムの実行中に実行され得るインライン・キャッシングの量と比べて、修正ソフトウェアプログラムの実行中に実行されるインライン・キャッシングの量を減らすことができる。結果として、修正ソフトウェアプログラムを起動及び実行するために使用されるリソースの量は、ブロック302で受け取られたソフトウェアプログラムを起動及び実行するために使用されるリソースの量と比べて低減され得る。従って、方法300は、動的型付きソフトウェアプログラムの効率を高めるために使用されてよい。
当業者には明らかなように、本願で開示されるこの及び他の処理及び方法に関して、そのような処理及び方法において実行される機能は異なる順序で実施されてよい。更に、説明されるステップ及び動作は単に例として提供されており、ステップ及び動作の幾つかは、開示される実施形態の本質から逸脱することなしに、任意であり、より少ないステップ及び動作にまとめられ、又は追加のステップ及び動作に拡張されてよい。
例えば、幾つかの実施形態において、方法300は、ソフトウェアプログラムに関連するプロファイル情報を決定するよう、ブロック302で受け取られたソフトウェアプログラムをプロファイリングすることに関するステップを有してよい。そのような実施形態の幾つかにおいて、プロファイル情報は、タイプ情報を決定するために使用されてよい。例えば、プロファイル情報は、どの変数及び/又は変数タイプが頻繁に呼び出され得るのかを決定するために使用されてよく、それにより、そのような変数に関連するタイプ情報の決定が然るべく優先されてよい。
本願で記載される実施形態は、以下で更に詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用のコンピュータの使用を含んでよい。
本願で記載される実施形態は、コンピュータにより実行可能な命令又はデータ構造を搬送又は記憶するための、上述されたようなコンピュータ可読媒体を用いて実施されてよい。そのようなコンピュータ可読媒体は、汎用又は専用のコンピュータによってアクセスされ得る如何なる利用可能な媒体であってもよい。
本願で使用されるように、語「モジュール」又は「コンポーネント」は、コンピューティングシステムで実行するハードウェア及び/又はソフトウェアオブジェクト若しくはルーチンを指す。本願で記載される種々のコンポーネント、モジュール、エンジン及びサービスは、コンピューティングシステムで(例えば、別個のスレッドとして)実行するオブジェクト又は処理として実施されてよい。本願で記載されるシステム及び方法は、場合によりソフトウェアにおいて実施されるように記載されるが、ハードウェア又はソフトウェアとハードウェアとの組み合わせにおける実施も可能であり考えられている。
本願で挙げられている全ての例及び条件付き言語は、当該技術を促進することに発明者によって寄与された発明及び概念を読む者が理解するのを助ける教示を目的としており、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本発明の実施形態が詳細に記載されてきたが、様々な変更、置換及び代替が本開示の精神及び適用範囲から逸脱することなしにそれらに対してなされ得ることが理解されるべきである。
上記の実施形態に関し、更に以下の付記を開示する。
(付記1)
ソフトウェアプログラムの効率を高める方法であって、
動的型付きプログラミング言語に基づき作成されるソフトウェアプログラムを実行し、
前記ソフトウェアプログラムの実行の間、該ソフトウェアプログラムに含まれる変数についてタイプ情報を決定し、
前記ソフトウェアプログラム及び前記タイプ情報に基づき、修正されたソフトウェアプログラムを生成し、
前記修正されたソフトウェアプログラムを配信する
方法。
(付記2)
前記修正されたソフトウェアプログラムを生成することは、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納することを含み、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
付記1に記載の方法。
(付記3)
更に、
前記ソフトウェアプログラムをプロファイリングし、
前記ソフトウェアプログラムのプロファイリングに基づき前記タイプ情報を決定する
付記1に記載の方法。
(付記4)
更に、
前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの使用頻度の高い関数を決定し、
前記ソフトウェアプログラムにおける前記変数の少なくとも1つについて、該少なくとも1つの変数が前記使用頻度の高い関数において含まれることに基づき前記タイプ情報を決定する
付記3に記載の方法。
(付記5)
更に、
前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの実行の間の変数タイプの使用の頻度を決定し、
前記変数タイプの使用の頻度に基づき前記タイプ情報を決定する
付記3に記載の方法。
(付記6)
更に、前記タイプ情報を決定するようランタイム・メソッド・バインディングを実行する
付記1に記載の方法。
(付記7)
更に、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納するようインライン・キャッシングを実行し、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
付記1に記載の方法。
(付記8)
更に、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムの記号的実行を実行する
付記1に記載の方法。
(付記9)
更に、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムへテストスイートを適用する、
付記1に記載の方法。
(付記10)
システムにソフトウェアプログラムの効率を高めさせるようにコンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、
前記命令は、
動的型付きプログラミング言語に基づき作成されるソフトウェアプログラムを実行し、
前記ソフトウェアプログラムの実行の間、該ソフトウェアプログラムに含まれる変数についてタイプ情報を決定し、
前記ソフトウェアプログラム及び前記タイプ情報に基づき、修正されたソフトウェアプログラムを生成し、
前記修正されたソフトウェアプログラムを配信する
ことを含む、プロセッサ。
(付記11)
前記修正されたソフトウェアプログラムを生成することは、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納することを含み、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
付記10に記載のプロセッサ。
(付記12)
前記命令は、
前記ソフトウェアプログラムをプロファイリングし、
前記ソフトウェアプログラムのプロファイリングに基づき前記タイプ情報を決定する
ことを更に含む、付記10に記載のプロセッサ。
(付記13)
前記命令は、
前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの使用頻度の高い関数を決定し、
前記ソフトウェアプログラムにおける前記変数の少なくとも1つについて、該少なくとも1つの変数が前記使用頻度の高い関数において含まれることに基づき前記タイプ情報を決定する
ことを更に含む、付記12に記載のプロセッサ。
(付記14)
前記命令は、
前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの実行の間の変数タイプの使用の頻度を決定し、
前記変数タイプの使用の頻度に基づき前記タイプ情報を決定する
ことを更に含む、付記12に記載のプロセッサ。
(付記15)
前記命令は、前記タイプ情報を決定するようランタイム・メソッド・バインディングを実行することを更に含む、
付記10に記載のプロセッサ。
(付記16)
前記命令は、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納するようインライン・キャッシングを実行することを更に含み、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
付記10に記載のプロセッサ。
(付記17)
前記命令は、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムの記号的実行を実行することを更に含む、
付記10に記載のプロセッサ。
(付記18)
前記命令は、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムへテストスイートを適用することを更に含む、
付記10に記載のプロセッサ。
100 システム
102,202 動的型付きソフトウェアプログラム
204,104 タイプ情報モジュール
106,206 修正された動的型付きソフトウェアプログラム
208 テストスイート
210 実行モジュール
212 プロファイリングモジュール
214 インライン・キャッシングモジュール
216 修正ソフトウェアモジュール
218 配信モジュール

Claims (14)

  1. ソフトウェアプログラムの効率を高める方法であって、
    動的型付きプログラミング言語に基づき作成されるソフトウェアプログラムを実行し、
    前記ソフトウェアプログラムの実行の間、該ソフトウェアプログラムに含まれる変数についてタイプ情報を決定し、
    前記ソフトウェアプログラム及び前記タイプ情報に基づき、修正されたソフトウェアプログラムを生成し、
    前記修正されたソフトウェアプログラムを配信する
    方法であり、
    更に、
    前記ソフトウェアプログラムをプロファイリングし、
    前記ソフトウェアプログラムのプロファイリングに基づき、該ソフトウェアプログラム内の、前記変数のうちの第1の変数の第1の使用頻度及び前記変数のうちの第2の変数の第2の使用頻度を決定し、
    前記ソフトウェアプログラムに含まれる前記変数について前記タイプ情報を決定することは、前記第1の使用頻度が前記第2の使用頻度よりも高い場合、前記第2の変数についてタイプ情報を決定することよりも優先して、前記第1の変数についてタイプ情報を決定することを含
    前記方法は、更に、
    前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの使用頻度の高い関数を決定し、
    前記ソフトウェアプログラムにおける前記変数の少なくとも1つについて、該少なくとも1つの変数が前記使用頻度の高い関数において含まれることに基づき前記タイプ情報を決定する、
    方法。
  2. 前記修正されたソフトウェアプログラムを生成することは、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納することを含み、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
    請求項1に記載の方法。
  3. 更に、
    前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの実行の間の変数タイプの使用の頻度を決定し、
    前記変数タイプの使用の頻度に基づき前記タイプ情報を決定する
    請求項1に記載の方法。
  4. 更に、前記タイプ情報を決定するようランタイム・メソッド・バインディングを実行する
    請求項1に記載の方法。
  5. 更に、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納するようインライン・キャッシングを実行し、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
    請求項1に記載の方法。
  6. 更に、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムの記号的実行を実行する
    請求項1に記載の方法。
  7. 更に、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムへテストスイートを適用する、
    請求項1に記載の方法。
  8. システムにソフトウェアプログラムの効率を高めさせるようにコンピュータ可読媒体からのコンピュータ命令を実行するよう構成されるプロセッサであって、
    前記命令は、
    動的型付きプログラミング言語に基づき作成されるソフトウェアプログラムを実行し、
    前記ソフトウェアプログラムの実行の間、該ソフトウェアプログラムに含まれる変数についてタイプ情報を決定し、
    前記ソフトウェアプログラム及び前記タイプ情報に基づき、修正されたソフトウェアプログラムを生成し、
    前記修正されたソフトウェアプログラムを配信する
    ことを含む、プロセッサであり、
    前記命令は、
    前記ソフトウェアプログラムをプロファイリングし、
    前記ソフトウェアプログラムのプロファイリングに基づき、該ソフトウェアプログラム内の、前記変数のうちの第1の変数の第1の使用頻度及び前記変数のうちの第2の変数の第2の使用頻度を決定する
    ことを更に含み、
    前記ソフトウェアプログラムに含まれる前記変数について前記タイプ情報を決定することは、前記第1の使用頻度が前記第2の使用頻度よりも高い場合、前記第2の変数についてタイプ情報を決定することよりも優先して、前記第1の変数についてタイプ情報を決定することを含
    前記命令は、
    前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの使用頻度の高い関数を決定し、
    前記ソフトウェアプログラムにおける前記変数の少なくとも1つについて、該少なくとも1つの変数が前記使用頻度の高い関数において含まれることに基づき前記タイプ情報を決定する
    ことを更に含む、
    プロセッサ。
  9. 前記修正されたソフトウェアプログラムを生成することは、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納することを含み、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
    請求項に記載のプロセッサ。
  10. 前記命令は、
    前記ソフトウェアプログラムのプロファイリングに基づき該ソフトウェアプログラムの実行の間の変数タイプの使用の頻度を決定し、
    前記変数タイプの使用の頻度に基づき前記タイプ情報を決定する
    ことを更に含む、請求項に記載のプロセッサ。
  11. 前記命令は、前記タイプ情報を決定するようランタイム・メソッド・バインディングを実行することを更に含む、
    請求項に記載のプロセッサ。
  12. 前記命令は、前記ソフトウェアプログラムのデータ構造において前記変数についての前記タイプ情報を格納するようインライン・キャッシングを実行することを更に含み、前記データ構造の夫々は、前記変数の少なくとも1つを用いる前記ソフトウェアプログラムのコールサイトに関連する、
    請求項に記載のプロセッサ。
  13. 前記命令は、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムの記号的実行を実行することを更に含む、
    請求項に記載のプロセッサ。
  14. 前記命令は、前記ソフトウェアプログラムを実行するよう該ソフトウェアプログラムへテストスイートを適用することを更に含む、
    請求項に記載のプロセッサ。
JP2014051457A 2013-03-15 2014-03-14 ソフトウェアプログラムの効率を高める方法及びプロセッサ Active JP6375649B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/837,231 US9256398B2 (en) 2013-03-15 2013-03-15 Device and method of increasing dynamically-typed software efficiency
US13/837,231 2013-03-15

Publications (2)

Publication Number Publication Date
JP2014186728A JP2014186728A (ja) 2014-10-02
JP6375649B2 true JP6375649B2 (ja) 2018-08-22

Family

ID=51534637

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014051457A Active JP6375649B2 (ja) 2013-03-15 2014-03-14 ソフトウェアプログラムの効率を高める方法及びプロセッサ

Country Status (2)

Country Link
US (1) US9256398B2 (ja)
JP (1) JP6375649B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9201797B1 (en) * 2013-05-15 2015-12-01 Google Inc. Per-selector dispatch
JP6497271B2 (ja) * 2015-08-21 2019-04-10 富士通株式会社 テストデータ生成装置、方法、及びプログラム
CN107273175A (zh) * 2016-04-06 2017-10-20 龙芯中科技术有限公司 程序优化方法及装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6588009B1 (en) * 1999-11-29 2003-07-01 Adelante Technologies Nv Method and apparatus for compiling source code using symbolic execution
JP3431568B2 (ja) * 2000-03-30 2003-07-28 松下電器産業株式会社 プログラム変換装置、プログラム変換方法及びプログラム記録媒体
JP2003216434A (ja) * 2002-01-25 2003-07-31 Hewlett Packard Co <Hp> 小型情報機器において、ユーザプロファイルデータの活用により、ダウンロードプログラムの最適化を図る方法およびシステム。
JP2003316583A (ja) * 2002-04-26 2003-11-07 Toshiba Corp サーバ装置及びプログラム最適化方法
US7340726B1 (en) 2003-08-08 2008-03-04 Coverity, Inc. Systems and methods for performing static analysis on source code
US7478367B2 (en) 2005-01-11 2009-01-13 International Business Machines Corporation Dynamic source code analyzer
US20080178149A1 (en) * 2007-01-24 2008-07-24 Peterson James G Inferencing types of variables in a dynamically typed language
JP5466601B2 (ja) * 2010-08-31 2014-04-09 インターナショナル・ビジネス・マシーンズ・コーポレーション コード生成方法、システム及びプログラム
US8769486B2 (en) * 2011-01-06 2014-07-01 The Mathworks, Inc. Dynamically generating statically-typed proxies for dynamically-typed functions
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US9128732B2 (en) * 2012-02-03 2015-09-08 Apple Inc. Selective randomization for non-deterministically compiled code
US8819382B2 (en) * 2012-08-09 2014-08-26 Apple Inc. Split heap garbage collection
US20140173556A1 (en) * 2012-12-17 2014-06-19 Qualcomm Incorporated Systems and methods for selection of specialized functions in dynamically-typed languages

Also Published As

Publication number Publication date
JP2014186728A (ja) 2014-10-02
US9256398B2 (en) 2016-02-09
US20140282381A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
US9785456B2 (en) Metadata-driven dynamic specialization
JP6746156B2 (ja) ソフトウェアリパッケージング防止方法および装置
JP6329274B2 (ja) コンパイラ最適化のためのメモリ参照メタデータ
US9760350B2 (en) Optimistically assuming types in a dynamically typed language
JP6264964B2 (ja) ソフトウェア検証方法及びプロセッサ
JP2015507310A5 (ja)
US8656379B2 (en) Systems and methods for uniquely defining Fortran run time type descriptors for polymorphic entities
US8869128B2 (en) Compiling method, program, and information processing apparatus
EP2862097A2 (en) Optimized execution of dynamic languages
CN112905447B (zh) 一种区块链虚拟机的测试方法和系统
JP2014501412A5 (ja)
JP6375649B2 (ja) ソフトウェアプログラムの効率を高める方法及びプロセッサ
JP2015146179A (ja) テストダブルの生成
JP2019215847A (ja) バッファオーバーフローの低減
US9632816B2 (en) Scaling past the Java virtual machine thread limit
US10496433B2 (en) Modification of context saving functions
CN116113927A (zh) 用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置
JP6476777B2 (ja) テストコンテキストの生成
US9928089B2 (en) Optimizing software code
US20140013312A1 (en) Source level debugging apparatus and method for a reconfigurable processor
US8561027B2 (en) Reflection capability in static programming languages
Kim et al. Automated analysis of industrial embedded software
US10387229B2 (en) Reducing cost of deserialization by skipping unused array regions
CN115168911A (zh) 用于对函数调用提供安全保护的方法、装置及存储介质
Araujo et al. Interprocedural variable liveness analysis

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170823

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170912

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171026

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180306

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180406

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180709

R150 Certificate of patent or registration of utility model

Ref document number: 6375649

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150