(57)【要約】【課題】トランザクショナルメモリの性能低下を抑制した演算処理装置を提供する。【解決手段】メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理部と，メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理部とを有し，第１の演算処理部が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，第２の演算処理部に無効化要求を送信し，第２の演算処理部の前記第２のキャッシュユニットは，無効化要求に応答して，実行中の第２のトランザクションが書込要求先のキャッシュブロックについて競合する場合に，無効化要求に含まれる情報に基づいて第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理部に返信する演算処理装置。【選択図】図５
2015129996.tif 000002
【特許請求の範囲】
【請求項１】
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理部と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理部とを有し，
前記第１の演算処理部が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理部に無効化要求を送信し，
前記第２の演算処理部の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理部に返信する演算処理装置。
【請求項２】
請求項１において，
前記無効化要求に含まれる情報は，前記第１の演算処理部が実行中のトランザクションの状態情報である演算処理装置。
【請求項３】
請求項１において，
前記無効化要求に含まれる情報は，前記第１のトランザクションの第１のアボート回数を有し，
前記第２のキャッシュユニットは，前記第２のトランザクションの第２のアボート回数が前記第１のアボート回数より少ない場合に，前記第２のトランザクションをアボートする判定結果を前記第１の演算処理部に返信する演算処理装置。
【請求項４】
請求項１において，
前記無効化要求に含まれる情報は，前記第１のトランザクションの第１の実行時間関連情報を有し，
前記第２のキャッシュユニットは，前記第２のトランザクションの第２の実行時間関連情報が前記第１の実行時間関連情報より短い場合に，前記第２のトランザクションをアボートする判定結果を前記第１の演算処理部に返信する演算処理装置。
【請求項５】
請求項１において，
前記判定結果が前記第２のトランザクションをアボートする場合は，前記第２の演算処理部は，前記第２のトランザクションをアボートし，前記第２のトランザクションで変更されたキャッシュメモリを無効化し，前記第１の演算処理部は，前記書込要求を実行し，
前記判定結果が前記第２のトランザクションをアボートしない場合は，前記第２の演算処理部は，前記第２のトランザクションの実行を継続し，前記第１の演算処理部は，前記第１のトランザクションをアボートし，前記第１のトランザクションで変更されたキャッシュメモリを無効化する演算処理装置。
【請求項６】
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理装置と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理装置と，
前記メモリへのアクセスを制御する第３の演算処理装置とを有し，
前記第１の演算処理装置が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第３の演算処理装置に書込要求を送信し，
前記第３の演算処理装置が，前記第２の演算処理装置に無効化要求を送信し，
前記第２の演算処理装置の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第３の演算処理装置に返信する情報処理装置。
【請求項７】
請求項８において，
前記無効化要求に含まれる情報は，前記第１の演算処理装置の識別情報と，アクセス先メモリアドレスとを有し，
前記第２のキャッシュユニットは，前記第２の演算処理装置と前記第３の演算処理装置との信号伝搬時間が，前記第１の演算処理装置と前記第３の演算処理装置との信号伝搬時間より短い場合に，前記第２のトランザクションをアボートする判定結果を前記第１の演算処理装置に返信する演算処理装置。
【請求項８】
トランザクション内のメモリへの書込命令を制御する命令制御部と，
キャッシュメモリを有するキャッシュユニットとを有し，
前記キャッシュユニットは，他の演算処理装置内のキャッシュメモリへの書込要求時に受信した無効化要求に応答して，実行中のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に基づいて前記実行中のトランザクションをアボートするか否か判定し，判定結果を返信する演算処理装置。
【請求項９】
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理装置と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理装置とを有し，
前記第１の演算処理装置が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理装置に無効化要求を送信し，
前記第２の演算処理装置の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックで競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理装置に返信する情報処理装置。
【請求項１０】
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理部と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理部とを有する演算処理装置の制御方法であって，
前記第１の演算処理部が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理部に無効化要求を送信する工程と，
前記第２の演算処理部の前記第２のキャッシュユニットが，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理部に返信する工程とを有する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置，演算処理装置の制御方法及び情報処理装置に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）コアを複数有するマルチＣＰＵコア，又はＣＰＵを複数有するマルチＣＰＵ（以下ＣＰＵと総称する）の環境下における並列処理では，複数のＣＰＵが同じアドレス空間を共有し，同じメモリに対してストア命令（書込）とロード命令（読み出し）を実行する。この場合，複数のＣＰＵがメモリの同じアドレスにアクセスしてデータを書き込むことが発生する。そのため，それらのアクセスを調停する機構として，ロックを用いた排他処理がある。
【０００３】
ロックを用いた排他処理では，複数のＣＰＵがそれぞれのスレッドを実行中に，ＣＰＵは，共有メモリへの書込処理の前に，ロックの取得処理を実行し，ロックが取れれば書込処理を実行し，その後ロックを解放する処理を実行する。ロックが取れた状態では他のスレッドによるロック取得は禁止されるので，共有メモリへの書込処理が排他的に行われ，メモリ内のデータのコヒーレンシを維持することができる。
【０００４】
しかし，ロックを用いた排他処理は，プログラマにとって負担になり，バグの温床になっている。そこで，ロックに代えて，排他処理を行うトランザクショナルメモリが提案されている。
【０００５】
トランザクショナルメモリでは，共有メモリに対する一連のアクセスをトランザクションと呼ぶ。トランザクショナルメモリでは，あるＣＰＵによるスレッドが共有メモリにアクセスする際に，他のＣＰＵによるスレッドも共有メモリにアクセスする場合に，アクセスの競合をチェックし，アクセスの競合を検出した場合は，競合した複数のスレッドは実行中のトランザクションをアボートして，トランザクション開始前の状態に復帰し，再度トランザクションの実行を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００８−５１５０５５号
【特許文献２】特表２０１２−５０９５２９号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
トランザクショナルメモリをソフトウエアのみで実装するソフトウエアトランザクショナルメモリと，ハードウエアで実装するハードウエアトランザクショナルメモリとが提案されている。ハードウエアトランザクショナルメモリは，プログラマにプログラミングの負担を強いらないという利点があるが，複雑な判定処理が行えない。そのため，特定のＣＰＵによるスレッドのトランザクションのみがアボートを繰り返して，デッドロックに陥る可能性がある。
【０００８】
アボートが繰り返された場合，ソフトウエアによるアボートハンドラに制御が移行し，ロックを用いた処理に切り替えられてしまい，トランザクショナルメモリの性能低下を招く。
【０００９】
そこで，一つの実施の形態の目的は，トランザクショナルメモリの性能低下を抑制した演算処理装置，演算処理装置の制御方法及び情報処理装置を提供することにある。
【課題を解決するための手段】
【００１０】
実施の形態の第１の側面は，メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理部と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理部とを有し，
前記第１の演算処理部が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理部に無効化要求を送信し，
前記第２の演算処理部の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理部に返信する演算処理装置である。
【発明の効果】
【００１１】
第１の側面によれば，複数の演算処理部間で所定の判定論理で競合するトランザクション間の調停を行うことができるので，性能低下を抑制することができる。
【図面の簡単な説明】
【００１２】
【図１】トランザクションのプログラム例を示す図である。
【図２】トランザクションが競合した場合の排他処理の第１の例を示す図である。
【図３】トランザクションが競合した場合の排他処理の第２の例を示す図である。
【図４】第１の実施の形態における演算処理装置を示す図である。
【図５】本実施の形態における排他処理の概略を示す図である。
【図６】本実施の形態における排他処理の概略を示す図である。
【図７】第２の実施の形態における排他処理を示す図である。
【図８】第２の実施の形態におけるＣＰＵコア間のキャッシュコヒーレンストランザクションである無効化要求のフォーマットの例を示す図である。
【図９】第２の実施の形態におけるＣＰＵコア内のキャッシュユニットを示す図である。
【図１０】アボート閾値レジスタ１２８の構成を示す図である。
【図１１】キャッシュタグ１２４の構成を示す図である。
【図１２】アボート判定回路の構成を示す図である。
【図１３】アボートハンドラへのジャンプ先を記述したトランザクションのプログラム例である。
【図１４】第３の実施の形態におけるキャッシュユニット１２，１４の構成を示す図である。
【図１５】第３の実施の形態における無効化要求のトランザクションのフォーマットを示す図である。
【図１６】第３の実施の形態におけるアボート判定回路１２６を示す図である。
【図１７】第４の実施の形態におけるアボート判定回路を示す図である。
【図１８】第５の実施の形態における情報処理装置（コンピュータ）を示す図である。
【図１９】第５の実施の形態における排他処理のフローチャート図である。
【図２０】第５の実施の形態におけるキャッシュユニット１２，１４，１８を示す図である。
【図２１】第５の実施の形態におけるアボート判定回路の回路図である。
【図２２】第６の実施の形態における情報処理装置を示す図である。
【発明を実施するための形態】
【００１３】
図１は，トランザクションのプログラム例を示す図である。このプログラムでは，アドレス00のTxStart命令と04のTxEnd命令とで，共有メモリに対する一連のアクセスを有するトランザクションを定義している。つまり，TxStart命令とTxEnd命令は，トランザクションの開始と終了をCPUに知らせる命令である。アドレス01は，メモリから0x1番地のデータを読み出して変数%glに代入するload命令，アドレス02は，変数%glに１を加算するadd命令，アドレス03は加算結果をメモリの0x1番地に書き込むstore命令である。したがって，図１は，メモリ内のデータに１を加算して書き込む加算処理のプログラムであって，共通メモリへのストア命令（書込命令）を有するので，排他処理が必要なトランザクションを示すプログラムである。
【００１４】
図１のようなトランザクションをＣＰＵコアが実行する場合，書込命令を実行する時に，他のＣＰＵコアによるトランザクションが，メモリ内の同じアドレスに書込命令を実行しないように排他処理を行うことが必要になる。このように，共通メモリに書込命令を実行する場合に，他の書込命令と競合するか否かをチェックし，競合する場合は，書込命令を排他的に行うように排他処理を実行する。
【００１５】
図２は，トランザクションが競合した場合の排他処理の第１の例を示す図である。この例では，スレッドT#0とT#1とが，共通のメモリへのアクセスを含むトランザクションTR0と，TR1とをそれぞれ実行している。図２において時間軸ｔは上から下に向いている。各トランザクション内のLはロード命令（メモリの読み出し命令），Sはストア命令（メモリへの書込命令）を示し，例えば図１のようなトランザクションである。そして，スレッドT#0の最初のトランザクションTR0とスレッドT#1の最初のトランザクションTR1とが同じアドレスへの書込命令を実行し競合している。
【００１６】
この場合，図２の排他処理は，競合したトランザクションTR0，TR1を全てアボートする（S1,S2)。アボートされた結果，各トランザクションはリセットされ，トランザクション中に変更されたキャッシュメモリも無効化される。そして，両スレッドT#0とT#1は，任意のタイミングでそれぞれのトランザクションTR0，TR1を再実行する（S3,S4)。
【００１７】
しかし，図２の排他処理では，競合したトランザクション全てがアボートされるため，競合時の性能ペナルティが大きい。また，あるスレッドのトランザクションが繰り返しアボートされてデッドロックに陥る場合がある。
【００１８】
図３は，トランザクションが競合した場合の排他処理の第２の例を示す図である。この例では，５つのスレッドT#0-T#4が，共通のメモリへのアクセスを含むトランザクションTR0-TR4をそれぞれ実行している。第２の例の排他処理は，競合したトランザクションのうちストア命令を先に実行したトランザクションが実行を継続し，それ以外のトランザクションをアボートする。このような先実行主義による排他処理では，あるスレッドのトランザクションがアボートを繰り返し実行できない場合がある。
【００１９】
図３の例では，スレッドT#0のトランザクションTR0とスレッドT#1のトランザクションTR1とが競合し，先にストア命令を実行したトランザクションTR0が実行を継続し，トランザクションTR1がアボートされている(S5)。さらに，スレッドT#1のトランザクションTR1とスレッドT#2のトランザクションTR2とが競合し，先にストア命令を実行したトランザクションTR2が実行を継続し，トランザクションTR1がアボートされている(S6)。さらに，スレッドT#1のトランザクションTR1とスレッドT#4のトランザクションTR4とが競合し，先にストア命令を実行したトランザクションTR4が実行を継続し，トランザクションTR1がアボートされている(S7)。結局，スレッドT#1のトランザクションTR1はアボートを繰り返し，最終的には，ソフトウエアのアボートハンドラにジャンプして，ロック処理に切り替えることになる。
【００２０】
ロック処理では，前述したとおり，スレッドT#1がロックを取得し，他のスレッドのトランザクションを待機状態にさせ，スレッドT#1のトランザクションTR1が排他的にメモリに対してストア命令を実行する。
【００２１】
しかし，ソフトウエアのアボートハンドラを実行すると，他の全てのトランザクションが待機状態にされ，ハードウエアによるトランザクショナルメモリの利点を生かせず大きな性能低下を招く。
【００２２】
図２，３で説明した第１，第２の排他処理の例は，ハードウエアによるトランザクショナルメモリの例であり，必ずしも先行技術ではない。これらの排他処理は，競合したときの排他処理の判定が簡単であるので，ハードウエアによるトランザクショナルメモリとして実現し易い反面，あるスレッドのトランザクションがアボートを繰り返す場合が発生し好ましくない。
【００２３】
［第１の実施の形態］
図４は，第１の実施の形態における演算処理装置を示す図である。演算処理装置１０は，例えばＣＰＵチップであり，複数のＣＰＵコアCPU_1〜CPU_3と，メモリコントローラ１６と，バス１５とを有する。そして，演算処理装置１０は，メモリ２０にアクセス可能に接続される。
【００２４】
ＣＰＵコアCPU_1は，命令実行パイプラインやＡＬＵ（演算論理ユニット）などを有する命令制御部１１と，キャッシュユニット１２とを有する。キャッシュユニット１２は，例えばキャッシュメモリとその制御を行うキャッシュパイプライン回路などを有する。キャッシュユニット１２は，Ｌ１キャッシュユニット，Ｌ２キャッシュユニットで構成されていてもよい。ＣＰＵコアCPU_2も同様に，命令制御部１３とキャッシュユニット１４とを有する。それ以外のＣＰＵコアCPU_3なども同様に，命令制御部とキャッシュユニットとを有する。
【００２５】
図４に示された演算処理装置１０の場合，複数のCPUコアがメモリ２０を共有しているので，キャッシュコヒーレンシを保つための構成が必要になる。たとえば，同一のキャッシュブロックを複数のCPUコアのキャッシュユニットが保持していた場合，ストア命令を実行して書込みを行うＣＰＵコアは，他のＣＰＵコアのキャッシュブロックの無効化を要求する。
【００２６】
図５，図６は，本実施の形態における排他処理の概略を示す図である。例えば，ＣＰＵコアCPU_1が，図１に示したようなメモリアクセスを伴う第１のトランザクションを実行中に，ＣＰＵコアCPU_1の命令制御部１１がキャッシュユニット１２に書込要求を発行したと仮定して説明する。
【００２７】
まず，ＣＰＵコアCPU_1の命令制御部１１がキャッシュユニット１２に書込要求を発行する（S11）。それに応答して，キャッシュユニット１２は，他のＣＰＵコアCPU_2に対して，書込要求に対応するキャッシュブロックを無効化することを要求する無効化要求を送信する（S12)。この無効化要求は，バス１５を介して，ＣＰＵコアCPU_2内のキャッシュユニット１４により受信される。無効化要求には，例えば，発行元ＣＰＵコアのＩＤ，発行元ＣＰＵコアのトランザクションの状態を示す情報，アクセスアドレスなどが含まれている。
【００２８】
ＣＰＵコアCPU_2のキャッシュユニット１４は，無効化要求についてアボート判定を実行する（S13）。アボート判定では，キャッシュユニット１４は，まずＣＰＵコアCPU_2が実行中の第２のトランザクションが，無効化要求に含まれるアクセスアドレスに対応するキャッシュブロックについて競合するか否かを判定する。そして，キャッシュユニット１４は，競合する場合に，無効化要求に含まれる情報，例えば発行元ＣＰＵコアの状態情報などに基づいて，第２のトランザクションをアボートするか否かを判定する。この判定回路は，後述する例で説明するように，予め決められた判定論理に従って構成される。
【００２９】
ＣＰＵコアCPU_2のキャッシュユニット１４は，第２のトランザクションをアボートしないと判定した場合は，その判定結果として，第１のトランザクションのアボートを要求するアボート要求ビットを有効にして，無効化要求発行元のＣＰＵコアCPU_1に対して返信する（S14）。一方，キャッシュユニット１４は，第２のトランザクションをアボートすると判断した場合は，その判定結果として，上記のアボート要求ビットを無効，つまりアボート不要にして，返信する（S14）。キャッシュユニット１４は，第２のトランザクションがキャッシュブロックについて競合しない場合も，判定結果として，アボート要求ビットを無効，つまりアボート不要にして返信する（S14）。
【００３０】
上記の返信に応答して，ＣＰＵコアCPU_1のキャッシュユニット１２は，判定結果が第２のトランザクションをアボートする判定であり，したがって返信のアボート要求ビットが無効なら，第１のトランザクションの書込要求を実行して，キャッシュブロックのデータを書き換える。判定結果がトランザクションが競合しない場合も同様である。また，返信の判定結果が第２のトランザクションをアボートしない判定であり，したがってアボート要求ビット有効なら，キャッシュユニット１２は，命令制御部１１に第１のトランザクションをアボートさせると共に，第１のトランザクションで変更されたキャッシュブロックを無効化する(S15)。
【００３１】
一方，ＣＰＵコアCPU_2のキャッシュユニット１４は，判定結果が第２のトランザクションをアボートしない判定であれば特に何も行わない。判定結果がトランザクションが競合しない場合も同様である。一方，判定結果が第２のトランザクションをアボートする判定であれば，命令制御部１５に第２のトランザクションをアボートさせると共に，第２のトランザクションで変更されたキャッシュブロックを無効化する(S16)。
【００３２】
以上のように，第１の実施の形態では，第１のＣＰＵコア内の命令制御部が実行中の第１のトランザクション内のストア命令の実行に伴って書込要求を発行するときに，キャッシュコヒーレンシ維持のために無効化要求を他の第２のＣＰＵコアに送信し，無効化要求を受信した第２のＣＰＵコアが，自らが実行中の第２のトランザクションが書込要求先のキャッシュブロックと競合するか否か判定し，競合する場合は，所定のアボート判定論理に基づいて，実行中の第２のトランザクションをアボートするか否か判定する。つまり，無効化要求を受信した第２のＣＰＵコアが競合する第２のトランザクションを無条件にアボートするのではなく，所定の判定論理に基づいて，例えば，第１，第２のトランザクションの状態を比較してアボート判定する。
【００３３】
そして，その判定結果に基づいて，第１，第２のＣＰＵコアは，アボートすると判定されたトランザクションをアボートし，そのアボートしたトランザクションで変更されたキャッシュブロックを無効化する。トランザクションのアボートは，例えばプログラムカウンタをトランザクションの先頭番地にジャンプさせることで行われる。また，キャッシュブロックの無効化は，例えばアボートされるトランザクション中に読み出しまた書込みが行われたキャッシュブロックのキャッシュタグの有効ビットを無効化することで行われる。
【００３４】
競合するトランザクション間のアボートを判定する論理として，特定のトランザクションのアボートが繰り返されるような状況が発生しないような判定論理を採用することで，図２，３で説明したトランザクショナルメモリの性能劣化を回避することができる。
【００３５】
上記のように，キャッシュコヒーレンシ維持のための無効化要求をトリガにして，無効化要求を受信したＣＰＵコアにトランザクションをアボートするか否かを判定させることで，ハードウエアによるトランザクショナルメモリにおいて，所望の論理で競合するメモリアクセスの調停を行うことができる。
【００３６】
［第２の実施の形態］
図７は，第２の実施の形態における排他処理を示す図である。第２の実施の形態においても，図４，５，６で説明した演算処理装置の構成を有し，排他処理のための無効化要求とアボート判定を行う。そして，第２の実施の形態では，アボート判定論理として，トランザクション内でのアボート回数が多いトランザクションの実行を継続し，少ないトランザクションをアボートするという論理を採用する。つまり，アボート回数が多いトランザクションほど優先して実行できるようにする。
【００３７】
図７を参照して，第２の実施の形態における排他処理を説明する。図７には，図３と同様に，５つのスレッドT#0−T#4がそれぞれのトランザクションを実行する。第２の実施の形態では，各ＣＰＵコアは，アボート回数を数えるアボートカウンタをスレッド毎に有する。そして，スレッドのトランザクション中のアボート回数がアボートカウンタでカウントされる。そして，スレッドのトランザクション間でメモリアクセスが競合した場合，それぞれのアボートカウントを比較し，アボートカウントが小さい方のトランザクションをアボートし，アボートカウンタが大きいほうのトランザクションの実行を継続させる。トランザクションが完了した時に，アボートカウンタはリセットされる。
【００３８】
図７の例で説明すると，スレッドT#0のトランザクションTR0とスレッドT#1のトランザクションTR1とが競合し，もしトランザクションTR1がアボートしたとすると（S20），スレッドT#1のアボートカウンタのアボートカウントCNTはCNT=0からCNT=1にカウントアップする。その後，スレッドT#1のトランザクションTR1とスレッドT#3のトランザクションTR3とが競合した場合，スレッドT#3のアボートカウントCNTがCNT=0であるので，トランザクションTR1のストア命令SがトランザクションTR3のストア命令Sより遅いのにもかかわらず，アボートカウントが小さいトランザクションTR3がアボートし，トランザクションTR1が実行を継続する（S21)。このとき，スレッドT#3のアボートカウントCNTはCNT=1にカウントアップする。スレッドT#1は，その後に他のスレッドと競合せずトランザクションを完了したとき，アボートカウントCNTをCNT=0にリセットする。
【００３９】
次に，スレッドT#3のトランザクションTR3が再実行して，スレッドT#4のトランザクションTR4と競合した場合，アボートカウントが小さいトランザクションTR4がアボートし，トランザクションTR3が実行を継続する（S22)。その結果，スレッドT#3のアボートカウントCNTは，トランザクション完了時にCNT=0にリセットされ，スレッドT#4のアボートカウントCNTはCNT=1にカウントアップする。
【００４０】
このように，アボートカウントを比較していずれのトランザクションをアボートするかを判定することで，特定のスレッドのトランザクションが繰り返しアボートされて，ソフトウエアのアボートハンドラが実行され，性能低下を招くことを回避することができる。
【００４１】
次に，第１の実施の形態の排他処理に第２の実施の形態のアボート判定論理を適用した例について説明する。
【００４２】
図８は，第２の実施の形態におけるＣＰＵコア間のキャッシュコヒーレンストランザクションである無効化要求のフォーマットの例を示す図である。無効化要求は６４ビットで構成され，８ビットのオペコード，４ビットの発行元ＣＰＵコアのＩＤ，４ビットの発行元ＣＰＵコアのアボートカウント，１ビットのアボート要求ビット（アボート判定結果に対応），３ビットの予約ビット，４４ビットのアクセス先のアドレスを有する。
【００４３】
図９は，第２の実施の形態におけるＣＰＵコア内のキャッシュユニットを示す図である。キャッシュユニット１２，１４は，他のＣＰＵコアからの無効化要求や同じＣＰＵコア内の命令制御部１１，１３からの要求を受け付けるオーダーポート１２１と，オーダーポートで受け付けた要求を処理するキャッシュパイプライン１２２と，要求に対する応答などを受け付けるコンプリートポート１２３とを有する。
【００４４】
また，キャッシュユニット１２，１４は，キャッシュブロックに対応するメモリのアドレスを記憶するキャッシュタグ１２４と，キャッシュしているデータをキャッシュブロック単位で記憶するキャッシュメモリ１２５とを有する。
【００４５】
そして，第２の実施の形態では，キャッシュユニット１２，１４は，他のＣＰＵコアからの無効化要求に対して現在実行中のトランザクションが競合しているか否かを判定し，競合している場合にそのトランザクションをアボートするか否かを判定するアボート判定回路１２６と，実行中のトランザクションのアボート回数をカウントするアボートカウンタ１２７とを有する。
【００４６】
さらに，キャッシュユニットは，アボート閾値レジスタ１２８を有する。このアボート閾値レジスタは，後述するとおり，アボート回数がアボート閾値に達するほど大きくなった場合に，例外的にソフトウエアによるアボートハンドラにジャンプできるようにするために設けられている。つまり，キャッシュユニットは，アボート回数でアボートの調停を行っていても例外的にアボート回数が大きくなった場合の例外的な処理を行う。
【００４７】
図１０は，アボート閾値レジスタ１２８の構成を示す図である。アボート閾値レジスタ１２８は，８ビットのアボート閾値を格納する領域と，１ビットのアボート閾値が有効か否かを示す有効無効ビットを格納する領域とを有する。有効無効ビットが無効の場合は，アボートが発生すると即ソフトウエアアボートハンドラにより処理され，ハードウエアリトライを行わない。有効の場合は，アボート回数がアボート閾値に達するまではハードウエアリトライを行い，達したらソフトウエアアボートハンドラにより処理される。
【００４８】
図１１は，キャッシュタグ１２４の構成を示す図である。キャッシュタグ１２４は，タグアドレスTAG_ADDRESSと，その有効ビットVと共に，実行中のトランザクション内で読み出し及び書込を実行したことを示す読み出しフラグRと書込フラグWとを有する。図１１に示された例では，３行のキャッシュタグは全て有効であり，１行目と３行目のキャッシュタグに対応するキャッシュブロックには読み出しが実行済みであり，２行目のキャッシュタグに対応するキャッシュブロックには書込が実行済みである。
【００４９】
図１２は，アボート判定回路の構成を示す図である。図１２には，アボート回路の動作を示す論理値表が示されている。アボート判定回路１２６は，アボートカウンタ１２７のカウント値CNT_1と，キャッシュパイプライン１２２から送信される他のＣＰＵコアからの無効化要求のアボートカウント値CNT_2とを比較し，アボートカウンタ１２７のカウント値CNT_1が小さい場合に出力をＨレベルにし，カウント値CNT_1が大きい場合に出力をＬレベルにする第１の比較器１３０を有する。さらに，アボート判定回路１２６は，キャッシュタグ１２４内の無効化要求のアクセスアドレスに対するタグアドレスの読み出しフラグＲか書込フラグＷのいずれかが実行済み（１またはＨレベル）でありトランザクションが競合することを検出する論理和ゲート１３２を有する。そして，アボート判定回路１２６は，第１の比較器１３０と論理和ゲート１３２の出力が共にＨレベルの場合に，アボート判定結果ＡＢ１を自分の実行中のトランザクションをアボートするアボート実行（Ｈレベル）にし，第１の比較器１３０と論理和ゲート１３２の出力がいずれか一方または両方がＬレベルの場合に，アボート判定結果ＡＢ１をアボート非実行（Ｌレベル）にする論理積ゲート１３３を有する。
【００５０】
また，アボート判定回路１２６は，アボートカウンタのカウント値CNT_1とアボート閾値レジスタの閾値Vthとが等しいか否か判定する第２の比較器１３１と，第２の比較器１３１の出力と論理積ゲート１３３の出力を入力しアボートハンドラへのジャンプ判定結果ＡＢ２を出力する論理積ゲート１３４とを有する。そして，トランザクションの競合を検出する論理和ゲート１３２の出力が，競合判定結果ＣＦとして出力される。
【００５１】
上記の構成を有するキャッシュユニットは，他のＣＰＵコアから受信した無効化要求に応答して，キャッシュパイプライン１２２は，オーダーポート１２１経由で受信した無効化要求のトランザクションが有するアボートカウント値CNT_2をアボート判定回路１２６に送信し，アボート判定を実行させる。アボート判定回路１２６は，キャッシュタグの読み出しフラグＲと書込フラグＷに基づいて無効化要求を送信したＣＰＵコアが実行中の第１のトランザクションと無効化要求を受信したＣＰＵコアが実行中の第２のトランザクションとが競合するか否かを論理和ゲート１３２により判定する。つまり，キャッシュパイプライン１２２は，図８に示した無効化要求のトランザクション内のアドレスが，キャッシュタグ１２４のアドレスタグと一致するキャッシュブロックのＲフラグとＷフラグとを読み出し，アボート判定回路１２６に送信する。ＲフラグとＷフラグは，トランザクション開始時はリセット状態にあるので，ＲフラグまたはＷフラグが「１」にセットされていれば，そのキャッシュブロックは実行中のトランザクション中に変更された，つまりメモリからキャッシュされたことを意味する。したがって，論理和ゲート１３２の出力の競合判定結果CFがＨレベルの場合は，トランザクションが競合していることを意味する。
【００５２】
さらに，アボート判定回路１２６では，第１の比較器１３０が，無効化要求のアボートカウント値CNT_2と，アボートカウンタ１２７のカウント値CNT_1とを比較して，アボートカウンタ１２７のカウント値CNT_1が，受信したアボートカウント値CNT_2よりも小さければ，Ｈレベルを出力し，大きければＬレベルを出力する。そして，トランザクションが競合している場合（ＣＦ＝Ｈ）は，第１の比較器１３０がＨレベルを出力していれば（CNT_1＜CNT_2），論理積ゲート１３３は，実行中のトランザクションをアボートするというアボート判定結果AB1（Ｈレベル）を出力し，第１の比較器１３０がＬレベルを出力していれば（CNT_1＞CNT_2），実行中のトランザクションをアボートしないというアボート判定結果AB1（Ｌレベル）を出力する。一方，トランザクションが競合していない場合は（ＣＦ＝Ｌ）,アボート判定結果AB1をLレベルにする。そして，アボート判定回路１２６は，そのアボート判定結果ＡＢ１と，競合判定結果ＣＦをキャッシュパイプライン１２２に返信する。
【００５３】
（１）実行中の第２のトランザクションをアボートすると判定された場合（ＡＢ１＝Ｈ）は，命令制御部１３は，実行中のトランザクションをリセットしてトランザクションの開始アドレスにジャンプし，キャッシュパイプライン１２２は，キャッシュタグ１２４内のアボートされるトランザクション中に変更されたキャッシュブロックのタグを無効化する。トランザクション中に変更されたキャッシュブロックは，ＲフラグまたはＷフラグが「１」になっていることで検出できる。この場合は，キャッシュパイプライン１２２は，図８の返信するトランザクション内のアボート要求ビットを，他のＣＰＵコアにアボートを要求しない「０」に設定する。
【００５４】
（２）一方，競合する実行中のトランザクションをアボートせず継続すると判定された場合（ＣＦ＝Ｈ，ＡＢ１＝Ｌ）は，命令制御部１１，１３は実行中のトランザクションを継続して実行する。この場合は，キャッシュパイプライン１２２は，図８の返信するトランザクション内のアボート要求ビットを，他のＣＰＵコアにアボートを要求する「１」に設定する。
【００５５】
（３）そして，実行中のトランザクションが競合しないと判定された場合（ＣＦ＝Ｌ）は，命令制御部１１，１３は共に実行中のトランザクションを継続して実行する。この場合は，キャッシュパイプライン１２２は，図８の返信するトランザクション内のアボート要求ビットを，他のＣＰＵコアにアボートを要求しない「０」に設定する。つまり，両ＣＰＵコアは実行中のトランザクションを継続することになる。
【００５６】
そして，キャッシュパイプライン１２２は，他のＣＰＵコアに無効化要求に対する返信のトランザクションを，コンプリートポート１２３を介して返信する。
【００５７】
アボート判定回路１２６では，第２の比較器１３１がアボートカウンタのカウント値CNT_1がアボート閾値Vthに達して等しくなるとＨレベルを出力する。そして，論理積ゲート１３３がアボートすると判定した場合（Ｈレベル）に，論理積ゲート１３４により，アボートハンドラへのジャンプ判定結果ＡＢ２をＨレベルにしてジャンプを命令制御部１１，１３に要求する。カウント値CNT_1がアボート閾値Vthに達してない場合は，アボートハンドラへのジャンプ判定結果ＡＢ２はＬレベルのままである。
【００５８】
アボートハンドラへのジャンプ判定結果ＡＢ２がＨレベルの場合は，命令制御部１３は，実行中の実行中のトランザクションをアボートして，ソフトウエアによるアボートハンドラにジャンプする。これにより，強制的にロックを取得してトランザクションを実行する。
【００５９】
図１３は，アボートハンドラへのジャンプ先を記述したトランザクションのプログラム例である。トランザクションのアドレス００の開始命令TxStartのオペランド欄に，アボートハンドラのジャンプ先アドレスが記述されている。ジャンプ先のアボートハンドラはロックを取得して，アドレス０１にリターンし，それ以降のトランザクションの命令が実行される。
【００６０】
なお，第１の比較器１３０が，アボートカウンタのカウント値CNT_1と無効化要求のアボートカウント値CNT_2とが等しい場合は，出力をＨレベルにしてアボートするかＬレベルにして非アボートするかのいずれかに設計すればよい。
【００６１】
以上のように，第１の実施の形態によれば，トランザクションのアボート回数をアボートカウンタに記憶しておいて，第１のＣＰＵコアが書込命令を実行するときに自分のアボートカウント値を無効化要求に含めて他のＣＰＵコア，つまり第２のＣＰＵコアに送信し，第２のＣＰＵコアのアボート判定回路が，トランザクションが競合するか否かを判定し，競合する場合に，無効化要求内の第１のトランザクションのアボートカウント値と，アボートカウンタ内の第２のトランザクションのアボートカウント値とを比較して，第１，第２のＣＰＵコアの第１，第２のトランザクションのいずれをアボートすべきかを判定する。このように，無効化要求のトランザクションに，アボートカウント値のようなトランザクションの状態情報を含ませておくことで，無効化要求を受信したＣＰＵコアに，そのトランザクションの状態情報に基づいて，いずれのＣＰＵコアがアボートするかを判定させることができる。
【００６２】
［第３の実施の形態］
第３の実施の形態では，アボート判定回路が，トランザクションの状態情報としてトランザクションの実行時間関連情報を利用し，アボート判定を実行する。トランザクションの実行時間関連情報の例は，トランザクションの実行開始後の実経過時間（μsec）である実行時間，トランザクションの実行開始後のクロックサイクル数，トランザクションの実行開始から実行されたプログラムの命令数である。
【００６３】
第３の実施の形態においても，図４，５，６で説明した演算処理装置の構成と，排他処理のための無効化要求とアボート判定の処理を行う。そして，第３の実施の形態では，アボート判定論理として，競合したトランザクションの実行時間，クロック数，プログラムステップ数などの実行時間関連情報が短いまたは少ないほうのトランザクションをアボートして，長いまたは多いほうのトランザクションの実行を継続するというアボート判定論理を採用する。
【００６４】
図１４は，第３の実施の形態におけるキャッシュユニット１２，１４の構成を示す図である。図１４のキャッシュユニットにおける，図９に示したキャッシュユニットと異なる構成は，実行時間関連情報をカウントする実行時間カウンタ１２９を有することであり，アボート判定回路１２６が，実行時間カウンタ値に基づいて，アボート判定を行う。他の構成は，図９−１１と同じである。
【００６５】
図１５は，第３の実施の形態における無効化要求のトランザクションのフォーマットを示す図である。図８のフォーマットと異なる点は，１１ビットの実行時間関連情報を有することである。それ以外は，図８のフォーマットと同じである。なお，図１５のフォーマットにおいて，アボートカウント値はなくても良い。
【００６６】
図１６は，第３の実施の形態におけるアボート判定回路１２６を示す図である。このアボート判定回路１２６は，図１２のアボート判定回路の第１の比較器１３０の代わりに，実行時間カウンタの実行時間TIME_1と無効化要求に含められている実行時間TIME_2とを比較する第３の比較器１３５を有する。それ以外の構成は，図１２と同じである。また，論理値表も図１２と同様になる。
【００６７】
第３の比較器１３５は，TIME_1＜TIME_2の場合に出力をＨレベルにし，トランザクションが競合している場合に（ＣＦ＝Ｈ），論理積ゲート１３３のアボート判定結果ＡＢ１をアボートする（Ｈレベル）にして，自分のトランザクション，つまり，第２のトランザクションをアボートさせる。
【００６８】
一方，第３の比較器１３５は，TIME_1＞TIME_2の場合に出力をＬレベルにし，論理積ゲート１３３のアボート判定結果ＡＢ１を非アボート（Ｌレベル）にして，相手のトランザクション，つまり，第１のトランザクションをアボートさせる。
【００６９】
さらに，トランザクションが競合しない場合は，競合判定結果ＣＦは非競合（Ｌレベル）になり，アボート判定結果ＡＢ１も非アボート（Ｌレベル）になる。
【００７０】
第３の実施の形態においても，キャッシュユニット１２，１４は，アボートカウンタ１２７と，アボート閾値レジスタ１２８とを有し，アボート判定回路１２６は，アボート回数がアボート閾値に達した後更にアボートする場合に，アボートハンドラへのジャンプ判定結果ＡＢ２をジャンプ（Ｈレベル）にする。この点は，第２の実施の形態と同じである。
【００７１】
［第４の実施の形態］
図１７は，第４の実施の形態におけるアボート判定回路を示す図である。第４の実施の形態では，第２の実施の形態と同様に，アボート回数を比較して，アボート回数が少ないほうのトランザクションをアボートさせる。但し，第２の実施の形態と異なり，アボート回数が等しい場合に，第３の実施の形態の判定論理である実行時間関連情報を比較して，実行時間関連情報が短いまたは少ないほうをアボートさせる。
【００７２】
図１７に示したアボート判定回路１２６は，アボートカウンタのカウント値CNT_1と無効化要求のカウント値CNT_2とが等しいか否かを判定する第４の比較器１３６と，論理積ゲート１３７と，論理和ゲート１３８とを有する。
【００７３】
アボート判定回路１２６の動作は次の通りである。アボートカウンタのカウント値CNT_1と無効化要求のカウント値CNT_2とが等しくない場合は，図１２と同じ動作になり，カウント値が少ない方をアボートするアボート判定結果AB1を出力する。一方，等しい場合は，図１６と同じ動作になり，実行時間が少ない方法をアボートするアボート判定結果AB1を出力する。アボートカウンタのカウント値CNT_1がアボート閾値Vthに達した後にアボートする判定になった場合に，アボートハンドラへのジャンプ判定結果AB2をＨレベルにすることは，図１２，図１６と同じである。
【００７４】
［第５の実施の形態］
図１８は，第５の実施の形態における情報処理装置（コンピュータ）を示す図である。第５の実施の形態では，NUMA(Cache Coherent Non Uniform Memory Access)アーキテクチャのコンピュータシステムに適用される。
【００７５】
図１８の情報処理装置は，複数の演算処理装置（CPUチップ，以下単にCPUと称する）CPU_1,CPU_2,CPU_3を有し，バス１９とネットワークスイッチSW1,SW2を介して接続されている。また，各CPUは，命令制御部１１，１３，１７とキャッシュユニット１２，１４，１８を有する。演算処理装置CPU_1はメモリ２０を管理するホームCPUである。メモリ２０には，メモリ内のデータをキャッシュしているCPUを管理するディレクトリ領域が設けられている。図１８の例では，アドレス0x00fのデータD3がCPU_3のキャッシュユニット１８にキャッシュされている。そのため，メモリ２０内のディレクトリにはアドレス0x00fに対応してキャッシュしているCPU_3が記憶されている。
【００７６】
このようにCPU_3がアドレス0x00fのデータD3をキャッシュしている状態で，CPU_2の命令制御部１３がアドレス0x00fにデータD1を書込むストア命令を実行する場合，CPU_2はメモリを管理しているホームCPU_1を介してCPU_3とキャッシュコヒーレンシを維持するための排他処理を行う。書込命令を実行するCPU_2をローカルCPUと称する。また，メモリのデータをキャッシュしているCPU_3をリモートCPUと称する。
【００７７】
NUMAアーキテクチャのコンピュータシステムでは，書込命令を実行するローカルCPU(CPU_2)が書込要求をホームCPU(CPU_1)に送信し，ホームCPU(CPU_1)がメモリ２０内のディレクトリを参照して書込先アドレスのデータをキャッシュ済みのリモートCPU(CPU_3)を検出し，ホームCPU(CPU_1)がリモートCPU(CPU_3)に無効化要求を送信する。一般には，リモートCPU(CPU_3)はトランザクションが競合する場合には実行中のトランザクションをアボートし，キャッシュメモリを無効化し，無効化完了報告をホームCPU(CPU_1)に返信する。ホームCPU(CPU_1)は，無効化完了報告の返信を受信したら，書込要求の書込先アドレスにデータを書込み，ローカルCPU(CPU_2)に書込完了報告を送信する。
【００７８】
上記のように，NUMAのコンピュータシステムでは，複数の演算処理装置CPU_1,CPU_2,CPU3の間でメモリアクセスにかかる時間が均等ではない。そのため，メモリを管理するホームCPU(CPU_1)に近いCPUほど一定時間内に多数のアクセスを実行することができる。ここで，ホームCPUに近いCPUとは，ホームCPU(CPU_1)までの信号伝搬時間が短いCPUという意味であり，図１８の例では，リモートCPU(CPU_3)は複数のネットワークスイッチSW1,SW2を介してホームCPU(CPU_1)に接続されているので，ローカルCPU（CPU_2）よりも信号伝搬時間が長く，CPU間距離が長い。
【００７９】
そこで，各CPUのアボート判定回路は，競合するトランザクション間でより平等にアボート判定をするために，競合するトランザクションを実行中のCPUのホームCPUに対する物理的なCPU間距離情報，例えばネットワークスイッチ数や，信号伝搬時間に基づいて，CPU間距離が短いほどアボートし，長いほどアボートせずに優先的にトランザクションを実行する。これにより，ホームCPUへのアクセス頻度が低いCPUに優先的にトランザクションを実行させることができる。
【００８０】
図１９は，第５の実施の形態における排他処理のフローチャート図である。上記の情報処理装置において，キャッシュコヒーレンシを維持するための排他処理は次のように行われる。ローカルCPU(CPU_2)の命令制御部１３がキャッシュユニット１４に書込要求を発行する（S31）。それに応答して，キャッシュユニット１４は，ホームCPU(CPU_1)に書込要求を送信する（S32）。この書込要求にはローカルCPU(CPU_2)のIDとアクセス先アドレスなどが含まれている。
【００８１】
ホームCPU(CPU_1)は，メモリ２０内のディレクトリを参照して，書込先アドレスのデータが他のCPUで既にキャッシュされているか否かをチェックし，キャッシュ済みの場合に，無効化要求をリモートCPU(CPU_3)に送信する（S33）。この無効化要求には，ホームCPUのCPU-ID(CPU_1)に加えてローカルCPUのCPU-ID(CPU_2)とアクセス先アドレスとアボート要求ビットが含まれている。
【００８２】
リモートCPU(CPU_3)のキャッシュユニット１８は，受信した無効化要求について，アボート判定を行う（S34）。このアボート判定では，キャッシュユニット１８は，ローカルCPU(CPU_2)とホームCPU(CPU_1)との間の時間的距離，例えば信号伝播時間と，リモートCPU(CPU_3)とホームCPU(CPU_1)との間の時間的距離とを比較して，時間的距離が短い方のトランザクションをアボートし，時間的距離が長い方のトランザクションを継続するように判定する。時間的距離が長いほど，書込要求がホームCPU(CPU_1)受信される頻度が低いので，上記のような判定論理を採用することで，特定のCPUのトランザクションのアボートが繰り返されてソフトウエアによるロック処理にジャンプすることを抑制することができる。
【００８３】
図２０は，第５の実施の形態におけるキャッシュユニット１２，１４，１８を示す図である。図２０のキャッシュユニットの図９，図１４のキャッシュユニットとは異なる構成は，CPU間距離計算ユニット１５０を有する構成である。このキャッシュユニットでは，キャッシュパイプライン１２２がオーダーポート１２１に受信した無効化要求内のローカルCPUのCPU-IDをアボート判定回路１２６に送信し，CPU間距離計算ユニット１５０がローカルCPUのCPU-IDに基づいてローカルCPU（CPU_2）とホームCPU(CPU_1)間の時間的距離（CPU間距離）を計算し，アボート判定回路１２６に出力する。そして，アボート判定回路１２６は，ローカルCPU（CPU_2）と自分（リモートCPU(CPU_3)）のホームCPU(CPU_1)までの時間的距離を比較して，自分の時間的距離が短い場合に自分のトランザクションをアボートするよう判定する。
【００８４】
図２１は，第５の実施の形態におけるアボート判定回路の回路図である。このアボート判定回路の図１２のアボート判定回路と異なる構成は，第１の比較器１３０の代わりに，時間的距離（CPU間距離）を比較する第５の比較器１５１を有することにある。そして，第５の比較器１５１は，CPU間距離計算ユニットが計算したローカルCPU(CPU_2)のCPU間距離DIS_2より，自分つまりリモートCPU(CPU_3)のCPU間距離DIS_1のほうが短いと（DIS_2＞DIS_1），自分のトランザクションをアボートする判定（Hレベル）を出力する。逆に，長いと（DIS_2＜DIS_1），アボートしない(非アボート，Lレベル)を出力する。したがって，キャッシュタグの読み出しフラグRまたは書込フラグWが「１」で書込先アドレスのキャッシュブロックが競合する場合（CF=H），第５の比較器１５１の比較結果に応じて，アボート判定結果AB1が出力される。第５の実施の形態におけるアボート判定回路の判定論理は，図１２の論理値表と同様である。
【００８５】
図１９に戻り，リモートCPU(CPU_3)のキャッシュユニット１８は，アボート判定結果に基づいてアボート要求ビットを設定して，ホームCPU（CPU_1）に返信する（S35）。図６のS14と同様である。ホームCPU(CPU_1)は，アボート判定結果がアボートであり，返信のアボート要求ビットが「０」（アボート非要求）の場合は，書込処理を実行し，逆の判定結果の場合は，書込処理を実行しない（S37）。そして，ホームCPU(CPU_1)は，書込要求に対する処理結果をローカルCPU(CPU_2)に送信する（S38）。これに応答して，ローカルCPU(CPU_2)のキャッシュユニット１３は，処理結果が非書込の場合，実行中のトランザクションをアボートしてそのトランザクション中に変更されたキャッシュメモリを無効化する(S39)。
【００８６】
一方，リモートCPU(CPU_3)のキャッシュユニット１８は，アボート判定結果に基づいて，何もせずに実行中のトランザクションを継続するか，または，実行中のトランザクションをアボートして，そのトランザクション中に変更されたキャッシュメモリを無効化する（S36）。
【００８７】
図１８において，CPU_1, CPU_2, CPU_3は，書込要求を発行するローカルCPUになることもあれば，無効化要求を受信してアボート判定を行うリモートCPUになることもある。したがって，これらのCPUのキャッシュユニット１２，１４，１８は，上記で説明した構成とアボート判定回路を有する。
【００８８】
また，図１８のCPU_1, CPU_2, CPU_3が，複数のCPUコアを有し，各CPUコアが命令制御部とキャッシュユニットを有する場合も同様に，上記の第５の実施の形態を適用することができる。
【００８９】
［第６の実施の形態］
図２２は，第６の実施の形態における情報処理装置を示す図である。図２２の情報処理装置は，複数の演算処理装置（CPUチップ）CPU_1,CPU_2,CPU_3を有するコンピュータである。複数の演算処理装置（CPUチップ）CPU_1,CPU_2,CPU_3は，共通のメモリ２０を共有している。したがって，演算処理装置（CPUチップ）CPU_1,CPU_2,CPU_3のキャッシュメモリ間で，キャッシュコヒーレンシを保つ必要がある。そこで，第６の実施の形態においても，各キャッシュユニットが，第２，第３の実施の形態と同様のアボート判定を実行する。
【００９０】
以上のとおり，あるCPU（CPUコアまたはCPUチップ）で書込要求が発生した場合に，他のCPUに書込要求を送信し，他のCPUにトランザクションの競合の有無と，競合している場合に，実行中のトランザクションをアボートするか否かの判定を行わせ，アボートすると判定されたCPUがトランザクションをアボートしそのトランザクションで変更したキャッシュブロックを無効化する。そして，アボート判定では，アボート回数，トランザクションの実行時間関連情報，CPU間距離などに基づいて判定することで，より平等にアボート判定を行うことができる。それにより特定のCPUのトランザクションがアボートを繰り返してソフトエウアによるアボートハンドラの処理が行われることを抑制することができる。上記のように無効化要求を受信したCPUにアボート判定を行わせることで，ハードウエアのトランザクショナルメモリを容易に実現することができる。
【００９１】
以上の実施の形態をまとめると，次の付記のとおりである。
【００９２】
（付記１）
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理部と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理部とを有し，
前記第１の演算処理部が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理部に無効化要求を送信し，
前記第２の演算処理部の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理部に返信する演算処理装置。
【００９３】
（付記２）
付記１において，
前記無効化要求に含まれる情報は，前記第１の演算処理部が実行中のトランザクションの状態情報である演算処理装置。
【００９４】
（付記３）
付記１において，
前記無効化要求に含まれる情報は，前記第１のトランザクションの第１のアボート回数を有し，
前記第２のキャッシュユニットは，前記第２のトランザクションの第２のアボート回数が前記第１のアボート回数より少ない場合に，前記第２のトランザクションをアボートする判定結果を前記第１の演算処理部に返信する演算処理装置。
【００９５】
（付記４）
付記１において，
前記無効化要求に含まれる情報は，前記第１のトランザクションの第１の実行時間関連情報を有し，
前記第２のキャッシュユニットは，前記第２のトランザクションの第２の実行時間関連情報が前記第１の実行時間関連情報より短い場合に，前記第２のトランザクションをアボートする判定結果を前記第１の演算処理部に返信する演算処理装置。
【００９６】
（付記５）
付記４において，
前記実行時間関連情報は，トランザクションの実行開始からの経過時間である実行時間，前記実行開始からのクロックサイクル数，実行開始からの実行済み命令数のいずれかである演算処理装置。
【００９７】
（付記６）
付記１において，
前記判定結果が前記第２のトランザクションをアボートする場合は，前記第２の演算処理部は，前記第２のトランザクションをアボートし，前記第２のトランザクションで変更されたキャッシュメモリを無効化し，前記第１の演算処理部は，前記書込要求を実行し，
前記判定結果が前記第２のトランザクションをアボートしない場合は，前記第２の演算処理部は，前記第２のトランザクションの実行を継続し，前記第１の演算処理部は，前記第１のトランザクションをアボートし，前記第１のトランザクションで変更されたキャッシュメモリを無効化する演算処理装置。
【００９８】
（付記７）
付記１において，
実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合しない場合に，前記第２の演算処理部は，前記第２のトランザクションの実行を継続し，前記第１の演算処理部は，前記書込要求を実行する演算処理装置。
【００９９】
（付記８）
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理装置と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理装置と，
前記メモリへのアクセスを制御する第３の演算処理装置とを有し，
前記第１の演算処理装置が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第３の演算処理装置に書込要求を送信し，
前記第３の演算処理装置が，前記第２の演算処理装置に無効化要求を送信し，
前記第２の演算処理装置の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第３の演算処理装置に返信する情報処理装置。
【０１００】
（付記９）
付記８において，
前記無効化要求に含まれる情報は，前記第１の演算処理装置の識別情報と，アクセス先メモリアドレスとを有し，
前記第２のキャッシュユニットは，前記第２の演算処理装置と前記第３の演算処理装置との信号伝搬時間が，前記第１の演算処理装置と前記第３の演算処理装置との信号伝搬時間より短い場合に，前記第２のトランザクションをアボートする判定結果を前記第１の演算処理装置に返信する演算処理装置。
【０１０１】
（付記１０）
トランザクション内のメモリへの書込命令を制御する命令制御部と，
キャッシュメモリを有するキャッシュユニットとを有し，
前記キャッシュユニットは，他の演算処理装置内のキャッシュメモリへの書込要求時に受信した無効化要求に応答して，実行中のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に基づいて前記実行中のトランザクションをアボートするか否か判定し，判定結果を返信する演算処理装置。
【０１０２】
（付記１１）
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理装置と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理装置とを有し，
前記第１の演算処理装置が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理装置に無効化要求を送信し，
前記第２の演算処理装置の前記第２のキャッシュユニットは，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックで競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理装置に返信する情報処理装置。
【０１０３】
（付記１２）
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理部と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理部とを有する演算処理装置の制御方法であって，
前記第１の演算処理部が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第２の演算処理部に無効化要求を送信する工程と，
前記第２の演算処理部の前記第２のキャッシュユニットが，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第１の演算処理部に返信する工程とを有する演算処理装置の制御方法。
【０１０４】
（付記１３）
メモリへの書込命令を制御する第１の命令制御部と，第１のキャッシュメモリを有する第１のキャッシュユニットとを有する第１の演算処理装置と，
前記メモリへの書込命令を制御する第２の命令制御部と，第２のキャッシュメモリを有する第２のキャッシュユニットとを有する第２の演算処理装置と，
前記メモリへのアクセスを制御する第３の演算処理装置とを有する情報処理装置の制御方法であって，
前記第１の演算処理装置が，実行中の第１のトランザクション内での前記第１のキャッシュメモリへの書込要求時に，前記第３の演算処理装置に書込要求を送信する工程と，
前記第３の演算処理装置が，前記第２の演算処理装置に無効化要求を送信する工程と，
前記第２の演算処理装置の前記第２のキャッシュユニットが，前記無効化要求に応答して，実行中の第２のトランザクションが前記書込要求先のキャッシュブロックについて競合する場合に，前記無効化要求に含まれる情報に基づいて前記第２のトランザクションをアボートするか否かを判定し，判定結果を前記第３の演算処理装置に返信する工程とを有する情報処理装置の制御方法。
【符号の説明】
【０１０５】
１０：演算処理装置
CPU_1,CPU_2,CPU_3：演算処理部，CPUコア
１１，１３：命令制御部
１２，１４：キャッシュユニット
２０：メモリ
【図１】
2015129996.tif 000003
【図２】
2015129996.tif 000004
【図３】
2015129996.tif 000005
【図４】
2015129996.tif 000006
【図５】
2015129996.tif 000007
【図６】
2015129996.tif 000008
【図７】
2015129996.tif 000009
【図８】
2015129996.tif 000010
【図９】
2015129996.tif 000011
【図１０】
2015129996.tif 000012
【図１１】
2015129996.tif 000013
【図１２】
2015129996.tif 000014
【図１３】
2015129996.tif 000015
【図１４】
2015129996.tif 000016
【図１５】
2015129996.tif 000017
【図１６】
2015129996.tif 000018
【図１７】
2015129996.tif 000019
【図１８】
2015129996.tif 000020
【図１９】
2015129996.tif 000021
【図２０】
2015129996.tif 000022
【図２１】
2015129996.tif 000023
【図２２】
2015129996.tif 000024