(57)【要約】【課題】データ転送の性能を向上させることを目的とする。【解決手段】メモリに接続されるＣＰＵ２０ｂとＰＣＩｅ４に接続されるＣＰＵ２０ａは、ＣＰＵ２０ｂと接続されるメモリからデータを読み出して保持するＬ２キャッシュＲＡＭ３１を有する。また、ＣＰＵ２０ａは、ＰＣＩｅ４からＣＰＵ２０ｂに接続されたメモリが記憶するデータを転送するよう要求された場合、データの転送を要求するＩＯ要求をＣＰＵ２０ｂに送信するＩＣ３５を有する。また、ＣＰＵ２０ａは、Ｌ２キャッシュＲＡＭ３１を制御するとともに、ＣＰＵ２０ｂに出力したＩＯ要求に基づいてＣＰＵ２０ｂが出力する転送要求をＣＰＵ２０ｂから受信した場合は、ＩＯ応答とデータの転送先がＣＰＵ２０ａであるかを判別し、ＩＯ要求とデータの転送先がＣＰＵ２０ａであると判別した場合は、ＩＯ応答とデータとをＩＣ３５に出力するＬ２キャッシュ部３０を有する。【選択図】図５
2014048986.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置に接続される第１の演算処理装置と入出力装置とに接続する演算処理装置において、
前記主記憶装置からのデータを保持するキャッシュメモリと、
前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第１の演算処理装置に出力する第１の制御部と、
前記キャッシュメモリを制御するとともに、前記第１の演算処理装置に出力した入出力要求に基づいて前記第１の演算処理装置が出力する応答と対象データとを転送する指示を、前記第１の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第１の制御部に対して出力する第２の制御部を有することを特徴とする演算処理装置。
【請求項２】
前記第２の制御部は、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第１の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記第２の制御部は、前記第１の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする請求項１または２に記載の演算処理装置。
【請求項４】
前記第２の制御部は、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする請求項１−３のいずれか１つに記載の演算処理装置。
【請求項５】
前記第１の制御部は、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする請求項１−４のいずれか１つに記載の演算処理装置。
【請求項６】
主記憶装置に接続された第１の演算処理装置と、
入出力装置に接続された第２の演算処理装置と
を有する情報処理装置において、
前記第２の演算処理装置は、
前記主記憶装置からデータを読み出して保持するキャッシュメモリと、
前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第１の演算処理装置に出力する第１の制御部と、
前記キャッシュメモリを制御するとともに、前記第１の演算処理装置に出力した入出力要求に基づいて前記第１の演算処理装置が出力する応答と対象データとを転送する指示を、前記第１の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第１の制御部に対して出力する第２の制御部とを有することを特徴とする情報処理装置。
【請求項７】
主記憶装置に接続される第１の演算処理装置と入出力装置に接続するとともに、前記主記憶装置からのデータを保持するキャッシュメモリを有する演算処理装置の制御方法において、
前記演算処理装置が有する第１の制御部が、前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第１の演算処理装置に出力し、
前記演算処理装置が有する第２の制御部が、前記キャッシュメモリを制御するとともに、前記第１の演算処理装置に出力した入出力要求に基づいて前記第１の演算処理装置が出力する応答と対象データとを転送する指示を、前記第１の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別し、
前記第２の制御部が、前記宛先が自装置であると判別した場合、前記入出力要求に対する応答と対象データとを前記第１の制御部に対して出力することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
従来、メモリと、メモリ上のデータを管理する演算処理装置としてのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）との組を複数有し、各ＣＰＵが各メモリを共有するＮＵＭＡ（Ｎｏｎ  Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）の技術が知られている。このようなＮＵＭＡの技術の一例として、各ＣＰＵが、ディレクトリを用いて、自身と接続されたメモリ上のデータと各ＣＰＵがキャッシュメモリに保持したデータとのコヒーレンシを保持するｃｃＮＵＭＡ（ｃａｃｈｅ  ｃｏｈｅｒｅｎｔ  Ｎｏｎ  Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）の技術が知られている。
【０００３】
このようなｃｃＮＵＭＡの技術が適用されたＣＰＵは、自身が管理するメモリ上のデータを他のＣＰＵがキャッシュメモリに保持した際に、さらに異なるＣＰＵからデータの転送を要求されると、データをキャッシュメモリに保持する他のＣＰＵにデータの転送を行わせる場合がある。以下、図２２〜図２７を用いて、ｃｃＮＵＭＡの技術が適用されたＣＰＵがデータを転送する処理について説明する。
【０００４】
なお、以下の説明では、転送対象となるデータのコヒーレンシを管理するＣＰＵをＨ−ＣＰＵ（Ｈｏｍｅ−ＣＰＵ）とし、データの転送をＨ−ＣＰＵに要求するＣＰＵをＬ−ＣＰＵ（Ｌｏｃａｌ−ＣＰＵ）とする。また、転送対象となるデータをＨ−ＣＰＵが管理するメモリから既にキャッシュメモリに保持しているＣＰＵをＲ−ＣＰＵ（Ｒｅｍｏｔｅ−ＣＰＵ）とする。また、Ｌ−ＣＰＵは、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）を介して、各種ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）デバイスと接続されているものとする。
【０００５】
図２２は、従来の３ＣＰＵ間のデータ転送処理を説明するための図である。例えば、Ｌ−ＣＰＵ５１のＩＣ（Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）５２は、ＰＣＩｅ５３を介して、ＩＯデバイスとのＩＯ処理を制御する。また、Ｈ−ＣＰＵ５４が有する二次キャッシュメモリであるＬ２（Ｌｅｖｅｌ  ２）キャッシュ部５５は、ディレクトリを用いて、メモリ５６に格納されたデータと他のＣＰＵがメモリ５６からキャッシュメモリに保持したデータとのコヒーレンシを保持する。また、Ｒ−ＣＰＵ５７が有するＬ２キャッシュ部５８は、Ｌ２キャッシュ部５５を介して、メモリ５６上のデータをキャッシュメモリに保持する。
【０００６】
ここで、ＩＣ５２は、ＰＣＩｅ５３を介して、メモリ５６に格納されたデータのリクエストを受信すると、データの転送を要求するＩＯ要求をＨ−ＣＰＵ５４に対して発行する。すると、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、転送対象となるデータのディレクトリ情報を検査する。
【０００７】
そして、Ｌ２キャッシュ部５５は、ディレクトリ情報が「Ｒ−ＥＸ（Ｅｘｃｌｕｓｉｖｅ）」である場合、すなわち、データがＲ−ＣＰＵ５７に更新された状態で、キャッシュメモリに排他的に保持された旨を示す場合は、Ｒ−ＣＰＵ５７にデータ転送要求を発行する。すると、Ｒ−ＣＰＵ５７が有するＬ２キャッシュ部５８は、転送対象のデータを含むデータ転送応答をＨ−ＣＰＵ５４に対して発行する。そして、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、転送対象のデータとＩＯ応答とをＩＣ５２に対して送信し、データ転送処理を終了する。
【０００８】
次に、図２３を用いて、ＩＣ５２がＩＯ要求を発行してからＩＯ応答とデータとを受信するまでの間に行われるデータ転送の回数について説明する。図２３は、従来の３ＣＰＵ間のデータ転送処理を説明するためのタイムチャートである。図２３に示すように、まず、ＩＣ５２は、Ｈ−ＣＰＵ５４に対してＩＯ要求を発行する（ステップＳ２０１）。
【０００９】
すると、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、Ｒ−ＣＰＵ５７に対して、データ転送要求を発行する（ステップＳ２０２）。そして、Ｒ−ＣＰＵ５７が有するＬ２キャッシュ部５８は、Ｈ−ＣＰＵ５４に対して転送対象のデータを含むデータ転送応答を発行する（ステップＳ２０３）。その後、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、Ｌ−ＣＰＵ５１が有するＩＣ５２に対して、データとＩＯ応答とを送信し（ステップＳ２０４）、データ転送処理を終了する。
【００１０】
このように、従来の３ＣＰＵ間のデータ転送処理では、ＩＣ５２がＩＯ要求を発行してから、ＩＯ応答とデータとを受信するまでの間に、ＣＰＵ間の通信が４回行われる。このようなＣＰＵ間の通信回数を削減し、データ転送処理の効率を向上させるため、Ｒ−ＣＰＵからＬ−ＣＰＵに対してデータを直接転送する手法が考えられる。
【００１１】
以下、図２４を用いて、Ｒ−ＣＰＵ５７がＬ−ＣＰＵ５１にデータを直接転送する処理について説明する。図２４は、Ｌ−ＣＰＵにデータを直接転送する処理を説明するための図である。例えば、ＩＣ５２は、Ｈ−ＣＰＵ５４に対してＩＯ要求を発行する。次に、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、ディレクトリ情報が「Ｒ−ＥＸ」であると判別し、データ転送要求をＲ−ＣＰＵ５７に対して発行する。
【００１２】
すると、Ｒ−ＣＰＵ５７が有するＬ２キャッシュ部５８は、ＩＯ応答とデータとをＬ−ＣＰＵ５１が有するＩＣ５２に対して直接転送し、データ転送応答をＨ−ＣＰＵ５４に発行する。その後、Ｈ−ＣＰＵ５４のＬ２キャッシュ部５５は、ＩＣ５２に対してＩＯ応答を発行し、データ転送処理を終了する。
【００１３】
次に、図２５を用いて、Ｒ−ＣＰＵ５７からＬ−ＣＰＵ５１にデータを直接転送する際に、ＩＣ５２がＩＯ要求を発行してからＩＯ応答とデータとを受信するまでの間に行われるデータ転送の回数について説明する。図２５は、Ｌ−ＣＰＵにデータを直接転送する処理を説明するためのタイムチャートである。図２５に示すように、ＩＣ５２は、Ｈ−ＣＰＵ５４に対してＩＯ要求を発行する（ステップＳ３０１）。
【００１４】
すると、Ｈ−ＣＰＵ５４のＬ２キャッシュ部５５は、データ転送要求をＲ−ＣＰＵ５７に発行する（ステップＳ３０２）。そして、Ｒ−ＣＰＵ５７のＬ２キャッシュ部５８は、データ転送応答をＨ−ＣＰＵ５４に発行し（ステップＳ３０３）、ＩＣ５２に対して、ＩＯ応答とデータとを発行する（ステップＳ３０４）。また、データ転送応答を受信したＨ−ＣＰＵ５４のＬ２キャッシュ部５５は、ＩＣ５２に対してＩＯ応答を発行する（ステップＳ３０５）。
【００１５】
このように、Ｒ−ＣＰＵ５７がＩＣ５２に対してデータを直接転送した場合は、ＩＣ５２がＩＯ要求を発行してから、ＩＯ応答とデータとを受信するまでの間に実行されるＣＰＵ間の通信が３回で済むため、Ｌ−ＣＰＵ５１は、迅速にデータ転送処理を行える。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００１−２８２７６４号公報
【非特許文献】
【００１７】
【非特許文献１】Computer  Architecture:  A  Quantitative  Approach,  4th  Edition,  John  L.  Hennessy,David  A.  Patterson
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、上述したＬ−ＣＰＵからＲ−ＣＰＵに転送対象のデータを直接転送する技術では、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵとなる場合に、データ転送の性能が悪化するという問題がある。
【００１９】
図２６は、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一である場合のデータ転送を説明するための図である。なお、以下の説明では、例えば、図２６に示す例では、Ｌ−ＣＰＵ５１は、Ｌ２キャッシュ部５９を有し、メモリ５６上のデータをキャッシュメモリに保持するＲ−ＣＰＵとしても動作する。以下の説明では、Ｒ−ＣＰＵとしても動作するＬ−ＣＰＵ５１を、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵ５１と記載する。
【００２０】
例えば、ＩＣ５２は、Ｈ−ＣＰＵ５４にＩＯ要求を発行する。すると、Ｌ２キャッシュ部５５は、転送対象のデータに係るディレクトリ情報を検査し、ディレクトリ情報が「Ｒ−ＥＸ」である場合には、転送対象のデータをキャッシュメモリに保持したＬ−ＣＰＵ＝Ｒ−ＣＰＵ５１を識別する。そして、Ｌ２キャッシュ部５５は、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵ５１にデータ転送要求を発行する。
【００２１】
ここで、Ｌ２キャッシュ部５９は、ＩＣ５２に対してＩＯ応答とデータとを送信する手段がないため、Ｈ−ＣＰＵ５４に対し、転送対象のデータを含むデータ転送応答を発行する。そして、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、ＩＣ５２に対して、ＩＯ応答とデータとを発行し、データ転送処理を終了する。
【００２２】
次に、図２７を用いて、ＩＣ５２がＩＯ要求を発行してからＩＯ応答とデータとを受信するまでの間に行われるデータ転送の回数について説明する。図２７は、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一である場合のデータ転送を説明するためのタイムチャートである。例えば、ＩＣ５２は、Ｈ−ＣＰＵ５４に対してＩＯ要求を発行する（ステップＳ４０１）。
【００２３】
すると、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵ５１がＲ−ＣＰＵであると判別し、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵ５１に対してデータ転送要求を発行する（ステップＳ４０２）。すると、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵ５１が有するＬ２キャッシュ部５９は、データを含むデータ転送応答をＨ−ＣＰＵ５４に送信する（ステップＳ４０３）。そして、Ｈ−ＣＰＵ５４が有するＬ２キャッシュ部５５は、データとＩＯ応答とをＩＣ５２に発行する（ステップＳ４０４）。
【００２４】
このように、Ｒ−ＣＰＵに転送対象のデータを直接転送する技術では、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵとなる場合は、ＩＣ５２がＩＯ要求を発行してからＩＯ応答とデータとを受信するまでの間に、ＣＰＵ間の通信が４回行われる。このため、Ｒ−ＣＰＵに転送対象のデータを直接転送する技術では、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵとなる場合は、データ転送の性能が低下してしまう。
【００２５】
また、Ｒ−ＣＰＵに転送対象のデータを直接転送する技術では、Ｌ−ＣＰＵとＲ−ＣＰＵとが異なる場合と、Ｌ−ＣＰＵとＲ−ＣＰＵとが同じ場合とで、Ｒ−ＣＰＵがデータを発行するＣＰＵが異なる。この結果、Ｒ−ＣＰＵが実行する処理が複雑になるので、ＣＰＵの設計が困難になる。
【００２６】
１つの側面では、本発明は、複数の演算処理装置間のデータ転送の性能を向上させることを目的とする。
【課題を解決するための手段】
【００２７】
１つの側面では、主記憶装置に接続される第１の演算処理装置と入出力装置とに接続する演算処理装置である。また、演算処理装置は、主記憶装置からのデータを保持するキャッシュメモリを有する。また、演算処理装置は、入出力装置によるデータの取得を制御するとともに、入出力装置から主記憶装置が記憶する対象データを転送するよう要求された場合、対象データの転送を要求する入出力要求を第１の演算処理装置に出力する第１の制御部を有する。また、演算処理装置は、キャッシュメモリを制御するとともに、第１の演算処理装置に出力した入出力要求に基づいて第１の演算処理装置が出力する応答と対象データとを転送する指示を、第１の演算処理装置から受信した場合、応答の宛先が自装置であるかを判別するとともに、宛先が自装置であると判別したとき、入出力要求に対する応答と対象データとを第１の制御部に対して出力する第２の制御部を有する。
【発明の効果】
【００２８】
１つの実施形態では、複数の演算処理装置間のデータ転送の性能を向上させることができる。
【図面の簡単な説明】
【００２９】
【図１】図１は、実施例１に係る情報処理装置の構成の一例を示す図である。
【図２】図２は、実施例１に係るＳＢの構成の一例を示す図である。
【図３】図３は、ディレクトリ情報の一例を説明するための図である。
【図４】図４は、ディレクトリのステータスを説明するための図である。
【図５】図５は、実施例１に係るＣＰＵの一例を説明するための図である。
【図６】図６は、ＩＯ要求の一例を説明するための図である。
【図７】図７は、ＩＯ応答の一例を説明するための図である。
【図８】図８は、データ転送要求の一例を説明するための図である。
【図９】図９は、データ転送応答の一例を説明するための図である。
【図１０】図１０は、実施例１に係るＣＰＵによるデータ転送の流れを説明するための図である。
【図１１】図１１は、実施例１に係るＣＰＵが実行するデータ転送の流れを説明するためのタイムチャートである。
【図１２】図１２は、従来のＣＰＵによるデータ転送を説明するためのフローである。
【図１３】図１３は、実施例１に係るＣＰＵが実行するデータ転送の流れを説明するためのフローである。
【図１４】図１４は、Ｈ−ＣＰＵを介さないデータ転送の流れを説明するための図である。
【図１５】図１５は、Ｈ−ＣＰＵを介さないデータ転送の流れを説明するためのタイムチャートである。
【図１６】図１６は、キャッシュステートが「Ｉ」である場合のデータの流れを説明するための図である。
【図１７】図１７は、キャッシュステートが「Ｉ」である場合のデータの流れを説明するためのタイムチャートである。
【図１８】図１８は、キャッシュステートが「Ｉ」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するための図である。
【図１９】図１９は、キャッシュステートが「Ｉ」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのタイムチャートである。
【図２０】図２０は、キャッシュステートが「Ｉ」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのフローである。
【図２１】図２１は、リクエストを受信した際にＬ２キャッシュ部が実行する処理の流れを説明するためのフローチャートである。
【図２２】図２２は、従来の３ＣＰＵ間のデータ転送処理を説明するための図である。
【図２３】図２３は、従来の３ＣＰＵ間のデータ転送処理を説明するためのタイムチャートである。
【図２４】図２４は、Ｌ−ＣＰＵにデータを直接転送する処理を説明するための図である。
【図２５】図２５は、Ｌ−ＣＰＵにデータを直接転送する処理を説明するためのタイムチャートである。
【図２６】図２６は、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一である場合のデータ転送を説明するための図である。
【図２７】図２７は、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一である場合のデータ転送を説明するためのタイムチャートである。
【発明を実施するための形態】
【００３０】
以下に添付図面を参照して本願に係る演算処理装置、情報処理装置および演算処理装置の制御方法について説明する。
【実施例１】
【００３１】
まず、図１を用いて、実施例１に係る情報処理装置の構成について説明する。図１は、実施例１に係る情報処理装置の構成の一例を示す図である。図１に示すように、実施例１に係る情報処理装置１は、ＸＢ（クロスバスイッチ）２ａとＸＢ２ｂと、ＳＢ（システムボード）３ａ〜ＳＢ３ｈとを有する。なお、図１に示すクロスバスイッチおよびシステムボードの数はあくまで例示であり、これに限定されるものではない。
【００３２】
ＸＢ２ａは、各ＳＢ３ａ〜３ｈ間でやり取りされるデータの経路を動的に選択するとともに、データを転送するデータ転送装置としてのスイッチである。ここで、データには、プログラムや演算処理結果などが含まれる。なお、ＸＢ２ｂの構成は、ＸＢ２ａと同様であるので、詳細な説明は省略する。また、ＳＢ３ａは、ＣＰＵとメモリとを有し、各種演算処理を実行する。なお、ＳＢ３ｂからＳＢ３ｈの構成は、ＳＢ３ａと同様であるので、詳細な説明は省略する。
【００３３】
次に、図２を用いて、各ＳＢの構成例について説明する。図２は、実施例１に係るＳＢの構成の一例を示す図である。図２に示す例では、ＳＢ３ａは、主記憶装置としてのメモリ１０ａ〜メモリ１０ｄと、相互に接続された演算処理装置としてのＣＰＵ２０ａ〜ＣＰＵ２０ｄとを有する。すなわち、メモリ１０ａに対しては、ＣＰＵ２０ａがメモリアクセスを行い、メモリ１０ｂに対しては、ＣＰＵ２０ｂがメモリアクセスを行う。また、メモリ１０ｃに対しては、ＣＰＵ２０ｃがメモリアクセスを行い、メモリ１０ｄに対しては、ＣＰＵ２０ｄがメモリアクセスを行う。
【００３４】
また、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、それぞれメモリ１０ａ〜メモリ１０ｄと接続される。なお、メモリ１０ｂ〜１０ｄは、メモリ１０ａと同様の機能を有するものとして、以下の説明を省略する。また、ＣＰＵ２０ｂ〜ＣＰＵ２０ｄは、ＣＰＵ２０ａと同様の処理を実行するものとし、以下の説明を省略する。
【００３５】
例えば、ＣＰＵ２０ａは、キャッシュメモリを有し、自身が管理するメインメモリであるメモリ１０ａに格納されたデータをキャッシュメモリに保持して、保持したデータに対して各種演算処理を実行する。また、ＣＰＵ２０ａは、各メモリ１０ｂ〜１０ｄに格納されたデータをキャッシュメモリに保持する場合には、他のＣＰＵ２０ｂ〜ＣＰＵ２０ｄに対してデータの転送を要求するリクエストを発行する。そして、ＣＰＵ２０ａは、他のＣＰＵ２０ｂ〜ＣＰＵ２０ｄからリクエストの対象となるデータ受信し、受信したデータをキャッシュメモリに保持する。なお、ＣＰＵ２０ａ〜ＣＰＵ２０ｄは、ＸＢ２ａと接続されており、ＸＢ２ａに接続された図示しないＸＢ２ｂと接続されたＳＢ３が有するメモリに格納されたデータを取得することもできる。
【００３６】
一方、メモリ１０ａは、各ＣＰＵ１０ａ〜１０ｄが演算処理に利用するデータを記憶する。また、メモリ１０ａは、メモリ１０ａが記憶するデータをどのＣＰＵがキャッシュメモリに保持しているかを示すディレクトリ情報を記憶する。例えば、ＣＰＵ２０ａは、各種データを記憶する領域と、ディレクトリ情報を記憶する領域とをメモリ１０ａ上に設定し、各種データを記憶する領域と、ディレクトリ情報を記憶する領域とを対応付ける。そして、ＣＰＵ２０ａは、各種データを記憶する領域と対応付けた領域に、データの状態と、データをキャッシュメモリに保持したＣＰＵとを示すディレクトリ情報を格納する。
【００３７】
以下、図３を用いて、ＣＰＵ２０ａがメモリ１０ａに格納するディレクトリ情報の一例について説明する。図３は、ディレクトリ情報の一例を説明するための図である。図３に示すように、ＣＰＵ２０ａは、各種データについて、データ状態とＲ−ＣＰＵプレゼンスビットとを対応付けたディレクトリ情報を格納する。ここで、データ状態とは、キャッシュメモリに保持されたデータがどのような状態であるかを示す２ビットのビット列である。
【００３８】
ここで、図４は、ディレクトリのステータスを説明するための図である。なお、図４には、データ状態のビット列が、どのようなステータスを示しているかを記載した。例えば、ビット列「００」は、ステータス「Ｌｏｃａｌ（Ｌ）」を示す。ステータス「Ｌ」は、データが他のＣＰＵ、すなわちＲ−ＣＰＵのキャッシュメモリに保持されておらず、Ｈ−ＣＰＵのキャッシュメモリに保持されている可能性がある状態である。
【００３９】
また、ビット列「１０」は、ステータス「Ｒｅｍｏｔｅ−Ｅｘｃｌｕｓｉｖｅ（Ｒ−ＥＸ）」を示す。ステータス「Ｒ−ＥＸ」は、キャッシュステートが「Ｅｘｃｌｕｓｉｖｅ（Ｅ）」、または「Ｍｏｄｉｆｉｅｄ（Ｍ）」の状態で、１つのＲ−ＣＰＵがキャッシュメモリにデータを保持しており、Ｈ−ＣＰＵはキャッシュメモリにデータを保持していない状態である。
【００４０】
なお、キャッシュステートとは、キャッシュメモリに保持されたデータの状態を示す情報であり、「Ｉｎｖａｌｉｄ（Ｉ）」、「Ｓｈａｒｅｄ（Ｓ）」、「Ｅ」、「Ｍ」の何れかとなる。「Ｉｎｖａｌｉｄ（Ｉ）」とは、キャッシュデータが登録されていない状態を示し、「Ｓｈａｒｅｄ（Ｓ）」とは、他のＣＰＵも同一のデータをキャッシュメモリに保持しており、かつクリーンな状態を示す。また、「Ｅ」とは、独占的にデータをキャッシュメモリに保持しており、かつクリーンな状態を示し、「Ｍ」とは、独占的にデータをキャッシュメモリに保持しており、かつダーティな状態を示す。
【００４１】
また、ビット列「１１」は、ステータス「Ｒｅｍｏｔｅ−Ｓｈａｒｅｄ（Ｒ−ＳＨ）」を示す。ステータス「Ｒ−ＳＨ」は、データが複数のＲ−ＣＰＵのキャッシュメモリに保持されており、Ｈ−ＣＰＵのキャッシュメモリにもデータが保持されている可能性がある状態である。
【００４２】
図３に戻って、Ｒ−ＣＰＵプレゼンスビットとは、データがどのＣＰＵのキャッシュメモリに保持されているかを示すビット列である。例えば、ＣＰＵ２０ａは、ビット列の各ビットを情報処理装置１が有する各ＣＰＵと対応付け、データをキャッシュメモリに保持したＣＰＵと対応付けたビットを「１」にすることで、データをキャッシュメモリに保持したビットを識別する。ただし、ＣＰＵ２０ａは、自装置、すなわちＣＰＵ２０ａと対応付けられたビットについては「０」とする。
【００４３】
例えば、ＣＰＵ２０ａは、情報処理装置１が１６個のＣＰＵを有する場合には、図３に示すように１６ビットのビット列をＲ−ＣＰＵプレゼンスビットとする。この結果、図３に例示するディレクトリ情報は、ＣＰＵプレゼンスビットの上位３ビット目のビットと対応付けたＣＰＵに、キャッシュステート「Ｒ」または「Ｍ」でデータがキャッシュメモリに保持されている状態「Ｒ−ＥＸ」を示す。
【００４４】
次に、図５を用いて、ＣＰＵの構成例について説明する。図５は、実施例１に係るＣＰＵの一例を説明するための図である。図５に示す例では、ＣＰＵ２０ａは、Ｌ２キャッシュ部３０、ＩＣ３５、ＰＣＩ制御部３６、複数のコア３７、Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ（ＭＡＣ）３８、通信制御部３９を有する。また、Ｌ２キャッシュ部３０は、Ｌ２キャッシュＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）３１、メモリ管理部３２、入力制御部３３、出力制御部３４を有する。
【００４５】
また、ＣＰＵ２０ａは、ＰＣＩｅ４を介して、各種ＩＯ装置と接続されており、各種ＩＯ装置がメモリ１０ａに格納されたデータを要求した場合には、メモリ１０ａからデータを取得し、ＰＣＩｅ４を介して、データを各種ＩＯ装置に出力する。また、ＣＰＵ２０ａは、各ＣＰＵ２０ｂ〜２０ｄと接続され、または、ＸＢ２ａ、およびＸＢ２ｂを介して、各ＳＢ３ｂ〜３ｈが有するＣＰＵと各種データやメッセージの送受信を行う。
【００４６】
また、ＣＰＵ２０ａは、出力制御部３４とＩＣ３５との間に、Ｌ２キャッシュＲＡＭ３１から読み出されるデータを送受信するための経路を有する。すなわち、ＣＰＵ２０ａは、Ｌ２キャッシュ部３０が保持したデータをＬ２キャッシュ部３０からＩＣ３５に直接送信するための経路を有する。
【００４７】
以下、Ｌ２キャッシュ部３０が発揮する機能について説明する。Ｌ２キャッシュＲＡＭ３１は、各メモリ１０ａ〜１０ｄのデータを保持するキャッシュメモリである。例えば、Ｌ２キャッシュＲＡＭ３１は、入力制御部３３、または出力制御部３４からメモリアドレスを受信すると、受信したメモリアドレスに格納されたデータを入力制御部３３、または出力制御部３４に出力する。なお、Ｌ２キャッシュＲＡＭ３１は、メモリドレスの上位アドレスであるインデックスアドレスごとにデータを記憶するキャッシュラインの技術や、各キャッシュラインに複数ウェイを有してもよい。
【００４８】
メモリ管理部３２は、メモリ１０ａに格納されたデータの入出力処理を制御する。また、メモリ管理部３２は、メモリ１０ａに格納したディレクトリ情報を用いて、各ＣＰＵ２０ｂ〜２０ｄ、および他のＳＢ３ｂ〜３ｈが有するＣＰＵが、メモリ１０ａからキャッシュメモリに保持したデータと、メモリ１０ａ上のデータとのコヒーレンシを保持する。
【００４９】
例えば、メモリ管理部３２は、ＩＯ装置がデータの転送を要求したためにＩＣ３５が発行したデータ取得要求を受信した場合には、ＭＡＣ３８を介して、メモリ１０ａにアクセスし、データ取得要求の対象となるデータを取得する。そして、メモリ管理部３２は、取得したデータをＩＣ３５に出力する。
【００５０】
また、メモリ管理部３２は、Ｌ２キャッシュＲＡＭ３１が保持するデータの取得要求を入力制御部３３から受信した場合には、ＭＡＣ３８を介してメモリアクセスを行い、メモリ１０ａから取得したデータを入力制御部３３に出力する。
【００５１】
また、メモリ管理部３２は、通信制御部３９を介して、各ＣＰＵ２０ｂ〜２０ｄや、他のＳＢ３ｂ〜３ｈが有するＣＰＵ（以下、他のＣＰＵ２０ｂ〜２０ｄと記載する）が発行したＩＯ要求を受信する。ここで、ＩＯ要求とは、他のＣＰＵ２０ｂ〜２０ｄがメモリ１０ａに格納されたデータの取得要求をＩＯ装置から受信した際に、Ｈ−ＣＰＵへ発行されるデータの転送要求である。
【００５２】
ここで、図６を用いて、ＩＯ要求の一例について説明する。図６は、ＩＯ要求の一例を説明するための図である。図６に示すように、ＩＯ要求には、要求種別、Ｌ−ＣＰＵ−ＩＤ、アドレスが格納されている。ここで、要求種別とは、データに対する処理の内容を示す情報であり、いわゆるオペレーションコードである。また、Ｌ−ＣＰＵ−ＩＤとは、ＩＯ要求の発行元となるＣＰＵ、すなわちＬ−ＣＰＵを示す識別子である。また、アドレスとは、転送対象のデータが格納されたメモリアドレスである。
【００５３】
図５に戻って、メモリ管理部３２は、ＩＯ要求を受信した場合には、ＭＡＣ３８を介して、メモリ１０ａにアクセスし、転送対象のデータとディレクトリ情報とを取得する。そして、メモリ管理部３２は、取得したディレクトリ情報が「Ｌ」、または「Ｒ−ＳＨ」である場合は、以下の処理を実行する。まず、メモリ管理部３２は、転送対象のデータがＬ２キャッシュＲＡＭ３１に保持されているかを判別する。
【００５４】
そして、メモリ管理部３２は、転送対象のデータがＬ２キャッシュＲＡＭ３１に保持されていない場合、すなわちキャッシュステートが「Ｉ」の場合は、ＩＯ要求に対する応答であるＩＯ応答にメモリから取得した転送対象のデータを格納する。また、メモリ管理部３２は、転送対象のデータがキャッシュステート「Ｅ」でＬ２キャッシュＲＡＭ３１に保持されている場合は、ＩＯ応答にメモリから取得した転送対象のデータを格納する。
【００５５】
また、メモリ管理部３２は、キャッシュステートが「Ｍ」でデータがＬ２キャッシュＲＡＭ３１に保持されている場合には、Ｌ２キャッシュＲＡＭ３１に保持されたデータのライトバック処理を行い、メモリ１０ａ上のデータを更新する。そして、メモリ管理部３２は、更新後のデータをＩＯ応答に格納する。その後、メモリ管理部３２は、通信制御部３９を介して、ＩＯ要求の発行元となる他のＣＰＵ２０ｂ〜２０ｄにＩＯ応答を送信する。
【００５６】
ここで、図７は、ＩＯ応答の一例を説明するための図である。図７に示すように、ＩＯ応答には、応答種別、アドレス、データが格納されている。ここで、応答種別とは、応答の内容を示すオペレーションコードである。また、アドレスとは、転送対象のデータが格納されたメモリアドレスである。また、データとは、転送対象のデータである。
【００５７】
一方、メモリ管理部３２は、取得したディレクトリ情報が「Ｒ−ＥＸ」である場合には、以下の処理を実行する。まず、メモリ管理部３２は、ＩＯ要求の発行元となる他のＣＰＵ２０ｂ〜２０ｄにデータを格納していないＩＯ応答を送信する。また、メモリ管理部３２は、Ｒ−ＣＰＵリファレンスビットを用いて、転送対象のデータを保持したＲ−ＣＰＵを識別する。そして、メモリ管理部３２は、図８に示すデータ転送要求を生成し、通信制御部３９を介して、データ転送要求を識別したＲ−ＣＰＵへ送信する。
【００５８】
図８は、データ転送要求の一例を説明するための図である。図８に示す例では、データ転送要求には、要求種別、Ｌ−ＣＰＵ−ＩＤ、Ｈ−ＣＰＵ−ＩＤ、アドレスが格納される。ここで、Ｈ−ＣＰＵ−ＩＤとは、Ｈ−ＣＰＵを示す識別子である。例えば、ＣＰＵ２０ａは、ＣＰＵ２０ｂがメモリ１０ｂから保持したデータに対するＩＯ要求を、ＣＰＵ２０ｃから受信する。このような場合は、ＣＰＵ２０ａは、ＣＰＵ２０ｂの識別子をＬ−ＣＰＵ−ＩＤとし、ＣＰＵ２０ａの識別子をＨ−ＣＰＵ−ＩＤとしたデータ転送要求をＲ−ＣＰＵであるＣＰＵ２０ｃへ送信する。
【００５９】
また、メモリ管理部３２は、データ転送要求を送信したＲ−ＣＰＵからデータ転送要求に対する応答として、図９に例示するようなデータ転送応答を受信する。図９は、データ転送応答の一例を説明するための図である。図９に示すように、データ転送応答には、要求種別と、アドレスとが格納される。ここで、データ転送応答のアドレスは、データ転送応答の要因となったデータ転送要求に格納されたアドレス、すなわち、転送対象のデータが格納されたアドレスと同一のアドレスである。
【００６０】
なお、メモリ管理部３２は、ＩＯ要求を受信した際にＩＯ応答を送信せずとも、従来と同様に、データ転送応答を受信した後で、ＩＯ要求の発行元となる他のＣＰＵ２０ｂ〜２０ｄにデータが格納されていないＩＯ応答を送信してもよい。
【００６１】
また、メモリ管理部３２は、従来と同様に、コア３７が他のＣＰＵ２０ｂ〜２０ｄが管理するメモリ上のデータを要求するコマンドを発行した場合には、データの転送を要求するリクエストをＨ−ＣＰＵに対して発行する。そして、メモリ管理部３２は、Ｈ−ＣＰＵ、またはＲ−ＣＰＵからデータとリクエスト応答とを受信した場合には、データを入力制御部３３に出力する。また、メモリ管理部３２は、メモリ１０ａが記憶するデータを他のＣＰＵ２０ｂ〜２０ｄに送信したり、ライトバック処理によりメモリ１０ａ上のデータを更新した場合には、その都度ディレクトリ情報を更新する。
【００６２】
図５に戻って、入力制御部３３は、コア３７からデータの読み出しや書き込みを要求するコマンドを受信すると、Ｌ２キャッシュＲＡＭ３１にコマンドの対象となるメモリアドレスを出力し、コマンドの対象となるデータを取得する。そして、入力制御部３３は、取得したデータをコマンド発行元のコア３７に出力する。また、入力制御部３３は、コマンドの対象となるデータがＬ２キャッシュＲＡＭ３１に保持されておらず、キャッシュミスが発生した場合には、メモリ管理部３２に対してデータの取得要求を発行する。
【００６３】
そして、入力制御部３３は、データをメモリ管理部３２から受信した場合には、受信したデータをＬ２キャッシュＲＡＭ３１に格納し、再度Ｌ２キャッシュＲＡＭ３１にメモリアドレスを出力してデータを取得する。その後、入力制御部３３は、取得したデータをコマンド発行元のコア３７に出力する。なお、入力制御部３３は、Ｌ２キャッシュＲＡＭ３１に格納されたデータのライトバックを行う場合には、Ｌ２キャッシュＲＡＭ３１から取得したデータをメモリ管理部３２に出力する。
【００６４】
出力制御部３４は、通信制御部３９を介して、他のＣＰＵ２０ｂ〜２０ｄが発行したデータ転送要求を受信した場合には、データ転送要求に含まれるアドレスをＬ２キャッシュＲＡＭ３１に出力し、転送対象のデータを取得する。そして、出力制御部３４は、取得したデータを格納したＩＯ応答を生成する。
【００６５】
また、出力制御部３４は、データ転送要求からＬ−ＣＰＵ−ＩＤを抽出し、抽出したＬ−ＣＰＵ−ＩＤがＣＰＵ２０ａのＩＤと同一であるか否かを判別する。すなわち、出力制御部３４は、Ｈ−ＣＰＵに対してＩＯ要求を発行したＬ−ＣＰＵと、Ｈ−ＣＰＵから転送対象のデータを保持したＲ−ＣＰＵとが同一であるか否かを判別する。
【００６６】
そして、出力制御部３４は、データ転送要求から抽出したＬ−ＣＰＵ−ＩＤがＣＰＵ２０ａのＩＤと同一であると判別した場合には、生成したＩＯ応答をＩＣ３５に対して直接出力する。一方、出力制御部３４は、Ｌ−ＣＰＵ−ＩＤがＣＰＵ２０ａのＩＤとは異なる場合には、通信制御部３９を介して、生成したＩＯ応答を、Ｌ−ＣＰＵ−ＩＤが示すＣＰＵに対して送信する。また、出力制御部３４は、ＩＯ応答をＩＣ３５や他のＣＰＵ２０ｂ〜２０ｄへ送信した場合には、データ転送応答を生成し、生成したデータ転送応答をデータ転送要求の送信元であるＨ−ＣＰＵに対して送信する。
【００６７】
ＩＣ３５は、ＰＣＩ制御部３６、およびＰＣＩｅ４を介して、ＣＰＵ２０ａ内におけるＩＯ処理を制御する。具体的には、ＩＣ３５は、各種ＩＯ装置のデータ取得処理を制御する。例えば、ＩＣ３５は、ＰＣＩ制御部３６を介して、ＰＣＩｅ４からデータの取得要求を受信した場合には、取得対象のデータが格納されたメモリアドレスが、メモリ１０ａのメモリアドレスであるか否かを判別する。そして、ＩＣ３５は、取得対象のデータが格納されたメモリアドレスがメモリ１０ａのメモリアドレスである場合には、メモリ管理部３２にデータの取得を要求する。
【００６８】
一方、ＩＣ３５は、取得対象のデータが格納されたメモリアドレスがメモリ１０ａのメモリアドレスではない場合は、取得対象のデータが格納されたメモリアドレスを含むＩＯ要求を生成する。そして、ＩＣ３５は、生成したＩＯ要求を通信制御部３９に出力する。
【００６９】
また、ＩＣ３５は、通信制御部３９や、出力制御部３４からＩＯ応答を受信した場合は、ＩＯ応答からデータを抽出し、ＰＣＩ制御部３６を介して、抽出したデータをＰＣＩｅ４に出力する。なお、ＩＣ３５は、データが格納されていないＩＯ応答を受信しただけでは、ＩＯ処理を終了せず、データが格納されたＩＯ応答を受信した場合にＩＯ処理を終了する。また、ＩＣ３５は、メモリ管理部３２からデータを取得した場合には、ＰＣＩ制御部３６を介して、取得したデータをＰＣＩｅ４に出力し、処理を終了する。
【００７０】
ＰＣＩ制御部３６は、ＰＣＩｅ４とＣＰＵ２０ａとのインタフェースであり、ＰＣＩｅ４における信号とＣＰＵ２０ａの内部信号との変換を行う。例えば、ＰＣＩ制御部３６は、ＰＣＩｅ４におけるシリアルデータと、ＣＰＵ２０ａの内部におけるパラレルデータとの相互変換や、ＰＣＩｅ４における各種通信制御を実行する。
【００７１】
複数のコア３７は、各種演算処理を実行するプロセッサコアであり、Ｌ２キャッシュ部３０が有するＬ２キャッシュＲＡＭ３１が保持した各種データを用いて、演算処理を実行する。例えば、コア３７は、Ｌ２キャッシュ部３０にコマンドを発行してデータを取得し、取得したデータを用いて演算処理を実行する。なお、複数のコア３７は、Ｌ２キャッシュ部３０が保持したデータを保持するＬ１キャッシュを有してもよい。
【００７２】
ＭＡＣ３８は、メモリ１０ａに対するメモリアクセスを制御するメモリアクセスコントローラである。例えば、ＭＡＣ３８は、メモリ１０ａにアクセスし、Ｌ２キャッシュ部３０が発行したメモリアドレスに格納されたデータを抽出し、抽出したデータをＬ２キャッシュ部３０に出力する。
【００７３】
通信制御部３９は、ＸＢ２ａを介して、ＣＰＵ２０ａと各ＣＰＵ２０ｂ〜２０ｄとの間の通信を制御する。また、通信制御部３９は、ＣＰＵ２０ａとＳＢ３ａが有するＣＰＵ２０ｂ〜２０ｄとの間の通信を制御する。例えば、通信制御部３９は、リクエスト、リクエスト応答、データ転送要求、データ転送応答、ＩＯ要求、ＩＯ応答等、ＣＰＵ間で送受信される各種メッセージをコヒーレント制御部２５から受信すると、受信したメッセージの送信先となるＣＰＵを判別する。
【００７４】
そして、通信制御部３９は、メッセージの送信先となるＣＰＵに応じて、各種メッセージをＣＰＵ２０ｂ〜２０ｄ、またはＸＢ２ａに対して出力する。詳細には、通信制御部３９は、パラレルデータとして各種メッセージをコヒーレント制御部２５から受信すると、受信した各種メッセージをシリアルデータに変換し、複数のレーンを介して、変換後のシリアルデータを送信する。また、通信制御部３９は、他のＣＰＵ２０ｂ〜２０ｄ、またはＸＢ２ａから各種メッセージを受信すると、受信したメッセージをコヒーレント制御部２５へ送信する。
【００７５】
なお、通信制御部３９がメッセージの送信先となるＣＰＵを識別する処理については、任意の手法が考えられるが、例えば、以下のような処理が考えられる。まず、情報処理装置１は、全てのメモリに対して同一のメモリアドレス空間をマッピングする。また、通信制御部３９は、各メモリアドレスと、各メモリアドレスをマッピングしたメモリを管理するＣＰＵの識別子を対応付けたテーブルを有する。そして、通信制御部３９は、テーブルを閲覧し、各種メッセージにより処理の対象となるメモリアドレスと対応付けられたＣＰＵを判別する。
【００７６】
次に、図１０を用いて、ＣＰＵ２０ａがＬ−ＣＰＵ、およびＲ−ＣＰＵとして動作する際のデータ転送の流れを説明する。図１０は、実施例１に係るＣＰＵによるデータ転送の流れを説明するための図である。なお、図１０、および図１１に示す例では、ＣＰＵ２０ａは、Ｈ−ＣＰＵであるＣＰＵ２０ｂに対してＩＯ要求の発行を行うＬ−ＣＰＵであり、かつ、ＣＰＵ２０ｂが管理するメモリ１０ｂからデータを保持したＲ−ＣＰＵでもあるものとする。
【００７７】
また、ＣＰＵ２０ａは、メモリ１０ｂから保持したデータを更新したものとする。また、ＣＰＵ２０ｂは、ＣＰＵ２０ａのＬ２キャッシュ部３０と同様の機能を有するＬ２キャッシュ部４０を有するものとする。
【００７８】
例えば、ＣＰＵ２０ａのＩＣ３５は、ＰＣＩｅ４からメモリ１０ｂ上のデータの取得要求を受信すると、ＩＯ要求をＣＰＵ２０ｂのＬ２キャッシュ部４０に出力する。すると、Ｌ２キャッシュ部４０は、メモリ１０ｂにアクセスし、ディレクトリステートが「Ｒ−ＥＸ」であると判別する。そして、Ｌ２キャッシュ部４０は、Ｒ−ＣＰＵであるＣＰＵ２０ａのＬ２キャッシュ部３０にデータ転送要求を送信する。
【００７９】
すると、Ｌ２キャッシュ部３０は、データ転送要求に格納されたＬ−ＣＰＵ−ＩＤがＣＰＵ２０ａのＩＤと同一であるか否かを判別し、同一である場合には、データが格納されたＩＯ応答をＣＰＵ２０ａのＩＣ３５に出力する。また、Ｌ２キャッシュ部３０は、ＣＰＵ２０ｂのＬ２キャッシュ部３０に対してデータ転送応答を送信する。そして、Ｌ２キャッシュ部４０は、ＩＣ３５に対してデータが格納されていないＩＯ応答を送信し、処理を終了する。
【００８０】
次に、図１１を用いて、ＣＰＵ２０ａ、およびＣＰＵ２０ｂがデータを転送するタイミングについて説明する。図１１は、実施例１に係るＣＰＵが実行するデータ転送の流れを説明するためのタイムチャートである。例えば、ＩＣ３５は、ＣＰＵ２０ｂのＬ２キャッシュ部４０に対して、ＩＯ要求を発行する（ステップＳ１）。次に、Ｌ２キャッシュ部４０は、ＩＣ３５に対してデータが格納されていないＩＯ応答を送信し（ステップＳ２）、ＣＰＵ２０ａのＬ２キャッシュ部３０に対して、データ転送要求を発行する（ステップＳ３）。
【００８１】
すると、Ｌ２キャッシュ部３０は、データの転送先であるＬ−ＣＰＵがＲ−ＣＰＵであるＣＰＵ２０ａであると判別し、ＩＣ３５に対してデータを格納したＩＯ要求を出力する（ステップＳ４）。また、Ｌ２キャッシュ部３０は、ＣＰＵ２０ｂのＬ２キャッシュ部４０にデータ転送応答を発行し（ステップＳ５）処理を終了する。
【００８２】
このように、ＣＰＵ２０ａは、Ｒ−ＣＰＵとしてデータ転送要求を受信した際に、自身がＬ−ＣＰＵである場合には、データとＩＯ応答とを、Ｌ２キャッシュ部３０からＩＣ３５に出力させる。このため、ＩＣ３５は、２回のＣＰＵ間転送でＩＯ応答とデータとを受信することができる。この結果、ＣＰＵ２０ａは、データ転送の効率を向上させることができる。
【００８３】
次に、図１２、および図１３を用いて、ＣＰＵ２０ａがデータ転送の効率を向上させる点について説明する。まず、図１２を用いて、Ｒ−ＣＰＵとＬ−ＣＰＵとが同じＣＰＵである際に、従来のＣＰＵがデータ転送に要する時間を説明する。図１２は、従来のＣＰＵによるデータ転送を説明するためのフローである。なお、図１２には、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵである際に、従来のＣＰＵが実行するデータ転送の流れについて記載した。
【００８４】
例えば、従来のＬ−ＣＰＵ＝Ｒ−ＣＰＵは、ＩＯ要求をＨ−ＣＰＵに対して送信する。すると、従来のＨ−ＣＰＵは、データ転送要求をＬ−ＣＰＵ＝Ｒ−ＣＰＵに対して送信する。ここで、従来のＬ−ＣＰＵ＝Ｒ−ＣＰＵは、ＩＣとＬ２キャッシュ部との間にデータを送受信する経路を有さなかったので、データを格納したデータ転送応答をＨ−ＣＰＵに対して送信する。
【００８５】
そして、従来のＨ−ＣＰＵは、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵに対して、データとＩＯ応答とを送信する。このように、従来のＣＰＵは、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵである場合は、Ｌ−ＣＰＵがＩＯ要求を発行してからデータを受信するまでの間に４回のＣＰＵ間通信が行われるので、データ転送の効率が悪化する。
【００８６】
一方、図１３は、実施例１に係るＣＰＵが実行するデータ転送の流れを説明するためのフローである。図１３に示すように、ＣＰＵ２０ａのＩＣ３５は、Ｈ−ＣＰＵ２０ｂのＬ２キャッシュ部４０に対してＩＯ要求を送信する。するとＬ２キャッシュ部４０は、ＩＣ３５にデータ無しのＩＯ応答を送信し、ＣＰＵ２０ａのＬ２キャッシュ部３０にデータ転送要求を発行する。この結果、Ｌ２キャッシュ部３０は、ＩＯ応答とデータとをＩＣ３５に出力し、データ転送応答をＬ２キャッシュ部４０に対して送信する。
【００８７】
このように、ＣＰＵ２０ａは、データ転送要求を受信した際にＬ−ＣＰＵがＣＰＵ２０ａであるか否かを判別し、Ｌ−ＣＰＵがＣＰＵ２０ａである場合には、Ｌ２キャッシュ部３０からＩＯ応答とデータとをＩＣ３５に出力させる。この結果、ＣＰＵ２０ａは、ＩＯ要求を発行してから２回のＣＰＵ間通信でデータを受信することができるので、データ転送の効率を向上させることができる。
【００８８】
また、ＣＰＵ２０ａは、Ｌ−ＣＰＵがＣＰＵ２０ａではないと判別した場合は、データを格納したＩＯ応答をＲ−ＣＰＵのＩＣへ送信する。このため、ＣＰＵ２０ａは、従来と同様に、Ｌ−ＣＰＵとＲ−ＣＰＵとが異なる場合にも、３回のＣＰＵ間通信で、データの転送を行う事ができる。
【００８９】
また、ＣＰＵ２０ａは、Ｌ−ＣＰＵとしてＩＯ要求を発行する際にＣＰＵ２０ａがデータを保持しているか否かを判別するのではなく、Ｒ−ＣＰＵとしてＨ−ＣＰＵからデータ転送要求を受信した際に自身がＬ−ＣＰＵであるか否かを判別する。すなわち、ＣＰＵ２０ａは、ＩＯ要求を一度Ｈ−ＣＰＵに対して送信する。このため、ＣＰＵ２０ａは、各ＣＰＵ２０ａ〜２０ｄにおける処理の論理を容易にすることができる。
【００９０】
以下、図１４〜図１７を用いて、ＣＰＵ２０ａがＩＯ要求をＨ−ＣＰＵに送信することで、処理の論理を容易にする点について説明する。まず、図１４〜図１６を用いて、Ｌ−ＣＰＵでもあるＲ−ＣＰＵがＨ−ＣＰＵを介さずに処理を実行した場合の問題について説明する。図１４は、Ｈ−ＣＰＵを介さないデータ転送の流れを説明するための図である。
【００９１】
例えば、図１４に示すように、ＩＣとＬ２キャッシュ部との間にデータを送受信する経路が存在する場合は、ＩＣからＩＯ要求をＬ２キャッシュ部に出力し、Ｌ２キャッシュ部からデータをＩＣに出力する手法が考えられる。しかしながら、ＩＯ要求をＨ−ＣＰＵに発行しない場合には、転送処理がＬ−ＣＰＵの内部のみで完結してしまうため、ディレクトリ情報に基づいた処理を行うことができない。そこで、転送対象のキャッシュステートに基づいた処理が考えられる。
【００９２】
図１５は、Ｈ−ＣＰＵを介さないデータ転送の流れを説明するためのタイムチャートである。図１５に示すように、ＩＣは、Ｈ−ＣＰＵに対してＩＯ要求を発行しない場合は、Ｌ２キャッシュ部にＩＯ要求を発行する（ステップＳ１１）。そしてＬ２キャッシュ部は、転送対象となるデータのキャッシュステートが「Ｅ」、「Ｍ」、「Ｓ」の場合は、データが保持されているため、データをＩＣに出力する。（ステップＳ１２）。
【００９３】
しかしながら、転送対象となるデータのキャッシュステートが「Ｉ」である場合には、Ｌ２キャッシュ部は、データをＩＣに出力することができない。そこで、ＩＣは、Ｌ２キャッシュ部に対するＩＯ要求がキャッシュミスにより完了しなかった場合は、図１６に示すように、ＩＯ要求をＨ−ＣＰＵのＬ２キャッシュ部に送信することとなる。
【００９４】
図１６は、キャッシュステートが「Ｉ」である場合のデータの流れを説明するための図である。例えば、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵは、キャッシュステートが「Ｉ」であった場合は、ＩＯ要求をＨ−ＣＰＵのＬ２キャッシュ部へ送信する。すると、Ｈ−ＣＰＵのＬ２キャッシュ部は、メモリに格納されたディレクトリ情報を確認し、ディレクトリ情報が「Ｌ」であった場合には、ＩＯ応答とデータとをＩＣへ送信する。そして、Ｈ−ＣＰＵのＬ２キャッシュは、ディレクトリ情報が「Ｒ−ＥＸ」や「Ｒ−ＳＨ」である場合は、Ｒ−ＣＰＵにデータ転送要求を行う。
【００９５】
図１７は、キャッシュステートが「Ｉ」である場合のデータの流れを説明するためのタイムチャートである。例えば、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵのＩＣは、キャッシュミスが発生した際に、Ｈ−ＣＰＵのＬ２キャッシュ部に対してＩＯ要求を送信する（ステップＳ２１）。すると、Ｈ−ＣＰＵのＬ２キャッシュ部は、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵのＩＣに対して、ＩＯ応答とデータとを送信する（ステップＳ２２）。
【００９６】
このように、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵのＩＣは、ＩＣとＬ２キャッシュ部との間にデータを転送する経路が存在しても、Ｈ−ＣＰＵにＩＯ要求を送信しない場合には、キャッシュステートに応じてＩＯ要求の発行先を変更する処理を行わなくてはならない。さらに、ＩＯ要求を受信したＨ−ＣＰＵにおいても、ディレクトリ情報に応じた処理の分岐が存在する。この結果、各ＣＰＵが実行する処理が複雑化してしまう。
【００９７】
しかしながら、実施例１に係るＣＰＵ２０ａは、自身がＲ−ＣＰＵであるか否かに係らず、ＩＯ要求を一端Ｈ−ＣＰＵのＬ２キャッシュ部４０へ送信する。この結果、ＣＰＵ２０ａは、Ｌ２キャッシュ部４０におけるディレクトリ情報に応じた分岐のみを考慮すればよい。この結果、ＣＰＵ２０ａは、実行する処理が単純であるため、回路の設計や検証を容易にすることができる。
【００９８】
なお、Ｈ−ＣＰＵのＬ２キャッシュ部４０がディレクトリ情報に応じて、Ｒ−ＣＰＵにデータ転送要求を送信する処理は、従来も行われている。このため、ＣＰＵ２０ａは、Ｒ−ＣＰＵとしてデータ転送要求を受信した際に、ＣＰＵ２０ａがＬ−ＣＰＵであるか否かを判別する処理を行う場合は、Ｈ−ＣＰＵが実行する処理をそのままに、データの転送性能を向上させることができる。
【００９９】
また、ＣＰＵ２０ａは、ＩＯ要求をＨ−ＣＰＵのＬ２キャッシュ部４０に送信するので、ＩＣ３５とコア３７とが同一メモリアドレスのデータを要求するすれ違いケースが発生した際に、実行する処理の分岐を考慮せずとも、適切にデータ転送を行う事ができる。以下、すれ違いケースが発生した際にＣＰＵ２０ａが実行する処理について説明する。
【０１００】
図１８は、キャッシュステートが「Ｉ」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するための図である。例えば、コア３７は、データを排他的に保持するため、キャッシュステート「Ｅ」でデータの転送を要求するデータ要求（Ｅ）をＬ２キャッシュ部３０に発行する。
【０１０１】
すると、Ｌ２キャッシュ部３０は、データ要求（Ｅ）をＬ２キャッシュ部４０に発行する。すると、Ｌ２キャッシュ部４０は、Ｌ２キャッシュ部３０にデータ応答（Ｅ）とデータとを送信する。その後、Ｌ２キャッシュ部３０は、データ応答（Ｅ）とデータとをコア３７に送信する。
【０１０２】
ここで、ＩＯ処理の途中でデータ要求（Ｅ）をコア３７が発行した場合は、Ｌ２キャッシュ部３０におけるキャッシュステートが変化する。このため、従来のＬ−ＣＰＵ＝Ｒ−ＣＰＵでは、ＩＯ処理の途中でＬ−ＣＰＵにおけるデータのキャッシュステートが変化した場合には、処理の分岐が発生してしまう。
【０１０３】
しかしながら、実施例１に係るＩＣ３５は、ＩＯ要求をＨ−ＣＰＵであるＣＰＵ２０ｂのＬ２キャッシュ部４０に発行する。すると、Ｌ２キャッシュ部４０は、すれ違い処理が発生した場合にも、コア３７が発行したデータ要求（Ｅ）によるステートの変化を反映させた動作を行うことができる。この結果、ＣＰＵ２０ａは、ＩＯ要求をＨ−ＣＰＵのＬ２キャッシュ部４０に出力することで、すれ違い処理を考慮せずとも、キャッシュステートに応じたデータ転送処理を実現することができる。
【０１０４】
次に、図１９を用いて、すれ違い処理が発生した際にＣＰＵ２０ａが実行する処理の流れについて説明する。図１９は、キャッシュステートが「Ｉ」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのタイムチャートである。例えば、コア３７は、Ｌ２キャッシュ部３０に対して、データ要求（Ｅ）を発行する（ステップＳ３１）。
【０１０５】
次に、Ｌ２キャッシュ部３０は、Ｈ−ＣＰＵとして動作するＣＰＵ２０ｂのＬ２キャッシュ部４０にデータ要求（Ｅ）を送信する（ステップＳ３２）。すると、Ｌ２キャッシュ部４０は、Ｌ−ＣＰＵ＝Ｒ−ＣＰＵとして動作するＣＰＵ２０ａにデータ応答（Ｅ）を発行する。そして、Ｌ２キャッシュ部３０は、コア３７にデータ応答（Ｅ）とデータとを出力する。
【０１０６】
ここで、ＩＣ３５は、Ｌ２キャッシュ部３０がデータ要求（Ｅ）を発行した少し後に、ＩＯ装置からデータの取得要求を受信すると、データのキャッシュステートが「Ｉ」であるため、ＩＯ要求をＬ２キャッシュ部４０に送信する。すると、Ｌ２キャッシュ部４０は、ＣＰＵ２０ａがＲ−ＣＰＵであると判別し、Ｌ２キャッシュ部３０にデータ転送要求を発行する。
【０１０７】
そして、Ｌ２キャッシュ部３０は、ＣＰＵ２０ａがＬ−ＣＰＵであると判断し、データとＩＯ応答とをＩＣ３５に出力し（ステップＳ３７）、データ転送応答をＬ２キャッシュ部４０に送信し（ステップＳ３８）、処理を終了する。なお、Ｌ２キャッシュ部４０は、データ転送要求を受信した場合には、ＩＣ３５に対して、データが格納されていないＩＯ応答を送信するが（ステップＳ３９）、この処理は、データ転送応答の受信後に行っても良い。
【０１０８】
ここで、図１９中の直線矢印と点線矢印とに示すように、データ要求（Ｅ）に係るステップＳ３１〜Ｓ３４の処理と、ＩＯ要求に係るステップＳ３５〜Ｓ３９の処理は、すれ違いが発生していない際に実行する処理と同様の処理が並行して行われる。このため、ＣＰＵ２０ａは、すれ違い処理を考慮せずとも、通常のデータ転送処理のみで、データ要求に係る処理とＩＯ要求に係る処理とを実現することができる。この結果、ＣＰＵ２０ａは、設計を容易にすることができる。
【０１０９】
次に、図２０を用いて、Ｈ−ＣＰＵにおけるキャッシュステートの遷移について説明する。図２０は、キャッシュステートが「Ｉ」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのフローである。例えば、図２０に示すように、ＬＣＰＵ＝Ｒ−ＣＰＵのコア３７は、データ要求（Ｅ）を発行する。
【０１１０】
すると、Ｌ２キャッシュ部３０は、キャッシュステートが「Ｉ」であるので、データ要求（Ｅ）を発行する。すると、Ｌ２キャッシュ部４０は、ディレクトリステートを「Ｌ」から「Ｒ−ＥＸ」に更新し、データ応答（Ｅ）とデータとをＬ２キャッシュ部３０に送信する。すると、Ｌ２キャッシュ部３０は、データをキャッシュステート「Ｅ」で保持し、データ応答（Ｅ）とデータとをコア３７に出力する。
【０１１１】
ここで、ＩＣ３５は、データ応答（Ｅ）をＬ２キャッシュ部３０が保持する前に、ＣＰＵ２０ａがデータを保持しているか判別することなく、ＩＯ要求をＬ２キャッシュ部４０に発行する。すると、Ｌ２キャッシュ部４０は、ディレクトリステートが「Ｒ−ＥＸ」であるため、データ転送要求をＬ２キャッシュ部３０に出力し、データが格納されていないＩＯ応答をＩＣ３５に出力する。
【０１１２】
ここではじめて、Ｌ２キャッシュ部３０は、ＣＰＵ２０ａがＬ−ＣＰＵであるか否かを判別し、ＣＰＵ２０ａがＬ−ＣＰＵであると判別した場合には、ＩＣ３５にデータとＩＯ応答とを出力する。このため、ＣＰＵ２０ａは、すれ違い処理を考慮せずともよいので、設計を容易にすることができる。
【０１１３】
次に、図２１を用いて、各種メッセージを受信した際にＬ２キャッシュ部３０が実行する処理の流れについて説明する。図２１は、リクエストを受信した際にＬ２キャッシュ部が実行する処理の流れを説明するためのフローチャートである。なお、図２１に示す処理の流れは、Ｌ２キャッシュ部３０がＩＯ要求、またはデータ転送要求を受信した際に実行する処理の流れである。すなわち、Ｌ２キャッシュ部３０は、ＩＯ要求やデータ転送要求の他にも、様々な種別のメッセージを受信する。そして、Ｌ２キャッシュ部３０は、各種メッセージを受信すると、受信したメッセージの要求種別を判別し、判別した要求種別がＩＯ要求、またはデータ転送要求である場合には、以下の処理を実行する。
【０１１４】
例えば、Ｌ２キャッシュ部３０は、受信したメッセージがＩＯ要求であるか否かを判別する（ステップＳ１０１）。次に、Ｌ２キャッシュ部３０は、受信したメッセージがＩＯ要求ではないと判別した場合は（ステップＳ１０１否定）、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵであるか否かを判別する（ステップＳ１０２）。すなわち、Ｌ２キャッシュ部３０は、受信したメッセージがデータ転送要求であった場合は、Ｌ−ＣＰＵがＣＰＵ２０ａであるか否かを判別する。
【０１１５】
そして、Ｌ２キャッシュ部３０は、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵであると判別した場合は（ステップＳ１０２肯定）、自装置のＩＣ３５にＩＯ応答とデータとを送信する（ステップＳ１０３）。次に、Ｌ２キャッシュ部３０は、Ｈ−ＣＰＵのＬ２キャッシュ部にデータ転送応答を送信し（ステップＳ１０４）、処理を終了する。一方、Ｌ２キャッシュ部３０は、Ｌ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵではない場合には（ステップＳ１０２否定）、Ｌ−ＣＰＵのＩＣへＩＯ応答とデータとを送信し（ステップＳ１０５）、Ｈ−ＣＰＵのＬ２キャッシュ部にデータ転送応答を送信する（ステップＳ１０４）。
【０１１６】
また、Ｌ２キャッシュ部３０は、受信したメッセージがＩＯ要求である場合は（ステップＳ１０１肯定）、ＭＡＣ３８にデータを要求し（ステップＳ１０６）、ＭＡＣ３８がメモリ１０ａから取得したデータを受信する（ステップＳ１０７）。次に、Ｌ２キャッシュ部３０は、ディレクトリステータスが「Ｒ−ＥＸ」であるか否かを判別する（ステップＳ１０８）。
【０１１７】
そして、Ｌ２キャッシュ部３０は、ディレクトリステータスが「Ｒ−ＥＸ」ではない場合は（ステップＳ１０８否定）、Ｌ−ＣＰＵにＩＯ応答とデータとを送信し（ステップＳ１０９）、処理を終了する。すなわち、Ｌ２キャッシュ部３０は、転送対象のデータが他のＣＰＵ２０ｂ〜２０ｄに保持されていない場合には、Ｌ−ＣＰＵにデータをそのまま送信する。一方、Ｌ２キャッシュ部３０は、ディレクトリステータスが「Ｒ−ＥＸ」である場合は（ステップＳ１０８肯定）、データを保持したＲ−ＣＰＵにデータ転送要求を送信し（ステップＳ１１０）、Ｌ−ＣＰＵにＩＯ応答を送信し（ステップＳ１１１）、処理を終了する。
【０１１８】
［実施例１の効果］
上述したように、ＣＰＵ２０ａは、ＩＯ処理の制御を行うＩＣ３５と、Ｌ２キャッシュ部３０とを有する。また、ＩＣ３５は、他のＣＰＵ２０ｂ〜２０ｄに対して、データの転送を要求するＩＯ要求を送信する。そして、Ｌ２キャッシュ部３０は、他のＣＰＵ２０ｂ〜２０ｄからデータ転送要求を受信した場合には、データの転送先となるＬ−ＣＰＵがＣＰＵ２０ａであるか否かを判別する。その後、Ｌ２キャッシュ部３０は、Ｌ−ＣＰＵがＣＰＵ２０ａである場合、すなわち、ＣＰＵ２０ａがＬ−ＣＰＵ、およびＲ−ＣＰＵの両方である場合には、データとＩＯ応答とをＩＣ３５に出力する。
【０１１９】
例えば、ＣＰＵ２０ａは、メモリ１０ｂに接続されたＣＰＵ２０ｂと、各種ＩＯ装置と接続されており、メモリ１０ｂからデータを読み出して保持するＬ２キャッシュＲＡＭ３１を有する。また、ＣＰＵ２０ａは、各種ＩＯ装置によるデータの取得を制御するとともに、ＩＯ装置からメモリ１０ｂが記憶するデータの転送を要求するリクエストを受信すると、対象となるデータの転送を要求するＩＯ要求をＣＰＵ２０ｂに送信するＩＣ３５を有する。また、ＣＰＵ２０ａは、Ｌ２キャッシュＲＡＭ３１を制御するＬ２キャッシュ部３０を有する。ここで、Ｌ２キャッシュ部３０は、ＣＰＵ２０ｂからＩＯ応答と対象データとの転送を指示するデータ転送要求を受信した場合には、ＩＯ応答の宛先がＣＰＵ２０ａであるか否かを判別する。そして、Ｌ２キャッシュ部３０は、ＩＯ応答の宛先がＣＰＵ２０ａであると判別した場合には、ＩＯ応答と対象データとをＩＣ３５へ出力する。
【０１２０】
このため、ＣＰＵ２０ａは、ＩＣ３５がＩＯ要求を発行してからデータを受信するまでのＣＰＵ間通信の回数を２回に抑えることができるので、データ転送性能を向上させることができる。また、ＣＰＵ２０ａは、ＩＯ要求を一端Ｈ−ＣＰＵに送信し、データ転送要求を受信した際にＬ−ＣＰＵとＲ−ＣＰＵとが同一のＣＰＵであるかを判別するので、各ＣＰＵが実行する処理の分岐を削減することができる。この結果、ＣＰＵ２０ａは、回路設計や検証を容易にすることができる。
【０１２１】
また、ＣＰＵ２０ａは、Ｌ−ＣＰＵがＣＰＵ２０ａではないと判別した場合には、データ転送要求が示すＬ−ＣＰＵに対して、ＩＯ応答とデータとを送信する。すなわち、ＣＰＵ２０ａは、ＩＯ応答の宛先が自装置ではないと判別した場合は、ＩＯ応答と対象データとをＬ−ＣＰＵとして動作する他のＣＰＵへ送信する。このため、ＣＰＵ２０ａは、Ｌ−ＣＰＵとＲ−ＣＰＵとが異なる場合にも、ＣＰＵ間通信の回数を３回に抑えるので、データ転送性能を向上させることができる。
【０１２２】
また、ＣＰＵ２０ａは、Ｈ−ＣＰＵに対してデータ転送応答を出力する。このため、ＣＰＵ２０ａは、データの転送が行われたことをＨ−ＣＰＵに識別させることができる。
【０１２３】
また、ＣＰＵ２０ａは、Ｌ−ＣＰＵ−ＩＤが格納されたデータ転送要求を受信し、データ転送要求に格納されたＬ−ＣＰＵ−ＩＤがＣＰＵ２０ａのＩＤと一致するか否かを判別する。つまり、ＣＰＵ２０ａは、ＩＯ応答の宛先となるＣＰＵのＩＤがＣＰＵ２０ａのＩＤであるか否かを判別する。そして、ＣＰＵ２０ａは、データ転送要求に格納されたＬ−ＣＰＵ−ＩＤがＣＰＵ２０ａのＩＤと一致する場合は、ＣＰＵ２０ａがＬ−ＣＰＵであると判別する。このため、ＣＰＵ２０ａは、容易に、自身がＬ−ＣＰＵであるか否かを容易に判別することができる。
【０１２４】
また、ＣＰＵ２０ａのＩＣ３５は、データが格納された応答を受信した場合には、ＩＯ要求に係る処理が終了したと判別する。このため、ＣＰＵ２０ａは、データを受信していないにも係らず、ＩＯ要求に係る処理が終了したことによるエラー等の発生を防ぐことができる。
【実施例２】
【０１２５】
これまで本発明の実施例について説明したが、実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【０１２６】
（１）各メッセージのフォーマットについて
上述した実施例１では、図６〜図９に各メッセージのフォーマットを例示した。しかし、実施例はこれに限定されるものではなく、ＣＰＵ２０ａは、任意のフォーマットを有するメッセージを発行しても良い。
【０１２７】
（２）実施形態について
上述したＬ２キャッシュ部３０のＬ２キャッシュＲＡＭ３１、メモリ管理部３２、入力制御部３３、出力制御部３４の機能は、矛盾しない範囲で組み合わせて実施することができる。例えば、Ｌ２キャッシュ部３０は、入力制御部３３と出力制御部３４とが発揮する機能を有する入出力制御部を有してもよい。
【０１２８】
また、図１に示した情報処理装置１の構成は、あくまで一例であり、情報処理装置１は、任意の数のＳＢ、および任意の数のＣＰＵを有し、各ＣＰＵがＣＰＵ２０ａと同様の機能を発揮することとしてもよい。また、全てのＣＰＵがＣＰＵ２０ａと同様の機能を発揮しなくともよい。例えば、情報処理装置１が有するＣＰＵのうち、一部のＣＰＵのみがメモリと接続されている場合は、メモリと接続されたＣＰＵのみがＣＰＵ２０ａと同様の機能を発揮すればよい。また、他のＣＰＵについては、ＣＰＵ２０ａが発揮する機能のうち、Ｌ−ＣＰＵ、およびＲ−ＣＰＵとして動作する機能を有すればよい。
【０１２９】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１３０】
（付記１）主記憶装置に接続される第１の演算処理装置と入出力装置とに接続する演算処理装置において、
前記主記憶装置からのデータを保持するキャッシュメモリと、
前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第１の演算処理装置に出力する第１の制御部と、
前記キャッシュメモリを制御するとともに、前記第１の演算処理装置に出力した入出力要求に基づいて前記第１の演算処理装置が出力する応答と対象データとを転送する指示を、前記第１の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第１の制御部に対して出力する第２の制御部を有することを特徴とする演算処理装置。
【０１３１】
（付記２）前記第２の制御部は、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第１の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする付記１に記載の演算処理装置。
【０１３２】
（付記３）前記第２の制御部は、前記第１の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする付記１または２に記載の演算処理装置。
【０１３３】
（付記４）前記第２の制御部は、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする付記１−３のいずれか１つに記載の演算処理装置。
【０１３４】
（付記５）前記第１の制御部は、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする付記１−４のいずれか１つに記載の演算処理装置。
【０１３５】
（付記６）主記憶装置に接続された第１の演算処理装置と、
入出力装置に接続された第２の演算処理装置と
を有する情報処理装置において、
前記第２の演算処理装置は、
前記主記憶装置からデータを読み出して保持するキャッシュメモリと、
前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第１の演算処理装置に出力する第１の制御部と、
前記キャッシュメモリを制御するとともに、前記第１の演算処理装置に出力した入出力要求に基づいて前記第１の演算処理装置が出力する応答と対象データとを転送する指示を、前記第１の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第１の制御部に対して出力する第２の制御部とを有することを特徴とする情報処理装置。
【０１３６】
（付記７）前記第２の制御部は、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第１の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする付記６に記載の情報処理装置。
【０１３７】
（付記８）前記第２の制御部は、前記第１の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする付記６または７に記載の情報処理装置。
【０１３８】
（付記９）前記第２の制御部は、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする付記６−８のいずれか１つに記載の情報処理装置。
【０１３９】
（付記１０）前記第１の制御部は、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする付記６−９のいずれか１つに記載の情報処理装置。
【０１４０】
（付記１１）主記憶装置に接続される第１の演算処理装置と入出力装置に接続するとともに、前記主記憶装置からのデータを保持するキャッシュメモリを有する演算処理装置の制御方法において、
前記演算処理装置が有する第１の制御部が、前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第１の演算処理装置に出力し、
前記演算処理装置が有する第２の制御部が、前記キャッシュメモリを制御するとともに、前記第１の演算処理装置に出力した入出力要求に基づいて前記第１の演算処理装置が出力する応答と対象データとを転送する指示を、前記第１の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別し、
前記第２の制御部が、前記宛先が自装置であると判別した場合、前記入出力要求に対する応答と対象データとを前記第１の制御部に対して出力することを特徴とする演算処理装置の制御方法。
【０１４１】
（付記１２）前記第２の制御部が、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第１の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする付記１１に記載の演算処理装置の制御方法。
【０１４２】
（付記１３）前記第２の制御部が、前記第１の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする付記１１または１２に記載の演算処理装置の制御方法。
【０１４３】
（付記１４）前記第２の制御部が、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする付記１１−１３のいずれか１つに記載の演算処理装置の制御方法。
【０１４４】
（付記１５）前記第１の制御部が、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする付記１１−１４のいずれか１つに記載の演算処理装置の制御方法。
【符号の説明】
【０１４５】
１  情報処理装置
２ａ、２ｂ  ＸＢ
３ａ〜３ｈ  ＳＢ
４  ＰＣＩｅ
１０ａ〜１０ｄ  メモリ
２０ａ〜２０ｄ  ＣＰＵ
３０、４０  Ｌ２キャッシュ部
３１  Ｌ２キャッシュＲＡＭ
３２  メモリ管理部
３３  入力制御部
３４  出力制御部
３５  ＩＣ
３６  ＰＣＩ制御部
３７  コア
３８  ＭＡＣ
３９  通信制御部
【図１】
2014048986.tif 000003
【図２】
2014048986.tif 000004
【図３】
2014048986.tif 000005
【図４】
2014048986.tif 000006
【図５】
2014048986.tif 000007
【図６】
2014048986.tif 000008
【図７】
2014048986.tif 000009
【図８】
2014048986.tif 000010
【図９】
2014048986.tif 000011
【図１０】
2014048986.tif 000012
【図１１】
2014048986.tif 000013
【図１２】
2014048986.tif 000014
【図１３】
2014048986.tif 000015
【図１４】
2014048986.tif 000016
【図１５】
2014048986.tif 000017
【図１６】
2014048986.tif 000018
【図１７】
2014048986.tif 000019
【図１８】
2014048986.tif 000020
【図１９】
2014048986.tif 000021
【図２０】
2014048986.tif 000022
【図２１】
2014048986.tif 000023
【図２２】
2014048986.tif 000024
【図２３】
2014048986.tif 000025
【図２４】
2014048986.tif 000026
【図２５】
2014048986.tif 000027
【図２６】
2014048986.tif 000028
【図２７】
2014048986.tif 000029
【手続補正書】
【提出日】平成25年4月18日(2013.4.18)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】変更
【補正の内容】
【００１７】
【非特許文献１】Computer  Architecture:  A  Quantitative  Approach,  4th  Edition,  John  L.  Hennessy,David  A.  Patterson, pp.230-237