(57)【要約】【課題】マルチスレッドの演算処理装置において、デッドロックを発生させることなく、ＣＡＳ命令の同時実行を可能にする。【解決手段】アドレスがロックされている旨を示すロック情報とロックアドレスとをスレッド毎に保持し、命令に応じた処理を複数のスレッド毎に要求する命令制御部からリクエストを受ける一次キャッシュコントローラが、ＣＡＳ命令の実行が要求された場合、そのＣＡＳ命令のアクセス対象アドレスが、ロック情報が保持されているスレッドのロックアドレスと異なるとき、ＣＡＳ命令に含まれる複数の処理を実行するとともに、また、複数のスレッドのいずれかのスレッドのロック情報が保持されている場合に、ロック情報が保持されていないスレッドのキャッシュメモリへのストア処理の実行を抑止する。【選択図】図２
2015038687.tif 000002
【特許請求の範囲】
【請求項１】
データを保持するキャッシュメモリと、
命令に応じた処理を複数のスレッド毎に要求する命令制御部と、
各スレッドに対応付けてアドレスがロックされている旨を示すロック情報とロック対象のアドレスとを前記複数のスレッド毎に保持するアドレス保持部と、
前記キャッシュメモリへのアクセスを含む複数の処理を不可分に実行するアトミック命令の実行が前記命令制御部から要求された場合、要求された前記アトミック命令のアクセス対象のアドレスが、前記アドレス保持部にロック情報が保持されたスレッドのロック対象アドレスと異なるとき、前記アトミック命令に含まれる複数の処理を実行するとともに、前記アドレス保持部に前記複数のスレッドのいずれかのスレッドのロック情報が保持されている場合、前記アドレス保持部にロック情報が保持されていないスレッドの前記キャッシュメモリへのストア処理の実行を抑止するキャッシュ制御部とを有することを特徴とする演算処理装置。
【請求項２】
前記キャッシュ制御部はさらに、
前記命令制御部が要求したアトミック命令のアクセス対象のアドレスと、前記アドレス保持部が保持したロック対象のアドレスとを複数のスレッド毎に比較する比較器と、
前記ロック情報に基づき、前記アトミック命令の実行を要求したスレッドとは異なるスレッドに対応する比較器の比較結果を、命令に応じた処理を実行するパイプラインに出力する出力回路とを有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記キャッシュ制御部はさらに、
前記複数のスレッド毎に設けられ、前記アドレス保持部の自スレッドに対応するロック情報がセットされているかをそれぞれ判定する判定回路と、
前記判定回路の判定結果に基づき、前記キャッシュメモリへの自スレッドのストア処理の実行を抑止する抑止回路とを有することを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
データを保持するキャッシュメモリと、各スレッドに対応付けてアドレスがロックされている旨を示すロック情報とロック対象のアドレスとを複数のスレッド毎に保持するアドレス保持部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する命令制御部が、命令に応じた処理を前記複数のスレッド毎に要求し、
前記演算処理装置が有する前記キャッシュ制御部が、前記キャッシュメモリへのアクセスを含む複数の処理を不可分に実行するアトミック命令の実行が前記命令制御部から要求された場合、要求された前記アトミック命令のアクセス対象のアドレスが、前記アドレス保持部にロック情報が保持されたスレッドのロック対象アドレスと異なるとき、前記アトミック命令に含まれる複数の処理を実行し、
前記キャッシュ制御部が、前記アドレス保持部に前記複数のスレッドのいずれかのスレッドのロック情報が保持されている場合、前記アドレス保持部にロック情報が保持されていないスレッドの前記キャッシュメモリへのストア処理の実行を抑止することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＡＳ（Compare And Swap）命令などの複数の処理を不可分に実行するアトミック命令によるメモリアクセスを行うことが可能な演算処理装置がある。ここで、アトミック命令とは、当該複数の処理を所定の順序で実行した場合と同じ結果を得られることが保証される命令をいう。ＣＡＳ命令は、データのフェッチ処理、比較処理、及びストア処理を一つの命令で実行する。ＣＡＳ命令のフェッチからストア実行までの間、対象となるデータは、他の命令による参照や更新が禁止される。
【０００３】
そのため、ＣＡＳ命令は、ＣＡＳ命令に対して先行の命令を追い越さない、ＣＡＳ命令に対して後続の命令は、ＣＡＳ命令を追い抜かないという決まりがあり、ＣＡＳ命令の実行前には先行するリクエストの完了を待ち、実行中には後続するリクエストを処理しない。また、アトミック性を守るために、ＣＡＳ命令の実行中にはロックをかけてデータを保護するのが一般的である。
【０００４】
従来のプロセッサにおけるＣＡＳ命令による動作について、図１１〜図１３を参照して説明する。なお、以下の説明では、プロセッサは、複数のスレッドを同時に実行可能なマルチスレッドのプロセッサとする。ＣＡＳ命令は、図１１、図１２、及び図１３に示すフローチャートに従って、第１の動作フロー、第２の動作フロー、及び第３の動作フローの３回の動作フローで実行される。
【０００５】
図１１は、ＣＡＳ命令の実行に係る第１の動作フローを示すフローチャートである。プロセッサのコアが有する一次キャッシュコントローラは、コアが有する命令制御部から受け取ったＣＡＳ命令をフェッチポート及びストアポートに登録する（Ｓ４０１）。そして、一次キャッシュコントローラは、ＣＡＳ命令に係る第１のリクエストをフェッチポートからパイプラインに投入する（Ｓ４０２）。
【０００６】
ここで、フェッチポートでは順序制御が行われており、リクエストがフェッチポート内で一番古いリクエストであるか否かを判定可能である。ＣＡＳ命令は、フェッチポート内で一番古いリクエストになってから、つまり先行するリクエストがすべて処理されてから実行される。一次キャッシュコントローラのパイプラインは、投入された第１のリクエストが、フェッチポート内で一番古いリクエストであるか否かを判定する（Ｓ４０３）。
【０００７】
ステップＳ４０３での判定の結果、投入された第１のリクエストがフェッチポート内で一番古いリクエストでない場合には、その第１のリクエストはアボートされ、ステップＳ４０２に戻る。一方、投入された第１のリクエストがフェッチポート内で一番古いリクエストである場合には、一次キャッシュコントローラのパイプラインは、他のスレッドがロックレジスタにロックフラグをセットしているか確認する（Ｓ４０４）。ここで、ロックフラグは、ＣＡＳ命令の実行中にセットされ（例えば、値が“１”に設定され）、ＣＡＳ命令が完了するとクリアされる（例えば、値が“０”に設定される）。
【０００８】
ステップＳ４０４での確認の結果、他のスレッドがロックフラグをセットしている場合には、投入された第１のリクエストはアボートされ、ステップＳ４０２に戻る。一方、他のスレッドがロックフラグをセットしていない場合には、一次キャッシュコントローラのパイプラインは、ロックレジスタにロックフラグをセットして（Ｓ４０５）、第１の動作フローを終了する。
【０００９】
図１２は、図１１に示した第１の動作フローに続いて実行する、ＣＡＳ命令の実行に係る第２の動作フローを示すフローチャートである。一次キャッシュコントローラは、ＣＡＳ命令に係る第２のリクエストをフェッチポートからパイプラインに投入する（Ｓ５０１）。一次キャッシュコントローラのパイプラインは、投入された第２のリクエストが指定するアドレスからデータを取得して、コアが有する演算器に送り（Ｓ５０２）、第２の動作フローを終了する。
【００１０】
図１３は、演算器での比較結果に応じて、図１２に示した第２の動作フローに続いて実行する、ＣＡＳ命令の実行に係る第３の動作フローを示すフローチャートである。一次キャッシュコントローラは、ＣＡＳ命令に係る第３のリクエスト（ストアリクエスト）をストアポートからパイプラインに投入する（Ｓ６０１）。一次キャッシュコントローラのパイプラインは、投入された第３のリクエストが指定するアドレスにデータを書き込む（Ｓ６０２）。そして、一次キャッシュコントローラのパイプラインは、ロックフラグをクリアして（Ｓ６０３）、第３の動作フローを終了してＣＡＳ命令を完了する。
【００１１】
従来のシングルスレッドのプロセッサでは、同時に実行されるＣＡＳ命令は一つであるが、マルチスレッドのプロセッサでは、原理的には各スレッドで一つ、つまりスレッドの数だけＣＡＳ命令を同時に実行できることとなる。しかし、ロックレジスタにロックフラグがセットされている間は、他のスレッドによるパイプライン処理はすべてアボートする。そのため、複数のスレッドでＣＡＳ命令の実行を要求している場合には、図１４に示すように、一つずつ処理されることとなる。
【００１２】
図１４は、従来のプロセッサにおける動作例を示すタイミングチャートである。図１４に示す例では、一次キャッシュコントローラのパイプラインは、プライオリティステージ（Ｐ）、ＴＡＧ／ＴＬＢアクセスステージ（Ｔ）、マッチステージ（Ｍ）、バッファアクセスステージ（Ｂ）、及びレザルトステージ（Ｒ）の５ステージを有する。
【００１３】
プライオリティステージでは、優先順位に従ってパイプライン処理に投入するリクエストを選択して投入する。ＴＡＧ／ＴＬＢアクセスステージでは、データに係るタグデータ等が保持されているＴＡＧメモリにアクセスするとともに、ＴＬＢ（Translation Lookaside Buffer）で仮想アドレスから物理アドレスへの変換を行い、データキャッシュメモリにアクセスする。
【００１４】
マッチステージでは、ＴＡＧメモリからの出力とＴＬＢで変換した物理アドレスとを比較して、キャッシュメモリの読み出しウェイ（ＷＡＹ）を決定する。バッファアクセスステージでは、マッチステージでの結果を使用してウェイを選択し、演算器にデータを渡す。レザルトステージでは、バッファアクセスステージのデータ正当性のチェック結果を報告する。
【００１５】
図１４に示したタイミングチャートでは、一次キャッシュコントローラのパイプラインは、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係るロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）を５サイクル目でセットする。一次キャッシュコントローラのパイプラインは、ロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がセットされているため、その後のスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）をアボートする。また、１０サイクル目から始まるスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）も同様にアボートする。なお、ロックフラグの確認は、バッファアクセスステージで行われる。
【００１６】
一次キャッシュコントローラのパイプラインは、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係る第２の動作フローを８サイクル目から実行し、１１サイクル目でフェッチデータを演算器に送る。一次キャッシュコントローラのパイプラインは、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係る第３の動作フローを１５サイクル目から実行して、データをキャッシュメモリに書き込み、１８サイクル目でロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）をクリアする。
【００１７】
一次キャッシュコントローラのパイプラインは、１８サイクル目でロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がクリアされていることから、１７サイクル目から始まるスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）に係るロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）を２１サイクル目でセットする。その後、一次キャッシュコントローラのパイプラインは、スレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）に係る第２の動作フローを２４サイクル目から実行し、第３の動作フローを３１サイクル目から実行し、３４サイクル目でロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）をクリアする。
【００１８】
ロックフラグがセットされている間は、他のスレッドによるパイプライン処理はすべてアボートするため、マルチスレッドのプロセッサにおいて、複数のスレッドでＣＡＳ命令の実行を要求している場合には、一つずつ処理される。このように、同時に一つしかＣＡＳ命令を実行しないと、マルチスレッド環境でＣＡＳ命令が頻発すると、処理性能が低下してしまう。
【００１９】
マルチスレッド方式のプロセッサにおいて、スレッド毎にアトミック命令を実行中であるか否かを表示するフラグ及びアトミック命令のアクセス先のアドレスを記憶し、あるスレッドからアクセス要求が発行される場合に、記憶されているフラグ及びアドレスを参照し、別のスレッドがアトミック命令を実行中で、そのアトミック命令とアクセス要求とのアクセス先が一致すると判断した場合にはアクセス要求を待機させるようにする技術が提案されている（例えば、特許文献１参照）。また、スレッドを処理するために実行中のストリーム毎に、メモリアドレスとそのメモリアドレスがロックされていることを示すロックビットとをレジスタに格納し、ロックビットがセットされている場合には、同じメモリ位置へのアトミック性のある処理をロックビットがクリアさせるまでストールさせる技術が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】国際公開第２００８／１５５８２７号
【特許文献２】特表２００４−５０３８６４号公報
【特許文献３】特開昭５４−１５９８４１号公報
【特許文献４】特開２００３−３０１６６号公報
【発明の概要】
【発明が解決しようとする課題】
【００２１】
複数のスレッドを同時に実行可能なマルチスレッドのプロセッサにおいて、単純に異なるスレッドのＣＡＳ命令を同時に実行可能にすると、以下に説明するようにデッドロックが発生することが考えられる。例えば、図１５に示すように、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）が１サイクル目から始まり、スレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）が４サイクル目から始まるとする。
【００２２】
このとき、一次キャッシュコントローラのパイプラインは、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係るロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）を５サイクル目でセットする。また、一次キャッシュコントローラのパイプラインは、スレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）に係るロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）を８サイクル目でセットする。ここで、ＣＡＳ命令のアトミック性を守るために、他のスレッドがロック中である（ロックフラグがセットされている）場合には、自スレッドでのストア処理の実行は禁止される。
【００２３】
図１５に示した例では、８サイクル目以降は、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）が、同時にセットされているので、お互いのストア処理の実行を禁止し合う。つまり、一次キャッシュコントローラは、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係る第３のリクエスト（ストアリクエスト）、及びスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）に係る第３のリクエスト（ストアリクエスト）をパイプラインに投入できない。その結果、一次キャッシュコントローラのパイプラインは、スレッド０及びスレッド１でのストア処理を実行することができず、ロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ、ｔｈ１−ＣＡＳ−ＬＯＣＫ）もクリアされない。つまり、デッドロックに陥ってしまう。
【００２４】
１つの側面では、本発明の目的は、マルチスレッドの演算処理装置において、デッドロックを発生させることなく、異なるスレッドのＣＡＳ命令を同時に実行可能にし、演算処理装置の処理性能を向上させることにある。
【課題を解決するための手段】
【００２５】
演算処理装置の一態様は、データを保持するキャッシュメモリと、命令に応じた処理を複数のスレッド毎に要求する命令制御部と、各スレッドに対応付けてアドレスがロックされている旨を示すロック情報とロック対象のアドレスとをスレッド毎に保持するアドレス保持部と、キャッシュメモリへのアクセスを含む複数の処理を不可分に実行するアトミック命令の実行が要求された場合、その命令のアクセス対象アドレスが、アドレス保持部にロック情報が保持されたスレッドのロック対象アドレスと異なるとき、アトミック命令に含まれる複数の処理を実行するとともに、アドレス保持部に複数のスレッドのいずれかのスレッドのロック情報が保持されている場合、アドレス保持部にロック情報が保持されていないスレッドのキャッシュメモリへのストア処理の実行を抑止するキャッシュ制御部とを有する。
【発明の効果】
【００２６】
発明の一態様においては、ＣＡＳ命令のアクセス対象アドレスが、ロック情報が保持された他のスレッドのロック対象アドレスと異なるとき、命令に含まれる複数の処理を実行するので、異なるスレッドのＣＡＳ命令を同時に実行可能になり、演算処理装置の処理性能を向上させることができる。また、ＣＡＳ命令を同時に実行しても、ＣＡＳ命令に係るストア処理は抑止されないのでデッドロックが発生することもない。
【図面の簡単な説明】
【００２７】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態における一次キャッシュコントローラの構成例を示す図である。
【図３】本実施形態における演算処理装置の動作例を示すフローチャートである。
【図４】本実施形態における演算処理装置の動作例を示すフローチャートである。
【図５】本実施形態における演算処理装置の動作例を示すフローチャートである。
【図６】本実施形態におけるストアリクエストの投入制御を示す図である。
【図７】図３に示す動作に係る一次キャッシュコントローラの構成例を示す図である。
【図８】図５に示す動作に係る一次キャッシュコントローラの構成例を示す図である。
【図９】本実施形態における演算処理装置の動作例を示すタイミングチャートである。
【図１０】本実施形態における演算処理装置の動作例を示すタイミングチャートである。
【図１１】ＣＡＳ命令の実行に係る従来の処理動作を示すフローチャートである。
【図１２】ＣＡＳ命令の実行に係る従来の処理動作を示すフローチャートである。
【図１３】ＣＡＳ命令の実行に係る従来の処理動作を示すフローチャートである。
【図１４】ＣＡＳ命令の実行に係る従来の動作例を示すタイミングチャートである。
【図１５】異なるスレッドのＣＡＳ命令を同時に実行可能にした場合の問題を説明するための図である。
【発明を実施するための形態】
【００２８】
以下、本発明の実施形態を図面に基づいて説明する。
以下に説明する本発明の一実施形態では、ロック状態にしたアドレスをロックレジスタに保持し、ＣＡＳ命令のアクセス対象アドレスが、他のスレッドのロックレジスタに保持されているロック対象アドレスと異なれば実行可能とし、ＣＡＳ命令の同時実行を可能にする。また、ＣＡＳ命令に係る第３のリクエスト（ストアリクエスト）の投入条件を設けることで、デッドロックの発生を回避する。
【００２９】
図１は、本実施形態における演算処理装置としてのプロセッサ１０の構成例を示す図である。本実施形態におけるプロセッサ１０は、複数のコア１１及び複数の二次キャッシュ部１７を有する。本実施形態においてコア１１は、マルチスレッド（複数のスレッド）で動作するものとし、例えばスレッド０とスレッド１の２つのスレッドを実行可能であるとする。
【００３０】
なお、図１には、４つのコア１１−０〜１１−３及び２つの二次キャッシュ部１７−０、１７−１を有する例を示しているが、演算処理装置としてのプロセッサ１０が有するコア１１及び二次キャッシュ部１７の数は任意である。また、図１には、２つのコア１１で１つの二次キャッシュ部１７を共有する例を示しているが、１つの二次キャッシュ部１７を共有するコア１１の数も任意である。例えば、プロセッサ１０が１つの二次キャッシュ部１７を有し、それをプロセッサ１０が有するすべてのコア１１で共有するようにしても良い。
【００３１】
コア１１の各々は、命令制御部１２、演算器１３、及び一次キャッシュ部１４を有する。命令制御部１２は、命令の実行を制御するものであり、命令に応じた処理を複数のスレッド毎に要求する。演算器１３は、命令制御部１２の制御に応じた演算を行う。演算器１３は、例えばＣＡＳ命令に係るデータの比較処理を行う。一次キャッシュ部１４は、命令制御部１２からリクエスト（要求）を受け取るキャッシュ制御部としての一次キャッシュコントローラ１５とデータを保持する一次キャッシュメモリ１６とを有し、命令制御部１２からのリクエストに対する処理を行う。例えば、一次キャッシュコントローラ１５は、命令制御部１２からデータ転送のリクエストを受けると、要求されたデータが一次キャッシュメモリ１６にあればそのデータを返し、なければ二次キャッシュ部１７にデータ転送のリクエストを発行する。
【００３２】
二次キャッシュ部１７は、コア１１の一次キャッシュコントローラ１５からリクエスト（要求）を受け取る二次キャッシュコントローラ１８とデータを保持する二次キャッシュメモリ１９とを有する。例えば、二次キャッシュコントローラ１８は、一次キャッシュコントローラ１５からデータ転送のリクエストを受けると、要求されたデータが二次キャッシュメモリ１９にあればそのデータを返し、なければ外部の主記憶部２０にデータ転送のリクエストを発行する。
【００３３】
図２は、本実施形態における一次キャッシュコントローラ１５の構成例を示す図である。一次キャッシュコントローラ１５は、パイプライン２１、フェッチポート２２、ストアポート２３、アドレス保持部としてのロックレジスタ２４（２４−０、２４−１）、２５（２５−０、２５−１）、及びアドレス比較器２６（２６−０、２６−１）を有する。
【００３４】
パイプライン２１は、フェッチポート２２及びストアポート２３からのリクエストを受け、リクエストに応じた処理を実行する。パイプライン２１は、プライオリティステージ（Ｐ）、ＴＡＧ／ＴＬＢアクセスステージ（Ｔ）、マッチステージ（Ｍ）、バッファアクセスステージ（Ｂ）、及びレザルトステージ（Ｒ）の５ステージを有する。なお、本実施形態においては、パイプライン２１は５ステージを有するものとしているが、これに限定されず、ステージ数が異なる、例えば４ステージのパイプラインであっても良い。
【００３５】
プライオリティステージでは、優先順位に従ってパイプライン処理に投入するリクエストを選択して投入する。ＴＡＧ／ＴＬＢアクセスステージでは、データに係るタグデータ等が保持されているＴＡＧメモリにアクセスするとともに、ＴＬＢで仮想アドレスから物理アドレスへの変換を行い、データキャッシュメモリにアクセスする。マッチステージでは、ＴＡＧメモリからの出力とＴＬＢで変換した物理アドレスとを比較して、キャッシュメモリの読み出しウェイ（ＷＡＹ）を決定する。バッファアクセスステージでは、マッチステージでの結果を使用してウェイを選択し、演算器にデータを渡す。レザルトステージでは、バッファアクセスステージのデータ正当性のチェック結果を報告する。
【００３６】
フェッチポート２２は、命令制御部１２から受けたリクエストを保持する複数のエントリを有する。命令制御部１２からのリクエストは、発行された順序でフェッチポート２２のエントリに循環的に割り当てられて保持され、フェッチポート２２に保持されたリクエストは、アウトオブオーダーで読み出されてパイプライン２１に投入される。
【００３７】
ストアポート２３は、命令制御部１２から受けたストアリクエストを保持する複数のエントリを有する。命令制御部１２からのストアリクエストは、発行された順序でストアポート２３のエントリに循環的に割り当てられて保持され、ストアポート２３に保持されたストアリクエストは、アウトオブオーダーで読み出されてパイプライン２１に投入される。
【００３８】
スレッド０のロックレジスタ（２４−０、２５−０）は、フィールド２４−０にスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）を保持し、フィールド２５−０にスレッド０のロックしているアドレス（ロックアドレス）（ｔｈ０−ＣＡＳ−ＡＤＲＳ）を保持する。スレッド１のロックレジスタ（２４−１、２５−１）は、フィールド２４−１にスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）を保持し、フィールド２５−１にスレッド１のロックしているアドレス（ロックアドレス）（ｔｈ１−ＣＡＳ−ＡＤＲＳ）を保持する。
【００３９】
アドレス比較器２６−０は、パイプライン２１で実行中のリクエストでアクセスするアドレスと、ロックレジスタ２５−０に保持されたスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）とを比較し比較結果を出力する。アドレス比較器２６−１は、パイプライン２１で実行中のリクエストでアクセスするアドレスと、ロックレジスタ２５−１に保持されたスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）とを比較し比較結果を出力する。
【００４０】
次に、本実施形態におけるプロセッサ１０の動作について説明する。以下では、複数の処理を不可分に実行するアトミック命令の一つであるＣＡＳ命令に係る動作について図３〜図５を参照して説明する。ＣＡＳ命令は、図３、図４、及び図５に示すフローチャートに従って、第１の動作フロー、第２の動作フロー、及び第３の動作フローの３回の動作フローで実行される。
【００４１】
図３は、本実施形態におけるプロセッサ１０でのＣＡＳ命令の実行に係る第１の動作フローを示すフローチャートである。コア１１の一次キャッシュ部１４が有する一次キャッシュコントローラ１５は、命令制御部１２から受け取ったＣＡＳ命令をフェッチポート２２及びストアポート２３に登録する（Ｓ１０１）。そして、一次キャッシュコントローラ１５は、ＣＡＳ命令に係る第１のリクエストをフェッチポート２２からパイプライン２１に投入する（Ｓ１０２）。
【００４２】
次に、一次キャッシュコントローラ１５のパイプライン２１は、投入された第１のリクエストが、フェッチポート２２内で一番古いリクエストであるか否かを判定する（Ｓ１０３）。判定の結果、投入された第１のリクエストがフェッチポート２２内で一番古いリクエストでない場合には、その第１のリクエストはアボートされ、ステップＳ１０２に戻る。
【００４３】
ステップＳ１０３での判定の結果、投入された第１のリクエストがフェッチポート２２内で一番古いリクエストである場合には、一次キャッシュコントローラ１５のパイプライン２１は、他のスレッドが同じアドレスでロックしているか確認する（Ｓ１０４）。すなわち、パイプライン２１は、投入されたＣＡＳ命令でアクセスするアドレスと、ロックフラグがセットされているロックレジスタに保持されているロックアドレスとが一致するか否かをアドレス比較器２６から出力される比較結果を基に判定する。
【００４４】
ステップＳ１０４での確認の結果、他のスレッドが同じアドレスでロックしている場合には、投入された第１のリクエストはアボートされ、ステップＳ１０２に戻る。一方、他のスレッドが同じアドレスでロックしていない場合には、一次キャッシュコントローラ１５のパイプライン２１は、対応するスレッドのロックレジスタ（２４、２５）にロックフラグをセットするとともにロックアドレスを記録して（Ｓ１０５）、第１の動作フローを終了する。
【００４５】
ロックフラグだけによる排他制御では、ＣＡＳ命令はアドレスが異なっても他のスレッドのＣＡＳ命令の完了を待って実行されていた。それに対して、本実施形態では、ロックフラグ及びロックアドレスを用いて排他制御を行うことで、あるスレッドのＣＡＳ命令を実行していても、異なるアドレスに対する他のスレッドのＣＡＳ命令を実行することができ、ＣＡＳ命令の同時実行が可能になる。
【００４６】
図４は、図３に示した第１の動作フローに続いて実行する、本実施形態におけるプロセッサ１０でのＣＡＳ命令の実行に係る第２の動作フローを示すフローチャートである。一次キャッシュコントローラ１５は、ＣＡＳ命令に係る第２のリクエストをフェッチポート２２からパイプラインに投入する（Ｓ２０１）。一次キャッシュコントローラ１５のパイプライン２１は、投入された第２のリクエストが指定するアドレスからデータを取得して、演算器１３に送り（Ｓ２０２）、第２の動作フローを終了する。
【００４７】
図５は、演算器での比較結果に応じて、図４に示した第２の動作フローに続いて実行する、本実施形態におけるプロセッサ１０でのＣＡＳ命令の実行に係る第３の動作フローを示すフローチャートである。
【００４８】
一次キャッシュコントローラ１５のパイプライン２１は、ロックレジスタ２４に保持されているロックフラグの状態が、ストアリクエストを投入可能な状態であるか否かを判定する（Ｓ３０１）。なお、この判定処理は、ロックレジスタ２４に保持されているロックフラグを用い、ロックレジスタ２５に保持されているロックアドレスを用いずに行う。
【００４９】
一次キャッシュコントローラ１５のパイプライン２１は、少なくとも１つのスレッドのロックフラグがセットされている場合に、ロックフラグがセットされているスレッドのストアリクエストが投入可能と判定し、ロックフラグがクリアされているスレッドのストアリクエストが投入不可と判定する。このようにしてロックフラグがクリアされているスレッドのストア処理の実行を抑止することでアトミック性を保持する。なお、一次キャッシュコントローラ１５のパイプライン２１は、すべてのスレッドのロックフラグがクリアされている場合には、各スレッドのストアリクエストが投入可能と判定する。
【００５０】
一次キャッシュコントローラ１５のパイプライン２１は、例えば図６に示す真理値表に従って、ストアリクエストが投入可能であるか判定する。すなわち、一次キャッシュコントローラ１５のパイプライン２１は、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がともにクリアされている（値が“０”である）場合には、スレッド０、１ともにストアリクエストが投入可能と判定する。このストアリクエストは、ＣＡＳ命令に係るストアリクエストではなく、他のストアリクエストである。
【００５１】
スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）の一方がセットされ（値が“１”であり）、他方がクリアされている（値が“０”である）場合には、ロックフラグがセットされているスレッドのみストアリクエストが投入可能と判定する。この状態で投入されるストアリクエストは、ＣＡＳ命令に係るストアリクエストである。このようにしてロックフラグがクリアされているスレッドのストア処理を抑止することでアトミック性を保持することができる。
【００５２】
スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がともにセットされている（値が“１”である）場合には、スレッド０、１ともにストアリクエストが投入可能と判定する。前述したようにスレッド０、１のＣＡＳ命令が同時実行されるのはアクセス対象のアドレスが異なるときであり、スレッド０、１ともにＣＡＳ命令に係るストアリクエストを投入してもアトミック性が保証されるので、ストアリクエストを投入することができ、デッドロックの発生を回避できる。
【００５３】
ステップＳ３０１での判定の結果、ストアリクエストが投入可能と判定すると、一次キャッシュコントローラ１５のパイプライン２１は、ＣＡＳ命令に係る第３のリクエスト（ストアリクエスト）をストアポート２２からパイプライン２１に投入する（Ｓ３０２）。一次キャッシュコントローラ１５のパイプライン２１は、投入された第３のリクエストが指定するアドレスにデータを書き込む（Ｓ３０３）。そして、一次キャッシュコントローラ１５のパイプライン２１は、対応するスレッドのロックレジスタ（２４、２５）のロックフラグ及びロックアドレスをクリアして（Ｓ３０４）、第３の動作フローを終了してＣＡＳ命令を完了する。
【００５４】
このように本実施形態では、ストアリクエストの投入条件を設け、ロックレジスタ２４に保持されたロックフラグに応じてストアリクエストの投入を制御する。これにより、ＣＡＳ命令を同時に実行しても、アトミック性を保証してのストアリクエストの投入が可能になり、デッドロックが発生することがない。
【００５５】
図７は、図３に示した本実施形態における第１の動作フローに係るパイプライン構成の例を示す図である。この図７において、図２に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。
【００５６】
アドレス比較器２６−０は、パイプライン２１で実行しているリクエストのマッチステージ（Ｍ）のアドレス（ＡＤＲＳ）と、ロックレジスタ２５−０に保持されているスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）とを比較する。アドレス比較器２６−０は、マッチステージのアドレス（ＡＤＲＳ）とスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）とが一致する場合には、比較結果として値“１”（真）を出力し、一致しない場合には、比較結果として値“０”（偽）を出力する。
【００５７】
アドレス比較器２６−１は、パイプライン２１で実行しているリクエストのマッチステージ（Ｍ）のアドレス（ＡＤＲＳ）と、ロックレジスタ２５−１に保持されているスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）とを比較する。アドレス比較器２６−１は、マッチステージのアドレス（ＡＤＲＳ）とスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）とが一致する場合には、比較結果として値“１”（真）を出力し、一致しない場合には、比較結果として値“０”（偽）を出力する。
【００５８】
パイプライン２１は、出力回路としての論理積演算（ＡＮＤ）回路３１−０、３１−１及びセレクタ３２を有する。ＡＮＤ回路３１−０は、アドレス比較器２６−０の出力とロックレジスタ２４−０に保持されているスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）とが入力され、その演算結果を出力する。ＡＮＤ回路３１−１は、アドレス比較器２６−１の出力とロックレジスタ２４−１に保持されているスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）とが入力され、その演算結果を出力する。
【００５９】
つまり、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がセットされており、かつマッチステージのアドレス（ＡＤＲＳ）とスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）とが一致している場合には、ＡＮＤ回路３１−０の出力が値“１”（真）となり、それ以外の場合には、ＡＮＤ回路３１−０の出力が値“０”（偽）となる。また、スレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がセットされており、かつマッチステージのアドレス（ＡＤＲＳ）とスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）とが一致している場合には、ＡＮＤ回路３１−１の出力が値“１”（真）となり、それ以外の場合には、ＡＮＤ回路３１−１の出力が値“０”（偽）となる。
【００６０】
セレクタ３２は、パイプライン２１で実行しているリクエストを要求したスレッドを示す、マッチステージ（Ｍ）のスレッド情報（ｔｈ−ＩＤ）に応じて、ＡＮＤ回路３１−０の出力又はＡＮＤ回路３１−１の出力を信号ＡＢＲとして出力する。すなわち、スレッド情報（ｔｈ−ＩＤ）がスレッド０を示す場合には、セレクタ３２は、スレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）及びロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）に応じた出力であるＡＮＤ回路３１−１の出力を信号ＡＢＲとして出力する。また、スレッド情報（ｔｈ−ＩＤ）がスレッド１を示す場合には、セレクタ３２は、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）に応じた出力であるＡＮＤ回路３１−０の出力を信号ＡＢＲとして出力する。
【００６１】
したがって、パイプライン２１でスレッド０のリクエストを実行している場合には、スレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がセットされ、かつマッチステージのアドレス（ＡＤＲＳ）とスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）とが一致すると、信号ＡＢＲがアボートを示す値“１”となる。また、パイプライン２１でスレッド１のリクエストを実行している場合には、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がセットされ、かつマッチステージのアドレス（ＡＤＲＳ）とスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）とが一致すると、信号ＡＢＲがアボートを示す値“１”となる。
【００６２】
信号ＡＢＲは、フェッチポート２２に通知されるとともに、パイプラインレジスタにマッチ（ＭＣＨ）として記録する。パイプライン２１は、実行しているリクエストのバッファアクセスステージ（Ｂ）でＡＮＤ回路３３によりマッチ（ＭＣＨ）の反転とタグヒット（ＴＡＧＨＩＴ）との論理積演算を行い、演算結果を信号ＳＴＶとする。ここで、信号ＳＴＶは、バッファアクセスステージのデータが有効あることを命令制御部１２に通知する信号である。したがって、信号ＡＢＲがアボートを示す値“１”である場合には、実行しているリクエストのバッファアクセスステージ（Ｂ）で信号ＳＴＶがオフ（値“０”）となる。
【００６３】
図８は、図５に示した本実施形態における第３の動作フローに係るパイプライン構成の例を示す図である。この図８において、図２に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。パイプライン２１は、判定回路としての論理和演算（ＯＲ）回路４２−０、４２−１及びＡＮＤ回路４３と、抑止回路としてのＡＮＤ回路４４−０、４４−１とを有する。
【００６４】
ＯＲ回路４２−０は、ロックレジスタ２４−０に保持されているスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）とＡＮＤ回路４３の出力とが入力され、その演算結果を出力する。ＯＲ回路４２−１は、ロックレジスタ２４−１に保持されているスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）とＡＮＤ回路４３の出力とが入力され、その演算結果を出力する。ＡＮＤ回路４３は、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がともに反転されて入力され、その演算結果を出力する。
【００６５】
ＡＮＤ回路４４−０は、ストアポート２３が有するスレッド０のストアリクエスト要求部４１−０が発行するストアリクエストと、ＯＲ回路４２−０の出力が入力される。ＡＮＤ回路４４−１は、ストアポート２３が有するスレッド１のストアリクエスト要求部４１−１が発行するストアリクエストと、ＯＲ回路４２−１の出力が入力される。
【００６６】
図８に示す構成によれば、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がともにクリアされている（値が“０”である）場合には、ＯＲ回路４２−０、４２−１の出力がともに値“１”となる。したがって、スレッド０のストアリクエスト要求部４１−０が発行するストアリクエストは、ＡＮＤ回路４４−０を介してパイプラインの処理部４５に投入され、スレッド１のストアリクエスト要求部４１−１が発行するストアリクエストは、ＡＮＤ回路４４−１を介してパイプラインの処理部４５に投入される。
【００６７】
また、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がセットされ（値“１”であり）、スレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がクリアされている（値が“０”である）場合には、ＯＲ回路４２−０の出力が値“１”となり、ＯＲ回路４２−１の出力が値“０”となる。したがって、スレッド０のストアリクエスト要求部４１−０が発行するストアリクエストは、ＡＮＤ回路４４−０を介してパイプラインの処理部４５に投入され、スレッド１のストアリクエスト要求部４１−１が発行するストアリクエストは、パイプラインの処理部４５への投入が抑止される。
【００６８】
また、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がクリアされ（値“０”であり）、スレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がセットされている（値が“１”である）場合には、ＯＲ回路４２−０の出力が値“０”となり、ＯＲ回路４２−１の出力が値“１”となる。したがって、スレッド０のストアリクエスト要求部４１−０が発行するストアリクエストは、パイプラインの処理部４５への投入が抑止され、スレッド１のストアリクエスト要求部４１−１が発行するストアリクエストは、ＡＮＤ回路４４−１を介してパイプラインの処理部４５に投入される。
【００６９】
また、スレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がともにセットされている（値が“１”である）場合には、ＯＲ回路４２−０、４２−１の出力がともに値“１”となる。したがって、スレッド０のストアリクエスト要求部４１−０が発行するストアリクエストは、ＡＮＤ回路４４−０を介してパイプラインの処理部４５に投入され、スレッド１のストアリクエスト要求部４１−１が発行するストアリクエストは、ＡＮＤ回路４４−１を介してパイプラインの処理部４５に投入される。
【００７０】
図９は、本実施形態におけるプロセッサ１０の動作例を示すタイミングチャートである。図９には、スレッド０のＣＡＳ命令でアクセスするアドレスとスレッド１のＣＡＳ命令でアクセスするアドレスとが同じである場合を示している。
【００７１】
スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）が先に実行され、一次キャッシュコントローラ１５のパイプライン２１は、５サイクル目でスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）をロックレジスタ２４−０にセットする。また、このとき、一次キャッシュコントローラ１５のパイプライン２１は、スレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）として値Ａをロックレジスタ２５−０にセットする。
【００７２】
３サイクル目からスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）が流れ始める。しかし、一次キャッシュコントローラ１５のパイプライン２１は、６サイクル目に、アクセス対象のアドレスが、ロックフラグがセットされているスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）と一致した（ＡＤＲＳ−ＭＣＨが“１”）ことからアボートする。また、１０サイクル目から始まるスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）も同様にアボートする。
【００７３】
一次キャッシュコントローラ１５のパイプライン２１は、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係る第１の動作フロー、第２の動作フロー、及び第３の動作フローを順に実行する。そして、一次キャッシュコントローラ１５のパイプライン２１は、１８サイクル目でスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）をクリアする。
【００７４】
１７サイクル目からスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）が流れる。一次キャッシュコントローラ１５のパイプライン２１は、１８サイクル目でスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）がクリアされていることから、２１サイクル目でスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）をロックレジスタ２４−１にセットする。また、このとき、一次キャッシュコントローラ１５のパイプライン２１は、スレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）として値Ａをロックレジスタ２５−１にセットする。
【００７５】
その後、一次キャッシュコントローラ１５のパイプライン２１は、スレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）に係る第２の動作フロー及び第３の動作フローを順に実行し、３４サイクル目でスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）をクリアする。
【００７６】
図１０は、本実施形態におけるプロセッサ１０の動作例を示すタイミングチャートである。図１０には、スレッド０のＣＡＳ命令でアクセスするアドレスとスレッド１のＣＡＳ命令でアクセスするアドレスとが異なる場合を示している。
【００７７】
先に実行されるスレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）については、図９に示した例と同様である。４サイクル目からスレッド１のＣＡＳ命令（ｔｈ１−ＣＡＳ）が流れ始める。スレッド１のＣＡＳ命令でのアクセス対象のアドレスは値Ｂであり、スレッド０のＣＡＳ命令でのアクセス対象のアドレスの値Ａとは異なるので、７サイクル目のアドレス比較でアドレスが一致せず（ＡＤＲＳ−ＭＣＨが“０”）、アボートしない。
【００７８】
その結果、一次キャッシュコントローラ１５のパイプライン２１は、８サイクル目でスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）をロックレジスタ２４−１にセットする。また、このとき、一次キャッシュコントローラ１５のパイプライン２１は、スレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）として値Ｂをロックレジスタ２５−１にセットする。
【００７９】
そして、一次キャッシュコントローラ１５のパイプライン２１は、スレッド０、１のそれぞれのＣＡＳ命令に係る第１の動作フロー、第２の動作フロー、及び第３の動作フローを順に実行する。ここで、スレッド０のＣＡＳ命令（ｔｈ０−ＣＡＳ）に係る第３のリクエスト（ストアリクエスト）は、スレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）がセットされているが、本実施形態では投入可能であり、一次キャッシュコントローラ１５のパイプライン２１は、第３の動作フローの処理を実行する。
【００８０】
そして、一次キャッシュコントローラ１５のパイプライン２１は、１８サイクル目でスレッド０のロックフラグ（ｔｈ０−ＣＡＳ−ＬＯＣＫ）及びスレッド０のロックアドレス（ｔｈ０−ＣＡＳ−ＡＤＲＳ）をクリアする。また、スレッド１についても同様に、一次キャッシュコントローラ１５のパイプライン２１は、２１サイクル目でスレッド１のロックフラグ（ｔｈ１−ＣＡＳ−ＬＯＣＫ）及びスレッド１のロックアドレス（ｔｈ１−ＣＡＳ−ＡＤＲＳ）をクリアする。
【００８１】
本実施形態によれば、各スレッドのロックレジスタにロックしているアドレスを保持し、ＣＡＳ命令でアクセスするアドレスが、他のスレッドのロックレジスタに保持されているロックアドレスと異なる場合にはＣＡＳ命令を実行可能にする。これにより、異なるアドレスに対するＣＡＳ命令の同時実行が可能になり、ＣＡＳ命令の実行が全体として高速化され、プロセッサ１０の処理性能を向上させることができる。また、ＣＡＳ命令を同時に実行しても、異なるアドレスに対するものであるので、アトミック性を保証してのストアリクエストの投入が可能になり、デッドロックの発生を回避することができる。
【００８２】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８３】
１０  プロセッサ
１１  コア
１２  命令制御部
１３  演算器
１４  一次キャッシュ部
１５  一次キャッシュコントローラ
１６  一次キャッシュメモリ
１７  二次キャッシュ部
１８  二次キャッシュコントローラ
１９  二次キャッシュメモリ
２０  主記憶部
２１  パイプライン
２２  フェッチポート
２３  ストアポート
２４  ロックレジスタ（ロックフラグ）
２５  ロックレジスタ（ロックアドレス）
２６  比較器
【図１】
2015038687.tif 000003
【図２】
2015038687.tif 000004
【図３】
2015038687.tif 000005
【図４】
2015038687.tif 000006
【図５】
2015038687.tif 000007
【図６】
2015038687.tif 000008
【図７】
2015038687.tif 000009
【図８】
2015038687.tif 000010
【図９】
2015038687.tif 000011
【図１０】
2015038687.tif 000012
【図１１】
2015038687.tif 000013
【図１２】
2015038687.tif 000014
【図１３】
2015038687.tif 000015
【図１４】
2015038687.tif 000016
【図１５】
2015038687.tif 000017