(57)【特許請求の範囲】
【請求項１】
プロセッサとダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを含むシステムであって、
前記プロセッサは、
トランザクションメモリ（ＴＭ）プログラムを実行し、かつ、ハードウェアレコーディングロジックを介して前記ＴＭプログラムを記録するためのハードウェアトランザクションメモリ（ＨＴＭ）とソフトウェアトランザクションメモリ（ＳＴＭ）とを含むハイブリッドトランザクションメモリ（ＨｙＴＭ）と、
記録された前記ＴＭプログラムをリプレイするためのプログラムデバッガであり、
前記プログラムデバッガは、前記ＴＭプログラムのインストラクションをリプレイし、一つまたはそれ以上のリプレイされたインストラクションが非トランザクションインストラクションである場合には、非トランザクション実行のために前記一つまたはそれ以上のリプレイされたインストラクションを提供し、かつ、トランザクション実行のために一つまたはそれ以上の他のリプレイされたインストラクションを提供する、リプレイヤエンジンであり、さらに、前記ＨＴＭのエミュレーションによってＨＴＭインストラクションをリプレイするためのソフトウェアエミュレータに対してＨＴＭインストラクションを提供し、かつ、前記ＳＴＭの使用を通じたリプレイのためにＳＴＭインストラクションを提供する、リプレイヤエンジンを含み、
前記プログラムデバッガは、さらに、前記一つまたはそれ以上のリプレイされたインストラクションにおけるコンフリクトを分析するためのポストトランザクションインストラクションハンドラと、前記コンフリクトを解消するためのＨｙＴＭコンテンションマネージャと、を含み、前記ＨｙＴＭコンテンションマネージャは、前記ＴＭプログラムの記録において使用される第２ＨｙＴＭコンテンションマネージャをエミュレートする、
プログラムデバッガと、
を含み、
前記ダイナミックランダムアクセスメモリは、前記プログラムを保管する、
システム。
【請求項２】
前記プログラムデバッガは、さらに、
ソフトウェアトランザクションメモリ（ＳＴＭ）分離の後で、前記ＴＭプログラムの非トランザクションインストラクションをリプレイする、
請求項１に記載のシステム。
【請求項３】
前記プログラムデバッガは、
前記ＴＭプログラムにおけるパフォーマンスエラーを特定する、
請求項１に記載のシステム。
【請求項４】
前記プログラムデバッガは、
ソフトウェアトランザクションの中のメモリアクセスと非トランザクションメモリアクセスとの間のコレクトネスバグを特定するために共有メモリインターリーブを使用する、
請求項１に記載のシステム。
【請求項５】
前記プログラムデバッガは、
前記ＨＴＭインストラクションまたは前記ＳＴＭインストラクションのリプレイの後で、前記ポストトランザクションインストラクションハンドラに対して前記リプレイされたＨＴＭインストラクションまたは前記リプレイされたＳＴＭインストラクションを提供し、コンフリクトが前記リプレイされたＨＴＭインストラクションに関連するか、または前記リプレイされたＳＴＭインストラクションに関連するかを判断する、
請求項１に記載のシステム。
【請求項６】
インストラクションを含むコンピュータプログラムであって、実行されると、システムは、
ハードウェアレコーディングロジックを介して、ハードウェアトランザクションメモリ（ＨＴＭ）とソフトウェアトランザクションメモリ（ＳＴＭ）とを含むハイブリッドトランザクションメモリ（ＨｙＴＭ）によって実行されたプログラムを記録し、かつ、
前記プログラムのインストラクションをリプレイするためのリプレイヤエンジンを含むデバッガを介して前記記録されたプログラムをリプレイし、かつ、一つまたはそれ以上のリプレイされたインストラクションが非トランザクションインストラクションである場合には、非トランザクション実行のために前記一つまたはそれ以上のリプレイされたインストラクションを提供し、かつ、トランザクション実行のために一つまたはそれ以上の他のリプレイされたインストラクションを提供し、さらに、前記ＨＴＭのエミュレーションによってＨＴＭインストラクションをリプレイするためのソフトウェアエミュレータに対してＨＴＭインストラクションを提供し、かつ、前記ＳＴＭの使用を通じたリプレイのためにＳＴＭインストラクションを提供し、
ポストトランザクションインストラクションハンドラにおいて、前記一つまたはそれ以上のリプレイされたインストラクションにおけるコンフリクトを分析し、かつ、
ＨｙＴＭコンテンションマネージャにおいて、前記コンフリクトを解消し、
前記ＨｙＴＭコンテンションマネージャは、前記ＴＭプログラムの記録において使用される第２ＨｙＴＭコンテンションマネージャをエミュレートし、
前記デバッガは、ソフトウェアトランザクションの中のメモリアクセスと非トランザクションメモリアクセスとの間のコレクトネスバグを特定するために、前記ハードウェアレコーディングロジックによって順序付けされた共有メモリインターリーブを使用する、
コンピュータプログラム。
【請求項７】
前記コンピュータプログラムは、さらに、
コレクトネスエラーを特定するインストラクションを含んでいるプログラムのリプレイを介して、前記プログラムにおける一つまたはそれ以上のコンフリクトを検出するインストラクション、を含む、
請求項６に記載のコンピュータプログラム。
【請求項８】
前記リプレイは、
前記ＨｙＴＭによって実施された前記プログラムの実行の記録を正確にエミュレーションする、
請求項６に記載のコンピュータプログラム。
【請求項９】
プログラムをリプレイする前記インストラクションは、前記プログラムのプログラムインストラクションが、トランザクションインストラクションであるか、または、非トランザクションインストラクションであるかを判断するインストラクションを含み、
前記プログラムインストラクションが非トランザクションインストラクションである場合に、ソフトウェアトランザクションメモリ（ＳＴＭ）の後で、リプレイが実行される、
請求項６に記載のコンピュータプログラム。
【請求項１０】
前記コンピュータプログラムは、さらに、
前記システムに、トランザクションアボートのロケーションと前記トランザクションアボートの原因のうち少なくとも一つを取得させるインストラクション、を含む、
請求項６に記載のコンピュータプログラム。
【請求項１１】
前記プログラムのリプレイは、第１スレッドの実行の停止および第２スレッドの実行の再開を生じさせる少なくとも一つのコンテクストスイッチを含み、かつ、
前記リプレイは、前記ＨＴＭのソフトウェアエミュレーションを使用して実行される、
請求項６に記載のコンピュータプログラム。
【請求項１２】
前記コンピュータプログラムは、さらに、
ソフトウェアエミュレーションを介して、前記ＨＴＭのトランザクションメモリコンテンションマネージャのアボート意思決定部分をエミュレーションするインストラクション、を含む、
請求項６に記載のコンピュータプログラム。
【請求項１３】
コンピュータシステムにおいて、プロセッサによって実施される方法であって、
ハードウェアレコーディングロジックを介して、ハードウェアトランザクションメモリ（ＨＴＭ）とソフトウェアトランザクションメモリ（ＳＴＭ）とを含むハイブリッドトランザクションメモリ（ＨｙＴＭ）によって実行されたプログラムを記録する、ステップと、
前記プログラムのインストラクションをリプレイするためのリプレイヤエンジンを含むデバッガを介して、前記記録されたプログラムをリプレイするステップであり、
一つまたはそれ以上のリプレイされたインストラクションが非トランザクションインストラクションである場合に、非トランザクション実行のために前記一つまたはそれ以上のリプレイされたインストラクションを提供するステップ、および、トランザクション実行のために一つまたはそれ以上の他のリプレイされたインストラクションを提供するステップ、を含み、
前記ＨＴＭのエミュレーションによってＨＴＭインストラクションをリプレイするためのソフトウェアエミュレータに対してＨＴＭインストラクションを提供するステップ、および、前記ＳＴＭの使用を通じたリプレイのためにＳＴＭインストラクションを提供するステップ、を含む、
リプレイするステップと、
前記プログラムをリプレイするステップを介して、前記プログラムにおける一つまたはそれ以上のコンフリクトを特定するステップであり、ポストトランザクションインストラクションハンドラにおいて、前記一つまたはそれ以上のリプレイされたインストラクションにおける前記一つまたはそれ以上のコンフリクトを分析するステップを含む、ステップと、
ＨｙＴＭコンテンションマネージャにおいて、前記コンフリクトを解消するステップであり、前記ＨｙＴＭコンテンションマネージャは、前記ＴＭプログラムの記録において使用される第２ＨｙＴＭコンテンションマネージャをエミュレートする、ステップと、
を含む、方法。
【請求項１４】
前記方法は、さらに、
ソフトウェアエミュレーションを介して、前記ＨＴＭのトランザクションメモリコンテンションマネージャのアボート意思決定部分をエミュレーションするステップ、
を含む、請求項１３に記載の方法。
【請求項１５】
前記プログラムの非トランザクションインストラクションのリプレイは、ソフトウェアトランザクションメモリ（ＳＴＭ）分離の後で実行される、
請求項１３に記載の方法。
【請求項１６】
前記方法は、さらに、
前記プログラムに関連するトランザクションアボートのロケーションと前記トランザクションアボートの原因のうち少なくとも一つを取得するステップ、
を含む、請求項１３に記載の方法。
【請求項１７】
前記方法は、さらに、
前記ハードウェアレコーディングロジックを介して、ソフトウェアトランザクションと非トランザクションメモリアクセスによってインターリーブされた共有メモリアクセスを順序付けするステップ、
を含む、請求項１３に記載の方法。
【請求項１８】
前記方法は、さらに、
ソフトウェアトランザクションの中のメモリアクセスと非トランザクションメモリアクセスとの間のコレクトネスバグを特定するために、前記ハードウェアレコーディングロジックによって順序付けされた共有メモリインターリーブを使用するステップ、
を含む、請求項１３に記載の方法。
【請求項１９】
請求項６乃至１２いずれか一項に記載のコンピュータプログラムを記憶したコンピュータで読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクションメモリに関する。
【背景技術】
【０００２】
ハードウェアトランザクションメモリ（ｈａｒｄｗａｒｅ  ｔｒａｎｓａｃｔｉｏｎａｌ  ｍｅｍｏｒｙ、ＨＴＭ）システムは、近い将来において幅広いスケールでの適合のために利用可能であり得る。ＨＴＭシステムは、テストされて安定なソフトウェアトランザクションメモリシステムと組み合わされて、プログラム可能性とパフォーマンスの観点で、ロックベース（ｌｏｃｋ−ｂａｓｅ）の並行（ｐａｒａｌｌｅｌ）プログラミングよりも魅力的な代替案になり得るものである。
【０００３】
ハイブリッドトランザクションメモリ（ＴＭ）システム（”ＨｙＴＭ”）は、ＨＴＭとソフトウェアトランザクションメモリ（ＳＴＭ）の両方を利用するシステムである。従来のデバッキング技術、ブレイクポイント（ｂｒｅａｋｐｏｉｎｔ）およびアドホック（ａｄ  ｈｏｃ）Ｉ／Ｏデバッキングといったものは、ＨｙＴＭに対して適用されない。従来のデバッキング技術は、デバッキング技術が、ハードウェアトランザクションについてイリーガル（ｉｌｌｅｇａｌ）な所定のインストラクション（例えば、インタラプト、Ｉ／Ｏ、コンテクストスイッチ、等）を使用する場合に、ハードウェアトランザクションをアボート（ａｂｏｒｔ）させ得るからである。従って、ＨｙＴＭシステムについて生じる疑問は、いくつかのハードウェアトランザクションを実行するトランザクションメモリプログラムをどのようにデバッグするかである。
【図面の簡単な説明】
【０００４】
【図１】図１は、本発明の実施例に従った、レコードとリプレイ（ＲｎＲ）システムのブロックダイヤグラムである。
【図２】図２は、本発明の実施例に従った、リプレイヤ／トランザクションデバッガのブロックダイヤグラムである。
【図３】図３は、本発明の一つの実施例に従った、トランザクションプログラムのデバッキングを促進するためのフローチャートである。
【図４】図４は、本発明の一つの実施例に従った、プロセッサコアのブロックダイヤグラムである。
【図５】図５は、本発明の一つの実施例に従った、システムのブロックダイヤグラムである。
【発明を実施するための形態】
【０００５】
レコードとリプレイ（ｒｅｃｏｒｄ−ａｎｄ−ｒｅｐｌａｙ、ＲｎＲ）システムが、ここにおいて提示される。ＲｎＲソフトウェアリプレイヤ（ｓｏｆｔｗａｒｅ  ｒｅｐｌｙｅｒ）を含むものである。ＲｎＲシステムは、ＨＴＭを使用するＨｙＴＭシステム（ここにおいては「ＨｙＴＭ」も同様）のためのデバッキング（ｄｅｂｕｇｇｉｎｇ）支援を提供し得る。ここにおいて提示されるレコードとリプレイシステム（ＲｎＲ  ｓｙｓｔｅｍ）においては、ハードウェアシステムによって、トランザクションメモリ（ＴＭ）プログラムが実行され、かつ、記録（ｒｅｃｏｒｄ）される。そして、次に、根底にある（ｕｎｄｅｒｌｙｉｎｇ）ハードウェアのエミュレーションとＨｙＴＭシステムのソフトウェア部分の実施との組み合わせを使用するソフトウェアシステムによってリプレイされる。
【０００６】
ハードウェアベースのレコーディング（ｒｅｃｏｒｄｉｎｇ）を使用して、ここにおいて提示されるＲｎＲシステムは、ＴＭプログラムのコンテンションシグネチャ（ｃｏｎｔｅｎｔｉｏｎ  ｓｉｇｎａｔｕｒｅ）をそのままにしておき、コレクトネス（ｃｏｒｒｅｃｔｎｅｓｓ）ＴＭバグ（例えば、プログラミングエラー）とパフォーマンスＴＭバグ（例えば、効率関連の問題）が記録され得るようにしている。ソフトウェアベースのリプレイを使用することで、記録されたＴＭプログラムは、役に立つコレクトネスとパフォーマンスのデバッキング分析を提供するように、ＳＴＭとＨＴＭのエミュレーションとの組み合わせを使用してリプレイされ得る。
【０００７】
ここにおいて提示されるＲｎＲトランザクションデバッガ（ＴＤＢ）システムは、ＴＭプログラムの実行に対する無視できるほどの摂動（ｐｅｒｔｕｒｂａｔｉｏｎ）を伴って、ＴＭプログラムを正確に記録し、リプレイすることができる。ここにおいて提示される方法および装置は、バグのある（ｂｕｇｇｙ）ＴＭプログラムのコンテンションシグネチャを変更しない。ＲｎＲ  ＴＤＢシステムは、トランザクションのアボートの正確なロケーション（ｌｏｃａｔｉｏｎ）と原因を取得（ｃａｐｔｕｒｅ）することができ、実行失敗（ｆａｉｌｕｒｅ）の原因を判断するために、プログラマが、ＴＭプログラムを分析できるようにし得る。
【０００８】
図１は、本発明の実施例に従った、ＲｎＲシステム１００のブロックダイヤグラムである。システム１００は、ハードウェアレコーディングロジック１０２、ストレージ１０６、および、ソフトウェアトランザクションデバッガ（ＴＤＢ）リプレイソフトウェア１１０と仮想マシン編成（ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ）ツール１１２とを含むソフトウェアリプレイヤ１０８、を含んでいる。
【０００９】
オペレーションにおいて、（ハードウェア）レコーディングロジック１０２は、ＴＭプログラム１０４の実行の最中に生じるイベントを記録し得る。イベントは、これらに限定されるわけではないが、トランザクション開始、トランザクション終了、および、トランザクションアボート、を含んでよい。イベントは、記録されたログ（ｌｏｇ）ファイルのように、ストレージの中に記録され得る。
【００１０】
ソフトウェアリプレイヤ１０８は、プログラムレコーディングにおいて使用されるハードウェアトランザクションメモリ（ＨＴＭ）を含むレコーディングロジック１０２をエミュレート（ｅｍｕｌａｔｅ）するように構成されてよい。仮想マシン編成ツール１１２は、アプリケーションバイナリコードを測定（ｉｎｓｔｒｕｍｅｎｔ）し、リプレイするように構成されてよい。ソフトウェアリプレイヤ１０８は、ＴＤプログラム１０４をリプレイし、かつ、結果を分析し得る。例えば、コレクトネスエラーおよびパフォーマンスエラーを特定することである。
【００１１】
ＴＭシステムは、典型的には、フルエスケープアクション（ｅｓｃａｐｅ  ａｃｔｉｏｎ）をサポートしない、そして、従って、ハードウェアトランザクションのコンテクスト（ｃｏｎｔｅｘｔ）の中で実行されるインストラクションは、ハードウェアトランザクションの実行の一部になり得る。リプレイヤ１０８が、ハードウェアレコーディングロジック１０２（例えば、ＨＴＭを含んでいるもの）を使用するとすれば、プログラムスレッド（ｐｒｏｇｒａｍ  ｔｈｒｅａｄ）の順序を調整するための全ての管理オペレーションが、ハードウェアトランザクションの中に現れるだろうし、そして、オリジナルに記録されていたプログラムのビヘイビア（ｂｅｈａｖｉｏｒ）の変更を結果として生じるだろう。つまり、ハードウェアトランザクションは、ハードウェアトランザクションの実行ビヘイビアをおそらく変えるであろう追加のインストラクションを含むであろう。
【００１２】
加えて、たとえエスケープアクション（ｅｓｃａｐｅ  ａｃｔｉｏｎ）がサポートされていたとしても、コンテクストスイッチおよび入力／出力（Ｉ／Ｏ）オペレーションといった、いくつかのオペレーションは、ハードウェアトランザクションに対して未だにイリーガルなものであり得る。ハードウェアトランザクションの中でそうしたイリーガルオペレーションが実行されるとすれば、ハードウェアトランザクションは直ちにアボートされてよいだろう。コンテクストスイッチング、インタラプト、および、Ｉ／Ｏコマンドは、記録されたプログラムのリプレイにおいて考慮され得るオペレーションである。例えば、スレッド間の共有メモリインターリーブは、別のスレッド（例えば、コンテクストスイッチング）の実行を再開（ｒｅｓｕｍｅ）するために一つのスレッドの実行を停止（ｓｔａｌｌ）することによって、典型的にはリプレイにおいて管理される。
【００１３】
正確なエラーコードを用いたトランザクションアボートの再生産（ｒｅｐｒｏｄｕｃｔｉｏｎ）が、ＨＴＭエミュレーションの中に含まれている。そうしたエラーコードはコンテンションマネージャ（ｃｏｎｔｅｎｔｉｏｎ  ｍａｎａｇｅｒ）によって使用され得るからであり、それぞれのエラーコードに対して異なるコンテンション管理のビヘイビアを結果として生じている。
【００１４】
トランザクションコミット再生産は、また、上述のように、トランザクションアボートに関して同様な理由でエミュレートされてもよい。ソフトウェアフォールバック（ｆａｌｌｂａｃｋ）は、典型的には、あらゆるベストエフォート（ｂｅｓｔ−ｅｆｆｏｒｔ）ＨＴＭについて存在する。従って、ソフトウェアフォールバックは、ＨＴＭがフォワードプログレス（ｆｏｒｗａｒｄ  ｐｒｏｇｒｅｓｓ）をなし得るようにする。このように、記録されたＨＴＭベースのプログラムをリプレイするために、ソフトウェアトランザクションメモリ（ＳＴＭ）は、プログラム実行の記録、および、記録されたプログラムのリプレイの両方を行うために使用されてよい。レコーディングで使用されたＳＴＭがリプレイにおいて使用される限り、プログラムは正しくリプレイすることができる。
【００１５】
図２は、本発明の実施例に従った、リプレイヤ／トランザクションデバッガシステム２００のブロックダイヤグラムである。システム２００のコントロールは、リプレイヤエンジン２０２、非トランザクション実行（ｎｏｎ−ｔｏｒａｎｓａｃｔｉｏｎａｌ  ｅｘｅｃｕｔｉｏｎ）２０４、トランザクション実行２０６、ＳＴＭ実施２０８、ＨＴＭエミュレーション２１０、ポストトランザクションインストラクションハンドラ２１２、および、ＨｙＴＭコンテンションマネージャ２１６を含んでいる。
【００１６】
（チャンク（ｃｈｕｎｋ）ベースの）リプレイヤエンジン２０２は、ＴＭプログラムをリプレイし、そして、それぞれのインストラクションが、トランザクションインストラクションであるか、または、非トランザクションインストラクションであるか判断する。インストラクションが非トランザクションであると判断された場合に、２０４においてインストラクションがリプレイされる（例えば、ノーマル（ｎｏｒｍａｌ）実行）。非トランザクション実行は、コレクトネスデバッキングのために強力なＳＴＭ分離（ｉｓｏｌａｔｉｏｎ）を用いて実施されてよい。ノーマルリプレイ実行２０４がアボートされたインストラクションを検出した場合に、インストラクションは、ＨｙＴＭコンテンションマネージャ２１６に対して送付され得る。
【００１７】
リプレイエンジン２０２においてリプレイされているインストラクションがトランザクションインストラクションである場合に、インストラクションは、トランザクション実行２０６へ送付される。インストラクションが、ソフトウェアトランザクションに関連するトランザクションインストラクションである場合には、ＳＴＭ（ＳＴＭ実施）２０８を使用してリプレイが実行される。トランザクションインストラクションがハードウェアトランザクションに関連する場合に、インストラクションはＨＴＭエミュレーション２１０へ送付される。ポストトランザクションインストラクションハンドラ２１２は、発生したコンフリクト（ｃｏｎｆｌｉｃｔ）に関する情報を決定することができ、そして、コンフリクトを分析して、それぞれのコンフリクトの原因を決定するための精密コンフリクト検出コンポーネント２１４を含んでいる。インストラクションが、アボートまたはコミットされる場合に、インストラクションは、解決のためにハイブリッドトランザクションメモリ（ＨｙＴＭ）コンテンションマネージャ２１６へ送付され得る。
【００１８】
ハイブリッドトランザクションメモリコンテンションマネージャ（ＨｙＴＭ  ＣＭ）２１６は、コミットおよびアボートの再生産が記録されたプログラムと同一であるように、プログラムレコーディングにおいて使用されたＨｙＴＭ  ＣＭをエミュレーションする。ＨｙＴＭ  ＣＭがレプリカ（ｒｅｐｌｉｃａｔｅ）されない場合には、そうして、リプレイされるプログラムが、出力において、記録されたプログラムと同一でない可能性が存在する。ＨｙＴＭ  ＣＭ２１６は、どのトランザクションがアボートされ、かつ、どのトランザクションがコミットされるか、および、ハードウェアトランザクションまたはソフトウェアトランザクションが、トランザクションアボートの際に、いつ再実行（ｒｅ−ｅｘｅｃｕｔｅ）されるべきか、を決定する。ＨｙＴＭ  ＣＭ２１６がプログラムレコーディングにおいて使用されたＨｙＴＭ  ＣＭ２１６をエミュレーションしていない場合には、次に、トランザクションアボートおよびコミットのオーダー（ｏｒｄｅｒ）の違反となり得る。最終的にリプレイされた状態が最初に記録されたものとは異なる可能性を結果として生じ得るものである。
【００１９】
ＨＴＭのために、コンテンション管理のアボート意思決定部分が、根底にあるハードウェアによって自動的に提供されている。従って、ＨＴＭインストラクションのアボート意思決定は、ＨＴＭエミュレーション２０６によって操作される。ＨｙＴＭ  ＣＭの残りの部分は、ソフトウェアにおいて実施されてよく、そして、ＳＴＭ実施２０８の範囲の外側であってよい。ＨｙＴＭ  ＣＭ２１６がダイナミックコンテンション管理ストラテジ（ｓｔｒａｔｅｇｙ）をサポートしているか否かに応じたものであり、その場合に、ＳＴＭコンテンションマネージャは、補助ライブラリ（ａｕｘｉｌｉａｒｙ  ｌｉｂｒａｒｙ）において見い出され得る。少なくともこの理由のため、ＨｙＴＭ  ＣＭ２１６は、ＳＴＭ実施２０８から分離したコンポーネントとして示されている。
【００２０】
リプレイヤエンジン２０２は、インストラクションのチャンクの中でインストラクションをリプレイする。チャンクは、認識可能な開始マーカ（ｂｅｇｉｎｎｉｎｇ  ｍａｒｋｅｒ）と認識可能な終了マーカ（ｅｎｄ  ｍａｒｋｅｒ）によって定められる。例えば、チャンクは、トランザクションの開始から始まり、そして、トランザクションの終わり、もしくは、コンフリクトが発生したとき、または、サポートされていないインストラクションが発見されたとき、等において終了してよい。リプレイヤエンジン２０２は、同時に実行しているスレッドに係る共有メモリのアクセス間のカジュアルな順序（ｃａｓｕａｌ  ｏｒｄｅｒｉｎｇ）がリプレイにおいて維持されるように、インストラクションをリプレイするものであり、そして、全てのタイプの共有メモリ同期化（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ）メカニズムを含んでいる。ロックを取得すること、および、リリースすること、アトミック（ａｔｏｍｉｃ）インストラクションを実行し得ること、等を含むものである。加えて、リプレイエンジン２０２は、非決定性（ｎｏｎｄｅｔｅｒｍｉｎｉｓｔｉｃ）の入力システムイベント（ＯＳレベル）が、それらが記録されたように正しくリプレイするものである。
【００２１】
リプレイヤエンジン２０２は、チャンクベースのレコーディングのためチャンクベースであってよい。チャンクベースのリプレイなしでは、記録されたプログラムは正しくリプレイされないであろう。チャンクベースのリプレイヤエンジン２０２は、記録された非決定性のメモリイベントに対するパーサ（ｐａｒｓｅｒ）、記録された非決定性の入力イベントに対するパーサ、および、インストラクション毎のリプレイエンジン、を含んでよい。リプレイヤエンジン２０２は、非ＨＴＭインストラクションのエミュレーションを実行し、そして、また、マクロインストラクションのアトミック性違反（ａｔｉｍｉｃｉｔｙ  ｖｉｏｌａｔｉｏｎ）もリプレイし得る。
【００２２】
ポストトランザクションインストラクションハンドラ２１０は、リプレイされるトランザクションのための精密コンフリクト検出コンポーネント２１４を含んでいる。ハードウェアとソフトウェアトランザクション間での精密なコンフリクト検出は、ハードウェアとソフトウェアトランザクションについてプログラムのトランザクション分離セマンティック（ｓｅｍａｎｔｉｃ）を最初に記録されたように保持しながら、実行されるものである。ここにおいて説明される精密コンフリクト検出は、（チャンクベースの）リプレイヤエンジン２０２によって、トランザクションコンフリクトのソース（ｓｏｕｒｃｅ）を追跡するために使用され、そして、プログラムのセマンティックまたはビヘイビアを、最初に記録されたように、変更しない。
【００２３】
精密コンフリクト検出は、以降の実施例において実施されてよい。ソフトウェアトランザクションがハードウェアトランザクションによってアボートされることを仮定しており、ソフトウェアトランザクションとハードウェアトランザクションとの間のコンフリクトの特定に関して精度を欠くことがある。ＳＴＭは、ソフトウェアトランザクションをアボートさせるハードウェアトランザクションの直接的な知識を有しないからである。ソフトウェアトランザクションとハードウェアトランザクションとの間の精密コンフリクト検出を（例えば、コンフリクト特定の目的だけのために）含むことによって、システム２００は、コンフリクトの正確なロケーションを（プログラムの中で）特定することができ、例えば、そうでなければ発生し得るメモリコンフリクトに対する誤検知（ｆａｌｓｅ  ｐｏｓｉｔｉｖｅ）または推測ロケーションを取り除くことによって、デバッキングの品質を改善することができる。
【００２４】
非トランザクションリプレイ実行２０４は、強力なＳＴＭ分離を含んでいる。ＲｎＲシステム２００を用いて達成可能な特性の一つは、リプレイされたソフトウェアトランザクションに対する強力なＳＴＭ分離のシミュレーションである。根底にあるＲｎＲレコーディングハードウェア、インターリーブされた共有メモリアクセスを順序付け（ｏｒｄｅｒ）することができるもの、のおかげでこのことは当初から可能である。リプレイの最中に、共有メモリインターリーブは、弱く分離されたソフトウェアトランザクション間のコレクトネスバグを特定するために使用され得る。ソフトウェアトランザクションは、メモリをアクセスし、かつ、トランザクションの外側で同時にアクセスされ得るものである。強力な分離は、リプレイされたビヘイビアを変更しない。むしろ、強力な分離は、ソフトウェアトランザクション分離が、ロー（ｒａｗ）メモリアクセスによって、いつ違反さるかを特定することができる。
【００２５】
図３は、本発明の一つの実施例に従った、トランザクションプログラムのデバッキングを促進するための方法３００に係るフローチャートである。ブロック３０２において、リプレイヤエンジンは、ＴＭプログラムにおける次のインストラクションをリプレイする。判断ダイヤモンドへ続いて、インストラクションがトランザクションインストラクションでない場合は、ブロック３０６に進み、インストラクションは、ノーマル（例えば、非トランザクション）インストラクションとして扱われて、強力なＳＴＭ分離を用いて評価される。判断ダイヤモンド３０８へ移動して、インストラクションがアボートされていない場合には、ブロック３０２に戻り、リプレイヤエンジンはプログラムの次のインストラクションをリプレイする。インストラクションがアボートされた場合には、ブロック３１８に進んで、コンフリクトを解決するために、インストラクションがハイブリッドトランザクションコンテンションマネージャに対して送付される。
【００２６】
判断ダイヤモンド３０４へ戻ると、インストラクションがトランザクションインストラクションであると判断される場合には、判断ダイヤモンド３１０へ進み、インストラクションがハードウェアトランザクションインストラクションであるか否かが判断される。そして、そうである場合には、ブロック３１２へ進み、ＨＴＭがンストラクションのリプレイに関してエミュレーションされて、コレクトネス及び/又はパフォーマンスＴＭエラー（「バグ」）の識別ができるようになし得る。
【００２７】
判断ダイヤモンド３１０において、インストラクションがソフトウェアインストラクションであると判断される場合には、ブロック３１４へ進み、インストラクションをリプレイし、かつ、バグを特定するためにＳＴＭが使用され得る。例えば、インストラクションに関連するコレクトネスエラー及び/又はパフォーマンスエラーを含み得る一つまたはそれ以上のエラーである。
【００２８】
判断ダイヤモンド３１６に進み、トランザクションインストラクションハンドラによってインストラクションに関連するコンフリクトが検出された場合には、ブロック３１８へ移動し、コンフリクトを解決するために、インストラクション（トランザクションインストラクションであろうと非トランザクションインストラクションであろうとも）がハイブリッドトランザクションコンテンションマネージャに対して送付される。そして、判断ダイヤモンド３２０へ進み、現在のチャンクにおける全てのインストラクションがリプレイされてきたか否かが判断される。現在のチャンクにおける追加のインストラクションがリプレイされていない場合には、ブロック３０２に戻り、リプレイヤエンジンがプログラムの次のインストラクションをリプレイする。現在のチャンクにおける全てのインストラクションがリプレイされた場合に、方法は３２０において終了する。
【００２９】
判断ダイヤモンド３１６において、コンフリクトがポストトランザクションインストラクションハンドラによって検出されない場合には、判断ダイヤモンド３２０へ進み、現在のチャンクにおける追加のインストラクションがリプレイされていない場合に、ブロック３０２へ戻り、リプレイエンジンがプログラムの次のインストラクションをリプレイする。現在のチャンクにおける全てのインストラクションがリプレイされた場合に、方法は３２０において終了する。
【００３０】
実施例は、多くの異なるプロセッサタイプにおいて実施され得るものである。例えば、実施例は、マルチコアプロセッサといったプロセッサにおいて具現化され得る。ここで図４を参照すると、本発明の一つの実施例に従った、プロセッサコアのブロックダイヤグラムが示されている。図４に示されるように、プロセッサコア４００は、マルチステージパイプラインアウトオブオーダープロセッサ（ｍｕｌｔｉ−ｓｔａｇｅ  ｐａｉｐｅｌｉｎｅｄ  ｏｕｔ−ｏｆ−ｏｒｄｅｒ  ｐｒｏｃｅｓｓｏｒ）であってよい。
【００３１】
図４に示されるように、コア４００は、フロントエンドユニット４１０を含んでおり、実行されるべきインストラクションをフェッチ（ｆｅｔｃｈ）して、プロセッサにおける後の使用のためにそれらを準備するために使用され得る。例えば、フロントエンドユニット４１０は、フェッチユニット４０１、インストラクションキャッシュ４０３、および、インストラクションデコーダ４０５を含んでよい。いくつかの実施例において、フロントエンドユニット４１０は、さらに、インストラクションストレージと同様にマイクロコードストレージに加えて、トレースキャッシュを含んでよい。フェッチユニット４０１は、例えば、メモリ（図示なし）から、または、インストラクションキャッシュ４０３からマクロインストラクションをフェッチし、そして、マクロインストラクションを、プロセッサによる実行のためのインストラクションといった、プリミティブ（ｐｒｉｍｉｔｉｖｅ）へとデコードするために、それらをインストラクションデコーダ４０５へフィードする。
【００３２】
フロントエンドユニット４１０と実行ユニット４２０との間には、アウトオブオーダー（ＯＯＯ）エンジン４１５が接続されており、インストラクションを受け取り、かつ、実行のためにそれらを準備するために使用され得る。より特定的に、ＯＯＯエンジン４１５は、種々のバッファを含んでよく、インストラクションフローをリオーダー（ｒｅｏｒｄｅｒ）して、実行のために必要な種々のリソースを割り当てる。レジスタファイル４３０および拡張レジスタファイル４３５といった、種々のレジスタファイルの中のストレージロケーション構成されたにロジカルレジスタのリネーム（ｒｅｎａｍｉｎｇ）を提供することも、同様である。レジスタファイル４３０は、整数および浮動小数点オペレーションのために別個のレジスタファイルを含んでよい。拡張レジスタファイル４３５は、ベクトルサイズ（ｖｅｃｔｏｒ−ｓｉｚｅｄ）ユニットのためにストレージを提供してよい。例えば、レジスタごとに２５６または５１２ビットである。
【００３３】
種々のリソースが実行ユニット４２０の中に存在してよい。例えば、種々の、整数、小数点、およびシングルインストラクションマルチデータ（ＳＩＭＤ）ロジックユニット、他の特殊化されたハードウェアを一緒に含むものである。例えば、そうした実行ユニットは、一つまたはそれ以上の算術論理演算装置（ＡＬＵ）４４２を含んでよい。実行ユニット４２０は、ハイブリッドトランザクションメモリ（ＨｙＴＭ）４７２を含んでよく、ＨｙＴＭ４７２のＨＴＭ部分においてプロセッサを実行し、記録し得る。ＨｙＴＭ４７２は、リプレイおよびプログラム（または、コードのチャンク）のエラー検出を実行するように構成されたリプレイヤ／トランザクションデバッガを含んでよい。本発明の実施例に従って、ＨｙＴＭ４７２のソフトウェア（例えば、ＳＴＭ）、及び／又は、ＨｙＴＭ４７２のハードウェアトランザクションメモリＨＴＭのソフトウェアエミュレーションを使用するものである。
【００３４】
実行ユニットの中のデータ上でオペレーションが実行される場合、結果がリタイヤメントロジック（ｒｅｔｉｒｅｍｅｎｔ  ｌｏｇｉｃ）、つまり、リオーダーバッファ（ＲＯＢ）４４０に対して提供されてよい。より特定的に、ＲＯＢ４４０は、実行されるインストラクションに関連する情報を受け取るための種々のアレイおよびロジックを含んでよい。この情報は、次に、ＲＯＢ４４０によって検査され、インストラクションが有効にリタイヤされて、プロセッサのアーキテクチャ状態（ａｒｃｈｉｔｅｃｔｕｒａｌ  ｓｔａｔｅ）に対してコミットされたデータを結果的に生じるか否か、もしくは、インストラクションの適切なリタイヤメントを妨げる一つまたはそれ以上の例外（ｅｘｃｅｐｔｉｏｎ）が生じたか否かを判断する。本発明の実施例において、ＲＯＢ４４０は、ハイブリッドトランザクションコンテンションマネージャ（図示なし）を含んでよく、本発明の実施例に従って、ＨｙＴＭ４７２のリプレイヤによって検出されたコンフリクトを解決する。従って、ＲＯＢ４４０は、リタイヤメントに関連する他のオペレーションを取り扱い得る。
【００３５】
図４に示されるように、ＲＯＢ４４０は、キャッシュ４５０に接続されており、一つの実施例においては、ローレベルキャッシュ（例えば、Ｌ１キャッシュ）であってよく、そして、トランスレーションルックアサイドバッファ（ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ、ＴＬＢ）４５５も含んでよいが、本発明の範囲は、この観点に限定されるものではない。キャッシュ４５０から、よりハイレベルキャッシュ、システムメモリ、などを用いてデータ通信が生じ得る。
【００３６】
図４のプロセッサの実施例は、いわゆるｘ８６  ＩＳＡアーキテクチャといったアウトオブオーダーマシンに関するものである一方で、本発明の範囲は、この件に限定されるものではないことに留意する。つまり、他の実施例は、インオーダー（ｉｎ−ｏｒｄｅｒ）プロセッサ、ＡＲＭベースプロセッサといった縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、または、エミュレーションエンジンと関連ロジック回路を介して、異なるＩＳＡのインストラクションおよびオペレーションをエミュレーションすることができる別のタイプのＩＳＡに係るプロセッサにおいて、実行されてよい。さらに、他の実施例は、グラフィクスプロセッサにおいて実行されてよい。
【００３７】
実施例は、多くの異なるタイプのシステムにおいて実行されてよい。ここで図５を参照すると、本発明の一つの実施例に従った、システムのブロックダイヤグラムが示されている。図５に示されるように、マルチプロセッサシステム５００は、ポイントツーポイント（ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ）相互接続システムであり、ポイントツーポイント相互接続５５０を介して接続された第１プロセッサ５７０と第２プロセッサ５８０を含んでいる。（図示されていない他の実施例において、プロセッサは、スタートポロジー（ｓｔａｒ  ｔｏｐｏｌｏｇｙ）、メッシュトポロジー、クロスバートポロジー、または、別の接続スキームによって接続されてよい。）図５に示されるように、プロセッサ５７０と５８０それぞれは、マルチコアプロセッサであってよく、第１および第２プロセッサコア（例えば、プロセッサコア５７４ａと５７４ｂ、および、プロセッサコア５８４ａと５８４ｂ）を含んでいるが、プロセッサの中には潜在的により多くのコアが存在してよい。
【００３８】
いまだに図５を参照すると、第１プロセッサ５７０は、さらに、メモリコントローラハブ（ＭＣＨ）５７２およびポイントツーポイント（Ｐ−Ｐ）インターフェイス５７６と５７８を含んでいる。同様に、第２プロセッサ５８０は、ＭＣＨ５８２およびＰ−Ｐインターフェイス５８６と５８８を含んでいる。図５に示されるように、ＭＣＨ５７２と５８２は、プロセッサをそれぞれのメモリに対して接続している。すなわち、メモリ５３２とメモリ５３４であり、それぞれのプロセッサに対してローカルの取り付けられたシステムメモリ（例えば、ＤＲＡＭ）の一部分であってよい。第１プロセッサ５７０と第２プロセッサ５８０は、Ｐ−Ｐ相互接続５６２と５５４を介して、それぞれにチップセット５９０に対して接続されてよい。図５に示されるように、チップセット５９０は、Ｐ−Ｐインターフェイス５９４と５９８を含んでいる。さらに、チップセット５９０は、Ｐ−Ｐ相互接続５３９によってチップセット５９０とグラフィクスエンジン５３８を接続するためのインターフェイス５９２を含んでいる。
【００３９】
プロセッサコア５７４ａと５８４ａそれぞれは、本発明の実施例に従って、ハイブリッドトランザクションメモリ（ＨｙＴＭ）５０２と５０４をそれぞれに含んでよい。それぞれのＨｙＴＭ（５０２、５０４）は、ＨｙＴＭのＨＴＭ部分における対応するプログラミングを実行し、かつ、記録してよい。それぞれのＨｙＴＭ（５０２、５０４）は、リプレイおよび対応するプログラム（または、コードのチャンク）のエラー検出を実行するように構成されたリプレイヤ／トランザクションデバッガを含んでよい。本発明の実施例に従って、対応するＨｙＴＭのソフトウェア、及び／又は、対応するＨｙＴＭのハードウェアトランザクションメモリ（ＨＴＭ）部分のソフトウェアエミュレーションを使用するものである。
【００４０】
チップセット５９０は、インターフェイス５９６を介して第１バス５１６に対して接続されてよい。図５に示されるように、種々の入力／出力（Ｉ／Ｏ）デバイス５１４が、バスブリッジ５１８と共に、第１バス５１６に対して接続されてよい。バスブリッジは、第１バス５１６を第２バスへ接続するものである。種々のデバイスが第２バスに対して接続されてよい。例えば、一つの実施例においては、キーボード／マウス５２２、通信デバイス５２６、および、ディスクドライブまたはコード５３０を保管し得る他の大容量記憶装置といったデータストレージユニット５２８、を含んでいる。さらに、オーディオＩ／Ｏ５２４が第２バスに接続されてよい。実施例は、スマート携帯電話、タブレットコンピュータ、ウルトラブックＴＭ、ノートブック、デスクトップコンピュータ、等といった、モバイルデバイスを含む他のタイプのシステムの中に包含され得るものである。
【００４１】
他の実施例が以下に説明される。
【００４２】
一つの実施例において、システムは、ハードウェアトランザクションメモリ（ＨＴＭ）を含むハイブリッドトランザクションメモリ（ＨｙＴＭ）を有するプロセッサを含む。プロセッサは、また、ハードウェアトランザクションメモリ（ＨＴＭ）インストラクションを含み、ＨｙＴＭを使用して実行されてきたプログラムを、リプレイするためのプログラムデバッガも含む。プログラムデバッガは、ＨＴＭのエミュレーションによってＨＴＭインストラクションをリプレイするためのソフトウェアエミュレータを含んでいる。システムは、また、プログラムを保管するためのダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含む。
【００４３】
一つの実施例において、プログラムデバッガは、さらに、ソフトウェアトランザクションメモリ（ＳＴＭ）の使用を通じて、プログラムのソフトウェアトランザクションインストラクションをリプレイする。
【００４４】
一つの実施例において、プログラムデバッガは、強力なソフトウェアトランザクションメモリ（ＳＴＭ）分離を用いて、プログラムの非トランザクションインストラクションをリプレイする。
【００４５】
一つの実施例において、プログラムデバッガは、プログラムにおけるコレクトネスエラーおよびパフォーマンスエラーのうち少なくとも一つを特定する。
【００４６】
別の実施例において、少なくとも一つのコンピュータで読取り可能な記録媒体は、インストラクションを保管しており、システムに、ハードウェアトランザクションメモリ（ＨＴＭ）を含むハイブリッドトランザクションメモリ（ＨｙＴＭ）によって実行されてきたプログラムをリプレイさせる。リプレイは、少なくとも部分的にＨＴＭのソフトウェアエミュレーションを通じて実行される。
【００４７】
一つの実施例において、ＨｙＴＭは、また、ソフトウェアトランザクションメモリ（ＳＴＭ）を含む。一つの実施例において、リプレイされるプログラムインストラクションがソフトウェアトランザクションに関連するトランザクションインストラクションである場合に、リプレイは、ＳＴＭを使用して実行される。
【００４８】
一つの実施例において、少なくとも一つのコンピュータで読取り可能な記録媒体は、さらに、コレクトネスエラーおよびパフォーマンスエラーのうち少なくとも一つを特定するインストラクションを含んでいるプログラムのリプレイを介して、プログラムにおける一つまたはそれ以上のコンフリクトを検出するインストラクションを含む。
【００４９】
一つの実施例において、リプレイは、ＨｙＴＭによって実施されたプログラムの実行の記録を正確にエミュレーションする。
【００５０】
一つの実施例において、プログラムをリプレイするインストラクションは、プログラムのプログラムインストラクションが、トランザクションインストラクションであるか、または、非トランザクションインストラクションであるかを判断するインストラクションを含む。プログラムインストラクションが非トランザクションインストラクションである場合に、リプレイは、強力なソフトウェアトランザクションメモリ（ＳＴＭ）分離を用いて実行される。
【００５１】
一つの実施例において、リプレイされるプログラムインストラクションがハードウェアトランザクションに関連するトランザクションインストラクションである場合に、リプレイは、ＨＴＭのソフトウェアエミュレーションによって実行される。
【００５２】
一つの実施例において、保管されたインストラクションは、システムに、プログラムの摂動なく、プログラムをリプレイさせる。
【００５３】
一つの実施例において、少なくとも一つのコンピュータで読取り可能な記録媒体は、さらに、システムに、トランザクションアボートのロケーションと原因のうち少なくとも一つを取得させるインストラクションを含む。
【００５４】
一つの実施例において、プログラムのリプレイは、第１スレッドの実行の停止および第２スレッドの実行の再開を生じさせる少なくとも一つのコンテクストスイッチを含み、かつ、リプレイは、ＨＴＭのソフトウェアエミュレーションを使用して実行される。
【００５５】
一つの実施例において、少なくとも一つのコンピュータで読取り可能な記録媒体は、さらに、ソフトウェアエミュレーションを介して、ＨＴＭのトランザクションメモリコンテンションマネージャのアボート意思決定部分をエミュレーションするインストラクションを含む。
【００５６】
別の実施例において、方法は、ハードウェアトランザクションメモリ（ＨＴＭ）を含むハイブリッドトランザクションメモリ（ＨｙＴＭ）システムにおいて実行されてきたプログラムをリプレイするステップを含み、リプレイは、少なくとも部分的にＨＴＭのソフトウェアエミュレーションを使用して実行される。方法は、また、プログラムのリプレイを介して、プログラムにおける一つまたはそれ以上のコンフリクトを特定するステップも含む。
【００５７】
一つの実施例において、方法は、ソフトウェアエミュレーションを介して、ＨＴＭのトランザクションメモリコンテンションマネージャのアボート意思決定部分をエミュレーションするステップを含む。
【００５８】
一つの実施例において、ＨｙＴＭは、ソフトウェアトランザクションメモリ（ＳＴＭ）を含み、方法は、さらに、プログラムの一つまたはそれ以上のソフトウェアトランザクションインストラクションをリプレイするためにＳＴＭを使用するステップを含む。
【００５９】
一つの実施例において、プログラムの非トランザクションインストラクションのリプレイは、強力なソフトウェアトランザクションメモリ（ＳＴＭ）分離を用いて実行される。
【００６０】
一つの実施例において、方法は、プログラムに関連するトランザクションアボートのロケーションと原因のうち少なくとも一つを取得するステップを含む。
【００６１】
一つの実施例において、装置は、上述の方法のうちいずれかを実行し得る。
【００６２】
一つの実施例において、マシンで読取り可能なストレージは、マシンで実行されると、上述の方法のうちいずれかを実施する、マシンで読取り可能なインストラクションを含む。
【００６３】
実施例は、多くの異なるタイプのシステムにおいて使用されてよい。例えば、一つの実施例において、通信デバイスは、ここにおいて説明された種々の方法および技術を実行するように配置されてよい。もちろん、本発明の範囲は、通信デバイスに限定されるものではなく、そして、代わりに、他の実施例は、インストラクションを処理するための他のタイプの装置、もしくは、コンピューティングデバイス上で実行されることに応じて、ここにおいて説明された一つまたはそれ以上の方法および技術をデバイスに実行させるインストラクションを含んでいる一つまたはそれ以上のマシンで読取り可能な媒体、に向けられてよい。
【００６４】
実施例は、コードにおいて実施されてよく、そして、インストラクションを実行するためのシステムをプログラムするために使用され得るインストラクションが保管された有形のストレージ媒体上に保管されてよい。ストレージ媒体は、これらに限定されるわけではないが、あらゆるタイプのディスクを含んでよい。フロッピー（登録商標）ディスク、光ディスク、半導体ドライブ（ＳＳＤ）、コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、書込み可能コンパクトディスク（ＣＤ−ＲＷ）、および、光磁気ディスク、読み出し専用メモリ（ＲＯＭ）といった半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）といったランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）、磁気または光カード、もしくは、電子的インストラクションを保管するのに適切な他のあらゆるタイプの媒体、を含んでいる。
【００６５】
本発明は、限られた数の実施例に関して説明されてきたが、当業者であれば、そこからの数多くの変更および変形を正しく理解するであろう。添付の請求項は、そうした全ての変更および変形が、この本発明の真の精神および範囲の中に在るように意図されたものである。
【図１】
0006306261.tif 000002
【図２】
0006306261.tif 000003
【図３】
0006306261.tif 000004
【図４】
0006306261.tif 000005
【図５】
0006306261.tif 000006