(57)【要約】【課題】非投機的にプリフェッチしたデータがアクセスされる以前にキャッシュメモリから破棄されるのを防止し、ハードウェア量が増大するのを抑制する。【解決手段】プロセッサから充填リクエストを受け付けたときには主記憶からキャッシュメモリへデータを読み込んでキャッシュメモリへ登録し、プロセッサからメモリ命令を受け付けたときには前記キャッシュメモリのデータにアクセスするキャッシュ制御部と、を備えたキャッシュメモリにおいて、キャッシュメモリのキャッシュラインは、登録されたデータが充填リクエストによってキャッシュラインへ書き込まれたか前記メモリ命令によってアクセスされたか否かを示す情報を格納する登録情報格納部を備え、キャッシュ制御部は充填リクエストに基づいてプリフェッチするときに登録情報格納部に情報をセットし、メモリ命令に基づいてキャッシュラインへアクセスするときに登録情報格納部の情報をリセットする。【選択図】図１
2009098934.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリのデータを読み込むロード命令及び前記キャッシュメモリへデータを書き込むストア命令を含むメモリ命令と、前記データに対する演算命令を発行する制御部と、
前記制御部が発行した前記命令を実行する命令実行部と、
前記制御部が発行した前記メモリ命令を受け付けて、前記キャッシュメモリへデータを読み込む充填リクエストを前記キャッシュメモリに発行する充填部と、を備えたプロセッサから前記充填リクエストを受け付けたときには主記憶からキャッシュメモリへデータを読み込んでキャッシュメモリへ登録し、前記プロセッサからメモリ命令を受け付けたときには前記キャッシュメモリのデータにアクセスするキャッシュ制御部と、
前記主記憶のアドレスに対応付けて前記データを格納する複数のキャッシュラインを備えたキャッシュメモリにおいて、
前記キャッシュラインは、
当該キャッシュラインに登録されたデータが前記充填リクエストによって前記キャッシュラインへ書き込まれたか前記メモリ命令によってアクセスされたか否かを示す情報を格納する登録情報格納部を備え、
前記キャッシュ制御部は、
前記充填リクエストに基づいて主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部に所定の情報をセットし、前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の所定の情報をリセットすることを特徴とするキャッシュメモリ。
【請求項２】
前記キャッシュ制御部は、
新たなデータを前記主記憶から読み込んでキャッシュメモリへ登録するときに、前記登録情報格納部の情報がリセットされたキャッシュラインを選択することを特徴とする請求項１に記載のキャッシュメモリ。
【請求項３】
前記キャッシュ制御部は、
前記プロセッサからの充填リクエストまたはメモリ命令で要求されたデータがキャッシュメモリにない場合にキャッシュミスと判定して、前記充填リクエストまたはメモリ命令で要求されたデータを前記主記憶から読み込んでキャッシュメモリへ登録することを特徴とする請求項２に記載のキャッシュメモリ。
【請求項４】
前記プロセッサは、
前記制御部と、前記命令実行部と、前記充填部と、を含む第１の処理ユニットと、
前記キャッシュメモリのデータを読み込むロード命令及び前記キャッシュメモリへデータを書き込むストア命令を含むメモリ命令と、前記データに対する演算命令を発行する第２の制御部と、前記第２の制御部が発行した前記命令を実行する第２の命令実行部と、前記第２の制御部が発行した前記メモリ命令を受け付けて、前記キャッシュメモリへデータを読み込む充填リクエストを前記キャッシュメモリに発行する第２の充填部と、を備えた第２の処理ユニットと、を有し、
前記キャッシュラインの登録情報格納部は、
前記第１の処理ユニットからの充填リクエストまたはメモリ命令に対する前記情報を格納する第１の格納部と、前記第２の処理ユニットからの充填リクエストまたはメモリ命令に対する前記情報を格納する第２の格納部と、を有し、
前記キャッシュ制御部は、
前記第１の処理ユニットからの充填リクエストに基づいて主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部の第１の格納部に所定の情報をセットし、前記第１の処理ユニットからの前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の第１の格納部の所定の情報をリセットし、
前記第２の処理ユニットからの充填リクエストに基づいて主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部の第２の格納部に所定の情報をセットし、前記第２の処理ユニットからの前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の第２の格納部の所定の情報をリセットすることを特徴とする請求項１に記載のキャッシュメモリ。
【請求項５】
前記メモリ命令は、
前記充填部から充填リクエストを発行する第１のメモリ命令と、前記充填部から充填リクエストを発行しない第２のメモリ命令を含み、
前記キャッシュ制御部は、
前記プロセッサから前記第１のメモリ命令を受け付けたときに前記登録情報格納部の情報をリセットし、前記プロセッサから前記第２のメモリ命令を受け付けたときには前記登録情報格納部に対する操作を禁止することを特徴とする請求項１に記載のキャッシュメモリ。
【請求項６】
主記憶のアドレスに対応付けて前記データを格納する複数のキャッシュラインを備えたキャッシュメモリと、
前記キャッシュメモリのデータを読み込むロード命令及び前記キャッシュメモリへデータを書き込むストア命令を含むメモリ命令と、前記データに対する演算命令を発行する制御部と、
前記制御部が発行した前記命令を実行する命令実行部と、
前記制御部が発行した前記メモリ命令を受け付けて、前記キャッシュメモリへデータを読み込む充填リクエストを前記キャッシュメモリに発行する充填部と、
前記充填リクエストを受け付けたときには前記主記憶からキャッシュメモリへデータを読み込んでキャッシュメモリへ登録し、前記命令実行部からメモリ命令を受け付けたときには前記キャッシュメモリのデータにアクセスするキャッシュ制御部と、を備えたプロセッサにおいて、
前記キャッシュラインは、
当該キャッシュラインに登録されたデータが前記充填リクエストによって前記キャッシュラインへ書き込まれたか前記メモリ命令によってアクセスされたか否かを示す情報を格納する登録情報格納部を備え、
前記キャッシュ制御部は、
前記充填リクエストに基づいて前記主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部に所定の情報をセットし、前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の所定の情報をリセットすることを特徴とするプロセッサ。
【請求項７】
前記キャッシュ制御部は、
新たなデータを前記主記憶から読み込んでキャッシュメモリへ登録するときに、前記登録情報格納部の情報がリセットされたキャッシュラインを選択することを特徴とする請求項６に記載のプロセッサ。
【請求項８】
前記キャッシュ制御部は、
前記充填部からの充填リクエストまたは前記命令実行部からのメモリ命令で要求されたデータがキャッシュメモリにない場合にキャッシュミスと判定して、前記充填リクエストまたはメモリ命令で要求されたデータを前記主記憶から読み込んでキャッシュメモリへ登録することを特徴とする請求項７に記載のプロセッサ。
【請求項９】
前記プロセッサは、
前記制御部と、前記命令実行部と、前記充填部と、を含む第１の処理ユニットと、
前記キャッシュメモリのデータを読み込むロード命令及び前記キャッシュメモリへデータを書き込むストア命令を含むメモリ命令と、前記データに対する演算命令を発行する第２の制御部と、前記第２の制御部が発行した前記命令を実行する第２の命令実行部と、前記第２の制御部が発行した前記メモリ命令を受け付けて、前記キャッシュメモリへデータを読み込む充填リクエストを前記キャッシュメモリに発行する第２の充填部と、を備えた第２の処理ユニットと、を有し、
前記キャッシュラインの登録情報格納部は、
前記第１の処理ユニットからの充填リクエストまたはメモリ命令に対する前記情報を格納する第１の格納部と、前記第２の処理ユニットからの充填リクエストまたはメモリ命令に対する前記情報を格納する第２の格納部と、を有し、
前記キャッシュ制御部は、
前記第１の処理ユニットからの充填リクエストに基づいて主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部の第１の格納部に所定の情報をセットし、前記第１の処理ユニットからの前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の第１の格納部の所定の情報をリセットし、
前記第２の処理ユニットからの充填リクエストに基づいて主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部の第２の格納部に所定の情報をセットし、前記第２の処理ユニットからの前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の第２の格納部の所定の情報をリセットすることを特徴とする請求項６に記載のプロセッサ。
【請求項１０】
前記メモリ命令は、
前記充填部から充填リクエストを発行する第１のメモリ命令と、前記充填部から充填リクエストを発行しない第２のメモリ命令を含み、
前記キャッシュ制御部は、
前記命令実行部から前記第１のメモリ命令を受け付けたときに前記登録情報格納部の情報をリセットし、前記命令実行部から前記第２のメモリ命令を受け付けたときには前記登録情報格納部に対する操作を禁止することを特徴とする請求項６に記載のプロセッサ。
【請求項１１】
前記プロセッサは、
前記充填部が発行した充填リクエストの数と、前記命令実行部が発行したメモリ命令の数を計数して、前記メモリ命令の数が充填リクエストの数以上とならないように、前記充填部を制御する発行制御部をさらに備えたことを特徴とする請求項６に記載のプロセッサ。
【請求項１２】
前記発行制御部は、
前記メモリ命令の数が充填リクエストの数に等しくなると、前記命令実行部のメモリ命令に優先して前記充填部から充填リクエストの発行を指令することを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
前記発行制御部は、
前記メモリ命令の数と充填リクエストの数の差が所定の値になると、前記充填部の充填リクエストを破棄するように指令することを特徴とする請求項１１に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュを備えたプロセッサの改良に関し、特に、キャッシュへのプリフェッチを行うベクトルプロセッサの改良に関する。
【背景技術】
【０００２】
多量のデータを処理するスーパーコンピュータなどでは、ベクトルプロセッサを広く採用している。ベクトルプロセッサの性能を向上させる技術としては、演算に必要なデータをベクトルプロセッサに備えたキャッシュメモリ（以下、キャッシュ）へ予め充填しておくプリフェッチ機能と、キャッシュ上のデータをレジスタ（またはベクトルレジスタ）へ読み込むロードアクセス（またはキャッシュへ書き込むストアアクセス）の機能とを分離するものが非特許文献１等で提案されている。
【０００３】
これは、ベクトルプロセッサにデータを読み込むベクトルロード命令（以下、ロード命令）に対し、ベクトルレジスタへのデータの格納を行うロードアクセスに先行して、キャッシュへの充填リクエストを発行しておくことで、非投機的なハードウェアプリフェッチを実現し、キャッシュミスを低減することでベクトルプロセッサの性能向上を図り、かつ、主記憶アクセスのためのハードウェア量（例えば、回路面積）を低減するものである。
【０００４】
つまり、上記非特許文献１では、プリフェッチ機能がロード命令を受け付けると、キャッシュを制御するキャッシュ制御部へ充填リクエストを発行して、非投機的なプリフェッチを実行する。その後、ロードアクセス機能がロード命令を実行することでキャッシュ上のデータを読み込むことができる。一般に、ベクトルプロセッサでは、一つの演算命令で多数のデータを処理するため、ロード命令の前に演算命令がある場合では、プリフェッチ機能がロード命令を受け付けてから、このロード命令が実際に実行されるまでのサイクルタイムが長くなるため、上記非特許文献１では非投機的なプリフェッチによりキャッシュの利用効率を向上させることができる。
【０００５】
ここで、キャッシュへデータを単純にプリフェッチする技術（例えば、投機的なプリフェッチ）は、ベクトルプロセッサに限らず、ｘ８６等のスカラプロセッサ（または汎用プロセッサ）においても実現されているが、上記非特許文献１では、プリフェッチ機能とロードアクセス機能を分離してハードウェアに実装し、将来ロードアクセスにより必ずアクセスされるデータをプリフェッチする非投機的プリフェッチを実現する点が異なる。
【０００６】
また、キャッシュへプリフェッチしたデータが、ロードアクセスされる以前に破棄されるのを防ぐ技術としては、ソフトウェアによるものが知られており、例えば、Freescale Semiconductor社のe200z6 PowerPCコアでは、キャッシュロックプリフェッチ命令（dcbtls、dcbtstls、icbtls）およびキャッシュロック解除命令（dcblc、icblc）を実装している。この種のプロセッサでは、キャッシュロックプリフェッチ命令、ロード命令、キャッシュロック解除命令といった命令列を予めコンパイルしておくことで実現可能となっている。
【非特許文献１】Christopher Batten、 Ronny Krashinsky、 Steve Gerding、 Krste Asanovic、「Cache Refill/Access Decoupling for Vector Machines」、Computer Science and Artificial Intelligence Laboratory  Massachusetts Institute of Technology  刊、[online]、「平成１９年９月２０日検索」、インターネット＜http://www.mit.edu/~cbatten/work/vpf-talk-caw04.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記非特許文献１では、プリフェッチ機能がロード命令を受け付けるとキャッシュ制御部へ充填リクエストを発行して、非投機的なプリフェッチを実行し、その後、ロードアクセス機能がロード命令を実行することでキャッシュ上のデータを読み込むことができる。
【０００８】
しかしながら、上記非特許文献１では、ロード命令が多数あった場合や、ロード命令の前に実行中の演算に多大なサイクルタイムを要する場合では、プリフェッチ機能による非投機的なプリフェッチが、ロード命令の実行より先行し過ぎるとキャッシュにプリフェッチされたデータが後続のプリフェッチによって破棄されてしまい、先にプリフェッチを行ったロード命令が実行されるとキャッシュミスを発生して、ベクトルプロセッサの性能が低下するという問題がある。
【０００９】
この問題点に対して、上記非特許文献１では、カウンタを設けて、ロードアクセスに先行する充填リクエストのキャッシュラインの総数が一定数以下になるよう、充填リクエストの発行を抑える技術が提案されている。
【００１０】
しかしながら、この技術ではベクトルプロセッサに実装する回路の増大は少なくて済む反面、あるキャッシュ・インデックスに対する充填リクエストが多発した場合（例えば、２のべき乗のストライドアクセス）には効果がなく、プリフェッチされたデータが破棄される問題は解消しない。
【００１１】
さらに上記非特許文献１では、ひとつのキャッシュ・インデックスに対してon-the-fly（演算処理中）で発行される充填リクエスト数がキャッシュラインのウェイ数以下となるよう、充填リクエストの発行を抑える記載も開示されてはいる。しかしながら、キャッシュラインのウェイ数以下となるように充填リクエストの発行を抑える回路を実装すると、キャッシュ制御の回路が複雑になってしまい、プリフェッチ機能とロードアクセス機能を分離させてハードウェア量を低減するという目的を達成することが難しくなる、という問題があった。
【００１２】
また、上記非特許文献１に上述のソフトウェアによるキャッシュロックプリフェッチ命令およびキャッシュロック解除命令を組み合わせることで、キャッシュ上にプリフェッチされたデータが破棄されることを抑制することはできる。しかしながら、この場合では、ロード命令の前後にキャッシュロックプリフェッチ命令およびキャッシュロック解除命令をコンパイラで挿入しておく必要があり、これらの命令を実際に実行したときに充填リクエストがロード命令よりも大幅に先行していない場合でもキャッシュロックプリフェッチ命令およびキャッシュロック解除命令が無駄に実行されてしまうため、ベクトルプロセッサの性能を低下させる、という問題がある。
【００１３】
また、上記非特許文献１では、ロードアクセスが充填リクエストに追い付いたり追い越したりした場合には、充填リクエストはキャッシュに対する余計なアクセスとなり、ベクトルプロセッサの性能を低下させる、という問題がある。
【００１４】
そこで本発明は、上記問題点に鑑みてなされたもので、プリフェッチ機能とメモリアクセス機能を分離したプロセッサにおいて、非投機的にプリフェッチしたデータがアクセスされる以前にキャッシュから破棄されるのを防止し、かつ、ハードウェア量が増大するのを抑制することを目的とする。さらに、メモリアクセスが充填リクエストに追い付いたり追い越したりした場合には、充填リクエストによる無駄なキャッシュアクセスを防いで、プロセッサの性能を確保することを目的とする。
【課題を解決するための手段】
【００１５】
本発明は、キャッシュメモリのデータを読み込むロード命令及び前記キャッシュメモリへデータを書き込むストア命令を含むメモリ命令と、前記データに対する演算命令を発行する制御部と、前記制御部が発行した前記命令を実行する命令実行部と、前記制御部が発行した前記メモリ命令を受け付けて、前記キャッシュメモリへデータを読み込む充填リクエストを前記キャッシュメモリに発行する充填部と、を備えたプロセッサから前記充填リクエストを受け付けたときには主記憶からキャッシュメモリへデータを読み込んでキャッシュメモリへ登録し、前記プロセッサからメモリ命令を受け付けたときには前記キャッシュメモリのデータにアクセスするキャッシュ制御部と、前記主記憶のアドレスに対応付けて前記データを格納する複数のキャッシュラインを備えたキャッシュメモリにおいて、前記キャッシュラインは、当該キャッシュラインに登録されたデータが前記充填リクエストによって前記キャッシュラインへ書き込まれたか前記メモリ命令によってアクセスされたか否かを示す情報を格納する登録情報格納部を備え、前記キャッシュ制御部は、前記充填リクエストに基づいて主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部に所定の情報をセットし、前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の所定の情報をリセットする。
【００１６】
また、前記キャッシュ制御部は、新たなデータを前記主記憶から読み込んでキャッシュメモリへ登録するときに、前記登録情報格納部の情報がリセットされたキャッシュラインを選択する。
【００１７】
また、主記憶のアドレスに対応付けて前記データを格納する複数のキャッシュラインを備えたキャッシュメモリと、前記キャッシュメモリのデータを読み込むロード命令及び前記キャッシュメモリへデータを書き込むストア命令を含むメモリ命令と、前記データに対する演算命令を発行する制御部と、前記制御部が発行した前記命令を実行する命令実行部と、前記制御部が発行した前記メモリ命令を受け付けて、前記キャッシュメモリへデータを読み込む充填リクエストを前記キャッシュメモリに発行する充填部と、前記充填リクエストを受け付けたときには前記主記憶からキャッシュメモリへデータを読み込んでキャッシュメモリへ登録し、前記命令実行部からメモリ命令を受け付けたときには前記キャッシュメモリのデータにアクセスするキャッシュ制御部と、を備えたプロセッサにおいて、前記キャッシュラインは、当該キャッシュラインに登録されたデータが前記充填リクエストによって前記キャッシュラインへ書き込まれたか前記メモリ命令によってアクセスされたか否かを示す情報を格納する登録情報格納部を備え、前記キャッシュ制御部は、前記充填リクエストに基づいて前記主記憶から読み込んだデータを前記キャッシュラインへ登録するときに前記登録情報格納部に所定の情報をセットし、前記メモリ命令に基づいて当該キャッシュラインのデータへアクセスするときに前記登録情報格納部の所定の情報をリセットする。
【００１８】
また、前記プロセッサは、前記充填部が発行した充填リクエストの数と、前記命令実行部が発行したメモリ命令の数を計数して、前記メモリ命令の数が充填リクエストの数以上とならないように、前記充填部を制御する発行制御部をさらに備える。
【発明の効果】
【００１９】
したがって、本発明は、メモリ命令に先立って非投機的なプリフェッチを実行する充填部と、メモリ命令を実行してキャッシュメモリへのアクセスを行う命令実行部を分離し、キャッシュメモリのキャッシュラインに設けた登録情報格納部で、キャッシュラインに登録されたデータが充填リクエストによってこのキャッシュラインへ書き込まれたことと、メモリ命令によってアクセスされたことを明示することで、登録情報格納部に所定の情報がセットされているときには、後続のメモリ命令によってキャッシュメモリから破棄されるのを防ぐことができ、充填リクエストに対応するメモリ命令で確実にキャッシュヒットすることが可能となって、ハードウェア量が前記従来例のように増大するのを抑制しながらプロセッサの性能を向上させることができる。
【００２０】
また、充填部が発行した充填リクエストの数と、命令実行部が発行したメモリ命令の数を計数して、メモリ命令の数が充填リクエストの数以上とならないように、充填部を制御することで、メモリ命令よりも遅れた充填リクエストによる無駄なキャッシュアクセスを防いで、プロセッサの性能を向上することができる。また、メモリ命令に優先して充填リクエストを発行して非投機的なプリフェッチを行うことで、キャッシュミスを防いでプロセッサの性能を向上することができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００２２】
図１は、本発明の第１の実施形態を示し、本発明を適用したベクトルプロセッサを備えた計算機のブロック図である。
【００２３】
計算機１は、ベクトル演算を行うベクトルプロセッサ１０と、データ及びプログラムを格納する主記憶３０と、ベクトルプロセッサ１０からのアクセス要求（リードまたはライトの要求）に基づいて主記憶３０にアクセスする主記憶制御部２０を含んで構成される。なお、主記憶制御部２０は、例えば、チップセットなどで構成されて、ベクトルプロセッサ１０のフロントサイドバスに接続される。また、主記憶制御部２０と主記憶３０は、メモリバスを介して接続される。なお、計算機１は図示しないディスク装置やネットワークインターフェイスを備えていても良い。
【００２４】
ベクトルプロセッサ１０は、主記憶３０から読み込んだデータまたは命令を一時的に格納するキャッシュメモリ（以下、キャッシュ）２００と、キャッシュ２００に格納されたデータを読み込んでベクトル演算を実行するベクトル処理ユニット１００から構成される。
【００２５】
ベクトル処理ユニット１００は、キャッシュ２００（または主記憶３０）から読み込んだ命令列をロードストア及び演算ユニット１２０及び充填ユニット１３０のキュー（後述）へ発行し、ベクトルプロセッサ１０全体を制御する制御プロセッサ１１０と、制御プロセッサ１１０からの命令を一時的に格納するベクトルコマンドキュー１２１と、ベクトルコマンドキュー１２１の命令を実行するロードストア及び演算ユニット（以下、ロードストア／演算ユニット）１２０と、制御プロセッサ１１０から所定の命令（例えば、ロード命令）を一時的に格納する充填コマンドキュー１３１と、充填コマンドキュー１３１に格納された所定の命令に基づいてキャッシュ２００に主記憶３０のデータを非投機的にプリフェッチ（キャッシュ２００への先行充填）する命令を発行する充填ユニット１３０と、充填ユニット１３０が発行する非投機的プリフェッチの命令（充填リクエスト）と、ロードストア／演算ユニット１２０が発行するキャッシュ２００へのアクセスを制御する発行制御部１４０と、を主体に構成される。すなわち、ベクトルプロセッサ１０は、キャッシュ２００へプリフェッチを行う充填ユニット１３０と、キャッシュ２００へのアクセスを行うロードストア／演算ユニット１２０を分離して、発行制御部１４０が両者を調停する構成となっている。
【００２６】
キャッシュ２００は、充填ユニット１３０からの充填リクエストと、ロードストア／演算ユニット１２０からのメモリ命令（ロード命令、ストア命令）を受け付けて、これらの命令に含まれる主記憶３０のアドレスに対応するデータを含むキャッシュライン２２０の操作を行うキャッシュ制御機構（キャッシュ制御部）２１０と、所定のバイト数のデータを格納する複数のキャッシュライン２２０から構成される。キャッシュ２００の構成は、例えば、ｎウェイセットアソシエイティブで構成することができる。
【００２７】
ここで、キャッシュライン２２０の構成を図２に示す。キャッシュライン２２０は、主記憶３０のアドレスの一部を格納するタグ２２１と、所定のラインサイズで構成されて主記憶３０の一部のデータを格納するデータ部２２４と、どの順序で各ウェイのキャッシュライン２２０がアクセスされ、新しい情報を格納するためにどのウェイを次に追い出すべきかを示す情報を格納するＬＲＵ（Least Recently Used）２２３と、非投機的プリフェッチで読み込まれたキャッシュラインの状態を示す登録状態（Ｒビット）２２２から構成される。キャッシュライン２２０の構成のうち、登録状態２２２を除く上記タグ２２１、ＬＲＵ２２３、データ部２２４は、周知または公知の技術を用いることができる。
【００２８】
ここで、登録状態２２２は、キャッシュ制御機構２１０によって値が設定されるものであり、値が「１」の場合は主記憶３０からキャッシュ２００へ読み込まれてロードストア／演算ユニット１２０からアクセスされていない状態を示し、値が「０」の場合は非投機的プリフェッチに対応する命令をロードストア／演算ユニット１２０が実行してアクセスが完了した状態を示す。そして、後述するようにロード命令に先行して非投機的なプリフェッチによりデータをキャッシュしたキャッシュライン２２０は、所定のロード命令（またはストア命令）が実行されるまで登録状態２２２は「１」を保持し、キャッシュ２００から追い出されるのを防止する。
【００２９】
次に、ベクトルプロセッサ１０の制御プロセッサ１１０が発行する命令の一例と、充填コマンドキュー１３１及びベクトルコマンドキュー１２１へ格納される命令の関係を図３に示す。
【００３０】
図３に示す命令体系において、制御プロセッサ１１０は、ロード命令とストア命令及び演算命令を発行し、これらの全ての命令をベクトルコマンドキュー１２１へ登録する。一方、制御プロセッサ１１０は、ロード命令のみを充填コマンドキュー１３１へ登録する。さらに、ロードストア／演算ユニット１２０がロード命令及びストア命令を発行してキャッシュミスしたときには、キャッシュ制御機構２１０がキャッシュミスとなったデータを主記憶３０からキャッシュ２００へ登録する。
【００３１】
図３の例では、ベクトルプロセッサ１０は、ロード命令が発行されるとベクトルコマンドキュー１２１へ登録するとともに、充填コマンドキュー１３１にもロード命令を登録し、充填ユニット１３０は充填コマンドキュー１３１に登録されたロード命令に対応する主記憶３０上のデータをキャッシュ２００のキャッシュライン２２０へ読み込む非投機的プリフェッチを実行する。
【００３２】
本発明のベクトルプロセッサ１０では、図３のような単純な命令体系に代わって、図４に示すような命令体系を用いることができる。
【００３３】
図４に示す命令体系は、上記図３に示したロード命令とストア命令に非投機的プリフェッチ（先行充填）の有無と、キャッシュ２００へ登録しない命令を加えたものである。
【００３４】
先行充填なしキャッシュ登録ロード命令は、非投機的プリフェッチを行わずに当該ロード命令の実行時にキャッシュミスした場合にはキャッシュ２００へデータを登録する。このため、先行充填なしキャッシュ登録ロード命令は充填コマンドキュー１３１に登録せず、ベクトルコマンドキュー１２１のみに登録される。
【００３５】
先行充填ありキャッシュ登録ロード命令は、図３に示したロード命令と同様であり、非投機的プリフェッチを実行する。このため、当該ロード命令は、充填コマンドキュー１３１とベクトルコマンドキュー１２１へ登録される。また、当該ロード命令の実行時にキャッシュミスした場合には、当該ロード命令で指定する主記憶３０のデータをキャッシュ２００に登録する。
【００３６】
キャッシュ非登録ロード命令は、当該ロード命令の実行時に主記憶３０からロードストア／演算ユニット１２０にデータを読み込む命令であり、キャッシュ２００を使用しないロード命令である。このキャッシュ非登録ロード命令は、主記憶３０からロードストア／演算ユニット１２０にデータを読み込むまでの待ち時間が必要になってもキャッシュ２００上のデータを保持しておきたいときに使用することができる。
【００３７】
上記のような各ロード命令と同様に、ストア命令についても先行充填ありキャッシュ登録ストア命令、先行充填なしキャッシュ登録ストア命令及びキャッシュ非登録ストア命令が定義される。
【００３８】
なお、以下の説明では図４に示した命令体系を使用するものとし、先行充填ありキャッシュ登録ロード命令、先行充填なしキャッシュ登録ロード命令及びキャッシュ非登録ロード命令の総称をロード命令とし、先行充填ありキャッシュ登録ストア命令、先行充填なしキャッシュ登録ストア命令及びキャッシュ非登録ストア命令の総称をストア命令とする。
【００３９】
ここで、充填ユニット１３０及びロードストア／演算ユニット１２０がキャッシュ制御機構２１０に対して発行する命令は、図５に示すように、ロード命令、ストア命令及び充填リクエスト（プリフェッチ命令）の何れかを示す種別と、主記憶３０上のアドレスで構成される。
【００４０】
充填ユニット１３０は、充填コマンドキュー１３１に登録された先行充填ありキャッシュ登録ロード命令（またはストア命令）を順次処理し、当該命令で指定された主記憶３０上のアドレスのデータをキャッシュ２００にプリフェッチする命令（充填リクエスト）をキャッシュ制御機構２１０へ発行する。
【００４１】
発行制御部１４０は、充填ユニット１３０が発行する充填リクエストと、ロードストア／演算ユニット１２０が発行するロード命令またはストア命令のうち上記先行充填ありのメモリ命令（ロード命令とストア命令の総称）を監視して、メモリ命令の発行数が充填リクエストの発行数に追い付いたり追い越した場合には、当該充填リクエストを破棄してキャッシュ制御機構２１０が無駄にキャッシュ２００や主記憶３０をアクセスするのを防止したり、メモリ命令に優先して充填リクエストを発行させることでキャッシュミスを抑制する。このため、発行制御部１４０は、充填ユニット１３０が発行した充填リクエストの発行数と、ロードストア／演算ユニット１２０が発行したメモリ命令の発行数を監視するカウンタ１４１を備える。
【００４２】
次に、発行制御部１４０で行われる処理の一例を図６のフローチャートに示す。発行制御部１４０は、ベクトルプロセッサ１０の起動時にカウンタ１４１を０にリセットして初期化を行う。
【００４３】
次に、ステップＳ２では、発行制御部１４０がロードストア／演算ユニット１２０を監視して、ロードストア／演算ユニット１２０がベクトルコマンドキュー１２１から読み込んだメモリ命令を処理中（キャッシュ２００または主記憶３０へのアクセス中）であるか否かを判定する。ロードストア／演算ユニット１２０がこのメモリ命令を処理中であれば、ステップＳ９に進んで充填ユニット１３０の監視を行い、処理中でなければステップＳ３に進んでロードストア／演算ユニット１２０の監視を行う。
【００４４】
ステップＳ３では、発行制御部１４０がロードストア／演算ユニット１２０にベクトルコマンドキュー１２１から読み込んだ実行前のメモリ命令があるか否かを判定し、メモリ命令があればステップＳ４へ進む一方、メモリ命令がない場合にはステップＳ９へ進む。
【００４５】
ステップＳ４では、ロードストア／演算ユニット１２０のメモリ命令が充填リクエストを行うものか否かを判定する。メモリ命令が当該命令の前に充填ユニット１３０で先行してデータのプリフェッチを行う場合（先行充填ありキャッシュ登録ロード命令またはストア命令）にはステップＳ５へ進む。一方、メモリ命令がデータのプリフェッチを必要としない場合（先行充填なしキャッシュ登録ロード命令、キャッシュ非登録ロード命令及び先行充填なしキャッシュ登録ストア命令、キャッシュ非登録ストア命令）の場合にはステップＳ７へ進む。
【００４６】
ステップＳ５では、カウンタ１４１の値が０、１、２以上の何れであるかを判定し、値が０の場合にはステップＳ９へ進んで充填ユニット１３０の処理へ移り、値が１の場合にはステップＳ８へ進んで充填ユニット１３０に読み込まれたメモリ命令を削除し、値が３以上の場合にはステップＳ６へ進んでカウンタ１４１の値を１だけ減算する。
【００４７】
ここで、カウンタ１４１の値は、１以上であればキャッシュ２００にプリフェッチされてからまだアクセスされていないデータがあることを示し、値が０の場合は先行充填ありキャッシュ登録ロード命令またはストア命令でプリフェッチされたデータはキャッシュ２００に無いことを示す。つまり、カウンタ１４１は、充填ユニット１３０が行ったプリフェッチが、ロードストア／演算ユニット１２０が行う先行充填ありメモリ命令に対してどれだけ先行しているかを示す指標となる。
【００４８】
カウンタ１４１の値が０であれば、ロードストア／演算ユニット１２０が次に先行充填ありのメモリ命令を実行すると、キャッシュミスとなって主記憶３０からキャッシュ２００にデータを読み込むまでの時間が無駄になる。そこで、この場合には、ステップＳ９へ進んで充填ユニット１３０のメモリ命令を実行することで、キャッシュミスを回避する。
【００４９】
カウンタ１４１の値が２以上であれば、充填ユニット１３０によるキャッシュ２００へのプリフェッチが、ロードストア／演算ユニット１２０の先行充填ありのメモリ命令に対して十分先行しているので、カウンタ１４１の値を１だけ減算してから、ステップＳ７で先行充填ありの命令を実行するように発行制御部１４０がロードストア／演算ユニット１２０に指令する。この後、発行制御部１４０はステップＳ２へ戻って処理を繰り返す。
【００５０】
一方、カウンタ１４１の値が１の場合には、ステップＳ８へ進んで充填コマンドキュー１３１から充填ユニット１３０に読み込まれたメモリ命令を削除するよう発行制御部１４０が充填ユニット１３０に指令する。すなわち、ロードストア／演算ユニット１２０が次の先行充填ありの命令を実行すると、キャッシュ２００上の非投機的プリフェッチは無くなる（登録状態２２２がリセットされる）。そして、ロードストア／演算ユニット１２０がこの先行充填ありのメモリ命令に続いて、他の先行充填ありのメモリ命令を実行する場合、充填ユニット１３０に読み込まれたメモリ命令でプリフェッチを行っても、後続のメモリ命令に間に合わない場合がある。そこで、カウンタ１４１の値が１のときには、後続の先行充填ありのメモリ命令に対応するプリフェッチの契機となる充填ユニット１３０に読み込まれたメモリ命令を削除しておくことで、充填ユニット１３０が無駄なプリフェッチを行うのを防止する。
【００５１】
次に、上記ステップＳ２でロードストア／演算ユニット１２０がメモリ命令を実行中の場合には、ステップＳ９へ進んで充填ユニット１３０が充填コマンドキュー１３１から読み込んだメモリ命令（先行充填ありのメモリ命令）を処理中であるか否かを判定する。充填ユニット１３０がメモリ命令を実行中の場合にはステップＳ２へ戻って上記処理を繰り返す。一方、充填ユニット１３０がメモリ命令を処理していない場合には、ステップＳ１０に進む。
【００５２】
ステップＳ１０では、発行制御部１４０が充填ユニット１３０に処理前のメモリ命令があるか否かを判定し、メモリ命令がなければステップＳ２へ戻って上記処理を繰り返す。一方、充填ユニット１３０にメモリ命令がある場合には、ステップＳ１１に進んで、カウンタ１４１を１だけインクリメントしてから、ステップＳ１２へ進む。ステップＳ１２では、発行制御部１４０が充填ユニット１３０に対して充填コマンドキュー１３１から読み込んだメモリ命令の処理を開始するよう指令する。その後、ステップＳ２へ戻って上記処理を繰り返す。
【００５３】
以上の処理により、発行制御部１４０はカウンタ１４１の値に基づいてロードストア／演算ユニット１２０のメモリ命令と、充填ユニット１３０の充填リクエストの何れを優先させるか判定し、充填リクエストの発行を制御することで、キャッシュミスの発生を防ぎ、無駄なプリフェッチを抑制する。すなわち、発行制御部１４０は、充填リクエストによる非投機的なプリフェッチが、ロードストア／演算ユニット１２０からの先行充填ありのキャッシュ登録メモリ命令よりも先行するように、充填ユニット１３０とロードストア／演算ユニット１２０を制御する。これにより、一つのベクトル演算で長いサイクルタイムを要するベクトルプロセッサ１０Ａでは、制御プロセッサ１１０から充填コマンドキュー１３１とベクトルコマンドキュー１２１へほぼ同時に先行充填ありキャッシュ登録メモリ命令が登録されても、ベクトルコマンドキュー１２１に先行充填ありキャッシュ登録メモリ命令の前に演算命令がある場合では、充填ユニット１３０が充填リクエストを発行してキャッシュライン２２０に登録した後に、ロードストア／演算ユニット１２０でベクトル演算が完了し、当該充填リクエストに対応するメモリ命令が発行されればキャッシュヒットとすることができる。ただし、先行充填ありキャッシュ登録メモリ命令の直前のベクトル演算に必要なサイクルタイムは不明であるので、発行制御部１４０は先行充填ありのキャッシュ登録メモリ命令の数が、充填リクエストの数に追い付く直前（カウンタ＝１）の場合には、当該メモリ命令がロードストア／演算ユニット１２０から発行された後に、当該メモリ命令に基づいて非投機的なプリフェッチが実行されるのを防ぐため、充填ユニット１３０に読み込まれたメモリ命令を削除するのである。
【００５４】
次に、充填ユニット１３０で行われるメモリ処理の一例を図７のフローチャートに示す。なお、メモリ処理はキャッシュ２００に対する充填ユニットの発行などの処理を示し、本第１実施形態においては先行充填ありのメモリ命令に伴うプリフェッチ処理である。
【００５５】
まず、図７のステップＳ２１では、充填ユニット１３０が充填コマンドキュー１３１から読み込んだメモリ命令について、発行制御部１４０から処理開始の指示を受け付けたか否かを判定する。発行制御部１４０から処理開始の指示があればステップＳ２２へ進み、メモリ命令に対する処理開始の指示がない場合には、ステップＳ２５へ進む。
【００５６】
ステップＳ２２では、読み込まれたメモリ命令に対する削除の指令を発行制御部１４０から受け付けたか否かを判定する。充填ユニット１３０が削除の指令を受けた場合にはステップＳ２６に進み、削除の指令を受けていない場合にはステップＳ２３にすすむ。
【００５７】
ステップＳ２３では、充填ユニット１３０が読み込んだメモリ命令に対して、プリフェッチの処理を行う。すなわち、メモリ命令に含まれるアドレスのデータを主記憶３０からキャッシュ２００へ登録する充填リクエストをキャッシュ制御機構２１０に発行する。メモリ命令には、複数のアクセス要素を含むことができ、プリフェッチの処理はこのアクセス要素単位で行われる。
【００５８】
次のステップＳ２４では、全てのアクセス要素についてメモリ命令の処理が完了したか否かを判定し、完了していなければステップＳ２２へ戻って上記処理を繰り返し、完了していればステップＳ２６に進んで、充填ユニット１３０に読み込んだメモリ命令は実行済みであるので削除する。
【００５９】
上記ステップＳ２１でメモリ命令の開始の指示を受けていない場合に進むステップＳ２５では、充填ユニット１３０に読み込まれたメモリ命令に対する削除の指令を発行制御部１４０から受け付けたか否かを判定する。充填ユニット１３０が削除の指令を受けていなければステップＳ２１へ戻って処理を繰り返し、削除の指令があればステップＳ２６へ進んで、処理前のメモリ命令を充填ユニット１３０から削除して、無駄なプリフェッチを抑制する。
【００６０】
以上の処理により、上記図６の発行制御部１４０からの指令によって、充填ユニット１３０は充填コマンドキュー１３１から読み込んだメモリ命令について処理を行ってプリフェッチの指令をキャッシュ制御機構２１０に発行し、または削除指令の場合には充填コマンドキュー１３１から読み込んだメモリ命令を破棄して無駄なプリフェッチを抑制する。
【００６１】
次に、ロードストア／演算ユニット１２０で行われるメモリ処理の一例を図８のフローチャートに示す。この処理は、所定の周期でロードストア／演算ユニット１２０で実行される。
【００６２】
まず、図８のステップＳ３１では、ロードストア／演算ユニット１２０がベクトルコマンドキュー１２１から読み込んだメモリ命令について、発行制御部１４０から処理開始の指示を受け付けたか否かを判定する。発行制御部１４０から処理開始の指示があればステップＳ３２へ進み、メモリ命令に対する処理開始の指示がない場合には、ステップＳ３１へ戻って処理開始の指示を待つ。
【００６３】
次にステップＳ３２では、発行制御部１４０から処理開始の指示を受け付けたロードストア／演算ユニット１２０が、ベクトルコマンドキュー１２１から読み込んだメモリ命令を実行してキャッシュ２００または主記憶３０へのアクセスを行う。上述のようにメモリ命令には、複数のアクセス要素を含むことができ、アクセスの処理はこのアクセス要素単位で行われる。
【００６４】
次のステップＳ３３では、全てのアクセス要素についてメモリ命令の処理が完了したか否かを判定し、完了していなければステップＳ３２へ戻って上記処理を繰り返し、完了していればステップＳ３４に進んで、ロードストア／演算ユニット１２０に読み込んだメモリ命令は実行済みであるので削除し、処理を終了する。
【００６５】
以上の処理により、上記図６の発行制御部１４０からの指令によって、ロードストア／演算ユニット１２０はベクトルコマンドキュー１２１から読み込んだメモリ命令を実行し、メモリ命令の実行が完了すると読み込んだメモリ命令を削除して次の命令に備える。
【００６６】
図９〜図１１は、キャッシュ制御機構２１０で行われる処理の一例を示すフローチャートで、図９はメインルーチンを示し、図１０はロードストア／演算ユニット１２０からのリクエストに応じたキャッシュ制御の一例を示すフローチャートを示し、図１１は充填ユニット１３０からのリクエストに応じたキャッシュ制御の一例を示すフローチャートを示す。
【００６７】
図９において、キャッシュ制御機構２１０は、ステップＳ４１でロードストア／演算ユニット１２０からのリクエスト（ロード命令またはストア命令）を受け付けたか否かを判定し、受け付けた場合にはステップＳ４２に進んで、ロードストア／演算ユニット１２０からのリクエストに基づくキャッシュ制御１を実行する。ロードストア／演算ユニット１２０からのリクエストを受け付けていない場合には、ステップＳ４３へ進んで、充填ユニット１３０から充填リクエスト（プリフェッチの指令）を受け付けたか否かを判定し、充填リクエストを受け付けた場合には、ステップＳ４４に進んで充填リクエストに基づくキャッシュ制御２を実行する。そして、ステップＳ４２またはＳ４４でキャッシュ制御が完了すると、再びステップＳ４１へ戻って上記処理を繰り返して実行する。
【００６８】
図１０は、上記図９のステップＳ４２で行われるキャッシュ制御１の詳細な内容を示すフローチャートである。
【００６９】
キャッシュ制御機構２１０は、ロードストア／演算ユニット１２０からのリクエスト（発行されたメモリ命令）を受け付けると（Ｓ５１）、まず、ステップＳ５２で、ロードストア／演算ユニット１２０が発行したメモリ命令が先行充填ありのメモリ命令（先行充填ありキャッシュ登録ロード命令及びストア命令）であるか否かを判定する。先行充填ありのメモリ命令の場合には、ステップＳ５３へ進み、先行充填なしの場合にはステップＳ５７へ進む。
【００７０】
ステップＳ５３では、キャッシュ制御機構２１０が先行充填ありのメモリ命令で指定される主記憶３０のアドレスに対応するキャッシュライン２２０のタグ２２１を検索し、該当するキャッシュライン２２０があれば、キャッシュヒットと判定してステップＳ５４へ進む。一方、主記憶３０のアドレスに対応するタグ２２１がない場合には、キャッシュミスと判定してステップＳ５５に進む。
【００７１】
キャッシュヒットの場合のステップＳ５４では、メモリ命令に対応したロードまたはストア処理をキャッシュヒットしたキャッシュライン２２０に対して実行する。そして、この場合では、先行充填ありのメモリ命令であるので、キャッシュライン２２０の登録状態（図中、Ｒビット）２２２を「０」にリセットして、非投機的プリフェッチのデータを先行充填ありのメモリ命令で使用済みとなったことを示す。また、キャッシュヒットしたキャッシュライン２２０のＬＲＵ２２３を更新しておく。
【００７２】
そして、ステップＳ６５へ進んでキャッシュ制御機構２１０で受け付けたメモリ命令を削除してから処理を終了する。
【００７３】
一方、ステップＳ５３の判定で、先行充填ありのメモリ命令でキャッシュミスとなったステップＳ５５では、当該先行充填ありのメモリ命令のデータをキャッシュ２００に読み込むため、リプレースの対象となるキャッシュライン２２０を以下の手順で検索する。
【００７４】
１．無効（Invalid）状態のキャッシュライン２２０をリプレースの対象として検索する。
【００７５】
２．無効状態のキャッシュライン２２０が無い場合には、登録状態２２２が「０」にリセットされているキャッシュライン２２０のうちＬＲＵ２２３が最も古いものをリプレースの対象として選択する。
【００７６】
３．登録状態２２２が「０」のキャッシュライン２２０が無い場合には、ＬＲＵ２２３が最も古いキャッシュライン２２０をリプレースの対象として選択する。
【００７７】
上記１〜３の手順でリプレースの対象となるキャッシュライン２２０を決定する。
【００７８】
キャッシュ制御機構２１０は、新たなデータをキャッシュ２００へ格納する際には、無効状態のキャッシュライン２２０を優先して書き込み対象（リプレース対象）とする。しかし、無効状態のキャッシュライン２２０が存在しない場合には、非投機的プリフェッチによって読み込んだデータを格納するキャッシュライン２２０のうち、登録状態２２２が０にリセットされたキャッシュラインであれば、後続のメモリ命令でアクセスされる可能性が低いので、登録状態２２２がリセットされたキャッシュライン２２０をリプレースの対象とする。このとき、ＬＲＵ２２３が最も古いキャッシュライン２２０を選択することで、後続のメモリ命令でアクセスされる可能性をさらに減らすことができる。
【００７９】
キャッシュ制御機構２１０は、上記１，２の手順によってキャッシュライン２２０を管理することで、非投機的プリフェッチを行いながらキャッシュ２００を有効に利用することが可能である。しかし、データによっては全てのキャッシュライン２２０の登録状態２２２が「１」となって後続のメモリ命令によるアクセス待ちとなったとき、ロードストア／演算ユニット１２０からのメモリ命令があるとキャッシュ２００にこれ以上データをキャッシュすることができないので、ロードストア／演算ユニット１２０の性能を低下させる恐れがある。このような状態を回避するため、上記３のように、単純にＬＲＵ２２３を参照して最も古いキャッシュライン２２０を解放するようにしても良い。
【００８０】
次に、ステップＳ５６では、キャッシュミスとなったアドレスのデータを読み込んで、上記ステップＳ５５で決定したキャッシュライン２２０に書き込むリプレースを実行する。その後、先行充填ありのメモリ命令に従ってロードまたはストアの処理を実行する。ロードまたはストアの処理が完了すると、登録状態２２２に「０」にリセットして、充填リクエストに対応する先行充填ありキャッシュ登録メモリ命令で使用したことを示す。さらに、ＬＲＵ２２３を更新してからステップＳ６５に進んで、キャッシュ制御機構２１０で受け付けたメモリ命令を削除してから処理を終了する。
【００８１】
一方、上記ステップＳ５２の判定で、ロードストア／演算ユニット１２０からのリクエストが先行充填なしの場合のステップＳ５７では、当該リクエストのメモリ命令が、図４で示したキャッシュミス時にキャッシュ２００へ登録する命令（先行充填なしキャッシュ登録ロード命令及びストア命令）であればステップＳ５８へ進み、そうでなけば（キャッシュ非登録ロード命令及びストア命令）ステップＳ６２へ進む。
【００８２】
ステップＳ５８では、先行充填なしキャッシュ登録ロード命令及びストア命令で指定される主記憶３０のアドレスに対応するキャッシュライン２２０のタグ２２１を検索し、該当するキャッシュライン２２０があれば、キャッシュヒットと判定してステップＳ５９へ進む。一方、主記憶３０のアドレスに対応するタグ２２１がない場合には、キャッシュミスと判定してステップＳ６０に進む。
【００８３】
キャッシュヒットの場合のステップＳ５９では、メモリ命令に対応したロードまたはストア処理をキャッシュヒットしたキャッシュライン２２０に対して実行する。そして、キャッシュヒットしたキャッシュライン２２０のＬＲＵ２２３を更新しておく。なお、先行充填なしキャッシュ登録ロード命令及びストア命令の場合には、プリフェッチのデータを用いないので、充填ユニット１３０がキャッシュしたときに設定した登録状態２２２は変更しない。そして、ステップＳ６５へ進んでキャッシュ制御機構２１０で受け付けたメモリ命令を削除してから処理を終了する。
【００８４】
一方、ステップＳ５８の判定で、先行充填なしのメモリ命令でキャッシュミスとなったステップＳ６０では、当該先行充填なしのメモリ命令のデータをキャッシュ２００に読み込むため、リプレースの対象となるキャッシュライン２２０を上記ステップＳ５５と同様に、上記１〜３の手順で検索し、リプレースの対象となるキャッシュライン２２０を決定する。
【００８５】
次に、ステップＳ６１では、キャッシュミスとなったアドレスのデータを読み込んで、上記ステップＳ６０で決定したキャッシュライン２２０に書き込むリプレースを実行する。その後、先行充填なしのメモリ命令に従ってロードまたはストアの処理を実行する。ロードまたはストアの処理が完了すると、ステップＳ６５に進んで、キャッシュ制御機構２１０で受け付けたメモリ命令を削除してから処理を終了する。
【００８６】
一方、上記ステップＳ５７の判定で、ロードストア／演算ユニット１２０からのリクエストがキャッシュ非登録ロード命令及びストア命令の場合のステップＳ６２では、キャッシュ非登録ロード命令及びストア命令で指定される主記憶３０のアドレスに対応するキャッシュライン２２０のタグ２２１を検索し、該当するキャッシュライン２２０があれば、キャッシュヒットと判定してステップＳ６３へ進む。一方、主記憶３０のアドレスに対応するタグ２２１がない場合には、キャッシュミスと判定してステップＳ６４に進む。
【００８７】
キャッシュヒットの場合のステップＳ６３では、メモリ命令に対応したロードまたはストア処理をキャッシュヒットしたキャッシュライン２２０に対して実行する。そして、キャッシュヒットしたキャッシュライン２２０のＬＲＵ２２３を更新しておく。なお、キャッシュ非登録ロード命令及びストア命令の場合には、充填ユニット１３０による非投機的プリフェッチのデータを用いないので、充填ユニット１３０がキャッシュしたときに設定した登録状態２２２は変更しない。そして、ステップＳ６５へ進んでキャッシュ制御機構２１０で受け付けたメモリ命令を削除してから処理を終了する。
【００８８】
一方、ステップＳ６２の判定で、キャッシュ非登録のメモリ命令でキャッシュミスとなったステップＳ６４では、キャッシュ２００へデータを読み込まず、主記憶３０から直接ロードストア／演算ユニット１２０にデータを読み込んでロードまたはストアの処理を実行する。そして、ロードまたはストアの処理が完了すると、ステップＳ６５に進んで、キャッシュ制御機構２１０で受け付けたメモリ命令を削除してから処理を終了する。
【００８９】
以上の処理により、先行充填ありのメモリ命令の場合のみ、使用したキャッシュライン２２０の登録状態２２２を「０」にリセットして、非投機的プリフェッチのデータを先行充填ありのメモリ命令で使用済みとなったことを設定することで、当該キャッシュライン２２０を解放することができる。また、キャッシュミス時にキャッシュするデータは、無効状態、登録状態２２２がリセット、ＬＲＵ２２３の順で決定されたキャッシュラインに格納されるので、充填ユニット１３０が非投機的にプリフェッチしたデータが使用される以前にキャッシュ２００から破棄されるのを防止することができる。
【００９０】
図１１は、上記図９のステップＳ４４で行われるキャッシュ制御２の詳細な内容を示すフローチャートである。
【００９１】
キャッシュ制御機構２１０は、充填ユニット１３０からの充填リクエスト（プリフェッチ命令）を受け付けると（Ｓ７１）、まず、ステップＳ７２で、充填ユニット１３０が発行したプリフェッチ命令で指定される主記憶３０のアドレスに対応するキャッシュライン２２０のタグ２２１を検索し、該当するキャッシュライン２２０があれば、キャッシュヒットと判定してステップＳ７３へ進む。一方、主記憶３０のアドレスに対応するタグ２２１がない場合には、キャッシュミスと判定してステップＳ７５に進む。
【００９２】
ステップＳ７３では、キャッシュヒットしたキャッシュライン２２０は、後の先行充填ありキャッシュ登録メモリ命令で使用される非投機的なプリフェッチデータであるので、キャッシュ制御機構２１０は、当該キャッシュライン２２０の登録状態２２２に「１」をセットしてリプレースによる破棄を防ぐ。また、ＬＲＵ２２３を更新して、非投機的なプリフェッチを完了する。この後、ステップＳ７４で、キャッシュ制御機構２１０が読み込んだ充填ユニット１３０からの充填リクエストを削除してから処理を終了する。
【００９３】
一方、上記Ｓ７２の判定でキャッシュミスとなったステップＳ７５では、プリフェッチ命令で指定されたアドレスのデータを主記憶３０から読み込んでキャッシュ２００に登録するため、リプレースの対象となるキャッシュライン２２０を検索する。この検索は、無効状態のキャッシュライン２２０と、登録状態２２２が「０」にリセットされているキャッシュライン２２０を検索し、少なくとも一方のキャッシュライン２２０が存在するか否かを判定する。
【００９４】
無効状態または登録状態２２２がリセットされたキャッシュライン２２０が存在する場合にはステップＳ７６へ進み、リプレースの対象となるキャッシュライン２２０が存在しない場合には、図９のステップＳ４１へ戻って、リプレース可能なキャッシュライン２２０ができるまで待機する。
【００９５】
リプレースの対象となるキャッシュライン２２０が存在する場合のステップＳ７６では、無効状態のキャッシュライン２２０をリプレースの対象となるキャッシュライン２２０として選択する。なお、無効状態のキャッシュライン２２０が無い場合には、登録状態２２２が「０」にリセットされているキャッシュライン２２０のうちＬＲＵ２２３が最も古いものをリプレースの対象として選択する。
【００９６】
次に、ステップＳ７７では、キャッシュミスとなったアドレスのデータを主記憶３０から読み込んで、上記ステップＳ７６で決定したキャッシュライン２２０に書き込むリプレースを実行する。ここでは、充填リクエストに基づくプリフェッチであるのでリプレースしたキャッシュライン２２０の登録状態２２２に「１」をセットして、後に先行充填ありのメモリ命令が発行されるまでキャッシュ２００上に当該キャッシュライン２２０Ａのデータを保持する。ステップＳ７４に進んで、キャッシュ制御機構２１０で受け付けた充填リクエストを削除してから処理を終了する。
【００９７】
以上の処理により、キャッシュ制御機構２１０は充填ユニット１３０から充填リクエスト（非投機的プリフェッチ命令）を受け付けると、指定されたアドレスのデータがキャッシュ２００にあれば登録状態２２２に「１」をセットして、後に実行される先行充填ありのキャッシュ登録メモリ命令で使用することを明示し、リプレースされるのを防ぐ。そして、指定されたアドレスのデータがキャッシュ２００に無ければ、無効状態または登録状態２２２がリセットされたキャッシュライン２２０をリプレースの対象として選択し、このキャッシュライン２２０へ主記憶３０から読み込んだデータを格納し、さらに上記登録状態２２２を「１」にセットして後の先行充填ありのキャッシュ登録メモリ命令で使用することを明示する。
【００９８】
以上のように本発明の第１の実施形態によれば、ベクトルプロセッサの内部で、非投機的プリフェッチを実行する充填ユニット１３０と、メモリ命令を実行してキャッシュ２００または主記憶３０へのアクセスを行うロードストア／演算ユニット１２０を分離し、カウンタ１４１を備えた発行制御部１４０でこれらの充填ユニット１３０とロードストア／演算ユニット１２０のプリフェッチとメモリアクセスを制御することで、非投機的にプリフェッチしたデータがアクセスされる以前にキャッシュ２００から破棄されるのを防止し、かつ、ハードウェア量が前記従来例のように増大するのを抑制することができる。さらに、発行制御部１４０は、ロードストア／演算ユニット１２０のメモリアクセスと、充填ユニット１３０の充填リクエストの数を監視し、メモリアクセスが充填リクエストに追い付いたり追い越した場合には、充填リクエストの破棄や、メモリアクセスに優先して充填リクエストを発行させることで無駄なキャッシュアクセスを防いで、ベクトルプロセッサ１０の性能を確保することができる。
【００９９】
＜第２実施形態＞
図１２は、本発明の第２実施形態を示す計算機のブロック図である。前記第１実施形態のベクトルプロセッサがシングルコアであったのに対し、本第２実施形態のベクトルプロセッサ１０Ａはマルチコア（デュアルコア）の構成になった点が前記第１実施形態と異なる。
【０１００】
計算機１Ａは、複数のベクトル処理ユニット１００Ａ、１００Ｂを備えたマルチコアのベクトルプロセッサ１０Ａと、データ及びプログラムを格納する主記憶３０と、ベクトルプロセッサ１０からのアクセス要求（リードまたはライトの要求）に基づいて主記憶３０にアクセスする主記憶制御部２０を含んで構成される。
【０１０１】
ベクトルプロセッサ１０Ａは、主記憶３０から読み込んだデータまたは命令を一時的に格納するキャッシュ２００と、キャッシュ２００に格納されたデータを読み込んでベクトル演算を実行するベクトル処理ユニット１００から構成され、キャッシュ２００は複数のベクトル処理ユニット１００Ａ、１００Ｂで共有される。
【０１０２】
ベクトル処理ユニット１００Ａ、１００Ｂの構成は、前記第１実施形態と同様であり、各ベクトル処理ユニットは、ベクトル処理ユニット全体を制御する制御プロセッサ１１０と、非投機的なプリフェッチを行う充填ユニット１３０と、メモリアクセスを行うロードストア／演算ユニット１２０を分離して、カウンタ１４１を備えた発行制御部１４０で非投機的なプリフェッチとメモリアクセスを制御する構成である。
【０１０３】
キャッシュ２００は、キャッシュライン２２０Ａが前記第１実施形態と異なり、その他の構成は前記第１実施形態と同様である。なお、前記第１実施形態と同一のものには同一の符号を付した。
【０１０４】
キャッシュライン２２０Ａは、図１３で示すように、ベクトル処理ユニット１００Ａの充填ユニット１３０とロードストア／演算ユニット１２０からのリクエストに基づいて先行充填ありキャッシュ登録メモリ命令で使用状態を格納する登録状態２２２Ａと、ベクトル処理ユニット１００Ｂの充填ユニット１３０とロードストア／演算ユニット１２０からのリクエストに基づいて先行充填ありキャッシュ登録メモリ命令で使用状態を格納する登録状態２２２Ｂとを備えた点が第１実施形態と相違し、その他は同一の構成となっている。
【０１０５】
キャッシュ制御機構２１０は、充填ユニット１３０からの充填リクエストで主記憶３０からキャッシュ２００へ読み込んだデータをキャッシュライン２２０Ａに格納すると、充填リクエストを発行したベクトル処理ユニットに対応する当該キャッシュライン２２０Ａの登録状態２２２Ａと２２２Ｂの一方に「１」をセットし、後のメモリ命令で当該キャッシュライン２２０Ａを使用することを明示する。
【０１０６】
ベクトル処理ユニット１００Ａのロードストア／演算ユニット１２０が、先行充填ありキャッシュ登録メモリ命令を発行すると、キャッシュ制御機構２１０は該当するキャッシュライン２２０Ａに対してメモリ命令に応じたロードまたはストア処理を実施し、登録状態２２２Ａを「０」にリセットする。
【０１０７】
ベクトル処理ユニット１００Ｂのロードストア／演算ユニット１２０が、先行充填ありキャッシュ登録メモリ命令を発行すると、キャッシュ制御機構２１０は該当するキャッシュライン２２０Ｂに対してメモリ命令に応じたロードまたはストア処理を実施し、登録状態２２２Ｂを「０」にリセットする。
【０１０８】
キャッシュ制御機構２１０は、キャッシュミスが生じてキャッシュラインのリプレースを行う際には、無効状態のキャッシュライン２２０Ａと、登録状態２２２Ａと２２２Ｂの双方がリセットされているキャッシュライン２２０Ａをリプレースの対象となるキャッシュラインとして選択する。
【０１０９】
したがって、登録状態２２２Ａと２２２Ｂの少なくとも一方がセットされたキャッシュライン２２０Ａは、複数のベクトル処理ユニット１００Ａ、１００Ｂが先行充填ありのキャッシュ登録メモリ命令でアクセスするまでキャッシュ２００に保持される。これにより、マルチコアのベクトルプロセッサ１０Ａを用いた場合でも、非投機的にプリフェッチしたデータがアクセスされる以前にキャッシュ２００から破棄されるのを防止し、かつ、ハードウェア量が前記従来例のように増大するのを抑制することができる。
【０１１０】
次に、ベクトルプロセッサ１０Ａで行われる制御は、前記第１実施形態の図９〜図１１に示したキャッシュ制御機構２１０の制御の一部が前記第１実施形態と異なるだけで、他の発行制御部１４０や充填ユニット１３０及びロードストア／演算ユニット１２０の制御は前記第１実施形態と同様である。
【０１１１】
キャッシュ制御機構２１０で行われる制御のうち、前記第１実施形態と異なる部分は図１４、図１５で示すように、メモリ命令実行時の登録状態（Ｒビット）２２２Ａ、２２２Ｂの操作をベクトル処理ユニット１００Ａ、１００Ｂ毎に行う点であり、その他については前記第１実施形態と同様である。図１４は、前記第１実施形態の図１０に示したロードストア／演算ユニット１２０からのリクエストによるキャッシュ制御機構２１０の処理の一部を変更したもので、図１５は、前記第１実施形態の図１１に示した充填ユニット１３０からの充填リクエストによるキャッシュ制御機構２１０の処理の一部を変更したものである。
【０１１２】
図１４において、前記第１実施形態の図１０と異なる処理は、次のとおりである。
先行充填ありキャッシュ登録メモリ命令でキャッシュヒットしたときのステップＳ５４Ａでは、ロードストア／演算ユニット１２０からのメモリ命令に対応したロードまたはストア処理をキャッシュヒットしたキャッシュライン２２０Ａに対して実行する。そして、メモリ命令を発行したベクトル処理ユニット１００Ａ、１００Ｂに対応するキャッシュライン２２０Ａの登録状態（図中、Ｒビット）２２２Ａまたは２２２Ｂを「０」にリセットする。これにより、非投機的プリフェッチのデータがいずれのベクトル処理ユニット１００Ａ、１００Ｂが発行したモリ命令で使用したかを示す。なお、キャッシュヒットしたキャッシュライン２２０ＡのＬＲＵ２２３の更新は前記第１実施形態と同様である。
【０１１３】
次に、先行充填ありキャッシュ登録メモリ命令でキャッシュミスした場合のＳ５５Ａでは、リプレースの対象となるキャッシュライン２２０Ａの検索が、次のようになる。
【０１１４】
１．無効（Invalid）状態のキャッシュライン２２０Ａをリプレースの対象として検索する。
【０１１５】
２’．無効状態のキャッシュライン２２０が無い場合には、登録状態２２２Ａと２２２Ｂの全てが「０」にリセットされているキャッシュライン２２０ＡのうちＬＲＵ２２３が最も古いものをリプレースの対象として選択する。
【０１１６】
３．登録状態２２２Ａ、２２２Ｂの全てが「０」のキャッシュライン２２０Ａが無い場合には、ＬＲＵ２２３が最も古いキャッシュライン２２０Ａをリプレースの対象として選択する。
【０１１７】
上記１〜３の手順でリプレースの対象となるキャッシュライン２２０Ａを決定する。
【０１１８】
次に、ステップＳ５６Ａでは、キャッシュミスとなったアドレスのデータを読み込んで、上記ステップＳ５５Ａで決定したキャッシュライン２２０Ａに書き込むリプレース処理を実行する。その後、先行充填ありのメモリ命令に従ってロードまたはストアの処理を実行する。ロードまたはストアの処理が完了すると、メモリ命令を発行したベクトル処理ユニット１００Ａ、１００Ｂに対応する登録状態２２２Ａ、２２２Ｂに「０」にリセットして、いずれのベクトル処理ユニットが充填リクエストに対応する先行充填ありキャッシュ登録メモリ命令で使用したかを明示する。例えば、ベクトル処理ユニット１００Ａが、先行充填ありキャッシュ登録メモリ命令を発行した場合は、キャッシュ制御機構２１０は、登録状態２２２Ａを「０」にリセットし、他方の登録状態２２２Ｂは操作しない。したがって、全てのベクトル処理ユニットが当該キャッシュライン２２０Ａに対して先行充填ありキャッシュ登録メモリ命令を発行するまで、このキャッシュライン２２０Ａはキャッシュ２００に保持されることになる。
【０１１９】
また、先行充填なしのキャッシュ登録メモリ命令でキャッシュミスした場合のステップＳ６０Ａでは、当該先行充填なしのキャッシュ登録メモリ命令のデータをキャッシュ２００に読み込むため、リプレースの対象となるキャッシュライン２２０Ａを上記ステップＳ５５Ａと同様に、無効状態のキャッシュライン２２０Ａまたは登録状態２２２Ａ、２２２Ｂの全てがリセットされたキャッシュライン２２０Ａからリプレースの対象となるキャッシュラインを選択することになる。図１４については、その他の処理は前記第１実施形態の図１０と同様である。
【０１２０】
次に、図１５において、前記第１実施形態の図１１と異なる処理は、次のとおりである。
【０１２１】
充填ユニット１３０からの充填リクエストでキャッシュヒットした場合の、ステップＳ７３Ａでは、キャッシュ制御機構２１０に充填リクエストを発行したベクトル処理ユニット１００Ａ、１００Ｂに対応する登録状態２２２Ａ、２２２Ｂに「１」をセットしてリプレースによるキャッシュライン２２０Ａの破棄を防ぐ。すなわち、複数の登録状態２２２Ａ、２２２Ｂのうち、充填リクエストを発行したベクトル処理ユニットに対応する登録状態のみが「１」にセットされることになる。
【０１２２】
次に、充填ユニット１３０からの充填リクエストでキャッシュミスし、無効状態のキャッシュライン２２０Ａまたは登録状態２２２Ａ、２２２Ｂの全てがリセットされたキャッシュライン２２０Ａがあった場合の、ステップＳ７６Ａでは、上記図１４のステップＳ５５Ａと同様に、無効（Invalid）状態のキャッシュライン２２０Ａか、無効状態のキャッシュライン２２０が無い場合には、登録状態２２２Ａと２２２Ｂの全てが「０」にリセットされているキャッシュライン２２０ＡのうちＬＲＵ２２３が最も古いものか、登録状態２２２Ａ、２２２Ｂの全てが「０」のキャッシュライン２２０Ａが無い場合には、ＬＲＵ２２３が最も古いキャッシュライン２２０Ａをリプレースの対象として選択する。
【０１２３】
次に、ステップＳ７７Ａでは、キャッシュミスとなったアドレスのデータを主記憶３０から読み込んで、上記ステップＳ７６で決定したキャッシュライン２２０Ａに書き込むリプレースを実行する。このとき充填リクエストを発行したベクトル処理ユニット１００Ａ、１００Ｂに対応する登録状態２２２Ａ、２２２Ｂの一方に「１」をセットする。
【０１２４】
以上のように、本発明の第２実施形態のように、複数のベクトル処理ユニットを備えたベクトルプロセッサ１０Ａにおいても、登録状態２２２Ａと２２２Ｂの一方がセットされたキャッシュライン２２０Ａは、複数のベクトル処理ユニット１００Ａ、１００Ｂのうち充填リクエストを発行したベクトル処理ユニットが先行充填ありのキャッシュ登録メモリ命令でアクセスするまでキャッシュ２００に保持される。これにより、マルチコアのベクトルプロセッサ１０Ａを用いた場合でも、非投機的にプリフェッチしたデータがアクセスされる以前にキャッシュ２００から破棄されるのを防止し、かつ、ハードウェア量が前記従来例のように増大するのを抑制することができる。
【０１２５】
さらに、発行制御部１４０は、メモリアクセスが充填リクエストに追い付いたり追い越した場合には、充填リクエストの破棄や、メモリアクセスに優先して充填リクエストを発行させることで無駄なキャッシュアクセスを防いで、マルチコアのベクトルプロセッサ１０Ａの性能を確保することができる。
【０１２６】
＜補足＞
なお、上記実施形態では、登録状態２２２（または登録状態２２２Ａ、２２２Ｂ）に０または１をセットする例を示したが、カウンタとしても良く、複数のベクトルプロセッサが同一のキャッシュライン２２０をアクセスする場合には、アクセス回数を設定することで、全てのベクトルプロセッサのアクセスが完了するまでキャッシュ２００上に保持することができる。
【０１２７】
また、上記各実施形態では、ベクトルプロセッサ１０と主記憶制御部２０をフロントサイドバスで接続した例を示したが、ベクトルプロセッサ１０内に主記憶制御部を設け、ベクトルプロセッサ１０の主記憶制御部と主記憶３０をメモリバスで接続するようにしても良い。
【０１２８】
また、上記各実施形態では、本発明をベクトルプロセッサに適用した例を示したが、スカラープロセッサに適用しても良い。
【０１２９】
また、上記各実施形態では、本発明をひとつのキャッシュ２００に適用した例を示したが、複数の階層構造を備えたキャッシュに適用することができる。
【産業上の利用可能性】
【０１３０】
以上のように、本発明は、キャッシュを備えたプロセッサ及びキャッシュを備えたプロセッサで構成される計算機に適用することができる。
【図面の簡単な説明】
【０１３１】
【図１】第１の実施形態を示し、本発明を適用したベクトルプロセッサを備えた計算機のブロック図。
【図２】第１の実施形態を示し、キャッシュラインの一例を示すブロック図。
【図３】第１の実施形態を示し、命令体系の一例を示す説明図。
【図４】第１の実施形態を示し、命令体系の他の例を示す説明図。
【図５】第１の実施形態を示し、充填ユニット及びロードストア／演算ユニットがキャッシュ制御機構へ発行する命令の構成を示すブロック図。
【図６】第１の実施形態を示し、発行制御部で行われる処理の一例を示すフローチャート。
【図７】第１の実施形態を示し、充填ユニットで行われる処理の一例を示すフローチャート。
【図８】第１の実施形態を示し、ロードストア／演算ユニットで行われる処理の一例を示すフローチャート。
【図９】第１の実施形態を示し、キャッシュ制御機構で行われる処理の一例を示すフローチャートでメインルーチンを示す。
【図１０】第１の実施形態を示し、キャッシュ制御機構で行われる処理の一例を示すフローチャートでキャッシュ制御１のサブルーチンを示す。
【図１１】第１の実施形態を示し、キャッシュ制御機構で行われる処理の一例を示すフローチャートでキャッシュ制御２のサブルーチンを示す。
【図１２】第２の実施形態を示し、本発明を適用したマルチコアのベクトルプロセッサを備えた計算機のブロック図。
【図１３】第２の実施形態を示し、キャッシュラインの一例を示すブロック図。
【図１４】第２の実施形態を示し、キャッシュ制御機構で行われる処理の一例を示すフローチャートでキャッシュ制御１のサブルーチンを示す。
【図１５】第２の実施形態を示し、キャッシュ制御機構で行われる処理の一例を示すフローチャートでキャッシュ制御２のサブルーチンを示す。
【符号の説明】
【０１３２】
１０  ベクトルプロセッサ
２０  主記憶制御部
３０  主記憶
１００  ベクトル処理ユニット
１１０  制御プロセッサ
１２０  ロードストア／演算ユニット
１３０  充填ユニット
１４０  発行制御部
２００  キャッシュ制
２１０  キャッシュ制御機構
２２０  キャッシュライン
２２２  登録状態
【図１】
2009098934.tif 000003
【図２】
2009098934.tif 000004
【図３】
2009098934.tif 000005
【図４】
2009098934.tif 000006
【図５】
2009098934.tif 000007
【図６】
2009098934.tif 000008
【図７】
2009098934.tif 000009
【図８】
2009098934.tif 000010
【図９】
2009098934.tif 000011
【図１０】
2009098934.tif 000012
【図１１】
2009098934.tif 000013
【図１２】
2009098934.tif 000014
【図１３】
2009098934.tif 000015
【図１４】
2009098934.tif 000016
【図１５】
2009098934.tif 000017