JP6146508B1 - 同期処理ユニット、デバイス、システムおよび方法 - Google Patents
同期処理ユニット、デバイス、システムおよび方法 Download PDFInfo
- Publication number
- JP6146508B1 JP6146508B1 JP2016070145A JP2016070145A JP6146508B1 JP 6146508 B1 JP6146508 B1 JP 6146508B1 JP 2016070145 A JP2016070145 A JP 2016070145A JP 2016070145 A JP2016070145 A JP 2016070145A JP 6146508 B1 JP6146508 B1 JP 6146508B1
- Authority
- JP
- Japan
- Prior art keywords
- memory
- memory access
- instruction
- synchronization processing
- access instruction
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1689—Synchronisation and timing concerns
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4063—Device-to-bus coupling
- G06F13/4068—Electrical coupling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Multi Processors (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】拡張バスで接続された複数のプロセッサ間で同期処理を行う際に、性能を低下させることなく、同期処理に用いるメモリに対するメモリアクセスの順序を保証する技術を提供する。【解決手段】同期処理ユニット22は、メモリ23にアクセスするメモリアクセス命令を受信すると、同期処理用の命令であるか否かを判定する命令判定部221と、メモリ23に対して発行されたメモリアクセス命令が完了しているか否かを判定する完了判定部222と、同期処理用でないメモリアクセス命令をメモリ23に対して発行し、同期処理用のメモリアクセス命令の発行を、先行のメモリアクセス命令が完了したことが完了判定部222により判定されるまで保留してから発行する発行部223と、同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を受信しないよう制御する後続制御部324と、を備える。【選択図】図1
Description
本発明は、拡張バスで接続された複数のプロセッサ間で同期処理を行う技術に関する。
近年、PCIe(Peripheral Component Interconnect Express)等に代表される拡張バスにおける拡張側のデバイスとして、プロセッサを接続するシステムが増えている。このような場合、ホスト側のプロセッサおよび拡張側のプロセッサ間、または、複数の拡張側のプロセッサ間における同期処理の仕組みが要求されることが多い。そこで、一般的に、ホスト側のメモリを用いて同期処理を行う方法が知られている。例えば、PCIeでは、PCIe接続の階層の根幹となる要素であるルート・コンプレックス側のメモリを用いて、同期処理が行われる。PCIeで定義されるアトミック処理や、トラフィッククラスを用いたホスト側のメモリに対するフラッシュ処理などは、ホスト側のメモリを用いて同期処理を行うのに適した仕組みである。
このような複数のプロセッサ間における同期処理に関連する技術の一例が、特許文献1に記載されている。特許文献1に記載された関連技術は、共有メモリを用いて、プロセッサ内部における複数の論理プロセッサ間で同期処理を行う。
また、複数のプロセッサ間における同期処理に関連する技術の他の一例が、特許文献2に記載されている。特許文献2に記載された関連技術は、共有メモリを用いて、ホスト装置およびグラフィックス処理装置間で同期処理を行う。
しかしながら、拡張バスで接続された複数のプロセッサ間で同期処理を行うには、上述した一般的な方法および関連技術には、以下の課題がある。
課題を説明するため、例えば、同期処理として、release−consistencyモデルを想定する。release−consistencyモデルは、同期処理の中では比較的オーバーヘッドが小さく、多くの計算システムで使用されている。
release−consistencyモデルは、処理を渡すReleaseプロセスと、処理を引き継ぐAcquireプロセスとの2種類のプロセスにより構成される。Releaseプロセスは、引き渡すデータをメモリに書いた後に、そのデータの引き渡しを通知するためのフラグをメモリに書く。Acquireプロセスは、データの引き渡しのフラグをポーリングし、フラグが成立した場合に、引き渡されたデータをメモリから読み出す。
ここで、ホスト側のプロセッサから拡張側のプロセッサに、処理を引き渡すことを考える。この場合、ホスト側のプロセッサがReleaseプロセスを実行し、拡張側のプロセッサがAcquireプロセスを実行する。このとき、拡張側によるAcquireプロセスにおけるポーリング処理により、性能上の問題が生じる。具体的には、拡張側によるAcquireプロセスは、ポーリング処理のため、ホスト側のメモリに対するメモリリードを、一定時間毎に発行することになる。このメモリリードは、拡張側およびホスト側を接続する拡張バスを往復する必要があるため、ターンアラウンドタイムが大きい。また、ポーリング処理は、ホスト側のメモリ上のフラグが成立するまで繰り返される。このため、拡張側によるAcquireプロセスが、拡張バス上の他のトランザクションに繰り返し影響を与えるという問題がある。
そこで、拡張側のメモリを用いて同期処理を行うことが考えられる。この場合、拡張側のAcquireプロセスは、拡張側のメモリに対してポーリング処理を行えばよい。したがって、上述のポーリング処理が拡張バスを繰り返し往復することによる性能上の問題は発生しない。しかしながら、PCIe等の拡張バスの仕様だけでは、拡張側のリード・ライトトランザクションのオーダリングの問題が生じる。
この問題を、上述のrelease−consistencyモデルを用いて、ホスト側のプロセッサから拡張側のプロセッサに処理を引き渡すケースで説明する。この場合、ホスト側によるReleaseプロセスは、拡張側のメモリに対して、引き渡すデータのメモリライトを発行し、その後、データの引き渡しを通知するためのフラグのメモリライトを発行する。同期処理のためには、これらのメモリライトが拡張側のメモリに反映される順序は、その発行順序通りでなければならない。
しかしながら、拡張バスのオーダリングの仕様だけでは、この順序保障をすることは難しい。なぜならば、拡張側のデバイス内でのメモリネットワークなどは、拡張バスの規格に準拠しないと考えられるからである。例えば、一般的には、アクセス対象のアドレスが同一でない場合には、メモリアクセス間での順序関係は、性能向上を理由として保障されないからである。
この問題を、図14を用いて模式的に説明する。図14において、ホスト側の拡張バスインタフェースから、拡張側のデバイスの拡張バスインタフェースに到達するまでは、メモリアクセスの発行された順序が、拡張バスの仕様により保証される。ところが、拡張側デバイスの拡張バスインタフェースからメモリまでの間で、メモリアクセス間の順序入れ替えが起こり得る。したがって、図14のように、これらのメモリアクセスは、ホスト側の拡張バスインタフェースを出た順序とは異なる順序で、拡張側のメモリに反映される場合がある。
このように、拡張側のメモリを用いて同期処理を行う場合、ホスト側から拡張側のメモリに対するメモリアクセスの順序が保証されないという問題が生じる。
また、特許文献1または特許文献2に記載された関連技術を、拡張バスで接続されたプロセッサ間の同期処理に適用することを考える。もし、これらの関連技術における共有メモリとして、拡張側のデバイスの外部のメモリを適用した場合、上述したように、拡張側のポーリング処理による性能低下の問題が生じる。一方、この関連技術の共有メモリとして、拡張側のメモリを適用する場合、上述したように、拡張側のメモリに対するメモリアクセスの順序が保証されないという問題が生じる。
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、拡張バスで接続された複数のプロセッサ間で同期処理を行う際に、性能を低下させることなく、同期処理に用いるメモリに対するメモリアクセスの順序を保証する技術を提供することを目的とする。
本発明の同期処理ユニットは、自装置を含むデバイスとの間を拡張バスで接続された外部装置または前記デバイス内のプロセッサから、前記デバイス内のメモリにアクセスするメモリアクセス命令を受信すると、前記メモリアクセス命令が同期処理を指示するための同期処理用の命令であるか否かを判定する命令判定部と、前記メモリに対して発行されたメモリアクセス命令が完了しているか否かを判定する完了判定部と、前記同期処理用でないと判定されたメモリアクセス命令を前記メモリに対して発行するとともに、前記同期処理用であると判定されたメモリアクセス命令の発行を、該同期処理用のメモリアクセス命令より前に受信された先行のメモリアクセス命令が完了したことが前記完了判定部により判定されるまで保留してから発行する発行部と、前記同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を、前記外部装置および前記デバイス内のプロセッサから受信しないよう制御する後続制御部と、を備える。
また、本発明のデバイスは、上述の同期処理ユニットと、前記メモリと、前記プロセッサと、を備える。
また、本発明のシステムは、上述のデバイスと、前記外部装置としてのホスト装置と、を備える。
また、本発明の方法は、同期処理ユニットが、自装置を含むデバイスとの間を拡張バスで接続された外部装置または前記デバイス内のプロセッサから、前記デバイス内のメモリにアクセスするメモリアクセス命令を受信すると、前記メモリアクセス命令が同期処理を指示するための同期処理用の命令であるか否かを判定し、前記同期処理用でないと判定されたメモリアクセス命令を前記メモリに対して発行し、前記同期処理用であると判定されたメモリアクセス命令の発行を、該同期処理用のメモリアクセス命令より前に受信された先行のメモリアクセス命令が完了したと判定されるまで保留してから発行し、前記同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を、前記外部装置および前記デバイス内のプロセッサから受信しないよう制御する。
本発明は、拡張バスで接続された複数のプロセッサ間で同期処理を行う際に、性能を低下させることなく、同期処理に用いるメモリに対するメモリアクセスの順序を保証する技術を提供することができる。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
本発明の第1の実施の形態としてのシステム1の構成を図1に示す。図1において、システム1は、ホスト装置10と、デバイス20とを備える。ホスト装置10およびデバイス20間は、拡張バスインタフェース91および92間を結ぶ拡張バス90により接続される。ホスト装置10は、CPU(Central Processing Unit)11と、メモリ13とを含む。ホスト装置10は、本発明における外部装置の実施形態の一例を構成する。デバイス20は、プロセッサ21と、同期処理ユニット22と、メモリ23とを含む。同期処理ユニット22は、命令判定部221と、完了判定部222と、発行部223と、後続制御部224とを有する。
本発明の第1の実施の形態としてのシステム1の構成を図1に示す。図1において、システム1は、ホスト装置10と、デバイス20とを備える。ホスト装置10およびデバイス20間は、拡張バスインタフェース91および92間を結ぶ拡張バス90により接続される。ホスト装置10は、CPU(Central Processing Unit)11と、メモリ13とを含む。ホスト装置10は、本発明における外部装置の実施形態の一例を構成する。デバイス20は、プロセッサ21と、同期処理ユニット22と、メモリ23とを含む。同期処理ユニット22は、命令判定部221と、完了判定部222と、発行部223と、後続制御部224とを有する。
ホスト装置10のメモリ13には、デバイス20との間での同期処理を行うためのプログラムおよび各種データが少なくとも記憶されている。CPU11は、メモリ13からプログラムおよび各種データを読みこんで実行することにより、デバイス20との同期処理を行う。同期処理において、CPU11は、デバイス20に対して、デバイス20内のメモリ23にアクセスするメモリアクセス命令を発行する。
デバイス20のメモリ23には、ホスト装置10との間での同期処理を行うためのプログラムおよび各種データが少なくとも記憶されている。プロセッサ21は、メモリ23からプログラムおよび各種データを読みこんで実行することにより、ホスト装置10との同期処理を実現する。同期処理において、プロセッサ21は、メモリ23にアクセスするメモリアクセス命令を発行する。
次に、同期処理ユニット22の各機能ブロックについて説明する。
命令判定部221は、ホスト装置10またはプロセッサ21から、メモリ23にアクセスするメモリアクセス命令を受信すると、受信したメモリアクセス命令が、同期処理を指示するための同期処理用の命令であるか否かを判定する。
完了判定部222は、メモリ23に対して発行されたメモリアクセス命令が完了しているか否かを判定する。
発行部223は、同期処理用でないと判定されたメモリアクセス命令を、メモリ23に対して発行する。また、発行部223は、同期処理用であると判定されたメモリアクセス命令を、先行のメモリアクセス命令が完了したと完了判定部222によって判定されるまで保留してからメモリ23に対して発行する。先行のメモリアクセス命令とは、同期処理用であると判定されたメモリアクセス命令より前に受信され、メモリ23に対して発行されたメモリアクセス命令である。
後続制御部224は、同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を受信しないよう制御する。具体的には、後続制御部224は、該当する期間、拡張バス90およびプロセッサ21に向けて、ビジーを示す制御情報を継続して送出することにより、後続のメモリアクセス命令を受信しないようにする。
以上のように構成されたシステム1の動作について、図2を参照して説明する。
まず、同期処理ユニット22は、メモリ23に対するメモリアクセス命令を受信する(ステップS1)。メモリアクセス命令は、ホスト装置10またはプロセッサ21から受信される。
次に、デバイス20の同期処理ユニット22において、命令判定部221は、受信したメモリアクセス命令が、同期処理用の命令であるか否かを判定する(ステップS2)。
命令判定部221において同期処理用でないと判定された場合、発行部223は、このメモリアクセス命令を、メモリ23に対して発行する(ステップS3)。この場合、同期処理ユニット22のこのメモリアクセス命令に関する動作は終了する。
また、命令判定部221において同期処理用であると判定された場合、完了判定部222は、同期処理用のメモリアクセス命令より前に受信された先行のメモリアクセス命令が完了しているか否かを判定する(ステップS4)。
完了判定部222において完了していると判定された場合、発行部223は、同期処理用のメモリアクセス命令を保留せずに発行する(ステップS3)。この場合、同期処理ユニット22のこのメモリアクセス命令に関する動作は終了する。
一方、完了判定部222において完了していないと判定された場合、発行部223は、同期処理用のメモリアクセス命令の発行を保留する(ステップS5)。
また、後続制御部224は、後続のメモリアクセス命令を受信しないよう、拡張バス90およびプロセッサ21に向けて、制御情報を送出する(ステップS6)。
そして、完了判定部222は、先行のメモリアクセス命令が完了しているか否かの判定を行う(ステップS7)。先行のメモリアクセス命令が完了していなければ、完了判定部222は、このステップを繰り返す。
完了判定部222において完了していると判定された場合(ステップS7でYes)、発行部223は、保留していた同期処理用のメモリアクセス命令を発行する(ステップS8)。
次に、後続制御部224は、ステップS8で発行した同期処理用のメモリアクセス命令が完了したか否かを判定する(ステップS9)。同期処理用のメモリアクセス命令が完了していなければ、後続制御部224は、このステップを繰り返す。
そして、同期処理用のメモリアクセス命令が完了すると(ステップS9でYes)、後続制御部224は、後続のメモリアクセス命令を受信するよう、制御情報の送出を停止する(ステップS10)。
以上で、システム1の動作の説明を終了する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としてのシステムは、拡張バスで接続された複数のプロセッサ間で同期処理を行う際に、性能を低下させることなく、同期処理に用いるメモリに対するメモリアクセスの順序を保証することができる。
その理由について説明する。本実施の形態では、拡張バスで接続されたホスト装置およびデバイス間の同期処理を、デバイス内のメモリを用いて行う際に、デバイス内の同期処理ユニットが、次のように動作するよう構成される。すなわち、ホスト装置またはデバイス内のプロセッサからデバイス内のメモリにアクセスするメモリアクセス命令を受信すると、命令判定部が、そのメモリアクセス命令が同期処理用の命令であるか否かを判定する。また、完了判定部が、同期処理用であると判定されたメモリアクセス命令より前に受信された先行のメモリアクセス命令が完了しているか否かを判定する。そして、発行部が、同期処理用でないと判定されたメモリアクセス命令をメモリに対して発行する。また、発行部が、同期処理用であると判定されたメモリアクセス命令の発行を先行のメモリアクセス命令が完了したと判定されるまで保留してから発行する。そして、後続制御部が、同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を、外部装置およびデバイス内のプロセッサから受信しないよう制御するからである。
このような構成により、本実施の形態において、拡張バスで接続されたホスト装置からデバイスに対して発行された同期処理用のメモリアクセス命令は、デバイス内において先行する同期処理用でないメモリアクセス命令が完了してからメモリに対して発行される。このため、本実施の形態は、デバイス内のメモリに対する同期処理用でないメモリアクセス命令と、同期処理用のメモリアクセス命令との間で、発行される順序を保証することができる。
例えば、前述のReleaseプロセスにおいて、ホスト装置が、同期処理用でないメモリアクセス命令を用いて、引き渡すデータをデバイスのメモリに書き込む。その後、ホスト装置が、そのデータの引き渡しを通知するフラグを、同期処理用のメモリアクセス命令を用いて、デバイスのメモリに書き込む。また、デバイス内のプロセッサが、同期処理用のメモリアクセス命令を用いて、メモリに対してフラグのポーリング(読み込み)を定期的に行う。本実施の形態では、これらの同期処理用でない書き込み命令、同期処理用の書き込み命令、同期処理用の読み込み命令の順序が、ホスト装置からデバイスに到達した後、デバイス内においてメモリに到達するまで保証されることになる。このように、本実施の形態は、拡張バスで接続されたホスト装置およびデバイス間の同期処理を、デバイス内のメモリを用いて、メモリアクセス命令の発行順序を保証して行うことができる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としてのシステム2の構成を図3に示す。図3において、システム2は、拡張バス90で接続されるホスト装置10およびデバイス30を含む。デバイス30は、本発明の第1の実施の形態としてのデバイス20に対して、同期処理ユニット22に替えて同期処理ユニット32を含む点が異なる。また、同期処理ユニット32は、本発明の第2の実施の形態の同期処理ユニット22に対して、命令判定部221に替えて命令判定部321と、完了判定部222に替えて完了判定部322と、後続制御部224に替えて後続制御部324とを有する点が異なる。
命令判定部321は、記憶領域326を有する。記憶領域326は、メモリ23における同期処理用の領域を表す情報を記憶する。同期処理用の領域とは、メモリ23において、メモリ23に対する同期処理を指示する情報を格納することが定められた領域である。記憶領域326は、ホスト装置10から、または、デバイス30のプロセッサ21から書き込み可能であるものとする。
また、命令判定部321は、受信したメモリアクセス命令の対象となるメモリ23上の領域が、記憶領域326が表す同期処理用の領域に含まれるか否かに基づいて、メモリアクセス命令が同期処理用であるか否かを判定する。
完了判定部322は、カウンタ327を有する。そして、完了判定部322は、メモリ23に対してメモリアクセス命令が発行されると、カウンタ327の値をインクリメントする。また、完了判定部322は、メモリアクセス命令の完了が通知されるとカウンタ327の値をデクリメントする。完了の通知とは、メモリアクセス命令がメモリライトであればライト完了の通知であり、メモリリードであればリードデータの受信である。
また、完了判定部322は、カウンタ327の値に基づいて、メモリ23に対して発行されたメモリアクセス命令が完了しているか否かを判定する。具体的には、完了判定部322は、カウンタ327の値が0でなければ、完了していないメモリアクセス命令があると判定する。また、完了判定部322は、カウンタ327の値が0であれば、完了していないメモリアクセス命令はないと判定する。
後続制御部324は、本発明の第2の実施の形態における後続制御部324と同様に構成されることに加えて、同期処理用のメモリアクセス命令が保留された後に送出している制御情報の送出停止を、完了判定部322におけるカウンタ327の値に基づいて行う。具体的には、後続制御部324は、制御情報を送出後、カウンタ327の値をサイクル毎にチェックする。そして、カウンタ327の値が0になると、後続制御部324は、制御情報の送出を停止する。
ここで、制御情報が送出された後、先行のメモリアクセス命令が完了してカウンタ327の値が0になる動作と、保留されていた同期処理用のメモリアクセス命令が発行されてカウンタ327の値がインクリメントされる動作とは、同じサイクルで実行される。このため、後続制御部324によるサイクル毎のカウンタ327の値のチェック処理では、同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでは、カウンタ327の値は0とはならない。
以上のように構成されたシステム2の動作について、図4を参照して説明する。
まず、同期処理ユニット32は、本発明の第1の実施の形態と同様に、デバイス30内のメモリ23に対するメモリアクセス命令を受信する(ステップS1)。
次に、デバイス30の同期処理ユニット32において、命令判定部321は、受信したメモリアクセス命令の対象となるメモリ23の領域が、記憶領域326に記憶された情報の表す同期処理用の領域に含まれるか否かを判定する(ステップS102)。
次に、命令判定部321において、メモリアクセス命令の対象となるメモリ23の領域が同期処理用の領域に含まれないと判定された場合について説明する。この場合、発行部223は、このメモリアクセス命令を、メモリ23に対して発行する(ステップS3)。
次に、完了判定部322は、メモリアクセス命令が発行されたので、カウンタ327の値をインクリメントする(ステップS103)。
一方、命令判定部321において、メモリアクセス命令の対象となるメモリ23の領域が同期処理用の領域に含まれると判定された場合について説明する。この場合、完了判定部322は、カウンタ327の値が0であるか否かを判定する(ステップS104)。
なお、前述のように、カウンタ327は、メモリアクセス命令の発行に応じて値をインクリメントし、完了の通知に応じて値をデクリメントするよう構成されている。カウンタ327の値が0であれば先行のメモリアクセス命令は完了している。カウンタ327の値が0でなければ、先行のメモリアクセス命令は完了していない。
ここで、カウンタ327の値が0であると判定された場合について説明する。この場合、発行部223は、同期処理用のメモリアクセス命令を保留せずに発行する(ステップS3)。
次に、完了判定部322は、メモリアクセス命令が発行されたので、カウンタ327の値をインクリメントする(ステップS103)。
一方、完了判定部322において、カウンタ327の値が0でないと判定された場合について説明する。この場合、発行部223は、同期処理用のメモリアクセス命令の発行を保留する(ステップS5)。
また、後続制御部324は、後続のメモリアクセス命令を受信しないよう、拡張バス90およびプロセッサ21に向けて、制御情報を送出する(ステップS6)。この後、後続制御部324は、カウンタ327の値のチェックをサイクル毎に行う。
また、完了判定部322は、メモリアクセス命令の完了が通知されると、カウンタ327の値をデクリメントするとともに、その値が0になったか否かを判定する(ステップS107)。カウンタ327の値が0になっていない場合、完了判定部322は、このステップを繰り返す。
ここで、完了判定部322において、カウンタ327が0になったことが検出された場合について説明する(ステップS107でYes)。
この場合、発行部223は、保留していた同期処理用のメモリアクセス命令を発行する(ステップS8)。
次に、完了判定部322は、同期処理用のメモリアクセス命令が発行されたので、カウンタ327の値をインクリメントする(ステップS108)。
ここでは、前述のように、先行のメモリアクセス命令の完了によりカウンタ327の値が0になる動作と、同期処理用のメモリアクセス命令が発行されてカウンタ327の値がインクリメントされる動作とが、同じサイクルで行われる。このため、後続制御部324によるサイクル毎のカウンタ327の値のチェックでは、カウンタ327の値は0となっていない。
次に、後続制御部324によって、カウンタ327の値が0になったことが検出された場合について説明する(ステップS109でYes)。この場合、保留後に発行された同期処理用のメモリアクセス命令が完了したことになる。
そこで、後続制御部324は、制御情報の送出を停止する(ステップS10)。
以上で、システム2の動作の説明を終了する。
次に、システム2の構成および動作の具体例を、図5〜図8を用いて説明する。
<具体例の構成>
まず、システム2の具体例の構成を、図5を用いて説明する。図5において、ホスト装置10およびデバイス30は、PCIe規格に基づく拡張バス90により接続されている。この例では、デバイス30は、PCIeにおけるエンドポイントである。
まず、システム2の具体例の構成を、図5を用いて説明する。図5において、ホスト装置10およびデバイス30は、PCIe規格に基づく拡張バス90により接続されている。この例では、デバイス30は、PCIeにおけるエンドポイントである。
具体的には、ホスト装置10は、CPU11と、メモリ13とに加えて、PCIeのルート・コンプレックス901を有する。ルート・コンプレックス901においてPCIeの物理層の処理を行う要素であるPHY902は、リンク906を介して、PHY903に接続される。PHY903は、デバイス30においてPCIeの物理層の処理を行う要素である。
また、デバイス30は、プロセッサ21と、メモリ23と、同期処理ユニット32とに加えて、PCIe規格に基づく拡張バス90に接続するため、PHY903と、DLL904と、TL905とを有する。PHY903は、前述のように、デバイス30においてPCIeの物理層の処理を行う要素である。また、DLL904は、デバイス30においてPCIeのデータ・リンク層の処理を行う要素である。また、TL905は、デバイス30においてPCIeのトランザクション層の処理を行う要素である。デバイス30において、同期処理ユニット32は、TL905、DLL904、PHY903を介して、リンク906に接続される。また、この具体例では、メモリ23は、RAM(Random Access Memory)やレジスタによって構成される。
なお、PHY902の入出力から同期処理ユニット32の入出力までのPCIeトランザクションのオーダリングは、PCIeの仕様およびその実装に従うものとする。
また、図5において、同期処理ユニット32は、記憶領域326として、第1記憶領域および第2記憶領域を有する。メモリ23におけるアドレスが64ビットで表される場合、第1記憶領域および第2記憶領域もそれぞれ64ビットとなる。例えば、第1記憶領域には、メモリ23において同期処理用に定められた領域の起点となるアドレスが、第1領域情報としてあらかじめ記憶される。また、第2記憶領域には、メモリアクセス命令の対象となるアドレスが第1領域情報を起点とする領域に含まれるか否かを判定するための情報が、第2領域情報としてあらかじめ記憶される。例えば、メモリ23において同期処理用に定められた領域が連続した領域であれば、第2領域情報の上位の適切な範囲のビットに1が設定され、それ以外の下位部分に0が設定されてもよい。また、メモリ23において同期処理用に定められた領域が規則的に離散した領域であれば、第2領域情報の下位の適切な範囲のビットに1が設定され、それ以外の上位部分に0が設定されてもよい。
この場合、命令判定部321は、次式(I)が成立するか否かに基づいて、受信したメモリアクセス命令の対象となる領域が同期処理用の領域であるか否かを判定可能である。
「対象アドレス[0:63]&第1領域情報[0:63]==第2領域情報[0:63]」・・・(I)
ここで、式(I)において、“&”は、論理積を表し、“==”は、両辺が同等である場合に真となる比較演算子を表す。
「対象アドレス[0:63]&第1領域情報[0:63]==第2領域情報[0:63]」・・・(I)
ここで、式(I)において、“&”は、論理積を表し、“==”は、両辺が同等である場合に真となる比較演算子を表す。
なお、第1記憶領域および第2記憶領域は、ホスト装置10のCPU11、ルート・コンプレックス901またはデバイス30のプロセッサ21によってアクセス可能であるものとする。第1記憶領域および第2記憶領域には、これらのいずれかからのアクセスによって事前に第1領域情報および第2領域情報が記憶されている。
また、図5において、同期処理ユニット32は、カウンタ327として、第1カウンタおよび第2カウンタを有する。第1カウンタは、メモリ23に対してメモリライト命令が発行されると値がインクリメントされ、メモリライト命令の完了が通知されると値がデクリメントされる。また、第2カウンタは、メモリ23に対してメモリリード命令が発行されると値がインクリメントされ、リードデータが返却されると値がデクリメントされる。
後続制御部324は、同期処理用アドレスへのメモリアクセス命令が保留されると、ビジー信号をTL905およびプロセッサ21に対してアサートする。また、後続制御部324は、その後、第1カウンタおよび第2カウンタの値をサイクル毎にチェックする。そして、後続制御部324は、第1カウンタおよび第2カウンタの値が共に0になると、ビジー信号をデアサートする。
発行部223は、命令判定部321で同期処理用アドレスへのメモリアクセスでないと判定されたメモリアクセス命令を、メモリ23に対して発行する。
また、発行部223は、第1カウンタおよび第2カウンタのいずれかが0でない場合、命令判定部321で同期処理用であると判定されたメモリアクセス命令を発行せずに保留する。
また、発行部223は、メモリアクセス命令の完了が通知されたタイミングで第1カウンタおよび第2カウンタのいずれもが0となった場合、保留中の同期処理用のメモリアクセス命令を発行する。
このような構成において、動作の具体例1〜具体例4について説明する。
<動作の具体例1>
動作の具体例1を、図5を用いて説明する。図5では、ホスト装置10からデバイス30のメモリ23に対して、ライト命令w1、ライト命令w2、同期処理用のリード命令sync_r3、ライト命令w4の4つのPCIeトランザクションが発行されることを想定する。4つのPCIeトランザクションはこの順に発行され、発行された順に同期処理ユニット32に到着するものとする。また、ライト命令w1、ライト命令w2およびライト命令w4は、同期処理用でないアドレスへの命令であるものとする。また、同期処理用のリード命令sync_r3は、同期処理用のアドレスへの命令であるものとする。また、以下の具体例の説明では、動作の開始時には、第1カウンタおよび第2カウンタの値が0であるものとする。
動作の具体例1を、図5を用いて説明する。図5では、ホスト装置10からデバイス30のメモリ23に対して、ライト命令w1、ライト命令w2、同期処理用のリード命令sync_r3、ライト命令w4の4つのPCIeトランザクションが発行されることを想定する。4つのPCIeトランザクションはこの順に発行され、発行された順に同期処理ユニット32に到着するものとする。また、ライト命令w1、ライト命令w2およびライト命令w4は、同期処理用でないアドレスへの命令であるものとする。また、同期処理用のリード命令sync_r3は、同期処理用のアドレスへの命令であるものとする。また、以下の具体例の説明では、動作の開始時には、第1カウンタおよび第2カウンタの値が0であるものとする。
(1)まず、同期処理ユニット32は、ライト命令w1をTL905から受信すると、ライト命令w1の対象となるアドレスを命令判定部321に入力して、同期処理用のアドレスであるか否かを判定する。
(2)ここでは、同期処理用のアドレスでないことが判定される。そこで、同期処理ユニット32は、第1カウンタを1つインクリメントし、ライト命令w1を発行部223からメモリ23に対して発行する。第1カウンタの値は1となり、第2カウンタの値は0である。
(3)次に、同期処理ユニット32は、ライト命令w2をTL905から受信すると、ライト命令w2の対象となるアドレスを命令判定部321に入力して、同期処理用のアドレスであるか否かを判定する。
(4)ここでは、同期処理用のアドレスでないことが判定される。そこで、同期処理ユニット32は、第1カウンタを1つインクリメントし、ライト命令w2を発行部223からメモリ23に対して発行する。第1カウンタの値は2となり、第2カウンタの値は0である。
(5)次に、同期処理ユニット32は、メモリ23から、ライト命令w1に対応したライト完了通知c1を受信する。そこで、同期処理ユニット32は、第1カウンタを1つデクリメントする。第1カウンタの値は1となり、第2カウンタの値は0である。
(6)次に、同期処理ユニット32は、同期処理用のリード命令sync_r3をTL905から受信すると、リード命令sync_r3の対象となるアドレスを命令判定部321に入力して、同期処理用のアドレスであるか否かを判定する。
ここでは、同期処理用のアドレスであることが判定される。そこで、同期処理ユニット32は、完了判定部322において第1カウンタおよび第2カウンタの値を確認する。ここでは、第1カウンタの値が1である。つまり、先行するライト命令w2による書き込みが完了していない。そこで、同期処理ユニット32は、同期処理用のリード命令sync_r3を発行部223に留める。
(7)そして、同期処理ユニット32は、後続制御部324により、ビジー信号busyをTL905およびプロセッサ21に対してアサートする。ビジー信号busyのアサートによって、後続のライト命令w4はPHY902からTL905の間に滞留する。
以後、後続制御部324による第1カウンタおよび第2カウンタのチェックは、毎サイクル行われる。そして、第1カウンタおよび第2カウンタの少なくともいずれかが0でない間、ビジー信号busyのアサートは継続する。
(8)次に、同期処理ユニット32は、ライト命令w2に対応したライト完了通知c2を受信すると、第1カウンタを1デクリメントする。第1カウンタの値は0となり、第2カウンタの値は0である。このように、第1カウンタのデクリメントによって、第1カウンタおよび第2カウンタの値が0となった。つまり、先行するライト命令w2による書き込みが完了した。
(9)そこで、同期処理ユニット32は、発行部223に留めていた同期処理用のリード命令sync_r3を、発行部223からメモリ23に対して発行する。また、同期処理ユニット32は、第2カウンタを1インクリメントする。第1カウンタの値は0であり、第2カウンタの値は1となる。
ここで、(8)および(9)の動作は同じサイクルで行われる。したがって、第1カウンタおよび第2カウンタのサイクル毎のチェックでは、第1カウンタおよび第2カウンタの値のいずれかが0ではない。
(10)次に、同期処理ユニット32は、同期処理用のリード命令sync_r3に対応するリードデータd3を受信する。
(11)そして、同期処理ユニット32は、リードデータd3をTL905に送信する。また、同期処理ユニット32は、第2カウンタを1デクリメントする。これにより、第1カウンタおよび第2カウンタの値は、サイクル毎のチェックにおいて、共に0になったことが検出される。つまり、同期処理用アドレスへのリード命令sync_r3が完了した。
(12)そこで、同期処理ユニット32は、後続制御部324からのビジー信号busyをデアサートする。ビジー信号busyのデアサートによって、PHY902からTL905の間に滞留していたライト命令w4が、TL905から同期処理ユニット32に受信される。
以上の動作により、同期処理用アドレスへのリード命令sync_r3の前に受信したライト命令w1、w2がメモリ23に反映された後に、同期処理用アドレスへのリード命令sync_r3が行われる。そして、その後、ライト命令w4がメモリ23に反映されることが保証される。
この動作により同期処理用でないメモリアクセス命令と、同期処理用のメモリアクセス命令との間で、発行順序が保証されることを、模式的に図6に示す。図6において、同期処理用のリード命令sync_r3に先行するライト命令w1、w2は、同期処理用のリード命令sync_r3が保留される期間T1が設けられることにより、同期処理用のリード命令sync_r3が発行される前に完了する。また、同期処理用のリード命令sync_r3の後続のライト命令w4は、ビジー信号がアサートされる期間T2が設けられることにより、同期処理用のリード命令sync_r3が完了してから受信され、発行される。
なお、この動作の具体例1では、ライト命令w1、w2、同期処理用アドレスへのリード命令sync_r3、ライト命令w4の順序が、PHY902から同期処理ユニット32までの間で変わらないことが保証されているものとする。例えば、ライト命令w1、ライト命令w2が、posted requestであるとする。また、同期処理用アドレスへのリード命令sync_r3が、non posted read requestであるとする。また、ライト命令w4がnon posted request with dataであるとする。この場合、PCIeの実装上の選択として、non posted request with dataがnon posted read requestを追い越さない選択がされていることが前提である。
<動作の具体例2>
動作の具体例2を、図7を用いて説明する。この具体例2は、上述した具体例1に対して、同期処理用のリード命令sync_r3およびライト命令w4が、ホスト装置10からではなくデバイス30のプロセッサ21から発行される点が異なる。
動作の具体例2を、図7を用いて説明する。この具体例2は、上述した具体例1に対して、同期処理用のリード命令sync_r3およびライト命令w4が、ホスト装置10からではなくデバイス30のプロセッサ21から発行される点が異なる。
図7では、ホスト装置10からデバイス30のメモリ23に対して、ライト命令w1、ライト命令w2の2つのPCIeトランザクションが発行されることを想定する。2つのPCIeトランザクションはこの順に発行され、発行された順に同期処理ユニット32に到着するものとする。また、デバイス30のプロセッサ21からデバイス30のメモリ23に対して、同期処理用のリード命令sync_r3と、ライト命令w4とが、この順に発行されることを想定する。また、この同期処理用のリード命令sync_r3は、ホスト装置10からのライト命令w2の次に、同期処理ユニット32に到着するものとする。また、ライト命令w1、ライト命令w2およびライト命令w4は、同期処理用でないアドレスへの命令であるものとする。また、同期処理用のリード命令sync_r3は、同期処理用のアドレスへの命令であるものとする。また、具体例1と同様に、動作の開始時には、第1カウンタおよび第2カウンタの値が0であるものとする。
この場合、同期処理ユニット32は、上述した具体例1に対して、(6)、(7)、(11)、(12)の代わりに以下の(6’)、(7’)、(11’)、(12’)のように動作する点が異なる。
(6’)ここでは、同期処理ユニット32は、同期処理用のリード命令sync_r3を、デバイス30のプロセッサ21から受信する。以降の動作は、具体例1における(6)と同様である。
(7’)ここでは、同期処理ユニット32は、後続制御部324により、ビジー信号busyをTL905およびプロセッサ21に対してアサートする。ビジー信号busyのアサートによって、後続のライト命令w4は、同期処理ユニット32およびプロセッサ21の間に滞留する。
(11’)ここでは、同期処理ユニット32は、リードデータd3を、デバイス30のプロセッサ21に送信する。以降の動作は、具体例1における(11)と同様である。
(12’)ここでは、同期処理ユニット32は、後続制御部324からのビジー信号busyをデアサートする。ビジー信号busyのデアサートによって、同期処理ユニット32およびプロセッサ21の間に滞留していたライト命令w4が、同期処理ユニット32に受信される。
以上の動作により、デバイス30のプロセッサ21から受信された同期処理用アドレスへのリード命令sync_r3は、その前にホスト装置10から受信されたライト命令w1、w2がメモリ23に反映された後に、メモリ23に発行される。そして、その後、プロセッサ21からのライト命令w4がメモリ23に反映されることが保証される。
この動作により、ホスト装置10およびデバイス30のプロセッサ21からの同期処理用でないメモリアクセス命令と、プロセッサ21からの同期処理用のメモリアクセス命令との間で発行順序が保証されることを、模式的に図8に示す。プロセッサ21からの同期処理用のリード命令sync_r3に先行するホスト装置10からのライト命令w1、w2は、同期処理用のリード命令sync_r3の保留期間T1’が設けられることにより、リード命令sync_r3の発行前に完了する。また、プロセッサ21からの同期処理用のリード命令sync_r3の後続のライト命令w4は、ビジー信号がアサートされる期間T2’が設けられることにより、同期処理用のリード命令sync_r3が完了してから受信され、発行される。
このように、デバイス30内のメモリ23に対するホスト装置10およびデバイス30のプロセッサ21からのメモリアクセス命令の順序保障は、デバイス30のプロセッサ21からの同期処理用のメモリアクセス命令で実現される。
例えば、ホスト装置10から発行されるライト命令w1、ライト命令w2のうち、ライト命令w2によって、release−consistencyモデルのreleaseプロセスによるフラグ書き込みがメモリ23上に行われる状況を考える。この場合、デバイス30のプロセッサ21は、同期処理用のリード命令sync_r3によってこのフラグを繰り返し読み込み、フラグが成立するときに、ホスト装置10からのライト命令w1によりメモリ23に書きこまれたデータを有効と判断して処理を進める。
これにより、フラグ成立時のリード命令sync_r3より前に、ライト命令w2が同期処理ユニット32に到達することが保証される。さらには、同期処理用のリード命令sync_r3、ライト命令w2およびw1の順序関係から、フラグ成立時の同期処理用のリード命令sync_r3より前に、ライト命令w1が同期処理ユニット32に到達していることが保証される。したがって、フラグ成立時のリード命令sync_r3より前に、ライト命令w1によりメモリ23にデータが書き込まれることが保証される。
このように、具体例2において、ライト命令w2を、ホスト装置10によるrelease側のフラグを書き込むライトとして適用する。また、同期処理用のリード命令sync_r3を、デバイス30のプロセッサ21によるacquire側のフラグを読み込むリードとして適用する。これにより、上述したように、本実施の形態がrelease−consistencyモデルを実現できることが、具体例2により説明される。
なお、具体例2の実施時には、デバイス30のプロセッサ21は、フラグ成立まで同期処理用のリード命令sync_r3を発行(ポーリング)し、ポーリング結果に応じて、例えばリード命令r5を発行することで、aquire側として動作することになる。この場合、リード命令r5は、少なくともリード命令sync_r3の後に発行される。
<動作の具体例3>
動作の具体例3を、図9を用いて説明する。図9では、ホスト装置10からデバイス30のメモリ23に対して、ライト命令w5、ライト命令w6、同期処理用のライト命令sync_w7、ライト命令w8の4つのPCIeトランザクションが発行されることを想定する。4つのPCIeトランザクションはこの順に発行され、発行された順に同期処理ユニット32に到着するものとする。また、ライト命令w5、ライト命令w6およびライト命令w8は、同期処理用でないアドレスへの命令であるものとする。また、同期処理用のライト命令sync_w7は、同期処理用のアドレスへの命令であるものとする。また、以下の具体例の説明では、動作の開始時には、第1カウンタおよび第2カウンタの値が0であるものとする。
動作の具体例3を、図9を用いて説明する。図9では、ホスト装置10からデバイス30のメモリ23に対して、ライト命令w5、ライト命令w6、同期処理用のライト命令sync_w7、ライト命令w8の4つのPCIeトランザクションが発行されることを想定する。4つのPCIeトランザクションはこの順に発行され、発行された順に同期処理ユニット32に到着するものとする。また、ライト命令w5、ライト命令w6およびライト命令w8は、同期処理用でないアドレスへの命令であるものとする。また、同期処理用のライト命令sync_w7は、同期処理用のアドレスへの命令であるものとする。また、以下の具体例の説明では、動作の開始時には、第1カウンタおよび第2カウンタの値が0であるものとする。
(13)まず、同期処理ユニット32は、ライト命令w5をTL905から受信すると、ライト命令w5の対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
(14)ここでは、同期処理用アドレスではないことが判定される。そこで、同期処理用ユニット32は、第1カウンタを1インクリメントし、ライト命令w5を発行部223からメモリ23に対して発行する。第1カウンタの値は1となり、第2カウンタの値は0である。
(15)次に、同期処理ユニット32は、ライト命令w6をTL905から受信すると、ライト命令w6の対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
(16)ここでは、同期処理用アドレスではないことが判定される。そこで、同期処理用ユニット32は、第1カウンタを1インクリメントし、ライト命令w6を発行部223からメモリ23に対して発行する。第1カウンタの値は2となり、第2カウンタの値は0である。
(17)次に、同期処理ユニット32は、同期処理用のライト命令sync_w7をTL905から受信すると、ライト命令sync_w7の対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
ここでは、同期処理用アドレスであることが判定される。そこで、同期処理用ユニット32は、完了判定部322において第1カウンタおよび第2カウンタの値を確認する。ここでは、第1カウンタの値が2である。つまり、先行するライト命令w5、w6による書き込みが完了していない。そこで、同期処理ユニット32は、同期処理用のライト命令sync_w7を発行部223に留める。
(18)そして、同期処理ユニット32は、後続制御部324により、ビジー信号busyをTL905およびプロセッサ21に対してアサートする。ビジー信号busyのアサートによって、後続のライト命令w8はPHY902からTL905の間に滞留する。
以後、後続制御部324による第1カウンタおよび第2カウンタのチェックは、毎サイクル行われる。そして、第1カウンタおよび第2カウンタの少なくともいずれかが0でない間、ビジー信号busyのアサートは継続する。
(19)次に、同期処理ユニット32は、ライト命令w5に対応したライト完了通知c5を受信すると、第1カウンタを1デクリメントする。第1カウンタの値は1となり、第2カウンタの値は0である。
(20)次に、同期処理ユニット32は、ライト命令w6に対応したライト完了通知c6を受信すると、第1カウンタを1デクリメントする。第1カウンタの値は0となり、第2カウンタの値は0である。このように、第1カウンタのデクリメントによって、第1カウンタおよび第2カウンタの値が0となった。つまり、先行するライト命令w5およびライト命令w6による書き込みが完了した。
(21)そこで、同期処理ユニット32は、発行部223に留めていた同期処理用のライト命令sync_w7を、発行部223からメモリ23に対して発行する。また、同期処理ユニット32は、第1カウンタを1インクリメントする。
ここで、(20)および(21)の動作は同じサイクルで行われる。したがって、第1カウンタおよび第2カウンタのサイクル毎のチェックでは、第1カウンタの値は、デクリメントとインクリメントとで相殺され0とはならない。
(22)次に、同期処理ユニット32は、同期処理用のライト命令sync_w7に対応するライト完了通知c7を受信する。そして、同期処理ユニット32は、第1カウンタを1つデクリメントする。これにより、第1カウンタおよび第2カウンタの値は、サイクル毎のチェックにおいて、共に0になったことが検出される。つまり、同期処理用のライト命令sync_w7による書き込みが完了した。
(23)そこで、同期処理ユニット32は、後続制御部324からのビジー信号busyをデアサートする。ビジー信号busyのデアサートによって、PHY902からTL905の間に滞留していたライト命令w8が、TL905から同期処理ユニット32に受信される。
以上の動作により、同期処理用アドレスへのライト命令sync_w7の前に受信したライト命令w5、w6がメモリ23に反映された後に、同期処理用アドレスへのライト命令sync_w7がメモリ23に反映される。そして、その後、ライト命令w8がメモリ23に反映されることが保証される。
この動作により、同期処理用でないメモリアクセス命令と、同期処理用のメモリアクセス命令との間で発行順序が保証されることを、模式的に図10に示す。図10において、同期処理用のライト命令sync_w7に先行するライト命令w5、w6は、同期処理用のライト命令sync_w7が保留される期間T3が設けられることにより、同期処理用のライト命令sync_w7が発行される前に完了する。また、同期処理用のライト命令sync_w7の後続のライト命令w8は、ビジー信号がアサートされる期間T4が設けられることにより、同期処理用のライト命令sync_w7が完了してから受信される。
なお、この動作の具体例3でも、ライト命令w5、w6、同期処理用アドレスへのライト命令sync_w7、ライト命令w8の順序が、PHY902から同期処理ユニット32までの間で変わらないことが保証されているものとする。例えば、これらのライト命令w5、w6、sync_w7、w8がそれぞれposted requestであるとする。この場合、PCIeの実装上の選択として、posted requestがposted requestを追い越さない選択がされていることが前提である。
<動作の具体例4>
動作の具体例4を、図11を用いて説明する。この具体例4では、同期処理用のライト命令が、ホスト装置10からではなくデバイス30のプロセッサ21から発行される例について説明する。
動作の具体例4を、図11を用いて説明する。この具体例4では、同期処理用のライト命令が、ホスト装置10からではなくデバイス30のプロセッサ21から発行される例について説明する。
図11では、ホスト装置10からデバイス30のメモリ23に対して、ライト命令w9、ライト命令w10の2つのPCIeトランザクションが発行されることを想定する。2つのPCIeトランザクションはこの順に発行され、発行された順に同期処理ユニット32に到着するものとする。また、デバイス30のプロセッサ21からデバイス30のメモリ23に対して、リード命令r11と、同期処理用のライト命令sync_w12と、リード命令r13とが、この順に発行されることを想定する。また、リード命令r11は、ホスト装置10からのライト命令w10の次に、同期処理ユニット32に到着するものとする。また、同期処理用のライト命令sync_w12は、リード命令r11に対応するリードデータd11が所定の値であった場合に発行されるものとする。また、ライト命令w9、ライト命令w10、リード命令r11およびリード命令r13は、同期処理用でないアドレスへの命令であるものとする。また、同期処理用のライト命令sync_w12は、同期処理用のアドレスへの命令であるものとする。また、動作の開始時には、第1カウンタおよび第2カウンタの値が0であるものとする。
(24)まず、同期処理ユニット32は、ライト命令w9をTL905から受信すると、ライト命令w9の対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
(25)ここでは、同期処理用アドレスではないことが判定される。そこで、同期処理用ユニット32は、第1カウンタを1インクリメントし、ライト命令w9を発行部223からメモリ23に対して発行する。第1カウンタの値は1となり、第2カウンタの値は0である。
(26)次に、同期処理ユニット32は、ライト命令w10をTL905から受信すると、ライト命令w10の対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
(27)ここでは、同期処理用アドレスではないことが判定される。そこで、同期処理用ユニット32は、第1カウンタを1インクリメントし、ライト命令w10を発行部223からメモリ23に対して発行する。第1カウンタの値は2となり、第2カウンタの値は0である。
(28)次に、同期処理ユニット32は、リード命令r11をデバイス30のプロセッサ21から受信すると、リード命令r11の対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
(29)ここでは、同期処理用アドレスではないことが判定される。そこで、同期処理ユニット32は、第2カウンタを1インクリメントし、リード命令r11を発行部223からメモリ23に対して発行する。第1カウンタの値は2のままであり、第2カウンタの値は1となる。
(30)次に、同期処理ユニット32は、リード命令r11に対応するリードデータd11を受信する。
(31)そして、同期処理ユニット32は、リードデータd11をデバイス30のプロセッサ21に送信する。そして、同期処理ユニット32は、第2カウンタを1デクリメントする。これにより、第1カウンタの値は2のままであり、第2カウンタの値は0となる。
(32)次に、プロセッサ21は、リードデータd11が所定の値であった場合に、同期処理用のライト命令sync_w12を発行する。そして、同期処理ユニット32は、同期処理用のライト命令sync_w12をデバイス30のプロセッサ21から受信すると、その対象となるアドレスを命令判定部321に入力して、同期処理用アドレスか否かを判定する。
ここでは、同期処理用アドレスであることが判定される。そこで、同期処理用ユニット32は、完了判定部322において第1カウンタおよび第2カウンタの値を確認する。ここでは、第1カウンタの値が2であり、第2カウンタの値が0である。つまり、先行するライト命令w9、w10による書き込みが完了していない。そこで、同期処理ユニット32は、同期処理用のライト命令sync_w12を発行部223に留める。
(33)そして、同期処理ユニット32は、後続制御部324により、ビジー信号busyをTL905およびプロセッサ21に対してアサートする。ビジー信号busyのアサートによって、後続のリード命令r13は、同期処理ユニット32およびプロセッサ21の間に滞留する。
以後、後続制御部324による第1カウンタおよび第2カウンタのチェックは、毎サイクル行われる。そして、第1カウンタおよび第2カウンタの少なくともいずれかが0でない間、ビジー信号busyのアサートは継続する。
(34)次に、同期処理ユニット32は、ライト命令w10に対応したライト完了通知c10を受信すると、第1カウンタを1デクリメントする。第1カウンタの値は1となり、第2カウンタの値は0である。
(35)次に、同期処理ユニット32は、ライト命令w9に対応したライト完了通知c9を受信すると、第1カウンタを1デクリメントする。第1カウンタの値は0となり、第2カウンタの値は0である。このように、第1カウンタのデクリメントによって、第1カウンタおよび第2カウンタの値が0となった。つまり、先行するライト命令w9およびライト命令w10による書き込みが完了した。
(36)そこで、同期処理ユニット32は、発行部223に留めていた同期処理用のライト命令sync_w12を、発行部223からメモリ23に対して発行する。また、同期処理ユニット32は、第1カウンタを1インクリメントする。
ここで、(35)および(36)の動作は同じサイクルで行われる。したがって、第1カウンタおよび第2カウンタのサイクル毎のチェックでは、第1カウンタの値は、デクリメントとインクリメントとで相殺され0とはならない。
(37)次に、同期処理ユニット32は、同期処理用のライト命令sync_w12に対応するライト完了通知c12を受信する。そして、同期処理ユニット32は、第1カウンタを1つデクリメントする。これにより、第1カウンタおよび第2カウンタの値は、サイクル毎のチェックにおいて、共に0になったことが検出される。つまり、同期処理用のライト命令sync_w12による書き込みが完了した。
(38)そこで、同期処理ユニット32は、後続制御部324からのビジー信号busyをデアサートする。ビジー信号busyのデアサートによって、同期処理ユニット32およびプロセッサ21の間に滞留していたリード命令r13が、同期処理ユニット32に受信される。
以上の動作により、デバイス30のプロセッサ21から受信された同期処理用アドレスへのライト命令sync_w12は、その前にホスト装置10またはプロセッサ21から受信されたライト命令w9、w10、リード命令r11の完了後に、メモリ23に反映される。そして、その後、プロセッサ21からのリード命令r13がメモリ23に対して発行されることが保証される。
この動作により、ホスト装置10およびデバイス30のプロセッサ21からの同期処理用でないメモリアクセス命令と、デバイス30のプロセッサ21からの同期処理用のメモリアクセス命令との間で発行順序が保証されることを、模式的に図12に示す。プロセッサ21からの同期処理用のライト命令sync_w12に先行するホスト装置10からのライト命令w9、w10は、同期処理用のライト命令sync_w12が保留される期間T5が設けられることにより、ライト命令sync_w12のメモリ23への発行前に完了する。また、プロセッサ21からの同期処理用のライト命令sync_w12の後続のリード命令r13は、ビジー信号がアサートされる期間T6が設けられることにより、同期処理用のライト命令sync_w12が完了してから受信される。
このように、デバイス30内のメモリ23に対するホスト装置10およびデバイス30のプロセッサ21からのメモリアクセス命令の順序保障は、デバイス30のプロセッサ21からの同期処理用のメモリアクセス命令で実現される。
例えば、ホスト装置10から発行されるライト命令w9、ライト命令w10のうち、ライト命令w10によって、release−consistencyモデルのreleaseプロセスのフラグ書き込みがメモリ23上に行われる状況を考える。この場合、デバイス30のプロセッサ21は、リード命令r11によってこのフラグを繰り返し読み込み、フラグが成立したときに、同期処理用のライト命令sync_w12を発行する。このため、同期処理ユニット32によって同期処理用のライト命令sync_w12が受信される前に、リード命令r11の前に受信されたライト命令w5、w6が受信されていることが保証される。そして、同期処理用のライト命令sync_w12は、ホスト装置10からのライト命令w9、w10がメモリ23に反映されてから、メモリ23に対して発行されることになる。つまり、フラグ成立後の同期処理用のライト命令sync_w12がメモリ23に反映される前に、ライト命令w9、w10によるデータがメモリ23にデータが書き込まれていることが保証される。さらに、後続のリード命令r13は、デバイス30のプロセッサ21からの同期処理用のライト命令sync_w12が完了後に、メモリ23に対して発行される。このため、後続のリード命令r13は、ライト命令sync_w12の完了前に完了しているライト命令w9によって書き込まれたデータを読み込む命令として適している。
このように、具体例4において、ライト命令w10を、ホスト装置10によるrelease側のフラグを書き込むライトとして適用する。また、リード命令r11を、デバイス30のプロセッサ21によるacquire側のフラグを読み込むリードとして適用する。また、同期処理用のライト命令sync_w12を、デバイス30のプロセッサ21によりフラグ成立後に実行するライトとして適用する。これにより、上述したように、本実施の形態がrelease−consistencyモデルを実現できることが、具体例4により説明される。
なお、具体例4において、(32)でデバイス30のプロセッサ21から発行される同期処理用のライト命令sync_w12は、同期処理用のリード命令sync_r12に置き換え可能である。その場合、同期処理ユニット32は、(37)においてリード命令sync_r12に対応するリードデータd12をメモリ23から受信した後、(38)においてリード命令r13をプロセッサ21から受信し、メモリ23に対して発行することになる。これは、デバイス30のプロセッサ21から同期処理用のリード命令を発行することによりrelease−consistencyモデルを実現する具体例2とは異なる例である。
また、具体例4において、(38)でデバイス30のプロセッサ21から受信されるリード命令r13は、ライト命令w13であってもよい。
以上で、具体例の説明を終了する。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としてのシステムは、拡張バスで接続された複数のプロセッサ間で同期処理を行う際に、性能を低下させることなく、同期処理に用いるメモリに対するメモリアクセスの順序を保証することができる。
その理由について説明する。本実施の形態では、本発明の第1の実施の形態と同様の構成に加えて、次の構成を備える。すなわち、命令判定部が、受信したメモリアクセス命令の対象となるメモリの領域が同期処理用の領域であるか否かに基づいて、メモリアクセス命令が同期処理用であるか否かを判定する。また、完了判定部が、メモリアクセス命令が発行されるとインクリメントされメモリアクセス命令の完了が通知されるとデクリメントされるカウンタを有する。そして、完了判定部が、カウンタの値に基づいて、メモリに対して発行されたメモリアクセス命令が完了したか否かを判定するからである。
このような構成により、本実施の形態において、拡張バスで接続されたホスト装置からデバイスに対して発行されたメモリアクセス命令が同期処理用であるか否かを低負荷で判定することができる。また、本実施の形態は、同期処理用のメモリアクセス命令に先行するメモリアクセス命令が完了したか否かを低負荷で判定することができる。その結果、本実施の形態は、デバイス内のメモリに対するメモリアクセス命令の発行順序を保証するための動作により性能を低下させることがない。
なお、本実施の形態において、拡張バスがPCIe規格に基づく具体例について説明した。この具体例において、メモリアクセス命令は、PCIeのメモリリード、メモリライトに限らず、コンフィグレーションリード、コンフィグレーションライト等のその他のPCIeトランザクションであってもよい。また、上述した各実施の形態において、適用可能な拡張バスの規格は限定されない。
また、本実施の形態の具体例として、同期処理のためのリード命令またはライト命令に先行する命令および後続する命令がライト命令である例について説明したが、先行および後続する命令の種類や順序、数は限定されない。
また、本実施の形態の具体例において、デバイス内の同期処理ユニットが、同期処理用でないメモリアクセス命令を、ホスト装置から受信する例について説明した。これに限らず、同期処理ユニットは、ホスト装置およびデバイス内のプロセッサのそれぞれから、同期処理用および同期処理用でないメモリアクセス命令を混在して受信する場合もあり得る。そのような場合にも、本実施の形態は同様に動作して、同様の効果を奏する。
次に、本発明の実施の形態の他の態様を図13に示す。
図13に示すように、本発明の実施の形態の他の態様としてのシステム4は、ホスト装置10と、複数のデバイス30とを備える。ホスト装置10および各デバイス30間は、拡張バスインタフェース91および92、拡張バススイッチ93からなる拡張バス90により接続される。
この場合、各デバイス30のプロセッサ21は、同期処理のためのメモリアクセス命令を他のデバイス30内のメモリ23に対して発行する。他のデバイス30内では、同期処理ユニット32が、本発明の第2の実施の形態と同様に動作する。
これにより、拡張バス90で接続された複数のデバイス30間において、性能を低下させることなく、メモリに対する同期処理用でないメモリアクセス命令と、同期処理用のメモリアクセス命令との間で発行順序を保証することができる。なお、図13において、デバイス30の代わりに本発明の第1の実施の形態におけるデバイス20を備える構成も可能である。
以上で、本発明の実施の形態の他の態様の説明を終了する。
なお、上述した各実施の形態において、デバイス内のメモリとして、RAMやレジスタ、その他各種の記憶媒体を適用可能である。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
1、2、4 システム
10 ホスト装置
11 CPU
13 メモリ
20、30 デバイス
21 プロセッサ
22、32 同期処理ユニット
23 メモリ
221、321 命令判定部
222、322 完了判定部
223 発行部
224、324 後続制御部
326 記憶領域
327 カウンタ
90 拡張バス
91、92 拡張バスインタフェース
93 拡張バススイッチ
901 ルート・コンプレックス
902、903 PHY
904 DLL
905 TL
906 リンク
10 ホスト装置
11 CPU
13 メモリ
20、30 デバイス
21 プロセッサ
22、32 同期処理ユニット
23 メモリ
221、321 命令判定部
222、322 完了判定部
223 発行部
224、324 後続制御部
326 記憶領域
327 カウンタ
90 拡張バス
91、92 拡張バスインタフェース
93 拡張バススイッチ
901 ルート・コンプレックス
902、903 PHY
904 DLL
905 TL
906 リンク
Claims (7)
- 自装置を含むデバイスとの間を拡張バスで接続された外部装置または前記デバイス内のプロセッサから、前記デバイス内のメモリにアクセスするメモリアクセス命令を受信すると、前記メモリアクセス命令が同期処理を指示するための同期処理用の命令であるか否かを判定する命令判定部と、
前記メモリに対して発行されたメモリアクセス命令が完了しているか否かを判定する完了判定部と、
前記同期処理用でないと判定されたメモリアクセス命令を前記メモリに対して発行するとともに、前記同期処理用であると判定されたメモリアクセス命令の発行を、該同期処理用のメモリアクセス命令より前に受信された先行のメモリアクセス命令が完了したことが前記完了判定部により判定されるまで保留してから発行する発行部と、
前記同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を、前記外部装置および前記デバイス内のプロセッサから受信しないよう制御する後続制御部と、
を備えた同期処理ユニット。 - 前記命令判定部は、前記メモリにおける前記同期処理用の領域を表す情報を記憶しておき、受信したメモリアクセス命令の対象となるメモリ上の領域が、前記同期処理用の領域に含まれるか否かに基づいて、前記メモリアクセス命令が前記同期処理用の命令であるか否かを判定することを特徴とする請求項1に記載の同期処理ユニット。
- 前記完了判定部は、前記メモリに対して前記メモリアクセス命令が発行されるとインクリメントし前記メモリアクセス命令の完了が通知されるとデクリメントするカウンタを有し、前記カウンタの値に基づいて、前記メモリに対して発行されたメモリアクセス命令が完了しているか否かを判定することを特徴とする請求項1または請求項2に記載の同期処理ユニット。
- 請求項1から請求項3のいずれか1項に記載の同期処理ユニットと、
前記メモリと、
前記プロセッサと、
を備えたデバイス。 - 請求項4に記載のデバイスと、
前記外部装置としてのホスト装置と、
を備えたシステム。 - 前記外部装置として、前記拡張バスで接続された他のデバイスをさらに備えたことを特徴とする請求項5に記載のシステム。
- 同期処理ユニットが、
自装置を含むデバイスとの間を拡張バスで接続された外部装置または前記デバイス内のプロセッサから、前記デバイス内のメモリにアクセスするメモリアクセス命令を受信すると、
前記メモリアクセス命令が同期処理を指示するための同期処理用の命令であるか否かを判定し、
前記同期処理用でないと判定されたメモリアクセス命令を前記メモリに対して発行し、
前記同期処理用であると判定されたメモリアクセス命令の発行を、該同期処理用のメモリアクセス命令より前に受信された先行のメモリアクセス命令が完了したと判定されるまで保留してから発行し、
前記同期処理用のメモリアクセス命令が保留されてから、発行後に完了するまでの間、後続のメモリアクセス命令を、前記外部装置および前記デバイス内のプロセッサから受信しないよう制御する方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016070145A JP6146508B1 (ja) | 2016-03-31 | 2016-03-31 | 同期処理ユニット、デバイス、システムおよび方法 |
US15/472,744 US10198375B2 (en) | 2016-03-31 | 2017-03-29 | Synchronization processing unit, device, and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016070145A JP6146508B1 (ja) | 2016-03-31 | 2016-03-31 | 同期処理ユニット、デバイス、システムおよび方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6146508B1 true JP6146508B1 (ja) | 2017-06-14 |
JP2017182533A JP2017182533A (ja) | 2017-10-05 |
Family
ID=59061181
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016070145A Active JP6146508B1 (ja) | 2016-03-31 | 2016-03-31 | 同期処理ユニット、デバイス、システムおよび方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10198375B2 (ja) |
JP (1) | JP6146508B1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070260841A1 (en) * | 2006-05-02 | 2007-11-08 | Hampel Craig E | Memory module with reduced access granularity |
US11301263B2 (en) * | 2019-10-30 | 2022-04-12 | EMC IP Holding Company, LLC | System and method for suspending and processing commands on a configuration object |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011155027A1 (ja) * | 2010-06-08 | 2011-12-15 | 富士通株式会社 | メモリアクセス制御装置、マルチコアプロセッサシステム、メモリアクセス制御方法、およびメモリアクセス制御プログラム |
JP2015170313A (ja) * | 2014-03-10 | 2015-09-28 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9645866B2 (en) | 2010-09-20 | 2017-05-09 | Qualcomm Incorporated | Inter-processor communication techniques in a multiple-processor computing platform |
US9304940B2 (en) | 2013-03-15 | 2016-04-05 | Intel Corporation | Processors, methods, and systems to relax synchronization of accesses to shared memory |
-
2016
- 2016-03-31 JP JP2016070145A patent/JP6146508B1/ja active Active
-
2017
- 2017-03-29 US US15/472,744 patent/US10198375B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011155027A1 (ja) * | 2010-06-08 | 2011-12-15 | 富士通株式会社 | メモリアクセス制御装置、マルチコアプロセッサシステム、メモリアクセス制御方法、およびメモリアクセス制御プログラム |
JP2015170313A (ja) * | 2014-03-10 | 2015-09-28 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20170286331A1 (en) | 2017-10-05 |
US10198375B2 (en) | 2019-02-05 |
JP2017182533A (ja) | 2017-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5787629B2 (ja) | マシンビジョン用マルチプロセッサシステムオンチップ | |
EP3335124B1 (en) | Register files for i/o packet compression | |
US9003091B2 (en) | Flow control for a Serial Peripheral Interface bus | |
JP2012038293A5 (ja) | ||
US7353311B2 (en) | Method of accessing information and system therefor | |
JP5578713B2 (ja) | 情報処理装置 | |
KR100644596B1 (ko) | 버스 시스템 및 그 버스 중재방법 | |
US7865644B2 (en) | Method and apparatus for attaching multiple slave devices to a single bus controller interface while supporting command pipelining | |
JP4874165B2 (ja) | マルチプロセッサシステム及びマルチプロセッサシステムにおけるアクセス権設定方法 | |
US20150234759A1 (en) | Method and apparatus using high-efficiency atomic operations | |
US20150268985A1 (en) | Low Latency Data Delivery | |
JP6146508B1 (ja) | 同期処理ユニット、デバイス、システムおよび方法 | |
US6795075B1 (en) | Graphic processor having multiple geometric operation units and method of processing data thereby | |
JP2591502B2 (ja) | 情報処理システムおよびそのバス調停方式 | |
JP7493311B2 (ja) | バスシステムおよびその制御方法 | |
JP2001282704A (ja) | データ処理装置及びデータ処理方法とデータ処理システム | |
JP4856413B2 (ja) | 演算処理装置、情報処理装置、及び演算処理装置の制御方法 | |
CN109992560B (zh) | 一种通信方法及通信系统 | |
JP2000305893A (ja) | Pciバス互換性を有するマスターおよびアービターと仲裁方法 | |
US5931932A (en) | Dynamic retry mechanism to prevent corrupted data based on posted transactions on the PCI bus | |
US20100153610A1 (en) | Bus arbiter and bus system | |
JP2006119724A (ja) | Cpuシステム、バスブリッジ、その制御方法、及びコンピュータシステム | |
JPH10307788A (ja) | バスブリッジ | |
JPH0844661A (ja) | 情報処理装置 | |
JPH0844662A (ja) | 情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20170418 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170501 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6146508 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |