(57)【要約】【課題】キャッシュメモリなどに格納すべきデータを一時的に保持するストアポートなどを備えるデータ処理装置において、ストア命令処理性能を向上させる。【解決手段】ストアポート３とキャッシュメモリ２またはメモリとの間で、ストア命令に対応して演算ユニットから送られたデータを保持するストアポート３からストアデータを受け取り、一時的に保持するデータ格納手段４、例えばライトバッファと、ストアポート３からデータ格納手段４へのデータ書き込みを制御する手段５とを備える。【選択図】　　　図１
2004038341.tif 000002
【特許請求の範囲】
【請求項１】
命令処理装置から送られるストア要求に対応して、演算ユニットから送られ、該ストア要求によってキャッシュメモリまたはメモリに書き込まれるべきストアデータを保持するストアポートを備える記憶制御装置において、
該ストアポートと前記キャッシュメモリまたはメモリとの間で、前記ストアデータを該ストアポートから受け取り、一時的に格納するデータ格納手段と、
該ストアポートから該データ格納手段へのストアデータの書き込みを制御するデータ書き込み制御手段とを備えることを特徴とする記憶制御装置。
【請求項２】
前記データ格納手段が、前記命令処理装置が前記ストア要求の実行をコミットした後に、前記ストアポートからのストアデータを受け取ることを特徴とする請求項１記載の記憶制御装置。
【請求項３】
前記データ格納手段が、前記ストアポート側から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記記憶制御装置において、前記キャッシュメモリまたはメモリへのデータの書き込みを、該複数のライトバッファのうちで最も最近ストアポートからのデータの格納が行われたライトバッファ以外から行うように制御するメモリ書き込み制御手段を更に備えることを特徴とする請求項１記載の記憶制御装置。
【請求項４】
命令処理装置から送られるストア要求に対応する制御を行う記憶制御装置において、
該ストア要求によって、演算ユニットから送られ、キャッシュメモリまたはメモリに書き込まれるべきストアデータをそれぞれ格納する複数のバッファ手段と、
該複数のバッファ手段のうちで最も古くデータが格納されたバッファ手段のみを対象として、該ストアデータの長さが前記キャッシュメモリまたはメモリ上でデータのエラー管理が行われる単位の領域の長さより短い場合に、該ストアデータのキャッシュメモリまたはメモリへの格納を中止させる制御を行うメモリ書き込み制御手段とを備えることを特徴とする記憶制御装置。
【請求項５】
命令処理装置から送られるストア要求に対応して、演算ユニットから送られ、該ストア要求によってキャッシュメモリまたはメモリに書き込まれるべきストアデータを保持するストアポートを備える記憶制御装置において、
該ストアポートと前記キャッシュメモリまたはメモリとの間に、前記ストアデータをそれぞれ一時的に保持する複数階層のデータ格納手段と、
該ストアポートから、該複数階層の１つ以上の階層のデータ格納手段を介して、前記キャッシュメモリまたはメモリまでの前記ストアデータの書き込みを制御するストアデータ書き込み制御手段とを備えることを特徴とする記憶制御装置。
【請求項６】
命令処理装置から送られるストア要求に対応して、演算ユニットから送られるストアデータをキャッシュメモリまたはメモリに格納するデータ格納方法において、
該ストアデータを複数個のストアポートのうちの１つに格納し、
該ストアポートに格納されたデータを複数個のライトバッファの１つに格納し、
該ライトバッファに格納されたデータをキャッシュメモリまたはメモリに格納することを特徴とするデータ格納方法。
【請求項７】
前記ストアポートに格納されたデータのライトバッファへの格納を、前記命令処理装置が前記ストア要求の実行をコミットした後に行うことを特徴とする請求項６記載のデータ格納方法。
【請求項８】
前記ライトバッファに格納されたデータのキャッシュメモリまたはメモリへの格納の制御において、
前記複数のライトバッファのうちで、最も最近ストアポートからのデータ格納が行われたライトバッファ以外からキャッシュメモリまたはメモリへのデータ格納を行うことを特徴とする請求項６記載のデータ格納方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデータ処理装置における制御方式に係わり、更に詳しくは演算ユニットから送られ、キャッシュメモリなどに格納されるべきストアデータを保持するストアポートを備えるプロセッサなどにおける記憶制御方式に関する。
【０００２】
【従来の技術と発明が解決しようとする課題】
主にアウトオブオーダ方式を採用するスーパースカラプロセッサなどにおいては、命令処理装置の管理下におかれ、キャッシュメモリやメモリ、例えば主記憶に格納すべきデータを一時的に保持するための、例えばストアポートやライトバッファに、ストアリクエストが割り当てられて、ストア要求の処理が行われる。
【０００３】
このようなライトバッファなどを利用する従来技術として次の文献がある。
文献１）特開平６−４４０２号公報「データ処理装置」
文献２）特開平１０−５５３０３公報「メモリシステム」
文献１では、中央処理装置と主記憶装置との間にキャッシュ記憶装置を備えるデータ処理装置において、中央処理装置とキャッシュの間に、少なくとも単数の書き込みアドレスおよびデータを保持するライトバッファを備え、ストア命令の実行時に書き込みデータをまずライトバッファに書き込み、その後キャッシュ記憶装置に書き込む技術が開示されている。
【０００４】
文献２においては、命令バスとデータバスを分離し、ＣＰＵと主記憶装置との間に、並列に組み込まれ、アドレス比較器を持たない４つのライトバッファを備え、データライトはライトバッファを介してメモリにデータをライトすることにより、システム全体のスピードの向上を図るメモリシステムが開示されている。
【０００５】
このように従来においては、ライトバッファあるいはストアポートから直接１次キャッシュにデータの書き込みが行われていた。また専用のライトバッファが２次キャッシュメモリ用に装備されていることもあったが、この場合にも１次キャッシュへの書き込みは、ライトバッファあるいはストアポートから直接に実施されていた。
【０００６】
しかしながら最近では、処理性能向上のために命令の先取り実行をより多く可能とすることが求められるようになっており、例えばストアポート（またはライトバッファ）の数を増加する必要が生じてきている。このような要求に対応して、処理性能向上のためにストアポートの数を増加すると、処理対象となるストアポート（またはライトバッファ）の数が増加し、例えばデータをどのストアポートからキャッシュメモリに格納するかを選択するために時間がかかかることになり、１サイクルでそのような処理を行うためには１サイクルの時間を長くしなければならないということになり、ストアポートの数の増大によって処理性能の向上が望まれなくなってしまう。そこで処理性能をおとさずに命令の先取り実行をより多く可能とする方式が求められている。
【０００７】
本発明の課題は、基本的にはストアポートの数を増加させることなく、記憶制御装置によるストア命令の処理性能を向上させることである。
【０００８】
【課題を解決するための手段】
図１は本発明における記憶制御装置の原理構成ブロック図である。同図は、命令処理装置から送られるストア要求に対応して、演算ユニットから送られ、そのストア要求によってキャッシュメモリ２またはメモリ、例えば主記憶に書き込まれるべきストアデータを保持するストアポート３を備える記憶制御装置１の原理構成ブロック図である。
【０００９】
図１において、記憶制御装置１はキャッシュメモリ２、およびストアポート３に加えて、データ格納手段４、およびデータ書き込み制御手段５を備える。データ格納手段４は、例えばライトバッファであり、ストアポート３とキャッシュメモリ２またはメモリとの間で、ストアデータをストアポート３から受け取り、一時的に格納するものであり、データ書き込み制御手段５は、ストアポート３からデータ格納手段４へのストアデータの書き込みを制御するものである。
【００１０】
発明の実施の形態においては、データ格納手段３は命令処理装置がストア要求の実行をコミットした後に、ストアポート３からストアデータを受け取ることもできる。
【００１１】
実施の形態においては、データ格納手段４がストアポートから受け取ったストアデータをそれぞれ格納する複数のライトバッファを備え、命令処理装置が、ｎ＝１の場合を含めて、ｎ個のストア要求の実行を同時にコミットした時、複数のライトバッファのうちで最も新しくデータが格納されたライトバッファから、データが格納されるべき順位でｎ個先のライトバッファまでの範囲のライトバッファに限定して、データ書き込み制御手段５が限定されたライトバッファへのデータ書き込みを制御することもできる。この時、データを出力したストアポートを解放することができる。
【００１２】
また記憶制御装置において、データ格納手段４からキャッシュメモリ２またはメモリへのデータの書き込みを、命令処理装置とは独立して制御するメモリ書き込み制御手段を更に備えることもできる。
【００１３】
また記憶制御装置は、前記のライトバッファをキャッシュメモリまたはメモリの応答性能に応じた個数だけ、ストアポートを命令処理装置の性能に応じた個数だけ備えることもできる。
【００１４】
またストアポート側とデータ格納手段側とで、同一数のストア要求を処理するために必要な制御フラグを、それぞれ必要なだけ保持することができる。
また実施の形態において、キャッシュメモリが複数の階層によって構成される場合、ストアイン方式、ストアスルー方式のいずれかが採用されている時、あるいはストアイン方式とストアスルー方式とが併用されている時のいずれにおいても、キャッシュメモリの各階層へのデータの書き込みはデータ格納手段から行われる。
【００１５】
次に実施の形態において、データ格納手段上で先行するストア要求に対応してすでに格納されているデータに対して、次のストア要求に対応するストアポートからのデータのマージを実行することもできる。この場合、ライトバッファは、ストアポートからのデータのマージを可能とするデータ幅であって、ストアポートの持つデータ幅より大きいデータ幅を有する。
【００１６】
ただし、このようなデータのマージは、先行するストア要求と次のストア要求との種類に応じて禁止されることも、また逆に強制的に実行されることもできる。ストア要求のキャンセルが命令処理装置から通知された場合に、データマージは禁止されることもできる。
【００１７】
実施の形態においては、ストアデータを、外部からのフェッチ要求に対応して、ストアポートまたはデータ格納手段から直接に外部に与えるストアデータバイパスフェッチを行うこともできる。
【００１８】
この場合、例えばデータ格納手段からのデータバイパスフェッチを許可する場合には、ストア要求とフェッチ要求とのそれぞれに対するデータの存在位置を示すバイトマークを複数バイト単位で比較して、バイパス許可候補としてのストアデータを選択した後に、バイトマークを１バイト単位で比較し、バイパスフェッチの是非について最終的に判定することもできる。
【００１９】
また実施の形態においては、記憶制御装置はマルチスレッド動作可能な中央処理装置によって制御されるデータ処理装置を構成することもでき、この場合、複数のスレッドの間でストアポートとデータ格納手段とを共有することも、データ格納手段を共有し、ストアポートを排他的に各スレッドが保持することも、ストアポートとデータ格納手段とをそれぞれ排他的に各スレッドが保持することもできる。
【００２０】
実施の形態においては、ストアポートとデータ格納手段とのそれぞれに対して、マルチスレッドの各スレッドを識別するスレッド識別子を保持することもでき、前述のストアデータバイパスフェッチの制御においてストアポートまたはデータ格納手段に対して保持されているスレッドの識別子と、フェッチを要求するスレッドの識別子とが異なる場合には、ストアデータバイパスフェッチを禁止することができる。またデータ格納手段に格納されているデータとストアポートからのデータのマージの制御において、ストアポートとデータ格納手段に対して保持されているスレッドの識別子が異なる場合には、データマージを禁止することができる。またスレッドの切り替えに伴って命令処理装置からストア要求のキャンセル信号を受け取った時も、データのマージは禁止される。
【００２１】
実施の形態において、データ格納手段へのストアデータの格納までに、ストアデータをメモリ格納時と同一形式にアラインする手段が更に備えられる。この場合、例えばアドレスとオペランド長とに応じたアライン処理を行う手段を含めてストアポートを演算ユニットに近い位置に配置し、データ格納手段をキャッシュメモリまたはメモリに近い位置に配置することもできる。
【００２２】
更に実施の形態において、データ格納手段４はストア要求がキャッシュミスしている時、キャッシュラインの要求リクエストを記憶制御装置のパイプラインに投入するキャッシュライン要求手段を備えることもできる。
【００２３】
また実施の形態においては、データ格納手段４はストアポート３から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、記憶制御装置１が、キャッシュメモリ２またはメモリへのデータの書き込みを、その複数のライトバッファのうちで最も最近ストアポートからデータ格納が行われたライトバッファ以外から行うように制御するメモリ書き込み制御手段を更に備えることもできる。
【００２４】
この場合、ストアポートが空になった時、最も最近データの格納が行われたライトバッファからのデータ書き込みが行われないことによって後続の命令が実行不可能となった時、そのライトバッファに格納されたデータに関するキャッシュラインの解放を外部から求められた時、またはそのライトバッファに格納されているデータに対して他のストア要求に関するデータとのマージが禁止されている時のいずれかの場合には、最も最近ストアポートからのデータの格納が行われたライトバッファからキャッシュメモリまたはメモリへのデータ書き込みが行われる。
【００２５】
また本発明の記憶制御装置は、演算ユニットから送られ、ストア要求によってキャッシュメモリまたはメモリに書き込まれるべきストアデータをそれぞれ格納する複数のバッファ手段と、その複数のバッファ手段のうちで最も古くデータが格納されたバッファ手段のみを対象として、ストアデータの長さがキャッシュメモリ２またはメモリ上でデータのエラー管理が行われる単位の領域の長さより短い場合に、そのストアデータのキャッシュメモリまたはメモリへの格納を中止させる制御を行うメモリ書き込み制御手段とを備える。
【００２６】
また本発明において、命令処理装置から送られるストア要求に対応して、演算ユニットから送られ、ストア要求によってキャッシュメモリまたはメモリに書き込まれるべきストアデータを保持するストアポートを備える記憶制御装置は、ストアポートとキャッシュメモリまたはメモリとの間に、ストアデータをそれぞれ一時的に保持する複数階層のデータ格納手段と、ストアポートからその複数階層の１つ以上の階層のデータ格納手段を介して、キャッシュメモリまたはメモリまでのストアデータの書き込みを制御するストアデータ書き込み制御手段とを備える。
【００２７】
またこの場合、複数階層のデータ格納手段がそれぞれ複数個のライトバッファを備えると共に、ストアデータ書き込み制御手段が複数階層のうちにライトバッファの全てにデータが保持されている階層が存在しない時には、複数個のライトバッファが全て空である階層を介することなく、データの書き込み可能なライトバッファが存在する階層を介しながらストアデータの書き込みを制御し、全てにデータが保持されている階層が存在する時には、そのような階層の中でストアポート側に近い階層から更に１階層近い階層のライトバッファ手段を介しながらストアデータの書き込みを制御することもできる。
【００２８】
次に本発明のデータ格納方法においては、命令処理装置から送られるストア要求に対応して、演算ユニットから送られるストアデータを複数個のストアポートのうちの１つに格納し、ストアポートに格納されたデータを複数個のライトバッファの１つに格納し、ライトバッファに格納されたデータをキャッシュメモリまたはメモリに格納する方法が用いられる。
【００２９】
発明の実施の形態においては、ストアポートに格納されたデータのライトバッファへの格納を、命令処理装置がストア要求の実行をコミットした後に行うこともできる。
【００３０】
また実施の形態においては、ライトバッファに格納されたデータのキャッシュメモリまたはメモリへの格納の制御において、複数のライトバッファのうちで最も最近ストアポートからのデータ格納が行われたライトバッファ以外から、キャッシュメモリ、またはメモリへのデータ格納を行うこともできる。
【００３１】
以上のように本発明によれば、ストアポートとキャッシュメモリまたはメモリとの間に、例えば複数のライトバッファによって構成されるデータ格納手段が設けられ、ストアポートからデータ格納手段、データ格納手段からキャッシュメモリまたはメモリの順序にストアデータの格納が行われる。
【００３２】
【発明の実施の形態】
図２は本発明の実施形態におけるキャッシュへのデータ格納方式の基本説明図である。本実施形態では命令処理装置、すなわち命令ユニット（ＩＵ）１０から送られるストア要求に対応して、演算（実行）ユニット（ＥＵ）１１から送られるデータが記憶制御ユニット１２、すなわち記憶制御装置内のストアバッファ部１３、およびライトバッファ部１４を介して、（１次）キャッシュ１５に格納される。
【００３３】
本実施形態においては演算ユニット１１から送られたデータは、ストアバッファ部１３内の（ｎ＋１）個のストアポート（ＳＴＰ０〜ＳＴＯｎ）のいずれかに格納された後に、ストア命令がコミットされた時点でライトバッファ部１４内の（ｎ＋１）個のライトバッファ（ＷＢ０〜ＷＢｎ）のいずれかに格納され、その後（１次）キャッシュ１５に格納される。また本実施形態では各ＳＴＰは８バイト、各ＷＢは１６バイトのデータ幅とする。
【００３４】
図３は図２の命令ユニット、および記憶制御ユニットの詳細構成を示すブロック図である。同図において命令ユニット２０は、記憶制御ユニット２５に与えるストア命令を格納するストア命令格納部２１、命令実行制御のための処理待ちのスタックなどを含むリザベーションステーション２２、命令制御ユニット２５にストア要求を送るにあたって、そのストア要求に対応するアドレスとデータを格納すべきストアポート、すなわち図２では（ｎ＋１）個、図３では１０個のストアポート（ＳＴＰ）のうち、どのストアポートにその要求を割り当てるかを示すためのネクストカウンタ２３、１０個のＳＴＰのうちでストア要求が割り当てられ、現在使用されているカウンタの数を示すユーズドカウンタ２４とを備えている。
【００３５】
図３の記憶制御ユニット（ＳＵ）２５の内部のストアバッファ部２６は、ストアバッファ部全体を制御するストアバッファ（ＳＴＢ）制御部２８、図２では（ｎ＋１）個、ここでは１０個のＳＴＰ２９、命令ユニット２０からの要求に対応してストアポートを割り当てるＳＴＰ割り当て部３０、ＳＴＰ２９からライトバッファへのデータ書き込み要求を制御するライトバッファゴーリクエスト（ＷＢ＿ＧＯ＿ＲＥＱ）制御部３１、ライトバッファへのデータ書き込みを行うべきＳＴＰを示すポインタとしてのプリライトバッファゴーストアポート（ＰＲＥ＿ＷＢ＿ＧＯ＿ＳＴＰ）ポインタ格納部３２、ライトバッファへの書き込みを行ったＳＴＰを開放するための制御を行うストアポートツーフリー（ＳＰＴＯＦＲＥＥ）制御部３３を備えている。
【００３６】
またライトバッファ部２７は、ここでは５個のライトバッファ（ＷＢ）３５、ＳＴＰからＷＢへのデータの格納を制御するライトバッファゴー（ＷＢ＿ＧＯ）制御部３６、最も最近データが格納されたＷＢを示すポインタとしてのＷＢボトムオブキュー（ＢＯＱ）などを保持するＷＢ＿ＢＯＱ格納部３７、データを保持しているＷＢのうちで最も古くデータが格納されたＷＢを示すポインタとしてのＷＢトップオブキュー（ＴＯＱ）などを保持するＷＢ　ＴＯＱ格納部３８、ＳＴＰからＷＢへのデータ書き込みが許可されたことを示すＷＢホールド（ＨＬＤ）フラグなどを保持するＷＢ＿ＨＬＤ格納部３９を備えている。なお本発明の記憶制御装置などはすべてハードウエアによって実現され、各フラグは信号に対応する。
【００３７】
図４はストアポートからライトバッファへのデータの格納、およびこれと関連するライトバッファ上でのデータのマージに対する基本的な処理の説明図である。同図においてＷＢ＿ＢＯＱフラグ格納部４１には、前述のＷＢ＿ＢＯＱのポインタの値に加えて、前回ＷＢに書き込んだデータの属性や、そのアドレス、すなわち主記憶上でのアドレスなどが格納されている。またＷＢ＿ＧＯフラグ格納部４２には、ＷＢにこれから書き込むべきデータの属性や、そのアドレスなどが格納されている。
【００３８】
マージ条件確認部４３は、ＷＢ＿ＢＯＱフラグ格納部４１から出力される、後述するノーマージフラグの値や、ＷＢ＿ＧＯフラグ格納部４２から出力される、後述するニューアロケートフラグの値などを用いて、データのマージの可否を決定し、マージを許可できない場合にはマージを禁止することを示すＩＮＨ＿ＭＥＲＧＥフラグをセットし、マージチェック部４４に出力する。
【００３９】
ＷＢ＿ＢＯＱ＿ＡＡＲ格納部４６は、前回ＷＢへ書き込みが行われたデータのアドレス、すなわちＷＢ＿ＢＯＱによってポイントされるＷＢに格納されているデータの絶対アドレスＡＡＲを格納しており、またＷＢ＿ＧＯ＿ＳＴＡＡＲ格納部４７はＳＴＰ側から今回ＷＢに書き込まれるべきデータ、すなわちストアポート内のデータの絶対アドレスを格納しており、アドレス比較部４８はこれらの２つのアドレスを比較して、その結果に応じてアドレスマッチ信号をマージチェック部４４に出力する。
【００４０】
マージチェック部４４は、マージ条件確認部４３からのＩＮＨ＿ＭＥＲＧＥ信号、アドレス比較部４８から出力されるアドレスマッチ信号、およびＷＢ＿ＢＯＱフラグ格納部４１から出力されるＷＢ＿ＢＯＱ＿ＶＡＬＩＤ信号、すなわちＷＢ＿ＢＯＱによってポイントされるＷＢに有効なデータが格納されていることを示す信号を用いてマージの可否を判定し、ＷＢ上でのデータのマージを許可する場合にはマージイネーブル信号を出力する。
【００４１】
続いて図２〜図４を用いてストアポートＳＴＰからライトバッファＷＢへのデータの書き込みが行われる４サイクルの動作についてさらに詳細に説明する。この書き込み動作はＰＲＥ＿ＷＢ＿ＧＯサイクル、ＷＢ＿ＧＯサイクル、ＷＢ＿ＧＯ＿１ＴＣ（τコピー）サイクル、およびＷＢ＿ＧＯ＿２ＴＣサイクルの４サイクルかかって実施される。
【００４２】
ＷＢ＿ＧＯサイクルでＷＢへのデータの書き込みが行われるべきＳＴＰをさし示すポインタとして、前述のＰＲＥ＿ＷＢ＿ＧＯ＿ＳＴＰがある。そしてポインタＷＢ＿ＧＯ＿ＳＴＰは、このポインタの１サイクル後の値を保持して、ＷＢ＿ＧＯサイクルで使用されるべきＳＴＰをポイントすることになる。
【００４３】
ＳＴＰ内に格納されているデータのアドレスを保持するレジスタとして、ストアポート絶対アドレスレジスタ（ＳＴＡＡＲ）０〜９がある。ＰＲＥ＿ＷＢ＿ＧＯ＿ＳＴＰによって示されるストアポートのデータの絶対アドレスが選択され、その結果は図４のＷＢ＿ＧＯ＿ＳＴＡＡＲ格納部４７に格納される。このアドレスの値は、ＷＢにデータが書き込まれた時に、前回書き込まれたデータのアドレスを保持するＷＢ＿ＢＯＱ＿ＡＡＲ格納部４６にも書き込まれる。更にデータが書き込まれたＷＢの番号に対応するＷＢ内の絶対アドレスレジスタＷＢ＿ＡＡＲ０〜４にも書き込まれる。
【００４４】
ＷＢ＿ＧＯ、すなわちＳＴＰからＷＢに対するデータの書き込み要求は、ＰＲＥ＿ＷＢ＿ＧＯ＿ＳＴＰによって指示されるＳＴＰが、命令ユニットがストア命令を実行してもよいことを決定し、その決定を示すコミットがＳＴＰに送られた時か、あるいは新しくＰＲＥ＿ＷＢ＿ＧＯ＿ＳＴＰでポイントされることになったＳＴＰがコミットを受け取っていた時に発生する。この要求は図３のＷＢ＿ＨＬＤ格納部３９に送られ、ＷＢホールド（ＨＬＤ）フラグがセットされる。すなわちＷＢ＿ＨＬＤフラグは基本的にはＳＴＰ側でセットされてＷＢ側に渡される。
【００４５】
ＷＢ＿ＨＬＤフラグのセットによって、ＳＴＰからＷＢへのデータの書き込みの準備が終了する。但し、後述するようにＷＢ＿ＢＯＱとＷＢ＿ＴＯＱとの間の関係によって、ＷＢへのデータの書き込みが保留されることがある。その場合には、ＷＢ＿ＨＬＤフラグがセットされたまま、保留条件が解除されるまでＷＢへのデータの書き込みは行われない。
【００４６】
ＷＢ＿ＢＯＱは、ＷＢ＿ＧＯの要求に対応してＳＴＰからＷＢへとデータの書き込みを行うべき時に、データの書き込み先となるＷＢを決定するために使用される。ＷＢ＿ＢＯＱによって指示されるＷＢの内容が、例えばキャッシュにライト済みになって空となっているか、あるいはそのＷＢのデータに対してストアデータをマージすべき時には、そのＷＢにＳＴＰのデータが書き込まれる。
【００４７】
それ以外の場合、すなわちＷＢ＿ＢＯＱによって示されるＷＢにすでに何かのデータが格納されており、ストアデータのマージを行わない場合には、ＷＢ　ＢＯＱによって示されるＷＢの次のＷＢ（ＷＢ＿ＢＯＱ＋１）にデータの書き込みが行われる。すなわち、ＷＢ＿ＧＯの要求に対応してデータの書き込み対象となるＷＢは、ＷＢ＿ＢＯＱ、またはＷＢ＿ＢＯＱ＋１のいずれかによってポイントされるＷＢである。
【００４８】
ＷＢ＿ＴＯＱは、データが格納されているＷＢの中で、最も古くデータの書き込みが行われたＷＢを示すポインタであり、ＷＢ＿ＴＯＱがさすＷＢとＷＢ＿ＢＯＱ＋１がさすＷＢとが一致している場合には、全てのＷＢにデータが格納されていることを意味する。この場合、前述のＷＢ＿ＨＬＤフラグがセットされていても、ＷＢへの書き込みは保留される。ＷＢ＿ＨＬＤフラグがセットされていて、これらの２つのポインタの値が異なる時に、ＷＢ＿ＧＯ信号がオンとなり、ＳＴＰからＷＢへのデータの書き込みが行われる。
【００４９】
図４のＷＢ　ＢＯＱ　ＡＡＲ格納部４６と、ＷＢ＿ＢＯＱ＿ＳＴＡＡＲ格納部４７とに格納されているアドレスが、アドレス比較部４８によって比較され、２つのアドレスが一致している場合には、前回データの書き込みが行われたＷＢと今回書き込みを行うべきＷＢとが一致していると判定され、ＷＢ＿ＢＯＱによってポイントされるＷＢへのデータの書き込みが可能となる。すなわち、このポインタによって示されるＷＢが空であるか、前回のストアへのＳＴＰ側からのマージ禁止要因、または後続のストアに対するＷＢ側からのマージ禁止要因が存在しなければ、ＷＢ＿ＢＯＱによって示されるＷＢへの書き込みが行われる。
【００５０】
これに対して２つの絶対アドレス格納部４６，４７に格納されているアドレスが一致しない場合、または何らかのマージ禁止要因が存在する時には、ＷＢ＿ＢＯＱ＋１によってポイントされるＷＢにデータが書き込まれる。
【００５１】
書き込み対象となったＷＢに対しては、クロックイネーブル（ＣＥ）＿ＷＢ０〜４＿１ＴＣがセットされる。このフラグは次のサイクルにおいてＷＢに実際にデータが書き込まれる時のＷＢの判定に利用される。さらにＷＢ＿ＧＯ＿ＳＴＰの値は、次のサイクルで実際にＷＢへのデータの書き込みが行われるべきＳＴＰのデータ部を示すポインタとしてのＷＢ＿ＧＯ＿１ＴＣ＿ＳＴＰに送られ、実際のデータの書き込みにあたってＳＴＰからのデータの選択に利用される。
【００５２】
すなわち、次のサイクルでＷＢ＿ＧＯ＿１ＴＣ＿ＳＴＰによって示されるＳＴＰのデータ部からデータが選択され、ライトバッファのデータレジスタ（ＷＢＤＲ）０〜４に送られる。この時データが書き込まれるべきＷＢに対しては、前述のＣＥ＿ＷＢ０〜４＿１ＴＣがセットされており、これによってＳＴＰに格納されているデータが書き込み対象となるＷＢに正しく書き込まれる。
【００５３】
図３において命令ユニット（ＩＵ）２０は、ストア命令に対応して記憶制御ユニット（ＳＵ）２５に対してストア要求を送ると共に、ネクストカウンタ２３によって示されるストアポートへのそのストア要求の割り当てを決定し、そのストアポート番号をＳＴＰ割り当て部３０に送る。図では同時に２つの要求が送られている。
【００５４】
それと共に命令実行状況を管理するリザベーションステーション２２内のストア要求管理部に、割り当てたストアポート番号を通知する。また割り当てたストア命令の数だけユーズドカウンタ２４をインクリメントする。ユーズドカウンタ２４の値がストアポートの数、ここでは１０に達すれば、新しいストア要求を記憶制御ユニット２５に送ることができない。
【００５５】
記憶制御ユニット２５内のストアバッファ部２６では、命令ユニット２０から受け取ったストア要求の種類に対応して、ＳＴＰに対してストア要求の種類を示すストアバッファオペレーションコード（ＳＴＢ＿ＯＰＣ）７ビット［６：０］がセットされる。このコードは、７種類のストア要求を識別するために、いずれか１ビットだけが“１”となるコードである。このコードの各ビットの意味は次の取りである。
【００５６】
［０］：ＳＴ（ストア）、通常のストア命令を表す。
［１］：ＦＳ（フェッチアンドストア）、すなわちコンペアアンドスワップ（ＣＡＳ）命令のように、命令のフェッチからストアの完了までデータが他のＣＰＵに書き換えられることを防ぐために、キャッシュラインを他系のＣＰＵに渡さないで処理が行われるべき命令を表す。
【００５７】
［２］：パーシャルストア、すなわち８バイトの領域のうちで指定されたバイトの位置に対してだけデータのストアを行う処理を表す。
［３］：ブロックストア、すなわち６４バイトブロックのストアを表す。このコードが指定された場合には、キャッシュに排他型でヒットする時はキャッシュに書き込み、キャッシュに共有型でヒットする時にはヒットしたキャッシュラインを無効化しつつ、主記憶にデータを書き込む。キャッシュにヒットしない場合には主記憶にデータを書き込むブロックストアを行う。
【００５８】
［４］：ブロックコミットストア、すなわち６４バイトブロックのストアであり、キャッシュヒットの有無に関係なく主記憶にデータを書き込み、キャッシュヒットしている場合にはヒットしたキャッシュラインを無効化する。
【００５９】
［５］：ＡＳＩ＿ＳＵ＿ＷＴ、アドレススペースアイデンティファイヤ（ＡＳＩ）指定による１次キャッシュ装置の内部のレジスタなどへの書き込みを表す。ＡＳＩを指定することにより、キャッシュの制御レジスタを書き換えて特殊な命令を割り当てることができる。例えばメモリアクセスでは、普通はトランスレーションルックアサイドバッファ（ＴＬＢ）の内容によってアドレスが指定され、メモリアクセスが行われるが、例えば後述するノンキャッシュアクセスとして、Ｉ／Ｏ領域を介して、例えば外部のメモリにアクセスするような特殊が命令が割り当てられるコードである。
【００６０】
［６］：ＡＳＩ＿ＳＸ＿ＷＴ、すなわちＳＸ（セカンドキャッシュアンドエクスターナルアクセスユニット）内部のレジスタなどへのＡＳＩ指定による書き込みを表す。
【００６１】
図３のストアバッファ部２６では、ストア要求に対応して割り当てられたＳＴＰに対応して命令の識別子としてのインストラクションＩＤ（ＩＩＤ）などを保持し、またそのＳＴＰに対するシーケンスＩＤ（ＳＩＤ）に２ビットの“１１”をセットし、そのＳＴＰが有効であることを示すフラグとする。またライトバッファゴーリクエスト（ＷＢ＿ＧＯ＿ＲＥＱ）制御部３１を介してライトバッファ部２７内のＷＢ＿ＨＬＤフラグをセットする。このフラグはＷＢへのデータの書き込みが完了したか、ＷＢにデータを書き込む必要がなくなった時にリセットされる。
【００６２】
また記憶制御ユニット２５は、命令ユニット２０からストア要求を受け取った時に要求に付随して送られてくる前述のＡＳＩ、ストア要求の種類を示すＳＴＢ＿ＯＰＣ、ストア命令のアドレスの一部としてのＡＤＲＳ［４：０］、ストア命令のオペランド長を示すＬＥＮＧＴＨ［３：０］を保持する。
【００６３】
そしてストア命令の先頭アドレスとストア命令のオペランド長から、８バイト境界内でのストア対象バイトの位置を示すバイトマークＢＭ［７：０］をセットする。このバイトマークでは、８バイトのそれぞれのバイトに対応するビットの中で、ストア対象データが存在するバイトに対応するビットに“１”がセットされる。またストア命令が前述のブロックストア命令の先頭のストアに対応する場合には、ＢＳＴ＿１ＳＴフラグを、また最後のストアの場合にはＢＳＴ＿ＬＡＳＴフラグをセットする。
【００６４】
命令ユニット２０から受け取るＩＩＤは、ストア命令だけでなく分岐、演算、ロードなどを含めた全ての命令の実行順序を示す識別子である。これもＳＴＰに保持され、ロード命令とストア命令の実行順序の判別などに用いて、ロード命令を一時的に停止させたり、ＳＴＰから直接にロードデータを供給したりするために使用される。
【００６５】
記憶制御ユニット２５は、ストア要求を受け取った時点でその要求をパイプラインに流し、ストア命令に対応して例外が発生しないか否かを確認し、その結果を命令ユニット２０に通知する。そして例外発生の有無に関係なく、ポストステータスバリッド（ＰＳＴＶ）フラグをセットする。このフラグがセットされている時には、記憶制御ユニット２５によってパイプラインで検出可能な例外の検出が完了したことを意味すると共に、ＴＬＢの検索結果などからストア命令に対応して仮想アドレスと物理アドレスとの対応関係が得られたことも意味している。
【００６６】
例外が発生した場合には、ＳＴＰに対するＳＩＤとして２ビットの“１０”をセットし、例外が発生したことを示すフラグとする。そしてこのＳＴＰに対してはキャッシュへの書き込みを行う必要がなくなったものとして、ＷＢ＿ＨＬＤフラグをリセットする。これによってライトバッファを無駄に使用することが防止される。
【００６７】
またパイプラインにストア要求を流す際に、ＴＬＢやキャッシュタグの検索も行う。キャッシュタグの検索の結果、排他型でキャッシュラインが存在することが判明した場合には、そのことを示すためにＳＴＰに対応するラインＩＤ（ＬＩＤ）フラグをセットする。このフラグは、キャッシュへのデータの書き込みが完了する前に、キャッシュラインがキャッシュから追い出されたらリセットされる。またキャッシュヒットウェイを示すオペランドウェイ（ＯＰＷＡＹ）［１：０］をセットする。
【００６８】
ＴＬＢの検索の結果、サイドエフェクト（ＳＥ）の属性を持つページに対応するストア命令である場合には、そのＳＴＰに対応するＴＬＢ＿ＳＥフラグをセットし、この要求の前後におけるストアデータのマージを禁止する。ＳＥ属性とはサイドエフェクト、すなわち余計な効果が起こる可能性がある時に、その命令をインオーダで実行させる、すなわち実行順序的に本当に実行すべき時にその命令を実行させる制御を意味する。
【００６９】
ＴＬＢの検索によってノンキャッシュ（ＮＣ）属性を持ったぺージであることが判明した場合には、ＴＬＢ＿ＣＰ（キャッシャブルフィジカル）フラグを“０”にリセットする。このノンキャッシュ属性は、キャッシュではなく、Ｉ／Ｏ領域に対するアクセスの属性を意味する。
【００７０】
更にＴＬＢの検索によってリトルエンディアンが指示されたストアであることが判明した場合には、ＴＬＢ＿ＬＥフラグをセットする。このフラグがセットされたＳＴＰに対しては、ストアがリトルエンディアンの形式で実行されることになる。
【００７１】
図２の演算ユニット１１側でストアデータが用意されると、そのデータは図３の記憶制御ユニット２５に送られると共に、命令ユニット２０からそのストアデータを格納すべきＳＴＰ２９の番号が指示される。ＳＵ２５側では、送られたストアデータをＳＴＰ２９内のデータ部に格納し、ストアデータを受け取ったことを意味するＲＳＴＤＶ（レシーブストアデータバリッド）フラグをセットする。
【００７２】
ストア命令を完了するまでの間に、ストア命令に先行する命令列において分岐が生じたり、例外が発生したりしてストア命令の実行を中止する必要が生じる場合がある。そのような場合には、命令ユニット２０はストア命令のキャンセルを指示する信号をＳＵ２５に送る。ＳＵ２５では、ストア命令の実行許可としてのコミットを受け取っていないＳＴＰ２９に対応するＳＩＤを“０１”にセットし、命令がキャンセルされたことを示すフラグとする。命令がキャンセルされたＳＴＰ２９内のデータはキャッシュや主記憶に書き込む必要がないため、ＷＢにも書き込まない。従って同時にＷＢ＿ＨＬＤフラグもリセットする。
【００７３】
またＩＵ２０からのキャンセル指示に対応して、ＳＴＢ制御部２８はキャンセルを受け取ったことを示すテンポラリィなフラグをセットする。このフラグが上がっている時にストア要求を受け取ると、対応するＳＴＰに対するポストキャンセルフラグ（ＰＯＳＴ＿ＣＡＮ）フラグをセットし、同時に前述のテンポラリフラグをリセットする。テンポラリフラグがセットされている時に同時に２つ以上のストア要求を受け取った時には、若い方のストア要求に対応するＳＴＰのポストキャンセルフラグをセットする。
【００７４】
これによってＩＵ２０からキャンセルの指示を受け取った後に最初に受け取ったストア要求に対応するＳＴＰに対してだけ、ポストキャンセルフラグがセットされる。ポストキャンセルフラグが上がっているＳＴＰに対しては、そのストア要求がそれまでの命令実行の流れとは異なるものとなっている可能性が高いため、後述するように先行するストア要求とのマージは禁止される。
【００７５】
命令ユニット（ＩＵ）２０は、ストアデータノＳＵ２５ヘの送り出しを完了し、ストア命令に対して例外が発生しないことの通知を受け取った後、ストア命令に先行する命令が全て完了した時にストア命令を実行してもよいものと判定する。これがストア命令のコミットであり、コミットされたストア命令に対応してキャッシュ、または主記憶へのデータの書き込みが許可される。
【００７６】
ストア命令のコミット条件が整うと、ＩＵ２０はＳＵ２５に対してストア命令のコミット通知を送り、それと共にコミットされたストア命令のＩＩＤを送る。ＳＵ２５では、ＳＴＰに保持されていたＩＩＤとコミットされたストア命令のＩＩＤとを比較して、どのＳＴＰに対するストア要求がコミットされたかを判断し、コミットされたＳＴＰに対してＲＥＡＤＹフラグをセットする。
【００７７】
ＲＥＡＤＹフラグとＷＢ＿ＨＬＤフラグの両方がセットされているＳＴＰのうちで最も古くストア要求が割り当てられ、データが格納されたＳＴＰから順にＷＢへのデータ書き込みが行われる。書き込み先のＷＢの決定は、前述のようにＷＢ＿ＢＯＱやストアアドレスの値を用いて行われる。
【００７８】
格納されていたデータがＷＢに書き込まれたＳＴＰは即時開放される。開放されたＳＴＰの数は、ＳＴＰの開放を示すストアポートツーフリー（ＳＰＴＯＦＲＥＥ）信号によりＳＵ２５からＩＵ２０に通知される。このＳＴＰの開放は最も古くストア要求が割り当てられたＳＴＰから順次実行される。途中にストア要求がキャンセルされたり、例外が検出されたＳＴＰがある場合には、複数のＳＴＰが同時に開放される場合もある。図３では同時に３つのＳＴＰが解放されている。
【００７９】
ストアポートツーフリー信号を受け取ったＩＵ２０では、その信号によって解放されたＳＴＰの数を確認し、ユーズドカウンタ２４の値をデクリメントする。ＳＴＰからＷＢへのデータ書き込みに関連して、いくつかのフラグはＳＴＰからＷＢへとそのまま渡され、いくつかのフラグはＳＴＰのフラグの状態から新たに生成されてＷＢに送られる。ＷＢ上でデータのマージが行われる時には、前回ＷＢへ書き込まれた値にマージされるフラグ上のビット情報も存在する。このようなフラグの受け渡しについては更に後述する。
【００８０】
続いてＷＢ上におけるフラグについて説明する。ＷＢ上には次のようなフラグがさらに用いられる。
ＶＡＬフラグ：このフラグはＷＢが有効であることを意味する。ＷＢに書き込まれるデータはコミットを受け取ったＳＴＰに格納されているデータであるため、ＷＢのＶＡＬフラグはＳＴＰにおけるＳＩＤ＝１１であり、かつＰＳＴＶ、かつＲＳＴＤＶ、かつＲＥＡＤＹの状態に相当する。ＳＴＰからのデータ書き込みに対応してＷＢが割り当てられた時に、このフラグはセットされ、ＷＢからキャッシュへのデータの書き込みが完了してＷＢが解放される時にリセットされる。
【００８１】
ＸＣＰＴＮ（エクセプション）フラグ：ストア領域が主記憶上に存在しなかった時に、このフラグがセットされる。
ＯＰＨＬＤ＿ＦＬＡＧ：キャッシュ領域へのストアを行う必要がある場合、ストア完了までこのフラグがセットされる。
【００８２】
ＳＸＨＬＤ＿ＦＬＡＧ：レジスタなどへの書き込みを２次キャッシュ側に要求する必要がある場合に、このフラグがセットされる。２次キャッシュに対してデータの書き込み要求を送った時点でこのフラグはリセットされる。
【００８３】
ＳＸＥＷＴ＿ＦＬＡＧ：ＳＸエンドウェイトフラグ、ＳＸ（２次キャッシュ）に要求したデータ書き込み処理に対応して、ＳＸ側から書き込み処理の完了通知を受け取るまでＷＢを解放しない場合に、このフラグがセットされる。ＳＸから書き込み完了通知が届いた時点で、このフラグはリセットされる。
【００８４】
ＳＵＡＳＩ＿ＦＬＡＧ：ＳＵ（記憶制御ユニット）２５内部のレジスタなどへのデータ書き込みを行う必要がある場合に、このフラグがセットされる。データの書き込み要求をレジスタ等に送出した時点で、このフラグはリセットされる。
【００８５】
ＬＩＤ：前述のフラグであり、キャッシュに排他型でヒットしていることを意味する。キャッシュへの書き込みは、このフラグがセットされてから実施される。
【００８６】
ＳＴ１−ＫＩＣＫ：ＬＩＤがセットされていないＷＢについては、書き込み先のキャッシュラインをキャッシュに持ってきてＬＩＤをセットする必要がある。このためのパイプライン動作がＳＴ１であり、このフラグはＳＴ１の起動待ち状態であることを示す。このフラグによって必要な時にのみＳＴ１動作をパイプラインに要求することが可能となる。
【００８７】
ＯＰＷＡＹ［１：０］：前述のフラグで、ストアすべきキャッシュラインがキャッシュ上のどのウェイに存在するかを示す。ＬＩＤがセットされている時にのみ、有効な値が保持される。
【００８８】
ＬＢＳ＿ＢＡＮＫ［３：０］１次キャッシュのローカルバッファストレージ（ＬＢＳ）を、本実施形態では８バイト単位の４つのバンクに分けているため、どのバンクに対してデータのストアを行うか表示するフラグである。メインのパイプラインでは同時に２つの要求が実行されるため、キャッシュへのストアと他の動作との間で、バンクの衝突の検出に使用される。ＳＴＰからＷＢへのデータ書き込み時にセットされ、ＷＢ上でデータのマージが行われる場合には、複数のビットがセットされる。
【００８９】
ＢＳＴ＿１ＳＴ：前述のフラグであり、ブロックストアの先頭となるＷＢにセットされ、このフラグがセットされる場合には、先行するストアに相当するＷＢとの間でのデータのマージは行わない。
【００９０】
ＢＳＴ＿ＬＡＳＴ：前述のフラグであり、ブロックストアの最後となるＷＢにセットされている。このフラグがセットされているＷＢに対しては、後続のストア要求との間のデータのマージは行わない。
【００９１】
ＮＯＭＲＧ（ノーマージ）：このフラグがセットされているＷＢに対してはデータのマージを行わないことを表示するフラグであり、ＳＴＰ側で前述のＴＬＢ＿ＳＥフラグがセットされていたストア要求に対応するデータがＷＢに書き込まれる場合などにセットされる。
【００９２】
Ｊ８Ｂ＿ＥＶＮ（イーブン）：１６バイト境界アドレスの中で、前半８バイトの全てのバイト位置に対するデータのストアを実施すべき時に、このフラグがセットされる。このフラグがセットされている時には、ストア対象のキャッシュ内８バイト領域のデータに訂正不能なエラーが存在していても、エラーを無視してストアを実施すべきことが指示される。これは、本実施形態ではデータのＥＣＣを８バイト単位で与えていることによって８バイトフルストアを実行すればストア前のデータ、およびＥＣＣの状態にかかわらず、正しいデータとＥＣＣをストアすることが可能となるためである。
【００９３】
Ｊ８Ｂ＿ＯＤＤ（オッド）：１６バイト境界アドレス内の後半８バイトの全ての位置に対するストアを実施すべき時に、このフラグがセットされる。
ＤＩＳ＿ＳＴ＿ＥＶＮ（ディセーブルストアイーブン）：１６バイト境界アドレス内の前半８バイトに対する部分的なデータのストアを禁止することを示すフラグである。このような部分的なストアを行う場合に、訂正不能なデータエラーが存在する時には書き込み後もエラーが残るため、データの書き込みが禁止される。
【００９４】
ＤＩＳ＿ＳＴ＿ＯＤＤ：１６バイト境界アドレス内の後半８バイトに対する部分的なデータのストアを禁止することを示すフラグである。
ＡＳＩ［７：０］：前述のフラグであり、アドレススペースアイデンティファイアを示す。
【００９５】
ＱＢＭ（クワドバイトマーク）［３：０］：４バイト単位でのストア対象バイトの存在位置を示す。
ＢＭ［１５：０］：１バイト単位でのストア対象バイトの位置を表示する。
【００９６】
ＩＮＨ＿ＳＦＢ（インヒービットストアフェッチバイパス）：ストアフェッチバイパス（ＳＦＢ）は、ストアデータをキャッシュへの書き込み前にバイパスして、例えば演算パイプラインに流すことを意味し、このフラグがセットされているＳＴＰ、またはＷＢからはＳＦＢが禁止される。
【００９７】
ＴＨＲＥＡＤ＿ＩＤ（スレッドアイデー）：マルチスレッドモードでの動作がサポートされている場合に、ＳＴＰおよびＷＢに存在するフラグであり、割り当てられているストア要求がどのスレッドから出されているかを表示する。
【００９８】
ＷＢ＿ＯＰＣ：ＷＢでのストア動作の種類を示すオペレーションコードであり、エンコードされて保持され、そのままＳＸなどへの要求に使用するオペコードとして利用が可能となっている。エンコードされた値は次のような意味を持つ。
【００９９】
ＷＢ＿ＯＰＣ＝００：ＳＴ、すなわち１次キャッシュへの書き込みを行う通常のストアを表す。
ＷＢ＿ＯＰＣ＝０１：ＦＳ（フェッチアンドストア）、前述のＣＡＳ命令などによって指定される、キャッシュラインを他のＣＰＵに渡すことなく処理するためのロック制御つきのストアを表す。
【０１００】
ＷＢ＿ＯＰＣ＝０６：前述のブロックコミットストアを示す。
ＷＢ＿ＯＰＣ＝０７：ＢＬＫ＿ＳＸ＿ＳＴ、２次キャッシュなどへのブロックストアを表す。
【０１０１】
ＷＢ＿ＯＰＣ＝１８：ＯＰ＿ＮＣ＿ＷＴ（オペランドノンキャッシャブルライト）、すなわちノンキャッシャブル域、例えばＩ／Ｏ領域などへの０バイトから１６バイトの書き込みを表す。
【０１０２】
ＷＢ　ＯＰＣ＝１９：ＯＰ　ＮＣ　ＢＷ（オペランドノンキャッシャブルブロックライト）、すなわちノンキャッシャブル域へのブロックストアを表わす。
ＷＢ　ＯＰＣ＝１Ｄ：ＡＳＩ　ＳＸ　ＷＴ，ＳＸ内部のＡＳＩレジスタなどへの書き込み要求を表わす。
【０１０３】
ＷＢ　ＯＰＣ＝１Ｆ：ＡＳＩ　ＳＵ　ＷＴ，ＳＵ内部のＡＳＩレジスタなどへの書き込み要求を表わす。
このようなオペレーションコードのうちで、キャッシュラインの吐き出しを禁止するコードについて更に説明する。一般的にはストア対象のキャッシュラインが１次キャッシュから追い出された時にはＬＩＤはリセットされる。しかしながら前述のフェッチアンドストア（ＦＳ）、例えばＣＡＳ命令などのように、フェッチが完了してからストアが完了するまでキャッシュラインの吐き出しを禁止する必要がある命令が存在する。
【０１０４】
このような命令に対してはＳＴＰ、ＷＢの双方で専用のオペコードが与えられ、必要に応じてその内容がＳＴＰからＷＢに渡される。ＳＴＰでは、前述のようにＳＴＰ＿ＯＰＣ［１］が割り当てられ、この値が“１”の時に、またＷＢではＷＢ＿ＯＰＣが５ビットで“００００１”の時にＦＳであることが示される。ＦＳ命令によってフェッチデータが取り出された時、ＳＴＰ側でＬＩＤと前述のＰＳＴＶ（ポストステータスバリッド）がセットされる。それ以後、ＷＢからキャッシュへのデータのストアが完了するまで、対応するキャッシュラインの吐き出しが禁止される。
【０１０５】
ＷＢから１次キャッシュへのデータの書き込みを完了した時点で、前述のＯＰＨＬＤ＿ＦＬＡＧがリセットされる。ＡＳＩ指定に基づくＳＵ内部のレジスタなどへの書き込みを要求した時点で、前述のＳＵＡＳＩ＿ＦＬＡＧはリセットされ、また２次キャッシュ装置内のレジスタなどへの書き込みを要求した時点で、前述のＳＸＨＬＤ＿ＦＬＡＧがリセットされる。
【０１０６】
さらに２次キャッシュ側からの処理完了応答を待つ必要があるストア要求に対応して、２次キャッシュ側から完了通知が届いた時点で前述のＳＸＥＷＴ　ＦＬＡＧがリセットされる。
【０１０７】
これら４つのフラグが全てリセットされた時、ＷＢにおける処理は完了したと判定され、ＷＢは解放される。そしてＷＢＴＯＦＲＥＥ（ライトバッファツーフリ）信号が生成され、ＷＢにおける管理資源の情報が更新される。この信号は図３のＳＵ２５内部に閉じた信号であり、ＩＵ２０には通知されない。
【０１０８】
以上のように本実施形態では、図３のＳＵ２５の内部に、ストア要求に対応するアドレスとデータとを格納するＳＴＰとＷＢとを設け、ＳＴＰからＷＢ、ＷＢからキャッシュという順序でデータの格納を行うが、メモリシステムの構成の変化に伴ってメモリの応答性能を示すメモリレイテンシーが変化した場合に、ＳＴＰの数は変更せず、ＷＢの数を変更することによって、ＩＵ２０側の回路構成を変更することなく、メモリレイテンシーに応じてストア要求をＳＵ２５に滞留させる数を調整することができ、設計上の自由度が大きく増加する。なおメモリレイテンシーはメモリに要求が出されてからデータ入出力までの時間を示す。
【０１０９】
ＷＢ上に滞留させることができるストア要求はコミットを受け取ったストア要求に限定されているため、コミット前のストア要求、すなわち実行は開始したが、本当に実行してよいか否かが不明であるインフライトに実行中のストア要求の数を増加させたい時には、ＳＴＰの数を増加させればよい。なおＳＴＰの数は命令処理装置（ＩＵ）の性能に応じて増減させることができる。
【０１１０】
図５はストアポート側とライトバッファ側で使用されるフラグを示す図である。前述のように一部のフラグがＳＴＰからＷＢへとそのまま渡されるが、例えばＯＰＨＬＤ＿ＦＬＡＧ，ＬＩＤ，ＢＳＴ＿１ＳＴ，ＢＳＴ＿ＬＡＳＴ，ＯＰＷＡＹ［１：０］，ＡＳＩ［７：０］，ＩＮＨ＿ＳＦＢ、およびＴＨＲＥＡＤ＿ＩＤなどがこれにあたる。
【０１１１】
また一部のフラグについては、ＳＴＰにおけるフラグの状態から生成されてＷＢに送られるが、例えばＳＸＨＬＤ＿ＦＬＡＧ，ＳＸＥＷＴ＿ＦＬＡＧ，ＳＵＡＳＩ＿ＦＬＡＧ，ＮＯＭＲＧ，およびＷＢ＿ＯＰＣ［４：０］などがこれにあたる。
【０１１２】
更にＷＢ上でデータのマージが行われた時に、ビット情報のマージが行われる可能性があるフラグとしては、Ｊ８Ｂ＿ＥＶＮ，Ｊ８Ｂ＿ＯＤＤ，ＬＢＳ＿ＢＡＮＫ［３：０］，ＱＢＭ［３：０］，およびＢＭ［１５：０］などがある。
【０１１３】
図５のライトバッファ側のフラグのうち、○印のついてるフラグはキャッシュまたはメモリへの書き込み処理でのみ、すなわちライトバッファ側でのみ用いられるフラグである。本実施形態のように、ＳＴＰとＷＢとを区別することなく、例えばＳＴＰの数だけを増やして増加するストア要求を処理しようとすると、全てのストアポートについて図５のライトバッファ側でのみ必要な○印のついているフラグも全て管理することが必要となる。これに対して本実施形態では、例えばＷＢ側だけに持てばよいフラグもあることから、全体として制御フラグの数を減少させ、制御論理の規模を減らすことが可能となる。なお図５において本発明に直接的に関係の無いフラグについては説明を省略する。
【０１１４】
次に本実施形態におけるストアインとストアスルーのストア処理方式について、図６を用いて説明する。一般にストアイン方式では、ストアデータが中央処理装置に最も近い階層のキャッシュメモリ、すなわち１次キャッシュメモリに書き込まれるのに対してストアスルー方式ではストア対象領域が１次キャッシュに存在していた場合には１次キャッシュと２次キャッシュの両方にデータの書き込みを行い、また１次キャッシュに存在していなかった場合には２次キャッシュのみにデータの書き込みを行うというような処理が行われる。
【０１１５】
図６においてストアイン方式では、ＳＵ２５内のＳＴＰ２９からＷＢ３５に格納されたストアデータは１次キャッシュ４１に書き込まれる。
これに対してストアスルー方式では、ストア対象領域が１次キャッシュ４１に存在する時には１次キャッシュ４１に同様にデータを書き込むと共に、１次キャッシュにおけるストア対象領域の存在の有無に関係なく２次キャッシュ装置（ＳＸ）４２の内部の２次キャッシュ４３にも、ＷＢ３５に格納されていたデータのストアを行う。
【０１１６】
この時、ＳＸ側にＳＵ２５からのデータを一時的に保持するＷＢ４４が備えられている場合には、ＷＢ３５からＷＢ４４、ＷＢ４４から２次キャッシュ４３の順序でデータの格納が行われ、最終的に２次キャッシュ４３には必ずストアデータの格納が行われる。
【０１１７】
このストアイン方式とストアスルー方式が併用される場合もある。この場合には、前述のＴＬＢの検索結果としてのページの内容による指定や、ＡＳＩによる命令ごとの指定に応じてどちらかの方式が用いられる。
【０１１８】
ＷＢ上でのデータのマージについて、以上のフラグ、および図４を用いて更に説明する。図４のＷＢ＿ＢＯＱフラグ格納部４１にはＷＢ＿ＢＯＱ＿ＶＡＬＩＤと、ＷＢ＿ＢＯＱ＿ＮＯ　ＭＥＲＧＥのフラグがある。このうちＷＢ＿ＢＯＱ＿ＶＡＬＩＤは、ＷＢ＿ＢＯＱのポインタによって指示されるＷＢに有効なデータが格納されていることを意味するフラグであり、このフラグはそのまま信号としてマージチェック部４４に出力される。
【０１１９】
ＷＢ＿ＢＯＱ＿ＮＯ＿ＭＥＲＧＥは、後続のストア要求に対してデータのマージを禁止するフラグである。このフラグは前回ＷＢへのデータの書き込みを行ったＳＴＰ側に情報として残っている。この情報を残すのは▲１▼ＳＴＢ＿ＯＰＣ＝ＳＴ（ＯＰＣ［０］＝１）以外の時、または▲２▼サイドエフェクトのフラグがセットされている時（ＳＴＢ＿ＴＬＢ＿ＳＥ＝１）、または▲３▼ノンキャッシャブル域へのストアである時（ＳＴＢ＿ＴＬＢ＿ＣＰ＝０）のいずれかの場合である。
【０１２０】
ただし２次キャッシュ（ＳＸ）へのブロックストアの要求の場合、すなわちＳＴＢ＿ＯＰＣ［３］＝１、またはＳＴＢ　ＯＰＣ［４］＝１で、ＳＴＢ＿ＯＰＨＬＤ＝０、かつＳＴＢ＿ＢＳＴ＿ＬＡＳＴ＝０の場合には、ＮＯ＿ＭＥＲＧＥフラグはリセットされ、強制的なマージが行われる。
【０１２１】
図４のＷＢ＿ＧＯフラグ格納部４２には、前述のＰＲＥ＿ＷＢ＿ＧＯ＿ＳＴＰのポインタによってあらかじめ選択されたＳＴＰに関して、ＷＢ＿ＧＯのタイミングで使用されるフラグが保持されている。その中にＷＢ＿ＧＯ＿ＮＥＷ＿ＡＬＬＯＣフラグがある。このフラグは先行するストア要求に対するデータのマージを禁止する時にも用いられるフラグであり、このフラグは今回ＷＢへのデータ書き込みを行うことになるＳＴＰに関する情報として保持されている。
【０１２２】
この情報がセットされるのは、▲１▼選択されたＳＴＰの状態がＳＴＢ＿ＯＰＣ＝ＳＴ（ＯＰＣ［０］＝１）以外の時、または▲２▼サイドエフェクトフラグがセットされている時（ＳＴＢ＿ＴＬＢ＿ＳＥ＝１）、または▲３▼ノンキャッシャブル域へのストア要求に対応する時（ＳＴＢ＿ＴＬＢ＿ＣＰ＝０）、または▲４▼命令のキャンセルによってマージの禁止が指示される場合（ＰＯＳＴ＿ＣＡＮ＝１）のいずれかの場合である。
【０１２３】
ただし先頭以外のブロックストアである場合、すなわちＳＴＢ＿ＯＰＣ［３］＝１、またはＳＴＢ＿ＯＰＣ［４］＝１で、ＳＴＢ＿ＢＳＴ　１ＳＴ＝０の時には、ＷＢ＿ＧＯ＿ＮＥＷ＿ＡＬＬＯＣフラグはリセットされ、新しいＷＢの割り当ては禁止されて、強制的なデータのマージが行われる。これは一部のブロックストアの場合、データのマージができないとストアがうまく行われないため、データのマージを可能とするためである。
【０１２４】
ＷＢ＿ＢＯＱ＿ＮＯ＿ＭＥＲＧＥ、またはＷＢ＿ＧＯ＿ＮＥＷ＿ＡＬＬＯＣのいずれかのフラグがセットされている時には、図４のマージ条件確認部４３によって、ＷＢへのデータ書き込みに対してマージを禁止する信号としてのＩＮＨ＿ＭＥＲＧＥ信号がオンとされ、マージチェック部４４に出力される。
【０１２５】
またＷＢ＿ＢＯＱ＿ＡＡＲ格納部４６とＷＢ＿ＧＯ＿ＳＴＡＡＲ格納部４７に格納されているアドレスの比較によって、ＳＴＰからＷＢへ書き込もうとしているデータのアドレスとＷＢ＿ＢＯＱによって指示されるＷＢ内のデータのアドレスが一致しているかどうかが調べられ、その結果はアドレス比較部４８から、アドレスマッチ信号としてマージチェック部４４に出力される。マージチェック部４４はＷＢ＿ＢＯＱ＿ＶＡＬＩＤ，ＩＮＨ＿ＭＥＲＧＥ、およびＡＤＤＲＥＳＳ＿ＭＡＴＣＨの信号に応じてＷＢ＿ＢＯＱによってポイントされるＷＢに書き込みを行うか、次のＷＢ（ＷＢ＿ＢＯＱ＋１）に対する書き込みを行うかを決定する。
【０１２６】
次にデータのエラーに関する処理について説明する。データエラーが検出された場合、それが１ビットエラーであれば１ビットエラーを訂正するエラー処理のキャッシュプロトコルが起動され、エラーが訂正されて動作が継続される。２ビットエラーの場合には、動作の継続が不可能になる場合がある。
【０１２７】
キャッシュ上のある８バイトブロックに２ビットエラーが検出され、そのブロックにデータのストアを実行しようとする時、そのストアが８バイト全体に対して行われるのであれば、ストアデータからＥＣＣが生成され、ストア前の２ビットエラーを持った８バイトブロックの値は無視される。この時はエラーを放置しておいても問題はない。
【０１２８】
キャッシュ上のある８バイトブロックに２ビットエラーが検出され、そのブロックに対してデータのストアを実行しようとする場合、ストアが８バイト全体に対して行われないとエラーが訂正されない。８バイト全体にストアが行われない場合としては、ストアオペランド長が１バイト、２バイト、４バイトのように８バイトに満たない場合があげられる。
【０１２９】
更にこのように部分的なストアが指定されていた場合、ストアオペランド長は８バイトであっても、８バイト全体に対するストアではなく、指定された一部のバイト位置に対するデータのストアである可能性もあり、この場合も８バイト全体にストアを行わないものとして扱うことができる。
【０１３０】
ストア対象領域に対するデータのストア後にもエラーが残る場合には、ストアそのものの実行が中止される。ストアを実行しても結果が改善されないことと、ストア実行後に更にエラーが検出される可能性が残るためである。２ビットエラーが検出された時のストアの実行制御は、各ＷＢに対するＤＩＳ＿ＳＴ＿ＥＶＮ、およびＤＩＳ＿ＳＴ＿ＯＤＤフラグによって制御される。
【０１３１】
前者のフラグがセットされている時にはイーブン側、すなわち１６バイト境界内の前半８バイトに対して、また後者のフラグがセットされている時にはオッド側、すなわち１６バイト境界内の後半８バイトに対するライトイネーブル信号をおとすことによって、データの書き込みが禁止される。
【０１３２】
これらのフラグは、記憶制御ユニットによって行われる前述のパイプラインに対するＳＴ１処理にあたってセットされる。ＳＴ１処理はキャッシュミス、すなわちＬＩＤ＝０となっている全てのＷＢが要求することができる。ＳＴ１の要求によって、ストア対象ブロックがキャッシュ上に排他型で存在するか否かが調べられると共に、ストア対象領域を含む１６バイトの領域に２ビットエラーがあるか否かが検査される。
【０１３３】
エラーがなくキャッシュヒットした場合にはＬＩＤがセットされ、書き込みの順番が回ってきた時点で、すなわちＷＢ＿ＴＯＱのポインタによってポイントされた時点でデータのストアが実行される。
【０１３４】
キャッシュヒットしてもエラーが検出された場合には、ＬＩＤはセットされない。そしてＷＢ＿ＴＯＱに対応するストアリクエストに応じてＳＴ１処理を経て２ビットエラーが検出された場合にのみ、前述の２つのフラグのいずれか、あるいは両方が適宜セットされる。
【０１３５】
ここでこの２つのフラグをセットすることができるＷＢをＷＢ＿ＴＯＱによってポイントされるＷＢに限定するのは、データ化けを防止するためである。このデータ化けについて図７、および図８を用いて説明する。
【０１３６】
図７は５つのＷＢに対するデータのストア順序を示す。ここでアドレスＡのデータの前半８バイトに２ビットのエラーがあり、そこに図７のＷＢ１から８バイトフルストアを実行し、その後にＷＢ３から４バイト部分ストアを行う場合を考える。ＷＢ０およびＷＢ２には、アドレスＡには関係ないストアデータが入っており、ＷＢ＿ＴＯＱはＷＢ０をポイントしているものとする。
【０１３７】
図８はアドレスＡの前半８バイトの内容の変化を説明する図である。最初に前半８バイトに対して２ビットエラーが存在し、この状態でＤＩＳ＿ＳＴ＿ＥＶＮ、またはＯＤＤを設定できるＷＢをＷＢ＿ＴＯＱによってポイントされるＷＢに限定した場合、すなわち図８の左側について考える。
【０１３８】
ＷＢ１のストアについては、８バイトフルストアであるためにエラー検出回路の動作は抑制され、ＷＢ１に対するＳＴ１の処理要求に対してフラグを立てるべき原因となるエラーは通知されてこない。従ってＷＢ１に対してＬＩＤの値がセットされる。
【０１３９】
これと前後して、ＷＢ３に対するＳＴ１の処理の要求が実行される。この時はまだ先のＷＢ１に対するストアが完了していないものとすると、アドレスＡには２ビットエラーが残ったままであり、ＷＢ３に対するＳＴ１の処理要求によって２ビットエラーが検出される。
【０１４０】
そこでＷＢ３がＷＢ＿ＴＯＱによってポイントされるＷＢであるか否かが検査され、この時点ではＷＢ３はこのポインタによってポイントされておらず、従ってＷＢ３に対するフラグはセットされず、またエラーが検出されたことによってＷＢ３に対するＬＩＤのセットも行われない。
【０１４１】
そのうちにＷＢ＿ＴＯＱによってポイントされるＷＢ０に対する処理が完了し、ＷＢ１に対するデータストアの処理が行われる。ＷＢ１に格納されているデータのキャッシュへのストア、すなわち８バイトフルストアが実行され、アドレスＡにおける２ビットエラーは解消される。
【０１４２】
その後ＷＢ３に対するＳＴ１の処理要求が実行され、この時はすでにアドレスＡにおける２ビットエラーが消えており、ＷＢ３に対してＬＩＤがセットされる。やがてＷＢ３がＷＢ＿ＴＯＱによってポイントされ、ＷＢ３に対する処理が完了し、アドレスＡにはＷＢ１とＷＢ３とのデータの書き込み結果が残るという正しい動作が実行される。
【０１４３】
次にＤＩＳ＿ＳＴ＿ＥＶＮまたはＯＤＤのフラグを設定可能なＷＢをＷＢ＿ＴＯＱによってポイントされるＷＢに限定しなかった場合の動作について、図８の右側を用いて説明する。まずＷＢ１に対しては８バイトストアであるため、エラー検出は行われず、ＷＢ１に対するＳＴ１の処理要求に対応してエラーは伝達されてこない。従ってＷＢ１に対するＬＩＤがセットされ、それと前後してＷＢ３に対するＳＴ１要求が処理される。
【０１４４】
この時点ではまだＷＢ１によるデータのストアが完了していないことから、アドレスＡには２ビットエラーが残ったままであり、ＷＢ３に対するＳＴ１の処理要求によって２ビットエラーが検出される。ここでは図８の左側とは反対に、フラグのセットがＷＢ＿ＴＯＱによってポイントされるＷＢに限定されておらず、従ってＷＢ３に対するＤＩＳ＿ＳＴ＿ＥＶＮまたはＯＤＤのフラグがセットされる。
【０１４５】
またエラーが検出されたことによってＷＢ３に対するＬＩＤのセットも行われない。ただし、これ以降のＳＴ１の処理要求では、その要求によって再びエラーが検出され、処理がハングしてしまうことを防止するため、ディーゼルストアフラグがセットされている前半側、または後半側に対するエラー検出は実行されない。
【０１４６】
ＤＩＳ＿ＳＴ＿ＥＶＮまたはＯＤＤのフラグがセットされてからは、ＷＢ１に対する処理が完了しているか否か、すなわちアドレスＡにおける２ビットエラーの存在の有無にかかわらず、キャッシュラインが排他型で存在しさえすれば、ＷＢ３に対するＬＩＤがセットされる。そのうちＷＢ１に対する処理が完了し、ＷＢ１の８バイトフルストアによってアドレスＡにおける２ビットエラーは解消される。
【０１４７】
その後ＷＢ３がＷＢ＿ＴＯＱによってポイントされ、ＷＢ３に対する処理が行われる。しかしながらＷＢ３の内容をキャッシュに書き込もうとしても、ＤＩＳ＿ＳＴ＿ＥＶＮフラグが上がっているためにアドレスＡの内容は更新されず、アドレスＡにはＷＢ１のデータの書き込みの結果だけが残り、ＷＢ３のデータの書き込みが行われないという誤動作が発生する。
【０１４８】
このような誤動作を防止するために、ストアの禁止を決定するＤＩＳ＿ＳＴ＿ＥＶＮまたはＯＤＤのフラグのセットは、ＷＢ＿ＴＯＱによってポイントされるＷＢからのストア要求、すなわち最も古いストア要求に限定される。
【０１４９】
次に前述のストアフェッチバイパス（ＳＦＢ）について更に説明する。先行するストア要求によって処理対象となっている領域を、後続のデータフェッチ要求が処理対象としている場合、ストア要求によってデータがキャッシュに書き込まれてからフェッチ要求を処理しないと、誤ってストア前のデータがフェッチされてしまう。
【０１５０】
これはストア抜けの誤動作であり、このような場合にはストアフェッチインターロック（ＳＦＩ）が生じたものとして、処理対象領域に関連性があって、先行するストア要求の処理が全て完了するのを待ってからフェッチ要求の処理を行う必要がある。そこで処理対象領域が同一の場合には、先行するストアが完了するまでフェッチ要求の処理が待たされることになる。先行するストアがキャッシュミスをおこした場合、ストア命令の完了に時間がかかることから、フェッチ要求の処理も長く待たされることになる。
【０１５１】
このようなことはデータ処理装置の性能低下要因として問題となる場合がある。中央処理装置の浮動小数点レジスタと汎用レジスタとの間でレジスタの内容の移動を行う場合には、一方のレジスタの内容をメモリに書き出し、メモリから読み出したデータを他方のレジスタに格納することによってレジスタの内容の移動が行われる。このような場合、ＳＦＩが生じる可能性が高い。
【０１５２】
また中央処理装置のレジスタが不足した場合に、レジスタの内容をメモリに退避して、不足が解消した時点でメモリからレジスタにデータを書き戻す場合がある。このような場合もＳＦＩが発生する可能性がある。
【０１５３】
このようなことは中央処理装置によって実行されるプログラムの種類によっては頻繁に発生する。こうした場合にＳＦＩによる性能低下を防止するために、ストアフェッチバイパス（ＳＦＢ）、またはストアデータフォワーディング（ＳＤＦ）といった制御を導入する場合がある。
【０１５４】
このような制御によって、例えばストアポート上にあるデータをライトバッファに書き込む前にフェッチ要求にデータを受け渡す、すなわちライトバッファ、またはキャッシュをバイパスして、データのフェッチを行うことが可能となる。ＷＢを導入した本実施形態において、ＳＦＢに対する処理がどのように行われるかについて以下に説明する。
【０１５５】
図９はストアフェッチバイパス制御方式の説明図である。同図の左側はストアポートからのストアフェッチバイパスの制御方法を説明するものであり、ＩＩＤ比較部５１、アドレス比較部５２、レングス比較部５３、スレッド比較部５４、およびフラグ検証部５５の検査結果が全てＯＫであった場合に、ＳＴＰ２９からのＳＦＢが許可される。
【０１５６】
ＩＩＤ比較部５１は、命令実行順序的にストア命令がフェッチ命令に先行していることを確認する。そのために各ＳＴＰに保持されているＩＩＤと、記憶制御ユニットのパイプラインを流れるフェッチ要求のＩＩＤとを比較し、ＳＴＰのＩＩＤの方が古いことが判明した場合に比較結果がＯＫとなる。
【０１５７】
ＳＴＰに対するＲＥＡＤＹフラグがすでにセットされている場合には、ＩＩＤの値にかかわらずＳＴＰのＩＩＤの方が古いと判定される。ＲＥＡＤＹフラグがセットされていることは、先行するフェッチ要求が全て完了していることを意味しているからである。
【０１５８】
アドレス比較部５２は、各ＳＴＰに保持されているストア要求に対応するアドレスと、パイプラインを流れるフェッチ要求に対応するアドレスとを比較し、両者が一致した時に比較結果をＯＫとする。
【０１５９】
レングス比較部５３は、ＳＴＰに保持されているストア要求におけるデータのレングスと、パイプラインを流れるフェッチ要求に対応するデータのレングスとを比較し、両者が一致した時に比較結果をＯＫとする。
【０１６０】
スレッド比較部５４は、ＳＴＰに保持されているストア要求に対応するスレッドのＩＤと、パイプラインを流れるフェッチ要求に対応するスレッドのＩＤを比較し、両者が一致した時比較結果をＯＫとする。
【０１６１】
ここでスレッドＩＤは、ＳＴＰに対するストア要求がどのスレッドから発行されたかを示すフラグである。マルチスレッドをサポートする場合に、異なるスレッド側からストアデータを取り出してしまうことにより生じるトータルストアオーダー（ＴＳＯ）違反を防止するために使用される。また前述のようにスレッドＩＤはＳＴＰとＷＢのそれぞれに保持されている。
【０１６２】
フラグ検証部５５では、前述のＯＰＨＬＤ，ＰＳＴＶ，ＲＳＴＤＶ，ＩＮＨ＿ＳＦＢ、およびＴＬＢ＿ＬＥの検証を行う。ここでＯＰＨＬＤはＳＴＰのデータをキャッシュに書き込むことを指示するフラグであり、このフラグがセットされていない時は、例外が存在したり、ノンキャッシャブルストアの場合に該当するため、ＳＦＢの対象とはならない。
【０１６３】
ＰＳＴＶは、命令ユニットに例外の有無をすでに通知してあることを示すと共に、ストア要求に対応する物理アドレスが判明していることを示すフラグである。ＳＦＢを実行するための条件として物理アドレスの一致も含まれるために、ＰＳＴＶフラグがセットされていることがＳＦＢの実行のために必要である。
【０１６４】
ＲＳＴＤＶは、演算ユニットからストアデータを受け取っていることを意味するフラグである。ＳＴＰからストアフェッチバイパスによってデータを取り出すためには、当然ストアデータが存在する必要があり、ＲＳＴＤＶフラグがセットされていることがＳＦＢを行うために必要である。
【０１６５】
ＩＮＨ＿ＳＦＢがセットされているＳＴＰからのＳＦＢは禁止される。ＳＴＢ＿ＯＰＣ［０］以外がオンとなっているストア要求に対しては、このフラグがセットされる。ＳＦＢを行うためには、このフラグがリセットされていることが必要である。
【０１６６】
ＴＬＢ＿ＬＥは、ストアをリトルエンディアンで行うべきことを示すフラグである。リトルエンディアンでのアクセスは頻度が低いことと、処理を簡略化するためにリトルエンディアンのＳＴＰはＳＦＢ対象に本実施形態では含めていない。従ってＳＦＢを行うために、ＴＬＢ＿ＬＥフラグがリセットされていることが必要である。
【０１６７】
以上の条件を全て満たすＳＴＰがＳＦＢの対象となる。ＳＦＢの対象となるか否かの検査結果は、各ＳＴＰからＳＴＰｎ＿ＳＦＢ＿ＥＮＡＢＬＥ信号としてＳＦＢ制御部５６に集められ、後述するようにＳＦＢ制御部５６によて最終的にＳＦＢの可否が判定される。
【０１６８】
図９の右側に示されるように、ライトバッファ３５からのデータバイパスにおいてはアドレス比較部６１、バイトマーク（ＢＭ）比較部６２、スレッド比較部６３、およびフラグ検証部６４の検査結果が全てＯＫとなる必要がある。
【０１６９】
ＷＢ３５に対してはＩＩＤの比較は必要がない。ＷＢにおかれているデータに関するストア要求はコミットを受け取ったもの、すなわちＳＴＰでＲＥＡＤＹフラグがセットされているものだけに限定されるためである。ＩＩＤの比較を行うまでもなく、フェッチ要求よりＷＢ上のストア要求の方が古いことが明らかである。
【０１７０】
アドレス比較部６１は、ＳＴＰ２９に対するアドレス比較部５２と同様に、ＷＢに保持されているデータに対応するアドレスと、パイプラインを流れるフェッチ要求に対応するアドレスとを比較し、アドレスが一致した時にＯＫとする。
【０１７１】
ＢＭ比較部６２は、ＷＢに保持されているデータのバイトマークと、パイプラインを流れるフェッチ要求のデータのバイトマークとを比較する。フェッチ要求に対するバイトマークがＷＢに対するバイトマークに含まれる場合には、すなわち例えば１バイト単位にデータが存在する位置のビットをオンとするバイトマークでは、フェッチ要求に対応するバイトマークがＷＢに対応するバイトマークに含まれることにより、フェッチ要求で必要とされるデータは、ＷＢに格納されているデータの一部であることが示される。
【０１７２】
バイトマークの比較において１バイト単位のバイトマークを使用すると判定に時間がかかり、不利な場合がある。そのような時には、４バイト単位のバイトマークとしてのクワドバイトマーク（ＱＢＭ）や、８バイト単位のバイトマークを使用することができる。本実施形態では例えばＱＢＭによる比較を行うことにする。
【０１７３】
このように１バイト単位での比較を行わなかった場合には、バイトマークの判定においてＳＦＢの対象として選択されたＳＦＢの候補に対しては、最終的に１バイト単位での比較を行う必要がある。
【０１７４】
例えばＳＦＢ候補の選択にＱＢＭを使用しており、フェッチが４バイト、ストアが１バイトの領域を対象としてＱＢＭが一致した場合を考える。この場合はＱＢＭが一致しているが、全てのフェッチデータはライトバッファ上にないことになり、ＳＦＢは禁止されなければならない。
【０１７５】
そこでこのような場合には、ＳＦＢが誤っていることを示すＳＦＢ＿ＢＯＧＵＳ信号をセットして、次のサイクルで強制的にＳＦＩとしてフェッチリクエストを中止させる必要がある。これによって全バイトマークの比較を行わずに、ＳＦＢ候補の選択を行う場合に生じる可能性がある、誤ったＳＦＢの発生が防止される。
【０１７６】
ここでＳＦＢ候補の選択には１バイト単位での比較を行わず、最終的にＳＦＢ候補に対しては１バイト単位の比較を行う理由は、まずデータを選択するために候補をしぼる動作は速く実行する必要があるのに対して、１バイト単位の比較は実行の確認として少し遅くとも処理が間に合うためである。
【０１７７】
スレッド比較部６３は、ＳＴＰ２９に対するスレッド比較部５４と同様にスレッドＩＤを比較する。
フラグ検証部６４は、ＶＡＬ，ＯＰＨＬＤ、およびＩＮＨ＿ＳＦＢフラグの検査を実行する。ＶＡＬフラグは、ＳＴＰ側のＲＥＡＤＹ、かつＰＳＴＶ、かつＲＳＴＤＶの全てがセットされた状態に相当する。従ってＷＢ側ではＶＡＬを見るだけで、この３つのフラグを検証したことに相当する。
【０１７８】
ＯＰＨＬＤ、およびＩＮＨ＿ＳＦＢの検証についてはＳＴＰ２９に対すると同様である。ＳＴＰ側で必要であったＴＬＢ＿ＬＥフラグの検査は、本実施形態では後述するようにＷＢ上ではデータのアラインを完了しているために、エンディアンに関係なくＳＦＢは可能であり、ＴＬＢ＿ＬＥでＳＦＢを禁止する必要がないため、省略される。
【０１７９】
以上の条件を全て満たすＷＢがＳＦＢの対象となる。この検査結果は、ＷＢｎ＿ＳＦＢ＿ＥＮＡＢＬＥ信号としてＳＦＢ制御部５６に集められ、最終的にＳＦＢの可否が判断される。すなわちＳＦＢ制御部５６では、ＳＴＰ２９とＷＢ３５の全てにおいてＳＦＢ候補がただ１つであり、ＳＦＩ要因が存在しない時に、ＳＦＢを最終的に許可する。
【０１８０】
続いてストアポートからライトバッファへのデータの書き込み、およびライトバッファからキャッシュメモリや主記憶へのデータの書き込みについて更に説明する。ＷＢを同時に複数個解放してＳＴＰからのデータを格納可能とする処理、あるいは命令ユニット（ＩＵ）から同時に複数のストア要求に対するコミットをストアバッファ部に対して通知する処理のいずれかが採用可能なシステムにおいては、複数のＳＴＰのデータが同時に１つ以上のＷＢへの書き込みの対象となる。その場合には、ストア処理の性能を向上させるために、複数のＳＴＰのデータを同時に１つ以上のＷＢに書き込む制御を行う制御部が設けられる。
【０１８１】
図１０は、そのような制御部としての書き込み先ＷＢ選定制御部７０を備えたデータ書き込み方式の説明図である。同図において、同時にｎ個のＳＴＰ内のデータを、同時に１つ以上のＷＢに書き込む場合には、書き込み対象となるＷＢをＷＢ＿ＢＯＱによってポイントされるＷＢから、ＷＢ＿ＢＯＱ＋ｎによってポイントされるＷＢまでの（ｎ＋１）個の範囲に限定することにする。
【０１８２】
同時に３つのＳＴＰのデータを１つ以上のＷＢに書き込む場合には、最も古くストア要求が割り当てられたＳＴＰとしての、ＳＴＰ＿ＴＯＱによってポイントされるＳＴＰと、ＳＴＰ＿ＴＯＱ＋１、およびＳＴＰ　ＴＯＱ＋２によってポイントされる２つのＳＴＰとの合計３個のＳＴＰ内のデータが書き込み対象となるが、図１０ではこの３つのＳＴＰはＳＴＰ２、ＳＴＰ３、およびＳＴＰ４とする。
【０１８３】
これら３つのＳＴＰと、図４のＷＢ＿ＢＯＱフラグ格納部４１から取り出されたマージの可否を示すフラグを用いて、前後のストア要求に対するデータのマージの可否がフラグ条件から判定される。
【０１８４】
また前後のストア要求に対応するアドレスの一致がアドレス比較部４８によって判定され、これらの条件から前後のストア要求に対するデータのマージが可能である場合にはマージイネーブルとなり、書き込み先ＷＢ選定制御部７０に対して、例えばＷＢ＿ＢＯＱによってポイントされるＷＢ内のデータと、ＳＴＰ＿ＴＯＱによってポイントされるＳＴＰ、ここではＳＴＰ２内のデータとをマージするか否かの信号が送られる。
【０１８５】
書き込み先ＷＢ選定制御部７０によって、どのＳＴＰ内のデータがマージ対象となるかが判定され、その判定結果はデータが書き込まれるべき各ＷＢに送られるクロックイネーブル信号ＣＥ＿ＷＢ０〜４として送られる。またデータ選択信号が各ＷＢに送られ、ＳＴＰ２、ＳＴＰ３およびＳＴＰ４のデータを各ＷＢが取り込むかどうかの判定に利用される。
【０１８６】
図１０では３個のＳＴＰ、すなわちＳＴＰ２〜ＳＴＰ４内のデータを同時に書き込む対象となるＷＢはＷＢ１〜ＷＢ４の４個となるが、これは書き込み先候補のＷＢであり、実際にデータの書き込み先となったＷＢはＷＢ＿ＢＯＱによってポイントされるＷＢ１と、その次のＷＢ２との２個である。ＷＢ１にはＳＴＰ２とＳＴＰ３とのデータがマージして書き込まれ、またＷＢ２にはＳＴＰ４のデータが書き込まれる。これらのデータが例えばすべて８バイトとすると、ＷＢ１に既に格納されていたデータには例えばＳＴＰ２からのデータが上書きされ、ＷＢ１にはＳＴＰ２とＳＴＰ３からのデータが残ることになる。
【０１８７】
前述のように、ストア要求に対応してストア対象のキャッシュラインがキャッシュメモリ上に存在するか否かを調べるための記憶制御ユニットのパイプライン動作として、ＳＴ１がある。ＳＴ１の動作の結果、ストア対象がキャッシュ上に存在することが判明した場合には、前述のようにＬＩＤがセットされる。ＬＩＤがセットされているＷＢ側では、ストアデータを実際にキャッシュメモリに書き込むパイプライン動作としてのＳＴ２のリクエストを行うことが可能となる。
【０１８８】
本実施形態では、ＳＴＰからＷＢに対してＬＩＤを受け渡すにあたり、フラグのセットやリセットにおけるエラーなどを防止するために、ＳＴ１のリクエストはＷＢ側からだけ出される。これによってストア要求のうちでＳＴ１のリクエストが可能なストア要求は既にコミットされたものだけに限定され、全体的な処理速度が向上する。
【０１８９】
またＷＢ側でも、データのマージ対象となり得るＷＢ＿ＢＯＱによってポイントされるＷＢに対しては、ＳＴ１のリクエストの要求を出すことが禁止される。図１１はＷＢ側でのパイプラインリクエスト要求と、各ＷＢとの関係の説明図である。同図において、前述のようにデータマージの対象となる可能性があるＷＢ＿ＢＯＱによってポイントされるＷＢ４からは、ＳＴ１のリクエストが禁止される。
【０１９０】
これはＷＢ側でＳＴ１に関する動作を実行するにあたり、例えばＬＩＤがクリアされる条件が発生している（例えばキャッシュラインの追い出しがあった）時に、ＳＴＰからＷＢへのデータの書き込みでデータのマージの必要性がおこり、ＷＢ上のＬＩＤをセットしようとしてＬＩＤの値にエラーが生ずることを防止するためである。
【０１９１】
また図１１にあるように、ＷＢ＿ＢＯＱによってポイントされるＷＢ４からは、キャッシュメモリへの書き込み動作のパイプラインとしてのＳＴ２をＳＵ側に要求することも禁止されている。
【０１９２】
例えばＷＢへのＳＴＰからのデータの書き込み時点で、ＷＢからキャッシュメモリ、または主記憶へのデータの書き込みが発生すると、新しくＷＢに書き込まれたデータがキャッシュメモリ、または主記憶の内容に反映されずに、ＷＢからのストア処理が完了してしまう可能性がある。
【０１９３】
この時ＷＢにＳＴＰからデータが書き込まれようとしていたストアに関しては、ストアデータが失われる現象が発生するため、そのような問題点を回避するために、ＷＢ＿ＢＯＱによってポイントされるＷＢからのリクエストとしての主記憶への書き込み動作の要求も禁止される。
【０１９４】
しかしながら、このようにＷＢ＿ＢＯＱによってポイントされるＷＢからキャッシュメモリ、または主記憶へのデータの書き込みのためのパイプライン動作の要求が禁止されることから、ＷＢ＿ＢＯＱの更新が行われないと、そのＷＢからキャッシュメモリ、または主記憶へのデータの書き込みがいつまでたっても実行されないという問題点が生ずる。
【０１９５】
そのため本実施形態においては、必要に応じてこのＷＢ＿ＢＯＱの値の強制的な更新を行うことによって、それまでＷＢ＿ＢＯＱによってポイントされていたＷＢからキャッシュメモリ、または主記憶へのデータの書き込みを実施可能とする。
【０１９６】
このようなライトバッファボトムオブキュー（ＷＢ＿ＢＯＱ）ポインタの強制的な更新について図１２、および図１３を用いて説明する。図１２は実質的に図１１と同様の各ＷＢのステータスなどの説明図である。
【０１９７】
同図において、ＷＢ０のステータスはインバリッド、すなわち有効なデータを保持していない状態であり、これに対してＷＢ１〜ＷＢ４のステータスはバリッドである。またＷＢ１はＷＢ＿ＴＯＱによってポイントされ、ＷＢ４はＷＢ＿ＢＯＱによってポイントされている。従ってＷＢ４からは、ＳＵ側のパイプラインにＳＴ１とＳＴ２の動作を要求することが禁止される。
【０１９８】
図１３は、図１２の状態からＷＢ＿ＢＯＱの値が強制的にインクリメントされた時の各ライトバッファの状況を示す。ＷＢ＿ＢＯＱが更新されることによって、このポインタはＷＢ０をポイントすることになる。ここではこのポインタの値が強制的に更新されるだけであり、ＷＢ０のステータスがインバリッドであることに変わりはない。そしてＷＢ０からは、ＳＵ側に対するＳＴ１およびＳＴ２のパイプライン動作の要求は禁止される。これに対して、今までＷＢ＿ＢＯＱによってポイントされていたＷＢ４からのＳＵへのパイプライン動作の要求は許可される。
【０１９９】
このようにＷＢ＿ＢＯＱの値を強制的に更新するケースとしては、第１に全てのストアポートが空になっている場合がある。このような場合はＷＢ＿ＢＯＱによってポイントされるＷＢのデータに対して後続するストア要求とのデータのマージが行われる可能性がないため、そのデータは速やかにキャッシュメモリ、または、主記憶にストアされるべきことになる。
【０２００】
このような状態は、各ストアポートのＶＡＬＩＤを示す信号としてのＳＩＤが全てクリアされていることを検出することによって判定される。また各ストアポートの中にＶＡＬＩＤであるＳＴＰが存在したとしても、ＷＢへの書き込み対象のＳＴＰが存在しない時も対象となる。この状態は、各ストアポートに対するＲＥＡＤＹフラグが全てオフとなっていることを検出することによって判定される。
【０２０１】
ＷＢ＿ＢＯＱを強制的に更新する第２の場合として、前後のストア要求のストアデータのマージを禁止すべき場合がある。このような場合には、ＷＢ＿ＢＯＱの値を強制的に更新することによって、先行するストアのデータが格納されたＷＢをＷＢ＿ＢＯＱからポイントされた状態からはずし、マージの対象外とする。
【０２０２】
すなわちＷＢ＿ＢＯＱにマージ禁止のフラグが上がっている場合にも、ＷＢ＿ＢＯＱの強制的な更新を行う。これによってＷＢ＿ＢＯＱによってポイントされていたＷＢからキャッシュメモリ、または主記憶へのデータの書き込みが速やかに実施される。
【０２０３】
しかしながら第２の場合にＷＢ＿ＢＯＱの更新を行う時に、同じタイミングでＳＴＰ側からＷＢへのデータの書き込み、すなわちＷＢ＿ＢＯＱ＋１によってポイントされるＷＢへのデータの書き込みが発生した場合には、ＷＢ＿ＢＯＱの強制的な更新は行われない。これは次のＷＢへの書き込みによって自動的にＷＢ＿ＢＯＱの更新が行われるためであり、この時のこの値の強制的な更新動作を起動すると、結果的に誤動作が生じる可能性があるためである。
【０２０４】
ボトムオブキューのポインタを強制的に更新すべき第３の場合として、このポインタによってポイントされるＷＢの内容がキャッシュメモリ、または主記憶に書き込まれないと、処理がハングしてしまう場合がある。
【０２０５】
このように処理がハングするケースの１つ目が、ＷＢ＿ＢＯＱによってポイントされるＷＢ内のデータを使用する後続のロード命令がデータがストアされないことによって実行不可能となる場合である。このようなケースは、古いロード命令がＷＢ＿ＢＯＱの値を原因として実行不可能となったことを検出して、そのハング要因として判定される。
【０２０６】
この場合にはＷＢ＿ＢＯＱの値を更新し、それまでこのポインタによってポイントされていたＷＢからキャッシュメモリ、または主記憶へのデータの書き込みを行い、そのＷＢを解放することによって古いロード命令を実行することが可能となる。
【０２０７】
処理がハングするケースとしての２つ目は、他の系のＣＰＵからの吐き出し要求を受け付けているキャッシュラインが、ＷＢ＿ＢＯＱによってポイントされるＷＢ内のデータのストアの対象となっている場合で、かつこのストア要求がストア完了までキャッシュラインの吐き出しを禁止する要求である場合である。このようにストア完了までキャッシュラインの吐き出しを禁止するストア要求は、前述のＷＢ＿ＯＰＣ＝ＦＳ（フェッチアンドストア）に対応するストア要求であり、前述のＣＡＳ命令などがこれに相当する。
【０２０８】
このような場合には、他の系のＣＰＵからの吐き出し要求に応じてＳＵパイプラインで実行されるキャッシュラインの吐き出し動作に対しては、ＷＢ＿ＯＰＣ＝ＦＳをオペコードとして持つＷＢによりキャッシュラインの吐き出しが禁止されることから処理は中断され、リトライが必要となる。この中断の回数を計測し、ある一定回数以上に達したらＷＢ＿ＢＯＱの値を強制的に更新することによって、そのＷＢからキャッシュメモリ、または主記憶への書き込み動作が実施され、そのＷＢが解放されてキャッシュラインの吐き出し動作が実行可能となる。
【０２０９】
以上に述べたＷＢ＿ＢＯＱの強制的な更新は、場合によっては逆に不適切な結果を生ずる。このような場合として、ＳＴＰからＷＢへのブロックストア、すなわち６４バイトデータの一括ストアを行う場合がある。
【０２１０】
図１４はこのブロックストアの説明図である。このブロックストアは命令コード、および前述のＡＳＩによって指定される命令であり、連続する６４バイトのデータの書き込みを行うための命令である。図１４ではこの６４バイトは８バイトずつ、ＳＴＰ１〜ＳＴＰ８に連続して格納されている。
【０２１１】
命令ユニットは、このブロックストア命令の処理にあたって、本来１つの命令からなる６４バイトストアを８つの命令からなる８バイトストアに分解して、ＳＵにストア要求として与える。ＳＵでは、８つの命令に分解された８バイトストアをＷＢ上でマージするため、４つのＷＢに割り当てる。
【０２１２】
図１４では、例えば最初のＳＴＰ１とＳＴＰ２に格納されているデータがマージされて、ＷＢ０に格納される。以下同様に、２つの連続するＳＴＰに格納されているデータがそれぞれマージされて、ＷＢ１〜ＷＢ３に格納される。
【０２１３】
その後ＷＢから、例えば主記憶へのデータの書き込みにあたっては、書き込みデータが一旦、１６バイトの書き込みデータレジスタ７６に移され、このレジスタを介して主記憶７７に書き込まれる。なおこのデータレジスタは主記憶へのデータ書き込み時にだけ使用され、キャッシュメモリへの書き込み時には使用されない。
【０２１４】
しかしながらこの場合、前述のＷＢ＿ＢＯＱの強制的な更新動作が行われると、ＳＴＰからＷＢへの書き込みに際して、８バイトずつのデータがＷＢ上でマージされず、例えば次のＷＢの前半８バイトだけに入ったり、後半８バイトだけに入ったりする状態になり、連続した６４バイトが連続した４つのＷＢに書き込まれるという動作を実現することができなくなる。
【０２１５】
そしてブロックストアのデータ存在パターンを複雑化し、主記憶７７へのデータ書き込みにあたっても書き込みデータレジスタ７６によるデータ選択操作が複雑となり、またブロックストア命令が必要とする、ここでは４個のＷＢ以上のＷＢを使用することにより、ＷＢ資源が枯渇したり、処理効率が落ちたりすることになる。
【０２１６】
そこでブロックストアのデータをＷＢに書き込んでいる間は、ＷＢ＿ＢＯＱの強制的な更新動作をおさえる制御が行われる。この制御は、先頭の８バイト、すなわちＢＳＴ＿１ＳＴ以外の部分のデータのＷＢへの書き込みにあたって、前述のＷＢ＿ＧＯ＿ＮＥＷ＿ＡＬＬＯＣフラグをリセットすることによって実現される。
【０２１７】
この制御によってＢＳＴ＿１ＳＴのみに対して新しいＷＢが割り当てられ、他のデータはマージが許可された条件でアドレスに対応して順次各ＷＢに格納される。なおアドレスは基本的にはデータ１バイト単位につけることができるが、本実施形態では８バイト単位につけられるものとする。
【０２１８】
図１５〜図１７は、マルチスレッド方式を採用するデータ処理装置におけるライトバッファ適用方式の説明図である。図１５は時間的にスレッドが切り換えられるバーチカルマルチスレッド（ＶＭＴ）方式の説明図である。ＶＭＴ方式では、スレッドの切り換え時に発生するキャンセルによってセットされる、前述のＰＯＳＴ＿ＣＡＮフラグによって、スレッド間のストアデータのマージを防止し、正常な動作を可能とする。すなわち図１５において、例えば図２におけると同様にストアバッファ部１３とライトバッファ部１４とはそれぞれ１つだけ備えられる。なおスレッド切り換え時には、基本的にはＷＢは解放されずにストアの完了までデータが保持されるが、ストアポートと、前述のＳＦＢのためにアドレスと命令が保持されているフェッチポートとはすべて解放され、新しいスレッド側で直ちに使用可能となる。
【０２１９】
図１６は同時に２つのスレッドが動作可能なホリゾンタルマルチスレッド（ＨＭＴ）、またはシマルテーニアスマルチスレッド（ＳＭＴ）と呼ばれるマルチスレッド方式における第１の場合の方式の説明図である。同図においては、２つのスレッドにそれぞれ対応するストアバッファ部１３ａ，１３ｂによってライトバッファ部１４が共有される形式となっている。
【０２２０】
このためＰＯＳＴ＿ＣＡＮフラグを用いたスレッド間のマージの制御は不可能であり、その代わりに図４のＷＢ＿ＢＯＱフラグ格納部４１とＷＢ＿ＧＯフラグ格納部４２とにそれぞれスレッドのＩＤを持ち、この２つのＩＤの一致の判断をマージ条件確認部４３によるＩＮＨ＿ＭＥＲＧＥ信号の出力の制御条件として追加する。スレッドＩＤが一致していない時には、ＩＮＨ＿ＭＥＲＧＥ信号をセットすることにより、異なるスレッド間のデータのマージが防止される。
【０２２１】
図１７はＳＭＴ、またはＨＭＴ方式における第２の場合の説明図である。この場合には、それぞれのスレッドに対応してストアバッファ部１３とライトバッファ部１４とが専用に備えられ、特別な制御の必要はなく、以前の説明と全く同様に動作が行われる。
【０２２２】
図１８は本実施形態におけるデータアライン方式の説明図である。本実施形態では、ライトバッファに格納された時点で、ストアデータはメモリイメージにアライン済み、すなわち主記憶などのメモリ格納時と同一の形式になっているものとする。このようにすることで、ＷＢから１次キャッシュに書き込まれるデータの、データパスによるパスディレイの軽減が実現される。このためにアライン回路が、ＷＢと１次キャッシュの間から、演算ユニットとストアバッファ部の間、およびストアバッファ部とライトバッファ部との間に移動される。
【０２２３】
図１８に示されるように、ＥＵから出力されたストアデータに対して、ストアバッファ部との間に配置されたアライン回路により、ストア要求に対するオペランドの長さを示すレングス情報と、ＥＵから出力されるストアデータがデータパスの右より、あるいは左よりのいずれにのってきているかを示すアラインコードを使用して、データアラインが行われる。
【０２２４】
この２つの情報に従って、ストアデータを（８÷ＬＥＮＧＴＨ）個だけコピーして、８バイトストアバッファ内に配置してデータのアラインを完了する。例えばレングスが２バイトである場合には、データをコピーして４個の２バイトデータを８バイトストアバッファ内に並べて、アラインを完了する。これはアライン回路を簡単にするためである。
【０２２５】
図１８においてストアバッファ部、すなわちストアポートから出力されたストアデータに対して、ライトバッファ部との間に配置されたアライン回路によりエンディアンによるアラインが行われる。前述のように、ストアポートから出力されるデータにおいては、コピーされた値が各バイト位置に入っているため、エンディアンの指示によってそのままライトバッファに書き込むか、データの先頭から末尾までをそっくりひっくり返して書き込むかすれば、エンディアンによるアラインが完了する。
【０２２６】
アラインの方式は上述の方法に限定されず、どのようなデータアライン方式を採用してもよいが、いずれにせよライトバッファに書き込まれたデータはメモリイメージに展開済みであるものとする。これによってライトバッファ上でデータのマージを行うのに便利となる。
【０２２７】
また本実施形態では、このようにアライン回路を２つに分割すると共に、演算ユニットとストアバッファ部の間がアライン回路を含んで経路が短くなるように配置し、ライトバッファ部は例えばキャッシュメモリの近くに配置し、ストアバッファ部とライトバッファ部との間の経路はアライン回路を含んで距離を長くして配置するというように実装上の配置が行われる。
【０２２８】
図１９は本実施形態においてライトバッファを複数階層備える記憶制御ユニットの例の説明図である。同図においては、図２におけると同様に、命令ユニット１０からの要求に応じて、演算ユニット１１からのデータはストアバッファ部１３内のストアポートに書き込まれ、次にストアバッファ部１３から第１番目の階層のライトバッファに書き込まれ、第１番目の階層のライトバッファから第２番目の階層のライトバッファへ書き込まれ、以下同様に第（Ｎ−１）番目の階層のライトバッファから第Ｎ番目の階層のライトバッファへ書き込まれ、最終的に第Ｎ番目の階層のライトバッファから１次キャッシュ、または主記憶などのメモリへの書き込みが行われる。
【０２２９】
図１９において、ＥＵ１１とストアバッファ部１３との間、および最終階層の第Ｎ番目のライトバッファから１次キャッシュへのデータの書き込みの制御は、以上の説明と全く同様に実行される。例えばストアバッファ部１３内の全てのストアポート全体の幅と、全てのライトバッファ部のライトバッファの全体の幅とを同じにすることによって、同じ時間内にストアポートと各階層のライトバッファとに対する処理が可能となり、全体として滞留可能なストア要求の数を増大させることができる。
【０２３０】
図１９におけるデータの書き込み処理について更に説明する。図１９において、この書き込み処理はＥＵ１１からストアバッファ部１３内のストアポートへの書き込み処理と、ストアバッファ部１３内のストアポートから第１階層ライトバッファ部１４１　内のライトバッファへの書き込み処理と、各階層のライトバッファ部内のライトバッファ相互間で行われる書き込み処理と、第Ｎ階層ライトバッファ部１４ｎ　内のライトバッファから１次キャッシュ１５への書き込み処理とに分けられる。
【０２３１】
これらの処理のうち、ＥＵ１１とストアバッファ部１３との間の処理は図２におけると同様であり、また第Ｎ階層のライトバッファ部１４ｎ　と１次キャッシュ１５との間の処理は図２におけるライトバッファ部１４から１次キャッシュ１５へのデータ書き込み処理と同様である。次にストアバッファ部１３から第１階層ライトバッファ部１４１　へのデータ書き込み処理、および各階層のライトバッファ部の間でのデータ書き込み処理は、図２のストアバッファ部１３からライトバッファ部１４へのデータ書き込み処理と同様である。
【０２３２】
このように、図１９においてストアバッファ部１３から第１階層ライトバッファ部１４１　へのデータ書き込み処理は、図２におけるストアバッファ部１３からライトバッファ部１４へのデータ書き込み処理と全く同一することができるが、各階層のライトバッファ部の間でのデータ書き込み処理は、図２のストアバッファ部１３からライトバッファ部１４へのデータ書き込み処理の一部を変更して行うこともできる。
【０２３３】
例えば各階層のライトバッファ部内のライトバッファのデータ幅を同一にする場合には、各階層のライトバッファ部内のライトバッファの間でデータのマージが発生することはありえない。そのため各階層のライトバッファ部の間では、データのマージ機能を削除することができる。この場合には、例えば図１０で説明した書き込み先ＷＢ選定制御部に対する入力信号の制御などを簡単化することができる。簡単化可能な回路は、アドレスマッチを見る回路や、ＢＯＱの更新を行うための詳細な制御を行う回路などである。
【０２３４】
あるいは各階層のライトバッファ部の間で、その内部のライトバッファのデータ幅を変化させることも可能である。そのような場合にはデータ書き込み元のＷＢのデータ幅よりも、書き込み先のＷＢのデータ幅の方を大きくすると、ストアデータのマージの可能性が発生する。そうした部分の処理についてはマージ処理機能を追加し、そのようなマージ発生の可能性がない場合にはマージ処理機能を削除することが可能である。
【０２３５】
図１９のように、ストアバッファ部と１次キャッシュメモリとの間に複数階層のライトバッファ部が存在する場合には、ストアデータが格納されているライトバッファを持つライトバッファ部から、１次キャッシュに近いライトバッファ部内のライトバッファに書き込みを行う場合に、途中のライトバッファ部のライトバッファが全て空であれば、その階層を介さずに、先行するストアを追い越さない範囲で最もキャッシュメモリに近い階層のライトバッファ部内のライトバッファへの書き込みを行うことによって、複数階層のライトバッファ部を介したデータの伝搬にかかる時間を短縮することが可能となる。
【０２３６】
図２０はこのような動作の説明図である。同図に示すように、書き込み元となるＷＢから見て、１次キャッシュ１５に近い側でストアデータを保持するライトバッファ部のうち、最も１次キャッシュ１５から遠い階層のライトバッファ部を選択する機能を設け、また書き込み先となるＷＢから選択された階層のＷＢにデータ書き込みを行う機能を設ける。これによって先行するストアを追い越すことなく、最もキャッシュメモリに近い階層のＷＢへのデータの書き込みが可能となる。
【０２３７】
書き込み先のライトバッファ部の選択にあたっては、各階層のライトバッファ部内の各ライトバッファのバリッド信号の論理和出力が“１”となる時にはその階層にストアデータを保持するＷＢが存在すること、論理和出力が“０”となる時にはその階層を飛ばして書き込みができることが分かる。また各階層における各ＷＢが全てストアデータを保持することを示すＷＢ＿ＦＵＬＬ信号を調べることによって、その階層にはデータの書き込みができないことが分かる。
【０２３８】
ＷＢ＿ＦＵＬＬ信号が“１”となる階層が存在しない時には前述と同様にしてデータを書き込むべきライトバッファ部の選択が行われるが、ＷＢ＿ＦＵＬＬ信号が１となる階層が存在する場合には、その階層より１つ前のライトバッファ部を選択してデータの書き込みを行うことになる。選択された階層に対するクロックイネーブル信号を“１”として、データの書き込みが実施される。
【０２３９】
（付記１）命令処理装置から送られるストア要求に対応して、演算ユニットから送られ、該ストア要求によってキャッシュメモリまたはメモリに書き込まれるべきストアデータを保持するストアポートを備える記憶制御装置において、
該ストアポートと前記キャッシュメモリまたはメモリとの間で、前記ストアデータを該ストアポートから受け取り、一時的に格納するデータ格納手段と、
該ストアポートから該データ格納手段へのストアデータの書き込みを制御するデータ書き込み制御手段とを備えることを特徴とする記憶制御装置。
【０２４０】
（付記２）前記データ格納手段が、前記命令処理装置が前記ストア要求の実行をコミットした後に、前記ストアポートからのストアデータを受け取ることを特徴とする付記１記載の記憶制御装置。
【０２４１】
（付記３）前記データ格納手段が、前記ストアポートから受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記データ書き込み制御手段が、前記命令処理装置が複数（ｎ個）のストア要求の実行を同時にコミットした時、該複数のライトバッファのうちで最も新しくデータが格納されたライトバッファから、データが格納されるべき順位でｎ個先のライトバッファまでの範囲のライトバッファに限定して、限定されたライトバッファへのデータ書き込みを制御することを特徴とする付記２記載の記憶制御装置。
【０２４２】
（付記４）前記ストアポート側に、前記命令処理装置から送られるストア要求のキャンセル信号を受け取った時、該ストアポートに対して前記データ格納手段へのデータの書き込みを指示するフラグをリセットする手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２４３】
（付記５）前記記憶制御装置において、
前記データ格納手段からキャッシュメモリまたはメモリへのデータの書き込みを、前記命令処理装置とは独立して制御するメモリ書き込み制御手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２４４】
（付記６）前記データ格納手段が、前記ストアポートから受け取ったストアデータをそれぞれ格納する１つ以上のライトバッファを備えると共に、
前記記憶制御装置において、該ストアデータが該１つ以上のライトバッファのいずれかに格納された時点でストアポートを解放する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２４５】
（付記７）前記データ格納手段が、前記ストアポートから受け取ったストアデータをそれぞれ格納するライトバッファを、前記キャッシュメモリまたはメモリの応答性能に応じた個数だけ備えることを特徴とする付記１記載の記憶制御装置。
【０２４６】
（付記８）前記記憶制御装置において、前記ストアデータを保持するストアポートを、前記命令処理装置の性能に応じた個数だけ備えることを特徴とする付記１記載の記憶制御装置。
【０２４７】
（付記９）前記データ書き込み制御手段が、前記ストアデータがストアポートに保持されている間に前記ストア要求がキャッシュヒットしていることが判明した時、該キャッシュヒットを示すフラグを前記データ格納手段に渡すことを特徴とする付記１記載の記憶制御装置。
【０２４８】
（付記１０）前記データ書き込み制御手段が、前記ストアデータがストアポートに保持されている間に前記ストア要求が該ストア要求の完了までに該ストア要求に対するキャッシュラインの吐き出しを禁止するストア要求であることが判明した時、該キャッシュライン吐き出し禁止を示すフラグを前記データ格納手段に渡すことを特徴とする付記１記載の記憶制御装置。
【０２４９】
（付記１１）前記ストアポート側と、前記データ格納手段側とで、同一数のストア要求を処理するために必要な制御フラグをそれぞれ必要なだけ保持することを特徴とする付記１記載の記憶制御装置。
【０２５０】
（付記１２）前記キャッシュメモリが複数の階層によって構成されると共に、ストアデータを該複数階層の中で前記記憶制御装置を含むデータ処理装置の中央処理装置に最も近い階層に必ず書き込むべきストアイン方式が採用されている時、
該記憶制御装置が、該最も近い階層、または最も近い階層以外の階層にデータを書き込むべき時、前記データ格納手段から該書き込むべき階層へのデータの書き込みを制御する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２５１】
（付記１３）前記キャッシュメモリが複数の階層によって構成されると共に、ストアデータを該複数階層の中で前記記憶制御装置を含むデータ処理装置の中央処理装置に最も近い階層には必要に応じて書き込み、該最も近い階層より次に近い階層には必ず書き込むべきストアスルー方式が採用されている時、
該記憶制御装置が、該最も近い階層または次に近い階層にデータを書き込むべき時、前記データ格納手段から該書き込むべき階層へのデータの書き込みを制御する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２５２】
（付記１４）前記キャッシュメモリが複数の階層によって構成されると共に、キャッシュメモリへのデータ格納方式としてストアイン方式とストアスルー方式とが併用されている時、
前記記憶制御装置が、キャッシュメモリのいずれの階層にデータを書き込むべき時にも、前記データ格納手段から該書き込むべき階層へのデータの書き込みを制御する手段を更に備えること特徴とする付記１記載の記憶制御装置。
【０２５３】
（付記１５）前記記憶制御装置において、
先行するストア要求に対応してデータ格納手段に格納されているデータに対して、次のストア要求に対応するストアポートからのデータのマージを該データ格納手段上で実行するデータマージを、前記データ書き込み制御手段に対して許可する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２５４】
（付記１６）前記データ格納手段が、前記ストアポートから受け取ったストアデータをそれぞれ格納する１つ以上のライトバッファを備えると共に、
該ライトバッファが、ストアポートからのデータのマージを可能とするデータ幅であって、該ストアポートの持つデータ幅より大きいデータ幅を有することを特徴とする付記１５記載の記憶制御装置。
【０２５５】
（付記１７）前記記憶制御装置において、
先行するストア要求に対応してデータ格納手段に格納されているデータに対して、次のストア要求に対応するストアポートからのデータのマージを該データ格納手段上で実行するデータマージを、該先行するストア要求と次のストア要求との種類に応じて、前記データ書き込み制御手段に対して禁止する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２５６】
（付記１８）前記記憶制御装置において、
先行するストア要求に対応してデータ格納手段に格納されているデータに対して、次のストア要求に対応するストアポートからのデータのマージを該データ格納手段上で実行するデータマージを、前記データ書き込み制御手段に対して強制的に禁止する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２５７】
（付記１９）前記データマージが強制的に禁止された時においても、前記データ書き込み制御手段が、ストア命令の種類に応じて前記データ格納手段上でデータマージを実行することを特徴とする付記１８記載の記憶制御装置。
【０２５８】
（付記２０）前記記憶制御装置において、
前記命令処理装置から前記ストア要求のキャンセルが通知された時、
先行するストア要求に対応してデータ格納手段によって格納されているデータに対して、次のストア要求に対応するストアポートからのデータのマージをデータ格納手段上で実行することを、前記データ書き込み制御手段に対して禁止する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２５９】
（付記２１）前記記憶制御装置において、
前記ストアデータを、外部からのフェッチ要求に対応して、前記データ格納手段に格納する前に前記ストアポートから外部に与えるストアデータバイパスフェッチを前記ストアポートに対して許可するか否かを判定する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２６０】
（付記２２）前記ストアデータバイパスフェッチの許可の判定において、ストア要求とフェッチ要求とのそれぞれに対するアドレスとオペランド長の一致を検証することにより、バイパス許可候補としてのストアデータを選択することを特徴とする付記２１記載の記憶制御装置。
【０２６１】
（付記２３）前記記憶制御装置において、
前記ストアデータを、外部からのフェッチ要求に対応して、前記キャッシュメモリまたはメモリに書き込む前に前記データ格納手段から外部に与えるストアデータバイパスフェッチを、該データ格納手段に対して許可するか否かを判定する手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２６２】
（付記２４）前記ストアデータバイパスフェッチの許可の判定において、ストア要求とフェッチ要求とのそれぞれに対するデータの存在位置を示すバイトマークを複数バイト単位で比較すると共に、命令実行順序を示す識別子の比較を省略して、バイパス許可候補としてのストアデータを選択することを特徴とする付記２３記載の記憶制御装置。
【０２６３】
（付記２５）前記バイパス許可候補として選択されたデータのバイパスフェッチを実行するにあたり、前記バイトマークを１バイト単位で比較し、バイパスフェッチの是非について最終的に判定することを特徴とする付記２４記載の記憶制御装置。
【０２６４】
（付記２６）前記記憶制御装置において、
前記１バイト単位のバイトマークの比較においてバイパスフェッチ不可と判定された時、前記データ格納手段に対してバイパスフェッチ禁止を指示する手段を更に備えることを特徴とする付記２５記載の記憶制御装置。
【０２６５】
（付記２７）前記記憶制御装置が、マルススレッド動作可能な中央処理装置によって制御されるデータ処理装置を構成することを特徴とする付記１記載の記憶制御装置。
【０２６６】
（付記２８）前記マルチスレッドの複数のスレッドの間で、前記ストアポートとデータ格納手段とを共有することを特徴とする付記２７記載の記憶制御装置。
（付記２９）前記記憶制御装置において前記ストアポートを複数個備え、
前記マルチスレッドの複数のスレッドの間で、前記データ格納手段を共有し、前記ストアポートを排他的に各スレッドが保持することを特徴とする付記２７記載の記憶制御装置。
【０２６７】
（付記３０）前記記憶制御装置において前記ストアポートとデータ格納手段とをそれぞれ複数個備え、
前記マルチスレッドの複数のスレッドの間で、前記ストアポートとデータ格納手段とをそれぞれ排他的に各スレッドが保持することを特徴とする付記２７記載の記憶制御装置。
【０２６８】
（付記３１）スレッドの切り替え時に実行が開始されたが完了していないインフライトなストア要求のキャンセルに対して、前記ストアポートが前記命令処理装置から該ストア要求の実行のコミットをすでに受け取っていた時には該ストアポートに保持されていたデータを前記データ書き込み制御手段が、データ格納手段に書き込ませ、実行のコミットをまだ受け取っていない時には該ストアポートを解放することを特徴とする付記２７記載の記憶制御装置。
【０２６９】
（付記３２）前記スレッドの切り替え時に、前記データ書き込み制御手段が外部からのデータフェッチ要求に対応してアドレスと命令とを保持するフェッチポートを更に解放することを特徴とする付記３１記載の記憶制御装置。
【０２７０】
（付記３３）前記ストアポートとデータ格納手段とのそれぞれに対して、前記マルチスレッドの各スレッドを識別するスレッド識別子を保持する手段を更に備えることを特徴とする付記２７記載の記憶制御装置。
【０２７１】
（付記３４）前記記憶制御装置において、外部からのフェッチ要求に対応して、前記ストアデータを前記データ格納手段に格納する前、または前記キャッシュメモリまたはメモリに書き込む前に、前記ストアポートまたは前記データ格納手段から外部に与えるストアデータバイパスフェッチを許可するか否かを判定する手段を更に備え、
該バイパスフェッチの可否を判定する手段が前記ストアポート、またはデータ格納手段に対して保持されているスレッドの識別子とフェッチを要求するスレッドの識別子とを比較し、異なる識別子を持つスレッド間でのストアデータバイパスフェッチを禁止することを特徴とする付記３３記載の記憶制御装置。
【０２７２】
（付記３５）前記記憶制御装置において、先行するストア要求に対応してデータ格納手段に格納されているデータに対して、次のストア要求に対応するストアポートからのデータのマージをデータ格納手段上で実行することを、前記データ書き込み制御手段に対して許可するか否かを判定する手段を更に備えると共に、該データのマージの可否を判定する手段が、前記ストアポートとデータ格納手段に対して保持されているスレッド識別子を比較し、異なる識別子を持つスレッド間でのデータマージを禁止することを特徴とする付記３３記載の記憶制御装置。
【０２７３】
（付記３６）前記記憶制御装置において、
先行するストア要求に対応してデータ格納手段に格納されているデータに対して次のストア要求に対応するストアポートからのデータのマージをデータ格納手段上で実行することを、前記データ書き込み制御手段に対して許可するか否かを判定する手段を更に備えると共に、
該データマージの可否を判定する手段が、前記ストアポートがスレッドの切り替えに伴い、前記命令処理装置側から送られるストア要求のキャンセル信号を受け取った時、該キャンセルに対応するストアポート内のデータと、すでにデータ格納手段に格納されているデータとのマージを禁止することを特徴とする付記２７記載の記憶制御装置。
【０２７４】
（付記３７）前記記憶制御装置において、
前記データ格納手段への前記ストアデータの格納までに該ストアデータをメモリ格納時と同一形式にアラインする手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２７５】
（付記３８）前記アラインする手段が、前記演算ユニットから送られるデータに対してストアデータのアドレスとオペランド長とに応じたアライン処理を行って、該処理後のデータを前記ストアポートに与える手段と、
該ストアポートから出力されたデータに対してエンディアンに応じたアライン処理を行って、前記データ格納手段に与える手段とによって構成されることを特徴とする付記３７記載の記憶制御装置。
【０２７６】
（付記３９）前記アドレスとオペランド長とに応じたアライン処理を行う手段を含めてストアポートを前記演算ユニットに近い位置に配置し、
データ格納手段をキャッシュメモリまたはメモリに近い位置に配置し、
該エンディアンに応じたアライン処理を行う手段とデータ格納手段との間の距離を長くして配置可能とすることを特徴とする付記３８記載の記憶制御装置。
【０２７７】
（付記４０）前記データ格納手段が前記ストアポートから受け取ったストアデータをそれぞれ格納する１つ以上のライトバッファを備えると共に、
前記データ書き込み制御手段が、ストアポートから出力されたデータを、該複数のライトバッファのうちで最も新しくデータが格納されたライトバッファ、または次にデータが格納されるべきライトバッファのいずれかに書き込む制御を行うことを特徴とする付記１記載の記憶制御装置。
【０２７８】
（付記４１）前記データ格納手段が、前記ストア要求がキャッシュミスしている時、該ストア要求に対するキャッシュラインの要求リクエストを記憶制御装置のパイプラインに投入するキャッシュライン要求手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２７９】
（付記４２）前記データ格納手段が、前記ストアポート側から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記記憶制御装置において、前記キャッシュメモリまたはメモリへのデータの書き込みを、該複数のライトバッファのうちで最も最近ストアポートからのデータの格納が行われたライトバッファ以外から行うように制御するメモリ書き込み制御手段を更に備えることを特徴とする付記１記載の記憶制御装置。
【０２８０】
（付記４３）前記データ格納手段が、前記ストアポート側から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記記憶制御装置において、前記ストアポートが空になった時、最も最近データの格納が行われたライトバッファから前記キャッシュメモリまたはメモリへのデータの書き込みを行わせるメモリ書き込み制御手段を備えることを特徴とする付記１記載の記憶制御装置。
【０２８１】
（付記４４）前記データ格納手段が、前記ストアポート側から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記記憶制御装置において、最も最近データの格納が行われたライトバッファからの前記キャッシュメモリまたはメモリへのデータ書き込みが行われないことによって後続の命令が実行不可能となった時、該ライトバッファからのデータ書き込みを行わせるメモリ書き込み制御手段を備えることを特徴とする付記１記載の記憶制御装置。
【０２８２】
（付記４５）前記データ格納手段が、前記ストアポート側から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記記憶制御装置において、最も最近データの格納が行われたライトバッファに格納されたデータに関するキャッシュラインの解放を外部から求められた時、該キャッシュライン解放を可能とするために該ライトバッファからのデータ書き込みを行わせるメモリ書き込み制御手段を備えることを特徴とする付記１記載の記憶制御装置。
【０２８３】
（付記４６）前記データ格納手段が、前記ストアポート側から受け取ったストアデータをそれぞれ格納する複数のライトバッファを備えると共に、
前記記憶制御装置において、最も最近データの格納が行われたライトバッファに格納されているデータに対して他のストア要求に関するデータとのマージが禁止されている時、該ライトバッファからのデータ書き込みを行わせるメモリ書き込み制御手段を備えることを特徴とする付記１記載の記憶制御装置。
【０２８４】
（付記４７）命令処理装置から送られるストア要求に対応する制御を行う記憶制御装置において、
該ストア要求によって、演算ユニットから送られ、キャッシュメモリまたはメモリに書き込まれるべきストアデータをそれぞれ格納する複数のバッファ手段と、
該複数のバッファ手段のうちで最も古くデータが格納されたバッファ手段のみを対象として、該ストアデータの長さが前記キャッシュメモリまたはメモリ上でデータのエラー管理が行われる単位の領域の長さより短い場合に、該ストアデータのキャッシュメモリまたはメモリへの格納を中止させる制御を行うメモリ書き込み制御手段とを備えることを特徴とする記憶制御装置。
【０２８５】
（付記４８）命令処理装置から送られるストア要求に対応して、演算ユニットから送られ、該ストア要求によってキャッシュメモリまたはメモリに書き込まれるべきストアデータを保持するストアポートを備える記憶制御装置において、
該ストアポートと前記キャッシュメモリまたはメモリとの間に、前記ストアデータをそれぞれ一時的に保持する複数階層のデータ格納手段と、
該ストアポートから、該複数階層の１つ以上の階層のデータ格納手段を介して、前記キャッシュメモリまたはメモリまでの前記ストアデータの書き込みを制御するストアデータ書き込み制御手段とを備えることを特徴とする記憶制御装置。
【０２８６】
（付記４９）前記複数階層のデータ格納手段がそれぞれ複数個のライトバッファを備えると共に、
前記ストアデータ書き込み制御手段が、該複数階層のうちに１つの階層内のライトバッファの全てにデータが保持されている階層が存在しない時、前記ストアポート側から順次、前記複数個のライトバッファが全て空である階層を介することなく、前記ストアデータの書き込み可能なライトバッファが存在する階層のライトバッファ手段を介しながらストアデータの書き込みを制御し、
ライトバッファの全てにデータが保持されている階層が存在する時、該ライトバッファの全てにデータが保持されている階層のうちで、前記ストアポート側に近い階層より更に１階層近い階層のライトバッファ手段を介しながら、ストアデータの書き込みを制御することを特徴とする付記４８記載の記憶制御装置。
【０２８７】
（付記５０）命令処理装置から送られるストア要求に対応して、演算ユニットから送られるストアデータをキャッシュメモリまたはメモリに格納するデータ格納方法において、
該ストアデータを複数個のストアポートのうちの１つに格納し、
該ストアポートに格納されたデータを複数個のライトバッファの１つに格納し、
該ライトバッファに格納されたデータをキャッシュメモリまたはメモリに格納することを特徴とするデータ格納方法。
【０２８８】
（付記５１）前記ストアポートに格納されたデータのライトバッファへの格納を、前記命令処理装置が前記ストア要求の実行をコミットした後に行うことを特徴とする付記５０記載のデータ格納方法。
【０２８９】
（付記５２）前記ライトバッファに格納されたデータのキャッシュメモリまたはメモリへの格納の制御において、
前記複数のライトバッファのうちで、最も最近ストアポートからのデータ格納が行われたライトバッファ以外からキャッシュメモリまたはメモリへのデータ格納を行うことを特徴とする付記５０記載のデータ格納方法。
【０２９０】
【発明の効果】
以上詳細に説明したように本発明によれば、ストア要求の処理を、命令処理装置の管理下にも置かれるストアポート部と、記憶制御装置のみの管理下に置かれるライトバッファ部とに分割することによって、ストアポート部およびライトバッファ部のそれぞれで同時に処理対象となるストア要求の数を減らして、処理速度を上げることができる。
【０２９１】
また全体として同時に処理中、および処理待ちとなるストア要求の数を増加させることができ、単位時間あたりの処理量を増加させ、ストア要求処理性能を大幅に向上させることができる。
【０２９２】
ライトバッファの新たな装備は、従来のストアポートを用いて処理を行っているデータ処理装置であれば全てにおいて採用可能であり、その採用によって性能の向上が期待される。またこの場合、命令処理装置側には一切の改造が必要なく、記憶制御装置側の改造のみで実装が可能であり、広く一般に採用しやすい方式である。
【０２９３】
更に最近流行になっているマルチスレッド対応可能なデータ処理装置においても、ライトバッファを装備することにより、性能面でより一層の向上を図ることができ、データ処理装置の処理性能効能向上に寄与するところが大きい。
【図面の簡単な説明】
【図１】本発明の記憶制御装置の原理ブロック図である。
【図２】本実施形態におけるキャッシュへのデータ格納方式の基本説明図である。
【図３】命令ユニットおよび記憶制御ユニットの詳細構成を示すブロック図である。
【図４】ライトバッファへのデータ格納およびデータマージに対する基本処理の説明図である。
【図５】ストアポート側とライトバッファ側とに保持されるフラグを示す図である。
【図６】ストアインとストアスルーのストア処理方式の説明図である。
【図７】５つのライトバッファに対するデータのストアを示す図である。
【図８】アドレスＡの前半８バイトの内容を説明する図である。
【図９】ストアフェッチバイパス制御方式を説明する図である。
【図１０】複数のストアポートのデータを同時に１つ以上のライトバッファに書き込むデータ書き込み方式の説明図である。
【図１１】ライトバッファ側でのパイプラインリクエスト要求の説明図である。
【図１２】ライトバッファのステータスとパイプラインリクエスト要求との関係の説明図（その１）である。
【図１３】ライトバッファのステータスとパイプラインリクエスト要求との関係の説明図（その２）である。
【図１４】データの６４バイトブロックストアの説明図である。
【図１５】マルチスレッド採用データ処理装置におけるライトバッファ適用方式（その１）の説明図である。
【図１６】マルチスレッド採用データ処理装置におけるライトバッファ適用方式（その２）の説明図である。
【図１７】マルチスレッド採用データ処理装置におけるライトバッファ適用方式（その３）の説明図である。
【図１８】本実施形態におけるデータアライン方式の説明図である。
【図１９】ライトバッファ部を複数階層備える記憶制御ユニットの説明図である。
【図２０】複数階層ライトバッファにおけるデータ伝搬時間短縮方式の説明図である。
【符号の説明】
１　　　　　記憶制御装置
２　　　　　キャッシュメモリ
３　　　　　ストアポート
４　　　　　データ格納手段
５　　　　　データ書き込み制御手段
１０，２０　　命令ユニット（ＩＵ）
１１　　　　　演算ユニット（ＥＵ）
１２，２５　　記憶制御ユニット（ＳＵ）
１３，２６　　ストアバッファ部
１４，１７　　ライトバッファ部
１５，４１　　１次キャッシュ
２８　　　　　ストアバッファ制御部
２９　　　　　ストアポート（ＳＴＰ）
３０　　　　　ＳＴＰ割り当て部
３５　　　　　ライトバッファ（ＷＢ）
３６　　　　　ＷＢ＿ＧＯ制御部
４３　　　　　２次キャッシュ
４４　　　　　２次キャッシュ用ライトバッファ
５６　　　　　ストアフェッチバイバス（ＳＦＢ）制御部
【図１】
2004038341.tif 000003
【図２】
2004038341.tif 000004
【図３】
2004038341.tif 000005
【図４】
2004038341.tif 000006
【図５】
2004038341.tif 000007
【図６】
2004038341.tif 000008
【図７】
2004038341.tif 000009
【図８】
2004038341.tif 000010
【図９】
2004038341.tif 000011
【図１０】
2004038341.tif 000012
【図１１】
2004038341.tif 000013
【図１２】
2004038341.tif 000014
【図１３】
2004038341.tif 000015
【図１４】
2004038341.tif 000016
【図１５】
2004038341.tif 000017
【図１６】
2004038341.tif 000018
【図１７】
2004038341.tif 000019
【図１８】
2004038341.tif 000020
【図１９】
2004038341.tif 000021
【図２０】
2004038341.tif 000022