(57)【特許請求の範囲】
【請求項１】
状態データに対する更新を生成するために実行される複数のプログラム命令を含むトランザクションを実行し、前記トランザクションが競合せず完了した場合に前記更新をコミットし、前記複数のプログラム命令の実行中に追跡制御信号を生成する処理回路であって、前記プログラム命令の実行中に少なくとも１つのリソースを使用する処理回路と、
前記追跡制御信号に応じて追跡アイテムを生成するトランザクション追跡回路であって、前記追跡制御信号が、前記プログラム命令の実行中に前記少なくとも１つのリソースの使用レベルが変化したことを示すものである場合には、前記追跡制御信号に応じた少なくとも１つの前記追跡アイテムとして、前記少なくとも１つのリソースの前記使用レベルを示すものを生成するトランザクション追跡回路とを備える、装置。
【請求項２】
前記処理回路が、前記少なくとも１つのリソースの前記使用レベルの変化を検出し、
前記処理回路が、前記追跡制御信号において、前記少なくとも１つのリソースの前記使用レベルの変化を特定する、請求項１に記載の装置。
【請求項３】
前記トランザクション追跡回路が、前記追跡制御信号が前記少なくとも１つのリソースの前記使用レベルが変化したことを示すものであるか否かを判断する、請求項１または２に記載の装置。
【請求項４】
前記少なくとも１つのリソースが、複数の領域を含むストレージ構造であり、
前記使用レベルの変化が、新たな領域がアクセスされるたびに検出される、請求項１〜３のいずれか一項に記載の装置。
【請求項５】
前記ストレージ構造が、キャッシュの少なくとも一部であり、
前記領域の各々が、キャッシュラインである、請求項４に記載の装置。
【請求項６】
前記複数の追跡アイテムが、前記複数の領域の１つが新たにアクセスされたことを示す少なくとも１つのリソース追跡アイテムを含む、請求項４または５に記載の装置。
【請求項７】
前記複数の追跡アイテムが、アクセスされた前記複数の領域の数を特定する少なくとも１つのリソース追跡アイテムを含む、請求項４〜６のいずれか一項に記載の装置。
【請求項８】
前記複数の追跡アイテムが、トランザクションのトランザクション深さを特定する少なくとも１つの追跡アイテムを含む、請求項１〜７のいずれか一項に記載の装置。
【請求項９】
前記複数の追跡アイテムが、トランザクションが開始したことを示すトランザクション開始追跡アイテムおよびトランザクションが終了したことを示すトランザクション終了追跡アイテムの少なくとも一方を含む、請求項１〜８のいずれか一項に記載の装置。
【請求項１０】
前記トランザクション終了追跡アイテムが、リソース追跡アイテムでもある、請求項６または７に従属する請求項９に記載の装置。
【請求項１１】
前記複数の追跡アイテムのうち少なくともいくつかの追跡アイテムが、タイムスタンプを含む、請求項１〜１０のいずれか一項に記載の装置。
【請求項１２】
前記トランザクション開始追跡アイテムおよび前記トランザクション終了追跡アイテムの少なくとも一方が、タイムスタンプを含む、請求項９に従属する請求項１１に記載の装置。
【請求項１３】
前記複数の追跡アイテムの少なくとも１つが、前記トランザクションの実行に使用したプロセッサ・サイクルの数を示すサイクル数を含む、請求項１〜１２のいずれか一項に記載の装置。
【請求項１４】
前記トランザクション終了追跡アイテムが、前記トランザクションの実行に使用したプロセッサ・サイクルの数を示すサイクル数を含む、請求項９または１０に従属する請求項１３に記載の装置。
【請求項１５】
前記複数の追跡アイテムが、トランザクションが中断されたことを示すトランザクション中断追跡アイテムを含む、請求項１〜１４のいずれか一項に記載の装置。
【請求項１６】
前記トランザクション中断追跡アイテムが、前記トランザクションが中断された理由を示す、請求項１５に記載の装置。
【請求項１７】
前記トランザクション追跡回路の動作に影響を与える制御パラメータを格納するための制御ストレージを備える、請求項１〜１６のいずれか一項に記載の装置。
【請求項１８】
前記制御ストレージが、前記トランザクション追跡回路の動作を許可または禁止するイネーブルパラメータを記憶する、請求項１７に記載の装置。
【請求項１９】
前記制御ストレージが、前記トランザクション追跡回路が動作するトランザクションの数を制御するサンプリングパラメータを記憶する、請求項１７または１８に記載の装置。
【請求項２０】
前記サンプリングパラメータが、前記トランザクション追跡回路がサンプリングするトランザクションの割合を示す割合、または前記トランザクション追跡回路が前記トランザクションをサンプリングする確率を示す確率のいずれかである、請求項１９に記載の装置。
【請求項２１】
前記処理回路が、さらに、トランザクション内の命令以外の命令を実行する、請求項１〜２０のいずれか一項に記載の装置。
【請求項２２】
少なくともいくつかの命令において動作するプログラム追跡回路を備える、請求項１〜２１のいずれか一項に記載の装置。
【請求項２３】
前記処理回路が、第１のプロセッサと第２のプロセッサとを備える、請求項１〜２２のいずれか一項に記載の装置。
【請求項２４】
今後のトランザクションの実行に前記第１のプロセッサおよび前記第２のプロセッサのどちらを使用するかに影響を与える制御情報を更新するための分析モジュールを備える、請求項２３に記載の装置。
【請求項２５】
前記分析モジュールが、前記処理回路上で実行されるソフトウェアである、請求項２４に記載の装置。
【請求項２６】
状態データに対する更新を生成するために複数のプログラム命令を含むトランザクションを実行し、
前記トランザクションが競合せず完了した場合に前記更新をコミットし、
少なくとも１つのリソースを使用する前記複数のプログラム命令の実行中に追跡制御信号を生成し、
前記追跡制御信号に応じて追跡アイテムを生成する方法において、
前記プログラム命令の実行中に前記少なくとも１つのリソースの使用レベルが変化したことを示す前記追跡制御信号に応じて、前記少なくとも１つのリソースの前記使用レベルを示す少なくとも１つの追跡アイテムを生成する、追跡アイテムの生成方法。
【請求項２７】
状態データに対する更新を生成するために複数のプログラム命令を含むトランザクションを実行する手段と、
前記トランザクションが競合せず完了した場合に前記更新をコミットする手段と、
少なくとも１つのリソースが使用される前記複数のプログラム命令の実行中に追跡制御信号を生成する生成手段と、
前記追跡制御信号に応じて追跡アイテムを生成する手段とを備える装置において、
前記追跡アイテムを生成する手段が、前記プログラム命令の実行中に前記少なくとも１つのリソースの使用レベルが変化したことを示す前記追跡制御信号に応じて、前記少なくとも１つのリソースの前記使用レベルを示す少なくとも１つの追跡アイテムを生成する、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理システムに関する。本技術は、特に、トランザクションをサポートするデータ処理システムの分野に関連する。
【背景技術】
【０００２】
トランザクションをサポートするデータ処理システムとして、トランザクションの複数のプログラム命令を投機的に実行して状態データの更新を生成し、このトランザクションが競合せずに完了すれば更新をコミットするデータ処理システムが提供され得る。更新は、トランザクションが競合せずに完了した場合にのみコミットされるので、コミットされるまでの更新を、投機的更新とも呼ぶ。トランザクションの終了前の如何なる時点でも、トランザクションは競合により中断され得る、つまり終了前に完了することがあり、これによりデータ処理システムは、トランザクション開始前の状態に巻き戻される、つまり元に戻る。したがって、この「巻き戻し」は、トランザクションの一部として実行される命令と、他で実行される命令との間で競合が起こると発生する。トランザクションの間、投機的に更新された状態は、トランザクション・メモリに格納される。競合が起こらず、トランザクションが中断されなければ、トランザクションの終了時に、そのトランザクションは「コミット」され、この時点で、投機的状態（つまりトランザクションの状態）が、データ処理システムの実際の状態に置き換わる。
【０００３】
このようなトランザクションは、例えば、共有メモリを使用するマルチスレッド処理を容易とするために使用され得る。マルチスレッド処理では、メモリアクセスにおいて競合が発生した場合には投機的更新をコミットさせない機能に依拠して、共有メモリ内のデータ値を使用する複数のトランザクションを並列に進行させ得るものである。大抵の場合このような競合は発生しないので、並列処理はメモリロックの使用などのより強固な機構のオーバーヘッドに対応する必要なく効率的に進行し、たとえ競合が発生したとしても、状態データの投機的更新はコミットされる前なので、復旧が可能である。
【発明の概要】
【０００４】
第１の構成例から見れば、状態データに対する更新を生成するために実行される複数のプログラム命令を含むトランザクションを実行し、前記トランザクションが競合せず完了した場合に前記更新をコミットし、前記複数のプログラム命令の実行中に追跡制御信号を生成する処理回路であって、前記プログラム命令の実行中に少なくとも１つのリソースを使用する処理回路と、前記追跡制御信号に応じて追跡アイテムを生成するトランザクション追跡回路であって、前記プログラム命令の実行中に前記少なくとも１つのリソースの使用レベルが変化したことを示す前記追跡制御信号に応じて、前記少なくとも１つのリソースの前記使用レベルを示す少なくとも１つの追跡アイテムを生成するトランザクション追跡回路とを備える装置が提供される。
【０００５】
第２の構成例によると、状態データに対する更新を生成するために複数のプログラム命令を含むトランザクションを実行し、前記トランザクションが競合せず完了した場合に前記更新をコミットし、少なくとも１つのリソースを使用する前記複数のプログラム命令の実行中に追跡制御信号を生成し、前記追跡制御信号に応じて追跡アイテムを生成する方法において、前記プログラム命令の実行中に前記少なくとも１つのリソースの使用レベルが変化したことを示す前記追跡制御信号に応じて、前記少なくとも１つのリソースの前記使用レベルを示す少なくとも１つの追跡アイテムを生成する追跡アイテムの生成方法を提供する。
【０００６】
第３の構成例によると、状態データに対する更新を生成するために複数のプログラム命令を含むトランザクションを実行する手段と、前記トランザクションが競合せず完了した場合に前記更新をコミットする手段と、少なくとも１つのリソースが使用される前記複数のプログラム命令の実行中に追跡制御信号を生成する生成手段と、前記追跡制御信号に応じて前記追跡アイテムを生成する手段とを備える装置において、前記生成する生成手段が、前記プログラム命令の実行中に前記少なくとも１つのリソースの使用レベルが変化したことを示す前記追跡制御信号に応じて、前記少なくとも１つのリソースの前記使用レベルを示す少なくとも１つの追跡アイテムを生成する装置を提供する。
【０００７】
例として、以下の添付図面に示す実施形態を参照して本発明をさらに説明する。
【図面の簡単な説明】
【０００８】
【図１】図１は、トランザクションを含む一連のプログラム命令を概略的に示す。
【図２Ａ】図２Ａは、トランザクションの実行を概略的に示すフロー図である。
【図２Ｂ】図２Ｂは、ネスティッド・トランザクションの実行を概略的に示すフロー図である。
【図３】図３は、一実施形態に係る装置を概略的に示す図である。
【図４】図４は、トランザクション内の命令の実行がリソースの使用度に与える影響を示す図である。
【図５】図５は、一実施形態に係るトランザクション実行中の追跡アイテムの生成を概略的に示すフロー図である。
【図６】図６は、一実施形態に係るトランザクションの一部についての追跡データアイテムの生成を概略的に示すフロー図である。
【図７】図７は、一実施形態に係るネスティッド・トランザクション実行中の追跡アイテムの生成を概略的に示すフロー図である。
【図８】図８は、追跡アイテムを使ってどのように今後のトランザクションの実行に影響を与えられるかを概略的に示す図である。
【発明を実施するための形態】
【０００９】
添付の図面を参照して実施形態を説明する前に、実施形態とそれに関連する利点を以下に説明する。
【００１０】
トランザクション・メモリが組み込まれたシステムなどの、トランザクションをサポートする処理システム内では、複数のプログラム命令を実行して状態データ（例えばアーキテクチャ状態データ）に対する投機的更新を生成し、当該トランザクションが競合せず完了した場合に、この投機的更新を許可（コミット）するように動作する。例えとして、トランザクションは、記憶場所に対するロード動作または格納動作を含み、このようなロード・格納動作が、トランザクションの外部から同一の記憶場所に対してアクセスしようとして競合を起こす（または競合を起こし得る）アクセスがなく完了した場合に、これらトランザクションの結果がコミットされ、アーキテクチャシステムの状態が更新される。競合が起こると、このトランザクションは中断され、保存済みの以前の状態データを用いて、トランザクションが実行される前の時点までシステムの状態を「ロールバック」する。そしてこのトランザクションをしばらくしてから繰り返して競合せずに完了するかを確認するか、例外を発生させるか、別の方法で（例えばロック機構を用いて）実行させるか、ないしは当該システムの特定の形態に応じて処理してもよい。
【００１１】
トランザクションを中断させ得る競合のその他の種類としては、トランザクションを管理するリソースの使い果たし（例えば一時記憶装置やネスティッド・トランザクションの深さカウンタなど）や、Ｄａｔａ  Ａｂｏｒｔ（ＭＭＵ異常）などの例外や割り込みなど、トランザクションを中断させるものを含む。
【００１２】
ある構成の一例において、状態データに対する投機的更新を生成するために実行される複数（１以上）のプログラム命令を含むトランザクションを実行し、トランザクションが競合せず完了した場合に投機的更新をコミットし、複数のプログラム命令の実行中に追跡制御信号を生成する処理回路であって、プログラム命令の実行中に少なくとも１つのリソースを使用する処理回路と、追跡制御信号に応じて追跡アイテムを生成するトランザクション追跡回路であって、プログラム命令の実行中に少なくとも１つのリソースの使用レベルが変化したことを示す追跡制御信号に応じて、少なくとも１つのリソースの使用レベルを示す少なくとも１つの追跡アイテムを生成するトランザクション追跡回路とを備える装置が提供される。
【００１３】
本発明の発明者らは、トランザクションの重要イベントに関わるデータを取得することで特別な利点が得られるということに気付いた。重要イベントとは、例えば、トランザクションの実行中に使用するリソース（トランザクション・メモリなど）の使用レベルの変化であり得る。例えば、使用レベルの変化は、メモリのキャッシュラインや領域に新たなアクセスや書き込みがあると起こり得る。このような情報を得ることで、リソースの使用度をよりよく制御し、また、今後のトランザクションをより効率的に実行することが可能となる。したがって、本技術は、トランザクションの一部として実行される命令が、トランザクション状態に追加する（トランザクション・メモリの使用量が上昇する）か、トランザクション状態の一部を上書きする（トランザクション・メモリの使用量は変化しない）か、そのいずれでもない（これもトランザクション・メモリの使用量は変化しない）かを示す情報を得ることに関わり得る。そしてこのような情報は、リソースの使用レベルが変化したことを示す追跡アイテムを生成するのに使用できる。
【００１４】
あるトランザクションについて生成した追跡データアイテムを分析することにより、そのトランザクションのプロファイリングを行うことができる。例えば、トランザクションが実行中に使用するリソースの割合を決定することは、特に複数のプロセッサを備える異機種混在システムにおいて有用であり、システムリソースをより効率的に使用するためにどのプロセッサを使ってトランザクションを実行するかについてより適切な決断を下すことができる。
【００１５】
いくつかの実施形態において、処理回路は、少なくとも１つのリソースの使用レベルの変化を検出し、処理回路は、追跡制御信号において、少なくとも１つのリソースの使用レベルの変化を特定する。したがって、処理回路が生成する追跡制御信号は、少なくとも１つのリソースの使用レベルの変化を示し得る。そして追跡制御信号はトランザクション追跡回路に渡されてよく、トランザクション追跡回路は、追跡制御信号で特定される少なくとも１つのリソースの使用レベルの変化に基づいて追跡アイテムを生成する。
【００１６】
いくつかの実施形態において、トランザクション追跡回路が、追跡制御信号から、少なくとも１つのリソースの使用レベルの変化を判断する。このような実施形態では、トランザクション追跡回路自体が、処理回路によって生成される追跡制御信号に基づいて少なくとも１つのリソースの使用レベルを把握し得る。例えば、処理回路が、あるリソースが使用中である旨を示す追跡制御信号を生成して、トランザクション追跡回路が、この追跡制御信号から、このリソースが新たに使用されている（よって少なくとも１つのリソース全体の使用レベルを変化させる）ものかどうかを判定し得る。
【００１７】
いくつかの実施形態において、少なくとも１つのリソースは、複数の領域を含むストレージ構造であり、使用レベルの変化は、新たな領域がアクセスされるたびに検出される。例えば、使用レベルの変化は、ストレージ構造の新たな領域に書き込みがあると起こり得る。いくつかの実施形態において、トランザクション・メモリはキャッシュを用いて実現され、ストレージ構造はキャッシュの少なくとも一部であり、上記領域の各々は、キャッシュラインであり得る。キャッシュラインは、トランザクションを構成する命令を実行することにより投機的に変化した状態の１以上の要素を記憶し得る。
【００１８】
例えば、ダイレクトマップ方式のキャッシュでは、このストレージ構造はキャッシュ全体である。セット連想方式のキャッシュでは、あるデータを格納できる場所がキャッシュ内に複数ある。キャッシュは複数のウェイに分割され、複数の場所はそれぞれ、ウェイ毎に１つの場所を含む。例えば、２ウェイ連想方式キャッシュでは、あるデータを格納できる場所が２箇所ある。複数の場所は、キャッシュセットとも呼ばれる。例えば、２ウェイ連想方式キャッシュでは、各データは２つのウェイを含むキャッシュセットに格納できる。キャッシュセットの全てのウェイが埋まってしまうというのが、重要イベントの他の例であり得る。または、重要イベントは、キャッシュセットの全てのウェイが埋まってしまった後で、同じキャッシュセットへの書き込みが行われようとした場合であり得る。いずれの状況も、投機的状態を格納するスペースがないために、トランザクションの実行を継続できず、トランザクションが中断され得るという状況を表す。このようなトランザクションのプロファイリングにより、今後のトランザクションは、より連想度の高いキャッシュを有するプロセッサで実行すべきであることを判断できる。逆に、高連想度キャッシュは不要であり、より連想度の低いキャッシュを使用し得ることが判断されるかもしれない。
【００１９】
いくつかの実施形態において、複数の追跡アイテムは、複数の領域の１つが新たにアクセスされたことを示す少なくとも１つのリソース追跡アイテムを含む。例えば、ある領域（キャッシュラインなど）が新たにアクセスされると、この領域が新たにアクセスされたことを示す追跡アイテムが生成され得る。
【００２０】
いくつかの実施形態において、複数の追跡アイテムは、アクセスされた複数の領域の数を特定する少なくとも１つのリソース追跡アイテムを含む。例えば、この追跡アイテムは、トランザクション開始後にアクセスされた領域の数の累積数を提供し得る。このような情報を用いて、リソース使用度の経時的変化をすばやく判断すること、また、特定の時点での瞬間的リソース使用度を判断することが可能となる。例えば、リソース追跡アイテムは、（例えばトランザクションの中断またはコミットによる）トランザクションの終了に応じて生成され得る。少なくとも１つのリソース追跡アイテムを用いて、トランザクション実行中のリソース使用度をプロファイリングできる。
【００２１】
アクセスされた複数の領域の数をリソース追跡アイテムに示すことにより、追跡ストリームのサイズを低減でき、またこれにより、効率的にいくつかのリソース追跡アイテムを１つにまとめることができることから、追跡ストリームを記憶するメモリのリソース要件を下げることができる。さらに、追跡アイテムを、循環バッファに格納する場合もある。この場合、しばらくするとバッファヘッドが上書きされ得る。アクセスされた複数の領域の数を示すことにより、バッファヘッドが上書きされても、効率的なプロファイリングを行うことが可能となり得る。しかし、新たな領域がアクセスされるたびにその旨を示すことにより、リソース使用度を常時把握する必要がなくなるため、追跡アイテムを生成するのに必要なハードウェアの量を減らせる。
【００２２】
複数の追跡アイテムは、トランザクションのトランザクション深さを特定する少なくとも１つの追跡アイテムを含み得る。トランザクションは、別のトランザクションにネストされている場合がある。トランザクションの深さは、現在のトランザクションが開始される前にエントリされた、このトランザクション自体を含み得る親トランザクションの数として定義することができる。トランザクションの深さは、カウンタを使って追跡できる。しかし、全てのカウンタ同様、そのカウンタに格納できる最大値がある。あるトランザクションが、カウンタの最大値を超えるような深さにネストされている場合、このトランザクション（および潜在的に全てのコンテナ・トランザクション）は、中断せざるを得ないかもしれない。このように深さカウンタの変化は重要イベントであるので、トランザクションのトランザクション深さを示す情報を含む追跡アイテムを出力することは有用である。深さカウンタ自体もまた、その使用レベルの変化により追跡アイテムを生成させる少なくとも１つのリソースの一例であり得る。これにより、トランザクションの現在のネストレベルが、トランザクションを中断させるような段階に近づきつつあるという警告を与えることができる。
【００２３】
いくつかの実施形態において、複数の追跡アイテムは、トランザクションが開始したことを示すトランザクション開始追跡アイテムおよびトランザクションが終了したことを示すトランザクション終了追跡アイテムの少なくとも一方を含む。これにより、重要イベントを、特定のトランザクションに関するとして追跡することが可能となる。
【００２４】
いくつかの実施形態において、トランザクション終了追跡アイテムはリソース追跡アイテムでもある。特に、トランザクションが終了したことを示す追跡アイテムと同一の追跡アイテムが、リソースの使用レベルが変化したことを示してもよい。同様に、他の追跡アイテムも二重機能性を有してもよい。したがって、追跡アイテムに与えられた名称は、その機能の全てを表すわけではない。
【００２５】
いくつかの実施形態において、複数の追跡アイテムのうち少なくともいくつかの追跡アイテムは、タイムスタンプを含む。例えば、トランザクション開始追跡アイテムおよび前記トランザクション終了追跡アイテムの少なくとも一方が、それぞれトランザクションの開始および終了の命令が実行された時刻を示すタイムスタンプを含み得る。タイムスタンプを提供することにより、特定の重要イベントがいつ発生したかを判断できる。マルチプロセッサシステムでは特に、各プロセッサ間で実行されるトランザクションに関する重要イベントがどのように発生したかを判断可能となり得る。これは、トランザクションの実行中に起こる競合の性質および原因を判断するのに役立つ。
【００２６】
いくつかの実施形態において、複数の追跡アイテムの少なくとも１つが、トランザクションの実行に使用したプロセッサ・サイクルの数を示すサイクル数を含む。例えば、終了追跡アイテムが、トランザクションの実行に使用したプロセッサ・サイクルの数を示すサイクル数を含んでよい。このような情報を用いて、プロセッサをどの程度使用してトランザクションを実行したかを判断できる。
【００２７】
複数の追跡アイテムは、トランザクションが中断されたことを示すトランザクション中断追跡アイテムを含み得る。トランザクションは、競合が発生すると中断される。例えば、あるプロセッサがデータの修正を行うトランザクションを実行し、別のプロセッサが同じデータの修正を試みる別のトランザクションを実行する場合、２つの異なるプロセッサが同時に同一データを修正しようとする結果、競合が起こる。これにより、通常、トランザクションが中断される。トランザクション中断追跡アイテムが生成される場合は、このトランザクション中断追跡アイテムは、トランザクションが中断された理由を示し得る。例えば、トランザクション中断追跡アイテムは、前述のように、発生した競合について言及してもよい。トランザクションが中断される別の理由は、トランザクションの実行中に投機的状態を保持するのに使用され得るトランザクション・メモリが不足した場合である。
【００２８】
装置は、トランザクション追跡回路の動作に影響を与える制御パラメータを格納するための制御ストレージを備え得る。例えば、制御ストレージは、トランザクション追跡回路の動作を許可または禁止するイネーブルパラメータを記憶してもよい。
【００２９】
制御ストレージは、トランザクション追跡回路が動作するトランザクションの数を制御するサンプリングパラメータを記憶し得る。全てのトランザクションをサンプリングするより、トランザクション（および、必要に応じて、これらのトランザクション内にネストするトランザクション）の一部だけをサンプリングする方が望ましい場合が多い。サンプリングパラメータは、例えば、トランザクション追跡回路がサンプリングするトランザクション（および、必要に応じて、これらにネストするトランザクション）の割合を示す割合、またはトランザクション追跡回路がトランザクション（および、必要に応じて、これらにネストするトランザクション）をサンプリングする確率を示す確率のいずれかであり得る。
【００３０】
いくつかの実施形態において、処理回路は、さらに、トランザクション内の命令以外の命令を実行する。すなわち、処理回路は、どのトランザクションの一部でもない命令を実行し得る。
【００３１】
装置は、少なくともいくつかの命令において動作するプログラム追跡回路を備え得る。例えば、プログラム追跡回路は、各命令の実行結果に関するデバッグ情報を提供する追跡アイテムを提供し得る。その一方、トランザクション追跡回路は、トランザクション実行中に使用する少なくとも１つのリソースの使用レベルの変化などの、トランザクションに関わる重要イベントについての追跡アイテムを生成し得る。したがって、トランザクション内の命令について、プログラム追跡回路が生成する追跡アイテム群およびトランザクション追跡回路が生成する追跡アイテム群の、２つの追跡アイテム群が生成され得る。
【００３２】
処理回路は、第１のプロセッサと第２のプロセッサとを備え得る。そのような実施形態において、装置は、今後のトランザクションの実行に第１のプロセッサおよび第２のプロセッサのどちらを使用するかに影響を与える制御情報を更新する分析モジュールを備え得る。例えば、第１のプロセッサと第２のプロセッサとは、異なる能力を有し得る。そのような場合、トランザクション追跡回路が生成した追跡アイテムを用いて、トランザクションのプロファイリングを行い、今後そのトランザクションを実行するときは、第１のプロセッサと第２のプロセッサのどちらを使用するのが適切であるかを判断できる。例えば、第１のプロセッサおよび第２のプロセッサの一方がより少ないリソースを使用可能であってよい。生成された追跡アイテムに基づいて、特定のトランザクションを実行するにはリソース数がより少ないプロセッサの方が適していると判断することが可能となり得る。この場合、使用エネルギーを低減のために、よりリソース数の少ないプロセッサでトランザクションを実行する方が望ましいかもしれない。同様に、前回トランザクションを実行した時にリソースが不足した場合は特に、このトランザクションを今後実行する時にはよりリソース数が少ないプロセッサは望ましくない旨を、生成される追跡アイテムが示してよい。したがって、今後のトランザクションの中断・巻き戻しの可能性を低減するために、そのようなトランザクションを今後はよりリソース数の多いプロセッサで実行し得る。このような分析モジュールは、例えば、処理回路で実行されるソフトウェアとして提供され得る。
【００３３】
特定の実施形態について図面を参照して説明する。
【００３４】
図１は、処理回路が実行し得る一連のプログラム命令２を概略的に示す。この一連のプログラム命令は、マルチスレッド・システム内のスレッドを実行するものであり得ることが理解されよう。または、一連のプログラム命令は、実行するプログラム命令の唯一のスレッドであってもよい。図１に示す一連のプログラム命令には、トランザクション開始命令ＴＳｔａｒｔおよびトランザクション終了命令ＴＥｎｄが含まれる。これらの命令はそれぞれ、命令ＩＡ，ＩＢ，ＩＣ，ＩＤを含むトランザクションの境界線を示す。処理回路は、ＴＳｔａｒｔとＴＥｎｄとによって区切られるこれらの命令を実行して、状態データに対する投機的更新を生成する。この投機的更新は、トランザクションが競合せずに完了したと判定されるまでシステム内のメモリやその他記憶リソース（例えばシャドーレジスタやロールバック可能な専用メモリなど）に記憶され、完了が判定されると、システムにコミットされる（例えば、システムのアーキテクチャ状態を更新して、記憶しているロールバックデータを破棄することにより別のトランザクションのサポートに向けて関連の記憶リソースを確保する）。投機的更新を記憶するのに使用される記憶リソースを、トランザクション・メモリとも呼ぶ。
【００３５】
図２Ａは、複数のプログラム命令を含むトランザクションの実行を概略的に示すフロー図である。ステップ２４において、処理は、トランザクション開始命令（ＴＳｔａｒｔ）の実行を待つ。そしてステップ２６において、例えば状態データに対する投機的更新をトランザクション完了まで記憶するためのリソースといった、使用するトランザクション・リソースを割り当てる。ステップ２８において、トランザクション内の１つ目の命令を選択する。ステップ３０において、その時点で競合が検出されたか否かを判定する。競合が検出されている場合、ステップ３２において投機的更新を破棄し、ｆｉｘｕｐルーチンにジャンプし（もしくはトランザクションが失敗した旨をソフトウェアに提示し）、ステップ２６で割り当てられたトランザクション・リソースを、他のトランザクションで使用できるように返還する。
【００３６】
ステップ３０で競合が検出されなかった場合は、ステップ３４において、選択中の命令を実行する。そしてステップ３６において、ステップ３４の実行結果を状態データに対する投機的更新として、割り当てられたトランザクション・リソースに格納する。ステップ３８において、次の命令を選択する。ステップ４０において、選択中の命令がトランザクション終了命令（ＴＥｎｄ）であるか否かを判定する。この命令がトランザクション終了命令でない場合、ステップ３０に処理を戻す。この命令がトランザクション終了命令であるとステップ４０で判定した場合、ステップ４２において、割り当てられたトランザクション・リソースに記憶している投機的更新をコミットして、システムのアーキテクチャ状態を更新する。
【００３７】
図２Ｂは、フラット・トランザクション・ネスティングをサポートするように図２Ａのトランザクション実行を変形させたものを概略的に示すフロー図である。ステップ２６において、トランザクション・リソースを割り当てると、トランザクション・ネスト深さカウンタを「１」に設定する。ステップ３８で次の命令が選択されると、ステップ３５において、選択中の命令がトランザクション開始命令か否かを判定する。選択中の命令がトランザクション開始命令である場合、ステップ３７において深さカウンタをインクリメントし、処理をステップ３０に戻す。
【００３８】
選択中の命令がトランザクション開始命令でないとステップ３５で判定した場合、ステップ４０において、選択中の命令がトランザクション終了命令であるか否かを判定する。選択中の命令がトランザクション終了命令でない場合、処理をステップ３０に戻す。選択中の命令がトランザクション終了命令である場合、ステップ３９において深さカウンタをデクリメントし、ステップ４１において深さカウンタの値がゼロであるか否かを判定する。深さカウンタがゼロでない場合、再び処理をステップ３０に戻す。深さカウンタがゼロである場合、図３Ａのように処理をステップ４２に進める。
【００３９】
図２Ｂの作用は、フラットネスティッド・トランザクションの深さを追跡し、ステップ２４で開始したトランザクションの終了時に、割り当てられたトランザクション・リソースに記憶された投機的更新をコミットすることである。中断とは、全てのネスティッド・トランザクションが中断されることである。その他の実施形態において、完全なトランザクション・ネスティングをサポートすることも可能である。
【００４０】
図３は、一実施形態に係る装置４４を概略的に示す。装置４４は、トランザクションを含む一連の命令２並びにトランザクションの一部を形成しない命令を実行する処理回路４６を備える。
【００４１】
本実施形態の処理回路４６は、トランザクション内の命令の実行結果としての投機的状態を記憶するトランザクション・メモリとしてキャッシュ４８を使用する。また、キャッシュ４８は、プログラム命令を取得するために使用でき、さらに、汎用メモリ５０と組み合わせて記憶階層の一部としても使用できる。投機的状態は、トランザクションがコミットまたは中断されるまでキャッッシュ４８に記憶される。トランザクションがコミットされると、キャッシュに記憶されたトランザクション状態は、メモリ５０に格納されることが許され、メモリ５０で他の処理回路がトランザクション状態にアクセスできるようになる。中断された場合は、トランザクション状態は破棄される。
【００４２】
キャッシュ４８は、トランザクションの実行中に使用されるリソースの一例である。特に、トランザクションの実行中には様々なデータ値が変更されるので、そのように変更される値をキャッシュ４８のキャッシュラインに記憶できる。同じ値を繰り返し変更しても、キャッシュ内のその値が替わるだけである。したがって、リソースの使用度は変わらない。しかし、追加のデータ値が替わると、キャッシュ４８の使用レベル（すなわちリソース使用量）が上昇する。装置４４はさらに、命令の実行中に処理回路４６が使用する少なくとも１つのリソースの使用レベルの変化を示す追跡制御信号を処理回路から受信するトランザクション追跡モジュール５２を備える。このようなリソースが新たに使用されると、ＴＲｅｓｏｕｒｃｅ追跡アイテムが出力される。本実施形態において、上記の少なくとも１つのリソースはキャッシュ４８であり、制御信号は、使用レベルが変化すると、トランザクション追跡モジュール５２に直接通知する。しかし、他の実施形態においては、追跡制御信号は、キャッシュ４８のある一部が使用されたことを示すものであり、トランザクション追跡モジュール５２は、そのキャッシュ４８の一部が新たに使用されているか否かを常に把握し、必要であればＴＲｅｓｏｕｒｃｅ追跡アイテムを作成しなくてはならない。
【００４３】
トランザクション追跡モジュール５２は、追跡メモリ５４に格納される追跡アイテムを生成する。これらの追跡アイテムを分析モジュール５６で分析して、トランザクションのプロファイリングを行うことができる。この分析モジュール５６は、例えば、プロファイリングの結果をメモリ５０に格納してよく、このプロファイリングの結果によって処理回路４６の挙動が影響される。例えば、分析モジュール５６は、リソース使用度（例えば、あるトランザクションを実行するのに処理回路４６がキャッシュ４８をどれだけ使用するか）が十分に低いと判定した場合、今後同じトランザクションを実行するときには、小さいキャッシュを備えるプロセッサ上で実行したり、トランザクションの実行能力に影響を及ぼし得るような別の形状／構成（より低い連想度を有するなど）上で実行したりしてもよい。これにより、その他の処理回路を停止させることができるので、エネルギー節約に繋がり得る。同様に、利用可能なリソースが不足していることによりトランザクションの実行が中断された場合（例えば、キャッシュ４８の大きさが十分でなかった場合）は、分析モジュール５６のプロファイリングにより、今後このトランザクションを処理回路４６が実行する際、より大きいキャッシュにアクセスできるプロセッサ（またはより高い連想度を有するものなど、別の形状／構成を有するもの）で実行させることができる。これにより、トランザクションが今後、実行中に繰り返し中断されることを阻止する。分析モジュールは、分析回路としてハードウェアで実装してもよいし、例えば処理回路４６上で実行され得るソフトウェアで実装してもよい。図３に示す実施形態において、装置４４は、トランザクション追跡モジュール５２の他に、プログラム追跡モジュール６０を備える。プログラム追跡モジュール６０もまた、命令の実行に応じて追跡メモリ５４に格納される追跡アイテムを生成し得る。この命令は、トランザクションの一部であってもいいし、なくてもいい。しかし、プログラム追跡モジュール６０がトランザクション追跡モジュール５２と異なるのは、トランザクション追跡モジュール５２が生成する追跡アイテムがリソース使用度の変化などのトランザクション自体の重要イベントに関わるものであるのに対し、プログラム追跡モジュール６０が生成する追跡アイテムは、ある命令の実行に直接的に関わるものであるという点である。トランザクション追跡動作を制御する制御レジスタ５８が任意で設けられてもよい。特に、トランザクション追跡モジュールが行う追跡をオン／オフするイネーブルパラメータ４７が用いられる。さらに、サンプリングすべきトランザクションの数を示すサンプリングパラメータ４９も用いられ得る。サンプリングパラメータは、例えば、サンプリングすべきトランザクションの割合や、あるトランザクションがサンプリングされる確率を表すことができる。ここで挙げたパラメータに加えて、あるいは代えて、他のパラメータを設けることもできる。
【００４４】
図４は、トランザクション中に、命令の実行によってリソース（特にキャッシュ４８によって実装されるトランザクション・メモリ）がどのような影響を受けるかを示す。トランザクションは、命令ＩＡ，ＩＢ，ＩＣ，ＩＤによって構成される。トランザクション開始時には、トランザクション追跡モジュール５２の追跡アイテムとしてＴＳｔａｒｔパケットが出力される。本実施形態では、命令ＩＡ，ＩＢ，ＩＣ，ＩＤのそれぞれが値を更新させる。これらの命令はトランザクションの一部を構成するので、投機的に実行され、トランザクションの終了時にのみコミットされる。それまでは、投機的状態（すなわち投機的に更新された値）はトランザクション・メモリ、つまりキャッシュ４８に記憶され得る。キャッシュ４８は複数のキャッシュライン６２により構成される。
【００４５】
トランザクション内でデータ値が更新されると、新しい値がキャッシュラインに格納される。この新たな値が書き込まれたキャッシュラインにこれまで書き込みがなかった場合は、キャッシュ４８の使用レベルが上昇する。命令が同じデータ値を複数回アクセスする場合（例えば、同一のデータ値への書き込みが繰り返し行われる場合）や、書き込み済みのキャッシュラインに記憶されているデータ値を更新する場合は、キャッシュ４８の使用レベルは変わらない。
【００４６】
この例では、キャッシュラインは６４バイト長であるとする。命令ＩＡは、アドレス６４に保持されるデータ値を更新させる。これは、キャッシュライン１（６４／６４＝１）内にある。このトランザクションではキャッシュライン１にこれまで書き込みがなく、リソース／キャッシュ４８の使用度の上昇を意味するので、ＴＲｅｓｏｕｒｃｅパケットが追跡アイテムとして出力される。この例では、ＴＲｅｓｏｕｒｃｅパケットはリソース／キャッシュ４８全体の使用度を示すので、命令ＩＡの実行により、キャッシュ４８の使用レベルは１となる。命令ＩＢは、アドレス２４０にアクセスする。これはキャッシュライン３（２４０／６４＝３、余り４８）内にある。このトランザクションではキャッシュライン３にこれまで書き込みがなかったので、別のＴＲｅｓｏｕｒｃｅパケットが出力され、これは、リソース／キャッシュ４８の使用レベルが２に上昇したことを表す。命令ＩＣは、アドレス６８にアクセスする。これもキャッシュライン１（６８／６４＝１、余り４）内にある。新たなキャッシュラインへの書き込みではない（キャッシュライン１はすでに命令ＩＡによってアクセスされている）ので、キャッシュ／リソース４８の使用度は上昇しない。よって、トランザクション追跡モジュール５２によって追跡アイテムは出力されない。命令ＩＤは、アドレス３５２にアクセスする。このアドレスは、このトランザクションにおいてこれまで書き込みがなかったキャッシュライン５（３５２／６４＝５、余り３２）内にあるので、これもまた、リソース／キャッシュ４８の使用レベルの変化を意味する。よって、ＴＲｅｓｏｕｒｃｅパケットが出力され、これは、リソース使用レベルが３になった（つまり、トランザクション開始から３つのリソースライン１，３，５に書き込まれた）ことを示す。この場合のリソース使用度の変化は、発生する重要イベントの一例であり、トランザクションのプロファイリングの目的で使用できる。本実施形態では、ＴＲｅｓｏｕｒｃｅパケット（追跡アイテム）は、リソース／キャッシュ４８全体の使用レベルを示すことに留意されたい。これは、追跡アイテムの完全な履歴がなくともプロファイリングが可能であるという理由から、追跡アイテムが循環バッファに格納される場合に好都合である。これは、新しいエントリが古いエントリに取って代わると、循環バッファで最終的に起こる。他の実施形態においては、新たなアクセスのたびにＴＲｅｓｏｕｒｃｅパケットが生成されてもよく、当該パケットが生成されるたびに、プロファイリング動作中のリソース使用レベル判定を行う必要があり得る。これにより、ＴＲｅｓｏｕｒｃｅパケットがリソース使用度を表すマルチビットの絶対値を含む必要がなくなるので、好都合である。代わりに、ＴＲｅｓｏｕｒｃｅパケットは、単一ビットまたは０ビットであり得るデルタ値を保持だけでよい。
【００４７】
いくつかの実施形態では、トランザクションの最後に１つのＴＲｅｓｏｕｒｃｅパケットを出力して、そのトランザクション中のリソース全体の使用度を示してもよい。
【００４８】
いくつかの実施形態では、キャッシュ４８はセット連想方式であり得る。例えば、それぞれが２つのウェイの４つのキャッシュセットを有するキャッシュで使用された場合の同じ命令群を考える。
【００４９】
命令ＩＡは、セット１（６４／６４＝１）内にあるアドレス６４に書き込む。命令ＩＢは、セット３（２４０／６４＝３、余り４８）内にあるアドレス２４０に書き込む。命令ＩＣは、アドレス６８に書き込む。これもキャッシュセット１（６８／６４＝１、余り４）内にあるので、この命令によりリソース使用度は上昇しない。命令ＩＤはアドレス３５２に書き込む。これは、セット１（３５２／６４＝５、余り３２、そして５の４による剰余＝１）内にある。これは、命令ＩＡ，ＩＣによって書き込まれるキャッシュラインとは異なるベースアドレスであるため、異なるキャッシュライン（セットの他方のウェイのキャッシュライン）である。したがってこの命令はセット１の２つ目のウェイにアクセスするものであり、新たなキャッシュラインが使用されたことになる。
【００５０】
追跡アイテム自体も、多様なフォーマットを有し得る。例えば、いくつかの追跡アイテム（ＴＳｔａｒｔパケット、ＴＥｎｄパケットなど）はタイムスタンプを含んでよい。他の実施形態では、すべてのパケットがタイムスタンプを含んでよい。これにより、マルチプロセッサシステムにおける複数のプロセッサの挙動の比較を容易にすることができる。いくつかの実施形態では、ＴＥｎｄ追跡アイテムが、トランザクションの実行中に使用された処理回路４６のサイクルの数を示すサイクル数を含んでよい。
【００５１】
図５は、一実施形態に係るトランザクション追跡モジュール５２の動作を示すフローチャートである。ステップ６４において、新たな命令を実行する際、制御レジスタ５８のイネーブルパラメータ４７が設定されているか否かを判定する。イネーブルパラメータ４７は、トランザクション追跡モジュール５２が追跡アイテムを生成するか否かを制御する。このパラメータが設定されていない場合、フローはステップ６４に戻る。すなわち、イネーブルパラメータ４７が設定されるまで、フローはここから進まない。イネーブルパラメータ４７が設定されている場合、ステップ６６において、処理回路４６が実行中の命令がトランザクションの１つ目の命令であるか否かを判定する。そうである場合、ステップ６８において、追跡アイテムとしてＴＳｔａｒｔパケットを出力し、フローはステップ６４に戻る。そうでない場合、ステップ７０において、トランザクションが現在実行中であるか否かを判定する。フローは、そうである場合はステップ６４に戻り、そうでない場合はステップ７２に進む。ステップ７２において、トランザクションが終了するか否かを判定する。トランザクションの終了は、例えば、中断（トランザクションの失敗）、またはトランザクションの正常終了によって起こる。正常終了の場合はコミットが発生し得る。トランザクションが終了するとステップ７２で判定した場合、ステップ７４において、トランザクションが中断されるか否かを判定する。トランザクションが中断される場合は、ステップ７６において、追跡アイテムとしてＴＡｂｏｒｔパケットを出力し、そうでない場合は、ステップ７８において、追跡アイテムとしてＴＥｎｄパケットを出力する。いずれにしても、フローはステップ６４に戻る。なお、いくつかの実施形態では、ＴＡｂｏｒｔパケットは中断がなぜ起こったのかを示す理由を含んでよい。トランザクションが終了しないとステップ７２で判定した場合は、ステップ８０において、現在実行中の命令によって処理回路４６が使用するリソースの使用レベルが引き上げられたか否かを判定する。そうでない場合は、フローはステップ６４に戻り、そうである場合は、ステップ８２において追跡パケットとしてＴＲｅｓｏｕｒｃｅパケットを出力し、フローはステップ６４に戻る。
【００５２】
なお、図５のフローチャートの１回の繰り返しは、新たな命令の実行を表す。特に、ステップ６４は、新たな命令に対して起こる。
【００５３】
図６は、トランザクションの一部を追跡させるサンプリングパラメータ４９がある場合の、一実施例に係るトランザクション追跡モジュール５２の動作の例を示すフローチャートである。このパラメータは、あるトランザクションが追跡される確率、または追跡されるトランザクションの割合を示す割合を定めることができる。
【００５４】
この場合もステップ６４において、新たな命令に対して、イネーブルパラメータ４７が設定されているか否かを判定し、イネーブルパラメータ４７が設定されている場合、フローはステップ８４に進み、サンプリングされたトランザクションを現在実行中であるか否かを判定する。すなわち、サンプル・フラグが立てられているか否かを判定する。そうでない場合、ステップ６６において、当該命令がトランザクションの１つ目の命令であるか否かを判定する。当該命令がトランザクションの１つ目の命令でない場合、フローはステップ６４に戻り、トランザクションの１つ目の命令である場合、ステップ８８において、現在の命令をサンプリングすべきか否かを判定する。図３を参照して説明したように、これは、割合または確率に基づいて判定できる。サンプリングパラメータ４９がサンプリングするトランザクションの割合を表す場合は、新しい命令の発生に応じてインクリメントするカウンタがサンプリングパラメータの値に達するたびに、当該新しい命令をサンプリングしてカウンタをリセットするという方法が可能である。確率を表す場合には、乱数を生成して、この乱数が上記確率未満である場合に、新しい命令をサンプリングしてもよい。いずれにしても、現在のトランザクションをサンプリングしないとステップ８８で判定した場合、フローはステップ６４に戻る。そうでない場合、フローはステップ９０に進み、サンプル・フラグを立てて、次回のステップ８４実行時の結果に影響を与える。そしてフローはステップ６８に進み、ＴＳｔａｒｔパケットを出力して、新たなトランザクションが開始されたことを示す。そしてフローはステップ６４に戻る。一方、実行中の命令がサンプリングしたトランザクションの一部であるとステップ８４で判定した（例えばサンプル・フラグが立てられている）場合、ステップ７２において、トランザクションが終了するか否かを判定する。これは、前述のように、トランザクションのコミットまたは中断によるものであり得る。
【００５５】
トランザクションが終了しない場合、ステップ８０において、現在の命令がリソースの使用度を引き上げるか否かを判定する。そうでない場合、フローはステップ６４に戻り、そうである場合、ステップ８２において、前述のようにＴＲｅｓｏｕｒｃｅパケットを出力する。ステップ７２でトランザクションが終了する場合、ステップ７４において、トランザクションが中断されたか否かを判定する。そうでない場合、トランザクションは（コミットにより）正常に終了するので、ステップ７８においてＴＥｎｄパケットを出力する。ステップ９２においてサンプル・フラグを解除して、現在のトランザクションがサンプリングされたトランザクションではないことを示す。そしてフローはステップ６４に戻る。一方、現在のトランザクションが中断されるとステップ７４で判定した場合、ステップ７６においてＴＡｂｏｒｔパケットを出力する。そしてフローは、前述のようにステップ９２に進む。
【００５６】
図７は、一部のトランザクションだけをサンプリング（追跡）する、ネスティッド・トランザクションがあり得る実施形態に係るトランザクション追跡モジュール５２の動作を示すフローチャートである。このフローチャートは、図６のフローチャートと類似しており、同一の処理には同様の符号を使用した。図７に示す実施形態の主な相違点は、トランザションが開始されるとインクリメントされ、トランザクションが終了するとデクリメントされる深さカウンタが設けられていることである。さらに、トランザクションをサンプリング・追跡する場合、そのトランザクション内の全てのトランザクションもサンプリング・追跡する。なお、本実施形態では、１つのトランザクションが中断されると、全てのトランザクションが中断される。さらに、ネスティッド（入れ子）トランザクションは、最外（一番低い）トランザクションが終了するまで終了しない。したがって、本実施形態では、ネスト内の全てのトランザクションを追跡するか、いずれのトランザクションも追跡しないかのどちらかである。他の実施形態では、その外側のトランザクションを追跡していなくても、トランザクションを追跡し得る。このような実施形態では、変形したＴＳｔａｒｔパケットおよびＴＥｎｄパケットを使用して、追跡中のトランザクションがネスティッド・トランザクションである旨を示してもよい。これは、フラグを含むこと、ＴＳｔａｒｔＮｅｓｔｅｄ命令およびＴＥｎｄＮｅｓｔｅｄ命令を出すこと、または開始・終了するトランザクションの深さを示す深さカウンタの値をＴＳｔａｒｔパケットおよびＴＥｎｄパケットに含めることにより達成され得る。フラグを含む、または単に異なるタイプのパケット（ＴＳｔａｒｔＮｅｓｔｅｄおよびＴＥｎｄＮｅｓｔｅｄ）を用いると、より少ない情報しか表す必要がないのでパケットが小さくて済むというのが、利点の一つである。逆に、循環バッファを用いる場合、深さカウントの値を含める代わりに、追跡アイテムのリストの先頭がその最後尾によって書き換えられ始めた時に、さらなる情報を判定することも可能であり得る。
【００５７】
他の実施形態では、（内側の）ネスティッド・トランザクションの追跡が始まると、この追跡は、最外のトランザクションが終了するまで継続され得る。
【００５８】
なお、深さカウンタ自体が、使用レベル追跡対象のリソースの一例であり得る。例えば、ネスティッド・トランザクションが開始すると、深さカウンタが上がり、ＴＲｅｓｏｕｒｃｅパケットが出力され得る（ステップ８２）。同様に、深さカウンタが下がると、その変化を示すためにＴＲｅｓｏｕｒｃｅパケット（ステップ８２）が出力され得る。
【００５９】
図７に示す実施形態では、ステップ６７において、現在のトランザクションが最外のトランザクションの１つ目の命令かどうかを尋ねる。そうである場合フローはステップ８８に進み、そうでない場合フローは前述のようにステップ６４に戻る。したがって、最外のトランザクションの開始時にのみ追跡が開始され得る。
【００６０】
ステップ９０でサンプル・フラグを設定した後、ステップ９２において深さカウンタを１に設定する。そしてフローはステップ６８に進み、ＴＳｔａｒｔパケットを出力する。さらに、現在実行中の命令がサンプリングしたトランザクションのものであるとステップ８４で判定した場合、ステップ９４において、新たな（ネスティッド）トランザクションが開始されるかを判定する。そうである場合、ステップ９６において、深さカウンタをインクリメントして、フローはステップ６８に進みＴＳｔａｒｔパケットを出力する。一方、ステップ９４で新たな（ネスティッド）トランザクションが開始されない場合、フローはステップ７２に進み、前述のように、トランザクションが終了するか否かを判定する。さらに、ステップ７４においてトランザクションが中断されると判定すると、ステップ７６においてＴＡｂｏｒｔパケットを出力した後、ステップ９８においてサンプル・フラグを解除してから、フローはステップ６４に戻る。一方、トランザクションが中断されないとステップ７４で判定した場合、ステップ７８においてＴＥｎｄパケットを出力し、ステップ１００において深さカウンタをデクリメントし、フローはステップ１０２に進む。深さカウンタが０ではない（つまり最外のトランザクションにまだ達していない）とステップ１０２で判定した場合、フローはステップ６４に戻り、そうでない場合、フローはステップ９８に進んでサンプル・フラグを解除する。
【００６１】
図８は、「小」処理装置１０６および「大」処理装置１０８が設けられた実施形態を示す。さらに、処理回路４６は、例えば「小」処理装置１０６および「大」処理装置１０８の一方で動作する、ソフトウェアとして実装し得るスケジューラ１０４を備える。このスケジューラは、メモリ５０に記憶され得る分析モジュール５６からのプロファイリング出力を用いて、今後のトランザクションの実行がどのように扱われるべきかを判断できる。処理装置１０６，１０８は、それぞれが、プロセッサ１１０とキャッシュ４８とを備える。さらに、処理装置１０６，１０８は、共有キャッシュ１１２にもアクセスできる。本実施形態では、小処理装置１０６は、例えば、大処理装置１０８よりも小さいキャッシュ４８を有するので、より少ないエネルギーを使用する。よって、分析モジュール５６によるプロファイリングを使って、どちらの装置が今後のトランザクションの実行に最適であるかを判断できる。特に、プロファイリングによって、キャッシュなどの少ないリソースでトランザクションを実行できるというような判断が可能となる。したがって、スケジューラ１０４は、次回トランザクションが実行される際には、小処理装置１０６で実行されるように決定する。これにより、はるかに大きい大処理装置１０８を使うよりもエネルギーを節約でき、これは、大処理装置１０８が待機状態となり電源をオフできるとなると特にそうなる。一方、特定のトランザクションが多くのリソース使用を要求する場合、スケジューラ１０４は、今後のトランザクションの実行を大処理装置１０８で行うことにより、小処理装置１０６上でリソース不足によりトランザクションが無事に完了しないという事態を回避しようとすることができる。同様に、高連想度キャッシュが必要であることや低連想度キャッシュを使用し得ることを決定してもよい。例えば、リソース使用レベルは、キャッシュセットに残るウェイの数であり得る。この数が所定値（０など）を下回った場合、次回のトランザクション実行時は、キャッシュ内のウェイの数が不足にならないように、より連想度の高いキャッシュ上でトランザクションを実行するのが望ましいかもしれない。一方、ウェイの数が所定値を上回った状態である場合、次回はより連想度の低いキャッシュ上で実行するのが望ましいかもしれない。
【００６２】
本願では、「〜ように構成される」という表現は、装置の要素が、定義される動作を行うことが可能な構成を有する、という意味で用いられる。この関係において、「構成」は、ハードウェアやソフトウェアの仕組みや相互接続の態様を意味する。例えば、装置は、定義の動作を提供する専用のハードウェアを有してもよいし、プロセッサやその他処理装置がその機能を果たすようにプログラミングされてもよい。「構成される」とは、定義の動作を提供するために、装置の要素に対して何らかの変更が必要であることを示唆するものではない。
【００６３】
添付の図面を参照して本発明の例示的実施形態を詳細に説明してきたが、本発明は上記の具体的な実施形態に限定されるものではなく、前掲の請求範囲により定められる本発明の範囲と精神から逸脱しない範囲で当業者によって様々な変更、追加、変形がなされてよいことを理解されたい。例えば、本発明の範囲を逸脱しない範囲で、従属請求項の特徴と独立請求項の特徴とを多様に組み合わせることができる。
【図１】
0006708657.tif 000002
【図２Ａ】
0006708657.tif 000003
【図２Ｂ】
0006708657.tif 000004
【図３】
0006708657.tif 000005
【図４】
0006708657.tif 000006
【図５】
0006708657.tif 000007
【図６】
0006708657.tif 000008
【図７】
0006708657.tif 000009
【図８】
0006708657.tif 000010