(57)【特許請求の範囲】
【請求項１】
実行されることに応答して、コンピューティングデバイスに、
実行中に、通常発生する条件が満たされることに応答してトランザクショナルメモリシステムによって実行可能な少なくとも１つの第１の命令を含むコンピューター命令のシーケンスを解析させ、
前記通常発生する条件が満たされるか否かを判断し、前記通常発生する条件が満たされないことに応答して前記トランザクショナルメモリシステムの例外ハンドリング機能とインターフェースするように構成された無分岐命令である、少なくとも１つの例外発生命令を前記コンピューター命令のシーケンスにおける前記第１の命令の前に挿入させる、
複数の命令を含み、
前記複数の命令は、コンピューティングデバイスに、前記コンピューター命令のシーケンスにおいて、前記通常発生する条件が満たされないことに応答して実行可能な少なくとも１つの第２の命令を識別させ、前記通常発生する条件が満たされないことに応答して前記少なくとも１つの例外発生命令の１つに基づき起動される前記トランザクショナルメモリシステムの前記例外ハンドリング機能を、前記少なくとも１つの第２の命令に関連付けさせる、プログラム。
【請求項２】
前記複数の命令は、コンピューティングデバイスに、少なくとも１つの第２の命令を前記コンピューター命令のシーケンスから除去させる、請求項１に記載のプログラム。
【請求項３】
前記複数の命令は、コンピューティングデバイスに、前記少なくとも１つの第１の命令を前記通常発生する条件について最適化させる、請求項１または２に記載のプログラム。
【請求項４】
前記複数の命令は、コンピューティングデバイスに、前記少なくとも１つの例外発生命令を比較命令及び分岐命令の代わりに前記コンピューター命令のシーケンスに挿入させる、請求項１から３のいずれか１項に記載のプログラム。
【請求項５】
前記少なくとも１つの例外発生命令のうちの少なくとも１つは、コンピューティングデバイスに、メモリレジスタが特定の値を保持するか否かを判断させる、請求項１から４のいずれか１項に記載のプログラム。
【請求項６】
前記少なくとも１つの例外発生命令のうちの少なくとも１つは、コンピューティングデバイスに、前記特定の値が符号付きであるか否かを判断させ、前記特定の値が符号付きである場合に、前記特定の値に関連付けられた符号ビットをマスクさせる、請求項５に記載のプログラム。
【請求項７】
前記少なくとも１つの例外発生命令のうちの別の少なくとも１つは、コンピューティングデバイスに、ポインターが特定のメモリアドレスに関連付けられているか否かを判断させる、請求項１から６のいずれか１項に記載のプログラム。
【請求項８】
前記少なくとも１つの例外発生命令のうちのさらに別の少なくとも１つは、コンピューティングデバイスに、データの一部が特定の値を有するか否かを判断させる、請求項１から７のいずれか１項に記載のプログラム。
【請求項９】
前記少なくとも１つの例外発生命令のうちのさらに別の少なくとも１つは、コンピューティングデバイスに、トリップカウントが特定の値を有するか否かを判断させる、請求項１から７のいずれか１項に記載のプログラム。
【請求項１０】
前記少なくとも１つの例外発生命令の１つは、コンピューティングデバイスに、前記例外ハンドリング機能を起動させ、前記例外ハンドリング機能に基づいて、前記少なくとも１つの例外発生命令は、コンピューティングデバイスに、前記コンピューター命令のシーケンスの実行をチェックポイントにロールバックさせるか又は前記コンピューター命令のシーケンスの前記実行をアボートさせる、請求項１から９のいずれか１項に記載のプログラム。
【請求項１１】
前記複数の命令は、コンピューティングデバイスに、前記通常発生する条件が満たされないことに応答して前記例外ハンドリング機能を起動させるように前記コンピューター命令のシーケンスを特殊化させ、起動した前記例外ハンドリングは、コンピューティングデバイスに、最適化されていない命令を実行させる、請求項１から１０のいずれか１項に記載のプログラム。
【請求項１２】
前記複数の命令は、コンピューティングデバイスに、チェックポイント命令及びコミット命令を前記コンピューター命令のシーケンス内に挿入させることによって、前記コンピューター命令のシーケンスの少なくとも１つの命令を、前記トランザクショナルメモリシステムによって実行されるトランザクションとして定義させる、請求項１から１１のいずれか１項に記載のプログラム。
【請求項１３】
前記複数の命令は、コンピューティングデバイスに、前記通常発生する条件が満たされないことに応答して、ハードウェアベースのトランザクショナルメモリシステム又はソフトウェアベースのトランザクショナルメモリシステムとインターフェースさせるように、前記コンピューター命令のシーケンスを特殊化させる、請求項１から１２のいずれか１項に記載のプログラム。
【請求項１４】
コンピューティングデバイスであって、
少なくとも１つのプロセッサコアと、
該少なくとも１つのプロセッサコアに結合されたコンピューター回路部であって、
コンピューター命令のシーケンスを、該コンピューティングデバイスのトランザクショナルメモリシステムによって実行するように構成されたトランザクションとして識別することであって、該トランザクションは、チェックポイント命令及びコミット命令によって定義され、該トランザクションは、通常発生する条件が満たされることに応答して実行可能な少なくとも１つの第１の命令と、前記通常発生する条件が満たされないことに応答して実行可能な少なくとも１つの第２の命令とを含むことと、
少なくとも１つの例外発生命令を前記コンピューター命令のシーケンスにおける前記第１の命令の前に挿入することであって、該少なくとも１つの例外発生命令は、前記少なくとも１つの第１の命令が分岐することなく実行されることを可能にするように構成されるとともに、前記通常発生する条件が満たされないことに応答して前記トランザクショナルメモリシステムの、前記第２の命令に関連付けられた例外ハンドリング機能を起動するように構成されている、挿入することと、
前記少なくとも１つの第２の命令を前記トランザクションから除去することと、
を前記少なくとも１つのプロセッサコアに行わせるように構成されている、コンピューター回路部と、
を備える、コンピューティングデバイス。
【請求項１５】
前記通常発生する条件が満たされることに応答して少なくとも１つの最適化された命令を実行し、前記通常発生する条件が満たされないことに応答して前記トランザクションの実行を前記チェックポイントにロールバックして、少なくとも１つの最適化されていない命令を実行するように構成される、請求項１４に記載のコンピューティングデバイス。
【請求項１６】
実行されたことに応答して、コンピューティングデバイスが、
通常発生する条件が満たされることに応答して前記コンピューティングデバイスのトランザクショナルメモリシステムによって実行可能な少なくとも１つの第１の命令と、前記通常発生する条件が満たされないことに応答して前記トランザクショナルメモリシステムによって実行可能な少なくとも１つの第２の命令とを含むコンピューター命令のシーケンスを解析することと、
前記コンピューター命令のシーケンスの少なくとも１つのコード領域を識別するように構成されたコード特殊化ルーチンを実行することであって、前記少なくとも１つのコード領域は、前記トランザクショナルメモリシステムによってトランザクションとして実行可能であることと、
前記コード領域のうちの１つ又は複数について、前記第１の命令の前に、無分岐命令である複数の例外発生命令を挿入することと
をもたらす複数の命令を含み、
無分岐命令である前記複数の例外発生命令は、
通常発生する条件が満たされたか否かを判断するように構成された少なくとも１つの論理命令または算術命令と、
前記通常発生する条件が満たされないことに応答して前記トランザクショナルメモリシステムの、前記第２の命令に関連付けられた例外ハンドリング機能を起動するように構成された少なくとも１つの例外生成命令と、
を含む、プログラム。
【請求項１７】
前記少なくとも１つの論理命令または算術命令は、ビット単位論理オペレーションまたは算術オペレーションを行うためのものである、請求項１６に記載のプログラム。
【請求項１８】
前記ビット単位論理オペレーションは、排他的ＯＲ（ＸＯＲ）命令であり、前記少なくとも１つの算術命令は、コンピューティングデバイスに、オーバーフローフラグをセットするか否かを制御させる、請求項１７に記載のプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
いくつかのコンピューターアーキテクチャは、制限付きトランザクショナルメモリ（ＲＴＭ）システム及びソフトウェアトランザクショナルメモリ（ＳＴＭ）システム等のハードウェアトランザクショナルメモリシステム及び／又はソフトウェアトランザクショナルメモリシステムをサポートすることができる。トランザクショナルメモリシステムでは、コンピューター命令は、例えば、マルチスレッドアプリケーションのシングルスレッド演算として同時並行して実行することが認められている。これを行うために、コンピュータープログラムにおける命令のシーケンスは、他のスレッド上で実行されている命令とは独立に共有メモリに対して読み出し命令及び書き込み命令を実行することができるトランザクションとして定義される。トランザクションは、例えば、トランザクショナルシステムのタイプに応じて、インタープリター、トランスレーター、プログラムコンパイラー、オプティマイザー、又はアプリケーションプログラミングインターフェース（ＡＰＩ）によって定義することができる。
【０００２】
トランザクショナルメモリシステムは、同時並行して実行されている命令が共有メモリに同時に又は間違った順序でアクセスすることを防止する制御メカニズムを備える。例えば、妥当性確認メカニズムは、例えば、トランザクションが完了する前に、他のプログラムスレッドがそのトランザクションによってアクセスされたメモリを変更することなく、そのトランザクションが完了に成功したことを検証する。妥当性確認が成功した場合、トランザクションの結果は、（例えば、「コミット」演算によって）不変のものとされる。
【０００３】
トランザクションをコミットすることができない場合、例外が生成される場合もあるし、トランザクションがアボートされる場合もある。例外が生成された場合又はトランザクションがアボートされた場合、トランザクションの実行は、プログラムコードにおけるそれよりも前のポイント、例えば、「チェックポイント」にロールバックすることができる。トランザクションがアボートされた場合、トランザクションが完了に成功するまで又は単に終了するまで、トランザクションを最初から再実行することができる。
【０００４】
コンピュータープログラムコードは、多くの特殊化命令（specialized instructions）を含むことができる。これらの特殊化命令のそれぞれは、プログラムの実行中に満たすことができる特定の条件をハンドリングするように設計することができる。コード特殊化は、ランタイムにおいて、通常発生する条件（commonly occurring condition）についてコンピュータープログラム又はその一部分の最適化を試みるプログラム最適化技法である。しかしながら、コード特殊化は、通常、性能に影響を与える可能性がある分岐命令を追加する。
【０００５】
本明細書に説明される本発明は、限定としてではなく例として、添付図に示されている。説明図を単純明瞭にするために、図に示されている要素は、必ずしも一律の縮尺で描かれているとは限らない。例えば、いくつかの要素の寸法は、明瞭にするために他の要素に対して相対的に誇張されている場合がある。さらに、適切とみなされる場合には、対応する要素又は類似する要素を示すために、参照符号が図の間で繰り返されている。
【図面の簡単な説明】
【０００６】
【図１】コンピューティングデバイスの少なくとも１つの実施形態の単純化したブロック図である。
【図２】図１のコンピューティングデバイスのプロセッサコアの少なくとも１つの実施形態の単純化したブロック図である。
【図３】コード特殊化のための方法の少なくとも１つの実施形態の単純化したモジュール図である。
【図４】コード特殊化のための方法の少なくとも１つの実施形態の単純化した流れ図である。
【図５】比較命令及び分岐命令を含む特殊化コンピューター命令の少なくとも１つの実施形態の単純化した擬似コード説明図である。
【図６】比較命令及び分岐命令を含まない特殊化コンピューター命令の少なくとも１つの実施形態の単純化した擬似コード説明図である。
【発明を実施するための形態】
【０００７】
本開示の概念は、様々な変更及び代替の形態を受ける入れることができるが、それらの概念の特定の例示的な実施形態が図面に例として示され、本明細書において詳細に説明される。しかしながら、本開示の概念を開示された特定の形態に限定する意図はなく、それとは逆に、意図するものは、添付の特許請求の範囲によって画定される本発明の趣旨及び範囲内に含まれる全ての変更、均等物、及び代替形態を包含することであることが理解されるべきである。
【０００８】
以下の説明では、本開示のより十分な理解を提供するために、ロジックの実施態様、オペコード、オペランドを指定する手段、リソース分割／共有／複製の実施態様、システム構成要素のタイプ及び相互関係、並びにロジック分割／統合の選択肢等の多数の具体的な詳細が述べられている。しかしながら、本開示の実施形態は、そのような具体的な詳細がなくても実施することができることが当業者によって理解されるであろう。それ以外の場合には、制御構造、ゲートレベル回路、及び完全なソフトウェア命令シーケンスは、本発明を分かりにくくしないために詳細に示されていない。当業者であれば、含まれた説明を用いると、必要以上の実験を行うことなく、適切な機能を実施することができるであろう。
【０００９】
本明細書において「１つの実施形態」、「一実施形態」、「一例の実施形態」等と言うとき、これは、説明される実施形態が特定の特徴、構造、又は特性を含むことができるが、あらゆる実施形態がその特定の特徴、構造、又は特性を必ずしも含んでいるとは限らない場合があることを示す。その上、そのような語句は、必ずしも同じ実施形態を指しているとは限らない。さらに、特定の特徴、構造、又は特性が一実施形態に関して説明されるとき、明示的に説明されているか否かを問わず、そのような特徴、構造、又は特性を他の実施形態に関して実施することが当業者の知識の範囲内にあることを述べておく。
【００１０】
本発明の実施形態は、ハードウェア、ファームウェア、ソフトウェア、又はそれらの任意の組み合わせで実施することができる。コンピューターシステムにおいて実施される本発明の実施形態は、構成要素間の１つ又は複数のバスベースの相互接続部及び／又は構成要素間の１つ又は複数のポイントツーポイント相互接続部を備えることができる。本発明の実施形態は、一時的又は非一時的な機械可読媒体によって担持されるか又はこの機械可読媒体上にストアされる命令として実施することもできる。これらの命令は、１つ又は複数のプロセッサが読み出して実行することができる。機械可読媒体は、機械（例えば、コンピューティングデバイス）によって可読な形態で情報をストア又は送信するための任意のデバイス、メカニズム、又は物理構造体として具現化することができる。例えば、機械可読媒体は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、ミニＳＤカード又はマイクロＳＤカード、メモリスティック、電気信号等として具現化することができる。
【００１１】
図面において、デバイス、モジュール、命令ブロック、及びデータ要素を表す要素等の図的要素の特定の配列又は順序付けは、説明を容易にするために示されている場合がある。しかしながら、図面におけるこれらの図的要素の特定の順序付け又は配列は、プロセスの特定の順序又はシーケンスが必要とされていることも、プロセスの分離が必要とされていることも暗に意味するように意図しているものではないことが当業者によって理解されるべきである。さらに、図的要素が図面に含まれているということは、そのような要素が全ての実施形態において必要とされることを暗に意味するように意図しているものでもなければ、そのような要素によって表される特徴部をいくつかの実施形態における他の要素に含めることができないか又は他の要素と組み合わせることができないことを暗に意味するように意図しているものでもない。
【００１２】
一般に、命令ブロックを表すのに用いられる図的要素は、任意の好適な形態の機械可読命令を用いて実施することができる。この任意の好適な形態の機械可読命令は、ソフトウェアアプリケーション又はファームウェアアプリケーション、プログラム、関数、モジュール、ルーチン、プロセス、プロシージャ、プラグイン、アプレット、ウィジェット、コードフラグメント等である。そのような各命令は、任意の好適なプログラム言語、ライブラリー、アプリケーションプログラミングインターフェース（ＡＰＩ）、及び／又は他のソフトウェア開発ツールを用いて実施することができる。例えば、いくつかの実施形態は、Ｊａｖａ、Ｃ＋＋、及び／又は他のプログラム言語を用いて実施することができる。
【００１３】
同様に、データ又は情報を表すのに用いられる図的要素は、レジスタ、データストア、テーブル、レコード、アレイ、インデックス、ハッシュ、マップ、ツリー、リスト、グラフ、ファイル（任意のファイルタイプ）、フォルダー、ディレクトリー、データベース等の任意の好適な電子的配列体又は電子的構造体を用いて実施することができる。
【００１４】
さらに、図面において、実線若しくは破線又は矢印等の接続要素が、２つ以上の他の図的要素間の接続、関係、又は関連付けを示すのに用いられている場合、そのような接続のいかなる要素がないことも、接続、関係、又は関連付けが存在する可能性がないことを暗に意味するように意図するものではない。換言すれば、要素間のいくつかの接続、関係、又は関連付けは、本開示を分かりにくくしないように図面に示されていない場合がある。また、図示を容易にするために、要素間の複数の接続、関係、又は関連付けを表すのに、単一の接続要素が用いられる場合がある。例えば、接続要素が、信号、データ、又は命令の通信を表す場合、そのような要素は、通信を実施するために必要に応じて、１つ又は複数の信号パス（例えば、バス）を表すことができることが当業者によって理解されるべきである。
【００１５】
次に図１を参照すると、一例示のコンピューティングデバイス１００が、少なくとも１つのプロセッサ１１０、メモリ１２０、入力／出力（Ｉ／Ｏ）サブシステム１２２、記憶デバイス１２４、及び１つ又は複数の周辺デバイス１４０を備える。プロセッサ１１０は、図２に示すようなトランザクショナルメモリシステム２２２をサポートする。以下でより詳細に説明するように、コンピュータープログラムコードが実行中に解析される。スペシャライザー２２８は、トランザクショナルメモリシステム２２２とインターフェースして、１つ又は複数の通常発生する条件についてのコード領域又はトランザクションを特殊化する。スペシャライザー２２８は、従来のコード特殊化技法が用いられるときにしばしば行われるように分岐命令をプログラムコードに追加するのではなく、トランザクショナルメモリシステム２２２の例外ハンドリング特徴部を利用するように構成された１つ又は複数の無分岐命令（branchless instructions）をコード領域又はトランザクションに挿入する。より具体的には、スペシャライザー２２８によって挿入された命令（複数の場合もある）は、通常発生する条件が満たされない場合に例外を生成するように構成されている。このようにして、通常のプログラムの流れが、通常発生する条件が満たされることに応答して割り込まれることなく、また分岐することなく継続することが可能になる。
【００１６】
コンピューティングデバイス１００は、特定のアプリケーションに応じて、例えば、デスクトップコンピューターシステム、ラップトップコンピューターシステム若しくはタブレットコンピューターシステム、サーバー、エンタープライズコンピューターシステム、コンピューターのネットワーク、ハンドヘルドコンピューティングデバイス、又は他の電子デバイス等の任意のタイプのコンピューティングデバイス内に又は任意のタイプのコンピューティングデバイスとして具現化することができる。
【００１７】
例示のプロセッサ１１０は、単一のコア１１２、１１４、１１６から構成される複数のプロセッサコア又は論理セクションを備える。これらのプロセッサコア又は論理セクションは、本明細書では、説明を容易にするために単に「コア」と呼ばれる。コア１１２、１１４、１１６のうちの１つ又は複数は、マルチスレッドコンピュータープログラムを処理するように構成することができる。コア１１２、１１４、１１６は、１つ又は複数のキャッシュメモリ１１８を備えるか又はそれらのキャッシュメモリに通信結合される。キャッシュメモリ１１８は、スペシャライザー２２８及び／又はコンピューティングデバイス１００の他の構成要素の演算中にデータ及び／又は命令を一時的にストアするのに利用することができる。
【００１８】
キャッシュメモリ１１８に加えて、プロセッサ１１０及び／又はそのコア１１２、１１４、１１６は、メモリ１２０を備えるか、又はそうでない場合にはメモリ１２０に通信結合される。メモリ１２０のいくつかの部分は、ダイナミックランダムアクセスメモリデバイス（ＤＲＡＭ）、同期ダイナミックランダムアクセスメモリデバイス（ＳＤＲＡＭ）、ダブルデータレートダイナミックランダムアクセスメモリデバイス（ＤＤＲ  ＳＤＲＡＭ）、及び／又は他の揮発性メモリデバイス等の任意のタイプの好適なメモリデバイスとして具現化することができる。
【００１９】
プロセッサ１１０は、Ｉ／Ｏサブシステム１２２にも通信結合されている。具体的には図示していないが、Ｉ／Ｏサブシステム１２２は、通常、メモリコントローラー（例えば、メモリコントローラーハブ（ＭＣＨ）又はノースブリッジ）と、入力／出力コントローラー（例えば、入力／出力コントローラーハブ（ＩＣＨ）又はサウスブリッジ）と、ファームウェアデバイスとを備える。もちろん、他の実施形態では、他の構成を有するＩ／Ｏサブシステムを用いることができる。例えば、いくつかの実施形態では、Ｉ／Ｏサブシステム１２２は、システムオンチップ（ＳｏＣ）の一部分を成すことができ、プロセッサ１１０及びコンピューティングデバイス１００の他の構成要素とともに、単一の集積回路チップ上に組み込むことができる。したがって、Ｉ／Ｏサブシステム１２２の各構成要素は、いくつかの実施形態では、共通の集積回路チップ上に位置することができることが理解されるであろう。
【００２０】
Ｉ／Ｏサブシステム１２２は、１つ又は複数の記憶デバイス１２４に通信結合されている。記憶デバイス１２４のいくつかの部分は、ディスク記憶デバイス（例えば、ハードディスク）、メモリカード、メモリスティック等の、データ及び／又は命令をストアするための任意の好適なデバイスとして具現化することができる。いくつかの実施形態では、オペレーティングシステム（Ｏ／Ｓ）１２６、プログラムコード（例えば、アプリケーションコード）１２８の１つ又は複数のシーケンス、プログラムコンパイラー１３０、及び／又はデータベース管理システム（ＤＢＭＳ）１３２を記憶デバイス１２４において具現化することができる。実行中に、Ｏ／Ｓ１２６、コード１２８、コンパイラー１３０、及び／又はＤＢＭＳ１３２のいくつかの部分を、より高速な処理又は他の理由のためにメモリ１２０及び／又はキャッシュ１１８内にロードすることができる。
【００２１】
Ｉ／Ｏサブシステム１２２は、１つ又は複数の周辺デバイス１４０に通信結合することができる。周辺デバイス（複数の場合もある）１４０は、例えば、コンピューティングデバイス１００の使用目的に応じて、１つ又は複数のネットワークインターフェース、グラフィックスアダプター及び／又はビデオアダプター、キーボード、タッチスクリーン、ディスプレイ、プリンター、データ記憶デバイス、及び／又は他の周辺デバイスを含むことができる。さらに、コンピューティングデバイス１００は、説明を明瞭にするために図１に図示していない他の構成要素、部分構成要素、及びデバイスを備えることができることが理解されるべきである。
【００２２】
一般に、コンピューティングデバイス１００の構成要素は、１つ又は複数の信号パスによって図１に示すように通信結合される。これらの信号パスは、双方向矢印として図的に表されている。そのような信号パスは、それぞれのデバイス間の通信を容易にすることが可能な任意のタイプの有線又は無線の信号パスとして具現化することができる。例えば、信号パスは、任意の数のワイヤー、プリント回路基板トレース、ビア、バス、ポイントツーポイント相互接続、介在デバイス等として具現化することができる。
【００２３】
次に図２を参照すると、例示のプロセッサコア１１２は、フェッチユニット２１０、論理ユニット２１２、１つ又は複数のレジスタ２１４、実行ユニット２１６、及びリタイアメントユニット２１８を備える。具体的に図示していないが、コア１１４、１１６のうちの１つ又は複数は、コア１１２と同じ又は類似の構成を有することができることが理解されるべきである。フェッチユニット２１０、論理ユニット２１２、レジスタ２１４、実行ユニット２１６、及びリタイアメントユニット２１８のそれぞれは、コンピューター回路部として、例えば、コア１１２の中央処理ユニットの電子構成要素として具現化することができる。
【００２４】
コンピューティングデバイス１００の動作中、フェッチユニット２１０は、コア１１２によって実行される命令を、キャッシュ１１８、メモリ１２０、及び／又は記憶デバイス１２４から取得する。論理ユニット２１２は、命令を処理し、実行ユニット２１６が実行することができる形態（例えば、機械レベルの命令）に変換する。トランザクショナルメモリシステム２２２の設計によれば、実行ユニット２１６が命令の実行に成功した後、リタイアメントユニット２１８は、それらの命令をコミットし、次いで、（例えば、レジスタをデアロケートすること又はプロセッサ状態を更新することによって）それらの命令をリタイアさせることができる。レジスタ２１４は、データ値、ポインターアドレス、及び／又はトリップカウント等の、命令の処理及び／又は実行に関与する値をストアするのに用いることができる。
【００２５】
一般に、トランスレーター２２０は、プログラマーがアクセス可能なコンピューター命令を、プロセッサアーキテクチャと適合した実行可能形態にトランスレートするように構成されている。例示の実施形態では、トランスレーター２２０は、プログラムコードを、トランザクショナルメモリシステム２２２をサポートするコンピューターアーキテクチャ上で実行されるように適応させる。例えば、ソフトウェアトランザクショナルメモリシステムを備えることができる他の実施形態では、トランスレーター２２０は、特定の実施態様に応じて、コンパイラー、アプリケーションプログラミングインターフェース（ＡＰＩ）、データベース管理システム等として具現化することができる。
【００２６】
トランスレーター２２０は、オプティマイザー２２６を備える。一般的に言えば、オプティマイザー２２６は、コンピュータープログラムの１つ又は複数の属性を、そのプログラムの実行中に最小又は最大にするように構成されている。当業者が理解すべきであるように、特定のアプリケーション又はシステム設計の要件に応じて、用いることができる多くのタイプの最適化が存在する。例えば、いくつかのオプティマイザーは、プログラムコードを検査して、実行頻度の高い特定のシーケンスにおいて、コンピューター命令のいずれかのシーケンスがより少ないコードと置き換えることができるか否かを確かめる。
【００２７】
例示の実施形態では、オプティマイザー２２６は、共有メモリへのアクセスを必要とするコードの領域（例えば、ロード命令又はストア命令を含むコード領域）を識別し、それらのコードの領域をトランザクションと定義する。オプティマイザー２２６は、トランザクションを定義するために必要に応じてチェックポイント及びコミット命令をコード領域内に挿入する。いくつかの実施形態では、バイナリートランスレーションダイナミックオプティマイザー、又は命令のシーケンスに遭遇すると、それらを最適化し、次いで、最適化した命令をキャッシュするように構成された類似のデバイスを用いることができる。他の実施形態では、スタティックオプティマイザーを用いることができる。
【００２８】
オプティマイザー２２６は、スペシャライザー２２８を部分構成要素として備えることもできるし、スペシャライザー２２８は、図示するように、トランスレーター２２０の別個の構成要素として具現化することもできる。スペシャライザー２２８は、通常発生する条件について、コンピューター命令のシーケンスを最適化するように構成されている。特定の条件が通常発生するものであるとみなされるか否かは、（例えば、プログラマーが）事前に決定することもできるし、（例えば、コンピューター命令の以前の実行の結果として）「オンザフライ」で決定することもできる。コンピューター命令を特殊化することが望ましいとすることができる通常発生する条件のいくつかの例には、ランタイム曖昧性除去チェック（runtime disambiguation checks）（例えば、コードは、特定のエイリアスが発生する場合又はエイリアスがない場合に特殊化される）、値特殊化（例えば、コードは、ＮＵＬＬ等の変数の高頻度で生じる値が発生する場合に特殊化される）、及びループマルチバージョニング（loop multiversioning）（例えば、コードは、特定のループトリップカウントが発生する場合に特殊化される）が含まれる。
【００２９】
図３〜図６に関して以下で説明するように、例示のスペシャライザー２２８は、新たな分岐命令を何ら導入することなく、トランザクショナルメモリシステム２２２の特徴部を用いて、通常発生する条件についてコンピューター命令のシーケンスを最適化するように構成されている。
【００３０】
例示のトランザクショナルメモリシステム２２２は、制限付きトランザクショナルメモリ（ＲＴＭ）システム等の、トランザクションをサポートするハードウェアシステムとして具現化される。ただし、他の実施形態では、ソフトウェアトランザクショナルメモリシステム（ＳＴＭ）又は例外に対する制御を暗黙的に転送する他のシステムを用いることができることが理解されるべきである。トランザクショナルメモリシステム２２２は、チェックポイントロジック２３０、トランザクション実行セマンティクス２３２、オーバーフローロジック２３４、及び例外ハンドラー２３６を備える。
【００３１】
チェックポイントロジック２３０は、オプティマイザー２２６とインターフェースして、チェックポイントを確立するとともにコンピューター命令のシーケンス内にコード領域又はトランザクションを定義するように構成されたコンピューター命令を備える。加えて、チェックポイントロジック２３０は、チェックポイント命令に応答して行われる動作（複数の場合もある）を指定することができる。例えば、チェックポイントロジック２２２は、チェックポイント命令に応答して、コア１１２又はコンピューティングデバイス１００の他の構成要素の特定の状態に関係したデータのストアを開始することができる。
【００３２】
トランザクション実行セマンティクス２３２は、プログラムコードにおいてトランザクショナルメモリシステム２２２の特徴部を起動して利用するのに用いることができるセマンティクス（例えば、命令又はコードライブラリー）を備える。例えば、トランザクション実行セマンティクス２３２は、例外に対する制御の（例えば、システム設計に応じて、インタープリター又はネイティブ実行への）暗黙的な転送を可能にする。例示の実施形態では、トランザクション実行セマンティクス２３２は、チェックポイントセマンティクス、ロールバックセマンティクス、及びコミットセマンティクス、並びにブール又はビット単位の論理のためのセマンティクス、算術のためのセマンティクス、及び例外ハンドラー２３６を起動するためのセマンティクスを備える。
【００３３】
オーバーフローロジック２３４は、オーバーフローが発生した（例えば、或る値が、キャッシュ１１８又はメモリ１２０にストアすることができる最大サイズを超えた）場合に行われる動作（複数の場合もある）を指定するように構成されたロジックを備える。例えば、オーバーフローロジック２３４は、オーバーフローイベントに応答して、コンピューティングデバイス１００又はその構成要素の状態に関係したデータをストアすることができる。
【００３４】
例外ハンドラー２３６は、フェッチユニット２１０によって取得された命令によって例外が生成された場合に行われる動作（複数の場合もある）を決定するように構成されたロジックを備える。例えば、例外ハンドラー２３６は、プログラム実行を命令のシーケンス内の以前のチェックポイントにロールバックし、そのチェックポイントから実行を続けるか、又はトランザクションをアボートするように構成されたロジックを備えることができる。
【００３５】
算術論理ユニット（ＡＬＵ）２２４は、算術ユニット２４０及び論理ユニット２４２を備える。算術ユニット２４０は、加算、減算、除算、乗算等の算術演算をハンドリングするように構成されている。論理ユニット２４２は、アンド演算、オア演算、及び排他的オア演算等のブール及び／又はビット単位の論理演算をハンドリングするように構成されている。
【００３６】
次に図３を参照すると、動作中、コンピューター命令３２２のシーケンスが、トランスレーター２２０に入力される。命令３２２は、オプティマイザー２２６及び／又はスペシャライザー２２８によってまだ処理されていないので、「特殊化されていない」コードと呼ばれる。本明細書において説明したようなトランスレーター２２０（オプティマイザー２２６及びスペシャライザー２２８を備える）による処理後、命令３２２の最適化及び／又は特殊化バージョン３３０が生成される。これらの最適化及び／又は特殊化命令３３０は、実行ユニット２１６による実行までキャッシュ１１８にストアすることができる。
【００３７】
次に図４を参照すると、コードスペシャライザー２２８によって実行可能な例示の方法４００が示されている。ブロック４１０において、方法４００は、オプティマイザー２２６によってコード領域又はトランザクションと定義された１つ又は複数の命令を（例えば、キャッシュ１１８又はメモリ１２０から）取得する。この開示において、「コード領域」は、トランスレーター２２０（例えば、オプティマイザー２２６）によって、少なくとも１つのトランザクションを含むものと判断されたコンピューター命令のシーケンスを含むことができる。換言すれば、いくつかの実施形態では、コード領域は、１つ又は複数のトランザクションを含むことができる一方、他の実施形態では、コード領域は、単一のトランザクションを含むことができる。
【００３８】
例示の実施形態では、トランザクションは、チェックポイント命令及びその後に続くコミット命令によって定義される。ブロック４１２において、方法４００は、コード領域内の各トランザクションを解析して、トランザクション内の１つ又は複数の命令のうちのいずれが、通常発生する条件に応答して実行可能であるように所望されているのかを決定する。この決定を行うために、方法４００は、通常発生する条件が満たされた場合にのみ実行される或る特定の命令が存在するか否かを検討することができる。代替的に又は追加的に、方法４００は、通常発生する条件に応答して、トランザクション内の命令の全て又は複数を実行することができるが、通常発生する条件に応答して、それらの命令のうちのいくつかのみを実行することが望ましい場合があると判断することができる。これは、例えば、コードのいくつかの部分が異なる条件について最適化されているときに当てはまる場合がある。
【００３９】
ブロック４１４において、方法４００は、１つ又は複数の無分岐命令をコード領域内に挿入する。これらの無分岐命令は、通常発生する条件についての通常のプログラムの流れ（例えば、分岐を有しない）を保存するように構成されている。例示の実施形態では、無分岐命令（複数の場合もある）は、通常発生する条件が満たされないことに応答して、例外を生成する（それによって、例外ハンドラー２３６を起動する）ように構成された少なくとも１つの命令を含む。無分岐命令は、ＡＬＵ２２４がサポートすることができる任意の形態の非分岐（non-branching）の論理演算及び／又は算術演算を含むことができる。換言すれば、ブロック４１４の結果として、比較命令及び分岐命令はコード領域内に挿入されない。
【００４０】
ブロック４１６において、方法４００は、特定のアプリケーション又は設計に適切な場合があるように、通常発生する条件に応答して実行可能であるように所望されていないいずれかの命令をコード領域内に識別し、例外ハンドラー２３６とインターフェースして、それらの命令を例外ハンドリングメカニズム（例えば、ロールバック命令又はアボート命令）に関連付ける。トランザクショナルメモリシステム及び例外に対する制御を暗黙的に転送する他のシステムでは、通常発生する条件に応答して実行可能でない命令の制御及び実行の転送は、例外ハンドラー２３６によって暗黙的にハンドリングされる。
【００４１】
ブロック４１８において、方法４００は、通常発生する条件に応答して実行可能であるように所望されていない命令（例えば、ブロック４１６において例外に関連付けられた命令）をコード領域から除去する。これは、例えば、命令の周囲にコメント括弧を挿入することによって行うことができる。命令は、（例えば、通常発生しない条件（uncommonly occurring condition：まれに発生する条件）が生じた場合に、プログラムがアボートするように）完全に除去することもできるし、プログラムコードのシーケンシャルリスト内の別のロケーションに移動させることもできる。このようにして、コード領域又はトランザクションは、通常発生する条件を対象にするコードのみを含むように特殊化することができる。その上、通常発生する条件に応答して実行可能であるように所望されているコードが最適化された場合、コード領域は、最適化されたコードのみを含むことができる。通常発生しない条件のハンドリングを対象にするか、又は通常発生する条件に応答して実行可能であるように所望されていないいずれのコードも、最適化されないまま残すこともできるし、オプティマイザー２２６によって別個に処理することもできる。
【００４２】
次に図５を参照すると、従来のコード特殊化技法を用いて特殊化されたコンピューター命令５２２のシーケンスの一例が示されている。命令５２２は、コード領域５３２を含む。図示していないが、コード５２２は、他のコンピューター命令及び／又はコード領域も同様に含むことができることが理解されるべきである。
【００４３】
従来のコード特殊化技法を用いて処理した後、コード領域５３２が、その後にコミット命令５５０がシーケンシャルに続くチェックポイント命令５４０によって定義される。チェックポイント命令５４０とコミット命令５５０との間において、比較命令及び分岐命令５４２がコード領域５３２に追加されている。比較命令及び分岐命令５４２は、２つのレジスタｒ１及びｒ２にストアされたデータを比較する。ｒ１及びｒ２にストアされた値が等しい場合、プログラム実行は、「Unoptimized version」（最適化されていないバージョン）というラベルによって示されているように、通常発生する条件が満たされない場合に実行されるように構成された命令５４４をスキップする。
【００４４】
プログラムフローは、「Optimized version」（最適化されたバージョン）ラベルにジャンプし、それから、通常発生する条件が満たされた場合に実行されるように構成された命令５４６の実行を継続する。命令５４６が実行を終了すると、プログラムフローは、コミット命令５５０に進む。
【００４５】
比較命令及び分岐命令５４２の結果が、ｒ１及びｒ２にストアされたデータが等しくないことを示す場合、プログラムフローは、命令５４４の実行に進む。命令５４４が実行を終了すると、プログラムフローは、Fallthroughラベル５４８にジャンプする。上記例から見て取ることができるように、分岐は、通常発生する条件（例えば、ｒ１がｒ２に等しい）が満たされるときと、通常発生しない条件（例えば、ｒ１がｒ２に等しくない）が満たされるときとの双方のときに行われる。
【００４６】
次に図６を参照すると、本明細書において開示したようなスペシャライザー２２８によって処理された後のコード領域６３２を含むコンピューター命令６２２のシーケンスが示されている。この命令のシーケンスの残りの部分（例えば、命令６２２のシーケンスのうち、コード領域６３２の外部にある部分）は、コード領域６３２の処理による影響を受けないまま維持される場合もあるし、コード領域６３２の処理によって変更される場合もある。例えば、通常発生しない条件の発生に応答して実行されるように構成された命令は、コード領域６３２から除去して命令６２２のシーケンス内の他の箇所に配置することができる。
【００４７】
特殊化されたコード領域６３２は、比較命令及び分岐命令を含まない。特殊化されたコード領域６３２は、チェックポイント命令６４０及びコミット命令６５０によって定義される。チェックポイント命令６４０とコミット命令６５０との間において、例外発生命令６４２、６４４、６４６のシーケンスがコード領域６３２内に挿入される。図示した例では、例外発生命令６４２、６４４、６４６は、ブール又はビット単位の論理命令（６４２）、算術関数（６４４）、及び例外生成命令６４６を含む。
【００４８】
より具体的には、図示した例では、排他的ＯＲ（ＸＯＲ）関数が、レジスタｒ１及びｒ２にストアされたデータを比較するのに用いられる。ｒ１及びｒ２にストアされたデータが等しい場合、ＸＯＲ関数の結果は０であり、この値０はｒ１にストアされる。加算関数（例えば、ＡＤＤ）が、ｒ１の値を最大許容整数（例えば、＄ＩＮＴ＿ＭＡＸ）に加算する。ｒ１の値が０以外である場合、ｒ１及び＄ＩＮＴ＿ＭＡＸの和が最大許容整数よりも大きいので、オーバーフローフラグがセットされる。
【００４９】
オーバーフローフラグがセットされている場合、例外生成命令（例えば、ＩＮＴＯ）が、例外ハンドラー２３６を起動する例外を生成する。オーバーフローフラグがセットされていない場合、レジスタｒ１及びｒ２にストアされたデータは等しく、プログラムフローは、割り込みを受けることも分岐することもなく、通常発生する条件（この例では、ｒ１及びｒ２が等しいという条件）について最適化された命令のシーケンスを継続する。例えば、いくつかの実施形態では、オーバーフローフラグがセットされていない場合、ＮＯＰ（演算が実行されない）命令を発行することができる。通常発生する条件についての命令の実行に続いて、プログラムフローはコミット命令６５０に進む。
【００５０】
オーバーフローフラグがセットされ、それによって、通常発生しない条件が満たされていることが示されている場合、例外ハンドラー２３６は、トランザクションをロールバックし及び／又はプログラムフローを、通常発生しない条件の場合に実行される命令のロケーションにリダイレクトするように構成することもできるし、トランザクションをアボートすることもできる。
【００５１】
本開示を図面及び上記説明に詳細に図示及び説明してきたが、そのような図示及び説明は、その性質上、限定ではなく例示であるとみなされるべきである。単に例示の実施形態が図示及び説明されていること、並びに、本開示の趣旨に含まれる全ての改変及び変更は保護されるように所望されていることが理解される。さらに、本開示の態様は、ハードウェアベースのトランザクショナルメモリシステムとの関連で説明されているが、様々な態様は、他の用途、例えば、トランザクションメモリシステム又は例外に対する制御を暗黙的に転送する他のシステムの特徴部が利用可能である、１つ又は複数の通常発生する条件についてプログラムコードを特殊化することが所望されている任意の用途（例えば、ハードウェアベースのトランザクショナルシステム及び／又はソフトウェアベースのトランザクショナルシステム）を有することが理解されるであろう。そのような用途は、例えば、コンパイラー、システムソフトウェア若しくはアプリケーションソフトウェア、及び／又はデータベースシステムを含むことができる。ここで本実施形態の例を項目として示す。
［項目１］
方法であって、
実行中に、通常発生する条件が満たされることに応答して、トランザクショナルメモリシステムによって実行可能な少なくとも１つの第１の命令を含むコンピューター命令のシーケンスを解析することと、
通常発生する条件が満たされるか否かを判断するとともに、通常発生する条件が満たされないことに応答してトランザクショナルメモリシステムの例外ハンドリング特徴部とインターフェースするように構成された少なくとも１つの無分岐命令をコンピューター命令のシーケンスに挿入することと、
を含む、方法。
［項目２］
コンピューター命令のシーケンス内において少なくとも１つの第２の命令を識別することであって、該少なくとも１つの第２の命令は、通常発生する条件が満たされないことに応答して実行可能であることと、少なくとも１つの第２の命令を、通常発生する条件が満たされないことに応答してトランザクショナルメモリシステムの例外ハンドリング特徴部を起動するように構成された少なくとも１つの例外発生命令に関連付けることとを含む、項目１に記載の方法。
［項目３］
少なくとも１つの第２の命令をコンピューター命令のシーケンスから除去することを含む、項目１に記載の方法。
［項目４］
少なくとも１つの第１の命令を通常発生する条件について最適化することを含む、項目１に記載の方法。
［項目５］
少なくとも１つの無分岐命令を比較命令及び分岐命令の代わりにコンピューター命令のシーケンスに挿入することを含む、項目１に記載の方法。
［項目６］
少なくとも１つの無分岐命令において、メモリレジスタが特定の値を保持するか否かを判断することを含む、項目１に記載の方法。
［項目７］
特定の値が符号付きであるか否かを判断することと、特定の値が符号付きである場合に、特定の値に関連付けられた符号ビットをマスクすることとを含む、項目６に記載の方法。
［項目８］
少なくとも１つの無分岐命令において、ポインターが特定のメモリアドレスに関連付けられているか否かを判断することを含む、項目１に記載の方法。
［項目９］
少なくとも１つの無分岐命令において、データの一部が特定の値を有するか否かを判断することを含む、項目１に記載の方法。
［項目１０］
少なくとも１つの無分岐命令において、トリップカウントが特定の値を有するか否かを判断することを含む、項目１に記載の方法。
［項目１１］
少なくとも１つの無分岐命令において、少なくとも１つの例外ハンドリング命令を起動することであって、コンピューター命令のシーケンスの実行をチェックポイントにロールバックするか又はコンピューター命令のシーケンスの実行をアボートすることを含む、項目１に記載の方法。
［項目１２］
通常発生する条件が満たされないことに応答して少なくとも１つの例外ハンドリング命令を起動することと、少なくとも１つの例外ハンドリング命令の起動することに応答して最適化されていない命令を実行することとを含む、項目１に記載の方法。
［項目１３］
少なくとも１つの第１の命令の前に、少なくとも１つの無分岐命令をコンピューター命令のシーケンスに挿入することを含む、項目１に記載の方法。
［項目１４］
チェックポイント命令及びコミット命令をコンピューター命令のシーケンス内に挿入することによって、コンピューター命令のシーケンスの少なくとも１つの命令を、トランザクショナルメモリシステムによって実行するように構成されたトランザクションとして定義することを含む、項目１に記載の方法。
［項目１５］
通常発生する条件が満たされないことに応答して、ハードウェアベースのトランザクショナルメモリシステム及びソフトウェアベースのトランザクショナルメモリシステムのうちの少なくとも一方とインターフェースすることを含む、項目１に記載の方法。
［項目１６］
コンピューティングデバイスであって、
少なくとも１つのプロセッサと、
該少なくとも１つのプロセッサに結合されたコンピューター回路部であって、少なくとも１つのプロセッサに項目１〜１５のいずれか１項に記載の方法を実行させるように構成されている、コンピューター回路部と、
を備える、コンピューティングデバイス。
［項目１７］
少なくとも１つのコンピューターアクセス可能媒体であって、実行されたことに応答して、コンピューティングデバイスが項目１〜１５のいずれか１項に記載の方法を実行することをもたらす複数の命令を含む、少なくとも１つのコンピューターアクセス可能媒体。
［項目１８］
方法であって、
コンピューター命令のシーケンスを、コンピューティングデバイスのトランザクショナルメモリシステムによって実行するように構成されたトランザクションとして識別することであって、該トランザクションは、チェックポイント命令及びコミット命令によって定義され、該トランザクションは、通常発生する条件が満たされることに応答して実行可能な少なくとも１つの第１の命令と、通常発生する条件が満たされないことに応答して実行可能な少なくとも１つの第２の命令とを含むことと、
少なくとも１つの例外発生命令をコンピューター命令のシーケンスに挿入することであって、該少なくとも１つの例外発生命令は、少なくとも１つの第１の命令が分岐することなく実行されることを可能にするように構成されるとともに、通常発生する条件が満たされないことに応答してトランザクショナルメモリシステムの例外ハンドリング特徴部を起動するように構成されていることと、
少なくとも１つの第２の命令をトランザクションから除去することと、
を含む、方法。
［項目１９］
通常発生する条件が満たされることに応答して少なくとも１つの最適化された命令を実行し、通常発生する条件が満たされないことに応答してトランザクションの実行をチェックポイントにロールバックして、少なくとも１つの最適化されていない命令を実行するように構成される、項目１８に記載の方法。
［項目２０］
コンピューティングデバイスであって、
少なくとも１つのプロセッサと、
少なくとも１つのプロセッサに結合されたコンピューター回路部であって、少なくとも１つのプロセッサに項目１８又は１９に記載の方法を実行させるように構成されている、コンピューター回路部と、
を備える、コンピューティングデバイス。
［項目２１］
少なくとも１つのコンピューターアクセス可能媒体であって、実行されたことに応答して、コンピューティングデバイスが項目１８又は１９に記載の方法を実行することをもたらす複数の命令を含む、少なくとも１つのコンピューターアクセス可能媒体。
［項目２２］
方法であって、
コンピューター命令のシーケンスを解析することと、
コンピューター命令のシーケンスの少なくとも１つのコード領域を識別するように構成されたコード特殊化ルーチンを実行することであって、少なくとも１つのコード領域は、コンピューティングデバイスのトランザクショナルメモリシステムによってトランザクションとして実行可能であることと、
コード領域のうちの１つ又は複数について、
該コード領域に、通常発生する条件が満たされたか否かを判断するように構成された少なくとも１つの無分岐命令を挿入することと、
該コード領域に、通常発生する条件が満たされないことに応答して例外を生成するように構成された少なくとも１つの例外発生命令を挿入することと、
を含む、方法。
［項目２３］
少なくとも１つの無分岐命令は、ビット単位論理オペレーション及び算術オペレーションを含む、項目２２に記載の方法。
［項目２４］
ビット単位論理オペレーションは、排他的ＯＲ（ＸＯＲ）命令であり、少なくとも１つの例外発生命令は、オーバーフローフラグをセットすることを含む、項目２３に記載の方法。
［項目２５］
コンピューティングデバイスであって、
少なくとも１つのプロセッサと、
少なくとも１つのプロセッサに結合されたコンピューター回路部であって、少なくとも１つのプロセッサに項目２２〜２４のいずれか１項に記載の方法を実行させるように構成されている、コンピューター回路部と、
を備える、コンピューティングデバイス。
［項目２６］
少なくとも１つのコンピューターアクセス可能媒体であって、実行されたことに応答して、コンピューティングデバイスが項目２２〜２４のいずれか１項に記載の方法を実行することをもたらす複数の命令を含む、少なくとも１つのコンピューターアクセス可能媒体。
【図１】
0005906325.tif 000002
【図２】
0005906325.tif 000003
【図３】
0005906325.tif 000004
【図４】
0005906325.tif 000005
【図５】
0005906325.tif 000006
【図６】
0005906325.tif 000007