(57)【要約】      （修正有）【課題】ストアバッファにおける追い出し対象範囲の指定がない追い出し動作において、効率が良いストアバッファの制御ができるストアマージ装置を提供する。【解決手段】ストアマージ装置１は、複数のブロックを含む複数のエントリ６と、複数のエントリが分けられたグループ７毎にグループに含まれる複数のエントリにおけるマージの状態を表すエントリマージ状態情報８とを関連付けて記憶する記憶部２と、記憶装置１１に対するストア命令に基づきストアデータをエントリに格納するマージ処理を実行しマージ処理の対象であるエントリを含むグループに関連するエントリマージ状態情報を更新するマージ部３と、エントリマージ状態情報に基づきすべてのブロックにストアデータが格納されるマージ完了のエントリを含むグループを優先的に選択し、選択したグループからマージ完了のエントリを優先的に選択し、選択したエントリを記憶装置に出力する出力部５を含む。【選択図】図１
2017111484.tif 000002
【特許請求の範囲】
【請求項１】
ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段と、
外部装置から受けた、記憶装置に対してストアデータの書き込みを指示するストア命令に基づいて、前記ストアデータを前記記憶手段の前記エントリに格納するマージ処理を実行し、前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新するマージ手段と、
前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、さらに選択した前記グループから、マージ完了のエントリを優先的に選択して、前記記憶装置に対して選択したエントリを出力する出力手段と
を含むストアマージ装置。
【請求項２】
前記出力手段は、前記マージ完了のエントリを含むグループがない場合に、前記ストアデータが格納されたエントリである有効なエントリを含むグループを選択し、さらに選択した前記グループから、前記有効なエントリを選択して、前記記憶装置に対して選択したエントリを出力する
請求項１記載のストアマージ装置。
【請求項３】
前記エントリマージ状態情報は、前記マージ完了のエントリを含むグループを示すマージ完了情報を含む
請求項１または２記載のストアマージ装置。
【請求項４】
前記エントリマージ状態情報は、さらに所定数以上のブロックに前記ストアデータが格納されているマージ中のエントリを含むグループを示すマージ中情報を含み、
前記出力手段は、前記マージ完了のエントリを含むグループがない場合に、前記マージ中情報に基づいてグループを選択し、さらに選択した前記グループから前記マージ中のエントリを選択して、前記記憶装置に対して選択したエントリを出力する
請求項３記載のストアマージ装置。
【請求項５】
請求項１乃至４のいずれか１つのストアマージ装置と、
前記ストアマージ装置に対して、ストアデータの書き込みを指示するストア命令を発行する中央処理装置と、
前記ストアマージ装置から出力されたエントリを記憶する記憶装置と
を含む情報処理装置。
【請求項６】
記憶装置に対して、ストアデータの書き込みを指示するストア命令を受け取り、
ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段に対して、前記ストア命令に基づいて、前記ストアデータを前記エントリに格納するマージ処理を実行し、
前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新し、
前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、
さらに選択した前記グループから、マージ完了のエントリを優先的に選択し、
前記記憶装置に対して選択したエントリを出力する
ストア制御方法。
【請求項７】
前記マージ完了のエントリを含むグループがない場合に、
前記ストアデータが格納されたエントリである有効なエントリを含むグループを選択し、
さらに選択した前記グループから、前記有効なエントリを選択し、
前記記憶装置に対して選択したエントリを出力する
請求項６記載のストア制御方法。
【請求項８】
前記エントリマージ状態情報は、前記マージ完了のエントリを含むグループを示すマージ完了情報と、所定数以上のブロックに前記ストアデータが格納されているマージ中のエントリを含むグループを示すマージ中情報とを含み、
前記マージ完了情報に基づいて、
すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを選択し、
さらに選択した前記グループから、マージ完了のエントリを優先的に選択し、
前記記憶装置に対して選択したエントリを出力し、
前記マージ完了のエントリを含むグループがない場合に、
前記マージ中情報に基づいてグループを選択し、
さらに選択した前記グループから前記マージ中のエントリを選択し、
前記記憶装置に対して選択したエントリを出力する
請求項６または７記載のストア制御方法。
【請求項９】
記憶装置に対して、ストアデータの書き込みを指示するストア命令を受け取り、ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、さらに前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段に対して、前記ストア命令に基づいて、前記ストアデータを前記エントリに格納するマージ処理と、
前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新し、前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、さらに選択した前記グループから、マージ完了のエントリを優先的に選択して、前記記憶装置に対して選択したエントリを出力する出力処理と
をコンピュータに実行させるコンピュータ・プログラム。
【請求項１０】
前記出力処理において、
前記マージ完了のエントリを含むグループがない場合に、前記ストアデータが格納されたエントリである有効なエントリを含むグループを選択し、さらに選択した前記グループから、前記有効なエントリを選択し、前記記憶装置に対して選択したエントリを出力する
請求項９記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置（コンピュータ）を用いたストアマージ処理システムに関する。
【背景技術】
【０００２】
記憶装置へのアクセス頻度を抑える方法の１つとして、ストアマージ方法と呼ばれる方法がある。一般に、ストアマージ方法では、ストアマージ装置が、記憶装置の同じ領域に対する複数のストア命令（書込命令）を１つに纏めてから記憶装置に書き込むことにより、記憶装置へのアクセス頻度を抑えることができる。以下では、この複数のストア命令を１つに纏める処理を「マージ処理」と言う。また、ストアマージ装置が、記憶装置に書き込むデータを一時的に保存するバッファを「ストアバッファ」と言う。
【０００３】
ストアバッファから記憶装置に対するデータの出力（追い出し）制御に関する技術が、例えば、特許文献１に開示されている。特許文献１に開示されたストアマージ装置は、最初のストア命令から所定時間の経過、またはストアマージ装置から記憶装置への書き込みを待機するライトバッファの記憶データ数の低下などを契機として、ストアバッファからデータの出力を行う。
【０００４】
また、特許文献２には、ストアバッファからデータを追い出す制御を簡単にするストア制御装置が開示されている。特許文献２に開示されたストア制御装置は、ストアデータを複数のブロックを含むライン単位で格納する複数Ｗａｙを含むストアバッファ部に保存する。そして、このストア制御装置は、ライン内のすべてのブロックがストアバッファ部内に存在するＷａｙを優先して、ストアデータの追い出しを行う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−０４３２０２号公報
【特許文献２】特開２０１４−０５２７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載されたストアマージ装置においては、ストアデータのマージがあまり行われていない（マージ率が低い）データが、ストアバッファから追い出すデータとして選択されてしまう可能性がある。マージ率が低いということは、マージできるストア命令がすぐ後に続いて発行される可能性があることを意味する。すなわち、このストアマージ装置は、記憶装置に対するアクセス低減の効果が低いという問題がある。
【０００７】
また、特許文献２に記載されたストア制御装置においては、ストアバッファから追い出すデータの選択における効率が低い場合があるという問題がある。このストア制御装置においては、ストアリクエストを受けたとき、アドレスアレイに、リクエストの中位アドレス（ｉｎｄｅｘ）が示す１群のエントリに空きがない（エントリフルの）場合に、エントリの追い出しが行われる。すなわち、このストア制御装置は、リクエストに含まれるアドレスの情報によって、選択処理の対象とするエントリの範囲が指定されることを前提としていると言える。しかし、ストアバッファから追い出しを行う契機は、例えば、記憶装置への書き込みを行う経路のリソースが空いた場合のように、追い出しの原因とストアバッファの特定のエントリが関連しない場合もある。そのような場合、追い出し対象範囲に関する情報が存在せず、追い出し対象範囲が指定されないので、特許文献２に記載されたストア制御装置では、ストアバッファのすべてのエントリを選択候補として順次検索するので、時間がかかるという問題がある。
【０００８】
本発明の１つの目的は、ストアバッファにおける追い出し対象範囲の指定がない追い出し動作において、効率が良いストアバッファの制御ができるストアマージ装置などを提供することにある。
【課題を解決するための手段】
【０００９】
上記の目的を達成すべく、本発明の一態様に係るストアマージ装置は、以下の構成を備えることを特徴とする。
【００１０】
すなわち、本発明の一態様に係るストアマージ装置は、
ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段と、
外部装置から受けた、記憶装置に対してストアデータの書き込みを指示するストア命令に基づいて、前記ストアデータを前記記憶手段の前記エントリに格納するマージ処理を実行し、前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新するマージ手段と、
前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、さらに選択した前記グループから、マージ完了のエントリを優先的に選択して、前記記憶装置に対して選択したエントリを出力する出力手段と
を備える。
【００１１】
また、上記の同目的を達成すべく、本発明の一態様に係る情報処理装置は、上述した構成を備えるストアマージ装置と、
前記ストアマージ装置に対して、ストアデータの書き込みを指示するストア命令を発行する中央処理装置と、
前記ストアマージ装置から出力されたエントリを記憶する記憶装置と
を備える。
【００１２】
また、上記の同目的を達成すべく、本発明の一態様に係るストア制御方法は、情報処理装置によって、
記憶装置に対して、ストアデータの書き込みを指示するストア命令を受け取り、
ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段に対して、前記ストア命令に基づいて、前記ストアデータを前記エントリに格納するマージ処理を実行し、
前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新し、
前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、
さらに選択した前記グループから、マージ完了のエントリを優先的に選択し、
前記記憶装置に対して選択したエントリを出力する。
【００１３】
また、同目的は、上記の各構成を有するストアマージ装置、情報処理装置、並びに対応する方法を、それぞれコンピュータによって実現するコンピュータ・プログラム、およびそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００１４】
本発明には、効率が良いストアバッファの制御ができるという効果がある。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態に係るストアマージシステムの構成を示すブロック図である。
【図２】本発明の第２および第３の実施形態における情報処理装置２００の構成を示すブロック図である。
【図３】第２の実施形態におけるストアバッファ１２０および出力部１５０の詳細な構成を示すブロック図である。
【図４】第２の実施形態におけるストア命令３００および３０１の構成の一例を示す図である。
【図５】第２の実施形態におけるエントリ６の構成の一例を示す図である。
【図６】第２の実施形態における有効ブロック情報６０２とラインデータ６１０との関係性の一例を表す図である。
【図７】第２の実施形態におけるストアマージ装置１００のマージの動作を示すフローチャートである。
【図８】第２の実施形態におけるアドレスアレイ１２２１およびマージ完了フラグ１２２８の一例を示す図である。
【図９】第２の実施形態におけるストアマージ装置１００の追い出し処理の動作を示すフローチャートである。
【図１０】第３の実施形態におけるストアバッファ１２０および出力部１５０の詳細な構成を示すブロック図である。
【図１１】本発明の各実施形態、および、その変形例に係るストアマージシステムに適用可能なコンピュータ（情報処理装置）の構成を例示する図である。
【発明を実施するための形態】
【００１６】
次に、本発明の実施形態について図面を参照して詳細に説明する。
【００１７】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係るストアマージシステムの構成を示すブロック図である。図１を参照すると、本実施形態に係るストアマージシステムは、ストアマージ装置１、外部装置１０、および記憶装置１１を含む。
【００１８】
ストアマージ装置１は、外部装置１０、および記憶装置１１と、バスまたは通信ネットワークなどを介して接続される。
【００１９】
図１に示したストアマージシステムは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：図示せず）を用いて実行されるコンピュータ・プログラム（ソフトウェア・プログラム）の制御により動作する一般的な情報処理装置（コンピュータ）によって構成されても良い。または、ストアマージシステムの各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、ストアマージシステムをコンピュータによって実現したハードウェア構成例については、図１１を参照して後述する。
【００２０】
外部装置１０は、記憶装置１１に対してストアデータの書き込みを指示するストア命令を、ストアマージ装置１に対して発行する。記憶装置１１は、ストアマージ装置１を介して、受け取ったストアデータを記憶することができる。
【００２１】
ストアマージ装置１は、記憶部２、マージ部３、および出力部５を含む。
【００２２】
記憶部２は、ブロックデータの格納が可能な複数のブロックを含む複数のエントリ６を記憶することができる。また、記憶部２は、複数のエントリ６が分けられたグループ７ごとに、そのグループ７に含まれる複数のエントリ６におけるマージの状態を表すエントリマージ状態情報８を関連付けて記憶することができる。エントリマージ状態情報８は、マージ部３によって更新（生成）される。記憶部２は、「背景」欄において上述した一般的なストアマージ方法の「ストアバッファ」に対応する。記憶部２は、例えば、半導体メモリ装置などによって実現される。
【００２３】
マージ部３は、外部装置１０から、記憶装置１１に対してストアデータの書き込みを指示するストア命令を受けることができる。そして、マージ部３は、そのストア命令に基づいて、ストアデータを記憶部２のいずれかのエントリ６に格納する。以下では、このマージ部３の動作を「マージ処理」と言う。例えば、マージ処理において、連続する複数のブロックデータを含むストアデータは、何れかのエントリ６における連続する複数のブロックに、ブロック単位に分割されて格納される。また、記憶装置１１の同じ領域に対する複数のストア命令は、同じエントリ６の同じブロックに対するブロックデータの上書きとして処理される。以下では、例えば、ブロックデータが格納されているブロックを「マージ済みのブロック」と言う。
【００２４】
さらに、マージ部３は、マージ処理の対象となったエントリを含むグループ７に関連づけられたエントリマージ状態情報８を更新する。
【００２５】
出力部５は、記憶装置１１に対する出力に際して、エントリマージ状態情報８に基づいて、すべてのブロックにストアデータが格納されているマージ完了のエントリを含むグループ７を優先的に選択する。さらに、出力部５は、選択したグループ７から、そのマージ完了のエントリを優先的に選択して、記憶装置１１に対して選択したエントリを出力する。なお、すべてのブロックがマージ済みであるエントリ６がない場合、出力部５は、マージ済みのブロックが比較的多いエントリ６を含むグループ７を選択し、そのグループ７から選択したエントリ６を記憶装置１１に対して出力してもよい。
【００２６】
このように、本実施形態によれば、記憶部２（ストアバッファ）における出力（追い出し）対象範囲の指定がない追い出し動作においても、効率が良いストアバッファの制御ができるストアマージ装置などを提供できるという効果がある。
【００２７】
その理由は、出力部５が、エントリマージ状態情報８に基づいて、記憶部２の全体から、マージ完了のエントリ６を含むグループ７を優先的に選択するからである。そして、出力部５は、出力対象として、選択したグループ７からマージ完了のエントリ６を優先的に選択するからである。すなわち、出力部５は、グループ７ごとのエントリマージ状態情報８によって、出力対象となるエントリ６の選択範囲を絞り込むことができるので、追い出し対象範囲の指定がない追い出しの場面でも効率が良いという効果がある。
【００２８】
また、本実施形態によれば、記憶装置１１に対する出力回数が削減できるストアマージ装置などを提供できるという効果もある。
【００２９】
その理由は、マージ部３が、ストアデータを記憶部２に一時的に蓄積し、その記憶部２に対して複数のストア命令をマージすることができるからである。そして、出力部５が、ストア命令の発行とは独立に決定されるタイミングで、記憶装置１１に対してストア命令を反映したデータであるエントリ６を出力することができるからである。
【００３０】
なお、本実施形態は、ストアマージ装置１において、上述した各部または図示しない機能部が、ストア命令以外の入出力命令の処理、および上記のタイミングおよび出力範囲以外の記憶部２からの出力処理をも行うことを制限しない。
【００３１】
＜第２の実施形態＞
次に、上述した第１の実施形態を基本とする第２の実施形態について説明する。以下では、第２の実施形態に係る特徴的な部分を中心に説明し、第１の実施形態と同様な構成を有する第２の実施形態の構成要素には、第１の実施形態で付した参照符号と同一の参照符号を付し、その構成要素について重複する詳細な説明は省略する。
【００３２】
まず、図２を参照して、以下に本実施形態の構成を説明する。図２は、本発明の第２および第３の実施形態における情報処理装置２００の構成を示すブロック図である。図２を参照すると、本実施形態における情報処理装置２００は、中央処理装置２１０、ストアマージ装置１００、および主記憶装置２１１を含む。なお、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号または情報の伝送の向きを限定するものではない。
【００３３】
ストアマージ装置１００は、中央処理装置２１０、および主記憶装置２１１と、バスなどの通信網を介して接続される。
【００３４】
情報処理装置２００は、中央処理装置（ＣＰＵ）２１０を用いて実行されるコンピュータ・プログラム（ソフトウェア・プログラム）の制御により動作する一般的な情報処理装置（コンピュータ）によって構成されても良い。または、情報処理装置２００の各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、情報処理装置２００をコンピュータによって実現したハードウェア構成例については、図１１を参照して後述する。
【００３５】
中央処理装置２１０は、主記憶装置２１１に対するストアデータ４００の書き込みを指示するストア命令３００をストアマージ装置１００に対して発行する。中央処理装置２１０は、第１の実施形態における外部装置１０に対応する。本実施形態では、中央処理装置２１０は、第１の実施形態における「ブロック」の一例として、８バイトをブロック単位としてストアデータ４００を出力する。以下では、「バイト」を「Ｂ」と記述する。例えば、「８バイト」は、「８Ｂ」のように記述する。
【００３６】
図４は、第２の実施形態におけるストア命令３００および３０１の構成の一例を示す図である。図４を参照すると、ストア命令３００は、アドレス情報３６０およびコマンド情報３５０を含む。コマンド情報３５０は、本実施形態では、ストア命令であることを表すコマンドの識別子情報を含む。アドレス情報３６０は、主記憶装置２１１におけるストアデータ４００の書き込み先を表すアドレス情報である。本実施形態では、アドレス情報３６０は、アドレス（上位）３６１、アドレス（中位）３６２、およびアドレス（下位）３６３の３つの情報に分けられる。アドレス（上位）３６１、アドレス（中位）３６２、およびアドレス（下位）３６３の詳細は、ストアバッファ１２０の説明において後述する。
【００３７】
主記憶装置２１１は、ストアマージ装置１００から出力されるストア命令３０１に応じて、ストアデータ４０１を保持する。主記憶装置２１１は、第１の実施形態における記憶装置１１に対応する。主記憶装置２１１は、例えば、半導体メモリ装置などによって実現される。本実施形態では、主記憶装置２１１は、１２８Ｂを単位ブロックとしてデータの読み書きを行う。すなわち、ストアマージ装置１００は、主記憶装置２１１に対して、１２８Ｂのサイズでストアデータ４０１を出力する。以下では、主記憶装置２１１における書き込みの単位領域を「ライン」と言う。
【００３８】
ストアマージ装置１００は、ストアバッファ１２０、マージ部１３０、出力指示部１４０、出力部１５０、およびライトバッファ１６０を含む。本実施形態では、ストアマージ装置１００は、主記憶装置２１１に対して出力するストア命令３０１およびストアデータ４０１を、ライトバッファ１６０に一時的に蓄積する。ライトバッファ１６０は、主記憶装置２１１の動作に合わせた所定の周期で、ストア命令３０１およびストアデータ４０１を順次出力する。したがって、ライトバッファ１６０は、主記憶装置２１１に対する書き込みの負荷を調整する出力経路の一部であるとも言える。第１の実施形態における出力部５から記憶装置１１へのデータの出力（追い出し）の動作は、本実施形態では、出力部１５０からライトバッファ１６０への出力（追い出し）の動作に対応する。
【００３９】
次に、ストアバッファ１２０の詳細な構成を説明する。図３は、第２の実施形態におけるストアバッファ１２０および出力部１５０の詳細な構成を示すブロック図である。図３を参照すると、ストアバッファ１２０は、アレイ制御部１２１および記憶部１２２を含む。記憶部１２２は、アドレスアレイ１２２１、データアレイ１２２２、およびマージ完了フラグ（マージ完了情報）１２２８を含む。記憶部１２２は、第１の実施形態における記憶部２を基本とする。なお、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号または情報の伝送の向きを限定するものではない。
【００４０】
本実施形態では、ストアバッファの方式の一例として、図３に示すように、それぞれｎ列（ウェイ、ｗａｙ）のエントリ６を１つのグループ（セット）７として管理するｎウェイセットアソシアティブ方式が採用されている。「ｎ」は、２以上の整数である。図３に示す通り、アドレスアレイ１２２１およびデータアレイ１２２２は、各行に同じｎ列のエントリ６を含む、同じ行数の領域に分割されている。アドレスアレイ１２２１とデータアレイ１２２２との同じウェイ番号かつ同じ行番号のエントリは、１対１に対応付けられている。アドレスアレイ１２２１とデータアレイ１２２２における「行」は、グループ７に対応する。
【００４１】
本実施形態では、記憶部１２２は、主記憶装置２１１の記憶領域を１２８Ｂごとに分割した領域であるラインを単位として、エントリ６を管理する。ラインは、主記憶装置２１１におけるデータの書き込みの単位である。図５に示すように、本実施形態では、エントリ６は、ラインに格納するデータであるラインデータ６１０を含むデータアレイ１２２２と、そのデータに関する情報であるエントリ情報６００を含むアドレスアレイ１２２１とに分けて記憶される。図５は、第２の実施形態におけるエントリ６の構成の一例を示す図である。
【００４２】
データアレイ１２２２は、ストア命令３００により主記憶装置２１１に対する書き込みが指示されたブロック単位（８Ｂ）のストアデータ４００を、ライン単位（１２８Ｂ）のデータであるラインデータ６１０としてまとめて記憶することができる。すなわち、本実施形態では、１つのラインデータ６１０は、１６個のブロックを含む。ストア命令３００のアドレス情報３６０における下位アドレス部分であるアドレス（下位）３６３は、ラインデータ６１０の先頭からの位置（オフセット）に対応する。すなわち、ストアデータ４００は、ラインデータ６１０においてアドレス（下位）３６３が表す位置のブロックに格納される。ストアデータ４００は、マージ部１３０のマージ処理の結果としてラインデータ６１０に格納される。すなわち、ストアデータ４００が格納されているブロックは、マージ済みであると言える。
【００４３】
アドレスアレイ１２２１は、複数のエントリ情報６００を記憶することができる。図５を参照すると、各エントリ情報６００は、ラインアドレス情報６０１、および有効ブロック情報６０２を含む。
【００４４】
ラインアドレス情報６０１は、ストア命令３００のアドレス情報３６０が示すブロックが含まれるライン（書き込み先ライン）を示すアドレス情報である。具体的には、ラインアドレス情報６０１は、アドレス情報３６０の上位アドレス部分であるアドレス（上位）３６１を格納する。アドレスアレイ１２２１の各行は、アドレス情報３６０の中位アドレス部分であるアドレス（中位）３６２に対応づけられている。すなわち、ラインアドレス情報６０１であるアドレス（上位）３６１と、アドレスアレイ１２２１の行に対応するアドレス（中位）３６２とを組み合わせたアドレスが、主記憶装置２１１におけるラインを書き込む先の先頭位置を表す。
【００４５】
有効ブロック情報６０２は、対応するデータアレイ１２２２に格納されるラインデータ６１０において、マージ済みであるブロックの位置を表す情報である。有効ブロック情報６０２は、ラインデータ６１０に含まれるブロックと同数の情報を格納することができる。本実施形態では、有効ブロック情報６０２は、１ブロックあたり１ビットとして、合計１６ビットの情報を含む。図６は、第２の実施形態における有効ブロック情報６０２とラインデータ６１０との関係性の一例を表す図である。図６に示すように、有効ブロック情報６０２の各ビットは、ストアデータが格納されているブロックを「１」として表す。有効ブロック情報６０２の各ビットは、まだストア命令によってストアデータが格納（上書き）されていない未マージのブロックを「０」として表す。
【００４６】
また、アドレスアレイ１２２１の各欄は、エントリ６が未使用（無効）であることを表すことができる。例えば、ラインアドレス情報６０１にマイナスの整数値などのアドレス値と識別可能な値をセットされた場合、そのエントリ６が未使用であることを表してもよい。または、有効ブロック情報６０２がすべて「０」である場合、そのエントリ６が未使用であることを表してもよい。
【００４７】
記憶部１２２に含まれるもう１つの情報であるマージ完了フラグ（マージ完了情報）１２２８を説明する。マージ完了フラグ１２２８は、第１の実施形態におけるエントリマージ状態情報８を基本とする。本実施形態では、マージ完了フラグ１２２８が「１」である場合、マージ完了フラグ１２２８に対応するデータアレイ１２２２の行に、ラインデータ６１０のすべてのブロックがマージ済みであるマージ完了エントリが含まれることを表す。マージ完了フラグ１２２８が「１」である行のアドレスアレイ１２２１には、有効ブロック情報６０２のすべてのビットが「１」であるマージ完了エントリが含まれるとも言える。本実施形態では、マージ完了フラグ１２２８は、一具体例として、アドレスアレイ１２２１の各行に対応づけられた１ビットのレジスタである。マージ完了フラグ１２２８は、アドレスアレイ１２２１およびデータアレイ１２２２とは別の記憶装置であってもよい。
【００４８】
アレイ制御部１２１は、マージ部１３０および出力部１５０の制御に応じて、アドレスアレイ１２２１およびデータアレイ１２２２に対する読み書きを行う。
【００４９】
以上が、ストアバッファ１２０の詳細な構成である。次に、ストアマージ装置１００の上記以外の構成を説明する。
【００５０】
マージ部１３０は、第１の実施形態におけるマージ部３を基本とする。マージ部１３０は、中央処理装置２１０から、ストア命令３００およびストアデータ４００を受ける。そして、マージ部１３０は、ストア命令３００およびストアデータ４００の情報を、アレイ制御部１２１を介して、記憶部１２２のいずれかのエントリ６に格納する。本実施形態では、マージ部１３０は、マージ処理によって、同じラインに対する複数のストア命令３００を、記憶部１２２の同じエントリ６に格納する。すなわち、マージ部１３０は、記憶部１２２にすでに格納されているエントリ６に対するストア命令３００を受けた場合、そのエントリ６のデータアレイ１２２２から読み出したラインデータ６１０に対して、ストアデータ４００に対応するブロックを上書きする。さらに、マージ部１３０は、そのエントリ６のアドレスアレイ１２２１から読み出した有効ブロック情報６０２を更新する。
【００５１】
また、本実施形態では、マージ部１３０は、マージ処理の対象のエントリ６がマージ完了エントリとなった場合に、アレイ制御部１２１を介して、そのエントリ６が含まれるアドレスアレイ１２２１の行に対応するマージ完了フラグ１２２８を「１」に更新する。
【００５２】
出力指示部１４０は、出力対象であるエントリ６の選択範囲に関する指定がない出力タイミングの一例として、本実施形態では、ライトバッファ１６０の空き容量が閾値以下となった場合に、出力部１５０に対して、出力指示５００を送る。出力指示部１４０は、主記憶装置２１１に対する出力経路であるライトバッファ１６０が空いたときに、出力部１５０に対して、いずれか適当なエントリ６を選んで出力する（追い出す）ことを指示するとも言える。
【００５３】
出力部１５０は、第１の実施形態における出力部５を基本とする。図３を参照すると、本実施形態の出力部１５０は、エントリ選択部１５１、およびデータ選択部１５２を含む。
【００５４】
エントリ選択部１５１は、出力指示５００を受けた際、マージ完了フラグ１２２８に基づいて、すべてのブロックにストアデータ４００が格納されている（マージが完了している）エントリ６を含むアドレスアレイ１２２１の行（グループ７）を優先的に選択する。さらに、エントリ選択部１５１は、選択されたアドレスアレイ１２２１の行に含まれる各エントリ６の有効ブロック情報６０２に基づいて、マージが完了したエントリ６を優先的に選択する。エントリ選択部１５１は、選択したアドレスアレイ１２２１のエントリ６の情報に基づいて生成したストア命令３０１を、ライトバッファ１６０に対して出力する。
【００５５】
データ選択部１５２は、エントリ選択部１５１が選択したエントリ６のデータアレイ１２２２に格納されているラインデータ６１０を、ストアデータ４０１として、ライトバッファ１６０に対して出力する。
【００５６】
以上、本実施形態におけるマージ部１３０、記憶部１２２、出力指示部１４０、および出力部１５０の各構造と内容は、上述した点以外は、第１の実施形態と同様であるので、重複する詳細な説明は省略する。
【００５７】
次に、上述した構成を備える本実施形態の動作について詳細に説明する。本実施形態における動作は、中央処理装置２１０からストア命令３００が発行された際に行われるマージの動作と、出力指示部１４０から出力指示５００が発行された際に行われる追い出しの動作との２つがある。
【００５８】
まず、図７を参照して、マージの動作から説明する。図７は、第２の実施形態におけるストアマージ装置１００のマージの動作を示すフローチャートである。以下では、図２を参照して、情報の流れを説明する。また、図４を参照して、各ストア命令の構成を説明する。
【００５９】
中央処理装置２１０が、主記憶装置２１１に対してストアデータ４００の書き込みを指示するストア命令３００を、ストアマージ装置１００に対して発行する。上述した通り、ストアデータ４００は、１つのブロック（８Ｂ）のデータを含む。また、ストア命令３００のコマンド情報３５０は、「書き込み」を表す識別子を含む。ストア命令３００のアドレス情報３６０は、主記憶装置２１１におけるストアデータ４００（ブロック）の書き込み先を表すアドレス情報を含む。
【００６０】
ストアマージ装置１００においては、マージ部１３０が、ストア命令３００およびストアデータ４００を受ける（ステップＳ１０）。
【００６１】
マージ部１３０は、アレイ制御部１２１を介して、ストア命令３００の対象のエントリ６が記憶部１２２に格納されているかどうかを確認する（ステップＳ１１）。図５を参照して、エントリ６の構成を説明する。具体的には、マージ部１３０は、アドレスアレイ１２２１において、ストア命令３００のアドレス（中位）３６２に対応する行に、ストア命令３００のアドレス（上位）３６１と同じ情報をラインアドレス情報６０１に格納するエントリ６があるかどうかを探す。
【００６２】
ストア命令３００の対象のエントリ６がすでに記憶部１２２に格納されている場合（ステップＳ１１のＹＥＳ）、マージ部１３０は、アレイ制御部１２１を介して、記憶部１２２から、そのエントリ６のラインデータ６１０を読み出す（ステップＳ１２）。具体例として、ストア命令３００の対象のエントリ６が、アドレスアレイ１２２１において、行番号が２のＷａｙ＿３に発見された場合を説明する。この場合、アレイ制御部１２１は、データアレイ１２２２において、行番号が２のＷａｙ＿３に格納されている１２８Ｂのラインデータ６１０を読み出して、そのデータをマージ部１３０に対して出力する。
【００６３】
一方、ストア命令３００の対象のエントリ６がまだ記憶部１２２に格納されていない場合（ステップＳ１１のＮＯ）、マージ部１３０は、主記憶装置２１１からストア命令３００の対象であるブロックを含むラインのデータを読み出す（ステップＳ２０）。具体的には、マージ部１３０は、ストア命令３００のアドレス（上位）３６１およびアドレス（中位）３６２によって特定されるラインに記憶された１２８Ｂのラインデータ４１０を、主記憶装置２１１から読み出す。
【００６４】
ステップＳ１２またはステップＳ２０の次に、マージ部１３０は、読み出したデータに、ストアデータ４００をマージ（上書き）する（ステップＳ１３）。具体的には、マージ部１３０は、記憶部１２２から読み出したラインデータ６１０、または主記憶装置２１１から読み出したデータにおけるストア命令３００のアドレス（下位）３６２が示す位置（ブロック）に、ストアデータ４００を上書きする。
【００６５】
次に、マージ部１３０は、アレイ制御部１２１を介して、マージしたデータでエントリ６を更新する（ステップＳ１４）。具体的には、ステップＳ１２においてラインデータ６１０を読み出していた場合、マージ部１３０は、同じエントリ６のデータアレイ１２２２のラインデータ６１０に、上書きされたデータを格納する。さらに、マージ部１３０は、そのエントリ６におけるアドレスアレイ１２２１の有効ブロック情報６０２に対して、ストアデータ４００が格納されたブロックに対応するビットを「１」に更新する。
【００６６】
一方、ステップＳ２０において主記憶装置２１１からデータを読み出していた場合、マージ部１３０は、ストア命令３００のアドレス（中位）３６２に対応する行の空き領域に、新たなエントリ６を確保する。新たなエントリ６においては、ストア命令３００のアドレス（上位）３６１のアドレス情報が、アドレスアレイ１２２１のラインアドレス情報６０１に格納される。また、有効ブロック情報６０２のすべてのビットが、「０」で初期化される。その後、マージ部１３０は、その新たなエントリ６に対して、ステップＳ１２においてラインデータ６１０を読み出していた場合と同様に、ラインデータ６１０へのデータの格納と有効ブロック情報６０２の更新を行う。
【００６７】
最後に、マージ部１３０は、アレイ制御部１２１を介して、マージ完了フラグ１２２８を更新する（ステップＳ１５）。マージ部１３０は、アレイ制御部１２１を介して、すべてのブロックにストアデータ４００が格納されているエントリ６に対応するマージ完了フラグ１２２８を「１」に更新する。具体的には、マージ部１３０は、ステップＳ１４で更新した有効ブロック情報６０２のすべてのビットが「１」である場合、そのエントリ６に対応するマージ完了フラグ１２２８に、マージが完了したエントリを表す「１」をセットする。そうでない場合、マージ部１３０は、そのエントリ６に対応するマージ完了フラグ１２２８に、マージが完了していないエントリを表す「０」をセットする。
【００６８】
以上が、中央処理装置２１０からストア命令３００が発行された際に行われるマージの動作である。例えば、中央処理装置２１０は、連続する２４Ｂのデータを書き込む場合、そのデータを８Ｂずつ３つに分割したブロックごとに、合計３つのストア命令３００を発行する。ストアマージ装置１００は、その３つのストア命令３００に対応して、上述したマージの動作を３回繰り返すことにより、図６に示すように、３つのストア命令３００を反映した１つのラインデータ６１０を生成することができる。
【００６９】
なお、上述したマージの動作において、マージ部１３０がアレイ制御部１２１を介して行う動作は、アレイ制御部１２１が、マージ部１３０による制御を受けずに能動的に行ってもよい。
【００７０】
次に、図９を参照して、出力指示部１４０から出力指示５００が発行された際に行われる追い出しの動作を説明する。図９は、第２の実施形態におけるストアマージ装置１００の追い出し処理の動作を示すフローチャートである。以下では、図２を参照して、情報の流れを説明する。また、図３を参照して、ストアバッファ１２０と出力部１５０の構成を説明する。
【００７１】
以下の説明の初めにおいて、アドレスアレイ１２２１およびマージ完了フラグ１２２８は、図８に表す状態であることを前提とする。図８は、第２の実施形態におけるアドレスアレイ１２２１およびマージ完了フラグ１２２８の一例を示す図である。図８において、アドレスアレイ１２２１の各欄に記述される文字列は、有効ブロック情報６０２が記憶するマージ済みのブロックの位置から求められるマージ済みのデータサイズを表す。また、図８において、アドレスアレイ１２２１が空欄であるエントリ６は、ラインデータ６１０が格納されていない未使用のエントリであることを表す。これに対して、図８のアドレスアレイ１２２１において文字列が記述される欄のエントリ６は、有効なエントリである。
【００７２】
まず、出力指示部１４０において、出力対象の指定なしの出力指示５００が発生する（ステップＳ３０）。本実施形態では、出力対象の指定なしで出力が求められる場合の一例として、出力指示部１４０は、ライトバッファ１６０の空き容量が閾値以下となった場合に、出力部１５０に対して、出力指示５００を送る。すなわち、出力指示部１４０は、ライトバッファ１６０の空き容量の状態を定期的に監視する。
【００７３】
出力部１５０においては、エントリ選択部１５１が、出力指示５００を受ける。エントリ選択部１５１は、アレイ制御部１２１を介して、すべてのブロックにストアデータ４００が格納されているエントリ６を含むグループ（行）を優先的に選択する（ステップＳ３１）。具体的には、エントリ選択部１５１は、マージ完了フラグ１２２８が「１」である行のエントリを選択する。例えば、図８ならば、エントリ選択部１５１は、行番号が３、５、７、または８番のいずれか１つの行を選択してもよい。もし、マージ完了フラグ１２２８が「１」の行がない場合、エントリ選択部１５１は、所定のグループ選択方法によって、有効なエントリ６を含む行を選択してもよい。例えば、エントリ選択部１５１は、行番号が小さい順に、有効なエントリ６を含む行を探してもよい。
【００７４】
次に、エントリ選択部１５１は、選択したグループからすべてのブロックにストアデータ４００が格納されているエントリ６を優先的に選択する（ステップＳ３２）。具体的には、エントリ選択部１５１は、アドレスアレイ１２２１の選択された行に含まれる各エントリ６の有効ブロック情報６０２がすべて「１」であるエントリ６を選択する。例えば、図８において、７行目が選択された場合、エントリ選択部１５１は、「Ｗａｙ＿２」列のエントリ６を選択する。もし、マージ完了フラグ１２２８が「１」ではない行が選択されていた場合、エントリ選択部１５１は、所定のエントリ選択方法によって、いずれかの有効なエントリ６を選択してもよい。例えば、エントリ選択部１５１は、選択された行における先頭の列から有効なエントリ６を探してもよい。エントリ選択部１５１は、選択したエントリ６をデータ選択部１５２に通知する。
【００７５】
エントリ選択部１５１およびデータ選択部１５２は、選択したエントリ６を出力する（追い出す）（ステップＳ３３）。エントリ選択部１５１は、選択したアドレスアレイ１２２１のエントリ６の情報に基づいて、ストア命令３０１を生成する。そして、エントリ選択部１５１は、生成したストア命令３０１をライトバッファ１６０に対して出力する。また、データ選択部１５２は、アレイ制御部１２１を介して、データアレイ１２２２から、選択されたエントリ６に対応するラインデータ６１０を読み出す。そして、データ選択部１５２は、読み出したラインデータ６１０を含むストアデータ４０１をライトバッファ１６０に対して出力する。
【００７６】
このストア命令３０１のアドレス情報３６０は、主記憶装置２１１におけるラインデータ６１０の先頭のアドレス情報を含む。すなわち、アドレス（上位）３６１は、アドレスアレイ１２２１における選択されたエントリ６のラインアドレス情報６０１の内容を含む。アドレス（中位）３６２は、アドレスアレイ１２２１の選択された行に対応するアドレス情報を含む。アドレス（下位）は、書き込みのラインの先頭位置を表すアドレス情報を含む。
【００７７】
エントリ６の出力に際して、出力されたエントリ６は、アレイ制御部１２１を介して、削除（無効化）される。例えば、アレイ制御部１２１は、アドレスアレイ１２２１におけるラインアドレス情報６０１に、マイナスの整数値などのアドレス値と識別可能な値を書き込むことによって、出力されたエントリ６を無効化してもよい。また、アレイ制御部１２１は、出力されたエントリ６が削除された結果に応じて、マージ完了フラグ１２２８を更新する。例えば、エントリ６が出力された行にマージ完了エントリがなくなった場合、アレイ制御部１２１は、マージ完了フラグ１２２８を「０」に更新する。
【００７８】
ライトバッファ１６０に出力されたストア命令３０１およびストアデータ４０１は、一時的に蓄積された後、ライトバッファ１６０により、所定の周期で、主記憶装置２１１に対して順次出力される。
【００７９】
以上が、出力指示部１４０から出力指示５００が発行された際に行われる追い出しの動作である。
【００８０】
以上、本実施形態には、上述した第１の実施形態と同様、ストアバッファ１２０における出力（追い出し）対象範囲の指定がない追い出し動作においても、効率が良いストアバッファ１２０の制御ができるストアマージ装置などを提供できるという効果がある。
【００８１】
その理由は、エントリ選択部１５１は、アドレスアレイ１２２１の行（グループ７）ごとのマージ完了フラグ１２２８によって、出力対象とするエントリ６の選択範囲を絞り込むことができるからである。そして、エントリ選択部１５１は、絞り込んだ行の範囲で１つ１つのエントリ６の状態をチェックすれば済むからである。
【００８２】
本実施形態におけるエントリの選択方法は、エントリの選択時間が短い点でも、追い出すエントリのマージ率が高い点でも効率が良いと言える。例えば、アドレスアレイ１２２１のすべてのエントリを順に調べてマージ済みのエントリを選択する方法などに比べて、本実施形態においては、エントリ選択の時間が大幅に短縮される。
【００８３】
また、本実施形態は、エントリ選択の時間を短縮する方法として、例えば、アドレスアレイ１２２１の行を先頭から順に選択して、エントリ６を選択する方法に対しても、マージ率の点で優れる。行を先頭から順位選択する方法の場合、図８を例にすると、出力順は、１行目のＷａｙ＿２（マージ済みデータサイズは１６Ｂ）、２行目のＷａｙ＿１（同２４Ｂ）、そして、３行目のＷａｙ＿１（同１２８Ｂ）と続く。すなわち、この方法では、マージ済みデータサイズが１６Ｂおよび２４Ｂのようにマージ率が低いエントリも出力されてしまう。マージ率が低いエントリ６が追い出された後に、同じラインに属するブロックへのストア命令３００を受ける可能性は、マージ完了エントリに対するそれより高い。したがって、マージ率が低いエントリ６を追い出すことは、ストアマージ装置１００の主記憶装置２１１に対するスループットを低下させる恐れがあると言える。一方、本実施形態のエントリ選択部１５１による出力順は、３行目のＷａｙ＿１（同１２８Ｂ）、５行目のＷａｙ＿Ｎ（１２８Ｂ）、そして、７行目のＷａｙ＿２（同１２８Ｂ）となる。本実施形態のエントリ選択部１５１は、マージ率が高いエントリ６を出力できるという点でも効果が高い。
【００８４】
また、本実施形態には、上述した第１の実施形態と同様、主記憶装置２１１に対する出力回数が削減できるストアマージ装置などを提供できるという効果もある。
【００８５】
その理由は、出力部１５０が、出力指示部１４０による出力の指示があるまで、主記憶装置２１１に対してストア命令を反映したデータであるエントリ６を出力しないからである。すなわち、マージ部１３０が、出力指示があるまで保持されるストアバッファ１２０に対して、複数のストア命令をマージすることができるからである。
【００８６】
＜第３の実施形態＞
次に、上述した第２の実施形態を基本とする第３の実施形態について説明する。以下では、第３の実施形態に係る特徴的な部分を中心に説明し、第２の実施形態と同様な構成を有する第３の実施形態の構成要素には、第２の実施形態で付した参照符号と同一の参照符号を付し、その構成要素について重複する詳細な説明は省略する。
【００８７】
まず、図１０を参照して、以下に本実施形態の構成を説明する。図１０は、第３の実施形態におけるストアバッファ１２０および出力部１５０の詳細な構成を示すブロック図である。なお、図面中の矢印の向きは、一例を示すものであり、ブロック間の信号または情報の伝送の向きを限定するものではない。
【００８８】
本実施形態は、図２の情報処理装置２００に対して、図１０に示すストアバッファ１２０および出力部１５０を適用した構成である。すなわち、図２に示す通り、本実施形態における情報処理装置２００は、中央処理装置２１０、ストアマージ装置１００、および主記憶装置２１１を含む。ストアマージ装置１００、中央処理装置２１０、および主記憶装置２１１のそれぞれの役割、接続関係、およびデータの送受信関係などは、第２の実施形態と同様であるので、詳細な説明は省略する。
【００８９】
本実施形態においても、情報処理装置２００は、中央処理装置（ＣＰＵ）２１０を用いて実行されるコンピュータ・プログラム（ソフトウェア・プログラム）の制御により動作する一般的な情報処理装置（コンピュータ）によって構成されても良い。または、情報処理装置２００の各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、情報処理装置２００をコンピュータによって実現したハードウェア構成例については、図１１を参照して後述する。
【００９０】
本実施形態においても、図２に示す通り、ストアマージ装置１００は、ストアバッファ１２０、マージ部１３０、出力指示部１４０、出力部１５０、およびライトバッファ１６０を含む。図１０を参照すると、本実施形態におけるストアバッファ１２０は、アレイ制御部１２１および記憶部１２２を含む。出力部１５０は、エントリ選択部１５１、およびデータ選択部１５２を含む。
【００９１】
本実施形態における記憶部１２２は、アドレスアレイ１２２１、データアレイ１２２２、およびマージ完了フラグ１２２８に加えて、さらにマージ中フラグ（マージ中情報）７２２８を含む点が第２の実施形態と異なる。また、マージ部１３０およびエントリ選択部１５１の動作の一部が、第２の実施形態と異なる。これら以外の機能部および記憶領域の構成と内容は、第２の実施形態と同様であるので、重複する詳細な説明は省略する。
【００９２】
マージ中フラグ（マージ中情報）７２２８は、第２の実施形態におけるマージ完了フラグ１２２８を基本とする。本実施形態では、マージ中フラグ７２２８が「１」である場合、対応するアドレスアレイ１２２１の行に、ラインデータ６１０に所定数以上のマージ済みであるブロックが含まれることを表す。マージ中フラグ７２２８は、対応する行にマージ率が所定値より高いエントリが含まれることを表すとも言える。すなわち、本実施形態では、第１の実施形態におけるエントリマージ状態情報８が、マージ完了フラグ１２２８とマージ中フラグ７２２８との２つによって実現されている。本実施形態では、マージ中フラグ７２２８は、一具体例として、アドレスアレイ１２２１の各行に対応づけられた１ビットのレジスタである。マージ中フラグ７２２８は、アドレスアレイ１２２１およびデータアレイ１２２２とは別の記憶装置であってもよい。
【００９３】
以下に、本実施形態におけるマージ部１３０およびエントリ選択部１５１の動作が、第２の実施形態と異なる点を説明する。
【００９４】
本実施形態におけるマージ部１３０は、第２の実施形態におけるマージ部１３０を基本とする。本実施形態では、マージ部１３０は、マージ完了フラグ１２２８を更新する際に、さらにマージ中フラグ７２２８も更新する点が第２の実施形態と異なる。マージ部１３０は、具体的には、マージ処理を行った結果、対象のエントリ６において、有効ブロック情報６０２の所定数以上のビットが「１」（すなわちマージ済み）となる場合に、アレイ制御部１２１を介して、マージ中フラグ７２２８を「１」にセットする。
【００９５】
エントリ選択部１５１は、出力指示５００を受けた際、マージ完了フラグ１２２８に加えて、マージ中フラグ７２２８にも基づいて、マージ完了エントリを優先的に選択することができる。具体的には、エントリ選択部１５１は、マージ完了フラグ１２２８が「１」の行がない場合、マージ中フラグ７２２８が「１」の行を選択する。もし、マージ完了フラグ１２２８が「１」の行も、マージ中フラグ７２２８が「１」の行もない場合は、エントリ選択部１５１は、所定のグループ選択方法によって、いずれか１つの有効なエントリ６を含む行を選択してもよい。
【００９６】
また、出力部１５０がエントリ６を出力した後、アレイ制御部１２１を介して、出力されたエントリ６が削除された結果に応じて、マージ完了フラグ１２２８に加えて、マージ中フラグ７２２８も更新する。例えば、エントリ６が出力された行にマージ中エントリがなくなった場合、アレイ制御部１２１は、マージ中フラグ７２２８を「０」に更新する。
【００９７】
以上が、本実施形態におけるマージ部１３０およびエントリ選択部１５１の動作が、第２の実施形態と異なる点である。
【００９８】
以上、本実施形態には、上述した第２の実施形態と同様の効果に加えて、さらに、ストアバッファ１２０の制御における効率を向上させるという効果がある。
【００９９】
その理由は、本実施形態におけるエントリ選択部１５１は、マージ完了エントリがない場合に、マージ中フラグ７２２８に基づいて、マージ率が所定以上のエントリを選択することができるからである。本実施形態における出力部１５０は、例えば、マージ完了エントリをすべて追い出した後に、マージ中フラグ７２２８によって、マージ完了に近いエントリを優先して追い出すことができる。これにより、マージ率が低いエントリ６が追い出されることによる、ストアマージ装置１００の主記憶装置２１１に対するスループットの低下を緩和することができるという効果がある。
【０１００】
なお、上述した各実施形態において図１乃至図３および図１０に示した各部は、それぞれ独立したハードウェア回路で構成されていてもよいし、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。ただし、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。このような場合のハードウェア環境の一例を、図１１を参照して説明する。
【０１０１】
図１１は、本発明の各実施形態、および、その変形例に係るストアマージシステムに適用可能なコンピュータ（情報処理装置）の構成を例示する図である。すなわち、図１１は、上述した各実施形態におけるストアマージ装置１、および情報処理装置２００の少なくともどちらかを実現可能なコンピュータの構成であって、上述した各実施形態における各機能を実現可能なハードウェア環境を示す。
【０１０２】
図１１に示したコンピュータ９００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０２、およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３を備え、これらがバス９０７を介して接続された構成を有する。
【０１０３】
上述した各実施形態を例に説明した本発明は、各実施形態の説明において参照したブロック構成図（図１乃至図３および図１０）あるいはフローチャート（図７および図９）の機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、当該ハードウェアのＣＰＵ９０１に読み出して実行することによって達成される。また、このコンピュータ内に供給されたコンピュータ・プログラムは、読み書き可能な一時記憶メモリであるＲＡＭ９０３、またはＲＯＭ９０３などの不揮発性の記憶デバイスに格納すれば良い。
【０１０４】
なお、上述した実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下の付記に限定されるものではない。
【０１０５】
（付記１）
ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段と、
外部装置から受けた、記憶装置に対してストアデータの書き込みを指示するストア命令に基づいて、前記ストアデータを前記記憶手段の前記エントリに格納するマージ処理を実行し、前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新するマージ手段と、
前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、さらに選択した前記グループから、マージ完了のエントリを優先的に選択して、前記記憶装置に対して選択したエントリを出力する出力手段と
を含むストアマージ装置。
【０１０６】
（付記２）
前記出力手段は、前記マージ完了のエントリを含むグループがない場合に、前記ストアデータが格納されたエントリである有効なエントリを含むグループを選択し、さらに選択した前記グループから、前記有効なエントリを選択して、前記記憶装置に対して選択したエントリを出力する
付記１記載のストアマージ装置。
【０１０７】
（付記３）
前記エントリマージ状態情報は、前記マージ完了のエントリを含むグループを示すマージ完了情報を含む
付記１または２記載のストアマージ装置。
【０１０８】
（付記４）
前記エントリマージ状態情報は、さらに所定数以上のブロックに前記ストアデータが格納されているマージ中のエントリを含むグループを示すマージ中情報を含み、
前記出力手段は、前記マージ完了のエントリを含むグループがない場合に、前記マージ中情報に基づいてグループを選択し、さらに選択した前記グループから前記マージ中のエントリを選択して、前記記憶装置に対して選択したエントリを出力する
付記３記載のストアマージ装置。
【０１０９】
（付記５）
付記１乃至４のいずれか１つのストアマージ装置と、
前記ストアマージ装置に対して、ストアデータの書き込みを指示するストア命令を発行する中央処理装置と、
前記ストアマージ装置から出力されたエントリを記憶する記憶装置と
を含む情報処理装置。
【０１１０】
（付記６）
記憶装置に対して、ストアデータの書き込みを指示するストア命令を受け取り、
ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段に対して、前記ストア命令に基づいて、前記ストアデータを前記エントリに格納するマージ処理を実行し、
前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新し、
前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、
さらに選択した前記グループから、マージ完了のエントリを優先的に選択し、
前記記憶装置に対して選択したエントリを出力する
ストア制御方法。
【０１１１】
（付記７）
前記マージ完了のエントリを含むグループがない場合に、
前記ストアデータが格納されたエントリである有効なエントリを含むグループを選択し、
さらに選択した前記グループから、前記有効なエントリを選択し、
前記記憶装置に対して選択したエントリを出力する
付記６記載のストア制御方法。
【０１１２】
（付記８）
前記エントリマージ状態情報は、前記マージ完了のエントリを含むグループを示すマージ完了情報と、所定数以上のブロックに前記ストアデータが格納されているマージ中のエントリを含むグループを示すマージ中情報とを含み、
前記マージ完了情報に基づいて、
すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを選択し、
さらに選択した前記グループから、マージ完了のエントリを優先的に選択し、
前記記憶装置に対して選択したエントリを出力し、
前記マージ完了のエントリを含むグループがない場合に、
前記マージ中情報に基づいてグループを選択し、
さらに選択した前記グループから前記マージ中のエントリを選択し、
前記記憶装置に対して選択したエントリを出力する
付記６または７記載のストア制御方法。
【０１１３】
（付記９）
記憶装置に対して、ストアデータの書き込みを指示するストア命令を受け取り、ブロックデータの格納が可能な複数のブロックを含む複数のエントリと、さらに前記複数のエントリが分けられたグループごとに、前記グループに含まれる前記複数のエントリにおけるマージの状態を表すエントリマージ状態情報とを関連付けて記憶する記憶手段に対して、前記ストア命令に基づいて、前記ストアデータを前記エントリに格納するマージ処理と、
前記マージ処理の対象となったエントリを含むグループに関連づけられた前記エントリマージ状態情報を更新し、前記エントリマージ状態情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを優先的に選択し、さらに選択した前記グループから、マージ完了のエントリを優先的に選択して、前記記憶装置に対して選択したエントリを出力する出力処理と
をコンピュータに実行させるコンピュータ・プログラム。
【０１１４】
（付記１０）
前記出力処理において、
前記マージ完了のエントリを含むグループがない場合に、前記ストアデータが格納されたエントリである有効なエントリを含むグループを選択し、さらに選択した前記グループから、前記有効なエントリを選択し、前記記憶装置に対して選択したエントリを出力する
付記９記載のコンピュータ・プログラム。
【０１１５】
（付記１１）
前記エントリマージ状態情報は、前記マージ完了のエントリを含むグループを示すマージ完了情報と、所定数以上のブロックに前記ストアデータが格納されているマージ中のエントリを含むグループを示すマージ中情報とを含み、
前記出力処理において、
前記マージ完了情報に基づいて、すべてのブロックに前記ストアデータが格納されているマージ完了のエントリを含むグループを選択し、さらに選択した前記グループから、マージ完了のエントリを優先的に選択して、前記記憶装置に対して選択したエントリを出力し、
前記マージ完了のエントリを含むグループがない場合に、前記マージ中情報に基づいてグループを選択し、さらに選択した前記グループから前記マージ中のエントリを選択して、前記記憶装置に対して選択したエントリを出力する
付記９または１０記載のコンピュータ・プログラム。
【符号の説明】
【０１１６】
１、１００    ストアマージ装置
２、１２２    記憶部
３、１３０    マージ部
５、１５０    出力部
６    エントリ
７    グループ
８    エントリマージ状態情報
１０    外部装置
１１    記憶装置
１２０    ストアバッファ
１２１    アレイ制御部
１２２１    アドレスアレイ
１２２２    データアレイ
１２２８    マージ完了フラグ（マージ完了情報）
１４０    出力指示部
１５１    エントリ選択部
１５２    データ選択部
１６０    ライトバッファ
２００    情報処理装置
２１０    中央処理装置
２１１    主記憶装置
３００、３０１    ストア命令
３５０    コマンド情報
３６０    アドレス情報
３６１    アドレス（上位）
３６２    アドレス（中位）
３６３    アドレス（下位）
４００、４０１    ストアデータ
４１０    ラインデータ
５００    出力指示
６００    エントリ情報
６０１    ラインアドレス情報
６０２    有効ブロック情報
６１０    ラインデータ
７２２８    マージ中フラグ（マージ中情報）
９００    情報処理装置（コンピュータ）
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０７    バス
【図１】
2017111484.tif 000003
【図２】
2017111484.tif 000004
【図３】
2017111484.tif 000005
【図４】
2017111484.tif 000006
【図５】
2017111484.tif 000007
【図６】
2017111484.tif 000008
【図７】
2017111484.tif 000009
【図８】
2017111484.tif 000010
【図９】
2017111484.tif 000011
【図１０】
2017111484.tif 000012
【図１１】
2017111484.tif 000013