(57)【要約】      （修正有）【課題】回路物量を増大させることなく、複数のキャッシュ充填命令（ＸＦＩＬＬ命令）を実行することができる演算処理装置を提供する。【解決手段】命令制御ユニットと、１次キャッシュメモリ及び１次キャッシュメモリにキャッシュミスが発生した場合、２次キャッシュメモリからデータを取得する際のアドレスを保持するムーブインバッファを備える記憶ユニットと、２次キャッシュメモリを備える外部接続ユニットとを有するプロセッサにて、命令制御部からＸＦＩＬＬ命令が発行され、ＸＦＩＬＬ対象のアドレスに対応するデータが１次キャッシュメモリに格納されていない場合、記憶ユニットは、ＸＦＩＬＬ対象のアドレスをムーブインバッファに保持し、ＸＦＩＬＬ命令を外部接続ユニットに対して発行する。【選択図】図３
2017191564.tif 000002
【特許請求の範囲】
【請求項１】
命令を発行する命令制御部と、
主記憶装置が記憶するデータの一部を保持する２次キャッシュメモリと、
前記２次キャッシュメモリが保持するデータの一部を格納する１次キャッシュメモリ、及び前記１次キャッシュメモリにキャッシュミスが発生した場合、前記２次キャッシュメモリからデータを取得する際のアドレスを保持する第１のバッファを備える１次キャッシュ部とを有し、
前記１次キャッシュ部は、前記主記憶装置へのアクセスを発生させずに前記２次キャッシュメモリにキャッシュラインのデータを登録する処理を実行する第１の命令が前記命令制御部から発行され、前記第１の命令が対象とするアドレスに対応するデータが前記１次キャッシュメモリに格納されていない場合、前記第１の命令が対象とするアドレスを前記第１のバッファに保持し、前記第１の命令を前記２次キャッシュメモリに発行することを特徴とする演算処理装置。
【請求項２】
前記１次キャッシュ部は、前記第１の命令が対象とするアドレスを前記第１のバッファに保持し、前記第１の命令を前記２次キャッシュメモリに発行した場合、該第１の命令の処理が完了するまで、該第１の命令より後に発行されかつ該第１の命令が対象とするアドレスと同じ領域にアクセスする後続命令の実行を抑止する命令抑止部を有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記命令抑止部は、
前記後続命令が対象とするアドレスと前記第１のバッファに保持されている前記第１の命令が対象とするアドレスとを比較する比較部と、
前記比較部による比較の結果、前記第１のバッファに前記後続命令が対象とするアドレスと一致するアドレスが保持されている場合、前記後続命令の実行を抑止し、前記第１のバッファに前記後続命令が対象とするアドレスと一致するアドレスが保持されなくなった場合、前記後続命令の実行を指示する管理部とを有することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記１次キャッシュ部は、データの書き込みを行うストア命令の処理に用いるストアバッファ及びライトバッファを有し、
前記命令制御部から発行された前記第１の命令が対象とするアドレスに対応するデータが前記１次キャッシュメモリに格納されていない場合、前記第１の命令が対象とするアドレスを前記ストアバッファを介して前記ライトバッファに保持した後、前記ライトバッファからの書き込み要求によって前記第１のバッファに保持し、前記第１の命令を前記２次キャッシュメモリに発行することを特徴とする請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
命令を発行する命令制御部と、主記憶装置が記憶するデータの一部を保持する２次キャッシュメモリと、前記２次キャッシュメモリが保持するデータの一部を格納する１次キャッシュメモリ及び前記１次キャッシュメモリにキャッシュミスが発生した場合、前記２次キャッシュメモリからデータを取得する際のアドレスを保持する第１のバッファを備える１次キャッシュ部とを有する演算処理装置の制御方法において、
前記主記憶装置へのアクセスを発生させずに前記２次キャッシュメモリにキャッシュラインのデータを登録する処理を実行する第１の命令が前記命令制御部から前記１次キャッシュ部に発行され、前記第１の命令が対象とするアドレスに対応するデータが前記１次キャッシュメモリに格納されていない場合、前記第１の命令が対象とするアドレスを前記第１のバッファに保持し、
前記第１のバッファに保持した前記第１の命令が対象とするアドレスに係る前記第１の命令を前記２次キャッシュメモリに発行することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置としてのプロセッサにおけるキャッシュメモリの制御方式としてストアイン（ライトバック）方式がある。ストアイン方式について、図６を参照して説明する。ストアイン方式を用いるプロセッサ６１１は、ストア命令を実行する場合、命令制御ユニット６１２がストア命令ＳＴＲＩを発行すると、それに対応するデータＳＴＲＤが実行ユニット６１３から出力される。そして、記憶ユニット６１４内の１次キャッシュメモリ６１５及び外部接続ユニット６１６内の２次キャッシュメモリ６１７に対してデータＳＴＲＤの書き込みが行われ、主記憶装置６１８に対する書き込みは行われない。
【０００３】
このため、ストアイン方式では、２次キャッシュメモリ６１７上においてデータが保持されている場所に別のデータを保持する場合、それまでキャッシュラインに登録されていたデータを退避させるために主記憶装置６１８に書き込む。このとき、プロセッサ６１１は、そのキャッシュラインに登録されていたデータを主記憶装置６１８に書き込んでキャッシュラインを無効化し、無効化されたキャッシュラインに別のデータを新たに登録する。この結果、プロセッサ６１１は、キャッシュラインに書き込んだデータを主記憶装置６１８に反映することができる。また、プロセッサ６１１は、ストアイン方式を用いることで、主記憶装置６１８への書き込みを待たずにストア命令を完了することができる。
【０００４】
図７は、ストアイン方式を用いるプロセッサでのストア命令の処理の流れを示すフローチャートである。ステップＳ７０１にて、命令制御ユニット６１２からのストア命令を実行した記憶ユニット６１４は、ストア対象のアドレスに対応するデータが１次キャッシュメモリ６１５に格納されているか否か（キャッシュヒットするか否か）を判定する。データが１次キャッシュメモリ６１５に格納されている（キャッシュヒットする）と記憶ユニット６１４が判定した場合（Ｓ７０１のＹＥＳ）、ステップＳ７０２にて、記憶ユニット６１４は、ストア処理を実行してストア対象のデータをキャッシュヒットしたアドレスに登録する。
【０００５】
一方、データが１次キャッシュメモリ６１５に格納されていない（キャッシュミスが発生）と記憶ユニット６１４が判定した場合（Ｓ７０１のＮＯ）、ステップＳ７０３にて、外部接続ユニット６１６は、ストア対象のアドレスに対応するデータが２次キャッシュメモリ６１７に保持されているか否か（キャッシュヒットするか否か）を判定する。データが２次キャッシュメモリ６１７に保持されている（キャッシュヒットする）と外部接続ユニット６１６が判定した場合（Ｓ７０３のＹＥＳ）、ステップＳ７０４にて、外部接続ユニット６１６は、２次キャッシュメモリ６１７のデータを１次キャッシュメモリ６１５に登録する。その後、プロセッサ６１１は、ステップＳ７０１に戻り、以降の処理を実行する。
【０００６】
また、データが２次キャッシュメモリ６１７に保持されていない（キャッシュミスした）と外部接続ユニット６１６が判定した場合（Ｓ７０３のＮＯ）、ステップＳ７０５にて、外部接続ユニット６１６は、主記憶装置６１８からストア対象のアドレスに記憶されているデータをロードする（読み出す）。続いて、ステップＳ７０６にて、外部接続ユニット６１６は、主記憶装置６１８からロードしたデータを、１次キャッシュメモリ６１５及び２次キャッシュメモリ６１７のそれぞれにおけるストア対象のアドレスに登録する。その後、プロセッサ６１１は、ステップＳ７０１に戻り、以降の処理を実行する。
【０００７】
ここで、ストアイン方式では、主記憶装置を初期化するメモリ初期化や主記憶装置のあるアドレスに記憶されているデータを他のアドレスにコピーするメモリコピーの処理を行う場合、主記憶装置に対してデータを書き込む処理が連続して発生する。そのため、メモリ初期化やメモリコピーの処理を行う場合、主記憶装置からストア対象のアドレスに記憶されているデータをロードして、プロセッサ内のキャッシュメモリに登録する動作（図７に示したＳ７０５及びＳ７０６に対応する動作）が数多く発生することになり、処理時間が非常に長くなってしまう。
【０００８】
メモリ初期化やメモリコピーの処理では、主記憶装置においてストア対象のアドレスに記憶されているデータは、すべてストアデータにより置き換えられるので、データはエラーがない状態であれば何であってもよい。そこで、ストアイン方式を用いるプロセッサにおいて、メモリ初期化やメモリコピー等の特定の命令の前処理として、主記憶装置へのアクセスを発生させずに２次キャッシュメモリにキャッシュラインのデータを登録する処理を実行するキャッシュライン充填命令（以下、ＸＦＩＬＬ命令とも称す）を用いるプロセッサが提案されている（例えば、特許文献１参照）。
【０００９】
図８に、ストアイン方式を用いるプロセッサでのキャッシュライン充填命令（ＸＦＩＬＬ命令）の処理の流れを示す。ステップＳ８０１にて、命令制御ユニット６１２からのＸＦＩＬＬ命令を実行した記憶ユニット６１４は、ＸＦＩＬＬ対象のアドレスに対応するデータが１次キャッシュメモリ６１５に格納されているか否か（キャッシュヒットするか否か）を判定する。
【００１０】
データが１次キャッシュメモリ６１５に格納されている（キャッシュヒットする）と記憶ユニット６１４が判定した場合（Ｓ８０１のＹＥＳ）、命令制御ユニット６１２へＸＦＩＬＬ命令の完了通知を送った後にステップＳ８０６に進み、プロセッサ６１１は、後続の命令に係るＸＦＩＬＬ対象のアドレスに対するストア処理を実行する。後続の命令は、例えばメモリ初期化やメモリコピー等の処理を行う命令である。
【００１１】
一方、データが１次キャッシュメモリ６１５に格納されていない（キャッシュミスが発生）と記憶ユニット６１４が判定した場合（Ｓ８０１のＮＯ）、ステップＳ８０２にて、記憶ユニット６１４は、図９に示すようにして、外部接続ユニット６１６へのＸＦＩＬＬ要求を発行する。図９は、記憶ユニット６１４から外部接続ユニット６１６へのＸＦＩＬＬ要求を発行する際の処理を説明するためのフローチャートである。
【００１２】
まず、ステップＳ９０１にて、記憶ユニット６１４内のストアバッファ制御部による処理が実行される。ストアバッファ制御部は、ストアバッファに登録されているＸＦＩＬＬ対象のアドレスに対応するデータが１次キャッシュメモリ６１５に格納されている（１次キャッシュヒットである）場合、ＸＦＩＬＬ対象のアドレスが登録されているストアバッファを解放し、ライトバッファの確保は行わない（処理終了）。また、ストアバッファ制御部は、ストアバッファに登録されているＸＦＩＬＬ対象のアドレスに対応するデータが１次キャッシュメモリ６１５に格納されていない（１次キャッシュミスである）場合、コミット後にＸＦＩＬＬ対象のアドレスをストアバッファからライトバッファに移動させ、ストアバッファを解放する。
【００１３】
次に、ステップＳ９０２にて、記憶ユニット６１４内のライトバッファ制御部による処理が実行される。ライトバッファ制御部は、ＸＦＩＬＬ対象のアドレスをライトバッファからアドレスレジスタに移動させる。そして、ライトバッファ制御部は、外部接続ユニット６１６へのＸＦＩＬＬ要求を発行し、ＸＦＩＬＬ対象のアドレスが登録されているライトバッファを解放する。そして、ステップＳ９０３にて、記憶ユニット６１４は、外部接続ユニット６１６に対してＸＦＩＬＬ要求を発行する。
【００１４】
図８に戻り、ステップＳ８０３にて、記憶ユニット６１４からのＸＦＩＬＬ要求を受けた外部接続ユニット６１６は、ＸＦＩＬＬ対象のアドレスに対応するデータが２次キャッシュメモリ６１７に保持されているか否か（キャッシュヒットするか否か）を判定する。データが２次キャッシュメモリ６１７に保持されている（キャッシュヒットする）と外部接続ユニット６１６が判定した場合（Ｓ８０３のＹＥＳ）、ステップＳ８０５にて、外部接続ユニット６１６は、命令制御ユニット６１２及び記憶ユニット６１４へＸＦＩＬＬ命令の完了通知を送る。続いて、ステップＳ８０６にて、プロセッサ６１１は、後続の命令に係るＸＦＩＬＬ対象のアドレスに対するストア処理を実行する。
【００１５】
また、データが２次キャッシュメモリ６１７に保持されていない（キャッシュミスした）と外部接続ユニット６１６が判定した場合（Ｓ８０３のＮＯ）、ステップＳ８０４にて、外部接続ユニット６１６は、２次キャッシュメモリ６１７におけるＸＦＩＬＬ対象のアドレスにゼロデータを書き込み、ゼロデータを登録したキャッシュラインの登録タグを有効にする。続いて、前述したステップＳ８０５、Ｓ８０６の処理を実行する。このようにしてＸＦＩＬＬ命令を用いることにより、メモリ初期化やメモリコピーの処理に係る処理時間の短縮を図っている。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２０１１−１３８２１３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１７】
ＸＦＩＬＬ命令を含む処理を行う場合、高速化の目的のためには、ｍｅｍｂａｒ（memory barrier）命令を用いずにメモリアクセスの順序を保証する必要がある。ｍｅｍｂａｒ命令は、メモリアクセスの逐次化を行う命令であり、あるストア命令を実行した後にｍｅｍｂａｒ命令を実行すると、その後に実行される命令はストア命令の実行が完了してから実行されることが保証されるが、プロセッサの処理速度の低下を引き起こすことがある。
【００１８】
以下の条件を検出することで、ｍｅｍｂａｒ命令を用いることなく、ＸＦＩＬＬ命令を含む処理におけるメモリアクセスの順序を保証することが可能である。
（１）ＸＦＩＬＬ命令と同一の記憶領域をアクセスする先行命令のロード処理・ストア処理の完了を保証するために、先行命令のロード処理又はストア処理が完了した後にＸＦＩＬＬ命令を実行する。この条件は、ストア命令の処理と同様であるので、ストア命令として処理することで実現可能である。
（２）ＸＦＩＬＬ命令と同一の記憶領域をアクセスする後続命令のロード処理・ストア処理を抑止するために、キャッシュラインのデータを登録する処理を実行中のアドレス領域を示すアドレスレジスタを用意し、同一の記憶領域にアクセスする後続命令のロード処理・ストア処理の完了を待たせる。
【００１９】
したがって、同時期に実行するＸＦＩＬＬ命令の数に応じてＸＦＩＬＬ対象のアドレスを保持するアドレスレジスタを用意することで、同時期に複数のＸＦＩＬＬ命令を実行することが可能となる。また、ＸＦＩＬＬ命令と一連のストア命令とは異なる後続のストア命令を処理するために、ＸＦＩＬＬ対象のアドレスを保持する専用のアドレスレジスタを設けることでさらなる高速化を実現することが可能である。しかし、ＸＦＩＬＬ対象のアドレスを保持する専用のアドレスレジスタを、同時期に実行するＸＦＩＬＬ命令の数に応じた数だけ設けるようにすると、回路物量が増大してしまう。１つの側面では、本発明の目的は、回路物量を増大させることなく、複数のＸＦＩＬＬ命令を実行することができる演算処理装置を提供することにある。
【課題を解決するための手段】
【００２０】
演算処理装置の一態様は、命令を発行する命令制御部と、１次キャッシュメモリ及び１次キャッシュメモリにキャッシュミスが発生した場合、２次キャッシュメモリからデータを取得する際のアドレスを保持する第１のバッファを備える１次キャッシュ部と、２次キャッシュメモリとを有する。１次キャッシュ部は、主記憶装置へのアクセスを発生させずに２次キャッシュメモリにキャッシュラインのデータを登録する処理を実行する第１の命令が命令制御部から発行され、第１の命令が対象とするアドレスに対応するデータが１次キャッシュメモリに格納されていない場合、第１の命令が対象とするアドレスを第１のバッファに保持し、第１の命令を２次キャッシュメモリに発行する。
【発明の効果】
【００２１】
発明の一態様においては、ＸＦＩＬＬ命令専用のアドレスレジスタを設けることなく、最大で第１のバッファのエントリ数と同数のＸＦＩＬＬ命令を並行して実行することができ、回路物量を増大させることなく、複数のＸＦＩＬＬ命令を実行することが可能となる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態における外部接続ユニットへのＸＦＩＬＬ要求を発行する際の処理を説明するフローチャートである。
【図３】本実施形態におけるＸＦＩＬＬ命令の処理動作を説明する図である。
【図４】本実施形態におけるＸＦＩＬＬ命令の処理例を示すタイムチャートである。
【図５】本実施形態における後続命令の抑止回路の構成例を示す図である。
【図６】ストアイン方式による制御を説明するための図である。
【図７】ストアイン方式を用いるプロセッサでのストア命令の処理の流れを示すフローチャートである。
【図８】ストアイン方式を用いるプロセッサでのＸＦＩＬＬ命令の処理の流れを示すフローチャートである。
【図９】外部接続ユニットへのＸＦＩＬＬ要求を発行する際の従来の処理を説明するフローチャートである。
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態を図面に基づいて説明する。
【００２４】
キャッシュライン充填命令（ＸＦＩＬＬ命令）を実行する場合、ＸＦＩＬＬ対象のアドレスは、従来においては専用のアドレスレジスタを用いて保持していた。以下に説明する実施形態では、ＸＦＩＬＬ対象のアドレスを保持するための専用のアドレスレジスタを設けずに、記憶ユニット（１次キャッシュ部）が有するムーブインバッファ（ＭＩＢ）におけるリフィル（ｒｅｆｉｌｌ）用のアドレス保持バッファ（ＭＩＡＡＲ）を利用してＸＦＩＬＬ対象のアドレスを保持する。
【００２５】
このリフィル用のアドレス保持バッファ（ＭＩＡＡＲ）は、１次キャッシュメモリにキャッシュミスが発生した場合に、２次キャッシュメモリからデータを取得するために要求したアドレスを保持しておくバッファであり、複数のエントリを有し複数のアドレスを保持できる。このように本実施形態では、既存のリフィル用のアドレス保持バッファ（ＭＩＡＡＲ）を共用してＸＦＩＬＬ対象のアドレスの保持に用いることで、回路物量を増大させることなく、複数のＸＦＩＬＬ命令を実行することを可能にする。
【００２６】
図１は、本発明の一実施形態における演算処理装置としてのプロセッサの構成例を示すブロック図である。本実施形態におけるプロセッサ１１０は、命令制御ユニット（ＩＵ：Instruction Control Unit）１１１、実行ユニット（ＥＵ：Execution Unit）１１２、１次キャッシュ部としての記憶ユニット（ＳＵ：Storage Unit）１１３、及び外部接続ユニット（ＳＸ：Secondary Cache and External Access Unit）１１６を有する。
【００２７】
本実施形態におけるプロセッサ１１０は、キャッシュメモリの制御方式としてストアイン（ライトバック）方式を用いる。プロセッサ１１０は、命令パイプラインを有し、主記憶装置（メインメモリ）１２０と接続される。主記憶装置１２０は、キャッシュメモリと比較して大容量のデータを記憶可能なメモリであり、命令やデータを記憶する。主記憶装置１２０は、例えばＲＡＭ（Random Access Memory）である。
【００２８】
命令制御ユニット１１１は、コンパイラ（プログラム）により予め定義された命令列を命令順に発行する。命令制御ユニット１１１は、例えばデータのストアを行うストア命令やデータのロードを行うロード命令を記憶ユニット１１３に発行する。また、命令制御ユニット１１１は、例えばＸＦＩＬＬ命令を記憶ユニット１１３に発行する。ＸＦＩＬＬ命令は、主記憶装置１２０の所定の記憶領域を初期化する（メモリ初期化）際のストア命令や主記憶装置の所定の記憶領域に記憶されるデータを他の記憶領域にコピーする（メモリコピー）際のストア命令を実行する前の前処理を実行する命令である。命令制御ユニット１１１は、メモリ初期化やメモリコピーに係るストア命令を出力する場合、ストア命令の出力の前処理として、ストア対象のアドレスに対するＸＦＩＬＬ命令を出力する。
【００２９】
ＸＦＩＬＬ命令では、主記憶装置１２０において初期化の対象となる記憶領域又はコピー先の記憶領域に記憶されるデータが、ストアイン方式で制御される２次キャッシュメモリ１１７に保持されているか否かを判定する処理が実行される。続いて、ＸＦＩＬＬ命令では、２次キャッシュメモリ１１７にデータが保持されていないと判定された場合、主記憶装置１２０において初期化の対象となる記憶領域又はコピー先の記憶領域に対応する２次キャッシュメモリ１１７のキャッシュラインに所定のデータを登録し、そのキャッシュラインの登録タグを有効にする処理が実行される。
【００３０】
実行ユニット１１２は、算術演算、論理演算、アドレス計算等の各種演算を行い、演算結果を記憶ユニット１１３の１次データキャッシュメモリ１１５に格納する。記憶ユニット１１３は、命令制御ユニット１１１から出力された命令や実行ユニット１１２が演算した演算結果を記憶する。記憶ユニット１１３は、１次命令キャッシュメモリ１１４及び１次データキャッシュメモリ１１５を有する。また、記憶ユニット１１３は、例えば命令制御ユニット１１１から受け付けたＸＦＩＬＬ命令を外部接続ユニット１１６に出力して命令の実行等を要求したり、実行中のＸＦＩＬＬ命令と同じ記憶領域にアクセスする後続命令の実行を抑止したりする。
【００３１】
１次命令キャッシュメモリ１１４は、２次キャッシュメモリ１１７よりも高速なアクセスが可能なキャッシュメモリであり、主記憶装置１２０に記憶されている命令の一部を格納する。１次データキャッシュメモリ１１５は、２次キャッシュメモリ１１７よりも高速なアクセスが可能なキャッシュメモリであり、主記憶装置１２０に記憶されているデータの一部を格納する。外部接続ユニット１１６は、２次キャッシュメモリ１１７を有するとともに、記憶ユニット１１３や主記憶装置１２０との間の各種制御を実施する。２次キャッシュメモリ１１７は、プロセッサ１１０において参照される命令やデータとして、主記憶装置１２０に記憶されている命令やデータの一部を保持する。
【００３２】
次に、本実施形態におけるプロセッサでの処理について説明する。本実施形態におけるプロセッサでのストア命令の処理及びＸＦＩＬＬ命令の処理の基本動作は、図７や図８に示した処理と同様であるので、その説明は省略する。本実施形態におけるプロセッサにおいては、ＸＦＩＬＬ命令の処理のうち、記憶ユニットから外部接続ユニットへのＸＦＩＬＬ要求を発行する際の処理が異なる。
【００３３】
図２及び図３を参照して、本実施形態におけるプロセッサでの記憶ユニット１１３から外部接続ユニット１１６へのＸＦＩＬＬ要求を発行する際の処理について説明する。図２は、本実施形態における記憶ユニット１１３から外部接続ユニット１１６へのＸＦＩＬＬ要求を発行する際の処理を説明するフローチャートである。図３は、本実施形態におけるＸＦＩＬＬ命令の処理動作を説明する図であり、アドレスの流れを示している。
【００３４】
図３に示すように、記憶ユニット１１３は、アドレス選択／パイプ処理部３００、ストアバッファ（ＳＴＢ）３０５、ライトバッファ（ＷＢ）３０６、ムーブインバッファ（ＭＩＢ）３０８、セレクタ３０７、３０９、及び要求発行部３１０を有する。アドレス選択／パイプ処理部３００は、タグ／ＴＬＢ部３０１、ストアバッファ制御部３０２、ライトバッファ制御部３０３、及びムーブインバッファ制御部３０４を有する。
【００３５】
アドレス選択／パイプ処理部３００は、命令制御ユニット１１１から出力された命令の対象となるアドレスを命令パイプラインに投入する。タグ／ＴＬＢ部３０１は、命令ユニット１１１から出力された命令の対象となるアドレスと１次データキャッシュメモリ１１５に格納されているデータのタグアドレスとの比較や、ＴＬＢ（Translation Lookaside Buffer）を参照してアドレス変換（仮想アドレスから物理アドレスへの変換）を行ったりする。
【００３６】
ストアバッファ制御部３０２は、ストアバッファ３０５に係る制御を行う。ストアバッファ３０５は、複数のエントリを有し、命令制御ユニット１１１からのストア命令やＸＦＩＬＬ命令等のストア処理に関する命令を処理するバッファである。ライトバッファ制御部３０３は、ライトバッファ３０６に係る制御を行う。ライトバッファ３０６は、複数のエントリを有し、コミットされたストア命令等を格納し、１次データキャッシュメモリ１１５へのストアデータの登録や２次キャッシュメモリ１１７へのストア対象のデータ要求処理を行うバッファである。ムーブインバッファ制御部３０４は、ムーブインバッファ３０８に係る制御を行う。ムーブインバッファ３０８は、複数のエントリを有し、１次データキャッシュメモリ１１５においてキャッシュミスが発生した場合、２次キャッシュメモリ１１７へのデータ要求処理を行うバッファである。
【００３７】
セレクタ３０７は、アドレス選択／パイプ処理部３００から出力されるアドレス（リフィル処理に係るアドレス）及びライトバッファ３０６から出力されるＸＦＩＬＬ対象のアドレスを選択的にムーブインバッファ３０８に出力する。セレクタ３０９は、ライトバッファ３０６から出力されるストア対象のアドレス及びムーブインバッファ３０８から出力されるアドレス（リフィル処理に係るアドレス又はＸＦＩＬＬ対象のアドレス）を選択的に要求発行部３１０に出力する。要求発行部３１０は、セレクタ３０９から出力されたアドレスを対象とする要求を外部接続ユニット１１６に対して発行する。
【００３８】
図２に示すように、命令制御ユニット１１１から記憶ユニット１１２にＸＦＩＬＬ命令が発行されると、ステップＳ２０１にて、記憶ユニット１１３内のストアバッファ制御部３０２による処理が実行される。ストアバッファ制御部３０２は、ストアバッファ３０５におけるアドレス保持部（ＳＴＡＡＲ）に登録されているＸＦＩＬＬ対象のアドレスに対応するデータが１次データキャッシュメモリ１１５に格納されている（１次キャッシュヒットである）場合、ＸＦＩＬＬ対象のアドレスが登録されているストアバッファ３０５のエントリを解放し、ライトバッファ３０６のエントリの確保は行わない（処理終了）。
【００３９】
また、ストアバッファ制御部３０２は、ストアバッファ３０５におけるアドレス保持部（ＳＴＡＡＲ）に登録されているＸＦＩＬＬ対象のアドレスに対応するデータが１次キャッシュメモリ１１５に格納されていない（１次キャッシュミスである）場合、コミット後にＸＦＩＬＬ対象のアドレスをストアバッファ３０５からライトバッファ３０６に移動させ、ライトバッファ３０６におけるアドレス保持部（ＷＢＡＡＲ）に登録する。そして、ストアバッファ制御部３０２は、ＸＦＩＬＬ対象のアドレスが登録されているストアバッファ３０５のエントリを解放する。
【００４０】
次に、ステップＳ２０２にて、記憶ユニット１１３内のライトバッファ制御部３０３による処理が実行される。ライトバッファ制御部３０３は、ムーブインバッファ３０８に対するストア要求を発行してムーブインバッファ３０８のエントリを確保し、ＸＦＩＬＬ対象のアドレスをムーブインバッファ３０８におけるリフィル用のアドレス保持バッファ（ＭＩＡＡＲ）に登録する。そして、ライトバッファ制御部３０３は、ＸＦＩＬＬ対象のアドレスが登録されているライトバッファ３０６のエントリを解放する。
【００４１】
ステップＳ２０３にて、記憶ユニット１１３内のムーブインバッファ制御部３０４による処理が実行される。ムーブインバッファ制御部３０４は、ムーブインバッファ３０８のアドレス保持バッファ（ＭＩＡＡＲ）に登録されたＸＦＩＬＬ対象のアドレスに対するＸＦＩＬＬ要求の発行を要求発行部３１０に要求する。続いて、ステップＳ２０４にて、記憶ユニット１１３内の要求発行部３１０が、外部接続ユニット１１６へのＸＦＩＬＬ要求を発行する。その後、記憶ユニット１１３は、外部接続ユニット１１６からＸＦＩＬＬ命令の完了通知を受けると、そのＸＦＩＬＬ対象のアドレスが登録されていたムーブインバッファ３０８のエントリを解放する。
【００４２】
図４は、本実施形態におけるＸＦＩＬＬ命令の処理例を示すタイムチャートである。時刻Ｔ１において、命令制御ユニット１１１から記憶ユニット１１３にＸＦＩＬＬ命令＜１＞（先行命令）が発行されると、時刻Ｔ３において、記憶ユニット１１３のストアバッファ３０５のエントリＳＴＢ０にＸＦＩＬＬ命令＜１＞に係るＸＦＩＬＬ対象のアドレスが格納される。そして、時刻Ｔ４において、ＸＦＩＬＬ命令＜１＞がコミットされると、続く時刻Ｔ５からＸＦＩＬＬ命令＜１＞に係るＸＦＩＬＬ対象のアドレスがストアバッファ３０５のエントリＳＴＢ０からライトバッファ３０６のエントリＷＢ０に移動される。
【００４３】
また、時刻Ｔ７において、命令制御ユニット１１１から記憶ユニット１１３にＸＦＩＬＬ命令＜２＞（後続命令）が発行されると、時刻Ｔ９において、記憶ユニット１１３のストアバッファ３０５のエントリＳＴＢ１にＸＦＩＬＬ命令＜２＞に係るＸＦＩＬＬ対象のアドレスが格納される。そして、時刻Ｔ１０において、ＸＦＩＬＬ命令＜２＞がコミットされると、続く時刻Ｔ１１からＸＦＩＬＬ命令＜２＞に係るＸＦＩＬＬ対象のアドレスがストアバッファ３０５のエントリＳＴＢ１からライトバッファ３０６のエントリＷＢ１に移動される。
【００４４】
時刻Ｔ１０において、ライトバッファ３０６のエントリＷＢ０からムーブインバッファ３０８のエントリＭＩＢ０にＸＦＩＬＬ命令＜１＞に係るＸＦＩＬＬ対象のアドレスが移動されると、続く時刻Ｔ１１において、ムーブインバッファ３０８のエントリＭＩＢ０に保持されているＸＦＩＬＬ命令＜１＞に係るＸＦＩＬＬ対象のアドレスに対するＸＦＩＬＬ要求が記憶ユニット１１３から外部接続ユニット１１６に発行される。
【００４５】
また、時刻Ｔ１６において、ライトバッファ３０６のエントリＷＢ１からムーブインバッファ３０８のエントリＭＩＢ１にＸＦＩＬＬ命令＜２＞に係るＸＦＩＬＬ対象のアドレスが移動されると、続く時刻Ｔ１７において、ムーブインバッファ３０８のエントリＭＩＢ１に保持されているＸＦＩＬＬ命令＜２＞に係るＸＦＩＬＬ対象のアドレスに対するＸＦＩＬＬ要求が記憶ユニット１１３から外部接続ユニット１１６に発行される。
【００４６】
このように本実施形態では、ＸＦＩＬＬ命令の処理において、ＸＦＩＬＬ対象のアドレスに対応するデータが１次キャッシュメモリ１１５に格納されていない（１次キャッシュミスである）場合、ムーブインバッファ３０８のエントリを確保して、ムーブインバッファ３０８におけるリフィル用のアドレス保持バッファ（ＭＩＡＡＲ）にＸＦＩＬＬ対象のアドレスを登録する。そして、ムーブインバッファ３０８からＸＦＩＬＬ要求を外部接続ユニット１１６に対して要求する。ムーブインバッファ３０８におけるリフィル用のアドレス保持バッファ（ＭＩＡＡＲ）は、１次キャッシュメモリにキャッシュミスが発生した場合に、２次キャッシュメモリからデータを取得するために要求したアドレスを保持しておく既存のバッファであり、複数のアドレスを保持できる。
【００４７】
したがって、本実施形態によれば、ＸＦＩＬＬ命令専用のアドレスレジスタを設ける必要がなく、最大でムーブインバッファ３０８のエントリの個数と同数のＸＦＩＬＬ命令を同時期に実行することができ、回路物量を増大させることなく、複数のＸＦＩＬＬ命令を実行することが可能になる。例えば、ムーブインバッファ３０８が有するエントリの個数が１０個であれば、最大で１０個のＸＦＩＬＬ命令を並行して実行することが可能となる。
【００４８】
図５は、本実施形態における後続命令の抑止回路の構成例を示すブロック図である。図５に示す後続命令の抑止回路は、ＸＦＩＬＬ命令を実行する場合に、ＸＦＩＬＬ命令と同一の記憶領域にアクセスする後続命令によるロード処理・ストア処理を行われないように後続命令の実行を抑止する。図５に示すように、抑止回路は記憶ユニット１１３内に設けられ、命令選択・パイプ処理部５０１、ＸＦＩＬＬ情報保持部５０２、アドレス選択・パイプ処理部５０３、アドレス比較部５０４、アドレス管理部５０５、命令完了通知部５０７、及び命令再投入管理部５０８を有する。
【００４９】
命令選択・パイプ処理部５０１は、命令制御ユニット１１１から出力された新規命令要求を命令パイプラインに投入して命令を実行する。命令選択・パイプ処理部５０１は、命令を命令パイプラインに投入する際に、アドレス比較部５０４による比較結果が一致である場合、その命令の実行を抑止して命令を命令再投入管理部５０８に出力し、そうでない場合、命令を命令パイプラインに投入して命令を実行する。
【００５０】
ＸＦＩＬＬ情報保持部５０２は、ＸＦＩＬＬ対象のアドレス及びこのＸＦＩＬＬ対象のアドレスが有効であるか否か（そのＸＦＩＬＬ命令が実行中であるか否か）を示すバリッドビットを保持する。ＸＦＩＬＬ情報保持部５０２は、ＸＦＩＬＬ対象のアドレスが登録されたムーブインバッファ３０８に対応する。
【００５１】
アドレス選択・パイプ処理部５０３は、命令制御ユニット１１１から出力された命令の対象となるアドレスを受けて、そのアドレスをアドレス比較部５０４及びアドレス管理部５０５に出力する。また、アドレス選択・パイプ処理部５０３は、アドレス管理部５０５から投入指示を受信した場合、命令の対象となるアドレスを命令パイプラインに投入し、アドレス管理部５０５から抑止指示を受信した場合、命令の対象となるアドレスの命令パイプラインへの投入を抑止する。
【００５２】
アドレス比較部５０４は、ＸＦＩＬＬ情報保持部５０２に保持されているバリッドビットが有効を示すＸＦＩＬＬ対象のアドレスと、アドレス選択・パイプ処理部５０３によって命令パイプラインへの投入対象となっているアドレスとを比較する。アドレス比較部５０４は、命令パイプラインへの投入対象となっているアドレスと一致するバリッドビットが有効を示すＸＦＩＬＬ対象のアドレスがある場合、比較結果が一致であることを命令選択・パイプ処理部５０１及びアドレス管理部５０５に通知する。
【００５３】
アドレス管理部５０５は、アドレス選択・パイプ処理部５０３から出力されたアドレスを管理する。アドレス管理部５０５は、アドレス比較部５０４による比較結果が一致である場合、アドレスの抑止指示をアドレス選択・パイプ処理部５０３に出力し、そうでない場合、アドレスの投入指示をアドレス選択・パイプ処理部５０３に出力する。
【００５４】
命令完了通知部５０７は、命令選択・パイプ処理部５０１や命令再投入管理部５０８によって命令パイプラインに投入された命令の実行が完了したか否かを監視する。命令完了通知部５０７は、命令の実行が完了した場合、命令の完了通知を命令選択・パイプ処理部５０１やＸＦＩＬＬ情報保持部５０２等に出力する。命令再投入管理部５０８は、アドレス比較部５０４の比較結果によって抑止されている命令に対して、アドレス比較部５０４による比較結果が一致でない場合、抑止されていた命令を命令パイプラインに投入する。
【００５５】
このように構成することで、実行しているＸＦＩＬＬ命令に係るＸＦＩＬＬ対象のアドレスとアドレスが一致する後続命令（ロード命令、ストア命令等）とが一致する場合、ムーブインバッファにおいてアボートされ、後続命令の実行が抑止される。したがって、ＸＦＩＬＬ命令を含む処理におけるメモリアクセスの順序を保証することができる。
【００５６】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５７】
１１０  プロセッサ
１１１  命令制御ユニット
１１２  実行ユニット
１１３  記憶ユニット
１１４  １次命令キャッシュメモリ
１１５  １次データキャッシュメモリ
１１６  外部接続ユニット
１１７  ２次キャッシュメモリ
１２０  主記憶装置
３０２  ストアバッファ制御部
３０３  ライトバッファ制御部
３０４  ムーブインバッファ制御部
３０５  ストアバッファ
３０６  ライトバッファ
３０８  ムーブインバッファ
３１０  要求発行部
【図１】
2017191564.tif 000003
【図２】
2017191564.tif 000004
【図３】
2017191564.tif 000005
【図４】
2017191564.tif 000006
【図５】
2017191564.tif 000007
【図６】
2017191564.tif 000008
【図７】
2017191564.tif 000009
【図８】
2017191564.tif 000010
【図９】
2017191564.tif 000011