(57)【要約】      （修正有）【課題】キャッシュにおける回路面積及び電力の増加とレイテンシの増加とを異なるＳＩＭＤ長に対して適切に抑制する演算処理装置を提供する。【解決手段】演算処理装置は、第１のデータ長のデータを演算可能であると共に第１のデータ長より長い第２のデータ長のデータの各部分に対して単一命令を並列に実行可能な演算部１１と、キャッシュメモリ１２とを含む。キャッシュメモリは、複数のウェイに対応するタグを格納するタグ部３０と、複数のウェイに対応するデータを格納するデータ部３１と、アクセスするデータが第１のデータ長及び第２のデータ長のいずれであるのかに関して命令の種別を判定する判定部２１と、タグ部とデータ部とを並列にアクセスする第１のパイプライン動作と、タグ部をアクセスした後にタグ判定結果に応じてデータ部をアクセスする第２のパイプライン動作とを、判定部による判定結果に応じて選択的に実行する管理部２６とを含む。【選択図】図１
2020095345.tif 000002
【特許請求の範囲】
【請求項１】
命令を発行する命令発行部と、
第１のデータ長のデータを演算可能であると共に、前記第１のデータ長より長い第２のデータ長のデータの各部分に対して単一の命令を並列に実行可能な演算部と、
データを保持するキャッシュメモリと
を含む演算処理装置であって、前記キャッシュメモリは、
複数のウェイに対応する複数のタグを格納するタグ部と、
前記複数のウェイに対応する複数のデータを格納するデータ部と、
前記命令発行部から発行された命令によりアクセスするデータが前記第１のデータ長及び前記第２のデータ長のいずれであるのかに関して前記命令の種別を判定する判定部と、
前記タグ部と前記データ部とを並列にアクセスする第１のパイプライン動作と、前記タグ部をアクセスした後にタグ判定結果に応じて前記データ部をアクセスする第２のパイプライン動作とを、前記判定部による判定結果に応じて選択的に実行する管理部と
を含む演算処理装置。
【請求項２】
前記判定結果が第１の命令に対して前記第１のパイプライン動作の実行を示している場合に、前記第１の命令に対して実行する前記第１のパイプライン動作が、前記第１の命令より先行する第２の命令に対して実行している前記第２のパイプライン動作と衝突することを検出する衝突予測回路を更に含み、前記衝突予測回路により当該衝突が検出された場合に、前記管理部は前記第１の命令に対して前記第２のパイプライン動作を実行させる、請求項１記載の演算処理装置。
【請求項３】
前記第１のパイプライン動作においては前記第１のデータ長で前記データ部をアクセスし、前記第２のパイプライン動作においては前記第２のデータ長で前記データ部をアクセスするよう、前記データ部をアクセスするためのアドレスを生成するアドレス生成部を前記キャッシュメモリが更に含む、請求項１又は２記載の演算処理装置。
【請求項４】
前記第１のパイプライン動作においては前記データ部から読み出された複数のウェイのデータのうち１つのウェイのデータをタグ判定結果に応じて選択して出力し、前記第２のパイプライン動作においては前記データ部から読み出された１つのウェイのデータを全て出力するウェイ選択回路を前記キャッシュメモリが更に含む、請求項１乃至３いずれか一項記載の演算処理装置。
【請求項５】
複数のウェイに対応する複数のタグを格納するタグ部と、
前記複数のウェイに対応する複数のデータを格納するデータ部と、
命令によりアクセスするデータの長さに関して前記命令の種別を判定する判定部と、
前記タグ部と前記データ部とを並列にアクセスする第１のパイプライン動作と、前記タグ部をアクセスした後にタグ判定結果に応じて前記データ部をアクセスする第２のパイプライン動作とを、前記判定部による判定結果に応じて選択的に実行する管理部と
を含むメモリ装置。
【請求項６】
命令発行部と、第１のデータ長のデータを演算可能であると共に、前記第１のデータ長より長い第２のデータ長のデータの各部分に対して単一の命令を並列に実行可能な演算部と、複数のウェイに対応する複数のタグを格納するタグ部及び前記複数のウェイに対応する複数のデータを格納するデータ部を有するキャッシュメモリとを含む演算処理装置において、
前記命令発行部が、命令を発行し、
前記キャッシュメモリが有する判定部が、前記命令発行部から発行された命令によりアクセスするデータが前記第１のデータ長及び前記第２のデータ長のいずれであるのかに関して前記命令の種別を判定し、
前記キャッシュメモリが有する管理部が、前記タグ部と前記データ部とを並列にアクセスする第１のパイプライン動作と、前記タグ部をアクセスした後にタグ判定結果に応じて前記データ部をアクセスする第２のパイプライン動作とを、前記判定による判定結果に応じて選択的に実行する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、演算処理装置、メモリ装置、及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年の汎用プロセッサでは、オペランド及び命令を格納するためのキャッシュメモリ（以下、単に「キャッシュ」という）をプロセッサコア内に設けることが一般的である。短レイテンシでアクセス可能なコア内キャッシュにアクセス頻度の高いデータを格納することにより、メモリアクセスに掛かる時間を短縮し、プロセッサの性能を向上することができる。
【０００３】
キャッシュメモリでは、複数のインデックスの各々に対応してキャッシュ内のデータ格納領域が設けられる。アクセス先アドレスの全ビットのうちで下位側の所定数のビットがインデックスとして用いられ、当該アクセス先アドレスのデータが当該インデックスに対応するキャッシュ領域に格納される。
【０００４】
キャッシュへのデータ格納方式としては、キャッシュヒット率（アクセスしたデータがキャッシュに格納されている確率）とキャッシュ構造の複雑度のバランスに優れるセットアソシアティブ方式が多く用いられる。セットアソシアティブ方式では、各々が独立したキャッシュ内のデータ格納領域である複数のブロックを１つのセットにまとめ、１つのセットを１つのインデックスに対応させる。ある１つのインデックスに対応するメモリ空間内の複数のデータを、当該インデックスに対応するセット内の対応する複数のブロックにそれぞれ格納する。１つのセットの複数のブロックにはそれぞれ対応するキャッシュタグ（以下、単に「タグ」という）が設けられており、１つのブロックに着目した場合、当該ブロックに格納されているデータに対応するアクセス先アドレスの全ビットのうちの上位側ビットが、当該ブロックに対応するタグに格納されている。
【０００５】
１セットに含まれる各ブロックをキャッシュウェイ（cache  way）またはウェイ（way）と呼び、ブロックに含まれるウェイの数をウェイ数と呼ぶ。インデックスはセットの識別子となる。セットアソシアティブ方式のキャッシュは、データを格納するデータ部と、各インデックスのどのウェイにどのデータが格納されているかを記録するタグ部とを含む。
【０００６】
キャッシュはコア内及びコア外を通して階層構造をとることが一般的であり、演算器に直接接続するキャッシュをＬ１（Level  1）キャッシュと呼ぶ。セットアソシアティブ方式を採用したＬ１キャッシュでは、メモリアクセスの際、データ部とタグ部とに同時にアクセスし、データ部から該当インデックスに対応する全ウェイ分のデータを読み出しつつ、タグ部を検索した結果確定したウェイ番号によりデータを選択するという方法を取る。このようにデータ部アクセスとタグ部アクセスとを並列実行することにより、Ｌ１キャッシュアクセスのレイテンシを短縮することができる。
【０００７】
プロセッサの高速化手法として、ＳＩＭＤ（Single  Instruction  Multiple  Data）がある。ＳＩＭＤは、単一の命令を複数のデータに並列に適用することにより当該命令の演算を並列同時に実行する方法であり、主にハイパフォーマンスコンピューティングの分野において高い性能改善効果を発揮する。汎用プロセッサがサポート可能なＳＩＭＤ長（＝同時に処理可能なデータ数）は増大傾向にあり、６４バイト幅のＳＩＭＤ演算をサポートした汎用プロセッサも近年登場してきている。ＳＩＭＤ長の増加に伴い、演算器が一度の演算で必要とするデータ量も増えており、データ供給元であるＬ１キャッシュはより高いスループットを出すことが必要となってきている。例えば、最大ＳＩＭＤ長として６４バイトをサポートするプロセッサの場合、ロード・ストア命令もＳＩＭＤ化されており、Ｌ１キャッシュから毎サイクル６４バイトの読み出し処理を行う必要がある。
【０００８】
Ｌ１キャッシュの読み出しにおいて、タグ部の検索と全ウェイ分のデータ読み出しとを同時並列に行う手法では、一度にＳＩＭＤ長×ウェイ数のデータを読み出さなければならない。例えばＳＩＭＤ長=６４バイト、ウェイ数＝４のＬ１キャッシュの場合、キャッシュのデータ部から一度に読み出すことが必要なデータの幅は２５６バイトになってしまう。このように一度に読み出し可能なデータ幅を増加させるためには、Ｌ１キャッシュを実装するＲＡＭマクロ（Random  Access  Memory  Macro）の個数を増加させる必要があり、同時に動作するＲＡＭマクロの増加につながり、面積及び電力の大幅な増加を引き起こす。プロセッサコアにおいてＬ１キャッシュが占める面積及び電力の割合は大きく、Ｌ１キャッシュの面積及び電力が増加することはプロセッサとして好ましくない。
【０００９】
上記の問題は、タグ部の検索を先に実行し、確定したウェイのデータのみをデータ部から読み出すことにより解決可能である（例えば特許文献１及び２参照）。しかしながら、この手法ではタグ部の検索とデータ部の読み出しとが逐次的に行われることになり、レイテンシが増加してしまう。このレイテンシの増加は、ＳＩＭＤが効果を発揮するデータ並列度が高いプログラムでは問題にならないが、データ並列度が低くてＳＩＭＤ処理が出来ない或いはＳＩＭＤ処理出来てもＳＩＭＤ長が短いようなプログラムでは性能に対する影響が大きい。
【００１０】
汎用プロセッサでは、様々な種類のプログラムに対して良好な性能を示すことが好ましい。従って、Ｌ１キャッシュは、ＳＩＭＤ長の大きいアクセスための高スループットと、ＳＩＭＤ長の小さいアクセス又は非ＳＩＭＤアクセスのための短レイテンシとを、面積及び電力の増加を抑えつつ両立させることが好ましい。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００３−１５０４４６号公報
【特許文献２】特表２００３−５１９８３６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
以上を鑑みると、キャッシュにおける回路面積及び電力の増加とレイテンシの増加とを異なるＳＩＭＤ長に対して適切に抑制することが望まれる。
【課題を解決するための手段】
【００１３】
命令を発行する命令発行部と、第１のデータ長のデータを演算可能であると共に、前記第１のデータ長より長い第２のデータ長のデータの各部分に対して単一の命令を並列に実行可能な演算部と、データを保持するキャッシュメモリとを含む演算処理装置において、前記キャッシュメモリは、複数のウェイに対応する複数のタグを格納するタグ部と、前記複数のウェイに対応する複数のデータを格納するデータ部と、前記命令発行部から発行された命令によりアクセスするデータが前記第１のデータ長及び前記第２のデータ長のいずれであるのかに関して前記命令の種別を判定する判定部と、前記タグ部と前記データ部とを並列にアクセスする第１のパイプライン動作と、前記タグ部をアクセスした後にタグ判定結果に応じて前記データ部をアクセスする第２のパイプライン動作とを、前記判定部による判定結果に応じて選択的に実行する管理部とを含む。
【発明の効果】
【００１４】
少なくとも１つの実施例によれば、キャッシュにおける回路面積及び電力の増加とレイテンシの増加とを異なるＳＩＭＤ長に対して適切に抑制することができる。
【図面の簡単な説明】
【００１５】
【図１】演算処理システムの構成の一例を示す図である。
【図２】第１のパイプライン動作の概略を示す図である。
【図３】第２のパイプライン動作の概略を示す図である。
【図４】第１のパイプライン動作について各パイプラインステージにおける動作の一例を示す図である。
【図５】第２のパイプライン動作について各パイプラインステージにおける動作の一例を示す図である。
【図６】第１のパイプライン動作におけるデータ部３１からのデータ読み出しの様子を示す図である。
【図７】第２のパイプライン動作におけるデータ部３１からのデータ読み出しの様子を示す図である。
【図８】判定回路が実行する判定処理の一例を示すフローチャートである。
【図９】選択回路が実行する選択処理の一例を示すフローチャートである。
【図１０】衝突予測回路が実行する処理の一例を示すフローチャートである。
【図１１】データ部への書き込み処理とデータ部からの読み出し処理とが衝突する様子を示す図である。
【図１２】パイプラインステージ管理部の構成の一例を示す図である。
【図１３】パイプライン管理レジスタに格納されるデータの遷移を示すタイミングチャートである。
【発明を実施するための形態】
【００１６】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１７】
図１は、演算処理システムの構成の一例を示す図である。図１の演算処理システムは、命令発行部１０、演算部１１、Ｌ１キャッシュであるキャッシュメモリ１２、及びＬ２キャッシュであるキャッシュメモリ１３を含む。キャッシュメモリ１３の先には更に主記憶装置（図示せず）が接続される。命令発行部１０、演算部１１、及びキャッシュメモリ１２を含む部分が演算処理装置であり、この演算処理装置が、主記憶装置から読み出されキャッシュメモリ１３を介してキャッシュメモリ１２に一時的に格納されたデータに基づいて演算処理を行う。
【００１８】
図１において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。
【００１９】
命令発行部１０は、一連の命令シーケンスに含まれる各命令のデコード処理を行い、デコード結果に従ってリクエスト（命令実行リクエスト）を発行する。発行されるリクエストは、命令の種別を示すデータを含み、命令識別子ＩＩＤにより識別されてよい。命令発行部１０が発行するロード命令及びストア命令等のメモリアクセス命令に対するリクエストは、アクセス先のアドレスと共にキャッシュメモリ１２に供給される。
【００２０】
また命令発行部１０が発行する演算命令に対するリクエストは、演算部１１に供給される。演算部１１は、第１のデータ長のデータを演算可能であると共に、第１のデータ長より長い第２のデータ長のデータの各部分に対して単一の命令を並列に適用可能である。具体的には、演算部１１は、ＳＩＭＤ演算に対応可能なように第０演算器乃至第７演算器の８個の演算器を含む。図１の構成に示す演算器の個数は一例であり、演算器の個数は特定の数に限定されない。第０演算器乃至第７演算器の各々は、第１のデータ長のデータを演算するよう設計されてよい。通常の演算を実行する場合には、第１のデータ長のデータを演算対象として例えば第０演算器が、命令発行部１０からのリクエストに対応する所望の演算を実行してよい。ＳＩＭＤ演算を実行する場合には、第１のデータ長より長い第２のデータ長のデータを分割して得られる各データ部分に対して単一の命令を第０演算器乃至第７演算器により並列に適用してよい。例えば、命令発行部１０が発行した１つのリクエストに対応する同一の演算を、複数８個のデータ部分に対して第０演算器乃至第７演算器それぞれが並列に実行してよい。ここで並列処理される各データ部分は第１のデータ長であってよい。例えば第１のデータ長は１６バイトであってよく、第２のデータ長は６４バイトであってよいが、特定の長さに限定されない。
【００２１】
図１に示すキャッシュメモリ１２は、判定回路２１、パイプライン投入リクエスト選択部２２、フェッチポート２３、選択回路２４、衝突予測回路２５、パイプラインステージ管理部２６、完了判定部２７、及びデータ部アクセスアドレス生成部２８を含む。キャッシュメモリ１２は更に、ＴＬＢ（Translation  Look-aside  Buffer）２９、タグ部３０、データ部３１、タグマッチ判定回路３２、及びウェイ選択回路３３を含む。
【００２２】
タグ部３０は、複数のウェイ（例えば４個のウェイ）に対応する複数のタグ（例えば４個のタグ）をインデックス毎に格納する。データ部３１は、複数のウェイ（例えば４個のウェイ）に対応する複数のデータ（例えば４個のテータ）をインデックス毎に格納する。キャッシュメモリ１２は、タグ部３０とデータ部３１とを並列にアクセスする第１のパイプライン動作と、タグ部３０をアクセスした後にタグ判定結果に応じてデータ部３１をアクセスする第２のパイプライン動作とを、選択的に実行可能なように設計されている。第１のパイプライン動作において、タグ部３０とデータ部３１とを並列にアクセスする際、タグ部３０からの読み出し動作とデータ部３１からの読み出し動作とは同時に実行されてもよいし、異なる時間に実行されてもよい。第１のパイプライン動作は、タグ判定の結果を待たずにデータ部３１からデータを読み出す点において、第２のパイプライン動作と異なる。
【００２３】
図２は、第１のパイプライン動作の概略を示す図である。図２において、アクセス先アドレス３５のインデックスＩＮＤＥＸ（この例では２）が、タグ部３０及びデータ部３１に供給される。タグ部３０において、当該インデックスＩＮＤＥＸに対応する複数のウェイＷＡＹ０乃至ＷＡＹ３のタグが読み出される。またこのタグの読み出しと並行して、データ部３１において、当該インデックスＩＮＤＥＸに対応する複数のウェイＷＡＹ０乃至ＷＡＹ３のデータが読み出される。この例ではウェイの個数は４個であるが、ウェイの個数は特定の数に限定されない。
【００２４】
また更に、アクセス先アドレス３５のタグＴＡＧ（この例ではＡ）が、ＴＬＢ２９により仮想アドレスから物理アドレスに変換されてから、タグマッチ判定回路３２に供給される。タグマッチ判定回路３２は、タグ部３０から読み出された複数のタグとアクセス先アドレス３５のタグＴＡＧとを比較し、一致するタグ（この場合はウェイＷＡＹ０のタグ）を特定する。タグマッチ判定回路３２は、一致したウェイＷＡＹ０を示すデータをウェイ選択回路３３に供給する。ウェイ選択回路３３は、データ部３１から読み出された複数のウェイＷＡＹ０乃至ＷＡＹ３のデータのうち、一致したウェイＷＡＹ０に対応するデータを選択して出力する。
【００２５】
図３は、第２のパイプライン動作の概略を示す図である。図３において、アクセス先アドレス３５のインデックスＩＮＤＥＸ（この例では２）が、タグ部３０及びデータ部３１に供給される。また更に、アクセス先アドレス３５のタグＴＡＧ（この例ではＡ）が、ＴＬＢ２９により仮想アドレスから物理アドレスに変換されてから、タグマッチ判定回路３２に供給される。タグ部３０において、当該インデックスＩＮＤＥＸに対応する複数のウェイＷＡＹ０乃至ＷＡＹ３のタグが読み出される。タグマッチ判定回路３２は、タグ部３０から読み出された複数のタグとアクセス先アドレス３５のタグＴＡＧとを比較し、一致するタグ（この場合はウェイＷＡＹ０のタグ）を特定する。その後、タグマッチ判定回路３２によるタグ判定結果の情報に基づいて、データ部３１から、インデックスＩＮＤＥＸに対応する複数のウェイＷＡＹ０乃至ＷＡＹ３のうちで一致したウェイＷＡＹ０のデータが読み出される。
【００２６】
なお図１に示すキャッシュメモリ１２では、後述するデータ部アクセスアドレス生成部２８により、第１のパイプライン動作及び第２のパイプライン動作においてデータ部３１をアクセスするためのアドレスを生成する。上述した図２及び図３に示されるのは概略の構成及び動作であり、データ部アクセスアドレス生成部２８は示していない。
【００２７】
図４は、第１のパイプライン動作について各パイプラインステージにおける動作の一例を示す図である。Ｐステージにおいて、パイプラインに投入するリクエストが選択される。選択対象としては、図１において命令発行部１０から新規に発行されたリクエスト又はフェッチポート２３に登録されている未実行（再実行を含む）のリクエストであり、選択動作はパイプライン投入リクエスト選択部２２により実行される。その後のＴステージにおいて、タグ部３０からの読み出し及びＴＬＢ２９による変換動作が実行される。更にＭステージにおいて、タグマッチ判定回路３２によるタグ照合動作が実行されると共に、データ部３１からの読み出し動作が実行される。なおデータ部３１からの読み出し動作は、ステージＴにおいて実行するように設計してもよい。
【００２８】
ステージＢで、後述する図１の完了判定部２７による処理完了判定が実行されると共に、ウェイ選択回路３３によるウェイ選択処理が実行される。最後のステージＲにおいて、命令発行部１０への完了通知及び演算部１１へのデータ供給が実行される。以上のステージＰ乃至ステージＲの５個のステージにより、第１のパイプライン動作が実行される。
【００２９】
図５は、第２のパイプライン動作について各パイプラインステージにおける動作の一例を示す図である。Ｐステージにおいて、パイプラインに投入するリクエストが選択される。その後のＴステージにおいて、タグ部３０からの読み出し及びＴＬＢ２９による変換動作が実行される。更にＭステージにおいて、タグマッチ判定回路３２によるタグ照合動作が実行される。その後のＢステージ及びＸＴステージでは処理は実行されず、続くＸＭステージにおいて、タグ判定結果に基づいてデータ部３１からの読み出し動作が実行される。なおデータ部３１からの読み出し動作は、例えばステージＸＴにおいて実行するように設計してもよい。
【００３０】
ステージＸＢで、図１の完了判定部２７による処理完了判定が実行される。最後のステージＲにおいて、命令発行部１０への完了通知及び演算部１１へのデータ供給が実行される。以上のステージＰ乃至ステージＲの８個のステージにより、第２のパイプライン動作が実行される。タグマッチ判定回路３２によるタグ判定処理を実行してから、当該タグ判定処理の結果に基づいてデータ部３１からデータを読み出すので、第２のパイプライン動作のステージ数は、第１のパイプライン動作のステージ数よりも多くなっている。即ち、第１のパイプライン動作に比較して第２のパイプライン動作はレイテンシが長くなっている。
【００３１】
図１に戻り、判定回路２１は、命令発行部から発行された命令によりアクセスするデータが前記第１のデータ長及び前記第２のデータ長のいずれであるのかに関して命令の種別を判定する。この判定結果に応じて、当該命令を第１のパイプライン動作で実行するのか又は第２のパイプライン動作で実行するのかが選択される。具体的には、パイプラインステージ管理部２６が、実行対象の命令が前記第１のデータ長のアクセスである場合には第１のパイプライン動作を実行し、実行対象の命令が前記第２のデータ長のアクセスである場合には第２のパイプライン動作を実行する。即ち、例えば１６バイトの短いデータ長のアクセスの場合には、タグ部３０とデータ部３１とを並列にアクセスして短レイテンシ動作を実現する。また例えば６４バイトの長いデータ長のアクセスの場合には、タグ部３０をアクセスして得られたタグ判定結果に応じてデータ部３１から１つの確定ウェイのデータのみを読み出すことにより、データ部３１のＲＡＭを実装する面積及び消費電力の増加を抑制できる。
【００３２】
また判定回路２１によりリクエスト毎に第１のパイプライン処理の対象か或いは第２のパイプラインの対象かを判定することで、リクエスト種に応じてパイプライン処理を切り替えることが可能となる。その結果、ＳＩＭＤ長の大きいアクセスための高スループットと、ＳＩＭＤ長の小さい又は非ＳＩＭＤアクセスのための短レイテンシとを両立することが可能となる。
【００３３】
データ部アクセスアドレス生成部２８は、第１のパイプライン動作及び第２のパイプライン動作においてデータ部３１をアクセスするためのアドレスを生成する。具体的には、データ部アクセスアドレス生成部２８は、第１のパイプライン動作においては第１のデータ長でデータ部３１をアクセスし、第２のパイプライン動作においては第２のデータ長でデータ部３１をアクセスするようにアドレスを生成する。例えば、第１のパイプライン動作においては、データ部３１から、１６バイトのデータ長のデータが複数のウェイの各々に対して読み出されてよい。また第２のパイプライン動作においては、データ部３１から、６４バイトのデータ長のデータが１つの確定したウェイに対して読み出されてよい。これにより、データ部３１においてＲＡＭを実装する面積及び消費電力の増加を抑制しながら、各命令について適切なデータ長のデータを読み出すことが可能となる。
【００３４】
図６は、第１のパイプライン動作におけるデータ部３１からのデータ読み出しの様子を示す図である。図７は、第２のパイプライン動作におけるデータ部３１からのデータ読み出しの様子を示す図である。図６及び図７において、データ部３１には、各々が３２バイトの容量を有する８個のＲＡＭ（ＲＡＭ０乃至ＲＡＭ７）が設けられている。各ＲＡＭは、各々が８バイトである４個のデータを別個に格納可能である。各ＲＡＭにおける表記において先頭の数字は１６進で示したバイト位置であり、例えば「００ｗａｙ０」はウェイｗａｙ０の０バイト目、「０８ｗａｙ０」はウェイｗａｙ０の８バイト目、「１０ｗａｙ０」はウェイｗａｙ０の１６バイト目、等を意味する。例えばＲＡＭ０において「００ｗａｙ０」と記載されている格納箇所には、ウェイｗａｙ０の第０バイトから第７バイトのデータが格納されている。また例えばＲＡＭ１において「０８ｗａｙ０」と記載されている格納箇所には、ウェイｗａｙ０の第８バイトから第１５バイトのデータが格納されている。データ部３１では、４個のウェイｗａｙ０乃至ｗａｙ３の各々が６４バイトのデータを有しており、４個のウェイに対して合計２５６バイトのデータが格納されている。
【００３５】
図６に示される第１のパイプライン動作の場合には、４個のウェイｗａｙ０乃至ｗａｙ３の各々について、第０バイト目から第１５バイト目までの１６バイトのデータが読み出されている。この場合、データ部アクセスアドレス生成部２８が、各ＲＡＭ（ＲＡＭ０乃至ＲＡＭ７）の先頭の８バイトのデータを読み出すように、アクセスアドレスを生成することになる。
【００３６】
図７に示される第２のパイプライン動作の場合には、１個のウェイｗａｙ０について、第０バイト目から第６３バイト目までの６４バイトのデータが読み出されている。この場合、データ部アクセスアドレス生成部２８が、８個のＲＡＭ（ＲＡＭ０乃至ＲＡＭ７）のそれぞれについて、ウェイｗａｙ０のデータが格納されている位置の８バイト分のデータを読み出すように、アクセスアドレスを生成することになる。
【００３７】
図１に戻り、ウェイ選択回路３３は、第１のパイプライン動作においては、データ部３１から読み出された複数のウェイのデータのうち１つのウェイのデータをタグ判定結果に応じて選択して出力してよい。またウェイ選択回路３３は、第２のパイプライン動作においては、データ部３１から読み出された１つのウェイのデータを全て出力してよい。これにより、各命令について適切なデータ長のデータをキャッシュメモリ１２から出力し、演算部１１における演算に供することが出来る。
【００３８】
第１のパイプライン動作と第２のパイプライン動作とはパイプラインの長さが異なるために、両方のパイプライン動作を混在させる構成では、リソースの衝突が発生する可能性がある。キャッシュメモリ１２では、衝突予測回路２５により、そのようなリソースの衝突を回避することが可能である。
【００３９】
前述のように第１の命令が第１のデータ長のアクセスであることが判定回路２１による判定結果により示される場合、即ち、判定結果が第１の命令に対して第１のパイプライン動作の実行を示している場合、通常は第１のパイプライン動作が実行されてよい。しかしながら、第１の命令に対して実行する第１のパイプライン動作が、第１の命令より先行する第２の命令に対して実行している第２のパイプライン動作と衝突するならば、第１の命令に対して第１のパイプライン動作を実行しなくともよい。衝突予測回路２５は、このように第１の命令に対して実行する第１のパイプライン動作が、先行して実行している第２のパイプライン動作と衝突するのか否かを検出する。衝突予測回路２５により当該衝突が検出（予測）された場合に、パイプラインステージ管理部２６は、第１の命令に対して第１のパイプライン動作ではなく第２のパイプライン動作を実行させてよい。
【００４０】
なお上記の説明では、衝突が予測される場合には第１の命令に対して第１のパイプライン動作ではなく第２のパイプライン動作を実行させているが、衝突を厭わずにそのまま第１の命令に対して第１のパイプライン動作を実行させてもよい。この場合、衝突が発生した時点で第１の命令又は第２の命令のいずれかの命令が実行不能となり、実行出来なかった方の命令は、実行未完了の命令として再実行対象となる。その後当該命令は再実行されることになる。このようなやり方でも、第１のパイプライン動作と第２のパイプライン動作とを実装して、面積及び電力の削減及びレイテンシの短縮という所望の効果を得ることが可能である。しかしながら効率的なパイプライン処理を実現するためには、最初に説明したように、衝突が予測される場合には第１の命令に対して第１のパイプライン動作ではなく第２のパイプライン動作を実行させることが好ましい。このように２つのパイプライン処理の衝突を事前に予測して回避することにより、処理の衝突によるパイプラインストールを防ぐことが可能となる。
【００４１】
以下に、図１に示すキャッシュメモリ１２の構成及び動作について更に詳細に説明する。
【００４２】
命令発行部１０が発行したリクエストは、まず判定回路２１に入力される。判定回路２１は、リクエストが長レイテンシのパイプライン処理（第２のパイプライン動作）の対象であることを示すフラグを出力する回路である。判定回路２１は内部にテーブルを持ち、このテーブルには各リクエスト種について長レイテンシのパイプライン処理の対象であるか否かが記録されている。このテーブルを参照することにより、受信リクエストが長レイテンシのパイプライン処理の対象であると判定した場合、判定回路２１は、長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱをアサートする（１に設定する）。判定回路２１は、リクエストと長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱとを、パイプライン投入リクエスト選択部２２及びフェッチポート２３に供給する。
【００４３】
図８は、判定回路２１が実行する判定処理の一例を示すフローチャートである。図８及び以降の図において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、Ａステップの次にＢステップを実行することが可能なだけでなく、Ｂステップの次にＡステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Ｂステップの次にＡステップが実行されてもよいことは自明である。Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
【００４４】
図８のステップＳ１において、判定回路２１は、リクエストが長レイテンシのパイプライン処理の対象であるか否かを判定する。対象である場合には、ステップＳ２において、判定回路２１が、長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱを１に設定する。対象でない場合には、ステップＳ３において、判定回路２１が、長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱを０に設定する。
【００４５】
判定回路２１による判定後、リクエストに対してフェッチポート２３に新たにポートを確保する。フェッチポート２３には、例えば最大で４０個のポートが設けられており、各ポートは識別子により識別可能である。新たなリクエストが到来すると、当該リクエストに空きポートが割り当てられ、当該割り当てられたポートに当該リクエストのデータが格納される。この際、リクエストと共に長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱも当該ポートに格納されてよい。フェッチポート２３のポートに登録された情報は、各命令についての実行の完了及び未完了を管理するために用いられる。
【００４６】
パイプライン投入リクエスト選択部２２は、命令発行部１０から新規に発行されたリクエスト及びフェッチポート２３からのパイプラインへの再投入リクエストのいずれかをパイプライン投入命令として選択する。基本的に、再投入リクエストの方が優先して選択され、再投入リクエストが存在しない場合のみ新規リクエストが選択される。なおフェッチポート２３からの再投入リクエストの対象には、実行したが何らかの事情で未完了となった命令及び未だ一度も実行されずに待ち状態となっている命令とが含まれる。
【００４７】
衝突予測回路２５は、パイプライン処理状況を示す情報をパイプラインステージ管理部２６から入力として受け取り、新規にパイプラインに投入する命令に対して衝突が発生するか否かを予測する。ここでパイプライン処理状況を示す情報は、パイプライン上で実行されている短レイテンシ処理及び／又は長レイテンシ処理についていずれのパイプラインステージを実行中であるかを示す情報であってよい。衝突予測回路２５は、衝突発生を予測すると、新規にパイプラインに投入するリクエストに対して、長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧをアサートする（１に設定する）。長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧがアサートされた場合、対象リクエストは、強制的に長レイテンシのパイプライン処理として実行される。
【００４８】
選択回路２４は、パイプライン投入リクエスト選択部２２により選択されたリクエストについて、短レイテンシのパイプライン処理と長レイテンシのパイプライン処理とのいずれにより実行するのかを選択する。短レイテンシのパイプライン処理を選択する場合には、選択回路２４は、短レイテンシ選択信号ＳＨＯＲＴ＿ＶＡＬをアサートする（１に設定する）。長レイテンシのパイプライン処理を選択する場合には、選択回路２４は、長レイテンシ選択信号ＬＯＮＧ＿ＶＡＬをアサートする（１に設定する）。この選択は、図４及び図５に示されるように、パイプラインのＰステージにおいて行われる。
【００４９】
図９は、選択回路２４が実行する選択処理の一例を示すフローチャートである。ステップＳ１１において、選択回路２４は、衝突予測回路２５により生成された長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧが１であるか否かを判定する。長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧが１でない場合、ステップＳ１２において、選択回路２４は、判定回路２１により生成された長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱが１であるか否かを判定する。長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱが１でない場合、ステップＳ１３において、選択回路２４は、短レイテンシ選択信号ＳＨＯＲＴ＿ＶＡＬを１に設定する。長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧ及び長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱのいずれか一方でも１である場合、ステップＳ１４において、選択回路２４は、長レイテンシ選択信号ＬＯＮＧ＿ＶＡＬを１に設定する。
【００５０】
図１０は、衝突予測回路２５が実行する処理の一例を示すフローチャートである。ステップＳ２１において、衝突予測回路２５は、パイプライン処理の衝突が発生するか否かを判定する。衝突が発生すると判定した場合、ステップＳ２２において、衝突予測回路２５は長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧを１に設定する。衝突が発生しないと判定した場合、ステップＳ２３において、衝突予測回路２５は長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧを０に設定する。
【００５１】
なお、パイプライン処理の衝突にはいくつかのパターンがある。１つの例は、２つのデータ部読み出しリクエストにおけるデータ部アクセス同士の衝突である。長レイテンシのパイプライン読み出し処理においてＢステージ（図５に示すＢステージ）が現在実行されているタイミングにおいて、短レイテンシのパイプライン読み出し処理をＰステージ（図４に示すＰステージ）から開始するとする。このとき、長レイテンシのパイプライン読み出し処理におけるＸＭステージでのデータ部３１へのアクセスと、短レイテンシのパイプライン読み出し処理におけるＭステージでのデータ部３１へのアクセスとが互いに衝突する。
【００５２】
パイプライン処理の衝突の別の例として、データ部への書き込み処理とデータ部からの読み出し処理との衝突がある。図１１は、データ部への書き込み処理とデータ部からの読み出し処理とが衝突する様子を示す図である。
【００５３】
図１１（ａ）に示されるように、アドレスＡに対する先行書き込みリクエストが、長レイテンシのパイプライン処理として実行されている。この書き込みリクエストは、データ部の特定のアドレスのメモリ値を更新するリクエストであり、ＸＭステージにおいてデータ部にアクセスしてアドレスＡにおけるメモリ値を更新する。図１１（ｂ）には、メモリ値更新によるアドレスＡにおけるメモリ値の変化が示される。
【００５４】
図１１（ｃ）には、同一のアドレスＡに対する４個の後続読み出しリクエストＲ１乃至Ｒ４が示されており、これらの４個のリクエストは、短レイテンシのパイプライン処理として順次実行される。このとき、読み出しリクエストＲ１乃至Ｒ３は、Ｍステージでデータ部にアクセスしてデータを読み出すので、図１１（ａ）に示す先行書き込みリクエストの後にパイプライン処理を開始したにも関わらず、更新前のメモリ値ＯＬＤを読み出すことになる。これを回避するためには、これから実行する読み出しリクエストのＰステージの時点において、先行する長レイテンシの書き込みリクエストのＴ、Ｍ、又はＢステージが実行されている場合、当該読み出しリクエストは長レイテンシで実行させることが好ましい。即ち、衝突予測回路２５は長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧを１にアサートすることが好ましい。
【００５５】
図１１（ｄ）には、アドレスＡに対する４個の後続読み出しリクエストＲ１’乃至Ｒ３’及びＲ４が示されている。リクエストＲ１’乃至Ｒ３’は長レイテンシ強制指示信号ＦＲＣ＿ＬＯＮＧのアサートに応答して長レイテンシのパイプライン処理として順次実行され、それ以外のリクエストＲ４は短レイテンシのパイプライン処理として実行されている。読み出しリクエストＲ１’乃至Ｒ３’は、ＸＭステージでデータ部にアクセスしてデータを読み出すので、更新後のメモリ値ＮＥＷを読み出すことになる。
【００５６】
このように衝突が予測されるリクエストについては、長レイテンシ指示フラグＦＬＧ＿ＬＯＮＧ＿ＲＥＱの値に関わらず、長レイテンシのパイプライン処理を実行する。これにより、短レイテンシのパイプライン処理のMステージと長レイテンシのパイプライン処理のＸＭステージとが衝突（データが矛盾する場合も含む）するのを防ぐことができる。なお、上記２例以外の衝突が発生する場合も、適宜それらを衝突予測回路２５における衝突予測に組み込んでよい。
【００５７】
選択回路２４による選択後、リクエストのパイプライン上での処理を開始する。パイプラインの実行は、パイプラインステージ管理部２６が制御及び管理する。
【００５８】
図１２はパイプラインステージ管理部２６の構成の一例を示す図である。パイプラインステージ管理部２６は、ステージ毎にパイプラインの実行状況を管理するためのパイプライン管理レジスタを有する。図１２には、１つのステージに対して設けられたパイプライン管理レジスタの一例が示されている。パイプライン管理レジスタとしては、ステージ有効信号ＶＬＤを格納するレジスタ４１、短レイテンシ選択信号ＳＨＯＲＴ＿ＶＡＬを格納するレジスタ４２、長レイテンシ選択信号ＬＯＮＧ＿ＶＡＬを格納するレジスタ４３が設けられてよい。また更に、書き込みリクエストＲＤと読み出しリクエストＷＴとのいずれかを示すパイプライン識別子ＰＩＰＥ＿ＩＤを格納するレジスタ４４、及び複数の読み出しリクエスト同士を区別する識別子ＩＩＤを格納するレジスタ４５が設けられてよい。これら以外に更に別の管理レジスタを設けてもよい。
【００５９】
図１３は、パイプライン管理レジスタに格納されるデータの遷移を示すタイミングチャートである。図１３の上段に示す３つのリクエストＲ１乃至Ｒ３が連続してパイプラインを流れた場合の例である。リクエストＲ１は短レイテンシのパイプライン処理対象である読み出しリクエストであり、識別子ＩＩＤは「１」である。リクエストＲ２は長レイテンシのパイプライン処理対象である書き込みリクエストである。リクエストＲ３は長レイテンシのパイプライン処理対象である読み出しリクエストであり、識別子ＩＩＤは「２」である。
【００６０】
図１３の下段には、Ｐステージ、Ｂステージ、ＸＴステージ、及びＲステージにおける各パイプライン管理レジスタの格納値を示してある。その他のＴ、Ｍ、ＸＭ、及びＸＢステージについては図１３には示していない。
【００６１】
一例としてＰステージにおける各レジスタ値を説明すると、図１３の上段に示す３つのリクエストＲ１乃至Ｒ３のいずれかがＰステージであるタイミングにおいて、ステージ有効信号ＶＬＤを格納するレジスタの値がハイになっている。また短レイテンシのパイプライン処理されるリクエストＲ１がＰステージであるタイミングにおいて、短レイテンシ選択信号ＳＨＯＲＴ＿ＶＡＬを格納するレジスタの値（ＳＨＯＲＴ＿ＶＡＬレジスタ値）がハイとなっている。長レイテンシのパイプライン処理されるリクエストＲ２又はＲ３がＰステージであるタイミングにおいては、長レイテンシ選択信号ＬＯＮＧ＿ＶＡＬを格納するレジスタの値（ＬＯＮＧ＿ＶＡＬレジスタ値）がハイとなっている。読み出しリクエストであるリクエストＲ１及びＲ３がそれぞれＰステージであるタイミングにおいて、パイプライン識別子ＰＩＰＥ＿ＩＤを格納するレジスタの値は読み出しリクエストＲＤを示している。書き込みリクエストであるリクエストＲ２がＰステージであるタイミングにおいて、パイプライン識別子ＰＩＰＥ＿ＩＤを格納するレジスタの値は書き込みリクエストＷＴを示している。また読み出しリクエストであるリクエストＲ１及びＲ３がそれぞれＰステージであるタイミングにおいて、読み出しリクエスト同士を区別する識別子ＩＩＤはそれぞれ「１」及び「２」となっている。
【００６２】
その他のステージについても同様に、３つのリクエストＲ１乃至Ｒ３のいずれかが当該ステージであるタイミングにおいて、各パイプライン管理レジスタの値が各リクエストに対応する値となる。なおＸＴ、ＸＭ、及びＸＢステージは長レイテンシのパイプライン処理に専用のステージであるため、これらのステージは短レイテンシ選択信号ＳＨＯＲＴ＿ＶＡＬを格納するレジスタを有しない。
【００６３】
上記説明したパイプラインステージ管理部２６のパイプライン管理レジスタに基づいて、パイプライン動作の制御及び管理が行われる。例えば、衝突予測回路２５は、ＢステージにおけるＬＯＮＧ＿ＶＡＬレジスタ値を参照することにより、Ｂステージを実行中である長レイテンシのパイプライン読み出し処理が存在するか否かを判定できる。
【００６４】
パイプラインステージ管理部２６の管理下において、図１に示されるデータ部アクセスアドレス生成部２８、ＴＬＢ２９、タグ部３０、データ部３１、タグマッチ判定回路３２、及びウェイ選択回路３３が動作することにより、パイプライン処理が実行される。データ部３１は、短レイテンシのパイプライン処理のＭステージ及び長レイテンシのパイプライン処理のＸＭステージにおいて、アクセスされる。その際、データ部アクセスアドレス生成部２８が、データ部３１を構成するＲＡＭ毎に、アクセスアドレスＡＣＣ＿ＡＤＲＳを生成する。このデータ部アクセスアドレス生成部２８は、リクエストのアクセス先アドレスＡＤＲＳ、ＭステージのＳＨＯＲＴ＿ＶＡＬレジスタ値、ＸＭステージのＬＯＮＧ＿ＶＡＬレジスタ値、及びタグマッチ判定回路３２が出力するタグ判定結果ＷＡＹ＿ＩＤを入力とする。データ部アクセスアドレス生成部２８は、ＭステージのＳＨＯＲＴ＿ＶＡＬレジスタ値が有効な場合（ハイである場合）、連続１６バイトのデータを全てのウェイについて読み出すようにアクセスアドレスＡＣＣ＿ＡＤＲＳを生成する。またデータ部アクセスアドレス生成部２８は、ＸＭステージのＬＯＮＧ＿ＶＡＬレジスタ値が有効な場合（ハイである場合）、タグ判定結果ＷＡＹ＿ＩＤが示すウェイの連続６４バイトのデータを読み出すようにアクセスアドレスＡＣＣ＿ＡＤＲＳを生成する。
【００６５】
データ部３１からデータを読み出した後、短レイテンシのパイプライン処理のＢステージでは、タグ判定結果により特定された１つのウェイのデータのみを選択する。この処理はウェイ選択回路３３で行われる。ウェイ選択回路３３は、データ部３１からの出力データ、ＢステージのＳＨＯＲＴ＿ＶＡＬレジスタ値、ＸＢステージのＬＯＮＧ＿ＶＡＬレジスタ値、及びタグ判定結果ＷＡＹ＿ＩＤを入力とする。ウェイ選択回路３３は、ＢステージのＳＨＯＲＴ＿ＶＡＬレジスタ値が有効な場合、データ部３１から読み出した全ウェイ分のデータのうちでタグ判定結果ＷＡＹ＿ＩＤが示すウェイのデータのみを選択して出力する。ウェイ選択回路３３は、ＸＢステージのＬＯＮＧ＿ＶＡＬレジスタ値が有効な場合、データを選択することなく、データ部３１から読み出されたデータをそのまま出力する。ウェイ選択回路３３の出力データが演算部１１に供給される。
【００６６】
以上の処理が正常に完了した場合、完了判定部２７がリクエストの完了通知を生成し、完了通知を命令発行部１０に送信する。例えばキャッシュミス等の何らかの理由でパイプライン処理が中断した場合、完了判定部２７は該当リクエストが未完了であると判定し、リクエストはフェッチポート２３に戻される。フェッチポート２３に戻されたリクエストは、再投入リクエストとして再実行される。
【００６７】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００６８】
１０  命令発行部
１１  演算部
１２  キャッシュメモリ
１３  キャッシュメモリ
２１  判定回路
２２  パイプライン投入リクエスト選択部
２３  フェッチポート
２４  選択回路
２５  衝突予測回路
２６  パイプラインステージ管理部
２７  完了判定部
２８  データ部アクセスアドレス生成部
２９  ＴＬＢ
３０  タグ部
３１  データ部
３２  タグマッチ判定回路
３３  ウェイ選択回路
【図１】
2020095345.tif 000003
【図２】
2020095345.tif 000004
【図３】
2020095345.tif 000005
【図４】
2020095345.tif 000006
【図５】
2020095345.tif 000007
【図６】
2020095345.tif 000008
【図７】
2020095345.tif 000009
【図８】
2020095345.tif 000010
【図９】
2020095345.tif 000011
【図１０】
2020095345.tif 000012
【図１１】
2020095345.tif 000013
【図１２】
2020095345.tif 000014
【図１３】
2020095345.tif 000015