JP5643345B2 - アグレッシブ最適化によって施された変更をロールバック可能なアグレッシブ・コード最適化を実行する装置、方法及びコンピュータ・プログラム - Google Patents

アグレッシブ最適化によって施された変更をロールバック可能なアグレッシブ・コード最適化を実行する装置、方法及びコンピュータ・プログラム Download PDF

Info

Publication number
JP5643345B2
JP5643345B2 JP2012556114A JP2012556114A JP5643345B2 JP 5643345 B2 JP5643345 B2 JP 5643345B2 JP 2012556114 A JP2012556114 A JP 2012556114A JP 2012556114 A JP2012556114 A JP 2012556114A JP 5643345 B2 JP5643345 B2 JP 5643345B2
Authority
JP
Japan
Prior art keywords
code
aggressive
version
code version
transaction
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
JP2012556114A
Other languages
English (en)
Other versions
JP2013521572A (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 JP2013521572A publication Critical patent/JP2013521572A/ja
Application granted granted Critical
Publication of JP5643345B2 publication Critical patent/JP5643345B2/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
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1489Generic software techniques for error detection or fault masking through recovery blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1497Details of time redundant execution on a single processing unit

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Retry When Errors Occur (AREA)

Description

本発明は、米国エネルギー省と締結した契約番号B554331の下で、米国政府の援助を受けてなされたものである。米国政府は、本発明の一定の権利を有する。
本願は一般に、改良型データ処理装置及び方法に関するものであり、より詳細には、アグレッシブ最適化によって施された変更をロールバックすることが可能なアグレッシブ・コード最適化を実行するメカニズムに関するものである。
一般に、コンピュータ・システム上でプログラムを実行する場合は、そのプログラムに関するソース・コードのコンパイル及びリンクを行って実行可能コードを生成する。コンパイル・プロセスの一環として、コンパイラは一般にソース・コードに対して1回又は複数回の最適化を実行してより効率的なプログラムの実行を可能にする。コンパイラにはソース・コードを変換してソース・コードの実行を最適化する多くの機会が与えられるが、コンパイラは一般に、コンパイル対象のソース・コードのセマンティクスにより、実行可能な最適化範囲又はかかる最適化を適用し得る場所が制限される。
例えば、実際には殆ど又はまったく起こらない境界シナリオ挙動が、境界条件が存在する可能性が高いとしてコードの最適化を制限する。即ち、特定のソース・コード・ステートメントが特定のコンパイラ最適化によって変換されたときに境界条件が発生する可能性があり、したがって、コンパイラは、実行中に実際に発生することが稀であるにも関わらずこのような境界条件が存在しないとすれば適用できたはずの最適化を適用することができない。かかる境界条件としては、例えばメモリ・ページ境界をまたぎ且つページ・アクセスが可能でない最適化されたコード、即ち、当該メモリ・ページが読み取り又は書き込みあるいはその両方のためにアクセスできないように設定された、又は当該ページが「ページ・アウト」された、つまり外部記憶メディア上に記憶されメイン・メモリ及びページ・テーブルから取り出される、最適化されたコードにソース・コードを変換する。例えば、かかる境界シナリオ挙動の影響を受ける可能性がある1つのコンパイラ最適化は、スカラ・ソース・コードからベクトル・コードへの変換である。コンパイラは、このような変換後もオリジナル・ソース・コードの挙動が保持されるように努める。しかしながら、スカラ・コードからベクトル・コードへの変換を行う際は、オリジナル・スカラ・コードを順次スカラ・コード実行を使用して実行したときは境界条件違反が発生しない可能性があるが、このスカラ・コードを並列実行されるベクトル・コードに変換したときに境界条件違反が発生する可能性がある。その結果、変換コードがソース・コードの元の挙動を保持するという観点で、変換コードが正しく実行されないおそれがある。さらに、マルチ・スレッド環境での実行向けにコードを変換する場合は、変換コードがスレッド・レベル競合条件を発生させる可能性があり、2つ以上のスレッドがデータの同じ部分に並列的にアクセスし、したがって、あるスレッドによるデータの書き込みが他の1つ又は複数のスレッドの動作にエラーを生じさせるおそれがある。
米国特許出願第12/046,764号(公開番号:2009/0235254) 米国特許出願第12/250,575号 米国特許出願第12/543,614号
Herlihy及びMoss "Transactional Memory: Architectural Support for Lock−Free Data Structures," Proceedings of the 20th Annual International Symposium on Computer Architecture,289〜300ページ、1993年5月 Bobba等"Performance Pathologies in Hardware Transactional Memory" ISCA ’07,2007年6月9日〜13日
その結果、コンパイラが変換コードに境界条件違反が発生した可能性があると判定した場合、コンパイラは一般に、当該コード部分がどれだけ離れた位置にあったとしても、変換コードがオリジナル・ソース・コードと異なる形で動作する可能性を回避するために、当該コード部分に対しては最適化を実行しない。したがって、境界条件違反又はオリジナル・ソース・コードと一致しないその他の挙動の可能性がある領域では最適化が適用されない故に、コンパイル・コードの最大限の最適化が得られない。
別法として、ユーザがこのようなコンパイラ挙動を手動で上書きし、コンパイラにこれらのセマンティクスを無視するよう命令することも可能である。その結果、コンパイラは依然として変換を行うことができるが、変換コードの誤動作が発生する可能性がある。さらに、ユーザは、ソース・コード又は変換コード内の特定のセマンティクスが不可欠なものであるかどうか分からず、コンパイラの通常挙動をオーバーライドすることを控える場合が多い。
例示的な一実施形態では、データ処理システムにおいてコンピュータ・コードのアグレッシブ最適化を行う方法を提供する。本方法は、データ処理システム内のプロセッサ上で実行されるコンパイラが、ソース・コード部分に適用すべき最適化を判定するステップを含む。本方法はさらに、コンパイラが、ソース・コード部分に適用される最適化により安全でない最適化コードが得られ、結果として安全でない最適化になることを判定するステップをさらに含む。安全でない最適化コードとは、最適化コードによって生成される新しい例外ソースをもたらすコード、又はオリジナル・コードによって得られるはずの結果とは異なる結果を生成するコードを指す。また、本方法は、コンパイラが、その最適化が安全でない最適化であると判定したことに応答して、ソース・コード部分につき、安全でない最適化が適用されるアグレッシブ・コンパイル・コード・バージョンと、安全でない最適化が適用されないコンサバティブ・コンパイル・コード・バージョンとを生成するステップを含む。さらに、本方法は、コンパイラが、アグレッシブ・コンパイル・コード・バージョンと、コンサバティブ・コンパイル・コード・バージョンとを、データ処理システムに関連する記憶装置に記憶するステップを含む。
別の例示的な実施形態では、データ処理システムにおいてコード部分を実行する方法を提供する。本方法は、コード部分を有する実行可能コードであり、アグレッシブ・コンパイル・コード・バージョン及びコンサバティブ・コンパイル・コード・バージョンを含む実行可能コードを受け取るステップを含む。データ処理システムのプロセッサは、アグレッシブ・コンパイル・コード・バージョンを実行し、アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定する。本方法は、例外条件が発生したことが判定されたことに応答して、コード部分の状態に対する変更をロールバックするステップをさらに含む。さらに、本方法は、コード部分の状態に対する変更がロールバックされたことに応答して、コンサバティブ・コンパイル・コード・バージョンをデータ処理システムのプロセッサにおいて実行するステップを含む。
例示的な他の実施形態では、コンピュータ読み取り可能なプログラムを有するコンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体を含むコンピュータ・プログラムを提供する。コンピュータ読み取り可能なプログラムは、コンピューティング・デバイス上で実行されたときに、本発明に係る方法の例示的な実施形態に関して上述した様々な処理及びそれらの組合せを当該コンピューティング・デバイスに実行させる。
別の例示的な実施形態絵は、システム/装置を提供する。本システム/装置は、1つ又は複数のプロセッサに結合された1つ又は複数のプロセッサ及びメモリを備えることができる。メモリは、1つ又は複数のプロセッサによって実行されたときに、本発明に係る方法の例示的な実施形態に関して上述した様々な処理及びそれらの組合せを当該1つ又は複数のプロセッサに実行させる命令を含むことができる。
本発明の例示的な実施形態に関する以下の詳細な説明を読めば、本発明の上記及び他の特徴及び利点が当業者には理解されるであろう。
例示的な実施形態に関する以下の詳細な説明を添付図面と併せて読めば、本発明ならびに本発明の好ましい使用態様、他の目的及び利点が最もよく理解されるであろう。
例示的な諸実施形態の例示的なメカニズムを実施することが可能なデータ処理システムの例示的なブロック図である。 例示的な諸実施形態の諸態様を実施することが可能なデータ処理システムのプロセッサの例示的なブロック図である。 コード部分に関するオリジナル・ソース・コード・シーケンスを示す図である。 コード部分をベクトル化してベクトル・プロセッサによる実行を効率化し得るコンパイラ最適化後の同コード・シーケンスを示す図である。 図3及び図4に示すコードのベクトル化によって発生する境界条件違反を示す例示的なブロック図である。 例示的な一実施形態による主要な処理要素の例示的なブロック図である。 例示的な諸実施形態によるアグレッシブ最適化技法を使用してソース・コード部分をコンパイルする場合のコンパイラ動作の概要を示すフローチャートである。 例示的な一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。 コード部分のアグレッシブ・コンパイル・バージョンを実行すべきか否かを判定する予測メカニズムを利用する一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。 最適化されたプログラム・バージョンを生成するためにコンパイラによってベクトル化され得るスカラ演算を実行する例示的なソース・プログラムを示す図である。 図10の演算をベクトル化することによってプログラムを最適化するが、プログラムの例外挙動を修正する場合もある、コンパイラが実行可能な変換を示す変換ソース・プログラムの図である。 図11に示した変換による、例示的な一実施形態によるトランザクション内のアグレッシブ・コンパイル・コード・ブロックを示す変換ソース・プログラムの図である。
例示的な諸実施形態は、アグレッシブ・コンパイル・コードによって施される変更のロールバックをサポートするシステム、例えばトランザクション・メモリ構造又は他のタイプのアトミック・オペレーションを利用するシステムにおいて、アグレッシブ・コード最適化を可能にするメカニズムを提供する。いくつかの例示的な実施形態では、例示的な実施形態のメカニズムがシステムのアトミック挙動、例えばトランザクション・ベース・システムのアトミック挙動を利用してアグレッシブ・コード最適化が変換及び最適化されたコードのエラー動作、例えば境界条件違反やスレッド・レベル競合条件等を発生させるかどうかを判定し、それらが発生する場合には、コードの最適化の程度が小さい又は最適化されていないバージョンを優先して、アグレッシブ最適化コードの実行によって施された変更をロールバックする。以下では例示的な実施形態の説明をトランザクション・ベース・システムに基づいて行うが、本発明はそのように限定されるものではなく、本発明の趣旨及び範囲を逸脱しない限り、コードのアグレッシブ・コンパイル・バージョンによって施された変更をロールバックすることが可能な任意のシステム、例えばアトミック・オペレーションをサポートするシステムを使用して、例示的な諸実施形態のメカニズムを実施することができる。
多くのシステムでアトミック・オペレーションが利用されている。アトミック・オペレーションとは、それらが実行されるデータ処理システムから見て単一の処理に見えるように組み合わせることが可能な2つ以上の処理で構成される処理セットを指し、ここでは二通りの可能な結果、即ち成功か失敗かだけが示される。アトミック・オペレーションでは、他の処理セット内の処理がアトミック・オペレーションを含む処理セット内の処理によって変更が施されたことを知らされるのは、全体の処理セットが完了した後である。さらに、アトミック・オペレーションでは、処理セット内のいずれかの処理が失敗した場合は当該処理セット全体が失敗とされ、システムの状態が当該処理セット内のいずれかの処理の実行が開始される以前の状態に復元される。
アトミック・コミット処理とは、互いに異なる1組の変更が単一の処理として適用される処理を指す。すべての変更が適用された場合にアトミック・コミットが成功したという。アトミック・コミットが完了する前に障害が発生した場合は「コミット」がアボートされ、発生しているすべての変更がリバース又はロールバックされる。いずれにせよ、アトミック・コミットはシステムを整合した状態に保つ。アトミック・コミットは、データベース・システムで複数組の変更を一時にコミットする場合に使用されることが多い。アトミック・コミットは、リビジョン制御システムで利用される。リビジョン制御システムでは、アトミック・コミットを使用することにより、すべてのファイルが完全にアップロード及びマージされることを保証しながらファイルのソースに対する複数ファイルの変更のアップロードを制御する。アトミック・コミットは、様々なトランザクション処理システム(ATM、オンライン購入等)でも利用される。トランザクション処理システムでは、異なるシステム上の処理(例えば発注、クレジット・カード・トランザクション、在庫更新)が単一のセットに組み合わされ、1つのグループとして成功又は失敗の結果が得られる。
アトミック・コミットは、トランザクション・メモリ及びスレッド・レベル投機としても知られる投機的マルチ・スレッディングの分野でも有用である。トランザクション・メモリは、一群のロード及びストア命令のアトミック実行を可能にする、即ち(1)トランザクションのすべての命令が無事完了すること、又は(2)トランザクションの命令の影響が生じないことを保証することにより、同時又は並列プログラミングを簡略化しようと試みる。アトミック・トランザクションを用いると、トランザクションの命令は、呼び出しと生成される結果との間にすべて同時に発生するように見える。
ハードウェア・トランザクション・メモリ・システムは、プロセッサ、キャッシュ及びバス・プロトコルを修正して、トランザクション又はトランザクション・ブロック、即ち1つの単位としてアトミック実行される命令群をサポートする。ソフトウェア・トランザクション・メモリは、ソフトウェア・ランタイム・ライブラリ内のトランザクション・メモリ・セマンティクスを提供する。ソフトウェア・トランザクション・メモリをハードウェア・サポートと組み合わせてハイブリッド・トランザクション・メモリ・システムを設計することもできる。
トランザクション・メモリの概念は、Herlihy及びMoss “Transactional Memory: Architectural Support for Lock−Free Data Structures,” Proceedings of the 20th Annual International Symposium on Computer Architecture,289〜300ページ、1993年5月によって導入された。一方、Bobba等“Performance Pathologies in Hardware Transactional Memory” ISCA ’07,2007年6月9日〜13日に記載されているように、プログラマはマルチ・スレッド化されたアプリケーションにおいてトランザクションを呼び出し、トランザクション・メモリ・システムを利用して該トランザクションの実行をグローバル番号順のアトミック実行に見せることができる。Bobba等では、トランザクション・メモリ・システムにおける競合解決ポリシーが論じられている。
トランザクション・メモリ・システムは、複数のトランザクションを同時に投機実行し、競合のないトランザクションだけをコミットすることにより高い性能を追求する。競合は、2つ以上の同時トランザクションが同じデータ要素、例えばワード、ブロック、オブジェクト等にアクセスし、且つ少なくとも一つのアクセスが書き込みである場合に発生する。トランザクション・メモリ・システムは、1つ又は複数のトランザクションを停止することによりいくつかの競合を解決することができる。
投機的マルチ・スレッディングは、命令レベルではなくスレッド・レベルで発生するタイプの投機実行である。投機的マルチ・スレッディングは、複数のスレッドにおける命令のアウト・オブ・オーダー実行を使用してプロセッサの処理速度の向上を図る動的並列化技法である。投機的マルチ・スレッディングでは、スレッド間の依存関係違反がない限り、スレッドによって施された変更をアトミック・コミットすることができる。専用ハードウェアが投機的スレッド・リード(ロード)及びライト(ストア)・データ位置をログに記憶するとともに、実際のデータ依存関係違反があることが示されたスレッド、即ち競合条件に関与するスレッドをアボート、即ちロールバック又はスカッシュ(squash)する。
例示的な諸実施形態のメカニズムを用いると、コンパイラは同じソース・コード部分について2つのコンパイル・バージョンを生成する。ソース・コード部分の第1のコンパイル・バージョンは、境界シナリオ挙動違反、アンダーフロー条件(例えば0の割り算)、オーバーフロー条件(例えば無限の割り算)、スレッド・レベル競合条件等が変換コードで発生する可能性があるか否かに関わらず、コンパイラによってオリジナル・ソース・コードの該当する変換及び最適化がすべて実行されることから、アグレッシブ・コンパイル・コードと称する。最も広義には、アグレッシブ・コンパイル・コードとは、常に有効であるとは限らない該当する変換及び最適化がすべて実行され、且つロールバックを使用してリカバリ可能なすべてのコードを指す。このことは、現時点でまだ知られていない最適化技法にも当てはまる可能性がある。本質的には、コンパイラが違反の発生する可能性を検出した場合の変換のアボート又は不適用に関するコンパイラの通常処理は、このようなソース・コード部分の第1のコンパイル・バージョンを生成するようにオーバーライドされる。
ソース・コード部分の第2のコンパイル・バージョンは、ソース・コードの所期の処理に違反する又は所期の処理から逸脱する最適化、例えば変換コードが境界条件違反やスレッド・レベル競合条件等を発生させる可能性がある最適化がコンパイラによって実行されないことから、コンサバティブ・コンパイル・コードと称する。コンサバティブ・コンパイル・コードは、アグレッシブ・コンパイル・コードと比較した場合に、典型的には該当する利用可能な最適化がすべて適用されるわけではないので、アグレッシブ・コンパイル・コードよりも最適化の程度が小さい。アグレッシブ・コンパイル・コード及びコンサバティブ・コンパイル・コードの例を図10及び図11に示し、以下これらについて説明する。
コンパイル・コードの実行中は、トランザクションの範囲内でアグレッシブ・コンパイル・コードの実行が試行され、例外条件、例えば境界条件違反やスレッド・レベル競合条件等が監視される。かかる例外条件が発生した場合は、制御がトランザクション・マネージャに渡される。トランザクション・メモリは、ハードウェア又はソフトウェアあるいはハードウェアとソフトウェアの組合せの形で実施可能であり、且つ例外条件を発生させたアグレッシブ・コンパイル・コード部分の実行前の状態にコードの実行状態をロールバックするロジックを含む。次いで、トランザクション・メモリは、コンサバティブ・コンパイル・コードを使用してコード部分の再実行を試行する。このようにして、アグレッシブ最適化コードが失敗した場合、即ち例外条件が発生した場合にだけコンサバティブ最適化コードが実行されるようにし、大部分の状況でアグレッシブ・コンパイル・コードの実行を可能にする自動化メカニズムが提供される。
他の例示的な一実施形態では、ロールバック及び再実行処理は、かかる処理の実行に要するプロセッサ・サイクルのオーバーヘッドの観点からコスト高である故に、ロールバックが発生する可能性が高いかどうかを判定する予測メカニズムが提供される。この判定は、履歴ベース予測スキームやコード分析結果等に基づいて行うことができる。アグレッシブ・コンパイル・コードの実行が施行されるのではなくロールバックが実行される可能性が高いと予測されたことに応答して、例示的な諸実施形態のメカニズムは、代わりにコンサバティブ・コンパイル・コードを実行して起り得るロールバック及び再実行処理を回避することができる。
当業者には理解されるように、本発明はシステム、方法又はコンピュータ・プログラムとして実施することができる。したがって、本発明は、全体としてハードウェアの実施形態の形をとることも、全体としてソフトウェア(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)の実施形態の形をとることもでき、ソフトウェアとハードウェアの諸態様を組み合わせた実施形態とすることもできる。本明細書では一般に、これらをすべて「回路」、「モジュール」、又は「システム」と呼ぶ。さらに、本発明の諸態様は、コンピュータ使用可能なプログラム・コードが実装された任意の1つ又は複数のコンピュータ読み取り可能な媒体に実装されるコンピュータ・プログラムの形をとることもできる。
1つ又は複数のコンピュータ読み取り可能な媒体の任意の組合せを利用することもできる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体又はコンピュータ読み取り可能な記憶媒体であってよい。例えば、コンピュータ読み取り可能な媒体は、必ずしもそれだけに限定されるわけではないが、電子系媒体、磁気系媒体、光学系媒体、電磁気系媒体、赤外線系媒体、又は半導体系媒体、装置、デバイス、あるいはこれらの任意の適切な組合せであってよい。コンピュータ読み取り可能な媒体のより具体的な例としては、1つ又は複数の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去再書込可能読み取り専用メモリ(EPROM、又はフラッシュ・メモリ)、光ファイバ、携帯型コンパクト・ディスクROM(CD‐ROM)、光ストレージ・デバイス、磁気ストレージ・デバイス、あるいはこれらの適切な組合せを挙げることができる。本明細書の文脈において、コンピュータ読み取り可能な媒体は、命令実行システム、装置、又はデバイスによってあるいはそれらに関連して使用されるプログラムを収容又は記憶することができる任意の有形媒体であってよい。
コンピュータ使用可能な媒体は、コンピュータ読み取り可能なプログラムが実装され、ベースバンド内又は搬送波の一部として伝搬されるデータ信号を含むことができる。かかる伝搬信号は、必ずしもそれだけに限定されるわけではないが、電磁信号、光信号、あるいはこれらの任意の適切な組合せを含めた様々な形態をとることができる。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体ではないコンピュータ読み取り可能な媒体であって、命令実行システム、装置、又はデバイスによってあるいはそれらに関連して使用されるプログラムを通信し伝搬し又は移送することができる任意のコンピュータ読み取り可能な媒体であってよい。
コンピュータ読み取り可能な媒体上に実装されるコンピュータ・コードは、必ずしもそれだけに限定されるわけではないが、無線、有線、光ファイバ・ケーブル、RF等を含めた任意の適切な媒体を使用して伝送することができる。
本発明の諸態様の動作を実行するコンピュータ・プログラム・コードは、Java(TM)、Smalltalk(TM)、C++等のオブジェクト指向プログラミング言語、及び「C」プログラミング言語や同様のプログラミング言語のような従来の手続き型プログラミング言語を含めた1つ又は複数のプログラミング言語の任意の組合せで書くことができる。上記プログラム・コードは、スタンド・アロン・ソフトウェア・パッケージとしてユーザのコンピュータ上で全体的に実行することも部分的に実行することもでき、ユーザのコンピュータ及び遠隔コンピュータにおいてそれぞれ部分的に実行することも遠隔コンピュータ又はサーバ上で全体的に実行することもできる。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)又は広域ネットワーク(WAN)を含めた任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、あるいは(例えばインターネット・サービス・プロバイダを使用しインターネットを介して)外部のコンピュータに接続することもできる。
以下では本発明の諸実施形態に係る方法、装置(システム)、及びコンピュータ・プログラム製品に関するフローチャート図又はブロック図あるいはその両方を参照して、本発明の諸態様について説明する。フローチャート図又はブロック図あるいはその両方に示される各ブロック、及びフローチャート図又はブロック図あるいはその両方に示されるブロックの組合せは、コンピュータ・プログラム命令によって実行可能であることを理解されたい。これらのコンピュータ・プログラム命令は、コンピュータ又は他のプログラマブル・データ処理装置のプロセッサを介して実行される命令により、フローチャート又はブロック図あるいはその両方に示される1つ又は複数のブロックで指定される機能/動作を実行する手段が提供されるように、汎用コンピュータ又は専用コンピュータのプロセッサ、あるいは機械を生成する他のプログラマブル・データ処理装置のプロセッサに提供することができる。
これらのコンピュータ・プログラム命令は、コンピュータ、他のプログラマブル・データ処理装置、又は他のデバイスに特定の様式で機能するよう指示することが可能なコンピュータ可読媒体に記憶することができ、その結果、フローチャート又はブロック図あるいはその両方に示される1つ又は複数のブロックで指定される機能/動作を実行する命令を含むプログラムが生成されるようにすることもできる。
上記コンピュータ・プログラム命令は、コンピュータ、他のプログラマブル・データ処理装置、又は他のデバイス上にロードすることもでき、その結果、当該コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行される命令によってフローチャート又はブロック図あるいはその両方に示される1つ又は複数のブロックで指定される機能/動作を実行するプロセスが実現されるようなコンピュータ実装プロセスを生成する一連の処理ステップが、当該コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行されるようにすることもできる。
後述の各図面のフローチャート及びブロック図は、本発明の様々な実施形態に係るシステム、方法、及びコンピュータ・プログラム製品の可能な実装環境のアーキテクチャ、機能、及び動作を示す。この点で、フローチャート又はブロック図中の各ブロックは、指定された論理機能(単数又は複数)を実行する1つ又は複数の実行可能な指令を含むモジュール、セグメント、あるいはコード部分を表す可能性がある。いくつかの代替実施形態では、ブロック内に示される機能が図示の順序と異なる順序で実行される可能性があることにも留意されたい。例えば、連続して示される2つのブロックが実際にはほぼ同時に実行されることもあり、関与する機能によっては逆の順序で実行されることもある。また、ブロック図又はフローチャート図あるいはその両方に示される各ブロック、及びブロック図又はフローチャート図あるいはその両方に示されるブロックの組合せは、指定された機能又は動作を実行する専用ハードウェア・ベース・システムによって実行することも、専用ハードウェアとコンピュータ命令の組合せによって実行することも可能であることに留意されたい。
ここで添付図面、特に図1及び図2を参照して、本発明の例示的な諸実施形態を実施することが可能なデータ処理環境について例示する。図1及び図2は単なる例示であり、本発明の諸態様又は諸実施形態を実施することが可能な環境を限定するものではないことを理解されたい。図示の環境には、本発明の趣旨及び範囲から逸脱しない限り様々な修正を施すことができる。
ここで図面を参照すると、図1は、例示的な諸実施形態の各態様を実施することが可能な例示的な分散データ処理システムを示している。分散データ処理システム100は、例示的な諸実施形態の各態様を実施することが可能な複数のコンピュータから成るネットワークを含むことができる。分散データ処理システム100は、少なくとも1つのネットワーク102を含んでおり、ネットワーク102は、分散データ処理システム100内で互いに接続される様々なデバイスとコンピュータとの間の通信リンクを提供するのに使用される媒体である。ネットワーク102は、有線通信リンク、無線通信リンク、光ファイバ・ケーブルのような接続を含むことができる。
図示の例において、ネットワーク102には、サーバ104及びサーバ106ならびに記憶ユニット108が接続されている。また、ネットワーク102には、クライアント110、112、及び114も接続されている。これらのクライアント110、112、及び114は、例えばパーソナル・コンピュータやネットワーク・コンピュータ等であってもよい。図示の例において、サーバ104は、ブート・ファイルのようなデータと、オペレーティング・システム・イメージと、各種アプリケーションとをクライアント110、112、及び114に提供する。図示の例において、クライアント110、112、及び114は、サーバ104のクライアントとなる。分散データ処理システム100は、図示されていない追加的なサーバ、クライアント、及び他のデバイスを含むこともできる。
図示の例において、分散データ処理システム100は、伝送制御プロトコル/インターネット・プロトコル(TCP/IP)プロトコル・スイートを使用して互いに通信し合う世界中のネットワーク及びゲートウェイの集合体を表す、ネットワーク102を有するインターネットである。当該インターネットの中心には、データ及びメッセージを送る数千もの民間用、政府用、教育機関用等のコンピュータ・システムから成る主要なノード又はホスト・コンピュータ間の高速データ通信回線の基幹回線が存在する。言うまでもなく、分散データ処理システム100は、例えばイントラネットや、ローカル・エリア・ネットワーク(LAN)や、広域ネットワーク(WAN)等のいくつかの異なるタイプのネットワークとして実施することもできる。上述のように、図1は一例として意図されたものであり、本発明の様々な実施形態に関するアーキテクチャ上の限定として意図されたものではない。したがって、図1に示される特定の要素は、本発明の例示的な諸実施形態を実施することが可能な環境を限定するものと解釈されるべきではない。
ここで図2を参照すると、例示的な諸実施形態の各態様を実施することが可能な、例示的なデータ処理システムのブロック図が示されている。データ処理システム200は、本発明の例示的な諸実施形態に関する処理を実行するコンピュータ使用可能なコード又は命令を設置することが可能な、図1のホスト110のようなコンピュータの一例である。
図示の例において、データ処理システム200は、ノース・ブリッジ及びメモリ・コントローラ・ハブ(NB/MCH)202と、サウス・ブリッジ及び入力/出力(I/O)コントローラ・ハブ(SB/ICH)204とを含むハブ・アーキテクチャを利用している。処理ユニット206、メイン・メモリ208、及びグラフィックス・プロセッサ210は、NB/MCH202に接続されている。グラフィックス・プロセッサ210は、高速グラフィックス・ポート(AGP)を介してNB/MCH202に接続することができる。
図示の例において、ローカル・エリア・ネットワーク(LAN)アダプタ212は、SB/ICH204に接続されている。オーディオ・アダプタ216、キーボード及びマウス・アダプタ220、モデム222、読み取り専用メモリ(ROM)224、ユニバーサル・シリアル・バス(USB)ポート及び他の通信ポート232、ならびにPCI/PCIeデバイス234は、バス238を介してSB/ICH204に接続されており、ハード・ディスク・ドライブ(HDD)226及びCD‐ROMドライブ230は、バス240を介してSB/ICH204に接続されている。PCI/PCIeデバイスとしては、例えばイーサネット(R)アダプタ、アドイン・カード、及びノート型コンピュータ用PCカード等を挙げることができる。PCIはカード・バス・コントローラを使用する一方、PCIeはこれを使用しない。ROM224は、例えばフラッシュ・バイナリ入力/出力システム(BIOS)等であってもよい。
HDD226及びCD‐ROMドライブ230は、バス240を介してSB/ICH204に接続されている。HDD226及びCD‐ROMドライブ230は、例えば統合ドライブ・エレクトロニクス(IDE)やシリアル・アドバンスト・テクノロジー・アタッチメント(SATA)・インターフェース等を使用することができる。スーパーI/O(SIO)デバイス236は、SB/ICH204に接続することができる。
オペレーティング・システムは、処理ユニット206上で実行される。上記オペレーティング・システムは、図2のデータ処理システム200内の様々なコンポーネントの制御を調整し実行するものである。クライアントとしてのオペレーティング・システムは、Microsoft(R)Windows(R)XPのような市販のオペレーティング・システムであってもよい(「Microsoft」及び「Windows」は、マイクロソフト・コーポレーションの米国その他の国、又はその両方における商標である)。Java(TM)プログラミング・システムのようなオブジェクト指向プログラミング・システムは、上記オペレーティング・システムと連動して動作することができ、データ処理システム200上で実行されているJava(TM)プログラム又はアプリケーションから当該オペレーティング・システムをコールするものである(「Java」は、サン・マイクロシステムズの米国その他の国、又はその両方における商標である)。
サーバとしてのデータ処理システム200は、例えば拡張対話式エグゼクティブ(Advanced Interactive Executive:AIX(R))オペレーティング・システム又はLINUX(R)オペレーティング・システムを実行するIBM(R)eServer(TM)pSeries(R)コンピュータ・システムであってもよい(「eServer」、「pSeries」、及び「AIX」は、インターナショナル・ビジネス・マシーンズ・コーポレーションの米国その他の国、又はその両方における商標であり、「Linux」は、Linus Torvalds氏の米国その他の国、又はその両方における商標である)。データ処理システム200は、複数のプロセッサを処理ユニット206内に含む対称型マルチプロセッサ(SMP)システムであってもよい。別法として、シングル・プロセッサ・システムを採用することもできる。
上記オペレーティング・システム、オブジェクト指向プログラミング・システム、及びアプリケーション又はプログラムに対する命令は、HDD226のような記憶装置上に設置され、処理ユニット206による実行のためにメイン・メモリ208にロードすることができる。本発明の例示的な諸実施形態の各処理は、例えばメイン・メモリ208やROM224等のメモリ内に設置されても、1つ又は複数の周辺デバイス226及び230内に設置されてもよい、コンピュータ使用可能なプログラム・コードを使用して処理ユニット206によって実行することができる。
バス・システムは、図2に示されるバス238やバス240のような1つ又は複数のバスから構成することができる。言うまでもなく、上記バス・システムは、通信ファブリック又はアーキテクチャであって、当該ファブリック又はアーキテクチャに取り付けられた様々なコンポーネント又はデバイス間でデータの転送を行う任意の通信ファブリック又はアーキテクチャを使用して実装することができる。図2のモデム222やネットワーク・アダプタ212のような通信ユニットは、データの送受信に使用される1つ又は複数のデバイスを含むことができる。メモリは、例えば図2のNB/MCH202内で見受けられるようなメイン・メモリ208、ROM224、キャッシュ等であってもよい。
図1及び図2のハードウェアは実装形態に応じて変更され得ることが当業者には理解されるだろう。図1及び図2に示されるハードウェアに加えて又はその代わりに、フラッシュ・メモリや同等の不揮発性メモリ、あるいは光ディスク・ドライブ等、他の内部ハードウェア又は周辺デバイスを使用することもできる。また、本発明の例示的な諸実施形態の各処理は、本発明の趣旨及び範囲から逸脱しない限り、前述のSMPシステム以外のマルチプロセッサ・データ処理システムにも適用することができる。
さらに、データ処理システム200は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話又は他の通信デバイス、携帯情報端末(PDA)等を含めたいくつかの異なるデータ処理システムのうちの任意の形をとることができる。いくつかの実例において、データ処理システム200は、オペレーティング・システム・ファイル又はユーザ生成データあるいはその両方を記憶する不揮発性メモリを提供するフラッシュ・メモリが組み込まれた携帯型コンピューティング・デバイスであってもよい。データ処理システム200は事実上、アーキテクチャ上の限定を伴わない既知の又は将来開発される任意のデータ処理システムとすることができる。
例示的な一実施形態では、データ処理システム200にトランザクション・メモリ・システムが実装される。例示的な一実施形態では、このトランザクション・メモリ・システムを上述のHASTEMシステムとしてもよい。当業界で一般に知られているように、トランザクション・メモリ・システムでは重複しないトランザクションを割り込みなく並列実行することができるが、データ整合性を確保するために、プログラムの各部分をアトミック実行、即ち、トランザクション・メモリ・システムがプログラムにメモリ位置を単一のアトミック・オペレーションとして読み取らせ修正させることが可能となるアトミック・トランザクションを実行する必要がある。トランザクション・メモリ・システムにおいて、トランザクションは単一のスレッドによって実行される有限のステップ・シーケンス又はプログラム命令シーケンスである。トランザクションは、あるトランザクションのステップ又は命令が別のトランザクションのステップ又は命令とインターリーブされないように順次実行することが可能である。トランザクション・メモリ・システムは、これらのメモリ・アクセスが外部の観察者にとってすべての効果が同時に発生するように、即ち、アトミック・セクション又はトランザクションがコミット又はアボートするように見えるようにすることで、アトミック部分のアトミック性、即ちアトミック・トランザクションを保証するメカニズムを提供する。トランザクション・メモリ・システムのより詳しい情報については、本願と同一の譲受人に譲渡された同時係属中の米国特許出願第12/046,764号(公開番号:2009/0235254)を参照されたい。
例示的な諸実施形態は、このトランザクション・メモリ・システムを使用してアグレッシブ・コンパイル・コードを容易にロールバック可能なトランザクションとして実行し、後続のコンサバティブ・コンパイル・コードの再実行を別個のトランザクションとして実行する。ソース・コード部分に関するこれら二種のコンパイル・バージョンを生成するコンパイラは、コンパイル及びリンク処理後のコードを実行するコンパイラとして同じデータ処理デバイス/システム上で実行しても、別個のデータ処理デバイス/システム上で実行してもよい。また、ランザクション・モニタも同じデータ処理デバイス/システム上又は異なるデータ処理デバイス/システム上で実行され、コンパイル及びリンク処理後のコードの実行を監視して、アグレッシブ・コンパイル・コードが失敗したのか、それともアグレッシブ・コンパイル・コードの生成に使用したアグレッシブ最適化により例外条件が発生したのかを判定する。アグレッシブ・コンパイル・コードが失敗した場合又は例外条件が発生した場合は、トランザクション・モニタはそのトランザクションをロールバックし、コード部分のコンサバティブ・コンパイル・バージョンを使用してコード部分の再実行を開始することができる。
例示的な諸実施形態によって解決される課題の理解を深めるために、コード最適化の一例を図3及び図4に示す。図3は、コード部分のオリジナル・ソース・コード・シーケンスを示す。図3のコードは、典型的には非並列的に順次実行される単一命令多重データ(single instruction multiple data:SIMD)コードの一例である。図4は、コード部分をベクトル化してベクトル・プロセッサによる実行を効率化し得るアグレッシブ・コンパイラ最適化後の同コード・シーケンスを示す。具体的には、ベクトル化コードをベクトル要素を使用して並列実行することができる。本願と同一の譲受人に譲渡された同時係属中の米国特許出願第12/250,575号には、SIMDコードをベクトル化コードに変換する1つの可能なメカニズムの説明が記載されている。
図3に示すとおり、オリジナル・コード・シーケンスは配列Aの最初の3つの値にアクセスし、これらの値を最初の3つの配列レジスタXに格納する。この処理は順次実行されるため、境界条件違反が発生する懸念はない。図4は、コンパイラ最適化によって生成され得る上記コードのベクトル化形態を示す。図示のとおり、4つの要素を有するベクトルを使用したベクトル・コードを用いて上記コードをベクトル化すると、配列が4つの要素の各ブロックに読み込まれる。その結果、図5に示すとおり、コードが3つの配列値だけを利用する場合も、ベクトル化により4つの値がロードされる、即ち、コード部分にとって正しいデータを格納しているのがa0、a1、a2のみである場合も、ベクトル化によってa3もロードされることになる。a3がメモリ・ページ境界310を越えてプログラムにアクセス可能でないメモリ・ページ320まで及ぶ場合、又はa3が存在しないページ上に存在し、且つベクトル・ロードがプロセスに割り当てられていない当該メモリ・ページに接する場合は、プログラミング・エラーとなり、オペレーティング・システムによって典型的にはアプリケーションを終了させるアクセス違反条件が示されることになる。プログラム・エラーはマルチ・スレッド化コードでも発生する可能性があり、a3が別のプロセスによって利用されるメモリ位置である場合は、a3をロードすることにより、a3の値をライト・バックしたときにオリジナル・コードに存在しなかったライト更新がa3に誤って上書きされてしまう可能性があることから、データ破損が発生する可能性がある。
上記の例を使用すると、図3に示したオリジナル・コードは境界条件違反にならず、したがって例外は発生しない。しかしながら、コード部分のベクトル化バージョンは境界条件違反になる可能性があり、したがってコードがベクトル要素に対してメモリ・ページ境界をまたぐアクセス試行を行った場合は例外条件が発生する可能性がある。この例外条件はオリジナル・コードには存在しないが、コンパイラが実行する最適化によってもたらされる。したがって、既知のメカニズムによるコンパイラは、典型的にはコードのこの部分に対して上記の最適化を実行すべきでないと判定するであろう。
一方、例示的な諸実施形態によるコンパイラは、最適化により例えば境界条件違反等に起因して例外条件が発生し得るアグレッシブ・コンパイル・コードと、ソース・コードの同じ部分に関するコンサバティブ・コンパイル・コードとを生成する。換言すると、かかる最適化により最適化及びアグレッシブ・コンパイルが施されたコードを実行する際に一定の条件下で例外条件が発生し得ることがコンパイラによって判定されたかどうかに関わらず、通常であればコンパイラによりコード部分に対して適用されない最適化を実際にコード部分に適用して、アグレッシブ・コンパイル・コードを生成する。これらの最適化は、コンサバティブ・コンパイル・コードを生成する際は実行されない。したがって、コンパイラは、最適化によりオリジナル・ソース・コードの所期の操作に違反が生じ、例外条件が発生する可能性があるコンパイル・コードが生成されるおそれがあるとコンパイラが判定したソース・コードの各部分につき、当該コードのアグレッシブ・コンパイル・バージョンとコンサバティブ・コンパイル・バージョンの両方を生成する。
アグレッシブ・コンパイル・コードは、トランザクション・メモリ・システムを使用するデータ処理デバイス/システム上で実行される場合、単一のトランザクションとして実行される。例えば、図4に示したアグレッシブ・コンパイル・コードを使用すると、トランザクションの開始と終了を指定してトランザクションの開始から終了までに提示されるすべての命令を単一のトランザクションとして実行するステートメントをコードに導入することができる。一例として、図4に示したコードは、下記のステートメント(太字部分)が導入されるように変換することによりトランザクションとして実行することができる。
Figure 0005643345
したがって、トランザクションの範囲内(「trasaction_begin」ステートメントから「trasaction_end」ステートメントまで)では、アグレッシブ・コンパイル・コード内のすべての命令が無事完了するか、これらの命令によって施された変更がいずれもコミットされないことになる。トランザクションの実行は、当該データ処理デバイス/システム、又は当該データ処理デバイス/システムを監視している別のデータ処理デバイス/システム内に存在するトランザクション・モニタによって監視される。トランザクション内の1つ又は複数の命令により境界条件違反やスレッド・レベル競合条件等に対応する例外が発生したことでトランザクションが失敗した場合は、トランザクション・モニタはこの失敗を特定し、そのトランザクションの各命令によって施された変更のロールバックを開始する。次いで、トランザクション・モニタは、その特定のコード部分に関するコンサバティブ・コンパイル・コードを呼び出すことにより、当該コード部分の再実行を開始する。同様に、トランザクションを使用することにより、図4に示すように、競合条件の原因となり得るリード・モディファイ・ライト更新にアトミック性が付与されることにより、安全でない可能性がある最適化によってもたらされるスレッド間の干渉による競合条件の発生を防止することが可能となる。
アグレッシブ・コンパイル・コードが失敗したことに応答してコンサバティブ・コンパイル・コードを呼び出すことができるようにするために、トランザクション・モニタは、ソース・コード部分に関するアグレッシブ・コンパイル・コード・バージョンとコンサバティブ・コンパイル・コード・バージョンとをマッピング又は相関付けするデータ構造を備える。トランザクション・モニタは、アグレッシブ・コンパイル・コードが失敗したことに応答して当該データ構造のルックアップ動作を実行し、コンサバティブ・コンパイル・コード・バージョンを指すポインタを取得することにより、該当するコンサバティブ・コンパイル・コード・バージョンに実行を転送することができる。
トランザクション・モニタはさらに、アグレッシブ・コンパイル・コードのすべての失敗をログに記憶することができる。例えば、このログには、アグレッシブ・コンパイル・コード部分の識別子と、コンピュータ・プログラムの実行中に当該アグレッシブ・コンパイル・コード部分が失敗した回数に対応するカウントとを収容してもよい。このログをコンピュータ・プログラムの同じ実行時又は後続の実行時に使用することにより、トランザクション・モニタによる予測的動作を実行することが可能となる。即ち、コード部分のアグレッシブ・コンパイル・コード・バージョンを実行する前に、トランザクション・モニタは、そのアグレッシブ・コンパイル・コードが失敗する可能性が高いかどうかを予測する予測的動作を実行することが可能となる。この予測は、アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて実行することができる。この履歴により失敗の可能性が高いことが示された場合、例えばログ・データ構造内の失敗数が所定数を上回る場合、トランザクション・モニタは、ロールバック及び再実行動作のオーバーヘッドを回避するためにアグレッシブ・コンパイル・コードの代わりにコンサバティブ・コンパイル・コードの実行を開始することができる。そうでなければ、トランザクション・メモリは失敗が予測されない限りアグレッシブ・コンパイル・コードの方を優先的に実行する。この優先的な実行により、コンサバティブ・コンパイル・コードは、アグレッシブ・コンパイル・コードが失敗した場合、又はアグレッシブ・コンパイル・コードが失敗する可能性が高いことが予測された場合にのみ実行される。
図6は、例示的な一実施形態による主要な処理要素の例示的なブロック図である。図6に示すとおり、ソース・コード部分の各種コード・バージョンを生成することに関する例示的な諸実施形態のメカニズムを実施する最適化コード生成ロジック414を有するコンパイラ410が提供される。コンパイラ410は、コンパイル・コード415を、トランザクションとして実行可能なサイズのセクションに分けて生成する。ソース・コード405をこれらのコンパイル・コード・セクションにコンパイルする際に、コンパイラ410は、ソース・コードに最適化を適用することにより当該コードの動作がソース・コードで企図される動作から逸脱する、例えば境界条件挙動が変更される可能性があるかどうかを判定する。即ち、コンパイラ410は、ソース・コードのアグレッシブ最適化によりセマンティクスが改変されることになるかどうかを判定する。かかる判定を行うために、コンパイラ410は、オリジナル・ソース・コードの挙動と異なるようにコードの挙動を変更する可能性が高い最適化のリスト412を備えてもよい。かかるリスト412は、例えば事前観察に基づいてユーザ生成してもよい。リスト412はさらに、コード部分の属性であって、それらの属性を有するコード部分に最適化を適用した場合にセマンティクスの変更が生じる可能性が高い属性を示すインジケーションを含んでもよい。
アグレッシブ最適化を使用してコンパイルされたソース・コード部分がこのような属性を有し、且つアグレッシブ最適化の1つとしてリスト412内の最適化が適用されることがコンパイラ410によって判定された場合、コンパイラ410は、ソース・コードの同じ部分のコンサバティブ・コンパイル・バージョン430も生成することができる。その結果、ソース・コードの同じ部分についてアグレッシブ・コンパイル・バージョン420とコンサバティブ・コンパイル・バージョン430とが生成され、コンパイル・コード415に含められる。コンパイラ410はさらに、アグレッシブ・コンパイル・バージョン420とコンサバティブ・コンパイル・バージョン430との間の対応関係を識別するマッピング・データ構造440内のエントリも生成する。
コンパイラ410は、これらのコンパイル・コードの各バージョン420及び430をコンパイル・コンピュータ・プログラム415内のトランザクションに含める。コンパイル・コードのかかるバージョン420及び430をトランザクションに含めるために、コンパイラ410は、トランザクションを実施するためのコード・ステートメント、即ち、トランザクション・ベースのデータ処理デバイス/システム450によって認識可能なトランザクションの開始及び終了を示すコードを導入する。トランザクション・ベース・コードの生成は当業界で一般に知られているので、ここでは詳細に説明しない。
コンパイラ410は、コード・バージョン420及び430ならびにマッピング・データ構造440を含むコンパイル・コンピュータ・プログラムを、同じ又は異なるデータ処理デバイス/システム450のプロセッサに送る。データ処理デバイス/システム450は、コード・バージョン420及び430を含むコンピュータ・プログラムを実行する。この実行をデータ処理デバイス/システム450のトランザクション・モニタ460の監視ロジック465によって監視することにより、アグレッシブ・コンパイル・コード・バージョン420の実行が失敗したかどうかが判定される。アグレッシブ・コンパイル・コード・バージョン420を含むトランザクションが失敗した場合、トランザクション・モニタ460の監視ロジック465は、そのトランザクションによって施された変更をアボートし、マッピング・データ構造440のルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョン430を決定する。次いで、トランザクション・モニタ460の監視ロジック465は、トランザクションが失敗したアグレッシブ・コンパイル・コード・バージョン420に対応するコンサバティブ・コンパイル・コード・バージョン430に実行を転送する。
アグレッシブ・コンパイル・コード・バージョン420の失敗は、アグレッシブ・コンパイル・コード・バージョン420の実行時に発生する例外に基づいて判定することができる。トランザクション・モニタ460は、アグレッシブ・コンパイル・コード・バージョン420の例外ハンドラ又は割り込みハンドラとしてデータ処理デバイス/システムに登録可能である。例示的な諸実施形態のメカニズムを使用すれば、コンピュータ・プログラムの実行に直ちに割り込むことができ、例外に直ちに対処することが可能となる。別法として、このような例外は、本願と同一の譲受人に譲渡された同時係属中の米国特許出願第12/543,614号に記載されるように、その例外がコンピュータ・プログラムの全体的な動作に実際に影響を及ぼすか否かが判定されるまで放置してもよい。
任意選択で、トランザクション・モニタ460はさらに、トランザクション・モニタ460によって検出された失敗を識別するコンピュータ・コードに対応するログ・データ構造470を維持することもできる。このログ・データ構造470は、コンピュータ・コードのデバッグ目的で使用することができ、また別の実施形態では予測目的で使用することもできる。即ち、トランザクション・モニタ460は、任意選択で、アグレッシブ・コンパイル・コード・バージョン420を実行した場合に失敗する可能性が高いかどうかを予測する予測ロジック467も含むことができる。かかる予測ロジック467は、ログ・データ構造470にログが記憶された失敗履歴を利用してこのような予測を行うことができる。例えば、以前の実行中に同じアグレッシブ・コンパイル・コード・バージョン420が所定の回数失敗している場合、予測ロジック467は、そのアグレッシブ・コンパイル・コード・バージョンが再び失敗する可能性が高いと予測することができる。その結果、トランザクション・モニタ460の監視ロジック465は、当該アグレッシブ・コンパイル・コード・バージョン420の実行を試みる前に、コンサバティブ・コンパイル・バージョン430に実行を転送することができる。
予測的動作をログ・データ構造470に基づくものとして説明してきたが、必ずしもそうする必要はないことに留意されたい。そうではなく、ログ・データ構造470に加えて、予測ロジック467がコード部分の分析又は他の動作を実行して、アグレッシブ・コンパイル・コード・バージョン420が失敗する可能性が高いか否かを予測することも可能である。例えば、アドレスをチェックすることにより、そのアドレスがページ境界に隣接する所定の範囲に含まれるかどうかを判定することができる。一実施形態では、そのページ境界の範囲に含まれるアドレスがページ参照違反を引き起こす可能性があり、コンサバティブ・コンパイル・コード・バージョンに実行を直ちに移行するが、マルチ・スレッド・アプリケーションにおける第2のスレッドとの競合条件に関してトランザクション・ベース・リカバリを使用することを予測することができる。
したがって、このようにすれば、アグレッシブ・コンパイル・コード・バージョンが失敗した場合にも、よりコンサバティブにコンパイルされたコード・バージョンに実行を転送する自動化メカニズムを提供することで、コンパイラ410がソース・コードにアグレッシブ最適化を施すことを可能にすることができる。これにより、既知のコンパイル技法と比較して改善された性能が得られ、最適化の結果セマンティクスが変更され例外が発生するコードが生成される可能性があるアグレッシブ最適化が最小限に抑えられる。ユーザがこのような動作をコンパイラによってオーバーライドする場合には、結果として得られるアグレッシブ最適化コードにより、コンサバティブ・コンパイル・コードを利用する選択肢が存在しないという例外が発生する可能性がある。
図7は、例示的な諸実施形態によるアグレッシブ最適化技法を使用してソース・コード部分をコンパイルする場合のコンパイラ動作の概要を示すフローチャートである。図7に示したとおり、この処理は、コンパイラがソース・コード部分に適用すべき最適化を選択することから開始する(ステップ510)。コンパイラは、選択された最適化により、ソース・コードの当初の処理目的が修正され、オリジナル・ソース・コードのセマンティクスに変更が生じるかどうか、又は最適化コードがオリジナル・ソース・コードで発生しなかった例外を発生させる可能性が高いかどうかを判定する(ステップ520)。例えば、コンパイラは、オリジナル・ソース・コードのベクトル化、パラレルIF変換(parallel if conversion)又は他のタイプの最適化により、オリジナル・ソース・コードに存在しなかった新たな例外をもたらす可能性がある最適化コードとなるかどうかを判定することができる。この判定を、最適化が「安全」であるかどうかを判定すると表現する。
最適化が安全である場合は、ソース・コード部分に対して最適化を実行してアグレッシブ・コンパイル・コードを生成する(ステップ530)。最適化が安全でない場合は、コンパイラは、安全でない最適化が実行されるアグレッシブ・コンパイル・コード・バージョンと、安全でない最適化が実行されないコンサバティブ・コンパイル・コード・バージョンとを生成する(ステップ540)。次いで、コンパイラは、アグレッシブ・コンパイル・コード・バージョンとコンサバティブ・コンパイル・コード・バージョンとの間のマッピングを生成し、このマッピングを、コンパイル・コードを実行するデータ処理システムにコンパイル・コードと共に提供されるマッピング・データ構造に格納する(ステップ550)。このマッピングはその後、アグレッシブ・コンパイル・コードが失敗した場合又は例外を発生させた場合にデータ処理システムのトランザクション・モニタによって使用することができる。その後動作は終了する。図7の動作はここで終了するように図示してあるが、この動作は実際にはソース・コードの各部分について反復可能であり、ソース・コードの各部分に対して実行される最適化毎に反復可能である。
図8は、例示的な一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。図8に示したとおり、この動作は、ソース・コード部分のアグレッシブ・コンパイル・コード・バージョンを単位のトランザクションとして実行することから開始する(ステップ610)。アグレッシブ・コンパイル・コード・バージョンのトランザクションが失敗したかどうかが判定される(ステップ620)。トランザクションが失敗しなかった場合は動作は終了する。トランザクションが失敗した場合は、その失敗がトランザクション・モニタに通知される(ステップ630)。トランザクション・モニタは通知された失敗をログに記憶し(ステップ640)、マッピング・データ構造におけるアグレッシブ・コンパイル・コード・バージョンのルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを特定する(ステップ650)。次いで、トランザクション・モニタはコンサバティブ・コンパイル・コード・バージョンに実行を転送する(ステップ660)。その後処理は終了する。図8の動作はここで終了するように図示してあるが、この動作は同じ又は異なるアグレッシブ・コンパイル・コード・バージョンが実行されるたびに反復可能であることを理解されたい。
図9は、コード部分のアグレッシブ・コンパイル・バージョンを実行すべきか否かを判定する予測メカニズムを利用する一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。図9に示したとおり、この動作は、ログ・データ構造におけるアグレッシブ・コンパイル・コード・バージョンの識別子のルックアップ動作から開始する(ステップ710)。ルックアップ動作の結果に基づいて、アグレッシブ・コンパイル・コード・バージョンが失敗する可能性が高いかどうかが判定される(ステップ720)。失敗する可能性が高くない場合は、実行が単一のトランザクションとしてソース・コード部分のアグレッシブ・コンパイル・コード・バージョンに送られる(ステップ730)。アグレッシブ・コンパイル・コード・バージョンのトランザクションが失敗するかどうかが判定される(ステップ740)。トランザクションが失敗しない場合は処理を終了する。トランザクションが失敗した場合は、その失敗がトランザクション・モニタに通知される(ステップ750)。トランザクション・モニタはその失敗をログに記憶し(ステップ760)、マッピング・データ構造におけるアグレッシブ・コンパイル・コード・バージョンのルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを識別する(ステップ770)。その後、又はステップ720でアグレッシブ・コンパイル・コード・バージョンが失敗する可能性が高いと判定された場合は、トランザクション・モニタはコンサバティブ・コンパイル・コード・バージョンに実行を転送する(ステップ780)。その後処理は終了する。図9の動作もここで終了するように図示してあるが、この動作は同じ又は異なるアグレッシブ・コンパイル・コード・バージョンが実行されるたびに反復可能であることを理解されたい。
例示的な一実施形態では、ソース・コード部分のアグレッシブ・コンパイル・コード・バージョンは、ソース・コード部分のうち、並列実行されるベクトル化バージョンに対応し、コンサバティブ・コンパイル・コード・バージョンは、ソース・コード部分のうち、順次実行されるスカラ・バージョン又は非ベクトル化バージョンに対応する。この例示的な実施形態によれば、並列実行の性能は大部分の実行例で得られるが、ベクトル実行中に例外が検出されたことに応答してアグレッシブ最適化の程度が小さい順次バージョンを実行することにより、スカラ・レベル(配列要素単位)の正しい実行順序が維持される。
図10〜図12は、かかる一実施形態による様々なコード・バージョンを示す。図10はオリジナル・ソース・コードを示す。図11は、図10に示したソース・コード部分のベクトル化バージョン、即ちアグレッシブ・コンパイル・コード・バージョンを示す。図12は、図11に示したアグレッシブ・コンパイル・コード・バージョンのトランザクション・ベース・バージョンを示す。ここで、図11及び図12は、本明細書に含まれる概念を解説するためのソース・コード表現として提示するものである。内部表現は、「intrinsics」、即ち、値のベクトルに対して融合型積和演算を行うvec_fmaのようなマシン動作に対応する擬似関数によって表現される。しかしながら、コンパイラは本明細書の例示的な諸実施形態でソース・コードとして示されるコードを例示的な諸実施形態による他の任意のフォーマットで表現可能であることが、当業者には理解されるであろう。
図10に示すオリジナル・ソース・コードは、配列a、b、cのうちの1つに対するメモリ・アクセス違反に対応する参照例外、又は要素0、1、2又は3に関する特定の要素の要素ベース計算に対応する浮動小数点例外に対応する参照例外を発生させる。一方、図11のベクトル化コードは、同じ例外挙動がいくつかのユーザ・アプリケーションに障害を引き起こすおそれがあることを示さない。例示的な諸実施形態では、図11のベクトル化コードが図12に示したトランザクションに含められ、例外が発生したときは当該トランザクションがアボートされ、その結果すべてのベクトル計算がロールバックされる。次いで、トランザクション・モニタは、当該コードの順次バージョン、例えば図10に対応する順次バージョン(任意選択でトランザクションを使用しない)等に制御を移行する。例外は、オリジナル・プログラムの挙動に対応する要素0、1、2又は3の要素レベルで示される。
したがって、例示的な諸実施形態のメカニズムを用いると、かかる最適化が安全でないと判定され得る場合にも、ベクトル化、パラレルIF変換、マルチ・スレッディング等のアグレッシブ最適化を実行することが可能となる。さらに、実行時に最適化が安全でないことが判明した場合は、その実行をロールバックし、コードの安全なバージョンに転送することができる。
上述のとおり、例示的な諸実施形態のメカニズムは、境界条件違反が発生し得る場合やスレッド・レベル競合条件が発生し得る場合等に使用することができる。スレッド・レベル競合条件の場合は、あるスレッドが並列実行中の別のスレッドによってアクセスされているのと同じメモリ位置に対して書き込みを行い、結果として後者のスレッドの実行にエラーが生じる可能性がある。例示的な諸実施形態のメカニズムによれば、トランザクション・モニタは、競合条件が発生する又は発生する可能性が高いかどうかを判定することができる。また、上述のメカニズムを使用すれば、あるスレッドを別のスレッドのためにアボート又はロールバックすることが可能となる。即ち、あるスレッド上で実行されるアグレッシブ・コンパイル・コード・バージョンをアボート又はロールバックすることで、より順次的に実行されるコンサバティブ・コンパイル・コード・バージョンが実行され、競合条件が回避されるようにすることが可能となる。
上記では例示的な実施形態をトランザクション・ベース・システムで使用する場合について説明してきたが、各実施形態はそのように限定されるものではないことに留意されたい。そうではなく、例示的な諸実施形態によるメカニズムは、アグレッシブ投機を利用するシステムであって、投機が失敗した場合に変更をロールバック又はアボートすることができるように通知を生成する任意のシステムに実装可能である。
上述のとおり、例示的な諸実施形態は、全体としてハードウェアの実施形態の形をとることも、全体としてソフトウェアの実施形態の形をとることもでき、ハードウェア要素とソフトウェア要素の両方を含む実施形態とすることもできることを理解されたい。例示的な一実施形態では、例示的な諸実施形態によるメカニズムが、必ずしもそれだけに限定されるわけではないが、ファームウェア、常駐ソフトウェア、マイクロコード等を含めたソフトウェア又はプログラム・コードの形で実施される。
プログラム・コードの記憶又は実行あるいはその両方を行うのに適したデータ処理システムは、システム・バスを介してメモリ要素に直接又は間接的に連結される少なくとも1つのプロセッサを含む。上記メモリ要素は、上記プログラム・コードの実際の実行中に利用されるローカル・メモリ、バルク・ストレージ、及び実行中にバルク・ストレージからコードを検索しなければならない回数を少なくするために、少なくともいくつかのプログラム・コードを一時的に記憶するキャッシュ・メモリを含むことができる。
入力/出力、即ちI/Oデバイス(必ずしもそれだけに限定されるわけではないが、キーボード、ディスプレイ、ポインティング・デバイス等を含む)は、上記システムに直接連結することも、I/Oコントローラを介して連結することもできる。介在する私設ネットワーク又は公衆ネットワークを通して他のデータ処理システムあるいは遠隔プリンタ又はストレージ・デバイスに、上記データ処理システムが連結できるようにするために、上記システムにネットワーク・アダプタを連結することもできる。モデム、ケーブル・モデム及びイーサネット(R)・カードは、現時点で使用可能なタイプのネットワーク・アダプタのほんのいくつかにすぎない。
本発明の記載は例示及び説明のために提示しているものであって、本発明の実施形態を余すところのないものとし、又は開示の形態に限定することは、本出願人の意図するところではない。当業者には多くの修正及び変更が可能なことは明白であろう。上記実施形態は、本発明の諸原理及び実際の応用例が最良の形で説明されるように、また想定される特定の使用に適するように様々な修正が施された様々な実施形態について当業者が本発明を理解することが可能となるように選択され説明されている。

Claims (17)

  1. データ処理システにおいて実行可能コーを実行する方法であり、
    コード部分を有する実行可能コーであって、該コード部分についてアグレッシブ・コンパイル・コード・バージョ及びコンサバティブ・コンパイル・コード・バージョが提供される実行可能コーを受け取るステップと、
    前記コード部分の前記アグレッシブ・コンパイル・コード・バージョを前記データ処理システのプロセッにおいて実行するステッと、
    前記アグレッシブ・コンパイル・コード・バージョの実行中に例外条件が発生するかどうかを判定するステッと、
    例外条件が発生したという判に応答して前記コード部の状態に対する変更をロールバックするステッと、
    前記コード部の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョを前記データ処理システの前記プロセッにおいて実行するステッと、
    前記実行可能コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行することにより例外条件が発生する可能性が高いかどうかに関する予測を、前記アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて生成するステップと、
    前記予測により、前記アグレッシブ・コンパイル・コード・バージョンを実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップと、
    を含む方法。
  2. 前記アグレッシブ・コンパイル・コード・バージョは、前記データ処理システのトランザクション・モニによって監視される単一のトランザクションとして実行される、請求項1に記載の方法。
  3. 前記アグレッシブ・コンパイル・コード・バージョの実行中に例外条件が発生するかどうかを判定する前記ステッは、前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョを含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定するステップを含み、
    例外条件が発生したという判定に応答して前記コード部の状態に対する変更をロールバックする前記ステッは、前記アグレッシブ・コンパイル・コード・バージョを含む前記トランザクションをロールバックするステップを含み、前記例外条件は前記トランザクションのアボートを発生させる、
    請求項に記載の方法。
  4. 前記コード部の前記状態に対する変更がロールバッされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョを前記データ処理システの前記プロセッにおいて実行する前記ステップは、
    前記トランザクション・モニに関連して、前記アグレッシブ・コンパイル・コード・バージョと前記コンサバティブ・コンパイル・コード・バージョとをマッピングするデータ構を維持するステップと、
    前記トランザクションがアボートしたことに応答して、前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョに基づいて、前記データ構のルックアップ動を実行して、対応するコンサバティブ・コンパイル・コード・バージョを指すポインタを取得するステップと、
    を含む、請求項に記載の方法。
  5. 前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョに対応する、アボートしたトランザクションを、ログ・データ構のログに記憶するステッと、
    前記ログ・データ構に基づいて、前記アグレッシブ・コンパイル・コード・バージョを実行することにより前記アグレッシブ・コンパイル・コード・バージョに関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動を実行するステップと、
    前記アグレッシブ・コンパイル・コード・バージョを実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブ・コンパイル・コード・バージョの代わりに前記コンサバティブ・コンパイル・コード・バージョの実行を開始するステッと、
    をさらに含む、請求項に記載の方法。
  6. 前記アグレッシブ・コンパイル・コード・バージョは、前記コード部の、並列実行されるベクトル化バージョンであり、前記コンサバティブ・コンパイル・コード・バージョは、前記コード部の、順次実行されるスカラ・コード・バージョンである、請求項1に記載の方法。
  7. ンピュータ・プログラムであり、ータ処理システムに
    コード部分を有する実行可能コーであって、該コード部分についてアグレッシブ・コンパイル・コード・バージョ及びコンサバティブ・コンパイル・コード・バージョが提供される実行可能コーを受け取るステップと、
    前記コード部分の前記アグレッシブ・コンパイル・コード・バージョを前記データ処理システのプロセッにおいて実行するステッと、
    前記アグレッシブ・コンパイル・コード・バージョの実行中に例外条件が発生するかどうかを判定するステッと、
    例外条件が発生したという判に応答して前記コード部の状態に対する変更をロールバックするステッと、
    前記コード部の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョを前記データ処理システの前記プロセッにおいて実行するステッと、
    前記実行可能コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行することにより例外条件が発生する可能性が高いかどうかに関する予測を、前記アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて生成するステップと、
    前記予測により、前記アグレッシブ・コンパイル・コード・バージョンを実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップと、
    行させる、コンピュータ・プログラム。
  8. 前記アグレッシブ・コンパイル・コード・バージョは、前記データ処理システのトランザクション・モニによって監視される単一のトランザクションとして実行される、請求項に記載のコンピュータ・プログラム。
  9. 前記アグレッシブ・コンパイル・コード・バージョの実行中に例外条件が発生するかどうかを判定する前記ステッは、前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョを含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定するステップを含み、
    例外条件が発生したという判定に応答して前記コード部の状態に対する変更をロールバックする前記ステッは、前記アグレッシブ・コンパイル・コード・バージョを含む前記トランザクションをロールバックするステップを含み、前記例外条件は前記トランザクションのアボートを発生させる、
    請求項に記載のコンピュータ・プログラム。
  10. 前記コンピュータプログラムは、
    前記トランザクション・モニに関連して、前記アグレッシブ・コンパイル・コード・バージョと前記コンサバティブ・コンパイル・コード・バージョとをマッピングするデータ構を維持するステップと、
    前記トランザクションがアボートしたことに応答して、前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョに基づいて、前記データ構のルックアップ動を実行して、対応するコンサバティブ・コンパイル・コード・バージョを指すポインタを取得するステップと、
    を前記データ処理システに実行させることにより、前記実行可能コード部の前記状態に対する変更がロールバッされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョを前記データ処理システの前記プロセッにおいて実行するステップを、前記データ処理システに実行させる、
    請求項に記載のコンピュータ・プログラム。
  11. 前記コンピュータプログラムはさらに、
    前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョに対応する、アボートしたトランザクションを、ログ・データ構のログに記憶するステッと、
    前記ログ・データ構に基づいて、前記アグレッシブ・コンパイル・コード・バージョを実行することにより前記アグレッシブ・コンパイル・コード・バージョに関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動を実行するステップと、
    前記アグレッシブ・コンパイル・コード・バージョを実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブ・コンパイル・コード・バージョの代わりに前記コンサバティブ・コンパイル・コード・バージョの実行を開始するステッと、
    を前記データ処理システムに実行させる、請求項に記載のコンピュータ・プログラム。
  12. メモリ・ストアの予測型アトミック・コミットを実行する装置であり、
    プロセッと、
    前記プロセッ接続されたメモと、
    を備え、前記プロセッは、
    前記メモにおいて、コード部分を有する実行可能コーであって、該コード部分についてアグレッシブ・コンパイル・コード・バージョ及びコンサバティブ・コンパイル・コード・バージョが提供される実行可能コーを受け取り、
    前記コード部の前記アグレッシブ・コンパイル・コード・バージョを実し、
    前記アグレッシブ・コンパイル・コード・バージョの実行中に例外条件が発生するかどうかを判し、
    例外条件が発生したという判に応答して前記コード部の状態に対する変更をロールバッし、
    前記コード部の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョを実行し、
    前記実行可能コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行することにより例外条件が発生する可能性が高いかどうかに関する予測を、前記アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて生成し、
    前記予測により、前記アグレッシブ・コンパイル・コード・バージョンを実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを実行する、
    ように構成される、装置。
  13. 前記アグレッシブ・コンパイル・コード・バージョは、トランザクション・モニによって監視される単一のトランザクションとして実行される、請求項12に記載の装置。
  14. 前記プロセッは、
    前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョを含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定することにより、前記アグレッシブ・コンパイル・コード・バージョの実行中に例外条件が発生するかどうかを判定し、
    例外条件が発生したという判定に応答して前記コード部の状態に対する変更をロールバッすることは、前記アグレッシブ・コンパイル・コード・バージョを含む前記トランザクションをロールバックすることを含み、前記例外条件は前記トランザクションのアボートを発生させる、
    請求項13に記載の装置。
  15. 前記プロセッは、
    前記トランザクション・モニに関連して、前記アグレッシブ・コンパイル・コード・バージョと前記コンサバティブ・コンパイル・コード・バージョとをマッピングするデータ構を維持し、
    前記トランザクションがアボートしたことに応答して、前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョに基づいて、前記データ構のルックアップ動を実行して、対応するコンサバティブ・コンパイル・コード・バージョを指すポインタを取得することにより、前記実行可能コード部の前記状態に対する変更がロールバッされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョを実行する、
    請求項13に記載の装置。
  16. 前記プロセッはさらに、
    前記トランザクション・モニが、前記アグレッシブ・コンパイル・コード・バージョに対応する、アボートしたトランザクションを、ログ・データ構のログに記憶し、
    前記ログ・データ構に基づいて、前記アグレッシブ・コンパイル・コード・バージョを実行することにより前記アグレッシブ・コンパイル・コード・バージョに関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動を実行し、
    前記アグレッシブ・コンパイル・コード・バージョを実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブ・コンパイル・コード・バージョの代わりに前記コンサバティブ・コンパイル・コード・バージョの実行を開する
    ように構成される、請求項13に記載の装置。
  17. 前記アグレッシブ・コンパイル・コード・バージョは、前記コード部の、並列実行されるベクトル化バージョンであり、前記コンサバティブ・コンパイル・コード・バージョは、前記コード部の、順次実行されるスカラ・コード・バージョンである、請求項12に記載の装置。
JP2012556114A 2010-03-01 2011-02-25 アグレッシブ最適化によって施された変更をロールバック可能なアグレッシブ・コード最適化を実行する装置、方法及びコンピュータ・プログラム Active JP5643345B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/714,877 2010-03-01
US12/714,877 US8495607B2 (en) 2010-03-01 2010-03-01 Performing aggressive code optimization with an ability to rollback changes made by the aggressive optimizations
PCT/US2011/026161 WO2011109230A1 (en) 2010-03-01 2011-02-25 Performing aggressive code optimization with an ability to rollback changes made by the aggressive optimizations

Publications (2)

Publication Number Publication Date
JP2013521572A JP2013521572A (ja) 2013-06-10
JP5643345B2 true JP5643345B2 (ja) 2014-12-17

Family

ID=44505952

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012556114A Active JP5643345B2 (ja) 2010-03-01 2011-02-25 アグレッシブ最適化によって施された変更をロールバック可能なアグレッシブ・コード最適化を実行する装置、方法及びコンピュータ・プログラム

Country Status (6)

Country Link
US (1) US8495607B2 (ja)
JP (1) JP5643345B2 (ja)
CN (1) CN102782644A (ja)
DE (1) DE112011100258T5 (ja)
GB (1) GB2491768B (ja)
WO (1) WO2011109230A1 (ja)

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8739138B2 (en) * 2010-03-05 2014-05-27 International Business Machines Corporation Conflict resolution in applications
US8639945B2 (en) * 2010-05-25 2014-01-28 Via Technologies, Inc. Branch and switch key instruction in a microprocessor that fetches and decrypts encrypted instructions
US9967092B2 (en) 2010-05-25 2018-05-08 Via Technologies, Inc. Key expansion logic using decryption key primitives
US9798898B2 (en) 2010-05-25 2017-10-24 Via Technologies, Inc. Microprocessor with secure execution mode and store key instructions
US9911008B2 (en) 2010-05-25 2018-03-06 Via Technologies, Inc. Microprocessor with on-the-fly switching of decryption keys
US9892283B2 (en) 2010-05-25 2018-02-13 Via Technologies, Inc. Decryption of encrypted instructions using keys selected on basis of instruction fetch address
US20140040858A1 (en) * 2011-04-20 2014-02-06 Freescale Semiconductor, Inc. Method and apparatus for generating resource efficient computer program code
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
WO2013089767A1 (en) 2011-12-16 2013-06-20 Intel Corporation Method and system using exceptions for code specialization in a computer architecture that supports transactions
US9489184B2 (en) * 2011-12-30 2016-11-08 Oracle International Corporation Adaptive selection of programming language versions for compilation of software programs
JP5840014B2 (ja) * 2012-02-01 2016-01-06 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コンパイル方法、プログラムおよび情報処理装置
US9182956B2 (en) * 2012-07-08 2015-11-10 International Business Machines Corporation Flattening conditional statements
US20140189330A1 (en) * 2012-12-27 2014-07-03 Ayal Zaks Optional branches
EP2757468A1 (en) * 2013-01-22 2014-07-23 Siemens Aktiengesellschaft Apparatus and method for managing a software development and maintenance system
WO2014142949A1 (en) * 2013-03-15 2014-09-18 Intel Corporation Identification and management of unsafe optimizations
CN103207786B (zh) * 2013-04-28 2016-03-23 中国人民解放军信息工程大学 渐进式智能回溯向量化代码调优方法
US10061609B2 (en) 2013-06-26 2018-08-28 Intel Corporation Method and system using exceptions for code specialization in a computer architecture that supports transactions
US9524195B2 (en) 2014-02-27 2016-12-20 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
US9158573B2 (en) * 2013-12-12 2015-10-13 International Business Machines Corporation Dynamic predictor for coalescing memory transactions
US9424071B2 (en) 2014-01-24 2016-08-23 International Business Machines Corporation Transaction digest generation during nested transactional execution
US9317379B2 (en) 2014-01-24 2016-04-19 International Business Machines Corporation Using transactional execution for reliability and recovery of transient failures
US9304935B2 (en) 2014-01-24 2016-04-05 International Business Machines Corporation Enhancing reliability of transaction execution by using transaction digests
US9323568B2 (en) 2014-01-24 2016-04-26 International Business Machines Corporation Indicating a low priority transaction
US9465746B2 (en) 2014-01-24 2016-10-11 International Business Machines Corporation Diagnostics for transactional execution errors in reliable transactions
US9424072B2 (en) 2014-02-27 2016-08-23 International Business Machines Corporation Alerting hardware transactions that are about to run out of space
US9430273B2 (en) 2014-02-27 2016-08-30 International Business Machines Corporation Suppressing aborting a transaction beyond a threshold execution duration based on the predicted duration
US9336097B2 (en) 2014-02-27 2016-05-10 International Business Machines Corporation Salvaging hardware transactions
US9645879B2 (en) 2014-02-27 2017-05-09 International Business Machines Corporation Salvaging hardware transactions with instructions
US9329946B2 (en) 2014-02-27 2016-05-03 International Business Machines Corporation Salvaging hardware transactions
US9262206B2 (en) 2014-02-27 2016-02-16 International Business Machines Corporation Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments
US20150242216A1 (en) 2014-02-27 2015-08-27 International Business Machines Corporation Committing hardware transactions that are about to run out of resource
US9442775B2 (en) 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging hardware transactions with instructions to transfer transaction execution control
US9575890B2 (en) 2014-02-27 2017-02-21 International Business Machines Corporation Supporting atomic accumulation with an addressable accumulator
US9465673B2 (en) 2014-02-27 2016-10-11 International Business Machines Corporation Deferral instruction for managing transactional aborts in transactional memory computing environments to complete transaction by deferring disruptive events handling
US9361041B2 (en) 2014-02-27 2016-06-07 International Business Machines Corporation Hint instruction for managing transactional aborts in transactional memory computing environments
US9311178B2 (en) 2014-02-27 2016-04-12 International Business Machines Corporation Salvaging hardware transactions with instructions
US9442853B2 (en) 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging lock elision transactions with instructions to change execution type
US9471371B2 (en) 2014-02-27 2016-10-18 International Business Machines Corporation Dynamic prediction of concurrent hardware transactions resource requirements and allocation
US9411729B2 (en) 2014-02-27 2016-08-09 International Business Machines Corporation Salvaging lock elision transactions
US9524187B2 (en) 2014-03-02 2016-12-20 International Business Machines Corporation Executing instruction with threshold indicating nearing of completion of transaction
US10210005B2 (en) * 2014-03-11 2019-02-19 Iex Group, Inc. Systems and methods for data synchronization and failover management
CA2942359C (en) * 2014-03-11 2020-10-06 Iex Group, Inc. Systems and methods for data synchronization and failover management
US11080139B2 (en) * 2014-03-11 2021-08-03 Iex Group, Inc. Systems and methods for data synchronization and failover management
US11809917B2 (en) 2014-07-14 2023-11-07 Oracle International Corporation Systems and methods for safely subscribing to locks using hardware extensions
US10521277B2 (en) * 2014-07-14 2019-12-31 Oracle International Corporation Systems and methods for safely subscribing to locks using hardware extensions
JP6331865B2 (ja) * 2014-08-13 2018-05-30 富士通株式会社 プログラム最適化方法,プログラム最適化プログラム及びプログラム最適化装置
CN104317850B (zh) * 2014-10-14 2017-11-14 北京国双科技有限公司 数据处理方法和装置
US9921859B2 (en) * 2014-12-12 2018-03-20 The Regents Of The University Of Michigan Runtime compiler environment with dynamic co-located code execution
US10223268B2 (en) 2016-02-23 2019-03-05 International Business Systems Corporation Transactional memory system including cache versioning architecture to implement nested transactions
US20170344350A1 (en) * 2016-05-27 2017-11-30 Oracle International Corporation Triage self-repair for statically compiled executables
US10216496B2 (en) 2016-09-27 2019-02-26 International Business Machines Corporation Dynamic alias checking with transactional memory
CN110121703B (zh) * 2016-12-28 2023-08-01 英特尔公司 用于向量通信的系统和方法
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering
CN108430084B (zh) * 2018-05-09 2021-01-26 清华大学 一种基站切换方法及系统
CN110502317B (zh) * 2018-05-16 2024-03-01 北京京东尚科信息技术有限公司 一种事务管理的方法和装置
WO2021107765A1 (en) * 2019-11-29 2021-06-03 Mimos Berhad System and method for executing heterogeneous compilation
CN111459535A (zh) * 2020-03-19 2020-07-28 深圳木成林科技有限公司 一种分支合并的方法、装置、设备及计算机存储介质

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63155264A (ja) * 1986-12-18 1988-06-28 Fujitsu Ltd ベクトル計算機用言語チユ−ニング処理方式
JPH01177165A (ja) * 1988-01-05 1989-07-13 Nec Corp 配列の定義/引用関係検査方式
JPH01251274A (ja) * 1988-03-31 1989-10-06 Nec Corp コンパイラ装置
US5412784A (en) * 1991-07-15 1995-05-02 International Business Machines Corporation Apparatus for parallelizing serial instruction sequences and creating entry points into parallelized instruction sequences at places other than beginning of particular parallelized instruction sequence
WO1994007204A1 (en) * 1992-09-21 1994-03-31 Uniloc (Singapore) Private Limited System for software registration
US5901308A (en) * 1996-03-18 1999-05-04 Digital Equipment Corporation Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US5930510A (en) * 1996-11-19 1999-07-27 Sun Microsystems, Inc. Method and apparatus for an improved code optimizer for pipelined computers
US6260191B1 (en) * 1997-04-07 2001-07-10 Hewlett-Packard Company User controlled relaxation of optimization constraints related to volatile memory references
US6275938B1 (en) 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US6505300B2 (en) * 1998-06-12 2003-01-07 Microsoft Corporation Method and system for secure running of untrusted content
US6775779B1 (en) * 1999-04-06 2004-08-10 Microsoft Corporation Hierarchical trusted code for content protection in computers
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
US6748589B1 (en) * 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
US7487330B2 (en) 2001-05-02 2009-02-03 International Business Machines Corporations Method and apparatus for transferring control in a computer system with dynamic compilation capability
CA2365375A1 (en) * 2001-12-18 2003-06-18 Ibm Canada Limited-Ibm Canada Limitee Optimizing source code for iterative execution
US7114164B2 (en) * 2003-06-04 2006-09-26 Microsoft Corporation Systems and methods for injecting an exception into a target thread
US20050091494A1 (en) * 2003-10-23 2005-04-28 Hyser Chris D. Method and system for providing an external trusted agent for one or more computer systems
US7380276B2 (en) * 2004-05-20 2008-05-27 Intel Corporation Processor extensions and software verification to support type-safe language environments running with untrusted code
US8381198B2 (en) * 2005-08-15 2013-02-19 Sony Ericsson Mobile Communications Ab Systems, methods and computer program products for safety checking executable application programs in a module
US8799882B2 (en) * 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
US7590806B2 (en) * 2005-12-07 2009-09-15 Microsoft Corporation Filtering of transactional memory operations using associative tables
US7543282B2 (en) * 2006-03-24 2009-06-02 Sun Microsystems, Inc. Method and apparatus for selectively executing different executable code versions which are optimized in different ways
US7865885B2 (en) * 2006-09-27 2011-01-04 Intel Corporation Using transactional memory for precise exception handling in aggressive dynamic binary optimizations
KR20090009612A (ko) 2007-07-20 2009-01-23 엘지디스플레이 주식회사 스퍼터링을 통한 무기절연막 형성방법
US8370823B2 (en) * 2007-08-27 2013-02-05 International Business Machines Corporation Device, system, and method of computer program optimization
US7899997B2 (en) * 2008-03-12 2011-03-01 International Business Machines Corporation Systems and methods for implementing key-based transactional memory conflict detection
US8359587B2 (en) * 2008-05-01 2013-01-22 Oracle America, Inc. Runtime profitability control for speculative automatic parallelization
US8255884B2 (en) * 2008-06-06 2012-08-28 International Business Machines Corporation Optimized scalar promotion with load and splat SIMD instructions
JP2010050150A (ja) * 2008-08-19 2010-03-04 Panasonic Corp 半導体装置及び半導体モジュール

Also Published As

Publication number Publication date
GB2491768B (en) 2014-08-20
GB2491768A (en) 2012-12-12
DE112011100258T5 (de) 2013-04-25
JP2013521572A (ja) 2013-06-10
US20110214016A1 (en) 2011-09-01
US8495607B2 (en) 2013-07-23
GB201217266D0 (en) 2012-11-14
CN102782644A (zh) 2012-11-14
WO2011109230A1 (en) 2011-09-09

Similar Documents

Publication Publication Date Title
JP5643345B2 (ja) アグレッシブ最適化によって施された変更をロールバック可能なアグレッシブ・コード最適化を実行する装置、方法及びコンピュータ・プログラム
TWI681333B (zh) 可靠度提升系統、方法和電腦可讀取媒體
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
US8544022B2 (en) Transactional memory preemption mechanism
US8028133B2 (en) Globally incremented variable or clock based methods and apparatus to implement parallel transactions
JP6218433B2 (ja) トランザクションの完了を容易にするためのプロセッサ内での処理の制限
EP2176763B1 (en) Memory transaction grouping
US8402255B2 (en) Memory-hazard detection and avoidance instructions for vector processing
JP5906325B2 (ja) トランザクションをサポートするコンピューターアーキテクチャにおけるコード特殊化のための例外を用いるプログラム及びコンピューティングデバイス
KR101574007B1 (ko) 트랜잭션 메모리를 구현하기 위한 시스템들 및 방법들
US20080244544A1 (en) Using hardware checkpoints to support software based speculation
US20130013899A1 (en) Using Hardware Transaction Primitives for Implementing Non-Transactional Escape Actions Inside Transactions
US9208081B1 (en) Concurrent object management
JP2015084251A (ja) ソフトウェア・アプリケーションの性能向上
JP2017509083A (ja) バイナリトランザクションベースのプロセッサによるロックエリジョン
JP2021531555A (ja) トランザクショナル比較及び破棄命令
JP2014085839A (ja) 並列実行機構及びその動作方法
US9569185B2 (en) Changing de-optimization guard representation during the compilation process
US6823445B2 (en) Limiting concurrent modification and execution of instructions to a particular type to avoid unexpected results
JP4420055B2 (ja) マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法
US9081607B2 (en) Conditional transaction abort and precise abort handling
Na et al. Javascript parallelizing compiler for exploiting parallelism from data-parallel html5 applications
US9229725B2 (en) Safe conditional-load and conditional-store operations
Yuan et al. Making lock-free data structures verifiable with artificial transactions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131111

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140613

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140624

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140922

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141030

R150 Certificate of patent or registration of utility model

Ref document number: 5643345

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150