(57)【特許請求の範囲】
【請求項１】
データ処理システムにおいて実行可能コードを実行する方法であり、
コード部分を有する実行可能コードであって、該コード部分についてアグレッシブ・コンパイル・コード・バージョン及びコンサバティブ・コンパイル・コード・バージョンが提供される実行可能コードを受け取るステップと、
前記コード部分の前記アグレッシブ・コンパイル・コード・バージョンを前記データ処理システムのプロセッサにおいて実行するステップと、
前記アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定するステップと、
例外条件が発生したという判定に応答して前記コード部分の状態に対する変更をロールバックするステップと、
前記コード部分の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップと、
前記実行可能コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行することにより例外条件が発生する可能性が高いかどうかに関する予測を、前記アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて生成するステップと、
前記予測により、前記アグレッシブ・コンパイル・コード・バージョンを実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップと、
を含む方法。
【請求項２】
前記アグレッシブ・コンパイル・コード・バージョンは、前記データ処理システムのトランザクション・モニタによって監視される単一のトランザクションとして実行される、請求項１に記載の方法。
【請求項３】
前記アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定する前記ステップは、前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンを含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定するステップを含み、
例外条件が発生したという判定に応答して前記コード部分の状態に対する変更をロールバックする前記ステップは、前記アグレッシブ・コンパイル・コード・バージョンを含む前記トランザクションをロールバックするステップを含み、前記例外条件は前記トランザクションのアボートを発生させる、
請求項２に記載の方法。
【請求項４】
前記コード部分の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行する前記ステップは、
前記トランザクション・モニタに関連して、前記アグレッシブ・コンパイル・コード・バージョンと前記コンサバティブ・コンパイル・コード・バージョンとをマッピングするデータ構造を維持するステップと、
前記トランザクションがアボートしたことに応答して、前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンに基づいて、前記データ構造のルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを指すポインタを取得するステップと、
を含む、請求項２に記載の方法。
【請求項５】
前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンに対応する、アボートしたトランザクションを、ログ・データ構造のログに記憶するステップと、
前記ログ・データ構造に基づいて、前記アグレッシブ・コンパイル・コード・バージョンを実行することにより前記アグレッシブ・コンパイル・コード・バージョンに関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動作を実行するステップと、
前記アグレッシブ・コンパイル・コード・バージョンを実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブ・コンパイル・コード・バージョンの代わりに前記コンサバティブ・コンパイル・コード・バージョンの実行を開始するステップと、
をさらに含む、請求項２に記載の方法。
【請求項６】
前記アグレッシブ・コンパイル・コード・バージョンは、前記コード部分の、並列実行されるベクトル化バージョンであり、前記コンサバティブ・コンパイル・コード・バージョンは、前記コード部分の、順次実行されるスカラ・コード・バージョンである、請求項１に記載の方法。
【請求項７】
コンピュータ・プログラムであり、データ処理システムに、
コード部分を有する実行可能コードであって、該コード部分についてアグレッシブ・コンパイル・コード・バージョン及びコンサバティブ・コンパイル・コード・バージョンが提供される実行可能コードを受け取るステップと、
前記コード部分の前記アグレッシブ・コンパイル・コード・バージョンを前記データ処理システムのプロセッサにおいて実行するステップと、
前記アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定するステップと、
例外条件が発生したという判定に応答して前記コード部分の状態に対する変更をロールバックするステップと、
前記コード部分の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップと、
前記実行可能コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行することにより例外条件が発生する可能性が高いかどうかに関する予測を、前記アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて生成するステップと、
前記予測により、前記アグレッシブ・コンパイル・コード・バージョンを実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップと、
を実行させる、コンピュータ・プログラム。
【請求項８】
前記アグレッシブ・コンパイル・コード・バージョンは、前記データ処理システムのトランザクション・モニタによって監視される単一のトランザクションとして実行される、請求項７に記載のコンピュータ・プログラム。
【請求項９】
前記アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定する前記ステップは、前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンを含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定するステップを含み、
例外条件が発生したという判定に応答して前記コード部分の状態に対する変更をロールバックする前記ステップは、前記アグレッシブ・コンパイル・コード・バージョンを含む前記トランザクションをロールバックするステップを含み、前記例外条件は前記トランザクションのアボートを発生させる、
請求項８に記載のコンピュータ・プログラム。
【請求項１０】
前記コンピュータ・プログラムは、
前記トランザクション・モニタに関連して、前記アグレッシブ・コンパイル・コード・バージョンと前記コンサバティブ・コンパイル・コード・バージョンとをマッピングするデータ構造を維持するステップと、
前記トランザクションがアボートしたことに応答して、前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンに基づいて、前記データ構造のルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを指すポインタを取得するステップと、
を前記データ処理システムに実行させることにより、前記実行可能コード部分の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを前記データ処理システムの前記プロセッサにおいて実行するステップを、前記データ処理システムに実行させる、
請求項８に記載のコンピュータ・プログラム。
【請求項１１】
前記コンピュータ・プログラムはさらに、
前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンに対応する、アボートしたトランザクションを、ログ・データ構造のログに記憶するステップと、
前記ログ・データ構造に基づいて、前記アグレッシブ・コンパイル・コード・バージョンを実行することにより前記アグレッシブ・コンパイル・コード・バージョンに関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動作を実行するステップと、
前記アグレッシブ・コンパイル・コード・バージョンを実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブ・コンパイル・コード・バージョンの代わりに前記コンサバティブ・コンパイル・コード・バージョンの実行を開始するステップと、
を前記データ処理システムに実行させる、請求項８に記載のコンピュータ・プログラム。
【請求項１２】
メモリ・ストアの予測型アトミック・コミットを実行する装置であり、
プロセッサと、
前記プロセッサに接続されたメモリと、
を備え、前記プロセッサは、
前記メモリにおいて、コード部分を有する実行可能コードであって、該コード部分についてアグレッシブ・コンパイル・コード・バージョン及びコンサバティブ・コンパイル・コード・バージョンが提供される実行可能コードを受け取り、
前記コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行し、
前記アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定し、
例外条件が発生したという判定に応答して前記コード部分の状態に対する変更をロールバックし、
前記コード部分の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを実行し、
前記実行可能コード部分の前記アグレッシブ・コンパイル・コード・バージョンを実行することにより例外条件が発生する可能性が高いかどうかに関する予測を、前記アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて生成し、
前記予測により、前記アグレッシブ・コンパイル・コード・バージョンを実行した場合に例外条件が発生する可能性が高いことが示されたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを実行する、
ように構成される、装置。
【請求項１３】
前記アグレッシブ・コンパイル・コード・バージョンは、トランザクション・モニタによって監視される単一のトランザクションとして実行される、請求項１２に記載の装置。
【請求項１４】
前記プロセッサは、
前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンを含む前記トランザクションがアボートしたのかそれとも無事コミットしたのかを判定することにより、前記アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定し、
例外条件が発生したという判定に応答して前記コード部分の状態に対する変更をロールバックすることは、前記アグレッシブ・コンパイル・コード・バージョンを含む前記トランザクションをロールバックすることを含み、前記例外条件は前記トランザクションのアボートを発生させる、
請求項１３に記載の装置。
【請求項１５】
前記プロセッサは、
前記トランザクション・モニタに関連して、前記アグレッシブ・コンパイル・コード・バージョンと前記コンサバティブ・コンパイル・コード・バージョンとをマッピングするデータ構造を維持し、
前記トランザクションがアボートしたことに応答して、前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンに基づいて、前記データ構造のルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを指すポインタを取得することにより、前記実行可能コード部分の前記状態に対する変更がロールバックされたことに応答して、前記コンサバティブ・コンパイル・コード・バージョンを実行する、
請求項１３に記載の装置。
【請求項１６】
前記プロセッサはさらに、
前記トランザクション・モニタが、前記アグレッシブ・コンパイル・コード・バージョンに対応する、アボートしたトランザクションを、ログ・データ構造のログに記憶し、
前記ログ・データ構造に基づいて、前記アグレッシブ・コンパイル・コード・バージョンを実行することにより前記アグレッシブ・コンパイル・コード・バージョンに関連するトランザクションのアボートが発生する可能性が高いかどうかに関する予測動作を実行し、
前記アグレッシブ・コンパイル・コード・バージョンを実行することにより前記関連するトランザクションのアボートが発生する可能性が高いことが予測されたことに応答して、前記アグレッシブ・コンパイル・コード・バージョンの代わりに前記コンサバティブ・コンパイル・コード・バージョンの実行を開始する
ように構成される、請求項１３に記載の装置。
【請求項１７】
前記アグレッシブ・コンパイル・コード・バージョンは、前記コード部分の、並列実行されるベクトル化バージョンであり、前記コンサバティブ・コンパイル・コード・バージョンは、前記コード部分の、順次実行されるスカラ・コード・バージョンである、請求項１２に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、米国エネルギー省と締結した契約番号Ｂ５５４３３１の下で、米国政府の援助を受けてなされたものである。米国政府は、本発明の一定の権利を有する。
【０００２】
本願は一般に、改良型データ処理装置及び方法に関するものであり、より詳細には、アグレッシブ最適化によって施された変更をロールバックすることが可能なアグレッシブ・コード最適化を実行するメカニズムに関するものである。
【背景技術】
【０００３】
一般に、コンピュータ・システム上でプログラムを実行する場合は、そのプログラムに関するソース・コードのコンパイル及びリンクを行って実行可能コードを生成する。コンパイル・プロセスの一環として、コンパイラは一般にソース・コードに対して１回又は複数回の最適化を実行してより効率的なプログラムの実行を可能にする。コンパイラにはソース・コードを変換してソース・コードの実行を最適化する多くの機会が与えられるが、コンパイラは一般に、コンパイル対象のソース・コードのセマンティクスにより、実行可能な最適化範囲又はかかる最適化を適用し得る場所が制限される。
【０００４】
例えば、実際には殆ど又はまったく起こらない境界シナリオ挙動が、境界条件が存在する可能性が高いとしてコードの最適化を制限する。即ち、特定のソース・コード・ステートメントが特定のコンパイラ最適化によって変換されたときに境界条件が発生する可能性があり、したがって、コンパイラは、実行中に実際に発生することが稀であるにも関わらずこのような境界条件が存在しないとすれば適用できたはずの最適化を適用することができない。かかる境界条件としては、例えばメモリ・ページ境界をまたぎ且つページ・アクセスが可能でない最適化されたコード、即ち、当該メモリ・ページが読み取り又は書き込みあるいはその両方のためにアクセスできないように設定された、又は当該ページが「ページ・アウト」された、つまり外部記憶メディア上に記憶されメイン・メモリ及びページ・テーブルから取り出される、最適化されたコードにソース・コードを変換する。例えば、かかる境界シナリオ挙動の影響を受ける可能性がある１つのコンパイラ最適化は、スカラ・ソース・コードからベクトル・コードへの変換である。コンパイラは、このような変換後もオリジナル・ソース・コードの挙動が保持されるように努める。しかしながら、スカラ・コードからベクトル・コードへの変換を行う際は、オリジナル・スカラ・コードを順次スカラ・コード実行を使用して実行したときは境界条件違反が発生しない可能性があるが、このスカラ・コードを並列実行されるベクトル・コードに変換したときに境界条件違反が発生する可能性がある。その結果、変換コードがソース・コードの元の挙動を保持するという観点で、変換コードが正しく実行されないおそれがある。さらに、マルチ・スレッド環境での実行向けにコードを変換する場合は、変換コードがスレッド・レベル競合条件を発生させる可能性があり、２つ以上のスレッドがデータの同じ部分に並列的にアクセスし、したがって、あるスレッドによるデータの書き込みが他の１つ又は複数のスレッドの動作にエラーを生じさせるおそれがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願第１２／０４６，７６４号（公開番号：２００９／０２３５２５４）
【特許文献２】米国特許出願第１２／２５０，５７５号
【特許文献３】米国特許出願第１２／５４３，６１４号
【０００６】
【非特許文献１】Ｈｅｒｌｉｈｙ及びＭｏｓｓ  “Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ：  Ａｒｃｈｉｔｅｃｔｕｒａｌ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｌｏｃｋ−Ｆｒｅｅ  Ｄａｔａ  Ｓｔｒｕｃｔｕｒｅｓ，”  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２０ｔｈ  Ａｎｎｕａｌ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，２８９〜３００ページ、１９９３年５月
【非特許文献２】Ｂｏｂｂａ等“Ｐｅｒｆｏｒｍａｎｃｅ  Ｐａｔｈｏｌｏｇｉｅｓ  ｉｎ  Ｈａｒｄｗａｒｅ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ”  ＩＳＣＡ  ’０７，２００７年６月９日〜１３日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
その結果、コンパイラが変換コードに境界条件違反が発生した可能性があると判定した場合、コンパイラは一般に、当該コード部分がどれだけ離れた位置にあったとしても、変換コードがオリジナル・ソース・コードと異なる形で動作する可能性を回避するために、当該コード部分に対しては最適化を実行しない。したがって、境界条件違反又はオリジナル・ソース・コードと一致しないその他の挙動の可能性がある領域では最適化が適用されない故に、コンパイル・コードの最大限の最適化が得られない。
【０００８】
別法として、ユーザがこのようなコンパイラ挙動を手動で上書きし、コンパイラにこれらのセマンティクスを無視するよう命令することも可能である。その結果、コンパイラは依然として変換を行うことができるが、変換コードの誤動作が発生する可能性がある。さらに、ユーザは、ソース・コード又は変換コード内の特定のセマンティクスが不可欠なものであるかどうか分からず、コンパイラの通常挙動をオーバーライドすることを控える場合が多い。
【課題を解決するための手段】
【０００９】
例示的な一実施形態では、データ処理システムにおいてコンピュータ・コードのアグレッシブ最適化を行う方法を提供する。本方法は、データ処理システム内のプロセッサ上で実行されるコンパイラが、ソース・コード部分に適用すべき最適化を判定するステップを含む。本方法はさらに、コンパイラが、ソース・コード部分に適用される最適化により安全でない最適化コードが得られ、結果として安全でない最適化になることを判定するステップをさらに含む。安全でない最適化コードとは、最適化コードによって生成される新しい例外ソースをもたらすコード、又はオリジナル・コードによって得られるはずの結果とは異なる結果を生成するコードを指す。また、本方法は、コンパイラが、その最適化が安全でない最適化であると判定したことに応答して、ソース・コード部分につき、安全でない最適化が適用されるアグレッシブ・コンパイル・コード・バージョンと、安全でない最適化が適用されないコンサバティブ・コンパイル・コード・バージョンとを生成するステップを含む。さらに、本方法は、コンパイラが、アグレッシブ・コンパイル・コード・バージョンと、コンサバティブ・コンパイル・コード・バージョンとを、データ処理システムに関連する記憶装置に記憶するステップを含む。
【００１０】
別の例示的な実施形態では、データ処理システムにおいてコード部分を実行する方法を提供する。本方法は、コード部分を有する実行可能コードであり、アグレッシブ・コンパイル・コード・バージョン及びコンサバティブ・コンパイル・コード・バージョンを含む実行可能コードを受け取るステップを含む。データ処理システムのプロセッサは、アグレッシブ・コンパイル・コード・バージョンを実行し、アグレッシブ・コンパイル・コード・バージョンの実行中に例外条件が発生するかどうかを判定する。本方法は、例外条件が発生したことが判定されたことに応答して、コード部分の状態に対する変更をロールバックするステップをさらに含む。さらに、本方法は、コード部分の状態に対する変更がロールバックされたことに応答して、コンサバティブ・コンパイル・コード・バージョンをデータ処理システムのプロセッサにおいて実行するステップを含む。
【００１１】
例示的な他の実施形態では、コンピュータ読み取り可能なプログラムを有するコンピュータ使用可能な媒体又はコンピュータ読み取り可能な媒体を含むコンピュータ・プログラムを提供する。コンピュータ読み取り可能なプログラムは、コンピューティング・デバイス上で実行されたときに、本発明に係る方法の例示的な実施形態に関して上述した様々な処理及びそれらの組合せを当該コンピューティング・デバイスに実行させる。
【００１２】
別の例示的な実施形態絵は、システム／装置を提供する。本システム／装置は、１つ又は複数のプロセッサに結合された１つ又は複数のプロセッサ及びメモリを備えることができる。メモリは、１つ又は複数のプロセッサによって実行されたときに、本発明に係る方法の例示的な実施形態に関して上述した様々な処理及びそれらの組合せを当該１つ又は複数のプロセッサに実行させる命令を含むことができる。
【００１３】
本発明の例示的な実施形態に関する以下の詳細な説明を読めば、本発明の上記及び他の特徴及び利点が当業者には理解されるであろう。
【００１４】
例示的な実施形態に関する以下の詳細な説明を添付図面と併せて読めば、本発明ならびに本発明の好ましい使用態様、他の目的及び利点が最もよく理解されるであろう。
【図面の簡単な説明】
【００１５】
【図１】例示的な諸実施形態の例示的なメカニズムを実施することが可能なデータ処理システムの例示的なブロック図である。
【図２】例示的な諸実施形態の諸態様を実施することが可能なデータ処理システムのプロセッサの例示的なブロック図である。
【図３】コード部分に関するオリジナル・ソース・コード・シーケンスを示す図である。
【図４】コード部分をベクトル化してベクトル・プロセッサによる実行を効率化し得るコンパイラ最適化後の同コード・シーケンスを示す図である。
【図５】図３及び図４に示すコードのベクトル化によって発生する境界条件違反を示す例示的なブロック図である。
【図６】例示的な一実施形態による主要な処理要素の例示的なブロック図である。
【図７】例示的な諸実施形態によるアグレッシブ最適化技法を使用してソース・コード部分をコンパイルする場合のコンパイラ動作の概要を示すフローチャートである。
【図８】例示的な一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。
【図９】コード部分のアグレッシブ・コンパイル・バージョンを実行すべきか否かを判定する予測メカニズムを利用する一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。
【図１０】最適化されたプログラム・バージョンを生成するためにコンパイラによってベクトル化され得るスカラ演算を実行する例示的なソース・プログラムを示す図である。
【図１１】図１０の演算をベクトル化することによってプログラムを最適化するが、プログラムの例外挙動を修正する場合もある、コンパイラが実行可能な変換を示す変換ソース・プログラムの図である。
【図１２】図１１に示した変換による、例示的な一実施形態によるトランザクション内のアグレッシブ・コンパイル・コード・ブロックを示す変換ソース・プログラムの図である。
【発明を実施するための形態】
【００１６】
例示的な諸実施形態は、アグレッシブ・コンパイル・コードによって施される変更のロールバックをサポートするシステム、例えばトランザクション・メモリ構造又は他のタイプのアトミック・オペレーションを利用するシステムにおいて、アグレッシブ・コード最適化を可能にするメカニズムを提供する。いくつかの例示的な実施形態では、例示的な実施形態のメカニズムがシステムのアトミック挙動、例えばトランザクション・ベース・システムのアトミック挙動を利用してアグレッシブ・コード最適化が変換及び最適化されたコードのエラー動作、例えば境界条件違反やスレッド・レベル競合条件等を発生させるかどうかを判定し、それらが発生する場合には、コードの最適化の程度が小さい又は最適化されていないバージョンを優先して、アグレッシブ最適化コードの実行によって施された変更をロールバックする。以下では例示的な実施形態の説明をトランザクション・ベース・システムに基づいて行うが、本発明はそのように限定されるものではなく、本発明の趣旨及び範囲を逸脱しない限り、コードのアグレッシブ・コンパイル・バージョンによって施された変更をロールバックすることが可能な任意のシステム、例えばアトミック・オペレーションをサポートするシステムを使用して、例示的な諸実施形態のメカニズムを実施することができる。
【００１７】
多くのシステムでアトミック・オペレーションが利用されている。アトミック・オペレーションとは、それらが実行されるデータ処理システムから見て単一の処理に見えるように組み合わせることが可能な２つ以上の処理で構成される処理セットを指し、ここでは二通りの可能な結果、即ち成功か失敗かだけが示される。アトミック・オペレーションでは、他の処理セット内の処理がアトミック・オペレーションを含む処理セット内の処理によって変更が施されたことを知らされるのは、全体の処理セットが完了した後である。さらに、アトミック・オペレーションでは、処理セット内のいずれかの処理が失敗した場合は当該処理セット全体が失敗とされ、システムの状態が当該処理セット内のいずれかの処理の実行が開始される以前の状態に復元される。
【００１８】
アトミック・コミット処理とは、互いに異なる１組の変更が単一の処理として適用される処理を指す。すべての変更が適用された場合にアトミック・コミットが成功したという。アトミック・コミットが完了する前に障害が発生した場合は「コミット」がアボートされ、発生しているすべての変更がリバース又はロールバックされる。いずれにせよ、アトミック・コミットはシステムを整合した状態に保つ。アトミック・コミットは、データベース・システムで複数組の変更を一時にコミットする場合に使用されることが多い。アトミック・コミットは、リビジョン制御システムで利用される。リビジョン制御システムでは、アトミック・コミットを使用することにより、すべてのファイルが完全にアップロード及びマージされることを保証しながらファイルのソースに対する複数ファイルの変更のアップロードを制御する。アトミック・コミットは、様々なトランザクション処理システム（ＡＴＭ、オンライン購入等）でも利用される。トランザクション処理システムでは、異なるシステム上の処理（例えば発注、クレジット・カード・トランザクション、在庫更新）が単一のセットに組み合わされ、１つのグループとして成功又は失敗の結果が得られる。
【００１９】
アトミック・コミットは、トランザクション・メモリ及びスレッド・レベル投機としても知られる投機的マルチ・スレッディングの分野でも有用である。トランザクション・メモリは、一群のロード及びストア命令のアトミック実行を可能にする、即ち（１）トランザクションのすべての命令が無事完了すること、又は（２）トランザクションの命令の影響が生じないことを保証することにより、同時又は並列プログラミングを簡略化しようと試みる。アトミック・トランザクションを用いると、トランザクションの命令は、呼び出しと生成される結果との間にすべて同時に発生するように見える。
【００２０】
ハードウェア・トランザクション・メモリ・システムは、プロセッサ、キャッシュ及びバス・プロトコルを修正して、トランザクション又はトランザクション・ブロック、即ち１つの単位としてアトミック実行される命令群をサポートする。ソフトウェア・トランザクション・メモリは、ソフトウェア・ランタイム・ライブラリ内のトランザクション・メモリ・セマンティクスを提供する。ソフトウェア・トランザクション・メモリをハードウェア・サポートと組み合わせてハイブリッド・トランザクション・メモリ・システムを設計することもできる。
【００２１】
トランザクション・メモリの概念は、Ｈｅｒｌｉｈｙ及びＭｏｓｓ  “Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ：  Ａｒｃｈｉｔｅｃｔｕｒａｌ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｌｏｃｋ−Ｆｒｅｅ  Ｄａｔａ  Ｓｔｒｕｃｔｕｒｅｓ，”  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２０ｔｈ  Ａｎｎｕａｌ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，２８９〜３００ページ、１９９３年５月によって導入された。一方、Ｂｏｂｂａ等“Ｐｅｒｆｏｒｍａｎｃｅ  Ｐａｔｈｏｌｏｇｉｅｓ  ｉｎ  Ｈａｒｄｗａｒｅ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ”  ＩＳＣＡ  ’０７，２００７年６月９日〜１３日に記載されているように、プログラマはマルチ・スレッド化されたアプリケーションにおいてトランザクションを呼び出し、トランザクション・メモリ・システムを利用して該トランザクションの実行をグローバル番号順のアトミック実行に見せることができる。Ｂｏｂｂａ等では、トランザクション・メモリ・システムにおける競合解決ポリシーが論じられている。
【００２２】
トランザクション・メモリ・システムは、複数のトランザクションを同時に投機実行し、競合のないトランザクションだけをコミットすることにより高い性能を追求する。競合は、２つ以上の同時トランザクションが同じデータ要素、例えばワード、ブロック、オブジェクト等にアクセスし、且つ少なくとも一つのアクセスが書き込みである場合に発生する。トランザクション・メモリ・システムは、１つ又は複数のトランザクションを停止することによりいくつかの競合を解決することができる。
【００２３】
投機的マルチ・スレッディングは、命令レベルではなくスレッド・レベルで発生するタイプの投機実行である。投機的マルチ・スレッディングは、複数のスレッドにおける命令のアウト・オブ・オーダー実行を使用してプロセッサの処理速度の向上を図る動的並列化技法である。投機的マルチ・スレッディングでは、スレッド間の依存関係違反がない限り、スレッドによって施された変更をアトミック・コミットすることができる。専用ハードウェアが投機的スレッド・リード（ロード）及びライト（ストア）・データ位置をログに記憶するとともに、実際のデータ依存関係違反があることが示されたスレッド、即ち競合条件に関与するスレッドをアボート、即ちロールバック又はスカッシュ（ｓｑｕａｓｈ）する。
【００２４】
例示的な諸実施形態のメカニズムを用いると、コンパイラは同じソース・コード部分について２つのコンパイル・バージョンを生成する。ソース・コード部分の第１のコンパイル・バージョンは、境界シナリオ挙動違反、アンダーフロー条件（例えば０の割り算）、オーバーフロー条件（例えば無限の割り算）、スレッド・レベル競合条件等が変換コードで発生する可能性があるか否かに関わらず、コンパイラによってオリジナル・ソース・コードの該当する変換及び最適化がすべて実行されることから、アグレッシブ・コンパイル・コードと称する。最も広義には、アグレッシブ・コンパイル・コードとは、常に有効であるとは限らない該当する変換及び最適化がすべて実行され、且つロールバックを使用してリカバリ可能なすべてのコードを指す。このことは、現時点でまだ知られていない最適化技法にも当てはまる可能性がある。本質的には、コンパイラが違反の発生する可能性を検出した場合の変換のアボート又は不適用に関するコンパイラの通常処理は、このようなソース・コード部分の第１のコンパイル・バージョンを生成するようにオーバーライドされる。
【００２５】
ソース・コード部分の第２のコンパイル・バージョンは、ソース・コードの所期の処理に違反する又は所期の処理から逸脱する最適化、例えば変換コードが境界条件違反やスレッド・レベル競合条件等を発生させる可能性がある最適化がコンパイラによって実行されないことから、コンサバティブ・コンパイル・コードと称する。コンサバティブ・コンパイル・コードは、アグレッシブ・コンパイル・コードと比較した場合に、典型的には該当する利用可能な最適化がすべて適用されるわけではないので、アグレッシブ・コンパイル・コードよりも最適化の程度が小さい。アグレッシブ・コンパイル・コード及びコンサバティブ・コンパイル・コードの例を図１０及び図１１に示し、以下これらについて説明する。
【００２６】
コンパイル・コードの実行中は、トランザクションの範囲内でアグレッシブ・コンパイル・コードの実行が試行され、例外条件、例えば境界条件違反やスレッド・レベル競合条件等が監視される。かかる例外条件が発生した場合は、制御がトランザクション・マネージャに渡される。トランザクション・メモリは、ハードウェア又はソフトウェアあるいはハードウェアとソフトウェアの組合せの形で実施可能であり、且つ例外条件を発生させたアグレッシブ・コンパイル・コード部分の実行前の状態にコードの実行状態をロールバックするロジックを含む。次いで、トランザクション・メモリは、コンサバティブ・コンパイル・コードを使用してコード部分の再実行を試行する。このようにして、アグレッシブ最適化コードが失敗した場合、即ち例外条件が発生した場合にだけコンサバティブ最適化コードが実行されるようにし、大部分の状況でアグレッシブ・コンパイル・コードの実行を可能にする自動化メカニズムが提供される。
【００２７】
他の例示的な一実施形態では、ロールバック及び再実行処理は、かかる処理の実行に要するプロセッサ・サイクルのオーバーヘッドの観点からコスト高である故に、ロールバックが発生する可能性が高いかどうかを判定する予測メカニズムが提供される。この判定は、履歴ベース予測スキームやコード分析結果等に基づいて行うことができる。アグレッシブ・コンパイル・コードの実行が施行されるのではなくロールバックが実行される可能性が高いと予測されたことに応答して、例示的な諸実施形態のメカニズムは、代わりにコンサバティブ・コンパイル・コードを実行して起り得るロールバック及び再実行処理を回避することができる。
【００２８】
当業者には理解されるように、本発明はシステム、方法又はコンピュータ・プログラムとして実施することができる。したがって、本発明は、全体としてハードウェアの実施形態の形をとることも、全体としてソフトウェア（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）の実施形態の形をとることもでき、ソフトウェアとハードウェアの諸態様を組み合わせた実施形態とすることもできる。本明細書では一般に、これらをすべて「回路」、「モジュール」、又は「システム」と呼ぶ。さらに、本発明の諸態様は、コンピュータ使用可能なプログラム・コードが実装された任意の１つ又は複数のコンピュータ読み取り可能な媒体に実装されるコンピュータ・プログラムの形をとることもできる。
【００２９】
１つ又は複数のコンピュータ読み取り可能な媒体の任意の組合せを利用することもできる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体又はコンピュータ読み取り可能な記憶媒体であってよい。例えば、コンピュータ読み取り可能な媒体は、必ずしもそれだけに限定されるわけではないが、電子系媒体、磁気系媒体、光学系媒体、電磁気系媒体、赤外線系媒体、又は半導体系媒体、装置、デバイス、あるいはこれらの任意の適切な組合せであってよい。コンピュータ読み取り可能な媒体のより具体的な例としては、１つ又は複数の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去再書込可能読み取り専用メモリ（ＥＰＲＯＭ、又はフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスクＲＯＭ（ＣＤ‐ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、あるいはこれらの適切な組合せを挙げることができる。本明細書の文脈において、コンピュータ読み取り可能な媒体は、命令実行システム、装置、又はデバイスによってあるいはそれらに関連して使用されるプログラムを収容又は記憶することができる任意の有形媒体であってよい。
【００３０】
コンピュータ使用可能な媒体は、コンピュータ読み取り可能なプログラムが実装され、ベースバンド内又は搬送波の一部として伝搬されるデータ信号を含むことができる。かかる伝搬信号は、必ずしもそれだけに限定されるわけではないが、電磁信号、光信号、あるいはこれらの任意の適切な組合せを含めた様々な形態をとることができる。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体ではないコンピュータ読み取り可能な媒体であって、命令実行システム、装置、又はデバイスによってあるいはそれらに関連して使用されるプログラムを通信し伝搬し又は移送することができる任意のコンピュータ読み取り可能な媒体であってよい。
【００３１】
コンピュータ読み取り可能な媒体上に実装されるコンピュータ・コードは、必ずしもそれだけに限定されるわけではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等を含めた任意の適切な媒体を使用して伝送することができる。
【００３２】
本発明の諸態様の動作を実行するコンピュータ・プログラム・コードは、Ｊａｖａ（ＴＭ）、Ｓｍａｌｌｔａｌｋ（ＴＭ）、Ｃ＋＋等のオブジェクト指向プログラミング言語、及び「Ｃ」プログラミング言語や同様のプログラミング言語のような従来の手続き型プログラミング言語を含めた１つ又は複数のプログラミング言語の任意の組合せで書くことができる。上記プログラム・コードは、スタンド・アロン・ソフトウェア・パッケージとしてユーザのコンピュータ上で全体的に実行することも部分的に実行することもでき、ユーザのコンピュータ及び遠隔コンピュータにおいてそれぞれ部分的に実行することも遠隔コンピュータ又はサーバ上で全体的に実行することもできる。後者のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）を含めた任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使用しインターネットを介して）外部のコンピュータに接続することもできる。
【００３３】
以下では本発明の諸実施形態に係る方法、装置（システム）、及びコンピュータ・プログラム製品に関するフローチャート図又はブロック図あるいはその両方を参照して、本発明の諸態様について説明する。フローチャート図又はブロック図あるいはその両方に示される各ブロック、及びフローチャート図又はブロック図あるいはその両方に示されるブロックの組合せは、コンピュータ・プログラム命令によって実行可能であることを理解されたい。これらのコンピュータ・プログラム命令は、コンピュータ又は他のプログラマブル・データ処理装置のプロセッサを介して実行される命令により、フローチャート又はブロック図あるいはその両方に示される１つ又は複数のブロックで指定される機能／動作を実行する手段が提供されるように、汎用コンピュータ又は専用コンピュータのプロセッサ、あるいは機械を生成する他のプログラマブル・データ処理装置のプロセッサに提供することができる。
【００３４】
これらのコンピュータ・プログラム命令は、コンピュータ、他のプログラマブル・データ処理装置、又は他のデバイスに特定の様式で機能するよう指示することが可能なコンピュータ可読媒体に記憶することができ、その結果、フローチャート又はブロック図あるいはその両方に示される１つ又は複数のブロックで指定される機能／動作を実行する命令を含むプログラムが生成されるようにすることもできる。
【００３５】
上記コンピュータ・プログラム命令は、コンピュータ、他のプログラマブル・データ処理装置、又は他のデバイス上にロードすることもでき、その結果、当該コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行される命令によってフローチャート又はブロック図あるいはその両方に示される１つ又は複数のブロックで指定される機能／動作を実行するプロセスが実現されるようなコンピュータ実装プロセスを生成する一連の処理ステップが、当該コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行されるようにすることもできる。
【００３６】
後述の各図面のフローチャート及びブロック図は、本発明の様々な実施形態に係るシステム、方法、及びコンピュータ・プログラム製品の可能な実装環境のアーキテクチャ、機能、及び動作を示す。この点で、フローチャート又はブロック図中の各ブロックは、指定された論理機能（単数又は複数）を実行する１つ又は複数の実行可能な指令を含むモジュール、セグメント、あるいはコード部分を表す可能性がある。いくつかの代替実施形態では、ブロック内に示される機能が図示の順序と異なる順序で実行される可能性があることにも留意されたい。例えば、連続して示される２つのブロックが実際にはほぼ同時に実行されることもあり、関与する機能によっては逆の順序で実行されることもある。また、ブロック図又はフローチャート図あるいはその両方に示される各ブロック、及びブロック図又はフローチャート図あるいはその両方に示されるブロックの組合せは、指定された機能又は動作を実行する専用ハードウェア・ベース・システムによって実行することも、専用ハードウェアとコンピュータ命令の組合せによって実行することも可能であることに留意されたい。
【００３７】
ここで添付図面、特に図１及び図２を参照して、本発明の例示的な諸実施形態を実施することが可能なデータ処理環境について例示する。図１及び図２は単なる例示であり、本発明の諸態様又は諸実施形態を実施することが可能な環境を限定するものではないことを理解されたい。図示の環境には、本発明の趣旨及び範囲から逸脱しない限り様々な修正を施すことができる。
【００３８】
ここで図面を参照すると、図１は、例示的な諸実施形態の各態様を実施することが可能な例示的な分散データ処理システムを示している。分散データ処理システム１００は、例示的な諸実施形態の各態様を実施することが可能な複数のコンピュータから成るネットワークを含むことができる。分散データ処理システム１００は、少なくとも１つのネットワーク１０２を含んでおり、ネットワーク１０２は、分散データ処理システム１００内で互いに接続される様々なデバイスとコンピュータとの間の通信リンクを提供するのに使用される媒体である。ネットワーク１０２は、有線通信リンク、無線通信リンク、光ファイバ・ケーブルのような接続を含むことができる。
【００３９】
図示の例において、ネットワーク１０２には、サーバ１０４及びサーバ１０６ならびに記憶ユニット１０８が接続されている。また、ネットワーク１０２には、クライアント１１０、１１２、及び１１４も接続されている。これらのクライアント１１０、１１２、及び１１４は、例えばパーソナル・コンピュータやネットワーク・コンピュータ等であってもよい。図示の例において、サーバ１０４は、ブート・ファイルのようなデータと、オペレーティング・システム・イメージと、各種アプリケーションとをクライアント１１０、１１２、及び１１４に提供する。図示の例において、クライアント１１０、１１２、及び１１４は、サーバ１０４のクライアントとなる。分散データ処理システム１００は、図示されていない追加的なサーバ、クライアント、及び他のデバイスを含むこともできる。
【００４０】
図示の例において、分散データ処理システム１００は、伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）プロトコル・スイートを使用して互いに通信し合う世界中のネットワーク及びゲートウェイの集合体を表す、ネットワーク１０２を有するインターネットである。当該インターネットの中心には、データ及びメッセージを送る数千もの民間用、政府用、教育機関用等のコンピュータ・システムから成る主要なノード又はホスト・コンピュータ間の高速データ通信回線の基幹回線が存在する。言うまでもなく、分散データ処理システム１００は、例えばイントラネットや、ローカル・エリア・ネットワーク（ＬＡＮ）や、広域ネットワーク（ＷＡＮ）等のいくつかの異なるタイプのネットワークとして実施することもできる。上述のように、図１は一例として意図されたものであり、本発明の様々な実施形態に関するアーキテクチャ上の限定として意図されたものではない。したがって、図１に示される特定の要素は、本発明の例示的な諸実施形態を実施することが可能な環境を限定するものと解釈されるべきではない。
【００４１】
ここで図２を参照すると、例示的な諸実施形態の各態様を実施することが可能な、例示的なデータ処理システムのブロック図が示されている。データ処理システム２００は、本発明の例示的な諸実施形態に関する処理を実行するコンピュータ使用可能なコード又は命令を設置することが可能な、図１のホスト１１０のようなコンピュータの一例である。
【００４２】
図示の例において、データ処理システム２００は、ノース・ブリッジ及びメモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ）２０２と、サウス・ブリッジ及び入力／出力（Ｉ／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ）２０４とを含むハブ・アーキテクチャを利用している。処理ユニット２０６、メイン・メモリ２０８、及びグラフィックス・プロセッサ２１０は、ＮＢ／ＭＣＨ２０２に接続されている。グラフィックス・プロセッサ２１０は、高速グラフィックス・ポート（ＡＧＰ）を介してＮＢ／ＭＣＨ２０２に接続することができる。
【００４３】
図示の例において、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２は、ＳＢ／ＩＣＨ２０４に接続されている。オーディオ・アダプタ２１６、キーボード及びマウス・アダプタ２２０、モデム２２２、読み取り専用メモリ（ＲＯＭ）２２４、ユニバーサル・シリアル・バス（ＵＳＢ）ポート及び他の通信ポート２３２、ならびにＰＣＩ／ＰＣＩｅデバイス２３４は、バス２３８を介してＳＢ／ＩＣＨ２０４に接続されており、ハード・ディスク・ドライブ（ＨＤＤ）２２６及びＣＤ‐ＲＯＭドライブ２３０は、バス２４０を介してＳＢ／ＩＣＨ２０４に接続されている。ＰＣＩ／ＰＣＩｅデバイスとしては、例えばイーサネット（Ｒ）アダプタ、アドイン・カード、及びノート型コンピュータ用ＰＣカード等を挙げることができる。ＰＣＩはカード・バス・コントローラを使用する一方、ＰＣＩｅはこれを使用しない。ＲＯＭ２２４は、例えばフラッシュ・バイナリ入力／出力システム（ＢＩＯＳ）等であってもよい。
【００４４】
ＨＤＤ２２６及びＣＤ‐ＲＯＭドライブ２３０は、バス２４０を介してＳＢ／ＩＣＨ２０４に接続されている。ＨＤＤ２２６及びＣＤ‐ＲＯＭドライブ２３０は、例えば統合ドライブ・エレクトロニクス（ＩＤＥ）やシリアル・アドバンスト・テクノロジー・アタッチメント（ＳＡＴＡ）・インターフェース等を使用することができる。スーパーＩ／Ｏ（ＳＩＯ）デバイス２３６は、ＳＢ／ＩＣＨ２０４に接続することができる。
【００４５】
オペレーティング・システムは、処理ユニット２０６上で実行される。上記オペレーティング・システムは、図２のデータ処理システム２００内の様々なコンポーネントの制御を調整し実行するものである。クライアントとしてのオペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ（Ｒ）Ｗｉｎｄｏｗｓ（Ｒ）ＸＰのような市販のオペレーティング・システムであってもよい（「Ｍｉｃｒｏｓｏｆｔ」及び「Ｗｉｎｄｏｗｓ」は、マイクロソフト・コーポレーションの米国その他の国、又はその両方における商標である）。Ｊａｖａ（ＴＭ）プログラミング・システムのようなオブジェクト指向プログラミング・システムは、上記オペレーティング・システムと連動して動作することができ、データ処理システム２００上で実行されているＪａｖａ（ＴＭ）プログラム又はアプリケーションから当該オペレーティング・システムをコールするものである（「Ｊａｖａ」は、サン・マイクロシステムズの米国その他の国、又はその両方における商標である）。
【００４６】
サーバとしてのデータ処理システム２００は、例えば拡張対話式エグゼクティブ（Ａｄｖａｎｃｅｄ  Ｉｎｔｅｒａｃｔｉｖｅ  Ｅｘｅｃｕｔｉｖｅ：ＡＩＸ（Ｒ））オペレーティング・システム又はＬＩＮＵＸ（Ｒ）オペレーティング・システムを実行するＩＢＭ（Ｒ）ｅＳｅｒｖｅｒ（ＴＭ）ｐＳｅｒｉｅｓ（Ｒ）コンピュータ・システムであってもよい（「ｅＳｅｒｖｅｒ」、「ｐＳｅｒｉｅｓ」、及び「ＡＩＸ」は、インターナショナル・ビジネス・マシーンズ・コーポレーションの米国その他の国、又はその両方における商標であり、「Ｌｉｎｕｘ」は、Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓ氏の米国その他の国、又はその両方における商標である）。データ処理システム２００は、複数のプロセッサを処理ユニット２０６内に含む対称型マルチプロセッサ（ＳＭＰ）システムであってもよい。別法として、シングル・プロセッサ・システムを採用することもできる。
【００４７】
上記オペレーティング・システム、オブジェクト指向プログラミング・システム、及びアプリケーション又はプログラムに対する命令は、ＨＤＤ２２６のような記憶装置上に設置され、処理ユニット２０６による実行のためにメイン・メモリ２０８にロードすることができる。本発明の例示的な諸実施形態の各処理は、例えばメイン・メモリ２０８やＲＯＭ２２４等のメモリ内に設置されても、１つ又は複数の周辺デバイス２２６及び２３０内に設置されてもよい、コンピュータ使用可能なプログラム・コードを使用して処理ユニット２０６によって実行することができる。
【００４８】
バス・システムは、図２に示されるバス２３８やバス２４０のような１つ又は複数のバスから構成することができる。言うまでもなく、上記バス・システムは、通信ファブリック又はアーキテクチャであって、当該ファブリック又はアーキテクチャに取り付けられた様々なコンポーネント又はデバイス間でデータの転送を行う任意の通信ファブリック又はアーキテクチャを使用して実装することができる。図２のモデム２２２やネットワーク・アダプタ２１２のような通信ユニットは、データの送受信に使用される１つ又は複数のデバイスを含むことができる。メモリは、例えば図２のＮＢ／ＭＣＨ２０２内で見受けられるようなメイン・メモリ２０８、ＲＯＭ２２４、キャッシュ等であってもよい。
【００４９】
図１及び図２のハードウェアは実装形態に応じて変更され得ることが当業者には理解されるだろう。図１及び図２に示されるハードウェアに加えて又はその代わりに、フラッシュ・メモリや同等の不揮発性メモリ、あるいは光ディスク・ドライブ等、他の内部ハードウェア又は周辺デバイスを使用することもできる。また、本発明の例示的な諸実施形態の各処理は、本発明の趣旨及び範囲から逸脱しない限り、前述のＳＭＰシステム以外のマルチプロセッサ・データ処理システムにも適用することができる。
【００５０】
さらに、データ処理システム２００は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話又は他の通信デバイス、携帯情報端末（ＰＤＡ）等を含めたいくつかの異なるデータ処理システムのうちの任意の形をとることができる。いくつかの実例において、データ処理システム２００は、オペレーティング・システム・ファイル又はユーザ生成データあるいはその両方を記憶する不揮発性メモリを提供するフラッシュ・メモリが組み込まれた携帯型コンピューティング・デバイスであってもよい。データ処理システム２００は事実上、アーキテクチャ上の限定を伴わない既知の又は将来開発される任意のデータ処理システムとすることができる。
【００５１】
例示的な一実施形態では、データ処理システム２００にトランザクション・メモリ・システムが実装される。例示的な一実施形態では、このトランザクション・メモリ・システムを上述のＨＡＳＴＥＭシステムとしてもよい。当業界で一般に知られているように、トランザクション・メモリ・システムでは重複しないトランザクションを割り込みなく並列実行することができるが、データ整合性を確保するために、プログラムの各部分をアトミック実行、即ち、トランザクション・メモリ・システムがプログラムにメモリ位置を単一のアトミック・オペレーションとして読み取らせ修正させることが可能となるアトミック・トランザクションを実行する必要がある。トランザクション・メモリ・システムにおいて、トランザクションは単一のスレッドによって実行される有限のステップ・シーケンス又はプログラム命令シーケンスである。トランザクションは、あるトランザクションのステップ又は命令が別のトランザクションのステップ又は命令とインターリーブされないように順次実行することが可能である。トランザクション・メモリ・システムは、これらのメモリ・アクセスが外部の観察者にとってすべての効果が同時に発生するように、即ち、アトミック・セクション又はトランザクションがコミット又はアボートするように見えるようにすることで、アトミック部分のアトミック性、即ちアトミック・トランザクションを保証するメカニズムを提供する。トランザクション・メモリ・システムのより詳しい情報については、本願と同一の譲受人に譲渡された同時係属中の米国特許出願第１２／０４６，７６４号（公開番号：２００９／０２３５２５４）を参照されたい。
【００５２】
例示的な諸実施形態は、このトランザクション・メモリ・システムを使用してアグレッシブ・コンパイル・コードを容易にロールバック可能なトランザクションとして実行し、後続のコンサバティブ・コンパイル・コードの再実行を別個のトランザクションとして実行する。ソース・コード部分に関するこれら二種のコンパイル・バージョンを生成するコンパイラは、コンパイル及びリンク処理後のコードを実行するコンパイラとして同じデータ処理デバイス／システム上で実行しても、別個のデータ処理デバイス／システム上で実行してもよい。また、ランザクション・モニタも同じデータ処理デバイス／システム上又は異なるデータ処理デバイス／システム上で実行され、コンパイル及びリンク処理後のコードの実行を監視して、アグレッシブ・コンパイル・コードが失敗したのか、それともアグレッシブ・コンパイル・コードの生成に使用したアグレッシブ最適化により例外条件が発生したのかを判定する。アグレッシブ・コンパイル・コードが失敗した場合又は例外条件が発生した場合は、トランザクション・モニタはそのトランザクションをロールバックし、コード部分のコンサバティブ・コンパイル・バージョンを使用してコード部分の再実行を開始することができる。
【００５３】
例示的な諸実施形態によって解決される課題の理解を深めるために、コード最適化の一例を図３及び図４に示す。図３は、コード部分のオリジナル・ソース・コード・シーケンスを示す。図３のコードは、典型的には非並列的に順次実行される単一命令多重データ（ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ：ＳＩＭＤ）コードの一例である。図４は、コード部分をベクトル化してベクトル・プロセッサによる実行を効率化し得るアグレッシブ・コンパイラ最適化後の同コード・シーケンスを示す。具体的には、ベクトル化コードをベクトル要素を使用して並列実行することができる。本願と同一の譲受人に譲渡された同時係属中の米国特許出願第１２／２５０，５７５号には、ＳＩＭＤコードをベクトル化コードに変換する１つの可能なメカニズムの説明が記載されている。
【００５４】
図３に示すとおり、オリジナル・コード・シーケンスは配列Ａの最初の３つの値にアクセスし、これらの値を最初の３つの配列レジスタＸに格納する。この処理は順次実行されるため、境界条件違反が発生する懸念はない。図４は、コンパイラ最適化によって生成され得る上記コードのベクトル化形態を示す。図示のとおり、４つの要素を有するベクトルを使用したベクトル・コードを用いて上記コードをベクトル化すると、配列が４つの要素の各ブロックに読み込まれる。その結果、図５に示すとおり、コードが３つの配列値だけを利用する場合も、ベクトル化により４つの値がロードされる、即ち、コード部分にとって正しいデータを格納しているのがａ０、ａ１、ａ２のみである場合も、ベクトル化によってａ３もロードされることになる。ａ３がメモリ・ページ境界３１０を越えてプログラムにアクセス可能でないメモリ・ページ３２０まで及ぶ場合、又はａ３が存在しないページ上に存在し、且つベクトル・ロードがプロセスに割り当てられていない当該メモリ・ページに接する場合は、プログラミング・エラーとなり、オペレーティング・システムによって典型的にはアプリケーションを終了させるアクセス違反条件が示されることになる。プログラム・エラーはマルチ・スレッド化コードでも発生する可能性があり、ａ３が別のプロセスによって利用されるメモリ位置である場合は、ａ３をロードすることにより、ａ３の値をライト・バックしたときにオリジナル・コードに存在しなかったライト更新がａ３に誤って上書きされてしまう可能性があることから、データ破損が発生する可能性がある。
【００５５】
上記の例を使用すると、図３に示したオリジナル・コードは境界条件違反にならず、したがって例外は発生しない。しかしながら、コード部分のベクトル化バージョンは境界条件違反になる可能性があり、したがってコードがベクトル要素に対してメモリ・ページ境界をまたぐアクセス試行を行った場合は例外条件が発生する可能性がある。この例外条件はオリジナル・コードには存在しないが、コンパイラが実行する最適化によってもたらされる。したがって、既知のメカニズムによるコンパイラは、典型的にはコードのこの部分に対して上記の最適化を実行すべきでないと判定するであろう。
【００５６】
一方、例示的な諸実施形態によるコンパイラは、最適化により例えば境界条件違反等に起因して例外条件が発生し得るアグレッシブ・コンパイル・コードと、ソース・コードの同じ部分に関するコンサバティブ・コンパイル・コードとを生成する。換言すると、かかる最適化により最適化及びアグレッシブ・コンパイルが施されたコードを実行する際に一定の条件下で例外条件が発生し得ることがコンパイラによって判定されたかどうかに関わらず、通常であればコンパイラによりコード部分に対して適用されない最適化を実際にコード部分に適用して、アグレッシブ・コンパイル・コードを生成する。これらの最適化は、コンサバティブ・コンパイル・コードを生成する際は実行されない。したがって、コンパイラは、最適化によりオリジナル・ソース・コードの所期の操作に違反が生じ、例外条件が発生する可能性があるコンパイル・コードが生成されるおそれがあるとコンパイラが判定したソース・コードの各部分につき、当該コードのアグレッシブ・コンパイル・バージョンとコンサバティブ・コンパイル・バージョンの両方を生成する。
【００５７】
アグレッシブ・コンパイル・コードは、トランザクション・メモリ・システムを使用するデータ処理デバイス／システム上で実行される場合、単一のトランザクションとして実行される。例えば、図４に示したアグレッシブ・コンパイル・コードを使用すると、トランザクションの開始と終了を指定してトランザクションの開始から終了までに提示されるすべての命令を単一のトランザクションとして実行するステートメントをコードに導入することができる。一例として、図４に示したコードは、下記のステートメント（太字部分）が導入されるように変換することによりトランザクションとして実行することができる。
【数１】
0005643345.tif 000002
【００５８】
したがって、トランザクションの範囲内（「ｔｒａｓａｃｔｉｏｎ＿ｂｅｇｉｎ」ステートメントから「ｔｒａｓａｃｔｉｏｎ＿ｅｎｄ」ステートメントまで）では、アグレッシブ・コンパイル・コード内のすべての命令が無事完了するか、これらの命令によって施された変更がいずれもコミットされないことになる。トランザクションの実行は、当該データ処理デバイス／システム、又は当該データ処理デバイス／システムを監視している別のデータ処理デバイス／システム内に存在するトランザクション・モニタによって監視される。トランザクション内の１つ又は複数の命令により境界条件違反やスレッド・レベル競合条件等に対応する例外が発生したことでトランザクションが失敗した場合は、トランザクション・モニタはこの失敗を特定し、そのトランザクションの各命令によって施された変更のロールバックを開始する。次いで、トランザクション・モニタは、その特定のコード部分に関するコンサバティブ・コンパイル・コードを呼び出すことにより、当該コード部分の再実行を開始する。同様に、トランザクションを使用することにより、図４に示すように、競合条件の原因となり得るリード・モディファイ・ライト更新にアトミック性が付与されることにより、安全でない可能性がある最適化によってもたらされるスレッド間の干渉による競合条件の発生を防止することが可能となる。
【００５９】
アグレッシブ・コンパイル・コードが失敗したことに応答してコンサバティブ・コンパイル・コードを呼び出すことができるようにするために、トランザクション・モニタは、ソース・コード部分に関するアグレッシブ・コンパイル・コード・バージョンとコンサバティブ・コンパイル・コード・バージョンとをマッピング又は相関付けするデータ構造を備える。トランザクション・モニタは、アグレッシブ・コンパイル・コードが失敗したことに応答して当該データ構造のルックアップ動作を実行し、コンサバティブ・コンパイル・コード・バージョンを指すポインタを取得することにより、該当するコンサバティブ・コンパイル・コード・バージョンに実行を転送することができる。
【００６０】
トランザクション・モニタはさらに、アグレッシブ・コンパイル・コードのすべての失敗をログに記憶することができる。例えば、このログには、アグレッシブ・コンパイル・コード部分の識別子と、コンピュータ・プログラムの実行中に当該アグレッシブ・コンパイル・コード部分が失敗した回数に対応するカウントとを収容してもよい。このログをコンピュータ・プログラムの同じ実行時又は後続の実行時に使用することにより、トランザクション・モニタによる予測的動作を実行することが可能となる。即ち、コード部分のアグレッシブ・コンパイル・コード・バージョンを実行する前に、トランザクション・モニタは、そのアグレッシブ・コンパイル・コードが失敗する可能性が高いかどうかを予測する予測的動作を実行することが可能となる。この予測は、アグレッシブ・コンパイル・コードの以前の実行履歴が記憶されたログに基づいて実行することができる。この履歴により失敗の可能性が高いことが示された場合、例えばログ・データ構造内の失敗数が所定数を上回る場合、トランザクション・モニタは、ロールバック及び再実行動作のオーバーヘッドを回避するためにアグレッシブ・コンパイル・コードの代わりにコンサバティブ・コンパイル・コードの実行を開始することができる。そうでなければ、トランザクション・メモリは失敗が予測されない限りアグレッシブ・コンパイル・コードの方を優先的に実行する。この優先的な実行により、コンサバティブ・コンパイル・コードは、アグレッシブ・コンパイル・コードが失敗した場合、又はアグレッシブ・コンパイル・コードが失敗する可能性が高いことが予測された場合にのみ実行される。
【００６１】
図６は、例示的な一実施形態による主要な処理要素の例示的なブロック図である。図６に示すとおり、ソース・コード部分の各種コード・バージョンを生成することに関する例示的な諸実施形態のメカニズムを実施する最適化コード生成ロジック４１４を有するコンパイラ４１０が提供される。コンパイラ４１０は、コンパイル・コード４１５を、トランザクションとして実行可能なサイズのセクションに分けて生成する。ソース・コード４０５をこれらのコンパイル・コード・セクションにコンパイルする際に、コンパイラ４１０は、ソース・コードに最適化を適用することにより当該コードの動作がソース・コードで企図される動作から逸脱する、例えば境界条件挙動が変更される可能性があるかどうかを判定する。即ち、コンパイラ４１０は、ソース・コードのアグレッシブ最適化によりセマンティクスが改変されることになるかどうかを判定する。かかる判定を行うために、コンパイラ４１０は、オリジナル・ソース・コードの挙動と異なるようにコードの挙動を変更する可能性が高い最適化のリスト４１２を備えてもよい。かかるリスト４１２は、例えば事前観察に基づいてユーザ生成してもよい。リスト４１２はさらに、コード部分の属性であって、それらの属性を有するコード部分に最適化を適用した場合にセマンティクスの変更が生じる可能性が高い属性を示すインジケーションを含んでもよい。
【００６２】
アグレッシブ最適化を使用してコンパイルされたソース・コード部分がこのような属性を有し、且つアグレッシブ最適化の１つとしてリスト４１２内の最適化が適用されることがコンパイラ４１０によって判定された場合、コンパイラ４１０は、ソース・コードの同じ部分のコンサバティブ・コンパイル・バージョン４３０も生成することができる。その結果、ソース・コードの同じ部分についてアグレッシブ・コンパイル・バージョン４２０とコンサバティブ・コンパイル・バージョン４３０とが生成され、コンパイル・コード４１５に含められる。コンパイラ４１０はさらに、アグレッシブ・コンパイル・バージョン４２０とコンサバティブ・コンパイル・バージョン４３０との間の対応関係を識別するマッピング・データ構造４４０内のエントリも生成する。
【００６３】
コンパイラ４１０は、これらのコンパイル・コードの各バージョン４２０及び４３０をコンパイル・コンピュータ・プログラム４１５内のトランザクションに含める。コンパイル・コードのかかるバージョン４２０及び４３０をトランザクションに含めるために、コンパイラ４１０は、トランザクションを実施するためのコード・ステートメント、即ち、トランザクション・ベースのデータ処理デバイス／システム４５０によって認識可能なトランザクションの開始及び終了を示すコードを導入する。トランザクション・ベース・コードの生成は当業界で一般に知られているので、ここでは詳細に説明しない。
【００６４】
コンパイラ４１０は、コード・バージョン４２０及び４３０ならびにマッピング・データ構造４４０を含むコンパイル・コンピュータ・プログラムを、同じ又は異なるデータ処理デバイス／システム４５０のプロセッサに送る。データ処理デバイス／システム４５０は、コード・バージョン４２０及び４３０を含むコンピュータ・プログラムを実行する。この実行をデータ処理デバイス／システム４５０のトランザクション・モニタ４６０の監視ロジック４６５によって監視することにより、アグレッシブ・コンパイル・コード・バージョン４２０の実行が失敗したかどうかが判定される。アグレッシブ・コンパイル・コード・バージョン４２０を含むトランザクションが失敗した場合、トランザクション・モニタ４６０の監視ロジック４６５は、そのトランザクションによって施された変更をアボートし、マッピング・データ構造４４０のルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョン４３０を決定する。次いで、トランザクション・モニタ４６０の監視ロジック４６５は、トランザクションが失敗したアグレッシブ・コンパイル・コード・バージョン４２０に対応するコンサバティブ・コンパイル・コード・バージョン４３０に実行を転送する。
【００６５】
アグレッシブ・コンパイル・コード・バージョン４２０の失敗は、アグレッシブ・コンパイル・コード・バージョン４２０の実行時に発生する例外に基づいて判定することができる。トランザクション・モニタ４６０は、アグレッシブ・コンパイル・コード・バージョン４２０の例外ハンドラ又は割り込みハンドラとしてデータ処理デバイス／システムに登録可能である。例示的な諸実施形態のメカニズムを使用すれば、コンピュータ・プログラムの実行に直ちに割り込むことができ、例外に直ちに対処することが可能となる。別法として、このような例外は、本願と同一の譲受人に譲渡された同時係属中の米国特許出願第１２／５４３，６１４号に記載されるように、その例外がコンピュータ・プログラムの全体的な動作に実際に影響を及ぼすか否かが判定されるまで放置してもよい。
【００６６】
任意選択で、トランザクション・モニタ４６０はさらに、トランザクション・モニタ４６０によって検出された失敗を識別するコンピュータ・コードに対応するログ・データ構造４７０を維持することもできる。このログ・データ構造４７０は、コンピュータ・コードのデバッグ目的で使用することができ、また別の実施形態では予測目的で使用することもできる。即ち、トランザクション・モニタ４６０は、任意選択で、アグレッシブ・コンパイル・コード・バージョン４２０を実行した場合に失敗する可能性が高いかどうかを予測する予測ロジック４６７も含むことができる。かかる予測ロジック４６７は、ログ・データ構造４７０にログが記憶された失敗履歴を利用してこのような予測を行うことができる。例えば、以前の実行中に同じアグレッシブ・コンパイル・コード・バージョン４２０が所定の回数失敗している場合、予測ロジック４６７は、そのアグレッシブ・コンパイル・コード・バージョンが再び失敗する可能性が高いと予測することができる。その結果、トランザクション・モニタ４６０の監視ロジック４６５は、当該アグレッシブ・コンパイル・コード・バージョン４２０の実行を試みる前に、コンサバティブ・コンパイル・バージョン４３０に実行を転送することができる。
【００６７】
予測的動作をログ・データ構造４７０に基づくものとして説明してきたが、必ずしもそうする必要はないことに留意されたい。そうではなく、ログ・データ構造４７０に加えて、予測ロジック４６７がコード部分の分析又は他の動作を実行して、アグレッシブ・コンパイル・コード・バージョン４２０が失敗する可能性が高いか否かを予測することも可能である。例えば、アドレスをチェックすることにより、そのアドレスがページ境界に隣接する所定の範囲に含まれるかどうかを判定することができる。一実施形態では、そのページ境界の範囲に含まれるアドレスがページ参照違反を引き起こす可能性があり、コンサバティブ・コンパイル・コード・バージョンに実行を直ちに移行するが、マルチ・スレッド・アプリケーションにおける第２のスレッドとの競合条件に関してトランザクション・ベース・リカバリを使用することを予測することができる。
【００６８】
したがって、このようにすれば、アグレッシブ・コンパイル・コード・バージョンが失敗した場合にも、よりコンサバティブにコンパイルされたコード・バージョンに実行を転送する自動化メカニズムを提供することで、コンパイラ４１０がソース・コードにアグレッシブ最適化を施すことを可能にすることができる。これにより、既知のコンパイル技法と比較して改善された性能が得られ、最適化の結果セマンティクスが変更され例外が発生するコードが生成される可能性があるアグレッシブ最適化が最小限に抑えられる。ユーザがこのような動作をコンパイラによってオーバーライドする場合には、結果として得られるアグレッシブ最適化コードにより、コンサバティブ・コンパイル・コードを利用する選択肢が存在しないという例外が発生する可能性がある。
【００６９】
図７は、例示的な諸実施形態によるアグレッシブ最適化技法を使用してソース・コード部分をコンパイルする場合のコンパイラ動作の概要を示すフローチャートである。図７に示したとおり、この処理は、コンパイラがソース・コード部分に適用すべき最適化を選択することから開始する（ステップ５１０）。コンパイラは、選択された最適化により、ソース・コードの当初の処理目的が修正され、オリジナル・ソース・コードのセマンティクスに変更が生じるかどうか、又は最適化コードがオリジナル・ソース・コードで発生しなかった例外を発生させる可能性が高いかどうかを判定する（ステップ５２０）。例えば、コンパイラは、オリジナル・ソース・コードのベクトル化、パラレルＩＦ変換（ｐａｒａｌｌｅｌ  ｉｆ  ｃｏｎｖｅｒｓｉｏｎ）又は他のタイプの最適化により、オリジナル・ソース・コードに存在しなかった新たな例外をもたらす可能性がある最適化コードとなるかどうかを判定することができる。この判定を、最適化が「安全」であるかどうかを判定すると表現する。
【００７０】
最適化が安全である場合は、ソース・コード部分に対して最適化を実行してアグレッシブ・コンパイル・コードを生成する（ステップ５３０）。最適化が安全でない場合は、コンパイラは、安全でない最適化が実行されるアグレッシブ・コンパイル・コード・バージョンと、安全でない最適化が実行されないコンサバティブ・コンパイル・コード・バージョンとを生成する（ステップ５４０）。次いで、コンパイラは、アグレッシブ・コンパイル・コード・バージョンとコンサバティブ・コンパイル・コード・バージョンとの間のマッピングを生成し、このマッピングを、コンパイル・コードを実行するデータ処理システムにコンパイル・コードと共に提供されるマッピング・データ構造に格納する（ステップ５５０）。このマッピングはその後、アグレッシブ・コンパイル・コードが失敗した場合又は例外を発生させた場合にデータ処理システムのトランザクション・モニタによって使用することができる。その後動作は終了する。図７の動作はここで終了するように図示してあるが、この動作は実際にはソース・コードの各部分について反復可能であり、ソース・コードの各部分に対して実行される最適化毎に反復可能である。
【００７１】
図８は、例示的な一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。図８に示したとおり、この動作は、ソース・コード部分のアグレッシブ・コンパイル・コード・バージョンを単位のトランザクションとして実行することから開始する（ステップ６１０）。アグレッシブ・コンパイル・コード・バージョンのトランザクションが失敗したかどうかが判定される（ステップ６２０）。トランザクションが失敗しなかった場合は動作は終了する。トランザクションが失敗した場合は、その失敗がトランザクション・モニタに通知される（ステップ６３０）。トランザクション・モニタは通知された失敗をログに記憶し（ステップ６４０）、マッピング・データ構造におけるアグレッシブ・コンパイル・コード・バージョンのルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを特定する（ステップ６５０）。次いで、トランザクション・モニタはコンサバティブ・コンパイル・コード・バージョンに実行を転送する（ステップ６６０）。その後処理は終了する。図８の動作はここで終了するように図示してあるが、この動作は同じ又は異なるアグレッシブ・コンパイル・コード・バージョンが実行されるたびに反復可能であることを理解されたい。
【００７２】
図９は、コード部分のアグレッシブ・コンパイル・バージョンを実行すべきか否かを判定する予測メカニズムを利用する一実施形態によるコンピュータ・プログラム実行の例示的な動作の概要を示すフローチャートである。図９に示したとおり、この動作は、ログ・データ構造におけるアグレッシブ・コンパイル・コード・バージョンの識別子のルックアップ動作から開始する（ステップ７１０）。ルックアップ動作の結果に基づいて、アグレッシブ・コンパイル・コード・バージョンが失敗する可能性が高いかどうかが判定される（ステップ７２０）。失敗する可能性が高くない場合は、実行が単一のトランザクションとしてソース・コード部分のアグレッシブ・コンパイル・コード・バージョンに送られる（ステップ７３０）。アグレッシブ・コンパイル・コード・バージョンのトランザクションが失敗するかどうかが判定される（ステップ７４０）。トランザクションが失敗しない場合は処理を終了する。トランザクションが失敗した場合は、その失敗がトランザクション・モニタに通知される（ステップ７５０）。トランザクション・モニタはその失敗をログに記憶し（ステップ７６０）、マッピング・データ構造におけるアグレッシブ・コンパイル・コード・バージョンのルックアップ動作を実行して、対応するコンサバティブ・コンパイル・コード・バージョンを識別する（ステップ７７０）。その後、又はステップ７２０でアグレッシブ・コンパイル・コード・バージョンが失敗する可能性が高いと判定された場合は、トランザクション・モニタはコンサバティブ・コンパイル・コード・バージョンに実行を転送する（ステップ７８０）。その後処理は終了する。図９の動作もここで終了するように図示してあるが、この動作は同じ又は異なるアグレッシブ・コンパイル・コード・バージョンが実行されるたびに反復可能であることを理解されたい。
【００７３】
例示的な一実施形態では、ソース・コード部分のアグレッシブ・コンパイル・コード・バージョンは、ソース・コード部分のうち、並列実行されるベクトル化バージョンに対応し、コンサバティブ・コンパイル・コード・バージョンは、ソース・コード部分のうち、順次実行されるスカラ・バージョン又は非ベクトル化バージョンに対応する。この例示的な実施形態によれば、並列実行の性能は大部分の実行例で得られるが、ベクトル実行中に例外が検出されたことに応答してアグレッシブ最適化の程度が小さい順次バージョンを実行することにより、スカラ・レベル（配列要素単位）の正しい実行順序が維持される。
【００７４】
図１０〜図１２は、かかる一実施形態による様々なコード・バージョンを示す。図１０はオリジナル・ソース・コードを示す。図１１は、図１０に示したソース・コード部分のベクトル化バージョン、即ちアグレッシブ・コンパイル・コード・バージョンを示す。図１２は、図１１に示したアグレッシブ・コンパイル・コード・バージョンのトランザクション・ベース・バージョンを示す。ここで、図１１及び図１２は、本明細書に含まれる概念を解説するためのソース・コード表現として提示するものである。内部表現は、「ｉｎｔｒｉｎｓｉｃｓ」、即ち、値のベクトルに対して融合型積和演算を行うｖｅｃ＿ｆｍａのようなマシン動作に対応する擬似関数によって表現される。しかしながら、コンパイラは本明細書の例示的な諸実施形態でソース・コードとして示されるコードを例示的な諸実施形態による他の任意のフォーマットで表現可能であることが、当業者には理解されるであろう。
【００７５】
図１０に示すオリジナル・ソース・コードは、配列ａ、ｂ、ｃのうちの１つに対するメモリ・アクセス違反に対応する参照例外、又は要素０、１、２又は３に関する特定の要素の要素ベース計算に対応する浮動小数点例外に対応する参照例外を発生させる。一方、図１１のベクトル化コードは、同じ例外挙動がいくつかのユーザ・アプリケーションに障害を引き起こすおそれがあることを示さない。例示的な諸実施形態では、図１１のベクトル化コードが図１２に示したトランザクションに含められ、例外が発生したときは当該トランザクションがアボートされ、その結果すべてのベクトル計算がロールバックされる。次いで、トランザクション・モニタは、当該コードの順次バージョン、例えば図１０に対応する順次バージョン（任意選択でトランザクションを使用しない）等に制御を移行する。例外は、オリジナル・プログラムの挙動に対応する要素０、１、２又は３の要素レベルで示される。
【００７６】
したがって、例示的な諸実施形態のメカニズムを用いると、かかる最適化が安全でないと判定され得る場合にも、ベクトル化、パラレルＩＦ変換、マルチ・スレッディング等のアグレッシブ最適化を実行することが可能となる。さらに、実行時に最適化が安全でないことが判明した場合は、その実行をロールバックし、コードの安全なバージョンに転送することができる。
【００７７】
上述のとおり、例示的な諸実施形態のメカニズムは、境界条件違反が発生し得る場合やスレッド・レベル競合条件が発生し得る場合等に使用することができる。スレッド・レベル競合条件の場合は、あるスレッドが並列実行中の別のスレッドによってアクセスされているのと同じメモリ位置に対して書き込みを行い、結果として後者のスレッドの実行にエラーが生じる可能性がある。例示的な諸実施形態のメカニズムによれば、トランザクション・モニタは、競合条件が発生する又は発生する可能性が高いかどうかを判定することができる。また、上述のメカニズムを使用すれば、あるスレッドを別のスレッドのためにアボート又はロールバックすることが可能となる。即ち、あるスレッド上で実行されるアグレッシブ・コンパイル・コード・バージョンをアボート又はロールバックすることで、より順次的に実行されるコンサバティブ・コンパイル・コード・バージョンが実行され、競合条件が回避されるようにすることが可能となる。
【００７８】
上記では例示的な実施形態をトランザクション・ベース・システムで使用する場合について説明してきたが、各実施形態はそのように限定されるものではないことに留意されたい。そうではなく、例示的な諸実施形態によるメカニズムは、アグレッシブ投機を利用するシステムであって、投機が失敗した場合に変更をロールバック又はアボートすることができるように通知を生成する任意のシステムに実装可能である。
【００７９】
上述のとおり、例示的な諸実施形態は、全体としてハードウェアの実施形態の形をとることも、全体としてソフトウェアの実施形態の形をとることもでき、ハードウェア要素とソフトウェア要素の両方を含む実施形態とすることもできることを理解されたい。例示的な一実施形態では、例示的な諸実施形態によるメカニズムが、必ずしもそれだけに限定されるわけではないが、ファームウェア、常駐ソフトウェア、マイクロコード等を含めたソフトウェア又はプログラム・コードの形で実施される。
【００８０】
プログラム・コードの記憶又は実行あるいはその両方を行うのに適したデータ処理システムは、システム・バスを介してメモリ要素に直接又は間接的に連結される少なくとも１つのプロセッサを含む。上記メモリ要素は、上記プログラム・コードの実際の実行中に利用されるローカル・メモリ、バルク・ストレージ、及び実行中にバルク・ストレージからコードを検索しなければならない回数を少なくするために、少なくともいくつかのプログラム・コードを一時的に記憶するキャッシュ・メモリを含むことができる。
【００８１】
入力／出力、即ちＩ／Ｏデバイス（必ずしもそれだけに限定されるわけではないが、キーボード、ディスプレイ、ポインティング・デバイス等を含む）は、上記システムに直接連結することも、Ｉ／Ｏコントローラを介して連結することもできる。介在する私設ネットワーク又は公衆ネットワークを通して他のデータ処理システムあるいは遠隔プリンタ又はストレージ・デバイスに、上記データ処理システムが連結できるようにするために、上記システムにネットワーク・アダプタを連結することもできる。モデム、ケーブル・モデム及びイーサネット（Ｒ）・カードは、現時点で使用可能なタイプのネットワーク・アダプタのほんのいくつかにすぎない。
【００８２】
本発明の記載は例示及び説明のために提示しているものであって、本発明の実施形態を余すところのないものとし、又は開示の形態に限定することは、本出願人の意図するところではない。当業者には多くの修正及び変更が可能なことは明白であろう。上記実施形態は、本発明の諸原理及び実際の応用例が最良の形で説明されるように、また想定される特定の使用に適するように様々な修正が施された様々な実施形態について当業者が本発明を理解することが可能となるように選択され説明されている。
【図１】
0005643345.tif 000003
【図２】
0005643345.tif 000004
【図３】
0005643345.tif 000005
【図４】
0005643345.tif 000006
【図５】
0005643345.tif 000007
【図６】
0005643345.tif 000008
【図７】
0005643345.tif 000009
【図８】
0005643345.tif 000010
【図９】
0005643345.tif 000011
【図１０】
0005643345.tif 000012
【図１１】
0005643345.tif 000013
【図１２】
0005643345.tif 000014