JP5272274B2 - メモリアクセスの順序を変更するシステム、装置、および方法 - Google Patents

メモリアクセスの順序を変更するシステム、装置、および方法 Download PDF

Info

Publication number
JP5272274B2
JP5272274B2 JP2010534146A JP2010534146A JP5272274B2 JP 5272274 B2 JP5272274 B2 JP 5272274B2 JP 2010534146 A JP2010534146 A JP 2010534146A JP 2010534146 A JP2010534146 A JP 2010534146A JP 5272274 B2 JP5272274 B2 JP 5272274B2
Authority
JP
Japan
Prior art keywords
memory
request
requests
bank
word
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2010534146A
Other languages
English (en)
Other versions
JP2011505032A (ja
Inventor
アール. レズニック,デイビッド
Original Assignee
マイクロン テクノロジー, インク.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マイクロン テクノロジー, インク. filed Critical マイクロン テクノロジー, インク.
Publication of JP2011505032A publication Critical patent/JP2011505032A/ja
Application granted granted Critical
Publication of JP5272274B2 publication Critical patent/JP5272274B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • G06F13/1631Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests through address comparison
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency

Landscapes

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

Description

優先権の主張
本出願は、2007年11月15日に出願された、“メモリアクセスの順番を変更するシステム、装置、および方法”に関する米国特許出願シリアル番号11/940,745の出願日の利益を主張する。
実施形態は計算機システムに関し、特に、メモリアクセス効率を上げるためのメモリコントローラの動作方法に関する。
多くの計算機およびデータ処理システムにおいて、典型的にはランダムアクセスメモリ(RAM)であるメインアクティブメモリは、動的ランダムアクセスメモリ(DRAM)である。DRAMの構成は、一般的にはバンクに分けられた多数のメモリセルから構成されている。各バンクは、メモリセルのアレイに対応し、各セルはメモリアドレスでのデータの一ディジット(例えば、一ビット)にそれぞれ関連付けられている。特に、バンク内部のメモリアドレスは、それぞれ行アドレスおよび列アドレスによって指定され、各行アドレスはメモリページのアドレスを指定する。メモリの各ページは、したがって、そのページ内の異なる列指定に対応する、幾つかのメモリロケーションを含んでいる。
一連のアクセスリクエストを実行するとき、現在は別のページを開いているバンクへのページリクエストが起こり得て、それは一般には“ページコンフリクト(競合)”として参照され、それが起こると、以前に開いていたページはまずはクローズされ(例えば、プリチャージされ)なければならない。以前のページをクローズした後、リクエストされたページが次にオープンされ(例えば、作動され)得て、次にリクエストされたページへの読み出しまたは書き込み動作が実行され得る。もし、現在リクエストされているページが、ページをオープンしていないバンク内に見付かるならば、“ページミス”が生じ、よって実行されるべき作動手続きがリクエストされる。“ページヒット”は、現在のメモリアクセスリクエストが、以前のメモリアクセスリクエストによって既にオープンしているページに対するものであるときに生じると言われる。
ページヒットリクエストと比較すると、ページコンフリクトおよびページミスメモリアクセスリクエストに対して実行されなければならない余分な処理のために、後二者の処理を実行するのに要する時間は、前者に対するものよりずっと長い。マイクロプロセッサ技術発展の初期段階では、読み出しおよび書き込みの両動作に対して、DRAMメモリページにアクセスするためのリクエストは、先入れ先出し(FIFO)方式で受け取られ、実行された。そのような処理は非効率的であり、多くのページミスおよびコンフリクトをもたらし、よってメモリページをプリチャージするおよびアクティブにする(アクティベートする)ために多くのプロセッサおよび/またはメモリコントローラの資源を使うことを要求する。
最近、メモリアクセスが優先度に基づく、より進歩した処理方法が発展してきた。アクセスリクエストの優先度は、リクエストを送信するデバイスのタイプ、リクエストされるアクセスのタイプ、リクエストによってアクセスされることが望まれるメモリアドレス他など、様々な因子に基づき得る。しかしながら、厳密に優先度に基づいてメモリアクセスを与えることに伴う問題は、低い優先度のリクエストは、受け入れがたいほど長い期間にわたってアクセスが拒否される可能性があることである。
さらに、システム中のマイクロプロセッサの数、マイクロプロセッサ中のコアの数、およびコア当たりのプロセススレッドの数は、今後短期間に大きく増加し、そして次の数年の間は増加し続けると予想されている。数百から数千の実行スレッドを有するシステムが想像され得る。これらのシステムは、多くの場合、複数のプロセッサチップが共通のメモリにアクセスするように設計されている。共通のメモリへのアクセスをリクエストするこれらの複数のソースは、メモリに関する増設圧力(プレッシャー)を与える。
コアおよびスレッドの数の増加の影響の一つは、大きく広がったメモリバンド幅に対する要求であろうし、それは実際に独立なまたは見た目には独立なプログラム実行シーケンスの数の増加ゆえに、メモリシステムで見られるアドレスリクエストストリームはよりランダムになるという主な副次的な作用を伴うというものである。レベル1およびレベル2キャッシュのサイズの増大は、過去に、ほとんどのシステム実装で、全メモリバンド幅およびレイテンシー(遅延時間)問題が対処されてきた方法であるが、コアの数の増加および妥当なダイの大きさへの制限ゆえに、さほど効果的ではなかろうし成長のための機会も少なかろう。さらに、各コアで実行中のスレッドの数の増加は、恐らく平均キャッシュヒット率を減少させるだろうし、またメモリトラフィックの増加をもたらすだろう。
現在のDRAM技術では、一つのメモリバンクをサイクルするための時間、つまり、バンクを作動し、リクエストされたデータを読み出しまたは書き込み、そしてバンクをリチャージする時間、はデータ移動時間よりずっと長い。この長いサイクル時間は、もし二つのリクエストが時間的に近いが、同じメモリバンクに対するものだとすると、メモリ入力/出力(IO)ピンは第1のバンクサイクルが完了するのを待っている期間に対してアイドル状態になり、そして第2のバンクサイクルが開始され得ることを意味している。DRAMは一般に独立にサイクルされる複数のバンクを有するので、このバンクタイミングの競合は、利用可能なメモリバンド幅を浪費する。
そのような異なるメモリリクエストソースに関して、複数のスレッドおよび複数のプロセッサのシステム環境において改善されたメモリ性能を生成する装置および方法への要望が存在する。
図面中に本発明の実施形態を示す。
処理システムの簡単化されたシステムブロック図である。 メモリコントローラの簡単化されたブロック図である。 メモリリクエストの再順序付けのための処理を示す簡単化された流れ図である。 再順序付けされたメモリリクエストを実行するための処理を示す簡単化された流れ図である。 読み出し・変更・書き込み動作のためのメモリアクセスリクエストを実行するための処理を示す簡単化された流れ図である。
本明細書で開示されている実施形態は、複数のスレッドおよび複数のプロセッサのシステム環境において改善されたメモリ性能を生成する装置および方法を含む。
以下の詳細な記述では、本明細書の一部をなし、その中では本発明が実施され得る特定の実施形態が、実例として示されている添付の図面が参照される。これらの実施形態は、当業者が本発明を実施することが可能となるように十分に詳細に記述され、他の実施形態が使用され得ること、および本発明の範囲内で構造的、論理的、および電気的な変更がなされ得ることは理解されよう。
本記述において、回路および機能は、本発明を不必要に詳細に記載して分かりにくくしないために、ブロック図形式で示されることがある。さらに、図示され記述される特定の回路の実装は、単なる例示であり、本明細書中で他に特に特定しない限り、本発明を実施する唯一の方法として解釈されるべきではない。ブロックの定義および様々なブロック間の論理回路の分割は、特定の実装を表している。本発明は、別の多くの分割方法によって実施され得ることは、当業者にとっては容易に明らかであろう。ほとんどの部分で、本発明の完全な理解を得るために必要ではなく、関連技術の当業者の能力内にあるような、タイミングの考察などに関する詳細は省略されている。
記述を容易にするために、以下では、実施形態は動的ランダムアクセスメモリ(DRAM)デバイスと共に用いられるとして議論される。にもかかわらず、本発明はDRAMを含む応用に限定されないことは理解されよう。むしろ強調されることは、本発明の実施形態は、静的RAM(SRAM)および、非限定的な例として、高速ページモードDRAM(FPM DRAM)、拡張データ出力DRAM(EDO DRAM)、バーストEDO DRAM、同期DRAM(SDRAM)、二重データレートDRAM(DDR2 DRAMおよびDDR3 DRAM)、ラムバスDRAM(RDRAM)他を含む、DRAMの多くの異なる亜種と共に用いられ得ることである。
幾つかの図面は、表現と記述の明確さのために信号群を単一の信号として示すことがある。当業者には、その信号は信号群のバスを表し得て、そのバスは様々なビット幅を有しても良く、本発明は単一のデータ信号を含むあらゆる数のデータ信号群で実施し得ることは理解されよう。
図1は、本開示の実施形態に従う、メモリコントローラ100を含むプロセッシングシステム200の簡単化されたシステムブロック図である。プロセッシングシステム200は、1つ以上のプロセッサ210、1つ以上のグラフィックプロセッサ220、およびリクエストバス240に接続された1つ以上の専用リクエスタ235を含み得る。非限定的な例として、これらの専用リクエスタは、デジタル信号プロセッサ、浮動小数点プロセッサ、メディアプロセッサ、ネットワークマネージャ等を含み得る。プロセッサ210、グラフィックプロセッサ220および専用リクエスタ235は、本明細書中では一般にリクエスタ230として参照され得る。さらに、実施形態によっては、リクエスタ230の各々は、(図示されていない)別個のリクエストバス240を含んでいても良い。リクエストバス240は、例えば、制御信号、アドレス信号、データ信号、各リクエスタ230に対する固有の識別子、およびリクエスタ230内の複数のプロセッサ、または複数のプロセッシングスレッドに対する固有の識別子などの要素を含み得る。
ブリッジユニット250は、リクエストバス240(または複数のリクエストバス)に接続される。ブリッジユニット250はメモリコントローラ100を含み、また、バスブリッジ260を含んでいても良い。図示されていないが、当業者は、プロセッシングシステム200は複数のメモリコントローラ100および複数のバスブリッジ260を含み得ることを認識するだろう。加えて、ブリッジユニット250は、メモリコントローラ100およびバスブリッジ260を別々のデバイスとして備えるように構成されても良いし、または、ブリッジユニット250は、メモリコントローラ100およびバスブリッジ260を単一のデバイスに一体化しても良い。加えて、ブリッジユニット250、またはメモリコントローラ100およびバスブリッジ260の別々の構成要素は、リクエスタユニット230として、同一のパッケージまたは集積回路中に一体化されても良い。
メモリコントローラ100は、1つ以上のメモリバス280を介して、メモリサブシステム300に接続される。各メモリバス280は、少なくとも1つのメモリデバイス292を含むメモリコンポーネント290(本明細書中ではメモリカードとしても参照される)に対応する。メモリコンポーネント290は、メモリカードまたはメモリモジュールとして形成されても良い。プロセッシングシステム200中で使用可能なメモリモジュールの非限定的な例は、シングルインラインメモリモジュール(SIMM)、デュアルインラインメモリモジュール(DIMM)、およびランバスインラインメモリモジュール(RIMM)を含む。メモリコンポーネント290およびメモリデバイス292の様々な構成を含むメモリサブシステム300は、本明細書中では、単にメモリとして参照され得る。さらに、メモリコンポーネントは、カードまたはモジュールとしてパッケージ化されている必要はない。非限定的な例として、メモリコンポーネントは、3次元パッケージング構成では、プロセッサ210または他のリクエスタ230の上面上に装着されていても良い。
バスブリッジ260は、少なくとも1つの周辺バス265に接続される。様々なデバイス270が周辺バス265に接続され得る。非限定的な例として、これらのデバイスはストレージコントローラ、セカンダリバスブリッジ、マルチメディアプロセッサ、レガシーデバイスインターフェイス、ならびにキーボード、マウス、およびプリンタなどの種々の入力/出力(I/O)デバイスを含み得る。バスブリッジ260、またはメモリコントローラ100はまた、1つ以上の専用高速バスに接続されても良い。パーソナルコンピュータでは、非限定的な例として、専用バスは高性能ビデオカードまたは他の高帯域周辺機器をプロセッシングシステム200に接続するために用いられる、アクセラレーティッドグラフィックポート(AGP)バスまたは周辺コンポーネント相互接続拡張(PCI−X)バスであっても良い。
当業者は、図1に示したようなプロセッシングシステム200が、メモリコントローラ100の実施形態が使用され得るプロセッシングシステムの単なる一つの非限定的な例であることを理解するであろう。図1は、パーソナルコンピュータまたはワークステーションなどの汎用コンピュータに対して特に適切なプロセッシングアーキテクチャを示しているが、様々な応用での使用に対してより適切になるようにプロセッシングシステム200を構成するために、よく知られた変更を施すことが可能であることは理解されよう。例えば、処理を要求する多くの電子デバイスが、プロセッサ210、およびメモリコンポーネント290に、メモリデバイス292に直接的に、またはそれらの組み合わせに接続されるメモリコントローラ100を利用する、より単純なアーキテクチャを用いて実現され得る。
これらの電子デバイスは、限定はされないが、オーディオ/ビデオプロセッサおよびレコーダ、ゲームコンソール、デジタルテレビセット、有線または無線電話、(グローバルポジショニングシステム(GPS)および/または慣性航法に基づくシステムを含む)ナビゲーションデバイス、ならびにデジタルカメラおよび/またはレコーダ、を含み得る。その変更箇所は、例えば、不要なコンポーネントの除去、専用デバイスもしくは回路の追加、および/または複数のデバイスの一体化を含み得る。
図2は、本開示の実施形態に従うメモリコントローラ100の簡単化されたブロック図である。メモリコントローラ100は、リクエストキュー110、バンクデコーダ120、バンクキュー(130−0、130−1、から130−n)、順序付けユニット140、データバッファ150、メモリインターフェイス160、およびタイミングコントローラ170を含む。各メモリバンクに関連するバンクキュー130はメモリサブシステム300内に存在しても良い。しかしながら、バンクキュー130はまた、複数のバンクを処理するように構成されていても良い。
メモリリクエストは、先入れ先出し法で、メモリリクエストバス240上のメモリコントローラ100に入り、リクエストキュー110に受け取られる。前に述べたように、リクエストバス240バスは、制御信号、アドレス信号、データ信号、各リクエスタ230(図1)に対する固有の識別子、およびリクエスタ230内の複数のプロセッサ、または複数のプロセッシングスレッドに対する固有の識別子を含んでいてもよい。多くのまたは全てのこれら複数の信号は、バンクキュー130内に記憶され得て、各メモリリクエストがメモリコントローラ100内にペンディング(保留、先送り)になっている間は、メモリコントローラ100は、各メモリリクエストに関する必要な情報を保存し、追跡することができる。
バンクデコーダ120は、受け取ったリクエストをそれらがリクエストキュー110に入ったシーケンスで処理し、受け取ったリクエストは、例えばバンクおよび行アドレス情報に基づいてバンクキュー130の一つに置かれる。順序付けユニット140は、バンクキュー130中の情報を追跡し、メモリリクエストがバンクキュー130から取得されるべき順序およびバンクキュー130が次のメモリアクセスリクエストを供給するべき順序を、メモリインターフェイス160およびタイミングコントローラ170に示す。以下の議論で明らかになるだろうが、順序付けユニット140は、バンクキュー内で様々なメモリリクエストのシーケンス(例えば、順序)を制御するためのシーケンスコントローラ142を含み得る。順序付けユニット140はまた、読み出し・変更・書き込み(RMW)サイクルを制御するための読み出し・変更・書き込み(RMW)ユニット144を含み得る。RMWユニット144はまた、順序付けユニット140とは分離されることも可能である。この場合、バンクデコーダ120は、順序付けユニット140で可能であったように、RMWユニットを内部バンクとして扱うことができる。
メモリインターフェイス160およびタイミングコントローラ170は、適切なタイミングでメモリバス280上にメモリアクセスリクエストを生成および制御し、メモリバス280上のメモリのタイプに基づいて制御する。非限定的な例として、順序付けユニット140からの指示の下で、メモリインターフェイス160およびタイミングコントローラ170は、メモリバス280上でDRAMに対するプリチャージ、アクティブにする(アクティベートする)、読み出し、書き込み、およびリフレッシュバスサイクルのための、適切なコマンドおよびバスサイクルを生成し得る。
データバッファ150は、メモリサブシステム300に宛てられる書き込みデータ、メモリサブシステム300から戻された書き込みデータ、読み出し・変更・書き込みデータ、またはこれらの組み合わせを保持することが可能であるシングルバッファとして構成され得る。バンクキュー130は、読み出しに対して書き込みがより容易に追跡されることを可能とするために、(図示されていない)読み出しキューおよび書き込みキューに分離されても良い。この分離は、以下でより完全に説明するように、どのメモリリクエストが再順序付けされ得るのかの検知を支援することができる。加えて、書き込みデータは、各々のメモリ書き込みリクエストと共に、バンクキュー内に置かれ得て、そのデータはデータバッファ150から取り除かれ得る。
書き込み動作に対しては、書き込みデータはメモリリクエストを伴っている。読み出しまたは書き込みコマンドおよび関連する書き込みデータがメモリコントロールバス172およびメモリデータバス175上に現れたのちに、書き込みメモリリクエストは適切なバンクキュー130から取り除かれる(割り当てを解除される)。
読み出し動作に対しては、リクエストバス240上のメモリリクエスト102は、データを含まない。結果として、メモリリクエストがバンクキュー130中に置かれたときに、読み出しリクエストに対するデータバッファ150中の領域(スペース)が割り当てられる必要はない。代わりに、読み出し動作がメモリコントロールバス172上に現れ、読み出しデータがメモリデータバス175上に戻るとき、データバッファ150の領域が割り当てられる。さもなければ、制御ロジックが未完了の読み出しリクエストの数を追跡し、もし読み出しバッファがオーバーフローのおそれがあるようなら、さらなる読み出しリクエストを止めることができる。
読み出しメモリリクエストは、メモリコントローラ100がどのように構成されているのかに依存して様々な異なる時間だけバンクキュー130中にペンディングにされたままになり得る。一例として、バンクキュー130は、あらゆるリクエスト情報、とたえば、メモリサイクルのタイプ、起点リクエスタ230、起点プロセススレッド、および適正なリクエスタ230にデータを戻すために必要であろう前述と類似の情報、を含み得る。この例では、データバッファ150は単に、読み出しデータおよびどのエンティティが各々のリクエストを行ったのかを示すタグを含み得て、データが読み出しデータバス104上に正しく戻され得るようにする。順序付けユニット140は、データをリクエストバス240上の適正なリクエスタ230に戻すために、バンクキュー130からのリクエスト情報およびデータバッファ150からの関連データを用いる。データを戻した後、メモリリクエストおよび関連読み出しデータはそれぞれ、適切なバンクキューおよびデータバッファ150から取り除かれる(すなわち、割り当てを解除される)。
別の例として、読み出しリクエストがメモリバス280上で処理されるときに、リクエスト情報がデータバッファ150中に存在するように、リクエスト情報がデータバッファ150に転送されても良い。このシナリオでは、メモリリクエストは、リクエストがメモリバス280上で処理されるときに、バンクキューから取り除かれるが、それは読み出しデータを適正なリクエスタ230に戻すためのすべての情報はデータバッファ150にあるからである。順序付けユニット140は、データをリクエストバス240上の適正なリクエスタ230に戻すために、リクエスト情報およびデータバッファ150からの関連データを用いる。データを戻した後、メモリリクエストおよび関連読み出しデータは、データバッファ150から取り除かれる(すなわち、割り当てを解除される)。
効率的なメモリシステムは、データピンが出来るだけその時々の100パーセントに近い状態で有用なデータで満たされ続けるように求める。その目的のために、および以下の議論で断らない限り、メモリ動作は“クローズド(閉鎖)バンク”動作とみなされる。別の言葉では、すべてのメモリ参照は、参照の最後でプリチャージされる。より多くの行アドレス選択動作を実行しなければならないことに関連した追加のオーバーヘッドが存在し得るにもかかわらず、マルチプロセッサおよびマルチスレッドシステム環境中でのリクエストストリームのランダムさゆえに、クローズドバンク動作は有用である。たとえあるスレッドが順序付けされたリクエストのストリームを生成しているとしても、メモリコントローラ100およびメモリシステムによって検知されるように、別のスレッドからインターリーブ(交互配置)される非常に多くの他のリクエストがあるので、起点スレッドが参照しているオープンページを他のリクエストが無効にする前に、その起点スレッドからの第2のリクエストが検知される機会はほとんどない。
このクローズドバンクポリシーは、シングルプロセッサシステムで一般に用いられている従来のメモリコントローラとは異なっている。それらの従来のメモリコントローラでは、リクエスタ230からの時間的に近いアクセスは、それらのバンク内の同一のバンクおよび同一のページへのものである可能性は非常に高いので、オープン(開放)バンクポリシーが用いられている。
しかしながら、場合によっては、同一ページへの連続的(バックトゥバック)動作はオープンバンクであり、より効率的になり得るように、同一のDRAMページへのアクセスを認識しプリチャージ動作を回避することは有利であり得る。同一のページへのメモリリクエストを認識し後続のアクセスに対してバンクを開放しておくこの機能を強化するために、リクエストキュー110中のメモリリクエストを受け取られた順序に対して再順序付けすることは有用である可能性がある。
シングルプロセッサシステムでは、メモリコントローラは、リクエストが生成された順序にリクエストを保つように設計されていることがあるが、それは、メモリから入力されるデータは正確にシングルプロセッサが欲しい順序であるからである。しかしながら、この順序を保持することは、しばしばメモリシステムにとっては効率的ではない(即ち、メモリバンド幅が失われる可能性がある。)。しかしながら、複数のコアが与えられる場合、および同一のコアに複数のスレッドが与えられる場合でさえ、リクエストの順序を保つことから生じるメモリシステム性能問題があるであろう。
一般に、順序が同一のメモリアドレスを参照するために保たれている限り、リクエストが順序通りでない仕方で戻されることから生じるプログラム正確さに関する問題はほとんどない。たいていは、同期および強制順序付け命令は、もしこれらの命令がまだ存在しなければ、データおよびプログラムの順序付けによりコアおよびスレッドの間の動作率を必要に応じて調整することを可能とするために、プロセッサの命令セットに付加される。コンパイラライターおよび類似の低水準プログラムはしたがって、多くの順序付け問題を抱えている。メモリシステムのアトミック(不可分)およびバイトイネーブル能力の議論の中で以下に記すが、プログラム同期機能がシステムのメモリアーキテクチャに加えられることがあることは確かである。
たとえもし各コアの、またはスレッドの、リクエストは厳密なプログラムリクエスト順序を保たなくてはならないとしても、もしメモリコントローラ100が(リクエストバス240上の情報に基づいて)リクエストはこのまたはそのスレッドもしくはコアからのものであると云うことができるならば、非競合リクエスト(異なるコアおよびスレッドからのリクエスト)はお互いにアウトオブオーダーとすることが出来るが、各プログラムストリームに対するリクエストはインオーダー(順序を保つ)とすることができる。加えて、読み出しデータをリクエストしたソースに戻す経路を決めるために、またはもしエラーが生じるならエラーを示すために、コントローラはこのソース情報を利用する。
この再順序付けポリシーにおいて、もしバンクキュー130内の“古い”リクエストが使用中のバンクへのものであるなら、(他のメモリタイミングおよび使用ルールに従う限り)空いているバンクへのリクエストはその古いリクエストに先行するように選択されても良い。この再順序付けは、他では用いられないであろうバス時間を生産的に使用する。
加えて、リクエストキュー110からの入力メモリリクエストは、新規のメモリリクエストが他のペンディングリクエストの一つと同一のページへのものであるかを決定するために、適切なバンクキュー中で他のメモリリクエストと比較されても良い。もしそうであれば、同一のページへのそのペンディングリクエストの後に、新しいメモリリクエストが置かれても良い。この場合、同一ページへの連続的(バックトゥバック)アクセスが可能となるように、クローズドバンクポリシーが無視されても良い。
再順序付けではもちろん、あるリクエストが一度のみならず延期、または移動されることがある。つまり、キュー内のリクエストの経過時間を示し、“古い” リクエストをより高い優先度を有し、時宜を得た仕方で実行されるように変更するために、順序付けユニット140は、タイミングユニットまたは類似の機能を含んでいても良い。
データの向きを読み出しサイクルおよび書き込みサイクルの間で反転させるときは、データバスを反転するために複数のメモリクロックを要しても良い。もし(DRAMに対する双方向DDR転送および8バースト(burst-of-8)のデータリクエストを仮定し)反転時間が2クロック、各データ転送に4クロックを要すると、もしリクエストが読み出しおよび書き込みを交替するならば、ピークメモリバンド幅の33パーセントが失われ得る。よって、もしメモリ読み出しが他のメモリ読み出しと一緒にグループ化され、メモリ書き込みが他のメモリ書き込みと一緒にグループ化されるならば、バス反転時間による非効率性は減少され得る。
一般に、読み出しおよび書き込み型メモリアクセスリクエストは共に、再順序付けされ得る。しかしながら、メモリコントローラ100は、もし再順序付けされたシーケンスが、先に受け取られたリクエストといかなるアドレス指定も競合しない、またはさもなければバンクキュー130中の他のメモリアクセスリクエストにより関連するメモリロケーションに記憶されたもしくは記憶されるデータと干渉しない範囲で、もし必要ならば書き込みリクエストだけが再順序付けされるというポリシーを実装しても良い。また、同一プログラムアドレスの参照は、プログラムリクエスト順序を保たれなければならない。このリクエスト順序は、一般に、もし異なるプログラムエンティティの間であればソフトウェアによって維持されるが、もし単一のリクエストソース(例えば、コアまたはスレッド)によってなされるなら、メモリコントローラ100によって維持されるであろう。
別の読み出し対書き込みポリシーとして、読み出しグループに書き込みグループより高い優先度(プライオリティ)を与えることは有用であり得る。別の言葉では、何か(例えば、キューの満杯またはアドレスコンフリクト)が書き込みへのスイッチングを強要するまで、あらゆる読み出しにはプライオリティが付与されても良い。この読み出し優先ポリシーは、リクエスタ230から見たときに、読み出しレイテンシー(待ち時間)を減少し得るが、それは読み出しリクエストが、キューの中では前方にあるペンディング書き込みからデータを獲得することを保証するために、読み出しリクエストは、同一アドレスへの書き込みリクエストの前方には再順序付けされていないことを確認(ベリファイ)するロジックを含むという負担のもとにである。しかしながら、実施形態によっては、もし読み出しがペンディング書き込みを有するアドレスに対して実行されたら、メモリコントローラ100は、適切なキューから直接的に書き込みデータを戻し、メモリは実際には読み出されないようにしても構わない。
プロセッサ、または他のリクエスタ230は、ときとして個々のバイトを書き込む、および読み出し・変更・書き込み動作を行う必要がある。個々の小さなデータ量はそれほど頻繁には書き込まれないように見えるが、それらが共通のプログラム上で動作するときは、コアおよびスレッドの数が増加するにつれ、それらの動作は増加するだろう。複数のスレッドが通信するための最善の方法の一つは、メモリシステムの部品として記憶され、管理されるフラグおよびセマフォなどの“アトミック”メモリ動作を用いることである。これらのフラグおよびセマフォは一般に、動作を実行するためにメモリバイトレベルまたはワードレベル動作を要求する。
読み出し・変更・書き込み(RMW)は、メモリアドレスから値を読み出し、読み出された値を変更し、そして次に変更された値をメモリアドレスに戻して書き込むアトミックシーケンスである。マルチスレッドプログラミングへの従来のアプローチは、共有するリソースへのアクセスの同期のためにRMWロックを用いることである。セマフォのような同期プリミティブは、コードのあるセクションが並列に実行されることによってコードのセクション間で共有され得るメモリデータ構造をそこないそうであるなら、コードのあるセクションが並列に実行されないことを保障するためにマルチスレッドプログラムによって使用され得る。もし、一つのスレッドが別のスレッドによって既に保持されているロックを取得しようと試みるならば、スレッドはロックが外れるまでブロックする。
非ブロッキングアルゴリズムは、例えば、比較スワップ(CAS)のようなアトミックな読み出し・変更・書き込み動作を用いても良い。比較スワップCPU命令は(またはx86アーキテクチャ中のCMPXCHG命令)は、メモリロケーションの内容を所定の値とアトミックに比較し、もしそれらが同一であればメモリロケーションの内容を所与の新しい値に変更する特別な命令である。CASはセマフォを有効的にマルチプロセッサシステム中に実装するために用いられ得る。
従来、バイト書き込みおよびセマフォに対するサポートは、プロセッサ中の実行ロジック中で、またはプロセッサのデータキャッシュ中のロジックを用いてなされてきた。しかしながら、システムによっては、これら小さなオペランドの書き込みを最終メモリ宛先(即ち、メモリサブシステム300)向けの個別データ項目としてサポートし、全キャッシュラインの一部としてはサポートしないことが有益であり得る。
加えて、多くのプロセッサは、32ビットおよび64ビットデータ項目を用い、それらのタイプの項目は非常に頻繁に書き込まれ得る。しかし、非限定的な例として、典型的なDRAMプロトコルおよびインターフェイスは、32バイトバーストを移動することがある。もし、書き込みのためには4バイトのみが必要ならば、個々のバイト書き込み選択信号が必要であろう。しかしながら、メモリシステムによっては、バイトイネーブルは、利用可能ではないことがある。これらのシステムでは、例えば、4バイトデータ項目を含む32バイトバーストを読み出す必要があり得る。そして、4データバイトは、32バイト分のデータ中に挿入され、次に変更された32バイト量がメモリに戻され、再書き込みされる。この例では、もしバイトイネーブル機能がインターフェイス中にあるならば、4バイトを送ることができたときに、64バイトのデータは、読み出しおよび書き込みの両方がなされている。この不必要なデータの移動は、サステインドなメモリ性能であるが、浪費されるメモリ性能でもある。一般に、メモリアクセスの幅は、本明細書中では“データ幅”と参照される。非限定的な例として、このデータ幅はメモリバス280の物理的ビット幅、またはメモリバーストサイクルの幅であってもよい。加えて、本明細書中で特に断らなければ、RMW動作は、一般に特定のRMW動作と同時にデータ幅の一部への書き込みとして参照される。
よって、RMW動作に対して、コントローラ100はこれらの部分的書き込み動作を管理するように構成されていてもよい。加えて、RMWユニット144中のデータバッファはこれらRMW動作に対する予約領域を保持し、読み出されるデータはメモリコントローラ100中に存在し、メモリバス280上で読み出し動作を実行する必要をなくすことを可能とするように構成されていてもよい。
図3、4、および5は、本開示の実施形態に従う再順序付けされたメモリアクセスリクエストおよびRMW動作を管理するためのプロセスを示す簡単化された流れ図である。図3、4、および5を記述するときに、図1および2中の様々な実施形態もまた参照されよう。
図3は、メモリアクセスリクエストを再順序付けするためのプロセス300を示す簡単化された流れ図である。動作ブロック302において、新しいリクエストを受け取る。バンクアドレスに基づいて、リクエストは動作ブロック304において、適切なバンクキューに移される。判定ブロック306は、ちょうど今受け取ったリクエストは、同一のバンクキューにペンディング(保留、先送り)しているあらゆる以前のリクエストに時間的に近く、且つ同一のバンクキュー中にペンディングしているあらゆる以前のリクエストと同一のバンクおよびページに対するものであるかどうかを判定する。時間的な近さは、本明細書中で用いられているように、リクエストがリクエストキュー110において受け取られた時刻がどれだけ離れているかを定義する。リクエストは時間スタンプを用いてタグ付けされても良いし、リクエストに付与されたキュー属性中に経過時間を有しても良い。この方法では、時間的に非常に離れているメモリリクエストは再順序付けされなくても良いし、または “古い”メモリリクエストの前方には新しいリクエストが置かれないように、“古い”メモリリクエストは高い優先度が付与されても良い。時間が離れている長さまたはキューの中の経過時間は、メモリコントローラ100の構成パラメータとして設定されても良い。
もし、リクエストが別のペンディングリクエストと同一のバンクまたはページに対するものならば、動作ブロック308は、新しいメモリサイクルを同一のページに対する他のペンディングリクエストの直後に置くために、そのバンクキューに対するメモリサイクル順序を再定義する。もちろん、以前に述べたように、新しい読み出しサイクルは、同一のアドレスに対する読み出しまたは書き込みサイクルの前に置かれるべきではない。加えて、経過時間または読み出しサイクルに対する優先権に基づいて十分に高い優先度を有するペンディングリクエストがバンクキュー中に存在し得て、新しいリクエストは高優先度のリクエストの前には置かれることはない。
動作ブロック310は、新しいリクエストがその直後に置かれたペンディングリクエストは、オープンページリクエストとして印が付けられることを示す。別の言葉では、印が付けられたリクエストに対して、クローズドバンクポリシーは無効とされる(オーバーライドされる)。よって、オープンページとして印が付けられたリクエストがメモリバス280上で実行された後、引き続きのメモリリクエストは同一のページに対するものであることが分かっており、2つのリクエストは、プリチャージおよびそれら2つの間で列アドレスストローブを実行することなしに、連続的(バックトゥバック)に実行され得る。
再順序付けプロセス300は、読み出し対書き込みについて再順序付けすることを含んでいても良い。もし、再順序付けプロセスが読み出し対書き込みについて再順序付けすることを含まなければ、プロセスは新しいリクエストを待つために、経路311を介して動作ブロック302に戻る。もし、再順序付けプロセスが読み出し対書き込みについて再順序付けすることを含むならば、プロセスは経路312を介して判定ブロック313に継続される。判定ブロック313は、新しいリクエストが、タイプは読み出しリクエストまたは書き込みリクエストであっても構わないが、同一のタイプのペンディングリクエストに時間的に近いかを判定する。もしリクエストが同一のタイプではなければ、プロセスは新しいメモリリクエストを待つために、動作ブロック203に戻る。
もし、リクエストが、時間的に近接するメモリリクエストと同一タイプならば、動作ブロック314は新しいメモリサイクルを、同一タイプのペンディングメモリサイクルの直後に置くために、そのバンクキューに対するメモリサイクル順序を再定義する。この方法では、再順序化プロセス300は、要求されうるデータバス反転サイクルの数を減らすために、読み出しおよび書き込みサイクルを一緒にグループ化することに用いられても良い。加えて、読み出しは、読み出しレイテンシーを減らすために、書き込みに対して優先度が付与されても良い。再び、あるタイプのサイクルは、同一のアドレスに対する異なるタイプの前に置かれるべきではない。加えて、経過時間または読み出しサイクルに対する優先権に基づいて十分に高い優先度を有する、バンクキュー中のペンディングリクエストが存在し得て、新しいリクエストは高い優先度のリクエストの前には置かれることはない。リクエストの順序を再定義した後、プロセスは、新しいメモリリクエストを待つために、動作ブロック302に戻る。また、各バンクに対して読み出しおよび書き込みリクエストを別々のキューに分離することも可能である。
図4は、メモリバス280上で再順序付けされたメモリリクエストを実行するためのメモリアクセスプロセス400を示す簡単化された流れ図である。動作ブロック401において、次のメモリリクエストを適切なバンクキューから検索する。その適切なバンクキューは、ラウンドロビン法またはバンクキューに基づく優先順位付けされた選択を用いて決定され得る。代替として、バンクキューの選択は、先に議論されているように、使用中のメモリバンクに対応するバンクキューからリクエストは選択しないポリシーを用いても良い。
判定ブロック402は、次のメモリリクエストが読み出しかまたは書き込みかを検証する。もしプロセスが現在、書き込みシーケンスにあるなら、動作は、以下に説明するように、判定ブロック454に継続される。もしプロセスが現在、読み出しシーケンスにあるなら、動作は判定ブロック404に継続され、判定ブロック404はリクエストが読み出しであるか、およびリクエストされたバンクは使用中ではないか(例えば、作動中であるまたはプリチャージ中である)を判定する。もしそうでなければ、動作ブロック406は、次のバンク/キューを探すために、現在の読み出しリクエストおよびサイクルに対するバンク番号をアップデートする。
判定ブロック408は、現在の読み出しリクエストに対するバンクがオープンであるかを確認するために検証する。もしバンクがオープンでなければ、動作ブロック410はバンクをアクティブにする。判定ブロック412は制御ロジックが、現在の読み出しリクエストの終了時においてバンクがオープンしたままにしておくように設定されているかどうかを決定するために検証する。もしバンクがオープンのままであるならば、動作ブロック414はメモリバス280(図2)上で読み出しサイクルを実行する。もしバンクがクローズされるようであれば、動作ブロック416は、メモリバス280(図2)上で読み出しサイクルを実行しつつ、同一の命令中で読み出し動作の後にプリチャージが必要であることを示す。
読み出しサイクルが完了するとともに、実施形態によっては、待ち判定ブロック418を含んでも良く、待ち判定ブロック418は戻された読み出しデータを記憶するための領域が読み出しバッファ154中に出来るまで待つ。判定ブロック420は、プロセスは読み出しサイクルの実行を終えたかどうかを確認するために検証する。メモリコントローラ100は、ある数の連続的(バックトゥバック)読み出しを実行するように構成されていても良い。これは多くの要因によって決定され得る。非限定的な例として、その要因は、キュー中の読み出し待ちの数、書き込み待ちの数に対する実行すべき読み出し待ちの数、実行する書き込み待ちの優先度、実行する読み出し待ちの優先度、およびこれらの組み合わせを含み得る。
もし読み出しサイクルが継続するならば、動作ブロック406は、次の読み出しサイクルに必要であれば、バンク番号をアップデートする。もし読み出しサイクルが継続しないならば、動作ブロック480は現在のモードを、読み出し動作を実行することから書き込み動作を実行することに切り替え、動作は動作ブロック401に継続する。
判定ブロック402からの出口に戻って、もしプロセスが現在、書き込みシーケンスにあるなら、動作は判定ブロック454に継続し、判定ブロック454はリクエストが書き込みであるか、およびリクエストされたバンクは使用中ではないかを決定する。もしそうでなければ、動作ブロック456は、次のバンク/キューを探すために、現在の書き込みリクエストおよびサイクルに対するバンク番号をアップデートする。
判定ブロック458は、現在の書き込みリクエストに対するバンクがオープンであるかを確認するために検証する。もしバンクがオープンでなければ、動作ブロック460はバンクアクティブにする。判定ブロック462は制御ロジックが、現在の書き込みリクエストの終了時においてバンクをオープンのままにしておくように設定されているかどうかを決定するために検証する。もしバンクがオープンのままであるならば、動作ブロック464はメモリバス280(図2)上で書き込みサイクルを実行する。もしバンクがクローズされるようであれば、動作ブロック466は、メモリバス280(図2)上で書き込みサイクルを実行しつつ、同一の命令で書き込み動作の後にプリチャージが必要であることを示す。
判定ブロック470は、プロセスは書き込みサイクルの実行を終えたかどうかを確認するために検証する。メモリコントローラ100は、ある数の連続的(バックトゥバック)書き込みを実行するように構成されていても良い。これは多くの要因によって決定され得る。非限定的な例として、その要因は、キュー中の書き込み待ちの数、書き込み待ちの数に対する実行する読み出し待ちの数、実行する書き込み待ちの優先度、実行する読み出し待ちの優先度、およびこれらの組み合わせを含み得る。
もし書き込みサイクルが継続するならば、動作ブロック456は、次の読み出しサイクルに必要であれば、バンク番号をアップデートする。もし読み出しサイクルが継続しないならば、動作ブロック480は現在のモードを、書き込み動作の実行から読み出し動作の実行に切り替え、動作は動作ブロック401に継続する。
もしメモリサイクルはオープンページとして印が付けられていないならば、クローズドバンクポリシーに従い、動作ブロック410は今まさにアクセスしたページをプリチャージし、プロセスは、適切なバンクキューから次のメモリサイクルを検索するために動作ブロック402に戻る。
図5は、図3の再順序付けプロセスと幾らかは並列に走り得る、読み出し・変更・書き込み動作および部分的データ幅書き込みに対するメモリアクセスリクエストを行うためのプロセス500を示す簡単化された流れ図である。動作ブロック502において、新しいリクエストを、リクエストキュー110(図2)から受け取る。バンクアドレスに基づいて、リクエストは、動作ブロック504において適切なバンクキューに移される。判定ブロック506は、今まさに受け取ったリクエストが、リクエストバス240からの特定の信号または命令によって識別されるようなRMWリクエストであるかを決定する。もしリクエストがRMWリクエストではないならば、制御が次のリクエストのために動作ブロック502に戻る。実際には、RMWプロセス500および再順序付けプロセス300は、幾らかは並列に走り、非RMWリクエストに対しては図3の再順序付けプロセス300は判定ブロック306に継続し得る。
もしリクエストがRMWリクエストであれば、判定ブロック508は、アドレス指定されたRMW位置に対する全データワードが既にRMWユニット144(図2)中のデータバッファ中に配置されているかを決定する。もし全データワードがそのデータバッファになければ、動作ブロック510はメモリバス280上で読み出し動作を実行し、RMWユニット144中のデータバッファ中にデータワードを記憶する。
従来のRMW動作、および非部分的データ書き込み動作に対しては、動作ブロック512は、もし必要ならば、データワードのRMW部分をリクエスト230に戻す。一般に、戻されるRMW部分は、書き込みが起こる前の読み出し部分である。しかしながら、メモリコントローラ100は、書き込みが起こった後のRMW部分を戻すように構成されていても良い。加えて、追加の情報がRMW部分と共に戻されても良い。非限定的な例として、比較スワップ動作の比較結果が戻されても良い。
動作ブロック514は、データワードのRMW部分をRMWユニット144中のRMWデータバッファに書き込む。もし望むのであれば、動作ブロック516は、書き込まれたRMW部分を含む全データワードを、メモリバス280を介してメモリに戻して書き込む。
判定ブロック518は、RMWデータワードがデータバッファ150中で保存(リテンション)のための印が付けられているか(マークされている)を確認するために検証する。先に述べたように、RMWデータバッファは複数のRMWデータワードを保持するように構成されても良い。この方法では、RMWリクエストに対するメモリバス280上のメモリサイクルの発生を防止することができる。もし、データワードが保存(リテンション)のための印が付けられているならば、プロセスは次のリクエストを待つために動作ブロック502に戻る。もしデータワードが保存のための印が付けられていないならば、動作ブロック520は、追加の読み出しまたは書き込みデータのための領域を確保できるようにするためにデータバッファ150からデータワードを消す(クリアする)。
RMWユニット144はまた、メモリコントローラに到達する新しいRMWリクエストのために領域の確保が必要となるまで、常にRMW値を保持し、各新しいリクエストを有するメモリへの書き込みを避け得るように構成されても良い。この保存(リテンション)がなされるならば、再順序付けロジックは、必要に応じて、メモリへの書き込み動作を生成するはずである。従って、保存により、プロセス間(例えば、異なるコア、スレッド、およびそれらの組み合わせ)の通信およびアップデートで使用されるRMW値に対して頻繁に起こり得る、RMW値のアップデートのたびに、書き込みを延期することができるようになる。
(結論)
本発明の実施形態は、メモリアクセス動作を制御するためのシステム、メモリコントローラ、および方法を含み得る。プロセッシングシステムは、複数のメモリデバイスに対するメモリリクエストを実行する1つ以上のリクエスタを含み得る。メモリデバイスの各々は、少なくとも一つのメモリバンクを含む。メモリコントローラは、リクエストキュー、バンクデコーダ、および複数のバンクキューを含む。リクエストキューは、リクエスタからメモリリクエストを受け取り、バンクデコーダは、メモリリクエストに添えられているメモリアドレスに基づいて宛先バンクを決定する。リクエストは次に、適切なバンクキュー中に置かれる。
順序付けユニットは、現在のメモリリクエストは受け取られた順序に対して再順序付けされ得るかを決定し、再順序付けの決定に基づいて新しいメモリサイクル順序を生成する。再順序付けは、所与の任意のバンクキュー内に同一のメモリページへの複数のリクエストが存在するかどうかに基づいても良い。再順序付けはまた、例えば、読み出しリクエストおよび書き込みリクエストのような、同一のタイプの複数のリクエストが存在するかどうかに基づいても良い。メモリインターフェイスは、順序付けユニットによって定義されたメモリサイクル順序で各メモリリクエストを実行する。メモリサイクル順序は、同一のタイプのリクエスト、同一のページに対するリクエスト、またはそれらの組み合わせに基づいても良い。順序付けユニットは、適当なリクエスタに対する読み出しデータの戻りを、元々受け取った順序で制御をする。
データバッファは、メモリ読み出しサイクルから戻った読み出しデータを、リクエストされたデータがリクエスタに戻るまで保持する。データバッファはまた、リクエスタからの読み出し・変更・書き込みリクエストで用いられ得るメモリワードを保持し得る。
順序付けユニットはまた、リクエストされたメモリワードの一部分に対する読み出し・変更・書き込み動作を検知し、制御しても良い。もしリクエストされたメモリワードが、データバッファ中に存在しなければ、順序付けユニットは、リクエストされたメモリワードの読み出しを実行し、それをデータバッファ中に記憶するように、メモリインターフェイスに指示をする。順序付けユニットはまた、変更される前に、少なくとも1つのリクエスタにリクエストされたメモリワードの一部分を戻す制御をし、データバッファ中のリクエストされたメモリワードの一部分を、RMWリクエストからのデータを用いて変更する。
特定の実施形態を記述してきたが、これらの記述された実施形態は、非限定的なものである。むしろ、本発明の範囲は、添付されたクレームおよびそれらの法的均等物に及ぶ。









Claims (21)

  1. 複数のメモリリクエストの各々のメモリリクエストに対するメモリの宛先バンクを、前記メモリリクエストの各々に対するメモリアドレスに応答して受け取られた順序で決定するためのバンクデコーダ、
    複数のバンクキューであって、各バンクキューはそのバンクキューに関連するメモリバンクに対するペンディングメモリリクエストを記憶し、前記受け取られた順序を追跡する複数のバンクキュー、
    同一のバンクキュー中の、および同一のメモリページに対する少なくとも2つのメモリリクエストの存在に応答して、前記受け取られた順序とは異なるメモリサイクル順序を決定するための順序付けユニット、および
    前記メモリサイクル順序で各メモリリクエストを実行し、複数の前記メモリバンク内の個々の前記メモリページを、そのメモリページに対するメモリアクセスの完了時に、もし前記メモリアクセスが前記受け取られた順序で実行されるならば、クローズし、もし連続的なメモリアクセスが前記メモリサイクル順序で実行されるならば、前記連続的なメモリアクセス間に、前記同一のメモリページをオープンに保つためのメモリインターフェイス、
    を含むことを特徴とするメモリコントローラ。
  2. さらに、前記メモリのデータ幅に対応するデータ幅で少なくとも1つのリクエストされたメモリワードを保持するためのデータバッファと、
    読み出し・変更・書き込み(RMW)ユニットであって、
    前記リクエストされたメモリワードの一部分に対するRMWリクエストを検知すること、
    もし前記リクエストされたメモリワードが前記データバッファに存在しなければ、それを前記メモリから読み出すこと、およびそれを前記データバッファに記憶すること、
    前記データバッファ中の前記リクエストされたメモリワードの前記一部分を前記RMWリクエストからのデータを用いて変更すること、
    のためのRMWユニットを含むことを特徴とする請求項1のメモリコントローラ。
  3. 前記RMWユニットはさらに、前記リクエストされたメモリワードを将来のRMWリクエストのために前記データバッファ中に保持するように構成されている、請求項2のメモリコントローラ。
  4. 前記順序付けユニットはさらに、同一タイプの少なくとも2つの追加のメモリリクエストが再順序付けして連続して生じるように構成され、同一タイプが読み出しリクエストおよび書き込みリクエストからなる群から選択される、請求項1のコントローラ。
  5. 前記複数のバンクキューの各バンクキューは、読み出しキューおよび書き込みキューを含む、請求項1のメモリコントローラ。
  6. さらに、
    前記メモリからの、リクエストされたデータを、前記リクエストされたデータが前記少なくとも1つのリクエスタに戻されるまで保持するためのデータバッファを含むことを特徴とする、請求項1のメモリコントローラ。
  7. さらに、
    前記メモリリクエストを行うための少なくとも1つのリクエスタ、
    を含み、
    前記メモリは、複数のメモリデバイスを含み、前記複数のメモリデバイスの各々は、少なくとも1つのメモリバンクを含むことを特徴とする請求項1乃至6の一つのメモリコントローラ。
  8. メモリアクセス動作を制御する方法であって、
    複数のメモリバンクに宛てられた複数のメモリリクエストを受け取ったシーケンスで受け取ること、
    前記複数のメモリバンクの宛先バンクを、前記複数のメモリリクエストの各々に対して決定すること、
    時間的に近いが、連続的ではない、前記受け取られたシーケンスで実行されていないメモリリクエストの中の同一タイプの少なくとも2つの実行されていないメモリリクエストを、前記複数のメモリリクエストの1つのリクエストを前記複数のメモリリクエストの少なくとも一の別のリクエストと比較することによって、検知することであって、前記同一タイプは読み出しリクエストおよび書き込みリクエストからなる群から選択されるものであり、
    前記検知結果に基づいて前記リクエストのシーケンスを再順序付けすること、
    前記同一タイプの前記少なくとも2つのメモリリクエストを、連続的に実行すること、
    前記再順序付けされた順序で前記少なくとも2つの追加のメモリリクエストを実行すること、
    前記複数のメモリバンク内の各メモリページを、そのメモリページに対するメモリアクセスの完了時に、もし前記メモリアクセスが前記受け取られたシーケンスで実行されるならば、クローズすること、および
    前記メモリリクエストの前記再順序付けされたシーケンスで、連続的なメモリアクセス間に、前記同一のメモリページをオープンに保つこと、
    を含むことを特徴とする方法。
  9. さらに、
    メモリワードの一部分に対する読み出し・変更・書き込み動作を検知することであって、前記メモリワードは前記複数のメモリバンクのデータ幅に対応するデータ幅を含み、
    前記メモリワードがメモリコントローラ中に存在するかどうかを決定すること、
    前記メモリワードを、もしそれが前記メモリコントローラ中に存在しないならば、メモリから前記メモリコントローラに読み出すこと、
    前記メモリワードの前記一部分を、前記読み出し・変更・書き込み動作を開始したリクエスタに通信すること、
    前記読み出し・変更・書き込み動作からの前記メモリワードの前記一部分を用いて前記メモリコントローラ中の前記メモリワードを変更すること、
    を含むことを特徴とする請求項8の方法。
  10. 前記データ幅は、メモリバス幅およびメモリバーストサイクルデータ幅からなる群から選択される、請求項9の方法。
  11. さらに、
    時間的に近い、前記受け取られたシーケンスで実行されていないリクエストの中で、同一のメモリページ向けの少なくとも2つの追加のメモリリクエストを検知すること、および
    前記同一のメモリページ向けの少なくとも2つの追加のメモリリクエストを検知することの結果に基づいて、リクエストの前記シーケンスを再順序付けすること、
    を含むことを特徴とする請求項8の方法。
  12. さらに、
    ペンディングメモリリクエストの経過時間を監視すること、
    前記ペンディングメモリリクエストの優先度を、それが実行されるのを待つにつれて上昇させること、
    新しいメモリリクエストが、高い優先度を有する前記ペンディングメモリリクエストの前に生じるように再順序付けされることを避けること、
    を含むことを特徴とする請求項8の方法。
  13. さらに、
    前記複数の前記メモリバンク中の各メモリバンクの使用中状態を監視すること、および
    使用中状態を示していないメモリバンクに対する次のメモリリクエストを実行すること、
    を含むことを特徴とする請求項8の方法。
  14. さらに、
    前記書き込みリクエストに対して前記読み出しリクエストにより高い優先度を付与すること、および、前記読み出しリクエストおよびあらゆるペンディング書き込みリクエストの間でアドレスコンフリクトがないときに、前記読み出しリクエストを、前記書き込みリクエストに先立って実行すること、
    を含むことを特徴とする請求項8の方法。
  15. 少なくとも1つのリクエスタから受け取られた順序でメモリリクエストを受け取るためのリクエストキュー、
    メモリリクエストの各々に対するメモリアドレスに応答してリクエストキュー中の各メモリリクエストに対するメモリの宛先バンクを決定するためのバンクデコーダ、
    複数のバンクキューであって、前記複数のバンクキューに関連するメモリバンクに対するペンディングメモリリクエストを記憶し、前記受け取られた順序を追跡するための複数のバンクキュー、
    前記メモリのデータ幅に対応するデータ幅で少なくとも1つのデータワードを保持するためのデータバッファ、
    読み出し・変更・書き込み(RMW)ユニットであって、リクエストされたメモリワードの一部分に対するRMWリクエストを検知し、前記リクエストされたメモリワードが前記データバッファ中に存在するかどうかを決定するためのRMWユニット、および
    もし前記リクエストされたメモリワードが前記データバッファに存在しないならば、前記リクエストされたメモリワードを検索するために、前記複数のバンクキューの1つの中に記憶されている前記RMWリクエストに応答して、前記メモリへの読み出しリクエストを実行するためのメモリインターフェイス、
    時間的に近い実行されていないリクエストの中のメモリサイクル順序を、同一のバンクキュー中の、且つ同一のメモリページに対する少なくとも2つのメモリリクエストの存在に応答して決定するように構成された順序付けユニット、
    を含み、
    前記メモリインターフェイスはさらに、
    前記メモリサイクル順序で各メモリリクエストを実行し、
    各メモリページを、そのメモリページへのメモリアクセスの終了時に、もし前記メモリアクセスが前記受け取られたシーケンスで実行されたならば、クローズし、および
    前記再整理されたリクエストのシーケンスの間で、前記同一のメモリページをオープンにしておくように構成され、
    前記RMWユニットは、変更される前に前記リクエストされたメモリワードの前記一部分の前記少なくとも1つのリクエスタへの戻りを制御し、前記RMWリクエストからのデータを用いて前記データバッファ中の前記リクエストされたメモリワードの前記一部を変更することを特徴とするメモリコントローラ。
  16. 前記RMWユニットはさらに、将来のRMWリクエストのために前記データバッファ中に前記リクエストされたメモリワードを保持し、前記データバッファ中の前記メモリワードを変更した後に、前記メモリワードを前記メモリに書き込むように構成される、請求項15のメモリコントローラ。
  17. さらに、
    少なくとも2つの追加の前記同一タイプのメモリリクエストを再順序付けし、連続的に生じるように構成された順序付けユニットを含み、
    前記同一タイプは、読み出しリクエストおよび書き込みリクエストからなる群から選択され、
    前記メモリインターフェイスはさらに、前記追加のメモリサイクルによって変更された前記メモリサイクル順序で各メモリリクエストを実行するように構成される、請求項15のメモリコントローラ。
  18. メモリアクセス動作を制御するための方法であって、
    受け取られたシーケンスで複数のメモリリクエストを受け取ること、
    前記複数のメモリリクエストの各々に対する複数のメモリバンクの宛先バンクを決定すること、
    前記受け取られたシーケンスで時間的に近い実行されていないリクエストの中で同一メモリページへの前記複数のメモリリクエストの少なくとも2つのメモリリクエストを、前記複数のメモリリクエストの一つのリクエストを前記複数のメモリリクエストの少なくとも一の別のリクエストと比較することによって検知すること、
    検知結果にしたがって前記受け取られたシーケンスを再順序付けすること、
    前記再整理された順序で前記少なくとも2つのメモリリクエストを実行すること、
    各メモリページを、そのメモリページへのメモリアクセスの終了時に、もし前記メモリアクセスが前記受け取られた順序で実行されたならば、クローズすること、および
    前記再整理されたリクエストのシーケンスの間で前記同一のメモリページをオープンにしておくこと、
    を含むことを特徴とする方法。
  19. さらに、
    前記受け取られたシーケンスにおいて、時間的に近いが、連続的ではない、実行されていないリクエストの中に、少なくとも2つの追加の同一タイプの実行されていないリクエストを検知することであって、前記同一タイプは、読み出しリクエストおよび書き込みリクエストからなる群から選択されるという、検知すること、及び、
    前記リクエストのシーケンスを、少なくとも2つの追加の前記同一タイプの実行されていないリクエストを検知することの結果に基づいて再整理すること、
    を含むことを特徴とする請求項18の方法。
  20. さらに、
    メモリワードの一部分への読み出し・変更・書き込み動作を検知することであって、前記メモリワードは、前記複数のメモリバンクのデータ幅に対応するデータ幅を含むものであることと、
    メモリコントローラ中に前記メモリワードが存在するかどうかを決定すること、
    もし前記メモリワードが前記メモリコントローラに存在しないならば、メモリから前記メモリコントローラに前記メモリワードを読み出すこと、
    前記読み出し・変更・書き込み動作が開始されたリクエストに前記メモリワードの前記一部分を通信すること、および
    前記読み出し・変更・書き込み動作からの前記メモリワードの前記一部分を用いて、前記メモリコントローラ中の前記メモリワードを変更すること、
    を含むことを特徴とする請求項18の方法。
  21. 前記データ幅は、メモリバス幅およびメモリバーストサイクルデータ幅からなる群から選択される請求項18の方法。
JP2010534146A 2007-11-15 2008-11-12 メモリアクセスの順序を変更するシステム、装置、および方法 Active JP5272274B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/940,745 US7870351B2 (en) 2007-11-15 2007-11-15 System, apparatus, and method for modifying the order of memory accesses
US11/940,745 2007-11-15
PCT/US2008/083251 WO2009064793A1 (en) 2007-11-15 2008-11-12 System, apparatus, and method for modifying the order of memory accesses

Publications (2)

Publication Number Publication Date
JP2011505032A JP2011505032A (ja) 2011-02-17
JP5272274B2 true JP5272274B2 (ja) 2013-08-28

Family

ID=40639099

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010534146A Active JP5272274B2 (ja) 2007-11-15 2008-11-12 メモリアクセスの順序を変更するシステム、装置、および方法

Country Status (7)

Country Link
US (2) US7870351B2 (ja)
EP (1) EP2223217B1 (ja)
JP (1) JP5272274B2 (ja)
KR (1) KR101154708B1 (ja)
CN (1) CN101861571B (ja)
TW (2) TWI419158B (ja)
WO (1) WO2009064793A1 (ja)

Families Citing this family (105)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7870351B2 (en) * 2007-11-15 2011-01-11 Micron Technology, Inc. System, apparatus, and method for modifying the order of memory accesses
US8046559B2 (en) * 2008-03-27 2011-10-25 Intel Corporation Memory rank burst scheduling
US8605099B2 (en) 2008-03-31 2013-12-10 Intel Corporation Partition-free multi-socket memory system architecture
JP2009289307A (ja) * 2008-05-28 2009-12-10 Toshiba Corp 半導体記憶装置
US8516189B2 (en) * 2008-09-16 2013-08-20 Lsi Corporation Software technique for improving disk write performance on raid system where write sizes are not an integral multiple of number of data disks
US8442059B1 (en) 2008-09-30 2013-05-14 Gridiron Systems, Inc. Storage proxy with virtual ports configuration
US8838850B2 (en) * 2008-11-17 2014-09-16 Violin Memory, Inc. Cluster control protocol
US8417895B1 (en) 2008-09-30 2013-04-09 Violin Memory Inc. System for maintaining coherency during offline changes to storage media
US8160070B2 (en) * 2008-09-30 2012-04-17 Gridiron Systems, Inc. Fibre channel proxy
US8788758B1 (en) 2008-11-04 2014-07-22 Violin Memory Inc Least profitability used caching scheme
US8775741B1 (en) 2009-01-13 2014-07-08 Violin Memory Inc. Using temporal access patterns for determining prefetch suitability
US8214599B2 (en) * 2008-11-04 2012-07-03 Gridiron Systems, Inc. Storage device prefetch system using directed graph clusters
US8214608B2 (en) * 2008-11-04 2012-07-03 Gridiron Systems, Inc. Behavioral monitoring of storage access patterns
US8443150B1 (en) 2008-11-04 2013-05-14 Violin Memory Inc. Efficient reloading of data into cache resource
KR101014149B1 (ko) * 2008-11-13 2011-02-14 (주)인디링스 메모리 뱅크로의 접근을 제어하는 고체 상태 디스크를 위한컨트롤러
US8285961B2 (en) * 2008-11-13 2012-10-09 Grid Iron Systems, Inc. Dynamic performance virtualization for disk access
US8650362B2 (en) 2009-04-17 2014-02-11 Violin Memory Inc. System for increasing utilization of storage media
US8667366B1 (en) 2009-04-17 2014-03-04 Violin Memory, Inc. Efficient use of physical address space for data overflow and validation
US8713252B1 (en) 2009-05-06 2014-04-29 Violin Memory, Inc. Transactional consistency scheme
US9069676B2 (en) 2009-06-03 2015-06-30 Violin Memory, Inc. Mapping engine for a storage device
US8402198B1 (en) 2009-06-03 2013-03-19 Violin Memory, Inc. Mapping engine for a storage device
US8402246B1 (en) 2009-08-28 2013-03-19 Violin Memory, Inc. Alignment adjustment in a tiered storage system
US8560796B2 (en) * 2010-03-29 2013-10-15 Freescale Semiconductor, Inc. Scheduling memory access requests using predicted memory timing and state information
US8572322B2 (en) * 2010-03-29 2013-10-29 Freescale Semiconductor, Inc. Asynchronously scheduling memory access requests
US9965387B1 (en) * 2010-07-09 2018-05-08 Cypress Semiconductor Corporation Memory devices having embedded hardware acceleration and corresponding methods
US8959288B1 (en) 2010-07-29 2015-02-17 Violin Memory, Inc. Identifying invalid cache data
US8832384B1 (en) 2010-07-29 2014-09-09 Violin Memory, Inc. Reassembling abstracted memory accesses for prefetching
JP5625737B2 (ja) * 2010-10-22 2014-11-19 富士通株式会社 転送装置、転送方法および転送プログラム
US8972689B1 (en) 2011-02-02 2015-03-03 Violin Memory, Inc. Apparatus, method and system for using real-time performance feedback for modeling and improving access to solid state media
US8635416B1 (en) 2011-03-02 2014-01-21 Violin Memory Inc. Apparatus, method and system for using shadow drives for alternative drive commands
JP2012234363A (ja) 2011-04-28 2012-11-29 Toshiba Corp メモリシステム
US8543758B2 (en) 2011-05-31 2013-09-24 Micron Technology, Inc. Apparatus including memory channel control circuit and related methods for relaying commands to logical units
US10061618B2 (en) * 2011-06-16 2018-08-28 Imagination Technologies Limited Scheduling heterogenous computation on multithreaded processors
US20130019052A1 (en) * 2011-07-14 2013-01-17 Vinay Ashok Somanache Effective utilization of flash interface
US8806112B2 (en) 2011-07-14 2014-08-12 Lsi Corporation Meta data handling within a flash media controller
US9632954B2 (en) 2011-11-07 2017-04-25 International Business Machines Corporation Memory queue handling techniques for reducing impact of high-latency memory operations
US10558592B2 (en) 2011-11-28 2020-02-11 Pure Storage, Inc. Priority level adaptation in a dispersed storage network
US10318445B2 (en) * 2011-11-28 2019-06-11 International Business Machines Corporation Priority level adaptation in a dispersed storage network
US11474958B1 (en) 2011-11-28 2022-10-18 Pure Storage, Inc. Generating and queuing system messages with priorities in a storage network
KR101292309B1 (ko) * 2011-12-27 2013-07-31 숭실대학교산학협력단 반도체칩 및 메모리 제어방법, 그리고 그 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체
US8909874B2 (en) 2012-02-13 2014-12-09 International Business Machines Corporation Memory reorder queue biasing preceding high latency operations
JP6004463B2 (ja) * 2012-03-01 2016-10-05 Necプラットフォームズ株式会社 記憶装置及びその制御方法
WO2013154549A1 (en) * 2012-04-11 2013-10-17 Hewlett-Packard Development Company, L.P. Prioritized conflict handling in a system
JP2014013506A (ja) * 2012-07-04 2014-01-23 Canon Inc 情報処理装置、制御方法、及びプログラム
US9569393B2 (en) 2012-08-10 2017-02-14 Rambus Inc. Memory module threading with staggered data transfers
KR101989860B1 (ko) 2012-12-21 2019-06-17 에스케이하이닉스 주식회사 메모리 컨트롤러 및 이를 포함하는 메모리 시스템
TWI489290B (zh) * 2013-03-29 2015-06-21 Winbond Electronics Corp 快閃記憶體裝置與資料傳輸方法
US10318444B2 (en) * 2013-04-11 2019-06-11 The Regents Of The University Of California Collective memory transfer devices and methods for multiple-core processors
KR20140131781A (ko) * 2013-05-06 2014-11-14 삼성전자주식회사 메모리 제어 장치 및 방법
CN103413569B (zh) * 2013-07-22 2016-03-09 华为技术有限公司 一读且一写静态随机存储器
US9304709B2 (en) 2013-09-06 2016-04-05 Western Digital Technologies, Inc. High performance system providing selective merging of dataframe segments in hardware
CN103532875B (zh) * 2013-10-12 2017-11-03 丁贤根 一种用于pcie应用层接口的重排序方法
US9396109B2 (en) * 2013-12-27 2016-07-19 Qualcomm Incorporated Method and apparatus for DRAM spatial coalescing within a single channel
WO2015183834A1 (en) 2014-05-27 2015-12-03 Rambus Inc. Memory module with reduced read/write turnaround overhead
US9823864B2 (en) * 2014-06-02 2017-11-21 Micron Technology, Inc. Systems and methods for throttling packet transmission in a scalable memory system protocol
US9875185B2 (en) * 2014-07-09 2018-01-23 Intel Corporation Memory sequencing with coherent and non-coherent sub-systems
TWI553483B (zh) * 2014-10-13 2016-10-11 瑞昱半導體股份有限公司 處理器及存取記憶體的方法
US9558796B2 (en) * 2014-10-28 2017-01-31 Altera Corporation Systems and methods for maintaining memory access coherency in embedded memory blocks
KR102359404B1 (ko) * 2014-11-19 2022-02-15 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
GB2533808B (en) * 2014-12-31 2021-08-11 Advanced Risc Mach Ltd An apparatus and method for issuing access requests to a memory controller
CN105988951B (zh) * 2015-02-12 2019-10-15 瑞昱半导体股份有限公司 存储器控制器及相关的控制方法
KR20170060203A (ko) 2015-11-23 2017-06-01 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
JP6676438B2 (ja) * 2016-03-30 2020-04-08 日本碍子株式会社 還元剤噴射装置、排ガス処理方法、及び排ガス処理装置
US10067706B2 (en) * 2016-03-31 2018-09-04 Qualcomm Incorporated Providing memory bandwidth compression using compression indicator (CI) hint directories in a central processing unit (CPU)-based system
KR102615593B1 (ko) 2016-05-04 2023-12-21 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10152237B2 (en) 2016-05-05 2018-12-11 Micron Technology, Inc. Non-deterministic memory protocol
WO2017196142A2 (en) * 2016-05-12 2017-11-16 Lg Electronics Inc. System and method for optimizing dram bus switching using llc
KR102643467B1 (ko) 2016-05-31 2024-03-06 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10534540B2 (en) 2016-06-06 2020-01-14 Micron Technology, Inc. Memory protocol
GB2551351B (en) * 2016-06-14 2019-05-08 Imagination Tech Ltd Executing memory requests out of order
KR102530262B1 (ko) 2016-07-21 2023-05-11 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
KR20180029124A (ko) 2016-09-09 2018-03-20 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10705972B2 (en) * 2016-09-13 2020-07-07 Advanced Micro Devices, Inc. Dynamic adaptation of memory page management policy
FR3057081B1 (fr) * 2016-10-05 2019-11-08 Airbus Operations Processeur comprenant une pluralite de coeurs de calcul
KR20180063419A (ko) * 2016-12-01 2018-06-12 삼성전자주식회사 호스트와 양방향 통신을 수행하도록 구성된 스토리지 장치 및 그것의 동작 방법
US10241925B2 (en) 2017-02-15 2019-03-26 Ati Technologies Ulc Selecting a default page size in a variable page size TLB
US10282309B2 (en) 2017-02-24 2019-05-07 Advanced Micro Devices, Inc. Per-page control of physical address space distribution among memory modules
US10082975B1 (en) * 2017-03-02 2018-09-25 Micron Technology, Inc. Obfuscation-enhanced memory encryption
US10635613B2 (en) 2017-04-11 2020-04-28 Micron Technology, Inc. Transaction identification
US10365824B2 (en) 2017-04-24 2019-07-30 Advanced Micro Devices, Inc. Silent active page migration faults
US10339068B2 (en) 2017-04-24 2019-07-02 Advanced Micro Devices, Inc. Fully virtualized TLBs
US10620879B2 (en) * 2017-05-17 2020-04-14 Macronix International Co., Ltd. Write-while-read access method for a memory device
US10310985B2 (en) 2017-06-26 2019-06-04 Ati Technologies Ulc Systems and methods for accessing and managing a computing system memory
US10318344B2 (en) 2017-07-13 2019-06-11 Advanced Micro Devices, Inc. Predicting page migration granularity for heterogeneous memory systems
KR20190070092A (ko) * 2017-12-12 2019-06-20 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
US11526278B2 (en) 2017-12-21 2022-12-13 Advanced Micro Devices, Inc. Adaptive page close prediction
US10540316B2 (en) * 2017-12-28 2020-01-21 Advanced Micro Devices, Inc. Cancel and replay protocol scheme to improve ordered bandwidth
CN108388526B (zh) * 2018-01-19 2021-01-05 深圳市金玺智控技术有限公司 一种读取控制器数据的方法和系统
KR102407128B1 (ko) * 2018-01-29 2022-06-10 마이크론 테크놀로지, 인크. 메모리 컨트롤러
US11144240B2 (en) * 2018-08-24 2021-10-12 Micron Technology, Inc. Memory sub-system for increasing bandwidth for command scheduling
US10834352B2 (en) * 2019-01-14 2020-11-10 Omnivision Technologies, Inc. Configurable interface alignment buffer between DRAM and logic unit for multiple-wafer image sensors
WO2020157594A1 (en) 2019-01-31 2020-08-06 International Business Machines Corporation Handling an input/output store instruction
TWI773959B (zh) 2019-01-31 2022-08-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
SG11202104428PA (en) 2019-01-31 2021-05-28 Ibm Handling an input/output store instruction
TWI767175B (zh) * 2019-01-31 2022-06-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
US10891084B2 (en) * 2019-03-14 2021-01-12 Arm Limited Apparatus and method for providing data to a master device
KR20210063724A (ko) * 2019-11-25 2021-06-02 에스케이하이닉스 주식회사 메모리 시스템
CN111459414B (zh) * 2020-04-10 2023-06-02 上海兆芯集成电路有限公司 存储器调度方法及存储器控制器
CN113918216A (zh) * 2020-07-10 2022-01-11 富泰华工业(深圳)有限公司 数据读/写处理方法、装置及计算机可读存储介质
KR20220104511A (ko) 2021-01-18 2022-07-26 에스케이하이닉스 주식회사 컨트롤러 및 이를 포함하는 메모리 시스템
US11960744B2 (en) * 2021-02-01 2024-04-16 Micron Technology, Inc. Register operation in memory devices
US11669274B2 (en) * 2021-03-31 2023-06-06 Advanced Micro Devices, Inc. Write bank group mask during arbitration
US11687281B2 (en) 2021-03-31 2023-06-27 Advanced Micro Devices, Inc. DRAM command streak efficiency management
US20240020058A1 (en) * 2022-07-14 2024-01-18 Xilinx, Inc. Memory controller with a preprocessor
US20240036736A1 (en) * 2022-07-29 2024-02-01 Texas Instruments Incorporated Memory controller with command reordering

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0823843B2 (ja) * 1991-10-11 1996-03-06 インターナショナル・ビジネス・マシーンズ・コーポレイション メモリ・コントローラ、及びデータ処理システム
JPH09282223A (ja) * 1996-04-12 1997-10-31 Ricoh Co Ltd メモリ制御装置
US7047391B2 (en) * 1998-09-14 2006-05-16 The Massachusetts Institute Of Technology System and method for re-ordering memory references for access to memory
US6748493B1 (en) * 1998-11-30 2004-06-08 International Business Machines Corporation Method and apparatus for managing memory operations in a data processing system using a store buffer
US6510497B1 (en) * 1998-12-09 2003-01-21 Advanced Micro Devices, Inc. Method and system for page-state sensitive memory control and access in data processing systems
US6601151B1 (en) * 1999-02-08 2003-07-29 Sun Microsystems, Inc. Apparatus and method for handling memory access requests in a data processing system
US6628292B1 (en) * 1999-07-31 2003-09-30 Hewlett-Packard Development Company, Lp. Creating page coherency and improved bank sequencing in a memory access command stream
RU2257609C2 (ru) * 1999-10-21 2005-07-27 Мацусита Электрик Индастриал Ко., Лтд. Устройство доступа к полупроводниковой карте памяти, компьютерно-считываемый носитель записи, способ инициализации и полупроводниковая карта памяти
JP3846543B2 (ja) * 2000-03-13 2006-11-15 富士ゼロックス株式会社 メモリアクセスシステム
JP2001356961A (ja) * 2000-06-13 2001-12-26 Nec Corp 調停装置
US6622225B1 (en) * 2000-08-31 2003-09-16 Hewlett-Packard Development Company, L.P. System for minimizing memory bank conflicts in a computer system
US6564304B1 (en) * 2000-09-01 2003-05-13 Ati Technologies Inc. Memory processing system and method for accessing memory including reordering memory requests to reduce mode switching
US7093094B2 (en) * 2001-08-09 2006-08-15 Mobilygen Corporation Random access memory controller with out of order execution
US6912612B2 (en) * 2002-02-25 2005-06-28 Intel Corporation Shared bypass bus structure
US7149857B2 (en) * 2002-05-14 2006-12-12 Micron Technology, Inc. Out of order DRAM sequencer
US7320100B2 (en) * 2003-05-20 2008-01-15 Cray Inc. Apparatus and method for memory with bit swapping on the fly and testing
US7107415B2 (en) * 2003-06-20 2006-09-12 Micron Technology, Inc. Posted write buffers and methods of posting write requests in memory modules
US7228387B2 (en) * 2003-06-30 2007-06-05 Intel Corporation Apparatus and method for an adaptive multiple line prefetcher
US7127574B2 (en) * 2003-10-22 2006-10-24 Intel Corporatioon Method and apparatus for out of order memory scheduling
US7213082B2 (en) * 2004-03-29 2007-05-01 Micron Technology, Inc. Memory hub and method for providing memory sequencing hints
US7162567B2 (en) * 2004-05-14 2007-01-09 Micron Technology, Inc. Memory hub and method for memory sequencing
US20060112240A1 (en) * 2004-11-24 2006-05-25 Walker Robert M Priority scheme for executing commands in memories
US7363406B2 (en) * 2004-12-08 2008-04-22 Motorola, Inc. Dynamic access scheduling memory controller
US7209405B2 (en) * 2005-02-23 2007-04-24 Micron Technology, Inc. Memory device and method having multiple internal data buses and memory bank interleaving
US7461214B2 (en) * 2005-11-15 2008-12-02 Agere Systems Inc. Method and system for accessing a single port memory
US7870351B2 (en) * 2007-11-15 2011-01-11 Micron Technology, Inc. System, apparatus, and method for modifying the order of memory accesses

Also Published As

Publication number Publication date
TWI419158B (zh) 2013-12-11
US20090150624A1 (en) 2009-06-11
KR20100077051A (ko) 2010-07-06
EP2223217A1 (en) 2010-09-01
EP2223217B1 (en) 2014-12-17
TW200933630A (en) 2009-08-01
JP2011505032A (ja) 2011-02-17
US7870351B2 (en) 2011-01-11
KR101154708B1 (ko) 2012-06-11
EP2223217A4 (en) 2011-06-08
TW201403599A (zh) 2014-01-16
TWI512724B (zh) 2015-12-11
US20110099341A1 (en) 2011-04-28
CN101861571A (zh) 2010-10-13
CN101861571B (zh) 2013-11-06
WO2009064793A1 (en) 2009-05-22
US8180974B2 (en) 2012-05-15

Similar Documents

Publication Publication Date Title
JP5272274B2 (ja) メモリアクセスの順序を変更するシステム、装置、および方法
KR100724557B1 (ko) 아웃 오브 오더 dram 시퀀서
US7363406B2 (en) Dynamic access scheduling memory controller
US9281046B2 (en) Data processor with memory controller for high reliability operation and method
US20060112255A1 (en) Method and apparatus for determining a dynamic random access memory page management implementation
JP2021506033A (ja) キャッシュ制御を考慮したメモリコントローラ
JPH04102948A (ja) データ処理システム及び方法
US8452920B1 (en) System and method for controlling a dynamic random access memory
WO2009092037A1 (en) Content addressable memory augmented memory
JP2000259497A (ja) メモリコントローラ

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120925

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121009

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130108

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130108

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: 20130402

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130426

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5272274

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250