(57)【要約】【課題】演算処理装置間におけるデータ転送の性能を向上させることを目的とする。【解決手段】Ｈ−ＣＰＵは、Ｒ−ＣＰＵがＨ−ＣＰＵと接続されたメモリから読み出して保持したデータを送信する旨の送信要求をＬ−ＣＰＵから受信した場合は、Ｌ−ＣＰＵがデータをメモリから読み出して保持する際のデータの状態を示すキャッシュステートと、データとをＬ−ＣＰＵへ送信する旨の転送指示を、Ｒ−ＣＰＵに送信する。そして、Ｈ−ＣＰＵは、転送指示に対する応答をＲ−ＣＰＵから受信する前に、Ｌ−ＣＰＵに対して、データを獲得した旨を示す獲得情報を送信する。【選択図】図６
2014048848.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置と第１の演算処理装置に接続される演算処理装置において、
前記第１の演算処理装置が前記主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第２の演算処理装置から受信した場合、前記第２の演算処理装置が対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を、前記第１の演算処理装置に送信する第１の送信部と、
前記第１の送信部が送信した転送指示に対する応答を前記第１の演算処理装置から受信する前に、前記第２の演算処理装置に対して、前記対象データを獲得した旨を示す獲得情報を送信する第２の送信部を有することを特徴とする演算処理装置。
【請求項２】
前記第１の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報を含む応答を、前記転送指示に対する応答として前記第１の演算処理装置から受信する受信部と、
前記受信部が受信した応答に含まれる状態情報に基づいて、前記主記憶装置上の対象データと各演算処理装置が保持した対象データとの同一性を確保するための同一性情報を更新する更新部と
を有することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記受信部は、前記第１の演算処理装置が保持する対象データが更新されている場合には、前記状態情報を含む応答とともに、当該更新後の対象データを前記第１の演算処理装置から受信し、
前記更新部は、前記受信部が受信した応答に含まれる状態情報に基づいて、前記同一性情報を更新するとともに、前記受信部が受信した更新後の対象データを前記主記憶装置に書き戻すことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記更新部は、前記第２の演算処理装置から受信した送信要求の対象データが演算命令を示すデータである場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信部が受信した応答に含まれる状態情報が前記対象データを更新することなく排他的に保持している旨を示す場合には、当該対象データが更新されずに他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする請求項２または３に記載の演算処理装置。
【請求項５】
前記更新部は、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信部が受信した応答に含まれる状態情報が前記対象データが更新されている旨を示す場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを書き込むための送信要求である場合には、当該対象データが更新された状態で他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする請求項２−４のいずれか１つに記載の演算処理装置。
【請求項６】
第１の演算処理装置が管理する主記憶装置から対象データを読み出して保持した演算処理装置において、
第２の演算処理装置から前記対象データを送信する旨の送信要求を受信した前記第１の演算処理装置から、前記第２の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を受信した場合は、当該対象データを前記第２の演算処理装置が保持した場合における対象データの状態を判別する判別部と、
前記判別部が判別した対象データの状態を示す状態情報と、前記対象データとを、前記第２の演算処理装置へ送信する第１の送信部と、
前記送信要求に対する応答を前記第２の演算処理装置に送信した前記第１の演算処理装置に対して、前記転送指示に対する応答を送信する第２の送信部と
を有することを特徴とする演算処理装置。
【請求項７】
前記第２の送信部は、前記対象データが前記演算処理装置に保持されていた際の状態を示す状態情報を含んだ応答を前記第１の演算処理装置へ送信することを特徴とする請求項６に記載の演算処理装置。
【請求項８】
前記第２の送信部は、前記対象データが前記演算処理装置によって更新されていた場合には、前記転送指示に対する応答とともに、更新後の対象データを前記第１の演算処理装置へ送信することを特徴とする請求項６または７に記載の演算処理装置。
【請求項９】
前記判別部は、前記対象データが演算命令を示すデータである場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第１の演算処理装置に発行し、かつ、前記演算処理装置が前記対象データを更新することなく排他的に保持している場合には、前記対象データが共有されている旨を示す状態情報を判別結果とすることを特徴とする請求項６−８のいずれか１つに記載の演算処理装置。
【請求項１０】
前記判別部は、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第１の演算処理装置に発行し、かつ、前記演算処理装置が前記対象データを更新している場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記データの書き込みを行うための送信要求を前記第１の演算処理装置に発行した場合には、前記対象データが排他的に保持されている旨を示す状態情報を判別結果とすることを特徴とする請求項６−９のいずれか１つに記載の演算処理装置。
【請求項１１】
データを記憶する主記憶装置と、前記データを保持する複数の演算処理装置とを有する情報処理装置において、
主記憶装置と第１の演算処理装置に接続される第２の演算処理装置は、
前記第１の演算処理装置が前記主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第３の演算処理装置から受信した場合、前記第３の演算処理装置が対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第３の演算処理装置に転送する旨の転送指示を、前記第１の演算処理装置に送信する第１の送信部と、
前記第１の送信部が送信した転送指示に対する応答を前記第１の演算処理装置から受信する前に、前記第３の演算処理装置に対して、前記対象データを獲得した旨を示す獲得情報を送信する第２の送信部と
を有し、
前記第１の演算処理装置は、
前記第１の演算処理装置から、前記転送指示を受信した場合は、前記対象データを前記第３の演算処理装置が保持した場合における対象データの状態を判別する判別部と、
前記判別部が判別した対象データの状態を示す状態情報と、前記対象データとを、前記第３の演算処理装置へ送信する第３の送信部と、
前記第１の演算処理装置に対して、前記転送指示に対する応答を送信する第４の送信部と
を有することを特徴とする情報処理装置。
【請求項１２】
主記憶装置と第１の演算処理装置に接続される演算処理装置が実行するデータ転送方法において、
前記第１の演算処理装置が前記主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第２の演算処理装置から受信した場合、前記第２の演算処理装置が対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を、前記第１の演算処理装置に送信し、
前記送信した転送指示に対する応答を前記第１の演算処理装置から受信する前に、前記第２の演算処理装置に対して、前記対象データを獲得した旨を示す獲得情報を送信する
処理を実行することを特徴とするデータ転送方法。
【請求項１３】
第１の演算処理装置が管理する主記憶装置から対象データを読み出して保持した演算処理装置が実行するデータ転送方法において、
第２の演算処理装置から前記対象データを送信する旨の送信要求を受信した前記第１の演算処理装置から、前記第２の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を受信した場合は、当該対象データを前記第２の演算処理装置が保持した場合における対象データの状態を判別し、
前記判別した対象データの状態を示す状態情報と、前記対象データとを、前記第２の演算処理装置へ送信し、
前記送信要求に対する応答を前記第２の演算処理装置に送信した前記第１の演算処理装置に対して、前記転送指示に対する応答を送信する
処理を実行することを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置およびデータ転送方法に関する。
【背景技術】
【０００２】
従来、主記憶装置としてのメモリと、メモリ上のデータを管理する演算処理装置としてのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）との組を複数有し、各ＣＰＵが各メモリを共有するＮＵＭＡ（Ｎｏｎ  Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）の技術が知られている。このようなＮＵＭＡの技術の一例として、各ＣＰＵが、ディレクトリを用いて、自身と接続されたメモリ上のデータと各ＣＰＵが保持したデータとのコヒーレンシを保持するｃｃＮＵＭＡ（Ｃａｃｈｅ  Ｃｏｈｅｒｅｎｔ  Ｎｏｎ  Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）の技術が知られている。
【０００３】
このようなｃｃＮＵＭＡの技術が適用されたＣＰＵは、自身が管理するメモリ上のデータを他のＣＰＵが保持した際に、さらに異なるＣＰＵからデータの転送を要求されると、データを保持している他のＣＰＵにデータの転送を行わせる場合がある。以下、図２９を用いて、ｃｃＮＵＭＡの技術が適用されたＣＰＵがデータを転送する処理について説明する。
【０００４】
図２９は、従来のＣＰＵが実行するリクエスト転送処理を説明するための図である。なお、以下の説明では、転送対象となるデータのコヒーレンシを管理するＣＰＵをＨｏｍｅ（Ｈ）−ＣＰＵとし、データの転送を要求するリクエストを発行するＣＰＵをＬｏｃａｌ（Ｌ）−ＣＰＵとする。また、転送対象となるデータをＨ−ＣＰＵが管理するメモリから既に保持しているＣＰＵをＲｅｍｏｔｅ（Ｒ）−ＣＰＵとする。
【０００５】
まず、図２９中（Ａ）に示すように、Ｌ−ＣＰＵは、Ｈ−ＣＰＵに対して、データの転送を要求するリクエストを発行する。すると、Ｈ−ＣＰＵは、転送対象のデータが格納されたメモリアドレスについて、ディレクトリステートを検査する。そして、Ｈ−ＣＰＵは、最新データをＲ−ＣＰＵが保持していると判断し、図２９中（Ｂ）に示すように、Ｒ−ＣＰＵに対してデータ転送要求を発行する。
【０００６】
一方、Ｒ−ＣＰＵは、Ｈ−ＣＰＵからデータ転送要求を受信すると、図２９中（Ｃ）に示すように、転送対象となるデータをＬ−ＣＰＵに対して送信する。また、Ｒ−ＣＰＵは、図２９中（Ｄ）に示すように、転送対象となるデータの現キャッシュステートを示すデータ転送応答をＨ−ＣＰＵに送信する。
【０００７】
また、Ｈ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信すると、データ転送応答が示す現キャッシュステートに基づいて、Ｌ−ＣＰＵがデータを保持した際のディレクトリステートとキャッシュステートとを決定する。そして、Ｈ−ＣＰＵは、図２９中（Ｅ）に示すように、データの所有権獲得と新たなキャッシュステートとを示すリクエスト応答をＬ−ＣＰＵに対して送信する。その後、Ｌ−ＣＰＵは、Ｈ−ＣＰＵからリクエスト応答を受信すると、リクエスト応答が示す新たなキャッシュステートに従って、Ｒ−ＣＰＵから受信したデータを用いた処理を実行する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−１９８４９０号公報
【非特許文献】
【０００９】
【非特許文献１】Computer  Architecture:  A  Quantitative  Approach  4th  Edition,  John  L.  Hennessy,David  A.  Patterson
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した３つのＣＰＵがデータの転送を行う技術では、Ｈ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信した後で、データの所有権獲得を示すリクエスト応答をＬ−ＣＰＵに送信する。このため、データ転送完了までに時間がかかる結果、データ転送の性能が劣化する。
【００１１】
１つの側面では、本発明は、情報処理装置における演算処理装置間のデータ転送の性能を向上させることを目的とする。
【課題を解決するための手段】
【００１２】
１つの側面では、主記憶装置と第１の演算処理装置に接続される演算処理装置である。また、演算処理装置は、第１の演算処理装置が主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第２の演算処理装置から受信した場合、第２の演算処理装置が対象データを主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と、対象データとを第２の演算処理装置に転送する旨の転送指示を、第１の演算処理装置に送信する。また、演算処理装置は、第１の送信部が送信した転送指示に対する応答を第１の演算処理装置から受信する前に、第２の演算処理装置に対して、対象データを獲得した旨を示す獲得情報を送信する。
【発明の効果】
【００１３】
１つの実施形態では、演算処理装置としてのデータ転送の性能を向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施例１に係る情報処理装置の構成の一例を示す図である。
【図２】図２は、実施例１に係るＳＢの構成の一例を示す図である。
【図３】図３は、実施例１に係るＣＰＵの構成の一例を示す図である。
【図４】図４は、実施例１に係るキャッシュ制御部の構成の一例を説明するための図である。
【図５】図５は、実施例１に係るコヒーレント制御部の構成の一例を説明するための図である。
【図６】図６は、実施例１に係るＣＰＵが実行するリクエスト転送処理を説明するための図である。
【図７】図７は、データ転送処理を実行した際の状態遷移を説明するための図である。
【図８】図８は、リクエストを発行する条件を説明するための図である。
【図９】図９は、データ転送要求を発行する条件を説明するための図である。
【図１０】図１０は、データ転送応答を発行する条件を説明するための図である。
【図１１】図１１は、データ応答に含める新キャッシュステート情報を説明するための図である。
【図１２Ａ】図１２Ａは、リクエストのフォーマットを説明するための第１の図である。
【図１２Ｂ】図１２Ｂは、リクエストのフォーマットを説明するための第２の図である。
【図１３Ａ】図１３Ａは、データ付のリクエスト応答のフォーマットを説明するための第１の図である。
【図１３Ｂ】図１３Ｂは、データ付のリクエスト応答のフォーマットを説明するための第２の図である。
【図１４Ａ】図１４Ａは、データ無しのリクエスト応答のフォーマットを説明するための第１の図である。
【図１４Ｂ】図１４Ｂは、データ無しのリクエスト応答のフォーマットを説明するための第２の図である。
【図１５Ａ】図１５Ａは、オーダーのフォーマットを説明するための第１の図である。
【図１５Ｂ】図１５Ｂは、オーダーのフォーマットを説明するための第２の図である。
【図１６Ａ】図１６Ａは、データ付のオーダー応答のフォーマットを説明するための第１の図である。
【図１６Ｂ】図１６Ｂは、データ付のオーダー応答のフォーマットを説明するための第２の図である。
【図１７Ａ】図１７Ａは、データ無しのオーダー応答のフォーマットを説明するための第１の図である。
【図１７Ｂ】図１７Ｂは、データ無しのオーダー応答のフォーマットを説明するための第２の図である。
【図１８】図１８は、従来のＣＰＵがリクエストを転送する処理の流れを説明するための図である。
【図１９】図１９は、実施例１に係るＣＰＵがリクエストを転送する処理の流れを説明するための図である。
【図２０】図２０は、従来のメモリアクセス処理に要する時間を説明するための図である。
【図２１】図２１は、実施例１に係るＣＰＵのメモリアクセス処理に要する時間を説明するための図である。
【図２２】図２２は、Ｌ−ＣＰＵによるリクエストの発行処理の流れを説明するための図である。
【図２３】図２３は、Ｈ−ＣＰＵによるデータ転送要求とリクエスト応答とを発行する処理の流れを説明するための図である。
【図２４】図２４は、Ｒ−ＣＰＵがデータ転送応答とデータ応答とを発行する処理の流れを説明するための図である。
【図２５】図２５は、Ｈ−ＣＰＵがデータ転送応答を受信した際に実行する処理の流れを説明するための図である。
【図２６】図２６は、Ｌ−ＣＰＵがリクエスト応答を受信した際に実行する処理の流れを説明するための図である。
【図２７】図２７は、Ｌ−ＣＰＵがデータ応答を受信した際に実行する処理の流れを説明するための図である。
【図２８】図２８は、Ｌ−ＣＰＵが転送対象のデータを登録する処理の流れを説明するための図である。
【図２９】図２９は、従来のＣＰＵが実行するリクエスト転送処理を説明するための図である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照して本願に係る演算処理装置、情報処理装置およびデータ転送方法について説明する。
【実施例１】
【００１６】
まず、図１を用いて、実施例１に係る情報処理装置の構成について説明する。図１は、実施例１に係る情報処理装置の構成の一例を示す図である。図１に示すように、実施例１に係る情報処理装置１は、ＸＢ（クロスバスイッチ）２ａとＸＢ２ｂと、ＳＢ（システムボード）３ａ〜ＳＢ３ｈとを有する。なお、図１に示すクロスバスイッチおよびシステムボードの数はあくまで例示であり、これに限定されるものではない。
【００１７】
ＸＢ２ａは、各ＳＢ３ａ〜３ｈ間でやり取りされるデータの経路を動的に選択するとともに、データを転送するデータ転送装置としてのスイッチである。ここで、データには、プログラムや演算処理結果などが含まれる。なお、ＸＢ２ｂの構成は、ＸＢ２ａと同様であるので、詳細な説明は省略する。また、ＳＢ３ａは、演算処理装置としてのＣＰＵと主記憶装置としてのメモリとを有し、各種演算処理を実行する。なお、ＳＢ３ｂからＳＢ３ｈの構成は、ＳＢ３ａと同様であるので、詳細な説明は省略する。
【００１８】
次に、図２を用いて、ＳＢの構成例について説明する。図２は、実施例１に係るＳＢの構成の一例を示す図である。図２に示す例では、ＳＢ３ａは、主記憶装置としてのメモリ１０ａ〜メモリ１０ｄと、相互に接続された演算処理装置としてのＣＰＵ２０ａ〜ＣＰＵ２０ｄとを有する。すなわち、メモリ１０ａに対しては、ＣＰＵ２０ａがメモリアクセスを行い、メモリ１０ｂに対しては、ＣＰＵ２０ｂがメモリアクセスを行う。また、メモリ１０ｃに対しては、ＣＰＵ２０ｃがメモリアクセスを行い、メモリ１０ｄに対しては、ＣＰＵ２０ｄがメモリアクセスを行う。
【００１９】
また、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、それぞれメモリ１０ａ〜メモリ１０ｄと接続される。なお、メモリ１０ｂ〜１０ｄは、メモリ１０ａと同様の機能を有するものとして、以下の説明を省略する。また、ＣＰＵ２０ｂ〜ＣＰＵ２０ｄは、ＣＰＵ２０ａと同様の処理を実行するものとし、以下の説明を省略する。
【００２０】
例えば、ＣＰＵ２０ａは、キャッシュメモリを有し、自身が管理するメインメモリであるメモリ１０ａに格納されたデータを保持して各種演算処理を実行する。また、ＣＰＵ２０ａは、各メモリ１０ｂ〜１０ｄに格納されたデータを保持する場合には、他のＣＰＵ２０ｂ〜ＣＰＵ２０ｄに対してデータの転送を要求するリクエストを発行する。そして、ＣＰＵ２０ａは、他のＣＰＵ２０ｂ〜ＣＰＵ２０ｄからリクエストの対象となるデータを受信し、受信したデータを保持する。なお、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、ＸＢ２ａと接続されており、ＸＢ２ａを介して、図示しないＳＢ３ｂ〜３ｈが有するメモリに格納されたデータを取得することもできる。
【００２１】
一方、メモリ１０ａは、各ＣＰＵ１０ａ〜１０ｄが演算処理に利用するデータを記憶する。また、メモリ１０ａは、メモリ１０ａが記憶するデータをどのＣＰＵが保持しているかを示すディレクトリ情報を記憶する。例えば、ＣＰＵ２０ａは、各種データを記憶する領域と、ディレクトリ情報を記憶する領域とをメモリ１０ａ上に設定し、各種データを記憶する領域と、ディレクトリ情報を記憶する領域とを対応付ける。そして、ＣＰＵ２０ａは、各種データを記憶する領域と対応付けた領域に、データをどのＣＰＵが保持しているかを示すディレクトリ情報を格納する。
【００２２】
ここで、ＣＰＵ２０ａは、保持されたデータの状態を示すディレクトリステートとデータをどのＣＰＵが保持しているかを示すビット列とを対応付けたディレクトリ情報を格納する。例えば、ＣＰＵ２０ａは、ビット列の各ビットを情報処理装置１が有する各ＣＰＵと対応付け、データを保持したＣＰＵと対応付けたビットを「１」にすることで、データを保持したＣＰＵを識別する。
【００２３】
また、ＣＰＵ２０ａは、ディレクトリステートとして「Ｉｎｖａｌｉｄ（ＩＮＶ）」、「Ｓｈａｒｅｄ（ＳＨ）」、「Ｅｘｃｌｕｓｉｖｅ（ＥＸ）」を格納する。ここで、「ＩＮＶ」とは、データが他のＣＰＵに保持されていないことを示す。また、「ＳＨ」とは、データが他のＣＰＵにクリーンな状態、すなわち更新されていない状態で保持されていることを示す。また、「ＥＸ」とは、データが１つのＣＰＵによって保持されており、ダーティな可能性があることを示す。すなわち、「ＥＸ」とは、他のＣＰＵが保持したデータが更新されている可能性があることを示す。
【００２４】
次に、図３を用いて、ＣＰＵの構成例について説明する。図３は、実施例１に係るＣＰＵの構成の一例を示す図である。図３に示す例では、ＣＰＵ２０ａは、通信制御部２１、コア２２ａ〜コア２２ｆ、Ｌｅｖｅｌ２（Ｌ２）キャッシュ制御部２３、メモリ制御部２４、及びコヒーレント制御部２５を有する。なお、ＣＰＵ２０ａが有するコアの数は、図示に限定されるものではない。また、以下の説明では、コア２２ｂ〜２２ｆは、コア２２ａと同様の機能を発揮するものとして、説明を省略する。
【００２５】
通信制御部２１は、ＸＢ２ａを介して、ＣＰＵ２０ａとＳＢ３ｂ〜３ｈが有するＣＰＵとの間の通信を制御する。また、通信制御部２１は、ＣＰＵ２０ａとＳＢ３ａが有するＣＰＵ２０ｂ〜２０ｄとの間の通信を制御する。例えば、通信制御部２１は、リクエスト、リクエスト応答、データ転送要求、データ転送応答、データ応答等、ＣＰＵ間で送受信される各種メッセージをコヒーレント制御部２５から受信すると、受信したメッセージの送信先となるＣＰＵを判別する。
【００２６】
そして、通信制御部２１は、メッセージの送信先となるＣＰＵに応じて、各種メッセージをＣＰＵ２０ｂ〜２０ｄ、またはＸＢ２ａに対して出力する。詳細には、通信制御部２１は、パラレルデータとして各種メッセージをコヒーレント制御部２５から受信すると、受信した各種メッセージをシリアルデータに変換し、複数のレーンを介して、変換後のシリアルデータを送信する。また、通信制御部２１は、他のＣＰＵ２０ｂ〜２０ｄ、またはＸＢ２ａから各種メッセージを受信すると、受信したメッセージをコヒーレント制御部２５へ送信する。
【００２７】
なお、通信制御部２１がメッセージの送信先となるＣＰＵを識別する処理については、任意の手法が考えられるが、例えば、以下のような処理が考えられる。まず、情報処理装置１は、全てのメモリに対して同一のメモリアドレス空間をマッピングする。また、通信制御部２１は、各メモリアドレスと、各メモリアドレスをマッピングしたメモリを管理するＣＰＵの識別子を対応付けたテーブルを有する。そして、通信制御部２１は、テーブルを閲覧し、各種メッセージにより処理の対象となるメモリアドレスと対応付けられたＣＰＵを判別する。
【００２８】
コア２２ａは、図示しないＬｅｖｅｌ１（Ｌ１）キャッシュメモリを有し、Ｌ１キャッシュメモリが記憶するＬ１データを用いて、各種演算処理を実行するＣＰＵ２０ａのプロセッサコアである。ここで、Ｌ１キャッシュメモリに保持されるデータ、すなわちキャッシュデータには、各キャッシュデータの状態、すなわちキャッシュステートを示すキャッシュステート情報を含むＬ１タグが付加される。
【００２９】
例えば、Ｌ１タグは、キャッシュステート情報として、「Ｉｎｖａｌｉｄ（Ｉ）」、「Ｓｈａｒｅｄ（Ｓ）」、「Ｅｘｃｌｕｓｉｖｅ（Ｅ）」、「Ｍｏｄｉｆｉｅｄ（Ｍ）」のいずれかを含む。ここで、「Ｉｎｖａｌｉｄ（Ｉ）」とは、キャッシュデータが登録されていない状態を示し、「Ｓｈａｒｅｄ（Ｓ）」とは、他のＣＰＵも同一のデータを保持しており、かつクリーンな状態を示す。また、「Ｅｘｃｌｕｓｉｖｅ（Ｅ）」とは、独占的にデータを保持しており、かつクリーンな状態を示し、「Ｍｏｄｉｆｉｅｄ（Ｍ）」とは、独占的にデータを保持しており、かつダーティな状態を示す。
【００３０】
また、コア２２ａは、データの読み出しや書き込みを行う場合には、Ｌ１キャッシュメモリに読み出しや書き込みの対象となるデータが保持されているか判別する。そして、コア２２ａは、読み出しや書き込みの対象となるデータがＬ１キャッシュメモリに保持されておらず、キャッシュミスが発生した場合には、キャッシュミスが発生したデータの読み込みや書き込みを示すコマンドをキャッシュ制御部２３に発行する。そして、コア２２ａは、キャッシュ制御部２３からコマンドの応答として受信したデータをＬ１キャッシュメモリに格納し、Ｌ１キャッシュメモリに格納したデータを用いて、各種演算処理を実行する。
【００３１】
キャッシュ制御部２３は、いわゆるＬ２キャッシュメモリと、Ｌ２キャッシュタグとを有する。また、キャッシュ制御部２３は、上述したＬ１タグと同様に、「Ｍ」、「Ｅ」、「Ｓ」、「Ｉ」の何れかのキャッシュステート情報を含むＬ２キャッシュタグをＬ２キャッシュメモリのキャッシュラインごとに記憶する。そして、キャッシュ制御部２３は、Ｌ２キャッシュタグに含まれるキャッシュステート情報に応じて、以下の処理を実行する。
【００３２】
なお、以下の説明では、キャッシュ制御部２３が実行する処理について、ＣＰＵ２０ａがＬ−ＣＰＵとして動作する場合、およびＣＰＵ２０ａがＲ−ＣＰＵとして動作する場合に分けて説明する。まず、ＣＰＵ２０ａがＬ−ＣＰＵとして動作する場合にキャッシュ制御部２３が実行する処理について説明する。
【００３３】
まず、キャッシュ制御部２３は、コア２２ａ〜２２ｆからコマンドを受信した場合には、コマンドの対象となるデータをＬ２キャッシュメモリから検索する。そして、キャッシュ制御部２３は、取得要求の対象となるデータがＬ２キャッシュメモリに保持されている場合には、Ｌ２キャッシュメモリからデータを抽出し、抽出したデータをコア２２ａ〜２２ｆに出力する。
【００３４】
一方、キャッシュ制御部２３は、取得要求の対象となるデータがＬ２キャッシュメモリに保持されていない場合、すなわち、キャッシュミスが発生した場合は、コヒーレント制御部２５に対して、リクエストの発行を要求する。また、キャッシュ制御部２３は、コヒーレント制御部からリクエストの対象となるデータ、すなわち、転送対象となるデータを受信した場合には、受信したデータをＬ２キャッシュメモリに保持する。また、キャッシュ制御部２３は、リクエスト応答をコヒーレント制御部２５から受信した場合には、従来のＬ−ＣＰＵと同様に、リクエスト応答処理を実行する。
【００３５】
次に、ＣＰＵ２０ａがＲ−ＣＰＵとして動作する際にキャッシュ制御部２３が実行する処理について説明する。例えば、キャッシュ制御部２３は、コヒーレント制御部２５から、データ転送要求を受信すると、受信したデータ転送要求を解析し、転送対象のデータが格納されたメモリアドレスを識別する。そして、キャッシュ制御部２３は、識別したメモリアドレスを用いて転送対象のデータをＬ２キャッシュから検索する。
【００３６】
そして、キャッシュ制御部２３は、転送対象のデータをコヒーレント制御部２５に出力する。また、キャッシュ制御部２３は、データ転送の対象となるデータのＬ２キャッシュタグから、データ転送の対象となるデータの現キャッシュステートを示す現キャッシュステート情報を抽出する。
【００３７】
そして、キャッシュ制御部２３は、抽出した現キャッシュステート情報を用いて、データの転送先となるＣＰＵが転送対象のデータを保持した際の新たなキャッシュステートを判別する。すなわち、キャッシュ制御部２３は、ＣＰＵ２０ａがＲ−ＣＰＵとして動作する場合には、Ｌ−ＣＰＵがデータを保持した際の新たなキャッシュステートを判別する。そして、キャッシュ制御部２３は、現キャッシュステートを示す現キャッシュステート情報と、新たなキャッシュステートを示す新キャッシュステート情報とをコヒーレント制御部２５に出力する。
【００３８】
メモリ制御部２４は、メモリ１０ａに対するメモリアクセスを制御する。例えば、メモリ制御部２４は、コヒーレント制御部２５がメモリ１０ａに対して行うメモリアクセスを制御するＭＡＣ（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）である。
【００３９】
コヒーレント制御部２５は、メモリ１０ａに格納されたディレクトリ情報を用いて、他のＣＰＵとの間のキャッシュデータのコヒーレント制御を実行する。以下、コヒーレント制御部２５が実行する処理について、ＣＰＵ２０ａがＬ−ＣＰＵとして動作する場合、ＣＰＵ２０ａがＨ−ＣＰＵとして動作する場合、ＣＰＵ２０ａがＲ−ＣＰＵとして動作する場合に分けて説明する。
【００４０】
まず、ＣＰＵ２０ａがＬ−ＣＰＵとして動作する場合にコヒーレント制御部２５が実行する処理について説明する。例えば、コヒーレント制御部２５は、キャッシュ制御部２３からリクエストの発行を要求された場合には、データの読み出しや書き込みを要求するリクエストを生成し、生成したリクエストを通信制御部２１に出力する。そして、コヒーレント制御部２５は、通信制御部２１からリクエスト応答を受信した場合には、リクエスト応答をキャッシュ制御部２３に出力することで、転送対象のデータの所有権を獲得した旨を通知する。
【００４１】
またコヒーレント制御部２５は、通信制御部２１から転送対象のデータを含むデータ応答を受信した場合、すなわち、Ｒ−ＣＰＵが送信したデータ応答を受信した場合には、受信したデータ応答から、新キャッシュステート情報と、転送対象のデータとを抽出する。そして、コヒーレント制御部２５は、抽出した新キャッシュステート情報と、転送対象のデータとをキャッシュ制御部２３に出力する。
【００４２】
なお、キャッシュ制御部２３は、コヒーレント制御部２５から転送対象のデータと新キャッシュステートとを受信した場合は、受信したデータをＬ２キャッシュメモリに格納するとともに、受信した新キャッシュステートをＬ２キャッシュタグに格納する。
【００４３】
次に、ＣＰＵ２０ａがＨ−ＣＰＵとして動作する際に、コヒーレント制御部２５が実行する処理について説明する。例えば、コヒーレント制御部２５は、通信制御部２１から、他のＣＰＵが発行したリクエストを受信した場合には、受信したリクエストから転送対象のデータが格納されたメモリアドレスを抽出する。
【００４４】
続いて、コヒーレント制御部２５は、メモリ１０ａに格納されたディレクトリ情報を用いて、転送対象のデータを保持するＣＰＵを識別する。そして、コヒーレント制御部２５は、識別したＣＰＵに対してデータの転送を要求するデータ転送要求を生成し、生成したデータ転送要求を通信制御部２１に出力する。
【００４５】
また、コヒーレント制御部２５は、データ転送要求の送信先となるＣＰＵからデータ転送応答を受信する前に、転送対象のデータの所有権を獲得した旨を示すリクエスト応答を生成する。そして、コヒーレント制御部２５は、リクエストの送信元となるＣＰＵを送信先として、生成したリクエスト応答を通信制御部２１に出力する。
【００４６】
また、コヒーレント制御部２５は、通信制御部２１からデータ転送応答を受信した場合には、受信したデータ転送応答から現キャッシュステート情報を抽出する。そして、コヒーレント制御部２５は、抽出した現キャッシュステート情報を用いて、メモリ１０ａに格納されたディレクトリ情報の更新を行う。
【００４７】
また、コヒーレント制御部２５は、データ転送応答に転送対象のデータが含まれる場合には、データ転送応答から転送対象のデータを抽出し、抽出したデータをメモリ１０ａに書き戻すライトバック処理を実行する。具体的には、コヒーレント制御部２５は、メモリ制御部２４を介して、メモリ１０ａに抽出したデータの書き込みを行う。
【００４８】
なお、コヒーレント制御部２５は、転送対象のデータが他のＣＰＵによって保持されていない場合には、メモリ１０ａ、またはキャッシュ制御部２３に保持されたデータを取得し、取得したデータを含むリクエスト応答を生成する。そして、コヒーレント制御部２５は、生成したリクエスト応答を通信制御部２１に出力する。
【００４９】
次に、ＣＰＵ２０ａがＲ−ＣＰＵとして動作する際に、コヒーレント制御部２５が実行する処理について説明する。例えば、コヒーレント制御部２５は、通信制御部２１から、他のＣＰＵが発行したデータ転送要求を受信すると、受信したデータ転送要求をキャッシュ制御部２３に発行する。
【００５０】
すると、コヒーレント制御部２５は、キャッシュ制御部２３から転送対象のデータと、現キャッシュステート情報と、新キャッシュステート情報とを受信する。その後、コヒーレント制御部２５は、新キャッシュステート情報と、転送対象のデータとを含むデータ応答を生成し、データの転送先となるＣＰＵ、すなわちＬ−ＣＰＵを送信先として、生成したデータ応答を通信制御部２１に出力する。
【００５１】
また、コヒーレント制御部２５は、現キャッシュステートが「Ｍ」である場合、すなわち、転送対象のデータが更新されている場合には、現キャッシュステート情報と転送対象のデータとを含むデータ転送応答を生成する。そして、コヒーレント制御部２５は、データ転送応答の送信元であるＣＰＵ、すなわちＨ−ＣＰＵを送信先として、生成したデータ転送応答を通信制御部２１に出力する。この結果、Ｈ−ＣＰＵは、更新されたデータのライトバック処理を実行する。
【００５２】
一方、コヒーレント制御部２５は、現キャッシュステートが「Ｅ」である場合、すなわち、転送対象のデータが更新されていない場合には、転送対象のデータを含まず、現キャッシュステート情報を含むデータ転送応答を生成する。そして、コヒーレント制御部２５は、データ転送応答の送信元であるＣＰＵ、すなわちＨ−ＣＰＵを送信先として、生成したデータ転送応答を通信制御部２１に出力する。
【００５３】
次に、図４を用いて、実施例１に係るキャッシュ制御部の構成の一例を説明する。図４は、実施例１に係るキャッシュ制御部の構成の一例を説明するための図である。図４に示すように、キャッシュ制御部２３は、コマンド受信部３０、キャッシュタグ部３１、アクセス実行部３２、キャッシュデータ部３３、データ応答部３４を有する。
【００５４】
まず、キャッシュタグ部３１、およびキャッシュデータ部３３について説明する。キャッシュタグ部３１は、キャッシュデータ部３３に保持された各データのキャッシュステートを示す情報を含むＬ２タグを記憶する記憶部である。例えば、キャッシュタグ部３１は、キャッシュデータ部３３が有する各キャッシュラインの各ウェイと対応付けられた記憶領域を有し、各記憶領域にキャッシュステートを示す情報を記憶する。
【００５５】
なお、キャッシュタグ部３１は、上述したＬ１タグと同様に、「Ｍ」、「Ｅ」、「Ｓ」、「Ｉ」の何れかをキャッシュステートを示す情報として記憶する。すなわち、情報処理装置１は、いわゆるイリノイプロトコルを用いて、各メモリ１０ａ〜１０ｄに格納されたデータと、各ＣＰＵ２０ａ〜２０ｄが保持したデータとのコヒーレンシを保持する。
【００５６】
キャッシュデータ部３３は、メモリ１０ａや、他のＣＰＵが管理するメモリから読み出したデータを保持するＬ２キャッシュメモリである。例えば、キャッシュデータ部３３は、複数のキャッシュラインを有し、各キャッシュラインごとにデータを保持する複数のウェイを有する。コマンド受信部３０は、コア２２ａからコマンドを受信すると、受信したコマンドをアクセス実行部３２に出力する。
【００５７】
アクセス実行部３２は、コマンド受信部３０からコマンドを受信すると、キャッシュデータ部３３からコマンドの対象となるデータを検索する。具体的には、アクセス実行部３２は、コマンドから読み取り、または書き込みの対象となるメモリアドレスを抽出し、抽出したメモリアドレスを用いて、キャッシュデータ部３３に格納されたデータおよびキャッシュタグ部３１に格納されたＬ２タグを検索する。
【００５８】
例えば、アクセス実行部３２は、抽出したメモリアドレスのインデックスアドレスを用いて、データが保持されているキャッシュラインを特定し、特定したキャッシュラインの各ウェイからデータの検索を行ってもよい。そして、アクセス実行部３２は、コマンドの対象となるデータがキャッシュデータ部３３に保持されていない場合には、コヒーレント制御部２５に、リクエストの発行を要求するコマンドを発行する。また、アクセス実行部３２は、コア２２ａが発行したコマンドの内容がデータの書き込みを要求するコマンド、すなわち排他形フェッチであり、キャッシュステート情報が「Ｓ」である場合にも、リクエストの発行を要求するコマンドを発行する。
【００５９】
また、アクセス実行部３２は、コヒーレント制御部２５から、データ転送要求を受信すると、受信したデータ転送要求を解析し、転送対象のデータが格納されたメモリアドレスと、データ転送要求の種別とを抽出する。そして、アクセス実行部３２は、抽出したメモリアドレスを用いて、キャッシュデータ部３３を検索する。そして、アクセス実行部３２は、検索したデータ、すなわち転送対象のデータをコヒーレント制御部２５に出力する。
【００６０】
また、アクセス実行部３２は、キャッシュタグ部３１からＬ２タグを検索し、検索したＬ２タグから現キャッシュステート情報を抽出する。そして、アクセス実行部３２は、現キャッシュステートと、データ転送要求の種別とに応じて、新キャッシュステート情報を判別する。
【００６１】
具体的には、アクセス実行部３２は、データ転送要求が、Ｌ−ＣＰＵにおける命令フェッチを要因とする場合は、新キャッシュステート情報を「Ｓ」とする。また、アクセス実行部３２は、データ転送要求が、Ｌ−ＣＰＵにおけるロード命令を要因とし、かつ、現キャッシュステート情報が「Ｅ」である場合には、新キャッシュステート情報を「Ｓ」とする。
【００６２】
また、アクセス実行部３２は、データ転送要求が、Ｌ−ＣＰＵにおけるロード命令を要因とし、かつ、現キャッシュステート情報が「Ｍ」である場合には、新キャッシュステート情報を「Ｅ」とする。また、アクセス実行部３２は、データ転送要求がＬ−ＣＰＵにおけるストア命令を要因とする場合には、新キャッシュステート情報を「Ｅ」とする。そして、アクセス実行部３２は、現キャッシュステート情報と、新キャッシュステート情報とをコヒーレント制御部２５に出力する。
【００６３】
また、アクセス実行部３２は、コヒーレント制御部２５からデータの所有権を取得した旨を通知された場合には、リクエスト応答処理を実行する。また、アクセス実行部３２は、コヒーレント制御部２５から転送対象のデータと新キャッシュステート情報とを受信した場合には、受信したデータをキャッシュデータ部３３に格納し、受信した新キャッシュステート情報をキャッシュタグ部３１に格納する。
【００６４】
また、アクセス実行部３２は、キャッシュデータ部３３を検索した結果、コマンドの対象となるデータが保持されている場合には、保持されたデータをデータ応答部３４に出力させる。すると、データ応答部３４は、キャッシュデータ部３３から出力されたデータをコア２２ａに出力する。
【００６５】
なお、上述した説明では、コア２２ａが発行したコマンドに応じてキャッシュ制御部２３が実行する処理について説明したが、実施例はこれに限定されるものではない。すなわち、キャッシュ制御部２３は、各コア２２ｂ〜２２ｆが発行したコマンドについても、コア２２ａが発行したコマンドと同様の処理を行う。
【００６６】
次に、図５を用いて、コヒーレント制御部２５の構成の一例について説明する。図５は、実施例１に係るコヒーレント制御部の構成の一例を説明するための図である。図５に示すように、コヒーレント制御部２５は、コマンド受信部４０、ディレクトリ検査アクセス実行部４１、アドレスロック制御部４２、コマンド発行／応答部４３、データ応答部４４を有する。
【００６７】
コマンド受信部４０は、キャッシュ制御部２３からコマンドを受信する。また、コマンド受信部４０は、通信制御部２１を介して、他のＣＰＵが発行した各種メッセージを受信する。そして、コマンド受信部４０は、受信したメッセージがデータ転送要求である場合には、データ転送要求をキャッシュ制御部２３に出力する。
【００６８】
また、コマンド受信部４０は、リクエスト応答を受信した場合、またはデータ応答を受信した場合には、受信したリクエスト応答、またはデータ応答をデータ応答部４４に出力する。また、コマンド受信部４０は、コマンド、またはデータ転送応答を受信した場合には、受信したコマンド、またはデータ転送応答をディレクトリ検査アクセス実行部４１に出力する。
【００６９】
ディレクトリ検査アクセス実行部４１は、メモリ１０ａに格納されたディレクトリ情報を用いて、データのコヒーレンシを保持しつつ、各種メッセージの発行処理を行う。以下、ディレクトリ検査アクセス実行部４１が実行する処理について、ＣＰＵ２０ａがＬ−ＣＰＵとして動作する場合と、ＣＰＵ２０ａがＨ−ＣＰＵとして動作する場合とに分けて説明する。
【００７０】
まず、ＣＰＵ２０ａがＬ−ＣＰＵとして動作する場合にディレクトリ検査アクセス実行部４１が実行する処理について説明する。例えば、ディレクトリ検査アクセス実行部４１は、キャッシュ制御部２３から、リクエストの発行を要求するコマンドを受信すると、他のＣＰＵに対して送信するリクエストを生成する。
【００７１】
例えば、ディレクトリ検査アクセス実行部４１は、コア２２ａが発行したコマンドの内容に応じたオペレーションコードと、リクエストを識別するためのリクエストＩＤと、アクセス対象となる物理アドレスとを含むリクエストを生成する。そして、ディレクトリ検査アクセス実行部４１は、生成したリクエストをコマンド発行／応答部４３に出力する。
【００７２】
次に、ＣＰＵ２０ａがＨ−ＣＰＵとして動作する場合にディレクトリ検査アクセス実行部４１が実行する処理について説明する。まず、ディレクトリ検査アクセス実行部４１は、他のＣＰＵが発行したリクエストをコマンド受信部４０から受信すると、受信したリクエストを解析し、アクセス対象となる物理アドレスを抽出する。
【００７３】
次に、ディレクトリ検査アクセス実行部４１は、抽出した物理アドレスが示す記憶領域に係るディレクトリ情報を取得する。そして、ディレクトリ検査アクセス実行部４１は、取得したディレクトリ情報が「ＥＸ」である場合には、データ転送要求を生成し、生成したデータ転送要求をコマンド発行／応答部４３に出力する。
【００７４】
ここで、ディレクトリ検査アクセス実行部４１は、受信したリクエストの種別に応じた種別のデータ転送要求を発行する。詳細には、ディレクトリ検査アクセス実行部４１は、データ転送要求の種別を示すオペレーションコードと、受信したリクエストのリクエストＩＤとを含むオーダーをデータ転送要求として生成する。また、ディレクトリ検査アクセス実行部４１は、データ転送要求を識別するオーダーＩＤと、アクセス対象となる物理アドレスとを含むオーダーを生成する。
【００７５】
また、ディレクトリ検査アクセス実行部４１は、リクエストを受信した場合には、アクセス対象となる物理アドレスに格納されたデータについての所有権を獲得した旨を示すリクエスト応答を生成する。そして、ディレクトリ検査アクセス実行部４１は、生成したリクエスト応答をコマンド発行／応答部４３に出力する。
【００７６】
また、ディレクトリ検査アクセス実行部４１は、コマンド受信部４０から、Ｒ−ＣＰＵが発行したデータ転送応答を受信する。ここで、Ｒ−ＣＰＵは、現キャッシュステートに応じた種別のオーダーをデータ転送応答として出力する。そこで、ディレクトリ検査アクセス実行部４１は、受信したオーダーの種別に応じて、Ｒ−ＣＰＵにおける現キャッシュステートを識別し、識別した現キャッシュステートに応じて、ディレクトリ情報の更新を行う。また、ディレクトリ検査アクセス実行部４１は、データ転送応答にデータが付加されている場合には、データ転送応答に付加されたデータを抽出し、抽出したデータのライトバック処理を実行する。
【００７７】
なお、ディレクトリ検査アクセス実行部４１は、メモリ１０ａに対するアクセスを行う場合には、アクセス対象となるメモリアドレスにアドレスロックをかけるようアドレスロック制御部４２に通知する。すると、アドレスロック制御部４２は、ディレクトリ検査アクセス実行部４１から通知されたメモリアドレスに対してアドレスロックをかける。
【００７８】
また、ディレクトリ検査アクセス実行部４１は、アクセスが終了したメモリアドレスについてアドレスロックを解除するようアドレスロック制御部４２に通知する。すると、アドレスロック制御部４２は、通知されたメモリアドレスについてアドレスロックを解除する。
【００７９】
そして、ディレクトリ検査アクセス実行部４１は、ライトバック処理を実行する場合には、アドレスロック制御部４２によって、ライトバック処理の対象となるデータを格納するメモリアドレスにアドレスロックがかけられているか否かを検査する。そして、ディレクトリ検査アクセス実行部４１は、ライトバック処理の対象となるデータを格納するメモリアドレスにアドレスロックがかけられている場合には、アドレスロックが解除されるまで、ライトバック処理を実行せずに待機する。
【００８０】
また、ディレクトリ検査アクセス実行部４１は、ライトバック処理の対象となるデータを格納するメモリアドレスがロックされていない場合には、ライトバック処理を実行する。なお、情報処理装置１の実施形態においては、ＣＰＵ２０ａが、他のＣＰＵからリプレース処理の実行を要求される場合が考えられる。そこで、ディレクトリ検査アクセス実行部４１は、他のＣＰＵからリプレース処理の実行を要求された場合には、メモリアドレスがロックされているか否かを検査し、メモリアドレスのロックが解除されるまで、リプレース処理の実行を待機しても良い。
【００８１】
コマンド発行／応答部４３は、ディレクトリ検査アクセス実行部４１から受付けたリクエスト、リクエスト応答、データ転送要求を通信制御部２１に出力する。また、コマンド発行／応答部４３は、データ応答部４４を介して、キャッシュ制御部２３から現キャッシュステート情報、新キャッシュステート情報、データとを受信した場合には、以下の処理を実行する。
【００８２】
すなわち、コマンド発行／応答部４３は、受信したデータと、新キャッシュステート情報とを含むリクエスト応答をデータ応答として生成する。そして、コマンド発行／応答部４３は、リクエスト応答を通信制御部２１に出力する。すると、通信制御部２１は、リクエスト応答を、リクエストの送信元であるＬ−ＣＰＵに対して送信する。
【００８３】
また、コマンド発行／応答部４３は、現キャッシュステート情報が「Ｍ」である場合には、受信したデータと現キャッシュステートを含むオーダー応答を生成し、生成したオーダー応答を通信制御部２１に出力する。また、コマンド発行／応答部４３は、現キャッシュステート情報が「Ｍ」ではない場合は、現キャッシュステートを含み、データを含まないオーダー応答を生成し、生成したオーダー応答を通信制御部２１に出力する。すると、通信制御部２１は、オーダー応答をＨ−ＣＰＵへ送信する。
【００８４】
データ応答部４４は、キャッシュ制御部２３から受信したデータ、現キャッシュステート情報、新キャッシュステート情報をコマンド発行／応答部４３に出力する。また、データ応答部４４は、コマンド受信部４０からリクエスト応答、またはデータ応答を受信した場合には、受信したリクエスト応答、またはデータ応答をキャッシュ制御部２３に出力する。
【００８５】
次に、図６を用いて、ＣＰＵ２０ａと同様の機能を発揮する複数のＣＰＵがＬ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵとして動作する際に実行するデータ転送処理の流れについて説明する。図６は、実施例１に係るＣＰＵが実行するリクエスト転送処理を説明するための図である。なお、図６では、Ｌ−ＣＰＵを「Ｌ」、Ｈ−ＣＰＵを「Ｈ」、Ｒ−ＣＰＵを「Ｒ」と記載した。
【００８６】
まず、Ｌ−ＣＰＵは、キャッシュミスが発生すると、図６中（Ｅ）に示すように、Ｈ−ＣＰＵに対して、リクエストを発行する。すると、Ｈ−ＣＰＵは、図６中（Ｆ）に示すように、Ｌ−ＣＰＵに対して、データの所有権獲得を示すリクエスト応答を送信する。また、Ｈ−ＣＰＵは、図６中（Ｇ）に示すように、Ｒ−ＣＰＵに対してデータ転送要求を発行する。
【００８７】
すると、Ｒ−ＣＰＵは、Ｌ−ＣＰＵがデータを保持した際の新たなキャッシュステートを判別し、図６中（Ｈ）に示すように、新キャッシュステート情報とデータとを含むデータ応答をＬ−ＣＰＵに対して送信する。また、Ｒ−ＣＰＵは、図６中（Ｉ）に示すように、現キャッシュステートを示すデータ転送応答をＨ−ＣＰＵに送信する。その後、Ｈ−ＣＰＵは、現キャッシュステートに基づいて、ディレクトリ情報を更新する。
【００８８】
このように、Ｈ−ＣＰＵは、リクエストを受信すると、データ転送要求をＲ−ＣＰＵに送信するとともに、データ転送応答を受信するまでに、データの所有権を獲得した旨を示すリクエスト応答をＬ−ＣＰＵに送信する。そして、Ｒ−ＣＰＵは、Ｌ−ＣＰＵに対して、データと新たなキャッシュステートを取得する。すなわち、Ｈ−ＣＰＵは、リクエスト応答の発行と、ディレクトリ情報の更新とを並行して実行するので、データ転送の性能を向上させることができる。
【００８９】
次に、図７を用いて、データ転送処理を実行する際に、各ＣＰＵ２０ａ〜２０ｄのキャッシュステート、およびディレクトリステートがどのように変化するかを説明する。図７は、データ転送処理を実行した際の状態遷移を説明するための図である。なお、図７には、Ｌ−ＣＰＵのコアによるの内容に、状態遷移前、および状態遷移後のディレクトリステート、Ｌ−ＣＰＵおよびＲ−ＣＰＵにおけるキャッシュステートを対応付けて示した。
【００９０】
また、Ｈ−ＣＰＵからＬ−ＣＰＵへデータが送信される２ＣＰＵ間の転送であるか、または、Ｈ−ＣＰＵがＲ−ＣＰＵにデータ転送要求を送信し、その後Ｒ−ＣＰＵがＬ−ＣＰＵにデータを送信する３ＣＰＵ間の転送であるかを示すデータ転送方式を示した。なお、図７中データ転送方式の欄に「※」で示す遷移は、３ＣＰＵ間の転送を行う際に発生するステートの変化である。
【００９１】
例えば、Ｌ−ＣＰＵのコアは、命令フェッチ、共有型フェッチ、排他型フェッチのいずれかを実行する。ここで、命令フェッチとは、演算処理の命令を示すデータの読み出す処理である。また、共有型フェッチとは、演算処理の対象となるデータを共有型で読み出す処理であり、いわゆるロード命令である。また、排他型フェッチとは、演算処理の対象となるデータを排他型で読み出す処理であり、いわゆるストア命令である。
【００９２】
例えば、命令フェッチが発行された場合には、ディレクトリステートは、状態遷移前の値によらず「ＳＨ」に遷移し、Ｌ−ＣＰＵのキャッシュステートは「Ｉ」から「Ｓ」に遷移する。また、命令フェッチが発行された場合は、Ｒ−ＣＰＵのキャッシュステートは、「Ｉ」または「Ｓ」から「Ｉ」に遷移し、「Ｅ」または「Ｍ」から「Ｓ」に遷移する。
【００９３】
また、共有型フェッチが発行された場合には、各ステートは、以下の様に遷移する。例えば、ディレクトリステートが「ＩＮＶ」、Ｌ−ＣＰＵ、およびＲ−ＣＰＵのキャッシュステートが「Ｉ」である場合は、ディレクトリステートが「ＥＸ」、Ｌ−ＣＰＵのキャッシュステートが「Ｅ」、Ｌ−ＣＰＵのキャッシュステートが「Ｉ」に遷移する。また、例えば、ディレクトリステートが「ＳＨ」、Ｌ−ＣＰＵのキャッシュステートが「Ｉ」、Ｒ−ＣＰＵのキャッシュステートが「Ｓ」である場合は、ディレクトリステートが「ＳＨ」、Ｌ−ＣＰＵ、およびＲ−ＣＰＵのキャッシュステートが「Ｓ」に遷移する。
【００９４】
また、例えば、ディレクトリステートが「ＥＸ」、Ｌ−ＣＰＵのキャッシュステートが「Ｉ」、Ｒ−ＣＰＵのキャッシュステートが「Ｅ」である場合は、ディレクトリステートが「ＳＨ」、Ｌ−ＣＰＵ、およびＲ−ＣＰＵのキャッシュステートが「Ｓ」に遷移する。また、例えば、ディレクトリステートが「ＥＸ」、Ｌ−ＣＰＵのキャッシュステートが「Ｉ」、Ｒ−ＣＰＵのキャッシュステートが「Ｍ」である場合は、ディレクトリステートが「ＥＸ」、Ｌ−ＣＰＵのキャッシュステートが「Ｅ」に遷移する。また、Ｒ−ＣＰＵのキャッシュステートは、「Ｉ」に遷移する。
【００９５】
また、排他型フェッチが発行された場合には、ディレクトリステートは、状態遷移前の状態によらず「ＥＸ」に遷移し、Ｌ−ＣＰＵのキャッシュステートは「Ｅ」、Ｒ−ＣＰＵのキャッシュステートは「Ｉ」に遷移する。
【００９６】
各ＣＰＵ２０ａ〜２０ｄは、図７に示すステートの遷移を行うことで、メモリ１０ａ〜１０ｄに記憶されたデータと、各ＣＰＵ２０ａ〜２０ｄ、および他のＳＢ３ｂ〜３ｈが有するＣＰＵが保持したデータとのコヒーレンスを保持する。特に、Ｒ−ＣＰＵとして動作する場合は、各ＣＰＵ２０ａ〜３０ｄは、データとともに、図７に示す状態遷移後におけるＬ−ＣＰＵのキャッシュステートをＬ−ＣＰＵに通知する。このため、Ｌ−ＣＰＵは、データの所有権獲得、データ、および新キャッシュステート情報を早期に取得することができるので、データ転送の性能を向上させることができる。
【００９７】
次に、図８〜１１を用いて、ＣＰＵ２０ａがＬ−ＣＰＵ、Ｈ−ＣＰＵ、およびＲ−ＣＰＵとして動作する際に、各種メッセージを発行する条件について説明する。まず、図８を用いて、Ｌ−ＣＰＵがリクエストを発行する条件について説明する。
【００９８】
図８は、リクエストを発行する条件を説明するための図である。なお、図８には、Ｌ−ＣＰＵが発行したアクセスの内容と、Ｌ−ＣＰＵからＨ−ＣＰＵに発行されるリクエストとをリクエスト発行条件と対応付けて示した。例えば、Ｌ−ＣＰＵは、命令フェッチを実行する際に、命令フェッチの対象となるメモリアドレスが他のＣＰＵのメモリアドレスであり、かつ、Ｌ−ＣＰＵにおけるキャッシュステートが「Ｉ」である場合は、リクエスト「ＭＩ−ＩＦ」を発行する。
【００９９】
また、Ｌ−ＣＰＵは、共有型フェッチを実行する際に、共有型フェッチの対象となるメモリアドレスが他のＣＰＵのメモリアドレスであり、かつ、Ｌ−ＣＰＵにおけるキャッシュステートが「Ｉ」である場合には、リクエスト「ＭＩ−ＳＨ」を発行する。また、Ｌ−ＣＰＵは、排他型フェッチを実行する際に、排他型フェッチの対象となるメモリアドレスが他のＣＰＵのメモリアドレスであり、かつ、Ｌ−ＣＰＵにおけるキャッシュステートが「Ｉ」、または「Ｓ」である場合は、リクエスト「ＭＩ−ＥＸ」を発行する。
【０１００】
次に、図９を用いて、Ｈ−ＣＰＵがデータ転送要求を発行する条件について説明する。図９は、データ転送要求を発行する条件を説明するための図である。なお、図９には、Ｌ−ＣＰＵにおいて実行されたアクセス、Ｌ−ＣＰＵから受信したリクエストの種別、データ転送要求を発行する条件、発行するデータ転送要求の種別を対応付けて示した。
【０１０１】
例えば、Ｈ−ＣＰＵは、リクエスト「ＭＩ−ＩＦ」を受信した際に、Ｈ−ＣＰＵにおけるディレクトリステートが「ＥＸ」であり、Ｒ−ＣＰＵにおけるキャッシュステートが「Ｅ」、または「Ｍ」である場合には、データ転送要求「ＭＢ−ＩＦ」を発行する。また、Ｈ−ＣＰＵは、リクエスト「ＭＩ−ＳＨ」を受信した際に、Ｈ−ＣＰＵにおけるディレクトリステートが「ＥＸ」であり、Ｒ−ＣＰＵにおけるキャッシュステートが「Ｅ」、または「Ｍ」である場合には、データ転送要求「ＭＢ−ＳＨ」を発行する。
【０１０２】
また、Ｈ−ＣＰＵは、リクエスト「ＭＩ−ＥＸ」を受信した際に、Ｈ−ＣＰＵにおけるディレクトリステートが「ＥＸ」であり、Ｒ−ＣＰＵにおけるキャッシュステートが「Ｅ」、または「Ｍ」である場合には、データ転送要求「ＭＢ−ＥＸ」を発行する。すなわち、Ｈ−ＣＰＵは、リクエストの対象となるデータがＬ−ＣＰＵ、およびＨ−ＣＰＵ以外のＣＰＵによって保持されている場合には、リクエストの種別に対応する種別のデータ転送要求を発行する。
【０１０３】
次に、図１０を用いて、Ｒ−ＣＰＵがデータ転送応答を発行する条件について説明する。図１０は、データ転送応答を発行する条件を説明するための図である。なお、図１０には、Ｌ−ＣＰＵにおけるアクセス、Ｈ−ＣＰＵから受信したデータ転送要求の種別、発行するデータ転送応答の種別、Ｒ−ＣＰＵにおける現キャッシュステートを対応付けて示す。また、図１０には、各データ転送応答を受信した際にＨ−ＣＰＵによって更新された新たなディレクトリステートと、各データ転送要求にデータが付加されているか否かを示す。
【０１０４】
図１０に示すように、Ｒ−ＣＰＵは、データ送信要求の種別に応じたデータ転送応答をＨ−ＣＰＵに対して発行する。具体的には、Ｒ−ＣＰＵは、「ＭＢ−ＩＦ」を受信した場合には「ＭＢ−ＩＦ−ＣＰＬＴ」を発行し、「ＭＢ−ＳＨ」を受信した場合には、「ＭＢ−ＳＨ−ＣＰＬＴ」を発行する。また、Ｒ−ＣＰＵは、「ＭＢ−ＥＸ」を受信した場合には、「ＭＢ−ＥＸ−ＣＰＬＴ」を発行する。
【０１０５】
また、Ｒ−ＣＰＵは、各データ転送応答を発行する際に、現キャッシュステートが「Ｍ」である場合には、Ｈ−ＣＰＵが管理するメモリへのライトバックを要すると判別する。このため、Ｒ−ＣＰＵは、現キャッシュステートが「Ｍ」である場合は、各データ転送応答に転送対象のデータを格納する。
【０１０６】
なお、図１０に示すように、Ｈ−ＣＰＵは、「ＭＢ−ＩＦ−ＣＰＬＴ」を受信した場合、または「ＭＢ−ＳＨ−ＣＰＬＴ」を受信し、かつ、現キャッシュステートが「Ｅ」である場合には、ディレクトリステートを「ＳＨ」に更新する。また、Ｈ−ＣＰＵは、「ＭＢ−ＳＨ−ＣＰＬＴ」を受信し、かつ、現キャッシュステートが「Ｍ」である場合、または「ＭＢ−ＥＸ−ＣＰＬＴ」を受信した場合には、ディレクトリステートを「ＥＸ」に更新する。また、Ｈ−ＣＰＵは、各データ転送応答にデータが付加されている場合には、付加されているデータのライトバック処理を実行する。
【０１０７】
次に、図１１を用いて、Ｒ―ＣＰＵがＬ−ＣＰＵに送信するデータ応答に含める新キャッシュステート情報を判別する処理について説明する。図１１は、データ応答に含める新キャッシュステート情報を説明するための図である。たとえば、Ｒ−ＣＰＵは、データ応答「ＭＩ−ＩＦ−ＣＰＬＴ」を発行する場合には、新キャッシュステート情報「Ｓ」を格納する。
【０１０８】
また、Ｒ−ＣＰＵは、データ応答「ＭＩ−ＳＨ−ＣＰＬＴ」を発行する際に、現キャッシュステート情報が「Ｅ」である場合には、データ応答「ＭＩ−ＳＨ−ＣＰＬＴ」に新キャッシュステート「Ｓ」を格納する。また、Ｒ−ＣＰＵは、データ応答「ＭＩ−ＳＨ−ＣＰＬＴ」を発行する際に、現キャッシュステート情報が「Ｍ」である場合には、データ応答「ＭＩ−ＳＨ−ＣＰＬＴ」に新キャッシュステート「Ｅ」を格納する。
【０１０９】
また、Ｒ−ＣＰＵは、データ応答「ＭＩ−ＥＸ−ＣＰＬＴ」を発行する場合は、データ応答「ＭＩ−ＥＸ−ＣＰＬＴ」に新キャッシュステート「Ｅ」を格納する。すなわち、Ｒ−ＣＰＵは、転送対象のデータが演算処理を示す情報である場合、または、リクエストが共有型フェッチであり、現キャッシュステートが「Ｅ」である場合は、新たなキャッシュステートが「Ｓ」であると判別する。
【０１１０】
また、Ｒ−ＣＰＵは、リクエストが共有型フェッチであり、現キャッシュステートが「Ｍ」である場合、または、リクエストが排他型フェッチである場合は、新たなキャッシュステートが「Ｅ」であると判別する。そして、Ｒ−ＣＰＵは、判別したキャッシュステートを示す新キャッシュステート情報をデータ応答に格納し、データ応答をＬ−ＣＰＵに送信する。
【０１１１】
次に、図１２Ａ、および図１２Ｂを用いて、Ｒ−ＣＰＵが発行するリクエストのフォーマットの一例について説明する。図１２Ａは、リクエストのフォーマットを説明するための第１の図である。また、図１２Ｂは、リクエストのフォーマットを説明するための第２の図である。なお、図１２Ａには、リクエストの内容を示す指定項目と、各指定項目が示す指定内容とを対応付けて示した。また、図１２Ｂには、８本のレーン＃０〜＃７を介してリクエストを他のＣＰＵへ送信する際に、各レーンを介して送信される情報を示した。
【０１１２】
図１２Ａに示すように、リクエストには、リクエストのオペレーションコードを指定する７ビットのＯＰＣＤ［６：０］、リクエストＩＤを指定する１６ビットのＲＥＱＩＤ［１５：０］が含まれる。また、リクエストには、境界物理アドレス、すなわちアクセス先となる１２８バイトデータが格納された領域の先頭の物理アドレスを指定する４５ビットのＰＡ（物理アドレス：Physical  Address）［４７：３］が含まれる。
【０１１３】
この結果、図１２Ｂに示すように、リクエストは、６４ビット長のメッセージとなる。そして、Ｌ−ＣＰＵは、レーン＃０を介してＯＰＣＤ［６：０］を送信し、レーン＃１およびレーン＃２を介してＲＥＱＩＤ［１５：０］を送信し、レーン＃３〜＃７を介して、ＰＡ［４７：３］を送信する。なお、図１２Ｂにおいて、物理アドレスの７ビット目は、「Ｐ７」として、Ｌａｎｅ＃０が送信する。
【０１１４】
次に、図１３Ａ、および図１３Ｂを用いて、Ｈ−ＣＰＵが発行するリクエスト応答のフォーマットの一例について説明する。図１３Ａは、データ付のリクエスト応答のフォーマットを説明するための第１の図である。また、図１３Ｂは、データ付のリクエスト応答のフォーマットを説明するための第２の図である。
【０１１５】
なお、図１３Ａには、図１２Ａと同様に、リクエスト応答の内容を示す指定項目と、各指定項目が示す指定内容とを対応付けて示した。また、図１２Ｂには、８本のレーン＃０〜＃７を介してリクエスト応答を他のＣＰＵへ送信する際に、各レーンを介して送信される情報を示した。
【０１１６】
なお、図１３Ａ、および図１３Ｂに示すリクエスト応答は、転送対象となるデータを含むリクエスト応答であり、Ｈ−ＣＰＵからデータをＬ−ＣＰＵに送信する場合に発行されるリクエスト応答である。また、Ｒ−ＣＰＵは、データ応答として、図１３Ａ、および図１３Ｂに示すリクエスト応答と同様のフォーマットを有するデータ応答を送信する。すなわち、Ｒ−ＣＰＵは、リクエスト応答に送信元がＲ−ＣＰＵであることを示す情報を格納することで、リクエスト応答をデータ応答として送信する。
【０１１７】
図１３Ａに示すように、リクエスト応答には、リクエスト応答のオペレーションコードを指定する７ビットのＯＰＣＤ［６：０］、リクエストで指定されたＲＥＱＩＤ［１５：０］、リクエストで指定されたＰＡ［１０：７］が含まれる。またリクエスト応答には、ＳＴＡＴＵＳとして、データが含まれるか否かを示す１ビットのＤＴ、リクエスト応答の送信元を示す１ビットのＭＢ、新たなキャッシュステートを示す２ビットのＭＩＳＴ［１：０］が含まれ、１２８バイトのデータが付加される。
【０１１８】
例えば、ＤＴが「１」である場合には、リクエスト応答に転送対象のデータが含まれることを示し、ＤＴが「０」である場合には、リクエスト応答に転送対象のデータが含まれていないことを示す。例えば、Ｈ−ＣＰＵは、Ｒ−ＣＰＵに対してデータ転送要求を発行し、Ｌ−ＣＰＵに対してデータの所有権を獲得した旨を通知する場合には、ＤＴを「０」としたリクエスト応答を発行する。
【０１１９】
また、ＭＢが「１」である場合には、リクエスト応答の送信元がＲ−ＣＰＵであることを示し、ＭＢが「０」である場合には、リクエスト応答の送信元がＨ−ＣＰＵであることを示す。また、ＭＩＳＴが「１０」である場合には、新たなキャッシュステートが「ＳＨ」であり、ＭＩＳＴが「０１」である場合には、新たなキャッシュステートが「ＥＸ」であることを示す。例えば、Ｒ−ＣＰＵは、Ｌ−ＣＰＵが転送対象のデータを保持した際の新たなキャッシュステートが「ＳＨ」である場合は、ＤＴを「１」、ＭＢを「１」、ＭＩＳＴを「１０」とし、データを付加したリクエスト応答をデータ応答としてＬ−ＣＰＵに発行する。
【０１２０】
この結果、図１３Ｂに示すように、リクエスト応答は、１３６バイトのメッセージとなる。そして、Ｈ−ＣＰＵ、またはＲ−ＣＰＵは、各レーン＃０〜＃７を介し、最初の１サイクル目で各指定項目を送信し、２サイクル目から１７サイクル目までを用いて、１２８バイトのデータを送信する。
【０１２１】
なお、Ｈ−ＣＰＵは、転送対象のデータを他のＣＰＵが保持している場合は、Ｒ−ＣＰＵからデータ転送応答を受信する前に、データ無しのリクエスト応答をＬ−ＣＰＵに送信することで、データの所有権を獲得した旨を通知する。以下、図１４Ａ、および図１４Ｂを用いて、Ｈ−ＣＰＵが発行するデータ無しのリクエスト応答のフォーマットの一例について説明する。図１４Ａは、データ無しのリクエスト応答のフォーマットを説明するための第１の図である。また、図１４Ｂは、データ無しのリクエスト応答のフォーマットを説明するための第２の図である。
【０１２２】
図１４Ａに示すように、Ｈ−ＣＰＵは、図１３Ａに示すデータ有りのリクエスト応答と同様のフォーマットを有するデータ無しのリクエスト応答を発行する。詳細には、Ｈ−ＣＰＵは、ＤＴを「０」、ＭＢを「０」、ＭＩＳＴを指定無しを示す「００」とし、データが付加されていないリクエスト応答を発行する。そして、Ｈ−ＣＰＵは、図１４Ｂに示すように、各レーン＃０〜＃７を介し、データ無しのリクエスト応答を１サイクルでＬ−ＣＰＵに送信する。
【０１２３】
次に、図１５Ａ、および図１５Ｂを用いて、Ｈ−ＣＰＵが発行するオーダー、すなわちデータ転送要求のフォーマットの一例について説明する。図１５Ａは、オーダーのフォーマットを説明するための第１の図である。また、図１５Ｂは、オーダーのフォーマットを説明するための第２の図である。
【０１２４】
なお、図１５Ａには、図１２Ａと同様に、オーダーの内容を示す指定項目と、各指定項目が示す指定内容とを対応付けて示した。また、図１２Ｂには、８本のレーン＃０〜＃７を介してオーダーを他のＣＰＵへ送信する際に、各レーンを介して送信される情報を示した。
【０１２５】
図１５Ａに示すように、オーダーには、オーダーの種別を示すオペレーションコードを指定する７ビットのＯＰＣＤ［６：０］、リクエストで指定されたＲＥＱＩＤ［１５：０］が含まれる。また、リクエスト応答には、オーダーを識別する１６ビットのオーダーＩＤを示すＯＤＲＩＤ［１５：０］、アクセス先のＰＡ［４７：７］が含まれる。なお、オーダーには、データは含まれない。
【０１２６】
例えば、Ｈ−ＣＰＵは、データ転送要求を示すＯＰＣＤ［６：０］、すなわち、Ｌ−ＣＰＵに対してデータの転送を要求するＯＰＣＤを有するオーダーを生成する。そして、Ｈ−ＣＰＵは、図１５Ｂに示すように、各レーン＃０〜＃７を介し、最初の１サイクル目でＯＰＣＤ［６：０］、ＲＥＱＩＤ［１５：０］、ＰＡ［４７：３］をＲ−ＣＰＵに送信する。その後、Ｈ−ＣＰＵは、各レーン＃０〜＃７を介し、２サイクル目でＯＤＲＩＤ［１５：０］をＲ−ＣＰＵに送信する。
【０１２７】
次に、図１６Ａ、および図１６Ｂを用いて、Ｒ−ＣＰＵが発行するオーダー応答、すなわちデータ転送応答のフォーマットの一例について説明する。図１６Ａは、データ付のオーダー応答のフォーマットを説明するための第１の図である。また、図１６Ｂは、データ付のオーダー応答のフォーマットを説明するための第２の図である。
【０１２８】
なお、図１６Ａには、図１２Ａと同様に、オーダー応答の内容を示す指定項目と、各指定項目が示す指定内容とを対応付けて示した。また、図１６Ｂには、８本のレーン＃０〜＃７を介してオーダー応答を他のＣＰＵへ送信する際に、各レーンを介して送信される情報を示した。
【０１２９】
図１６Ａに示すように、オーダー応答には、オーダー応答のオペレーションコードを指定する７ビットのＯＰＣＤ［６：０］、オーダーで指定されたＲＥＱＩＤ［７：０］が含まれる。また、リクエスト応答には、オーダー応答を識別するオーダー応答ＩＤを示す１６ビットのＣＰＬＴＩＤ［１５：０］、オーダーで指定されたＯＤＲＩＤ［１５：０］、オーダーで指定されたＰＡの８ビット目から１０ビット目までの［１０：７］が含まれる。
【０１３０】
また、オーダー応答には、ＳＴＡＴＵＳとして、データが含まれるか否かを示す１ビットのＤＴ、リクエスト応答の送信元を示す１ビットのＭＢ、現キャッシュステートを示す２ビットのＭＩＳＴ［１：０］が含まれ、１２８バイトのデータが付加される。
【０１３１】
例えば、Ｒ−ＣＰＵは、現キャッシュステートが「Ｍ」であり、ライトバックを行う場合には、ＤＴを「１」、ＭＩＳＴを「１０」、または「０１」とし、ライトバックの対象となるデータ、すなわち転送対象のデータを付加したオーダー応答を生成する。そして、Ｒ−ＣＰＵは、生成したオーダー応答をＨ−ＣＰＵに送信する。具体的には、Ｒ−ＣＰＵは、図１６Ｂに示すように、各レーン＃０〜＃７を介し、最初の１サイクル目で各指定項目を送信し、２サイクル目から１７サイクル目までを用いて、１２８バイトの転送対象のデータを送信する。
【０１３２】
なお、Ｒ−ＣＰＵは、転送対象のデータを更新しておらず、ライトバック処理を行わない場合には、データ無しのオーダー応答をＨ−ＣＰＵに送信することで、現キャッシュステートを通知する。以下、図１７Ａ、および図１７Ｂを用いて、Ｒ−ＣＰＵが発行するデータ無しのオーダー応答のフォーマットの一例について説明する。図１７Ａは、データ無しのオーダー応答のフォーマットを説明するための第１の図である。また、図１７Ｂは、データ無しのオーダー応答のフォーマットを説明するための第２の図である。
【０１３３】
図１７Ａに示すように、Ｒ−ＣＰＵは、図１６Ａに示すデータ有りのリクエスト応答と同様のフォーマットを有するデータ無しのリクエスト応答を発行する。詳細には、Ｒ−ＣＰＵは、ＤＴを「０」とし、データが付加されていないリクエスト応答を発行する。そして、Ｈ−ＣＰＵは、図１７Ｂに示すように、各レーン＃０〜＃７を介し、データ無しのオーダー応答を１サイクルでＨ−ＣＰＵに送信する。
【０１３４】
ここで、情報処理装置１が有する各ＣＰＵ２０ａ〜２０ｄは、上述したＬ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵとして動作する機能を有する。例えば、各ＣＰＵ２０ａ〜２０ｄは、Ｌ−ＣＰＵからリクエスト要求を受信すると、リクエスト応答をＬ−ＣＰＵに送信する。そして、各ＣＰＵ２０ａ〜２０ｂは、Ｒ−ＣＰＵに対して、データとデータをＬ−ＣＰＵが保持した際の新たなキャッシュステートとを通知するよう指示するデータ転送要求を発行する。この結果、Ｌ−ＣＰＵが迅速に処理を開始することができるので、各ＣＰＵ２０ａ〜２０ｄは、データ転送の性能を向上させることができる。
【０１３５】
以下、図を用いて、ＣＰＵ２０ａ〜２０ｄがデータ転送の性能を向上させることができる点について説明する。まず、図１８を用いて、従来のＣＰＵがリクエストを転送する処理の流れについて説明する。
【０１３６】
図１８は、従来のＣＰＵがリクエストを転送する処理の流れを説明するための図である。なお、図１８には、従来のＬ−ＣＰＵにおけるキャッシュステート（ＣＳ：Cash  State）と従来のＬ−ＣＰＵの動作、従来のＨ−ＣＰＵにおけるディレクトリステートと従来のＨ−ＣＰＵの動作を示した。また、図１８には、従来のＲ−ＣＰＵにおけるキャッシュステートと従来のＲ−ＣＰＵの動作を示した。
【０１３７】
例えば、従来のＬ−ＣＰＵは、アクセス対象のメモリアドレスのキャッシュステートが「Ｉ」であり、キャッシュミスが発生した場合には、共有型フェッチのアクセスを発行する（ステップＳ１）。すると、従来のＨ−ＣＰＵは、ディレクトリ検査でＲ−ＣＰＵがデータを保持していると判定し、Ｒ−ＣＰＵにデータ転送要求を発行する（ステップＳ２）。次に、従来のＲ−ＣＰＵは、転送対象となるデータを検索し、データ応答をＬ−ＣＰＵに発行する（ステップＳ３）。
【０１３８】
この結果、従来のｌ−ＣＰＵは、応答データを保持する。次に、従来のＲ−ＣＰＵは、現キャッシュステートを示すデータ転送応答をＨ−ＣＰＵに発行し（ステップＳ４）、キャッシュステートを更新する。すると、従来のＨ−ＣＰＵは、ディレクトリステートを更新し、リクエスト応答をＬ−ＣＰＵに発行する（ステップＳ５）。この結果、Ｌ−ＣＰＵは、データの所有権を獲得し、データをキャッシュステート「Ｓ」で保持する。
【０１３９】
一方、図１９は、実施例１に係るＣＰＵがリクエストを転送する処理の流れを説明するための図である。なお、図１９では、ＣＰＵ２０ａと同様の機能を発揮するＣＰＵが、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、Ｒ−ＣＰＵとして動作する例について示した。例えば、図１９に示すように、Ｌ−ＣＰＵは、キャッシュミスが発生すると、共有型フェッチのアクセスを発行する（ステップＳ１１）。
【０１４０】
すると、Ｈ−ＣＰＵは、ディレクトリ検査でＲ−ＣＰＵがデータを保持していると判断し、Ｒ−ＣＰＵにデータ転送要求を発行する（ステップＳ１２）。ここで、Ｈ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信する前に、リクエスト応答をＬ−ＣＰＵに発行する（ステップＳ１３）。
【０１４１】
すると、Ｌ−ＣＰＵは、データ所有権を獲得する。また、Ｒ−ＣＰＵは、転送対象のデータを検索し、転送対象のデータと、新キャッシュステート情報とを含むデータ応答をＬ−ＣＰＵに発行する（ステップＳ１４）。この結果、Ｌ−ＣＰＵは、データをキャッシュステート「Ｓ」で保持し、迅速に処理を開始することができる。
【０１４２】
また、Ｒ−ＣＰＵは、現キャッシュステート情報を含むデータ転送応答をＨ−ＣＰＵに発行する（ステップＳ１５）。この結果、Ｈ−ＣＰＵは、ディレクトリステートを「ＳＨ」に更新するので、コヒーレント制御を適切に行う事ができる。
【０１４３】
すなわち、従来のＨ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信した後でデータの所有権をＬ−ＣＰＵに通知したので、Ｌ−ＣＰＵがＲ−ＣＰＵからデータを受信しているにも係らず、処理を開始させることができなかった。しかしながら、実施例１に係るＨ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信する前に、リクエスト応答をＬ−ＣＰＵに送信する。この結果、Ｌ−ＣＰＵは、Ｒ−ＣＰＵからデータを受信すると、迅速に受信したデータを保持し、処理を開始する。
【０１４４】
ここで、リクエストの転送処理においては、各ＣＰＵにおける処理よりも、各種メッセージやデータ転送を行う処理の方が時間がかかる。このため、Ｈ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信する前に、リクエスト応答をＬ−ＣＰＵに送信することで、Ｌ−ＣＰＵに処理を迅速に開始させる結果、データ転送の性能を向上させることができる。
【０１４５】
次に、図２０、および図２１を用いて、複数のＬ−ＣＰＵからリクエストが発行された際にメモリアクセスに要する時間を説明する。まず、図２０を用いて、従来のＬ−ＣＰＵがメモリアクセスに要する時間を説明する。
【０１４６】
図２０は、従来のメモリアクセス処理に要する時間を説明するための図である。以下、従来のＬ−ＣＰＵ＃１、Ｌ−ＣＰＵ＃２、Ｈ−ＣＰＵ、Ｒ−ＣＰＵが実行する処理について説明する。例えば、Ｌ−ＣＰＵ＃１は、メモリアクセス処理を開始し、Ｈ−ＣＰＵに対してリクエストを発行する（ステップＳ２１）。また、Ｌ−ＣＰＵ＃２は、メモリアクセス処理を開始し、Ｌ−ＣＰＵ＃１が発行したリクエストと同じメモリアドレスに対するリクエストを発行する（ステップＳ２２）。
【０１４７】
すると、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃１から受信したリクエストについて、ディレクトリの検索とデータ転送処理を実行し（ステップＳ２３）、Ｒ−ＣＰＵに対してデータ転送要求を発行する（ステップＳ２４）。すると、Ｒ−ＣＰＵは、データ応答をＬ−ＣＰＵ＃１に送信し（ステップＳ２５）、Ｈ−ＣＰＵにデータ転送応答を発行する（ステップＳ２６）。そして、Ｈ−ＣＰＵは、データ転送応答を受信すると、リクエスト応答をＬ−ＣＰＵ＃１に送信し、（ステップＳ２７）、Ｌ−ＣＰＵ＃１が発行したリクエストに対する処理を終了する。
【０１４８】
一方、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃２が発行したリクエストの対象となるメモリアドレスが、Ｌ−ＣＰＵ＃１が発行したリクエストの対象となるメモリアドレスと同一であるため、アドレスロックが解除されるまで、処理の開始を待機する（ステップＳ２８）。そして、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃１が発行したリクエストに対する処理が終了すると、Ｌ−ＣＰＵ＃２が発行したリクエストについての処理を開始し、ディレクトリの検索とデータ転送処理を実行する（ステップＳ２９）。
【０１４９】
そして、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃１に対してデータ転送要求を発行する（ステップＳ３０）。すると、Ｌ−ＣＰＵ＃１は、データ応答をＬ−ＣＰＵ＃２に送信し（ステップＳ３１）、Ｈ−ＣＰＵにデータ転送応答を発行する（ステップＳ３２）。その後、Ｈ−ＣＰＵは、リクエスト応答をＬ−ＣＰＵ＃２に発行する（ステップＳ３３）。
【０１５０】
一方、図２１は、実施例１に係るＣＰＵのメモリアクセス処理に要する時間を説明するための図である。以下、ＣＰＵ２０ａと同様の機能を発揮するＬ−ＣＰＵ＃１、Ｌ−ＣＰＵ＃２、Ｈ−ＣＰＵ、Ｒ−ＣＰＵが実行する処理について説明する。例えば、Ｌ−ＣＰＵ＃１は、メモリアクセス処理を開始し、Ｈ−ＣＰＵに対してリクエストを発行する（ステップＳ４１）。また、Ｌ−ＣＰＵ＃２は、メモリアクセス処理を開始し、Ｌ−ＣＰＵ＃１が発行したリクエストと同じメモリアドレスに対するリクエストを発行する（ステップＳ４２）。
【０１５１】
すると、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃１から受信したリクエストについて、ディレクトリの検索とデータ転送処理を実行し（ステップＳ４３）、データ転送応答を受信する前に、リクエスト応答をＬ−ＣＰＵ＃１に発行する（ステップＳ４４）。また、Ｈ−ＣＰＵは、Ｒ−ＣＰＵに対してデータ転送要求を発行する（ステップＳ４５）。すると、Ｒ−ＣＰＵは、データ応答をＬ−ＣＰＵ＃１に送信し（ステップＳ４６）、Ｈ−ＣＰＵにデータ転送応答を発行する（ステップＳ４７）。この時点でＬ−ＣＰＵ＃１のメモリアクセス処理が終了する。また、Ｈ−ＣＰＵは、データ転送応答を受信すると、ディレクトリの更新を行い、Ｌ−ＣＰＵ＃１が発行したリクエストに対する処理を終了する。
【０１５２】
一方、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃２が発行したリクエストの対象となるメモリアドレスが、Ｌ−ＣＰＵ＃１が発行したリクエストの対象となるメモリアドレスと同一であるため、アドレスロックが解除されるまで、処理の開始を待機する（ステップＳ４８）。そして、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃１が発行したリクエストに対する処理が終了すると、Ｌ−ＣＰＵ＃２が発行したリクエストについての処理を開始し、ディレクトリの検索とデータ転送処理を実行する（ステップＳ４９）。
【０１５３】
そして、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃１に対してデータ転送要求を発行する（ステップＳ５０）。また、Ｈ−ＣＰＵは、Ｌ−ＣＰＵ＃２に対して、リクエスト応答を発行する（ステップＳ５１）。すると、Ｌ−ＣＰＵ＃１は、Ｈ−ＣＰＵにデータ転送応答を発行し（ステップＳ５２）、データ応答をＬ−ＣＰＵ＃２に送信する（ステップＳ５３）。
【０１５４】
このように、Ｈ−ＣＰＵは、Ｒ−ＣＰＵからデータ転送応答を受信してからリクエスト応答を送信するのではなく、Ｒ−ＣＰＵにデータ転送要求を送信し、Ｒ−ＣＰＵがデータ応答を送信し、データ転送応答をＨ−ＣＰＵに送信する前に、リクエスト応答を送信する。このため、Ｌ−ＣＰＵは、Ｒ−ＣＰＵからデータを受け取った時点でメモリアクセス処理を終了することができる。
【０１５５】
次に、図２２〜図２８を用いて、ＣＰＵ２０ａが実行する処理の流れについて説明する。まず、図２２を用いて、Ｌ−ＣＰＵとして動作するＣＰＵ２０ａが、リクエストを発行する処理の流れを説明する。図２２は、Ｌ−ＣＰＵによるリクエストの発行処理の流れを説明するための図である。
【０１５６】
まず、コア２２ａは、コマンドを発行する（ステップＳ１０１）。また、コマンド受信部３０は、受信したコマンドをアクセス実行部３２に出力する（ステップＳ１０２）。すると、アクセス実行部３２は、キャッシュタグ部３１およびキャッシュデータ部３３を用いて、コマンドの対象となるデータを保持しているか否かを判別する（ステップＳ１０３、ステップＳ１０４）。
【０１５７】
そして、アクセス実行部３２は、コマンドの対象となるデータがキャッシュデータ部３３に保持されていない場合は、リクエストの発行を要求するコマンドをコマンド受信部４０に発行する（ステップＳ１０５）。すると、コマンド受信部４０は、コマンドをディレクトリ検査アクセス実行部４１に出力する（ステップＳ１０６）。
【０１５８】
そして、ディレクトリ検査アクセス実行部４１は、Ｈ−ＣＰＵ宛のリクエストを生成し、生成したリクエストをコマンド発行／応答部４３に出力する（ステップＳ１０７）。その後、コマンド発行／応答部４３は、通信制御部２１を介して、リクエストをＨ−ＣＰＵへ送信し（ステップＳ１０８）、処理を終了する。
【０１５９】
次に、図２３を用いて、ＣＰＵ２０ａがＨ−ＣＰＵとして動作する際に、リクエストを受信し、データ転送要求とリクエスト応答とを発行する処理の流れについて説明する。図２３は、Ｈ−ＣＰＵによるデータ転送要求とリクエスト応答とを発行する処理の流れを説明するための図である。まず、コマンド受信部４０は、通信制御部２１を介して、リクエストを受信する（ステップＳ２０１）。
【０１６０】
次に、コマンド受信部４０は、リクエストをディレクトリ検査アクセス実行部４１に出力する（ステップＳ２０２）。すると、ディレクトリ検査アクセス実行部４１は、ディレクトリを検査してＲ−ＣＰＵを識別し、Ｒ−ＣＰＵに対するデータ転送要求と、Ｌ−ＣＰＵに対するリクエスト応答とをコマンド発行／応答部４３に発行する（ステップＳ２０３）。そして、コマンド発行／応答部４３は、通信制御部２１を介して、データ転送要求をＲ−ＣＰＵへ送信し、リクエスト応答をＬ−ＣＰＵに送信して（ステップＳ２０４）、処理を終了する。
【０１６１】
次に、図２４を用いて、Ｒ−ＣＰＵとして動作するＣＰＵ２０ａが、データ転送応答とデータ応答とを発行する処理の流れについて説明する。図２４は、Ｒ−ＣＰＵがデータ転送応答とデータ応答とを発行する処理の流れを説明するための図である。まず、コマンド受信部４０は、通信制御部２１を介して、Ｈ−ＣＰＵが発行したデータ転送要求を受信する（ステップＳ３０１）。すると、コマンド受信部４０は、データ転送要求を
キャッシュ制御部２３のアクセス実行部３２に出力する（ステップＳ３０２）。
【０１６２】
次に、アクセス実行部３２は、データ転送要求から転送対象のデータが格納されたメモリアドレスを識別し、識別したメモリアドレスを用いて、転送対象のデータの現キャッシュステート情報をキャッシュタグ部３１から取得する（ステップＳ３０３）。そして、アクセス実行部３２は、現キャッシュステート情報と、データ転送要求の種別等に基づいて、新キャッシュステート情報を判別し、現キャッシュステート情報と新キャッシュステート情報とをデータ応答部４４に出力する（ステップＳ３０４）。
【０１６３】
また、アクセス実行部３２は、識別したメモリアドレスをキャッシュデータ部３３に出力する（ステップＳ３０５）。この結果、キャッシュデータ部３３は、転送対象のデータをデータ応答部４４に出力する（ステップＳ３０６）。次に、データ応答部４４は、転送対象のデータ、現キャッシュステート情報、新キャッシュステート情報をコマンド発行／応答部４３に出力する（ステップＳ３０７）。
【０１６４】
すると、コマンド発行部／応答部４３は、転送対象のデータと新キャッシュステート情報とを含むデータ応答を生成し、現キャッシュステート情報に応じたデータ転送応答を生成する。そして、コマンド発行部／応答部４３は、通信制御部２１を介して、データ応答をＬ−ＣＰＵに送信し、データ転送応答をＨ−ＣＰＵへ送信する（ステップＳ３０８）。
【０１６５】
次に、図２５を用いて、Ｈ−ＣＰＵとして動作するＣＰＵ２０ａが、データ転送応答を受信した際に実行する処理の流れについて説明する。図２５は、Ｈ−ＣＰＵがデータ転送応答を受信した際に実行する処理の流れを説明するための図である。まず、コマンド受信部４０は、通信制御部２１を介して、データ転送応答を受信する（ステップＳ４０１）。
【０１６６】
すると、コマンド受信部４０は、データ転送応答をディレクトリ検査アクセス実行部４１に出力する（ステップＳ４０２）。そして、ディレクトリ検査アクセス実行部４１は、データ転送応答に含まれる現キャッシュステート情報に従い、メモリ制御部２４を介してメモリ１０ａに格納されたディレクトリ情報を更新する（ステップＳ４０３）。この際、ディレクトリ検査アクセス実行部４１は、データ転送応答にデータが含まれる場合には、データのライトバック処理を実行する。
【０１６７】
次に、図２６を用いて、Ｌ−ＣＰＵとして動作するＣＰＵ２０ａが、リクエスト応答を受信した際に実行する処理の流れについて説明する。図２６は、Ｌ−ＣＰＵがリクエスト応答を受信した際に実行する処理の流れを説明するための図である。まず、コマンド受信部４０は、通信制御部２１からリクエスト応答を受信する（ステップＳ５０１）。
【０１６８】
次に、コマンド受信部４０は、受信したリクエスト応答をデータ応答部４４に出力する（ステップＳ５０２）。そして、データ応答部４４は、リクエスト応答をアクセス実行部３２に出力し、データの所有権を獲得した旨を通知し（ステップＳ５０３）、処理を終了する。
【０１６９】
次に、図２７を用いて、Ｌ−ＣＰＵとして動作するＣＰＵ２０ａが、データ応答を受信した際に実行する処理の流れについて説明する。図２７は、Ｌ−ＣＰＵがデータ応答を受信した際に実行する処理の流れを説明するための図である。まず、コマンド受信部４０は、通信制御部２１から、データ応答を受信する（ステップＳ６０１）。
【０１７０】
すると、コマンド受信部４０は、受信したデータ応答をデータ応答部４４に出力する（ステップＳ６０２）。次に、データ応答部４４は、新キャッシュステート情報等の指定項目をアクセス実行部３２に出力し（ステップＳ６０３）、転送対象のデータをキャッシュデータ部３３に保持させ（ステップＳ６０４）、処理を終了する。
【０１７１】
次に、図２８を用いて、Ｌ−ＣＰＵとして動作するＣＰＵ２０ａが、Ｒ−ＣＰＵから受信した転送対象のデータを登録する処理の流れについて説明する。図２８は、Ｌ−ＣＰＵが転送対象のデータを登録する処理の流れを説明するための図である。まず、アクセス実行部３２は、図２７のステップＳ６０３にてデータ応答の各種指定項目を取得すると、受信した新キャッシュステート情報に基づいて、キャッシュタグ部３１に新たなキャッシュステートを登録する（ステップＳ７０１）。
【０１７２】
ここで、ＣＰＵ２０ａは、Ｒ−ＣＰＵからデータ応答を受信する際には、すでにＨ−ＣＰＵからリクエスト応答を受信し、転送対象のデータの所有権を獲得している。このため、アクセス実行部３２は、キャッシュデータ部３３に転送対象のデータを出力させる（ステップＳ７０２）。すると、キャッシュデータ部３３は、転送対象のデータ、すなわちコア２２ａが発行したコマンドの対象となるデータをデータ応答部３４に出力する（ステップＳ７０３）。そして、データ応答部３４は、データをコア２２ａに出力し（ステップＳ７０４）、処理を終了する。
【０１７３】
［実施例１の効果］
上述したように、ＣＰＵ２０ａはメモリ１０ａと他のＣＰＵ２０ｂ〜２０ｄと接続され、他のＣＰＵ２０ｂ〜２０ｄがメモリ１０ａから読み出して保持したデータとの同一性を管理する。また、ＣＰＵ２０ａは、Ｌ−ＣＰＵとして動作する他のＣＰＵからリクエストを受信すると、メモリ１０ａからデータを保持したＣＰＵ、すなわちＲ−ＣＰＵに対し、データ転送要求を発行する。すなわち、ＣＰＵ２０ａは、転送対象のデータと新キャッシュステート情報とをＬ−ＣＰＵへ送信するようＲ−ＣＰＵに指示する。
【０１７４】
また、ＣＰＵ２０ａは、データ転送応答を受信する前に、Ｌ−ＣＰＵに対して、データの所有権を獲得した旨を示すリクエスト応答を発行する。このため、ＣＰＵ２０ａは、データ転送の性能を向上させることができる。
【０１７５】
また、ＣＰＵ２０ａは、Ｒ−ＣＰＵが転送対象のデータを保持していた際の現キャッシュステート情報を含むデータ転送応答を受信する。そして、ＣＰＵ２０ａは、データ転送応答に含まれる現キャッシュステート情報を用いて、ディレクトリ情報の更新を行う。このため、ＣＰＵ２０ａは、従来のＣＰＵと同様の論理を用いて、ディレクトリ情報の更新を正確に行うことができる。この結果、ＣＰＵ２０ａは、回路設計を容易にすることができる。
【０１７６】
また、ＣＰＵ２０ａは、Ｒ−ＣＰＵが保持したデータを更新している場合は、更新後のデータを含むデータ転送応答を受信する。そして、ＣＰＵ２０ａは、受信したデータ転送応答に含まれるデータをメモリ１０ａに書き戻す。このため、ＣＰＵ２０ａは、ライトバック処理を適切に行うことができる。
【０１７７】
また、ＣＰＵ２０ａは、転送対象のデータが演算処理の命令を示すデータである場合は、ディレクトリ情報を「ＳＨ」に更新する。また、ＣＰＵ２０ａは、リクエストの内容が演算処理の対象となるデータの読み出しであり、Ｒ−ＣＰＵにおける現キャッシュステートが「Ｅ」である場合は、ディレクトリ情報を「ＳＨ」に更新する。このため、ＣＰＵ２０ａは、ディレクトリ情報を正確に更新することができる。
【０１７８】
また、ＣＰＵ２０ａは、リクエストの内容が演算処理の対象となるデータの読み出しであり、Ｒ−ＣＰＵにおける現キャッシュステートが「Ｍ」である場合には、ディレクトリ情報を「ＥＸ」に更新する。また、ＣＰＵ２０ａは、リクエストの内容が演算処理の対象となるデータの書き込みである場合には、ディレクトリ情報を「ＥＸ」に更新する。このため、ＣＰＵ２０ａは、ディレクトリ情報を正確に更新することができる。
【０１７９】
また、ＣＰＵ２０ａは、他のＣＰＵからデータを保持している際、すなわちＨ−ＣＰＵからデータを保持した際に、データ転送リクエストを受信した場合には、Ｌ−ＣＰＵが転送対象のデータを保持した際の新たなキャッシュステートを判別する。そして、ＣＰＵ２０ａは、転送対象のデータと、新たなキャッシュステートを示す新キャッシュステート情報とを含むデータ応答を、Ｌ−ＣＰＵへ送信する。
【０１８０】
つまり、ＣＰＵ２０ａは、Ｒ−ＣＰＵとして動作する場合には、Ｌ−ＣＰＵに転送対象のデータと、新たなキャッシュステートとを送信する。このため、ＣＰＵ２０ａは、現キャッシュステート情報をＨ−ＣＰＵに送信せずとも、Ｌ−ＣＰＵに転送対象のデータを正しいキャッシュステートで保持させることができる。また、ＣＰＵ２０ａは、Ｌ−ＣＰＵに対するリクエスト応答の発行を、データ転送要求の発行前にＨ−ＣＰＵに実行させることができるので、データ転送の性能を向上させることができる。
【０１８１】
また、ＣＰＵ２０ａは、現キャッシュステート情報を、Ｈ−ＣＰＵに対して送信する。このため、ＣＰＵ２０ａは、Ｈ−ＣＰＵが管理するディレクトリ情報を正確に更新させることができる。
【０１８２】
また、ＣＰＵ２０ａは、保持したデータを更新していた場合、すなわち、現キャッシュステートが「Ｍ」である場合には、Ｈ−ＣＰＵに対するデータ転送応答に、更新後のデータを付加して送信する。このため、ＣＰＵ２０ａは、Ｈ−ＣＰＵに対して、ライトバック処理を実行させることができる。
【０１８３】
また、ＣＰＵ２０ａは、転送対象のデータが演算処理の命令となるデータである場合は、新キャッシュステート情報を「Ｓ」と判別する。また、ＣＰＵ２０ａは、転送対象のデータが演算処理の対象となるデータであり、現キャッシュステート情報が「Ｅ」である場合には、新キャッシュステート情報を「Ｓ」と判別する。このため、ＣＰＵ２０ａは、Ｌ−ＣＰＵに対して、正しいキャッシュステートを通知することができる。
【０１８４】
また、ＣＰＵ２０ａは、転送対象のデータが演算処理の対象となるデータであり、現キャッシュステート情報が「Ｍ」である場合には、新キャッシュステート情報を「Ｅ」とする。また、ＣＰＵ２０ａは、データ転送要求の要因となるリクエストがデータの書き込みを要求する場合は、新キャッシュステート情報を「Ｅ」とする。このため、ＣＰＵ２０ａは、Ｌ−ＣＰＵに対して、正しいキャッシュステートを通知することができる。
【実施例２】
【０１８５】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１８６】
（１）各メッセージのフォーマットについて
上述した実施例１では、図１２Ａ〜図１７Ａに各メッセージのフォーマットを例示した。しかし、実施例はこれに限定されるものではなく、各ＣＰＵ２０ａ〜２０ｄは、任意のフォーマットを有するメッセージを発行しても良い。また、上述した実施例１では、図１２Ｂ〜１７Ｂを用いて、各メッセージをシリアル伝送する際に各レーン＃０〜＃７が送信するデータについて説明した。しかし、実施例は、これに限定されるものではなく、例えば、１６本、３２本のレーンを用いて各メッセージを伝送しても良い。また、シリアル伝送ではなく、パラレル伝送を用いることしてもよい。
【０１８７】
（２）実施形態について
上述した通信制御部２１、キャッシュ制御部２３、コヒーレント制御部２５、メモリ制御部２４の機能は、矛盾しない範囲で組み合わせて実施することができる。例えば、通信制御部２１の機能については、コヒーレント制御部２５が発揮してもよい。また、メモリ制御部２４の機能は、コヒーレント制御部２５が発揮してもよい。また、キャッシュ制御部２３にコヒーレント制御部２５が発揮する機能を含めることとしてもよい。
【０１８８】
また、図１に示した情報処理装置１の構成は、あくまで一例であり、情報処理装置１は、任意の数のＳＢ、および任意の数のＣＰＵを有し、各ＣＰＵがＣＰＵ２０ａと同様の機能を発揮することとしてもよい。また、全てのＣＰＵがＣＰＵ２０ａと同様の機能を発揮しなくともよい。例えば、情報処理装置１が有するＣＰＵのうち、一部のＣＰＵのみがメモリと接続されている場合は、メモリと接続されたＣＰＵのみがＣＰＵ２０ａと同様の機能を発揮すればよい。また、他のＣＰＵについては、ＣＰＵ２０ａが発揮する機能のうち、Ｌ−ＣＰＵ、およびＲ−ＣＰＵとして動作する機能を有すればよい。
【０１８９】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１９０】
（付記１）主記憶装置と第１の演算処理装置に接続される演算処理装置において、
前記第１の演算処理装置が前記主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第２の演算処理装置から受信した場合、前記第２の演算処理装置が対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を、前記第１の演算処理装置に送信する第１の送信部と、
前記第１の送信部が送信した転送指示に対する応答を前記第１の演算処理装置から受信する前に、前記第２の演算処理装置に対して、前記対象データを獲得した旨を示す獲得情報を送信する第２の送信部を有することを特徴とする演算処理装置。
【０１９１】
（付記２）前記第１の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報を含む応答を、前記転送指示に対する応答として前記第１の演算処理装置から受信する受信部と、
前記受信部が受信した応答に含まれる状態情報に基づいて、前記主記憶装置上の対象データと各演算処理装置が保持した対象データとの同一性を確保するための同一性情報を更新する更新部と
を有することを特徴とする付記１に記載の演算処理装置。
【０１９２】
（付記３）前記受信部は、前記第１の演算処理装置が保持する対象データが更新されている場合には、前記状態情報を含む応答とともに、当該更新後の対象データを前記第１の演算処理装置から受信し、
前記更新部は、前記受信部が受信した応答に含まれる状態情報に基づいて、前記同一性情報を更新するとともに、前記受信部が受信した更新後の対象データを前記主記憶装置に書き戻すことを特徴とする付記２に記載の演算処理装置。
【０１９３】
（付記４）前記更新部は、前記第２の演算処理装置から受信した送信要求の対象データが演算命令を示すデータである場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信部が受信した応答に含まれる状態情報が前記対象データを更新することなく排他的に保持している旨を示す場合には、当該対象データが更新されずに他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする付記２または３に記載の演算処理装置。
【０１９４】
（付記５）前記更新部は、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信部が受信した応答に含まれる状態情報が前記対象データが更新されている旨を示す場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを書き込むための送信要求である場合には、当該対象データが更新された状態で他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする付記２−４のいずれか１つに記載の演算処理装置。
【０１９５】
（付記６）第１の演算処理装置が管理する主記憶装置から対象データを読み出して保持した演算処理装置において、
第２の演算処理装置から前記対象データを送信する旨の送信要求を受信した前記第１の演算処理装置から、前記第２の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を受信した場合は、当該対象データを前記第２の演算処理装置が保持した場合における対象データの状態を判別する判別部と、
前記判別部が判別した対象データの状態を示す状態情報と、前記対象データとを、前記第２の演算処理装置へ送信する第１の送信部と、
前記送信要求に対する応答を前記第２の演算処理装置に送信した前記第１の演算処理装置に対して、前記転送指示に対する応答を送信する第２の送信部と
を有することを特徴とする演算処理装置。
【０１９６】
（付記７）前記第２の送信部は、前記対象データが前記演算処理装置に保持されていた際の状態を示す状態情報を含んだ応答を前記第１の演算処理装置へ送信することを特徴とする付記６に記載の演算処理装置。
【０１９７】
（付記８）前記第２の送信部は、前記対象データが前記演算処理装置によって更新されていた場合には、前記転送指示に対する応答とともに、更新後の対象データを前記第１の演算処理装置へ送信することを特徴とする付記６または７に記載の演算処理装置。
【０１９８】
（付記９）前記判別部は、前記対象データが演算命令を示すデータである場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第１の演算処理装置に発行し、かつ、前記演算処理装置が前記対象データを更新することなく排他的に保持している場合には、前記対象データが共有されている旨を示す状態情報を判別結果とすることを特徴とする付記６−８のいずれか１つに記載の演算処理装置。
【０１９９】
（付記１０）前記判別部は、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第１の演算処理装置に発行し、かつ、前記演算処理装置が前記対象データを更新している場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記データの書き込みを行うための送信要求を前記第１の演算処理装置に発行した場合には、前記対象データが排他的に保持されている旨を示す状態情報を判別結果とすることを特徴とする付記６−９のいずれか１つに記載の演算処理装置。
【０２００】
（付記１１）データを記憶する主記憶装置と、前記データを保持する複数の演算処理装置とを有する情報処理装置において、
主記憶装置と第１の演算処理装置に接続される第２の演算処理装置は、
前記第１の演算処理装置が前記主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第３の演算処理装置から受信した場合、前記第３の演算処理装置が対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第３の演算処理装置に転送する旨の転送指示を、前記第１の演算処理装置に送信する第１の送信部と、
前記第１の送信部が送信した転送指示に対する応答を前記第１の演算処理装置から受信する前に、前記第３の演算処理装置に対して、前記対象データを獲得した旨を示す獲得情報を送信する第２の送信部と
を有し、
前記第１の演算処理装置は、
前記第１の演算処理装置から、前記転送指示を受信した場合は、前記対象データを前記第３の演算処理装置が保持した場合における対象データの状態を判別する判別部と、
前記判別部が判別した対象データの状態を示す状態情報と、前記対象データとを、前記第３の演算処理装置へ送信する第３の送信部と、
前記第１の演算処理装置に対して、前記転送指示に対する応答を送信する第４の送信部と
を有することを特徴とする情報処理装置。
【０２０１】
（付記１２）前記第２の演算処理装置は、
前記第１の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報を含む応答を、前記転送指示に対する応答として前記第１の演算処理装置から受信する受信部と、
前記受信部が受信した応答に含まれる状態情報に基づいて、前記主記憶装置上の対象データと各演算処理装置が保持した対象データとの同一性を確保するための同一性情報を更新する更新部と
を有することを特徴とする付記１１に記載の情報処理装置。
【０２０２】
（付記１３）前記受信部は、前記第１の演算処理装置が保持する対象データが更新されている場合には、前記状態情報を含む応答とともに、当該更新後の対象データを前記第１の演算処理装置から受信し、
前記更新部は、前記受信部が受信した応答に含まれる状態情報に基づいて、前記同一性情報を更新するとともに、前記受信部が受信した更新後の対象データを前記主記憶装置に書き戻すことを特徴とする付記１２に記載の情報処理装置。
【０２０３】
（付記１４）前記更新部は、前記第３の演算処理装置から受信した送信要求の対象データが演算命令を示すデータである場合、または、前記第３の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信部が受信した応答に含まれる状態情報が前記対象データを更新することなく排他的に保持している旨を示す場合には、当該対象データが更新されずに他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする付記１２または１３に記載の情報処理装置。
【０２０４】
（付記１５）前記更新部は、前記第３の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信部が受信した応答に含まれる状態情報が前記対象データが更新されている旨を示す場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを書き込むための送信要求である場合には、当該対象データが更新された状態で他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする付記１２−１４のいずれか１つに記載の情報処理装置。
【０２０５】
（付記１６）前記第４の送信部は、前記対象データが前記演算処理装置に保持されていた際の状態を示す状態情報を含んだ応答を前記第２の演算処理装置へ送信することを特徴とする付記１１に記載の情報処理装置。
【０２０６】
（付記１７）前記第４の送信部は、前記対象データが前記演算処理装置によって更新されていた場合には、前記転送指示に対する応答とともに、更新後の対象データを前記第２の演算処理装置へ送信することを特徴とする付記１１または１６に記載の情報処理装置。
【０２０７】
（付記１８）前記判別部は、前記対象データが演算命令を示すデータである場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第３の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第２の演算処理装置に発行し、かつ、前記第１の演算処理装置が前記対象データを更新することなく排他的に保持している場合には、前記対象データが共有されている旨を示す状態情報を判別結果とすることを特徴とする付記１１、１６、１７のいずれか１つに記載の情報処理装置。
【０２０８】
（付記１９）前記判別部は、前記対象データが演算処理の対象となるデータであり、かつ、前記第３の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第２の演算処理装置に発行し、かつ、前記第１の演算処理装置が前記対象データを更新している場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第３の演算処理装置が前記データの書き込みを行うための送信要求を前記第２の演算処理装置に発行した場合には、前記対象データが排他的に保持されている旨を示す状態情報を判別結果とすることを特徴とする付記１１、１６−１８のいずれか１つに記載の情報処理装置。
【０２０９】
（付記２０）主記憶装置と第１の演算処理装置に接続される演算処理装置が実行するデータ転送方法において、
前記第１の演算処理装置が前記主記憶装置から読み出して保持した対象データを送信する旨の送信要求を、第２の演算処理装置から受信した場合、前記第２の演算処理装置が対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を、前記第１の演算処理装置に送信し、
前記送信した転送指示に対する応答を前記第１の演算処理装置から受信する前に、前記第２の演算処理装置に対して、前記対象データを獲得した旨を示す獲得情報を送信する
処理を実行することを特徴とするデータ転送方法。
【０２１０】
（付記２１）前記第１の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報を含む応答を、前記転送指示に対する応答として前記第１の演算処理装置から受信し、
前記受信した応答に含まれる状態情報に基づいて、前記主記憶装置上の対象データと各演算処理装置が保持した対象データとの同一性を確保するための同一性情報を更新することを特徴とする付記２０に記載のデータ転送方法。
【０２１１】
（付記２２）前記第１の演算処理装置が保持する対象データが更新されている場合には、前記状態情報を含む応答とともに、当該更新後の対象データを前記第１の演算処理装置から受信し、
前記受信した応答に含まれる状態情報に基づいて、前記同一性情報を更新するとともに、前記受信した更新後の対象データを前記主記憶装置に書き戻すことを特徴とする付記２１に記載のデータ転送方法。
【０２１２】
（付記２３）前記第２の演算処理装置から受信した送信要求の対象データが演算命令を示すデータである場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信した応答に含まれる状態情報が前記対象データを更新することなく排他的に保持している旨を示す場合には、当該対象データが更新されずに他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする付記２１または２２に記載のデータ転送方法。
【０２１３】
（付記２４）前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを読み出すための送信要求であり、かつ、前記受信した応答に含まれる状態情報が前記対象データが更新されている旨を示す場合、または、前記第２の演算処理装置から受信した送信要求が演算処理の対象となるデータを書き込むための送信要求である場合には、当該対象データが更新された状態で他の演算処理装置に保持されている旨を示すよう、前記同一性情報を更新することを特徴とする付記２１−２３のいずれか１つに記載のデータ転送方法。
【０２１４】
（付記２５）第１の演算処理装置が管理する主記憶装置から対象データを読み出して保持した演算処理装置が実行するデータ転送方法において、
第２の演算処理装置から前記対象データを送信する旨の送信要求を受信した前記第１の演算処理装置から、前記第２の演算処理装置が前記対象データを前記主記憶装置から読み出して保持する場合における対象データの状態を示す状態情報と前記対象データとを前記第２の演算処理装置に転送する旨の転送指示を受信した場合は、当該対象データを前記第２の演算処理装置が保持した場合における対象データの状態を判別し、
前記判別した対象データの状態を示す状態情報と、前記対象データとを、前記第２の演算処理装置へ送信し、
前記送信要求に対する応答を前記第２の演算処理装置に送信した前記第１の演算処理装置に対して、前記転送指示に対する応答を送信する
処理を実行することを特徴とするデータ転送方法。
【０２１５】
（付記２６）前記対象データが前記演算処理装置に保持されていた際の状態を示す状態情報を含んだ応答を前記第１の演算処理装置へ送信することを特徴とする付記２５に記載のデータ転送方法。
【０２１６】
（付記２７）前記対象データが前記演算処理装置によって更新されていた場合には、前記転送指示に対する応答とともに、更新後の対象データを前記第１の演算処理装置へ送信することを特徴とする付記２５または２６に記載のデータ転送方法。
【０２１７】
（付記２８）前記対象データが演算命令を示すデータである場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第１の演算処理装置に発行し、かつ、前記演算処理装置が前記対象データを更新することなく排他的に保持している場合には、前記対象データが共有されている旨を示す状態情報を判別結果とすることを特徴とする付記２５−２７のいずれか１つに記載のデータ転送方法。
【０２１８】
（付記２９）前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記対象データの読み出しを行うための送信要求を前記第１の演算処理装置に発行し、かつ、前記演算処理装置が前記対象データを更新している場合、または、前記対象データが演算処理の対象となるデータであり、かつ、前記第２の演算処理装置が前記データの書き込みを行うための送信要求を前記第１の演算処理装置に発行した場合には、前記対象データが排他的に保持されている旨を示す状態情報を判別結果とすることを特徴とする付記２５−２８のいずれか１つに記載のデータ転送方法。
【符号の説明】
【０２１９】
１  情報処理装置
２ａ、２ｂ  ＸＢ
３ａ〜３ｈ  ＳＢ
１０ａ〜１０ｄ  メモリ
２０ａ〜２０ｄ  ＣＰＵ
２１  通信制御部
２２ａ〜２２ｆ  コア
２３  キャッシュ制御部
２４  メモリ制御部
２５  コヒーレント制御部
３０  コマンド受信部
３１  キャッシュタグ部
３２  アクセス実行部
３３  キャッシュデータ部
３４  データ応答部
４０  コマンド受信部
４１  ディレクトリ検査アクセス実行部
４２  アドレスロック制御部
４３  コマンド発行／応答部
４４  データ応答部
【図１】
2014048848.tif 000003
【図２】
2014048848.tif 000004
【図３】
2014048848.tif 000005
【図４】
2014048848.tif 000006
【図５】
2014048848.tif 000007
【図６】
2014048848.tif 000008
【図７】
2014048848.tif 000009
【図８】
2014048848.tif 000010
【図９】
2014048848.tif 000011
【図１０】
2014048848.tif 000012
【図１１】
2014048848.tif 000013
【図１２Ａ】
2014048848.tif 000014
【図１２Ｂ】
2014048848.tif 000015
【図１３Ａ】
2014048848.tif 000016
【図１３Ｂ】
2014048848.tif 000017
【図１４Ａ】
2014048848.tif 000018
【図１４Ｂ】
2014048848.tif 000019
【図１５Ａ】
2014048848.tif 000020
【図１５Ｂ】
2014048848.tif 000021
【図１６Ａ】
2014048848.tif 000022
【図１６Ｂ】
2014048848.tif 000023
【図１７Ａ】
2014048848.tif 000024
【図１７Ｂ】
2014048848.tif 000025
【図１８】
2014048848.tif 000026
【図１９】
2014048848.tif 000027
【図２０】
2014048848.tif 000028
【図２１】
2014048848.tif 000029
【図２２】
2014048848.tif 000030
【図２３】
2014048848.tif 000031
【図２４】
2014048848.tif 000032
【図２５】
2014048848.tif 000033
【図２６】
2014048848.tif 000034
【図２７】
2014048848.tif 000035
【図２８】
2014048848.tif 000036
【図２９】
2014048848.tif 000037