IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-プロセッサ及び情報処理装置 図1
  • 特開-プロセッサ及び情報処理装置 図2
  • 特開-プロセッサ及び情報処理装置 図3
  • 特開-プロセッサ及び情報処理装置 図4
  • 特開-プロセッサ及び情報処理装置 図5
  • 特開-プロセッサ及び情報処理装置 図6
  • 特開-プロセッサ及び情報処理装置 図7
  • 特開-プロセッサ及び情報処理装置 図8
  • 特開-プロセッサ及び情報処理装置 図9
  • 特開-プロセッサ及び情報処理装置 図10
  • 特開-プロセッサ及び情報処理装置 図11
  • 特開-プロセッサ及び情報処理装置 図12
  • 特開-プロセッサ及び情報処理装置 図13
  • 特開-プロセッサ及び情報処理装置 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024165938
(43)【公開日】2024-11-28
(54)【発明の名称】プロセッサ及び情報処理装置
(51)【国際特許分類】
   G06F 9/34 20180101AFI20241121BHJP
   G06F 12/14 20060101ALI20241121BHJP
   G06F 12/00 20060101ALI20241121BHJP
   G06F 9/38 20180101ALI20241121BHJP
【FI】
G06F9/34 350B
G06F12/14 510D
G06F12/00 560D
G06F9/38 350A
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2023082542
(22)【出願日】2023-05-18
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110003649
【氏名又は名称】弁理士法人真田特許事務所
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】赤澤 直史
【テーマコード(参考)】
5B013
5B017
5B033
5B160
【Fターム(参考)】
5B013CC06
5B017AA01
5B017BA01
5B017BB09
5B017CA01
5B033DB09
5B033DB12
5B160CB05
(57)【要約】
【課題】メモリ領域が複数のメモリに分散されて配置されている構成においても、順序保障を守りつつ、読み出しまたは書き込み要求の発行のスループットを向上する。
【解決手段】プロセッサは、書き込みまたは読み出しの要求を発行する発行部と、複数のメモリにそれぞれ接続される複数のメモリインタフェースと、前記要求の宛先のメモリアドレスと、前記要求の順番を示す値とを格納する1つ以上の第1レジスタと、前記順番を示す値ごとに要求が完了したことが書き込まれる第2レジスタと、を備え、前記第1レジスタは、前記第2レジスタに基づいて、前記順番を示す値が第1の値以下である要求が全て完了したことを確認するまで、前記順番を示す値が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する。
【選択図】図3
【特許請求の範囲】
【請求項1】
書き込みまたは読み出しの要求を発行する発行部と、
複数のメモリにそれぞれ接続される複数のメモリインタフェースと、
前記要求の宛先のメモリアドレスと、前記要求の順番を示す値とを格納する1つ以上の第1レジスタと、
前記順番を示す値ごとに前記要求が完了したことが書き込まれる第2レジスタと、
を備え、
前記第1レジスタは、前記第2レジスタに基づいて、前記順番を示す値が第1の値以下である要求が全て完了したことを確認するまで、前記順番を示す値が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、
プロセッサ。
【請求項2】
前記複数のメモリインタフェースには、それぞれ前記第1レジスタ及び前記第2レジスタが設けられており、
前記順番が前記第1の値である前記要求が完了した場合に、前記第1の値が前記複数のメモリインタフェースに通知され、
それぞれの前記第2レジスタには、前記第1の値である前記要求が完了したことが書き込まれ、
前記第1レジスタは、対応する前記第2レジスタを監視し、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、
請求項1に記載のプロセッサ。
【請求項3】
前記第2レジスタは、前記発行部に設けられ、
前記順番が前記第1の値である前記要求が完了した場合に、前記第1の値が前記発行部に通知され、前記第1の値である前記要求が完了したことが前記第2レジスタに書き込まれ、
前記発行部は、前記第2レジスタを監視し、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認した場合に、前記第1レジスタに通知し、
前記第1レジスタは、前記通知を通じて、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、
請求項1に記載のプロセッサ。
【請求項4】
前記発行部は、既に発行済みの前記要求のすべてが完了したことを確認した状態において、前記第2レジスタに対して前記順番を示す値を初期化する命令を発行する、請求項1~3のいずれか1項に記載のプロセッサ。
【請求項5】
複数のメモリと、プロセッサを有する情報処理装置であって、
前記プロセッサは、
書き込みまたは読み出しの要求を発行する発行部と、
複数のメモリにそれぞれ接続されるメモリインタフェースと、
前記要求の宛先のメモリアドレスと、前記要求の順番を示す値とを格納する1つ以上の第1レジスタと、
前記順番を示す値ごとに前記要求が完了したことが書き込まれる第2レジスタと、
を備え、
前記第1レジスタは、前記第2レジスタに基づいて、前記順番の値が第1の値以下である要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサ及び情報処理装置に関する。
【背景技術】
【0002】
プロセッサにおいて、読み出しまたは書き込み要求の発行順序と、要求に基づく読み出しまたは書き込み命令の実行順序が一致するように順序保障がされる場合がある。順序保障を実現するために、発行元は、先行する要求がすべて実行完了されたことを確認するまで、次の要求の発行を抑止する。したがって、読み出しまたは書き込み要求の単位時間の出力件数であるスループットが低下する場合がある。先行する要求にバッファミス等が生じた場合に、共有バッファを用いて、後続する要求の追い越し処理を可能にする技術が提案されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2004-005710号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
メモリ領域が複数のメモリに分散されて配置されている構成において、順序保障を守りつつ、読み出しまたは書き込み要求発行のスループットの低下を回避することが望まれている。
【0005】
1つの側面では、本発明は、メモリ領域が複数のメモリに分散されて配置されている構成において、順序保障を守りつつ、読み出しまたは書き込み要求の発行のスループットを向上することを目的の1つとする。
【課題を解決するための手段】
【0006】
1つの側面では、プロセッサは、書き込みまたは読み出しの要求を発行する発行部と、複数のメモリにそれぞれ接続される複数のメモリインタフェースと、前記要求の宛先のメモリアドレスと、前記要求の順番を示す値とを格納する1つ以上の第1レジスタと、前記順番を示す値ごとに要求が完了したことが書き込まれる第2レジスタと、を備え、前記第1レジスタは、前記第2レジスタに基づいて、前記順番を示す値が第1の値以下である要求が全て完了したことを確認するまで、前記順番を示す値が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する。
【発明の効果】
【0007】
1つの側面では、本発明は、メモリ領域が複数のメモリに分散されて配置されている構成においても、順序保障を守りつつ、読み出しまたは書き込み要求の発行のスループットを向上することができる。
【図面の簡単な説明】
【0008】
図1】順序保障がされた先行する要求がすべて実行完了されたことを確認してから後続する要求を発行する場合のタイミングチャートの一例である。
図2図1の処理の一例を示すフローチャートである。
図3】第1実施形態に係る情報処理装置のハードウェア(HW)構成例を示すブロック図である。
図4】第1実施形態におけるシーケンスレジスタのフォーマットの一例を示す図である。
図5】第1実施形態におけるロックレジスタのフォーマットの一例を示す図である。
図6】第1実施形態に係る情報処理装置における処理手順の概要を説明する図である。
図7】第1実施形態に係る情報処理装置による処理手順を示すタイミングチャートの一例である。
図8】第1実施形態に係る情報処理装置による順序情報のリセット手順を示すタイミングチャートの一例である。
図9】第1実施形態に係る情報処理装置によるIOリクエストの処理動作の一例を示すフローチャートである。
図10】第2実施形態に係る情報処理装置のHW構成例を示すブロック図である。
図11】第2実施形態におけるシーケンスレジスタのフォーマットの一例を示す図である。
図12】第2実施形態に係る情報処理装置における処理手順の概要を説明する図である。
図13】第2実施形態に係る情報処理装置による処理手順を示すタイミングチャートの一例である。
図14】第2実施形態に係る情報処理装置によるIOリクエストの処理動作の一例を示すフローチャートである。
【発明を実施するための形態】
【0009】
以下、図面を参照して一実施形態を説明する。但し、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0010】
〔A〕関連手法についての説明
図1は、順序保障がされた先行する要求がすべて実行完了されたことを確認してから後続する要求を発行する場合のタイミングチャートの一例である。図2は、図1の処理の一例を示すフローチャートである。
【0011】
図1においては、順序保障が要求されるIOリクエスト(SEQ=0)及びIOリクエスト(SEQ=1)がある場合が示されている。IOリクエストは、書き込みまたは読み出しの要求の一例である。
【0012】
順序保障が要求される場合、プロセッサは、先行して発行されたIOリクエストがすべて実行完了するまで、後続するIOリクエストについて実行を開始しない。したがって、図1の例では、プロセッサは、発行順序が先行するIOリクエスト(SEQ=0)について発行(a)して実行完了が確認されるまで(b)、次のIOリクエスト(SEQ=1)の発行(c)を抑制する。プロセッサは、IOリクエスト(SEQ=1)の実行を確認し(d)、以下同様に処理を実行する。
【0013】
図2に示されるように、リクエスト発行元にIOリクエストが到着すると(ステップS10)、IOリクエストの発行元は、先行している未完了の順序保障を要するIOリクエストがあるか否かを判断する(ステップS11)。先行している未完了の順序保障を要するIOリクエストがある場合には(ステップS11のYesルート参照)、発行元は、IOリクエストの発行を抑制する。発行元は、先行している順序保障を要するIOリクエストがすべて完了するのを待って(ステップS11のNoルート参照)、IOリクエストの要求先のメモリインタフェースにIOリクエストを発行する(ステップS12)。
【0014】
ロックレジスタは、IOリクエストの要求先アドレスをロック状態にする(ステップS13)。ロック状態においては、メモリインタフェースは、要求先アドレスへの他のリクエストを拒絶する。
【0015】
メモリインタフェースは、IOリクエストの命令、すなわち、要求先アドレスに対する読み出し命令または書き込み命令を実行する(ステップS14)。
【0016】
IOリクエストの完了が確認されると、ロックレジスタは、要求先アドレスのロック状態を解除する(ステップS15)。そして、メモリインタフェースは、IOリクエストの発行元にIOリクエストが完了したことを通知する(ステップS16)。
【0017】
プロセッサは、複数のメモリ#1及びメモリ#2を有する場合においても、図1及び図2に示す方法によって、順序保障を維持することができる。しかしながら、IOリクエスト発行元にて先行するIOリクエストの実行完了応答を待つ間、後続するIOリクエストの発行を抑止しなければいけないため、IOリクエストのスループット低下が懸念される。そこで、複数のメモリ#1及び#2を有し、メモリ領域が複数のメモリに分散されて配置されている構成においても、IOリクエストのスループットを向上させる実施形態の情報処理装置が示される。
【0018】
〔B〕第1実施形態
[B-1]ハードウェア構成例
図3は、第1実施形態に係る情報処理装置1のハードウェア(HW)構成例を示すブロック図である。
【0019】
情報処理装置1は、コンピュータシステムである。情報処理装置1は、プロセッサ100及び複数のメモリ3-1~3-4(メモリ3と総称する場合がある)を有する。情報処理装置1においては、メモリ領域が複数のメモリ3に分散される構成を有する。メモリ3の数は、図3に示される場合に限定されない。
【0020】
プロセッサ100は、種々の制御や演算を行う処理装置である。プロセッサ101は、メモリ3に読み込まれたOperating System(OS)やプログラムを実行することにより、種々の機能を実現する。なお、プロセッサ100は、CPU(Central Processing Unit)であってよい。プロセッサ100は、複数のCPUを含むマルチプロセッサであってもよく、複数のCPUコアを有するマルチコアプロセッサであってもよく、或いは、マルチコアプロセッサを複数有する構成であってもよい。本例では、プロセッサ100は、複数のCPUコアを有するマルチコアプロセッサである。
【0021】
プロセッサ100は、IOリクエスト発行元10、複数のメモリインタフェース20-1~20-4(メモリインタフェース20と総称する場合がある)、キャッシュ30-1~30-4(キャッシュ30と総称する場合がある)を有する。また、プロセッサ100は、キャッシュ30と通信可能なCPUコア31-1a、31-1b~31-4a、31-4b(CPUコア31と総称する場合がある)を有する。
【0022】
IOリクエスト発行元10は、IOリクエストを発行する。IOリクエストは、書き込みまたは読み出しの要求の一例である。本実施形態では、IOリクエストは、順序保障されている。IOリクエストは、メモリ3の要求先アドレスに対して、読み出し命令または書き込み命令を実行するための要求である。IOリクエスト発行元10は、書き込みまたは読み出しの要求を発行する発行部の一例である。
【0023】
IOリクエスト発行元10が発行する順序保障されているIOリクエストは、順序情報SEQ_ID及び要求先アドレスを含む。順序情報SEQ_IDは、IOリクエストの順番を示す値の一例である。要求先アドレスは、IOリクエストに基づく読み出し命令または書き込み命令がされるメモリアドレスを意味する。要求先アドレスは、参照アドレスまたは発行先アドレスと呼ばれる場合がある。順序保障されているIOリクエストは、順序保障フラグについての情報を含んでよい。順序保障フラグは、IOリクエストが順序保障されているIOリクエストであることを示す情報である。
【0024】
IOリクエスト発行元10は、シーケンスレジスタ11を有する。シーケンスレジスタ11は、IOリクエストの現在の順番(シーケンス)を記録する。IOリクエスト発行元10は、シーケンスレジスタ11を参照して、現在の順番を確認することによって、IOリクエストに順序情報SEQ_IDを付ける。
【0025】
メモリインタフェース20-1(#1)、20-2(#2)、20-3(#3)、20-4(#4)は、それぞれ、メモリ3-1(#1)、3-2(#2)、3-3(#3)、3-4(#4)に対応して設けられる。
【0026】
メモリインタフェース20は、対応するメモリ3に対して、IOリクエストに基づいて、要求先アドレスに書き込みまたは読み出しを行なう。
【0027】
メモリインタフェース20-1(#1)は、シーケンスレジスタ21-1(#1)及びロックレジスタ22-1(#1)を有する。同様に、メモリインタフェース20-2(#2)~20-4(#4)は、それぞれ、シーケンスレジスタ21-2(#2)~21-4(#4)及びロックレジスタ22-2(#2)~22-4(#4)を有する。
【0028】
シーケンスレジスタ21-1(#1)~21-4(#4)はシーケンスレジスタ21と総称される場合がある。ロックレジスタ22-1(#1)~22-4(#4)はロックレジスタ22と総称される場合がある。シーケンスレジスタ21は、IOリクエスト(すなわち、要求)の順番を示す値ごとにIOリクエストが完了したことが書き込まれる1つ以上の第2レジスタの一例である。ロックレジスタ22は、第1レジスタの一例である。
【0029】
各シーケンスレジスタ21には、情報処理装置1(すなわち、システム)全体で、順序情報を含むIOリクエストが完了したか否かを示す情報が書き込まれる。IOリクエストの完了は、IOリクエストに基づく書き込み命令または読み出し命令の完了を意味してよい。
【0030】
メモリインタフェース20-1は、メモリ3-1に対する、順序情報SEQ_IDを持つIOリクエストが完了した旨の通知を受けると、自己のシーケンスレジスタ21-1に完了情報を書き込む。さらに、メモリインタフェース20-1は、他のメモリインタフェース20-2~20-4にも、順序情報SEQ_IDを持つIOリクエストが完了した旨を通知する。メモリインタフェース20-2~20-4は、それぞれのメモリインタフェース20-2~20-4に含まれるシーケンスレジスタ21-2~21-4に完了情報を書き込む。
【0031】
図4は、第1実施形態におけるシーケンスレジスタ21のフォーマットの一例を示す図である。シーケンスレジスタ11のフォーマットも図4と同様である。
【0032】
シーケンスレジスタ21は、複数の順序情報(SEQ_ID)について、完了か否かを記録する。一例において、SEQ_ID=1のIOリクエストが発行され、完了した場合には、SEQ_ID_1に対して完了情報として1が記録される。
【0033】
複数のシーケンスレジスタ21は、複数の順序情報(SEQ_ID)を持つIOリクエストについての完了情報を互いに共有する。
【0034】
図3に戻り、各ロックレジスタ22-1~22-4は、複数のメモリ3-1~3-4のそれぞれに対応して設けられる。
【0035】
図5は、第1実施形態におけるロックレジスタ22のフォーマットの一例を示す図である。各メモリインタフェース20は、IOリクエスト発行元10からのIOリクエストに基づいて、ロックレジスタ22に、ロックアドレス60(すなわち、要求先アドレス)、順序保障フラグ61、及び順序情報62(SEQ_ID)を書き込む。
【0036】
ロックレジスタ22-1は、対応するシーケンスレジスタ21-1を常時監視する。ロックレジスタ22-1は、順序情報SEQ_IDで示される値が第1の値(例えば、SEQ_ID=1)以下であるIOリクエスト(例えば、SEQ_ID=0,及び1)がすべて完了したことを確認する。ロックレジスタ22-1は、当該確認がされるまでは、順番が第1の値(例えば、SEQ_ID=1)であるIOリクエストの宛先のメモリアドレスに対するロックを外さずにアドレスロックを延長、維持する。要求先アドレスがロック状態にある場合には、要求先アドレスへの他のIOリクエストが実行されない。
【0037】
換言すれば、ロックレジスタ22-1は、該当する発行順番以前のIOリクエストに基づく書き込みまたは読み出し命令がすべて完了したことを確認すると、ロックアドレス60に対するロック状態を解除する。一例において、順序保障フラグ61によってロックアドレス60がロック状態にあるか未ロック状態にあるかが示されてよい。ロックレジスタ22-1は、該当する順序情報SEQ_IDで示される発行順番以前のIOリクエストに基づく書き込みまたは読み出し命令がすべて完了したことを確認すると、ロックアドレス60に対するロック状態を解除する。
【0038】
図3に戻り、キャッシュ30は、CPUコア31から高速にアクセスできるメモリ回路である。図3においては、1つキャッシュ30に2つのCPUコア31が対応づけされているが、情報処理装置1は、この場合に限られない。
【0039】
図6は、第1実施形態に係る情報処理装置1における処理手順の概要を説明する図である。図6では、メモリ3-1における要求先アドレスに対するIOリクエストが発行される場合を例示する。
【0040】
メモリインタフェース20-1は、IOリクエスト発行元10によって発行されたIOリクエストを取得する。メモリインタフェース20-1は、ロックレジスタ22-1に、ロックアドレス60(すなわち、要求先アドレス)、及び順序情報SEQ_IDを書き込む(処理(1))。
【0041】
メモリインタフェース20-1は、IOリクエストの処理、すなわち、IOリクエストに基づく書き込み命令または読み出し命令を実行する(処理(2))。メモリ3-1においてIOリクエストが完了すると、シーケンスレジスタ21-1内の該当順序情報SEQ_IDに、完了した旨(例えば、フラグ値 1)が書き込まれる(処理(3))
【0042】
メモリインタフェース20-1は、完了したIOリクエストの順序情報SEQ_IDを他のメモリインタフェース20-2~20-4におけるシーケンスレジスタ21-1~21-4に通知する(処理(4))。メモリインタフェース20-1は、完了したIOリクエストの順序情報SEQ_IDをIOリクエスト発行元10のシーケンスレジスタ11にも通知してよい。
【0043】
ロックレジスタ22-1~22-4は、それぞれ対応するシーケンスレジスタ21-1~21-4を参照し、SEQ_IDで示される発行順番以前のIOリクエストのすべての完了が確認できた場合に、要求先アドレスのアドレスロックを解除する(処理(5))。
【0044】
図7は、第1実施形態に係る情報処理装置1による処理手順を示すタイミングチャートの一例である。図7においては、IOリクエストが、データ書き込み要求である場合を例に説明する。図7においては、IOリクエスト(順序情報SEQ_ID=0)及びIOリクエスト(順序情報SEQ_ID=1)が、この発行順で発行され、IOリクエスト(順序情報SEQ_ID=1)がIOリクエスト(順序情報SEQ_ID=0)に先立って完了する。
【0045】
図7に示されるように、IOリクエスト発行元10は、シーケンスレジスタ11を参照する。IOリクエスト発行元10は、シーケンスレジスタ11の参照結果に基づいて、SEQ_ID=0が現在のシーケンスであることを確認する。IOリクエスト発行元10は、当該確認の後に、SEQ_ID=0のIOリクエスト、すなわち、データ書き込み要求を発行する。
【0046】
図7の例では、SEQ_ID=0のIOリクエストの要求先は、メモリインタフェース20-2(図7におけるメモリインタフェース#2)である。メモリインタフェース20-2は、メモリ3-2(図7におけるメモリ#2)に対してメモリ書き込み命令を実行する。
【0047】
メモリインタフェース20-2は、メモリ書き込み命令の実行と並行して、ロックレジスタ22-2(図7におけるロックレジスタ#2)に対して、ロックアドレス60、順序保障フラグ61、及び順序情報62(SEQ_ID=0)の各情報を書き込む。ロックアドレス60は、要求先アドレスである。
【0048】
ロックレジスタ22-2は、メモリインタフェース20-2において命令実行中のIOリクエストの要求先アドレス(すなわち、ロックアドレス60)をロックして当該要求先アドレスに対する他のリクエストを拒否する。
【0049】
次いで、IOリクエスト発行元10は、シーケンスレジスタ11を参照する。IOリクエスト発行元は、シーケンスレジスタ11の参照結果に基づいて、SEQ_ID=0に後続するSEQ_ID=1が現在の順番、すなわちシーケンスであることを確認する。IOリクエスト発行元10は、当該確認の後に、SEQ_ID=1のIOリクエストを発行する。
【0050】
SEQ_ID=1のIOリクエストの要求先は、メモリインタフェース20-1(図7におけるメモリインタフェース#1)である。メモリインタフェース20-1は、メモリ3-1(図7におけるメモリ#1)に対してメモリ書き込み命令を実行する。
【0051】
メモリインタフェース20-1は、命令の実行と並行して、ロックレジスタ22-1(図7におけるロックレジスタ#1)に対して、ロックアドレス60、順序保障フラグ61、及び順序情報62(SEQ_ID=1)の各情報を書き込んでよい。
【0052】
ロックレジスタ22-1は、メモリインタフェース20-1において命令実行中のIOリクエストの要求先アドレス(すなわち、ロックアドレス60)をロックして当該要求先アドレスに対する他のリクエストを拒否する。
【0053】
SEQ_ID=1であるIOリクエストの処理、すなわちメモリ3-1へのデータ書き込み命令が完了した場合、メモリインタフェース20-1は、シーケンスレジスタ21-1に対して、SEQ_ID=1のIOリクエストが完了した旨を通知する。メモリインタフェース20-1は、SEQ_ID=1のIOリクエストが完了した旨を、他の複数のメモリインタフェース20-2~20-4のそれぞれに設けられた複数のシーケンスレジスタ21-2~21-4に対しも送信する。この結果、各シーケンスレジスタ21に対して、SEQ_ID=1のIOリクエストが完了したことが書き込まれる。一例において、SEQ_ID 1に対して完了情報として1が記録される。SEQ_ID=1のIOリクエストが、SEQ_ID=0のIOリクエストよりも早く完了した場合も、当該処理が実行される。
【0054】
SEQ_ID=0であるIOリクエストの処理であるメモリ3-2へのデータ書き込み命令が完了した場合、メモリインタフェース20-2は、シーケンスレジスタ21-2に対して、SEQ_ID=0のIOリクエストが完了した旨を通知する。メモリインタフェース20-2は、SEQ_ID=0のIOリクエストの完了通知を、他のメモリインタフェース20-1、20-3、及び20-4におけるシーケンスレジスタ21-1、21-3、及び21-4に対して送信する。
【0055】
メモリインタフェース20-2は、シーケンスレジスタ21-2の値を確認し、SEQ_ID=0以前の要求が完了していることが確認できた場合に、ロックレジスタ22-2の順序保障フラグ61を0にする。これにより、ロックレジスタ22-2は、ロックアドレス60のロックを解除して当該アドレスに対する他のリクエストを受け付ける状態とする。メモリインタフェース20-2は、IOリクエスト発行元10のシーケンスレジスタ11にも、SEQ_ID=0の完了通知を行なう。
【0056】
メモリインタフェース20-1は、シーケンスレジスタ21-1の値を確認し、SEQ_ID=1以前の要求が完了していることが確認できた場合に、ロックレジスタ22-1の順序保障フラグ61を0にする。これにより、ロックレジスタ22-1は、ロックアドレス60のロックを解除して当該アドレスに対する他のリクエストを受け付ける状態とする。メモリインタフェース20-1は、IOリクエスト発行元10のシーケンスレジスタ11にも、SEQ_ID=1の完了通知を行なう。
【0057】
図7に示される処理によれば、IOリクエストの要求先アドレスが、複数のメモリ3-1~3-4に分散されている構成においても、IOリクエストのスループットを高めることができる。具体的には、先行した発行されたIOリクエスト(SEQ_ID=0)の完了通知を待つことなく、IOリクエスト(SEQ_ID=1)を発行することができる。各メモリインタフェースは、IOリクエストが完了している状況においても、発行順番以前のすべての命令の完了通知が来るまで要求先アドレスに対する読み出し等の他の命令の実行を防ぐことができる。したがって、IOリクエストの順序を保障することができる。
【0058】
図7に示したとおり、各メモリインタフェース20は、IOリクエスト発行元10のシーケンスレジスタ11にも、発行済みの順序情報62(SEQ_ID)を含むIOリクエストについて、完了した旨を通知する。したがって、IOリクエスト発行元10は、シーケンスレジスタ11を参照することで、順序保障がされるIOリクエストがすべて完了した状態であることを確認することができる。
【0059】
IOリクエスト発行元10において、順序情報62(SEQ_ID)が付随したIOリクエストがすべて完了したことが確認された場合に、プロセッサ100は、順序情報62(SEQ_ID)を初期値(たとえば、SEQ_ID=0)にリセットすることができる。これにより、IOリクエスト発行元01は、SEQ_IDのラップアラウンドによる誤判断を回避することが可能となる。ラップアラウンドとは、図4のようなシーケンスレジスタ21を例にとれば、順序情報62(SEQ_ID)が、SEQ_ID=0から8の範囲を超えると、処理可能な範囲の最後SEQ_ID=8に達した後に、最初のSEQ_ID=0も戻ってしまう問題である。
【0060】
図8は、第1実施形態に係る情報処理装置1による順序情報のリセット手順を示すタイミングチャートの一例である。プロセッサ100は、順序保障がされるIOリクエストがすべて完了した状態において、リセット手順を実行する。
【0061】
シーケンスレジスタ11は、リセット手順が完了するまで、順序保障があるIOリクエストの発行を停止する。シーケンスレジスタ11は、IOリクエスト発行元10のシーケンスレジスタ11から、すべてのシーケンスレジスタ21-1~21-4に対してシーケンスレジスタ21-1~21-4の値をリセットする命令を発行する。
【0062】
シーケンスレジスタ21-1~21-4(図8では、シーケンスレジスタ#1,#2)は、リセット命令が到達した際に、シーケンスレジスタ21-1~21-4の値をそれぞれクリアする。シーケンスレジスタ21-1~21-4は、シーケンスレジスタ21-1~21-4の値のリセットを完了したことを示すSEQ_IDリセット完了通知をIOリクエスト発行元10にあるシーケンスレジスタ11に通知する。SEQ_IDリセット完了通がすべての宛先から戻ってきた場合、リセット手順が完了する。この結果、順序保障がされるIOリクエストの発行の停止を解除し、再開する。したがって、順序情報62は、再び、初期値SEQ_ID=0に戻る。このようにすることでシーケンスレジスタに格納できるSEQ_IDの数以上のIOリクエストの対応が可能となる。
【0063】
[B-2]動作例
図9は、第1実施形態に係る情報処理装置1によるIOリクエストの処理動作の一例を示すフローチャートである。
【0064】
IOリクエスト発行元10にIOリクエストが到着すると(ステップS21)、IOリクエスト発行元10は、順序情報62(SEQ_ID)を含むIQリクエストを発行する(ステップS22)。IOリクエストは、順序保障フラグ61及び要求先アドレスを含む。
【0065】
各メモリインタフェース20は、IOリクエスト発行元10からのIOリクエストに含まれる情報に基づいて、ロックレジスタ22に、ロックアドレス60(すなわち、要求先アドレス)、順序保障フラグ61、及び順序情報62(SEQ_ID)を書き込む。順序保障されたIOリクエストの場合、一例において、初期の順序保障フラグ61が1である。本実施形態では、順序保障フラグ61が1である場合に、順序保障があることを意味する。一例において、ロックレジスタ22は、順序保障フラグ61が1である場合に、ロックアドレス60をロックする(ステップS23)。
【0066】
各メモリインタフェース20は、IOリクエストの命令を実行する(ステップS24)。メモリインタフェース20は、IOリクエストの完了を確認する(ステップS25)。
【0067】
メモリインタフェース20は、IOリクエスト発行元10にIOリクエストが完了したことを通知する(ステップS26)。IOリクエスト発行元10がIOリクエストの完了の通知を受けることによって、IOリクエスト発行元10は、発行済みのIOリクエストが完了している状況かを判断し、リセット手順(図8)を実行することができる。
【0068】
メモリインタフェース20は、すべてのシーケンスレジスタ21-1~21-4に、当該順序方法(SEQ_ID)のIOリクエストが完了した旨を通知する(ステップS27)。一例において、SEQ_ID=1のIOリクエストが発行され、完了した場合には、SEQ_ID 1に対して完了情報として1が記録される。
【0069】
メモリインタフェース20は、順序情報(SEQ_ID)で示される発行順番以前の正規情報を持つIOリクエストがすべて完了するのを待つ(ステップS28のNoルート参照)。メモリインタフェース20は、発行順番以前の順序情報を持つIOリクエストがすべて完了したことを確認できた場合(ステップS28のYESルート参照)、ステップS29に進む。
【0070】
ステップS29において、メモリインタフェース20は、当該発行順番のIOリクエストの要求先アドレスであるロックアドレスのロックを解除する。
【0071】
第1実施形態の情報処理装置1によれば、IOリクエストの要求先アドレスが、複数のメモリ3-1~3-4に分散されている構成においても、IOリクエストのスループットを高めることができる。さらに、プロセッサ100は、IOリクエスト発行元10において別途のIOリクエストに関する順序制御を付加することなく、順序保障することができる。
【0072】
[C]第2実施形態
[C-1]ハードウェア構成例
図10は、第2実施形態に係る情報処理装置1のHW構成例を示すブロック図である。情報処理装置1は、図3に示した情報処理装置1においてシーケンスレジスタ21-1~21-4が省略されている。IOリクエスト発行元10が参照するシーケンスレジスタ70が、第1実施形態のシーケンスレジスタ11と異なる。シーケンスレジスタ70は第1レジスタの一例である。第2実施形態の情報処理装置1の他の構成については、第1実施形態の情報処理装置1と同様であるので、繰り返しの説明を省略する。また、同様の構成部品は、同じ部材番号を用いて説明する。
【0073】
図11は、第2実施形態におけるシーケンスレジスタ70のフォーマットの一例を示す図である。シーケンスレジスタ70は、複数の順序情報(SEQ_ID)について、完了か否かを記録する完了情報記録部71と、現在の順番(SEQ_ID)を示す現在順番情報部72とを含む。
【0074】
完了情報記録部71は、図4に示されるシーケンスレジスタ21と同じフォーマットである。完了情報記録部71は、複数の順番(SEQ_ID)について、完了か否かを記録する。
【0075】
現在順番情報部72は、現在の順番(シーケンス)を示す順序情報を格納する。IOリクエスト発行元10は、順序保障有りのIOリクエストを発行する毎に、現在順番情報部72の順序情報を更新する。
【0076】
図12は、第2実施形態に係る情報処理装置1における処理手順の概要を説明する図である。図12では、メモリ3-1における要求先アドレスに対するIOリクエストが発行される場合を例示する。
【0077】
IOリクエスト発行元10は、SEQ_ID=0のIOリクエストを発行する。IOリクエスト発行元10は、シーケンスレジスタ70の現在順番情報部72に、SEQ_ID=1を書き込む。
【0078】
メモリインタフェース20-1は、IOリクエスト発行元10によって発行されたIOリクエストを取得する。メモリインタフェース20-1は、ロックレジスタ22-1に、ロックアドレス60(すなわち、要求先アドレス)及び順序情報SEQ_IDを書き込む(処理(1))。メモリインタフェース20-1は、ロックレジスタ22-1に順序保障フラグを書き込んでよい。
【0079】
メモリインタフェース20-1は、IOリクエストの処理、すなわち、IOリクエストに基づく書き込み命令または読み出し命令を実行する(処理(2))。メモリ3-1においてIOリクエストが完了すると、メモリインタフェース20-1は、IOリクエスト発行元10が参照するシーケンスレジスタ70内の該当順序情報SEQ_IDに、完了した旨(例えば、フラグ値 1)を書き込む(処理(3))。
【0080】
IOリクエスト発行元10は、順序情報SEQ_IDを有するIOリクエストの完了報告を受けると、完了情報記録部71を参照する。IOリクエスト発行元10は、当該順序情報SEQ_IDで示される発行順序以下の順序情報のIOリクエストがすべて完了しているか否かを判断する。当該順序情報SEQ_IDで示される発行順序以下のIOリクエストがすべて完了している場合には、IOリクエスト発行元10は、すべてのロックレジスタ22-1~22-4に対して、ロックアドレス60のロックを解除させる(処理(4))。
【0081】
図13は、第2実施形態に係る情報処理装置1による処理手順を示すタイミングチャートの一例である。図13においては、IOリクエストが、データ書き込み要求である場合を例に説明する。図13においては、IOリクエスト(順序情報SEQ_ID=0)及びIOリクエスト(順序情報SEQ_ID=1)が、この発行順で発行され、IOリクエスト(順序情報SEQ_ID=1)がIOリクエスト(順序情報SEQ_ID=0)に先立って完了する。
【0082】
図13に示されるように、IOリクエスト発行元10は、シーケンスレジスタ70を参照する。IOリクエスト発行元10は、シーケンスレジスタ70の参照結果に基づいて、SEQ_ID=0が現在のシーケンスであることを確認する。IOリクエスト発行元10は、SEQ_ID=0のIOリクエスト、すなわち、データ書き込み要求を発行する。また、第2実施形態においては、IOリクエスト発行元10は、シーケンスレジスタ70の現在順番情報部72に現在のSEQ_ID=1を書き込む。
【0083】
図13の例では、SEQ_ID=0のIOリクエストの要求先は、メモリインタフェース20-2(図13におけるメモリインタフェース#2)である。メモリインタフェース20-2は、メモリ3-2(図7におけるメモリ#2)に対してメモリ書き込み命令を実行する。
【0084】
メモリインタフェース20-2は、メモリ書き込み命令の実行と並行して、ロックレジスタ22-2(図7におけるロックレジスタ#2)に対して、ロックアドレス60、順序保障フラグ61、及び順序情報62(SEQ_ID=0)の各情報を書き込む。ロックアドレス60は、要求先アドレスである。
【0085】
ロックレジスタ22-2は、メモリインタフェース20-2において命令実行中のIOリクエストの要求先アドレス(すなわち、ロックアドレス60)をロックして当該要求先アドレスに対する他のリクエストを拒否する。
【0086】
次いで、IOリクエスト発行元10は、シーケンスレジスタ70を参照する。IOリクエスト発行元10は、シーケンスレジスタ70の参照結果に基づいて、SEQ_ID=1が現在の順番、すなわち、シーケンスであることを確認する。IOリクエスト発行元10は、当該確認の後に、SEQ_ID=1のIOリクエストを発行する。また、IOリクエスト発行元10は、シーケンスレジスタ70の現在順番情報部72に現在のSEQ_ID=2を書き込む。
【0087】
SEQ_ID=1のIOリクエストの要求先は、メモリインタフェース20-1(図13におけるメモリインタフェース#1)である。メモリインタフェース20-1は、メモリ3-1(図13におけるメモリ#1)に対してメモリ書き込み命令を実行する。
【0088】
メモリインタフェース20-1は、命令の実行と並行して、ロックレジスタ22-1(図13におけるロックレジスタ#1)に対して、ロックアドレス60、順序保障フラグ61、及び順序情報62(SEQ_ID=1)の各情報を書き込んでよい。
【0089】
ロックレジスタ22-1は、メモリインタフェース20-1において命令実行中のIOリクエストの要求先アドレス(すなわち、ロックアドレス60)をロックして当該要求先アドレスに対する他のリクエストを拒否する。
【0090】
SEQ_ID=1であるIOリクエストの処理、すなわちメモリ3-1へデータ書き込み命令が完了した場合、メモリインタフェース20-1は、シーケンスレジスタ70に対して、SEQ_ID=1のIOリクエストが完了した旨を通知する。この結果、シーケンスレジスタ70において、SEQ_ID=1のIOリクエストが完了したことが書き込まれる。一例において、SEQ_ID=1の箇所にフラグ値 1が書き込まれる。メモリインタフェース20-1は、IOリクエスト発行元10に対して完了通知を送る。
【0091】
SEQ_ID=0のIOリクエストが完了していないので、シーケンスレジスタ70において、SEQ_ID=1以前のすべてのIOリクエストが完了していることは確認されない。したがって、IOリクエスト発行元10は、すべてのロックレジスタ22-1~22-4に対するロック解除を指令しない。
【0092】
その後に、SEQ_ID=0のIOリクエストの処理が完了した場合、メモリインタフェース20-2は、シーケンスレジスタ70に対して、SEQ_ID=0のIOリクエストが完了した旨を通知する。この結果、シーケンスレジスタ70において、SEQ_ID=0のIOリクエストが完了したことが書き込まれる。一例において、SEQ_ID=0の箇所にフラグ値 1が書き込まれる。メモリインタフェース20-2は、IOリクエスト発行元10に対して完了通知を送る。
【0093】
IOリクエスト発行元10は、シーケンスレジスタ70を参照する。IOリクエスト発行元10は、SEQ_ID=1以下のIOリクエストが完了していることを確認する。IOリクエスト発行元10は、当該完了を確認できたら、IOリクエスト発行元10は、SEQ_ID=1以下のIOリクエストについて、ロックレジスタの順序保障フラグを0(順序保障なし)の状態とする旨の解除指令を通知する。指令は、SEQ_ID=1以下のIOリクエストの完了通知であってよい。換言すれば、IOリクエスト発行元10は、発行順番以前の要求がすべて完了したことを確認すると、各ロックレジスタ22-1~22-4に対して、発行順番以前のすべての書き込みまたは読み出し要求についてロックを解除させる。各メモリインタフェース20は、指令に基づいて、SEQ_ID=1以下のロックアドレス60をすべて解除する。
【0094】
この結果、プロセッサ100は、ロックアドレス60に対する他のIOリクエストを受け付ける状態とする。ただし、解除指令の通知以前に発行されたIOリクエストはこの解除指令の通知を追い越してはならない。
【0095】
第2実施形態においては、IOリクエスト発行元10は、IOリクエストがすべて完了したことを確認することができる。この場合に、プロセッサ100は、順序情報62(SEQ_ID)を初期値(たとえば、SEQ_ID=0)にリセットすることができる。この処理は、第1実施形態の図8において説明した場合と同様である。したがって、繰り返しの説明を省略する。
【0096】
[C-2]動作例
図14は、第2実施形態に係る情報処理装置1によるIOリクエストの処理動作の一例を示すフローチャートである。
【0097】
図14のステップS31~ステップS36の処理は、図9のステップS21~ステップS26の処理と基本的に同様である。したがって、これらの処理についての繰り返しの説明が省略される。
【0098】
IOリクエスト発行元10は、順序情報SEQ_IDを有するIOリクエストの完了報告を受けると、完了情報記録部71を参照する。IOリクエスト発行元10は、当該順序情報SEQ_IDで示される発行順序以下の順序情報のIOリクエストがすべて完了しているか否かを確認する(ステップS37)。IOリクエスト発行元10は、当該順序情報SEQ_IDで示される発行順序以下のIOリクエストがすべて完了していると確認されまで待つ(ステップS37のNoルート参照)。IOリクエスト発行元10は、当該順序情報SEQ_IDで示される発行順序以下のIOリクエストがすべて完了していると確認すると(ステップS37のYesルート参照)、処理は、ステップS38に進む。
【0099】
ステップS38において、IOリクエスト発行元10は、すべてのIOリクエスト発行先のメモリインタフェース20-1~20-4に対して、リクエスト完了が確認されたIOリクエストのSEQ_IDについて通知する。当該通知は、すべてのロックレジスタ22-1~22-4に対して、ロックアドレス60のロックを解除させる指令である。
【0100】
各メモリインタフェース20は、IOリクエスト発行元10からの通知に基づいて、ロックアドレス60のロックを解除(解放)する(ステップS39)。一例において、各メモリインタフェース20は、各ロックレジスタ22において、完了が確認されたIOリクエストのSEQ_IDに対応する順序保障フラグを0とする。
【0101】
第2実施形態の情報処理装置1によれば、IOリクエストの要求先アドレスが、複数のメモリ3-1~3-4に分散されている構成においても、IOリクエストのスループットを高めることができる。さらに、各メモリインタフェース20におけるシーケンスレジスタ21を省略することができるので、制御を簡略化することができる。
【0102】
[D]実施形態の効果
上述した第1及び第2の実施形態の一例によれば、例えば、以下の作用効果を奏することができる。
【0103】
プロセッサ100は、書き込みまたは読み出し要求を発行するIOリクエスト発行元10を備える。また、プロセッサ100は、複数のメモリ3にそれぞれ接続されるメモリインタフェース20を備える。プロセッサ100は、IOリクエストの宛先のメモリアドレスと、IOリクエストの順番を示す値とを格納する1つ以上のロックレジスタ22を備える。プロセッサ100は、順番を示す値ごとにIOリクエストが完了したことが書き込まれるシーケンスレジスタ21を備える。また、ロックアドレス60は、シーケンスレジスタ21に基づいて、順番の値が第1の値以下である要求が全て完了したことを確認するまで、順番が第1の値である要求の宛先のメモリアドレスに対するロックを延長する。
【0104】
これにより、IOリクエストは完了しているが、順番の値(SEQ ID)以下の全ての命令の完了通知が来るまで該当アドレスに対する他の命令の実行を防ぐことができる。したがって、順序保障を守りつつ、読み出しまたは書き込み要求であるIOリクエスト発行のスループットを向上することができる。特に、メモリ領域が複数のメモリに分散されて配置されている構成のために、順序保障をする共有バッファを持つことができない構成においても、読み出しまたは書き込み要求であるIOリクエスト発行のスループットを向上することができる。
【0105】
記複数のメモリインタフェース20には、それぞれシーケンスレジスタ21及びロックレジスタ22が設けられる。順番が第1の値(SEQ_ID_N)である要求が完了した場合に、前記第1の値が複数のメモリインタフェース20に通知される。それぞれの前記シーケンスレジスタ21には、第1の値である要求が完了したことが書き込まれる。ロックレジスタ22は、対応する前記第2レジスタを監視し、順番の値が第1の値以下である要求が全て完了したことを確認するまで、順番が第1の値である要求の宛先のメモリアドレスに対するロックを延長する。
【0106】
これにより、プロセッサ100は、IOリクエスト発行元10において別途のIOリクエストに関する順序制御を付加することなく、順序保障することができる。
【0107】
シーケンスレジスタ70は、IOリクエスト発行元10に設けられる。順番が第1の値である要求が完了した場合に、第1の値がIOリクエスト発行元10に通知され、第1の値である要求が完了したことがシーケンスレジスタ70に書き込まれる。IOリクエスト発行元10は、シーケンスレジスタ70を監視し、順番の値が第1の値以下である要求が全て完了したことを確認した場合に、ロックレジスタ22に通知する。ロックレジスタ22は、通知を通じて、順番の値が第1の値以下である要求が全て完了したことを確認するまで、順番が第1の値である要求の宛先のメモリアドレスに対するロックを延長する。
【0108】
これにより、各メモリインタフェース20におけるシーケンスレジスタ21を省略することができるので、制御を簡略化することができる。
【0109】
IOリクエスト発行元10は、既に発行ずみのIOリクエストのすべてが完了したことを確認した状態において、1つ以上のシーケンスレジスタ21に対してIOリクエスト求の順番を示す値を初期化する命令を発行する。
【0110】
これにより、シーケンスレジスタ21、70に格納できる順番の数以上のIOリクエストの対応が可能となる。したがって、順番の値についてラップアラウンドによる誤判断を回避することが可能となる。
【0111】
想定されるビジネスシーンにおける効能として、産業、教育、商取引など種々の分野において必要なコンピューティングの分野において、計算性能のさらなる向上に貢献することができる。
【0112】
[E]付記
以上の実施形態に関し、さらに以下の付記を開示する。
【0113】
(付記1)
書き込みまたは読み出しの要求を発行する発行部と、
複数のメモリにそれぞれ接続される複数のメモリインタフェースと、
前記要求の宛先のメモリアドレスと、前記要求の順番を示す値とを格納する1つ以上の第1レジスタと、
前記順番を示す値ごとに前記要求が完了したことが書き込まれる第2レジスタと、
を備え、
前記第1レジスタは、前記第2レジスタに基づいて、前記順番を示す値が第1の値以下である要求が全て完了したことを確認するまで、前記順番を示す値が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、プロセッサ。
【0114】
(付記2)
前記複数のメモリインタフェースには、それぞれ前記第1レジスタ及び前記第2レジスタが設けられており、
前記順番が前記第1の値である前記要求が完了した場合に、前記第1の値が前記複数のメモリインタフェースに通知され、
それぞれの前記第2レジスタには、前記第1の値である前記要求が完了したことが書き込まれ、
前記第1レジスタは、対応する前記第2レジスタを監視し、前記順番の値が第1の値以下である前記要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、付記1に記載のプロセッサ。
【0115】
(付記3)
前記第2レジスタは、前記発行部に設けられ、
前記順番が前記第1の値である前記要求が完了した場合に、前記第1の値が前記発行部に通知され、前記第1の値である前記要求が完了したことが前記第2レジスタに書き込まれ、
前記発行部は、前記第2レジスタを監視し、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認した場合に、前記第1レジスタに通知し、
前記第1レジスタは、前記通知を通じて、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、付記1に記載のプロセッサ。
【0116】
(付記4)
前記発行部は、既に発行済みの前記要求のすべてが完了したことを確認した状態において、前記第2レジスタに対して前記順番を示す値を初期化する命令を発行する、付記1~3のいずれか1項に記載のプロセッサ。
【0117】
(付記5)
複数のメモリと、プロセッサを有する情報処理装置であって、
前記プロセッサは、書き込みまたは読み出しの要求を発行する発行部と、
複数のメモリにそれぞれ接続される複数のメモリインタフェースと、
前記要求の宛先のメモリアドレスと、前記要求の順番を示す値とを格納する1つ以上の第1レジスタと、
前記順番を示す値ごとに前記要求が完了したことが書き込まれる第2レジスタと、
を備え、
前記第1レジスタは、前記第2レジスタに基づいて、前記順番を示す値が第1の値以下である要求が全て完了したことを確認するまで、前記順番を示す値が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、情報処理装置。
【0118】
(付記6)
前記複数のメモリインタフェースには、それぞれ前記第1レジスタ及び前記第2レジスタが設けられており、
前記順番が前記第1の値である要求が完了した場合に、前記第1の値が前記複数のメモリインタフェースに通知され、
それぞれの前記第2レジスタには、前記第1の値である前記要求が完了したことが書き込まれ、
前記第1レジスタは、対応する前記第2レジスタを監視し、前記順番の値が第1の値以下である前記要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、付記5に記載の情報処理装置。
【0119】
(付記7)
前記第2レジスタは、前記発行部に設けられ、
前記順番が前記第1の値である前記要求が完了した場合に、前記第1の値が前記発行部に通知され、前記第1の値である前記要求が完了したことが前記第2レジスタに書き込まれ、
前記発行部は、前記第2レジスタを監視し、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認した場合に、前記第1レジスタに通知し、
前記第1レジスタは、前記通知を通じて、前記順番の値が前記第1の値以下である前記要求が全て完了したことを確認するまで、前記順番が前記第1の値である前記要求の宛先のメモリアドレスに対するロックを延長する、付記5に記載の情報処理装置。
【0120】
(付記8)
前記発行部は、既に発行済みの前記要求のすべてが完了したことを確認した状態において、前記第2レジスタに対して前記要求の順番を示す値を初期化する命令を発行する、付記5~7のいずれか1項に記載の情報処理装置。
【符号の説明】
【0121】
1 情報処理装置
3、3-1~3-4 メモリ
10 IOリクエスト発行元
11、21、21-1~21-4、70 シーケンスレジスタ
20、20-1~20-4 メモリインタフェース

22、22-1~22-4 ロックレジスタ
30、30-1~30-4 キャッシュ
31、31-1a~31-4b CPUコア
61 ロックアドレス
61 順序保障フラグ
62 順序情報
71 完了情報記録部
72 現在順番情報部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14