(57)【要約】メモリアクセス動作を制御するためのシステムおよび方法が開示される。システムはメモリデバイスへのリクエストを実行する１つ以上のリクエスタを含み得る。メモリコントローラ内で、リクエストキューはリクエスタからリクエストを受け取り、バンクデコーダは宛先バンクを決定し、リクエストは適切なバンクキュー中に置かれる。順序付けユニットは、現在のリクエストは受け取られた順序に対して再順序付けされ得るか決定し、再順序付けの決定に基づいて新しいメモリサイクルを生成する。再順序付けは、同一のページに対する複数のリクエスト、複数の読み出し、または複数の書き込みが存在するかどうかに基づいても良い。メモリインターフェイスは、各メモリリクエストをメモリサイクル順序で実行する。データバッファは、書き込みデータを、それがメモリに書き込まれるまで保持し、読み出しデータを、それがリクエスタに戻されるまで保持する。データバッファはまた、読み出し・変更・書き込み動作中で用いられるメモリワードを保持する。
2011505032.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリリクエストの各々のメモリリクエストに対するメモリの宛先バンクを、前記メモリリクエストの各々に対するメモリアドレスに応答して受け取られた順序で決定するためのバンクデコーダ、
複数のバンクキューであって、各バンクキューはそのバンクキューに関連するメモリバンクに対するペンディングメモリリクエストを記憶し、前記受け取られた順序を追跡する複数のバンクキュー、
同一のバンクキュー中の、および同一のメモリページに対する少なくとも２つのメモリリクエストの存在に応答して、前記受け取られた順序とは異なるメモリサイクル順序を決定するための順序付けユニット、および
前記メモリサイクル順序で各メモリリクエストを実行するためのメモリインターフェイス、
を含むことを特徴とするメモリコントローラ。
【請求項２】
さらに、読み出し・変更・書き込み（ＲＭＷ）ユニットであって、
リクエストされたメモリワードの一部分に対するＲＭＷリクエストを検知すること、
もし前記リクエストされたメモリワードが前記データバッファに存在しなければ、それを前記メモリから読み出すこと、およびそれを前記データバッファに記憶すること、
前記データバッファ中の前記リクエストされたメモリワードの前記一部分を前記ＲＭＷリクエストからのデータを用いて変更すること、
のためのＲＭＷユニットを含むことを特徴とする請求項１のメモリコントローラ。
【請求項３】
前記ＲＭＷユニットはさらに、前記リクエストされたメモリワードを将来のＲＭＷリクエストのために前記データバッファ中に保持するように構成されている、請求項２のメモリコントローラ。
【請求項４】
前記順序付けユニットはさらに、同一タイプの少なくとも２つの追加のメモリリクエストが再順序付けして連続して生じるように構成され、同一タイプが読み出しリクエストおよび書き込みリクエストからなる群から選択される、請求項１のコントローラ。
【請求項５】
前記複数のバンクキューの各バンクキューは、読み出しキューおよび書き込みキューを含む、請求項１のメモリコントローラ。
【請求項６】
さらに、
前記メモリからの、リクエストされたデータを、前記リクエストされたデータが前記少なくとも１つのリクエスタに戻されるまで保持するためのデータバッファを含むことを特徴とする、請求項１のメモリコントローラ。
【請求項７】
さらに、
前記メモリリクエストを行うための少なくとも１つのリクエスタ、
を含み、
前記メモリは、複数のメモリデバイスを含み、前記複数のメモリデバイスの各々は、少なくとも１つのメモリバンクを含むことを特徴とする請求項１乃至６の一つのメモリコントローラ。
【請求項８】
メモリアクセス動作を制御する方法であって、
複数のメモリバンクに宛てられた複数のメモリリクエストを受け取ったシーケンスで受け取ること、
前記複数のメモリバンクの宛先バンクを、前記複数のメモリリクエストの各々に対して決定すること、
時間的に近いが、連続的ではない、前記受け取られたシーケンスで実行されていないメモリリクエストの中の同一タイプの少なくとも２つの実行されていないメモリリクエストを、前記複数のメモリリクエストの１つのリクエストを前記複数のメモリリクエストの少なくとも一の別のリクエストと比較することによって、検知することであって、前記同一タイプは読み出しリクエストおよび書き込みリクエストからなる群から選択されるものであり、
前記検知結果に基づいて前記リクエストのシーケンスを再順序付けすること、
前記同一タイプの前記少なくとも２つのメモリリクエストを、連続的に実行すること、
を含むことを特徴とする方法。
【請求項９】
さらに、
メモリワードの一部分に対する読み出し・変更・書き込み動作を検知することであって、前記メモリワードは前記複数のメモリバンクのデータ幅に対応するデータ幅を含み、
前記メモリワードがメモリコントローラ中に存在するかどうかを決定すること、
前記メモリワードを、もしそれが前記メモリコントローラ中に存在しないならば、メモリから前記メモリコントローラに読み出すこと、
前記メモリワードの前記一部分を、前記読み出し・変更・書き込み動作を開始したリクエスタに通信すること、
前記読み出し・変更・書き込み動作からの前記メモリワードの前記一部分を用いて前記メモリコントローラ中の前記メモリワードを変更すること、
を含むことを特徴とする請求項８の方法。
【請求項１０】
前記データ幅は、メモリバス幅およびメモリバーストサイクルデータ幅からなる群から選択される、請求項９の方法。
【請求項１１】
さらに、
時間的に近い、前記受け取られたシーケンスで実行されていないリクエストの中で、同一のメモリページ向けの少なくとも２つの追加のメモリリクエストを検知すること、および
前記同一のメモリページ向けの少なくとも２つの追加のメモリリクエストを検知することの結果に基づいて、リクエストの前記シーケンスを再順序付けすること、
を含むことを特徴とする請求項８の方法。
【請求項１２】
前記再整理された順序で前記少なくとも２つの追加のメモリリクエストを実行すること、
前記複数のメモリバンク内の各メモリページを、そのメモリページに対するメモリアクセスの完了時に、もし前記メモリアクセスが前記受け取られたシーケンスで実行されるならば、クローズすること、および
前記リクエストの再整理されたシーケンスの間、前記同一のメモリページをオープンに保つこと、
を含むことを特徴とする請求項１１の方法。
【請求項１３】
さらに、
ペンディングメモリリクエストの経過時間を監視すること、
前記ペンディングメモリリクエストの優先度を、それが実行されるのを待つにつれて上昇させること、
新しいメモリリクエストが、高い優先度を有する前記ペンディングメモリリクエストの前に生じるように再順序付けされることを避けること、
を含むことを特徴とする請求項８の方法。
【請求項１４】
さらに、
前記複数の前記メモリバンク中の各メモリバンクの使用中状態を監視すること、および
使用中状態を示していないメモリバンクに対する次のメモリリクエストを実行すること、
を含むことを特徴とする請求項８の方法。
【請求項１５】
さらに、
前記書き込みリクエストに対して前記読み出しリクエストにより高い優先度を付与すること、および、前記読み出しリクエストおよびあらゆるペンディング書き込みリクエストの間でアドレスコンフリクトがないときに、前記読み出しリクエストを、前記書き込みリクエストに先立って実行すること、
を含むことを特徴とする請求項８の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本出願は、２００７年１１月１５日に出願された、“メモリアクセスの順番を変更するシステム、装置、および方法”に関する米国特許出願シリアル番号１１／９４０，７４５の出願日の利益を主張する。
【０００２】
実施形態は計算機システムに関し、特に、メモリアクセス効率を上げるためのメモリコントローラの動作方法に関する。
【背景技術】
【０００３】
多くの計算機およびデータ処理システムにおいて、典型的にはランダムアクセスメモリ（ＲＡＭ）であるメインアクティブメモリは、動的ランダムアクセスメモリ（ＤＲＡＭ）である。ＤＲＡＭの構成は、一般的にはバンクに分けられた多数のメモリセルから構成されている。各バンクは、メモリセルのアレイに対応し、各セルはメモリアドレスでのデータの一ディジット（例えば、一ビット）にそれぞれ関連付けられている。特に、バンク内部のメモリアドレスは、それぞれ行アドレスおよび列アドレスによって指定され、各行アドレスはメモリページのアドレスを指定する。メモリの各ページは、したがって、そのページ内の異なる列指定に対応する、幾つかのメモリロケーションを含んでいる。
【０００４】
一連のアクセスリクエストを実行するとき、現在は別のページを開いているバンクへのページリクエストが起こり得て、それは一般には“ページコンフリクト（競合）”として参照され、それが起こると、以前に開いていたページはまずはクローズされ（例えば、プリチャージされ）なければならない。以前のページをクローズした後、リクエストされたページが次にオープンされ（例えば、作動され）得て、次にリクエストされたページへの読み出しまたは書き込み動作が実行され得る。もし、現在リクエストされているページが、ページをオープンしていないバンク内に見付かるならば、“ページミス”が生じ、よって実行されるべき作動手続きがリクエストされる。“ページヒット”は、現在のメモリアクセスリクエストが、以前のメモリアクセスリクエストによって既にオープンしているページに対するものであるときに生じると言われる。
【０００５】
ページヒットリクエストと比較すると、ページコンフリクトおよびページミスメモリアクセスリクエストに対して実行されなければならない余分な処理のために、後二者の処理を実行するのに要する時間は、前者に対するものよりずっと長い。マイクロプロセッサ技術発展の初期段階では、読み出しおよび書き込みの両動作に対して、ＤＲＡＭメモリページにアクセスするためのリクエストは、先入れ先出し（ＦＩＦＯ）方式で受け取られ、実行された。そのような処理は非効率的であり、多くのページミスおよびコンフリクトをもたらし、よってメモリページをプリチャージするおよびアクティブにする（アクティベートする）ために多くのプロセッサおよび／またはメモリコントローラの資源を使うことを要求する。
【０００６】
最近、メモリアクセスが優先度に基づく、より進歩した処理方法が発展してきた。アクセスリクエストの優先度は、リクエストを送信するデバイスのタイプ、リクエストされるアクセスのタイプ、リクエストによってアクセスされることが望まれるメモリアドレス他など、様々な因子に基づき得る。しかしながら、厳密に優先度に基づいてメモリアクセスを与えることに伴う問題は、低い優先度のリクエストは、受け入れがたいほど長い期間にわたってアクセスが拒否される可能性があることである。
【０００７】
さらに、システム中のマイクロプロセッサの数、マイクロプロセッサ中のコアの数、およびコア当たりのプロセススレッドの数は、今後短期間に大きく増加し、そして次の数年の間は増加し続けると予想されている。数百から数千の実行スレッドを有するシステムが想像され得る。これらのシステムは、多くの場合、複数のプロセッサチップが共通のメモリにアクセスするように設計されている。共通のメモリへのアクセスをリクエストするこれらの複数のソースは、メモリに関する増設圧力（プレッシャー）を与える。
【０００８】
コアおよびスレッドの数の増加の影響の一つは、大きく広がったメモリバンド幅に対する要求であろうし、それは実際に独立なまたは見た目には独立なプログラム実行シーケンスの数の増加ゆえに、メモリシステムで見られるアドレスリクエストストリームはよりランダムになるという主な副次的な作用を伴うというものである。レベル１およびレベル２キャッシュのサイズの増大は、過去に、ほとんどのシステム実装で、全メモリバンド幅およびレイテンシー（遅延時間）問題が対処されてきた方法であるが、コアの数の増加および妥当なダイの大きさへの制限ゆえに、さほど効果的ではなかろうし成長のための機会も少なかろう。さらに、各コアで実行中のスレッドの数の増加は、恐らく平均キャッシュヒット率を減少させるだろうし、またメモリトラフィックの増加をもたらすだろう。
【０００９】
現在のＤＲＡＭ技術では、一つのメモリバンクをサイクルするための時間、つまり、バンクを作動し、リクエストされたデータを読み出しまたは書き込み、そしてバンクをリチャージする時間、はデータ移動時間よりずっと長い。この長いサイクル時間は、もし二つのリクエストが時間的に近いが、同じメモリバンクに対するものだとすると、メモリ入力／出力（ＩＯ）ピンは第１のバンクサイクルが完了するのを待っている期間に対してアイドル状態になり、そして第２のバンクサイクルが開始され得ることを意味している。ＤＲＡＭは一般に独立にサイクルされる複数のバンクを有するので、このバンクタイミングの競合は、利用可能なメモリバンド幅を浪費する。
【００１０】
そのような異なるメモリリクエストソースに関して、複数のスレッドおよび複数のプロセッサのシステム環境において改善されたメモリ性能を生成する装置および方法への要望が存在する。
【図面の簡単な説明】
【００１１】
図面中に本発明の実施形態を示す。
【図１】処理システムの簡単化されたシステムブロック図である。
【図２】メモリコントローラの簡単化されたブロック図である。
【図３】メモリリクエストの再順序付けのための処理を示す簡単化された流れ図である。
【図４】再順序付けされたメモリリクエストを実行するための処理を示す簡単化された流れ図である。
【図５】読み出し・変更・書き込み動作のためのメモリアクセスリクエストを実行するための処理を示す簡単化された流れ図である。
【発明を実施するための形態】
【００１２】
本明細書で開示されている実施形態は、複数のスレッドおよび複数のプロセッサのシステム環境において改善されたメモリ性能を生成する装置および方法を含む。
【００１３】
以下の詳細な記述では、本明細書の一部をなし、その中では本発明が実施され得る特定の実施形態が、実例として示されている添付の図面が参照される。これらの実施形態は、当業者が本発明を実施することが可能となるように十分に詳細に記述され、他の実施形態が使用され得ること、および本発明の範囲内で構造的、論理的、および電気的な変更がなされ得ることは理解されよう。
【００１４】
本記述において、回路および機能は、本発明を不必要に詳細に記載して分かりにくくしないために、ブロック図形式で示されることがある。さらに、図示され記述される特定の回路の実装は、単なる例示であり、本明細書中で他に特に特定しない限り、本発明を実施する唯一の方法として解釈されるべきではない。ブロックの定義および様々なブロック間の論理回路の分割は、特定の実装を表している。本発明は、別の多くの分割方法によって実施され得ることは、当業者にとっては容易に明らかであろう。ほとんどの部分で、本発明の完全な理解を得るために必要ではなく、関連技術の当業者の能力内にあるような、タイミングの考察などに関する詳細は省略されている。
【００１５】
記述を容易にするために、以下では、実施形態は動的ランダムアクセスメモリ（ＤＲＡＭ）デバイスと共に用いられるとして議論される。にもかかわらず、本発明はＤＲＡＭを含む応用に限定されないことは理解されよう。むしろ強調されることは、本発明の実施形態は、静的ＲＡＭ（ＳＲＡＭ）および、非限定的な例として、高速ページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、拡張データ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バーストＥＤＯ  ＤＲＡＭ、同期ＤＲＡＭ（ＳＤＲＡＭ）、二重データレートＤＲＡＭ（ＤＤＲ２  ＤＲＡＭおよびＤＤＲ３  ＤＲＡＭ）、ラムバスＤＲＡＭ（ＲＤＲＡＭ）他を含む、ＤＲＡＭの多くの異なる亜種と共に用いられ得ることである。
【００１６】
幾つかの図面は、表現と記述の明確さのために信号群を単一の信号として示すことがある。当業者には、その信号は信号群のバスを表し得て、そのバスは様々なビット幅を有しても良く、本発明は単一のデータ信号を含むあらゆる数のデータ信号群で実施し得ることは理解されよう。
【００１７】
図１は、本開示の実施形態に従う、メモリコントローラ１００を含むプロセッシングシステム２００の簡単化されたシステムブロック図である。プロセッシングシステム２００は、１つ以上のプロセッサ２１０、１つ以上のグラフィックプロセッサ２２０、およびリクエストバス２４０に接続された１つ以上の専用リクエスタ２３５を含み得る。非限定的な例として、これらの専用リクエスタは、デジタル信号プロセッサ、浮動小数点プロセッサ、メディアプロセッサ、ネットワークマネージャ等を含み得る。プロセッサ２１０、グラフィックプロセッサ２２０および専用リクエスタ２３５は、本明細書中では一般にリクエスタ２３０として参照され得る。さらに、実施形態によっては、リクエスタ２３０の各々は、（図示されていない）別個のリクエストバス２４０を含んでいても良い。リクエストバス２４０は、例えば、制御信号、アドレス信号、データ信号、各リクエスタ２３０に対する固有の識別子、およびリクエスタ２３０内の複数のプロセッサ、または複数のプロセッシングスレッドに対する固有の識別子などの要素を含み得る。
【００１８】
ブリッジユニット２５０は、リクエストバス２４０（または複数のリクエストバス）に接続される。ブリッジユニット２５０はメモリコントローラ１００を含み、また、バスブリッジ２６０を含んでいても良い。図示されていないが、当業者は、プロセッシングシステム２００は複数のメモリコントローラ１００および複数のバスブリッジ２６０を含み得ることを認識するだろう。加えて、ブリッジユニット２５０は、メモリコントローラ１００およびバスブリッジ２６０を別々のデバイスとして備えるように構成されても良いし、または、ブリッジユニット２５０は、メモリコントローラ１００およびバスブリッジ２６０を単一のデバイスに一体化しても良い。加えて、ブリッジユニット２５０、またはメモリコントローラ１００およびバスブリッジ２６０の別々の構成要素は、リクエスタユニット２３０として、同一のパッケージまたは集積回路中に一体化されても良い。
【００１９】
メモリコントローラ１００は、１つ以上のメモリバス２８０を介して、メモリサブシステム３００に接続される。各メモリバス２８０は、少なくとも１つのメモリデバイス２９２を含むメモリコンポーネント２９０（本明細書中ではメモリカードとしても参照される）に対応する。メモリコンポーネント２９０は、メモリカードまたはメモリモジュールとして形成されても良い。プロセッシングシステム２００中で使用可能なメモリモジュールの非限定的な例は、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）、およびランバスインラインメモリモジュール（ＲＩＭＭ）を含む。メモリコンポーネント２９０およびメモリデバイス２９２の様々な構成を含むメモリサブシステム３００は、本明細書中では、単にメモリとして参照され得る。さらに、メモリコンポーネントは、カードまたはモジュールとしてパッケージ化されている必要はない。非限定的な例として、メモリコンポーネントは、３次元パッケージング構成では、プロセッサ２１０または他のリクエスタ２３０の上面上に装着されていても良い。
【００２０】
バスブリッジ２６０は、少なくとも１つの周辺バス２６５に接続される。様々なデバイス２７０が周辺バス２６５に接続され得る。非限定的な例として、これらのデバイスはストレージコントローラ、セカンダリバスブリッジ、マルチメディアプロセッサ、レガシーデバイスインターフェイス、ならびにキーボード、マウス、およびプリンタなどの種々の入力／出力（Ｉ／Ｏ）デバイスを含み得る。バスブリッジ２６０、またはメモリコントローラ１００はまた、１つ以上の専用高速バスに接続されても良い。パーソナルコンピュータでは、非限定的な例として、専用バスは高性能ビデオカードまたは他の高帯域周辺機器をプロセッシングシステム２００に接続するために用いられる、アクセラレーティッドグラフィックポート（ＡＧＰ）バスまたは周辺コンポーネント相互接続拡張（ＰＣＩ−Ｘ）バスであっても良い。
【００２１】
当業者は、図１に示したようなプロセッシングシステム２００が、メモリコントローラ１００の実施形態が使用され得るプロセッシングシステムの単なる一つの非限定的な例であることを理解するであろう。図１は、パーソナルコンピュータまたはワークステーションなどの汎用コンピュータに対して特に適切なプロセッシングアーキテクチャを示しているが、様々な応用での使用に対してより適切になるようにプロセッシングシステム２００を構成するために、よく知られた変更を施すことが可能であることは理解されよう。例えば、処理を要求する多くの電子デバイスが、プロセッサ２１０、およびメモリコンポーネント２９０に、メモリデバイス２９２に直接的に、またはそれらの組み合わせに接続されるメモリコントローラ１００を利用する、より単純なアーキテクチャを用いて実現され得る。
【００２２】
これらの電子デバイスは、限定はされないが、オーディオ／ビデオプロセッサおよびレコーダ、ゲームコンソール、デジタルテレビセット、有線または無線電話、（グローバルポジショニングシステム（ＧＰＳ）および／または慣性航法に基づくシステムを含む）ナビゲーションデバイス、ならびにデジタルカメラおよび／またはレコーダ、を含み得る。その変更箇所は、例えば、不要なコンポーネントの除去、専用デバイスもしくは回路の追加、および／または複数のデバイスの一体化を含み得る。
【００２３】
図２は、本開示の実施形態に従うメモリコントローラ１００の簡単化されたブロック図である。メモリコントローラ１００は、リクエストキュー１１０、バンクデコーダ１２０、バンクキュー（１３０−０、１３０−１、から１３０−ｎ）、順序付けユニット１４０、データバッファ１５０、メモリインターフェイス１６０、およびタイミングコントローラ１７０を含む。各メモリバンクに関連するバンクキュー１３０はメモリサブシステム３００内に存在しても良い。しかしながら、バンクキュー１３０はまた、複数のバンクを処理するように構成されていても良い。
【００２４】
メモリリクエストは、先入れ先出し法で、メモリリクエストバス２４０上のメモリコントローラ１００に入り、リクエストキュー１１０に受け取られる。前に述べたように、リクエストバス２４０バスは、制御信号、アドレス信号、データ信号、各リクエスタ２３０（図１）に対する固有の識別子、およびリクエスタ２３０内の複数のプロセッサ、または複数のプロセッシングスレッドに対する固有の識別子を含んでいてもよい。多くのまたは全てのこれら複数の信号は、バンクキュー１３０内に記憶され得て、各メモリリクエストがメモリコントローラ１００内にペンディング（保留、先送り）になっている間は、メモリコントローラ１００は、各メモリリクエストに関する必要な情報を保存し、追跡することができる。
【００２５】
バンクデコーダ１２０は、受け取ったリクエストをそれらがリクエストキュー１１０に入ったシーケンスで処理し、受け取ったリクエストは、例えばバンクおよび行アドレス情報に基づいてバンクキュー１３０の一つに置かれる。順序付けユニット１４０は、バンクキュー１３０中の情報を追跡し、メモリリクエストがバンクキュー１３０から取得されるべき順序およびバンクキュー１３０が次のメモリアクセスリクエストを供給するべき順序を、メモリインターフェイス１６０およびタイミングコントローラ１７０に示す。以下の議論で明らかになるだろうが、順序付けユニット１４０は、バンクキュー内で様々なメモリリクエストのシーケンス（例えば、順序）を制御するためのシーケンスコントローラ１４２を含み得る。順序付けユニット１４０はまた、読み出し・変更・書き込み（ＲＭＷ）サイクルを制御するための読み出し・変更・書き込み（ＲＭＷ）ユニット１４４を含み得る。ＲＭＷユニット１４４はまた、順序付けユニット１４０とは分離されることも可能である。この場合、バンクデコーダ１２０は、順序付けユニット１４０で可能であったように、ＲＭＷユニットを内部バンクとして扱うことができる。
【００２６】
メモリインターフェイス１６０およびタイミングコントローラ１７０は、適切なタイミングでメモリバス２８０上にメモリアクセスリクエストを生成および制御し、メモリバス２８０上のメモリのタイプに基づいて制御する。非限定的な例として、順序付けユニット１４０からの指示の下で、メモリインターフェイス１６０およびタイミングコントローラ１７０は、メモリバス２８０上でＤＲＡＭに対するプリチャージ、アクティブにする（アクティベートする）、読み出し、書き込み、およびリフレッシュバスサイクルのための、適切なコマンドおよびバスサイクルを生成し得る。
【００２７】
データバッファ１５０は、メモリサブシステム３００に宛てられる書き込みデータ、メモリサブシステム３００から戻された書き込みデータ、読み出し・変更・書き込みデータ、またはこれらの組み合わせを保持することが可能であるシングルバッファとして構成され得る。バンクキュー１３０は、読み出しに対して書き込みがより容易に追跡されることを可能とするために、（図示されていない）読み出しキューおよび書き込みキューに分離されても良い。この分離は、以下でより完全に説明するように、どのメモリリクエストが再順序付けされ得るのかの検知を支援することができる。加えて、書き込みデータは、各々のメモリ書き込みリクエストと共に、バンクキュー内に置かれ得て、そのデータはデータバッファ１５０から取り除かれ得る。
【００２８】
書き込み動作に対しては、書き込みデータはメモリリクエストを伴っている。読み出しまたは書き込みコマンドおよび関連する書き込みデータがメモリコントロールバス１７２およびメモリデータバス１７５上に現れたのちに、書き込みメモリリクエストは適切なバンクキュー１３０から取り除かれる（割り当てを解除される）。
【００２９】
読み出し動作に対しては、リクエストバス２４０上のメモリリクエスト１０２は、データを含まない。結果として、メモリリクエストがバンクキュー１３０中に置かれたときに、読み出しリクエストに対するデータバッファ１５０中の領域（スペース）が割り当てられる必要はない。代わりに、読み出し動作がメモリコントロールバス１７２上に現れ、読み出しデータがメモリデータバス１７５上に戻るとき、データバッファ１５０の領域が割り当てられる。さもなければ、制御ロジックが未完了の読み出しリクエストの数を追跡し、もし読み出しバッファがオーバーフローのおそれがあるようなら、さらなる読み出しリクエストを止めることができる。
【００３０】
読み出しメモリリクエストは、メモリコントローラ１００がどのように構成されているのかに依存して様々な異なる時間だけバンクキュー１３０中にペンディングにされたままになり得る。一例として、バンクキュー１３０は、あらゆるリクエスト情報、とたえば、メモリサイクルのタイプ、起点リクエスタ２３０、起点プロセススレッド、および適正なリクエスタ２３０にデータを戻すために必要であろう前述と類似の情報、を含み得る。この例では、データバッファ１５０は単に、読み出しデータおよびどのエンティティが各々のリクエストを行ったのかを示すタグを含み得て、データが読み出しデータバス１０４上に正しく戻され得るようにする。順序付けユニット１４０は、データをリクエストバス２４０上の適正なリクエスタ２３０に戻すために、バンクキュー１３０からのリクエスト情報およびデータバッファ１５０からの関連データを用いる。データを戻した後、メモリリクエストおよび関連読み出しデータはそれぞれ、適切なバンクキューおよびデータバッファ１５０から取り除かれる（すなわち、割り当てを解除される）。
【００３１】
別の例として、読み出しリクエストがメモリバス２８０上で処理されるときに、リクエスト情報がデータバッファ１５０中に存在するように、リクエスト情報がデータバッファ１５０に転送されても良い。このシナリオでは、メモリリクエストは、リクエストがメモリバス２８０上で処理されるときに、バンクキューから取り除かれるが、それは読み出しデータを適正なリクエスタ２３０に戻すためのすべての情報はデータバッファ１５０にあるからである。順序付けユニット１４０は、データをリクエストバス２４０上の適正なリクエスタ２３０に戻すために、リクエスト情報およびデータバッファ１５０からの関連データを用いる。データを戻した後、メモリリクエストおよび関連読み出しデータは、データバッファ１５０から取り除かれる（すなわち、割り当てを解除される）。
【００３２】
効率的なメモリシステムは、データピンが出来るだけその時々の１００パーセントに近い状態で有用なデータで満たされ続けるように求める。その目的のために、および以下の議論で断らない限り、メモリ動作は“クローズド（閉鎖）バンク”動作とみなされる。別の言葉では、すべてのメモリ参照は、参照の最後でプリチャージされる。より多くの行アドレス選択動作を実行しなければならないことに関連した追加のオーバーヘッドが存在し得るにもかかわらず、マルチプロセッサおよびマルチスレッドシステム環境中でのリクエストストリームのランダムさゆえに、クローズドバンク動作は有用である。たとえあるスレッドが順序付けされたリクエストのストリームを生成しているとしても、メモリコントローラ１００およびメモリシステムによって検知されるように、別のスレッドからインターリーブ（交互配置）される非常に多くの他のリクエストがあるので、起点スレッドが参照しているオープンページを他のリクエストが無効にする前に、その起点スレッドからの第２のリクエストが検知される機会はほとんどない。
【００３３】
このクローズドバンクポリシーは、シングルプロセッサシステムで一般に用いられている従来のメモリコントローラとは異なっている。それらの従来のメモリコントローラでは、リクエスタ２３０からの時間的に近いアクセスは、それらのバンク内の同一のバンクおよび同一のページへのものである可能性は非常に高いので、オープン（開放）バンクポリシーが用いられている。
【００３４】
しかしながら、場合によっては、同一ページへの連続的（バックトゥバック）動作はオープンバンクであり、より効率的になり得るように、同一のＤＲＡＭページへのアクセスを認識しプリチャージ動作を回避することは有利であり得る。同一のページへのメモリリクエストを認識し後続のアクセスに対してバンクを開放しておくこの機能を強化するために、リクエストキュー１１０中のメモリリクエストを受け取られた順序に対して再順序付けすることは有用である可能性がある。
【００３５】
シングルプロセッサシステムでは、メモリコントローラは、リクエストが生成された順序にリクエストを保つように設計されていることがあるが、それは、メモリから入力されるデータは正確にシングルプロセッサが欲しい順序であるからである。しかしながら、この順序を保持することは、しばしばメモリシステムにとっては効率的ではない（即ち、メモリバンド幅が失われる可能性がある。）。しかしながら、複数のコアが与えられる場合、および同一のコアに複数のスレッドが与えられる場合でさえ、リクエストの順序を保つことから生じるメモリシステム性能問題があるであろう。
【００３６】
一般に、順序が同一のメモリアドレスを参照するために保たれている限り、リクエストが順序通りでない仕方で戻されることから生じるプログラム正確さに関する問題はほとんどない。たいていは、同期および強制順序付け命令は、もしこれらの命令がまだ存在しなければ、データおよびプログラムの順序付けによりコアおよびスレッドの間の動作率を必要に応じて調整することを可能とするために、プロセッサの命令セットに付加される。コンパイラライターおよび類似の低水準プログラムはしたがって、多くの順序付け問題を抱えている。メモリシステムのアトミック（不可分）およびバイトイネーブル能力の議論の中で以下に記すが、プログラム同期機能がシステムのメモリアーキテクチャに加えられることがあることは確かである。
【００３７】
たとえもし各コアの、またはスレッドの、リクエストは厳密なプログラムリクエスト順序を保たなくてはならないとしても、もしメモリコントローラ１００が（リクエストバス２４０上の情報に基づいて）リクエストはこのまたはそのスレッドもしくはコアからのものであると云うことができるならば、非競合リクエスト（異なるコアおよびスレッドからのリクエスト）はお互いにアウトオブオーダーとすることが出来るが、各プログラムストリームに対するリクエストはインオーダー（順序を保つ）とすることができる。加えて、読み出しデータをリクエストしたソースに戻す経路を決めるために、またはもしエラーが生じるならエラーを示すために、コントローラはこのソース情報を利用する。
【００３８】
この再順序付けポリシーにおいて、もしバンクキュー１３０内の“古い”リクエストが使用中のバンクへのものであるなら、（他のメモリタイミングおよび使用ルールに従う限り）空いているバンクへのリクエストはその古いリクエストに先行するように選択されても良い。この再順序付けは、他では用いられないであろうバス時間を生産的に使用する。
【００３９】
加えて、リクエストキュー１１０からの入力メモリリクエストは、新規のメモリリクエストが他のペンディングリクエストの一つと同一のページへのものであるかを決定するために、適切なバンクキュー中で他のメモリリクエストと比較されても良い。もしそうであれば、同一のページへのそのペンディングリクエストの後に、新しいメモリリクエストが置かれても良い。この場合、同一ページへの連続的（バックトゥバック）アクセスが可能となるように、クローズドバンクポリシーが無視されても良い。
【００４０】
再順序付けではもちろん、あるリクエストが一度のみならず延期、または移動されることがある。つまり、キュー内のリクエストの経過時間を示し、“古い” リクエストをより高い優先度を有し、時宜を得た仕方で実行されるように変更するために、順序付けユニット１４０は、タイミングユニットまたは類似の機能を含んでいても良い。
【００４１】
データの向きを読み出しサイクルおよび書き込みサイクルの間で反転させるときは、データバスを反転するために複数のメモリクロックを要しても良い。もし（ＤＲＡＭに対する双方向ＤＤＲ転送および８バースト（burst-of-8）のデータリクエストを仮定し）反転時間が２クロック、各データ転送に４クロックを要すると、もしリクエストが読み出しおよび書き込みを交替するならば、ピークメモリバンド幅の３３パーセントが失われ得る。よって、もしメモリ読み出しが他のメモリ読み出しと一緒にグループ化され、メモリ書き込みが他のメモリ書き込みと一緒にグループ化されるならば、バス反転時間による非効率性は減少され得る。
【００４２】
一般に、読み出しおよび書き込み型メモリアクセスリクエストは共に、再順序付けされ得る。しかしながら、メモリコントローラ１００は、もし再順序付けされたシーケンスが、先に受け取られたリクエストといかなるアドレス指定も競合しない、またはさもなければバンクキュー１３０中の他のメモリアクセスリクエストにより関連するメモリロケーションに記憶されたもしくは記憶されるデータと干渉しない範囲で、もし必要ならば書き込みリクエストだけが再順序付けされるというポリシーを実装しても良い。また、同一プログラムアドレスの参照は、プログラムリクエスト順序を保たれなければならない。このリクエスト順序は、一般に、もし異なるプログラムエンティティの間であればソフトウェアによって維持されるが、もし単一のリクエストソース(例えば、コアまたはスレッド）によってなされるなら、メモリコントローラ１００によって維持されるであろう。
【００４３】
別の読み出し対書き込みポリシーとして、読み出しグループに書き込みグループより高い優先度（プライオリティ）を与えることは有用であり得る。別の言葉では、何か（例えば、キューの満杯またはアドレスコンフリクト）が書き込みへのスイッチングを強要するまで、あらゆる読み出しにはプライオリティが付与されても良い。この読み出し優先ポリシーは、リクエスタ２３０から見たときに、読み出しレイテンシー（待ち時間）を減少し得るが、それは読み出しリクエストが、キューの中では前方にあるペンディング書き込みからデータを獲得することを保証するために、読み出しリクエストは、同一アドレスへの書き込みリクエストの前方には再順序付けされていないことを確認（ベリファイ）するロジックを含むという負担のもとにである。しかしながら、実施形態によっては、もし読み出しがペンディング書き込みを有するアドレスに対して実行されたら、メモリコントローラ１００は、適切なキューから直接的に書き込みデータを戻し、メモリは実際には読み出されないようにしても構わない。
【００４４】
プロセッサ、または他のリクエスタ２３０は、ときとして個々のバイトを書き込む、および読み出し・変更・書き込み動作を行う必要がある。個々の小さなデータ量はそれほど頻繁には書き込まれないように見えるが、それらが共通のプログラム上で動作するときは、コアおよびスレッドの数が増加するにつれ、それらの動作は増加するだろう。複数のスレッドが通信するための最善の方法の一つは、メモリシステムの部品として記憶され、管理されるフラグおよびセマフォなどの“アトミック”メモリ動作を用いることである。これらのフラグおよびセマフォは一般に、動作を実行するためにメモリバイトレベルまたはワードレベル動作を要求する。
【００４５】
読み出し・変更・書き込み（ＲＭＷ）は、メモリアドレスから値を読み出し、読み出された値を変更し、そして次に変更された値をメモリアドレスに戻して書き込むアトミックシーケンスである。マルチスレッドプログラミングへの従来のアプローチは、共有するリソースへのアクセスの同期のためにＲＭＷロックを用いることである。セマフォのような同期プリミティブは、コードのあるセクションが並列に実行されることによってコードのセクション間で共有され得るメモリデータ構造をそこないそうであるなら、コードのあるセクションが並列に実行されないことを保障するためにマルチスレッドプログラムによって使用され得る。もし、一つのスレッドが別のスレッドによって既に保持されているロックを取得しようと試みるならば、スレッドはロックが外れるまでブロックする。
【００４６】
非ブロッキングアルゴリズムは、例えば、比較スワップ（ＣＡＳ）のようなアトミックな読み出し・変更・書き込み動作を用いても良い。比較スワップＣＰＵ命令は（またはｘ８６アーキテクチャ中のＣＭＰＸＣＨＧ命令）は、メモリロケーションの内容を所定の値とアトミックに比較し、もしそれらが同一であればメモリロケーションの内容を所与の新しい値に変更する特別な命令である。ＣＡＳはセマフォを有効的にマルチプロセッサシステム中に実装するために用いられ得る。
【００４７】
従来、バイト書き込みおよびセマフォに対するサポートは、プロセッサ中の実行ロジック中で、またはプロセッサのデータキャッシュ中のロジックを用いてなされてきた。しかしながら、システムによっては、これら小さなオペランドの書き込みを最終メモリ宛先（即ち、メモリサブシステム３００）向けの個別データ項目としてサポートし、全キャッシュラインの一部としてはサポートしないことが有益であり得る。
【００４８】
加えて、多くのプロセッサは、３２ビットおよび６４ビットデータ項目を用い、それらのタイプの項目は非常に頻繁に書き込まれ得る。しかし、非限定的な例として、典型的なＤＲＡＭプロトコルおよびインターフェイスは、３２バイトバーストを移動することがある。もし、書き込みのためには４バイトのみが必要ならば、個々のバイト書き込み選択信号が必要であろう。しかしながら、メモリシステムによっては、バイトイネーブルは、利用可能ではないことがある。これらのシステムでは、例えば、４バイトデータ項目を含む３２バイトバーストを読み出す必要があり得る。そして、４データバイトは、３２バイト分のデータ中に挿入され、次に変更された３２バイト量がメモリに戻され、再書き込みされる。この例では、もしバイトイネーブル機能がインターフェイス中にあるならば、４バイトを送ることができたときに、６４バイトのデータは、読み出しおよび書き込みの両方がなされている。この不必要なデータの移動は、サステインドなメモリ性能であるが、浪費されるメモリ性能でもある。一般に、メモリアクセスの幅は、本明細書中では“データ幅”と参照される。非限定的な例として、このデータ幅はメモリバス２８０の物理的ビット幅、またはメモリバーストサイクルの幅であってもよい。加えて、本明細書中で特に断らなければ、ＲＭＷ動作は、一般に特定のＲＭＷ動作と同時にデータ幅の一部への書き込みとして参照される。
【００４９】
よって、ＲＭＷ動作に対して、コントローラ１００はこれらの部分的書き込み動作を管理するように構成されていてもよい。加えて、ＲＭＷユニット１４４中のデータバッファはこれらＲＭＷ動作に対する予約領域を保持し、読み出されるデータはメモリコントローラ１００中に存在し、メモリバス２８０上で読み出し動作を実行する必要をなくすことを可能とするように構成されていてもよい。
【００５０】
図３、４、および５は、本開示の実施形態に従う再順序付けされたメモリアクセスリクエストおよびＲＭＷ動作を管理するためのプロセスを示す簡単化された流れ図である。図３、４、および５を記述するときに、図１および２中の様々な実施形態もまた参照されよう。
【００５１】
図３は、メモリアクセスリクエストを再順序付けするためのプロセス３００を示す簡単化された流れ図である。動作ブロック３０２において、新しいリクエストを受け取る。バンクアドレスに基づいて、リクエストは動作ブロック３０４において、適切なバンクキューに移される。判定ブロック３０６は、ちょうど今受け取ったリクエストは、同一のバンクキューにペンディング（保留、先送り）しているあらゆる以前のリクエストに時間的に近く、且つ同一のバンクキュー中にペンディングしているあらゆる以前のリクエストと同一のバンクおよびページに対するものであるかどうかを判定する。時間的な近さは、本明細書中で用いられているように、リクエストがリクエストキュー１１０において受け取られた時刻がどれだけ離れているかを定義する。リクエストは時間スタンプを用いてタグ付けされても良いし、リクエストに付与されたキュー属性中に経過時間を有しても良い。この方法では、時間的に非常に離れているメモリリクエストは再順序付けされなくても良いし、または “古い”メモリリクエストの前方には新しいリクエストが置かれないように、“古い”メモリリクエストは高い優先度が付与されても良い。時間が離れている長さまたはキューの中の経過時間は、メモリコントローラ１００の構成パラメータとして設定されても良い。
【００５２】
もし、リクエストが別のペンディングリクエストと同一のバンクまたはページに対するものならば、動作ブロック３０８は、新しいメモリサイクルを同一のページに対する他のペンディングリクエストの直後に置くために、そのバンクキューに対するメモリサイクル順序を再定義する。もちろん、以前に述べたように、新しい読み出しサイクルは、同一のアドレスに対する読み出しまたは書き込みサイクルの前に置かれるべきではない。加えて、経過時間または読み出しサイクルに対する優先権に基づいて十分に高い優先度を有するペンディングリクエストがバンクキュー中に存在し得て、新しいリクエストは高優先度のリクエストの前には置かれることはない。
【００５３】
動作ブロック３１０は、新しいリクエストがその直後に置かれたペンディングリクエストは、オープンページリクエストとして印が付けられることを示す。別の言葉では、印が付けられたリクエストに対して、クローズドバンクポリシーは無効とされる（オーバーライドされる）。よって、オープンページとして印が付けられたリクエストがメモリバス２８０上で実行された後、引き続きのメモリリクエストは同一のページに対するものであることが分かっており、２つのリクエストは、プリチャージおよびそれら２つの間で列アドレスストローブを実行することなしに、連続的（バックトゥバック）に実行され得る。
【００５４】
再順序付けプロセス３００は、読み出し対書き込みについて再順序付けすることを含んでいても良い。もし、再順序付けプロセスが読み出し対書き込みについて再順序付けすることを含まなければ、プロセスは新しいリクエストを待つために、経路３１１を介して動作ブロック３０２に戻る。もし、再順序付けプロセスが読み出し対書き込みについて再順序付けすることを含むならば、プロセスは経路３１２を介して判定ブロック３１３に継続される。判定ブロック３１３は、新しいリクエストが、タイプは読み出しリクエストまたは書き込みリクエストであっても構わないが、同一のタイプのペンディングリクエストに時間的に近いかを判定する。もしリクエストが同一のタイプではなければ、プロセスは新しいメモリリクエストを待つために、動作ブロック２０３に戻る。
【００５５】
もし、リクエストが、時間的に近接するメモリリクエストと同一タイプならば、動作ブロック３１４は新しいメモリサイクルを、同一タイプのペンディングメモリサイクルの直後に置くために、そのバンクキューに対するメモリサイクル順序を再定義する。この方法では、再順序化プロセス３００は、要求されうるデータバス反転サイクルの数を減らすために、読み出しおよび書き込みサイクルを一緒にグループ化することに用いられても良い。加えて、読み出しは、読み出しレイテンシーを減らすために、書き込みに対して優先度が付与されても良い。再び、あるタイプのサイクルは、同一のアドレスに対する異なるタイプの前に置かれるべきではない。加えて、経過時間または読み出しサイクルに対する優先権に基づいて十分に高い優先度を有する、バンクキュー中のペンディングリクエストが存在し得て、新しいリクエストは高い優先度のリクエストの前には置かれることはない。リクエストの順序を再定義した後、プロセスは、新しいメモリリクエストを待つために、動作ブロック３０２に戻る。また、各バンクに対して読み出しおよび書き込みリクエストを別々のキューに分離することも可能である。
【００５６】
図４は、メモリバス２８０上で再順序付けされたメモリリクエストを実行するためのメモリアクセスプロセス４００を示す簡単化された流れ図である。動作ブロック４０１において、次のメモリリクエストを適切なバンクキューから検索する。その適切なバンクキューは、ラウンドロビン法またはバンクキューに基づく優先順位付けされた選択を用いて決定され得る。代替として、バンクキューの選択は、先に議論されているように、使用中のメモリバンクに対応するバンクキューからリクエストは選択しないポリシーを用いても良い。
【００５７】
判定ブロック４０２は、次のメモリリクエストが読み出しかまたは書き込みかを検証する。もしプロセスが現在、書き込みシーケンスにあるなら、動作は、以下に説明するように、判定ブロック４５４に継続される。もしプロセスが現在、読み出しシーケンスにあるなら、動作は判定ブロック４０４に継続され、判定ブロック４０４はリクエストが読み出しであるか、およびリクエストされたバンクは使用中ではないか（例えば、作動中であるまたはプリチャージ中である）を判定する。もしそうでなければ、動作ブロック４０６は、次のバンク／キューを探すために、現在の読み出しリクエストおよびサイクルに対するバンク番号をアップデートする。
【００５８】
判定ブロック４０８は、現在の読み出しリクエストに対するバンクがオープンであるかを確認するために検証する。もしバンクがオープンでなければ、動作ブロック４１０はバンクをアクティブにする。判定ブロック４１２は制御ロジックが、現在の読み出しリクエストの終了時においてバンクがオープンしたままにしておくように設定されているかどうかを決定するために検証する。もしバンクがオープンのままであるならば、動作ブロック４１４はメモリバス２８０（図２）上で読み出しサイクルを実行する。もしバンクがクローズされるようであれば、動作ブロック４１６は、メモリバス２８０（図２）上で読み出しサイクルを実行しつつ、同一の命令中で読み出し動作の後にプリチャージが必要であることを示す。
【００５９】
読み出しサイクルが完了するとともに、実施形態によっては、待ち判定ブロック４１８を含んでも良く、待ち判定ブロック４１８は戻された読み出しデータを記憶するための領域が読み出しバッファ１５４中に出来るまで待つ。判定ブロック４２０は、プロセスは読み出しサイクルの実行を終えたかどうかを確認するために検証する。メモリコントローラ１００は、ある数の連続的（バックトゥバック）読み出しを実行するように構成されていても良い。これは多くの要因によって決定され得る。非限定的な例として、その要因は、キュー中の読み出し待ちの数、書き込み待ちの数に対する実行すべき読み出し待ちの数、実行する書き込み待ちの優先度、実行する読み出し待ちの優先度、およびこれらの組み合わせを含み得る。
【００６０】
もし読み出しサイクルが継続するならば、動作ブロック４０６は、次の読み出しサイクルに必要であれば、バンク番号をアップデートする。もし読み出しサイクルが継続しないならば、動作ブロック４８０は現在のモードを、読み出し動作を実行することから書き込み動作を実行することに切り替え、動作は動作ブロック４０１に継続する。
【００６１】
判定ブロック４０２からの出口に戻って、もしプロセスが現在、書き込みシーケンスにあるなら、動作は判定ブロック４５４に継続し、判定ブロック４５４はリクエストが書き込みであるか、およびリクエストされたバンクは使用中ではないかを決定する。もしそうでなければ、動作ブロック４５６は、次のバンク／キューを探すために、現在の書き込みリクエストおよびサイクルに対するバンク番号をアップデートする。
【００６２】
判定ブロック４５８は、現在の書き込みリクエストに対するバンクがオープンであるかを確認するために検証する。もしバンクがオープンでなければ、動作ブロック４６０はバンクアクティブにする。判定ブロック４６２は制御ロジックが、現在の書き込みリクエストの終了時においてバンクをオープンのままにしておくように設定されているかどうかを決定するために検証する。もしバンクがオープンのままであるならば、動作ブロック４６４はメモリバス２８０（図２）上で書き込みサイクルを実行する。もしバンクがクローズされるようであれば、動作ブロック４６６は、メモリバス２８０（図２）上で書き込みサイクルを実行しつつ、同一の命令で書き込み動作の後にプリチャージが必要であることを示す。
【００６３】
判定ブロック４７０は、プロセスは書き込みサイクルの実行を終えたかどうかを確認するために検証する。メモリコントローラ１００は、ある数の連続的（バックトゥバック）書き込みを実行するように構成されていても良い。これは多くの要因によって決定され得る。非限定的な例として、その要因は、キュー中の書き込み待ちの数、書き込み待ちの数に対する実行する読み出し待ちの数、実行する書き込み待ちの優先度、実行する読み出し待ちの優先度、およびこれらの組み合わせを含み得る。
【００６４】
もし書き込みサイクルが継続するならば、動作ブロック４５６は、次の読み出しサイクルに必要であれば、バンク番号をアップデートする。もし読み出しサイクルが継続しないならば、動作ブロック４８０は現在のモードを、書き込み動作の実行から読み出し動作の実行に切り替え、動作は動作ブロック４０１に継続する。
【００６５】
もしメモリサイクルはオープンページとして印が付けられていないならば、クローズドバンクポリシーに従い、動作ブロック４１０は今まさにアクセスしたページをプリチャージし、プロセスは、適切なバンクキューから次のメモリサイクルを検索するために動作ブロック４０２に戻る。
【００６６】
図５は、図３の再順序付けプロセスと幾らかは並列に走り得る、読み出し・変更・書き込み動作および部分的データ幅書き込みに対するメモリアクセスリクエストを行うためのプロセス５００を示す簡単化された流れ図である。動作ブロック５０２において、新しいリクエストを、リクエストキュー１１０（図２）から受け取る。バンクアドレスに基づいて、リクエストは、動作ブロック５０４において適切なバンクキューに移される。判定ブロック５０６は、今まさに受け取ったリクエストが、リクエストバス２４０からの特定の信号または命令によって識別されるようなＲＭＷリクエストであるかを決定する。もしリクエストがＲＭＷリクエストではないならば、制御が次のリクエストのために動作ブロック５０２に戻る。実際には、ＲＭＷプロセス５００および再順序付けプロセス３００は、幾らかは並列に走り、非ＲＭＷリクエストに対しては図３の再順序付けプロセス３００は判定ブロック３０６に継続し得る。
【００６７】
もしリクエストがＲＭＷリクエストであれば、判定ブロック５０８は、アドレス指定されたＲＭＷ位置に対する全データワードが既にＲＭＷユニット１４４（図２）中のデータバッファ中に配置されているかを決定する。もし全データワードがそのデータバッファになければ、動作ブロック５１０はメモリバス２８０上で読み出し動作を実行し、ＲＭＷユニット１４４中のデータバッファ中にデータワードを記憶する。
【００６８】
従来のＲＭＷ動作、および非部分的データ書き込み動作に対しては、動作ブロック５１２は、もし必要ならば、データワードのＲＭＷ部分をリクエスト２３０に戻す。一般に、戻されるＲＭＷ部分は、書き込みが起こる前の読み出し部分である。しかしながら、メモリコントローラ１００は、書き込みが起こった後のＲＭＷ部分を戻すように構成されていても良い。加えて、追加の情報がＲＭＷ部分と共に戻されても良い。非限定的な例として、比較スワップ動作の比較結果が戻されても良い。
【００６９】
動作ブロック５１４は、データワードのＲＭＷ部分をＲＭＷユニット１４４中のＲＭＷデータバッファに書き込む。もし望むのであれば、動作ブロック５１６は、書き込まれたＲＭＷ部分を含む全データワードを、メモリバス２８０を介してメモリに戻して書き込む。
【００７０】
判定ブロック５１８は、ＲＭＷデータワードがデータバッファ１５０中で保存（リテンション）のための印が付けられているか（マークされている）を確認するために検証する。先に述べたように、ＲＭＷデータバッファは複数のＲＭＷデータワードを保持するように構成されても良い。この方法では、ＲＭＷリクエストに対するメモリバス２８０上のメモリサイクルの発生を防止することができる。もし、データワードが保存（リテンション）のための印が付けられているならば、プロセスは次のリクエストを待つために動作ブロック５０２に戻る。もしデータワードが保存のための印が付けられていないならば、動作ブロック５２０は、追加の読み出しまたは書き込みデータのための領域を確保できるようにするためにデータバッファ１５０からデータワードを消す（クリアする）。
【００７１】
ＲＭＷユニット１４４はまた、メモリコントローラに到達する新しいＲＭＷリクエストのために領域の確保が必要となるまで、常にＲＭＷ値を保持し、各新しいリクエストを有するメモリへの書き込みを避け得るように構成されても良い。この保存（リテンション）がなされるならば、再順序付けロジックは、必要に応じて、メモリへの書き込み動作を生成するはずである。従って、保存により、プロセス間（例えば、異なるコア、スレッド、およびそれらの組み合わせ）の通信およびアップデートで使用されるＲＭＷ値に対して頻繁に起こり得る、ＲＭＷ値のアップデートのたびに、書き込みを延期することができるようになる。
【００７２】
（結論）
本発明の実施形態は、メモリアクセス動作を制御するためのシステム、メモリコントローラ、および方法を含み得る。プロセッシングシステムは、複数のメモリデバイスに対するメモリリクエストを実行する１つ以上のリクエスタを含み得る。メモリデバイスの各々は、少なくとも一つのメモリバンクを含む。メモリコントローラは、リクエストキュー、バンクデコーダ、および複数のバンクキューを含む。リクエストキューは、リクエスタからメモリリクエストを受け取り、バンクデコーダは、メモリリクエストに添えられているメモリアドレスに基づいて宛先バンクを決定する。リクエストは次に、適切なバンクキュー中に置かれる。
【００７３】
順序付けユニットは、現在のメモリリクエストは受け取られた順序に対して再順序付けされ得るかを決定し、再順序付けの決定に基づいて新しいメモリサイクル順序を生成する。再順序付けは、所与の任意のバンクキュー内に同一のメモリページへの複数のリクエストが存在するかどうかに基づいても良い。再順序付けはまた、例えば、読み出しリクエストおよび書き込みリクエストのような、同一のタイプの複数のリクエストが存在するかどうかに基づいても良い。メモリインターフェイスは、順序付けユニットによって定義されたメモリサイクル順序で各メモリリクエストを実行する。メモリサイクル順序は、同一のタイプのリクエスト、同一のページに対するリクエスト、またはそれらの組み合わせに基づいても良い。順序付けユニットは、適当なリクエスタに対する読み出しデータの戻りを、元々受け取った順序で制御をする。
【００７４】
データバッファは、メモリ読み出しサイクルから戻った読み出しデータを、リクエストされたデータがリクエスタに戻るまで保持する。データバッファはまた、リクエスタからの読み出し・変更・書き込みリクエストで用いられ得るメモリワードを保持し得る。
【００７５】
順序付けユニットはまた、リクエストされたメモリワードの一部分に対する読み出し・変更・書き込み動作を検知し、制御しても良い。もしリクエストされたメモリワードが、データバッファ中に存在しなければ、順序付けユニットは、リクエストされたメモリワードの読み出しを実行し、それをデータバッファ中に記憶するように、メモリインターフェイスに指示をする。順序付けユニットはまた、変更される前に、少なくとも１つのリクエスタにリクエストされたメモリワードの一部分を戻す制御をし、データバッファ中のリクエストされたメモリワードの一部分を、ＲＭＷリクエストからのデータを用いて変更する。
【００７６】
特定の実施形態を記述してきたが、これらの記述された実施形態は、非限定的なものである。むしろ、本発明の範囲は、添付されたクレームおよびそれらの法的均等物に及ぶ。
【図１】
2011505032.tif 000003
【図２】
2011505032.tif 000004
【図３】
2011505032.tif 000005
【図４】
2011505032.tif 000006
【図５】
2011505032.tif 000007
【手続補正書】
【提出日】平成22年7月12日(2010.7.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のメモリリクエストの各々のメモリリクエストに対するメモリの宛先バンクを、前記メモリリクエストの各々に対するメモリアドレスに応答して受け取られた順序で決定するためのバンクデコーダ、
複数のバンクキューであって、各バンクキューはそのバンクキューに関連するメモリバンクに対するペンディングメモリリクエストを記憶し、前記受け取られた順序を追跡する複数のバンクキュー、
同一のバンクキュー中の、および同一のメモリページに対する少なくとも２つのメモリリクエストの存在に応答して、前記受け取られた順序とは異なるメモリサイクル順序を決定するための順序付けユニット、および
前記メモリサイクル順序で各メモリリクエストを実行するためのメモリインターフェイス、
を含むことを特徴とするメモリコントローラ。
【請求項２】
さらに、読み出し・変更・書き込み（ＲＭＷ）ユニットであって、
リクエストされたメモリワードの一部分に対するＲＭＷリクエストを検知すること、
もし前記リクエストされたメモリワードが前記データバッファに存在しなければ、それを前記メモリから読み出すこと、およびそれを前記データバッファに記憶すること、
前記データバッファ中の前記リクエストされたメモリワードの前記一部分を前記ＲＭＷリクエストからのデータを用いて変更すること、
のためのＲＭＷユニットを含むことを特徴とする請求項１のメモリコントローラ。
【請求項３】
前記ＲＭＷユニットはさらに、前記リクエストされたメモリワードを将来のＲＭＷリクエストのために前記データバッファ中に保持するように構成されている、請求項２のメモリコントローラ。
【請求項４】
前記順序付けユニットはさらに、同一タイプの少なくとも２つの追加のメモリリクエストが再順序付けして連続して生じるように構成され、同一タイプが読み出しリクエストおよび書き込みリクエストからなる群から選択される、請求項１のコントローラ。
【請求項５】
前記複数のバンクキューの各バンクキューは、読み出しキューおよび書き込みキューを含む、請求項１のメモリコントローラ。
【請求項６】
さらに、
前記メモリからの、リクエストされたデータを、前記リクエストされたデータが前記少なくとも１つのリクエスタに戻されるまで保持するためのデータバッファを含むことを特徴とする、請求項１のメモリコントローラ。
【請求項７】
さらに、
前記メモリリクエストを行うための少なくとも１つのリクエスタ、
を含み、
前記メモリは、複数のメモリデバイスを含み、前記複数のメモリデバイスの各々は、少なくとも１つのメモリバンクを含むことを特徴とする請求項１乃至６の一つのメモリコントローラ。
【請求項８】
メモリアクセス動作を制御する方法であって、
複数のメモリバンクに宛てられた複数のメモリリクエストを受け取ったシーケンスで受け取ること、
前記複数のメモリバンクの宛先バンクを、前記複数のメモリリクエストの各々に対して決定すること、
時間的に近いが、連続的ではない、前記受け取られたシーケンスで実行されていないメモリリクエストの中の同一タイプの少なくとも２つの実行されていないメモリリクエストを、前記複数のメモリリクエストの１つのリクエストを前記複数のメモリリクエストの少なくとも一の別のリクエストと比較することによって、検知することであって、前記同一タイプは読み出しリクエストおよび書き込みリクエストからなる群から選択されるものであり、
前記検知結果に基づいて前記リクエストのシーケンスを再順序付けすること、
前記同一タイプの前記少なくとも２つのメモリリクエストを、連続的に実行すること、
を含むことを特徴とする方法。
【請求項９】
さらに、
メモリワードの一部分に対する読み出し・変更・書き込み動作を検知することであって、前記メモリワードは前記複数のメモリバンクのデータ幅に対応するデータ幅を含み、
前記メモリワードがメモリコントローラ中に存在するかどうかを決定すること、
前記メモリワードを、もしそれが前記メモリコントローラ中に存在しないならば、メモリから前記メモリコントローラに読み出すこと、
前記メモリワードの前記一部分を、前記読み出し・変更・書き込み動作を開始したリクエスタに通信すること、
前記読み出し・変更・書き込み動作からの前記メモリワードの前記一部分を用いて前記メモリコントローラ中の前記メモリワードを変更すること、
を含むことを特徴とする請求項８の方法。
【請求項１０】
前記データ幅は、メモリバス幅およびメモリバーストサイクルデータ幅からなる群から選択される、請求項９の方法。
【請求項１１】
さらに、
時間的に近い、前記受け取られたシーケンスで実行されていないリクエストの中で、同一のメモリページ向けの少なくとも２つの追加のメモリリクエストを検知すること、および
前記同一のメモリページ向けの少なくとも２つの追加のメモリリクエストを検知することの結果に基づいて、リクエストの前記シーケンスを再順序付けすること、
を含むことを特徴とする請求項８の方法。
【請求項１２】
前記再整理された順序で前記少なくとも２つの追加のメモリリクエストを実行すること、
前記複数のメモリバンク内の各メモリページを、そのメモリページに対するメモリアクセスの完了時に、もし前記メモリアクセスが前記受け取られたシーケンスで実行されるならば、クローズすること、および
前記リクエストの再整理されたシーケンスの間、前記同一のメモリページをオープンに保つこと、
を含むことを特徴とする請求項１１の方法。
【請求項１３】
さらに、
ペンディングメモリリクエストの経過時間を監視すること、
前記ペンディングメモリリクエストの優先度を、それが実行されるのを待つにつれて上昇させること、
新しいメモリリクエストが、高い優先度を有する前記ペンディングメモリリクエストの前に生じるように再順序付けされることを避けること、
を含むことを特徴とする請求項８の方法。
【請求項１４】
さらに、
前記複数の前記メモリバンク中の各メモリバンクの使用中状態を監視すること、および
使用中状態を示していないメモリバンクに対する次のメモリリクエストを実行すること、
を含むことを特徴とする請求項８の方法。
【請求項１５】
さらに、
前記書き込みリクエストに対して前記読み出しリクエストにより高い優先度を付与すること、および、前記読み出しリクエストおよびあらゆるペンディング書き込みリクエストの間でアドレスコンフリクトがないときに、前記読み出しリクエストを、前記書き込みリクエストに先立って実行すること、
を含むことを特徴とする請求項８の方法。
【請求項１６】
少なくとも１つのリクエスタから受け取られた順序でメモリリクエストを受け取るためのリクエストキュー、
メモリリクエストの各々に対するメモリアドレスに応答してリクエストキュー中の各メモリリクエストに対するメモリの宛先バンクを決定するためのバンクデコーダ、
複数のバンクキューであって、前記複数のバンクキューに関連するメモリバンクに対するペンディングメモリリクエストを記憶し、前記受け取られた順序を追跡するための複数のバンクキュー、
前記メモリのデータ幅に対応するデータ幅で少なくとも１つのデータワードを保持するためのデータバッファ、
読み出し・変更・書き込み（ＲＭＷ）ユニットであって、リクエストされたメモリワードの一部分に対するＲＭＷリクエストを検知し、前記リクエストされたメモリワードが前記データバッファ中に存在するかどうかを決定するためのＲＭＷユニット、および
もし前記リクエストされたメモリワードが前記データバッファに存在しないならば、前記リクエストされたメモリワードを検索するために、前記複数のバンクキューの１つの中に記憶されている前記ＲＭＷリクエストに応答して、前記メモリへの読み出しリクエストを実行するためのメモリインターフェイス、を含み、
前記ＲＭＷユニットは、変更される前に前記リクエストされたメモリワードの前記一部分の前記少なくとも１つのリクエスタへの戻りを制御し、前記ＲＭＷリクエストからのデータを用いて前記データバッファ中の前記リクエストされたメモリワードの前記一部を変更することを特徴とするメモリコントローラ。
【請求項１７】
前記ＲＭＷユニットはさらに、将来のＲＭＷリクエストのために前記データバッファ中に前記リクエストされたメモリワードを保持し、前記データバッファ中の前記メモリワードを変更した後に、前記メモリワードを前記メモリに書き込むように構成される、請求項１６のメモリコントローラ。
【請求項１８】
さらに、
時間的に近い実行されていないリクエストの中のメモリサイクル順序を、同一のバンクキュー中の、且つ同一のメモリページに対する少なくとも２つのメモリリクエストの存在に基づいて決定するように構成された順序付けユニット、
を含み、
前記メモリインターフェイスはさらに、
前記メモリサイクル順序で各メモリリクエストを実行し、
各メモリページを、そのメモリページへのメモリアクセスの終了時に、もし前記メモリアクセスが前記受け取られたシーケンスで実行されたならば、クローズし、および
前記再整理されたリクエストのシーケンスの間で、前記同一のメモリページをオープンにしておく、
ように構成される、請求項１６のメモリコントローラ。
【請求項１９】
さらに、
少なくとも２つの追加の前記同一タイプのメモリリクエストを再順序付けし、連続的に生じるように構成された順序付けユニットを含み、
前記同一タイプは、読み出しリクエストおよび書き込みリクエストからなる群から選択され、
前記メモリインターフェイスはさらに、前記追加のメモリサイクルによって変更された前記メモリサイクル順序で各メモリリクエストを実行するように構成される、請求項１６のメモリコントローラ。
【請求項２０】
メモリアクセス動作を制御するための方法であって、
受け取られたシーケンスで複数のメモリリクエストを受け取ること、
前記複数のメモリリクエストの各々に対する複数のメモリバンクの宛先バンクを決定すること、
前記受け取られたシーケンスで時間的に近い実行されていないリクエストの中で同一メモリページへの前記複数のメモリリクエストの少なくとも２つのメモリリクエストを、前記複数のメモリリクエストの一つのリクエストを前記複数のメモリリクエストの少なくとも一の別のリクエストと比較することによって検知すること、
検知結果にしたがって前記受け取られたシーケンスを再順序付けすること、
前記再整理された順序で前記少なくとも２つのメモリリクエストを実行すること、
各メモリページを、そのメモリページへのメモリアクセスの終了時に、もし前記メモリアクセスが前記受け取られた順序で実行されたならば、クローズすること、および
前記再整理されたリクエストのシーケンスの間で前記同一のメモリページをオープンにしておくこと、
を含むことを特徴とする方法。
【請求項２１】
さらに、
前記受け取られたシーケンスにおいて、時間的に近いが、連続的ではない、実行されていないリクエストの中に、少なくとも２つの追加の同一タイプの実行されていないリクエストを検知することであって、前記同一タイプは、読み出しリクエストおよび書き込みリクエストからなる群から選択されるという、検知すること、及び、
前記リクエストのシーケンスを、少なくとも２つの追加の前記同一タイプの実行されていないリクエストを検知することの結果に基づいて再整理すること、
を含むことを特徴とする請求項２０の方法。
【請求項２２】
さらに、
メモリワードの一部分への読み出し・変更・書き込み動作を検知することであって、前記メモリワードは、前記複数のメモリバンクのデータ幅に対応するデータ幅を含むものであることと、
メモリコントローラ中に前記メモリワードが存在するかどうかを決定すること、
もし前記メモリワードが前記メモリコントローラに存在しないならば、メモリから前記メモリコントローラに前記メモリワードを読み出すこと、
前記読み出し・変更・書き込み動作が開始されたリクエストに前記メモリワードの前記一部分を通信すること、および
前記読み出し・変更・書き込み動作からの前記メモリワードの前記一部分を用いて、前記メモリコントローラ中の前記メモリワードを変更すること、
を含むことを特徴とする請求項２０の方法。
【請求項２３】
前記データ幅は、メモリバス幅およびメモリバーストサイクルデータ幅からなる群から選択される請求項２０の方法。
【国際調査報告】
2011505032.tif 000008
2011505032.tif 000009