(57)【要約】【課題】  不連続なメモリ空間に対する命令フェッチが発生しない場合の命令フェッチ性能を向上させる。【解決手段】  アドレス比較部（１１２）は、第１アドレス格納部（１０４）および第２アドレス格納部（１１１）の命令アドレスを比較し、命令アドレスが一致するか否かを判定する。アドレス算出部（１１０）は、アドレス比較部（１１２）でアドレス一致と判定されると、第２アドレス格納部（１１１）の命令アドレスに命令キャッシュ（１０６）のラインサイズに対応する値を加算した結果を用いて第２アドレス格納部（１１１）の命令アドレスを更新する。コード取得部（１１４）は、アドレス比較部（１１２）でアドレス一致と判定された場合、第２アドレス格納部（１１１）の更新後の命令アドレスに対応する命令コードをメインメモリ（２００）から取得して命令キャッシュ（１０６）に送出する。【選択図】    図１
2010044682.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行するプロセッサおよび命令コードを格納するメインメモリを含むコンピュータシステムにて前記プロセッサ内で命令キャッシュを用いて命令フェッチ処理を実現する命令フェッチ機構であって、
フェッチ対象の命令アドレスを格納する第１アドレス格納部と、
プリフェッチ対象の命令アドレスを格納する第２アドレス格納部と、
前記第１アドレス格納部および前記第２アドレス格納部の命令アドレスを比較し、命令アドレスが一致するか否かを判定するアドレス比較部と、
前記アドレス比較部でアドレス一致と判定されると、前記第２アドレス格納部の命令アドレスに前記命令キャッシュのラインサイズに対応する値を加算した結果を用いて前記第２アドレス格納部の命令アドレスを更新するアドレス算出部と、
前記アドレス比較部でアドレス一致と判定された場合、前記第２アドレス格納部の更新後の命令アドレスに対応する命令コードを前記メインメモリから取得して前記命令キャッシュに送出するコード取得部とを備えることを特徴とする命令フェッチ機構。
【請求項２】
請求項１に記載の命令フェッチ機構において、
前記命令キャッシュでキャッシュミスと判定されると、前記第１アドレス格納部の命令アドレスを格納する第３アドレス格納部を備え、
前記アドレス算出部は、前記アドレス比較部でアドレス不一致と判定されると、前記第１アドレス格納部の命令アドレスに前記命令キャッシュのラインサイズに対応する値を加算した結果を用いて前記２アドレス格納部の命令アドレスを更新し、
前記コード取得部は、前記アドレス比較部でアドレス不一致と判定され、前記命令キャッシュでキャッシュミスと判定された場合、前記第３アドレス格納部の命令アドレスに対応する命令コードを前記メインメモリから取得して前記命令キャッシュに送出した後、前記第２アドレス格納部の更新後の命令アドレスに対応する命令コードを前記メインメモリから取得して前記命令キャッシュに送出することを特徴とする命令フェッチ機構。
【請求項３】
命令を実行するプロセッサおよび命令コードを格納するメインメモリを含むコンピュータシステムにて使用され、命令キャッシュを用いて命令フェッチ処理を実現する命令フェッチ機構を備えるプロセッサであって、
前記命令フェッチ機構は、
フェッチ対象の命令アドレスを格納する第１アドレス格納部と、
プリフェッチ対象の命令アドレスを格納する第２アドレス格納部と、
前記第１アドレス格納部および前記第２アドレス格納部の命令アドレスを比較し、命令アドレスが一致するか否かを判定するアドレス比較部と、
前記アドレス比較部でアドレス一致と判定されると、前記第２アドレス格納部の命令アドレスに前記命令キャッシュのラインサイズに対応する値を加算した結果を用いて前記第２アドレス格納部の命令アドレスを更新するアドレス算出部と、
前記アドレス比較部でアドレス一致と判定された場合、前記第２アドレス格納部の更新後の命令アドレスに対応する命令コードを前記メインメモリから取得して前記命令キャッシュに送出するコード取得部とを備えることを特徴とするプロセッサ。
【請求項４】
請求項３に記載のプロセッサにおいて、
前記命令フェッチ機構は、前記命令キャッシュでキャッシュミスと判定されると、前記第１アドレス格納部の命令アドレスを格納する第３アドレス格納部を備え、
前記アドレス算出部は、前記アドレス比較部でアドレス不一致と判定されると、前記第１アドレス格納部の命令アドレスに前記命令キャッシュのラインサイズに対応する値を加算した結果を用いて前記２アドレス格納部の命令アドレスを更新し、
前記コード取得部は、前記アドレス比較部でアドレス不一致と判定され、前記命令キャッシュでキャッシュミスと判定された場合、前記第３アドレス格納部の命令アドレスに対応する命令コードを前記メインメモリから取得して前記命令キャッシュに送出した後、前記第２アドレス格納部の更新後の命令アドレスに対応する命令コードを前記メインメモリから取得して前記命令キャッシュに送出することを特徴とするプロセッサ。
【請求項５】
命令を実行するプロセッサおよび命令コードを格納するメインメモリを含むコンピュータシステムであって、
前記プロセッサは、請求項１または請求項２に記載の命令フェッチ機構を備えることを特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサおよびメインメモリを含むコンピュータシステムにおけるプロセッサ内の命令キャッシュを用いた命令フェッチ処理に関する。
【背景技術】
【０００２】
一般に、汎用プロセッサやＤＳＰ（Digital Signal Processor）等においては、命令フェッチ処理（命令コードをメモリから取得する処理）に要する時間を短縮するために、命令キャッシュを用いて命令フェッチ処理が実現されている。また、命令フェッチ処理に要する時間を更に短縮するための技術として、ネクストラインプリフェッチと称される技術が知られている。ネクストラインプリフェッチは、分岐命令等が実行されない限りメモリアドレス順に命令コードが取得されるという命令フェッチ処理の特徴を利用した技術である。ネクストラインプリフェッチを導入した命令フェッチ処理では、命令フェッチの際に、命令キャッシュでキャッシュミスと判定された場合、所望のキャッシュラインに対応する命令コードがメインメモリから取得されて命令キャッシュに送出された後、自動的に次のキャッシュラインに対応する命令コードがメインメモリから取得されて命令キャッシュに送出される。
【０００３】
また、命令フェッチ処理に関しては、分岐予測ミスによる遅延を低減するための技術が考案されている（例えば、特許文献１を参照）。
【特許文献１】特開平１０−１８７４４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ネクストラインプリフェッチを導入した命令フェッチ処理では、命令フェッチの際に、命令キャッシュでキャッシュミスと判定された場合にのみ、フェッチ対象の命令アドレスの次のキャッシュラインに対応する命令コードがプリフェッチされる。従って、分岐命令等が実行されず、不連続なメモリ空間に対する命令フェッチが発生しない場合には、１キャッシュライン分の命令フェッチ毎に命令キャッシュでキャッシュミスとキャッシュヒットとが交互に発生することになる。キャッシュミス時には命令フェッチ時間が非常に長くなるため、不連続なメモリ空間に対する命令フェッチが発生しない場合に関して、ネクストラインプリフェッチの導入により命令フェッチ性能の向上が十分に実現されているとは言い難い。
【０００５】
本発明は、このような問題に鑑みてなされたものであり、不連続なメモリ空間に対する命令フェッチが発生しない場合の命令フェッチ性能を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様では、命令を実行するプロセッサおよび命令コードを格納するメインメモリを含むコンピュータシステムにてプロセッサ内で命令キャッシュを用いて命令フェッチ処理を実現する命令フェッチ機構は、第１アドレス格納部、第２アドレス格納部、アドレス比較部、アドレス算出部およびコード取得部を備える。第１アドレス格納部は、フェッチ対象の命令アドレスを格納する。第２アドレス格納部は、プリフェッチ対象の命令アドレスを格納する。アドレス比較部は、第１アドレス格納部および第２アドレス格納部の命令アドレスを比較し、命令アドレスが一致するか否かを判定する。アドレス算出部は、アドレス比較部でアドレス一致と判定されると、第２アドレス格納部の命令アドレスに命令キャッシュのラインサイズに対応する値を加算した結果を用いて第２アドレス格納部の命令アドレスを更新する。コード取得部は、アドレス比較部でアドレス一致と判定された場合、第２アドレス格納部の更新後の命令アドレスに対応する命令コードをメインメモリから取得して命令キャッシュに送出する。
【発明の効果】
【０００７】
不連続なメモリ空間に対する命令フェッチが発生しない場合の命令フェッチ性能を向上させることができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施形態について図面を用いて説明する。
【０００９】
図１は、本発明の一実施形態を示している。図２は、図１のプロセッサの命令フェッチ処理を示している。図３は、図１のプロセッサにおける命令プリフェッチの発生状況を示している。
【００１０】
図１に示すように、本発明の一実施形態のコンピュータシステム１０は、プロセッサ１００およびメインメモリ２００を用いて具現されている。プロセッサ１００においては、パイプライン方式が採用されており、命令キャッシュを用いて命令フェッチ処理を実現する命令フェッチ機構が設けられている。例えば、プロセッサ１００は、プログラムカウンタ部１０１、オフセット値格納部１０２、アドレス算出部１０３、アドレス格納部１０４、命令キャッシュタグ部１０５、命令キャッシュデータ部１０６、ヒット／ミス判定結果格納部１０７、フェッチ用アドレス格納部１０８、コード格納部１０９、プリフェッチ用アドレス算出部１１０、プリフェッチ用アドレス格納部１１１、アドレス比較部１１２、一致／不一致判定結果格納部１１３および命令フェッチ部１１４を有している。なお、図１には、プロセッサ１００の命令フェッチ処理に関連する部分のみが示されている。
【００１１】
アドレス算出部１０３は、プログラムカウンタ部１０１およびオフセット値格納部１０２の値を加算してフェッチ対象の命令アドレスを算出し、算出した命令アドレスをアドレス格納部１０４に格納する。命令キャッシュタグ部１０５は、アドレス格納部１０４の命令アドレスに対応する命令コードが命令キャッシュデータ部１０６に格納されているか否かを判定し、キャッシュヒット／キャッシュミスを示す判定結果情報をヒット／ミス判定結果格納部１０７に格納する。また、命令キャッシュタグ部１０５は、アドレス格納部１０４の命令アドレスに対応する命令コードが命令キャッシュデータ部１０６に格納されていないと判定した場合、アドレス格納部１０４の命令アドレスをフェッチ用アドレス格納部１０８に格納する。
【００１２】
命令キャッシュデータ部１０６は、命令キャッシュタグ部１０５でキャッシュヒットと判定された場合、アドレス格納部１０４の命令アドレスに対応する命令コードを内部から読み出してコード格納部１０９に格納する。また、命令キャッシュデータ部１０６は、命令キャッシュタグ部１０５でキャッシュミスと判定された場合、命令フェッチ部１１４から供給されるデータ転送通知に応答して命令フェッチ部１１４から供給される命令コード（１キャッシュライン分）を内部に格納した後、アドレス格納部１０４の命令アドレスに対応する命令コードを内部から読み出してコード格納部１０９に格納する。コード格納部１０９に格納された命令コードは、プロセッサ１００内の命令実行部（図示せず）に供給される。
【００１３】
プリフェッチ用アドレス算出部１１０は、アドレス比較部１１２から供給される命令アドレスに命令キャッシュ（命令キャッシュタグ部１０５および命令キャッシュデータ部１０６）のラインサイズに対応する値（例えば、０ｘ４０（６４バイトに相当））を加算してプリフェッチ対象の命令アドレスを算出し、算出した命令アドレスをプリフェッチ用アドレス格納部１１１に格納する。アドレス比較部１１２は、アドレス格納部１０４およびプリフェッチ用アドレス格納部１１１の命令アドレスを比較して命令コードが一致するか否かを判定し、アドレス一致／アドレス不一致を示す判定結果情報を一致／不一致判定結果格納部１１３に格納する。また、アドレス比較部１１２は、プリフェッチ用アドレス算出部１１０に対して、アドレス格納部１０４およびプリフェッチ用アドレス格納部１１１の命令アドレスが一致すると判定した場合にプリフェッチ用アドレス格納部１１１の命令アドレスを出力し、アドレス格納部１０４およびプリフェッチ用アドレス格納部１１１の命令アドレスが一致しないと判定した場合にアドレス格納部１０４の命令アドレスを出力する。
【００１４】
命令フェッチ部１１４は、一致／不一致判定結果格納部１１３の判定結果情報がアドレス不一致を示す場合と一致／不一致判定結果格納部１１３の判定結果情報がアドレス一致を示す場合とで異なる動作を実施する。一致／不一致判定結果格納部１１３の判定結果情報がアドレス不一致を示す場合、命令フェッチ部１１４は、ヒット／ミス判定結果格納部１０７の判定結果情報がキャッシュミスを示していれば、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑを出力するとともに、フェッチ用アドレス格納部１０８の命令アドレスを転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｄｒｅｓｓとして出力する。そして、命令フェッチ部１１４は、メインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｅ＿ｉｎ＿ｄａｔａ（１キャッシュライン分の命令コード）を受けると、これらを命令キャッシュデータ部１０６に出力する。続いて、命令フェッチ部１１４は、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑを出力するとともに、プリフェッチ用アドレス格納部１１１の命令アドレスを転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｄｒｅｓｓとして出力する。そして、命令フェッチ部１１４は、メインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｅ＿ｉｎ＿ｄａｔａを受けると、これらを命令キャッシュデータ部１０６に出力する。一致／不一致判定結果格納部１１３の判定結果情報がアドレス一致を示す場合、命令フェッチ部１１４は、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑを出力するとともに、プリフェッチ用アドレス格納部１１１の命令アドレスを転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｄｒｅｓｓとして出力する。そして、命令フェッチ部１１４は、メインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｅ＿ｉｎ＿ｄａｔａを受けると、これらを命令キャッシュデータ部１０６に出力する。
【００１５】
メインメモリ２００には、プロセッサ１００で実行されるプログラム（命令コード）が格納されている。メインメモリ２００は、プロセッサ１００内の命令フェッチ部１１４から供給されるデータ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑに応答して、プロセッサ１００内の命令フェッチ部１１４から供給される転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｒｅｓｓに対応する命令コード（１キャッシュライン分）を内部から読み出す。そして、メインメモリ２００は、プロセッサ１００内の命令フェッチ部１１４に対して、データ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋを出力するとともに、読み出した命令コードを転送データｍｏｖｅ＿ｉｎ＿ｄａｔａとして出力する。
【００１６】
ここで、プロセッサ１００の命令フェッチ処理について説明する。図２に示すように、プロセッサ１００の命令フェッチ処理では、まず、アドレス算出部１０３により、プログラムカウンタ部１０１の値（ＰＣ値）およびオフセット値格納部１０２の値（オフセット値）が加算されることでフェッチ対象の命令アドレスが算出され、算出された命令アドレスがアドレス格納部１０４に格納される（ステップＳ１０１）。
【００１７】
次に、命令キャッシュタグ部１０５により、アドレス格納部１０４の命令アドレスに基づいてキャッシュヒット／キャッシュミスが判定される（ステップＳ１０２）。命令キャッシュタグ部１０５でキャッシュミスと判定された場合、命令キャッシュタグ部１０５により、フェッチ対象の命令アドレスがアドレス格納部１０４からフェッチ用アドレス格納部１０８に転送される（ステップＳ１０３）。一方、命令キャッシュタグ部１０５でキャッシュヒットと判定された場合、命令キャッシュデータ部１０６により、アドレス格納部１０４の命令アドレスに対応する命令コードがコード格納部１０９に格納されて命令実行部に出力される（ステップＳ１０４）。そして、命令キャッシュタグ部１０５により、キャッシュヒット／キャッシュミスを示す判定結果情報がヒット／ミス判定結果格納部１０７に格納される（ステップＳ１０５）。
【００１８】
続いて、アドレス比較部１１２により、アドレス格納部１０４およびプリフェッチ用アドレス格納部１１１の命令アドレスについてアドレス一致／アドレス不一致が判定される（ステップＳ１０６）。アドレス比較部１１２でアドレス不一致と判定された場合、プリフェッチ用アドレス算出部１１０により、アドレス格納部１０４の命令アドレス（フェッチ対象の命令アドレス）および命令キャッシュのラインサイズに対応する値が加算されることで新たなプリフェッチ対象の命令アドレスが算出され、算出された命令アドレスがプリフェッチ用アドレス格納部１１１に格納される（ステップＳ１０７）。一方、アドレス比較部１１２でアドレス一致と判定された場合、プリフェッチ用アドレス算出部１１０により、プリフェッチ用アドレス算出部１１０の命令アドレス（プリフェッチ対象の命令アドレス）および命令キャッシュのラインサイズに対応する値が加算されることで新たなプリフェッチ対象の命令アドレスが算出され、算出された命令アドレスがプリフェッチ用アドレス格納部１１１に格納される（ステップＳ１０８）。そして、アドレス比較部１１２により、アドレス一致／アドレス不一致を示す判定結果情報が一致／不一致判定結果格納部１１３に格納される（ステップＳ１０９）。
【００１９】
この後、命令フェッチ部１１４により、一致／不一致判定結果格納部１１３の判定結果情報が確認される（ステップＳ１１０）。命令フェッチ部１１４でアドレス不一致が認識された場合、命令フェッチ部１１４により、ヒット／ミス判定結果格納部１０７の判定結果情報が確認される（ステップＳ１１１）。命令フェッチ部１１４でキャッシュヒットが認識された場合、命令フェッチ処理は終了する。一方、命令フェッチ部１１４でキャッシュミスが認識された場合、命令フェッチ部１１４により、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑが出力されるとともに、フェッチ用アドレス格納部１０８の命令アドレス（フェッチ対象の命令アドレス）が転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｄｒｅｓｓとして出力される（ステップＳ１１２）。そして、命令フェッチ部１１４がメインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｏ＿ｉｎ＿ｄａｔａ（１キャッシュライン分の命令コード）を受けると、命令フェッチ部１１４により、これらが命令キャッシュデータ部１０６に出力される（ステップＳ１１３）。この結果、命令フェッチ部１１４から供給される１キャッシュライン分の命令コードが命令キャッシュデータ部１０６に格納される（ステップＳ１１４）。そして、命令キャッシュデータ部１０６により、アドレス格納部１０４の命令アドレスに対応する命令コードがコード格納部１０９に格納されて命令実行部に出力される（ステップＳ１１５）。
【００２０】
ステップＳ１１０において命令フェッチ部１１４でアドレス一致が認識された後あるいはステップＳ１１５が実施された後には、命令フェッチ部１１４により、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑが出力されるとともに、プリフェッチ用アドレス格納部１１１の命令アドレス（プリフェッチ対象の命令アドレス）が転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｄｒｅｓｓとして出力される（ステップＳ１１６）。そして、命令フェッチ部１１４がメインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｏ＿ｉｎ＿ｄａｔａを受けると、命令フェッチ部１１４により、これらが命令キャッシュデータ部１０６に出力される（ステップＳ１１７）。この結果、命令フェッチ部１１４から供給される１キャッシュライン分の命令コードが命令キャッシュデータ部１０６に格納される（ステップＳ１１８）。これにより、命令フェッチ処理は終了する。
【００２１】
次に、プロセッサ１００に関して、例えば、メインメモリ２００のアドレス「０ｘ８０００」〜「０ｘ８１４０」に対してアドレス順に命令フェッチが発生する場合について考える。なお、プロセッサ１００内の命令キャッシュのラインサイズは６４バイト（０ｘ４０）であるものとする。
【００２２】
図３に示すように、アドレス「０ｘ８０００」に対する命令フェッチの際には、アドレス比較部１１２でアドレス不一致と判定されるとともに、命令キャッシュタグ部１０５でキャッシュミスと判定され、その結果、アドレス「０ｘ８０００」のキャッシュラインに対応する命令コードがフェッチされた後に、次のキャッシュライン（アドレス「０ｘ８０４０」のキャッシュライン）に対応する命令コードがプリフェッチされるものとする。このような場合、アドレス「０ｘ８０４０」に対する命令フェッチの際には、アドレス「０ｘ８０４０」のキャッシュラインに対応する命令コードがプリフェッチされており、アドレス比較部１１２でアドレス一致と判定されるとともに、命令キャッシュタグ部１０５でキャッシュヒットと判定されるため、次のキャッシュライン（アドレス「０ｘ８０８０」のキャッシュライン）に対応する命令コードがプリフェッチされる。アドレス「０ｘ８０８０」〜「０ｘ８１４０」に対する命令フェッチの際にも、アドレス「０ｘ８０８０」〜「０ｘ８１４０」のキャッシュラインに対応する命令コードがプリフェッチされており、アドレス比較部１１２でアドレス一致と判定されるとともに、命令キャッシュタグ部１０５でキャッシュヒットと判定されるため、次のキャッシュライン（アドレス「０ｘ８０Ｃ０」〜「０ｘ８１８０」のキャッシュライン）に対応する命令コードがプリフェッチされる。
【００２３】
このように、（Ａ）を付したキャッシュラインに関しては、アドレス比較部１１２でアドレス不一致と判定されるとともに、命令キャッシュタグ部１０５でキャッシュミスと判定されることで、対応する命令コードがプリフェッチされる。また、（Ｂ）を付したキャッシュラインに関しては、アドレス比較部１１２でアドレス一致と判定されることで、対応する命令コードがプリフェッチされる。即ち、メインメモリ２００のアドレス「０ｘ８０４０」〜「０ｘ８１４０」に対して命令プリフェッチが連続して実施される。
【００２４】
図４は、本発明の比較例を示している。図５は、図４のプロセッサの命令フェッチ処理を示している。図６は、図４のプロセッサにおける命令プリフェッチの発生状況を示している。なお、本発明の比較例（図４〜図６）を説明するにあたって、本発明の一実施形態（図１〜図３）で説明した要素と同一の要素については、本発明の一実施形態（図１〜図３）で使用した符号と同一の符号を使用し、詳細な説明を省略する。
【００２５】
図４に示すように、本発明の比較例のコンピュータシステム１０ａは、プロセッサ１００ａおよびメインメモリ２００を用いて具現されている。プロセッサ１００ａは、プロセッサ１００（図１）において、アドレス比較部１１２および一致／不一致判定結果格納部１１３を取り除くとともに、プリフェッチ用アドレス算出部１１０および命令フェッチ部１１４をプリフェッチ用アドレス算出部１１０ａおよび命令フェッチ部１１４ａに置き換えたものである。
【００２６】
プリフェッチ用アドレス算出部１１０ａは、命令キャッシュタグ部１０５でキャッシュミスと判定された場合、アドレス格納部１０４の命令アドレスに命令キャッシュのラインサイズに対応する値を加算してプリフェッチ対象の命令アドレスを算出し、算出した命令アドレスをプリフェッチ用アドレス格納部１１１に格納する。命令フェッチ部１１４ａは、ヒット／ミス判定結果格納部１０７の判定結果情報がキャッシュミスを示す場合、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑを出力するとともに、フェッチ用アドレス格納部１０８の命令アドレスを転送要求アドレスｍｏｖｅ＿ｉｎ＿ａｄｄｒｅｓｓとして出力する。そして、命令フェッチ部１１４ａは、メインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｅ＿ｉｎ＿ｄａｔａを受けると、これらを命令キャッシュデータ部１０６に出力する。続いて、命令フェッチ部１１４ａは、メインメモリ２００に対して、データ転送要求ｍｏｖｅ＿ｉｎ＿ｒｅｑを出力するとともに、プリフェッチ用アドレス格納部１１１の命令アドレスを転送要求アドレスｍｏｖｅ＿ｉｎ＿ｒｅｑとして出力する。そして、命令フェッチ部１１４ａは、メインメモリ２００からデータ転送通知ｍｏｖｅ＿ｉｎ＿ａｃｋおよび転送データｍｏｖｅ＿ｉｎ＿ｄａｔａを受けると、これらを命令キャッシュデータ部１０６に出力する。
【００２７】
図５に示すように、プロセッサ１００ａの命令フェッチ処理は、プロセッサ１００の命令フェッチ処理（図２）において、ステップＳ１０３、Ｓ１０５の間にステップＳ１１９を挿入するとともに、ステップＳ１０６〜Ｓ１１０を省略したものである。ステップＳ１１９においては、プリフェッチ用アドレス算出部１１０ａにより、アドレス格納部１０４の命令アドレス（フェッチ対象の命令アドレス）および命令キャッシュのラインサイズに対応する値が加算されることで新たなプリフェッチ対象の命令アドレスが算出され、算出された命令アドレスがプリフェッチ用アドレス格納部１１１に格納される。
【００２８】
ここで、プロセッサ１００ａに関して、プロセッサ１００と同様に、メインメモリ２００のアドレス「０ｘ８０００」〜「０ｘ８１４０」に対してアドレス順に命令フェッチが発生する場合について考える。なお、プロセッサ１００ａ内の命令キャッシュのラインサイズは６４バイト（０ｘ４０）であるものとする。
【００２９】
図６に示すように、アドレス「０ｘ８０００」に対する命令フェッチの際には、命令キャッシュタグ部１０５でキャッシュミスと判定され、その結果、アドレス「０ｘ８０００」のキャッシュラインに対応する命令コードがフェッチされた後に、次のキャッシュライン（アドレス「０ｘ８０４０」のキャッシュライン）に対応する命令コードがプリフェッチされるものとする。このような場合、アドレス「０ｘ８０４０」に対する命令フェッチの際には、アドレス「０ｘ８０４０」のキャッシュラインに対応する命令コードがプリフェッチされており、命令キャッシュタグ部１０５でキャッシュヒットと判定されるため、次のキャッシュライン（アドレス「０ｘ８０８０」のキャッシュライン）に対応する命令コードはプリフェッチされない。アドレス「０ｘ８０８０」に対する命令フェッチの際には、アドレス「０ｘ８０８０」のキャッシュラインに対応する命令コードがプリフェッチされておらず、命令キャッシュタグ部１０５でキャッシュミスと判定されるため、アドレス「０ｘ８０８０」のキャッシュラインに対応する命令コードがフェッチされた後に、次のキャッシュライン（アドレス「０ｘ８０Ｃ０」のキャッシュライン）に対応する命令コードがプリフェッチされる。
【００３０】
アドレス「０ｘ８０Ｃ０」に対する命令フェッチの際には、アドレス「０ｘ８０Ｃ０」のキャッシュラインに対応する命令コードがプリフェッチされており、命令キャッシュタグ部１０５でキャッシュヒットと判定されるため、次のキャッシュライン（アドレス「０ｘ８１００」のキャッシュライン）に対応する命令コードはプリフェッチされない。アドレス「０ｘ８１００」に対する命令フェッチの際には、アドレス「０ｘ８１００」のキャッシュラインに対応する命令コードがプリフェッチされておらず、命令キャッシュタグ部１０５でキャッシュミスと判定されるため、アドレス「０ｘ８１００」のキャッシュラインに対応する命令コードがフェッチされた後に、次のキャッシュライン（アドレス「０ｘ８１４０」に対応する命令コードがプリフェッチされる。アドレス「０ｘ８１４０」に対する命令フェッチの際には、アドレス「０ｘ８１４０」のキャッシュラインに対応する命令コードがプリフェッチされており、命令キャッシュタグ部１０５でキャッシュヒットと判定されるため、次のキャッシュライン（アドレス「０ｘ８１８０」のキャッシュライン）に対応する命令コードはプリフェッチされない。
【００３１】
このように、本発明の比較例のプロセッサ１００ａでは、メインメモリ２００のアドレス順に命令フェッチが発生する場合には、１キャッシュライン分の命令フェッチ毎にキャッシュミスとキャッシュヒットとが交互に発生し、命令プリフェッチが１キャッシュラインおきに実施される。キャッシュミス時には命令フェッチ時間が非常に長くなるため、命令フェッチ性能が十分に高いとは言い難い。
【００３２】
これに対して、本発明の一実施形態のプロセッサ１００では、プリフェッチ対象の命令アドレスが保持されており、その命令アドレスに対する命令フェッチが発生した場合には、フェッチ対象の命令アドレスの次のキャッシュラインに対応する命令コードがプリフェッチされる。これにより、メインメモリ２００に対して命令プリフェッチを連続して実施することが可能になる。従って、分岐命令等による不連続なメモリ空間に対する命令フェッチが発生しない場合の命令フェッチ性能を大幅に向上させることができる。
【００３３】
以上、本発明について詳細に説明してきたが、前述の実施形態は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【図面の簡単な説明】
【００３４】
【図１】本発明の一実施形態を示す図である。
【図２】図１のプロセッサの命令フェッチ処理を示す図である。
【図３】図１のプロセッサにおける命令プリフェッチの発生状況を示す図である。
【図４】本発明の比較例を示す図である。
【図５】図４のプロセッサの命令フェッチ処理を示す図である。
【図６】図４のプロセッサにおける命令プリフェッチの発生状況を示す図である。
【符号の説明】
【００３５】
１０‥コンピュータシステム；１００‥プロセッサ；１０１‥プログラムカウンタ部；１０２‥オフセット値格納部；１０３‥アドレス算出部；１０４‥アドレス格納部；１０５‥命令キャッシュタグ部；１０６‥命令キャッシュデータ部；１０７‥ヒット／ミス判定結果格納部；１０８‥フェッチ用アドレス格納部；１０９‥コード格納部；１１０‥プリフェッチ用アドレス算出部；１１１‥プリフェッチ用アドレス格納部；１１２‥アドレス比較部；１１３‥一致／不一致判定結果格納部；１１４‥命令フェッチ部；２００‥メインメモリ
【図１】
2010044682.tif 000003
【図２】
2010044682.tif 000004
【図３】
2010044682.tif 000005
【図４】
2010044682.tif 000006
【図５】
2010044682.tif 000007
【図６】
2010044682.tif 000008