(57)【特許請求の範囲】
【請求項１】
主記憶装置に接続される演算処理装置であって、
前記主記憶装置に記憶されるデータの一部を保持するキャッシュメモリ部と、
前記主記憶装置に記憶されるデータを、前記キャッシュメモリ部に保持させるプリフェッチ命令を出力する演算処理部と、
前記演算処理部から前記プリフェッチ命令を受け取るとともに、前記キャッシュメモリ部が前記主記憶装置から前記プリフェッチ命令のプリフェッチ対象データを受け取るまで、前記プリフェッチ命令を格納するロードバッファ部と、
前記演算処理部から前記プリフェッチ命令を受け取るとともに、受け取った前記プリフェッチ命令のプリフェッチ対象データが前記キャッシュメモリ部に保持されている場合、受け取った前記プリフェッチ命令による前記主記憶装置から前記プリフェッチ対象データを読み出す処理を完了するとともに、受け取った前記プリフェッチ命令のプリフェッチ対象データが前記キャッシュメモリ部に保持されず且つ受け取った前記プリフェッチ命令のプリフェッチ対象データと同じデータをプリフェッチ対象とするプリフェッチ命令が前記ロードバッファ部に格納されていない場合、受け取った前記プリフェッチ命令を前記主記憶装置に出力する第１の制御部と、
前記演算処理部から前記プリフェッチ命令を受け取るとともに、受け取った前記プリフェッチ命令のプリフェッチ対象データと同じデータをプリフェッチ対象とするプリフェッチ命令が前記ロードバッファ部に格納されている場合、受け取った前記プリフェッチ命令による前記主記憶装置からプリフェッチ対象データを読み出す処理を完了する第２の制御部と、
前記演算処理部から受け取った前記プリフェッチ命令を前記第１の制御部のみに出力する処理、及び、受け取った前記プリフェッチ命令を前記第１の制御部と前記第２の制御部とに出力する処理のいずれかを選択する第３の制御部と、
を有することを特徴とする演算処理装置。
【請求項２】
前記第１の制御部は、前記第１の制御部が受け取ったプリフェッチ命令と、前記ロードバッファ部に格納されるプリフェッチ命令との一致を確認しないサイクルにおいて、前記第２の制御部は、前記第２の制御部が前記第１の制御部から受け取ったプリフェッチ命令と、前記ロードバッファに格納されたプリフェッチ命令との一致を確認することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記第１の制御部は、前記キャッシュメモリ部に保持されるデータの読み出しサイクルと異なるサイクルにおいて、前記キャッシュメモリ部に格納されるデータの書き込みを実行することを特徴とする請求項１又は２に記載の演算処理装置。
【請求項４】
前記キャッシュメモリ部は、それぞれがメモリバンクに分けられた第３の記憶部及び第４の記憶部を有し、
前記ロードバッファ部は、前記第３の記憶部に保持されるデータをプリフェッチ対象とするプリフェッチ命令を格納する第５の記憶部と、前記第４の記憶部に格納されるデータをプリフェッチ対象とするプリフェッチ命令を格納する第６の記憶部とを有し、
前記第１の制御部は、前記第３の記憶部に保持されるプリフェッチ対象データの読み出しサイクルと同じサイクルで、前記第４の記憶部に保持されるプリフェッチ対象データの書き込みを実行することを特徴とする請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
前記第１の制御部による命令の完了通知と、前記第２の制御部による命令の完了通知を同じサイクルで行うことを特徴とする請求項１〜４のいずれか１項に記載の演算処理装置。
【請求項６】
前記第３の制御部は、前記第２の制御部がプリフェッチ命令を中止済又は処理中の場合、前記プリフェッチ命令を第２の制御部には出力せず、前記プリフェッチ命令を第１の制御部に出力することを特徴とする請求項１〜５のいずれか１項に記載の演算処理装置。
【請求項７】
前記第３の制御部は、前記プリフェッチ命令を前記第１の制御部と前記第２の制御部とに出力し、前記プリフェッチ命令を処理する旨の制御信号を前記第１の制御部又は前記第２の制御部のいずれかに出力することで、前記制御信号を出力した前記第１の制御部又は前記第２の制御部のいずれかに前記プリフェッチ命令の処理を実行させることを特徴とする請求項１〜６のいずれか１項に記載の演算処理装置。
【請求項８】
前記第１の制御部が前記キャッシュメモリ部におけるプリフェッチ命令が対象とするプリフェッチ対象データが存在することを検出した場合、前記第１の制御部は検出されたデータのアドレスを前記ロードバッファ部に格納し、
前記プリフェッチ命令のプリフェッチ対象データのアドレスと前記ロードバッファ部に格納された検出されたデータのアドレスが同じ場合、前記第２の制御部は、前記プリフェッチ命令による主記憶装置から読み出す処理を完了することを特徴とする請求項１〜７のいずれか１項に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関する。
【背景技術】
【０００２】
近年、プロセッサの処理速度の高速化のために、パイプライン方式を用いたプロセッサが使用されている。プロセッサとしては、例えば、ＣＰＵ（Ｃｅｎｔｏｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がある。パイプライン方式において、プロセッサはその機能を実現する複数のパイプライン（命令制御パイプライン、演算パイプライン、分岐制御パイプライン等）を有する。又、各パイプラインは、それぞれ複数のステージに分割されている。各ステージは、所定の工程を実現する回路ユニットを含み、動作周波数の逆数であるサイクルタイムと呼ばれる期間内に、各ステージに割り当てられた所定の工程を終了するように動作する。そして、先工程に係るステージの出力信号は、例えば、後工程に係るステージの入力信号として使用される。【０００３】
また、プロセッサの動作周波数の向上により、プロセッサからメモリへのアクセス時間は、プロセッサ内の処理と比して相対的に長い。そのため、プロセッサは、プロセッサから主記憶装置へのアクセス時間を短縮するために、キャッシュメモリと言う小容量の高速メモリを搭載している。【０００４】
キャッシュメモリは、主記憶装置の上位階層に配置され、主記憶装置が記憶するデータの一部を保持する。キャッシュメモリは、プロセッサに内蔵されている等、主記憶装置よりプロセッサに近い位置にある。そのため、プロセッサが、キャッシュメモリにロードされているデータにアクセスする場合（以下、「キャッシュヒット」と言う）、プロセッサは短時間で対象データにアクセスすることが出来る。一方、プロセッサが、キャッシュメモリにロードされていないデータにアクセスする場合（以下、「キャッシュミス」と言う）、キャッシュメモリの下位階層にあるメモリからデータを読み出すため、対象データへのアクセス時間は長くなる。そのため、キャッシュミスが生じないように、キャッシュメモリのメモリコントローラは、プロセッサからのアクセス頻度が高いデータをキャッシュメモリに保持し、アクセス頻度が低いデータをキャッシュメモリから下位階層のメモリに追い出すように動作する。【０００５】
さらに、プロセッサは、演算処理を実行する演算部と、演算部がキャッシュメモリから受け取るデータを保持するレジスタを有する。レジスタは、例えば、キャッシュメモリの上位階層に配置され、キャッシュメモリより少量で高速な記憶装置である。【０００６】
演算部は、キャッシュメモリからレジスタにデータをロードするロード命令を発する前に、ロード命令に基づいて主記憶装置からキャッシュメモリにデータをロードするプリフェッチ命令をメモリコントローラに出力する。演算部がロード命令に先行してプリフェッチ命令をメモリコントローラに出力することで、演算部が、データをキャッシュメモリからロードするときキャッシュミスを生じないため、データアクセス時間が短縮する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−４００９０号公報
【特許文献２】特開２０００−３３９１５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
演算部は、キャッシュメモリからレジスタへと一旦データを読み込んでから各種の処理を行なっている。レジスタに保持されるデータ容量に対して、キャッシュメモリの１つのキャッシュラインに保持されるデータ容量は大きい。例えば、１つのキャッシュラインには、アドレスで特定されるデータが複数保持される。【０００９】
ロード命令は、キャッシュメモリの１つのキャッシュラインに保持される全てのデータをレジスタにロードする命令ではなく、アドレス単位で特定されたデータをキャッシュラインからレジスタにロードする命令である。演算部によりレジスタに出されるロード命令は、１アドレス単位でデータをレジスタにロードする命令であるのに対して、プリフェッチ命令は、主記憶装置からキャッシュメモリへのロードに相当するので、キャッシュライン単位でデータをロードする命令である。そのため、例えば、２つのロード命令が、１つのキャッシュラインに保持されるアドレスを対象として出される場合、２つのロード命令に基づいて生成される２つのプリフェッチ命令は、同じキャッシュラインに保持されるデータを２回主記憶装置から読み出そうとする。【００１０】
この場合、最初のプリフェッチ命令により主記憶装置からデータはロードされるため、次のプリフェッチ命令は、キャッシュヒットにより主記憶装置からデータのロードは実行されない。キャッシュヒット判定は、キャッシュコントローラ（図１でいうメモリコントローラとは違う、図１でいえば第１パイプライン）におけるパイプライン処理により実行される。キャッシュメモリに主記憶装置からデータがロードされた後も、プリフェッチ命令が出力された場合、キャッシュコントローラは、キャッシュヒット判定を行う。キャッシュメモリにデータが格納されても、格納データに対して複数のプリフェッチ命令が出されると、パイプライン処理において他のストア命令や、ロード命令の実行待ちが生じて、主記憶装置へのアクセス時間が延長化する。【００１１】
開示の演算処理装置は、主記憶装置へのアクセス時間を短縮することを目的とする。
【課題を解決するための手段】
【００１２】
開示の演算処理装置は、主記憶装置に接続される演算処理装置であって、主記憶装置に格納されるデータの一部を格納する第１の記憶部と、主記憶装置に格納されるデータを、第１の記憶部に格納する命令を出力する演算処理部と、命令を受け取るとともに、第１の記憶部が主記憶装置から命令の対象データを受け取るまで、命令を格納する第２の記憶部と、演算処理部から命令を受け取るとともに、命令の対象データが第１の記憶部に格納されている場合、対象データを第１の記憶部から読み出して演算処理部に出力する一方、命令の対象データが第１の記憶部に格納されず且つ命令の対象データと同じデータを対象とする命令が第２の記憶部に無い場合、命令を主記憶装置に出力する第１の制御部と、演算処理部から命令を受け取るとともに、命令の対象データと同じデータを対象とする命令が第２の記憶部に格納されている場合、命令による主記憶装置から対象データを読み出す処理を完了する第２の制御部と、を有する。
【発明の効果】
【００１３】
開示の演算処理装置は、主記憶装置へのアクセス時間を短縮するという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】演算処理装置のハードウェア構成の一例を示す図である。
【図２】プロセッサコアのハードウェア構成の一例を示す図である。
【図３】ロード命令又はプリフェッチ命令が対象とするメモリ容量の一例を示す図である。
【図４】バンク分け無しＬ２キャッシュＲＡＭのハードウェア構成の一例を示す図である。
【図５】バンク分け有りＬ２キャッシュＲＡＭのハードウェア構成の一例を示す図である。
【図６】プリフェッチポートの一例を示す図である。
【図７】パイプライン選択部の一例を示す図である。
【図８】パイプライン選択部の一例を示す図である。
【図９Ａ】ロードバッファの一例を示す図である。
【図９Ｂ】ロードバッファの一例を示す図である。
【図１０Ａ】ヒットバッファの一例を示す図である。
【図１０Ｂ】ヒットバッファの一例を示す図である。
【図１１】第１及び第２パイプラインによるパイプライン制御の一例を示すタイムチャートである。
【図１２】バンク分けされたＬ２キャッシュＲＡＭに対する第１及び第２パイプラインによるパイプライン制御の一例を示すタイムチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、プロセッサとしての演算処理装置の実施形態を説明する。
【００１６】
＜演算処理装置のハードウェア構成＞
図１は、演算処理装置のハードウェア構成の一例を示す図である。図１に示す演算処理装置１００は、演算処理部としてのプロセッサコア（Ｐｒｏｃｅｓｓｏｒ  Ｃｏｒｅ）１０、Ｌ２キャッシュコントローラ（Ｌｅｖｅｌ−２  Ｃａｃｈｅ  Ｃｏｎｔｒｏｌｌｅｒ）９０、Ｌ２タグＲＡＭ（Ｌｅｖｅｌ−２  Ｔａｇ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１４０、Ｌ２データＲＡＭ（Ｌｅｖｅｌ−２  Ｄａｔａ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２０、ロードバッファ（ＬＢ，Ｌｏａｄ  Ｂｕｆｆｅｒ）１６０、及びメモリコントローラ（ＭＣ、Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ）２００を有する。演算処理装置１００は、図１に示すように、ヒットバッファ（ＨＢ）１７０を有してもよい。プロセッサコア１０は、ＭＣ２００を介して主記憶装置２２０と接続する。なお、Ｌ２データＲＡＭ１２０及びＬ２タグＲＡＭ１４０は、本明細書において総称して「Ｌ２キャッシュＲＡＭ１１０」と参照される。
また、図１の演算処理装置１００には、データ入力バッファ３２とデータ出力バッファ３４とが設けられている。データ入力バッファ３２は、主記憶装置２２あるいはＬ２キャッシュＲＡＭ１１０から読み出してプロセッサコア１０に入力するデータをバッファリングするために用いられる。一方データ出力バッファ３４は、プロセッサコア１０から出力されたデータをバッファリングするために用いられる。データ出力バッファ３４にバッファリングされたデータは、Ｌ２キャッシュＲＡＭ１１０あるいは主記憶装置２２に転送される。
なお、図１に図示した各部の説明は、他の図面を用いた各部の詳細説明とあわせて行なう。
【００１７】
［プロセッサコア］
図２は、プロセッサコアの構成の一例を示す図である。プロセッサコア１０は、命令部（ＩＵ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｕｎｉｔ）１２、実行部（ＥＵ：Ｅｘｅｃｕｔｉｏｎ  Ｕｎｉｔ）１４、Ｌ１キャッシュコントローラ１８、Ｌ１キャッシュＲＡＭ１６（Ｌｅｖｅｌ−１  Ｃａｃｈｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を有する。
Ｌ１キャッシュＲＡＭ１６は、命令やデータなどを保持する。Ｌ１キャッシュコントローラ１８は、Ｌ１キャッシュＲＡＭ１６のアクセスを制御する。なお、図１に示されるプロセッサコアの個数は１個であるが、プロセッサコアは図１に示される個数に制限されることなく、演算処理装置１００は、複数個のプロセッサコアを有してもよい。
【００１８】
［プロセッサコア：命令部］
命令部１２は、命令パイプライン１５を介してＬ１キャッシュＲＡＭ１６から読み出した命令をデコードし、デコードした命令を、命令パイプライン１５を介して実行部１４に出力する。例えば、命令部１２は、命令パイプライン１５を介して「ロード命令」又は「ストア命令」（図示「ロード命令等」）をＬ１キャッシュコントローラ１８に供給する。命令部１２からＬ１キャッシュコントローラ１８に供給される命令が、例えば、「ロード命令」である場合、Ｌ１キャッシュコントローラ１８は、「ロード命令」により指定される命令をＬ１キャッシュＲＡＭ１６から読み出す。「ロード命令」によりＬ１キャッシュＲＡＭ１６から読み出された命令は、命令部１２に供給される。Ｌ１キャッシュＲＡＭ１６から読み出される命令は、例えば、データ転送命令、算術演算命令である。データ転送命令は、例えば、Ｌ１キャッシュＲＡＭ１６へのロード（ＬＤ）命令、ストア（ＳＴ）命令、プリフェッチ（ＰＦ）命令、及び置換（ＭＯ）命令を含む命令である。命令部１２は、Ｌ１キャッシュＲＡＭ１６から読み出した命令をデコードし、デコードした命令（図２に示すＤ命令）とともに、命令の実行に使用されるオペランドを格納するレジスタ１３及び命令実行の結果を格納するレジスタ１３を特定するレジスタアドレスを、「データ」として命令パイプライン１５を介して実行部１４に供給する。
【００１９】
［プロセッサコア：実行部］
実行部１４は、レジスタアドレスで特定されるレジスタ１３からオペランドを取り出し、命令部１２がデコードした命令でオペランドを演算する。実行部１４は、実行する命令がデータ転送命令である場合、例えば、オペランドとしてのレジスタの値から仮想アドレスを生成する。実行部１４は、実行する命令がデータ転送命令である場合、例えば、ロード命令、ストア命令又はＰＦ命令（図示「ロード命令等」）を、対象となる仮想アドレスとともに命令パイプライン１５を介してＬ１キャッシュコントローラ１８に供給する。実行部１４は、命令を実行すると、演算結果を命令パイプライン１５に供給し、演算結果は命令パイプライン１５を介してＬ１キャッシュＲＡＭ１６に格納される。
【００２０】
［プロセッサコア：Ｌ１キャッシュメモリ］
Ｌ１キャッシュＲＡＭ１６は、図示しないＴｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ（ＴＬＢ）、Ｌ１タグＲＡＭ、及びＬ１データＲＡＭを含む。Ｌ１キャッシュコントローラ１８は、実行部１４から供給される仮想アドレスでＬ１キャッシュＲＡＭ１６のラインを特定し、ＴＬＢ及びＬ１キャッシュＲＡＭ１６のラインからそれぞれ読み出される物理アドレス（ＰＡ：Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ）を仮想アドレスと比較することで、キャッシュミス又はキャッシュヒットを判断する。
【００２１】
［プロセッサコア：Ｌ１キャッシュコントローラ］
Ｌ１キャッシュコントローラ１８は、Ｌ１キャッシュＲＡＭ１６でキャッシュミスが生じると、ＬＤ命令やＰＦ命令を、Ｌ２キャッシュコントローラ９０に出力する。そして、プロセッサコア１０は、例えば、ＬＤ命令によるデータ、又は、ＰＦ命令の完了通知を、Ｌ２キャッシュコントローラ９０から受け取る。
【００２２】
［レジスタとキャッシュライン］
図３は、ＬＤ命令又はＰＦ命令が対象とするレジスタとＬ２キャッシュＲＡＭの構成の一例を示す図である。
【００２３】
図３に示すレジスタ１３ａは、図２に示したレジスタ１３の記憶領域の一例である。レジスタ１３ａは、例えば、アドレスＲ０〜Ｒ１５で特定される複数のレジスタを有する。レジスタ１３ａの１アドレスに対応するレジスタの記憶容量は、図３の例では８バイトである。
【００２４】
図３に図示される１６ａは、Ｌ１キャッシュＲＡＭ１６に格納される情報の構成を示している。図３に示すＡ０（ｉ）、Ａ１（ｉ）・・・は、Ｌ１キャッシュＲＡＭのアドレスを示す。情報１６ａの１単位は、図３の例では８バイトである。レジスタへのロード命令が発行されると、実行部１４はＬ１キャッシュＲＡＭ１６に格納されている情報１６ａを、８バイト単位でレジスタ１３ａにロードする。
【００２５】
図３に示すキャッシュライン１１１ａは、図１に示すＬ２データＲＡＭ１２０のキャッシュラインである。Ｌ２データＲＡＭ１２０の１キャッシュラインの記憶容量は、図３の例では１２８バイトである。図３に示す例では、１つのレジスタの記憶容量は８バイトであるので、１キャッシュラインは、１６個のレジスタ分のデータを格納することができる。
【００２６】
Ｌ２キャッシュＲＡＭへのプリフェッチ命令が発行されると、主記憶内のデータがＬ２データＲＡＭ１２０のキャッシュライン１１１ａに書き込まれる。
なお、図３の例では、Ａ０（ｉ＋Ｍ）、Ａ０（ｉ＋Ｍ）＋３２Ｂ、Ａ０（ｉ＋Ｍ）＋６４Ｂ・・・というように１キャッシュラインは３２バイト単位の情報に分割されている。
【００２７】
［ＬＤ命令又はＰＦ命令出力用のプログラム］
実行部１４は、プログラムを実行することで、ＬＤ命令によるロード対象となるデータを前もって、Ｌ２キャッシュＲＡＭ１１０にプリフェッチする。ＬＤ命令でレジスタ１３ａに格納する予定のデータを、Ｌ２キャッシュＲＡＭ１１０のキャッシュラインに１２８バイト単位でプリフェッチするケースでは、１回のプリフェッチで、アドレスＲ０〜Ｒ１５のレジスタ用のデータをキャッシュライン１１１ａに格納することができる。
【００２８】
しかしながら、１つのキャッシュラインへのプリフェッチを１回で終わらせるようにＰＦ命令を出力することは、実行部１４が実行するプログラムに特殊な演算や分岐条件を加えることで行われるため、実行部１４による実行効率を落とすことになる。
【００２９】
下記プログラムＡは、ＬＤ命令及びＰＦ命令を含むプログラムの一例である。
プログラムＡ
／／  ＬＯＯＰに入る前にｉ＝０のデータをロードする。
（Ｓ０）  アドレスＡ０（０）のデータをロードしＲ４に格納する；
（Ｓ１）  アドレスＡ１（０）のデータをロードしＲ５に格納する；
（Ｓ２）  アドレスＡ２（０）のデータをロードしＲ６に格納する；
（Ｓ３）  アドレスＡ３（０）のデータをロードしＲ７に格納する；
（ループ部）
（Ｓ４）  ＬＯＯＰ：    ／／  ｆｏｒ  （ｉ  ＝  ０  ＜  Ｎ  ；  ｉ＋＋）
（Ｓ５）  １ループ前にアドレスＡ０（ｉ）からロードしたＲ４のデータをＲ０に移動；
（Ｓ６）  １ループ前にアドレスＡ１（ｉ）からロードしたＲ５のデータをＲ１に移動；
（Ｓ７）  １ループ前にアドレスＡ２（ｉ）からロードしたＲ６のデータをＲ２に移動；
（Ｓ８）  １ループ前にアドレスＡ３（ｉ）からロードしたＲ７のデータをＲ３に移動；
（Ｓ９）  Ｍループ先のアドレスＡ０（ｉ＋Ｍ）  のデータをＬ２キャッシュＲＡＭ１１０にプリフェッチ；  
（Ｓ１０）  Ｍループ先のアドレスＡ４（ｉ＋Ｍ）  のデータをＬ２キャッシュＲＡＭ１１０にプリフェッチ；  
（Ｓ１１）  １ループ先のアドレスＡ０（ｉ＋１）のデータをロードしＲ４に格納する；
（Ｓ１２）  １ループ先のアドレスＡ１（ｉ＋１）のデータをロードしＲ５に格納する；
（Ｓ１３）  １ループ先のアドレスＡ２（ｉ＋１）のデータをロードしＲ６に格納する；
（Ｓ１４）  １ループ先のアドレスＡ３（ｉ＋１）のデータをロードしＲ７に格納する；
（Ｓ１５）  Ｒ０，Ｒ１，Ｒ２，Ｒ３を参照して演算し、演算結果をＲ８に格納する；
（Ｓ１６）  演算結果Ｒ８をアドレスＡ４（ｉ）にストアする；
（Ｓ１７）  ＧＯＴＯ  ＬＯＯＰ  ；    ／／  ｉ＝Ｎ−１ならばＬＯＯＰを抜ける
（終了部）    ／／  Ｎ周目
（Ｓ１８）  ＬＯＯＰの最後のループにアドレスＡ０（Ｎ）からロードしたＲ４のデータをＲ０に移動；
（Ｓ１９）  ＬＯＯＰの最後のループにアドレスＡ１（Ｎ）からロードしたＲ５のデータをＲ１に移動；
（Ｓ２０）  ＬＯＯＰの最後のループにアドレスＡ２（Ｎ）からロードしたＲ６のデータをＲ２に移動；
（Ｓ２１）  ＬＯＯＰの最後のループにアドレスＡ３（Ｎ）からロードしたＲ７のデータをＲ３に移動；
（Ｓ２２）  Ｒ０，Ｒ１，Ｒ２，Ｒ３を参照して演算し、演算結果をＲ８に格納する；
（Ｓ２３）  演算結果Ｒ３をアドレスＡ４（Ｎ）に格納する；
【００３０】
プログラムＡは、ループ処理によりＬＤ命令を実行し、ＬＤ命令によりレジスタに格納されたデータに対して演算処理を実行し、演算処理結果をレジスタにストアするプログラムである。プログラムＡは、ある連続したアドレス空間のデータを連続して参照し、参照したデータを使用して演算を行い、その演算結果を別なアドレス領域に連続して格納する処理を行う。このアドレス空間は、プログラムからは通常仮想アドレス（ＶＡ）としてアクセスされるものである。仮想アドレスはＭＭＵ（ＴＬＢ）で物理アドレス（ＰＡ）に変換され、Ｌ２キャッシュはＰＡによりアクセスされる。一般に、仮想アドレスが連続であっても物理アドレスが連続しているとは限らない。しかし、近年においてはメモリのコストが著しく低下したこともあり、メモリの使用効率よりも性能を重視して４ＭＢといった比較的大きなページサイズが採用されている事情もあるため、物理アドレス空間においても連続していることを前提として考えても差し支えはない状況になっている。
【００３１】
ここで、プログラムが参照する参照するアドレスは、Ａ０（０），  Ａ１（０），  Ａ２（０），  Ａ３（０），  Ａ０（１），  Ａ１（１），  Ａ２（１），  Ａ３（１），  ．．．  ，  Ａ０（Ｎ），  Ａ１（Ｎ），  Ａ２（Ｎ）の範囲であるものとする。
また、これらのアドレスは、以下のような一定の間隔（８バイト間隔）で並んでいるものとする。
アドレスＡ０（ｉ）  ＝Ａ０（ｉ）＋０Ｂ
アドレスＡ１（ｉ）  ＝Ａ０（ｉ）＋８Ｂ
アドレスＡ２（ｉ）  ＝Ａ０（ｉ）＋１６Ｂ
アドレスＡ３（ｉ）  ＝Ａ０（ｉ）＋２４Ｂ
アドレスＡ０（ｉ＋１）＝Ａ０（ｉ）＋３２Ｂ
アドレスＡ１（ｉ＋１）＝Ａ０（ｉ）＋４０Ｂ
アドレスＡ２（ｉ＋１）＝Ａ０（ｉ）＋４８Ｂ
アドレスＡ３（ｉ＋１）＝Ａ０（ｉ）＋５６Ｂ
アドレスＡ０（ｉ＋２）＝Ａ０（ｉ）＋６４Ｂ
・
・
・
アドレスＡ０（ｉ＋３）＝Ａ０（ｉ）＋９６Ｂ
・
・
・
アドレスＡ０（ｉ＋４）＝Ａ０（ｉ）＋１２８Ｂ
このように、プログラムはアドレスＡ０（ｉ）から連続してデータをロードする。ここで。１ループ処理を実行するたびに４アドレス分（Ａ０（ｉ）〜Ａ３（ｉ））、つまり３２バイト分のデータがロードされる。そして、４周先にロード対象となるアドレスＡ０（ｉ＋４）はＡ０（ｉ）＋１２８Ｂであるため、ループ４周でキャッシュライン１２８Ｂ分をアクセスすることになる。
一方、プリフェッチは、ループ４周の処理が実行される間に、
アドレスＡ０（ｉ＋Ｍ）
アドレスＡ０（ｉ＋１＋Ｍ）  ＝Ａ０（Ｉ＋Ｍ）＋３２Ｂ
アドレスＡ０（ｉ＋２＋Ｍ）  ＝Ａ０（Ｉ＋Ｍ）＋６４Ｂ
アドレスＡ０（ｉ＋３＋Ｍ）  ＝Ａ０（Ｉ＋Ｍ）＋９６Ｂ
のように４回発行される。
【００３２】
ステップＳ０〜Ｓ３には、ループ処理に入る前にｉ＝０のデータ、つまりアドレスＡ０（０）〜アドレスＡ３（０）のデータをロードして、レジスタＲ４〜Ｒ７に格納する処理が定義される。ループ処理の１周目では、ｉ＝０に対するアドレスＡ０（０），Ａ１（０），Ａ２（０），Ａ３（０）のデータがロードされていない。そのため、ループ処理に入る前に、Ｓ０〜Ｓ３でこれらアドレスのデータをロードする。
【００３３】
ステップＳ４〜Ｓ１７には、ループ処理が定義される。ステップＳ５〜Ｓ８では、１ループ前にアドレスＡ０（ｉ）〜Ａ３（ｉ）からロードしてレジスタＲ４〜Ｒ７に格納したデータを、レジスタＲ０〜Ｒ３に移動する処理が定義されている。Ｓ１１〜１４には、アドレスＡ０（ｉ＋１）〜Ａ３（ｉ＋１）のデータをロードして、レジスタＲ４〜Ｒ７に格納するＬＤ命令が定義される。ループ文（Ｓ４）によって、アドレスＡ０（ｉ）〜Ａ３（ｉ）（ｉ＝０〜Ｎ）に格納されたデータが、アドレスＲ４〜Ｒ７のレジスタに順次格納される。ｉはインクリメントされるため、ステップＳ５〜Ｓ８、Ｓ１１〜１４の実行によって、アドレスＡ０（ｉ）〜Ａ３（ｉ）に格納されたデータは、１ループの処理実行毎にアドレスＲ４〜Ｒ７のレジスタに格納される。
【００３４】
例えば、アドレスＡ０（ｉ）〜Ａ３（ｉ）で特定されるデータが、例えば、図３のキャッシュライン１６ａに示すように、８バイト単位で配置されるものとする。Ｓ１１〜１４に示されるＬＤ命令の格納対象アドレスＲ４〜Ｒ７のレジスタ個数は、４つであるため、ループ処理１回で、８Ｂ×４＝３２Ｂのデータが、アドレスＡ０（ｉ）〜Ａ３（ｉ）からアドレスＲ４〜Ｒ７のレジスタにロードされる。
【００３５】
ステップＳ９では、Ｍループ先のアドレスＡ０（ｉ＋Ｍ）のデータを主記憶装置２２０からＬ２キャッシュＲＡＭ１１０にプリフェッチする。プリフェッチ命令は、ＬＤ命令の対象となるデータを先行予測して、主記憶装置２２０からＬ２キャッシュＲＡＭ１１０にロードする命令である。ステップＳ９では、ループ処理（Ｓ４〜Ｓ１７）中でＭ周先にロード及びストアされると予測されるアドレスのデータをプリフェッチする。Ｍは、以下の式１により決定される。
【００３６】
Ｍ×Ｔ１≧Ｔ２  ・・・（１）
Ｔ１：ループ処理を１周実行する時間（クロックサイクル数）
Ｔ２：ＰＦ命令発行からＬ２キャッシュにデータが格納されるまでの時間（クロックサイクル数）
【００３７】
式１を満たす十分大きな値をＭとして選択することによって、主記憶装置２２０へのアクセス時間を隠蔽するというプリフェッチの効果を最大にする。
【００３８】
ステップＳ９のプリフェッチは、Ｓ１１〜Ｓ１４でのロード処理に必要なデータが対象となる。つまり、プログラムＡのＳ９では、１回のＰＦ命令実行により８Ｂ×４＝３２Ｂのデータのプリフェッチを行う。図３のキャッシュライン１１１ａに示すように、Ｌ２データＲＡＭの１キャッシュラインは１２８Ｂのデータ容量であるため、プリフェッチが１２８Ｂ単位で行なわれるとすると、１度のＰＦ命令実行でＬ２データＲＡＭの１キャッシュラインに相当するデータが主記憶装置２２０からロードされる。しかし、プログラムＡでは、１ループ実行毎に、Ｓ９に示す１回のＰＦ命令が実行される。そのため、図３のキャッシュライン１１１ａに示すような１２８Ｂの同一キャッシュラインに対して４つのプリフェッチ命令ＰＦ１〜ＰＦ４が重複して発行される。しかし、１回のプリフェッチは１キャッシュライン、つまり１２８バイトのライン全体に有効であるため、結果的に３回分の余計なプリフェッチが行われることになる。
【００３９】
余計なプリフェッチを行なわないようにプログラムを用意するという対応も考えられるが、この場合、まずプログラムの作成者がキャッシュラインのラインサイズ（図３に示す例では１２８Ｂ）を知っていなければならない。ラインサイズを知っていたとした場合、１ラインつまり１２８バイト単位でプリフェッチを行うのであれば、１ループで３２バイトのデータがロードされる状況では、にループ内でループ変数ｉを４で割った剰余が０である場合のみプリフェッチを発行する命令を加える対応を考えることで、プリフェッチ命令を４ループに１回の割合で発行させることが可能となる。しかし、このような命令は、ループ内に剰余のための演算や条件分岐命令を加えなければならないため、１ループ毎にＰＦ命令を実行する場合よりも、命令の実行効率を落としてしまう。
【００４０】
ステップＳ１０は、ストア用のプリフェッチである。アドレスＡ４（ｉ＋Ｍ）はストアアドレスを示している。本実施例では、演算結果をストアするアドレスは、Ａ４（０），Ａ４（１），  ．．．  ，Ａ４（Ｎ）の範囲であるものとする。
また、ストアアドレスは以下のような間隔で設定されているものとする。
アドレスＡ４（ｉ）    ＝Ａ０（ｉ）＋０Ｂ
アドレスＡ４（ｉ＋１）  ＝Ａ０（ｉ）＋８Ｂ
アドレスＡ４（ｉ＋２）  ＝Ａ０（ｉ）＋１６Ｂ
・
・
・
・
アドレスＡ４（ｉ＋１６）＝Ａ０（ｉ）＋１２８Ｂ
このように、プログラムＡでは、アドレスＡ４（ｉ）から連続して演算結果をストアする。また、１６周先のアドレスＡ４（ｉ＋１６）はＡ４（ｉ）＋１２８Ｂであり、ループ１６周でキャッシュライン１２８Ｂ分をアクセスすることになる。
また、１６周のループ処理の間に、
アドレスＡ０（ｉ＋Ｍ）
アドレスＡ０（ｉ＋１＋Ｍ）  ＝Ａ０（Ｉ＋Ｍ）＋８Ｂ
アドレスＡ０（ｉ＋２＋Ｍ）  ＝Ａ０（Ｉ＋Ｍ）＋１６Ｂ
・
・
・
アドレスＡ０（ｉ＋１５＋Ｍ）  ＝Ａ０（Ｉ＋Ｍ）＋１２８Ｂのように１６回プリフェッチ命令が発行される。
【００４１】
ストアの場合、アドレスが８バイト単位で設定されていることもあり、１ループで１つのレジスタへのデータ書き込みが行われる。そのため、図３に示すように、８バイトのレジスタへのストアの場合、１ループで８バイト単位のストア処理が実行される。一方、ストア用のプリフェッチ（Ｓ１０）もまた、１ループで１回実行される。図３のキャッシュライン１１１ａに示すように、Ｌ２データＲＡＭの１キャッシュラインは１２８Ｂのデータ容量であるため、プリフェッチ単位が１２８バイトであれば１度のＰＦ命令実行で１２８Ｂのデータ容量が主記憶装置２２０からロードされる。しかし、プログラムＡでは、１ループ実行で１回のＰＦ命令が実行されるため、図３の１１１ａに示すような１２８Ｂの同一ラインに対して１６回のプリフェッチが発行される。そのため、プリフェッチサイズが１２８Ｂの場合と比較して、１５回余計にプリフェッチ命令が発行されることになる。
【００４２】
ループ部のＳ１１〜Ｓ１４で実行されるロード動作と、１周前にロードしたデータを使用した演算処理は互いに依存関係がないために並列に処理することが可能であり、これらの処理を並列に実行することで、Ｌ１キャッシュＲＡＭ１６をキャッシュミスしたことでＬ２キャッシュＲＡＭ１１０にアクセスする時間を隠蔽する。プログラムＡでは、Ｓ１５に、レジスタＲ０〜Ｒ３に格納されたデータに基づく演算を実行し、演算結果をレジスタＲ８に格納する処理が示されている。また、Ｓ１６で、レジスタＲ８に格納された演算結果を、ストアアドレスＡ４（ｉ）にストアする。
【００４３】
Ｓ１７では、ｉがＮ−１であるか否かが判定される。ｉがＮ−１でなければ、処理をＳ４に戻し、ループ処理を継続する。一方、ｉ＝Ｎ−１である場合、ループ処理を抜けてＳ１８以降の処理を実行する。
【００４４】
Ｓ１８〜Ｓ２３では、アドレスＡ０（Ｎ）〜アドレスＡ３（Ｎ）からロードしてレジスタＲ４〜Ｒ７に格納したデータを、レジスタＲ０〜Ｒ３に移動する処理が示されている。アドレスＡ０（Ｎ）〜Ａ３（Ｎ）は参照範囲の最終アドレスであり、ｉ＝Ｎ＋１のアドレスのロードは不要である。その後、Ｓ２３でレジスタＲ０〜Ｒ３に移動したデータを、Ｓ２４で参照して演算し、演算結果をレジスタＲ８に格納する。そして、Ｓ２４の演算結果を、Ｓ２５でストアアドレスＡ４（Ｎ）に格納する。
【００４５】
図３及びプログラムＡを用いて説明したように、既にプリフェッチ対象となったキャッシュラインに対して複数回プリフェッチする処理が実行される場合、このような不要なＰＦ命令が、Ｌ２キャッシュコントローラの第１パイプライン７０の渋滞を招く。そこで、本実施形態では、第２パイプライン８０を用いて渋滞を回避する。
【００４６】
［Ｌ２キャッシュＲＡＭ  バンク分け無しタイプ］
図４は、バンク分けがされていないＬ２キャッシュＲＡＭの一例を示す図である。図４に示されるＬ２キャッシュＲＡＭ１１０は、例えば、４ウェイのセットアソシアティブ方式のキャッシュメモリである。図４に示されるように、Ｌ２キャッシュＲＡＭ１１０は、複数のセットで構成されており、各セットは、キャッシュウェイ１０１ａ〜１０１ｄに分けて管理される。
【００４７】
図４に示されるＬ２キャッシュＲＡＭ１１０は、Ｌ２キャッシュＲＡＭ１１０が保持するデータを、キャッシュライン１０３−１〜１０３−ｎと言う単位で管理する。図４に示す３０は、プロセッサコアから出力される要求命令を示す。要求命令３０は、例えば、４７ビットであり、上位２８ビット（４６−１９＋１ビット）が物理アドレスのうちのタグアドレス、上位１８〜７ビットの１２ビット（１８−７＋１ビット）が物理アドレスのうちのインデックスアドレス（ＩＡ：Ｉｎｄｅｘ  Ａｄｄｒｅｓｓ）、下位７ビットは物理アドレスのうちの１ライン１２８バイト内のどこかを示すアドレスである。
【００４８】
各キャッシュラインは、例えば、プロセッサコア１０からのＬＤ命令又はＰＦ命令に含まれるＶＡ（仮想アドレス）をＬ１キャッシュコントローラが変換して得られるＰＡ（物理アドレス）により特定される。
【００４９】
Ｌ２キャッシュＲＡＭ１１０は、Ｌ２タグＲＡＭ１４０、Ｌ２データＲＡＭ１２０、ライトアンプ１２３ａ〜１２３ｄ、１４３ａ〜１４３ｄ、センスアンプ１２４ａ〜１２４ｄ、１４４ａ〜１３４ｄ、比較回路１３１ａ〜１３１ｄ及び選択回路１２１、１２２、１４１、１４２を含む。Ｌ２タグＲＡＭ１４０、及びＬ２データＲＡＭ１２０はそれぞれ、キャッシュライン１０３−１〜１０３−ｎに対応した複数のエントリを有する。Ｌ２タグＲＡＭ１４０の各エントリには、「タグ」と呼ばれる物理アドレスの一部が保持される。「タグ」は、図４に示す要求命令３０のタグアドレスに相当する。図４に例示されるＬ２キャッシュＲＡＭ１１０は、４つのウェイを有するため、連想度は「４」である。したがって、１つのインデックスアドレスにより、４つのキャッシュライン及び４つのタグが特定される。
Ｌ２キャッシュＲＡＭ１１０はまた、選択回路１３０を備える。選択回路１３０には、センスアンプ１２４ａ〜１２４ｄを介したＬ２データＲＡＭ１２０からの出力が入力し、比較回路１３１ａ〜１３１ｄから出力されるヒットウェイ信号の値に応じて、いずれかの入力を選択して出力する。
【００５０】
Ｌ２データＲＡＭ１２０の各エントリには、Ｌ２タグＲＡＭ１４０の「タグ」により特定される「データ」が保持される。
【００５１】
Ｌ２タグＲＡＭ１４０には、インデックスアドレスＩＡが供給される。そして、供給されたインデックスアドレスに対応する各ウェイ１０１ａ〜１０１ｄのエントリ、つまりタグアドレスが、各ウェイに対応する比較回路１３１ａ〜１３１ｄに出力される。
【００５２】
比較回路１３１ａ〜１３１ｄはそれぞれ、プロセッサコア１０から送信されたタグアドレスＰＡと、Ｌ２タグＲＡＭ１４０から読み出したタグアドレスとを比較することで、キャッシュミス又はキャッシュヒットを判定する回路である。比較回路１３１ａ〜１３１ｄは、それぞれキャッシュウェイ１０１ａ〜１０１ｄに関係付けられる。タグの一致を検出したウェイ、言い換えるとキャッシュヒットしたウェイに対応する比較回路の出力のみが１となり、他の比較回路の出力は０となる。その結果、比較回路１３１ａ〜１３１ｄは、キャッシュヒットしたウェイに対応するビットが「１」となった、計４ビットのヒットウェイ信号を選択回路１３０に出力する。キャッシュミスの場合、主記憶装置上の物理アドレスからデータを取得する動作がなされる。
【００５３】
キャッシュヒットが発生した場合であってメモリアクセス要求が読出し要求の場合には、ＩＡにより指定されるＬ２データＲＡＭ１２０のキャッシュラインから、各キャッシュウェイに対応する４つのキャッシュラインのデータ値が選択回路１３０に読み出される。そして、選択回路１３０は、比較回路１３１ａ〜１３１ｄから出力されるヒットウェイ信号により、ヒットウェイ信号が示すウェイに対応するデータ値を選択して出力する。
【００５４】
［Ｌ２キャッシュＲＡＭ  バンク分け有りタイプ］
図５は、バンク分けされたＬ２キャッシュＲＡＭの一例を示す図である。図５に示されるＬ２キャッシュＲＡＭ１１０ａ、１１０ｂは、図４に示されるＬ２キャッシュＲＡＭ１１０と同じ構成を有するので、説明を省略する。図４で示した例では、Ｌ２キャッシュＲＡＭのラインは、１２ビットのインデックスアドレスにより特定されていたが、図５に示すＬ２キャッシュＲＡＭ１１０ａ、１１０ｂは、１２ビットのインデックスアドレスの最下位のビットでバンク分けされる。図５の例では、Ｌ２キャッシュＲＡＭ１１０ａは、最下位ビットが「０」のインデックスアドレスにより特定されるデータを格納し、Ｌ２キャッシュＲＡＭ１１０ｂは、最下位ビットが「１」のインデックスアドレスにより特定されるデータを格納する。
【００５５】
Ｌ２キャッシュＲＡＭ１１０ａ、１１０ｂは、それぞれ図４に示したＬ２キャッシュＲＡＭ１１０の半分のデータを有する。選択回路１３１−１ａ〜１３１−１ｄには、インデックスアドレスにより特定されたＬ２キャッシュＲＡＭ１１０ａ、１１０ｂ各々のキャッシュラインのデータと、インデックスアドレスの最下位ビット（ＩＡ［７］）とが入力する。そして、選択回路１３１は、インデックスアドレスの最下位ビットに対応するＬ２キャッシュＲＡＭの出力データを選択して、出力する。
【００５６】
［Ｌ２キャッシュコントローラ］
図１に示すＬ２キャッシュコントローラ９０は、ＭＯポート（Ｍｏｖｅ−ＯｕｔＰｏｒｔ）６３、ＬＤ（Ｌｏａｄ）ポート６４、ＰＦ（Ｐｒｅｆｅｔｃｈ）ポート６６、パイプライン選択部６０、第１優先制御回路６１、及び第２優先制御回路６２を有する。
第１優先制御回路６１には、ＭＯポート６３からの置換命令、ＬＤポート６４からのロード命令およびＰＦポート６６からのプリフェッチ命令が入力する。なお、図６で示すように、演算処理装置が複数のプロセッサコアを有する場合には、第１優先制御回路６１には各コアから出力される各命令が入力する。第１優先制御回路６１は、入力する要求種別、固定的な優先度に基づいて選択する。優先度としては一例として、ロード命令＞置換命令＞プリフェッチ命令の順とする。このように優先度を設定することで、デッドロックやライブロック状態の防止が可能となる。
【００５７】
また、第２優先制御回路６２には、プロセッサコアからのプリフェッチ命令が入力する。Ｌ２キャッシュコントローラ９０はさらに、第１パイプライン７０、及び第２パイプライン８０を有する。このうち、第２パイプライン８０は、プリフェッチ処理専用、より具体的にはＬＢ１６０が保持するアドレスとプリフェッチ要求に対応するアドレスとの一致検出のために設けられるパイプラインである。このような専用パイプラインを設けることによって、Ｌ２キャッシュのプリフェッチ処理のスループット向上や、処理性能の向上を実現することができる。
【００５８】
［Ｌ２キャッシュコントローラ：ＭＯポート、ＬＤポート、ＰＦポート］
ＭＯポート６３、ＬＤポート６４、ＰＦポート６６はプロセッサコア１０に対応して設けられ、プロセッサコア１０の数だけ存在する。よって、プロセッサコア１０が複数ある場合、プロセッサコアの個数に応じたＭＯポート６３、ＬＤポート６４、ＰＦポート６６が用意される。
【００５９】
ＭＯポート６３は、Ｌ１置換命令（図示「置換命令」）をプロセッサコア１０から受け取り、且つ保持するとともに、第１優先制御回路６１によりＬ１置換命令が選択された場合、Ｌ１置換命令を第１パイプライン７０に出力する。
【００６０】
ＬＤポート６４は、ＬＤ命令（図示「ロード命令」）をプロセッサコア１０から受け取り、且つ保持するとともに、第１優先制御回路６１によりＬＤ命令が選択された場合、ＬＤ命令を第１パイプライン７０に出力する。
【００６１】
ＰＦポート６６は、ＰＦ命令（図示「プリフェッチ命令」）をプロセッサコアから受け取り、且つ保持するとともに、第１パイプライン７０及び第２パイプライン８０に、パイプライン選択部６０が選択した第１優先制御回路６１、第２優先制御回路６２を介してＰＦ命令を出力する。ＰＦポート６６の一例は、図９Ａ及び図９Ｂを用いて後述する。
【００６２】
ＭＯポート６３、ＬＤポート６４、ＰＦポート６６は、プロセッサコア１０からの命令のオーバフローを防止するために、プロセッサコア１０からの命令通知で現在のポインタ値に１を加算（＋１）し（インクリメント）、プロセッサコア１０への開放通知で現在のポインタ値から１を減算する（−１）資源カウンタを持ち、資源カウンタがエントリ数を超えないように命令発行を制限する。ＭＯポート６３、ＬＤポート６４、ＰＦポート６６は、第１パイプライン７０又は第２パイプラインに出力した命令のパイプライン処理が完了すると、Ｌ１キャッシュコントローラ１８に開放通知を発行する。
【００６３】
［Ｌ２キャッシュコントローラ：ＰＦポートの一例］
図６はＬ２キャッシュコントローラ９０を示し、特にＰＦポートの一例の詳細を示す図である。ＰＦポート６６は、エントリ選択部６６−１、空きエントリ選択部６６−２、ＰＦ記憶回路６６−３、デコーダ６６−４を有する。
【００６４】
ＰＦ記憶回路６６−３はＰＦ命令を保持する回路であり、有効ビット（Ｖａｌｉｄ）、物理アドレス（ＰＡ）、コード（ＣＯＤＥ）、第１パイプホールド（Ｐ１ＨＬＤ）、投入禁止（ＩＮＨ）、第２パイプホールド（Ｐ２ＨＬＤ）、第２パイプ終了（Ｐ２ＤＯＮＥ）の情報を格納する。なお、エントリとは、上記情報をＰＦ命令毎に格納する記憶領域を言う。
【００６５】
有効ビット（Ｖａｌｉｄ）はエントリの有効・無効を示すビットであり、「１」のときＰＦ記憶回路６６−３のエントリが有効であることを示し、「０」のときＰＦ記憶回路６６−３のエントリが無効であることを示す。第２パイプ終了（Ｐ２ＤＯＮＥ）は、ＰＡによって特定されるＰＦ命令が第２パイプライン８０で完了していることを示すビットであり、「１」のときＰＦ命令処理終了を示し、「０」のときＰＦ命令が終了していないことを示す。
【００６６】
有効ビットが「１」から「０」に変更されるのは、第１パイプライン７０又は第２パイプライン８０でパイプライン処理が中止せずに完了した場合である。第２パイプライン８０は、パイプライン処理を実行してＬＢ１６０に対象データが登録されていないことがわかると、パイプライン処理を中止する。この場合、ＬＢ１６０に登録されていないエントリの第２パイプ終了（Ｐ２ＤＯＮＥ）が「１」になり、且つ有効ビットは「１」のままである。後述のように、第２パイプ終了（Ｐ２ＤＯＮＥ）が「１」になり、且つ有効ビットが「１」の場合、第１パイプライン７０がＰＦ命令を処理する。
【００６７】
空きエントリ選択部６６−２はＰＦ記憶回路６６−３の各エントリの有効ビットを参照し、有効ビット「０」のエントリを上書き対象のエントリ、言い換えれば、空きエントリと判断して、エントリ選択部６６−１に空きエントリとして通知する。エントリ選択部６６−１は、空きエントリ選択部６６−２により通知された空きエントリにＰＦ命令を登録する。
【００６８】
コード（ＣＯＤＥ）は、ＰＦ命令の種類を特定する情報である。コードは、「共有型命令プリフェッチ命令」、「共有型データプリフェッチ命令」、「排他型データプリフェッチ命令」の何れかを特定する。「共有型命令プリフェッチ命令」は、プリフェッチで取得した命令を、他のプロセッサコアで取得する「共有型」の状態でＬ２キャッシュＲＡＭ１１０に保持することを要求する信号である。「共有型データプリフェッチ命令」は、プリフェッチで取得したデータを、他のプロセッサコアで取得する「共有型」の状態でＬ２キャッシュＲＡＭ１１０に保持することを要求する信号である。「排他型データプリフェッチ命令」は、プリフェッチで取得したデータを排他型、つまり要求元プロセッサコアがデータを変更できる状態で保持することを要求する信号である。
【００６９】
第１パイプホールド（Ｐ１ＨＬＤ）は、第１パイプライン７０がＰＦ命令を処理中であることを示す。Ｐ１ＨＬＤが「１」の場合は第１パイプラインがＰＦ命令を処理中であることを示している。第２パイプホールド（Ｐ２ＨＬＤ）は、その値が「１」のときに第２パイプライン８０がＰＦ命令を処理中であることを示す。ＰＦポート６６は、パイプライン選択部６０により選択された第１パイプライン７０又は第２パイプライン８０がＰＦ命令の処理をしたことを対応するパイプラインから通知されると、対応する第１パイプホールド又は第２パイプホールドを処理中に変更する。
【００７０】
投入禁止（ＩＮＨ）は、ＬＢ１６０が使用不可能などの条件により、ＰＦ命令を第１パイプライン７０又は第２パイプライン８０に出力できない状態であることを示す。
【００７１】
デコーダ６６−４は、第１パイプライン７０又は第２パイプライン８０から、ポート並びにエントリＩＤを特定する完了通知又は中止通知を受け取る。デコーダ６６−４は、第１パイプライン７０又は第２パイプライン８０から完了通知を受け取ると、完了通知により特定されるＰＦ記憶回路６６−３のエントリの有効ビットを無効に設定する。デコーダ６６−４は、第１パイプライン７０又は第２パイプライン８０から中止通知を受け取ると、中止通知により特定されるＰＦ記憶回路６６−３のエントリの第１パイプホールド又は第２パイプホールドを有効に設定する。
【００７２】
ＰＦポート６６は、プロセッサコア１０からＰＦ命令を受け取り、空いているＰＦ記憶回路６６−３のエントリにＰＦ命令を登録し、要求の受信順にパイプライン選択部６０を介して第１パイプライン７０／第２パイプライン８０へＰＦ命令を投入する。第１パイプライン７０又は第２パイプライン８０は、最終ステージで完了通知または中止通知をＰＦポート６６へ出力する。処理完了の場合は、ＰＦポート６６は完了した処理に対応するＰＦ記憶回路６６−３のエントリを開放し、処理中止の場合は再度第１パイプライン７０または第２パイプライン８０へＰＦ命令を出力する。
【００７３】
［Ｌ２キャッシュコントローラ：パイプライン選択部の第１例］
図７は、パイプライン選択部の一例を示す図である。図７に示すパイプライン選択部６０ａは、図６に示すパイプライン選択部６０の一例である。パイプライン選択部６０ａは、論理積演算を行うＡＮＤ回路６０−１、６０−３、６０−４、及び論理和演算を行うＯＲ回路６０−２、６０−５、６０−６、選択回路６０−７、６０−８、及び優先回路優先回路６０−２１、６０−２２を有する。なお、図７に示す論理回路並びに入出力結線は、実際には、ＰＦポート６６の数だけ用意される。ＯＲ回路６０−５、６０−６は、ＰＦポートの数だけある入出力結線が１つでも信号レベルが「ハイ」になれば、信号レベル「ハイ」の信号を出力する。
【００７４】
パイプライン選択部６０ａは、ＰＦ要求を処理するパイプラインとして、第１パイプライン７０あるいは第２パイプライン８０を選択する。パイプライン選択部６０ａは、第１パイプホールド（ＨＬＤ）、投入禁止（ＩＮＨ）、有効ビット信号（ＶＡＬＩＤ）を入力信号としてＰＦポート６６から受け取る。なお、有効ビット信号（ＶＡＬＩＤ）は、ＰＦポート６６の物理アドレスのエントリ番号毎にエントリが有効か否かを示すビット信号であり、ＰＦポート６６のエントリ数分のビット値を有する。パイプライン選択部６０ａは、それらの入力信号を用いて、ＰＦ記憶回路６６−３のエントリが有効であり、且つ第１パイプ処理中又はＬＢ１６０が投入禁止状態でない場合、第１又は第２パイプラインにＰＦ要求を投入する処理を行う。
【００７５】
また、パイプライン選択部６０ａは、第２パイプホールド（Ｐ２ＨＬＤ）、第２パイプ終了（Ｐ２ＤＯＮＥ）を入力信号としてＰＦポート６から受け取り、何れかの入力信号が「１」の場合、第２パイプライン８０へのＰＦ命令の投入を抑止する。なお、図９を用いて後述するように、第２パイプライン８０はＰＦ命令をＬＢ１６０に投入して、ＬＢ１６０が保持するエントリのＰＡと、ＰＦ命令が対象とするＰＡとが一致するか否かを検出する処理を行う。なお、このように、ＬＢ１６０が保持するエントリに対して、ＰＦ要求又はＬＤ要求が対象とするデータのＰＡとの一致を検出することを、当明細書では「ＰＡ一致」と言う。
【００７６】
第２パイプライン８０により「ＰＡ一致」が検出されなければ、本実施例では次に第１パイプライン７０での処理を行う。したがって、パイプライン選択部６０ａは、第２パイプ終了（Ｐ２ＤＯＮＥ）が「１」、つまり「ＰＡ一致なし」の場合には、第２パイプライン８０にＰＦ命令を投入しないように動作する。これは、第２パイプライン８０は、ＬＢ１６０での「ＰＡ一致」を行うものであり、一度「ＰＡ一致なし」である場合、再度「ＰＡ一致」処理を行っても「ＰＡ一致なし」結果が得られるだけであるからである。
【００７７】
パイプライン選択部６０ａはまた、Ｐ２ＨＬＤが「１」の場合、つまり第２パイプラインが処理中である場合にも、第２パイプライン８０にＰＦ命令を投入しないように動作する。この場合、第２パイプライン８０は処理中であるので、同じ処理が繰り返されないように、ＰＦ命令の第２パイプライン８０への投入を抑止する。
【００７８】
選択回路６０−７は、ＯＲ回路６０−５の出力信号Ｓ６０−５ａが「１」、つまりＳ６０−５ａが第１パイプラインへの要求エントリを示している場合、ＰＦ命令を第１優先制御回路６１へ出力する。選択回路６０−８は、ＯＲ回路６０−６の出力信号Ｓ６０−６ａが「１」、つまりＳ６０−６ａが第２パイプラインへの要求エントリを示している場合、ＰＦ命令を第２優先制御回路６２へ出力する。
【００７９】
ＡＮＤ回路６０−１は、ＰＦポート６６から第１パイプホールド信号（Ｐ１ＨＬＤ）の反転信号、及び投入禁止信号（ＩＮＨ）の反転信号を入力信号として受け取り、入力信号が全て「１」、つまりＰ１ＨＬＤ、ＩＮＨがともに「０」であるとき、値が「１」の信号Ｓ６０−１をＡＮＤ回路６０−４とＡＮＤ回路６０−３とに出力する。ＯＲ回路６０−２は、ＰＦポート６６から第２パイプホールド（Ｐ２ＨＬＤ）信号及び第２パイプ終了（Ｐ２ＤＯＮＥ）を入力信号として受け取り、いずれかの入力信号が「１」のとき値が「１」の信号Ｓ６０−２をＡＮＤ回路６０−４に出力する。
【００８０】
ＡＮＤ回路６０−３は、ＰＦポート６６から有効ビット信号（ＶＡＬＩＤ）、及び信号Ｓ６０−１を入力信号として受け取り、入力信号が全て「１」のとき値が「１」の信号Ｓ６０−３ａを出力する。信号Ｓ６０−３ａは、第１優先制御回路６１に出力されるとともに、入力する８ビット信号から１ビットの「ＰＩＰＥ要求信号」を生成するＯＲ回路６０−５及び優先回路６０−２１を介して選択回路６０−７に信号Ｓ６０−５ａとして出力される。第１優先制御回路６１に出力された信号Ｓ６０−３ａは、第１優先制御回路６１の選択信号として、第１優先制御回路６１で使用される。
【００８１】
選択回路６０−７は、値が「１」の信号Ｓ６０−５ａを受け取ると、エントリ番号に対応するＰＦポートからのＰＦ命令の投入先として、第１優先制御回路６１を選択して、第１優先制御回路６１にＰＦ命令を投入する。優先回路６０−２１は、例えば、エントリがＰＦポートに登録された時間に従って、最も古いエントリ番号を選択する。
【００８２】
ＡＮＤ回路６０−４は、ＰＦポート６６から有効ビット信号（ＶＡＬＩＤ）、信号Ｓ６０−１、及び信号Ｓ６０−２の反転信号を入力信号として受け取り、入力信号が全て「１」である場合、値「１」の信号Ｓ６０−４ａを出力する。信号Ｓ６０−４ａは、第２優先制御回路６２に出力されるとともに、ＯＲ回路６０−５及び優先回路６０−２１を介して選択回路６０−８に出力される。選択回路６０−８は、値「１」の信号Ｓ６０−６ａを受け取ると、エントリ番号に対応するＰＦポートからのＰＦ命令の投入先として第２優先制御回路６２を選択して、第２優先制御回路６２にＰＦ命令を投入する。優先回路６０−２２は、例えば、エントリがＰＦポートに登録された時間に従って、最も古いエントリ番号を選択する。
【００８３】
ＡＮＤ回路６０−３の入力信号は、ＡＮＤ回路６０−４の全入力信号を受け取る。ＡＮＤ回路６０−３の出力信号、及び、ＡＮＤ回路６０−４の出力信号は、それぞれ選択回路６０−７のＰＩＰＥ要求信号、及び、選択回路６０−８のＰＩＰＥ要求信号になる。このような回路構成により、第２パイプライン８０にＰＦ命令の投入が要求される場合は、第１パイプライン７０にもＰＦ命令の投入が要求される。しかし、上記したように、第１パイプライン７０ではＰＦ命令処理の優先順位は他の命令処理と比較して低く設定されている。そのため、ＰＦ命令は、他の命令がある場合、第１優先制御回路６１により選択されず、第１パイプライン７０には投入されない。
【００８４】
一方、第２パイプライン８０は、ＰＦ命令専用であるため、パイプライン選択部６０から受け取ったＰＦ命令を処理し、ＰＡ一致の検出処理を実行する。第２パイプライン８０において「ＰＡ一致」が得られたＰＦ命令は、ＰＦポートのエントリから削除される。言い換えれば、第２パイプライン８０は、ＬＢ１６０から出力される完了信号を受け取って、ＰＦ命令の対象となっていたＬＢ１６０のエントリの有効ビットを、「０」にする。第２パイプライン８０によって「ＰＡ一致」とならないＰＦ命令のエントリは、第２パイプ終了（Ｐ２ＤＯＮＥ）が「１」になり、第１パイプライン７０が処理を完了するまで、ＰＦポート６６で有効なエントリとして保持される。
【００８５】
このような動作により、第１のパイプライン７０の状態が「ビジー状態」である場合、第１優先制御回路６１にＰＦ命令投入される機会が後回しにされる一方、第２パイプライン８０はＰＦ命令専用であることから一定のスループット以上で処理される。そのため、ＬＢ１６０でアドレス一致した要求がすべて第２パイプライン８０で処理され、Ｌ２タグＲＡＭ１４０でＴＡＧ検索を行なわないと完了できない要求のみが第１のパイプライン７０で処理されるように動作する。
【００８６】
このように、要求先の物理アドレスを特定するＰＦ命令は、優先的に第２優先制御回路６２に出力されるとともに、第２パイプライン８０でＰＡ一致検出処理が実行される。第２パイプライン８０でＰＡ一致検出の無かったＰＦ命令は、第１パイプライン７０で処理される。このような処理により、演算処理装置１００は、第１パイプライン７０におけるＰＦ命令処理の負荷を下げることが出来る。
【００８７】
［Ｌ２キャッシュコントローラ：パイプライン選択部の第２例］
図８は、パイプライン選択部の別な一例を示す図である。図８に示すパイプライン選択部６０ｂは、図６に示すパイプライン選択部６０の一例であり、図７に示すパイプライン選択部６０ａと異なる例である。
【００８８】
パイプライン選択部６０ｂは、パイプライン選択部６０ａの２つの選択回路６０−７、６０−８の代わりに、１つの選択回路６０−９を有する。このようにすることで、ＰＦ命令の選択回路を１つ減らすと共に、選択回路の入力側結線を減らすことが出来る。
【００８９】
図８に示すパイプライン選択部６０ｂは、図７に示すパイプライン選択部６０ａに比してＡＮＤ回路６０−３に代わりＡＮＤ回路６０−３ｂを有し、ＯＲ回路６０−１０〜６０−１２と、ＡＮＤ回路６０−１３ａ〜６０−１３ｈとをさらに有する。なお、図７に示す参照符号と同じ参照符号が付された要素に関しては、図７を用いて既に説明したため説明を省略する。
【００９０】
ＡＮＤ回路６０−３ｂは、図７に示すＡＮＤ回路６０−３とは異なりＯＲ回路６０−２の出力信号Ｓ６０−２も入力信号とするので、第２パイプ終了又は第２パイプホールドが「１」である場合に、「１」が出力可能になる。図７の回路と同様、図８の回路でも、第２パイプ終了又は第２パイプホールドが「１」である場合、第２パイプライン８０にはＰＦ命令は出力されない。そのため、信号Ｓ６０−３ｂは、第１パイプライン７０のみへのＰＦ命令の出力を示す信号である。また、信号Ｓ６０−４ｂは、第１パイプライン７０のみへのＰＦ命令が存在することを示す信号である。また、信号Ｓ６０−４ｂは、第１パイプライン７０と第２パイプライン８０の両方へのＰＦ命令があることを示す信号であり、信号Ｓ６０−６ｂは、第１パイプライン７０と第２パイプライン８０の両方へＰＦ要求が存在することを示す信号である。
【００９１】
選択回路を１つにしても、ＰＦ命令を選択的に第１パイプライン７０又は第２パイプライン８０に出力できるようにするために、パイプライン選択部６０ｂは、「優先度周期信号」を用いる。優先度周期信号は、第１パイプラインと第２パイプラインとのどちらを優先するかを周期的に変更するために用いられる。優先度周期信号がオンの場合には、第２のパイプ処理中および処理済みフラグの要求を優先して選択し、もし第２のパイプ処理中および処理済みフラグの要求がなければ、それ以外の要求のなかから要求を選択する。優先度周期信号がオフの場合はその逆である。優先度周期信号は、クロックに同期して出力が「１」と「０」に変わる信号である。優先度周期信号は、ＡＮＤ回路６０−１３ａ〜６０−１３ｈの入力信号である。ＡＮＤ回路６０−１３ａ、６０−１３ｂ、６０−１３ｅ、６０−１３ｆは、優先度周期信号を正転入力として受け取るので、ＡＮＤ回路６０−１３ａ、６０−１３ｂ、６０−１３ｅ、６０−１３ｆは、優先度周期信号が「１」の場合、「１」を出力可能である。一方、ＡＮＤ回路６０−１３ｃ、６０−１３ｄ、６０−１３ｇ、６０−１３ｈは、優先度周期信号を反転入力として受け取るので、ＡＮＤ回路６０−１３ａ、６０−１３ｂ、６０−１３ｅ、６０−１３ｆは、優先度周期信号が「０」の場合、「１」を出力可能である。
【００９２】
なお、演算処理装置に複数のプロセッサコアが設けられており、各コアと括り付けられている複数のプリフェッチポートが設けられ、各プリフェッチポートからの要求をプライオリティ制御部が選択して第１および第２のパイプラインへ投入する構成である場合、各プリフェッチポートに供給する優先度周期信号の位相を逆位相にする。
【００９３】
位相を互いに逆位相とすることで、あるコアからは第２のパイプへの要求を出力する一方、別のコアからは第２のパイプでの処理が終わった要求を第２のパイプへ要求するといった具合に、各プリフェッチポートから常時第１および第２のパイプへの要求を満遍なく行なうことが出来る。
【００９４】
ＡＮＤ回路６０−３ｂ、６０−４は、有効ビット信号（ＶＡＬＩＤ）を受け取る。有効ビット信号（ＶＡＬＩＤ）は、ＰＦポート６６の物理アドレスのエントリ番号毎にエントリが有効か否かを示すビット信号であり、ＰＦポート６６のエントリ数分のビット値を有する。また、ＡＮＤ回路６０−３ｂ、６０−４は、ＡＮＤ回路６０−１、６０−２の出力からは、エントリ毎に異なる属性値を受け取る。そのため、優先度周期信号が「１」の場合、信号Ｓ６０−３ｂが「１」となるエントリは、ＡＮＤ回路６０−１３ｃ、６０−１３ｄではなく、ＡＮＤ回路６０−１３ａ、６０−１３ｂで優先的に処理される。一方、優先度周期信号が「０」の場合、信号Ｓ６０−３ｂ及びＳ６０−４ｂが「０」となるエントリは、ＡＮＤ回路６０−１３ｃ、６０−１３ｄで優先的に処理される。このように、優先度周期信号が「０」と「１」の値を周期的に変更することで、ＰＦポート６６に保持されるＰＦ命令が優先度周期信号に応じて選択的に処理されることになる。
【００９５】
ＡＮＤ回路６０−１３ａは、優先度周期信号とＡＮＤ回路６０−３ｂの出力が「１」の場合に、値が「１」の信号を出力する。Ｓ６０−１３ａの出力は、ＯＲ回路６０−１０に供給される。
【００９６】
ＡＮＤ回路６０−１３ｂは、優先度周期信号とＡＮＤ回路６０−４の出力Ｓ６０−４が「１」であり且つＡＮＤ回路６０−３ａの出力Ｓ６０−３が「０」の場合に、「１」をＯＲ回路６０−１１に出力する。ＡＮＤ回路６０−１３ｂからの信号は、ＯＲ回路６０−１０とＯＲ回路６０−１１とに供給される。
【００９７】
ＡＮＤ回路６０−１３ｃは、優先度周期信号が「０」であり且つＡＮＤ回路６０−４の出力が「１」の場合に、値が「１」の信号をＯＲ回路６０−１０とＯＲ回路６０−１１とに出力する。ＡＮＤ回路６０−１１からの信号は、出力は第２パイプライン８０へのＰＦ命令出力として動作する。一方で、ＡＮＤ回路６０−１３ｃの出力は、ＯＲ回路６０−１１同様に、ＯＲ回路６０−１０にも出力されるので、図７に示すパイプライン選択部６０ａ同様に、第２パイプ終了又は第２パイプ中断以外の場合でも、第１パイプライン７０へＰＦ命令は出力される。
【００９８】
ＡＮＤ回路６０−１３ｄは、優先度周期信号が「０」であり且つＡＮＤ回路６０−３ｂの出力が「１」であり且つＡＮＤ回路６０−４の出力が「０」の場合に、値が「１」の信号をＯＲ回路６０−１２に出力する。
【００９９】
ＡＮＤ回路６０−１３ｅは、優先度周期信号が「１」であり、信号Ｓ６０−３ｂが「１」の場合に、値が「１」の信号をＯＲ回路６０−１２に出力する。
【０１００】
ＡＮＤ回路６０−１３ｆは、優先度周期信号が「１」であり、信号Ｓ６０−５ｂの値が「０」である場合に、値が「１」の信号をＯＲ回路６０−１２に出力する。
【０１０１】
ＡＮＤ回路６０−１３ｇは、優先度周期信号が「０」であり、信号Ｓ６０−４が「１」の場合に、値が「１」の信号をＯＲ回路６０−１２に出力する。
【０１０２】
ＡＮＤ回路６０−１３ｈは、優先度周期信号が「０」であり、信号Ｓ６０−６ｂの値が「０」であり、且つ信号Ｓ６０−３ｂの値が「１」の場合に、値が「１」の信号をＯＲ回路６０−１２に出力する。
【０１０３】
ＯＲ回路６０−１０は、優先度周期信号の値で決まるエントリのＰＦ命令を選択する信号Ｓ６０−１０を、第１優先制御回路６１を介して第１パイプライン７０に出力する。また、ＯＲ回路６０−１１は、優先度周期信号で決まるエントリのＰＦ命令のうち第２パイプ処理終了又は第２パイプホールドを除くＰＦ命令を選択する信号Ｓ６０−１１を、第２優先制御回路６２を介して第２パイプライン８０に出力する。
【０１０４】
ＯＲ回路６０−１２は、制御信号Ｓ６０−１０、Ｓ６０−１１の出力に同期して、ＰＦ命令の出力先を示す信号を、選択回路６０−９に出力する。選択回路６０−９は、入力する信号の値に応じて、ＰＦ命令を第１優先制御回路６１または第２優先制御回路に出力する。
【０１０５】
［Ｌ２キャッシュコントローラ：プロセッサコアからの命令］
ＬＤ命令は、実行部１４にデータをロードする命令であり、ストア命令は、主記憶装置２２０にデータを格納する命令である。ＰＦ命令は、主記憶装置２２０からＬ２キャッシュＲＡＭ１１０へデータをロードする命令である。
【０１０６】
Ｌ１置換命令は、Ｌ１キャッシュＲＡＭ１６の置換、あるいは、Ｌ２キャッシュコントローラ９０からの指示によってＬ１キャッシュＲＡＭ１６が保持するデータを無効化する命令である。Ｌ１置換命令によって、Ｌ１キャッシュＲＡＭ１６の更新データのＬ２キャッシュＲＡＭ１１０への更新反映、Ｌ１キャッシュＲＡＭ１６の無効化に伴うＬ２タグＲＡＭ１４０の更新などが行なわれる。
【０１０７】
Ｌ２置換命令は、ＰＦ命令やＬＤ命令によりＬ２キャッシュＲＡＭ１１０でキャッシュミスが生じた場合、主記憶装置２２０からロードしたデータを（どこに）格納するために、あるキャッシュラインからデータを追い出す命令である。
【０１０８】
ＭＣ置換命令は、Ｌ２置換命令が完了し、ＭＣ２００からのデータ応答があると、データ入力バッファ３２に保持されるＭＣ２００からのデータを、Ｌ２キャッシュＲＡＭ１１０への書き込む命令、又はプロセッサコア１０にデータ出力を行う命令である。ＭＣ２００からのデータが、ＰＦ命令によって獲得された場合には、Ｌ２タグＲＡＭ１４０の更新、およびＬ２データＲＡＭ１２０への書き込みを行う。ＭＣ２００からのデータが、ＬＤ命令によって獲得された場合には、プロセッサコア１０へのデータ出力およびＬ１置換命令の発行を行なう。
【０１０９】
［優先制御回路］
第１優先制御回路６１は、パイプライン選択部６０を介してＭＯポート６３、ＬＤポート６４、及びＰＦポート６６からそれぞれＭＯ命令、ＬＤ命令、及びＰＦ命令を受け取り、所定の優先順位に従って第１パイプライン７０へ命令を投入する。第１優先制御回路６１は、例えば、第１パイプライン７０に投入される命令を、Ｌ１置換命令、ＭＣ置換命令、Ｌ２置換命令、ＬＤ命令、ＰＦ命令の優先順番で第１パイプラインに投入する。よって、Ｌ１置換命令の優先順位が一番高く、ＰＦ命令の優先順位が一番低い。
【０１１０】
また、Ｌ１置換命令、ＬＤ命令、ＰＦ命令におけるコア間の選択は均等になるように選択される。また、ＭＯポート及びＬＤポートはコア毎に用意されるため、第１優先制御回路６１には、他コアからのＭＯ命令又はＬＤ命令が入力される。
【０１１１】
ＰＦポートはコア毎に用意されるため、パイプライン選択部６０には、他コアからのＰＦ命令が入力される。第２優先制御回路６２は、パイプライン選択部６０が出力したＰＦ命令を第２パイプライン８０へ投入する。
【０１１２】
第１優先制御回路６１は、命令の種類で投入可能なエントリを判断した後に、投入可能なエントリからコアからの要求が最も古いエントリを選んでパイプラインへ命令を出力してもよい。
【０１１３】
［第１パイプライン］
第１パイプライン７０は、Ｌ２キャッシュＲＡＭ１１０へのデータアクセス制御、各種資源管理を行う。第１パイプライン７０は、例えば、ＬＤ命令又はＰＦ命令に従って、Ｌ２キャッシュＲＡＭ１１０のキャッシュミス又はキャッシュヒット判定を行う。第１パイプライン７０はさらに、ＬＢ１６０に保持される主記憶装置２２０に対するＬＤ命令中のデータエントリと、ＬＤ命令又はＰＦ命令のキャッシュラインとの一致又は不一致の判定を行う。なお、以下において、主記憶装置２２０に対するロード命令を、「ＭＬＤ命令」と言う。
【０１１４】
第１パイプライン７０は、Ｌ２キャッシュＲＡＭ１１０でキャッシュミスが生じると、ＬＤポート６４から受け取ったＬＤ命令又はＰＦポート６６から受け取ったＰＦ命令を、ＬＢ１６０に投入する。その結果、第１パイプライン７０は、ＬＢ１６０からＰＡが一致しているか否かを示す信号を受信する。
【０１１５】
また、第１パイプライン７０は、Ｌ２データＲＡＭ１２０、Ｌ”タグＲＡＭ１４０との間の情報のリード／ライト（図中「Ｒ／Ｗ」）を実行する。
【０１１６】
第１パイプライン７０は、パイプラインの処理が完了したことを示す完了信号、又は、処理が中断したことを示す中断信号を、ＭＯポート６３、ＬＤポート６４、ＰＦポート６６へ供給する。なお、第１パイプラインの処理の一例は、図１１及び図１２を用いて後述する。
【０１１７】
また、図１には、ヒットバッファ１７０が示されてる。キャッシュヒット時には、第１パイプライン７０はヒットしたアドレスをヒットバッファ１７０に登録する。
【０１１８】
［第２パイプライン］
第２パイプライン８０は、ＬＢ１６０に保持されるＭＬＤ命令発行中のデータの物理アドレスと、ＰＦ命令の物理アドレスとの一致を検出するパイプラインである。第１パイプライン７０が、Ｌ２キャッシュＲＡＭ１１０へのデータアクセス制御全般を行うのに対して、第２パイプライン８０の処理がプリフェッチ処理に（何に）限定されている。第２パイプライン８０の行う処理を限定する理由の１つは、同一の物理アドレスに対して連続してＰＦ命令を処理するためである。
【０１１９】
第２パイプライン８０は、ＬＢ１６０からのＰＡ一致／不一致を示す信号に基づいて、ＰＦ命令に係るＰＡとＬＢ１６０エントリのＰＡとが一致しているか否かを判別する。そして、ＰＡ一致あるいはＰＡ不一致の判定結果を、ＭＯポート６３、ＬＤポート６４、ＰＦポート６６のそれぞれに供給する。  なお、図１の例では、第２パイプライン８０にはＬＢ１６０からの出力と、ヒットバッファ（ＨＢ）１７０からの出力との論理和を取った信号が供給されている。
【０１２０】
［ロードバッファ］
図９Ａ及び図９Ｂは、ロードバッファの一例を示す図である。
ＬＢ１６０は、Ｌ２キャッシュＲＡＭ１１０に格納するデータを保持する記憶部である。
【０１２１】
ＬＢ１６０は、エントリ選択部１６０−１、空きエントリ選択部１６０−２、記憶部１６０−３、デコーダ１６０−４、１６０−１３、ＰＡ比較部１６０−５、ＡＮＤ回路１６０−６、ＯＲ回路１６０−７を有する。ＬＢ１６０はさらに、ＬＢエントリ監視部１６０−１０、選択回路１６０−１１、１６０−１２を有する。
【０１２２】
記憶部１６０−３は、有効ビット（Ｖａｌｉｄ）、物理アドレス（ＰＡ）、コード（ＣＯＤＥ）、ＰＦ番号、Ｌ１識別情報（Ｌ１ＬＩＤ）、ホールド（ＨＬＤ）、及びコアＩＤ（ＣＯＲＥ＿ＩＤ）を登録するエントリ構成を有する。記憶部１６０−３はさらに、Ｌ２ウェイ識別情報（Ｌ２ＷＡＹＩＤ）、メインコントローラ命令済みフラグ（Ｒｅｑ＿ｉｓｓｕｅｄ）、メモリコントローラ応答受信（ＭＳ＿ｃｐｌｔ）、Ｌ２置換命令完了（ＭＯ＿ｃｐｌｔ）を登録するエントリ構成を有する。
【０１２３】
物理アドレス（ＰＡ）、及びコード（ＣＯＤＥ）は、プロセッサコア１０で生成されて、ＬＤポート６４又はＰＦポート６６を介して、ＬＤ命令又はＰＦ命令の一部としてＬＢ１６０に送られ、ＬＢ１６０で最初のエントリ獲得により登録される。
【０１２４】
Ｌ１識別番号又はコアＩＤは、プロセッサコア１０で生成され、ＬＤポート６４を介して、ＬＢ１６０で最初のエントリ獲得により登録される。Ｌ２ウェイＩＤは、Ｌ２タグＲＡＭ１４０で生成され、ＬＢ１６０で最初のエントリ獲得により登録される。
ＰＦ命令またはＬＤ命令においてキャッシュミスを検出し、かつＬＢ１６０でＰＡ不一致が生じた場合、第１パイプライン７０は、パイプライン処理完了時に、ＬＢ１６０のエントリを獲得するとともに、ＬＢ１６０を介してＭＣ２００にＭＬＤ命令を行なう。
【０１２５】
ＬＢ１６０から獲得するエントリは一例として、記憶部１６０−３の有効ビット（Ｖａｌｉｄ）の値が「０」を示すエントリのうち、獲得されたのが最も古いエントリが選択される。選択されたエントリには、第１パイプライン７０からのエントリ獲得指示とともに、ＰＡ、ＣＯＤＥ、ＲＥＱ＿ＩＤ、ＰＦ、Ｌ２ウェイＩＤ（Ｌ２ＷＡＹＩＤ）等の情報を含む。
【０１２６】
また、第１パイプライン７０で新たに処理が実行される毎に、ＬＢ１６０では第１パイプライン７０又は第２パイプライン８０から送出されるＰＡと記憶部１６０−３各有効エントリとのＰＡ一致を検出し、その結果を第１パイプライン７０又は第２パイプライン８０に送出する。
【０１２７】
空きエントリ選択部１６０−２は、有効ビット（Ｖａｌｉｄ）が無効となっているエントリを検索して、エントリ選択部１６１に通知する。
【０１２８】
ＬＢ１６０が、ＬＤ命令又はＰＦ命令又を受け取ると、空きエントリ選択部１６２により通知されたエントリに対して、ＬＤ命令又はＰＦ命令を登録する。登録されたエントリから、Ｌ２置換命令、ＭＣ置換命令が所定の条件にしたがって、第１のパイプに要求される。デコーダ１６０−４は、第１パイプライン７０から、エントリＩＤを特定した完了通知又は中止通知を受け取る。デコーダ１６０−４は、第１パイプライン７０からＭＣ置換命令の完了通知を受け取ると、完了通知により特定されるエントリの有効ビットを無効に設定する。
【０１２９】
デコーダ１６０−４は、第１パイプライン７０から中止通知を受け取ると、中止通知により特定されるエントリのホールドを無効に設定する。デコーダ１６０−１３は、ＭＣ２００からデータを読み出したことを示すメモリ応答信号を受け取り、メモリ応答信号により特定されるエントリのメモリコントローラ応答受信（ＭＳ＿ｃｐｌｔ）を「１」にする。
【０１３０】
ＰＡ比較部１６０−５は、第１パイプライン７０で処理中のＬＤ命令又はＰＦ命令の対象データのＰＡと、ＬＢ１６０に保持されているデータのＰＡとを比較することで、両データの一致を判断する。また、第２パイプライン８０で処理中のＰＦ命令の対象データのＰＡとＬＢ１６０に保持されているデータのＰＡとを比較することで、両データの一致を判断する。なお、図９Ａには、１つのＰＡ比較部１６０−５が示されるが、ＰＡ比較部１６０−５は、記憶部１６０−３のエントリ毎に１つある。
【０１３１】
ＡＮＤ回路１６０−６は、記憶部１６０−３のエントリの数だけある。ＡＮＤ回路１６０−６は、該当エントリの有効ビットが「１」であり且つＰＡ比較部１６０−５から受け取った信号が「１」である場合、「１」をＯＲ回路１６０−７に出力する。
ＯＲ回路１６０−７は、複数のＡＮＤ回路１６０−６の出力信号を入力信号として受け取り、入力信号のいずれかの値が「１」である場合、出力信号を「ＰＡ一致通知」として、第１パイプライン７０及び第２パイプライン８０に出力する。
【０１３２】
ＬＢ１６０は、第１パイプライン７０からＬＤ命令又はＰＦ命令を受け取り、記憶部１６０−３の空いているエントリにＬＤ命令又はＰＦ命令を登録する。ＬＢ１６０はまた、記憶部１６０−３から受信順に命令を取り出し、ＭＣ２００へＭＬＤ命令を投入する。第１パイプライン７０は、完了通知または中止通知をＬＤポート６４またはＰＦポート６６へ供給して、ＬＤポート６４又はＰＦポート６６から記憶部１６０−３のエントリを開放する。
【０１３３】
ＬＢエントリ監視部１６０−１０は、記憶部１６０−３を参照して、記憶部１６０−３のエントリの有効ビット（Ｖａｌｉｄ）が「１」、及びメインコントローラ命令済みフラグ（Ｒｅｑ＿ｉｓｓｕｅｄ）が「０」のとき、ＭＣ２００に当該エントリに対応する命令を投入するための信号Ｓ１６０−１０ａを選択回路１６０−１１に供給するように動作する。
【０１３４】
選択回路１６０−１１は、選択信号Ｓ１６０−１０ａをＬＢエントリ監視部１６０−１０から受け取ると、選択信号Ｓ１６０−１０ａ生成の条件となったエントリを置換する置換処理命令を、第１優先制御回路６１に供給する。
【０１３５】
ＬＢエントリ監視部１６０−１０は、１６０−３のエントリの有効ビット（Ｖａｌｉｄ）及びメモリへの要求発行完了（Ｒｅｑ＿ｉｓｓｕｅｄ）、Ｌ２置換命令完了（ＭＯ＿ＣＰＬＴ）及びメモリコントローラ応答受信（ＭＳ＿ｃｐｌｔ）が「１」であり、ホールド（ｈｌｄ  ｆｌｇ）が「０」のときに信号Ｓ１６０−１０ｂを選択回路１６０−１２に供給するように動作する。置換回路１６０−１２は、ＬＢエントリ監視部１６０−１０から信号Ｓ１６０−１０ｂを受け取ると、選択部６１にＭＣ置換命令を出力する。
【０１３６】
なお、図９Ａでは、１つのロードバッファを示したが、図５に示すようにＬ２キャッシュＲＡＭがバンク分けされる場合、ロードバッファはバンク分けされたＬ２キャッシュＲＡＭ１１０ａ、１１０ｂ毎に用意される。このように、バンク分けされたＬ２キャッシュＲＡＭとロードバッファとをバンク毎にセットにして用意することで、図１２で後述するように、互いに異なるバンクであれば、Ｌ２タグＲＡＭへのアクセス、又は、ＬＢのＰＡ一致検出を同じサイクルで実行することが可能になる。
【０１３７】
［ヒットバッファ］
ヒットバッファ（ＨＢ）１７０は、第１パイプライン７０がキャッシュヒットを判定した場合、キャッシュヒットが生じたＰＦ命令の要求アドレス等を保持する記憶回路である。第２パイプライン８０は、ＬＢ１６０に保持されるエントリのＰＡが、プリフェッチ対象のＰＡに一致するかどうか判定する処理を実行するが、主記憶装置２２０からデータをロードし終わると、ＬＢ１６０から対応するエントリが削除される。そのため、第２パイプライン８０の処理終了後に、第１パイプラインで主記憶装置２２０からのロードを終了したＰＦ命令によるＬ２キャッシュＲＡＭ１１０へのアクセスが生じる。そこで、第２パイプライン８０でＰＦ命令の処理が終了するように、第１パイプラインでキャッシュヒットしたヒットバッファ１７０でＰＦ命令を保持して、第２パイプライン８０により（何と何との）ＰＡ一致検出可能とすることで、第１パイプライン７０のＰＦ命令処理を削減することが出来る。
【０１３８】
ヒットバッファ１７０は、ＬＢ１６０とは別にヒットバッファ用の記憶回路を有してもよいし、ロードバッファ１６０にヒットバッファの役割を加えてもよい。
【０１３９】
図１０Ａ及び図１０Ｂは、ヒットバッファの機能を加えたロードバッファの一例である。図１０Ａ及び図１０Ｂに図示されるロードバッファ１６０−３ｂは、有効ビット（Ｖａｌｉｄ）を保持する領域と、ホールド（ＨＬＤ）を保持する領域との間に、ヒットバリッド（Ｈｉｔ＿Ｖａｌｉｄ）を格納する記憶領域を有する。ヒットバリッドは、ロードバッファ１６０−３ｂの対応するエントリがヒットバッファとして使用されているか否かを示すフラグである。ヒットバリッドが「１」の場合に、対応するエントリがヒットバッファとして使用されている。ヒットバリッドは、有効ビット（Ｖａｌｉｄ）とは排他的なビット値が格納される。つまり、第１又は第２パイプラインが、ＬＢ１６０のエントリによって主記憶装置２２０からデータをロードして、有効ビット（Ｖａｌｉｄ）が「０」に代わると、ヒットバリッド（Ｈｉｔ＿Ｖａｌｉｄ）が「１」になる。通常、空きエントリ選択部１６２は、有効ビット（Ｖａｌｉｄ）が「０」のエントリを「空きエントリ」とみなしてエントリ選択部１６１に通知するため、有効ビット（Ｖａｌｉｄ）が「０」のエントリは新しいエントリに上書きされる。したがって、ロードバッファ１６０−３ｂのエントリは、次のエントリに上書きされるまでヒットバッファ１７０として利用可能である。ヒットバッファの記憶領域は、ロードバッファ１６０−３ｂにおいて、大きな記憶領域を占有しない。このように、ロードバッファ１６０−３ｂ内の一部の記憶領域をヒットバッファ１７０とすることで、ロードバッファ１６０−３ｂの記憶領域を不当に大きくすることはない。
【０１４０】
ＰＦ命令またはＬＤ命令により第１パイプライン７０がキャッシュミスを検出した場合、第１パイプライン７０の処理完了時に、エントリ選択部１６０−１により、ロードバッファ１６０−３ｂのエントリのうち、対応する有効ビットが「０」であるエントリを獲得する。その場合、ヒットバリッドも「０」であるエントリを優先的に選択することで、ヒットバリッドのデータをより長時間、ロードバッファ１６０−３ｂに保持することができ、第２パイプライン８０がヒットバリッドに基づいてＰＦ命令の処理を実行できるので、第１パイプライン７０のＰＦ命令処理負荷を軽減することが出来る。
【０１４１】
空きエントリ選択部１６２は、有効ビットが「０」且つヒットバリッドが「０」であるエントリが存在しなければ、有効ビットが「０」且つヒットバリッドが「１」であるエントリの中から、新しいエントリを選択する。
【０１４２】
ＰＦ命令またはＬＤ命令を処理する第１パイプライン７０がキャッシュヒットを検出した場合、パイプラインの完了時に、有効ビッドが「０」且つヒットバリッドが「０」であるエントリを選択して、選択したエントリにキャッシュヒットしたデータを登録する。選択されたエントリには、第１パイプライン７０からＰＡ、ＣＯＤＥ、ＰＦ、Ｌ２＿ｗａｙ＿ＩＤ等の情報が送出され、エントリに格納され、ヒットバリッドが「１」になるとともに、有効ビットも「１」にする。
【０１４３】
ロードバッファにヒットバッファ機能を追加する場合、図９Ａに示したロードバッファ１６０の周辺回路に加えて、図１０Ａの例ではＡＮＤ回路１６０−８、ＯＲ回路１６０−９、１６０−１４が加えられる。ＡＮＤ回路１６０−８は、記憶部１６０−３のエントリの数だけある。ＡＮＤ回路１６０−８は、ＰＡ比較部１６０−５の出力信号と、ヒットバリッドの値とを入力信号として受け取り、入力信号がいずれも値「１」である場合、ＯＲ回路１６０−９に値「１」の信号を出力する。ＯＲ回路１６０−９は、ＡＮＤ回路１６０−８の出力信号を入力信号として受け取り、いずれかのＡＮＤ回路１６０−８出力のビット値が「１」である場合、ＯＲ回路１６０−１４に値が「１」の信号を出力する。ＯＲ回路１６０−１４は、ＯＲ回路１６０−７の出力信号と、ＯＲ回路１６０−９の出力信号を受け取り、いずれかの信号が「１」であれば、「ＰＡ一致通知」として値が「１」の信号を、第２パイプライン８０に出力する。
【０１４４】
このように、第２パイプライン８０への「ＰＡ一致通知」は、ロードバッファに格納されるＰＦ命令のＰＡ一致と、ヒットバッファとして利用されているエントリに格納されるＰＡとの一致を含む。第２パイプライン８０では、ヒットバッファの一致でも、ロードバッファの一致でも、ＰＦ命令の完了処理を実行するために使用されるので、ＯＲ回路１６０−７の出力信号と、ＯＲ回路１６０−９の出力信号は、ＯＲ回路１６０−１４で論理和演算される。
【０１４５】
また、第１パイプライン７０のフロー毎に、ＬＢ１６０は、第１パイプライン７０又は第２パイプライン８０から送出されるＰＡと１６０−３ｂの各有効エントリとのＰＡ一致を検出し、その結果を第１パイプライン７０又は第２パイプライン８０に送出する。ただし、第１パイプラインではタグを常時検索することから、ヒットバリッドに基づくキャッシュヒットの判定は不要であるため、第１パイプライン７０へ送出するのは、ＬＢ１６０の有効エントリのＰＡ一致結果のみでよい。これに対して、第２パイプライン８０へは、ＬＢ１６０の有効エントリのＰＡ一致結果と有効ヒットバッファエントリのＰＡ一致結果との論理和を送出する。
【０１４６】
第２パイプライン８０は、ＨＢのＰＡ一致条件により、ＬＢ一致条件に加えてキャッシュヒット条件によってもＰＦ命令を完了させることができる。ＬＢ１６０は、ＭＣ２００からのデータ応答を受け置換命令を第１パイプライン７０に対して出力し、その出力完了とともに、エントリの有効ビットを「０」にすることで、エントリを開放する。
【０１４７】
［第１パイプライン制御］
図１１は、第１及び第２パイプラインによる処理の一例を示す図である。第１パイプライン７０は、要求読出（ＲＲ）、優先順位決定（ＰＤ１、ＰＤ２）、読出用ＰＡ入力（ＰＩ）、タグ読出（ＴＲ）、キャッシュヒット検出（ＣＤ）、処理結果通知（ＲＮ）、及び要求処理判断（ＲＰ）のステージを有する。第１パイプライン７０はさらに、タグ更新ＰＡ入力）（ＴＩ）、タグ更新動作（ＴＷ）、ＰＡ転送（ＬＰ）、ＰＡ一致検出（ＬＤ）、及びＰＡ一致結果転送（ＬＴ）のステージを有する。
【０１４８】
要求読出（ＲＲ）ステージでは、第１パイプライン７０は、ＬＤポート６４又はＰＦポート６６またはＭＯポート６３またはＬＢ１６０に保持される要求を読み取る。
【０１４９】
優先順位決定（ＰＤ１、ＰＤ２）ステージでは、ＬＤポート６４、ＰＦポート６６、ＭＯポート６３またはＬＢ１６０から読み取った要求を第１優先制御回路６１に供給して、第１パイプライン７０は所定の優先順位により第１優先制御回路６１により決定された要求を受け取る。
【０１５０】
読出用ＰＡ入力（ＰＩ）ステージでは、第１パイプライン７０は、Ｌ２タグＲＡＭ１４０にアクセス対象データの物理アドレスを入力する。ＰＡ入力ステージでは、第１パイプライン７０は、ＬＢ１６０へのＰＡ転送（ＬＰ）も行う。
【０１５１】
タグ読出（ＴＲ）ステージでは、第１パイプライン７０は、Ｌ２タグＲＡＭ１４０からタグを読み出す。タグ読出ステージでは、第１パイプライン７０は、ＬＢ１６０でのＰＡ一致検出（ＬＤ）も行う。
【０１５２】
キャッシュヒット検出（ＣＤ）ステージでは、第１パイプライン７０は、Ｌ２キャッシュＲＡＭ１１０のキャッシュヒット又はキャッシュミスを検出する。キャッシュヒット検出ステージでは、第１パイプライン７０は、ＬＢ１６０でのＰＡ一致結果転送（ＬＴ）も行う。
【０１５３】
要求処理判断（ＲＰ）ステージでは、キャッシュヒット検出ステージの検出結果に従って、処理がなされる。キャッシュミス検出の場合、第１パイプライン７０は、ＬＢ１６０のエントリにＬＤ命令を投入して、処理結果通知（ＲＮ）ステージで、ＬＤポート６４へ完了通知を出力する。ＰＦ命令の場合は処理結果通知ステージで、ＰＦポート６６へ完了通知を出力する。
【０１５４】
ＬＤ命令がキャッシュヒット検出の場合、第１パイプライン７０は、Ｌ２データＲＡＭ１２０からデータを読み出して、処理結果通知（ＲＮ）ステージで、ＬＤポート６４へ完了通知を供給する。第１パイプライン７０は、ＬＢ１６０へＬＤ命令投入後、ＬＢ１６０から「ＰＡ一致通知」を受け取り、ＬＤポート６４に中止通知を供給する。
【０１５５】
ＬＢ１６０は、ＭＣ置換命令の完了通知を受け取ると、完了通知により特定されたエントリを開放する。その他、ＬＤ命令が処理されなかった場合、第１パイプライン７０は、処理結果通知ステージで、ＬＢ１６０に中止通知を供給する。
ＰＦ命令がキャッシュヒット検出の場合、第１パイプライン７０は、処理結果通知ステージで、ＰＦポート６６へ完了通知を供給する。第１パイプライン７０は、ＬＢ１６０へＰＦ命令投入後、ＬＢ１６０から「ＰＡ一致通知」を受け取り、ＬＢ１６０で保持する要求間に差異がなければ、第１パイプライン７０は、ＰＦポート６６に完了通知を供給する。
【０１５６】
タグ更新ＰＡ入力ステージでは、第１パイプライン７０は、主記憶装置２２０や、Ｌ１キャッシュＲＡＭ１６から出力されたデータによるタグ更新用のＰＡを受け取る。タグ更新動作ステージでは、第１パイプライン７０は、入力されたＰＡを用いてＬ２タグＲＡＭ１４０のタグデータの更新を行う。つまり、タグ更新動作ステージでは、Ｌ２データＲＡＭ１２０及びＬ２タグＲＡＭ１４０に対して書き込み動作が行われる。
【０１５７】
４０１は、第１パイプライン７０によるパイプライン処理の第１フローを示す。４０２は、第１フローの開始から２サイクル後に実行されるパイプライン処理の第２フローを示す。４０３は、第２フロー開始から２サイクル後に実行されるパイプライン処理の第３フローを示す。４０４は、第３フロー開始から２サイクル後に実行されるパイプライン処理の第４フローを示す。
【０１５８】
パイプライン処理４０１〜４０４に示すように、第１パイプライン７０は、先行するフローに対して、２サイクル遅れて後続フローを実行する。このように、２クロックサイクル遅れて後続フローを実行するために、例えば、１サイクルおきにパイプラインが実行されないアイドルサイクルが設定される。
【０１５９】
４１１は、「９」サイクルで行われるパイプライン処理４０１のタグ書き込み処理を示す。４１２は、「８」サイクルで行われるパイプライン処理４０３のタグ読み出し処理を示す。４１３は、「１０」サイクルで行われるパイプライン処理４０４のタグ読み出し処理を示す。図１１に示されるように、「９」サイクルのタグ書き込み処理４１１と、「８」サイクルのタグ読み出し処理４１２及び「１０」サイクルのタグ読み出し処理４１３は、同サイクルに生じない。このように、先行フローから２クロックサイクル遅れて後続フローの処理を行うことで、各フローの偶数クロックサイクルで行われるタグ読み出し動作と、各フローの奇数クロックサイクルで行われるタグ書き込み動作は、異なるクロックサイクルで実施することが可能になる。
【０１６０】
図４に示すＬ２キャッシュＲＡＭ１１０は、読み出し／書き込み共有の１ポートＲＡＭであり、ライトアンプ１２３ａ〜１２３ｄ、１４３ａ〜１４３ｄとセンスアンプ１２４ａ〜１２４ｄ、１４４ａ〜１４４ｄとは、共通カラム線を使い、同サイクルでメモリセルへの書き込みと読み出しは出来ない。同じサイクルで読み出し及び書き込み動作をするには、１つのセルに書き込み用カラム線と、読み出し用カラム線とを設ける必要がある。このように、同じサイクルで書き込みと読み出しが可能なＬ２キャッシュＲＡＭは、複雑で且つコスト的に高価になる。上記のように、第１パイプライン７０が、先行フローから２クロックサイクル遅れて後続フローを実行することで、読み出しと書き込みが同じサイクルで実行されず、Ｌ２キャッシュＲＡＭを読み出し／書き込み共有の１ポートＲＡＭとすることが出来る。
【０１６１】
［第２パイプライン制御］
第２パイプライン８０のステージは、上述した要求読出ステージ、優先順位決定ステージ、ＰＡ一致検出ステージ、ＬＢへのＰＡ転送ステージ、要求処理判断ステージ、処理結果通知ステージが行われる。図１１に示す４５１、４６１は、パイプライン処理の一例を示す。このうち、パイプライン処理４５１は、第１パイプラインパイプライン処理４０１におけるＰＡ一致検出の前に、ＰＡ一致検出を行なう例を示している。また、パイプライン処理４６１は、パイプライン処理４０１によるＰＡ一致検出の後に、ＰＡ一致検出を行なう例を示している。なお、第２パイプライン８０は、ＰＡ一致検出処理において、ＬＢ１６０におけるＰＡ一致の代わりに、又は、ＬＢ１６０におけるＰＡ一致に加えて、図１０Ａ及び図１０Ｂを用いて説明したヒットバッファとＰＦ命令対象データとの一致処理を行ってもよい。
【０１６２】
４１４は、「４」サイクルで行われるパイプライン処理４０４のＰＡ一致検出処理であり、４５２は、「３」サイクルで行われるパイプライン処理４５１のＰＡ一致検出処理である。４６２は、「５」サイクルで行われるパイプライン処理４６１のＰＡ一致検出処理である。
【０１６３】
第２パイプライン８０のＰＡ一致検出処理４５２、４６２は、第１パイプライン７０のＰＡ一致検出処理４１４と異なるクロックサイクルでＬＢ１６０でのＰＡ一致検出処理を行う。そのため、第１パイプライン７０と第２パイプライン８０は、ＰＡ一致検出処理で、アドレス一致検出回路を共用しながらも、第１パイプライン７０を停止するなどの影響を一切与えずに済む。
【０１６４】
なお、第２のパイプラインではＬＢとのＰＡ一致検出結果に基づく処理を決定しているので、第１のパイプラインによるパイプライン処理と比べて処理サイクル数を減らすことは可能である。しかし、ＰＦポートから第１パイプラインと第２パイプラインとに同時に１つのＰＦ命令が発行され、ＰＦ命令が双方のパイプラインに投入される場合には、以下の理由により第２のパイプラインによるパイプライン処理のサイクル数は、第１のパイプラインによるパイプライン処理のサイクル数と同一とすることが好ましい。
第１パイプライン処理と第２パイプライン処理とのサイクル数を揃えることで、ＰＦポートはＰＦ命令に対する完了通知あるいは中止通知を同時に受け取ることが出来る。このような場合、ＰＦポートが第２のパイプラインからの完了通知を無視し、第１パイプラインからの完了通知に従って処理の完了、および対応する記憶部６６−３のエントリの開放処理を行なうような、第１パイプラインからの完了通知を優先とする優先順位論理を設定することで、ＰＦポートが受け取る完了通知を１つに絞ることができ、完了通知を受けるための受け口は１つのみ設ければよくなる。ただし、第１パイプラインの処理段数と、第２のパイプラインの処理段数とが一致しない場合は、ＰＦポートに同時に達する完了通知が別個のリクエストに基づく通知となる可能性がある。この場合には、双方のパイプラインからの完了通知を受けられるようにするために、受け口を２つ設ける必要がある。
図１１に示すように、「７」サイクルで処理結果通知を、第１パイプラインと第２パイプラインとが同時に行うために、パイプライン処理４５１の「５」及び「６」サイクルと、パイプライン処理４６１の「３」サイクルにアイドルサイクルがある。このように、各パイプラインが同じサイクルで処理結果通知を行うことで、ＰＦポート６６は、同じタイミングで第１パイプライン７０及び第２パイプライン８０からＰＦ命令に関する完了通知又は中止通知を受け取る。ＰＦポート６６では、第１パイプライン７０からの完了通知を優先とする選択回路１６０−１５により完了通知を１つに絞ることで、完了通知の受け口としてデコーダ１６０−４を１つにすることが出来る。
【０１６５】
［バンク化されたＲＡＭに対するパイプライン処理］
図１２は、バンク化されたＬ２キャッシュＲＡＭに対する第１及び第２パイプラインによる処理の一例を示す図である。プログラムＡに示すように、Ｌ２キャッシュＲＡＭ１１０ａ又はＬ２キャッシュＲＡＭ１１０ｂに対して同じサイクルに読み出し及び書き込みを同時することは出来ない。しかし、Ｌ２キャッシュＲＡＭ１１０ａに読み出し又は書き込みが行われているサイクルと同じサイクルで、Ｌ２キャッシュＲＡＭ１１０ｂに対して読み出し又は書き込みを行うことは出来る。Ｌ２キャッシュＲＡＭ１１０ａとＬ２キャッシュＲＡＭ１１０ｂは、メモリセルは別個に有しているからである。また、パイプライン処理においては、同じサイクルで２つのパイプライン処理を実行することも可能である。例えば、ＰＡ一致検出処理は、複数のパイプライン処理を同じサイクルで実行することが出来る。
【０１６６】
４０１ａは、Ｌ２キャッシュＲＡＭ１１０ａに対する第１パイプライン７０のパイプライン処理であり、４０１ｂは、Ｌ２キャッシュＲＡＭ１１０ｂに対する第１パイプライン７０のパイプライン処理である。４５１ａは、Ｌ２キャッシュＲＡＭ１１０ａに対する第２パイプライン８０のパイプライン処理であり、４５１ｂは、Ｌ２キャッシュＲＡＭ１１０ｂに対する第２パイプライン８０のパイプライン処理である。パイプライン処理４０１ａに対して後続フローであるパイプライン処理４０１ｂは、１サイクル遅れである。パイプライン処理４５１ａに対して後続フローであるパイプライン処理４５１ｂは、１サイクル遅れである。このように、後続フローを１サイクル後に実行できるのは、バンク分けによって、同一のＬ２キャッシュＲＡＭに同サイクルで読み出し、書き込みが生じないようにすることが出来るからである。
【０１６７】
４７１は、「４」サイクルにおける第１パイプライン７０によるＰＡ一致検出処理であり、４７２は、「３」サイクルにおける第２パイプライン８０によるＰＡ一致検出処理である。４７３は、「５」サイクルにおける第１パイプライン７０によるＰＡ一致検出処理であり、４７２は、「４」サイクルにおける第２パイプライン８０によるＰＡ一致検出処理である。処理４７１と処理４７４は、同一サイクルのＰＡ一致検出処理である。図７に示すように、ＰＡ一致は、ＬＢ１６０のエントリ毎にＰＡ一致検出するため、同じサイクルで２つのＰＡ一致検出を行うことも可能である。
【０１６８】
このように、バンク分けによって、Ｌ２キャッシュＲＡＭへの同サイクルでの読み出し及び書き込みを行わずに、１サイクル後にフローを実行して、同サイクルで複数の処理が可能なＰＡ一致検出処理を行うことで、回路のアイドル期間を少なくすることができる。
【符号の説明】
【０１６９】
１０    プロセッサコア
１３    レジスタ
６０    パイプライン選択部
６１    第１優先制御回路
６２    第２優先制御回路
６３    ＭＯポート
６４    ＬＤポート
６６    ＰＦポート
７０    第１パイプライン
８０    第２パイプライン
９０    Ｌ２キャッシュコントローラ
１００    演算処理装置
１１０    Ｌ２キャッシュＲＡＭ
１２０    Ｌ２データＲＡＭ
１４０    Ｌ２タグＲＡＭ
１６０    ロードバッファ
１７０    ヒットバッファ
２２０    主記憶装置
【図１】
0005482801.tif 000002
【図２】
0005482801.tif 000003
【図３】
0005482801.tif 000004
【図４】
0005482801.tif 000005
【図５】
0005482801.tif 000006
【図６】
0005482801.tif 000007
【図７】
0005482801.tif 000008
【図８】
0005482801.tif 000009
【図９Ａ】
0005482801.tif 000010
【図９Ｂ】
0005482801.tif 000011
【図１０Ａ】
0005482801.tif 000012
【図１０Ｂ】
0005482801.tif 000013
【図１１】
0005482801.tif 000014
【図１２】
0005482801.tif 000015