JP6028470B2 - 演算処理装置、情報処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置、情報処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP6028470B2
JP6028470B2 JP2012192692A JP2012192692A JP6028470B2 JP 6028470 B2 JP6028470 B2 JP 6028470B2 JP 2012192692 A JP2012192692 A JP 2012192692A JP 2012192692 A JP2012192692 A JP 2012192692A JP 6028470 B2 JP6028470 B2 JP 6028470B2
Authority
JP
Japan
Prior art keywords
cpu
data
arithmetic processing
response
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012192692A
Other languages
English (en)
Other versions
JP2014048986A (ja
Inventor
光一 小野寺
光一 小野寺
徹 引地
徹 引地
小島 広行
広行 小島
亮太郎 藤
亮太郎 藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012192692A priority Critical patent/JP6028470B2/ja
Priority to US13/905,024 priority patent/US20140068179A1/en
Publication of JP2014048986A publication Critical patent/JP2014048986A/ja
Application granted granted Critical
Publication of JP6028470B2 publication Critical patent/JP6028470B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、演算処理装置、情報処理装置および演算処理装置の制御方法に関する。
従来、メモリと、メモリ上のデータを管理する演算処理装置としてのCPU(Central Processing Unit)との組を複数有し、各CPUが各メモリを共有するNUMA(Non Uniform Memory Access)の技術が知られている。このようなNUMAの技術の一例として、各CPUが、ディレクトリを用いて、自身と接続されたメモリ上のデータと各CPUがキャッシュメモリに保持したデータとのコヒーレンシを保持するccNUMA(cache coherent Non Uniform Memory Access)の技術が知られている。
このようなccNUMAの技術が適用されたCPUは、自身が管理するメモリ上のデータを他のCPUがキャッシュメモリに保持した際に、さらに異なるCPUからデータの転送を要求されると、データをキャッシュメモリに保持する他のCPUにデータの転送を行わせる場合がある。以下、図22〜図27を用いて、ccNUMAの技術が適用されたCPUがデータを転送する処理について説明する。
なお、以下の説明では、転送対象となるデータのコヒーレンシを管理するCPUをH−CPU(Home−CPU)とし、データの転送をH−CPUに要求するCPUをL−CPU(Local−CPU)とする。また、転送対象となるデータをH−CPUが管理するメモリから既にキャッシュメモリに保持しているCPUをR−CPU(Remote−CPU)とする。また、L−CPUは、PCIe(Peripheral Component Interconnect Express)を介して、各種IO(Input Output)デバイスと接続されているものとする。
図22は、従来の3CPU間のデータ転送処理を説明するための図である。例えば、L−CPU51のIC(Interface Controller)52は、PCIe53を介して、IOデバイスとのIO処理を制御する。また、H−CPU54が有する二次キャッシュメモリであるL2(Level 2)キャッシュ部55は、ディレクトリを用いて、メモリ56に格納されたデータと他のCPUがメモリ56からキャッシュメモリに保持したデータとのコヒーレンシを保持する。また、R−CPU57が有するL2キャッシュ部58は、L2キャッシュ部55を介して、メモリ56上のデータをキャッシュメモリに保持する。
ここで、IC52は、PCIe53を介して、メモリ56に格納されたデータのリクエストを受信すると、データの転送を要求するIO要求をH−CPU54に対して発行する。すると、H−CPU54が有するL2キャッシュ部55は、転送対象となるデータのディレクトリ情報を検査する。
そして、L2キャッシュ部55は、ディレクトリ情報が「R−EX(Exclusive)」である場合、すなわち、データがR−CPU57に更新された状態で、キャッシュメモリに排他的に保持された旨を示す場合は、R−CPU57にデータ転送要求を発行する。すると、R−CPU57が有するL2キャッシュ部58は、転送対象のデータを含むデータ転送応答をH−CPU54に対して発行する。そして、H−CPU54が有するL2キャッシュ部55は、転送対象のデータとIO応答とをIC52に対して送信し、データ転送処理を終了する。
次に、図23を用いて、IC52がIO要求を発行してからIO応答とデータとを受信するまでの間に行われるデータ転送の回数について説明する。図23は、従来の3CPU間のデータ転送処理を説明するためのタイムチャートである。図23に示すように、まず、IC52は、H−CPU54に対してIO要求を発行する(ステップS201)。
すると、H−CPU54が有するL2キャッシュ部55は、R−CPU57に対して、データ転送要求を発行する(ステップS202)。そして、R−CPU57が有するL2キャッシュ部58は、H−CPU54に対して転送対象のデータを含むデータ転送応答を発行する(ステップS203)。その後、H−CPU54が有するL2キャッシュ部55は、L−CPU51が有するIC52に対して、データとIO応答とを送信し(ステップS204)、データ転送処理を終了する。
このように、従来の3CPU間のデータ転送処理では、IC52がIO要求を発行してから、IO応答とデータとを受信するまでの間に、CPU間の通信が4回行われる。このようなCPU間の通信回数を削減し、データ転送処理の効率を向上させるため、R−CPUからL−CPUに対してデータを直接転送する手法が考えられる。
以下、図24を用いて、R−CPU57がL−CPU51にデータを直接転送する処理について説明する。図24は、L−CPUにデータを直接転送する処理を説明するための図である。例えば、IC52は、H−CPU54に対してIO要求を発行する。次に、H−CPU54が有するL2キャッシュ部55は、ディレクトリ情報が「R−EX」であると判別し、データ転送要求をR−CPU57に対して発行する。
すると、R−CPU57が有するL2キャッシュ部58は、IO応答とデータとをL−CPU51が有するIC52に対して直接転送し、データ転送応答をH−CPU54に発行する。その後、H−CPU54のL2キャッシュ部55は、IC52に対してIO応答を発行し、データ転送処理を終了する。
次に、図25を用いて、R−CPU57からL−CPU51にデータを直接転送する際に、IC52がIO要求を発行してからIO応答とデータとを受信するまでの間に行われるデータ転送の回数について説明する。図25は、L−CPUにデータを直接転送する処理を説明するためのタイムチャートである。図25に示すように、IC52は、H−CPU54に対してIO要求を発行する(ステップS301)。
すると、H−CPU54のL2キャッシュ部55は、データ転送要求をR−CPU57に発行する(ステップS302)。そして、R−CPU57のL2キャッシュ部58は、データ転送応答をH−CPU54に発行し(ステップS303)、IC52に対して、IO応答とデータとを発行する(ステップS304)。また、データ転送応答を受信したH−CPU54のL2キャッシュ部55は、IC52に対してIO応答を発行する(ステップS305)。
このように、R−CPU57がIC52に対してデータを直接転送した場合は、IC52がIO要求を発行してから、IO応答とデータとを受信するまでの間に実行されるCPU間の通信が3回で済むため、L−CPU51は、迅速にデータ転送処理を行える。
特開2001−282764号公報
Computer Architecture: A Quantitative Approach, 4th Edition, John L. Hennessy,David A. Patterson, pp.230-237
しかしながら、上述したL−CPUからR−CPUに転送対象のデータを直接転送する技術では、L−CPUとR−CPUとが同一のCPUとなる場合に、データ転送の性能が悪化するという問題がある。
図26は、L−CPUとR−CPUとが同一である場合のデータ転送を説明するための図である。なお、以下の説明では、例えば、図26に示す例では、L−CPU51は、L2キャッシュ部59を有し、メモリ56上のデータをキャッシュメモリに保持するR−CPUとしても動作する。以下の説明では、R−CPUとしても動作するL−CPU51を、L−CPU=R−CPU51と記載する。
例えば、IC52は、H−CPU54にIO要求を発行する。すると、L2キャッシュ部55は、転送対象のデータに係るディレクトリ情報を検査し、ディレクトリ情報が「R−EX」である場合には、転送対象のデータをキャッシュメモリに保持したL−CPU=R−CPU51を識別する。そして、L2キャッシュ部55は、L−CPU=R−CPU51にデータ転送要求を発行する。
ここで、L2キャッシュ部59は、IC52に対してIO応答とデータとを送信する手段がないため、H−CPU54に対し、転送対象のデータを含むデータ転送応答を発行する。そして、H−CPU54が有するL2キャッシュ部55は、IC52に対して、IO応答とデータとを発行し、データ転送処理を終了する。
次に、図27を用いて、IC52がIO要求を発行してからIO応答とデータとを受信するまでの間に行われるデータ転送の回数について説明する。図27は、L−CPUとR−CPUとが同一である場合のデータ転送を説明するためのタイムチャートである。例えば、IC52は、H−CPU54に対してIO要求を発行する(ステップS401)。
すると、H−CPU54が有するL2キャッシュ部55は、L−CPU=R−CPU51がR−CPUであると判別し、L−CPU=R−CPU51に対してデータ転送要求を発行する(ステップS402)。すると、L−CPU=R−CPU51が有するL2キャッシュ部59は、データを含むデータ転送応答をH−CPU54に送信する(ステップS403)。そして、H−CPU54が有するL2キャッシュ部55は、データとIO応答とをIC52に発行する(ステップS404)。
このように、R−CPUに転送対象のデータを直接転送する技術では、L−CPUとR−CPUとが同一のCPUとなる場合は、IC52がIO要求を発行してからIO応答とデータとを受信するまでの間に、CPU間の通信が4回行われる。このため、R−CPUに転送対象のデータを直接転送する技術では、L−CPUとR−CPUとが同一のCPUとなる場合は、データ転送の性能が低下してしまう。
また、R−CPUに転送対象のデータを直接転送する技術では、L−CPUとR−CPUとが異なる場合と、L−CPUとR−CPUとが同じ場合とで、R−CPUがデータを発行するCPUが異なる。この結果、R−CPUが実行する処理が複雑になるので、CPUの設計が困難になる。
1つの側面では、本発明は、複数の演算処理装置間のデータ転送の性能を向上させることを目的とする。
1つの側面では、主記憶装置に接続される第1の演算処理装置と入出力装置とに接続する演算処理装置である。また、演算処理装置は、主記憶装置からのデータを保持するキャッシュメモリを有する。また、演算処理装置は、入出力装置によるデータの取得を制御するとともに、入出力装置から主記憶装置が記憶する対象データを転送するよう要求された場合、対象データの転送を要求する入出力要求を第1の演算処理装置に出力する第1の制御部を有する。また、演算処理装置は、キャッシュメモリを制御するとともに、第1の演算処理装置に出力した入出力要求に基づいて第1の演算処理装置が出力する応答と対象データとを転送する指示を、第1の演算処理装置から受信した場合、応答の宛先が自装置であるかを判別するとともに、宛先が自装置であると判別したとき、入出力要求に対する応答と対象データとを第1の制御部に対して出力する第2の制御部を有する。
1つの実施形態では、複数の演算処理装置間のデータ転送の性能を向上させることができる。
図1は、実施例1に係る情報処理装置の構成の一例を示す図である。 図2は、実施例1に係るSBの構成の一例を示す図である。 図3は、ディレクトリ情報の一例を説明するための図である。 図4は、ディレクトリのステータスを説明するための図である。 図5は、実施例1に係るCPUの一例を説明するための図である。 図6は、IO要求の一例を説明するための図である。 図7は、IO応答の一例を説明するための図である。 図8は、データ転送要求の一例を説明するための図である。 図9は、データ転送応答の一例を説明するための図である。 図10は、実施例1に係るCPUによるデータ転送の流れを説明するための図である。 図11は、実施例1に係るCPUが実行するデータ転送の流れを説明するためのタイムチャートである。 図12は、従来のCPUによるデータ転送を説明するためのフローである。 図13は、実施例1に係るCPUが実行するデータ転送の流れを説明するためのフローである。 図14は、H−CPUを介さないデータ転送の流れを説明するための図である。 図15は、H−CPUを介さないデータ転送の流れを説明するためのタイムチャートである。 図16は、キャッシュステートが「I」である場合のデータの流れを説明するための図である。 図17は、キャッシュステートが「I」である場合のデータの流れを説明するためのタイムチャートである。 図18は、キャッシュステートが「I」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するための図である。 図19は、キャッシュステートが「I」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのタイムチャートである。 図20は、キャッシュステートが「I」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのフローである。 図21は、リクエストを受信した際にL2キャッシュ部が実行する処理の流れを説明するためのフローチャートである。 図22は、従来の3CPU間のデータ転送処理を説明するための図である。 図23は、従来の3CPU間のデータ転送処理を説明するためのタイムチャートである。 図24は、L−CPUにデータを直接転送する処理を説明するための図である。 図25は、L−CPUにデータを直接転送する処理を説明するためのタイムチャートである。 図26は、L−CPUとR−CPUとが同一である場合のデータ転送を説明するための図である。 図27は、L−CPUとR−CPUとが同一である場合のデータ転送を説明するためのタイムチャートである。
以下に添付図面を参照して本願に係る演算処理装置、情報処理装置および演算処理装置の制御方法について説明する。
まず、図1を用いて、実施例1に係る情報処理装置の構成について説明する。図1は、実施例1に係る情報処理装置の構成の一例を示す図である。図1に示すように、実施例1に係る情報処理装置1は、XB(クロスバスイッチ)2aとXB2bと、SB(システムボード)3a〜SB3hとを有する。なお、図1に示すクロスバスイッチおよびシステムボードの数はあくまで例示であり、これに限定されるものではない。
XB2aは、各SB3a〜3h間でやり取りされるデータの経路を動的に選択するとともに、データを転送するデータ転送装置としてのスイッチである。ここで、データには、プログラムや演算処理結果などが含まれる。なお、XB2bの構成は、XB2aと同様であるので、詳細な説明は省略する。また、SB3aは、CPUとメモリとを有し、各種演算処理を実行する。なお、SB3bからSB3hの構成は、SB3aと同様であるので、詳細な説明は省略する。
次に、図2を用いて、各SBの構成例について説明する。図2は、実施例1に係るSBの構成の一例を示す図である。図2に示す例では、SB3aは、主記憶装置としてのメモリ10a〜メモリ10dと、相互に接続された演算処理装置としてのCPU20a〜CPU20dとを有する。すなわち、メモリ10aに対しては、CPU20aがメモリアクセスを行い、メモリ10bに対しては、CPU20bがメモリアクセスを行う。また、メモリ10cに対しては、CPU20cがメモリアクセスを行い、メモリ10dに対しては、CPU20dがメモリアクセスを行う。
また、CPU20a〜CPU20dは、それぞれメモリ10a〜メモリ10dと接続される。なお、メモリ10b〜10dは、メモリ10aと同様の機能を有するものとして、以下の説明を省略する。また、CPU20b〜CPU20dは、CPU20aと同様の処理を実行するものとし、以下の説明を省略する。
例えば、CPU20aは、キャッシュメモリを有し、自身が管理するメインメモリであるメモリ10aに格納されたデータをキャッシュメモリに保持して、保持したデータに対して各種演算処理を実行する。また、CPU20aは、各メモリ10b〜10dに格納されたデータをキャッシュメモリに保持する場合には、他のCPU20b〜CPU20dに対してデータの転送を要求するリクエストを発行する。そして、CPU20aは、他のCPU20b〜CPU20dからリクエストの対象となるデータ受信し、受信したデータをキャッシュメモリに保持する。なお、CPU20a〜CPU20dは、XB2aと接続されており、XB2aに接続された図示しないXB2bと接続されたSB3が有するメモリに格納されたデータを取得することもできる。
一方、メモリ10aは、各CPU10a〜10dが演算処理に利用するデータを記憶する。また、メモリ10aは、メモリ10aが記憶するデータをどのCPUがキャッシュメモリに保持しているかを示すディレクトリ情報を記憶する。例えば、CPU20aは、各種データを記憶する領域と、ディレクトリ情報を記憶する領域とをメモリ10a上に設定し、各種データを記憶する領域と、ディレクトリ情報を記憶する領域とを対応付ける。そして、CPU20aは、各種データを記憶する領域と対応付けた領域に、データの状態と、データをキャッシュメモリに保持したCPUとを示すディレクトリ情報を格納する。
以下、図3を用いて、CPU20aがメモリ10aに格納するディレクトリ情報の一例について説明する。図3は、ディレクトリ情報の一例を説明するための図である。図3に示すように、CPU20aは、各種データについて、データ状態とR−CPUプレゼンスビットとを対応付けたディレクトリ情報を格納する。ここで、データ状態とは、キャッシュメモリに保持されたデータがどのような状態であるかを示す2ビットのビット列である。
ここで、図4は、ディレクトリのステータスを説明するための図である。なお、図4には、データ状態のビット列が、どのようなステータスを示しているかを記載した。例えば、ビット列「00」は、ステータス「Local(L)」を示す。ステータス「L」は、データが他のCPU、すなわちR−CPUのキャッシュメモリに保持されておらず、H−CPUのキャッシュメモリに保持されている可能性がある状態である。
また、ビット列「10」は、ステータス「Remote−Exclusive(R−EX)」を示す。ステータス「R−EX」は、キャッシュステートが「Exclusive(E)」、または「Modified(M)」の状態で、1つのR−CPUがキャッシュメモリにデータを保持しており、H−CPUはキャッシュメモリにデータを保持していない状態である。
なお、キャッシュステートとは、キャッシュメモリに保持されたデータの状態を示す情報であり、「Invalid(I)」、「Shared(S)」、「E」、「M」の何れかとなる。「Invalid(I)」とは、キャッシュデータが登録されていない状態を示し、「Shared(S)」とは、他のCPUも同一のデータをキャッシュメモリに保持しており、かつクリーンな状態を示す。また、「E」とは、独占的にデータをキャッシュメモリに保持しており、かつクリーンな状態を示し、「M」とは、独占的にデータをキャッシュメモリに保持しており、かつダーティな状態を示す。
また、ビット列「11」は、ステータス「Remote−Shared(R−SH)」を示す。ステータス「R−SH」は、データが複数のR−CPUのキャッシュメモリに保持されており、H−CPUのキャッシュメモリにもデータが保持されている可能性がある状態である。
図3に戻って、R−CPUプレゼンスビットとは、データがどのCPUのキャッシュメモリに保持されているかを示すビット列である。例えば、CPU20aは、ビット列の各ビットを情報処理装置1が有する各CPUと対応付け、データをキャッシュメモリに保持したCPUと対応付けたビットを「1」にすることで、データをキャッシュメモリに保持したビットを識別する。ただし、CPU20aは、自装置、すなわちCPU20aと対応付けられたビットについては「0」とする。
例えば、CPU20aは、情報処理装置1が16個のCPUを有する場合には、図3に示すように16ビットのビット列をR−CPUプレゼンスビットとする。この結果、図3に例示するディレクトリ情報は、CPUプレゼンスビットの上位3ビット目のビットと対応付けたCPUに、キャッシュステート「R」または「M」でデータがキャッシュメモリに保持されている状態「R−EX」を示す。
次に、図5を用いて、CPUの構成例について説明する。図5は、実施例1に係るCPUの一例を説明するための図である。図5に示す例では、CPU20aは、L2キャッシュ部30、IC35、PCI制御部36、複数のコア37、Memory Access Controller(MAC)38、通信制御部39を有する。また、L2キャッシュ部30は、L2キャッシュRandom Access Memory(RAM)31、メモリ管理部32、入力制御部33、出力制御部34を有する。
また、CPU20aは、PCIe4を介して、各種IO装置と接続されており、各種IO装置がメモリ10aに格納されたデータを要求した場合には、メモリ10aからデータを取得し、PCIe4を介して、データを各種IO装置に出力する。また、CPU20aは、各CPU20b〜20dと接続され、または、XB2a、およびXB2bを介して、各SB3b〜3hが有するCPUと各種データやメッセージの送受信を行う。
また、CPU20aは、出力制御部34とIC35との間に、L2キャッシュRAM31から読み出されるデータを送受信するための経路を有する。すなわち、CPU20aは、L2キャッシュ部30が保持したデータをL2キャッシュ部30からIC35に直接送信するための経路を有する。
以下、L2キャッシュ部30が発揮する機能について説明する。L2キャッシュRAM31は、各メモリ10a〜10dのデータを保持するキャッシュメモリである。例えば、L2キャッシュRAM31は、入力制御部33、または出力制御部34からメモリアドレスを受信すると、受信したメモリアドレスに格納されたデータを入力制御部33、または出力制御部34に出力する。なお、L2キャッシュRAM31は、メモリドレスの上位アドレスであるインデックスアドレスごとにデータを記憶するキャッシュラインの技術や、各キャッシュラインに複数ウェイを有してもよい。
メモリ管理部32は、メモリ10aに格納されたデータの入出力処理を制御する。また、メモリ管理部32は、メモリ10aに格納したディレクトリ情報を用いて、各CPU20b〜20d、および他のSB3b〜3hが有するCPUが、メモリ10aからキャッシュメモリに保持したデータと、メモリ10a上のデータとのコヒーレンシを保持する。
例えば、メモリ管理部32は、IO装置がデータの転送を要求したためにIC35が発行したデータ取得要求を受信した場合には、MAC38を介して、メモリ10aにアクセスし、データ取得要求の対象となるデータを取得する。そして、メモリ管理部32は、取得したデータをIC35に出力する。
また、メモリ管理部32は、L2キャッシュRAM31が保持するデータの取得要求を入力制御部33から受信した場合には、MAC38を介してメモリアクセスを行い、メモリ10aから取得したデータを入力制御部33に出力する。
また、メモリ管理部32は、通信制御部39を介して、各CPU20b〜20dや、他のSB3b〜3hが有するCPU(以下、他のCPU20b〜20dと記載する)が発行したIO要求を受信する。ここで、IO要求とは、他のCPU20b〜20dがメモリ10aに格納されたデータの取得要求をIO装置から受信した際に、H−CPUへ発行されるデータの転送要求である。
ここで、図6を用いて、IO要求の一例について説明する。図6は、IO要求の一例を説明するための図である。図6に示すように、IO要求には、要求種別、L−CPU−ID、アドレスが格納されている。ここで、要求種別とは、データに対する処理の内容を示す情報であり、いわゆるオペレーションコードである。また、L−CPU−IDとは、IO要求の発行元となるCPU、すなわちL−CPUを示す識別子である。また、アドレスとは、転送対象のデータが格納されたメモリアドレスである。
図5に戻って、メモリ管理部32は、IO要求を受信した場合には、MAC38を介して、メモリ10aにアクセスし、転送対象のデータとディレクトリ情報とを取得する。そして、メモリ管理部32は、取得したディレクトリ情報が「L」、または「R−SH」である場合は、以下の処理を実行する。まず、メモリ管理部32は、転送対象のデータがL2キャッシュRAM31に保持されているかを判別する。
そして、メモリ管理部32は、転送対象のデータがL2キャッシュRAM31に保持されていない場合、すなわちキャッシュステートが「I」の場合は、IO要求に対する応答であるIO応答にメモリから取得した転送対象のデータを格納する。また、メモリ管理部32は、転送対象のデータがキャッシュステート「E」でL2キャッシュRAM31に保持されている場合は、IO応答にメモリから取得した転送対象のデータを格納する。
また、メモリ管理部32は、キャッシュステートが「M」でデータがL2キャッシュRAM31に保持されている場合には、L2キャッシュRAM31に保持されたデータのライトバック処理を行い、メモリ10a上のデータを更新する。そして、メモリ管理部32は、更新後のデータをIO応答に格納する。その後、メモリ管理部32は、通信制御部39を介して、IO要求の発行元となる他のCPU20b〜20dにIO応答を送信する。
ここで、図7は、IO応答の一例を説明するための図である。図7に示すように、IO応答には、応答種別、アドレス、データが格納されている。ここで、応答種別とは、応答の内容を示すオペレーションコードである。また、アドレスとは、転送対象のデータが格納されたメモリアドレスである。また、データとは、転送対象のデータである。
一方、メモリ管理部32は、取得したディレクトリ情報が「R−EX」である場合には、以下の処理を実行する。まず、メモリ管理部32は、IO要求の発行元となる他のCPU20b〜20dにデータを格納していないIO応答を送信する。また、メモリ管理部32は、R−CPUリファレンスビットを用いて、転送対象のデータを保持したR−CPUを識別する。そして、メモリ管理部32は、図8に示すデータ転送要求を生成し、通信制御部39を介して、データ転送要求を識別したR−CPUへ送信する。
図8は、データ転送要求の一例を説明するための図である。図8に示す例では、データ転送要求には、要求種別、L−CPU−ID、H−CPU−ID、アドレスが格納される。ここで、H−CPU−IDとは、H−CPUを示す識別子である。例えば、CPU20aは、CPU20bがメモリ10bから保持したデータに対するIO要求を、CPU20cから受信する。このような場合は、CPU20aは、CPU20bの識別子をL−CPU−IDとし、CPU20aの識別子をH−CPU−IDとしたデータ転送要求をR−CPUであるCPU20cへ送信する。
また、メモリ管理部32は、データ転送要求を送信したR−CPUからデータ転送要求に対する応答として、図9に例示するようなデータ転送応答を受信する。図9は、データ転送応答の一例を説明するための図である。図9に示すように、データ転送応答には、要求種別と、アドレスとが格納される。ここで、データ転送応答のアドレスは、データ転送応答の要因となったデータ転送要求に格納されたアドレス、すなわち、転送対象のデータが格納されたアドレスと同一のアドレスである。
なお、メモリ管理部32は、IO要求を受信した際にIO応答を送信せずとも、従来と同様に、データ転送応答を受信した後で、IO要求の発行元となる他のCPU20b〜20dにデータが格納されていないIO応答を送信してもよい。
また、メモリ管理部32は、従来と同様に、コア37が他のCPU20b〜20dが管理するメモリ上のデータを要求するコマンドを発行した場合には、データの転送を要求するリクエストをH−CPUに対して発行する。そして、メモリ管理部32は、H−CPU、またはR−CPUからデータとリクエスト応答とを受信した場合には、データを入力制御部33に出力する。また、メモリ管理部32は、メモリ10aが記憶するデータを他のCPU20b〜20dに送信したり、ライトバック処理によりメモリ10a上のデータを更新した場合には、その都度ディレクトリ情報を更新する。
図5に戻って、入力制御部33は、コア37からデータの読み出しや書き込みを要求するコマンドを受信すると、L2キャッシュRAM31にコマンドの対象となるメモリアドレスを出力し、コマンドの対象となるデータを取得する。そして、入力制御部33は、取得したデータをコマンド発行元のコア37に出力する。また、入力制御部33は、コマンドの対象となるデータがL2キャッシュRAM31に保持されておらず、キャッシュミスが発生した場合には、メモリ管理部32に対してデータの取得要求を発行する。
そして、入力制御部33は、データをメモリ管理部32から受信した場合には、受信したデータをL2キャッシュRAM31に格納し、再度L2キャッシュRAM31にメモリアドレスを出力してデータを取得する。その後、入力制御部33は、取得したデータをコマンド発行元のコア37に出力する。なお、入力制御部33は、L2キャッシュRAM31に格納されたデータのライトバックを行う場合には、L2キャッシュRAM31から取得したデータをメモリ管理部32に出力する。
出力制御部34は、通信制御部39を介して、他のCPU20b〜20dが発行したデータ転送要求を受信した場合には、データ転送要求に含まれるアドレスをL2キャッシュRAM31に出力し、転送対象のデータを取得する。そして、出力制御部34は、取得したデータを格納したIO応答を生成する。
また、出力制御部34は、データ転送要求からL−CPU−IDを抽出し、抽出したL−CPU−IDがCPU20aのIDと同一であるか否かを判別する。すなわち、出力制御部34は、H−CPUに対してIO要求を発行したL−CPUと、H−CPUから転送対象のデータを保持したR−CPUとが同一であるか否かを判別する。
そして、出力制御部34は、データ転送要求から抽出したL−CPU−IDがCPU20aのIDと同一であると判別した場合には、生成したIO応答をIC35に対して直接出力する。一方、出力制御部34は、L−CPU−IDがCPU20aのIDとは異なる場合には、通信制御部39を介して、生成したIO応答を、L−CPU−IDが示すCPUに対して送信する。また、出力制御部34は、IO応答をIC35や他のCPU20b〜20dへ送信した場合には、データ転送応答を生成し、生成したデータ転送応答をデータ転送要求の送信元であるH−CPUに対して送信する。
IC35は、PCI制御部36、およびPCIe4を介して、CPU20a内におけるIO処理を制御する。具体的には、IC35は、各種IO装置のデータ取得処理を制御する。例えば、IC35は、PCI制御部36を介して、PCIe4からデータの取得要求を受信した場合には、取得対象のデータが格納されたメモリアドレスが、メモリ10aのメモリアドレスであるか否かを判別する。そして、IC35は、取得対象のデータが格納されたメモリアドレスがメモリ10aのメモリアドレスである場合には、メモリ管理部32にデータの取得を要求する。
一方、IC35は、取得対象のデータが格納されたメモリアドレスがメモリ10aのメモリアドレスではない場合は、取得対象のデータが格納されたメモリアドレスを含むIO要求を生成する。そして、IC35は、生成したIO要求を通信制御部39に出力する。
また、IC35は、通信制御部39や、出力制御部34からIO応答を受信した場合は、IO応答からデータを抽出し、PCI制御部36を介して、抽出したデータをPCIe4に出力する。なお、IC35は、データが格納されていないIO応答を受信しただけでは、IO処理を終了せず、データが格納されたIO応答を受信した場合にIO処理を終了する。また、IC35は、メモリ管理部32からデータを取得した場合には、PCI制御部36を介して、取得したデータをPCIe4に出力し、処理を終了する。
PCI制御部36は、PCIe4とCPU20aとのインタフェースであり、PCIe4における信号とCPU20aの内部信号との変換を行う。例えば、PCI制御部36は、PCIe4におけるシリアルデータと、CPU20aの内部におけるパラレルデータとの相互変換や、PCIe4における各種通信制御を実行する。
複数のコア37は、各種演算処理を実行するプロセッサコアであり、L2キャッシュ部30が有するL2キャッシュRAM31が保持した各種データを用いて、演算処理を実行する。例えば、コア37は、L2キャッシュ部30にコマンドを発行してデータを取得し、取得したデータを用いて演算処理を実行する。なお、複数のコア37は、L2キャッシュ部30が保持したデータを保持するL1キャッシュを有してもよい。
MAC38は、メモリ10aに対するメモリアクセスを制御するメモリアクセスコントローラである。例えば、MAC38は、メモリ10aにアクセスし、L2キャッシュ部30が発行したメモリアドレスに格納されたデータを抽出し、抽出したデータをL2キャッシュ部30に出力する。
通信制御部39は、XB2aを介して、CPU20aと各CPU20b〜20dとの間の通信を制御する。また、通信制御部39は、CPU20aとSB3aが有するCPU20b〜20dとの間の通信を制御する。例えば、通信制御部39は、リクエスト、リクエスト応答、データ転送要求、データ転送応答、IO要求、IO応答等、CPU間で送受信される各種メッセージをコヒーレント制御部25から受信すると、受信したメッセージの送信先となるCPUを判別する。
そして、通信制御部39は、メッセージの送信先となるCPUに応じて、各種メッセージをCPU20b〜20d、またはXB2aに対して出力する。詳細には、通信制御部39は、パラレルデータとして各種メッセージをコヒーレント制御部25から受信すると、受信した各種メッセージをシリアルデータに変換し、複数のレーンを介して、変換後のシリアルデータを送信する。また、通信制御部39は、他のCPU20b〜20d、またはXB2aから各種メッセージを受信すると、受信したメッセージをコヒーレント制御部25へ送信する。
なお、通信制御部39がメッセージの送信先となるCPUを識別する処理については、任意の手法が考えられるが、例えば、以下のような処理が考えられる。まず、情報処理装置1は、全てのメモリに対して同一のメモリアドレス空間をマッピングする。また、通信制御部39は、各メモリアドレスと、各メモリアドレスをマッピングしたメモリを管理するCPUの識別子を対応付けたテーブルを有する。そして、通信制御部39は、テーブルを閲覧し、各種メッセージにより処理の対象となるメモリアドレスと対応付けられたCPUを判別する。
次に、図10を用いて、CPU20aがL−CPU、およびR−CPUとして動作する際のデータ転送の流れを説明する。図10は、実施例1に係るCPUによるデータ転送の流れを説明するための図である。なお、図10、および図11に示す例では、CPU20aは、H−CPUであるCPU20bに対してIO要求の発行を行うL−CPUであり、かつ、CPU20bが管理するメモリ10bからデータを保持したR−CPUでもあるものとする。
また、CPU20aは、メモリ10bから保持したデータを更新したものとする。また、CPU20bは、CPU20aのL2キャッシュ部30と同様の機能を有するL2キャッシュ部40を有するものとする。
例えば、CPU20aのIC35は、PCIe4からメモリ10b上のデータの取得要求を受信すると、IO要求をCPU20bのL2キャッシュ部40に出力する。すると、L2キャッシュ部40は、メモリ10bにアクセスし、ディレクトリステートが「R−EX」であると判別する。そして、L2キャッシュ部40は、R−CPUであるCPU20aのL2キャッシュ部30にデータ転送要求を送信する。
すると、L2キャッシュ部30は、データ転送要求に格納されたL−CPU−IDがCPU20aのIDと同一であるか否かを判別し、同一である場合には、データが格納されたIO応答をCPU20aのIC35に出力する。また、L2キャッシュ部30は、CPU20bのL2キャッシュ部30に対してデータ転送応答を送信する。そして、L2キャッシュ部40は、IC35に対してデータが格納されていないIO応答を送信し、処理を終了する。
次に、図11を用いて、CPU20a、およびCPU20bがデータを転送するタイミングについて説明する。図11は、実施例1に係るCPUが実行するデータ転送の流れを説明するためのタイムチャートである。例えば、IC35は、CPU20bのL2キャッシュ部40に対して、IO要求を発行する(ステップS1)。次に、L2キャッシュ部40は、IC35に対してデータが格納されていないIO応答を送信し(ステップS2)、CPU20aのL2キャッシュ部30に対して、データ転送要求を発行する(ステップS3)。
すると、L2キャッシュ部30は、データの転送先であるL−CPUがR−CPUであるCPU20aであると判別し、IC35に対してデータを格納したIO要求を出力する(ステップS4)。また、L2キャッシュ部30は、CPU20bのL2キャッシュ部40にデータ転送応答を発行し(ステップS5)処理を終了する。
このように、CPU20aは、R−CPUとしてデータ転送要求を受信した際に、自身がL−CPUである場合には、データとIO応答とを、L2キャッシュ部30からIC35に出力させる。このため、IC35は、2回のCPU間転送でIO応答とデータとを受信することができる。この結果、CPU20aは、データ転送の効率を向上させることができる。
次に、図12、および図13を用いて、CPU20aがデータ転送の効率を向上させる点について説明する。まず、図12を用いて、R−CPUとL−CPUとが同じCPUである際に、従来のCPUがデータ転送に要する時間を説明する。図12は、従来のCPUによるデータ転送を説明するためのフローである。なお、図12には、L−CPUとR−CPUとが同一のCPUである際に、従来のCPUが実行するデータ転送の流れについて記載した。
例えば、従来のL−CPU=R−CPUは、IO要求をH−CPUに対して送信する。すると、従来のH−CPUは、データ転送要求をL−CPU=R−CPUに対して送信する。ここで、従来のL−CPU=R−CPUは、ICとL2キャッシュ部との間にデータを送受信する経路を有さなかったので、データを格納したデータ転送応答をH−CPUに対して送信する。
そして、従来のH−CPUは、L−CPU=R−CPUに対して、データとIO応答とを送信する。このように、従来のCPUは、L−CPUとR−CPUとが同一のCPUである場合は、L−CPUがIO要求を発行してからデータを受信するまでの間に4回のCPU間通信が行われるので、データ転送の効率が悪化する。
一方、図13は、実施例1に係るCPUが実行するデータ転送の流れを説明するためのフローである。図13に示すように、CPU20aのIC35は、H−CPU20bのL2キャッシュ部40に対してIO要求を送信する。するとL2キャッシュ部40は、IC35にデータ無しのIO応答を送信し、CPU20aのL2キャッシュ部30にデータ転送要求を発行する。この結果、L2キャッシュ部30は、IO応答とデータとをIC35に出力し、データ転送応答をL2キャッシュ部40に対して送信する。
このように、CPU20aは、データ転送要求を受信した際にL−CPUがCPU20aであるか否かを判別し、L−CPUがCPU20aである場合には、L2キャッシュ部30からIO応答とデータとをIC35に出力させる。この結果、CPU20aは、IO要求を発行してから2回のCPU間通信でデータを受信することができるので、データ転送の効率を向上させることができる。
また、CPU20aは、L−CPUがCPU20aではないと判別した場合は、データを格納したIO応答をR−CPUのICへ送信する。このため、CPU20aは、従来と同様に、L−CPUとR−CPUとが異なる場合にも、3回のCPU間通信で、データの転送を行う事ができる。
また、CPU20aは、L−CPUとしてIO要求を発行する際にCPU20aがデータを保持しているか否かを判別するのではなく、R−CPUとしてH−CPUからデータ転送要求を受信した際に自身がL−CPUであるか否かを判別する。すなわち、CPU20aは、IO要求を一度H−CPUに対して送信する。このため、CPU20aは、各CPU20a〜20dにおける処理の論理を容易にすることができる。
以下、図14〜図17を用いて、CPU20aがIO要求をH−CPUに送信することで、処理の論理を容易にする点について説明する。まず、図14〜図16を用いて、L−CPUでもあるR−CPUがH−CPUを介さずに処理を実行した場合の問題について説明する。図14は、H−CPUを介さないデータ転送の流れを説明するための図である。
例えば、図14に示すように、ICとL2キャッシュ部との間にデータを送受信する経路が存在する場合は、ICからIO要求をL2キャッシュ部に出力し、L2キャッシュ部からデータをICに出力する手法が考えられる。しかしながら、IO要求をH−CPUに発行しない場合には、転送処理がL−CPUの内部のみで完結してしまうため、ディレクトリ情報に基づいた処理を行うことができない。そこで、転送対象のキャッシュステートに基づいた処理が考えられる。
図15は、H−CPUを介さないデータ転送の流れを説明するためのタイムチャートである。図15に示すように、ICは、H−CPUに対してIO要求を発行しない場合は、L2キャッシュ部にIO要求を発行する(ステップS11)。そしてL2キャッシュ部は、転送対象となるデータのキャッシュステートが「E」、「M」、「S」の場合は、データが保持されているため、データをICに出力する。(ステップS12)。
しかしながら、転送対象となるデータのキャッシュステートが「I」である場合には、L2キャッシュ部は、データをICに出力することができない。そこで、ICは、L2キャッシュ部に対するIO要求がキャッシュミスにより完了しなかった場合は、図16に示すように、IO要求をH−CPUのL2キャッシュ部に送信することとなる。
図16は、キャッシュステートが「I」である場合のデータの流れを説明するための図である。例えば、L−CPU=R−CPUは、キャッシュステートが「I」であった場合は、IO要求をH−CPUのL2キャッシュ部へ送信する。すると、H−CPUのL2キャッシュ部は、メモリに格納されたディレクトリ情報を確認し、ディレクトリ情報が「L」であった場合には、IO応答とデータとをICへ送信する。そして、H−CPUのL2キャッシュは、ディレクトリ情報が「R−EX」や「R−SH」である場合は、R−CPUにデータ転送要求を行う。
図17は、キャッシュステートが「I」である場合のデータの流れを説明するためのタイムチャートである。例えば、L−CPU=R−CPUのICは、キャッシュミスが発生した際に、H−CPUのL2キャッシュ部に対してIO要求を送信する(ステップS21)。すると、H−CPUのL2キャッシュ部は、L−CPU=R−CPUのICに対して、IO応答とデータとを送信する(ステップS22)。
このように、L−CPU=R−CPUのICは、ICとL2キャッシュ部との間にデータを転送する経路が存在しても、H−CPUにIO要求を送信しない場合には、キャッシュステートに応じてIO要求の発行先を変更する処理を行わなくてはならない。さらに、IO要求を受信したH−CPUにおいても、ディレクトリ情報に応じた処理の分岐が存在する。この結果、各CPUが実行する処理が複雑化してしまう。
しかしながら、実施例1に係るCPU20aは、自身がR−CPUであるか否かに係らず、IO要求を一端H−CPUのL2キャッシュ部40へ送信する。この結果、CPU20aは、L2キャッシュ部40におけるディレクトリ情報に応じた分岐のみを考慮すればよい。この結果、CPU20aは、実行する処理が単純であるため、回路の設計や検証を容易にすることができる。
なお、H−CPUのL2キャッシュ部40がディレクトリ情報に応じて、R−CPUにデータ転送要求を送信する処理は、従来も行われている。このため、CPU20aは、R−CPUとしてデータ転送要求を受信した際に、CPU20aがL−CPUであるか否かを判別する処理を行う場合は、H−CPUが実行する処理をそのままに、データの転送性能を向上させることができる。
また、CPU20aは、IO要求をH−CPUのL2キャッシュ部40に送信するので、IC35とコア37とが同一メモリアドレスのデータを要求するすれ違いケースが発生した際に、実行する処理の分岐を考慮せずとも、適切にデータ転送を行う事ができる。以下、すれ違いケースが発生した際にCPU20aが実行する処理について説明する。
図18は、キャッシュステートが「I」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するための図である。例えば、コア37は、データを排他的に保持するため、キャッシュステート「E」でデータの転送を要求するデータ要求(E)をL2キャッシュ部30に発行する。
すると、L2キャッシュ部30は、データ要求(E)をL2キャッシュ部40に発行する。すると、L2キャッシュ部40は、L2キャッシュ部30にデータ応答(E)とデータとを送信する。その後、L2キャッシュ部30は、データ応答(E)とデータとをコア37に送信する。
ここで、IO処理の途中でデータ要求(E)をコア37が発行した場合は、L2キャッシュ部30におけるキャッシュステートが変化する。このため、従来のL−CPU=R−CPUでは、IO処理の途中でL−CPUにおけるデータのキャッシュステートが変化した場合には、処理の分岐が発生してしまう。
しかしながら、実施例1に係るIC35は、IO要求をH−CPUであるCPU20bのL2キャッシュ部40に発行する。すると、L2キャッシュ部40は、すれ違い処理が発生した場合にも、コア37が発行したデータ要求(E)によるステートの変化を反映させた動作を行うことができる。この結果、CPU20aは、IO要求をH−CPUのL2キャッシュ部40に出力することで、すれ違い処理を考慮せずとも、キャッシュステートに応じたデータ転送処理を実現することができる。
次に、図19を用いて、すれ違い処理が発生した際にCPU20aが実行する処理の流れについて説明する。図19は、キャッシュステートが「I」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのタイムチャートである。例えば、コア37は、L2キャッシュ部30に対して、データ要求(E)を発行する(ステップS31)。
次に、L2キャッシュ部30は、H−CPUとして動作するCPU20bのL2キャッシュ部40にデータ要求(E)を送信する(ステップS32)。すると、L2キャッシュ部40は、L−CPU=R−CPUとして動作するCPU20aにデータ応答(E)を発行する。そして、L2キャッシュ部30は、コア37にデータ応答(E)とデータとを出力する。
ここで、IC35は、L2キャッシュ部30がデータ要求(E)を発行した少し後に、IO装置からデータの取得要求を受信すると、データのキャッシュステートが「I」であるため、IO要求をL2キャッシュ部40に送信する。すると、L2キャッシュ部40は、CPU20aがR−CPUであると判別し、L2キャッシュ部30にデータ転送要求を発行する。
そして、L2キャッシュ部30は、CPU20aがL−CPUであると判断し、データとIO応答とをIC35に出力し(ステップS37)、データ転送応答をL2キャッシュ部40に送信し(ステップS38)、処理を終了する。なお、L2キャッシュ部40は、データ転送要求を受信した場合には、IC35に対して、データが格納されていないIO応答を送信するが(ステップS39)、この処理は、データ転送応答の受信後に行っても良い。
ここで、図19中の直線矢印と点線矢印とに示すように、データ要求(E)に係るステップS31〜S34の処理と、IO要求に係るステップS35〜S39の処理は、すれ違いが発生していない際に実行する処理と同様の処理が並行して行われる。このため、CPU20aは、すれ違い処理を考慮せずとも、通常のデータ転送処理のみで、データ要求に係る処理とIO要求に係る処理とを実現することができる。この結果、CPU20aは、設計を容易にすることができる。
次に、図20を用いて、H−CPUにおけるキャッシュステートの遷移について説明する。図20は、キャッシュステートが「I」である場合にリクエストのすれ違いが発生した場合のデータの流れを説明するためのフローである。例えば、図20に示すように、LCPU=R−CPUのコア37は、データ要求(E)を発行する。
すると、L2キャッシュ部30は、キャッシュステートが「I」であるので、データ要求(E)を発行する。すると、L2キャッシュ部40は、ディレクトリステートを「L」から「R−EX」に更新し、データ応答(E)とデータとをL2キャッシュ部30に送信する。すると、L2キャッシュ部30は、データをキャッシュステート「E」で保持し、データ応答(E)とデータとをコア37に出力する。
ここで、IC35は、データ応答(E)をL2キャッシュ部30が保持する前に、CPU20aがデータを保持しているか判別することなく、IO要求をL2キャッシュ部40に発行する。すると、L2キャッシュ部40は、ディレクトリステートが「R−EX」であるため、データ転送要求をL2キャッシュ部30に出力し、データが格納されていないIO応答をIC35に出力する。
ここではじめて、L2キャッシュ部30は、CPU20aがL−CPUであるか否かを判別し、CPU20aがL−CPUであると判別した場合には、IC35にデータとIO応答とを出力する。このため、CPU20aは、すれ違い処理を考慮せずともよいので、設計を容易にすることができる。
次に、図21を用いて、各種メッセージを受信した際にL2キャッシュ部30が実行する処理の流れについて説明する。図21は、リクエストを受信した際にL2キャッシュ部が実行する処理の流れを説明するためのフローチャートである。なお、図21に示す処理の流れは、L2キャッシュ部30がIO要求、またはデータ転送要求を受信した際に実行する処理の流れである。すなわち、L2キャッシュ部30は、IO要求やデータ転送要求の他にも、様々な種別のメッセージを受信する。そして、L2キャッシュ部30は、各種メッセージを受信すると、受信したメッセージの要求種別を判別し、判別した要求種別がIO要求、またはデータ転送要求である場合には、以下の処理を実行する。
例えば、L2キャッシュ部30は、受信したメッセージがIO要求であるか否かを判別する(ステップS101)。次に、L2キャッシュ部30は、受信したメッセージがIO要求ではないと判別した場合は(ステップS101否定)、L−CPUとR−CPUとが同一のCPUであるか否かを判別する(ステップS102)。すなわち、L2キャッシュ部30は、受信したメッセージがデータ転送要求であった場合は、L−CPUがCPU20aであるか否かを判別する。
そして、L2キャッシュ部30は、L−CPUとR−CPUとが同一のCPUであると判別した場合は(ステップS102肯定)、自装置のIC35にIO応答とデータとを送信する(ステップS103)。次に、L2キャッシュ部30は、H−CPUのL2キャッシュ部にデータ転送応答を送信し(ステップS104)、処理を終了する。一方、L2キャッシュ部30は、L−CPUとR−CPUとが同一のCPUではない場合には(ステップS102否定)、L−CPUのICへIO応答とデータとを送信し(ステップS105)、H−CPUのL2キャッシュ部にデータ転送応答を送信する(ステップS104)。
また、L2キャッシュ部30は、受信したメッセージがIO要求である場合は(ステップS101肯定)、MAC38にデータを要求し(ステップS106)、MAC38がメモリ10aから取得したデータを受信する(ステップS107)。次に、L2キャッシュ部30は、ディレクトリステータスが「R−EX」であるか否かを判別する(ステップS108)。
そして、L2キャッシュ部30は、ディレクトリステータスが「R−EX」ではない場合は(ステップS108否定)、L−CPUにIO応答とデータとを送信し(ステップS109)、処理を終了する。すなわち、L2キャッシュ部30は、転送対象のデータが他のCPU20b〜20dに保持されていない場合には、L−CPUにデータをそのまま送信する。一方、L2キャッシュ部30は、ディレクトリステータスが「R−EX」である場合は(ステップS108肯定)、データを保持したR−CPUにデータ転送要求を送信し(ステップS110)、L−CPUにIO応答を送信し(ステップS111)、処理を終了する。
[実施例1の効果]
上述したように、CPU20aは、IO処理の制御を行うIC35と、L2キャッシュ部30とを有する。また、IC35は、他のCPU20b〜20dに対して、データの転送を要求するIO要求を送信する。そして、L2キャッシュ部30は、他のCPU20b〜20dからデータ転送要求を受信した場合には、データの転送先となるL−CPUがCPU20aであるか否かを判別する。その後、L2キャッシュ部30は、L−CPUがCPU20aである場合、すなわち、CPU20aがL−CPU、およびR−CPUの両方である場合には、データとIO応答とをIC35に出力する。
例えば、CPU20aは、メモリ10bに接続されたCPU20bと、各種IO装置と接続されており、メモリ10bからデータを読み出して保持するL2キャッシュRAM31を有する。また、CPU20aは、各種IO装置によるデータの取得を制御するとともに、IO装置からメモリ10bが記憶するデータの転送を要求するリクエストを受信すると、対象となるデータの転送を要求するIO要求をCPU20bに送信するIC35を有する。また、CPU20aは、L2キャッシュRAM31を制御するL2キャッシュ部30を有する。ここで、L2キャッシュ部30は、CPU20bからIO応答と対象データとの転送を指示するデータ転送要求を受信した場合には、IO応答の宛先がCPU20aであるか否かを判別する。そして、L2キャッシュ部30は、IO応答の宛先がCPU20aであると判別した場合には、IO応答と対象データとをIC35へ出力する。
このため、CPU20aは、IC35がIO要求を発行してからデータを受信するまでのCPU間通信の回数を2回に抑えることができるので、データ転送性能を向上させることができる。また、CPU20aは、IO要求を一端H−CPUに送信し、データ転送要求を受信した際にL−CPUとR−CPUとが同一のCPUであるかを判別するので、各CPUが実行する処理の分岐を削減することができる。この結果、CPU20aは、回路設計や検証を容易にすることができる。
また、CPU20aは、L−CPUがCPU20aではないと判別した場合には、データ転送要求が示すL−CPUに対して、IO応答とデータとを送信する。すなわち、CPU20aは、IO応答の宛先が自装置ではないと判別した場合は、IO応答と対象データとをL−CPUとして動作する他のCPUへ送信する。このため、CPU20aは、L−CPUとR−CPUとが異なる場合にも、CPU間通信の回数を3回に抑えるので、データ転送性能を向上させることができる。
また、CPU20aは、H−CPUに対してデータ転送応答を出力する。このため、CPU20aは、データの転送が行われたことをH−CPUに識別させることができる。
また、CPU20aは、L−CPU−IDが格納されたデータ転送要求を受信し、データ転送要求に格納されたL−CPU−IDがCPU20aのIDと一致するか否かを判別する。つまり、CPU20aは、IO応答の宛先となるCPUのIDがCPU20aのIDであるか否かを判別する。そして、CPU20aは、データ転送要求に格納されたL−CPU−IDがCPU20aのIDと一致する場合は、CPU20aがL−CPUであると判別する。このため、CPU20aは、容易に、自身がL−CPUであるか否かを容易に判別することができる。
また、CPU20aのIC35は、データが格納された応答を受信した場合には、IO要求に係る処理が終了したと判別する。このため、CPU20aは、データを受信していないにも係らず、IO要求に係る処理が終了したことによるエラー等の発生を防ぐことができる。
これまで本発明の実施例について説明したが、実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
(1)各メッセージのフォーマットについて
上述した実施例1では、図6〜図9に各メッセージのフォーマットを例示した。しかし、実施例はこれに限定されるものではなく、CPU20aは、任意のフォーマットを有するメッセージを発行しても良い。
(2)実施形態について
上述したL2キャッシュ部30のL2キャッシュRAM31、メモリ管理部32、入力制御部33、出力制御部34の機能は、矛盾しない範囲で組み合わせて実施することができる。例えば、L2キャッシュ部30は、入力制御部33と出力制御部34とが発揮する機能を有する入出力制御部を有してもよい。
また、図1に示した情報処理装置1の構成は、あくまで一例であり、情報処理装置1は、任意の数のSB、および任意の数のCPUを有し、各CPUがCPU20aと同様の機能を発揮することとしてもよい。また、全てのCPUがCPU20aと同様の機能を発揮しなくともよい。例えば、情報処理装置1が有するCPUのうち、一部のCPUのみがメモリと接続されている場合は、メモリと接続されたCPUのみがCPU20aと同様の機能を発揮すればよい。また、他のCPUについては、CPU20aが発揮する機能のうち、L−CPU、およびR−CPUとして動作する機能を有すればよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)主記憶装置に接続される第1の演算処理装置と入出力装置とに接続する演算処理装置において、
前記主記憶装置からのデータを保持するキャッシュメモリと、
前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第1の演算処理装置に出力する第1の制御部と、
前記キャッシュメモリを制御するとともに、前記第1の演算処理装置に出力した入出力要求に基づいて前記第1の演算処理装置が出力する応答と対象データとを転送する指示を、前記第1の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第1の制御部に対して出力する第2の制御部を有することを特徴とする演算処理装置。
(付記2)前記第2の制御部は、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第1の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする付記1に記載の演算処理装置。
(付記3)前記第2の制御部は、前記第1の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする付記1または2に記載の演算処理装置。
(付記4)前記第2の制御部は、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする付記1−3のいずれか1つに記載の演算処理装置。
(付記5)前記第1の制御部は、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする付記1−4のいずれか1つに記載の演算処理装置。
(付記6)主記憶装置に接続された第1の演算処理装置と、
入出力装置に接続された第2の演算処理装置と
を有する情報処理装置において、
前記第2の演算処理装置は、
前記主記憶装置からデータを読み出して保持するキャッシュメモリと、
前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第1の演算処理装置に出力する第1の制御部と、
前記キャッシュメモリを制御するとともに、前記第1の演算処理装置に出力した入出力要求に基づいて前記第1の演算処理装置が出力する応答と対象データとを転送する指示を、前記第1の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第1の制御部に対して出力する第2の制御部とを有することを特徴とする情報処理装置。
(付記7)前記第2の制御部は、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第1の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする付記6に記載の情報処理装置。
(付記8)前記第2の制御部は、前記第1の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする付記6または7に記載の情報処理装置。
(付記9)前記第2の制御部は、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする付記6−8のいずれか1つに記載の情報処理装置。
(付記10)前記第1の制御部は、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする付記6−9のいずれか1つに記載の情報処理装置。
(付記11)主記憶装置に接続される第1の演算処理装置と入出力装置に接続するとともに、前記主記憶装置からのデータを保持するキャッシュメモリを有する演算処理装置の制御方法において、
前記演算処理装置が有する第1の制御部が、前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第1の演算処理装置に出力し、
前記演算処理装置が有する第2の制御部が、前記キャッシュメモリを制御するとともに、前記第1の演算処理装置に出力した入出力要求に基づいて前記第1の演算処理装置が出力する応答と対象データとを転送する指示を、前記第1の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別し、
前記第2の制御部が、前記宛先が自装置であると判別した場合、前記入出力要求に対する応答と対象データとを前記第1の制御部に対して出力することを特徴とする演算処理装置の制御方法。
(付記12)前記第2の制御部が、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第1の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする付記11に記載の演算処理装置の制御方法。
(付記13)前記第2の制御部が、前記第1の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする付記11または12に記載の演算処理装置の制御方法。
(付記14)前記第2の制御部が、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した演算子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする付記11−13のいずれか1つに記載の演算処理装置の制御方法。
(付記15)前記第1の制御部が、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする付記11−14のいずれか1つに記載の演算処理装置の制御方法。
1 情報処理装置
2a、2b XB
3a〜3h SB
4 PCIe
10a〜10d メモリ
20a〜20d CPU
30、40 L2キャッシュ部
31 L2キャッシュRAM
32 メモリ管理部
33 入力制御部
34 出力制御部
35 IC
36 PCI制御部
37 コア
38 MAC
39 通信制御部

Claims (7)

  1. 主記憶装置に接続される第1の演算処理装置と入出力装置とに接続する演算処理装置において、
    前記主記憶装置からのデータを保持するキャッシュメモリと、
    前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第1の演算処理装置に出力する第1の制御部と、
    前記キャッシュメモリを制御するとともに、前記第1の演算処理装置に出力した入出力要求に基づいて前記第1の演算処理装置が出力する応答と対象データとを転送する指示を、前記第1の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第1の制御部に対して出力する第2の制御部を有することを特徴とする演算処理装置。
  2. 前記第2の制御部は、前記応答の宛先が自装置ではないと判別した場合は、前記応答と前記対象データとを前記第1の演算処理装置に入出力要求を出力した演算処理装置へ送信することを特徴とする請求項1に記載の演算処理装置。
  3. 前記第2の制御部は、前記第1の演算処理装置に対して、前記指示に対する応答を出力することを特徴とする請求項1または2に記載の演算処理装置。
  4. 前記第2の制御部は、前記応答の宛先を示す識別子を前記指示から抽出し、当該抽出した識別子が自装置の識別子と一致した場合には、前記応答の宛先が自装置であると判別することを特徴とする請求項1−3のいずれか1つに記載の演算処理装置。
  5. 前記第1の制御部は、前記応答と前記対象データとを受信した場合には、前記入出力要求に係る処理が終了したと判別することを特徴とする請求項1−4のいずれか1つに記載の演算処理装置。
  6. 主記憶装置に接続された第1の演算処理装置と、
    入出力装置に接続された第2の演算処理装置と
    を有する情報処理装置において、
    前記第2の演算処理装置は、
    前記主記憶装置からデータを読み出して保持するキャッシュメモリと、
    前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第1の演算処理装置に出力する第1の制御部と、
    前記キャッシュメモリを制御するとともに、前記第1の演算処理装置に出力した入出力要求に基づいて前記第1の演算処理装置が出力する応答と対象データとを転送する指示を、前記第1の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別するとともに、前記宛先が自装置であると判別したとき、前記入出力要求に対する応答と対象データとを前記第1の制御部に対して出力する第2の制御部とを有することを特徴とする情報処理装置。
  7. 主記憶装置に接続される第1の演算処理装置と入出力装置に接続するとともに、前記主記憶装置からのデータを保持するキャッシュメモリを有する演算処理装置の制御方法において、
    前記演算処理装置が有する第1の制御部が、前記入出力装置によるデータの取得を制御するとともに、前記入出力装置から前記主記憶装置が記憶する対象データを転送するよう要求された場合、前記対象データの転送を要求する入出力要求を前記第1の演算処理装置に出力し、
    前記演算処理装置が有する第2の制御部が、前記キャッシュメモリを制御するとともに、前記第1の演算処理装置に出力した入出力要求に基づいて前記第1の演算処理装置が出力する応答と対象データとを転送する指示を、前記第1の演算処理装置から受信した場合、前記応答の宛先が自装置であるかを判別し、
    前記第2の制御部が、前記宛先が自装置であると判別した場合、前記入出力要求に対する応答と対象データとを前記第1の制御部に対して出力することを特徴とする演算処理装置の制御方法。
JP2012192692A 2012-08-31 2012-08-31 演算処理装置、情報処理装置および演算処理装置の制御方法 Active JP6028470B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012192692A JP6028470B2 (ja) 2012-08-31 2012-08-31 演算処理装置、情報処理装置および演算処理装置の制御方法
US13/905,024 US20140068179A1 (en) 2012-08-31 2013-05-29 Processor, information processing apparatus, and control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012192692A JP6028470B2 (ja) 2012-08-31 2012-08-31 演算処理装置、情報処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2014048986A JP2014048986A (ja) 2014-03-17
JP6028470B2 true JP6028470B2 (ja) 2016-11-16

Family

ID=50189114

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012192692A Active JP6028470B2 (ja) 2012-08-31 2012-08-31 演算処理装置、情報処理装置および演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US20140068179A1 (ja)
JP (1) JP6028470B2 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4597078A (en) * 1983-10-19 1986-06-24 Digital Equipment Corporation Bridge circuit for interconnecting networks
JP2001282764A (ja) * 2000-03-30 2001-10-12 Hitachi Ltd マルチプロセッサシステム
US7155572B2 (en) * 2003-01-27 2006-12-26 Advanced Micro Devices, Inc. Method and apparatus for injecting write data into a cache
US7240165B2 (en) * 2004-01-15 2007-07-03 Hewlett-Packard Development Company, L.P. System and method for providing parallel data requests
JP5338375B2 (ja) * 2009-02-26 2013-11-13 富士通株式会社 演算処理装置、情報処理装置および演算処理装置の制御方法

Also Published As

Publication number Publication date
US20140068179A1 (en) 2014-03-06
JP2014048986A (ja) 2014-03-17

Similar Documents

Publication Publication Date Title
US8949547B2 (en) Coherency controller and method for data hazard handling for copending data access requests
TWI416322B (zh) 最佳化以目錄為基礎的一致性協定中之同時存取
US9547597B2 (en) Selection of post-request action based on combined response and input from the request source
US9208091B2 (en) Coherent attached processor proxy having hybrid directory
US8504779B2 (en) Memory coherence directory supporting remotely sourced requests of nodal scope
US8176261B2 (en) Information processing apparatus and data transfer method
JP4673585B2 (ja) メモリシステム制御装置およびメモリシステム制御方法
CN104106061A (zh) 在偏好加载的系统中存在加载竞争的情况下用于存储的前进机制
US9069674B2 (en) Coherent proxy for attached processor
JP5499987B2 (ja) 共有キャッシュメモリ装置
US9367458B2 (en) Programmable coherent proxy for attached processor
EP3788494B1 (en) Transfer protocol in a data processing network
KR102581572B1 (ko) 허브 디바이스 및 그의 작동방법
US9135174B2 (en) Coherent attached processor proxy supporting master parking
KR101695845B1 (ko) 캐시 일관성 유지 장치 및 방법, 이를 이용하는 멀티프로세서 장치
US10775870B2 (en) System and method for maintaining cache coherency
JP6028470B2 (ja) 演算処理装置、情報処理装置および演算処理装置の制御方法
JP4335298B2 (ja) スヌープ制御方法および情報処理装置
US9910778B2 (en) Operation processing apparatus and control method of operation processing apparatus
JP2006185044A (ja) マルチプロセッサシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160322

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160419

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160609

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160920

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161003

R150 Certificate of patent or registration of utility model

Ref document number: 6028470

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150