(57)【要約】【課題】複数の演算処理部を有する演算処理装置において、ロックレジスタの更新を制御して、処理のストールの発生を抑止する。【解決手段】ロックフラグ、ロック対象のアドレス、及び命令の優先度を示すコードを保持するロックレジスタの更新を制御する複数の演算処理部のいずれかの一次キャッシュ制御部が、命令制御部から要求されたアドレスのロックを伴う命令を実行するために、そのアドレスのデータを一次キャッシュメモリに格納するとき、ロックフラグにロックフラグがセットされており、かつロックレジスタに保持されたコードが示す優先度が、実行する命令の優先度より高い場合、ロックレジスタの更新を抑止して、ロックレジスタに継続して情報を保持させる。【選択図】図２
2015102973.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算処理部を有する演算処理装置において、
前記複数の演算処理部の各々は、
命令に応じた処理を要求する命令制御部と、
アドレスがロックされている旨を示すロック情報、ロック対象のアドレス、及び命令の優先度を示す優先度情報を保持する情報保持部と、
前記命令制御部から要求されたアドレスのロックを伴う命令を実行するために当該アドレスのデータをキャッシュメモリに格納するとき、前記情報保持部にロック情報が保持されており、かつ前記情報保持部に保持されている優先度情報が示す優先度が、実行する当該命令の優先度より高い場合、前記情報保持部の更新を抑止するキャッシュ制御部とを有することを特徴とする演算処理装置。
【請求項２】
前記キャッシュ制御部は、
前記情報保持部に保持されている優先度情報と、前記実行する命令の優先度情報とを比較する比較部を有し、
前記比較器の比較結果に基づいて前記情報保持部の更新を制御することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記情報保持部は、保持する情報を前記アドレスのロックを伴う命令によって更新するときに、当該命令が最も古い命令であることを示すＴＯＱ情報をさらに保持し、
前記キャッシュ制御部は、前記命令制御部から要求されたアドレスのロックを伴う命令を実行するために当該アドレスのデータをキャッシュメモリに格納するとき、さらに、前記情報保持部にロック情報及びＴＯＱ情報が保持されており、かつ前記実行する命令が最も古い命令でない場合、前記情報保持部の更新を抑止することを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
複数の演算処理部を有し、アドレスがロックされている旨を示すロック情報、ロック対象のアドレス、及び命令の優先度を示す優先度情報を保持する情報保持部を前記演算処理部が有する演算処理装置の制御方法において、
前記複数の演算処理部のいずれかが有する命令制御部が、命令に応じた処理を要求し、
前記複数の演算処理部のいずれかが有するキャッシュ制御部が、前記命令制御部から要求されたアドレスのロックを伴う命令を実行するために当該アドレスのデータをキャッシュメモリに格納するとき、前記情報保持部にロック情報が保持されており、かつ前記情報保持部に保持されている優先度情報が示す優先度が、実行する当該命令の優先度より高い場合、前記情報保持部の更新を抑止することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
複数の処理を不可分に実行するアトミック命令によるメモリアクセスを行うことが可能な演算処理装置がある。アトミック命令とは、当該複数の処理を所定の順序で実行した場合と同じ結果を得られることが保証される命令をいう。アトミック命令の実行においては、ロックレジスタにロック対象のアドレスを登録しロックすることで、対象となるデータを保護するのが一般的である。
【０００３】
図１０は、各々が演算処理部としてそれぞれ機能する複数のプロセッサコア（以下、「コア」という）を有するプロセッサ（マルチコアプロセッサ）の各コアが有する一次キャッシュ部の構成例を示す図である。図１０には、一次キャッシュ部が有する一次キャッシュ制御部のパイプラインと、それに関わる各部を示している。一次キャッシュ制御部１００のパイプライン１０１は、命令の実行を制御する命令制御部（ＩＵ）１２２等からのリクエスト（要求）を受け、リクエストに応じた処理を実行する。パイプライン１０１は、必要に応じてフェッチポート（ＦＰ）１０２、タグ部（ＴＡＧ）１０３、ムーブインバッファ（ＭＩＢ）１０４、ムーブアウトバッファ（ＭＯＢ）１０５、ストアバッファ（ＳＴＢ）１０６とデータ等をやり取りする。
【０００４】
フェッチポート１０２は、リクエストを保持する複数のエントリを有し、命令制御部１２２から発行されたリクエストを必要に応じて保持してパイプライン１０１に投入する。タグ部１０３は、リクエストにより要求されたデータが一次キャッシュメモリにあるか否かを判断するためのタグ検索等を行う。ストアバッファ１０６は、ストアリクエストを保持する複数のエントリを有し、命令制御部１２２から発行されたストアリクエストを必要に応じて保持してパイプライン１０１に投入する。
【０００５】
ムーブインバッファ１０４は、キャッシュミスしたデータを一次キャッシュメモリに転送させるムーブインに係る処理データを、複数のコアで共用する二次キャッシュ部の二次キャッシュ制御部（ＳＸ）１２１とやり取りする。ムーブアウトバッファ１０５は、一次キャッシュメモリからデータを排出するムーブアウトに係る処理データを二次キャッシュ制御部１２１とやり取りする。
【０００６】
ロックレジスタ１０７Ｃは、パイプライン１０１でロックするアドレスを保持するレジスタであり、各コアに１つずつ割り当てられている。ロックレジスタ１０７Ｃは、ロックしているか否かを示すロックフラグ（ＬＯＣＫ）を保持するフィールド１０８と、ロック対象のアドレス（ＡＤＲＳ）を保持するフィールド１０９と、カウンタ（ＣＮＴ）１１０で構成される。
【０００７】
ロックフラグがセットされた（ロック状態）ロックレジスタに登録されているロック対象のアドレスに対しては、そのロックレジスタに対応するコア以外のコアによる操作ができなくなる。ロックレジスタはムーブイン毎に更新され、ある時点において各コアがロックできるアドレスは１つである。ロックした状態が永久に継続することがないように、カウンタ１１０が時間を計測して、一定の時間が経過するとロックフラグがクリアされロックを解除する。
【０００８】
例えば、カウンタ１１０は、初期値が０であり、クロック信号が入力されると値が１ずつインクリメントする。つまり、カウンタ１１０の値は、ロック対象のアドレスをロックしてからの経過時間に比例する。カウンタ１１０の値が所定の閾値に到達したら、ロックレジスタ１０７Ｃのロックフラグがクリアされ、登録されているアドレスのロックが解除される。
【０００９】
図１１は、ロックレジスタの更新を含む動作例を示すフローチャートである。命令制御部１２２等からロックを伴う命令（この例では、データのフェッチ処理、比較処理、及びストア処理を１つの命令で実行するＣＡＳ（Compare And Swap）命令とする。）が発行されると（Ｓ２０１）、一次キャッシュ制御部１００のパイプライン１０１が、その発行された命令に係るリクエストを受けて始動する（Ｓ２０２）。そして、一次キャッシュ制御部１００のパイプライン１０１は、命令の実行に必要なデータが一次キャッシュメモリにあるか否かを確認する（Ｓ２０３）。
【００１０】
確認の結果、データが一次キャッシュメモリになければ（Ｓ２０３のＮＯ）、一次キャッシュ制御部１００のパイプライン１０１は、二次キャッシュ制御部１２１にデータを要求する（Ｓ２０４）。一次キャッシュ制御部１００のパイプライン１０１は、二次キャッシュ制御部１２１よりデータを取得すると（Ｓ２０５）、取得したデータを一次キャッシュメモリに格納する（Ｓ２０６）。
【００１１】
一次キャッシュメモリにデータを格納した後、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃの更新を行い、ロックフラグをセットするとともにロック対象のアドレスを格納してロックする（Ｓ２０７）。また、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃのカウンタを初期化する（Ｓ２０８）。命令の実行に必要なデータが一次キャッシュメモリにあることが確認できたら（Ｓ２０３のＹＥＳ）、一次キャッシュ制御部１００のパイプライン１０１は、ＣＡＳ命令の処理を実行する。
【００１２】
図１２は、ロックレジスタを用いたロック制御の例を示すフローチャートである。二次キャッシュ制御部１２１からデータを要求するＭＯＳリクエストが発行されると（Ｓ３０１）、一次キャッシュ制御部１００のパイプライン１０１が、発行されたＭＯＳリクエストを受けて始動する（Ｓ３０２）。そして、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃのカウンタ１１０の値を確認する（Ｓ３０３）。
【００１３】
確認の結果、カウンタ１１０の値が所定の閾値に到達していない場合（Ｓ３０３のＮＯ）、一次キャッシュ制御部１００のパイプライン１０１は、要求されたデータのアドレスとロックレジスタ１０７Ｃに登録されているアドレスとを比較する（Ｓ３０４）。アドレスが一致する場合（Ｓ３０４のＹＥＳ）、要求されたデータのアドレスはロックされているので二次キャッシュ制御部１２１からのＭＯＳリクエストはアボートされる（Ｓ３０５）。
【００１４】
また、カウンタ１１０の値が所定の閾値に到達している場合（Ｓ３０３のＹＥＳ）、もしくは要求されたデータのアドレスとロックレジスタ１０７Ｃに登録されているアドレスとが一致しなかった場合（Ｓ３０４のＮＯ）、要求されたデータのアドレスは開放されているのでＭＯＳリクエストは継続される。ＭＯＳリクエストが継続されると、一次キャッシュ制御部１００のパイプライン１０１は、要求されたデータを一次キャッシュメモリから削除して（Ｓ３０６）、二次キャッシュ制御部１２１に対してデータの書き戻しを行う（Ｓ３０７）。
【００１５】
図１３は、複数のコアを有するプロセッサにおいて、連続して行う複数の処理を内蔵する命令を複数のコアが実行する場合のロックレジスタを用いたロック制御の例を示すシーケンス図である。図１３には、アクセス対象のアドレスがＡであるＣＡＳ命令を、コア０及びコア１がそれぞれ実行する例を示している。
【００１６】
コア０でアドレスＡのＣＡＳ命令を実行するために、コア０の一次キャッシュ制御部１００のパイプライン１０１が、キャッシュミスしたアドレスＡのデータをムーブインによって一次キャッシュメモリに格納する。このとき、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃにロックフラグをセットするとともにロック対象のアドレスとしてアドレスＡを登録する（１３０１）。これにより、アドレスＡがロックされる。
【００１７】
コア０によりアドレスＡがロックされたことで、コア０以外のコアによるアドレスＡへのアクセスは遮断される。したがって、コア１でアドレスＡのＣＡＳ命令を実行するためのコア１によるキャッシュミスしたアドレスＡのデータのムーブインはアボートされる（１３１１）。コア０の一次キャッシュメモリにアドレスＡのデータを格納した後に、コア０の一次キャッシュ制御部１００のパイプライン１０１が、ＣＡＳ命令の処理を実行する（１３０２）。そして、ＣＡＳ命令の処理が完了した後、コア０の一次キャッシュ制御部１００のパイプライン１０１が、ロックレジスタ１０７Ｃを更新してロックフラグをクリアする。つまり、アドレスＡのロックが解除され、すべてのコアによるアドレスＡへのアクセスが許可される。
【００１８】
そして、コア１によるアドレスＡについてのムーブインをリトライすると、アドレスＡがロックされていないので、アドレスＡのデータがコア０の一次キャッシュメモリからコア１の一次キャッシュメモリにムーブインされる。また、このとき、コア１の一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃにロックフラグをセットするとともにロック対象のアドレスとしてアドレスＡを登録する（１３１２）。これにより、アドレスＡがロックされる。コア１の一次キャッシュメモリにアドレスＡのデータを格納した後に、コア１の一次キャッシュ制御部１００のパイプライン１０１が、ＣＡＳ命令の処理を実行して、処理が完了すると、ロックレジスタ１０７Ｃの更新を行ってロックフラグをクリアする（１３１３）。
【００１９】
図１４は、タイムアウトによるロック解除の例を示すシーケンス図である。図１４には、コア０及びコア１が、アクセス対象のアドレスがＡであるＣＡＳ命令をそれぞれ実行する例を示している。処理１４０１、１４１１、１４０２は、図１３に示した処理１３０１、１３１１、１３０２とそれぞれ同様である。処理１４０１によりコア０のロックレジスタ１０７Ｃにロック対象のアドレスとしてアドレスＡを登録してから、一定の時間が経過するとカウンタ１１０の値が所定の閾値に到達し（タイムアウトが発生し）、アドレスＡのロックが解除される（１４０３）。その後の処理１４１２、１４１３は、図１３に示した処理１３１２、１３１３とそれぞれ同様である。
【００２０】
複数の処理ユニットによる共用メモリ部に対するアクセスを制御するメモリ制御部において、アドレスをロックしていない状態で、同時に複数の処理ユニットからメモリ制御部のロックレジスタへの書き込みが要求された場合、どの書き込みを優先するかを制御する技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】特開平４−６５７３６号公報
【発明の概要】
【発明が解決しようとする課題】
【００２２】
前述した技術ではロックレジスタの更新に制限がなく、例えば図１５に示すようにコア０及びコア１において処理のストールが発生すると、プロセッサの処理性能が低下してしまう。図１５は、複数のコアを有するプロセッサにおけるロックレジスタを用いたロック制御の例を示す図であり、交互に処理のストールが発生する場合を示している。
【００２３】
ロックを伴う命令であるＣＡＳ命令を実行するために、コア０の一次キャッシュ制御部１００のパイプライン１０１が、キャッシュミスしたアドレスＡのデータをムーブインによって一次キャッシュメモリに格納する。このとき、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃを更新してアドレスＡをロック対象のアドレスとして登録しロックする（１５０１）。コア０によりアドレスＡがロックされたことで、コア１でＣＡＳ命令を実行するためのコア１によるキャッシュミスしたアドレスＡのデータのムーブインはアボートされる（１５１１）。
【００２４】
コア０によりアドレスＡをロックした後、ロックを伴う後続の命令であるページテーブルのフェッチ命令を実行するために、コア０の一次キャッシュ制御部１００のパイプライン１０１が、キャッシュミスしたアドレスＢのデータをムーブインによって一次キャッシュメモリに格納する。このとき、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃを更新してアドレスＢをロック対象のアドレスとして登録しロックする（１５０２）。ここで、各コアに割り当てられているロックレジスタは１つであるので、アドレスＢをロックすることで、アドレスＡのロックが解除される。
【００２５】
コア０によるアドレスＡのロックが解除された後に、コア１によるアドレスＡについてのムーブインをリトライすると、アドレスＡがロックされていないので、アドレスＡのデータがコア０の一次キャッシュメモリからコア１の一次キャッシュメモリにムーブインされる。また、このとき、コア１の一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃを更新してアドレスＡをロック対象のアドレスとして登録しロックする（１５１２）。このようにして、コア０でのＣＡＳ命令の完了前にもかかわらず、コア０の一次キャッシュメモリからアドレスＡのデータが削除されると、コア０でのＣＡＳ命令は完了できずにストールする（１５０３）。
【００２６】
また、コア１によりアドレスＡをロックした後、ロックを伴う後続の命令であるページテーブルのフェッチ命令を実行するために、コア１の一次キャッシュ制御部１００のパイプライン１０１が、キャッシュミスしたアドレスＣのデータをムーブインによって一次キャッシュメモリに格納する。このとき、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃを更新してアドレスＣをロック対象のアドレスとして登録しロックする（１５１３）。アドレスＣをロックすることで、アドレスＡのロックが解除される。
【００２７】
コア１によるアドレスＡのロックが解除された後に、コア０の一次キャッシュ制御部１００のパイプライン１０１が、ＣＡＳ命令を実行するためにアドレスＡのデータをムーブインしようとすると、アドレスＡがロックされていないので、アドレスＡのデータがコア１の一次キャッシュメモリからコア０の一次キャッシュメモリにムーブインされる（１５０４）。このようにして、コア１でのＣＡＳ命令の完了前にもかかわらず、コア１の一次キャッシュメモリからアドレスＡのデータが削除されると、コア１でのＣＡＳ命令は完了できずにストールする（１５１４）。
【００２８】
その後、処理１５０２以降の処理が繰り返されると、コア０及びコア１のそれぞれが、ＣＡＳ命令の完了前にアドレスＡのデータを取り合ってしまい、交互に処理のストールが発生し、プロセッサの処理性能の低下につながる。
【００２９】
１つの側面では、本発明の目的は、複数のコアを有する演算処理装置において、ロックレジスタの更新を制御して、処理のストールの発生を抑制し演算処理装置の処理性能を向上させることにある。
【課題を解決するための手段】
【００３０】
演算処理装置の一態様は、演算処理装置が有する複数の演算処理部の各々が、命令に応じた処理を要求する命令制御部と、アドレスがロックされている旨を示すロック情報、ロック対象のアドレス、及び命令の優先度を示す優先度情報を保持する情報保持部と、情報保持部の更新を制御するキャッシュ制御部とを有する。キャッシュ制御部は、命令制御部から要求されたアドレスのロックを伴う命令を実行するために当該アドレスのデータをキャッシュメモリに格納するとき、情報保持部にロック情報が保持されており、かつ情報保持部に保持されている優先度情報が示す優先度が、実行する命令の優先度より高い場合、情報保持部の更新を抑止する。
【発明の効果】
【００３１】
発明の一態様においては、情報保持部に保持されている優先度情報が示す優先度が、実行する命令の優先度より高い場合、情報保持部の更新を抑止して、情報保持部に保持されているアドレスを継続してロックするので、アドレスのロックを伴う命令が完了する前に、キャッシュメモリから必要なデータが削除されることを抑制することができ、処理のストールの発生を抑え、演算処理装置の処理性能を向上させることができる。
【図面の簡単な説明】
【００３２】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態における一次キャッシュ部の構成例を示す図である。
【図３】本実施形態における一次キャッシュ部のパイプラインの構成例を示す図である。
【図４】本実施形態におけるロックレジスタの登録処理を示すフローチャートである。
【図５】本実施形態におけるロックレジスタの更新に係る真理値表を示す図である。
【図６】本実施形態における演算処理装置の動作例を示すシーケンス図である。
【図７】本実施形態におけるロックレジスタの他の構成例を示す図である。
【図８】図７に示したロックレジスタの更新に係る真理値表を示す図である。
【図９】本実施形態におけるロックレジスタの更新の他の例を示す図である。
【図１０】一次キャッシュ部の構成例を示す図である。
【図１１】ロックレジスタの更新を含む動作例を示すフローチャートである。
【図１２】ロックレジスタを用いたロック制御の例を示すフローチャートである。
【図１３】ロックレジスタを用いたロック制御の例を示すシーケンス図である。
【図１４】タイムアウトによるロック解除の例を示すシーケンス図である。
【図１５】交互に処理のストールが発生する動作の例を示すシーケンス図である。
【発明を実施するための形態】
【００３３】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態における演算処理装置としてのプロセッサ１０の構成例を示す図である。本実施形態におけるプロセッサ１０は、それぞれが演算処理部として機能する複数のコア１１及び二次キャッシュ部１５を有する。
【００３４】
図１には、４つのコア１１−０〜１１−３を有する例を示しているが、演算処理装置としてのプロセッサ１０が有するコア１１の数は任意である。また、図１には、１つの二次キャッシュ部１５を有する例を示しているが、プロセッサ１０が有する二次キャッシュ部１５の数は任意である。例えば、プロセッサ１０が複数の二次キャッシュ部１５を有し、コア１１を複数の組に分けて、各組に１つの二次キャッシュ部１５を対応させるようにして複数のコア１１で共有するようにしても良い。
【００３５】
コア１１の各々は、命令制御部１２、演算器１３、及び一次キャッシュ部１４を有する。命令制御部１２は、命令の実行を制御するものであり、命令に応じた処理を要求する。演算器１３は、命令制御部１２の制御に応じて演算を行う。
【００３６】
一次キャッシュ部１４は、命令制御部１２からのリクエスト（要求）を受け取る一次キャッシュ制御部とデータを保持する一次キャッシュメモリとを有し、命令制御部１２からのリクエストに対する処理を行う。例えば、一次キャッシュ部１４の一次キャッシュ制御部は、命令制御部１２からデータ転送のリクエストを受けると、要求されたデータが一次キャッシュメモリにあればそのデータを返し、なければ二次キャッシュ部１５にデータ転送のリクエストを発行する。
【００３７】
二次キャッシュ部１５は、コア１１の一次キャッシュ部１４からリクエスト（要求）を受け取る二次キャッシュ制御部とデータを保持する二次キャッシュメモリとを有する。例えば、二次キャッシュ部１５の二次キャッシュ制御部は、一次キャッシュ部１４からデータ転送のリクエストを受けると、要求されたデータが二次キャッシュメモリにあればそのデータを返し、なければ外部の主記憶部１６にデータ転送のリクエストを発行する。
【００３８】
図２は、本実施形態における各コア１１が有する一次キャッシュ部の構成例を示す図である。図２には、一次キャッシュ部が有する一次キャッシュ制御部のパイプラインと、それに関わる各部を示している。
【００３９】
一次キャッシュ制御部１００のパイプライン１０１は、命令の実行を制御する命令制御部（ＩＵ）１２２等からのリクエスト（要求）を受け、リクエストに応じた処理を実行する。パイプライン１０１は、必要に応じてフェッチポート（ＦＰ）１０２、タグ部（ＴＡＧ）１０３、ムーブインバッファ（ＭＩＢ）１０４、ムーブアウトバッファ（ＭＯＢ）１０５、ストアバッファ（ＳＴＢ）１０６とデータ等をやり取りする。
【００４０】
パイプライン１０１は、プライオリティステージ（Ｐ）、ＴＡＧ／ＴＬＢアクセスステージ（Ｔ）、マッチステージ（Ｍ）、バッファアクセスステージ（Ｂ）、及びレザルトステージ（Ｒ）の５ステージを有する。なお、本実施形態においては、パイプライン１０１は５ステージを有するものとしているが、これに限定されず、ステージ数が異なる、例えば４ステージのパイプラインであっても良い。
【００４１】
プライオリティステージでは、優先順位に従ってパイプライン処理に投入するリクエストを選択して投入する。ＴＡＧ／ＴＬＢアクセスステージでは、タグデータ等が保持されているＴＡＧメモリにアクセスするとともに、ＴＬＢ（Translation Lookaside Buffer）で仮想アドレスから物理アドレスへの変換を行い、キャッシュメモリにアクセスする。
【００４２】
マッチステージでは、ＴＡＧメモリからの出力とＴＬＢで変換した物理アドレスとを比較して、キャッシュメモリの読み出しウェイを決定する。バッファアクセスステージでは、マッチステージでの結果を使用してウェイを選択し、演算器にデータを渡す。レザルトステージでは、バッファアクセスステージのデータ正当性のチェック結果を報告する。
【００４３】
フェッチポート１０２は、リクエストを保持する複数のエントリを有し、命令制御部１２２から発行されたリクエストを必要に応じて保持する。フェッチポート１０２に保持されたリクエストは、アウトオブオーダーで読み出されてパイプライン１０１に投入される。タグ部１０３は、リクエストにより要求されたデータが一次キャッシュメモリにあるか否かを判断するためのタグ検索等を行う。
【００４４】
ムーブインバッファ１０４は、キャッシュミスしたデータを一次キャッシュメモリに転送させるムーブインに係る処理データを、複数のコアで共用する二次キャッシュ部１５の二次キャッシュ制御部（ＳＸ）１２１とやり取りする。ムーブインバッファ１０４は、アドレス（ＡＤＲＳ）及び命令のグループコード（ＣＯＤＥ）を含むリクエストを保持する複数のエントリを有する。
【００４５】
ムーブアウトバッファ１０５は、一次キャッシュメモリからデータを排出するムーブアウトに係る処理データを二次キャッシュ制御部１２１とやり取りする。ストアバッファ１０６は、ストアリクエストを保持する複数のエントリを有し、命令制御部１２２から発行されたストアリクエストを必要に応じて保持する。ストアバッファ１０６に保持されたストアリクエストは、アウトオブオーダーで読み出されてパイプライン１０１に投入される。
【００４６】
ロックレジスタ１０７Ａは、パイプライン１０１でロックするアドレスを保持するレジスタであり、各コアに１つずつ割り当てられている。ロックレジスタ１０７Ａは、ロックしているか否かを示すロックフラグ（ＬＯＣＫ）を保持するフィールド１０８と、ロック対象のアドレス（ＡＤＲＳ）を保持するフィールド１０９と、命令のグループコード（ＣＯＤＥ）を保持するフィールド１１１と、カウンタ（ＣＮＴ）１１０で構成される。ここで、グループコードは、命令の優先度を示す情報であり、命令の優先度によって値が異なるコード値である。
【００４７】
ロックフラグが設定された（ロック状態）ロックレジスタ１０７Ａに登録されているロック対象のアドレスに対しては、そのロックレジスタ１０７Ａに対応するコア以外のコアによる操作ができなくなる。ロックレジスタ１０７Ａはムーブインの実行に基づいて更新され、ある時点において各コアがロックできるアドレスは１つである。ロックした状態が永久に継続することがないように、カウンタ１１０が時間を計測して、一定の時間が経過するとロックフラグがクリアされロックを解除する。
【００４８】
例えば、カウンタ１１０は、初期値が０であり、クロック信号が入力されると値が１ずつインクリメントするものとする。つまり、カウンタ１１０の値は、ロック対象のアドレスをロックしてからの経過時間に比例する。なお、カウンタ１１０は、これに限定されるものではなく、カウンタ１１０の値がロック対象のアドレスをロックしてからの経過時間に比例するものであれば良い。カウンタ１１０の値が所定の閾値に到達したら、ロックレジスタ１０７Ａのロックフラグがクリアされ、登録されているアドレスのロックが解除される。
【００４９】
図３は、本実施形態における一次キャッシュ部のパイプラインの構成例を示す図である。図３において、図２に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。
【００５０】
パイプラインのプライオリティステージに対応する選択部１３１は、フェッチポート１０２、ムーブインバッファ１０４、ストアバッファ１０６、命令制御部１２２、及び２次キャッシュ制御部１２１からのデータ要求を保持するバッファ（ＳＸＯＱ）１３４のそれぞれが発行するリクエストの内から優先順位に従ってパイプライン処理に投入するリクエストを選択する。なお、図３において、Ｔ、Ｍ、Ｂ、及びＲは、それぞれパイプラインのＴＡＧ／ＴＬＢアクセスステージ、マッチステージ、バッファアクセスステージ、及びレザルトステージを示す。
【００５１】
アドレス比較部１３２は、パイプラインで実行しているリクエストのバッファアクセスステージ（Ｂ）のアドレスとロックレジスタ１０７Ａに保持されているアドレスとを比較して比較結果を出力する。アドレス比較部１３２より出力された比較結果がアドレスの一致を示しており、かつそのリクエストがバッファ１３４を介した他のコアから発行されたデータ要求に係るリクエストである場合には、パイプラインのレザルトステージにおいて、そのリクエストをアボートする。
【００５２】
コード比較部１３３は、パイプラインで実行しているリクエストのバッファアクセスステージ（Ｂ）のグループコードとロックレジスタ１０７Ａに保持されているグループコードとを比較する。コード比較部１３３は、バッファアクセスステージ（Ｂ）のグループコードに基づく優先度がロックレジスタ１０７Ａに保持されているグループコードに基づく優先度と同じもしくは高い場合には、ロックレジスタ１０７Ａを更新する。また、コード比較部１３３は、ロックレジスタ１０７Ａがアドレスをロックしていない場合には、グループコードの比較結果にかかわらず、ロックレジスタ１０７Ａを更新する。ロックレジスタ１０７Ａの更新では、図示しないロックフラグをセットするとともに、バッファアクセスステージ（Ｂ）で実行しているリクエストのアクセス対象アドレス及びグループコードを登録し、カウンタを初期化する。
【００５３】
本実施形態におけるロックレジスタの更新を含む動作及びロックレジスタを用いたロック制御の動作について、基本的な動作は図１１及び図１２に示した例と同様である。本実施形態においては、ロックを伴う命令を実行するときに、図１１に示したように単にロックレジスタを更新するのではなく、図４に示すようにロックレジスタを更新するか否かを判断し、判断結果に従ってロックレジスタへの登録を行う。
【００５４】
図４は、本実施形態におけるロックレジスタの登録処理を示すフローチャートである。アトミック命令等のロックを伴う命令を実行するために、アクセス対象のアドレスのデータを一次キャッシュメモリに格納させるムーブインのリクエストが発行され、一次キャッシュ制御部１００のパイプライン１０１に投入される（Ｓ１０１）。一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ａのロックフラグがセットされている、すなわちロック状態であるかを確認する（Ｓ１０２）。
【００５５】
確認の結果、ロックフラグがセットされていれば（Ｓ１０２のＹＥＳ）、一次キャッシュ制御部１００のパイプライン１０１は、カウンタ１１０の値及び命令のグループコードに基づいて、ロックレジスタを更新するか否かを判断する（Ｓ１０３）。一次キャッシュ制御部１００のパイプライン１０１は、カウンタ１１０の値が所定の閾値に到達していれば、ロックレジスタを更新すると判断する。また、一次キャッシュ制御部１００のパイプライン１０１は、カウンタ１１０の値が所定の閾値に到達していない場合、ロックレジスタに登録されているグループコード（登録コード）とムーブインバッファ１０４からのリクエストのグループコード（新コード）とを比較し、新コードに基づく優先度が登録コードに基づく優先度と同じもしくは高い場合にはロックレジスタを更新すると判断する。言い換えれば、一次キャッシュ制御部１００のパイプライン１０１は、カウンタ１１０の値が所定の閾値に到達していない場合、登録コードに基づく優先度が新コードに基づく優先度より高い場合にはロックレジスタを更新しないと判断する。
【００５６】
例えば、ロックを伴う命令のうち、ＣＡＳ命令の優先度を高く設定し（例えば、グループコード＝１）、ＣＡＳ命令以外の命令の優先度を低く設定したとする（例えば、グループコード＝０）。この場合には、図５に示す真理値表に従って、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタを更新する（True）か否（False）かを決定する。すなわち、カウンタ１１０の値を最も優先して、カウンタ１１０の値が所定の閾値に到達している場合、必ずロックレジスタ１０７Ａを更新する。続いて、新しいＣＡＳ命令、すなわちムーブインバッファ１０４からのＣＡＳ命令を２番目に優先し、ロックしているＣＡＳ命令を３番目に優先し、新しいＣＡＳ以外の命令、すなわちムーブインバッファ１０４からの命令（／ＣＡＳ命令）を４番目に優先する。
【００５７】
ロックフラグがセットされていない（Ｓ１０２のＮＯ）、もしくはステップＳ１０３での判断の結果、ロックレジスタを更新すると判断した（Ｓ１０３のＹＥＳ）場合、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ａの書き換えを行う（Ｓ１０４）。ロックレジスタ１０７Ａの書き換えでは、ロックフラグをセットするとともに、ムーブインバッファ１０４からのリクエストのアクセス対象アドレス及びグループコードを登録する。一方、ステップＳ１０３での判断の結果、ロックレジスタを更新しない判断した（Ｓ１０３のＮＯ）場合には、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ａの更新を抑止して、ロックレジスタ１０７Ａの書き換えを行わずにムーブインに係る処理を継続する。
【００５８】
図６は、本実施形態におけるプロセッサにおいて、連続して行う複数の処理を内蔵したロックを伴う命令（ここでは、ＣＡＳ命令、ページテーブルのフェッチ命令とする）を複数のコアが実行する場合のロックレジスタを用いたロック制御の例を示すシーケンス図である。なお、ＣＡＳ命令は、ページテーブルのフェッチ命令より優先度が高いものとする。また、図６に示す動作の開始時には、コア０及びコア１のロックレジスタ１０７Ａは、ロックフラグがクリアされている、すなわちアドレスのロックをしていないものとする。
【００５９】
コア０でアクセス対象アドレスＡのＣＡＳ命令を実行するために、コア０の一次キャッシュ制御部１００のパイプライン１０１が、キャッシュミスしたアドレスＡのデータをムーブインによって一次キャッシュメモリに格納する。このとき、コア０のロックレジスタのロックフラグがセットされていないので、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ａを更新して、ロックフラグをセットするとともに、ＣＡＳ命令のグループコード及びをロック対象のアドレスとしてアドレスＡを登録しロックする（６０１）。コア０によりアドレスＡがロックされたことで、コア１でアクセス対象アドレスＡのＣＡＳ命令を実行するためのコア１によるアドレスＡのデータのムーブインはアボートされる（６１１）。
【００６０】
コア０によりアドレスＡをロックした後、コア０で後続の命令であるアクセス対象アドレスＢのページテーブルのフェッチ命令を実行するために、コア０の一次キャッシュ制御部１００のパイプライン１０１が、キャッシュミスしたアドレスＢのデータをムーブインによって一次キャッシュメモリに格納する。このとき、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ａに登録されているグループコードと、ムーブインバッファ１０４からのリクエストのグループコード、すなわちページテーブルのフェッチ命令のグループコードとを比較する。グループコードに基づくページテーブルのフェッチ命令の優先度はＣＡＳ命令の優先度よりも低いので、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ｃを更新しないと判断する。したがって、ロックレジスタ１０７Ｃは、ロック対象のアドレスとしてアドレスＡを保持し、アドレスＡのロックが継続される（６０２）。
【００６１】
その後、コア１によるアドレスＡについてのムーブインがリトライされても、コア０によるアドレスＡのロックが継続しているので、コア１によるアドレスＡのデータのムーブインはアボートされる（６１２）。続いて、コア０の一次キャッシュ制御部１００のパイプライン１０１が、ＣＡＳ命令の処理を実行する（６０３）。そして、ＣＡＳ命令の処理が完了した後、コア０の一次キャッシュ制御部１００のパイプライン１０１が、ロックレジスタ１０７Ｃを更新し、ロックフラグをクリアする。つまり、コア０によるアドレスＡのロックが解除され、すべてのコアによるアドレスＡへのアクセスが許可される。
【００６２】
そして、コア１によるアドレスＡについてのムーブインがリトライされると、アドレスＡがロックされていないので、アドレスＡのデータがコア０の一次キャッシュメモリからコア１の一次キャッシュメモリにムーブインされる。また、このとき、コア１のロックレジスタのロックフラグがセットされていないので、コア１の一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタ１０７Ａを更新して、ロックフラグをセットするとともに、ＣＡＳ命令のグループコード及びロック対象のアドレスとしてアドレスＡを登録しロックする（６１３）。
【００６３】
以上のように制御することで、アドレスＡのＣＡＳ命令が完了する前に、そのコアの一次キャッシュメモリからアドレスＡのデータが削除されることを抑制することができる。これにより、ＣＡＳ命令の処理がストールする回数を低減し、プロセッサの処理性能を向上させることができる。
【００６４】
前述した説明では、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタにロックフラグがセットされている場合、カウンタの値及び命令のグループコードに基づいて、ロックレジスタを更新するか否かを判断するようにしている。さらに、図７に示すようにロックレジスタ１０７Ｂに、アドレスをロックしている命令がムーブインバッファ１０４から取得したときにＴＯＱ（Top Of Queue）であったか否か、すなわち最も古くに格納されたものであるか否かを示すＴＯＱ情報を格納するフィールド１１２を設け、一次キャッシュ制御部１００のパイプライン１０１が、ムーブインバッファ１０４からリクエストを取得したときにＴＯＱであったか否かを考慮してロックレジスタ１０７Ｂを更新するか否かを判断するようにしても良い。なお、図７において、図２に示した構成要素と同一の構成要素には同一の符号を付し、重複する説明は省略する。
【００６５】
ＴＯＱであるか否かを考慮する場合、一次キャッシュ制御部１００のパイプライン１０１は、まず、カウンタ１１０の値が所定の閾値に到達していれば、ロックレジスタを更新すると判断する。また、一次キャッシュ制御部１００のパイプライン１０１は、カウンタ１１０の値が所定の閾値に到達していない場合、ムーブインバッファ１０４からのリクエストがＴＯＱであるリクエストであれば、ロックレジスタを更新すると判断する。ただし、ムーブインバッファ１０４からのリクエストがＴＯＱであるリクエストであり、かつアドレスをロックしているリクエストがムーブインバッファ１０４から取得したときにＴＯＱであるリクエストであった場合には、ロックレジスタを更新するか否かの判断の条件としてＴＯＱであることを考慮しない。
【００６６】
また、一次キャッシュ制御部１００のパイプライン１０１は、カウンタ１１０の値が所定の閾値に到達しておらず、かつムーブインバッファ１０４からのリクエストがＴＯＱでないリクエストである場合、ロックレジスタに登録されているグループコード（登録コード）とムーブインバッファ１０４からのリクエストのグループコード（新コード）とを比較し、新コードに基づく優先度が登録コードに基づく優先度と同じもしくは高い場合にはロックレジスタを更新すると判断する。なお、カウンタ１１０の値が所定の閾値に到達しておらず、かつムーブインバッファ１０４からのリクエストがＴＯＱでないリクエストである場合、アドレスをロックしているリクエストがムーブインバッファ１０４から取得したときにＴＯＱであるリクエストであればロックレジスタの更新を行わないと判断する。
【００６７】
例えば、ロックを伴う命令のうち、ＣＡＳ命令の優先度を高く設定し（例えば、グループコード＝１）、ＣＡＳ命令以外の命令の優先度を低く設定したとする（例えば、グループコード＝０）。この場合には、図８に示す真理値表に従って、一次キャッシュ制御部１００のパイプライン１０１は、ロックレジスタを更新する（True）か否（False）かを決定する。すなわち、カウンタ１１０の値を最も優先して、カウンタ１１０の値が所定の閾値に到達している場合、必ずロックレジスタ１０７Ｂを更新する。続いて、ＴＯＱである命令を２番目に優先し、ＣＡＳ命令を３番目に優先し、ＣＡＳ以外の命令（／ＣＡＳ命令）を４番目に優先する。なお、比較した命令がともにＣＡＳ命令であれば、新しいＣＡＳ命令、すなわちムーブインバッファ１０４からのＣＡＳ命令を優先し、比較した命令がともにＣＡＳ以外の命令であれば、新しいＣＡＳ以外の命令、すなわちムーブインバッファ１０４からの命令（／ＣＡＳ命令）を優先する。
【００６８】
前述した例では、ＣＡＳ命令とＣＡＳ命令以外の命令との命令の優先度設定を２つとした例を示したが、本発明はこれに限定されるものではなく、命令の優先度設定は３以上であっても良い。優先度設定を４つとした場合の例を図９に示す。図９において、ＣＡＳはＣＡＳ命令を示し、ＳＴ１はストア命令を示し、ＴＲＦはページテーブルのフェッチ命令を示し、ＩＵはそれ以外の命令（以下、その他の命令）を示している。ロックレジスタにロックフラグがセットされている場合にロックレジスタを更新するか否かの判断に係る優先度は、次の通りである。
【００６９】
ＣＡＳ命令に係るＴＯＱであるリクエストの優先度が最も高く、ストア命令に係るリクエストの優先度はＣＡＳ命令に係るＴＯＱであるリクエストの優先度より低い（ＣＡＳ＊ＴＯＱ＞ＳＴ１）。ページテーブルのフェッチ命令に係るＴＯＱであるリクエストの優先度はストア命令に係るリクエストの優先度より低く（ＳＴ１＞ＴＲＦ＊ＴＯＱ）、その他の命令に係るＴＯＱであるリクエストの優先度はページテーブルのフェッチ命令に係るＴＯＱであるリクエストの優先度より低い（ＴＲＦ＊ＴＯＱ＞ＩＵ＊ＴＯＱ）。ＣＡＳ命令に係るＴＯＱではないリクエストの優先度はその他の命令に係るＴＯＱであるリクエストの優先度より低く（ＩＵ＊ＴＯＱ＞ＣＡＳ＊／ＴＯＱ）、ページテーブルのフェッチ命令に係るＴＯＱではないリクエストの優先度はＣＡＳ命令に係るＴＯＱではないリクエストの優先度より低い（ＣＡＳ＊／ＴＯＱ＞ＴＲＦ＊／ＴＯＱ）。その他の命令に係るＴＯＱではないリクエストの優先度はページテーブルのフェッチ命令に係るＴＯＱではないリクエストの優先度より低く（ＴＲＦ＊／ＴＯＱ＞ＩＵ＊／ＴＯＱ）、最も低い。
【００７０】
一次キャッシュ制御部１００のパイプライン１０１は、前述した優先度に従ってロックレジスタを更新するか否かの判断を行い、後続の命令の優先度が先行の命令の優先度と同じかもしくは高い場合、ロックレジスタを更新すると判断して後続の命令に応じてロックレジスタを書き換える。一方、後続の命令の優先度が先行の命令の優先度より低い場合、ロックレジスタを更新しないと判断しロックレジスタの情報を保持する。
【００７１】
また、各コアが複数のスレッドを同時に実行可能なマルチスレッドのプロセッサでは、あるコア内の複数のスレッドでロックを伴う命令が並列に実行される場合もある。このようなマルチスレッドのプロセッサにおいては、各コアに対して複数のロックレジスタを実装すれば良い。この場合には、１つのスレッドに対して複数のロックレジスタが割り当てられることとなるが、ロックレジスタを更新するときには、一次キャッシュ制御部１００のパイプライン１０１は、以下のようにして更新するロックレジスタを決定すれば良い。
【００７２】
まず、ムーブインバッファ１０４からのムーブインのリクエストがなされたとき、すべてのロックレジスタのロックフラグがセットされている場合には、前述したように優先度に従って書き換え可能なロックレジスタを決定し、ロックレジスタを更新する。このとき、複数のロックレジスタが書き換え可能である場合には、例えば、その内で最も古い、すなわちカウンタの値が閾値に最も近いロックレジスタを更新する。なお、優先度に従って判断した結果、書き換え可能なロックレジスタがない場合には、ロックレジスタの更新を行わない。
【００７３】
また、ムーブインバッファ１０４からのムーブインのリクエストがなされたとき、ロックフラグがクリアされているロックレジスタがある場合には、そのロックレジスタを更新する。このとき、ロックフラグがクリアされているロックレジスタが複数ある場合には、例えば、ロックレジスタに登録されているグループコードに基づく優先度が小さいロックレジスタを更新する。
【００７４】
本実施形態によれば、アドレスのロックを伴う命令に優先度を設定し、ロックレジスタにアドレスを登録している先行のロックを伴う命令の優先度が、後続のロックを伴う命令の優先度と同じもしくは低い場合、ロックレジスタを更新して後続の命令のアクセス対象アドレスをロックする。ロックレジスタにアドレスを登録している先行の命令の優先度が、後続の命令の優先度より高い場合、ロックレジスタの更新を抑止して先行の命令のアクセス対象アドレスのロックを継続する。これにより、ロックを伴う命令が完了する前に、そのコアの一次キャッシュメモリから命令の実行に必要なデータが削除されることを抑制することができ、命令の処理がストールする回数を低減し、プロセッサの処理性能を向上させることができる。
【００７５】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００７６】
１０  プロセッサ
１１  コア
１２  命令制御部
１３  演算器
１４  一次キャッシュ部
１５  二次キャッシュ部
１６  主記憶部
１００  一次キャッシュ制御部
１０１  パイプライン
１０２  フェッチポート
１０３  タグ部
１０４  ムーブインバッファ
１０５  ムーブアウトバッファ
１０６  ストアバッファ
１０７  ロックレジスタ
１２１  二次キャッシュ制御部
１２２  命令制御部
【図１】
2015102973.tif 000003
【図２】
2015102973.tif 000004
【図３】
2015102973.tif 000005
【図４】
2015102973.tif 000006
【図５】
2015102973.tif 000007
【図６】
2015102973.tif 000008
【図７】
2015102973.tif 000009
【図８】
2015102973.tif 000010
【図９】
2015102973.tif 000011
【図１０】
2015102973.tif 000012
【図１１】
2015102973.tif 000013
【図１２】
2015102973.tif 000014
【図１３】
2015102973.tif 000015
【図１４】
2015102973.tif 000016
【図１５】
2015102973.tif 000017