(57)【要約】【課題】マルチスレッドで動作する演算処理装置において、ノンキャッシュリクエストの発行効率を改善し、スレッドの処理能力に偏りが生じることを防止する。【解決手段】コア部の１次キャッシュコントローラが、命令コントローラからのスレッド０のノンキャッシュライトのリクエストとスレッド１のノンキャッシュリードのリクエストとを調停して発行する場合、調停対象のスレッド０のノンキャッシュライトに先行するスレッド０の先行ノンキャッシュライトのリクエストの発行後、先行した先行ノンキャッシュライトに対する応答があることにより、調停対象のノンキャッシュリクエストが発行可能な状態になったとき、スレッド１のノンキャッシュリードのリクエストを優先して発行するようにして、プライオリティの低いノンキャッシュリードのリクエストが待たされ続けないようにする。【選択図】図３
2015036941.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドのうち第１のスレッドに属し、アクセス対象のデータがキャッシュメモリに保持されることなくアクセスを行う第１のノンキャッシュリクエストと、前記複数のスレッドのうち第２のスレッドに属し、前記第１のノンキャッシュリクエストより優先度が低い第２のノンキャッシュリクエストとを出力する命令制御部と、
前記命令制御部が出力した前記第１のノンキャッシュリクエストと前記第２のノンキャッシュリクエストとを調停して発行する場合、前記第１のノンキャッシュリクエストに先行する前記第１のスレッドの先行ノンキャッシュリクエストの発行後、発行した前記先行ノンキャッシュリクエストに対する応答が有ることにより、調停対象の前記第１のノンキャッシュリクエストと前記第２のノンキャッシュリクエストとが発行可能状態になったとき、前記第２のノンキャッシュリクエストを、前記第１のノンキャッシュリクエストよりも優先して発行する発行制御部とを有することを特徴とする演算処理装置。
【請求項２】
前記発行制御部はさらに、
前記先行ノンキャッシュリクエストを発行した後、前記第２のノンキャッシュリクエストが調停対象である場合に設定されるとともに、調停対象の前記第２のノンキャッシュリクエストを発行した場合に解除される保留情報を保持する保持部を有し、
前記発行制御部は、
前記保持部に保持された保留情報に基づき、前記第２のノンキャッシュリクエストを調停することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記発行制御部は、
前記命令制御部が出力した前記第１のノンキャッシュリクエストと前記第２のノンキャッシュリクエストとを、調停して発行するリクエスト調停部と、
前記命令制御部が出力した前記第１のノンキャッシュリクエストの前記リクエスト調停部への入力を、前記保持部が保持する保留情報に基づき抑止するスレッド調停部とを有することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記第１のノンキャッシュリクエストは、
アクセス対象のデータがキャッシュメモリに保持されることなくライトアクセスを行うノンキャッシュライトリクエストであり、
前記第２のノンキャッシュリクエストは、
アクセス対象のデータがキャッシュメモリに保持されることなくリードアクセスを行うノンキャッシュリードリクエストであることを特徴とする請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
演算処理装置の制御方法において、
前記演算処理装置が有する命令制御部が、複数のスレッドのうち第１のスレッドに属し、アクセス対象のデータがキャッシュメモリに保持されることなくアクセスを行う第１のノンキャッシュリクエストと、前記複数のスレッドのうち第２のスレッドに属し、前記第１のノンキャッシュリクエストより優先度が低い第２のノンキャッシュリクエストとを出力し、
前記演算処理装置が有する発行制御部が、前記命令制御部が出力した前記第１のノンキャッシュリクエストと前記第２のノンキャッシュリクエストとを調停して発行する場合、前記第１のノンキャッシュリクエストに先行する前記第１のスレッドの先行ノンキャッシュリクエストの発行後、発行した前記先行ノンキャッシュリクエストに対する応答が有ることにより、調停対象の前記第１のノンキャッシュリクエストと前記第２のノンキャッシュリクエストとが発行可能状態になったとき、前記第２のノンキャッシュリクエストを、前記第１のノンキャッシュリクエストよりも優先して発行することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
キャッシュメモリが介在せずにアクセスされるメモリ空間であるノンキャッシュ空間へのアクセス命令を実行可能なＣＰＵ（Central Processing Unit）がある。ノンキャッシュ空間へのアクセス命令は、アクセス対象のデータがキャッシュメモリに保持されることなくＣＰＵ外部のデバイス等にアクセスする。ノンキャッシュリクエストによるノンキャッシュ空間へのアクセスは、ノンキャッシャブル空間として定義されたアドレス空間に対する読み書きとして定義される。例えば、デバイスのドライバが、割り込み処理として、複数のノンキャッシュライト動作と、そのライト動作を確認するためのノンキャッシュリード動作とを行うアクセスがある。
【０００３】
ノンキャッシュリクエストに係る動作について説明する。ＣＰＵのコア部では、命令コントローラから発行されたノンキャッシュリクエストを受けた１次キャッシュコントローラは、直前に先行するノンキャッシュリクエストに対応する２次キャッシュ部からのノンキャッシュテイクン応答の有無を確認する。１次キャッシュコントローラは、先行するノンキャッシュリクエストに対応するノンキャッシュテイクン応答があるまで、後続のノンキャッシュリクエストの発行を待機する。１次キャッシュコントローラは、ノンキャッシュテイクン応答待ちの状態でない、すなわち先行するノンキャッシュリクエストに対応するノンキャッシュテイクン応答を受けている場合には、後続のノンキャッシュリクエストを２次キャッシュ部に発行する。
【０００４】
ＣＰＵの２次キャッシュ部は、コア部からノンキャッシュリクエストを受けると、ＣＰＵのシステムコントローラにノンキャッシュリクエストを発行し、そのコア部に対してノンキャッシュテイクン応答を返す。システムコントローラは、受けたノンキャッシュリクエストをデバイス側に発行し、デバイス側でのリクエスト処理が完了したら、リクエストの発行元に対して完了通知を発行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１１７８５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＣＰＵのコア部の命令コントローラから、ノンキャッシュライトのリクエスト及びノンキャッシュリードのリクエストがそれぞれ複数発行される場合がある。このとき、１次キャッシュコントローラは、先行するノンキャッシュリクエスト（ノンキャッシュライト又はノンキャッシュリード）を２次キャッシュ部に対して発行した後、ノンキャッシュテイクン応答が２次キャッシュ部から返ってくるまで、後続のノンキャッシュリクエストの発行を待機する。
【０００７】
先行するノンキャッシュリクエストに対応する２次キャッシュ部からのノンキャッシュテイクン応答が返ってくると、１次キャッシュコントローラは、ノンキャッシュライトのリクエスト及びノンキャッシュリードのリクエストがともに発行可能な状態になる。一般に、ノンキャッシュライトのリクエストは、ノンキャッシュリードのリクエストよりもプライオリティが高く設定される。したがって、１次キャッシュコントローラは、ノンキャッシュライトのリクエスト及びノンキャッシュリードのリクエストの両方のリクエストの発行を待機している場合には、調停を行い、ノンキャッシュライトのリクエストを２次キャッシュ部に発行する。
【０００８】
ここで、例えば、スレッド０とスレッド１の２つのスレッドを実行可能なマルチスレッドのコア部において、ノンキャッシュライトのリクエストがスレッド０で、ノンキャッシュリードのリクエストがスレッド１で、命令コントローラから１次キャッシュコントローラにそれぞれ複数発行されたとする。この場合、前述した調停によれば、スレッド０のノンキャッシュライトのリクエストが発行され続けられ、スレッド１のノンキャッシュリードのリクエストが待たされ続けることになる。例えば、スレッド０のノンキャッシュライト動作で書き込んだ情報を、スレッド１のノンキャッシュリード動作で読み出すことで、次のステータスに遷移するようなプログラムでは、ステータスが遷移するまでに長い時間を要してしまう。このように、マルチスレッドで動作するＣＰＵのコア部において、あるスレッドの処理が停滞して、命令の処理能力でスレッドに偏りが生じることは望ましくない。
【０００９】
１つの側面では、本発明の目的は、複数のスレッドで動作する演算処理装置において、ノンキャッシュリクエストの発行効率を改善し、複数のスレッドの処理能力に偏りが生じることを防止することにある。
【課題を解決するための手段】
【００１０】
演算処理装置の一態様は、複数のスレッドのうち第１のスレッドに属し、アクセス対象のデータがキャッシュメモリに保持されることなくアクセスを行う第１のノンキャッシュリクエストと、複数のスレッドのうち第２のスレッドに属し、第１のノンキャッシュリクエストより優先度が低い第２のノンキャッシュリクエストとを出力する命令制御部と、命令制御部が出力したノンキャッシュリクエストを発行する発行制御部とを有する。発行制御部は、命令制御部が出力した第１のノンキャッシュリクエストと第２のノンキャッシュリクエストとを調停して発行する場合、第１のノンキャッシュリクエストに先行する第１のスレッドの先行ノンキャッシュリクエストの発行後、発行した先行ノンキャッシュリクエストに対する応答が有ることにより、調停対象の第１のノンキャッシュリクエストと第２のノンキャッシュリクエストとが発行可能状態になったとき、第２のノンキャッシュリクエストを、第１のノンキャッシュリクエストよりも優先して発行する。
【発明の効果】
【００１１】
発明の一態様においては、第１のスレッドの第１のノンキャッシュリクエストと第２のスレッドの第２のノンキャッシュリクエストとを調停して発行する場合、第２のノンキャッシュリクエストが待たされ続けることがなく、スレッドの処理能力に偏りが生じることを防止することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態におけるノンキャッシュリクエストの発行フローを示す図である。
【図３】本実施形態における１次キャッシュコントローラの構成例を示す図である。
【図４】本実施形態におけるスレッド調停部（リクエスト制御部）の構成例を示す図である。
【図５】本実施形態におけるスレッド調停部（フラグ生成制御部）の構成例を示す図である。
【図６】本実施形態におけるスレッド調停部（フラグ生成制御部）の構成例を示す図である。
【図７】本実施形態における演算処理装置の動作例を示すタイミングチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態における演算処理装置としてのＣＰＵ（Central Processing Unit）の構成例を示す図である。本実施形態におけるＣＰＵ１０は、複数のコア部２０、２次キャッシュ部３０、及びシステムコントローラ４０を有する。
【００１４】
コア部２０の各々は、演算器２１と、命令をデコードして命令の実行を制御する命令コントローラ２２と、命令コントローラ２２からリクエスト（要求）を受け取る１次キャッシュコントローラ２３と、データを保持する１次キャッシュメモリ２４とを有する。なお、本実施形態ではコア部２０は、マルチスレッド（複数のスレッド）で動作するものとし、例えばスレッド０とスレッド１の２つのスレッドを実行可能であるとする。
【００１５】
２次キャッシュ部３０は、コア部２０の１次キャッシュコントローラ２３からメモリアクセスのリクエストやアクセス対象のデータがキャッシュメモリに保持されることなくアクセスを行うノンキャッシュリクエストを受け取る２次キャッシュコントローラ３１と、データを保持する２次キャッシュメモリ３２とを有する。システムコントローラ４０は、ＣＰＵ１０外部のデバイス（外部装置）５１とのインタフェースやメインメモリ５２とのインタフェースや他ＣＰＵ５３とのインタフェース等を制御する。
【００１６】
本実施形態におけるＣＰＵ１０は、コア部２０の１次キャッシュコントローラ２３によるノンキャッシュリクエストの発行過程において、一方のスレッドのノンキャッシュライトのリクエスト及び他方のスレッドのノンキャッシュリードのリクエストとを調停して発行する場合、ノンキャッシュリードのリクエストが待たされ続けないように発行を制御する。そこで、本実施形態では、図３に示すように１次キャッシュコントローラ２３に、リクエスト調停部３０１に加え、スレッド調停部３０２を設ける。
【００１７】
図３は、本実施形態における１次キャッシュコントローラ２３の構成例を示す図である。リクエスト調停部３０１は、各リクエストに設定されたプライオリティ（優先度）に従ってリクエストの発行を制御する。本実施形態において、リクエスト発行のプライオリティは、リクエストＲｅｑ−Ａが最も高く、リクエストＲｅｑ−Ａ、Ｒｅｑ−Ｂ、Ｒｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅの順にプライオリティが低くなり、リクエストＲｅｑ−Ｅが最も低いとする。また、リクエストＲｅｑ−Ｂがアクセス対象のデータがキャッシュメモリに保持されることなくライトアクセスを行うノンキャッシュライト（ＮＣＷＴ）のリクエストであり、リクエストＲｅｑ−Ｃがアクセス対象のデータがキャッシュメモリに保持されることなくリードアクセスを行うノンキャッシュリード（ＮＣＲＤ）のリクエストである。なお、リクエストＲｅｑ−Ａ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅは、ノンキャッシュリクエストとは異なるリクエストである。
【００１８】
スレッド調停部３０２は、あるスレッドのノンキャッシュライトのリクエストの発行を、他のスレッドのリクエストの滞留状態に応じて制御する。スレッド調停部３０２は、命令コントローラ２２からあるスレッドのノンキャッシュライトのリクエストが発行された場合には、他のスレッドのノンキャッシュリードのリクエストの滞留状態を示すフラグを参照する。そして、スレッド調停部３０２は、他のスレッドのノンキャッシュリードのリクエストがリクエスト調停部３０１に滞留している場合には、受けたノンキャッシュライトのリクエストをリクエスト調停部３０１に送ることを抑止し、他のスレッドのノンキャッシュリードのリクエストの発行を可能にする。
【００１９】
図２は、本実施形態におけるノンキャッシュリクエストの発行フローを示す図である。
まず、コア部２０の命令コントローラ２２が、コア部２０の１次キャッシュコントローラ２３に対してノンキャッシュリクエスト（ノンキャッシュライト又はノンキャッシュリード）を発行する（Ｓ１０１）。
【００２０】
１次キャッシュコントローラ２３は、命令コントローラ２２からのノンキャッシュリクエストを受け付ける（Ｓ１０２）。続いて、１次キャッシュコントローラ２３は、先行するノンキャッシュリクエストに対する応答であるノンキャッシュテイクン応答の有無を確認する（Ｓ１０３）。先行するノンキャッシュリクエストに対応するノンキャッシュテイクン応答がない場合には、１次キャッシュコントローラ２３は、ノンキャッシュリクエストを待機させる（Ｓ１０４）。
【００２１】
先行するノンキャッシュリクエストに対応するノンキャッシュテイクン応答がある場合には、１次キャッシュコントローラ２３は、受けたノンキャッシュリクエストがノンキャッシュライトのリクエストであれば、スレッド調停部３０２に送る（Ｓ１０５のｙｅｓ）。一方、１次キャッシュコントローラ２３は、受けたノンキャッシュリクエストがノンキャッシュライトのリクエストでない、すなわちノンキャッシュリードのリクエストであれば、リクエスト調停部３０１に送る（Ｓ１０５のｎｏ）。
【００２２】
スレッド調停部３０２は、先行するリクエストがノンキャッシュライトのリクエストであり、かつノンキャッシュライトよりもリクエスト発行のプライオリティが低いリクエストが発行待ちであることを示す保留情報としてのフラグをスレッド毎に有している。スレッド調停部３０２は、それらのフラグの状態によって、受けたノンキャッシュライトのリクエストが発行可能であるか否かを判断する。スレッド調停部３０２は、受けたノンキャッシュライトのリクエストが発行可能であると判断した場合には、そのノンキャッシュライトのリクエストをリクエスト調停部３０１に送る。一方、スレッド調停部３０２は、受けたノンキャッシュライトのリクエストが発行可能ではないと判断した場合には、そのノンキャッシュライトのリクエストをリクエスト調停部３０１に送ることを抑止する（Ｓ１０６）。
【００２３】
リクエスト調停部３０１は、リクエスト発行のプライオリティに従って調停するプライオリティ制御により、リクエストを２次キャッシュ部３０に発行する。このようにして、コア部２０の１次キャッシュコントローラ２３は、２次キャッシュ部３０に対してノンキャッシュリクエストを発行する（Ｓ１０７、Ｓ１０８）。
【００２４】
２次キャッシュ部３０は、１次キャッシュコントローラ２３からのノンキャッシュリクエストを受け付ける（Ｓ１０９）。続いて、２次キャッシュ部３０は、受け取ったノンキャッシュリクエストをシステムコントローラ４０に発行し（Ｓ１１０）、そのコア部に対してノンキャッシュテイクン応答を返す（Ｓ１１１）。ここで、２次キャッシュ部３０は、システムコントローラが発行可能なノンキャッシュリクエストの数を管理している。
【００２５】
システムコントローラ４０は、２次キャッシュ部３０からのノンキャッシュリクエストを受け付けると、それをデバイス側に発行し（Ｓ１１２）、デバイス側でのリクエストに応じた処理が完了したら、リクエストの発行元に対して完了通知を発行する（Ｓ１１３）。
【００２６】
以下、本実施形態におけるスレッド調停部３０２について説明する。スレッド調停部３０２は、リクエスト制御部を有するとともに、フラグ生成制御部をスレッド毎に有する。
【００２７】
図４は、本実施形態におけるスレッド調停部３０２のリクエスト制御部の構成例を示す図である。リクエスト制御部は、論理積演算回路（ＡＮＤ回路）４０１、４０２、４０４、及び論理和演算回路（ＯＲ回路）４０３を有する。ＡＮＤ回路４０１は、信号Ｒｅｑ−Ｂ−ｔｈｒｅａｄ＿ｉｄ及びフラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、信号Ｒｅｑ−Ｂ−ｔｈｒｅａｄ＿ｉｄと反転したフラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとの論理積演算した結果を出力する。ＡＮＤ回路４０２は、信号Ｒｅｑ−Ｂ−ｔｈｒｅａｄ＿ｉｄ及びフラグＴｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、反転した信号Ｒｅｑ−Ｂ−ｔｈｒｅａｄ＿ｉｄと反転したフラグＴｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとの論理積演算した結果を出力する。
【００２８】
ここで、信号Ｒｅｑ−Ｂ−ｔｈｒｅａｄ＿ｉｄは、ノンキャッシュライトのリクエストＲｅｑ−Ｂを発行したスレッドを示す信号であり、スレッド０が発行した場合には値が０であり、スレッド１が発行した場合には値が１である。信号Ｒｅｑ−Ｂ−ｔｈｒｅａｄ＿ｉｄは、ノンキャッシュライトのリクエストＲｅｑ−Ｂとともに、命令コントローラ２２から出力される。
【００２９】
また、フラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇは、ノンキャッシュライトのリクエストよりもリクエスト発行のプライオリティが低いスレッド０のリクエスト（Ｒｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅ）が発行待ち、又はスレッド０のノンキャッシュリードのリクエストが発行待ちである場合に、値が１となるフラグである。フラグＴｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇは、ノンキャッシュライトのリクエストよりもリクエスト発行のプライオリティが低いスレッド１のリクエスト（Ｒｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅ）が発行待ち、又はスレッド１のノンキャッシュリードのリクエストが発行待ちである場合に、値が１となるフラグである。フラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ、Ｔｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇは、スレッド調停部３０２のフラグ生成制御部で生成される。
【００３０】
ＯＲ回路４０３は、ＡＮＤ回路４０１、４０２の出力が入力され、それらを論理和演算した結果を出力する。ＡＮＤ回路４０４は、ノンキャッシュライトのリクエストＲｅｑ−Ｂ及びＯＲ回路４０３の出力が入力され、それらを論理積演算して出力する。
【００３１】
図４に示したスレッド調停部３０２のリクエスト制御部は、ノンキャッシュライトのリクエストＲｅｑ−Ｂを発行したスレッドとは異なるスレッドのフラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ、Ｔｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇの値が１であるときには、ＯＲ回路４０３の出力が０となり、ノンキャッシュライトのリクエストＲｅｑ−Ｂをリクエスト調停部３０１に発行することを抑止する。一方、ノンキャッシュライトのリクエストＲｅｑ−Ｂを発行したスレッドとは異なるスレッドのフラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ、Ｔｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇの値が０であるときには、ＯＲ回路４０３の出力が１となり、ノンキャッシュライトのリクエストＲｅｑ−Ｂをリクエスト調停部３０１に発行する。
【００３２】
図５は、本実施形態におけるスレッド調停部３０２のスレッド０フラグ生成制御部の構成例を示す図である。スレッド０に係るフラグ生成制御部は、ＡＮＤ回路５０１、５０２、５０５、５０６、ＯＲ回路５０３、５０７、５０９、及びラッチ回路５０４、５０８を有する。
【００３３】
ＡＮＤ回路５０１は、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄが入力され、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄを論理積演算した結果を出力する。ＡＮＤ回路５０２は、信号Ｔｈ０＿Ｒｅｑ−ＣＤＥ＿ＴＫＮＤ及びラッチ回路５０４の出力であるフラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、反転したＴｈ０＿Ｒｅｑ−ＣＤＥ＿ＴＫＮＤとフラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとの論理積演算した結果を出力する。ＯＲ回路５０３は、ＡＮＤ回路５０１、５０２の出力が入力され、それらを論理和演算した結果を出力する。ラッチ回路５０４は、ＯＲ回路５０３の出力をラッチし、フラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとして出力する。
【００３４】
ここで、信号Ｒｅｑ−Ｂ＿ＴＫＮＤは、リクエスト調停部３０１がノンキャッシュライトのリクエストＲｅｑ−Ｂを２次キャッシュ部３０に対して発行したことを示す信号である。また、信号Ｒｅｑ−Ｂ＿ＴＫＩＤは、発行された信号Ｒｅｑ−Ｂ＿ＴＫＮＤに対応するノンキャッシュライトのリクエストＲｅｑ−Ｂを発行したスレッドを示す信号であり、スレッド０である場合には値が０であり、スレッド１である場合には値が１である。信号Ｔｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄは、ノンキャッシュライトのリクエストよりもリクエスト発行のプライオリティが低いリクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅのいずれかのリクエストがスレッド０で発行待ちであることを示す信号である。
【００３５】
ＡＮＤ回路５０１、５０２、ＯＲ回路５０３、及びラッチ回路５０４により、リクエスト調停部３０１がスレッド１のノンキャッシュライトのリクエストＲｅｑ−Ｂを２次キャッシュ部３０に対して発行したときに、リクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅのいずれかのリクエストがスレッド０で発行待ちであれば、フラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが設定される（値が１になる）。そして、スレッド０のリクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅのいずれかのリクエストがリクエスト調停部３０１から２次キャッシュ部３０に対して発行されると、フラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが解除される（値が０になる）。
【００３６】
また、ＡＮＤ回路５０５は、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄが入力され、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄを論理積演算した結果を出力する。ＡＮＤ回路５０６は、信号Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿ＴＫＮＤ及びラッチ回路５０８の出力であるフラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、反転したＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿ＴＫＮＤとフラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとの論理積演算した結果を出力する。ＯＲ回路５０７は、ＡＮＤ回路５０５、５０６の出力が入力され、それらを論理和演算した結果を出力する。ラッチ回路５０８は、ＯＲ回路５０７の出力をラッチし、フラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとして出力する。ここで、信号Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄは、ノンキャッシュリードのリクエストＲｅｑ−Ｃ（ＮＣＲＤ）がスレッド０で発行待ちであることを示す信号である。
【００３７】
ＡＮＤ回路５０５、５０６、ＯＲ回路５０７、及びラッチ回路５０８により、リクエスト調停部３０１がスレッド１のノンキャッシュライトのリクエストＲｅｑ−Ｂを２次キャッシュ部３０に対して発行したときに、ノンキャッシュリードのリクエストがスレッド０で発行待ちであれば、フラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが設定される（値が１になる）。そして、スレッド０のノンキャッシュリードのリクエストがリクエスト調停部３０１から２次キャッシュ部３０に対して発行されると、フラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが解除される（値が０になる）。
【００３８】
ＯＲ回路５０９は、フラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ及びフラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、それらを論理和演算した結果をフラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとして出力する。なお、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄ、Ｔｈ０＿Ｒｅｑ−ＣＤＥ＿ＴＫＮＤ、Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄ、Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿ＴＫＮＤは、リクエスト調停部３０１から供給される。
【００３９】
図６は、本実施形態におけるスレッド調停部３０２のスレッド１フラグ生成制御部の構成例を示す図である。スレッド１に係るフラグ生成制御部は、ＡＮＤ回路６０１、６０２、６０５、６０６、ＯＲ回路６０３、６０７、６０９、及びラッチ回路６０４、６０８を有する。図６において、図５に示した信号と同一の信号には同一の信号名を付し、重複する説明は省略する。
【００４０】
ＡＮＤ回路６０１は、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄが入力され、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｔｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄと反転した信号Ｒｅｑ−Ｂ＿ＴＫＩＤとの論理積演算した結果を出力する。ＡＮＤ回路６０２は、信号Ｔｈ１＿Ｒｅｑ−ＣＤＥ＿ＴＫＮＤ及びラッチ回路６０４の出力であるフラグＴｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、反転したＴｈ１＿Ｒｅｑ−ＣＤＥ＿ＴＫＮＤとフラグＴｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとの論理積演算した結果を出力する。
【００４１】
ＯＲ回路６０３は、ＡＮＤ回路６０１、６０２の出力が入力され、それらを論理和演算した結果を出力する。ラッチ回路６０４は、ＯＲ回路６０３の出力をラッチし、フラグＴｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとして出力する。ここで、信号Ｔｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄは、ノンキャッシュライトのリクエストよりもリクエスト発行のプライオリティが低いリクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅのいずれかのリクエストがスレッド１で発行待ちであることを示す信号である。
【００４２】
ＡＮＤ回路６０１、６０２、ＯＲ回路６０３、及びラッチ回路６０４により、リクエスト調停部３０１がスレッド０のノンキャッシュライトのリクエストＲｅｑ−Ｂを２次キャッシュ部３０に対して発行したときに、リクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅのいずれかのリクエストがスレッド１で発行待ちであれば、フラグＴｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが設定される（値が１になる）。そして、スレッド１のリクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄ、Ｒｅｑ−Ｅのいずれかのリクエストがリクエスト調停部３０１から２次キャッシュ部３０に対して発行されると、フラグＴｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが解除される（値が０になる）。
【００４３】
また、ＡＮＤ回路６０５は、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄが入力され、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｔｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄと反転した信号Ｒｅｑ−Ｂ＿ＴＫＩＤを論理積演算した結果を出力する。ＡＮＤ回路６０６は、信号Ｔｈ１＿Ｒｅｑ−ＮＣＲＤ＿ＴＫＮＤ及びラッチ回路６０８の出力であるフラグＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、反転したＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿ＴＫＮＤとフラグＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとの論理積演算した結果を出力する。ＯＲ回路６０７は、ＡＮＤ回路６０５、６０６の出力が入力され、それらを論理和演算した結果を出力する。ラッチ回路６０８は、ＯＲ回路６０７の出力をラッチし、フラグＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとして出力する。ここで、信号Ｔｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄは、ノンキャッシュリードのリクエストＲｅｑ−Ｃ（ＮＣＲＤ）がスレッド１で発行待ちであることを示す信号である。
【００４４】
ＡＮＤ回路６０５、６０６、ＯＲ回路６０７、及びラッチ回路６０８により、リクエスト調停部３０１がスレッド０のノンキャッシュライトのリクエストＲｅｑ−Ｂを２次キャッシュ部３０に対して発行したときに、ノンキャッシュリードのリクエストがスレッド１で発行待ちであれば、フラグＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが設定される（値が１になる）。そして、スレッド１のノンキャッシュリードのリクエストがリクエスト調停部３０１から２次キャッシュ部３０に対して発行されると、フラグＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが解除される（値が０になる）。
【００４５】
ＯＲ回路６０９は、フラグＴｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ及びフラグＴｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが入力され、それらを論理和演算した結果をフラグＴｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇとして出力する。なお、信号Ｒｅｑ−Ｂ＿ＴＫＮＤ、Ｒｅｑ−Ｂ＿ＴＫＩＤ、Ｔｈ１＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄ、Ｔｈ１＿Ｒｅｑ−ＣＤＥ＿ＴＫＮＤ、Ｔｈ１＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄ、Ｔｈ１＿Ｒｅｑ−ＮＣＲＤ＿ＴＫＮＤは、リクエスト調停部３０１から供給される。
【００４６】
図７は、本実施形態における演算処理装置の動作例を示すタイミングチャートである。図７に示す例では、ノンキャッシュライトのリクエストＲｅｑ−Ｂがスレッド１で発行され、ノンキャッシュリードのリクエストＲｅｑ−Ｃがスレッド０で発行され、リクエストＲｅｑ−Ｄがスレッド０で発行されるものとする。また、ノンキャッシュライトのリクエストは複数個あるとする。
【００４７】
図７に示すように、サイクル２において、ノンキャッシュライトのリクエストＲｅｑ−Ｂ、ノンキャッシュリードのリクエストＲｅｑ−Ｃ、リクエストＲｅｑ−Ｄがそれぞれリクエスト調停部３０１でリクエスト発行できる状態である。ノンキャッシュテイクン（ＮＣ−ＴＫＮ）応答待ちではなく、スレッド調停部３０２のフラグＴｈ０＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ、Ｔｈ１＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇも値が０であるので、１次キャッシュコントローラ２３のリクエスト調停部３０１は、２次キャッシュ部３０に対してスレッド１（ｓ１）のノンキャッシュライトのリクエストを発行する。このとき、リクエストＲｅｑ−Ｃ、Ｒｅｑ−Ｄがスレッド０で発行待ち状態であるので、スレッド調停部３０２のスレッド０フラグ生成制御部は、フラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇ、Ｔｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇを設定する（値１にする）。
【００４８】
ノンキャッシュライトのリクエスト及びノンキャッシュリードのリクエストは、ノンキャッシュテイクン応答があるまで待機されるので、サイクル５において、リクエスト調停部３０１は、２次キャッシュ部３０に対してノンキャッシュリクエストでないスレッド０（ｓ０）のリクエストＲｅｑ−Ｄを発行する。リクエストＲｅｑ−Ｄが発行されることで、スレッド調停部３０２のスレッド０フラグ生成制御部は、フラグＴｈ０＿Ｒｅｑ−ＣＤＥ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇをリセットする（値０にする）。
【００４９】
その後、サイクル１２において、ノンキャッシュライトのリクエストに対応するノンキャッシュテイクン（ＮＣ−ＴＫＮ）応答があると、１次キャッシュコントローラ２３のリクエスト調停部３０１は、ノンキャッシュライトのリクエスト及びノンキャッシュリードのリクエストが発行可能になる。ここで、スレッド１のノンキャッシュライトのリクエストは、スレッド０のフラグＴｈ０＿Ｒｅｑ−ＮＣＲＤ＿Ｐｅｎｄｉｎｇ＿Ｆｌａｇが設定されているので発行が抑止される。よって、１次キャッシュコントローラ２３のリクエスト調停部３０１は、スレッド０のノンキャッシュリードのリクエストを２次キャッシュ部３０に対して発行する。
【００５０】
本実施形態によれば、スレッド０及びスレッド１の一方のスレッドのノンキャッシュライトのリクエストと他方のスレッドのノンキャッシュリードのリクエストとを調停して発行する場合、先行するノンキャッシュリクエストが一方のスレッドのノンキャッシュライトのリクエストである場合には、先行するノンキャッシュリクエストに対する応答があることによりノンキャッシュリクエストが発行可能な状態になったときに、一方のスレッドのノンキャッシュライトのリクエストの発行を抑止して、他方のスレッドのノンキャッシュリードのリクエストを優先して発行する。これにより、スレッドが異なるノンキャッシュライトのリクエストとノンキャッシュリードのリクエストを調停して発行する場合に、ノンキャッシュリードのリクエストが待たされ続けることがなくなり、ノンキャッシュリクエストを効率よく適切に発行することが可能になる。したがって、ノンキャッシュリクエストの発行効率を改善することができ、複数のスレッドの処理能力に偏りが生じることを防止できる。
【００５１】
なお、前述した実施形態では、２つのスレッドのリクエストに対応する例を示したが、コア部が実行可能なスレッド数はこれに限定されるものではない。スレッド数が２より多くなった場合においても、スレッド毎にノンキャッシュリードのリクエストの待機状態（滞留状態）を示すフラグを設けることで拡張可能である。
【００５２】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５３】
１０  ＣＰＵ
２０  コア部
２１  演算器
２２  命令コントローラ
２３  １次キャッシュコントローラ
２４  １次キャッシュメモリ
３０  ２次キャッシュ部
３１  ２次キャッシュコントローラ
３２  ２次キャッシュメモリ
４０  システムコントローラ
５１  外部デバイス
５２  メインメモリ
５３  他ＣＰＵ
３０１  リクエスト調停部
３０２  スレッド調停部
【図１】
2015036941.tif 000003
【図２】
2015036941.tif 000004
【図３】
2015036941.tif 000005
【図４】
2015036941.tif 000006
【図５】
2015036941.tif 000007
【図６】
2015036941.tif 000008
【図７】
2015036941.tif 000009