(57)【要約】【課題】無効化トランザクションを削減し、トランザクションを滞りなく処理できる情報処理装置を提供する。【解決手段】メモリと、キャッシュメモリを有し、メモリへのアクセスを指示するトランザクションを発行する複数のプロセッサと、複数のプロセッサに共有され、トランザクションに基づいてデータが登録される共有キャッシュメモリと、複数のプロセッサからトランザクションを受信し、受信したトランザクションに応じて共有キャッシュメモリを制御する制御回路とを備える情報処理装置とする。複数のプロセッサは、メモリへのライトデータの書き込みを指示するライトトランザクションを発行する際に、ライトトランザクションに自身を示す識別情報を付与する。制御回路は、ライトトランザクションを受信した際に、ライトトランザクションに付与された識別情報の値に応じて共有キャッシュメモリを制御する。【選択図】      図１
2020135196.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
キャッシュメモリを有し、前記メモリへのアクセスを指示するトランザクションを発行する複数のプロセッサと、
前記複数のプロセッサに共有され、前記トランザクションに基づいてデータが登録される共有キャッシュメモリと、
前記複数のプロセッサから前記トランザクションを受信し、受信した前記トランザクションに応じて前記共有キャッシュメモリを制御する制御回路とを備え、
前記複数のプロセッサは、
前記メモリへのライトデータの書き込みを指示するライトトランザクションを発行する際に、前記ライトトランザクションに自身を示す識別情報を付与し、
前記制御回路は、
前記ライトトランザクションを受信した際に、前記ライトトランザクションに付与された前記識別情報の値に応じて前記共有キャッシュメモリを制御する情報処理装置。
【請求項２】
前記制御回路は、
前記複数のプロセッサのいずれかによって発行された前記ライトトランザクションに応じて前記共有キャッシュメモリにデータを登録する際に、前記ライトトランザクションのアドレスに含まれるセットアドレスをエントリとして、前記アドレスに含まれるキーアドレスと、前記データのステータスと、前記データが書き込まれる際に前記ライトトランザクションを発行した前記プロセッサを示す前記識別情報に対応する識別子とを少なくとも含むタグを前記データが格納されるキャッシュラインに登録し、
前記ライトトランザクションに応じて前記共有キャッシュメモリに格納された前記データを更新する際に、前記データに関連付けられた前記タグに含まれる前記識別子の値に応じて前記データを更新する請求項１に記載の情報処理装置。
【請求項３】
前記制御回路は、
前記ライトトランザクションに応じて前記共有キャッシュメモリに格納された前記データを更新する際に、
前記識別子の値が無効を示す場合、
前記ライトトランザクションの発行元の前記プロセッサの前記識別情報の値で前記タグの前記識別子の値を更新し、前記ライトトランザクションの発行元以外の前記プロセッサにキャッシュ無効化トランザクションを発行し、
前記識別子の値が有効を示す場合、
前記ライトトランザクションの発行元の前記プロセッサの前記識別情報の値と、前記ライトトランザクションで指定された前記データに関連付けられた前記タグに含まれる前記識別子の値とを比較し、
前記識別情報の値と前記識別子の値とが異なるときは、前記ライトトランザクションの発行元の前記プロセッサの前記識別情報の値で前記タグの前記識別子の値を更新し、更新前の前記識別子が示す前記プロセッサに前記キャッシュ無効化トランザクションを発行し、
前記識別情報の値と前記識別子の値とが同じときは、前記キャッシュ無効化トランザクションを発行しない請求項２に記載の情報処理装置。
【請求項４】
前記複数のプロセッサは、
前記共有キャッシュメモリを構成する前記キャッシュラインより小さいデータ幅の前記ライトデータの書き込みを指定する前記ライトトランザクションを短期間内に複数回にわたり同一の前記キャッシュラインに発行中であることを示す付随情報を前記ライトトランザクションに付与し、
前記制御回路は、
前記ライトトランザクションに応じて前記共有キャッシュメモリにデータを登録する際に、前記ライトトランザクションのアドレスに含まれるセットアドレスをエントリとして、前記アドレスに含まれるキーアドレスと、前記データのステータスと、前記データが書き込まれる際に前記ライトトランザクションを発行した前記プロセッサを示す前記識別情報に対応する識別子と、前記付随情報に対応するフラグとを少なくとも含むタグを前記データと同じキャッシュラインに登録し、
前記ライトトランザクションに応じて前記共有キャッシュメモリに格納された前記データを前記ライトデータで更新する際に、前記識別情報の値と前記識別子の値とが同じ場合、前記ライトトランザクションに付与された前記付随情報の値と前記フラグの値とを比較し、
前記ライトトランザクションに付与された前記付随情報の値と前記フラグの値とが一致しない場合、前記付随情報の値で前記フラグの値を更新し、
前記ライトトランザクションに付与された前記付随情報の値と前記フラグの値とが一致する場合、前記フラグの値を更新しない請求項２または３に記載の情報処理装置。
【請求項５】
前記タグに含まれる前記ステータスは、
前記共有キャッシュメモリに格納された前記データを格納する前記キャッシュメモリがあることを示す第１の状態と、
前記共有キャッシュメモリに格納された前記データを格納する前記キャッシュメモリがないことを示す第２の状態とのいずれかに設定され、
前記制御回路は、
前記ライトトランザクションに応じて前記共有キャッシュメモリに格納された前記データを前記ライトデータで更新する際に、
前記ステータスが前記第１の状態の場合、前記ライトトランザクションの発行元の前記プロセッサの前記識別情報の値で前記タグの前記識別子の値を更新するとともに、前記ライトトランザクションの発行元以外の前記プロセッサにキャッシュ無効化トランザクションを発行し、
前記ステータスが前記第２の状態の場合、前記データに関連付けられた前記タグに含まれる前記識別子の値に応じて前記データを更新する請求項２乃至４のいずれか一項に記載の情報処理装置。
【請求項６】
前記タグに含まれる前記ステータスは、
前記共有キャッシュメモリに格納された前記データを格納する前記キャッシュメモリがあることを示す第１の状態と、
前記共有キャッシュメモリに格納された前記データを格納する前記キャッシュメモリがないことを示す第２の状態と、
前記共有キャッシュメモリに格納された前記データが前記キャッシュメモリおよび前記メモリに格納されていないことを示す第３の状態とのいずれかに設定され、
前記複数のプロセッサは、
前記ライトトランザクションを発行する際に、前記ライトトランザクションによって指定される前記ライトデータが全ての前記複数のプロセッサの前記キャッシュメモリに格納されていないことを示す未登録情報を前記ライトトランザクションに付与し、
前記制御回路は、
前記ライトトランザクションに応じて前記共有キャッシュメモリに格納された前記データを前記ライトデータで更新する際に、
前記ステータスが前記第１の状態の場合、前記ライトトランザクションの発行元の前記プロセッサの前記識別情報の値で前記タグの前記識別子の値を更新するとともに、前記ステータスを前記第３の状態に更新し、前記ライトトランザクションの発行元以外の前記プロセッサにキャッシュ無効化トランザクションを発行し、
前記ステータスが前記第２の状態の場合、前記データに関連付けられた前記タグに含まれる前記識別子の値に応じて前記データを更新するともに、前記ステータスを前記第３の状態に更新し、
前記ステータスが前記第３の状態の場合、前記データに関連付けられた前記タグに含まれる前記識別子の値に応じて前記データを更新する請求項２乃至４のいずれか一項に記載の情報処理装置。
【請求項７】
前記制御回路は、
データの読み出しを指示するリードトランザクションに応じて前記共有キャッシュメモリからデータを読み出す際に、前記タグに含まれる前記識別子が有効の場合には前記識別子を無効化する請求項２乃至６のいずれか一項に記載の情報処理装置。
【請求項８】
発行元のプロセッサを示す識別情報が付与されたトランザクションを複数の前記プロセッサから受信する受信回路と、
前記トランザクションに応じて前記複数のプロセッサに共有される共有キャッシュメモリを前記識別情報の値を用いて制御し、前記トランザクションに応じたリプライを生成する共有キャッシュ制御回路と、
前記共有キャッシュ制御回路によって生成された前記リプライを前記複数のプロセッサのいずれかに送出する送出回路とを有する制御装置。
【請求項９】
発行元のプロセッサを示す識別情報が付与されたトランザクションを複数の前記プロセッサから受信し、
前記トランザクションに応じて前記複数のプロセッサに共有される共有キャッシュメモリを前記識別情報の値を用いて制御し、
前記トランザクションに応じたリプライを生成し、
生成した前記リプライを前記複数のプロセッサのいずれかに送出する制御方法。
【請求項１０】
発行元のプロセッサを示す識別情報が付与されたトランザクションを複数の前記プロセッサから受信する処理と、
前記トランザクションに応じて前記複数のプロセッサに共有される共有キャッシュメモリを前記識別情報の値を用いて制御する処理と、
前記トランザクションに応じたリプライを生成する処理と、
生成した前記リプライを前記複数のプロセッサのいずれかに送出する処理とをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサによって共有される共有キャッシュメモリを備える情報処理装置、その共有キャッシュメモリの制御装置、制御方法、およびプログラムに関する。
【背景技術】
【０００２】
ストアスルーのキャッシュを持つ複数のプロセッサに共有されるストアインキャッシュ（以下、ストアイン共有キャッシュと呼ぶ）にデータが登録されている場合、接続されているプロセッサのキャッシュにもデータが保有されている可能性がある。任意のプロセッサからライトトランザクションが発行された際、既にストアイン共有キャッシュにデータが登録されている場合、同じストアイン共有キャッシュに接続された他のプロセッサが同じキャッシュラインのデータを保有している可能性がある。しかし、他のプロセッサの保有データは、更新前の古いデータになるために使い続けることはできない。
【０００３】
そのため、プロセッサからライトトランザクションが発行されると、同じ共有キャッシュに接続された他のプロセッサのキャッシュが保有するデータを無効化するためにキャッシュ無効化トランザクション（無効化トランザクションとも呼ぶ）が発行される。
【０００４】
メモリアクセスの負荷軽減等のために用いられるセカンドキャッシュに接続するプロセッサ数が増加すると、処理するトランザクションが増加してプロセッサに発行する無効化トランザクションが増加する可能性がある。プロセッサからのトランザクションを受信した後にアドレスインタリーブ等でトランザクションを並列処理する場合、並列化によって一時的にプロセッサへの無効化トランザクションの発行が増加する可能性がある。
【０００５】
プロセッサが発行するトランザクションのデータ幅とキャッシュラインサイズとは必ずしも一致しない。そのため、プロセッサ内の命令セットや構造によっては、プロセッサが発行するライトトランザクションのデータ幅がキャッシュラインサイズより小さいこともある。ライトトランザクションのデータ幅がキャッシュラインサイズより小さいと、同じキャッシュラインサイズ内に同じプロセッサから複数回にわたってライトトランザクションが発行されることがある。ライトトランザクションの発行の度にストアスルーのキャッシュへ無効化トランザクションを発行すると、本来は不要なトランザクションに対しても制御が必要となる。不要なトランザクションが多発すると、装置全体のトランザクション制御が滞って処理性能が低下する可能性がある。
【０００６】
特許文献１には、スカラユニットの同一キャッシュラインへの無効化要求を削減するデータ処理装置について開示されている。特許文献１の装置は、不要な無効化要求を削減することを目的とする。特許文献１の装置は、無効化要求が供給された後で、無効化要求の発行履歴に基づいて同一の無効化要求を削減する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第３５２２４６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１の装置によれば、無効化要求が発行された後であれば、無効化要求の発行履歴に基づいて同一の無効化要求を削減することができる。しかしながら、特許文献１の装置には、無効化要求が発行される前には、同一の無効化要求を削減することができないため、同一の無効化要求を削減する際にトランザクションが滞る可能性があるという問題点があった。
【０００９】
本発明の目的は、上述した課題を解決し、無効化トランザクションを削減し、トランザクションを滞りなく処理できる情報処理装置を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一態様の情報処理装置は、メモリと、キャッシュメモリを有し、メモリへのアクセスを指示するトランザクションを発行する複数のプロセッサと、複数のプロセッサに共有され、トランザクションに基づいてデータが登録される共有キャッシュメモリと、複数のプロセッサからトランザクションを受信し、受信したトランザクションに応じて共有キャッシュメモリを制御する制御回路とを備える。複数のプロセッサは、メモリへのライトデータの書き込みを指示するライトトランザクションを発行する際に、ライトトランザクションに自身を示す識別情報を付与する。制御回路は、ライトトランザクションを受信した際に、ライトトランザクションに付与された識別情報の値に応じて共有キャッシュメモリを制御する。
【００１１】
本発明の一態様の制御装置は、発行元のプロセッサを示す識別情報が付与されたトランザクションを複数のプロセッサから受信する受信回路と、トランザクションに応じて複数のプロセッサに共有される共有キャッシュメモリを識別情報の値を用いて制御し、トランザクションに応じたリプライを生成する共有キャッシュ制御回路と、共有キャッシュ制御回路によって生成されたリプライを複数のプロセッサのいずれかに送出する送出回路とを有する。
【００１２】
本発明の一態様の制御方法においては、発行元のプロセッサを示す識別情報が付与されたトランザクションを複数のプロセッサから受信し、トランザクションに応じて複数のプロセッサに共有される共有キャッシュメモリを識別情報の値を用いて制御し、トランザクションに応じたリプライを生成し、生成したリプライを複数のプロセッサのいずれかに送出する。
【００１３】
本発明の一態様のプログラムは、発行元のプロセッサを示す識別情報が付与されたトランザクションを複数のプロセッサから受信する処理と、トランザクションに応じて複数のプロセッサに共有される共有キャッシュメモリを識別情報の値を用いて制御する処理と、トランザクションに応じたリプライを生成する処理と、生成したリプライを複数のプロセッサのいずれかに送出する処理とをコンピュータに実行させる。
【発明の効果】
【００１４】
本発明によれば、無効化トランザクションを削減し、トランザクションを滞りなく処理できる情報処理装置を提供することが可能になる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態に係る情報処理装置のストアイン共有キャッシュに含まれるアドレスアレイについて説明するための概念図である。
【図３】本発明の第１の実施形態に係る情報処理装置のストアイン共有キャッシュに含まれるアドレスアレイに登録される識別子について説明するためのテーブルである。
【図４】本発明の第１の実施形態に係る情報処理装置のストアイン共有キャッシュに含まれるデータアレイについて説明するための概念図である。
【図５】本発明の第１の実施形態に係る情報処理装置のトランザクション制御部の構成の一例を示すブロック図である。
【図６】本発明の第１の実施形態に係る情報処理装置のトランザクション制御部がライトトランザクションを受信した際に行う制御について説明するためのフローチャートである。
【図７】本発明の第１の実施形態に係る情報処理装置のトランザクション制御部がリードトランザクションを受信した際に行う制御について説明するためのフローチャートである。
【図８】関連技術に係るライトトランザクション制御について説明するためのフローチャートである。
【図９】関連技術に係るリードトランザクション制御について説明するためのフローチャートである。
【図１０】本発明の第２の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図１１】本発明の第２の実施形態に係る情報処理装置のストアイン共有キャッシュに含まれるアドレスアレイについて説明するための概念図である。
【図１２】本発明の第２の実施形態に係る情報処理装置のトランザクション制御部がライトトランザクションを受信した際に行う制御について説明するためのフローチャートである。
【図１３】本発明の第２の実施形態に係る情報処理装置のトランザクション制御部がリードトランザクションを受信した際に行う制御について説明するためのフローチャートである。
【図１４】本発明の第３の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図１５】本発明の第３の実施形態に係る情報処理装置のトランザクション制御部がライトトランザクションを受信した際に行う制御について説明するためのフローチャートである。
【図１６】本発明の第３の実施形態に係る情報処理装置のトランザクション制御部がリードトランザクションを受信した際に行う制御について説明するためのフローチャートである。
【発明を実施するための形態】
【００１６】
以下に、本発明を実施するための形態について図面を用いて説明する。ただし、以下に述べる実施形態には、本発明を実施するために技術的に好ましい限定がされているが、発明の範囲を以下に限定するものではない。なお、以下の実施形態の説明に用いる全図においては、特に理由がない限り、同様箇所には同一符号を付す。また、以下の実施形態において、同様の構成・動作に関しては繰り返しの説明を省略する場合がある。
【００１７】
（第１の実施形態）
まず、本発明の第１の実施形態に係る情報処理装置について図面を参照しながら説明する。本実施形態においては、多数のプロセッサに接続されたストアインの共有キャッシュ（以下、ストアイン共有キャッシュと呼ぶ）を持つ情報処理装置を例に挙げて説明する。それぞれのプロセッサは、ストアスルーのキャッシュ（以下、ストアスルーキャッシュと呼ぶ）を有する。本実施形態の情報処理装置は、プロセッサとメモリとの間のトランザクションの送受信の制御や、ストアイン共有キャッシュの制御を行うトランザクション制御部（制御装置とも呼ぶ）を含む。本実施形態は、ストアイン共有キャッシュのアドレスアレイに、ライトトランザクションの発行元を示す識別子を登録することを特徴とする。
【００１８】
（構成）
図１は、本実施形態の情報処理装置１０の構成の概要の一例を示すブロック図である。情報処理装置１０は、複数のプロセッサ１１−１〜ｎ、トランザクション制御部１２、ストアイン共有キャッシュ１３、メモリ１５を備える（ｎは自然数）。
【００１９】
複数のプロセッサ１１−１〜ｎは、ソフトウェアプログラムに基づいて制御処理や演算処理を行う装置である。複数のプロセッサ１１−１〜ｎのそれぞれは、ストアスルーキャッシュ１１０−１〜ｎのそれぞれを有する。複数のプロセッサ１１−１〜ｎのそれぞれは、ストアスルーキャッシュ１１０−１〜ｎのそれぞれを介してトランザクション制御部１２に接続される。複数のプロセッサ１１−１〜ｎのそれぞれは、トランザクション制御部１２を介してストアイン共有キャッシュ１３やメモリ１５にアクセスする。以下において、複数のプロセッサ１１−１〜ｎのそれぞれを区別しないときはプロセッサ１１と記載する。
【００２０】
ストアスルーキャッシュ１１０−１〜ｎは、ストアスルー方式でデータが保持されるキャッシュメモリである。ストアスルーキャッシュ１１０−１〜ｎには、プロセッサ１１−１〜ｎによってメモリ１５にデータが書き込まれる際に、メモリ１５に書き込まれるのと同じデータが同時に書き込まれる。以下において、ストアスルーキャッシュ１１０−１〜ｎのそれぞれを区別しないときはストアスルーキャッシュ１１０と記載する。
【００２１】
複数のプロセッサ１１−１〜ｎは、メモリ１５へのライトデータの書き込みを指示するライトトランザクションをトランザクション制御部１２に送信する。また、複数のプロセッサ１１−１〜ｎは、メモリ１５からのデータの読み出しを指示するリードトランザクションをトランザクション制御部１２に送信する。
【００２２】
ライトトランザクションは、ライトデータと、そのライトデータが書き込まれるメモリ１５のアドレスとを指定する。また、ライトトランザクションには、そのライトトランザクションの発行元を示す識別情報が含まれる。例えば、プロセッサ１１−１が発行するライトトランザクションには、その発行元の識別情報（１）が含まれる。また、例えば、プロセッサ１１−２が発行するライトトランザクションには、その発行元の識別情報（２）が含まれる。
【００２３】
トランザクション制御部１２は、トランザクションの送受信制御やストアイン共有キャッシュの制御を行う。トランザクション制御部１２の詳細については後述する。
【００２４】
ストアイン共有キャッシュ１３は、複数のプロセッサ１１−１〜ｎによって共有される共有キャッシュメモリである。ストアイン共有キャッシュ１３は、トランザクション制御部１２に接続される。ストアイン共有キャッシュ１３は、トランザクション制御部１２を介して、複数のプロセッサ１１−１〜ｎからアクセスされる。ストアイン共有キャッシュ１３には、ストアイン方式でデータが書き込まれる。
【００２５】
ストアイン共有キャッシュ１３は、アドレスアレイ１３１とデータアレイ１３２とを含む。データアレイ１３２には、キャッシュラインごとにデータが格納される。アドレスアレイ１３１には、キャッシュラインのアドレス情報や、そのキャッシュラインに有効なデータが格納されているかを示す情報、そのキャッシュラインに格納されたデータの状態を含む情報（タグとも呼ぶ）が登録される。アドレスアレイ１３１に登録されるタグには、そのタグに関連付けられたデータを書き込むライトトランザクションを発行したプロセッサ１１を示す識別情報（識別子）が含まれる。
【００２６】
メモリ１５は、複数のプロセッサ１１−１〜ｎによって共有される主記憶装置である。メモリ１５は、トランザクション制御部１２に接続される。メモリ１５は、トランザクション制御部１２を介して、複数のプロセッサ１１−１〜ｎからアクセスされる。
【００２７】
以上が、情報処理装置１０の構成の概要についての説明である。なお、図１の情報処理装置１０の構成は一例であって、本実施形態の情報処理装置１０の構成をそのままの形態に限定するものではない。
【００２８】
次に、ストアイン共有キャッシュ１３に含まれるアドレスアレイ１３１およびデータアレイ１３２について図面を参照しながら説明する。
【００２９】
〔アドレスアレイ〕
図２は、ストアイン共有キャッシュ１３のアドレスアレイ１３１について説明するための概念図である。図２には、複数ウェイのセットアソシアティブ方式を用いる例を示す。
【００３０】
アドレスアレイ１３１は、キャッシュラインサイズごとの情報が登録される複数ウェイの構成を有する記憶領域である。アドレスアレイ１３１には、トランザクションで指定されたアドレス１４０の下位ビットであるセットアドレス１４２をエントリとして、そのトランザクションで書き込まれるデータのタグが登録される。アドレスアレイ１３１には、１つのエントリにつき、キーアドレス１４１、ステータス１４３、および識別子１４４を含むタグが１つ登録される。キーアドレス１４１は、アドレス１４０の上位ビットであり、アドレス１４０からセットアドレス１４２を除いたビット列である。
【００３１】
ステータス１４３は、キーアドレス１４１とセットアドレス１４２で示される当該アドレスのデータアレイ１３２の保有状況を示す。本実施形態では、ライトバック方式で使われるＭＳＩ（Modified、Shared、Invalid）キャッシュプロトコルを使用する例を挙げる。ＭＳＩキャッシュプロトコルでは、キャッシュラインの状態をＩｎｖａｌｉｄやＳｈａｒｅｄ、Ｍｏｄｉｆｉｅｄというステータス１４３で表現する。Ｉｎｖａｌｉｄは、そのキャッシュラインに格納されたデータの状態が無効であることを示す。Ｓｈａｒｅｄ（第１の状態とも呼ぶ）は、当該キャッシュ以外のキャッシュに同一のデータがあることを示す。Ｍｏｄｉｆｉｅｄ（第２の状態とも呼ぶ）は、当該キャッシュだけにそのデータがあり、メモリ１５にはそのデータがないことを示す。すなわち、ステータス１４３がＳｈａｒｅｄやＭｏｄｉｆｉｅｄのキャッシュラインは、プロセッサ１１のストアスルーキャッシュ１１０に同じデータが保持されている可能性があることを示す。
【００３２】
識別子１４４は、ライトトランザクションの発行元をコード化した情報である。本実施形態においては、同じキャッシュラインに複数回発行されるライトトランザクションの無効化トランザクションを削減対象とする。これは、多数のプロセッサ１１がストアイン共有キャッシュ１３に接続するような場合であっても、識別子１４４のビット数の増加を最小限に抑えるためである。そのため、本実施形態においては、リードトランザクションでは識別子１４４を無効化する。
【００３３】
図３は、識別子１４４の値と、その値に対応するプロセッサ１１とを関連付けるテーブル１５０の一例である。図３のテーブル１５０において、識別子１４４の値が０の場合、その識別子１４４が無効であることを示す。それに対し、図３のテーブル１５０において、識別子１４４の値が０以外の場合は、その識別子が有効であることを示す。例えば、識別子１４４の値１はプロセッサ１１−１、値２はプロセッサ１１−２、・・・、値０１１１はプロセッサ１１−７に対応する。
【００３４】
以上が、ストアイン共有キャッシュ１３が有するアドレスアレイ１３１についての説明である。なお、図２のアドレスアレイ１３１は一例であって、本実施形態の情報処理装置１０のストアイン共有キャッシュ１３のアドレスアレイ１３１をそのままの形態に限定するものではない。
【００３５】
〔データアレイ〕
図４は、ストアイン共有キャッシュ１３のデータアレイ１３２について説明するための概念図である。図４の例では、図２の例に対応させて、複数ウェイのセットアソシアティブ方式を用いる例を示す。
【００３６】
データアレイ１３２は、アドレスアレイ１３１と同様に、キャッシュラインサイズごとの情報を保持する複数ウェイの構成を有する記憶領域である。データアレイ１３２には、キャッシュラインごとのデータが保持される。データアレイ１３２は、セットアドレス１４２で示すエントリとウェイがアドレスアレイ１３１と同じ構成の１対１の関係を有する。データアレイ１３２には、１つのエントリにつき１つのキャッシュデータ（データ１４６）が書き込まれる。データ１４６は、キャッシュラインサイズのデータ幅を有する。そのため、キャッシュラインサイズより小さいデータ幅のデータの書き込みを指示するライトトランザクションの場合、キャッシュラインサイズのデータ幅の一部にメモリ１５から読み出されたデータが書き込まれる。
【００３７】
以上が、ストアイン共有キャッシュ１３のデータアレイ１３２についての説明である。なお、図４のデータアレイ１３２は一例であって、本実施形態の情報処理装置１０のストアイン共有キャッシュ１３のデータアレイ１３２をそのままの形態に限定するものではない。
【００３８】
〔トランザクション制御部〕
次に、トランザクション制御部１２（制御装置や制御回路とも呼ぶ）の構成について図面を参照しながら説明する。図５は、トランザクション制御部１２の構成について説明するためのブロック図である。図５のように、トランザクション制御部１２は、トランザクション受信部１２１、ストアイン共有キャッシュ制御部１２２、トランザクション・リプライ送出部１２３を有する。
【００３９】
トランザクション受信部１２１（受信回路とも呼ぶ）は、プロセッサ１１とメモリ１５に接続される。また、トランザクション受信部１２１は、ストアイン共有キャッシュ制御部１２２に接続される。
【００４０】
トランザクション受信部１２１は、プロセッサ１１が発行するトランザクションや、メモリ１５からのリードデータを受信する。トランザクション受信部１２１は、受信したトランザクションやリードデータをストアイン共有キャッシュ制御部１２２に送出する。
【００４１】
ストアイン共有キャッシュ制御部１２２（共有キャッシュ制御回路とも呼ぶ）は、ストアイン共有キャッシュ１３に接続される。また、ストアイン共有キャッシュ制御部１２２は、トランザクション受信部１２１とトランザクション・リプライ送出部１２３に接続される。
【００４２】
ストアイン共有キャッシュ制御部１２２は、ストアイン共有キャッシュ１３の制御と、トランザクション制御の一貫性を保つための制御を行う。ストアイン共有キャッシュ制御部１２２は、トランザクション受信部１２１からトランザクションを取得し、そのトランザクションで指定されたタグをストアイン共有キャッシュ１３から読み出す。ストアイン共有キャッシュ制御部１２２は、読み出したタグとトランザクションとを比較してその後の制御を決定し、その決定に基づいてストアイン共有キャッシュ１３にデータを書き込む。
【００４３】
また、ストアイン共有キャッシュ制御部１２２は、プロセッサ１１に送出されるリプライデータや無効化トランザクションを生成したり、メモリ１５へのトランザクションを生成したりする制御を行う。ストアイン共有キャッシュ制御部１２２は、生成したリプライデータやトランザクションをトランザクション・リプライ送出部１２３に送信する。
【００４４】
トランザクション・リプライ送出部１２３（送出回路とも呼ぶ）は、プロセッサ１１とメモリ１５に接続される。また、トランザクション受信部１２１は、ストアイン共有キャッシュ制御部１２２に接続される。
【００４５】
トランザクション・リプライ送出部１２３は、ストアイン共有キャッシュ制御部１２２からリプライデータやトランザクションを受信する。トランザクション・リプライ送出部１２３は、受信したリプライデータやトランザクションをプロセッサ１１に送出する制御を行う。また、トランザクション・リプライ送出部１２３は、トランザクションをメモリ１５に送出する制御を行う。
【００４６】
以上が、トランザクション制御部１２の構成についての説明である。なお、図５のトランザクション制御部１２の構成は一例であって、本実施形態のトランザクション制御部１２の構成をそのままの形態に限定するものではない。
【００４７】
（動作）
次に、本実施形態の情報処理装置１０が備えるトランザクション制御部１２の動作について図面を参照しながら説明する。以下においては、トランザクション制御部１２がプロセッサ１１からライトトランザクションを受信した際に行う制御と、トランザクション制御部１２がプロセッサ１１からリードトランザクションを受信した際に行う制御について説明する。以下のトランザクション制御部１２の動作に関する説明においては、図１に示した構成の名称や符号を用いる。
【００４８】
〔ライトトランザクション制御〕
まず、プロセッサ１１からライトトランザクションを受信した際にトランザクション制御部１２が行う制御（ライトトランザクション制御とも呼ぶ）について説明する。図６は、本実施形態におけるライトトランザクション制御の一例について説明するためのフローチャートである。図６のフローチャートでは、ライトトランザクションをライトＴｒｘ、無効化トランザクションをＣＩＴ（Cache Invalid Transaction）と略記する。また、図６のフローチャートにおいては、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【００４９】
図６において、まず、トランザクション制御部１２は、いずれかのプロセッサ１１が発行したライトＴｒｘを受信する（ステップＳ１０１）。
【００５０】
次に、トランザクション制御部１２は、ストアイン共有キャッシュ１３を検索し、受信したライトＴｒｘで指定されたデータが登録されているか検証する（ステップＳ１０２）。例えば、トランザクション制御部１２は、受信したライトＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ１３からタグを読み出す。そして、トランザクション制御部１２は、受信したライトＴｒｘと、読み出したタグとを比較する。
【００５１】
ステップＳ１０２において、指定されたデータが登録されていない場合（ステップＳ１０２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部１２は、データアレイ１３２にライトデータを書き込む。併せて、トランザクション制御部１２は、データアレイ１３２に登録したデータのタグをアドレスアレイ１３１に登録する（ステップＳ１０３）。ステップＳ１０３においてアドレスアレイ１３１に登録されるタグは、新たなキーアドレス、ライトＴｒｘの発行元のプロセッサ１１を示す識別子、データアレイ１３２に登録されたデータのステータス（Ｍｏｄｉｆｉｅｄ）を含む。ステップＳ１０３が完了すると、図６のフローチャートに沿ったトランザクション制御は終了である。
【００５２】
なお、ステップＳ１０３において、ライトＴｒｘのデータ幅がキャッシュラインサイズより小さい場合、キャッシュラインに書き込まれていない領域が発生する。このとき、トランザクション制御部１２は、メモリ１５にリードＴｒｘを発行してデータを読み出す。そして、ライトＴｒｘで書き込まれない部分にメモリ１５から読み出したデータをキャッシュラインの残りの領域に書き込む。
【００５３】
例えば、受信したライトＴｒｘの発行元がプロセッサ１１−１の場合、トランザクション制御部１２は、そのライトＴｒｘで指定されたデータをデータアレイ１３２に登録する。このとき、トランザクション制御部１２は、データアレイ１３２に登録したデータのエントリであるセットアドレスと対をなすキーアドレスを含むタグをアドレスアレイ１３１に新たに登録する。アドレスアレイ１３１によって新たに登録されたタグに関しては、ステータスがＭｏｄｉｆｉｅｄに設定され、ライトＴｒｘの発行元のプロセッサ１１−１の識別子の値１が登録される。
【００５４】
ステップＳ１０２において、ライトＴｒｘで指定されたデータが登録されている場合（ステップＳ１０２でＹｅｓ）、トランザクション制御部１２は、そのデータのステータスを参照する（ステップＳ１０４）。
【００５５】
ステップＳ１０４において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部１２は、データアレイ１３２にライトデータを書き込み、アドレスアレイ１３１を更新する（ステップＳ１０５）。このとき、トランザクション制御部１２は、アドレスアレイ１３１に登録されているタグのステータスをＭｏｄｉｆｉｅｄ、識別子の値をライトＴｒｘの発行元のプロセッサ１１の値に更新する。
【００５６】
そして、トランザクション制御部１２は、ライトＴｒｘの発行元以外のプロセッサ１１に無効化トランザクションを発行し（ステップＳ１１２）、図６のフローチャートに沿ったトランザクション制御を終了する。
【００５７】
ステップＳ１０４において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部１２は、ストアイン共有キャッシュ１３から読み出した識別子の値を確認する（ステップＳ１０６）。
【００５８】
ステップＳ１０６において、識別子が０（無効）であった場合、トランザクション制御部１２は、データアレイ１３２にライトデータを書き込む（ステップＳ１０７）。このとき、トランザクション制御部１２は、アドレスアレイ１３１に登録されている識別子の値をライトＴｒｘの発行元のプロセッサ１１の値に更新する。
【００５９】
そして、トランザクション制御部１２は、ライトＴｒｘの発行元以外のプロセッサ１１に無効化トランザクションを発行し（ステップＳ１１２）、図６のフローチャートに沿ったトランザクション制御を終了する。識別子が無効な場合は、どのプロセッサ１１のストアスルーキャッシュ１１０にデータが保持されているか不明である。そのため、トランザクション制御部１２は、ライトＴｒｘの発行元以外のプロセッサ１１に無効化トランザクションを発行する。
【００６０】
ステップＳ１０６において、ライトＴｒｘの発行元のプロセッサ１１の値と、識別子の値が異なる場合、トランザクション制御部１２は、データアレイ１３２にデータを書き込む（ステップＳ１１０）。このとき、トランザクション制御部１２は、アドレスアレイ１３１に登録されている識別子の値をライトＴｒｘの発行元のプロセッサ１１の値に更新する。
【００６１】
そして、トランザクション制御部１２は、アドレスアレイ１３１の更新前の識別子の値が示すプロセッサ１１に対して無効化トランザクションを発行し（ステップＳ１１１）、図６のフローチャートに沿ったトランザクション制御を終了とする。
【００６２】
例えば、受信したライトＴｒｘの識別子の値が１であり、登録されていた識別子の値が２の場合、トランザクション制御部１２は、プロセッサ１１−２に無効化トランザクションを発行する。このとき、トランザクション制御部１２がプロセッサ１１−２だけに無効化トランザクションを発行するのは、識別子の値２が示すプロセッサ１１−２だけがデータを保持している可能性がある。すなわち、本実施形態の識別子を用いれば、更新前の識別子が示すプロセッサだけに無効化トランザクションが発行されるため、不要な無効化トランザクションの発行を削減できる。
【００６３】
ステップＳ１０６において、ライトＴｒｘの発行元のプロセッサ１１の値と識別子の値が同じ場合、トランザクション制御部１２は、データアレイ１３２にデータを書き込む（ステップＳ１０８）。このとき、トランザクション制御部１２は、アドレスアレイ１３１の識別子の値を更新せずに、図６のフローチャートに沿ったトランザクション制御を終了とする。
【００６４】
例えば、登録されている識別子の値が示すプロセッサ１１が、ライトＴｒｘの発行元のプロセッサ１１と同じだった場合は、発行元のプロセッサ１１だけがストアスルーキャッシュ１１０にデータを保持している可能性がある。そのため、データアレイ１３２にデータを書き込み、無効化トランザクションを発行しないでトランザクション制御を終了する。
【００６５】
以上が、本実施形態におけるライトトランザクション制御の一例についての説明である。なお、図６のフローチャートに沿った処理は一例であって、本実施形態のライトトランザクション制御をそのままの手順に限定するものではない。
【００６６】
なお、ライトＴｒｘのデータ幅がキャッシュラインサイズより小さく、連続または短期間で何回か発行される場合は、ストアイン共有キャッシュ１３の識別子の値が、発行元のプロセッサの値に相当する可能性が高いと予想される。そのため、ライトＴｒｘのデータ幅がキャッシュラインサイズより小さく、連続または短期間で何回か発行される場合は、無効化トランザクションの発行を削減できる可能性が高い。
【００６７】
〔リードトランザクション制御〕
次に、プロセッサ１１からリードトランザクションを受信した際にトランザクション制御部１２が行うリードトランザクション制御について説明する。図７は、本実施形態におけるリードトランザクション制御の一例について説明するためのフローチャートである。図７のフローチャートにおいては、リードトランザクションをリードＴｒｘ、リプライトランザクションをリプライＴｒｘ、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【００６８】
図７において、まず、トランザクション制御部１２は、いずれかのプロセッサ１１から発行されたリードＴｒｘを受信する（ステップＳ１２１）。
【００６９】
次に、トランザクション制御部１２は、ストアイン共有キャッシュ１３を検索し、受信したリードＴｒｘで指定されたアドレスにデータが登録されているか検証する（ステップＳ１２２）。例えば、トランザクション制御部１２は、受信したリードＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ１３からタグを読み出す。そして、トランザクション制御部１２は、受信したリードＴｒｘと、読み出したタグとを比較する。
【００７０】
ステップＳ１２２において、指定されたデータが登録されていない場合（ステップＳ１２２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部１２は、リードＴｒｘをメモリ１５に発行してデータを読み出す（ステップＳ１２３）。
【００７１】
次に、トランザクション制御部１２は、メモリ１５から読み出したデータをデータアレイ１３２に登録する。併せて、トランザクション制御部１２は、データアレイ１３２に登録したデータのタグをアドレスアレイ１３１に登録する（ステップＳ１２４）。ステップＳ１２４においてアドレスアレイ１３１に登録されるタグは、新たなキーアドレス、識別子の値は０（無効）、データアレイ１３２に登録されたデータのステータス（Ｓｈａｒｅｄ）を含む。
【００７２】
次に、トランザクション制御部１２は、データアレイ１３２に登録したデータをリードＴｒｘの発行元のプロセッサ１１に送出するためのリプライＴｒｘを生成する（ステップＳ１２８）。
【００７３】
そして、トランザクション制御部１２は、リードＴｒｘの発行元のプロセッサ１１に、生成したリプライＴｒｘを送出し（ステップＳ１２９）、図７のフローチャートに沿ったトランザクション制御を終了する。
【００７４】
ステップＳ１２２において、指定されたアドレスにデータが登録されている場合（ステップＳ１２２でＹｅｓ）、トランザクション制御部１２は、そのアドレスに登録されているデータのステータスを参照する（ステップＳ１２５）。
【００７５】
ステップＳ１２５において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部１２は、データアレイ１３２から読み出したデータをプロセッサ１１に送出するためのリプライＴｒｘを生成する（ステップＳ１２８）。
【００７６】
そして、トランザクション制御部１２は、生成したリプライＴｒｘをプロセッサ１１に送出し（ステップＳ１２９）、図７のフローチャートに沿ったトランザクション制御を終了する。
【００７７】
ステップＳ１２５において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部１２は、ストアイン共有キャッシュ１３から読み出した識別子の値が有効であるか確認する（ステップＳ１２６）。
【００７８】
ステップＳ１２６において、識別子が０（無効）の場合（ステップＳ１２６でＮｏ）、トランザクション制御部１２は、データアレイ１３２から読み出したデータをプロセッサ１１に送出するためのリプライＴｒｘを生成する（ステップＳ１２８）。
【００７９】
そして、トランザクション制御部１２は、生成したリプライＴｒｘをプロセッサ１１に送出し（ステップＳ１２９）、図７のフローチャートに沿ったトランザクション制御を終了する。
【００８０】
ステップＳ１２６において、識別子が有効の場合（ステップＳ１２６でＹｅｓ）、トランザクション制御部１２は、アドレスアレイ１３１の識別子の値を０（無効）に更新する（ステップＳ１２７）。
【００８１】
次に、トランザクション制御部１２は、データアレイ１３２から読み出したデータをプロセッサ１１に送出するためのリプライＴｒｘを生成する（ステップＳ１２８）。
【００８２】
そして、トランザクション制御部１２は、生成したリプライＴｒｘをプロセッサ１１に送出し（ステップＳ１２９）、図７のフローチャートに沿ったトランザクション制御を終了する。
【００８３】
以上が、本実施形態におけるリードトランザクション制御の一例についての説明である。なお、図７のフローチャートに沿った処理は一例であって、本実施形態のリードトランザクション制御をそのままの手順に限定するものではない。
【００８４】
〔関連技術〕
ここで、本実施形態のトランザクション制御の機能や効果を明確にするために、関連技術に関するトランザクション制御について図面を参照しながら説明する。関連技術のトランザクション制御に関する説明においても、図１に示した構成の名称や符号を用いる。関連技術のトランザクション制御は、ライトトランザクションの発行元を示す識別情報（識別子）をタグに含めない点で、本実施形態のトランザクション制御とは異なる。
【００８５】
〔ライトトランザクション制御〕
図８は、関連技術におけるライトトランザクション制御の一例について説明するためのフローチャートである。図８のフローチャートでは、ライトトランザクションをライトＴｒｘ、無効化トランザクションをＣＩＴ（Cache Invalid Transaction）と略記する。また、図８のフローチャートにおいては、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【００８６】
図８において、まず、トランザクション制御部１２は、いずれかのプロセッサ１１から発行されたライトＴｒｘを受信する（ステップＳ１５１）。
【００８７】
次に、トランザクション制御部１２は、ストアイン共有キャッシュ１３を検索し、受信したライトＴｒｘで指定されたデータが登録されているか検証する（ステップＳ１５２）。例えば、トランザクション制御部１２は、受信したライトＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ１３からタグを読み出す。そして、トランザクション制御部１２は、受信したライトＴｒｘと、読み出したタグとを比較する。
【００８８】
ステップＳ１５２において、ライトＴｒｘで指定されたデータが登録されていない場合（ステップＳ１５２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部１２は、データアレイ１３２にライトデータを書き込む。併せて、トランザクション制御部１２は、データアレイ１３２に登録したデータのタグをアドレスアレイ１３１に登録する（ステップＳ１５３）。ステップＳ１５３においてアドレスアレイ１３１に登録されるタグは、新たなキーアドレス、データアレイ１３２に登録されたデータのステータス（Ｍｏｄｉｆｉｅｄ）を含む。ステップＳ１５３が完了すると、図６のフローチャートに沿ったトランザクション制御は終了である。
【００８９】
なお、ステップＳ１５３において、ライトＴｒｘのデータ幅がキャッシュラインサイズより小さい場合、キャッシュラインに書き込まれていない領域が発生する。このとき、トランザクション制御部１２は、メモリ１５にリードＴｒｘを発行してデータを読み出す。そして、ライトＴｒｘで書き込まれない部分にメモリ１５から読み出したデータをキャッシュラインの残りの領域に書き込む。
【００９０】
ステップＳ１５２において、データが登録されている場合（ステップＳ１５２でＹｅｓ）、トランザクション制御部１２は、そのデータのステータスを参照する（ステップＳ１５４）。
【００９１】
ステップＳ１５４において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部１２は、ライトトランザクションで指定されたライトデータをデータアレイ１３２に書き込む（ステップＳ１５５）。
【００９２】
次に、トランザクション制御部１２は、ライトＴｒｘの発行元以外のプロセッサ１１に対する無効化トランザクションを生成する。そして、トランザクション制御部１２は、生成した無効化トランザクションをライトＴｒｘの発行元以外のプロセッサ１１に発行し（ステップＳ１５７）、図８のフローチャートに沿ったトランザクション制御を終了する。
【００９３】
ステップＳ１５４において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部１２は、データアレイ１３２にデータを書き込み、アドレスアレイ１３１を更新する（ステップＳ１５６）。このとき、トランザクション制御部１２は、アドレスアレイ１３１に登録されているタグのステータスをＭｏｄｉｆｉｅｄに更新する。
【００９４】
そして、トランザクション制御部１２は、ライトＴｒｘの発行元以外のプロセッサ１１に無効化トランザクションを発行し（ステップＳ１５７）、図８のフローチャートに沿ったトランザクション制御を終了する。
【００９５】
以上が、関連技術におけるライトトランザクション制御の一例についての説明である。
【００９６】
〔リードトランザクション制御〕
図９は、関連技術におけるリードトランザクション制御の一例について説明するためのフローチャートである。図９のフローチャートにおいては、リードトランザクションをリードＴｒｘ、リプライトランザクションをリプライＴｒｘ、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【００９７】
図９において、まず、トランザクション制御部１２は、いずれかのプロセッサ１１から発行されたリードＴｒｘを受信する（ステップＳ１６１）。
【００９８】
次に、トランザクション制御部１２は、ストアイン共有キャッシュ１３を検索し、受信したリードＴｒｘで指定されたアドレスにデータが登録されているか検証する（ステップＳ１６２）。例えば、トランザクション制御部１２は、受信したリードＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ１３からタグを読み出す。そして、トランザクション制御部１２は、受信したリードＴｒｘと、読み出したタグとを比較する。
【００９９】
ステップＳ１６２において、指定されたアドレスにデータが登録されていない場合（ステップＳ１６２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部１２は、メモリ１５にリードＴｒｘを発行してメモリのデータを読み出す（ステップＳ１６３）。
【０１００】
次に、トランザクション制御部１２は、メモリ１５から読み出したデータをデータアレイ１３２に登録する。併せて、トランザクション制御部１２は、データアレイ１３２に登録したデータのタグをアドレスアレイ１３１に登録する（ステップＳ１６４）。このとき、アドレスアレイ１３１に登録されるタグは、新たなキーアドレス、データアレイ１３２に登録されたデータのステータス（Ｓｈａｒｅｄ）を含む。
【０１０１】
次に、トランザクション制御部１２は、データアレイ１３２に登録したデータをリードＴｒｘの発行元のプロセッサ１１に送出するためのリプライＴｒｘを生成する（ステップＳ１６５）。
【０１０２】
そして、トランザクション制御部１２は、リードＴｒｘの発行元のプロセッサ１１に、生成したリプライＴｒｘを送出し（ステップＳ１６６）、図９のフローチャートに沿ったトランザクション制御を終了する。
【０１０３】
ステップＳ１６２において、データが登録されている場合（ステップＳ１６２でＹｅｓ）、トランザクション制御部１２は、データアレイ１３２に登録されたデータをプロセッサ１１に送出するためのリプライＴｒｘを生成する（ステップＳ１６５）。
【０１０４】
そして、トランザクション制御部１２は、リードＴｒｘの発行元のプロセッサ１１に、生成したリプライＴｒｘ送出し（ステップＳ１６６）、図９のフローチャートに沿ったトランザクション制御を終了する。
【０１０５】
以上が、関連技術におけるリードトランザクション制御の一例についての説明である。
【０１０６】
以上のように、本実施形態の情報処理装置は、メモリと、複数のプロセッサと、共有キャッシュメモリと、制御回路とを備える。複数のプロセッサは、キャッシュメモリを有し、メモリへのアクセスを指示するトランザクションを発行する。複数のプロセッサは、メモリへのライトデータの書き込みを指示するライトトランザクションを発行する際に、ライトトランザクションに自身を示す識別情報を付与する。共有キャッシュメモリは、複数のプロセッサに共有され、トランザクションに基づいてデータが登録される。制御回路は、複数のプロセッサからトランザクションを受信し、受信したトランザクションに応じて共有キャッシュメモリを制御する。制御回路は、ライトトランザクションを受信した際に、ライトトランザクションに付与された識別情報の値に応じて共有キャッシュメモリを制御する。
【０１０７】
本実施形態の一態様においては、制御回路は、複数のプロセッサのいずれかによって発行されたライトトランザクションに応じて共有キャッシュメモリにデータを登録する際に、そのデータが格納されるキャッシュラインにタグを登録する。制御回路は、ライトトランザクションのアドレスに含まれるセットアドレスをエントリとして、アドレスに含まれるキーアドレスと、データのステータスと、識別子とを少なくとも含む。識別子は、データが書き込まれる際にライトトランザクションを発行したプロセッサを示す識別情報に対応する。制御回路は、ライトトランザクションに応じて共有キャッシュメモリに格納されたデータを更新する際に、データに関連付けられたタグに含まれる識別子の値に応じてデータを更新する。
【０１０８】
本実施形態の一態様においては、制御回路は、ライトトランザクションに応じて共有キャッシュメモリに格納されたデータを更新する際に、識別子の値が無効であるか有効であるかによって異なる処理を実行する。識別子の値が無効を示す場合、制御回路は、ライトトランザクションの発行元のプロセッサの識別情報の値でタグの識別子の値を更新し、ライトトランザクションの発行元以外のプロセッサにキャッシュ無効化トランザクションを発行する。識別子の値が有効を示す場合、制御回路は、ライトトランザクションの発行元のプロセッサの識別情報の値と、ライトトランザクションで指定されたデータに関連付けられたタグに含まれる識別子の値とを比較する。制御回路は、識別情報の値と識別子の値とが異なるときは、ライトトランザクションの発行元のプロセッサの識別情報の値でタグの識別子の値を更新し、更新前の識別子が示すプロセッサにキャッシュ無効化トランザクションを発行する。制御回路は、識別情報の値と識別子の値とが同じときは、キャッシュ無効化トランザクションを発行しない。
【０１０９】
本実施形態の一態様において、タグに含まれるステータスは、第１の状態と第２の状態とのいずれかに設定される。第１の状態は、共有キャッシュメモリに格納されたデータを格納するキャッシュメモリがあることを示す。第２の状態は、共有キャッシュメモリに格納されたデータを格納するキャッシュメモリがないことを示す。制御回路は、ライトトランザクションに応じて共有キャッシュメモリに格納されたデータをライトデータで更新する際に、タグに含まれるステータスに応じて更新する。ステータスが第１の状態の場合、制御回路は、ライトトランザクションの発行元のプロセッサの識別情報の値でタグの識別子の値を更新する。そして、制御回路は、ライトトランザクションの発行元以外のプロセッサにキャッシュ無効化トランザクションを発行する。ステータスが第２の状態の場合、制御回路は、データに関連付けられたタグに含まれる識別子の値に応じてデータを更新する。
【０１１０】
また、本実施形態の一態様において、制御回路は、データの読み出しを指示するリードトランザクションに応じて共有キャッシュメモリからデータを読み出す際に、タグに含まれる識別子が有効の場合には識別子を無効化する。
【０１１１】
また、本実施形態の一態様の制御回路は、受信回路と、共有キャッシュ制御回路と、送出回路とを有する。受信回路は、発行元のプロセッサを示す識別情報が付与されたトランザクションを複数のプロセッサから受信する。共有キャッシュ制御回路は、トランザクションに応じて複数のプロセッサに共有される共有キャッシュメモリを識別情報の値を用いて制御し、トランザクションに応じたリプライを生成する。送出回路は、共有キャッシュ制御回路によって生成されたリプライを複数のプロセッサのいずれかに送出する。
【０１１２】
本実施形態においては、あるプロセッサから再び同じキャッシュラインにライトトランザクションが発行された際に、共有キャッシュメモリのアドレスアレイに保持されている識別子を確認する。発行元のライトトランザクションの識別情報と、共有キャッシュメモリに登録された識別子とが一致していれば、他のプロセッサへの無効化トランザクションを発行しない。すなわち、本実施形態においては、あるプロセッサから同じキャッシュラインに複数のライトトランザクションが発行される際には、２個目以降のライトトランザクションに対するキャッシュ無効化トランザクションを他のプロセッサには発行しない。その結果、本実施形態によれば、無効化トランザクションの発行数を軽減して、トランザクションの負荷を下げることができる。
【０１１３】
本実施形態の手法は、プロセッサがストアスルーのキャッシュメモリを持ち、複数のプロセッサに接続されたストアインの共有キャッシュメモリを持つ構成の情報処理装置に好適である。本実施形態の手法によれば、発行元の識別情報を用いることで、キャッシュラインサイズより小さいデータ幅のライトトランザクションが多数発行される場合、プロセッサ内のキャッシュメモリへの過剰な無効化トランザクションの発行が抑えることができる。そのため、本実施形態によれば、関連技術においてプロセッサからキャッシュラインサイズより小さいデータ幅のライトトランザクションが多発した際に、頻発していた無効化トランザクションを削減して、トランザクションを滞りなく処理できる。
【０１１４】
特許文献１（特許第３５２２４６５号公報）には、無効化要求が供給された後に、発行済みの無効化要求の発行履歴に基づいて無効化要求を削減する技術について開示されている。本実施形態は、共有キャッシュアクセス時に無効化要求自体の発行有無を判断して、無効化要求の発行自体を削減する点において特許文献１の手法とは異なる。
【０１１５】
（第２の実施形態）
次に、本発明の第２の実施形態に係る情報処理装置について図面を参照しながら説明する。本実施形態は、アドレスアレイに登録されるタグにフラグが含まれる点において第１の実施形態とは異なる。
【０１１６】
フラグは、キャッシュラインサイズより小さいデータ幅のライトトランザクションを短期間内に複数回にわたり同一キャッシュライン内に発行中であることを示す付随情報である。本実施形態の情報処理装置は、タグがフラグを含む点以外は、第１の実施形態の情報処理装置と同様の構成を有する。本実施形態の説明においては、第１の実施形態と同様の部分に関しては説明を簡略化したり、省略したりする。
【０１１７】
（構成）
図１０は、本実施形態の情報処理装置２０の構成の概要の一例を示すブロック図である。情報処理装置２０は、複数のプロセッサ２１−１〜ｎ、トランザクション制御部２２、ストアイン共有キャッシュ２３、メモリ２５を備える（ｎは自然数）。複数のプロセッサ２１−１〜ｎのそれぞれは、ストアスルーキャッシュ２１０−１〜ｎのそれぞれを有する。ストアイン共有キャッシュ２３は、アドレスアレイ２３１とデータアレイ２３２を含む。以下において、複数のプロセッサ２１−１〜ｎのそれぞれを区別しないときはプロセッサ２１と記載し、ストアスルーキャッシュ２１０−１〜ｎのそれぞれを区別しないときはストアスルーキャッシュ２１０と記載する。本実施形態の情報処理装置２０の構成要素は、第１の実施形態の情報処理装置１０と同様であるので、情報処理装置２０の構成要素に関する詳細な説明は省略する。
【０１１８】
〔アドレスアレイ〕
図１１は、アドレスアレイ２３１について説明するための概念図である。図１１には、複数ウェイのセットアソシアティブ方式を用いる例を示す。図１１には、アドレス２４０の上位ビット（キーアドレス２４１）と下位ビット（セットアドレス２４２）とを用いる例を示す。
【０１１９】
アドレスアレイ２３１は、キャッシュラインサイズごとの情報を保持する複数ウェイの構成を有する記憶領域である。アドレスアレイ２３１には、トランザクションで指定されたアドレス２４０の下位ビットであるセットアドレス２４２をエントリとして、そのトランザクションで書き込まれるデータのタグが登録される。アドレスアレイ２３１には、１つのエントリにつき、キーアドレス２４１、ステータス２４３、識別子２４４、およびフラグ２４５を含むタグが１つ登録される。キーアドレス２４１は、アドレス２４０の上位ビットであり、アドレス２４０からセットアドレス２４２を除いたビット列である。
【０１２０】
フラグ２４５は、キャッシュラインサイズより小さいデータ幅のライトトランザクションを短期間内に複数回にわたり同一キャッシュライン内に発行中であることを示す付随情報である。フラグ２４５は、キャッシュラインサイズより小さいデータ幅のライトトランザクションを短期間内に複数回にわたり同一キャッシュライン内に発行された際に、他のトランザクションとの競合を防ぐためのものである。以下においては、キャッシュラインサイズより小さいデータ幅のトランザクションを短期間内に複数回にわたり同一キャッシュライン内に発行することを「連続発行」と記載する。
【０１２１】
プロセッサ２１は、キャッシュラインサイズより小さいデータ幅のライトトランザクションを連続発行する場合、連続発行中のトランザクションであることを示す付随情報をそのライトトランザクションに追加する。プロセッサ２１は、キャッシュラインサイズより小さいデータ幅のライトトランザクションを同一キャッシュラインに連続発行する場合、そのライトトランザクションの付随情報の値を１に設定する。その他の場合、プロセッサ２１は、付随情報の値を０に設定する。
【０１２２】
例えば、キャッシュラインサイズが１２８バイトであり、１回あたりのライトトランザクションのデータ長が１６バイトの場合、キャッシュラインサイズ（１２８バイト）よりもライトトランザクションのデータ幅（１６バイト）の方が小さい。キャッシュラインサイズ（１２８バイト）よりも小さいデータ幅（１６バイト）のライトトランザクションを複数回発行する場合、１２８バイト分をライトする場合は最大で８回のトランザクションを発行することになる。ただし、１回のライトトランザクションで最大データ長分をライトするとは限らないので、ライトトランザクションを連続発行する場合であっても２〜８回の発行になることもある。
【０１２３】
以上が、アドレスアレイ２３１についての説明である。なお、図１１のアドレスアレイ２３１は一例であって、本実施形態のアドレスアレイ２３１をそのままの形態に限定するものではない。
【０１２４】
（動作）
次に、本実施形態の情報処理装置２０が備えるトランザクション制御部２２の動作について図面を参照しながら説明する。以下においては、トランザクション制御部２２がプロセッサ２１からライトトランザクションを受信した際に行う制御と、トランザクション制御部２２がプロセッサ２１からリードトランザクションを受信した際に行う制御について説明する。以下のトランザクション制御部２２の動作に関する説明においては、図１０に示した構成の名称や符号を用いる。
【０１２５】
〔ライトトランザクション制御〕
まず、プロセッサ２１からライトトランザクションを受信した際にトランザクション制御部２２が行うライトトランザクション制御について説明する。図１２は、本実施形態におけるライトトランザクション制御の一例について説明するためのフローチャートである。図１２のフローチャートでは、ライトトランザクションをライトＴｒｘ、無効化トランザクションをＣＩＴ（Cache Invalid Transaction）と略記する。また、図８のフローチャートにおいては、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【０１２６】
図１２において、まず、トランザクション制御部２２は、いずれかのプロセッサ２１から発行されたライトＴｒｘを受信する（ステップＳ２０１）。
【０１２７】
ステップＳ２０１においてトランザクション制御部２２が受信するライトＴｒｘには、発行元のプロセッサ２１によって付随情報が付与されている。プロセッサ２１は、ライトＴｒｘを発行する際に、そのライトＴｒｘに付随情報を追加する。キャッシュラインサイズより小さいデータ幅のライトＴｒｘを連続発行する場合、プロセッサ２１は、付随情報の値を１にする。その他の場合、プロセッサ２１は、付随情報の値を０にする。
【０１２８】
例えば、プロセッサ２１は、連続あるいは短期間に同一キャッシュラインに６回のライトＴｒｘを発行する場合、１〜５回目のトランザクションの発行時には、連続発行中であることを示すために付随情報の値を１とする。そして、プロセッサ２１は、６回目のトランザクションの発行時には、連続発行が終了することを示すために付随情報の値を０とする。
【０１２９】
次に、トランザクション制御部２２は、ストアイン共有キャッシュ２３を検索し、受信したライトＴｒｘで指定されたデータが登録されているか検証する（ステップＳ２０２）。例えば、トランザクション制御部２２は、受信したライトＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ２３からタグを読み出す。そして、トランザクション制御部２２は、受信したライトＴｒｘと、読み出したタグとを比較する。
【０１３０】
ステップＳ２０２において、指定されたデータが登録されていない場合（ステップＳ２０２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部２２は、データアレイ２３２にライトデータを書き込む。併せて、トランザクション制御部２２は、データアレイ２３２に登録したデータのタグをアドレスアレイ２３１に登録する（ステップＳ２０３）。ステップＳ２０３においてアドレスアレイ２３１に登録されるタグは、新たなキーアドレス、ライトＴｒｘの発行元のプロセッサ２１を示す識別子、フラグ、データアレイ２３２に登録されたデータのステータス（Ｍｏｄｉｆｉｅｄ）を含む。また、トランザクション制御部２２は、ライトＴｒｘの付随情報をそのままフラグに登録する。ステップＳ２０３が完了すると、図１２のフローチャートに沿ったトランザクション制御は終了である。なお、ステップＳ２０３において、ライトＴｒｘのデータ幅がキャッシュラインサイズより小さい場合、トランザクション制御部２２は、ライトＴｒｘで書き込まれない領域にはメモリ２５のデータを書き込む。
【０１３１】
ステップＳ２０２において、指定されたデータが登録されている場合（ステップＳ２０２でＹｅｓ）、トランザクション制御部２２は、そのデータのステータスを参照する（ステップＳ２０４）。
【０１３２】
ステップＳ２０４において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部２２は、データアレイ２３２にライトデータを書き込み、アドレスアレイ２３１を更新する（ステップＳ２０５）。このとき、トランザクション制御部２２は、アドレスアレイ２３１に登録されているタグのステータスをＭｏｄｉｆｉｅｄ、識別子の値をライトＴｒｘの発行元のプロセッサ２１の値に更新する。また、トランザクション制御部２２は、ライトＴｒｘの付随情報をそのままフラグに登録する。
【０１３３】
そして、トランザクション制御部２２は、ライトＴｒｘの発行元以外のプロセッサ２１に無効化トランザクションを発行し（ステップＳ２１１）、図１２のフローチャートに沿ったトランザクション制御を終了する。
【０１３４】
ステップＳ２０４において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部２２は、ストアイン共有キャッシュ２３から読み出した識別子の値を確認する（ステップＳ２０６）。
【０１３５】
ステップＳ２０６において、識別子が０（無効）であった場合、トランザクション制御部２２は、データアレイ２３２にライトデータを書き込む（ステップＳ２０７）。このとき、トランザクション制御部２２は、アドレスアレイ２３１に登録されている識別子の値をライトＴｒｘの発行元のプロセッサ２１の値に更新する。また、フラグの値は、ライトＴｒｘの付随情報をそのまま更新する。
【０１３６】
そして、トランザクション制御部２２は、ライトＴｒｘの発行元以外のプロセッサ２１に無効化トランザクションを発行し（ステップＳ２１１）、図１２のフローチャートに沿ったトランザクション制御を終了する。
【０１３７】
ステップＳ２０６において、ライトＴｒｘの発行元のプロセッサ２１の値と、識別子の値が異なる場合、トランザクション制御部２２は、データアレイ２３２にデータを書き込む（ステップＳ２０８）。このとき、トランザクション制御部２２は、アドレスアレイ２３１に登録されている識別子の値をライトＴｒｘの発行元のプロセッサ２１の値に更新する。また、トランザクション制御部２２は、ライトＴｒｘの付随情報をそのままフラグに登録する。
【０１３８】
そして、トランザクション制御部２２は、アドレスアレイ２３１の更新前の識別子の値が示すプロセッサ２１に対して無効化トランザクションを発行し（ステップＳ２０９）、図１２のフローチャートに沿ったトランザクション制御を終了とする。
【０１３９】
ステップＳ２０６において、ライトＴｒｘの発行元のプロセッサ２１の値と識別子の値が同じ場合（ステップＳ２０６で同じ）、トランザクション制御部２２は、ライトＴｒｘの付随情報とフラグの値とを比較する（ステップＳ２１０）。
【０１４０】
ステップＳ２１０において、ライトＴｒｘの付随情報とフラグの値が異なる場合（ステップＳ２１０でＮｏ）、トランザクション制御部２２は、データアレイ２３２にライトデータを書き込み、アドレスアレイ２３１を更新する（ステップＳ２１２）。このとき、トランザクション制御部２２は、アドレスアレイ２３１に登録されているタグのフラグの値を、ライトＴｒｘの付随情報の値に更新する。そして、トランザクション制御部２２は、無効化トランザクションを発行せずに、図１２のフローチャートに沿ったトランザクション制御を終了とする。
【０１４１】
ステップＳ２１０において、ライトＴｒｘの付随情報とフラグの値が同じ場合（ステップＳ２１０でＹｅｓ）、トランザクション制御部２２は、データアレイ２３２にデータを書き込む（ステップＳ２１３）。このとき、トランザクション制御部２２は、無効化トランザクションを発行せずに、図１２のフローチャートに沿ったトランザクション制御を終了とする。
【０１４２】
以上が、本実施形態におけるライトトランザクション制御の一例についての説明である。なお、図１２のフローチャートに沿った処理は一例であって、本実施形態のライトトランザクション制御をそのままの手順に限定するものではない。
【０１４３】
〔リードトランザクション制御〕
次に、プロセッサ２１からリードトランザクションを受信した際にトランザクション制御部２２が行うリードトランザクション制御について説明する。図１３は、本実施形態におけるリードトランザクション制御の一例について説明するためのフローチャートである。図１３のフローチャートにおいては、リードトランザクションをリードＴｒｘ、リプライトランザクションをリプライＴｒｘ、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【０１４４】
図１３において、まず、トランザクション制御部２２は、いずれかのプロセッサ２１から発行されたリードＴｒｘを受信する（ステップＳ２２１）。
【０１４５】
次に、トランザクション制御部２２は、ストアイン共有キャッシュ２３を検索し、受信したリードＴｒｘで指定されたアドレスにデータが登録されているか検証する（ステップＳ２２２）。例えば、トランザクション制御部２２は、受信したリードＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ２３からタグを読み出す。そして、トランザクション制御部２２は、受信したリードＴｒｘと、読み出したタグとを比較する。
【０１４６】
ステップＳ２２２において、指定されたデータが登録されていない場合（ステップＳ２２２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部２２は、リードＴｒｘをメモリ２５に発行してデータを読み出す（ステップＳ２２３）。
【０１４７】
次に、トランザクション制御部２２は、メモリ２５から読み出したデータをデータアレイ２３２に登録する。併せて、トランザクション制御部２２は、データアレイ２３２に登録したデータのタグをアドレスアレイ２３１に登録する（ステップＳ２２４）。ステップＳ２２３においてアドレスアレイ２３１に登録されるタグは、新たなキーアドレス、識別子の値は０（無効）、データアレイ２３２に登録されたデータのステータス（Ｓｈａｒｅｄ）を含む。
【０１４８】
次に、トランザクション制御部２２は、データアレイ２３２に登録したデータをリードＴｒｘの発行元のプロセッサ２１に送出するためのリプライＴｒｘを生成する（ステップＳ２２９）。
【０１４９】
そして、トランザクション制御部２２は、リードＴｒｘの発行元のプロセッサ２１に、生成したリプライＴｒｘを送出し（ステップＳ２３０）、図１３のフローチャートに沿ったトランザクション制御を終了する。
【０１５０】
ステップＳ２２２において、指定されたアドレスにデータが登録されている場合（ステップＳ２２２でＹｅｓ）、トランザクション制御部２２は、そのアドレスに登録されているデータのステータスを参照する（ステップＳ２２５）。
【０１５１】
ステップＳ２２５において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部２２は、データアレイ２３２から読み出したデータをプロセッサ２１に送出するためのリプライＴｒｘを生成する（ステップＳ２２９）。
【０１５２】
そして、トランザクション制御部２２は、生成したリプライＴｒｘをプロセッサ２１に送出し（ステップＳ２３０）、図１３のフローチャートに沿ったトランザクション制御を終了する。
【０１５３】
ステップＳ２２５において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部２２は、ストアイン共有キャッシュ２３から読み出した識別子の値が有効であるか確認する（ステップＳ２２６）。
【０１５４】
ステップＳ２２６において、識別子が０（無効）の場合（ステップＳ２２６でＮｏ）、トランザクション制御部２２は、データアレイ２３２から読み出したデータをプロセッサ２１に送出するためのリプライＴｒｘを生成する（ステップＳ２２９）。
【０１５５】
そして、トランザクション制御部２２は、生成したリプライＴｒｘをプロセッサ２１に送出し（ステップＳ２３０）、図１３のフローチャートに沿ったトランザクション制御を終了する。
【０１５６】
ステップＳ２２６において、識別子が有効の場合（ステップＳ２２６でＹｅｓ）、トランザクション制御部２２は、アドレスアレイ２３１のフラグの値を確認する（ステップＳ２２７）。
【０１５７】
ステップＳ２２７において、フラグが無効（０）の場合、リードＴｒｘをそのまま実行できる。そのため、トランザクション制御部２２は、アドレスアレイ２３１の識別子の値を０（無効）に更新する（ステップＳ２２８）。
【０１５８】
次に、トランザクション制御部２２は、データアレイ２３２から読み出したデータをプロセッサ２１に送出するためのリプライＴｒｘを生成する（ステップＳ２２９）。
【０１５９】
そして、トランザクション制御部２２は、生成したリプライＴｒｘをプロセッサ２１に送出し（ステップＳ２３０）、図１３のフローチャートに沿ったトランザクション制御を終了する。
【０１６０】
ステップＳ２２７において、フラグが有効（１）の場合、ライトトランザクションが連続発行中である。そのため、トランザクション制御部２２は、リプライＴｒｘを生成せずに、ステップＳ２２２に戻り、リードＴｒｘをリトライする。
【０１６１】
なお、待ち時間が長くなって制御が滞ることを防ぐために、リトライ回数に制限を加えてもよい。例えば、リトライ回数を４回に制限する場合、トランザクション制御部２２は、リトライが５回目になった段階でリトライしないように制御する。ライトトランザクションの連続発行中に、同一キャッシュラインへのリードトランザクションを受け付けた際に、トランザクション制御部２２内でリードトランザクションをリトライして待機する。その結果、トランザクション同士の競合によるプロセッサ２１への無効化トランザクションの発行を削減できる。
【０１６２】
以上が、実施形態におけるリードトランザクション制御の一例についての説明である。なお、図１３のフローチャートに沿った処理は一例であって、本実施形態のリードトランザクション制御をそのままの手順に限定するものではない。
【０１６３】
以上のように、本実施形態において、複数のプロセッサは、付随情報をライトトランザクションに付与する。付随情報は、共有キャッシュメモリを構成するキャッシュラインより小さいデータ幅のライトデータの書き込みを指定するライトトランザクションを短期間内に複数回にわたり同一のキャッシュラインに発行中であることを示す。制御装置は、ライトトランザクションに応じて共有キャッシュメモリにデータを登録する際に、ライトトランザクションのアドレスに含まれるセットアドレスをエントリとして、データと同じキャッシュラインにタグを登録する。タグには、アドレスに含まれるキーアドレスと、データのステータスと、データが書き込まれる際にライトトランザクションを発行したプロセッサを示す識別情報に対応する識別子と、付随情報に対応するフラグとを少なくとも含む。制御回路は、ライトトランザクションに応じて共有キャッシュメモリに格納されたデータをライトデータで更新する際に、識別情報の値と識別子の値とが同じ場合、ライトトランザクションに付与された付随情報の値とフラグの値とを比較する。ライトトランザクションに付与された付随情報の値とフラグの値とが一致しない場合、制御回路は、付随情報の値でフラグの値を更新する。ライトトランザクションに付与された付随情報の値とフラグの値とが一致する場合、制御回路は、フラグの値を更新しない。
【０１６４】
本実施形態においては、プロセッサが同一キャッシュライン内のアドレスに複数回連続でライトトランザクションを発行する場合、ライトトランザクションが連続発行中であることを示す付随情報（フラグ）を追加する。そのため、そのライトトランザクションの連続発行中に他のプロセッサから同じキャッシュライン内のアドレスへのリードトランザクションが発行されたときには、そのリードトランザクションの実行を待機させることができる。その結果、本実施形態によれば、リードトランザクションとの競合によるキャッシュ無効化トランザクションの発行を軽減できる。
【０１６５】
（第３の実施形態）
次に、本発明の第３の実施形態に係る情報処理装置について図面を参照しながら説明する。本実施形態は、アドレスアレイに登録されるタグのステータスに、ＭＳＩキャッシュプロトコルのＩｎｖａｌｉｄやＳｈａｒｅｄ、Ｍｏｄｉｆｉｅｄに加えて、ＭＩを追加する点において第１の実施形態とは異なる。ＭＩ（第３の状態とも呼ぶ）は、「全てのプロセッサのストアスルーキャッシュにデータがなく、装置全体としてストアイン共有キャッシュ３３だけにデータがあるという状態」として定義される。
【０１６６】
（構成）
図１４は、本実施形態の情報処理装置３０の構成の概要の一例を示すブロック図である。情報処理装置３０は、複数のプロセッサ３１−１〜ｎ、トランザクション制御部３２、ストアイン共有キャッシュ３３、メモリ３５を備える（ｎは自然数）。複数のプロセッサ３１−１〜ｎのそれぞれは、ストアスルーキャッシュ３１０−１〜ｎのそれぞれを有する。ストアイン共有キャッシュ３３は、アドレスアレイ３３１とデータアレイ３３２を含む。以下において、複数のプロセッサ３１−１〜ｎのそれぞれを区別しないときはプロセッサ３１と記載し、ストアスルーキャッシュ３１０−１〜ｎのそれぞれを区別しないときはストアスルーキャッシュ３１０と記載する。本実施形態の情報処理装置３０の構成要素は、第１の実施形態の情報処理装置１０と同様であるので、情報処理装置３０の構成要素に関する詳細な説明は省略する。
【０１６７】
本実施形態は、アドレスアレイに登録されるタグのステータスに、ＭＳＩキャッシュプロトコルのＩｎｖａｌｉｄやＳｈａｒｅｄ、Ｍｏｄｉｆｉｅｄに加えて、ＭＩという状態を追加する。ＭＩは、「全てのプロセッサ３１のストアスルーキャッシュ３１０にデータがなく、装置全体としてストアイン共有キャッシュ３３だけにデータがあるという状態」として定義される。
【０１６８】
また、本実施形態においては、プロセッサ３１がライトトランザクションを発行するときに、自身のストアスルーキャッシュ３１０にはデータを保有しないことを示す未登録情報をライトトランザクションに付随する。未登録情報は、無効化トランザクションを削減するための追加機能である。
【０１６９】
プロセッサ３１は、ライトトランザクションを発行する際に、自身のストアスルーキャッシュ３１０にライトデータを登録している場合には未登録情報を０に、登録しない場合には未登録情報を１に設定する。
【０１７０】
（動作）
次に、本実施形態の情報処理装置３０が備えるトランザクション制御部３２の動作について図面を参照しながら説明する。以下においては、トランザクション制御部３２がプロセッサ３１からライトトランザクションを受信した際に行う制御と、トランザクション制御部３２がプロセッサ３１からリードトランザクションを受信した際に行う制御について説明する。以下のトランザクション制御部３２の動作に関する説明においては、図１４に示した構成の名称や符号を用いる。
【０１７１】
〔ライトトランザクション制御〕
まず、プロセッサ３１から未登録情報を含むライトトランザクションを受信した際にトランザクション制御部３２が行うライトトランザクション制御について説明する。図１５は、本実施形態におけるライトトランザクション制御の一例について説明するためのフローチャートである。図１５のフローチャートでは、ライトトランザクションをライトＴｒｘ、無効化トランザクションをＣＩＴ（Cache Invalid Transaction）と略記する。また、図１５のフローチャートにおいては、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【０１７２】
図１５において、まず、トランザクション制御部３２は、いずれかのプロセッサ３１から発行されたライトＴｒｘを受信する（ステップＳ３０１）。
【０１７３】
ステップＳ３０１においてトランザクション制御部３２が受信するライトＴｒｘには、発行元のプロセッサ３１によって未登録情報が付与されている。プロセッサ３１は、ライトＴｒｘを発行する際に、そのライトＴｒｘに未登録情報を追加する。プロセッサ３１は、自身のストアスルーキャッシュ３１０にライトデータが登録されている場合は未登録情報を０に、登録されていない場合は未登録情報を１に設定する。図１２のフローチャートにおいては、プロセッサ３１が発行するライトＴｒｘに付随する未登録情報が１の場合について説明する。
【０１７４】
次に、トランザクション制御部３２は、ストアイン共有キャッシュ３３を検索し、受信したライトＴｒｘで指定されたアドレスにデータが登録されているか検証する（ステップＳ３０２）。例えば、トランザクション制御部３２は、受信したライトＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ３３からタグを読み出す。そして、トランザクション制御部３２は、受信したライトＴｒｘと、読み出したタグとを比較する。
【０１７５】
ステップＳ３０２において、指定されたデータが登録されていない場合（ステップＳ３０２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部３２は、データアレイ３３２にライトデータを書き込む。併せて、トランザクション制御部３２は、データアレイ３３２に登録するデータのタグをアドレスアレイ３３１に登録する（ステップＳ３０３）。ステップＳ３０３においてアドレスアレイ３３１に登録されるタグは、新たなキーアドレス、ライトＴｒｘの発行元のプロセッサ３１を示す識別子、データアレイ３３２に登録されたデータのステータス（ＭＩ）を含む。ステップＳ３０３が完了すると、図１５のフローチャートに沿ったトランザクション制御は終了である。なお、ステップＳ３０３において、ライトＴｒｘのデータ幅がキャッシュラインサイズより小さい場合、トランザクション制御部３２は、ライトＴｒｘで書き込まれない領域にはメモリ３５のデータを書き込む。
【０１７６】
ステップＳ３０２において、指定されたデータが登録されている場合（ステップＳ３０２でＹｅｓ）、トランザクション制御部３２は、そのデータのステータスを参照する（ステップＳ３０４）。
【０１７７】
ステップＳ３０４において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部３２は、データアレイ３３２にライトデータを書き込み、アドレスアレイ３３１を更新する（ステップＳ３０５）。このとき、トランザクション制御部３２は、アドレスアレイ３３１に登録されているタグのステータスをＭＩに更新し、識別子の値をライトＴｒｘの発行元のプロセッサ３１の値に更新する。
【０１７８】
そして、トランザクション制御部３２は、ライトＴｒｘの発行元以外のプロセッサ３１に無効化トランザクションを発行し（ステップＳ３１４）、図１５のフローチャートに沿ったトランザクション制御を終了する。
【０１７９】
ステップＳ３０４において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部３２は、ストアイン共有キャッシュ３３から読み出した識別子の値を確認する（ステップＳ３０６）。
【０１８０】
ステップＳ３０６において、識別子が０（無効）であった場合、トランザクション制御部３２は、データアレイ３３２にライトデータを書き込む（ステップＳ３１２）。このとき、トランザクション制御部３２は、アドレスアレイ３３１に登録されているタグのステータスをＭＩに更新し、識別子の値をライトＴｒｘの発行元のプロセッサ３１の値に更新する。
【０１８１】
そして、トランザクション制御部３２は、ライトＴｒｘの発行元以外のプロセッサ３１に無効化トランザクションを発行し（ステップＳ３１４）、図１５のフローチャートに沿ったトランザクション制御を終了する。
【０１８２】
ステップＳ３０６において、ライトＴｒｘの発行元のプロセッサ３１の値と、識別子の値が異なる場合、トランザクション制御部３２は、データアレイ３３２にデータを書き込む（ステップＳ３１１）。このとき、トランザクション制御部３２は、アドレスアレイ３３１に登録されているタグのステータスをＭＩに更新し、識別子の値をライトＴｒｘの発行元のプロセッサ３１の値に更新する。
【０１８３】
そして、トランザクション制御部３２は、アドレスアレイ３３１の更新前の識別子の値が示すプロセッサ３１に対して無効化トランザクションを発行し（ステップＳ３１３）、図１５のフローチャートに沿ったトランザクション制御を終了とする。
【０１８４】
ステップＳ３０６において、ライトＴｒｘの発行元のプロセッサ３１の値と、識別子の値が同じ場合、トランザクション制御部３２は、データアレイ３３２にデータを書き込む（ステップＳ３１０）。このとき、トランザクション制御部３２は、アドレスアレイ３３１の識別子の値を更新せずに、ステータスをＭＩに更新し、図１５のフローチャートに沿ったトランザクション制御を終了とする。
【０１８５】
ステップＳ３０４において、ステータスがＭＩの場合（ステップＳ３０４でＭＩ）、トランザクション制御部３２は、ストアイン共有キャッシュ３３から読み出した識別子の値を確認する（ステップＳ３０７）。
【０１８６】
ステップＳ３０７において、ライトＴｒｘの発行元のプロセッサ３１の値と、識別子の値が異なる場合（ステップＳ３０７で異なる）、トランザクション制御部３２は、データアレイ３３２にデータを書き込む（ステップＳ３０８）。このとき、トランザクション制御部３２は、アドレスアレイ３３１に登録されているタグの識別子の値をライトＴｒｘの発行元のプロセッサ３１の値に更新する。更新前のアドレスアレイ３３１のステータスがＭＩの場合、識別子が示すプロセッサ３１のストアスルーキャッシュ３１０にはデータが保持されていない。そのため、トランザクション制御部３２は、無効化トランザクションは発行しないで、図１５のフローチャートに沿ったトランザクション制御を終了する。
【０１８７】
ステップＳ３０７において、ライトＴｒｘの発行元のプロセッサ３１の値と、識別子の値が同じ場合（ステップＳ３０７で同じ）、トランザクション制御部３２は、データアレイ３３２にデータを書き込む（ステップＳ３０９）。このとき、トランザクション制御部３２は、アドレスアレイ３３１の識別子の値を更新せずに、図１５のフローチャートに沿ったトランザクション制御を終了とする。
【０１８８】
以上が、本実施形態におけるライトトランザクション制御の一例についての説明である。なお、図１５のフローチャートに沿った処理は一例であって、本実施形態のライトトランザクション制御をそのままの手順に限定するものではない。
【０１８９】
ライトトランザクション制御においては、プロセッサ３１が発行するライトＴｒｘに対して、プロセッサ３１が自身のストアスルーキャッシュ３１０に登録しないケースがありうる。例えば、同じキャッシュライン内の前半のデータと後半のデータのライトＴｒｘが別々のプロセッサ３１から発行される場合である。本実施形態のライトトランザクション制御によれば、このような場合に、トランザクション制御部３２が異なるプロセッサ３１から交互にライトランザクションを受け付けたとしても、無効化トランザクションを削減できる。
【０１９０】
なお、図１５のフローチャートにおいては、ライトＴｒｘに付随する未登録情報が１の場合について説明した。未登録情報が０の場合、すなわちプロセッサ３１の持つストアスルーキャッシュ３１０にもデータが保持されていることがある。このような場合は、図１５のフローチャートの各ステップにおいて更新されるステータスが異なる。未登録情報が０の場合、ステップＳ３０３とステップＳ３０５において、ステータスは、ＭＩではなく、Ｍｏｄｉｆｉｅｄに更新される。また、未登録情報が０の場合、ステップＳ３１０、ステップＳ３１１、ステップＳ３１２において、ステータスは更新されず、ステップＳ３０８、ステップＳ３０９においては、ステータスはＭｏｄｉｆｉｅｄに更新される。
【０１９１】
〔リードトランザクション制御〕
次に、プロセッサ３１からリードトランザクションを受信した際にトランザクション制御部３２が行うリードトランザクション制御について説明する。図１６は、本実施形態におけるリードトランザクション制御の一例について説明するためのフローチャートである。図１６のフローチャートにおいては、リードトランザクションをリードＴｒｘ、リプライトランザクションをリプライＴｒｘ、アドレスアレイをＡＡ（Address array）、データアレイをＤＡ（Data Array）と略記する。以下の説明においても、上記の略記を用いる場合がある。
【０１９２】
図１６において、まず、トランザクション制御部３２は、いずれかのプロセッサ３１から発行されたリードＴｒｘを受信する（ステップＳ３２１）。
【０１９３】
次に、トランザクション制御部３２は、ストアイン共有キャッシュ３３を検索し、受信したリードＴｒｘで指定されたアドレスにデータが登録されているか検証する（ステップＳ３２２）。例えば、トランザクション制御部３２は、受信したリードＴｒｘのアドレスからセットアドレスを作成し、作成したセットアドレスを用いてストアイン共有キャッシュ３３からタグを読み出す。そして、トランザクション制御部３２は、受信したリードＴｒｘと、読み出したタグとを比較する。
【０１９４】
ステップＳ３２２において、指定されたデータが登録されていない場合（ステップＳ３２２でＮｏ：Ｉｎｖａｌｉｄ）、トランザクション制御部３２は、リードＴｒｘをメモリ３５に発行してデータを読み出す（ステップＳ３２３）。
【０１９５】
次に、トランザクション制御部３２は、メモリ３５から読み出したデータをデータアレイ３３２に登録する。併せて、トランザクション制御部３２は、データアレイ３３２に登録したデータのタグをアドレスアレイ３３１に登録する（ステップＳ３２４）。ステップＳ３２４においてアドレスアレイ３３１に登録されるタグは、新たなキーアドレス、識別子の値は０（無効）、データアレイ３３２に登録されたデータのステータス（Ｓｈａｒｅｄ）を含む。
【０１９６】
次に、トランザクション制御部３２は、データアレイ３３２に登録したデータをリードＴｒｘの発行元のプロセッサ３１に送出するためのリプライＴｒｘを生成する（ステップＳ３２９）。
【０１９７】
そして、トランザクション制御部３２は、生成したリプライＴｒｘをプロセッサ３１に送出し（ステップＳ３３０）、図１６のフローチャートに沿ったトランザクション制御を終了する。
【０１９８】
ステップＳ３２２において、指定されたアドレスにデータが登録されている場合（ステップＳ３２２でＹｅｓ）、トランザクション制御部３２は、そのアドレスに登録されているデータのステータスを参照する（ステップＳ３２５）。
【０１９９】
ステップＳ３２５において、ステータスがＳｈａｒｅｄの場合、トランザクション制御部３２は、データアレイ３３２から読み出したデータをプロセッサ３１に送出するためのリプライＴｒｘを生成する（ステップＳ３２９）。
【０２００】
そして、トランザクション制御部３２は、生成したリプライＴｒｘをプロセッサ３１に送出し（ステップＳ３３０）、図１６のフローチャートに沿ったトランザクション制御を終了する。
【０２０１】
ステップＳ３２５において、ステータスがＭｏｄｉｆｉｅｄの場合、トランザクション制御部３２は、ストアイン共有キャッシュ３３から読み出した識別子の値が有効であるか確認する（ステップＳ３２６）。
【０２０２】
ステップＳ３２６において、識別子が０（無効）の場合（ステップＳ３２６でＮｏ）、トランザクション制御部３２は、データアレイ３３２から読み出したデータをプロセッサ３１に送出するためのリプライＴｒｘを生成する（ステップＳ３２９）。
【０２０３】
そして、トランザクション制御部３２は、生成したリプライＴｒｘをプロセッサ３１に送出し（ステップＳ３３０）、図１６のフローチャートに沿ったトランザクション制御を終了する。
【０２０４】
ステップＳ３２６において、識別子が有効の場合（ステップＳ３２６でＹｅｓ）、トランザクション制御部３２は、アドレスアレイ３３１の識別子の値を０（無効）に更新する（ステップＳ３２８）。
【０２０５】
次に、トランザクション制御部３２は、データアレイ３３２から読み出したデータをプロセッサ３１に送出するためのリプライＴｒｘを生成する（ステップＳ３２９）。
【０２０６】
そして、トランザクション制御部３２は、生成したリプライＴｒｘをプロセッサ３１に送出し（ステップＳ３３０）、図１６のフローチャートに沿ったトランザクション制御を終了する。
【０２０７】
ステップＳ３２５において、ステータスがＭＩの場合（ステップＳ３２５でＭＩ）、トランザクション制御部３２は、アドレスアレイ３３１のステータスをＭｏｄｉｆｉｅｄに更新する（ステップＳ３２７）。
【０２０８】
次に、トランザクション制御部３２は、アドレスアレイ３３１の識別子の値を０（無効）に更新する（ステップＳ３２８）。
【０２０９】
次に、トランザクション制御部３２は、データアレイ３３２から読み出したデータを用いてリプライＴｒｘを生成する（ステップＳ３２９）。
【０２１０】
そして、トランザクション制御部３２は、生成したリプライＴｒｘをプロセッサ３１に送出し（ステップＳ３３０）、図１６のフローチャートに沿ったトランザクション制御を終了する。
【０２１１】
以上が、本実施形態におけるリードトランザクション制御の一例についての説明である。なお、図１６のフローチャートに沿った処理は一例であって、本実施形態のリードトランザクション制御をそのままの手順に限定するものではない。
【０２１２】
以上のように、本実施形態において、タグに含まれるステータスは、第１の状態と、第２の状態と、第３の状態とのいずれかに設定される。第１の状態は、共有キャッシュメモリに格納されたデータを格納するキャッシュメモリがあることを示す。第２の状態は、共有キャッシュメモリに格納されたデータを格納するキャッシュメモリがないことを示す。第３の状態は、共有キャッシュメモリに格納されたデータがキャッシュメモリおよびメモリに格納されていないことを示す。
【０２１３】
複数のプロセッサは、ライトトランザクションを発行する際に、そのライトトランザクションに未登録情報を付与する。未登録情報は、ライトトランザクションで指定されるライトデータがライトトランザクション発行元のプロセッサのキャッシュメモリに格納されていないことを示す。
【０２１４】
制御回路は、ライトトランザクションに応じて共有キャッシュメモリに格納されたデータをライトデータで更新する際に、タグに含まれるステータスに応じて更新する。ステータスが第１の状態の場合、制御回路は、ライトトランザクションの発行元のプロセッサの識別情報の値でタグの識別子の値を更新するとともに、ステータスを第３の状態に更新する。そして、制御回路は、ライトトランザクションの発行元以外のプロセッサにキャッシュ無効化トランザクションを発行する。ステータスが第２の状態の場合、制御回路は、データに関連付けられたタグに含まれる識別子の値に応じてデータを更新するともに、ステータスを第３の状態に更新する。ステータスが第３の状態の場合、制御回路は、データに関連付けられたタグに含まれる識別子の値に応じてデータを更新する。
【０２１５】
本実施形態において、ストアスルーのキャッシュメモリにデータを保持しないでライトトランザクションを発行するプロセッサは、キャッシュにはデータを保持しないことを示す未登録情報をライトトランザクションの付随情報として付与する。また、本実施形態においては、ストアインの共有キャッシュのアドレスアレイにも、ライトトランザクションの未登録情報を判別するためのステータスまたはフラグを設定する。本実施形態によれば、あるプロセッサがライトトランザクションを発行した後に、他のプロセッサから同一キャッシュラインのアドレスにライトトランザクションが発行されたとき、未登録情報に基づいて無効化トランザクションを削減できる。
【０２１６】
以上、実施形態を参照して本発明を説明してきたが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０２１７】
１０、２０、３０    情報処理装置
１１、２１、３１    プロセッサ
１２、２２、３２    トランザクション制御部
１３、２３、３３    ストアイン共有キャッシュ
１５、２５、３５    メモリ
１１０、２１０、３１０    ストアスルーキャッシュ
１２１    トランザクション受信部
１２２    ストアイン共有キャッシュ制御部
１２３    トランザクション・リプライ送出部
１３１、２３１、３３１    アドレスアレイ
１３２、２３２、３３２    データアレイ
【図１】
2020135196.tif 000003
【図２】
2020135196.tif 000004
【図３】
2020135196.tif 000005
【図４】
2020135196.tif 000006
【図５】
2020135196.tif 000007
【図６】
2020135196.tif 000008
【図７】
2020135196.tif 000009
【図８】
2020135196.tif 000010
【図９】
2020135196.tif 000011
【図１０】
2020135196.tif 000012
【図１１】
2020135196.tif 000013
【図１２】
2020135196.tif 000014
【図１３】
2020135196.tif 000015
【図１４】
2020135196.tif 000016
【図１５】
2020135196.tif 000017
【図１６】
2020135196.tif 000018