(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-16
(45)【発行日】2024-10-24
(54)【発明の名称】同じチャネルで不均一なレイテンシを有するメモリタイプのための応答のサポート
(51)【国際特許分類】
G06F 12/06 20060101AFI20241017BHJP
【FI】
G06F12/06 550A
G06F12/06 515J
(21)【出願番号】P 2020536275
(86)(22)【出願日】2018-09-20
(86)【国際出願番号】 US2018051925
(87)【国際公開番号】W WO2019133086
(87)【国際公開日】2019-07-04
【審査請求日】2021-09-17
【審判番号】
【審判請求日】2023-08-18
(32)【優先日】2017-12-28
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ケダーナス バラクリシュナン
(72)【発明者】
【氏名】ジェームズ レイモンド マグロ
【合議体】
【審判長】須田 勝巳
【審判官】脇岡 剛
【審判官】山崎 慎一
(56)【参考文献】
【文献】特表2014-508361(JP,A)
【文献】特開2010-134628(JP,A)
【文献】特表2013-513881(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/00-12/06
(57)【特許請求の範囲】
【請求項1】
データバス上で、第1のメモリデバイスと、前記第1のメモリデバイスとは異なるアクセスレイテンシを有する第2のメモリデバイスとの両方から読み取り応答データを受け取るための第1のインタフェースと、
前記読み取り応答データを複数のクライアントのうちの1つに送信するための第2のインタフェースと、
制御ロジックと、を備え、
前記制御ロジックが、読み取り応答データを受け取るための所与の時点に到達すると判断したことに応えて、
前記所与の時点に受け取られる前記読み取り応答データに対応する第1のメモリアクセスコマンドを識別し、
前記読み取り応答データが前記所与の時点で前記データバス上で受け取られたと判断することに応えて、
前記第1のメモリアクセスコマンドを完了としてマークし、
前記読み取り応答データを、前記第1のメモリアクセスコマンドを生成した所与のクライアントに送信するように構成される、メモリコントローラ。
【請求項2】
前記制御ロジックが、
ビットのベクトルを維持し、ビットの前記ベクトルの各ビットがスケジューリングタイムスロットに対応し、
データが、所与のタイムスロットに対応する時間にデータバス上で伝達される予定であると判断することに応えて、前記所与のタイムスロットに対応する前記ビットの前記ベクトルの所与のビットを設定するように構成される、請求項1に記載のメモリコントローラ。
【請求項3】
前記制御ロジックが、第2のメモリアクセスコマンドが発行される予定である旨の指標を受け取ることに応えて、前記第2のメモリアクセスコマンドの読み取り応答データを受け取るための時点を、前記第2のメモリアクセスコマンドを識別する識別子に割り当てるようにさらに構成される、請求項1に記載のメモリコントローラ。
【請求項4】
前記第2のメモリアクセスコマンドを識別する識別子に割り当てることが、前記第2のメモリアクセスコマンドが、保留中のメモリアクセスコマンドと同じアドレスをターゲットとするステータスアクセスコマンドであると判断することを含む、請求項3に記載のメモリコントローラ。
【請求項5】
前記制御ロジックが、前記所与の時点に割り当てるための一意の識別子を生成するようにさらに構成される、請求項1に記載のメモリコントローラ。
【請求項6】
前記制御ロジックが、前記所与の時点を決定することであって、前記第1のメモリアクセスコマンドの応答レイテンシを、前記第1のメモリアクセスコマンドが発行される予定である時間に加えることを含む、ことを行うようにさらに構成される、請求項1に記載のメモリコントローラ。
【請求項7】
第1のインタフェースを介して、データバス上で、第1のメモリデバイス、または、前記第1のメモリデバイスとは異なるアクセスレイテンシを有する第2のメモリデバイスのどちらかから読み取り応答データを受け取ることと、
第2のインタフェースによって、前記読み取り応答データを複数のクライアントの1つに送信することと、
所与の読み取り応答データを受け取るための所与の時点に到達すると判断することに応えて、
前記所与の時点に受け取られる前記読み取り応答データに対応する第1のメモリアクセスコマンドを識別することと、
前記読み取り応答データが前記所与の時点で前記データバス上で受け取られたと判断することに応えて、
前記第1のメモリアクセスコマンドを完了としてマークすることと、
前記読み取り応答データを、前記第1のメモリアクセスコマンドを生成した所与のクライアントに送信することと、を含む、方法。
【請求項8】
ビットのベクトルを維持することであって、ビットの前記ベクトルの各ビットがスケジューリングタイムスロットに対応する、前記維持することと、
データが、所与のタイムスロットに対応する時間にデータバス上で伝達される予定であると判断することに応えて、前記所与のタイムスロットに対応する前記ビットの前記ベクトルの所与のビットを設定することと、
をさらに含む、請求項
7に記載の方法。
【請求項9】
第2のメモリアクセスコマンドが発行される予定である旨の指標を受け取ることに応えて、前記方法が、前記第2のメモリアクセスコマンドのために読み取り応答データを受け取るための時点を、前記第2のメモリアクセスコマンドを識別する識別子に割り当てることを含む、請求項
7に記載の方法。
【請求項10】
前記第2のメモリアクセスコマンドを識別する識別子に割り当てることが、前記第2のメモリアクセスコマンドが、保留中のメモリアクセスコマンドと同じアドレスをターゲットとするステータスアクセスコマンドであると判断することを含む、請求項
9に記載の方法。
【請求項11】
前記所与の時点に割り当てるための一意の識別子を生成することをさらに含む、請求項
7に記載の方法。
【請求項12】
前記所与の時点を決定することであって、前記第1のメモリアクセスコマンドの応答レイテンシを、前記第1のメモリアクセスコマンドが発行される予定である時間に加えることを含む、ことをさらに含む、請求項
7に記載の方法。
【請求項13】
第1のメモリデバイス、または、前記第1のメモリデバイスとは異なるアクセスレイテンシを有する第2のメモリデバイスに格納されたデータに対するメモリアクセス要求を生成するように構成された複数のクライアントと、
前記第1のメモリデバイス及び前記第2のメモリデバイスのそれぞれに結合されたメモリコントローラと、を備え、
前記メモリコントローラが、読み取り応答データを受け取るための所与の時点に到達すると判断することに応えて、
前記所与の時点に受け取られる前記読み取り応答データに対応する第1のメモリアクセスコマンドを識別し、
前記読み取り応答データが前記所与の時点でデータバス上で受け取られたと判断することに応えて、
前記第1のメモリアクセスコマンドを完了としてマークし、
前記読み取り応答データを、前記第1のメモリアクセスコマンドを生成した所与のクライアントに送信するように構成される、コンピューティングシステム。
【請求項14】
前記メモリコントローラが、
ビットのベクトルを維持し、ビットの前記ベクトルの各ビットがスケジューリングタイムスロットに対応し、
データが、所与のタイムスロットに対応する時間にデータバス上で伝達される予定であると判断することに応えて、前記所与のタイムスロットに対応する前記ビットの前記ベクトルの所与のビットを設定するようにさらに構成される、請求項
13に記載のコンピューティングシステム。
【請求項15】
前記メモリコントローラが、第2のメモリアクセスコマンドが発行される予定である旨の指標を受け取ることに応えて、前記第2のメモリアクセスコマンドの読み取り応答データを受け取るための時点を、前記第2のメモリアクセスコマンドを識別する識別子に割り当てるようにさらに構成される、請求項
13に記載のコンピューティングシステム。
【請求項16】
前記第2のメモリアクセスコマンドを識別する識別子に割り当てることが、前記第2のメモリアクセスコマンドが、保留中のメモリアクセスコマンドと同じアドレスをターゲットとするステータスアクセスコマンドであると判断することを含む、請求項
15に記載のコンピューティングシステム。
【請求項17】
前記メモリコントローラが、前記所与の時点に割り当てるための一意の識別子を生成するようにさらに構成される、請求項
13に記載のコンピューティングシステム。
【請求項18】
前記一意の識別子が、スレッド識別子、及び前記第1のメモリアクセスコマンドによってターゲットとされるターゲットアドレスの一部分の1つ以上を含む、請求項
17に記載のコンピューティングシステム。
【発明の詳細な説明】
【背景技術】
【0001】
関連技術の説明
さまざまなコンピューティングデバイスが、システムの機能を提供するために複数のタイプのICを統合する異種統合を利用する。複数の機能が処理ノードに入れられ、複数の機能は、視聴覚(A/V)データ処理、医学及びビジネス分野向けのその他の高データ並列アプリケーション、汎用インストラクションセットアーキテクチャ(ISA)の処理命令、デジタル、アナログ、混合信号及び無線周波数(RF)機能などを含む。複数のタイプのICを統合するために、処理ノードをシステムパッケージングに入れるためのさまざまな選択肢が存在する。いくつかの例は、システムオンチップ(SOC)、マルチチップモジュール(MCM)、及びシステムインパッケージ(SiP)である。
【0002】
システムパッケージングの選択肢とは関係なく、いくつかの用途では、1つ以上のコンピューティングシステムの性能は処理ノードによって決まる場合がある。一例では、処理ノードは、マルチソケットサーバのソケットの中の複数の処理ノードの1つである。サーバは、サーバ内のコンピュータプログラムだけではなく、リモートコンピューティングデバイスの中の他のコンピュータプログラムにもサービスを提供するために使用される。別の例では、処理ノードは、いくつかの異なるタイプのアプリケーションを実行し、おそらく複数のユーザー(ローカルとリモートの両方)に情報を一度に中継するモバイルコンピューティングデバイス内で使用される。
【0003】
通常、相対的に高レベルで性能を維持するには、格納されているデータへの迅速なアクセスが必要になる。いくつかのタイプのデータ集約型アプリケーションは、いくつかのローカルプログラムとリモートプログラム、及びそのユーザーに信頼できる高性能を提供するためにデータストレージへの迅速なアクセスに依存する。メモリ階層は、プロセッサダイ上のレジスタ、及びプロセッサダイ上に位置するか、またはプロセッサダイに接続されるかのどちらかのキャッシュなどの相対的に高速な揮発性メモリから、不揮発性の相対的に低速のメモリに移行する。異なるタイプのメモリのためのインタフェース及びアクセス機構も変化する。したがって、階層の中で2つの異なるタイプのメモリを結合するためのあらゆるハイブリッドな提案が、実行中のコンピュータプログラムによる迅速なアクセス要求のために高性能を維持するという課題を提供する。
【0004】
上記を考慮して、2つの異なるメモリタイプから順不同で到着する応答データを識別するための効率的な方法及びシステムが所望される。
【0005】
添付図面と共に以下の説明を参照することによって、本明細書で説明される方法及び機構の利点をより良好に理解することができる。
【図面の簡単な説明】
【0006】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】タイミング図の一実施形態のブロック図である。
【
図3】タイミング図の別の実施形態のブロック図である。
【
図4】タイミング図の別の実施形態のブロック図である。
【
図5】タイミング図の別の実施形態のブロック図である。
【
図6】コンピューティングシステムの別の実施形態のブロック図である。
【
図7】メモリコントローラの一実施形態のブロック図である。
【
図8】2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の一実施形態の流れ図である。
【
図9】2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【
図10】2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【
図11】2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【
図12】2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法の別の実施形態の流れ図である。
【
図13】2つの異なるメモリタイプから順不同で到着する応答データを識別するための方法の一実施形態の流れ図である。
【
図14】2つの異なるメモリタイプから順不同で到着する応答データを識別するための方法の別の実施形態の流れ図である。
【発明を実施するための形態】
【0007】
本発明は、多様な修正及び代替形態の影響を受けやすいが、具体的な実施形態は図面中の例として示され、本明細書で詳細に説明される。しかしながら、図面及びそれに対する詳細な説明は、開示された特定の形態に本発明を限定するものではなく、反対に、本発明は、添付の特許請求の範囲によって定義される本発明の範囲内に収まる全ての修正、均等物、及び代替物を包含するものであることが理解されるべきである。
【0008】
以下の説明では、本明細書に提示する方法及び機構の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、それらの特定の詳細なしに様々な実施形態を実施することができることを認識するべきである。いくつかの例では、本明細書で説明されるアプローチを曖昧にすることを回避するために、公知の構造、コンポーネント、信号、コンピュータプログラム命令、及び技術が詳細には示されていない。例示の簡潔性及び明確さのために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、要素のいくつかの寸法は、他の要素に対して拡張される場合がある。
【0009】
2つの異なるメモリタイプから順不同で到着する応答データを識別するための多様なシステム、装置、方法、及びコンピュータ可読媒体が開示される。多様な実施形態では、コンピューティングシステムは、アプリケーションを処理するための1つ以上のクライアントを含む。クライアントの例は、汎用中央演算処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)、アクセラレーテッドプロセッシングユニット(APU)、入出力デバイス(I/O)デバイスなどを含む。メモリコントローラ内のメモリチャネルは、メモリコントローラと、第1のメモリ及び第2のメモリのそれぞれに接続されたメモリバスとの間でメモリトラフィックを転送する。
【0010】
多様な実施形態では、第1のメモリ及び第2のメモリは、異なるデータストレージ技術を利用し、異なるアクセスレイテンシを有する。第1のメモリ及び第2のメモリのアクセスレイテンシは、それらの間で少なくとも閾値時間量分異なる場合がある。他の実施形態では、第1のメモリ及び第2のメモリのそれぞれは、同じデータストレージ技術を使用するが、まだ少なくとも閾値時間量分異なるアクセスレイテンシを有する。例えば、一実施形態では、第1のメモリは、第2のメモリと同じデータストレージ技術を使用するが、第2のメモリがオンボードキャッシュを使用しないのに対し、第1のメモリはオンボードキャッシュを使用する。
【0011】
第1のメモリ及び第2のメモリのそれぞれは、様々なダイナミックランダムアクセスメモリ(DRAM)などの様々なランダムアクセスメモリ(RAM)の1つ、NVDIMM-Pなどの様々な不揮発性(NV)デュアルインラインメモリ(DIMM)の1つ、相変化メモリ(PCM)、強誘電体メモリ(FeRAM)、磁気抵抗メモリ(MRAM)、抵抗メモリ(ReRAMまたはRRAM)、3次元(3D)クロスポイント(XPoint)メモリなどの別のタイプのデータストレージ技術の1つを含む場合がある。したがって、第1のメモリの1つ以上のアクセスレイテンシと、第2のメモリの1つ以上のアクセスレイテンシとの差は、閾値を超える場合がある。一部の実施形態では、読み取りコマンドの発行から有効なデータを含む受け取られた応答まで測定された第1のメモリのアクセスレイテンシは、数十ナノ秒の規模である。多様な実施形態では、読み取りコマンドまたはステータスコマンドの発行から受け取られた応答まで測定された第2のメモリのアクセスレイテンシは、数百ナノ秒の規模である。したがって、レイテンシ間の差は数百ナノ秒を超え、これは所与の閾値時間量を超える場合がある。
【0012】
多様な実施形態では、コマンドプロセッサまたは他のロジックが受け取った各メモリ要求を1つ以上のコマンドに変換する。メモリコントローラ内のスケジューラは、第1のメモリタイプのための第1のコマンド及び第2のメモリタイプのための第2のコマンドなどの2つの保留中のメモリアクセスコマンドがあるかどうかを判断する。スケジューラは、共有メモリデータバス上でデータ衝突を引き起こさずに、第1のコマンド及び第2のコマンドのそれぞれを発行できるかどうかを判断する。例えば、メモリコントローラは、第1のメモリ及び第2のメモリのそれぞれのアクセスレイテンシに加えて、選択したコマンドを発行するための時点に基づいて、読み取り応答データが共有メモリデータバスに到着する予定である時点を追跡する。一部の実施形態では、時点はクロックサイクルで測定される。第1のコマンド及び第2のコマンドのどちらかを選択しても、共有メモリデータバス上でデータ衝突が予定されないであろう場合、次いで第1のコマンド及び第2のコマンドのそれぞれは、発行の候補のままである。このような場合、スケジューラは、アービトレーションロジックに基づいて第1のコマンド及び第2のコマンドからコマンドを選択する。
【0013】
他の実施形態では、共有メモリデータバス上でデータ衝突を回避するために、メモリコントローラの中のスケジューラは、メモリデータバス上にある予定である読み取り応答データをすでに有していない次の所与の時点を決定する。スケジューラは、次いで所与の時点で応答データを提供する第1のメモリにアクセスするための第1のメモリアクセスコマンドを予定する時間があるかどうかを判断する。また、スケジューラは、所与の時点で応答データを提供する第2のメモリにアクセスするための第2のメモリアクセスコマンドを予定する時間があるかどうかも判断する。
【0014】
第1のアクセスコマンド及び第2のアクセスコマンドのうちの少なくとも一方が所与の時点で応答データを提供するための十分な時間がある場合、次いでスケジューラは、アービトレーションロジックに基づいて第1のメモリアクセスコマンド及び第2のメモリアクセスコマンドのうちの1つを選択する。一実施形態では、アービトレーションロジックは重み付けされた基準を使用する。基準には、少なくとも優先度レベル、年齢などが含まれる。その後、スケジューラは、メモリチャネルを介して第1のメモリ及び第2のメモリの1つに選択したアクセスコマンドを発行する。
【0015】
一部の実施形態では、スケジューラが、発行するための所与のコマンドを予定すると、スケジューラは、要求された読み取りデータが共有メモリデータバス上に到着する予定である所与の時点を決定する。一実施形態では、スケジューラは、所与のコマンドのレイテンシを、スケジューラが所与のコマンドを発行することを予定する時点に加える。一部の実施形態では、スケジューラは、所与のコマンドに対応する情報を格納する要求待ち行列の中のエントリの表示として識別子を生成する。他の実施形態では、スケジューラは、スレッド識別子及び所与のコマンドに対応するメモリ要求のターゲットアドレスの一部分の1つ以上の組み合わせに基づいて識別子を生成する。スケジューラは、識別子の、所与の時点との関連付けを格納する。一実施形態では、表が使用される。したがって、スケジューラは、所与のコマンドに挿入されたタグに基づいてまたは到着する要求された読み取りデータと関連付けられたパケットで、よりもむしろ、所与の時点に基づいて共有メモリデータバス上に到着する要求された読み取りデータで、所与のコマンドを識別できる。
【0016】
図1を参照すると、コンピューティングシステム100の一実施形態の一般化されたブロック図が示される。示されるように、クライアント110及び112は、メモリコントローラ120にメモリ要求を送信する。メモリコントローラ120内のメモリチャネル124は、メモリコントローラ120とメモリバス130との間でメモリトラフィックを転送する。メモリ140及びメモリ150のそれぞれは、クライアント110及び112によってアクセスされるデータを格納する。多様な実施形態では、メモリ140及びメモリ150の1つ以上は、クライアント110及び112によってシステムメモリとして使用される。多様な実施形態では、メモリ140のアクセスレイテンシは、少なくとも閾値時間量分、メモリ150のアクセスレイテンシとは異なる。一部の実施形態では、メモリ140及びメモリ150は異なるデータストレージ技術を使用し、したがってメモリ140及びメモリ150のアクセスレイテンシは、少なくとも閾値時間量分、それらの間で異なる。他の実施形態では、メモリ140及びメモリ150のそれぞれは、同じデータストレージ技術を使用するが、まだ少なくとも閾値時間量分、異なるアクセスレイテンシを有する。例えば、一実施形態では、メモリ140はメモリ150と同じデータストレージ技術を使用するが、メモリ150がオンボードキャッシュを使用しないのに対し、メモリ140はオンボードキャッシュを使用する。したがって、アクセスレイテンシは、メモリ140とメモリ150との間で異なり、閾値時間量分、異なる場合がある。他の実施形態では、他の構成及び/または他の構成要素が、メモリ140及びメモリ150の一方によって使用される場合があるが、他方では使用されない場合があり、このことがメモリ140とメモリ150との間の異なるアクセスレイテンシを引き起こす。
【0017】
通信ファブリック、I/Oデバイス用の入出力(I/O)インタフェース、及びネットワーク接続のためのあらゆるリンク及びインタフェースは、説明を容易にするためにコンピューティングシステム100の中に示されていない。一部の実施形態では、コンピューティングシステム100の構成要素は、システムオンチップ(SOC)などの集積回路(IC)上の個々のダイである。他の実施形態では、構成要素は、システムインパッケージ(SiP)またはマルチチップモジュール(MCM)の中の個々のダイである。一部の実施形態では、クライアント110及び112は、中央演算処理装置(CPU)、グラフィックス処理装置(GPU)、マルチメディアエンジン用のハブなどの1つ以上を含む。クライアント110及び112のそれぞれは、アプリケーションを処理し、メモリ要求を生成することができるさまざまなコンピューティングリソースの1つである。
【0018】
単一のメモリコントローラ120が示されているが、他の実施形態では、別の数のメモリコントローラがコンピューティングシステム100で使用される。多様な実施形態では、メモリコントローラ120は、クライアント110及び112からメモリ要求を受け取り、スケジューラ122はメモリ要求を予定し、予定したメモリ要求を、メモリチャネル124を介してメモリ140及び150の1つに送信する。一部の実施形態では、メモリコントローラ120内のスケジューラ122は、メモリ150の中のメモリ場所をターゲットとするメモリ要求を予定することとは別に、メモリ140の中のメモリ場所をターゲットとするメモリ要求を予定する制御ロジックを含む。その後、スケジューラ122は、メモリ140をターゲットとするメモリ要求とメモリ150をターゲットとするメモリ要求との間で選択する。一実施形態では、スケジューラ122は、メモリ140及びメモリ150をターゲットとするアクセスを混合する。
【0019】
メモリ要求を予定するためのスケジューラ122の中の制御ロジックは、サービスの質(QoS)またはメモリ要求の他の優先度レベル、メモリ要求のプロセスのまたはソフトウェアスレッドの識別子(ID)、メモリ要求の経過時間、メモリ要求がメモリ140に発行されてからの時間量、メモリ要求がメモリ150に発行されてからの時間量などの情報を使用する。したがって、スケジューラ122は、メモリ要求の順不同の発行をサポートする。スケジューラ122が、メモリ140及びメモリ150の1つに送信するメモリ要求を選択すると、スケジューラ122は、選択したメモリ要求を転送のためにメモリチャネル124に送信する。
【0020】
メモリチャネル124は、メモリ140及びメモリ150のそれぞれとインタフェースをとる。メモリチャネル124は、メモリ140とインタフェースをとるために使用されるプロトコルをサポートし、メモリ150とインタフェースをとるために使用される別のプロトコルをサポートする。プロトコルは、クロックサイクルごとのデータ転送の数、信号電圧レベル、信号タイミング、信号位相及びクロック位相、ならびにクロック周波数などの情報転送のために使用される値を決定する。
【0021】
多様な実施形態では、メモリバス130は、読み取りモード及び書き込みモードの所与のモード中などの所与の時間量、単一の方向でデータトラフィックを送信することをサポートし、次いで読み取りモード及び書き込みモードの他のモード中などの別の所与の時間量、反対方向でデータトラフィックを送信する。一実施形態では、メモリバス130は、単一のコマンドバス及び単一のデータバスを利用する。したがって、メモリ140及びメモリ150に対するメモリ要求の発行を予定することは、メモリバス130上でデータ衝突を回避するように実行される。
【0022】
上述のように、一部の実施形態では、メモリ140及びメモリ150は異なるデータストレージ技術を使用し、したがって異なるアクセスレイテンシを有する。示されるように、メモリ140は、メモリ150のアクセスレイテンシ134とは少なくとも閾値時間量分、異なるアクセスレイテンシ132を有する。メモリ140及びメモリ150のそれぞれについて単一のアクセスレイテンシが示されているが、他の実施形態では、メモリ140及びメモリ150の1つ以上が複数のアクセスレイテンシを有する。しかしながら、メモリ140の複数のアクセスレイテンシのそれぞれ1つは、少なくとも閾値時間量分、メモリ150の複数のアクセスレイテンシのそれぞれ1つとは異なる。
【0023】
一実施形態では、メモリ140及びメモリ150の一方は、さまざまなダイナミックランダムアクセスメモリ(DRAM)の1つを含む。一方、メモリ140及びメモリ150の他方のメモリは、NVDIMM-Pなどのさまざまな不揮発性(NV)デュアルインラインメモリモジュール(DIMM)の1つを含む。他の実施形態では、異なるアクセスレイテンシを有する他のメモリタイプが、メモリ140及びメモリ150に使用される。例えば、ランダムアクセスメモリ(RAM)技術及びNVDIMM技術のタイプを使用することの他に、一部の実施形態では、メモリ140及びメモリ150のそれぞれは、相変化メモリ(PCM)、強誘電体メモリ(FeRAM)、磁気抵抗メモリ(MRAM)、抵抗メモリ(ReRAMまたはRRAM)、3次元(3D)クロスポイント(XPoint)メモリなどのデータストレージ技術の他の例を含む。多様な実施形態では、メモリ140のアクセスレイテンシとメモリ150のアクセスレイテンシの差は、閾値を超える。したがって、スケジューラ122は、メモリ140及びメモリ150の中の場所をターゲットとするメモリアクセスコマンドを混合して発行するために制御ロジック及び順次要素を含む。
【0024】
一部の実施形態では、メモリコントローラ120は、それぞれの受け取ったメモリ要求を1つ以上のコマンドに変換するためのコマンドプロセッサを含む。一実施形態では、スケジューラ122は、メモリ140のための第1のコマンド及びメモリ150のための第2のコマンドなどの2つの保留中のメモリアクセスコマンドがあるかどうかを判断する。スケジューラ122は、共有メモリデータバス130上でデータ衝突を引き起こさずに、第1のコマンド及び第2のコマンドのそれぞれを発行できるかどうかを判断する。例えば、メモリコントローラ120は、選択したコマンドを発行するための時点、アクセスレイテンシ132及びアクセスレイテンシ134に基づいて、データが共有メモリデータバス130に到着する予定である時点を追跡する。保留中の第1のコマンド及び第2のコマンドは、読み取りアクセスまたは書き込みアクセスである場合がある。一部の実施形態では、時点はクロックサイクルで測定される。第1のコマンド及び第2のコマンドのどちらかを選択しても、共有メモリデータバス130上でデータ衝突が予定されないであろう場合、次いで第1のコマンド及び第2のコマンドのそれぞれは、発行の候補のままである。このような場合、スケジューラ122は、アービトレーションロジックに基づいて第1のコマンド及び第2のコマンドからコマンドを選択する。一実施形態では、アービトレーションロジックは重み付けされた基準を使用する。
【0025】
他の実施形態では、アクセスレイテンシ132とアクセスレイテンシ134との間のかなりの差にも関わらずメモリバス130上でデータ衝突を回避するために、スケジューラ122は、メモリバス130が利用可能となる予定である次の所与の時点を決定する。言い換えると、スケジューラ122は、メモリバス130上で駆動される予定である読み取り応答データまたは書き込みデータをすでに有していない次の所与の時点を決定する。一部の実施形態では、時点はクロックサイクルで測定される。また、スケジューラ122は、所与の時点でデータを提供するためにメモリ140にアクセスするための第1のコマンド及びメモリ150にアクセスするための第2のコマンドを予定するための時間があるかどうかも判断する。上述のように、コマンドプロセッサは、受け取ったメモリ要求をコマンドに変換する。一実施形態では、第1のコマンド及び第2のコマンドの1つ以上は、1つ以上の先行するコマンド及び/または1つ以上の後続のコマンドを有し、このことが、第1のコマンド及び第2のコマンドが発行され得るときにレイテンシ及び遅延を加える。
【0026】
第1のアクセスコマンド及び第2のアクセスコマンドのうちの少なくとも1つが、メモリバス130が利用可能である所与の時点でデータを提供するための十分な時間がある場合、スケジューラ122は、第1のメモリアクセスコマンド及び第2のメモリアクセスコマンドの1つを選択する。優先度レベル、経過時間などの上述した基準が、スケジューラ122によって使用できる。その後、スケジューラ122は、メモリチャネル124を介してメモリ140及びメモリ150の1つに選択したアクセスコマンドを送信する。
【0027】
図2を参照すると、タイミング
図200の一実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンドは、タイムライン上の異なるときに発行されると示されている。メモリアクセスコマンドは、異なるアクセスレイテンシを有する2つの異なるタイプのメモリの1つに発行される。多様な実施形態では、第1のタイプのメモリ(メモリタイプ1)は、第2のタイプのメモリ(メモリタイプ2)とは異なるデータストレージ技術を使用し、したがってメモリタイプ1は、少なくとも閾値時間量分、メモリタイプ2のアクセスレイテンシとは異なるアクセスレイテンシを有する。
【0028】
示されるように、A、B、及びCとラベルが付けられた3つのメモリアクセスコマンドが、マークt1、t2、及びt3によって表示される時間に発行される。これらのメモリアクセスコマンドは、メモリタイプ1に発行される。これらのメモリアクセスコマンドに対する応答は、マークt4、t5、及びt6によって表示される時間に到着すると示されている。一部の実施形態では、タイムライン上のマークは、クロックサイクルと同等である。他の実施形態では、タイムライン上のマークは、所与の時点を表示する他の時間の測定と同等である。応答は、タイムライン上の3つのマークの決定的なアクセスレイテンシを有することに加えて、メモリアクセスコマンドA、B、及びCを発行する順序に対して順序正しく到着すると示されている。
【0029】
さらに、別のメモリアクセスコマンドDが、マークt7によって表示される時間に発行されることが示されている。メモリアクセスコマンドDは、メモリタイプ2に対して発行される。応答は、マークt12によって表示される時間に受け取られると示されている。アクセスレイテンシは、メモリタイプ1に対して発行されたメモリアクセスコマンドA、B、及びCの場合よりもメモリタイプ2に対して発行されたメモリアクセスコマンドDの場合により大きくなる。一部の実施形態では、メモリタイプ2のアクセスレイテンシは、タイムライン上の5つのマークである。
【0030】
示される実施形態では、メモリタイプ2は、第2のアクセスレイテンシを有する。例えば、メモリアクセスコマンドEは、タイムライン上のマークt13によって表示される時間にメモリタイプ2に発行される。一部の実施形態では、メモリタイプ2の第2のアクセスレイテンシは、タイムライン上の6つのマークである。示されるように、メモリアクセスコマンドEに対する応答は、マークt19によって表示される時間に到着すると示されている。一部の実施形態では、読み取りアクセスレイテンシは、メモリタイプ1及びメモリタイプ2の書き込みアクセスレイテンシに等しい。他の実施形態では、読み取りアクセスレイテンシは、メモリタイプ1及びメモリタイプ2の1つ以上の書き込みアクセスレイテンシとは異なる。示される実施形態では、アクセスコマンドA~Eは、異なるアクセスレイテンシ210及び220を有し、コマンドA~Eは、互いとは別々に発行されると示されている。ただし、このような発行方式は非効率である。
【0031】
図3を参照すると、タイミング
図300の別の実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンドはタイムライン上の異なる時間に発行されると示されている。メモリアクセスコマンドは、少なくとも閾値時間量分異なるなど、かなり異なるアクセスレイテンシを有する2つの異なるタイプのメモリの1つに発行される。示されるように、メモリタイプ1に発行されたアクセスコマンドのレイテンシ310は、メモリタイプ2に発行されたアクセスコマンドのレイテンシ320に満たない。
【0032】
タイミング
図200と同様に、一部の実施形態では、タイムライン上のマークは、クロックサイクルと同等である。他の実施形態では、タイムライン上のマークは時点を表示する他の時間の測定と同等である。示されるように、A、B、及びCとラベルが付けられた3つのメモリアクセスコマンドが、マークt1、t2、及びt3によって表示される時間に発行される。これらのメモリアクセスコマンドは、メモリタイプ1に発行される。これらのメモリアクセスコマンドに対する応答は、マークt4、t5、及びt6によって表示される時間に到着するとして示されており、タイムライン上の3つのマークの決定的なレイテンシを有することに加えて、メモリアクセスコマンドA、B、及びCを発行する順序に対して順序正しい。
【0033】
メモリアクセスコマンドDは、マークt7によって表示される時間にメモリタイプ2に発行される。応答が受け取られる前に、別のメモリアクセスコマンドEが、マークt8によって表示される時間にメモリタイプ1に発行される。マークt9によって表示される時間では、データ衝突なしにメモリタイプ1に別のメモリアクセスコマンドを発行することは不可能である。本例では、メモリタイプ1に発行されるメモリアクセスコマンドのアクセスレイテンシが、タイムライン上の3つのマークであり、メモリタイプ2に発行されるメモリアクセスコマンドのアクセスレイテンシが、タイムライン上で少なくとも5つのマークであることが知られている。したがって、メモリデータバスが、メモリアクセスコマンドDのスケジューリングのため、マークt12によって表示される時間には利用不可であることが知られている。メモリアクセスコマンドがマークt9によって表示される時間にメモリタイプ1に発行される場合、次いでデータ衝突はt12で発生するであろう。
【0034】
時間t13にメモリタイプ2に発行されたメモリアクセスコマンドF、及び時間t14及びt15にメモリタイプ1に発行されたメモリアクセスコマンドG及びHなどの他のアクセスコマンドが発行されると示されている。メモリアクセスコマンドFのこの例でのアクセスレイテンシは、タイムライン上の6つのマークである。したがって、メモリデータバスが、ステータスアクセスコマンドFのスケジューリングのためにマークt19によって表示される時間に利用できないことが知られている。メモリアクセスコマンドがマークt16によって表示される時間にメモリタイプ1に発行される場合、次いでデータ衝突はt19で発生するであろう。したがって、メモリチャネルを介して2つのタイプのメモリにメモリアクセスコマンドを発行するスケジューラは、メモリデータバス上でデータ衝突を回避するために、いつメモリデータバスがコマンドのレイテンシのために利用できないのかを考慮に入れる。
【0035】
図4を参照すると、タイミング
図400の別の実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンド420及び430は、クロック410に基づいて異なる時間に発行されると示されている。示される実施形態では、クロック410のクロックサイクルは、時点を識別するために時間の測定を提供するために使用される。メモリアクセスコマンドは、少なくとも閾値時間量分、互いと異なるアクセスレイテンシを有する2つの異なるタイプのメモリの1つに発行される。一実施形態では、コマンド420は、第1のタイプのメモリ(メモリタイプ1)に発行され、コマンド430は、第2のタイプのメモリ(メモリタイプ2)に発行される。
【0036】
示されるように、アクセスコマンド420のレイテンシは、アクセスコマンド430のレイテンシに満たない。レイテンシは、説明を容易にするために、縮尺通りに描かれていない。一部の実施形態では、読み取りコマンドの発行から有効なデータを含む受け取られた応答まで測定されたメモリタイプ1のアクセスレイテンシは、数十ナノ秒の規模である。示されている例では、レイテンシは2クロックサイクルとして示されている。多様な実施形態では、読み取りコマンドまたはステータスコマンドの発行から有効なデータを含む場合もあれば、含まない場合もある受け取られた応答まで測定されたメモリタイプ2のアクセスレイテンシは、数百ナノ秒の規模である。説明を容易にするために、レイテンシは、縮尺通りに描かれるよりむしろ5クロックサイクルとして示される。
【0037】
多様な実施形態では、メモリ読み取り要求またはメモリ書き込み要求などのメモリ要求は、アクセスされているメモリに基づいて1つ以上のコマンドに変換される。例えば、DRAM内の制御ロジックは、活性化(開放)トランザクション、ならびに一度は識別された行にアクセスするため、及び一度は行バッファに格納された修正されたコンテンツを閉鎖トランザクション中に識別された行に入れ直すためのDRAM内でのデータライン及び制御ラインのプリチャージなどの複雑なトランザクションを実行する。活性化/開放、列アクセス、読み取りアクセス、書き込みアクセス及びプリチャージ/閉鎖などの異なるDRAMトランザクションのそれぞれは、異なるそれぞれのレイテンシを有する。多くの場合、活性化トランザクション及びプリチャージトランザクションは、読み取りアクセス及び書き込みアクセスのトランザクションよりも著しく高いレイテンシを有する。
【0038】
示されている例に示すコマンドの破線は、メモリアクセスコマンドとともに発行される可能性のある追加のコマンドを表す。例えば、DRAM用の活性化/開放コマンド及びプリチャージ/閉鎖コマンドは使用できるが、タイミング
図400には示されていない。同様に、NVDIMM-Pの場合、トランザクション読み取り(X-READ)コマンド、送信読み取り(SREAD)コマンド、及び推測ステータス読み取りコマンドのそれぞれの後には、通常、大きな線形アドレスのためにアドレスを拡張することを可能にする拡張アドレス(XADR)コマンドが続く。これらの追加のコマンドは明確に示されていないが、コマンド420及び430の間に配置される可能性のために破線によって示される。したがって、通常、バックツーバックアクセスコマンドは、バックツーバッククロックサイクルでは発行されない。メモリチャネルを有するメモリコントローラのためのスケジューラは、発行のためにメモリアクセスコマンドを予定するときに考えられる追加のコマンドを考慮に入れる。
【0039】
応答は応答440として示され、応答は、単一の共有メモリデータバス上で受け取られる。示されるように、メモリタイプ1のためのメモリアクセスコマンド「READ A」は、クロックサイクル(CC)1で発行される。この例の2クロックサイクルのアクセスレイテンシにより、有効な応答データはCC3で到着する。例に示されるように、有効なデータは、CC3及びCC4などの2つのクロックサイクルを消費する。各クロックサイクル中、データバス幅に等しいデータ量がメモリコントローラに返される。データバスのサポートされるサイズは、設計選択肢に基づく。
【0040】
一実施形態では、メモリコントローラの中のスケジューラまたは他の制御ロジックは、メモリデータバスが利用可能となる予定である次の所与の時点がCC4の後であり、それはCC5であると判断する。スケジューラは、メモリタイプ1のためのメモリアクセスコマンド及びメモリタイプ2のためのメモリアクセスコマンドを予定する時間があると判断する。メモリタイプ1のメモリアクセスコマンドのための応答データ量は、メモリタイプ2のより早いメモリアクセスコマンドのために到着する応答データと衝突しないであろう。したがって、スケジューラは、CC2でメモリタイプ2のために読み取りコマンド「READ B」を、及びCC3でメモリタイプ1のためにメモリアクセスコマンド「READ C」を発行する。例の2クロックサイクルのアクセスレイテンシにより、「READ C」の有効な応答データはCC5及びCC6で到着する。例の5クロックサイクルのアクセスレイテンシにより、有効な応答データは、「READ B」のためにCC7及びCC8で到着する予定である。しかしながら、示されるように、要求されたデータは、まだメモリタイプ2から取り出される準備ができていなかった。要求されたデータがまだ利用できないことを記述する表示が、メモリコントローラによって受け取られ、後で再試行するためにスケジューラによって使用される。
【0041】
スケジューラは、メモリデータバス上で駆動される予定である読み取り応答データをすでに有していない次の所与の時点がCC9であると判断する。スケジューラは、メモリタイプ1のためのメモリアクセスコマンド及びメモリタイプ2のためのメモリアクセスコマンドを予定する時間があると判断する。スケジューラは、発行するための次のメモリアクセスコマンドを選択するために、サービスの質(QoS)または他のメモリ要求の他の優先度レベル、メモリ要求のプロセスのまたはソフトウェアのスレッドの識別子(ID)、メモリ要求の経過時間、メモリアクセスコマンドがメモリタイプ1に発行されてからの時間量、メモリアクセスコマンドがメモリタイプ2に発行されてからの時間量などの情報を使用する。示された例では、スケジューラは、CC4でメモリタイプ2のために読み取りアクセスコマンド「READ D」を発行する。例の5クロックサイクルのアクセスレイテンシにより、有効な応答データはCC9及びCC10で到着する予定である。
【0042】
スケジューラは、メモリデータバスが利用可能である次の所与の時点がCC11であると判断する。スケジューラは、メモリタイプ1のためのメモリアクセスコマンド及びメモリタイプ2のためのメモリアクセスコマンドを予定する時間があると判断する。スケジューラは、優先度レベル、経過時間などの上記の基準に基づいて、発行するための次のメモリアクセスコマンドを選択する。一部の実施形態では、スケジューラは、基準のそれぞれに所与の重みを割り当て、加重和を実行する。最大の和を有するメモリアクセスコマンドまたはステータスアクセスコマンドが、発行のために選択される。
【0043】
一実施形態では、メモリコントローラは、「READ B」に対する応答データがいまメモリタイプ2から利用可用である旨の表示を別のチャネルまたはリンクインタフェースで受け取る。メモリアクセスコマンド「READ E」は、上記の読み取りコマンド「READ B」に対応する送信読み取りコマンド「SREAD B」よりも高い加重和を有するが、スケジューラは、メモリアクセスコマンド「READ E」のための応答データの量が、より早い読み取りコマンド「READ D」のために到着する応答データと衝突するであろうと判断する。したがって、スケジューラは、CC8で送信読み取りコマンド「SREAD B」を、CC9でメモリアクセスコマンド「READ E」を発行する。例の2クロックサイクルのアクセスレイテンシにより、「READ E」のための有効な応答データはC11及びCC12で到着する。この例の「SREAD B」の5クロックサイクルのアクセスレイテンシにより、有効な応答データはCC13及びCC14(図示せず)で到着する予定である。タイミング
図400が読み取りアクセスコマンドに関して説明されるが、他の実施形態では、類似するタイミング図が、書き込みデータが共有メモリデータバス上に配置され、読み取り応答データまたは他の書き込みアクセスコマンドの他の書き込みデータのどちらかとのデータ衝突が発生する場合がある書き込みアクセスコマンドのために使用される。
【0044】
一部の実施形態では、受け取られた応答データは、どのコマンドが応答データと関連付けられているのかを識別するタグまたは他の識別子を含む。他の実施形態では、要求データの到着のタイミングが、どのコマンドが応答データと関連付けられているのかを識別するために使用される。したがって、要求データはコマンドの発行に対応して順不同で到着するが、メモリコントローラの中のスケジューラは、受け取ったどのデータがどのコマンドに属するのかを追跡できる。
【0045】
図5を参照すると、タイミング500の別の実施形態の一般化されたブロック図が示される。示される実施形態では、メモリアクセスコマンド520及び530は、クロック510に基づいて異なる時間に発行されると示されている。示される実施形態では、クロック510のクロックサイクルは、時点を識別するために時間の測定を提供するために使用される。メモリアクセスコマンドは、異なるアクセスレイテンシを有する2つの異なるタイプのメモリの1つに発行される。一実施形態では、コマンド520は、従来のDRAMである第1のタイプのメモリに発行され、コマンド530は、NVDIMM-Pである第2のタイプのメモリに発行される。しかしながら異なるアクセスレイテンシを有する他のタイプのメモリが考えられ、意図される。
【0046】
コマンドレイテンシは、説明を容易にするために縮尺通りに描かれていない。一部の実施形態では、従来のDRAMのコマンドレイテンシは、数十ナノ秒の規模である。示されている例では、レイテンシは2クロックサイクルとして示されている。多様な実施形態では、NVDIMM-Pのアクセスレイテンシは、数百ナノ秒の規模である。示されている例では、レイテンシは7クロックサイクルとして示されている。多様な実施形態では、メモリ読み取り要求などのメモリ要求は、アクセスされているメモリに基づいて1つ以上のコマンドに変換される。上述のように、DRAM内の制御ロジックは、活性化トランザクション及び閉鎖トランザクションのような複雑なトランザクションを実行する。さらに、行アドレスのためのストローブ及び列アドレスのためのストローブなど、他の信号も生成される。
【0047】
以前のタイミング
図400と同様に、タイミング
図500は、読み取りアクセスコマンドに関して説明される。しかしながら、他の実施形態では、類似するタイミング図が、書き込みコマンドが共有メモリデータバス上に配置され、読み取り応答データまたは他の書き込みアクセスコマンドの他の書き込みデータのどちらかとのデータ衝突が発生する場合がある書き込みアクセスコマンドのために使用される。応答は応答540として示され、応答は単一メモリデータバス上で受け取られる。スケジューラは、優先順位レベル、経過時間などの上記の基準に基づいて、発行するための次のメモリアクセスコマンドを選択する。一部の実施形態では、スケジューラは、基準のそれぞれに所与の重みを割り当て、発行するための次のコマンドを選択するときに使用するための加重和を実行する。
【0048】
示されるように、スケジューラは、CC2でメモリタイプ2のためにトランザクション読み取りコマンド「X-READ A」を発行する。大きな線形アドレスのためにアドレスの拡張を可能にする拡張アドレスコマンド「XADR A」は、CC3でただちに続く。例の7クロックサイクルのアクセスレイテンシにより、有効な応答データはCC9で到着する予定である。一部の実施形態では、レイテンシは、コマンド「X-READ A」からよりむしろコマンド「XADR A」から測定される。多様な実施形態では、要求されたデータは複数のクロックサイクルを消費する。しかしながら、説明を容易にするために、コマンド「X-READ A」に対して要求されたデータは、単一のクロックサイクルを消費する。
【0049】
スケジューラは、CC3でメモリタイプ1のためにメモリアクセスコマンド「READ B」を発行する。例の2クロックサイクルのアクセスレイテンシにより、有効な応答データはCC5で到着する。示されるように、活性化コマンド「ACTIVATE」は、CC3でコマンド「READ B」を発行することに備えるためにCC1で発行される。列アドレスストローブ(CAS)は、CC3で、論理低値でアサートされる。行アドレスと列アドレスとは、対応するストローブのアサーションと整合したポインタ570としてマークされたアドレスライン上に設けられる。示されるように、コマンド「READ B」のために要求されたデータは、CC5、CC6、CC7、及びCC8などの4つのクロックサイクルを消費する。スケジューラは、メモリデータバスが利用可能である次の所与の時点を決定するとき、受け取った要求されたデータによって消費されるクロックサイクル数を考慮に入れる。
【0050】
一実施形態では、スケジューラは、メモリデータバスが利用可能である次の所与の時点がCC10であると判断する。スケジューラは、メモリタイプ1のためのメモリアクセスコマンドを予定する時間があるが、メモリタイプ2のためのメモリアクセスコマンドを予定する時間はないと判断する。示されるように、メモリタイプ2のための次のメモリアクセスコマンドを発行する最も早い時点は、コマンド「XADR A」の後であり、それはCC4である。7クロックサイクルのアクセスレイテンシにより、要求されたデータは、CC10よりむしろCC11で到着する予定である。したがって、スケジューラは、CC8でメモリタイプ1のためのメモリアクセスコマンド「READ C」を発行する。例の2クロックサイクルのアクセスレイテンシにより、有効な応答データはCC10で到着する。
【0051】
示されるように、CC8でコマンド「READ C」を発行することに備えるために、プリチャージコマンド「PRECHARGE」及び活性化コマンド「ACTIVATE」がそれぞれCC4及びCC6で発行される。閉じるバンクは、ポインタ570としてマークされたアドレスライン上の「BANK」データの中で指定される。一部の実施形態では、受け取られた応答データは、どのコマンドが応答データと関連付けられているのかを識別するタグまたは他の識別子を含む。他の実施形態では、要求データの到着のタイミングが、どのコマンドが応答データと関連付けられているのかを識別するために使用される。したがって、要求データはコマンドの発行に対応して順不同で到着するが、メモリコントローラの中のスケジューラは、受け取ったどのデータがどのコマンドに属するのかを追跡できる。
【0052】
図6を参照すると、コンピューティングシステム600の別の実施形態のブロック図が示される。示されるように、コンピューティングシステム600は、クライアント610のそれぞれとメモリコントローラ630との間に通信ファブリック620を含む。メモリコントローラ630は、メモリバス650を介してメモリコントローラ620とメモリ670とメモリ680との間でメモリトラフィックを転送するためのメモリチャネル638を含む。メモリ670及びメモリ680のそれぞれは、クライアント610によってアクセスされるデータを格納する。一部の実施形態では、システム600の構成要素は、システムオンチップ(SOC)などの集積回路(IC)上の個々のダイである。他の実施形態では、構成要素は、システムインパッケージ(SiP)またはマルチチップモジュール(MCM)の中の個々のダイである。電源コントローラ、割り込みコントローラ、ネットワークリンクインタフェースなどは、説明を容易にするために示されていない。
【0053】
多様な実施形態では、メモリバス650は、双方向共有バス構造を利用する。多様な実施形態では、メモリ670及びメモリ680は異なるデータストレージ技術を使用し、したがってメモリ670は、少なくとも閾値時間量分、メモリ680のアクセスレイテンシとは異なるアクセスレイテンシを有する。多様な実施形態では、メモリ670及びメモリ680の1つ以上は、クライアント610によってシステムメモリとして使用される。
【0054】
一実施形態では、メモリ670及びメモリ680の一方がさまざまなタイプのDRAMの1つであるとき、メモリチャネル638とメモリコントローラ630との間のそれぞれのインタフェースのためのプロトコルの一例は、ダブルデータレート(DDR)タイプのプロトコルである。プロトコルは、クロックサイクルあたりのデータ転送の数、信号電圧レベル、信号タイミング、信号位相及びクロック位相、ならびにクロック周波数など、情報転送のために使用される値を決定する。プロトコルの例は、DDR2 SDRAM、DDR3 SDRAM、GDDR4(グラフィックスダブルデータレート、バージョン4)、SDRAM、GDDR5、SDRAM、GDDR6、HBM2などを含む。メモリコントローラ630は、メモリチャネル638及び他のメモリチャネル(図示せず)にインタフェースし、対応するプログラムに従うための制御回路を含む。
【0055】
単一のメモリコントローラ630が示されているが、他の実施形態では、別の数のメモリコントローラがコンピューティングシステム600で使用される。示されるように、メモリコントローラ630は、通信ファブリック620を介してクライアント610から受け取られたメモリアクセス要求を待ち行列に入れるための要求待ち行列632を含む。また、メモリコントローラ630は、メモリ670及びメモリ680から受け取った応答を格納するための応答待ち行列634も有する。一実施形態では、要求待ち行列632は、メモリ読み取り要求を格納するためにメモリ670及びメモリ680のそれぞれに別個の読み取り待ち行列を含む。さらに、要求待ち行列632は、メモリ書き込み要求を格納するためにメモリ670及びメモリ680のそれぞれに別個の書き込み待ち行列を含む。一部の実施形態では、メモリコントローラ630は、メモリ670及びメモリ680の1つ以上が、アクセスに対する応答として失敗ステータスを提供するデータストレージ技術を含むとき、失敗待ち行列639も含む。一実施形態では、メモリ670及びメモリ680のうちの1つは、失敗ステータス応答を提供するNVDIMM-Pである。
【0056】
一部の実施形態では、要求待ち行列632は、受け取ったメモリアクセス要求を格納するための1つ以上の待ち行列と、受け取った要求から変換され、1つ以上の待ち行列から選択された、予定されたメモリアクセスコマンドとを格納するための別個の待ち行列を含む。スケジューラ636は、メモリ670及びメモリ680への順不同の発行のために要求待ち行列632に格納されたメモリアクセスコマンドを選択するための制御ロジックを含む。したがって、メモリコントローラ630は、メモリ670及びメモリ680へのメモリアクセス要求の順不同の発行をサポートする。
【0057】
多様な実施形態では、メモリコントローラ130の中のスケジューラ636は、サービスの質(QoS)または他の優先度情報、経過時間、プロセスのまたはスレッドの識別子(ID)、メモリアクセスコマンドがメモリ670に発行されてからの時間量、メモリアクセスコマンドがメモリ680に発行されてからの時間量、及び同じメモリチャネルをターゲットとする、同じランクをターゲットとする、同じバンクをターゲットとする、及び/又は同じページをターゲットとするなどの他の格納されている要求との関係性に基づいて、格納されているメモリアクセスコマンドの発行を予定する。一部の実施形態では、スケジューラ636は、基準のそれぞれに所与の重みを割り当て、加重和を実行する。最大の和を有するメモリアクセスコマンドまたはステータスアクセスコマンドが、発行のために選択される。
【0058】
多様な実施形態では、通信ファブリック620は、クライアント610とメモリコントローラ630との間でトラフィックを前後に転送し、それぞれの通信プロトコルをサポートするインタフェースを含む。一部の実施形態では、通信ファブリック620は、少なくとも要求及び応答を格納するための待ち行列と、内部ネットワーク全体で要求を送信する前に受け取った要求間でアービトレーションするための選択ロジックと、パケットを構築し、復号するためのロジックと、パケットのためのルートを選択するためのロジックとを含む。
【0059】
示される実施形態では、クライアント610は、中央演算処理装置(CPU)612、グラフィックスプロセッシングユニット(GPU)614、及びハブ616を含む。ハブ616は、マルチメディアエンジン618と通信するために使用される。CPU612、GPU614、及びマルチメディアエンジン618は、アプリケーションを処理できるコンピューティングリソースの例である。示されていないが、他の実施形態では、他のタイプのコンピューティングリソースがクライアント610に含まれる。一部の実施形態では、CPU612の中の1つ以上のプロセッサコアのそれぞれが、所与の選択されたインストラクションセットアーキテクチャ(ISA)に従って命令を実行するための回路を含む。多様な実施形態では、CPU612の中のプロセッサコアのそれぞれは、所与のISAの命令を処理するために使用されるスーパースカラ、マルチスレッドマイクロアーキテクチャを含む。
【0060】
一実施形態では、GPU 614は、相当数の並列実行レーンを備えた高並行データマイクロアーキテクチャを含む。一実施形態では、マイクロアーキテクチャは、並列実行レーンのために単一命令複数データ(SIMD)パイプラインを使用する。マルチメディアエンジン618は、マルチメディアアプリケーションのために音声データ及び視覚データを処理するためのプロセッサを含む。一部の実施形態では、コンピューティングシステム600のアドレス空間は、少なくともCPU612、GPU614及びハブ616、ならびに入出力(I/O)周辺デバイス(図示せず)及び他のタイプのコンピューティングリソースなどの1つ以上の他の構成要素との間で分割される。メモリマップは、どのアドレスがどの構成要素にマッピングされるのか、したがって特定のアドレスに対するメモリ要求がCPU612、GPU614、及びハブ616のどの1つにルーティングされるべきなのかを決定するために維持される。
【0061】
多様な実施形態では、メモリ670及びメモリ680の1つ以上は、I/Oコントローラ及びバス660及びメモリバス650を通してディスクメモリ662からのデータで充填される。要求されたブロックを含む対応するキャッシュフィルラインは、元のメモリアクセス要求を完了するために、メモリ670及びメモリ680の1つ以上から、クライアント610の中のキャッシュメモリサブシステムの対応する1つに伝達される。キャッシュフィルラインは、キャッシュの1つ以上のレベルに配置される。一実施形態では、ディスクメモリ662は、データの不揮発性の二次ストレージを提供する。一実施形態では、ディスクメモリ662は、1つ以上のハードディスクドライブ(HDD)を含む。他の実施形態では、ディスクメモリ662は、ソリッドステートディスク(SSD)を含む。
【0062】
図7を参照すると、メモリコントローラ700の一実施形態の一般化された図が示される。示される実施形態では、メモリコントローラ700は、通信ファブリックを介するクライアントへのインタフェース710、受け取ったメモリアクセス要求及び受け取った応答を格納するための待ち行列720、制御ユニット750、ならびにメモリデータバス及びメモリチャネルを介する、それぞれが異なるメモリ技術を使用する複数のメモリデバイスへのインタフェース780を含む。インタフェース710、780、及び782のそれぞれは、それぞれの通信プロトコルをサポートする。一実施形態では、インタフェース780は、インタフェース710を介して受け取ったメモリ要求に対応するメモリアクセスコマンドを、第1のメモリタイプのデータストレージ技術を含むメモリデバイスに送信するためのメモリコマンドバスへのインタフェースである。一実施形態では、インタフェース782は、メモリコントローラ700と、第1のメモリタイプとは異なる第2のメモリタイプのデータストレージ技術を含む別のメモリデバイスとの間でデータを転送するためのメモリデータバスへのインタフェースである。多様な実施形態では、第1のメモリタイプのアクセスレイテンシは、少なくとも閾値時間量分、第2のメモリタイプのアクセスレイテンシとは異なる。
【0063】
示される実施形態では、待ち行列720は、要求待ち行列730、応答待ち行列740、及び失敗待ち行列742を含む。一実施形態では、待ち行列720は、第1のメモリタイプをターゲットとする、受け取った読み取り要求を格納するための第1の読み取り待ち行列732、及び第2のメモリタイプをターゲットとする、受け取った読み取り要求を格納するための第2の読み取り待ち行列734を含む。2つの読み取り待ち行列が、2つの異なるメモリタイプをターゲットとする読み取り要求を受け取るために示されているが、他の実施形態では、別の数の読み取り待ち行列が、別の数の異なるメモリタイプをターゲットとする読み取り要求を受け取るために使用される。さらに、待ち行列720は、第1のメモリタイプをターゲットとする、受け取った書き込み要求を格納するための第1の書き込み待ち行列736、及び第2のメモリタイプをターゲットとする、受け取った書き込み要求を格納するための第2の書き込み待ち行列738を含む。一部の実施形態では、待ち行列720は、第1のメモリタイプ及び第2のメモリタイプの1つ以上がアクセスに対する応答として失敗ステータスを提供するデータストレージ技術を含むとき、失敗待ち行列742も含む。一実施形態では、第1のメモリタイプ及び第2のメモリタイプの1つは、失敗ステータス応答を提供するNVDIMM-Pである。一実施形態では、待ち行列720は、待ち行列732~738の1つ以上、または1つが使用される場合には一元化された待ち行列から選択された、予定されたメモリアクセス要求を格納するための待ち行列739を含む。
【0064】
一部の実施形態では、読み取りスケジューラ752は、第2の読み取り待ち行列734から順不同で読み取り要求を選択するためだけではなく、第1の読み取り待ち行列732から順不同で読み取り要求を選択するためのアービトレーションロジックも含む。一実施形態では、読み取りスケジューラ752は、それぞれの要求が第1の読み取り待ち行列732または第2の読み取り待ち行列734のどちらかから所与のクロックサイクルで予定するために利用可能であるとき、第1の読み取り待ち行列732または第2の読み取り待ち行列734のどちらかから要求を選択する。一部の実施形態では、読み取りスケジューラ752は、サービスの質(QoS)または他の優先度情報、経過時間、プロセスのまたはスレッドの識別子(ID)、及び同じメモリチャネルをターゲットとする、同じランクをターゲットとする、同じバンクをターゲットとする、及び/または同じページをターゲットとするなどの他の格納された要求との関係性に基づいた第1のメモリタイプ及び第2のメモリタイプの1つに対する順不同の発行に対する読み取り要求を予定する。
【0065】
第1のメモリタイプ及び第2のメモリタイプの複数の決定的なアクセスレイテンシにも関わらずメモリデータバス上でデータ衝突を回避するために、一実施形態では、読み取りスケジューラ752は、メモリデータバスが利用可能である次の所与の時点を決定する。一部の実施形態では、時点はクロックサイクルで測定される。読み取りスケジューラ752は、所与の時点で応答データを提供するために、第1の読み取り待ち行列732に格納された、選択された読み取り要求に対応する第1のメモリアクセスコマンドを予定するための十分な時間があるかどうかを判断する。さらに、読み取りスケジューラ752は、所与の時点で応答データを提供するために、第2の読み取り待ち行列734に格納された、選択された読み取り要求に対応する第2のメモリアクセスコマンドを予定するための十分な時間があるかどうかも判断する。言い換えると、読み取りスケジューラ752は、第1の読み取り待ち行列732または第2の読み取り待ち行列734のどちらかによって受け取られた新しいメモリアクセスコマンドを、新しいメモリアクセスコマンドに対する応答が、所与の時点でメモリデータバス上で受け取られるように、第1のメモリデバイスまたは第2のメモリデバイスのどちらかへの発行のために予定できるかどうかを判断する。多様な実施形態では、所与の時点は、メモリデータバスが、メモリデータバス上で駆動されるデータを有する予定ではなく、まだスケジューリングのために検討されていない次に利用可能な時点である。
【0066】
一部の実施形態では、第1のメモリタイプ及び第2のメモリタイプの1つ以上のアクセスレイテンシは非決定的であるが、応答は決定的なレイテンシを有する。応答は、有効なデータが応答に含まれているかどうかを記述する表示とともに決定的なレイテンシの後に返される。有効なデータが応答に含まれていない場合、再試行が後で試される。したがって、メモリアクセスコマンドは、後の再試行のために失敗待ち行列742に格納される。上述のように、他のコマンドが、ときおりメモリアクセスコマンドとともに追加で使用される。これらの他のコマンドも、メモリアクセスコマンドのレイテンシにレイテンシを加える。
【0067】
所与の時点でメモリデータバス上で応答データを提供するために、第1のアクセスコマンド及び第2のアクセスコマンドのうちの少なくとも1つを発行するための十分な時間がある場合、読み取りスケジューラ752は、第1のメモリアクセスコマンド及び第2のメモリアクセスコマンドの1つを選択する。優先度レベル、経過時間などの上述した基準がスケジューラ752によって使用できる。さらに、加重値が使用できる。一実施形態では、読み取りスケジューラ752は、選択したアクセスコマンドを、メモリチャネルを介して対応するメモリタイプに送信する前に、選択したアクセスコマンドを待ち行列739に入れる。第1の読み取り待ち行列732または第2の読み取り待ち行列734のどちらかに格納された保留中の新しいメモリアクセスコマンドを、所与の時点での発行のために予定できるかどうかを判断するために、一実施形態で、読み取りスケジューラ752は、新しいメモリアクセスコマンドの応答レイテンシがNクロックサイクルであると判断し、Nは整数である。読み取りスケジューラ752は、所与の時点のNクロックサイクル前に相当するより早い時点を識別し、メモリコマンドバスがそのより早い時点で利用可能であるかどうかを判断する。
【0068】
読み取りスケジューラ752が、上記の新しいメモリアクセスコマンドが予定されるほど十分な時間があると判断する場合、次いで読み取りスケジューラ752は、より早い時点での発行のために新しいメモリアクセスコマンドを予定し、メモリデータバスが所与の時点で利用不可である旨の表示を格納する。一部の実施形態では、どの時点でメモリデータバスが利用可能であるのか、及びどの時点でメモリデータバスが利用不可であるのかを示すために、ビットのベクトルがレジスタに格納される。例えば、多様な実施形態では、ビットのベクトルの各ビットは、特定のタイムスロットに相当する。スケジューラが、データが所与のタイムスロット(複数可)中に伝達されると判断する場合(例えば、メモリに転送される書き込みデータ、またはメモリから取り出されている読み取りデータ)、スケジューラは、データバスがその時点でビジーとなる予定であることを示すためにベクトルの中に対応するタイムスロットビット(複数可)を設定する。例えば、一部の実施形態では、「0」の値を有するビットは、データがその時点でデータバス上にある予定ではない(つまり、データバスはビジーではない)ことを示す。このような実施形態では、タイムスロットのビットを設定することにより、ビットは「1」の値を有する。他の実施形態では、これらの値は、「0」がデータバス上のビジー期間を表示し、「1」がビジーではない期間を表示するように逆転される場合がある。このような実施形態では、ビットを設定すると、ビットは「1」の値を有することになるであろう。スケジューラは、ビットのベクトルを参照することによって、所与のタイムスロットが新しい活動を予定するために利用可能であるかどうかを迅速に判断できる。一実施形態では、レジスタは、どの時点がスケジューリングにまだ検討されていないのか、及びどの時点がスケジューリングに検討されたのかを記述する表示を格納するために使用される。多様な実施形態では、これらの格納された表示は、発行のためのコマンドの将来のスケジューリングのために他の所与の時点を決定するために使用できる。
【0069】
一部の実施形態では、第1のメモリタイプ及び第2のメモリタイプの複数の決定的なアクセスレイテンシにも関わらずメモリバス上でのデータ衝突を回避するために、読み取りスケジューラ752は、メモリデータバスが利用可能である次の所与の時点を初期に決定するのと対照的に、メモリコマンドバスが利用可能である次の時点を決定する。再び、一部の実施形態では、時点はクロックサイクルで測定される。一部の実施形態では、読み取りスケジューラ752は、メモリコマンドバスが利用可能である次の時点にそれぞれのレイテンシを加えることによって、第1の読み取り待ち行列732及び第2の読み取り待ち行列734に格納されたそれぞれ異なるタイプの保留中のメモリアクセスコマンドのためのそれぞれの所与の時点を決定する。
【0070】
第1の読み取り待ち行列732または第2の読み取り待ち行列734のどちらかに格納された新しい保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の時点での発行のために予定できるかどうかを判断するために、一実施形態では、読み取りスケジューラ752は、新しいメモリアクセスコマンドの応答レイテンシがNクロックサイクルであると判断し、Nは整数である。読み取りスケジューラ752は、メモリコマンドバスが利用可能であるNクロックサイクル後の時点に相当する所与の時点を識別する。その後、読み取りスケジューラ752は、メモリデータバスが、その後の所与の時点で利用可能であるかどうかを判断する。
【0071】
一部の実施形態では、読み取りスケジューラ752は、第1の読み取り待ち行列732及び第2の読み取り待ち行列734に格納された1つ以上の保留中のメモリアクセスコマンドのそれぞれについて、それぞれ1つ以上の所与の時点ごとにメモリデータバスが利用可能であるかどうかを判断するために、上述のように格納されたビットのベクトルを使用する。メモリデータバスが、単一の保留中のメモリアクセスコマンドのためだけにそれぞれの所与の時点の間に利用可能である場合、次いで読み取りスケジューラ752は、その単一の保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の所与の時点に予定する。メモリデータバスが複数の保留中のメモリアクセスコマンドのためにそれぞれの所与の時点の間に利用可能である場合、次いで読み取りスケジューラ752は、優先度レベル、経過時間などの上述の基準に基づいて、発行するための保留中のメモリアクセスコマンドの1つを選択する。読み取りスケジューラ752は、メモリコマンドバスが利用可能である次の時点に、選択した保留中のメモリアクセスコマンドを予定する。
【0072】
書き込みスケジューラ754は、読み取りスケジューラ752によって使用されるのと同様の選択ロジックを、第1の書き込み待ち行列736及び第2の書き込み待ち行列738のために含む。多様な実施形態では、書き込みスケジューラ754も、共有メモリデータバス上で駆動されるデータによって引き起こされるデータ衝突を検討する。スケジューラ752によって使用される決定アルゴリズムを実装する制御ロジックも、書き込みスケジューラ754によって使用される。一実施形態では、応答スケジューラ756は、優先度に基づいて応答を順不同でクライアントに発行するための類似するロジックを含む。一部の実施形態では、受け取った応答データは、応答スケジューラ756が、第1の読み取り待ち行列732または第2の読み取り待ち行列734のどちらかに格納されたどのコマンドが、応答データと関連付けられているのかを識別するために使用するタグまたは他の識別子を含む。他の実施形態では、メモリデータバス上の要求データの到着のタイミングは、どのコマンドが応答データと関連付けられているのかを識別するために、応答スケジューラ756によって使用される。したがって、要求データはコマンドの発行に対応して順不同で到着するが、応答スケジューラ756は、受け取ったどのデータがどのコマンドに属するのかを追跡できる。
【0073】
一部の実施形態では、読み取りスケジューラ752が発行するための所与のコマンドを予定すると、応答スケジューラ756は、要求された読み取りデータが共有メモリデータバス上に到着する予定である所与の時点を決定する。一実施形態では、応答スケジューラ756は、所与のコマンドのレイテンシを、読み取りスケジューラ752が所与のコマンドを発行することを予定する時点に加える。一部の実施形態では、応答スケジューラ756は、識別子を生成する。一部の実施形態では、識別子は、所与のコマンドに対応する情報を格納する要求待ち行列の中のエントリの表示である。他の実施形態では、識別子は、スレッド識別子、及び所与のコマンドに対応するメモリ要求のターゲットアドレスの一部分の1つ以上の組み合わせである。応答スケジューラ756は、識別子の、所与の時点との関連付けを格納する。一実施形態では、表が使用される。したがって、応答スケジューラ756は、所与のコマンドに挿入されたタグに基づいてまたは到着する要求された読み取りデータと関連付けられたパケットで、よりもむしろ、所与の時点に基づいて共有メモリデータバス上に到着する要求された読み取りデータで、所与のコマンドを識別できる。
【0074】
一部の実施形態では、制御レジスタ770は、カレントモードの表示を格納する。例えば、オフチップメモリデータバス及びメモリデバイスは、所与のときに読み取りモードまたは書き込みモードのどちらかをサポートする。したがって、トラフィックは、カレントモード中に所与の単一の方向でルーティングされ、データバスターンアラウンドレイテンシの後にカレントモードが変更されると、方向を変更する。多様な実施形態では、制御レジスタ770は、読み取りモード中に送信する読み取り要求の閾値数(読み取りバースト長)を格納する。一部の実施形態では、制御レジスタ770は、発行するために待ち行列732~738に格納された要求を選択するための、読み取りスケジューラ752及び書き込みスケジューラ754の中の選択アルゴリズムによって使用される基準の重みを格納する。
【0075】
ここで
図8を参照すると、2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法800の一実施形態が示される。説明のために、(
図9~
図14においてだけではなく)本実施形態のステップも順番に示される。しかしながら、説明する方法の多様な実施形態では、説明する要素の1つ以上が、示されているのとは異なる順序で同時に実行される、または完全に省略されることに留意されたい。他の追加の要素も、所望されるように実行される。本明細書に説明される多様なシステムまたは装置のいずれも、方法800を実装するように構成される。
【0076】
ノード内の1つ以上のクライアントは、コンピュータプログラム、つまりソフトウェアアプリケーションを実行する。コンピューティングリソースは、所与のメモリアクセス要求が、1つ以上のクライアントの所与のクライアント内のキャッシュメモリサブシステム内で失敗すると判断する。クライアントは、2つの異なるメモリのそれぞれに接続されたメモリチャネルを有するメモリコントローラを介して、その2つの異なるメモリによって実装されるシステムメモリにメモリアクセス要求を送信する。第1のタイプのメモリの1つ以上のアクセスレイテンシと、第2のタイプのメモリの1つ以上のアクセスレイテンシとの差は、閾値時間量を超える。所与のメモリチャネルに接続された第1のタイプのメモリに対するメモリ要求は、それらが受け取られると格納される(ブロック802)。所与のメモリチャネルに接続された第2のタイプのメモリに対するメモリ要求は、それらが受け取られると格納される(ブロック804)。
【0077】
第1のタイプのメモリに対するメモリ要求は、少なくとも優先度及びメモリ要求のターゲットに基づいて、順不同の発行についてマークされる(ブロック806)。第2のタイプのメモリに対するメモリ要求は、少なくとも優先度及びメモリ要求のターゲットに基づいて順不同の発行についてマークされる(ブロック808)。したがって、メモリコントローラは、第1のメモリ及び第2のメモリのそれぞれについて順不同の発行をサポートする。メモリ要求は、所与の時点で応答データを提供するように発行のために予定される(ブロック810)。例えば、メモリ要求は、異なるアクセスレイテンシに関わらず、共有メモリデータバス上でデータ衝突なしに、混在して予定される。
【0078】
多様な実施形態では、スケジューラまたはメモリコントローラの中の他の制御ロジックは、第1のメモリタイプのための第1のコマンド及び第2のメモリタイプのための第2のコマンドなどの2つの保留中のメモリアクセスコマンドがあるかどうかを判断する。スケジューラは、共有メモリデータバス上でデータ衝突を引き起こさずに、第1のコマンド及び第2のコマンドのそれぞれを発行できるかどうかを判断する。例えば、第1のタイプのメモリ及び第2のタイプのメモリのそれぞれのアクセスレイテンシに加えて、第1のコマンド及び第2のコマンドの選択したコマンドを発行するための時点に基づいて、メモリコントローラは、読み取り応答データまたは書き込みデータが共有メモリデータバスに到着する予定である時点を追跡する。一部の実施形態では、時点はクロックサイクルで測定される。
【0079】
第1のコマンド及び第2のコマンドのどちらかを選択しても共有メモリデータバスでデータ衝突が予定されないであろう場合、次いで第1のコマンド及び第2のコマンドのそれぞれは発行の候補のままである。このような場合、スケジューラは、アービトレーションロジックに基づいて第1のコマンド及び第2のコマンドからコマンドを選択する。他の実施形態では、第1のコマンドを発行するのか、それとも第2のコマンドを発行するのかを判断することは、読み取り応答データまたは書き込みデータが共有メモリデータバスで駆動される特定の所与の時点を選択することで開始する。
【0080】
ここで
図9を参照すると、2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法900の一実施形態が示される。読み取り応答データがメモリデータバス上で駆動される次の所与の時点が識別される(ブロック902)。例えば、アクセスレイテンシと、各発行済みのメモリアクセスコマンド及びステータスアクセスコマンドごとに返す要求されたデータの予定量の両方とも、次の所与の時点を決定するときに検討される。一部の実施形態では、時点はクロックサイクルで測定される。
【0081】
読み取り応答データが、すでに所与の時点に到達する予定である場合(条件ブロック904の「yes」分岐)、次いで方法900の制御フローは、次の所与の時点が識別されるブロック902に戻る。例えば、現在選択されているクロックサイクル後の次のクロックサイクルが検討される。代わりに、2つの異なるメモリの1つから到着する予定である要求された読み取りデータのために消費される所与のクロックサイクル数に等しいカウントが、現在のクロックサイクルに追加される。読み取り応答データが所与の時点のために到着する予定ではない場合(条件ブロック904の「no」分岐)、次いで所与の時点で応答データを提供するために、第1のメモリタイプのためのメモリアクセスコマンドを予定するための十分な時間があるかどうかが判断される(ブロック906)。続いて、所与の時点で応答データを提供するために、第1のメモリタイプとは異なる第2のメモリタイプのためのメモリアクセスコマンドを予定するための十分な時間があるかどうかが判断される(ブロック908)。
【0082】
一部の実施形態では、所与の時点でデータを提供するために、第2のメモリタイプのためのステータスアクセスコマンドを予定するための十分な時間があるかどうかも判断される(ブロック910)。一部の実施形態では、ステータスアクセスコマンドのアクセスレイテンシは、第2のメモリタイプのためのメモリアクセスコマンドのアクセスレイテンシとは異なる。コマンドは、所与の時点で応答データを提供できる候補コマンドから選択される(ブロック912)。多様な実施形態では、スケジューラは、優先度レベル、経過時間などの上述の基準に基づいて発行するための次のメモリアクセスコマンドまたはステータスアクセスコマンドを選択する。選択したコマンドは、選択したコマンドが所与の時点で応答データを提供できるようにする時点での発行のために予定される(ブロック914)。例えば、メモリチャネルを有するメモリコントローラのためのスケジューラは、発行するために選択したコマンドを準備するために使用される考えられる追加のコマンド、ならびにメモリアクセスコマンド及びステータスアクセスコマンドを発行のために予定するときのそのそれぞれのレイテンシを考慮に入れる。
【0083】
上述のように、方法900は、第1のメモリタイプ及び第2のメモリタイプの複数の決定的なアクセスレイテンシにも関わらず、メモリデータバス上でデータ衝突を回避するためのステップを説明する。しかしながら、上述のように、他の実施形態では、メモリチャネルを有するメモリコントローラのためのスケジューラは、メモリデータバスが利用可能である次の所与の時点を初期に決定することと対照的に、メモリコマンドバスが利用可能である次の時点を決定する。一部の実施形態では、時点はクロックサイクルで測定される。一部の実施形態では、スケジューラは、メモリコマンドバスが利用可能である次の時点にそれぞれのレイテンシを加えることによって、それぞれ異なるタイプの保留中のメモリアクセスコマンドのためのそれぞれの所与の時点を決定する。
【0084】
新しい保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の時点での発行のために予定できるかどうかを判断するために、一実施形態では、スケジューラは、新規メモリアクセスコマンドの応答レイテンシがNクロックサイクルであると判断し、Nは整数である。スケジューラは、メモリコマンドバスが利用可能であるNクロックサイクル後の時点に相当する後の所与の時点を識別する。その後、スケジューラは、メモリデータバスが後の所与の時点で利用可能であるかどうかを判断する。
【0085】
メモリデータバスが、単一の保留中のメモリアクセスコマンドのためだけにそれぞれの所与の時点の間に利用可能である場合、次いでスケジューラは、その単一の保留中のメモリアクセスコマンドを、メモリコマンドバスが利用可能である次の時点に予定する。メモリデータバスが複数の保留中のメモリアクセスコマンドのためにそれぞれの所与の時点の間に利用可能である場合、次いでスケジューラは、優先度レベル、経過時間などの上述の基準に基づいて、発行するための保留中のメモリアクセスコマンドの1つを選択する。スケジューラは、メモリコマンドバスが利用可能である次の時点に、選択した保留中のメモリアクセスコマンドを予定する。
【0086】
方法1000~1200のための以下の説明は、メモリデータバスが利用可能である次の所与の時点を最初に決定し、続いてメモリコマンドバス上で発行されるメモリアクセスコマンドを予定するためにより早い時点を決定するためのステップを説明する。しかしながら、多様な他の実施形態では、上述のように、スケジューラは、メモリコマンドバスが利用可能である次の時点を決定し、続いて読み取り応答データが、衝突なしにメモリデータバス上に到着する予定である後の時点を決定する。方法1000~1200のステップは、読み取りアクセスコマンドに関して説明されるが、他の実施形態では、類似するロジック及びステップが、書き込みデータは共有メモリデータバスに配置され、読み取り応答データまたは共有メモリデータバス上で駆動される他の書き込みアクセスコマンドの他の書き込みデータのどちらかとのデータ衝突が発生する場合がある書き込みアクセスコマンドのために使用される。
【0087】
ここで
図10を参照すると、2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法1000の一実施形態が示される。アクセスコマンドを選択し、選択したアクセスコマンドがターゲットとされる所与の時点で応答データを提供できるようにする時点での発行のためにアクセスコマンドを予定するために、特定のタイミング値が評価される。一部の実施形態では、以下のステップは、(
図9の)方法900のブロック914の後に実行される。第1の時間量は、コマンド発行のための所与の時点と、第1のメモリタイプのために予定された第1のアクセスコマンドのための直近の時点との間で決定される(ブロック1002)。第1のメモリタイプのアクセスコマンドの起こり得る次の発行に備えるための任意の必要な追加のコマンドのレイテンシは、第1のメモリタイプのためのアクセスコマンドの第1のレイテンシに加えられる(ブロック1004)。類似するステップは、第2のメモリタイプのためのアクセスコマンドについて実行される。例えば、第2の時間量は、所与の時点と、第2のメモリタイプのために予定された第2のアクセスコマンドのための直近の時点との間で決定される(ブロック1006)。第2のメモリタイプのためのアクセスコマンドの起こり得る次の発行に備えるための任意の必要な追加のコマンドのレイテンシは、第2のメモリタイプのためのアクセスコマンドの第2のレイテンシに加えられる(ブロック1008)。
【0088】
第3の時間量は、所与の時点と、第2のメモリタイプの予定された第3のアクセスコマンドのための直近の時点との間で決定される(ブロック1010)。第2のメモリタイプのための第3のアクセスコマンドの起こり得る次の発行に備えるための任意の必要な追加のコマンドのレイテンシは、第2のメモリタイプのための第3のアクセスコマンドの第3のレイテンシに加えられる(ブロック1012)。第1の時間量、第2の時間量、及び第3の時間量のそれぞれは、第1のレイテンシ、第2のレイテンシ、及び第3のレイテンシのそれぞれ1つに比較される(ブロック1014)。
【0089】
ここで
図11を参照すると、2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法1100の一実施形態が示される。アクセスコマンドを選択し、選択したアクセスコマンドがターゲットとされた所与の時点で応答データを提供できるようにする時点での発行のためにアクセスコマンドを予定するために、タイミング値の特定の比較が行われる。一部の実施形態では、以下のステップは、(
図10の)方法1000のブロック1014の後に実行される。
【0090】
第1のレイテンシが、第1の時間量よりも大きくない場合(条件ブロック1102の「no」分岐)、次いで第1のメモリタイプの第1のメモリアクセスコマンドは、発行のために候補コマンドの集合に挿入される(ブロック1104)。言い換えると、第1のメモリタイプのためのメモリアクセスコマンド及び発行のためにメモリアクセスコマンドを準備するために使用される任意の追加のコマンドの蓄積されたレイテンシが、第1のメモリタイプのための任意のコマンドの最後の発行と、所与の時点との間の時間量以下である場合、次いで第1のメモリタイプのためのメモリアクセスコマンドを発行するための十分な時間がある。例えば、再び(
図5の)タイミング
図500を参照すると、CC8での「READ C」の発行と、CC4による「READ B」の発行の完了との間には少なくとも4クロックサイクルがある必要がある。
【0091】
第1のレイテンシが、第1の時間量よりも大きい場合(条件ブロック1102の「yes」分岐)、次いで第1のメモリタイプのための第1のメモリアクセスコマンドは、発行のための候補コマンドとしての検討から外される(ブロック1106)。類似するステップは、第2のメモリタイプのための第2のメモリアクセスコマンドについて実行される。例えば、第2のレイテンシが、第2の時間量よりも大きくない場合(条件ブロック1108の「no」分岐)、次いで第2のメモリタイプの第2のメモリアクセスコマンドは、発行のため2の候補コマンドの集合に挿入される(ブロック1110)。それ以外の場合、第2のレイテンシが、第2の時間量よりも大きい場合(条件ブロック1108の「yes」分岐)、次いで第2のメモリタイプのための第2のメモリアクセスコマンドは、発行のための候補コマンドの集合から削除される(ブロック1112)。
【0092】
類似するステップは、第2のメモリタイプのための第3のメモリアクセスコマンドについて実行される。しかしながら、一部の実施形態では、要求された読み取りデータが、対応する元のメモリアクセスコマンドに対してすでに返されたかどうかに関してチェックが行われる。(
図4の)タイミング
図400を再び簡略に参照すると、要求された読み取りデータが元のトランザクション読み取りコマンド「READ B」に対して返されなかったので、読み取りコマンド「SREAD B」が発行される。CC7で、要求された読み取りデータは到着する予定であるが、それは第2のメモリタイプから返されなかった。しかしながら、要求された読み取りデータは、CC9で予定された所与の時点で返されたので、読み取りコマンド「READ D」に対して後続の読み取りコマンドは発行されない。一部の実施形態では、メモリコントローラは、読み取りアクセスコマンドの応答データが現在第1のメモリタイプ及び第2のメモリタイプの特定のメモリタイプに利用可能であるかどうかを記述する別のチャネルまたはリンクインタフェース上の表示を受け取る。他の実施形態では、メモリコントローラは、応答データが準備完了しているかどうかを判断するために推測読み取りコマンドを発行する。
【0093】
第3のレイテンシが第3の時間量よりも大きくなく(条件ブロック1114の「no」分岐)、対応する応答データがまだ返ってこなかったと判断される場合(条件ブロック1116の「no」分岐)、次いで第2のメモリタイプのための第3のメモリアクセスコマンドは、発行のための候補コマンドの集合に挿入される(ブロック1118)。第3のレイテンシが第3の時間量よりも大きくなく(条件ブロック1114の「no」分岐)、対応する応答データが返ってきたと判断される場合(条件ブロック1116の「yes」分岐)、次いで第2のメモリタイプのための第3のメモリアクセスコマンドは、発行のための候補コマンドの集合から削除される(ブロック1120)。同様に、第3のレイテンシが第3の時間量より大きい場合(条件ブロック1114の「yes」分岐)、次いで第2のメモリタイプのための第3のメモリアクセスコマンドは、発行のための候補コマンドの集合から削除される(ブロック1120)。
【0094】
ここで
図12を参照すると、2つの異なるメモリタイプへの発行に対するメモリ要求を予定するための方法1200の一実施形態が示される。アクセスコマンドを選択し、選択したアクセスコマンドがターゲットとされる所与の時点で応答データを提供できるようにする時点で発行のためのアクセスコマンドを予定するために、認定された候補コマンドの集合の中でアービトレーションが行われる。一部の実施形態では、以下のステップは、(
図11の)方法1100のステップの後に実行される。重みは、発行のための候補コマンドの集合からコマンドを選択するために使用される基準に割り当てられる(ブロック1202)。
【0095】
上述のように、基準は、QoSまたは他の優先度情報、経過時間、プロセスのまたはスレッドの識別子(ID)、メモリアクセスコマンドが第1のメモリタイプに発行されてからの時間量、及びメモリアクセスコマンドまたはステータスアクセスコマンドが第2のメモリタイプに発行されてからの時間量の1つ以上を含む。一部の実施形態では、プログラム可能な制御レジスタ及びステータスレジスタが、選択した基準に割り当てられた重みを格納する。候補コマンドの集合が発行のために決定される(ブロック1204)。一実施形態では、コマンドは、以前の方法900~1100のステップの後に認定される。集合が単一のコマンドを含む場合(条件ブロック1206の「yes」分岐)、次いで単一のコマンドが発行のために選択される(ブロック1208)。
【0096】
集合が複数のコマンドを含む場合(条件ブロック1206の「no」分岐)、次いで単一のコマンドが、重み付けされた基準に基づいて複数の候補の中から選択される(ブロック1210)。上述のように、一部の実施形態では、スケジューラは、基準のそれぞれに所与の重みを割り当て、加重和を実行する。最大の和を有するメモリアクセスコマンドまたはステータスアクセスコマンドが、発行のために選択される。選択したコマンドの発行に備えるための任意の必要な追加のコマンドを含む選択したコマンドの総レイテンシは、読み取り応答データが到着する予定である時点から差し引かれる(ブロック1212)。追加のコマンド及び選択されたアクセスコマンドは、減算を実行することによって見つけられる決定された時点で発行される予定である(ブロック1214)。
【0097】
ここで
図13を参照すると、異なるアクセスレイテンシを有する2つのメモリから順不同で到着する読み取り応答データを識別するための方法1300の一実施形態が示される。多様な実施形態では、メモリの1つ以上は、決定的な応答時間で応答するメモリタイプである。このような実施形態では、応答は要求されたデータを含む、または応答はデータが現在準備完了していないことを示す。一部の実施形態では、このようなメモリタイプはNVDIMM-Pである。
図13の実施形態に示すように、メモリアクセスコマンド(例えば、読み取り要求)が、メモリの1つへの発行のために準備完了している旨の表示が受け取られる(ブロック1302)。次いで、メモリアクセスコマンドがすでに割り当てられた識別子を有しているかどうかに関する判断が行われる(ブロック1304)。すでに識別子がない場合(条件ブロック1306の「no」分岐)、次いで識別子は、生成される、またはそれ以外の場合、メモリアクセスコマンドのために割り当てられる(ブロック1308)。一部の実施形態では、識別子は、メモリアクセスコマンドに対応する情報を格納する要求待ち行列の中のエントリの識別である。他の実施形態では、識別子は、スレッド識別子、及びメモリアクセスコマンドに対応するメモリ要求のターゲットアドレスの一部分の1つ以上の組み合わせである。
【0098】
コマンドにすでに識別子がある場合(条件ブロック1306の「yes」分岐)、次いで方法1300の制御の流れは、メモリアクセスコマンドが発行される予定である第1の時点に関して判断が行われるブロック1310に移動する(ブロック1310)。例えば、スケジューラは、スケジューラが発行のためのメモリアクセスコマンドを選択するとき、この情報を提供できる。
【0099】
さらに、メモリアクセスコマンドの応答レイテンシが決定される(ブロック1312)。多様な実施形態では、第1のメモリタイプ及び第2のメモリタイプのメモリのそれぞれのためのメモリアクセスコマンドは、第2のメモリタイプのためのステータスアクセスコマンドに加えて、決定的なレイテンシを有する。しかしながら、各コマンドは、別のコマンドのレイテンシとは異なるレイテンシを有する場合がある。識別子は、次いでコマンドに対する応答が予想される時間に相当する第2の時点と関連付けられる(ブロック1314)。例えば、コマンドが発行される時間がT1であり、レイテンシが100サイクル(または何らかの他のレイテンシの基準)に等しいと判断される場合、次いで第2の時点はT1+100に等しい。多様な実施形態では、識別子は、それがメモリに伝達されるときにメモリアクセスコマンドとともに含まれない。むしろ、特定のクロックサイクルなどのコマンドに対する応答が到着する予定である時点は、受け取られた応答に対応するアクセスコマンドを識別するために使用される。
【0100】
図14を参照すると、2つの異なるメモリタイプから順不同で到着する応答データを識別するための方法1400の一実施形態が示される。発行されたコマンドにタグまたは他の識別子を挿入することなく、受け取った読み取りデータを対応するアクセスコマンドに適合させるために、応答スケジューラの中の制御ロジックは以下のステップを実行する。一部の実施形態では、以下のステップは、(
図13の)方法1300のステップの後に実行される。
【0101】
識別子及び時点は、発行されたコマンドの読み取り応答データを受け取るために維持される(ブロック1402)。読み取り応答データを受け取るための所与の時点に到達すると(条件ブロック1404の「yes」分岐)、次いで到達した時点に対応する所与のコマンドが、その時点に基づいて識別される(ブロック1406)。一部の実施形態では、番号が付けられたクロックサイクルが時点を表示するために使用される。他の実施形態では、時間の別のカウントまたは基準が使用される。多様な実施形態では、所与の時点は、表の中に索引を付けて、対応するコマンドと関連付けられた識別子を決定するために使用される。例えば、一部の実施形態では、識別子は、メモリアクセスコマンドに対応する情報を格納する要求待ち行列の中のエントリの表示である。他の実施形態では、識別子は、スレッド識別子、及びメモリアクセスコマンドに対応するメモリ要求のターゲットアドレスの一部分の1つ以上の組み合わせである。
【0102】
有効なデータが所与の時点で受け取られると(条件ブロック1408の「yes」分岐)、次いで所与のコマンドを生成した要求者が識別され(ブロック1410)、有効なデータが識別された要求者に送信され(ブロック1412)、所与のコマンドが完了済みとしてマークされる(ブロック1414)。有効なデータが所与の時点で受け取られない場合(条件ブロック1408の「no」分岐)、次いで所与のコマンドは保留中のままである(ブロック1416)。
【0103】
多様な実施形態では、ソフトウェアアプリケーションのプログラム命令は、上述の方法及び/または機構を実装するために使用される。プログラム命令は、Cなどの高水準プログラミング言語でハードウェアの動作を記述する。代わりに、Verilogなどのハードウェア設計言語(HDL)が使用される。プログラム命令は、非一時的コンピュータ可読記憶媒体に格納される。多数のタイプの記憶媒体が利用可能である。記憶媒体は、プログラム実行のためにプログラム命令及び付随するデータをコンピューティングシステムに提供するために、使用中、コンピューティングシステムによってアクセス可能である。コンピューティングシステムは、少なくとも1つ以上のメモリ及びプログラム命令を実行するように構成された1つ以上のプロセッサを含む。
【0104】
上述の実施形態が、実装態様の非限定的な例にすぎないことが強調されるべきである。上記の開示を十分に理解したとき、多くの変形形態及び修正形態が、当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図される。