(57)【要約】【解決手段】この開示は弱順序処理システム及び弱順序処理システムにおいて強順序リクエストを強制する方法を説明する。処理システムは複数のメモリデバイスと複数のプロセッサを含む。バスインターコネクトは複数のプロセッサを複数のメモリデバイスに接続するように構成される。バスインターコネクトは、更に、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを前記バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行う。【選択図】      図３
2008535064.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリデバイスと、
１以上の前記メモリデバイスに対してメモリアクセスリクエストを発生するようにそれぞれ構成された複数のプロセッサと、
複数の前記プロセッサを複数の前記メモリデバイスへ接続するように構成されたバスインターコネクトとを備え、
前記バスインターコネクトは、更に、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを前記バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うように構成される、弱順序処理システム。
【請求項２】
メモリバリアを受信する前記他のメモリデバイスの各々は、前記開始プロセッサからのいなかる未実行のメモリアクセスリクエストをも実行するように構成される、請求項１の弱順序処理システム。
【請求項３】
前記バスインターコネクトは、更に、前記プロセッサによりアクセス可能な前記他のメモリデバイスの各々のための信号を制御し、また、それらメモリデバイスのいずれが未実行のメモリアクセスリクエストを一つも持たないかをそれら各々の信号から確認するように構成される、請求項１の弱順序処理システム。
【請求項４】
前記バスインターコネクトは、更に、前記プロセッサによりアクセス可能な一つの前記他のメモリデバイスに対して前記バスインターコネクトにより送信された、前記開始プロセッサのためのメモリバリアに応答して、該一つの前記メモリデバイスのための信号が、第１の状態になるように強制し、また、前記バスインターコネクトは、前記信号が前記第１の状態になるように強制された場合に、該一つの前記他のメモリデバイスが未実行のメモリアクセスリクエストを一つも持たないことを確認するように構成される、請求項３の弱順序処理システム。
【請求項５】
前記バスインターコネクトは、更に、前記開始プロセッサから前記メモリデバイスの一つへの弱順序メモリアクセスリクエストに応答して、前記信号が第２の状態になるように強制するように構成される、請求項４の弱順序処理システム。
【請求項６】
前記バスインターコネクトは、更に、前記開始プロセッサから一つの前記メモリデバイスへの未実行のメモリアクセスが存在しない、該一つの前記メモリデバイスからのフィードバックに応答して、前記プロセッサによりアクセス可能な該一つの前記他のメモリデバイスのための信号が、第１の状態になるように強制し、また、前記バスインターコネクトは、前記信号が前記第１の状態になるように強制された場合に、該一つの前記他のメモリデバイスが未実行のメモリアクセスリクエストを一つも持たないことを確認するように構成される、請求項３の弱順序処理システム。
【請求項７】
前記バスインターコネクトは、更に、前記開始プロセッサから一つの前記メモリデバイスへの弱順序メモリアクセスリクエストに応答して、前記信号が第２の状態になるように強制するように構成される、請求項６の弱順序処理システム。
【請求項８】
前記バスインターコネクトは、更に、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該ターゲットメモリデバイスへ強順序を示すメモリ属性と共に該強順序メモリアクセスリクエストを送信することによって、行うように構成される、請求項１の弱順序処理システム。
【請求項９】
複数のメモリデバイスと、
１以上の前記メモリデバイスに対してメモリアクセスリクエストを発生するようにそれぞれ構成された複数のプロセッサと、
複数の前記プロセッサを複数の前記メモリデバイスへ接続するための手段と、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを該バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うための手段とを有するバスインターコネクトとを備えた、弱順序処理システム。
【請求項１０】
弱順序処理システムにおいて、１以上のメモリデバイスに複数のメモリデバイス対してメモリアクセスリクエストを発生するようにそれぞれ構成された複数のプロセッサを、複数のメモリデバイスに接続するように構成されたバススイッチと、
開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを該バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うように構成されたコントローラとを備えた、バスインターコネクト。
【請求項１１】
前記コントローラは、更に、前記プロセッサによりアクセス可能な前記他のメモリデバイスの各々のための信号を制御し、また、それらメモリデバイスのいずれが未実行のメモリアクセスリクエストを一つも持たないかをそれら各々の信号から確認するように構成される、請求項１０のバスインターコネクト。
【請求項１２】
前記コントローラは、更に、前記プロセッサによりアクセス可能な一つの前記他のメモリデバイスに対して前記バスインターコネクトにより送信された、前記開始プロセッサのためのメモリバリアに応答して、該一つの前記メモリデバイスのための信号が、第１の状態になるように強制し、また、前記バスインターコネクトは、前記信号が前記第１の状態になるように強制された場合に、該一つの前記他のメモリデバイスが未実行のメモリアクセスリクエストを一つも持たないことを確認するように構成される、請求項１１のバスインターコネクト。
【請求項１３】
前記コントローラは、更に、前記開始プロセッサから前記メモリデバイスの一つへの弱順序メモリアクセスリクエストに応答して、前記信号が第２の状態になるように強制するように構成される、請求項１２のバスインターコネクト。
【請求項１４】
前記コントローラは、更に、前記開始プロセッサから一つの前記メモリデバイスへの未実行のメモリアクセスが存在しない、該一つの前記メモリデバイスからのフィードバックに応答して、前記プロセッサによりアクセス可能な該一つの前記他のメモリデバイスのための信号が、第１の状態になるように強制し、また、前記バスインターコネクトは、前記信号が前記第１の状態になるように強制された場合に、該一つの前記他のメモリデバイスが未実行のメモリアクセスリクエストを一つも持たないことを確認するように構成される、請求項１１のバスインターコネクト。
【請求項１５】
前記コントローラは、更に、前記開始プロセッサから前記メモリデバイスの一つへの弱順序メモリアクセスリクエストに応答して、前記信号が第２の状態になるように強制するように構成される、請求項１４のバスインターコネクト。
【請求項１６】
弱順序処理システムにおいて強順序リクエストを強制する方法であって、
複数のプロセッサから、複数のメモリデバイスのための複数のメモリアクセスリクエストであって、開始プロセッサからターゲットメモリデバイスへのメモリアクセスリクエストの一つが強順序リクエストであるようなメモリアクセスリクエストを受信することと、
開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うこと、を含む、弱順序処理システムにおける強順序メモリアクセスリクエスト強制方法。
【請求項１７】
前記強順序リクエストは、前記プロセッサによりアクセス可能な前記他のメモリデバイスの各々のための信号を制御し、また、それらメモリデバイスのいずれが未実行のメモリアクセスリクエストを一つも持たないかをそれら各々の信号から確認することによって強制される、請求項１６の方法。
【請求項１８】
前記強順序リクエストは、前記プロセッサによりアクセス可能な一つの前記他のメモリデバイスに対して前記バスインターコネクトにより送信された、前記開始プロセッサのためのメモリバリアに応答して、該一つの前記メモリデバイスのための信号が、第１の状態になるように強制することによって、強制され、該一つの前記他のメモリデバイスが未実行のメモリアクセスリクエストを一つも持たないことの確認は、前記信号が前記第１の状態になるように強制されたことに基づくものである、請求項１７の方法。
【請求項１９】
前記強順序リクエストは、前記開始プロセッサから前記メモリデバイスの一つへの弱順序メモリアクセスリクエストに応答して、前記信号が第２の状態になるように強制することによって、強制される、請求項１８の方法。
【請求項２０】
前記強順序リクエストは、前記開始プロセッサから一つの前記メモリデバイスへの未実行のメモリアクセスが存在しない、該一つの前記メモリデバイスからのフィードバックに応答して、前記プロセッサによりアクセス可能な該一つの前記他のメモリデバイスのための信号が、第１の状態になるように強制することによって、強制され、該一つの前記他のメモリデバイスが未実行のメモリアクセスリクエストを一つも持たないことの確認は、前記信号が前記第１の状態になるように強制されたことに基づくものである、請求項１７の方法。
【請求項２１】
前記強順序リクエスト、前記開始プロセッサから前記メモリデバイスの一つへの弱順序メモリアクセスリクエストに応答して、前記信号が第２の状態になるように強制することによって、強制される、請求項１４の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に処理システムに関し、特に弱順序処理システムにおいて強順序リクエストを強制する場合のメモリバリアを最小化する方法及び装置に関する。
【背景技術】
【０００２】
コンピュータ及び他の現代の処理システムは、わずかなキーパッドのストロークだけで高度なタスクが実行されることを可能にすることにより、エレクトロニクス産業を革新した。これら高度なタスクは、しばしば、バスを用いて高速且つ効率的な方法で互いに通信する幾つかのデバイスを必要とする。そのバスは、処理システムにおいて、デバイス間の共有の通信リンクを提供する。
【０００３】
処理システムにおいてバスに接続されるデバイスのタイプは、特定用途に依存して変わっても良い。典型的には、バスにおける送信デバイスはプロセッサでも良いし、バスにおける受信デバイスはメモリデバイス又はデバイスに写像されたメモリでも良い。これらシステムでは、プロセッサは、しばしば、メモリオペレーションがアウトオブオーダー（out−of−order）で実行されることを許すことによって、パフォーマンスベネフィットを達成する。例えば、メモリオペレーションのシーケンスは、新しいページがオープンされる前にメモリにおける同一のページに対する全てのオペレーションが実行されることを許すために、リオーダー（reorder）されるかも知れない。メモリオペレーションをリオーダーすることが許された処理システムは、一般に、“弱順序（weakly-ordered）”処理システムと呼ばれる。
【０００４】
ある例では、メモリオペレーションのリオーダーは、プログラムの動作に予測できない影響を与えるかも知れない。例えば、アプリケーションは、プロセッサがメモリへデータを書き込むことを、そのメモリ位置から読み出す前に行うよう、要求するかも知れない。弱順序処理システムにおいては、これが生じるという保証はない。この結果は、容認できないであろう。
【０００５】
弱順序処理システムにおいて、順序付けられたメモリオペレーションを実行するために、様々な技術が用いられてきた。一つの技術は、単に、あるメモリオペレーションを、その前の全てのメモリオペレーションが実行されるまで、遅延させることである。前の例において、プロセッサは、データがメモリ位置に対して書き込まれたことを保証する指示を受信するまで、リードリクエストを発行することを遅延させても良い。他の技術は、順序付けられたメモリオペレーションが要求された場合に、メモリバリアと呼ばれるバスコマンドを用いることである。「メモリバリア」は、メモリバリアより前にプロセッサにより発行された全てのメモリアクセスリクエストが、メモリバリアより後にプロセッサにより発行された全てのメモリアクセスリクエストの前に、実行されることを保証するために用いられても良い。さらに、前の例において、メモリバリアは、リードリクエストの発行の前にプロセッサによりメモリに対して送信されることができるであろう。これは、プロセッサのメモリへの書き込みを、プロセッサの同じメモリ位置からの読み出しの前に行うことを、保証するであろう。
【０００６】
両方の技術は有効であるが、システムパフォーマンスの観点から、非効率的である。メモリバリアは、複数のメモリデバイスを備えた処理システムにおいて、特に非効率的であろう。これら処理システムにおいては、メモリオペレーションに順序制約を強制するために、プロセッサによって、それがアクセス可能なあらゆるメモリデバイスに対して、メモリバリアが発行される必要がある。したがって、弱順序処理システムにおいて、順序付けされたメモリオペレーションを実行するためのより効率的な方法が必要とされ続けている。
【発明の開示】
【０００７】
本特許出願は、２００５年３月２３日付で提出され、本明細書の譲受人に譲渡され、本明細書の参照によって明確に組み込まれる「不必要なメモリバリアバスオペレーションを抑圧する方法及び装置（Method and Apparatus for Supressing Unnecessary Memory Barrier Bus Operations）」と題された米国仮出願第６０／６６５，０００号の優先権を主張する。
【０００８】
弱順序処理システムの一つの態様が開示される。処理システムは、複数のメモリデバイスと、１以上の前記メモリデバイスに対してメモリアクセスリクエストを発生するようにそれぞれ構成された複数のプロセッサとを含む。バスインターコネクトは、更に、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを前記バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うように構成される。
【０００９】
弱順序処理システムのもう一つの態様が開示される。弱順序システムは、複数のメモリデバイスと、１以上の前記メモリデバイスに対してメモリアクセスリクエストを発生するようにそれぞれ構成された複数のプロセッサとを含む。バスインターコネクトは、複数の前記プロセッサを複数の前記メモリデバイスへ接続するための手段と、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを該バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うための手段とを含む。
【００１０】
バスインターコネクトの一つの態様が開示される。バスインターコネクトは、弱順序処理システムにおいて、１以上のメモリデバイスに複数のメモリデバイス対してメモリアクセスリクエストを発生するようにそれぞれ構成された複数のプロセッサを、複数のメモリデバイスに接続するように構成されたバススイッチと、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことを該バスインターコネクトが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うように構成されたコントローラとを含む。
【００１１】
弱順序処理システムにおいて強順序リクエストを強制する方法の一つの態様が開示される。前記方法は、複数のプロセッサから、複数のメモリデバイスのための複数のメモリアクセスリクエストであって、開始プロセッサからターゲットメモリデバイスへのメモリアクセスリクエストの一つが強順序リクエストであるようなメモリアクセスリクエストを受信することと、開始プロセッサからターゲットメモリデバイスへの強順序メモリアクセスリクエストのための順序制約を強制することを、該開始プロセッサからアクセス可能な他のメモリデバイスであって且つ該開始プロセッサからの未実行のメモリアクセスリクエストを一つも持たないことが確認できるものを除いたメモリデバイスの各々に対してメモリバリアを送信することによって、行うこと、を含む。
【００１２】
次に述べる詳細な説明から本発明の他の実施形態が当業者に対して容易に明白になるであろうことが理解される。そこでは、例として幾つかの実施形態が示され記述される。理解されるように、本発明の性質や範囲から外れることなしに、本発明は他の異なる実施形態を取ることができ、その幾つかの詳細は様々な他の観点において修正することができる。したがって、図面及び詳細な説明は、実際には、限定的ではなく、例としてみなされなくてはならない。
【発明を実施するための最良の形態】
【００１３】
本発明の様々な実施形態は添付図に制限としてではなく例として示されている。
【００１４】
添付された図面に関して以下で示される詳細な説明は、本発明の様々な実施形態を説明するものであり、本発明を実施しても良い唯一の実施形態を表すものではない。詳細な説明は、本発明の完全な理解を提供する目的で、特定の詳細を含んでいる。しかしながら、本発明がそれら特定の詳細なしに実施しても良いことは当業者には明白である。場合によっては、周知の構成及び構成要素が、本発明の概念を不明瞭にしないようにするために、ブロック図の形で示される。
【００１５】
図１は、弱順序処理システムの一例を示す概念的なブロック図である。
【００１６】
処理システム１００は、コンピュータでも、コンピュータ内に常駐するものでも、又は情報を処理し、検索し若しくは格納する能力のある他のシステムでも良い。処理システム１００は、スタンドアローンのシステムでも良いし、その代わりに、無線若しくは有線の電話のようにデバイスに組み込まれたもの、携帯情報端末（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲームコンソール、ページャー、モデム、カメラ、自動機器、産業機器、ビデオ機器、オーディオ機器、又は処理能力を要求する他の適切なデバイスでも良い。処理システム１００は、集積回路として、集積回路の一部として、又は複数の集積回路を横断して分散されたものとして実装されても良い。その代わりに、処理システム１００は、個別部品、又は個別若しくは集積された回路のいかなる組み合わせと共に実装されても良い。当業者は、各特定用途のために、どのように処理システム１００を実装するのが最良かを、認識するであろう。
【００１７】
処理システム１００は、バス１０６を超えて複数のメモリデバイス１０４ａ〜１０４ｃと通信している複数のプロセッサ１０２ａ〜１０２ｃとともに示されている。特定用途に必要なプロセッサ及びメモリデバイスの実際の数は、必要とされる計算パワー及び全般的な設計制約に依存して変わっても良い。バスインターコネクト１０８は、ポイントツーポイントのスイッチングコネクションを用いるプロセッサ１０２ａ〜１０２ｃとメモリデバイス１０４ａ〜１０４ｃとの間のバストランザクションを管理するために用いられても良い。バスインターコネクト１０８の少なくとも一つの実施形態においては、幾つかのバストランザクションが同時に生じることを許すために、マルチダイレクトリンクが提供されても良い。
【００１８】
各々のプロセッサ１０２ａ〜１０２ｃは、例えば、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向けＩＣ（ＡＳＩＣ）、フィールドプログラマブルゲートアレー（ＦＰＧＡ）若しくは他のプログラマブルロジック、個別のゲート若しくはトランジスタロジック、個別のハードウェアコンポーネント、又は他の処理実体若しくは配置を含む、いかなるタイプのバスマスタリングデバイスとして実装されても良い。プロセッサ１０２ａ〜１０２ｃの一つ又はそれ以上のものが、オペレーティングシステム又は他のソフトウェアの管理下で命令を実行するように構成されても良い。それら命令は、メモリデバイス１０４〜１０４ｃの１つ又はそれ以上のものに存在しても良い。データも、メモリデバイス１０４ａ〜１０４ｃに格納され、ある命令を実行するためにプロセッサ１０２ａ〜１０２ｃによって検索されても良い。これらの命令の実行に起因する新しいデータは、メモリデバイス１０４ａ〜１０４ｃに書き戻されても良い。各メモリデバイス１０４ａ〜１０４ｃは、メモリーコントローラ（図示せず）及び記憶媒体（図示せず）を含んでいても良い。該記憶媒体は、ＲＡＭメモリ、ＤＲＡＭメモリ、ＳＤＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＰＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、ＣＤ−ＲＯＭ、ＤＶＤ、レジスタ、ハードディスクドライブ、リムーバブルディスク、又は他の適切な記憶媒体を含んでいても良い。
【００１９】
各プロセッサ１０２ａ〜１０２ｃは、それぞれ、バスインターコネクト１０８と通信するために、バス１０６上の専用チャンネル１０６ａ〜１０６ｃを備えても良い。同様に、バスインターコネクト１０８は、各メモリデバイス１０４ａ〜１０４ｃと通信するために、該バス上の専用チャンネル１０６ｄ〜１０６ｆを用いても良い。具体例として、第１のプロセッサ１０２ａは、バス１０６上のその専用チャンネル１０６ａを越えてメモリアクセスリクエストを送信することにより、ターゲットメモリデバイス１０４ｂにアクセスすることができる。バスインターコネクト１０８は、該メモリアクセスリクエストのアドレスからターゲットメモリデバイス１０４ｂを判定し、バス１０６上の適切なチャネル１０６ｅを越えてターゲットメモリデバイス１０４ｂに該リクエストをフォワードする。「メモリアクセスリクエスト」は、ライトリクエスト、リードリクエスト、又はバスに関連する他のリクエストでも良い。開始（originating）プロセッサ１０２ａ〜１０２ｃは、ペイロードと共に適切なアドレスをバス１０６上に出し、ライトイネーブル信号をアサートすることにより、ターゲットメモリデバイス１０４ａ〜１０４ｃにライトリクエストを発行しても良い。開始プロセッサ１０２ａ〜１０２ｃは、適切なアドレスをバス１０６上に出し、リードイネーブル信号をアサートすることにより、ターゲットメモリデバイス１０４ａ〜１０４ｃにリードリクエストを発行しても良い。該リードリクエストに応答して、該ターゲットメモリデバイス１０４ａ〜１０４ｃは、開始プロセッサ１０２ａ〜１０２ｃに該ペイロードを送り返すであろう。
【００２０】
処理システム１００の少なくとも一つの実施形態においては、プロセッサ１０２ａ〜１０２ｃは、各メモリアクセスリクエストと共に「メモリ属性」を送信しても良い。「メモリ属性」は、該メモリアクセスリクエストの性質について記述するパラメータであっても良い。メモリ属性は、アドレスチャネル上でアドレスと共に送信されても良い。その代わりに、メモリ属性は、サイドバンドシグナリング又は他の何らかの方法論を用いて送信されても良い。メモリ属性は、メモリアクセスリクエストが強順序（strongly-ordered）であるか否かを示すために用いられても良い。「強順序」リクエストは、アウトオブオーダーで実行されることの許されないメモリアクセスリクエストに関連する。
【００２１】
バスインターコネクト１０８は、プロセッサ１０２ａ〜１０２ｃからの各メモリアクセスリクエストのメモリ属性をモニタするために用いられても良い。もしメモリ属性が強順序メモリアクセスリクエストを示すならば、バスインターコネクト１０８は、そのリクエストに順序制約を強制しても良い。具体例として、第１のプロセッサ１０２ａからターゲットメモリデバイス１０４ａへのメモリアクセスリクエストが、メモリ属性を含んでいても良い。バスインターコネクト１０８は、該リクエストが強順序かどうか、該メモリ属性から判定しても良い。バスインターコネクト１０８は、該リクエストが強順序であると判定するならば、ターゲットメモリデバイス１０４ａ以外で、第１のプロセッサ１０２ａがアクセスできる、メモリデバイス１０４ｂ及び１０４ｃに対して、メモリバリアを送信しても良い。また、ターゲットメモリデバイス１０４ａはメモリアクセスリクエストに関連付けられたメモリ属性により強順序リクエストとして暗黙にそれを扱うであろうから、バスインターコネクト１０８は、メモリバリアなしにターゲットメモリ１０４ａに対してメモリアクセスリクエストを送信する。
【００２２】
図２は、弱順序処理システムにおけるバスインターコネクトの一例を示す機能ブロック図である。バスインターコネクトが実際に実装される方法は、デザイン面の配慮に依存するであろう。当業者は、様々な設計の互換性を認識し、また、各特定用途のために、ここに説明された機能性をどのように実装するのが最良かを、認識するであろう。
【００２３】
図２を参照すると、バス１０６から情報を受信して格納するために、バスレジスタ２０２が用いられても良い。バスレジスタ２０２は、先入れ先出し（ＦＩＦＯ）メモリ又は他の適切なストレージデバイスのような、どのようなタイプのストレージデバイスであっても良い。受信されバスレジスタ２０２に格納された情報は、典型的には、各メモリアクセスリクエストのためのアドレス及びメモリ属性並びにライトリクエストの場合におけるペイロードを含んでも良い。各メモリアクセスリクエストのアドレスは、また、デコーダ２０４に対して与えられる。デコーダ２０４は、バスレジスタ２０２中の各メモリアクセスリクエストのためのターゲットメモリデバイスを判定するために用いられても良い。この決定は、バススイッチ２０６を制御するために用いられる。バススイッチ２０６は、そのターゲットメモリデバイスのためのバス１０６の適切なチャネルに対して、バスレジスタ２０２中の各メモリアクセスリクエストをデマルチプレクスするために用いられる。コントローラ２０８は、バスレジスタ２０２からリリースされたメモリアクセスリクエストのタイミングを制御するために用いられても良い。
【００２４】
図３は、弱順序処理システムのためのバスインターコネクトにおけるコントローラの一例を示す機能ブロック図である。コントローラ２０８は、それがデコーダ２０４から受信する情報に基づきメモリ操作に順序制約を強制する。該情報は、各メモリアクセスリクエストのためのメモリ属性を含んでいても良い。また、第１の入力レジスタ３０２に格納されても良い。該情報は、また、ターゲットメモリデバイス以外で、開始プロセッサがアクセスできる、各メモリデバイスを識別するデータを含んでいても良い。各プロセッサによりアクセス可能な特定のメモリデバイスは、設計段階中にあらかじめ構成されるものであり、したがって、デコーダ２０４中にプログラム又は配線されることが可能である。とにかく、第２の入力レジスタ３０４は、この情報を格納するために用いられても良い。第１及び第２の入力レジスタ３０２，３０４は、図２に示されるように分離したレジスタであっても良いし、その代わりに、単一のレジスタであっても良い。コントローラ２０８の幾つかの実施形態では、デコーダ２０４からの情報は、他のバスインターコネクト機能と共有されるレジスタに格納されても良い。各レジスタは、ＦＩＦＯ又は他の適切な記憶媒体であっても良い。
【００２５】
コントローラ２０８は、バスレジスタ２０２からリリースされたメモリアクセスリクエストのタイミングの制御により、メモリ操作に順序制約を強制する。そのプロセスは、まず、強順序メモリアクセスリクエストがバスレジスタ２０２からリリースされる準備ができていることを示すメモリ属性に関して記述されるであろう。この場合、メモリ属性は、第１の入力レジスタ３０２からメモリバリア発生器３０６に対してイネーブル信号として与えられる。同時に、第２の入力レジスタ３０４に格納されたデータが、メモリバリア発生器３０６の入力に対して与えられる。上に示されるように、第２の入力レジスタ３０４に格納されたデータは、ターゲットメモリデバイス以外で、開始プロセッサがアクセスできる、各メモリデバイスを識別するデータを含んでいる。メモリバリア発生器３０６がメモリ属性によってイネーブルされた場合、この情報は、該データによって識別される各メモリデバイスのためのメモリバリアを生成するために用いられる。各メモリバリアは、強順序リクエストを始めた開始プロセッサを識別する属性と共にバスコマンドを発行することによって、適切なメモリデバイスに対して与えられても良い。その代わりに、メモリバリアは、サイドバンドシグナリング又は他の適切な手段を用いる適切なメモリデバイスに対して与えられても良い。
【００２６】
メモリバリア発生器３０６は、不必要なメモリバリアを抑えるために用いられても良い。例えば、メモリデバイスが、開始プロセッサからの実行すべき顕著な（outstanding）リクエストを持っていないならば、開始プロセッサによりアクセス可能なメモリデバイスのためのメモリバリアは、抑えられても良い。これは様々な方法で達成されても良い。コントローラ２０８の一つの実施形態では、個別のステータスレジスタが、各メモリデバイスのアクティビティーをモニタするために割り当てられても良い。この実施形態においては、第１のステータスレジスタ３０７ａは、第１のメモリデバイス１０４ａのアクティビティーをモニタし、第２のステータスレジスタ３０７ｂは、第２のメモリデバイス１０４ｂのアクティビティーをモニタし、及び第３のステータスレジスタ３０７ｃは、第３のメモリデバイス１０４ｃの活動をモニタする（図１を参照）。各ステータスレジスタ３０７ａ〜３０７ｃは、それぞれ、幾つかのステータス信号を含んでいる。該コントローラの一つの実施形態では、該幾つかのステータス信号は、複数のステータスビットを構成し、一つが各プロセッサに対応し、プロセッサは、特定のステータスビットに割り当てられたメモリデバイスにアクセス可能である。ステータスビットは、その対応するプロセッサが発行したメモリアクセスリクエストが、そのようなビットを格納しているレジスタに割り当てられたメモリデバイスにより実行されずに残っているか否かを指示するために用いられる。
【００２７】
図１〜３を参照して、今、ステータスビットがメモリバリアを抑えるために用いられることを可能にする方法を説明するために具体例が与えられる。この具体例において、該処理システムは、第１のプロセッサ１０２ａが第１及び第３のメモリデバイス１０４ａ，１０４ｃにアクセスすることができるように構成されても良い。この構成の結果、コントローラ２０８中の第１及び第３のステータスレジスタ３０７ａ，３０７ｃは、それぞれ、第１のプロセッサ１０２ａのためのステータスビットを含むことになる。第１のプロセッサ１０２ａにより第１のメモリデバイス１０４ａに対して発行された強順序リクエストが、バスレジスタ２０２の出力にある場合、第１の入力レジスタ３０２からの対応するメモリ属性は、メモリバリア発生器３０６をイネーブルする。該データは、ターゲットメモリデバイス以外で、第１のプロセッサ１０４ａがアクセスできるメモリデバイスを指示する第２の入力レジスタ３０４から、メモリバリア発生器３０６に対して与えらる。この場合、該データは、第３のメモリデバイス１０４ｃを識別する。メモリバリア発生器３０６は、第３のメモリデバイス１０４ｃが、第１のプロセッサ１０２ａからの実行されていないメモリアクセスリクエストを持つか判定するために、第３のステータスレジスタ３０７ｃ中の該第１のプロセッサ１０２ａのためのステータビットをチェックする。もしそうならば、メモリバリア発生器３０６は、第３のメモリデバイス１０４ｃに対してメモリバリアを送信する。そうでなければ、第３のメモリデバイス１０４ｃのためのメモリバリアは抑えられる。
【００２８】
図３に戻って、コントローラ２０８中のロジック３０８は、メモリバリア肯定応答のためのメモリデバイスからのフィードバックをモニタするために用いられても良い。「メモリバリア肯定応答」は、該メモリバリアに先行して、該メモリデバイスにより受信された、強順序リクエストを発行する開始プロセッサからのすべてのメモリアクセスリクエストが実行されたことを指示する該メモリデバイスからの信号である。どのメモリデバイスが、メモリバリア肯定応答のためにモニタされることを必要とするかについて判定するために、第２の入力レジスタ３０４からのデータ及びステータスレジスタ３０７ａ〜３０７ｃからのステータスビットが、ロジック３０８によって用いられる。メモリバリア肯定応答がすべて受信されたとロジック３０８が判定する場合、それは、バスレジスタ２０２から対応するメモリアクセスリクエストをリリースするために用いられるトリガーを生成する。より具体的には、第１の入力レジスタ３０２からのメモリ属性は、マルチプレクサ３１０の選択入力に対して与えられる。マルチプレクサ３１０は、メモリアクセスリクエストが強順序であることをメモリ属性が示す場合に、ロジック３０８によって発生されたトリガーを、バスレジスタ２０２に対して結合するために用いられる。また、バススイッチ２０６のタイミングを同期させるために、マルチプレクサ３１０からのトリガー出力が、該デコーダに対して結合される（図２を参照）。
【００２９】
一旦、メモリアクセスリクエストが該バスレジスタからリリースされれば、それはバススイッチ２０６を通ってターゲットメモリデバイスに対して伝送される（図２を参照）。コントローラ２０８中の第２のマルチプレクサ３１２は、強順序リクエストを示すメモリ属性が選択入力に与えられた場合に、メモリアクセス肯定応答がターゲットメモリデバイスから受信されるまで、第１及び第２のレジスタ３０２，３０４からのデータのリリースを遅延させるために用いられても良い。先に検討されているように、メモリアクセスリクエストに含まれるメモリ属性は、ターゲットメモリデバイスに順序制約を強制する。すなわち、ターゲットメモリデバイスは、強順序メモリアクセスリクエストの前に開始プロセッサにより発行されたすべての顕著なメモリアクセスリクエストを実行する。メモリアクセス肯定応答は、強順序リクエストの実行に続いて該ターゲットメモリデバイスにより発生される。メモリアクセス肯定応答は、コントローラ２０８中のマルチプレクサ３１２にフィードバックされ、ここで、それは、バスレジスタ２０２中の次のメモリアクセスリクエストに対応する第１及び第２のレジスタ３０２，３０４からの新しいデータをリリースするためのトリガーを生成するために用いられる。新しいデータが、バスレジスタ２０２中の対応するメモリアクセスリクエストが強順序であることを示すメモリ属性を含んでいるならば、同じプロセスが繰り返される。そうでなければ、メモリアクセスリクエストは、バスレジスタ２０２から直ちにリリースすることが可能である。
【００３０】
コントローラ２０８は、第１の入力レジスタ３０２中の対応するメモリ属性が、メモリアクセスリクエストは強順序でないことを示す場合に、バスレジスタ２０２から該リクエストを直ちにリリースするように構成される。その場合、メモリ属性は、メモリバリア発生器３０６をディスエーブルにするために用いられる。さらに、該メモリ属性は、メモリアクセスリクエストをリリースするために、マルチプレクサ３１０が、内部生成されたトリガーをバスレジスタ２０２に対して結合する状態になるように強制する。メモリアクセスリクエストは、バスレジスタ２０２からリリースされ、バススイッチ２０６を通ってターゲットメモリデバイスに対して結合される（図２を参照）。そして、次のメモリアクセスリクエストに対応するデータは、コントローラ２０８中の第２のマルチプレクサ３１２からの内部生成されたトリガー出力により、第１及び第２のレジスタ３０２，３０４からリリースされる。
【００３１】
図４は、弱順序処理システムのためのバスインターコネクトにおけるコントローラの他の例を示す機能ブロック図である。この具体例において、強順序メモリアクセスリクエストは、メモリバリアが適切なメモリデバイスに対して与えられるのと同時にコントローラ２０８によってバスレジスタ２０２からリリースされる。より具体的には、第１の入力レジスタ３０２は、メモリアクセスリクエストのためのメモリ属性をメモリバリア発生器３０６に与えるために用いられる。対応するメモリアクセスリクエストが強順序であることをメモリ属性が示すならば、メモリバリア発生器３０６はイネーブルになる。メモリバリア発生器３０６がイネーブルされた場合、第２の入力レジスタ３０４のデータは、ターゲットメモリデバイス以外で、開始プロセッサからアクセスできる各メモリデバイスを識別するために用いられる。識別された各メモリデバイスのために、メモリバリア発生器３０６は、ステータスレジスタ３０７ａ〜３０７ｃ中の開始プロセッサのためのステータスビットをチェックする。そして、メモリバリアは、ターゲットメモリデバイス以外で、開始プロセッサからの実行されていないメモリアクセスリクエストを持つであろう各メモリデバイスのために生成される。
【００３２】
メモリバリア発生器３０６がイネーブルになると、コントローラ２０８におけるロジック３１４は、強順序リクエストがターゲットメモリデバイスにより実行されるまで、メモリアクセスリクエストがバスレジスタ２０２からリリースされることを防ぐために用いられても良い。ディレイ３１６は、内部生成されたトリガーを、該トリガーがメモリ属性によってゲートオフされる前に、バスレジスタ２０２から強順序メモリリクエストをリリースすることを許すために用いられても良い。このように、該メモリアクセスリクエストは、開始プロセッサによりアクセス可能な残るメモリデバイスのためのメモリバリアと同時にターゲットメモリデバイスに対して与えらることが可能である。
【００３３】
ロジック３１８は、ターゲットメモリデバイスからのメモリアクセス肯定応答のためのメモリデバイスからのフィードバック及びメモリバリア肯定応答をモニタするために用いられても良い。第２の入力レジスタ３０４からのデータ及びステータスレジスタ３０７ａ〜３０７ｃからのステータスビットは、どのメモリデバイスが、メモリバリア肯定応答のためにモニタされることを必要とするかについて判定するために、ロジック３１８によって用いられる。個々の肯定応答が受信されたとロジック３１８が判定する場合、それはバスレジスタ２０２中の次のメモリアクセスリクエストに対応する第１及び第２の入力レジスタ３０２，３０４から新しいデータをリリースするためのトリガーを生成する。トリガーは、第１の入力レジスタ２０２からメモリ属性によって適切な状態になるように強制されたマルチプレクサ３２０を通して結合される。そして、新しいデータが、バスレジスタ２０２中の対応するメモリアクセスが強順序であることを示すメモリ属性を含んでいるならば、同じプロセスが繰り返される。そうでなければ、メモリアクセスリクエストは、ロジック３１４を介して内部生成されたトリガーとともにバスレジスタ２０２から直ちにリリースすることが可能である。また、バスレジスタ２０２中の次のメモリアクセスリクエストのための第１及び第２の入力レジスタ３０２，３０４からのデータをリリースするために、内部生成されたトリガーが、マルチプレクサ３２０に結合されても良い。
【００３４】
ステータスビットが設定される方法は、特定用途及び処理システムに課された全般的な設計制約に依存して変わっても良い。具体例として、開始プロセッサにより発行され、第１のターゲットメモリデバイスに宛てられたメモリアクセスリクエストが、バスレジスタからリリースされる場合、開始プロセッサ及び第１のターゲットメモリデバイスのためのステータスビットがクリアされても良い。一旦、ステータスビットがクリアされれば、開始プロセッサにより第２のターゲットメモリデバイスに対して発行された、続く強順序リクエストは、メモリバリアが第１のターゲットメモリデバイスへ送信される結果をもたらすであろう。ステータスビットは、第１のターゲットメモリデバイスにおけるメモリアクセスリクエストが実行されるまで、クリアされたままである。第１のターゲットメモリデバイスからのフィードバックは、ステータスビットをアサートするために用いられても良い。一旦、ステータスビットがアサートされれば、開始プロセッサにより第３のターゲットメモリデバイスに対して発行された、続く強順序リクエストは、メモリバリア発生器に、第１のターゲットメモリデバイスへそうでなければ送信されるメモリバリアを抑えさせる。
【００３５】
前項の中で具体例は、第１のターゲットメモリデバイスが、メモリアクセスリクエストの実行に続くフィードバックを発生すると想定するものである。しかしながら、幾つかの処理システムでは、メモリデバイスは弱順序リクエストのためにフィードバックを提供しなくても良い。他の処理システムでは、フィードバックは、メモリアクセスリクエストがターゲットメモリデバイスにおいてバッファ内に書き込まれたことをのみを示しても良い。後者の場合では、メモリアクセスリクエストが実際には実行されるよりも幾らかの時間後になるまで、それがないかも知れないので、ターゲットメモリデバイスからのフィードバックは、対応するステータスビットをアサートするために用いることができない。これらの処理システムでは、他の方法論がステータスビットを設定するために必要である。
【００３６】
処理システムの一つの実施形態では、メモリバリアは、ステータスビットを設定するために用いることができる。この実施形態では、メモリバリア発生器によって発生されたメモリバリアは、対応するステータスビットをアサートするために用いられても良い。また、リクエストがバスレジスタからリリースされる場合、強順序リクエストのためのステータスビットがアサートされても良い。各ステータスビットは、対応する弱順序リクエストがバスレジスタから続いてリリースされるまで、アサートされたままである。
【００３７】
図１〜４を参照して、今、この後の実施形態の機能性を説明するために具体例が与えられる。この具体例において、該処理システムは、第１のプロセッサ１０２ａが第１及び第３のメモリデバイス１０４ａ，１０４ｃにアクセスすることができるように構成されても良い。
【００３８】
第１のプロセッサ１０２ａによって第１のメモリデバイス１０４ａに対して発行された強順序リクエストが、バスレジスタ２０２の出力にある場合、第３のステータスレジスタ３０７ｃ中の第１のプロセッサ１０２ａのためのステータスビットがクリアされているとして、メモリバリア発生器３０６は、第３のメモリデバイス１０４ｃのためのメモリバリアを発生する。強順序リクエストがバスレジスタ２０２からリリースされる場合、第１のステータスレジスタ３０７ａ中の第１のプロセッサ１０４ａのためのステータスビットがアサートされる。デコーダ２０４からの信号（図示せず）は、このステータスビットをアサートするために用いられても良い。さらに、メモリバリアが第３のメモリデバイス１０４ｃに対して送信される場合、第３のステータスレジスタ３０７ｃ中の第１のプロセッサ１０２ａのためのステータスビットがアサートされる。
【００３９】
一旦、強順序リクエストが完了すれば、次のリクエストは、バスレジスタ２０２からリリースすることが可能である。この具体例において、次のリクエストは、第３のメモリデバイス１０４ｃのために第１のプロセッサ１０２ａにより発行される強順序リクエストである。メモリバリア発生器３０６は、ターゲットメモリデバイス以外で、第１のプロセッサ１０２ａがアクセスできるメモリデバイス、すなわち、第１のメモリデバイス１０４ａ、を識別するために、第２の入力レジスタ３０４からのデータを用いる。第１のステータスレジスタ３０７ａ中の第１のプロセッサ１０２ａのためのステータスビットは、第１のメモリデバイス１０４ａに対するメモリバリアを抑えるために、メモリバリア発生器３０６によって用いられる。その後、第１のプロセッサ１０２ａにより第３のメモリデバイス１０４ｃに対して発行される強順序リクエストは、バスレジスタ２０２からリリースすることが可能である。第１のプロセッサ１０２ａのための第１及び第３のステータスレジスタ３０７ａ，３０７ｃにおけるステータスビットは、アサートされ続ける。
【００４０】
この具体例において、バスレジスタ２０２における次のリクエストは、第１のプロセッサ１０２ａにより第１のメモリデバイス１０４ａに対して発行された弱順序リクエストである。このリクエストは、バスレジスタ２０２から第１のメモリデバイス１０４ａに対して、直ちにリリースすることが可能である。デコーダ２０４は、バスレジスタ２０２に対する出力についてバススイッチ２０６を制御するために用いられても良く、同時に、第１のステータスレジスタ３０７中の第１のプロセッサ１０２ａのためのステータスビットをクリアするためにコントローラ２０８に対して信号を与えるために用いられても良い。
【００４１】
第１のプロセッサ１０２ａにより第３のメモリデバイス１０４ｃに対して発行される強順序リクエストは、この具体例におけるバスレジスタ２０２における次のリクエストである。メモリバリア発生器３０６は、ターゲットメモリデバイス以外で、第１のプロセッサ１０２ａがアクセスできるメモリデバイス、すなわち、第１のメモリデバイス１０４ａ、を識別するために、第２の入力レジスタ３０４からのデータを用いる。第１のステータスレジスタ３０７ａ中の第１のプロセッサ１０２ａのためのステータスビットは、クリアされ、したがって、メモリバリアが、第１のメモリデバイス１０４ａのために発生される。メモリバリアが第３のメモリデバイス１０４ｃに対して送信される場合、第１のステータスレジスタ３０７ａ中の第１のプロセッサ１０４ａのためのステータスビットがリアサートされる。強順序リクエストがバスレジスタ２０２からリリースされる場合、第１のプロセッサ１０２ａのための第３のステータスレジスタ３０７ｃにおけるステータスビットがアサートされ続ける。
【００４２】
前の記述は、いかなる当業者もここに記述された様々な実施形態を実施することを可能にするために与えらる。これらの実施形態に対する様々な修正は当業者には容易に明白になり、また、ここに定義された一般的な原理は、他の実施形態に対して適用されても良い。したがって、当該クレームがここに示された実施形態に限定されることを意味するものではなく、言語クレームに矛盾しない全範囲を与えられるものであり、ここで、単数で参照した要素は「１つ且つ１つだけ」を意味するものではなく、特にそのように述べたものでない限り、むしろ「１以上」を意味するものである。当業者に知られているか又は後で知られるようになる、この開示の全体にわたって記述された様々な実施形態の要素に構造的及び機能的に等価なものは、すべて、参照によって明確にここに組み込まれ、当該クレームによって包含されるように意図される。さらに、ここに開示されたいずれも、そのような開示が当該クレームの中で明示的に記載されているかどうかに関係なく、公に対して捧げるようには意図されない。クレームの要素は、該要素が明確に「means for」なる句を用いて記載されていない限り、あるいは、方法クレームについては該要素が「step for」を用いて記載されていない限り、米国特許法第１１２条第６段落の条項の下で解釈されない。
【図面の簡単な説明】
【００４３】
【図１】弱順序処理システムの一例を示す概念的なブロック図である。
【図２】弱順序処理システムにおけるバスインターコネクトの一例を示す機能ブロック図である。
【図３】弱順序処理システムのためのバスインターコネクトにおけるコントローラの一例を示す機能ブロック図である。
【図４】弱順序処理システムのためのバスインターコネクトにおけるコントローラの他の例を示す機能ブロック図である。
【図１】
2008535064.tif 000003
【図２】
2008535064.tif 000004
【図３】
2008535064.tif 000005
【図４】
2008535064.tif 000006
【国際調査報告】
2008535064.tif 000007
2008535064.tif 000008