"データ処理システム450において実行可能コード415を実行する方法であり、コード部分を有する実行可能コード415であって、該コード部分についてアグレッシブコンパイルコードバージョン420及びコンサバティブコンパイルコードバージョン430が提供される実行可能コード415を受け取るステップと、前記コード部分の前記アグレッシブコンパイルコードバージョン420を前記データ処理システム450のプロセッサ206において実行するステップ610と、前記アグレッシブコンパイルコードバージョン420の実行中に例外条件が発生するかどうかを判定するステップ620と、例外条件が発生したという判定620に応答して前記コード部分415の状態に対する変更をロールバックするステップ630と、前記コード部分415の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブコンパイルコードバージョン430を前記データ処理システム450の前記プロセッサ206において実行するステップ660、780と、を含む方法。前記実行可能コード部分415の前記アグレッシブコンパイルコードバージョン420を実行することにより例外条件が発生する可能性が高いかどうかに関する予測を生成するステップ720と、前記予測720により、前記アグレッシブコンパイルコードバージョン420を実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブコンパイルコードバージョン430を前記データ処理システム450の前記プロセッサ206において実行するステップと、をさらに含む、請求項1に記載の方法。前記アグレッシブコンパイルコードバージョン420は、前記データ処理システム450のトランザクションモニタ460によって監視される単一のトランザクションとして実行される、請求項1に記載の方法。前記アグレッシブコンパイルコードバージョン420の実行中に例外条件が発生するかどうかを判定する前記ステップ620は、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420を含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定するステップを含み、例外条件が発生したという判定に応答して前記コード部分415の状態に対する変更をロールバックする前記ステップ630は、前記アグレッシブコンパイルコードバージョン420を含む前記トランザクションをロールバックするステップを含み、前記例外条件は前記トランザクションのアボートを発生させる、請求項3に記載の方法。前記コード部分415の前記状態に対する変更がロールバック630されたことに応答して、前記コンサバティブコンパイルコードバージョン430を前記データ処理システム450の前記プロセッサ206において実行する前記ステップは、前記トランザクションモニタ460に関連して、前記アグレッシブコンパイルコードバージョン420と前記コンサバティブコンパイルコードバージョン430とをマッピングするデータ構造440を維持するステップと、前記トランザクションがアボートしたことに応答して、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420に基づいて、前記データ構造440のルックアップ動作650、770を実行して、対応するコンサバティブコンパイルコードバージョン430を指すポインタを取得するステップと、を含む、請求項3に記載の方法。前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420に対応する、アボートしたトランザクションを、ログデータ構造470のログに記憶するステップ640、760と、前記ログデータ構造470に基づいて、前記アグレッシブコンパイルコードバージョン420を実行することにより前記アグレッシブコンパイルコードバージョン420に関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動作720を実行するステップと、前記アグレッシブコンパイルコードバージョン420を実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブコンパイルコードバージョン420の代わりに前記コンサバティブコンパイルコードバージョン430の実行を開始するステップ660、780と、をさらに含む、請求項3に記載の方法。前記アグレッシブコンパイルコードバージョン420は、前記コード部分415の、並列実行されるベクトル化バージョンであり、前記コンサバティブコンパイルコードバージョン430は、前記コード部分415の、順次実行されるスカラコードバージョンである、請求項1に記載の方法。コンピュータ読み取り可能なプログラムが記憶されたコンピュータ読み取り可能な媒体208、226、230を備えるコンピュータプログラムであり、前記コンピュータ読み取り可能なプログラムは、それ自体がデータ処理システム450において実行されたときに、コード部分を有する実行可能コード415であって、該コード部分についてアグレッシブコンパイルコードバージョン420及びコンサバティブコンパイルコードバージョン430が提供される実行可能コード415を受け取るステップと、前記コード部分の前記アグレッシブコンパイルコードバージョン420を前記データ処理システム450のプロセッサ206において実行するステップ610と、前記アグレッシブコンパイルコードバージョン420の実行中に例外条件が発生するかどうかを判定するステップ620と、例外条件が発生したという判定620に応答して前記コード部分415の状態に対する変更をロールバックするステップ630と、前記コード部分415の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブコンパイルコードバージョン430を前記データ処理システム450の前記プロセッサ206において実行するステップ660、780と、を前記データ処理システム450に実行させる、コンピュータプログラム。前記コンピュータ読み取り可能なプログラムはさらに、前記実行可能コード部分415の前記アグレッシブコンパイルコードバージョン420を実行することにより例外条件が発生する可能性が高いかどうかに関する予測720を生成するステップと、前記予測720により、前記アグレッシブコンパイルコードバージョン420を実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブコンパイルコードバージョン430を前記データ処理システム450の前記プロセッサ206において実行するステップと、を前記データ処理システムに実行させる、請求項8に記載のコンピュータプログラム。前記アグレッシブコンパイルコードバージョン420は、前記データ処理システム450のトランザクションモニタ460によって監視される単一のトランザクションとして実行される、請求項8に記載のコンピュータプログラム。前記アグレッシブコンパイルコードバージョン420の実行中に例外条件が発生するかどうかを判定する前記ステップ620は、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420を含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定するステップを含み、例外条件が発生したという判定に応答して前記コード部分415の状態に対する変更をロールバックする前記ステップ630は、前記アグレッシブコンパイルコードバージョン420を含む前記トランザクションをロールバックするステップを含み、前記例外条件は前記トランザクションのアボートを発生させる、請求項10に記載のコンピュータプログラム。前記コンピュータ読み取り可能なプログラムは、前記トランザクションモニタ460に関連して、前記アグレッシブコンパイルコードバージョン420と前記コンサバティブコンパイルコードバージョン430とをマッピングするデータ構造440を維持するステップと、前記トランザクションがアボートしたことに応答して、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420に基づいて、前記データ構造440のルックアップ動作650、770を実行して、対応するコンサバティブコンパイルコードバージョン430を指すポインタを取得するステップと、を前記データ処理システム450に実行させることにより、前記実行可能コード部分415の前記状態に対する変更がロールバック630されたことに応答して、前記コンサバティブコンパイルコードバージョン430を前記データ処理システム450の前記プロセッサ206において実行するステップを、前記データ処理システム450に実行させる、請求項10に記載のコンピュータプログラム。前記コンピュータ読み取り可能なプログラムはさらに、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420に対応する、アボートしたトランザクションを、ログデータ構造470のログに記憶するステップ640、760と、前記ログデータ構造470に基づいて、前記アグレッシブコンパイルコードバージョン420を実行することにより前記アグレッシブコンパイルコードバージョン420に関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動作720を実行するステップと、前記アグレッシブコンパイルコードバージョン420を実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブコンパイルコードバージョン420の代わりに前記コンサバティブコンパイルコードバージョン430の実行を開始するステップ660、780と、を前記データ処理システムに実行させる、請求項10に記載のコンピュータプログラム。メモリストアの予測型アトミックコミットを実行する装置であり、プロセッサ206と、前記プロセッサ206に結合されたメモリ208と、を備え、前記プロセッサ206は、前記メモリ208において、コード部分を有する実行可能コード415であって、該コード部分についてアグレッシブコンパイルコードバージョン420及びコンサバティブコンパイルコードバージョン430が提供される実行可能コード415を受け取り、前記コード部分415の前記アグレッシブコンパイルコードバージョン420を実行610し、前記アグレッシブコンパイルコードバージョン420の実行中に例外条件が発生するかどうかを判定620し、例外条件が発生したという判定620に応答して前記コード部分415の状態に対する変更をロールバック630し、前記コード部分415の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブコンパイルコードバージョン430を実行するように構成される、装置。前記プロセッサ206はさらに、前記実行可能コード部分415の前記アグレッシブコンパイルコードバージョン420を実行することにより例外条件が発生する可能性が高いかどうかに関する予測720を生成し、前記予測720により、前記アグレッシブコンパイルコードバージョン420を実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブコンパイルコードバージョン430を実行するように構成される、請求項14に記載の装置。前記アグレッシブコンパイルコードバージョン420は、トランザクションモニタ460によって監視される単一のトランザクションとして実行される、請求項14に記載の装置。前記プロセッサ206は、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420を含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定することにより、前記アグレッシブコンパイルコードバージョン420の実行中に例外条件が発生するかどうかを判定し、例外条件が発生したという判定に応答して前記コード部分415の状態に対する変更をロールバック630することは、前記アグレッシブコンパイルコードバージョン420を含む前記トランザクションをロールバックすることを含み、前記例外条件は前記トランザクションのアボートを発生させる、請求項16に記載の装置。前記プロセッサ206は、前記トランザクションモニタ460に関連して、前記アグレッシブコンパイルコードバージョン420と前記コンサバティブコンパイルコードバージョン430とをマッピングするデータ構造440を維持し、前記トランザクションがアボートしたことに応答して、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420に基づいて、前記データ構造440のルックアップ動作650、770を実行して、対応するコンサバティブコンパイルコードバージョン430を指すポインタを取得することにより、前記実行可能コード部分415の前記状態に対する変更がロールバック630されたことに応答して、前記コンサバティブコンパイルコードバージョン430を実行する、請求項16に記載の装置。前記プロセッサ206はさらに、前記トランザクションモニタ460が、前記アグレッシブコンパイルコードバージョン420に対応する、アボートしたトランザクションを、ログデータ構造470のログに記憶し、前記ログデータ構造470に基づいて、前記アグレッシブコンパイルコードバージョン420を実行することにより前記アグレッシブコンパイルコードバージョン420に関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動作720を実行し、前記アグレッシブコンパイルコードバージョン420を実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブコンパイルコードバージョン420の代わりに前記コンサバティブコンパイルコードバージョン430の実行を開始660、780するように構成される、請求項16に記載の装置。前記アグレッシブコンパイルコードバージョン420は、前記コード部分415の、並列実行されるベクトル化バージョンであり、前記コンサバティブコンパイルコードバージョン430は、前記コード部分415の、順次実行されるスカラコードバージョンである、請求項14に記載の装置。その結果、コンパイラが変換コードに境界条件違反が発生した可能性があると判定した場合、コンパイラは一般に、当該コード部分がどれだけ離れた位置にあったとしても、変換コードがオリジナルソースコードと異なる形で動作する可能性を回避するために、当該コード部分に対しては最適化を実行しない。したがって、境界条件違反又はオリジナルソースコードと一致しないその他の挙動の可能性がある領域では最適化が適用されない故に、コンパイルコードの最大限の最適化が得られない。別法として、ユーザがこのようなコンパイラ挙動を手動で上書きし、コンパイラにこれらのセマンティクスを無視するよう命令することも可能である。その結果、コンパイラは依然として変換を行うことができるが、変換コードの誤動作が発生する可能性がある。さらに、ユーザは、ソースコード又は変換コード内の特定のセマンティクスが不可欠なものであるかどうか分からず、コンパイラの通常挙動をオーバーライドすることを控える場合が多い。例示的な一実施形態では、データ処理システムにおいてコンピュータコードのアグレッシブ最適化を行う方法を提供する。本方法は、データ処理システム内のプロセッサ上で実行されるコンパイラが、ソースコード部分に適用すべき最適化を判定するステップを含む。本方法はさらに、コンパイラが、ソースコード部分に適用される最適化により安全でない最適化コードが得られ、結果として安全でない最適化になることを判定するステップをさらに含む。安全でない最適化コードとは、最適化コードによって生成される新しい例外ソースをもたらすコード、又はオリジナルコードによって得られるはずの結果とは異なる結果を生成するコードを指す。また、本方法は、コンパイラが、その最適化が安全でない最適化であると判定したことに応答して、ソースコード部分につき、安全でない最適化が適用されるアグレッシブコンパイルコードバージョンと、安全でない最適化が適用されないコンサバティブコンパイルコードバージョンとを生成するステップを含む。さらに、本方法は、コンパイラが、アグレッシブコンパイルコードバージョンと、コンサバティブコンパイルコードバージョンとを、データ処理システムに関連する記憶装置に記憶するステップを含む。別の例示的な実施形態では、データ処理システムにおいてコード部分を実行する方法を提供する。本方法は、コード部分を有する実行可能コードであり、アグレッシブコンパイルコードバージョン及びコンサバティブコンパイルコードバージョンを含む実行可能コードを受け取るステップを含む。データ処理システムのプロセッサは、アグレッシブコンパイルコードバージョンを実行し、アグレッシブコンパイルコードバージョンの実行中に例外条件が発生するかどうかを判定する。本方法は、例外条件が発生したことが判定されたことに応答して、コード部分の状態に対する変更をロールバックするステップをさらに含む。さらに、本方法は、コード部分の状態に対する変更がロールバックされたことに応答して、コンサバティブコンパイルコードバージョンをデータ処理システムのプロセッサにおいて実行するステップを含む。例示的な他の実施形態では、コンピュータ読み取り可能なプログラムを有するコンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体を含むコンピュータプログラムを提供する。コンピュータ読み取り可能なプログラムは、コンピューティングデバイス上で実行されたときに、本発明に係る方法の例示的な実施形態に関して上述した様々な処理及びそれらの組合せを当該コンピューティングデバイスに実行させる。別の例示的な実施形態絵は、システム/装置を提供する。本システム/装置は、1つ又は複数のプロセッサに結合された1つ又は複数のプロセッサ及びメモリを備えることができる。メモリは、1つ又は複数のプロセッサによって実行されたときに、本発明に係る方法の例示的な実施形態に関して上述した様々な処理及びそれらの組合せを当該1つ又は複数のプロセッサに実行させる命令を含むことができる。本発明の例示的な実施形態に関する以下の詳細な説明を読めば、本発明の上記及び他の特徴及び利点が当業者には理解されるであろう。例示的な実施形態に関する以下の詳細な説明を添付図面と併せて読めば、本発明ならびに本発明の好ましい使用態様、他の目的及び利点が最もよく理解されるであろう。例示的な諸実施形態は、アグレッシブコンパイルコードによって施される変更のロールバックをサポートするシステム、例えばトランザクションメモリ構造又は他のタイプのアトミックオペレーションを利用するシステムにおいて、アグレッシブコード最適化を可能にするメカニズムを提供する。いくつかの例示的な実施形態では、例示的な実施形態のメカニズムがシステムのアトミック挙動、例えばトランザクションベースシステムのアトミック挙動を利用してアグレッシブコード最適化が変換及び最適化されたコードのエラー動作、例えば境界条件違反やスレッドレベル競合条件等を発生させるかどうかを判定し、それらが発生する場合には、コードの最適化の程度が小さい又は最適化されていないバージョンを優先して、アグレッシブ最適化コードの実行によって施された変更をロールバックする。以下では例示的な実施形態の説明をトランザクションベースシステムに基づいて行うが、本発明はそのように限定されるものではなく、本発明の趣旨及び範囲を逸脱しない限り、コードのアグレッシブコンパイルバージョンによって施された変更をロールバックすることが可能な任意のシステム、例えばアトミックオペレーションをサポートするシステムを使用して、例示的な諸実施形態のメカニズムを実施することができる。多くのシステムでアトミックオペレーションが利用されている。アトミックオペレーションとは、それらが実行されるデータ処理システムから見て単一の処理に見えるように組み合わせることが可能な2つ以上の処理で構成される処理セットを指し、ここでは二通りの可能な結果、即ち成功か失敗かだけが示される。アトミックオペレーションでは、他の処理セット内の処理がアトミックオペレーションを含む処理セット内の処理によって変更が施されたことを知らされるのは、全体の処理セットが完了した後である。さらに、アトミックオペレーションでは、処理セット内のいずれかの処理が失敗した場合は当該処理セット全体が失敗とされ、システムの状態が当該処理セット内のいずれかの処理の実行が開始される以前の状態に復元される。アトミックコミット処理とは、互いに異なる1組の変更が単一の処理として適用される処理を指す。すべての変更が適用された場合にアトミックコミットが成功したという。アトミックコミットが完了する前に障害が発生した場合はコミットがアボートされ、発生しているすべての変更がリバース又はロールバックされる。いずれにせよ、アトミックコミットはシステムを整合した状態に保つ。アトミックコミットは、データベースシステムで複数組の変更を一時にコミットする場合に使用されることが多い。アトミックコミットは、リビジョン制御システムで利用される。リビジョン制御システムでは、アトミックコミットを使用することにより、すべてのファイルが完全にアップロード及びマージされることを保証しながらファイルのソースに対する複数ファイルの変更のアップロードを制御する。アトミックコミットは、様々なトランザクション処理システムATM、オンライン購入等でも利用される。トランザクション処理システムでは、異なるシステム上の処理例えば発注、クレジットカードトランザクション、在庫更新が単一のセットに組み合わされ、1つのグループとして成功又は失敗の結果が得られる。アトミックコミットは、トランザクションメモリ及びスレッドレベル投機としても知られる投機的マルチスレッディングの分野でも有用である。トランザクションメモリは、一群のロード及びストア命令のアトミック実行を可能にする、即ち1トランザクションのすべての命令が無事完了すること、又は2トランザクションの命令の影響が生じないことを保証することにより、同時又は並列プログラミングを簡略化しようと試みる。アトミックトランザクションを用いると、トランザクションの命令は、呼び出しと生成される結果との間にすべて同時に発生するように見える。ハードウェアトランザクションメモリシステムは、プロセッサ、キャッシュ及びバスプロトコルを修正して、トランザクション又はトランザクションブロック、即ち1つの単位としてアトミック実行される命令群をサポートする。ソフトウェアトランザクションメモリは、ソフトウェアランタイムライブラリ内のトランザクションメモリセマンティクスを提供する。ソフトウェアトランザクションメモリをハードウェアサポートと組み合わせてハイブリッドトランザクションメモリシステムを設計することもできる。トランザクションメモリの概念は、Herlihy及びMossTransactionalMemory:ArchitecturalSupportforLock-FreeDataStructures,Proceedingsofthe20thAnnualInternationalSymposiumonComputerArchitecture,289~300ページ、1993年5月によって導入された。一方、Bobba等PerformancePathologiesinHardwareTransactionalMemoryISCA’07,2007年6月9日~13日に記載されているように、プログラマはマルチスレッド化されたアプリケーションにおいてトランザクションを呼び出し、トランザクションメモリシステムを利用して該トランザクションの実行をグローバル番号順のアトミック実行に見せることができる。Bobba等では、トランザクションメモリシステムにおける競合解決ポリシーが論じられている。トランザクションメモリシステムは、複数のトランザクションを同時に投機実行し、競合のないトランザクションだけをコミットすることにより高い性能を追求する。競合は、2つ以上の同時トランザクションが同じデータ要素、例えばワード、ブロック、オブジェクト等にアクセスし、且つ少なくとも一つのアクセスが書き込みである場合に発生する。トランザクションメモリシステムは、1つ又は複数のトランザクションを停止することによりいくつかの競合を解決することができる。投機的マルチスレッディングは、命令レベルではなくスレッドレベルで発生するタイプの投機実行である。投機的マルチスレッディングは、複数のスレッドにおける命令のアウトオブオーダー実行を使用してプロセッサの処理速度の向上を図る動的並列化技法である。投機的マルチスレッディングでは、スレッド間の依存関係違反がない限り、スレッドによって施された変更をアトミックコミットすることができる。専用ハードウェアが投機的スレッドリードロード及びライトストアデータ位置をログに記憶するとともに、実際のデータ依存関係違反があることが示されたスレッド、即ち競合条件に関与するスレッドをアボート、即ちロールバック又はスカッシュsquashする。例示的な諸実施形態のメカニズムを用いると、コンパイラは同じソースコード部分について2つのコンパイルバージョンを生成する。ソースコード部分の第1のコンパイルバージョンは、境界シナリオ挙動違反、アンダーフロー条件例えば0の割り算、オーバーフロー条件例えば無限の割り算、スレッドレベル競合条件等が変換コードで発生する可能性があるか否かに関わらず、コンパイラによってオリジナルソースコードの該当する変換及び最適化がすべて実行されることから、アグレッシブコンパイルコードと称する。最も広義には、アグレッシブコンパイルコードとは、常に有効であるとは限らない該当する変換及び最適化がすべて実行され、且つロールバックを使用してリカバリ可能なすべてのコードを指す。このことは、現時点でまだ知られていない最適化技法にも当てはまる可能性がある。本質的には、コンパイラが違反の発生する可能性を検出した場合の変換のアボート又は不適用に関するコンパイラの通常処理は、このようなソースコード部分の第1のコンパイルバージョンを生成するようにオーバーライドされる。ソースコード部分の第2のコンパイルバージョンは、ソースコードの所期の処理に違反する又は所期の処理から逸脱する最適化、例えば変換コードが境界条件違反やスレッドレベル競合条件等を発生させる可能性がある最適化がコンパイラによって実行されないことから、コンサバティブコンパイルコードと称する。コンサバティブコンパイルコードは、アグレッシブコンパイルコードと比較した場合に、典型的には該当する利用可能な最適化がすべて適用されるわけではないので、アグレッシブコンパイルコードよりも最適化の程度が小さい。アグレッシブコンパイルコード及びコンサバティブコンパイルコードの例を図10及び図11に示し、以下これらについて説明する。コンパイルコードの実行中は、トランザクションの範囲内でアグレッシブコンパイルコードの実行が試行され、例外条件、例えば境界条件違反やスレッドレベル競合条件等が監視される。かかる例外条件が発生した場合は、制御がトランザクションマネージャに渡される。トランザクションメモリは、ハードウェア又はソフトウェアあるいはハードウェアとソフトウェアの組合せの形で実施可能であり、且つ例外条件を発生させたアグレッシブコンパイルコード部分の実行前の状態にコードの実行状態をロールバックするロジックを含む。次いで、トランザクションメモリは、コンサバティブコンパイルコードを使用してコード部分の再実行を試行する。このようにして、アグレッシブ最適化コードが失敗した場合、即ち例外条件が発生した場合にだけコンサバティブ最適化コードが実行されるようにし、大部分の状況でアグレッシブコンパイルコードの実行を可能にする自動化メカニズムが提供される。他の例示的な一実施形態では、ロールバック及び再実行処理は、かかる処理の実行に要するプロセッササイクルのオーバーヘッドの観点からコスト高である故に、ロールバックが発生する可能性が高いかどうかを判定する予測メカニズムが提供される。この判定は、履歴ベース予測スキームやコード分析結果等に基づいて行うことができる。アグレッシブコンパイルコードの実行が施行されるのではなくロールバックが実行される可能性が高いと予測されたことに応答して、例示的な諸実施形態のメカニズムは、代わりにコンサバティブコンパイルコードを実行して起り得るロールバック及び再実行処理を回避することができる。当業者には理解されるように、本発明はシステム、方法又はコンピュータプログラムとして実施することができる。したがって、本発明は、全体としてハードウェアの実施形態の形をとることも、全体としてソフトウェアファームウェア、常駐ソフトウェア、マイクロコード等を含むの実施形態の形をとることもでき、ソフトウェアとハードウェアの諸態様を組み合わせた実施形態とすることもできる。本明細書では一般に、これらをすべて回路、モジュール、又はシステムと呼ぶ。さらに、本発明の諸態様は、コンピュータ使用可能なプログラムコードが実装された任意の1つ又は複数のコンピュータ読み取り可能な媒体に実装されるコンピュータプログラムの形をとることもできる。1つ又は複数のコンピュータ読み取り可能な媒体の任意の組合せを利用することもできる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体又はコンピュータ読み取り可能な記憶媒体であってよい。例えば、コンピュータ読み取り可能な媒体は、必ずしもそれだけに限定されるわけではないが、電子系媒体、磁気系媒体、光学系媒体、電磁気系媒体、赤外線系媒体、又は半導体系媒体、装置、デバイス、あるいはこれらの任意の適切な組合せであってよい。コンピュータ読み取り可能な媒体のより具体的な例としては、1つ又は複数の配線を有する電気接続、携帯型コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み取り専用メモリROM、消去再書込可能読み取り専用メモリEPROM、又はフラッシュメモリ、光ファイバ、携帯型コンパクトディスクROMCD‐ROM、光ストレージデバイス、磁気ストレージデバイス、あるいはこれらの適切な組合せを挙げることができる。本明細書の文脈において、コンピュータ読み取り可能な媒体は、命令実行システム、装置、又はデバイスによってあるいはそれらに関連して使用されるプログラムを収容又は記憶することができる任意の有形媒体であってよい。コンピュータ使用可能な媒体は、コンピュータ読み取り可能なプログラムが実装され、ベースバンド内又は搬送波の一部として伝搬されるデータ信号を含むことができる。かかる伝搬信号は、必ずしもそれだけに限定されるわけではないが、電磁信号、光信号、あるいはこれらの任意の適切な組合せを含めた様々な形態をとることができる。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体ではないコンピュータ読み取り可能な媒体であって、命令実行システム、装置、又はデバイスによってあるいはそれらに関連して使用されるプログラムを通信し伝搬し又は移送することができる任意のコンピュータ読み取り可能な媒体であってよい。コンピュータ読み取り可能な媒体上に実装されるコンピュータコードは、必ずしもそれだけに限定されるわけではないが、無線、有線、光ファイバケーブル、RF等を含めた任意の適切な媒体を使用して伝送することができる。本発明の諸態様の動作を実行するコンピュータプログラムコードは、JavaTM、SmalltalkTM、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/MCH202と、サウスブリッジ及び入力/出力I/OコントローラハブSB/ICH204とを含むハブアーキテクチャを利用している。処理ユニット206、メインメモリ208、及びグラフィックスプロセッサ210は、NB/MCH202に接続されている。グラフィックスプロセッサ210は、高速グラフィックスポートAGPを介してNB/MCH202に接続することができる。図示の例において、ローカルエリアネットワークLANアダプタ212は、SB/ICH204に接続されている。オーディオアダプタ216、キーボード及びマウスアダプタ220、モデム222、読み取り専用メモリROM224、ユニバーサルシリアルバスUSBポート及び他の通信ポート232、ならびにPCI/PCIeデバイス234は、バス238を介してSB/ICH204に接続されており、ハードディスクドライブHDD226及び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/OSIOデバイス236は、SB/ICH204に接続することができる。オペレーティングシステムは、処理ユニット206上で実行される。上記オペレーティングシステムは、図2のデータ処理システム200内の様々なコンポーネントの制御を調整し実行するものである。クライアントとしてのオペレーティングシステムは、MicrosoftRWindowsRXPのような市販のオペレーティングシステムであってもよいMicrosoft及びWindowsは、マイクロソフトコーポレーションの米国その他の国、又はその両方における商標である。JavaTMプログラミングシステムのようなオブジェクト指向プログラミングシステムは、上記オペレーティングシステムと連動して動作することができ、データ処理システム200上で実行されているJavaTMプログラム又はアプリケーションから当該オペレーティングシステムをコールするものであるJavaは、サンマイクロシステムズの米国その他の国、又はその両方における商標である。サーバとしてのデータ処理システム200は、例えば拡張対話式エグゼクティブAdvancedInteractiveExecutive:AIXRオペレーティングシステム又はLINUXRオペレーティングシステムを実行するIBMReServerTMpSeriesRコンピュータシステムであってもよいeServer、pSeries、及びAIXは、インターナショナルビジネスマシーンズコーポレーションの米国その他の国、又はその両方における商標であり、Linuxは、LinusTorvalds氏の米国その他の国、又はその両方における商標である。データ処理システム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のコードは、典型的には非並列的に順次実行される単一命令多重データsingleinstructionmultipledata: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に示したコードは、下記のステートメント太字部分が導入されるように変換することによりトランザクションとして実行することができる。したがって、トランザクションの範囲内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変換parallelifconversion又は他のタイプの最適化により、オリジナルソースコードに存在しなかった新たな例外をもたらす可能性がある最適化コードとなるかどうかを判定することができる。この判定を、最適化が安全であるかどうかを判定すると表現する。最適化が安全である場合は、ソースコード部分に対して最適化を実行してアグレッシブコンパイルコードを生成するステップ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カードは、現時点で使用可能なタイプのネットワークアダプタのほんのいくつかにすぎない。本発明の記載は例示及び説明のために提示しているものであって、本発明の実施形態を余すところのないものとし、又は開示の形態に限定することは、本出願人の意図するところではない。当業者には多くの修正及び変更が可能なことは明白であろう。上記実施形態は、本発明の諸原理及び実際の応用例が最良の形で説明されるように、また想定される特定の使用に適するように様々な修正が施された様々な実施形態について当業者が本発明を理解することが可能となるように選択され説明されている。"