(57)【要約】  １ビットラッチ７０３は、メモリアドレス間のデータのコピー又は移動を指示するメモリコピー命令に対応する各命令フローを最大指定可能データ転送量で実行する状態が＋Ｐ＿ＭＶＣ＿２５６＿１ＳＴ信号によって指示されたときに、その状態を＋Ｄ＿ＭＦ＿ＴＧＲ信号によって指示されるマルチフロー展開の期間中保持する。アンド回路７０５は、１ビットラッチ７０３の出力信号と各命令フローの実行タイミングを示す＋Ｐ＿ＥＡＧ＿ＶＡＬＩＤ信号とのアンド論理を取って、その出力として各命令フローが発行される毎にプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴを、オア回路７０６を介して出力する。
2010116403.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域が２つ以上に階層化されているプロセッサで、命令のデコード時に１つの命令が複数の命令フローにマルチフロー展開された各命令フローを実行するとき、前記２つ以上の記憶領域のうち適切な記憶領域間で予め利用される予定のアドレスのデータをプリフェッチできるプロセッサ装置におけるプリフェッチ要求回路であって、
前記記憶領域にアクセスするための前記各命令フローを最大指定可能データ転送量で実行する状態が指示されたときに、該状態を前記マルチフロー展開の期間中保持するラッチ部と、
該ラッチ部の出力信号と前記各命令フローの実行タイミングを示す信号とに基づいて、前記各命令フローが実行される毎に前記プリフェッチを要求するプリフェッチ要求信号を出力するプリフェッチ要求信号出力部と、
を含むことを特徴とするプリフェッチ要求回路。
【請求項２】
メインメモリと２次キャッシュと１次データキャッシュを備え、命令のデコード時に１つの命令を複数の命令フローにマルチフロー展開し該各命令フローを実行し、前記１次データキャッシュへのメモリアクセス時に前記メインメモリから前記２次キャッシュへ予め利用される予定のアドレスのデータをプリフェッチすることができるプロセッサ装置におけるプリフェッチ要求回路であって、
メモリアドレス間のデータのコピー又は移動、演算を指示するメモリコピー命令に対応する前記各命令フローを最大指定可能データ転送量で実行する状態が指示されたときに、該状態を前記マルチフロー展開の期間中保持するラッチ回路部と、
該ラッチ部の出力信号と前記各命令フローの実行タイミングを示す信号とのアンド論理を取って、該アンド論理出力として前記各命令フローが発行される毎にプリフェッチ要求信号を出力するアンド回路部と、
を含むことを特徴とするプリフェッチ要求回路。
【請求項３】
前記プリフェッチ要求回路を、前記命令フローを実行するリザべーションステーション内に備える、
ことを特徴とする請求項１又は２の何れか１項に記載のプリフェッチ要求回路。
【発明の詳細な説明】
【技術分野】
【０００１】
開示する技術は、キャッシュを備えたプロセッサ装置におけるメモリアクセス時に、プリフェッチを要求するためのプリフェッチ要求技術に関する。
【背景技術】
【０００２】
コンピュータのプロセッサ装置では一般に、メインメモリに対するアクセス性能を高めるために、２次キャッシュ及び１次データキャッシュ、１次命令キャッシュ等が搭載されている。【０００３】
プロセッサでは、メインメモリから２次キャッシュ及び１次命令キャッシュを経て読み出された命令は、命令デコーダに送られ、そこでデコードされる。
デコードされた命令が、ロード命令、ストア命令、メモリコピー命令などのメモリアクセス命令である場合は、オペランドアドレス生成器が、アクセスされるべきメモリアドレスを計算し、計算されたアドレスによって１次データキャッシュにアクセスする。【０００４】
ここで、メモリコピー命令の実行時には、メモリ上のコピー元アドレス（これを「アドレスＡ」とする）のデータが、コピー先アドレス（これを「アドレスＢ」とする）へコピーされる。命令長は決まっているため、メモリコピー命令において一度に指定できる最大のコピーサイズがある。【０００５】
メインメモリと２次キャッシュ間、又は２次キャッシュと１次データキャッシュ間の１サイクルでのデータ転送能力以下のデータサイズがコピーサイズとして１命令で指定された場合には、例えば図１の（ａ）で示される処理が実行される。即ち、デコードされたメモリコピー命令は、ＣＳＥ（Ｃｏｍｍｉｔ  Ｓｔａｃｋ  Ｅｎｔｒｙ）と呼ばれる命令キューにデコード順に登録される。図１（ａ）の例では、ＣＳＥの１つのエントリＣＳＥ０に、メモリコピー命令が登録されるものとする。【０００６】
ＣＳＥの各エントリには、各命令を識別するためのＩＩＤ（命令識別子）と、登録された命令の有効又は無効を指示するためのバリッドフラグが登録される。ＣＳＥのエントリ数は例えば数十エントリ程度である。プロセッサには、ＣＳＥのほかに、各命令を優先順位（プライオリティ）を付けて登録しアウトオブオーダで実行できる、ＲＳ（Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ）と呼ばれる命令キューが備えられている。ＲＳの各エントリにも、各命令を識別するためのＩＩＤが登録される。メモリコピー命令はＲＳを介してオペランドアドレス生成器で処理され、メモリコピー命令に基づくメモリコピー処理が実行される。この場合、ＣＳＥにデコード順に登録された命令とＲＳを介してアウトオブオーダで実行される命令は、命令識別子（ＩＩＤ）によって紐付けられている。そして、ＲＳを介して実行が完了した命令は、その命令に対応するＲＳのエントリに登録されているＩＩＤによってＣＳＥのエントリと照合され、同じＩＩＤが登録されているＣＳＥのエントリのバリッドフラグ（Ｖａｌｉｄ）が無効を示す値に変更されて命令の実行を完了する。この紐付け制御により、ＲＳを介してアウトオブオーダで実行される命令の順序が、ＣＳＥによって保証される。【０００７】
図１（ａ）において、メモリコピー命令のデータ転送能力は例えば１６バイト（１６Ｂ）であり、「１６Ｂメモリコピー」命令は、１６バイトまでのデータ転送命令であることを示している。【０００８】
一方、メインメモリと２次キャッシュ間、又は２次キャッシュと１次データキャッシュ間の１サイクルでのデータ転送能力を超えるデータサイズがコピーサイズとして１命令で指定された場合には、例えば図１の（ｂ）及び（ｃ）で示される処理が実行される。この場合には、命令デコーダが、例えば３２バイトのデータ転送命令である「３２Ｂメモリコピー」命令に対して、マルチフロー展開と呼ばれる処理を実行する。マルチフロー展開では、「３２Ｂメモリコピー」命令は２つの「１６Ｂメモリコピー」命令に分解される。このように複数の命令にデコードされた各「１６Ｂメモリコピー」命令は、図１（ｂ）及び（ｃ）として示されるように、それぞれ個別のＣＳＥエントリＣＳＥ０及びＣＳＥ１に登録される。そして、ＣＳＥ０、ＣＳＥ１の各エントリに登録された各「１６Ｂメモリコピー」命令は、各命令と共に登録されている各ＩＩＤを介して紐付けられている個別のＲＳエントリを介してアウトオブオーダで実行され、オペランドアドレス生成器で個別にパイプライン処理される。この結果、１６バイト単位のメモリコピー処理が実行される。【０００９】
ここで、メモリコピー命令で指定できる最大のサイズを超えてデータのコピーを行ないたい場合、プログラムではメモリコピー命令が連続して記述される。つまり、大きなサイズのメモリコピー処理は、連続する複数のメモリコピー命令として記述される。更に、各メモリコピー命令で指定されるデータサイズが２次キャッシュ及び１次データキャッシュ間の１サイクルのデータ転送能力を超えている場合には、各メモリコピー命令がマルチフロー展開されて実行される。例えば、２次キャッシュ及び１次データキャッシュ間の上記データ転送能力が１６バイトで、１つのメモリコピー命令で指定される最大データサイズを２５６バイトとする。この場合、例えば１０２４バイトのメモリーコピー処理は、連続する４回の２５６バイトメモリコピー命令として記述され、各２５６バイトメモリコピー命令は、１６回の１６バイトメモリコピー命令にマルチフロー展開される。【００１０】
この場合、各メモリコピー命令に基づくメモリアクセスで１次データキャッシュがヒットした場合、上記メモリアクセスで１次データキャッシュがミスし２次キャッシュがヒットした場合、及び上記メモリアクセスで両方ともミスした場合のそれぞれでは、図２に示されるように、データアクセス時間に大きな差が生じる。なお、図２において、「Ｌ１＄ＨＩＴ」は１次データキャッシュがヒットした場合を示している。また、「Ｌ１＄ｍｉｓｓ、Ｌ２＄ＨＩＴ」は１次データキャッシュがミスし２次キャッシュがヒットした場合を示している。更に、「Ｌ１＄、Ｌ２＄ｍｉｓｓ」は１次データキャッシュ及び２次キャッシュ共にミスした場合を示している。当然、メモリアクセス実行時には、「Ｌ１＄、Ｌ２＄ｍｉｓｓ」よりも「Ｌ１＄ｍｉｓｓ、Ｌ２＄ＨＩＴ」、「Ｌ１＄ｍｉｓｓ、Ｌ２＄ＨＩＴ」よりも「Ｌ１＄ＨＩＴ」の発生頻度が高いほうが、高速処理が可能となる。【００１１】
そこで、連続するメモリコピー命令が記述され、各メモリコピー命令として、１命令で指定できる最大サイズ（例えば２５６バイト）のメモリコピー命令が指定されたときには、次のような制御が実行される。なお、以下の説明において、各メモリコピー命令をマルチフロー展開して得られるメモリコピー命令を、ＭＦメモリコピー命令と呼ぶ。【００１２】
各メモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令の実行には、プリフェッチ要求が発行される。このプリフェッチ要求は、各メモリコピー命令がマルチフロー展開されて得られる２番目以降のＭＦメモリコピー命令の実行時には発行されない。【００１３】
この結果、各メモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令の実行において、１次データキャッシュ及び２次キャッシュ共にミス（Ｌ１＄、Ｌ２＄ｍｉｓｓ）した場合、次のようなフェッチ動作とプリフェッチ動作が実行される。【００１４】
即ちまず、最初のＭＦメモリコピー命令で指定されるメモリアドレスから数ブロック分のアドレス範囲のメモリデータが、メインメモリから２次キャッシュにフェッチされ、更にそのメモリデータのうちの一部が１次データキャッシュにもフェッチされる。この数ブロック分のアドレス範囲は、例えばメインメモリから２次キャッシュへの１回のデータ転送単位分、例えば２５６バイト分に対応するアドレス範囲である。【００１５】
これと共に、最初のＭＦメモリコピー命令の実行時の１次データキャッシュのミス（Ｌ１＄ｍｉｓｓ）に基づいて、その命令で発行されているプリフェッチ要求に基づいて、プリフェッチ動作が実行される。この結果、最初のＭＦメモリコピー命令で指定されるメモリアドレスから上記数ブロック分先から更に上記数ブロック分のアドレス範囲のメモリデータが、２次キャッシュに予めプリフェッチされる。【００１６】
最初のＭＦメモリコピー命令において、１次データキャッシュがヒット（Ｌ１＄ＨＩＴ）した場合には、上記プリフェッチ要求にかかわらずプリフェッチ動作は実行されない。
各メモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令以外の２番目以降のＭＦメモリコピー命令では、プリフェッチ要求は発行されないため上記プリフェッチ動作は実行されない。２番目以降のＭＦメモリコピー命令の実行時に、１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）した場合には、２次キャッシュ又はメインメモリに対する通常のフェッチ動作が実行される。【００１７】
ここで、１つのメモリコピー命令がマルチフロー展開されて実行された後に、次のメモリコピー命令が連続して実行された場合を考える。この場合、次のメモリコピー命令に対応する各ＭＦメモリコピー命令で１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）しても、２次キャッシュに上記各ＭＦメモリコピー命令に対応するメモリデータがプリフェッチされている確率が高まる。即ち、２次キャッシュはヒット（Ｌ２＄ＨＩＴ）する可能性が高い。これにより、２番目以降のメモリコピー命令の２次キャッシュのミス（Ｌ２＄ｍｉｓｓ）によるペナルティを少なくするような制御が実行される。【００１８】
なお、上記次のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、再びプリフェッチ要求が発行される。この結果、次のメモリコピー命令の実行時に１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）すると、更にその次のメモリコピー命令のためのプリフェッチ動作が実行されることになる。この結果、現在マルチフロー展開により実行中のメモリコピー命令の次のメモリコピー命令のためのメモリデータが、順次２次キャッシュにプリフェッチされることになる。【００１９】
以上のプリフェッチ制御処理において、マルチフロー展開に基づいて、最大サイズのメモリコピー命令が連続して実行される第１のケースについて、図３の動作説明図に基づいて更に具体的に説明する。【００２０】
図３のケース１の例では、２次キャッシュから１次データキャッシュへのデータ転送単位に対応するメモリブロックが６４バイト（６４Ｂ）、１つのメモリコピー命令で指定可能な最大データサイズが２５６バイトである。また、連続する複数の２５６バイトメモリコピー命令によって１つの大きなサイズのメモリコピー処理が実行される。そして、アドレスＡ，Ｂがメモリブロックのブロック境界に位置するとして、上記メモリコピー処理の最初の２５６バイトメモリコピー命令におけるコピー元先頭アドレスがＡ、コピー先先頭アドレスがＢである。【００２１】
図３においてまず、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令時に、プリフェッチ要求が発行される。この最初のＭＦメモリコピー命令において、コピー元先頭アドレスはＡ、コピー先先頭アドレスはＢである。このプリフェッチ要求は、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる２番目以降のＭＦメモリコピー命令においては発行されない。【００２２】
この結果、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行において、１次データキャッシュ及び２次キャッシュ共にミスした場合（Ｌ１＄、Ｌ２＄ｍｉｓｓ）、次のようなフェッチ動作とプリフェッチ動作が実行される。【００２３】
即ちまず、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令で指定されるメモリアドレスＡから４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリから２次キャッシュにフェッチされる。このアドレス範囲は、６４Ｂ×４メモリブロック＝２５６バイト分であり、ＡからＡ＋２５５までである。更に、２次キャッシュにフェッチされるメモリデータのうちの一部のメモリブロックが、１次データキャッシュにもフェッチされる。また、最初のＭＦメモリコピー命令で指定されるメモリアドレスＢから４メモリブロック分のアドレス範囲（ＢからＢ＋２５５まで）のコピー先メモリ領域が、２次キャッシュに確保（フェッチ）される。【００２４】
次に、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時の１次データキャッシュのミス（Ｌ１＄ｍｉｓｓ）に基づいて、その命令で発行されているプリフェッチ要求に基づいて、プリフェッチ動作が実行される。即ち、上記最初のＭＦメモリコピー命令で指定されるメモリアドレスから４メモリブロック分先から更に４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリから２次キャッシュにプリフェッチされる。このアドレス範囲は、Ａ＋２５６からＡ＋５１１までである。コピー先メモリデータのための２次キャッシュでの領域確保（プリフェッチ）についても同様である（Ｂ＋２５６からＢ＋５１１まで）。【００２５】
第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令以外の２番目以降のＭＦメモリコピー命令では、プリフェッチ要求は発行されないため上記プリフェッチ動作は実行されない。２番目以降のＭＦメモリコピー命令の実行に１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）した場合には、通常のフェッチ動作が実行される。この場合、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時に、メモリアドレスＡ（又はＢ）から４メモリブロック分のアドレス範囲に対するメインメモリから２次キャッシュへのフェッチ動作が実行されている。このため、２番目以降のＭＦメモリコピー命令の実行時に１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）した場合のフェッチ動作では、２次キャッシュがヒット（Ｌ２＄ＨＩＴ）し、高速なメモリアクセスが実現される。【００２６】
ここで、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて実行された後に、第２番目（２ｎｄ）のメモリコピー命令が連続して実行された場合を考える。この場合、第２番目（２ｎｄ）のメモリコピー命令に対応する各ＭＦメモリコピー命令で１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）しても、２次キャッシュに上記各ＭＦメモリコピー命令に対応するメモリデータがプリフェッチされている。即ち、２次キャッシュはヒット（Ｌ２＄ＨＩＴ）する。これにより、第２番目（２ｎｄ）のメモリコピー命令の２次キャッシュのミス（Ｌ２＄ｍｉｓｓ）によるペナルティを少なくするような制御が実行される。【００２７】
ここで、上記第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時に、再びプリフェッチ要求が発行される。従って、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時に１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）すると、プリフェッチ要求に基づき第３番目（３ｒｄ）のメモリコピー命令のためのプリフェッチ動作が実行される。これにより、アドレス範囲Ａ＋５１２からＡ＋７６７及びＢ＋５１２からＢ＋７６７に対応するメインメモリから２次キャッシュへのプリフェッチ動作が実行されることになる。【００２８】
このようにして、各メモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時での１次データキャッシュのミス（Ｌ１＄ｍｉｓｓ）により、現在実行中のメモリコピー命令の次のメモリコピー命令のためのプリフェッチ動作が順次実行されることになる。【００２９】
次に、プリフェッチ制御処理において、マルチフロー展開に基づいて、最大サイズのメモリコピー命令が連続して実行される第２のケースについて、図４の動作説明図に基づいて更に具体的に説明する。【００３０】
図４のケース２の例では、図３のケース１の例の場合と同様に、２次キャッシュから１次データキャッシュへのデータ転送単位に対応するメモリブロックが６４バイト（６４Ｂ）、１つのメモリコピー命令で指定可能な最大データサイズが２５６バイトである。また、図３の場合と同様に、連続する複数の２５６バイトメモリコピー命令によって１つの大きなサイズのメモリコピー処理が実行される。図４のケース２では、アドレスＡ，Ｂがメモリブロックのブロック境界に位置するとして、上記メモリコピー処理の最初の２５６バイトメモリコピー命令におけるコピー元先頭アドレスがＡ＋１６、コピー先先頭アドレスがＢ＋１６とされる。即ち、図３のケース１では、メモリコピー処理の開始アドレスがブロック境界に存在したが（アドレスＡ，Ｂ）、図４のケース２では、ブロック境界に存在しない。【００３１】
図４のケース２においてまず、図３のケース１と同様に、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令時に、プリフェッチ要求が発行される。この最初のＭＦメモリコピー命令において、コピー元先頭アドレスはＡ＋１６、コピー先先頭アドレスはＢ＋１６である。このプリフェッチ要求は、図３のケース１と同様に、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる２番目以降のＭＦメモリコピー命令においては発行されない。【００３２】
この結果、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行において、１次データキャッシュ及び２次キャッシュ共にミスした場合（Ｌ１＄、Ｌ２＄ｍｉｓｓ）、次のようなフェッチ動作とプリフェッチ動作が実行される。【００３３】
即ちまず、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令で指定されるメモリアドレスＡ＋１６から４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリから２次キャッシュにフェッチされる。このアドレス範囲はメモリブロック単位で指定され、６４Ｂ×４メモリブロック＝２５６バイト分であり、ＡからＡ＋２５５までである。更に、２次キャッシュにフェッチされるメモリデータのうちの一部のメモリブロックが、１次データキャッシュにもフェッチされる。コピー先メモリデータのための２次キャッシュでの領域確保（フェッチ）についても同様である（ＢからＢ＋２５５まで）。【００３４】
次に、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時の１次データキャッシュのミス（Ｌ１＄ｍｉｓｓ）に基づいて、その命令で発行されているプリフェッチ要求に基づいて、プリフェッチ動作が実行される。即ち、上記最初のＭＦメモリコピー命令で指定されるメモリアドレスから４メモリブロック分先から更に４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリから２次キャッシュにプリフェッチされる。このアドレス範囲もメモリブロック単位で指定され、Ａ＋２５６からＡ＋５１１までである。コピー先メモリデータのための２次キャッシュでの領域確保（プリフェッチ）についても同様である（Ｂ＋２５６からＢ＋５１１まで）。【００３５】
ここで、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて実行された後に、第２番目（２ｎｄ）のメモリコピー命令が連続して実行された場合を考える。
第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、再びプリフェッチ要求が発行される。ここで、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令において、コピー元先頭アドレスはＡ＋２７２、コピー先先頭アドレスはＢ＋２７２である。そして、これらのアドレスが含まれるメモリブロックは、第１番目（１ｓｔ）のメモリコピー命令に対応する最後のＭＦメモリコピー命令が実行されたときにアクセスされたメモリブロックと同一である。従って、図４のケース２では、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、１次データキャッシュはヒット（Ｌ１＄ＨＩＴ）しミスしない。メインメモリから２次キャッシュへのプリフェッチ動作は、１次データキャッシュに対してプリフェッチ要求が発行されており、かつ１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）した場合においてのみ実行される。従って、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、プリフェッチ要求が発行されているにもかかわらず、第３番目（３ｒｄ）のメモリコピー命令のためのプリフェッチ動作が実行されないことになる。【００３６】
この結果、第３番目（３ｒｄ）のメモリコピー命令のマルチフロー展開実行時に最初に１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）したときには、２次キャッシュ上に第３番目（３ｒｄ）のメモリコピー命令のためのメモリデータが存在しないことになる。このため、１次データキャッシュと２次キャッシュの両方がミス（Ｌ１＄、Ｌ２＄ｍｉｓｓ）することになり、メインメモリから２次キャッシュに第３番目（３ｒｄ）のメモリコピー命令のためのメモリデータをフェッチする必要が生じる。これ以後、第３番目（３ｒｄ）のメモリコピー命令に対応する各ＭＦメモリコピー命令は、そのフェッチ動作が完了するまで命令実行が待たされることになり、大きなメモリアクセスペナルティが発生する。【００３７】
更に、第３番目（３ｒｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令において、コピー元先頭アドレスはＡ＋５２８、コピー先先頭アドレスはＢ＋５２８である。そして、これらのアドレスが含まれるメモリブロックは、第２番目（２ｎｄ）のメモリコピー命令に対応する最後のＭＦメモリコピー命令が実行されたときにアクセスされたメモリブロックと同一である。従って、図４のケース２では、第３番目（３ｒｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時も、１次データキャッシュはヒット（Ｌ１＄ＨＩＴ）しミスしない。このため、第３番目（３ｒｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時にも、プリフェッチ要求が発行されているにもかかわらず、第４番目（４ｔｈ）のメモリコピー命令のためのプリフェッチ動作が実行されないことになる。【００３８】
このような悪循環により、図４のケース２では、第２番目（２ｎｄ）以降の全てのメモリコピー命令で、各メモリコピー命令に対応する最初のＭＦメモリコピー命令にてプリフェッチ要求が発行されるにもかかわらず、プリフェッチ動作が実行されないことになる。この結果、メモリコピー命令のメモリアクセス効率が大幅に低下してしまうという問題点を有していた。
【特許文献１】特開昭５９−２１８６９１号公報
【特許文献２】特開昭５８−１６９３８４号公報
【発明の開示】
【００３９】
開示する技術が解決しようとする課題は、最大転送能力サイズのメモリアクセス命令が連続して実行される場合において、どのような場合にもプリフェッチ要求の効果が高くなるようにすることにある。
【００４０】
開示する技術の第１の態様は、記憶領域が２つ以上に階層化されているプロセッサで、命令のデコード時に１つの命令が複数の命令フローにマルチフロー展開された各命令フローを実行するとき、２つ以上の記憶領域のうち適切な記憶領域間で予め利用される予定のアドレスのデータをプリフェッチできるプロセッサ装置におけるプリフェッチ要求回路として実現される。
【００４１】
ラッチ部は、記憶領域にアクセスするための各命令フローを最大指定可能データ転送量で実行する状態が指示されたときに、その状態をマルチフロー展開の期間中保持する。
プリフェッチ要求信号出力部は、ラッチ部の出力信号と各命令フローの実行タイミングを示す信号とに基づいて、各命令フローが実行される毎にプリフェッチを要求するプリフェッチ要求信号を出力する。
【００４２】
開示する技術の第２の態様は、メインメモリと２次キャッシュと１次データキャッシュを備え、命令のデコード時に１つの命令を複数の命令フローにマルチフロー展開し各命令フローを実行し、１次データキャッシュへのメモリアクセス時にメインメモリから２次キャッシュへ予め利用される予定のアドレスのデータをプリフェッチすることができるプロセッサ装置におけるプリフェッチ要求回路を前提とする。
【００４３】
ラッチ回路部は、メモリアドレス間のデータのコピー又は移動、演算を指示するメモリコピー命令に対応する各命令フローを最大指定可能データ転送量で実行する状態が指示されたときに、その状態をマルチフロー展開の期間中保持する。
【００４４】
アンド回路部は、ラッチ部の出力信号と各命令フローの実行タイミングを示す信号とのアンド論理を取って、そのアンド論理出力として各命令フローが発行される毎にプリフェッチ要求信号を出力する。
【００４５】
上記第１又は第２の態様により、最大転送能力サイズのメモリアクセス命令が連続して実行される場合において、どのような場合にもプリフェッチ要求の効果が高くなるようなプリフェッチ要求信号を出力することが可能となる。
【図面の簡単な説明】
【００４６】
【図１】マルチフロー展開の説明図である。
【図２】キャッシュミス時のペナルティの説明図である。
【図３】プリフェッチの効果を説明するための図である。
【図４】従来技術の問題点の説明図である。
【図５】実施形態を適用できるプロセッサ装置の全体構成図である。
【図６】図５の命令デコーダ５０４、ＣＳＥ５０５、ＲＳＡ５０６、オペランドアドレス生成器５０９、及び１次データキャッシュ５１０の部分によるメモリアクセス動作の説明図である。
【図７】プリフェッチ要求回路の実施形態を示す図である。
【図８】プリフェッチ要求回路の実施形態の動作タイミングチャートである。
【図９】実施形態の効果を説明するための図である。
【発明を実施するための最良の形態】
【００４７】
以下、図面を参照しながら、本発明の実施形態について詳細に説明する。
図５は、本発明の一実施形態によるプロセッサ装置の全体構成図である。
図５に示されるプロセッサ装置においては、命令フェッチアドレス生成器５１９が１次命令キャッシュ５０３にアクセスすることにより、メインメモリ５０１から２次キャッシュ５０２及び１次命令キャッシュ５０３を介して必要な命令を読み出す。読み出された命令は、命令デコーダ５０４に送られる。【００４８】
命令デコーダ５０４は、デコード（Ｄ）サイクルにおいて、インオーダにて命令をデコードする。
命令デコーダ５０４でデコードされた命令は、ＣＳＥ（Ｃｏｍｍｉｔ  Ｓｔａｃｋ  Ｅｎｔｒｙ）５０５に順番に登録される。同時に、命令デコーダ５０４でデコードされた命令は、アウトオブオーダ実行制御を行う各リザベーションステーションＲＳＡ（Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ａｄｄｒｅｓｓ）５０６及びＲＳＥ（Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ｅｘｅｃｕｔｅ）５０７に登録される。更に、命令デコーダ５０４でデコードされた命令が分岐命令である場合には、命令が分岐命令用リザべーションステーションＲＳＢＲ（Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  ｆｏｒ  Ｂｒａｎｃｈ）５０８に登録される。ＣＳＥ５０５、ＲＳＡ５０６、ＲＳＥ５０７、及びＲＳＢＲ５０８の各エントリには、命令デコーダ５０４でデコードされた各命令を識別するためのＩＩＤ（命令識別子）が登録される。また、ＣＳＥの各エントリには、ＩＩＤと共に、登録された命令の有効又は無効を指示するためのバリッドフラグが登録される。ＣＳＥ５０５にデコード順に登録された命令と、ＲＳＡ５０６、ＲＳＥ５０７、又はＲＳＢＲ５０８を介してアウトオブオーダで実行される命令は、命令識別子（ＩＩＤ）によって紐付けられている。そして、ＲＳＡ５０６、ＲＳＥ５０７、又はＲＳＢＲ５０８を介して実行が完了した命令は、その命令に対応するＲＳＡ５０６、ＲＳＥ５０７、又はＲＳＢＲ５０８のエントリに登録されているＩＩＤによってＣＳＥ５０５のエントリと照合される。そして、同じＩＩＤが登録されているＣＳＥ５０５のエントリのバリッドフラグ（Ｖａｌｉｄ）が無効を示す値に変更されて命令の実行を完了する。この紐付け制御により、ＲＳＡ５０６、ＲＳＥ５０７、又はＲＳＢＲ５０８を介してアウトオブオーダで実行される命令の順序が、ＣＳＥ５０５によって保証される。【００４９】
命令デコーダ５０４が、メモリコピー命令をマルチフロー展開した場合のように、同時に複数の命令をデコードして発行したようなときには、命令デコーダ５０４が発行した各命令がＲＳＡ５０６に登録される。或いは、１次データキャッシュ５１０においてキャッシュミスが発生しメモリデータのフェッチに時間がかかっているようなときにも、命令デコーダ５０４が発行した後続する命令がＲＳＡ５０６に登録される。【００５０】
ＲＳＡ５０６では、各エントリの優先順位（プライオリティ）が決定される。プライオリティ（Ｐ）サイクルで実行が可能となったＲＳＡ５０６に登録されたメモリアクセス命令に対しては、オペランドアドレス生成器５０９が、アクセスするメモリアドレスをアドレス計算（Ｘ）サイクルにて計算する。メモリアクセス命令としては、ロード命令、ストア命令、メモリコピー命令などがある。オペランドアドレス生成器５０９は、計算したアドレスによって、１次データキャッシュ５１０にアクセスする。【００５１】
ＲＳＡ５０６にエントリが１つもない場合は、命令は、ＲＳＡ５０６には登録されずに、命令デコーダ５０４でデコードされた後すぐに、オペランドアドレス生成器５０９に投入される。【００５２】
ＲＳＡ５０６から１次データキャッシュへは、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが発行される。プリフェッチ要求信号は、従来は、図３又は図４等で前述したように、最大コピーサイズを有するメモリコピー命令に対応する各ＭＦメモリコピー命令（マルチフロー展開命令）のうち、最初のＭＦメモリコピー命令が発行されるタイミングでのみ発行されていた。本実施形態では、後述するように、最大コピーサイズを有するメモリコピー命令からマルチフロー展開された各ＭＦメモリコピー命令がＲＳＡ５０６から発行される毎に、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが発行される点が異なる。【００５３】
算術演算命令又は論理演算命令に対しては、固定小数点レジスタ５１３又は浮動小数点レジスタ５１４の内容が読み出され、アウトオブオーダで演算器５１１又は５１２に投入される。演算器５１１又は５１２は、演算実行（Ｘ）サイクルで、演算命令によって指定された演算を実行する。【００５４】
演算器５１１又は５１２での実行結果は、レジスタ更新（Ｕ）サイクルで、固定小数点更新バッファ５１５又は浮動小数点更新バッファ５１６に格納されて、命令完了（コミット）処理を待つ。演算器５１１又は５１２での演算実行完了、１次データキャッシュ５１０でのデータ転送完了、又は分岐予測機構５１８からの分岐判定完了などの報告をＣＳＥ５０５が受けた後、固定小数点更新バッファ５１５又は浮動小数点更新バッファ５１６において、インオーダでコミット処理が行われる。更に、レジスタ書込み（Ｗ）サイクルで、各更新バッファ５１５又は５１６から各レジスタ５１３又は５１４への書込みが行われる。【００５５】
ＣＳＥ５０５に登録された１つの命令について実行が完了すると、実行が完了した命令に対応するＣＳＥ５０５のエントリのバリッドフラグが無効を示す値に変更されることによりＣＳＥ５０５での登録が抹消される。そして、次の命令フェッチアドレスを指定するＰＳＷ（Ｐｒｏｇｒａｍ  Ｓｔａｔｕｓ  Ｗｏｒｄ）５１７の内容が更新される。【００５６】
命令フェッチアドレス生成器５１９は、ＰＳＷ５１７、ＲＳＢＲ５０８、又はＲＳＢＲ５０８から分岐予測機構５１８を介して与えられる命令フェッチアドレス情報に基づいて、次の命令フェッチアドレスを生成し、生成した命令フェッチアドレスによって１次命令キャッシュ５０３にアクセスする。【００５７】
上記構成を有するプロセッサにおいて、メモリにアクセスする命令の実行時に、１次データキャッシュ５１０へのアクセスがミスした場合、２次キャッシュ５０２又はメインメモリ５０１から、アクセスするアドレスが含まれるメモリブロックがフェッチされる。これにより、１次データキャッシュ５１０にデータが取得される。メモリコピー命令などのように１パイプラインでは処理しきれない命令は、命令デコーダ５０４においてマルチフロー展開される。そして、展開されたフロー毎に、ＣＳＥ５０５、ＲＳＡ５０６、ＲＳＥ５０７、及びＲＳＢＲ５０８への命令の登録が行われ、スーパスカラーとパイプライン処理によって１命令が実行される。【００５８】
図６は、図５の命令デコーダ５０４、ＣＳＥ５０５、ＲＳＡ５０６、オペランドアドレス生成器５０９、及び１次データキャッシュ５１０の部分によるメモリアクセス動作の説明図である。メモリコピー命令の一例としてＭＶＣ（ＭＯＶＥ  ｃｈａｒａｃｔｅｒ）命令を想定する。ＭＶＣ命令は最大２５６バイトのデータをバイト単位で指定して、任意のコピー元アドレスＡからコピー先アドレスＢへコピーするメモリコピー命令である。ここでは、最大値２５６バイトのＭＶＣ命令を「ＭＶＣ２５６」命令とよぶ。【００５９】
命令デコーダ５０４において、デコード（Ｄ）サイクルでデコードされたＭＶＣ２５６命令は、マルチフロー展開によって、１６個の「ＭＶＣ１６」命令に分解される。「ＭＶＣ１６」命令は、１６バイト単位で、メインメモリ５０１、２次キャッシュ５０２、又は１次データキャッシュ５１０に対するデータのＬＯＡＤ若しくはＳＴＯＲＥ、又はＬＯＡＤと及びＳＴＯＲＥの同時処理を実行する命令である。【００６０】
このように複数のＭＦメモリコピー命令にマルチフロー展開されてデコードされた各「ＭＶＣ１６」命令は、図６に示されるように、ＣＳＥ５０５内の１６個のＣＳＥエントリＣＳＥ０からＣＳＥ１５に個別に登録される。また、各「ＭＶＣ１６」命令は、ＲＳＡ５０６、ＲＳＥ５０７に登録される。このとき前述したように、各ＣＥＳエントリＣＳＥ０からＣＳＥ１５には、各「ＭＶＣ１６」命令のＩＩＤが登録され、このＩＩＤによって各ＣＥＳエントリＣＳＥ０〜ＣＳＥ１５とＲＳＡ５０６又はＲＳＥ５０７内の各エントリとが紐付けられる。【００６１】
「ＭＶＣ２５６」命令からマルチフロー展開されて得られた各「ＭＶＣ１６」命令のうち最初の「ＭＶＣ１６」命令が登録されるＲＳＡ５０６のエントリには、最初の「ＭＶＣ１６」命令に対応するＩＩＤと共に、＋Ｄ_ＭＶＣ_２５６_１ＳＴ信号がセットされる。
この＋Ｄ_ＭＶＣ_２５６_１ＳＴ信号は、命令デコーダ５０４からセットされ、コピーサイズが最大の２５６バイトであるメモリコピー命令に対してマルチフロー展開された最初のＭＦメモリコピー命令であることを示す信号である。【００６２】
また、「ＭＶＣ２５６」命令からマルチフロー展開されて得られた各「ＭＶＣ１６」命令のうち、最初の「ＭＶＣ１６」命令のデコード（Ｄ）サイクルから、最後の「ＭＶＣ１６」命令の演算器５１１又は５１２への投入まで（後述する図８のｔ２〜ｔ５の期間）、命令デコーダ５０４からＲＳＡ５０６に、マルチフロー展開中であることを示すハイレベルの＋Ｄ_ＭＦ_ＴＧＲ信号が出力される。【００６３】
ＲＳＡ５０６に登録された各「ＭＶＣ１６」命令の各エントリは、プライオリティの高い順にオペランドアドレス生成器５０９に発行される。この結果、オペランドアドレス生成器５０９が、１次データキャッシュ５１０へのメモリアクセスを実行する。なお、ＲＳＡ５０６から１次データキャッシュへは、各「ＭＶＣ１６」命令が発行される毎に、オペランドアドレス生成器５０９（ＥＡＧ）を有効（ＶＡＬＩＤ）にすることを示す＋Ｐ＿ＥＡＧ＿ＶＡＬＩＤ信号がアサートされる。【００６４】
また、ＲＳＡ５０６から１次データキャッシュ５１０へは、「ＭＶＣ２５６」命令に対応する各マルチフロー展開命令「ＭＶＣ１６」がＲＳＡ５０６から発行される毎に、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴがアサートされる。【００６５】
図７は、上述のプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴを発行するために、ＲＳＡ５０６に実現されるプリフェッチ要求回路の構成を示す図である。また、図８は、図７のプリフェッチ要求回路の動作を示す動作タイミングチャートである。【００６６】
図３又は図４等で前述したように、従来は、最大コピーサイズを有する「ＭＶＣ２５６」命令に対応する各マルチフロー展開命令「ＭＶＣ１６」のうち、最初の「ＭＶＣ１６」命令が発行されるタイミングにおいてのみプリフェッチ要求信号が発行されていた。これに対して、本実施形態は、各「ＭＶＣ１６」命令が発行される図８（ｉ）として示されるタイミング毎に、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが発行される点が異なる。【００６７】
このプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴを出力させるために、図７のプリフェッチ要求回路は、以下に説明するように動作する。
まず、図７のプリフェッチ要求回路は、＋Ｄ_ＭＦ_ＴＧＲ信号、＋Ｐ＿ＥＡＧ＿ＶＡＬＩＤ信号、及び＋Ｐ_ＭＶＣ_２５６_１ＳＴ信号に基づいて動作する。【００６８】
＋Ｄ_ＭＦ_ＴＧＲ信号は、前述したように、命令デコーダ５０４から発行され、マルチフロー展開中の期間でアサートされる信号であり、例えば図８（ｄ）のｔ２からｔ５までの期間でアサートされる。【００６９】
＋Ｐ＿ＥＡＧ＿ＶＡＬＩＤ信号は、前述したように、ＲＳＡ５０６がオペランドアドレス生成器５０９に命令を発行するたびに、ＲＳＡ５０６によってアサートされる信号であり、例えば図８（ａ）のｔ１、ｔ３、ｔ４の各タイミングでアサートされる。【００７０】
＋Ｐ_ＭＶＣ_２５６_１ＳＴ信号は、命令デコーダ５０４から発行される＋Ｄ_ＭＶＣ_２５６_１ＳＴ信号に基づいてＲＳＡ５０６内部で生成される信号である。より具体的には、最大コピーサイズを有する「ＭＶＣ２５６」命令からマルチフロー展開された最初の「ＭＶＣ１６」命令が、ＲＳＡ５０６からオペランドアドレス生成器５０９に発行されるタイミングで、＋Ｐ_ＭＶＣ_２５６_１ＳＴ信号が発行される。このとき、上記最初の「ＭＶＣ１６」命令が実行されるタイミングで、その最初の「ＭＶＣ１６」命令が登録されているＲＳＡ５０６内のエントリにセットされている＋Ｄ_ＭＶＣ_２５６_１ＳＴ信号に基づいて、＋Ｐ_ＭＶＣ_２５６_１ＳＴ信号がアサートされる。この＋Ｐ_ＭＶＣ_２５６_１ＳＴ信号は、例えば図８（ｂ）のｔ１のタイミングでアサートされる。【００７１】
図７において、アンド回路７０１が+Ｐ_ＭＶＣ_２５６_１ＳＴ信号（図８（ｂ））及び+Ｐ_ＥＡＧ_ＶＡＬＩＤ信号（図８（ａ））のアンド論理を取ることで、例えば図８（ｃ）のｔ１からｔ２でアサートされる信号を出力する。【００７２】
ｔ１からｔ２でアサートされたアンド回路７０１の出力は、「ＭＶＣ２５６」命令に対応する最初のマルチフロー展開命令「ＭＶＣ１６」に対応するプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴとして、オア回路７０６を介して１次データキャッシュ５１０に発行される。【００７３】
ｔ１からｔ２でアサートされたアンド回路７０１の出力は同時に、オア回路７０２を介して１ビットラッチ７０３の入力端子Ｄinに入力して、１ビットラッチ７０３によりラッチされる。図８（ｄ）はＤｉｎに入力するオア回路７０２の出力信号を示しており、ｔ１からｔ５の期間でアサートされる。【００７４】
１ビットラッチ７０３によりラッチされた信号は、次のクロックサイクルで１ビットラッチ７０３のＤｏｕｔから出力される。そのＤｏｕｔ出力信号は、アンド回路７０４において、命令デコーダ５０４から入力する+Ｄ_ＭＦ_ＴＧＲ信号（図８（ｄ））とのアンド論理が取られる。この結果、アンド回路７０４の出力は、例えば図８（ｅ）のｔ２からｔ５の期間でアサートされる。【００７５】
そして、アンド回路７０４の出力がオア回路７０２を介して１ビットラッチ７０３の入力端子Ｄinに入力する。このようにして、マルチフロー展開期間中は、１ビットラッチ７０３の出力端子Ｄｏｕｔは、アサート状態となる。図８（ｇ）は１ビットラッチ７０３の出力端子Ｄｏｕｔからの出力を示しており、ｔ２からｔ６までの期間オンとなる。【００７６】
アンド回路７０５は、+Ｐ_ＥＡＧ_ＶＡＬＩＤと、１ビットラッチ７０３の出力Ｄｏｕｔ（図８（ｇ））のアンド論理を取る。+Ｐ_ＥＡＧ_ＶＡＬＩＤ信号は、図８（ａ）に示されるように、ＲＳＡ５０６がオペランドアドレス生成器５０９に命令を発行する毎にアサートされる。また、１ビットラッチ７０３の出力Ｄｏｕｔは、図８（ｇ）に示されるように、最大コピーサイズを有する「ＭＶＣ２５６」命令のマルチフロー展開期間中にアサートされる。【００７７】
従って、アンド回路７０５の出力は、図８（ｈ）に示されるように、最大コピーサイズを有する「ＭＶＣ２５６」命令に対応する２番目以降のマルチフロー展開命令「ＭＶＣ１６」に対応する各タイミングｔ３及びｔ４でアサートされる。この出力信号が、オア回路７０６を介して、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴとして、１次データキャッシュ５１０に発行される。【００７８】
この結果、アンド回路７０１と７０５のオア出力として、「ＭＶＣ２５６」命令に対応する各「ＭＶＣ１６」命令の実行タイミング毎に、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが、１次データキャッシュ５１０に発行される。【００７９】
図９は、図７のプリフェッチ要求回路の効果を説明するための図である。
図９のケースの例では、前述した図４のケース２の例の場合と同様に、２次キャッシュから１次データキャッシュへのデータ転送単位に対応するメモリブロックが６４バイト（６４Ｂ）、１つのメモリコピー命令で指定可能な最大データサイズが２５６バイトである。また、図４の場合と同様に、連続する複数の２５６バイトメモリコピー命令によって１つの大きなサイズのメモリコピー処理が実行される。更に、図４のケース２と同様に、アドレスＡ，Ｂがメモリブロックのブロック境界に位置するとして、上記メモリコピー処理の最初の２５６バイトメモリコピー命令におけるコピー元先頭アドレスがＡ＋１６、コピー先先頭アドレスがＢ＋１６とされる。即ち、メモリコピー処理の開始アドレスがブロック境界に存在しない。【００８０】
図９のケースにおいてまず、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令時に、図７のプリフェッチ要求回路によってプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが発行される。このタイミングは、例えば図８（ｉ）のｔ１からｔ２の期間に相当する。この最初のＭＦメモリコピー命令において、コピー元先頭アドレスはＡ＋１６、コピー先先頭アドレスはＢ＋１６である。【００８１】
最初のＭＦメモリコピー命令で指定された上記アドレスに基づいて、オペランドアドレス生成器５０９がアクセスアドレスを計算し、１次データキャッシュ５１０にアクセスする。この結果、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行にて、１次データキャッシュ５１０及び２次キャッシュ５０２共にミスした場合（Ｌ１＄、Ｌ２＄ｍｉｓｓ）、以下のフェッチ動作とプリフェッチ動作が実行される。【００８２】
即ちまず、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令で指定されるメモリアドレスＡ＋１６から４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリ５０１から２次キャッシュ５０２にフェッチされる。このアドレス範囲はメモリブロック単位で指定され、６４Ｂ×４メモリブロック＝２５６バイト分であり、ＡからＡ＋２５５までである。更に、２次キャッシュ５０２にフェッチされるメモリデータのうちの一部のメモリブロックが、１次データキャッシュ５１０にもフェッチされる。コピー先メモリデータのための２次キャッシュでの領域確保（フェッチ）についても同様である（ＢからＢ＋２５５まで）。【００８３】
次に、第１番目（１ｓｔ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令で発行されているプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴに基づいて、プリフェッチ動作が実行される。即ち、上記最初のＭＦメモリコピー命令で指定されるメモリアドレスから４メモリブロック分先から更に４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリ５０１から２次キャッシュ５０２にプリフェッチされる。このアドレス範囲もメモリブロック単位で指定され、Ａ＋２５６からＡ＋５１１までである。コピー先メモリデータのための２次キャッシュでの領域確保（プリフェッチ）についても同様である（Ｂ＋２５６からＢ＋５１１まで）。【００８４】
次に、本実施形態では、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて得られる最初のＭＦメモリコピー命令以外の２番目以降のＭＦメモリコピー命令でも、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが発行される。例えば図８（ｉ）のｔ３、ｔ４のタイミングである。ここで、１次データキャッシュがミス（Ｌ１＄ｍｉｓｓ）した場合には、現在実行中のＭＦメモリコピー命令で発行されているプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴに基づいて、プリフェッチ動作が実行される。即ち、現在実行中のＭＦメモリコピー命令で指定されるメモリアドレスから４メモリブロック分先から更に４メモリブロック分のアドレス範囲において２次キャッシュ５０２に存在しない分が、メインメモリ５０１から２次キャッシュ５０２にプリフェッチされる。【００８５】
ここで、第１番目（１ｓｔ）のメモリコピー命令がマルチフロー展開されて実行された後に、第２番目（２ｎｄ）のメモリコピー命令が連続して実行された場合を考える。
第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、再びプリフェッチ要求が発行される。ここで、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令において、コピー元先頭アドレスはＡ＋２７２、コピー先先頭アドレスはＢ＋２７２である。そして、これらのアドレスが含まれるメモリブロックは、第１番目（１ｓｔ）のメモリコピー命令に対応する最後のＭＦメモリコピー命令が実行されたときにアクセスされたメモリブロックと同一である。従って、図９のケースでは、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、１次データキャッシュはヒット（Ｌ１＄ＨＩＴ）しミスしない。従って、第２番目（２ｎｄ）のメモリコピー命令に対応する最初のＭＦメモリコピー命令の実行時には、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴは発行されているが、プリフェッチ動作は実行されない。【００８６】
続いて、第２番目（２ｎｄ）のメモリコピー命令に対応するＭＦメモリコピー命令のうち、メモリブロック境界Ａ＋３２０（Ｂ＋３２０）のアドレスを指定するＭＦメモリコピー命令が実行されるタイミングを考える。この場合も、図７のプリフェッチ要求回路によって、プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴが発行される。この場合、Ａ＋３２０（Ｂ＋３２０）のアドレス領域のメモリブロックは、未だ実行されていないメモリブロックであるため、１次データキャッシュ５１０には存在しない。このため、１次データキャッシュ５１０がミス（Ｌ１＄ｍｉｓｓ）する。これによりまず、Ａ＋３２０（Ｂ＋３２０）のアドレスから始まるメモリブロックが、２次キャッシュ５０２から１次データキャッシュ５１０にフェッチされる。これと共に、Ｌ１＄ｍｉｓｓと上記プリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴとに基づいて、プリフェッチ動作が実行される。即ち、上記ＭＦメモリコピー命令で指定されるメモリブロック境界Ａ＋３２０のアドレスから４メモリブロック分先から更に４メモリブロック分のアドレス範囲のコピー元メモリデータが、メインメモリ５０１から２次キャッシュ５０２にプリフェッチされる。このアドレス範囲は、Ａ＋５７６からＡ＋８３１までである。コピー先メモリデータのための２次キャッシュでの領域確保（プリフェッチ）についても同様である（Ｂ＋５７６からＢ＋８３１まで）。【００８７】
このようにして、第３番目（３ｒｄ）のメモリコピー命令のためのプリフェッチ動作も適切に実行されることになる。
第３番目（３ｒｄ）のメモリコピー命令のマルチフロー展開実行時についても、上記大２番目（２ｎｄ）の場合と同様に、各ＭＦメモリコピー命令毎に発行されるプリフェッチ要求信号＋Ｐ＿ＰＲＥＦＥＴＣＨ＿ＲＥＱＵＥＳＴに基づいて、プリフェッチ動作が適切に実行される。【００８８】
以上のようにして、図７に示されるプリフェッチ要求回路によって、マルチフロー展開命令のアドレス指定がメモリブロック境界にない場合であっても、最大コピーサイズによって連続して実行されるメモリコピー命令の２次キャッシュのミスによるペナルティを少なくして、プリフェッチ要求の効果を高めることが可能となる。
【図１】
2010116403.tif 000003
【図２】
2010116403.tif 000004
【図３】
2010116403.tif 000005
【図４】
2010116403.tif 000006
【図５】
2010116403.tif 000007
【図６】
2010116403.tif 000008
【図７】
2010116403.tif 000009
【図８】
2010116403.tif 000010
【図９】
2010116403.tif 000011
【国際調査報告】
2010116403.tif 000012
2010116403.tif 000013