(58)【調査した分野】(Int.Cl.,DB名)
前記QoSに基づいて前記メモリゾーンに前記メモリアドレス要求を割り振る前記ステップが、前記メモリアドレス要求を受信する高水準オペレーティングシステム(HLOS)を含む、請求項4に記載の方法。
前記QoSが、高水準オペレーティングシステム(HLOS)に関連付けられたアプリケーションプログラムインターフェース(API)を介して宣言される、請求項1に記載の方法。
前記サービス品質(QoS)に基づいて前記メモリゾーンにメモリアドレス要求を割り振る前記ステップが、前記QoSを推定するメモリチャネル最適化モジュールを含む、請求項1に記載の方法。
前記第1のタイプのDRAMまたは前記第2のタイプのDRAMのうちの1つまたは複数が、ダブルデータレート(DDR)メモリを備える、請求項10に記載のシステム。
前記第1のタイプのメモリデバイスが第1のタイプのダブルデータレート(DDR)メモリを備え、前記第2のタイプのメモリデバイスが第2のタイプのDDRメモリを備える、請求項14に記載のメモリシステム。
前記メモリチャネル最適化モジュールが、前記メモリゾーンのうちの1つまたは複数についての現在のパフォーマンスに基づいて、前記QoSを推定するようにさらに動作可能な、請求項14に記載のメモリシステム。
コンピュータ可読プログラムコードを具現化している非一時的なコンピュータ可読記録媒体であって、前記コンピュータ可読プログラムコードが、異なるメモリデバイスにメモリを動的に割り振るための方法を実施するために実行されるように適合され、前記方法が、
2つ以上の異なるメモリデバイスについての帯域幅の比を含むインターリーブ帯域幅比を決定するステップと、
前記インターリーブ帯域幅比に従って前記異なるメモリデバイスをインターリーブし、様々なパフォーマンスレベルを有する2つ以上のメモリゾーンを定義するステップであって、前記異なるメモリデバイスが統合アドレス空間によってアドレス指定される、ステップと、
サービス品質(QoS)に基づいて前記メモリゾーンにメモリアドレス要求を割り振るステップと
を含む、非一時的なコンピュータ可読記録媒体。
前記異なるメモリデバイスが、第1のタイプのダイナミックランダムアクセスメモリ(DRAM)および第2のタイプのDRAMを備える、請求項18に記載の非一時的なコンピュータ可読記録媒体。
前記第1のタイプのDRAMまたは前記第2のタイプのDRAMのうちの1つまたは複数が、ダブルデータレート(DDR)メモリを備える、請求項19に記載の非一時的なコンピュータ可読記録媒体。
前記宣言されたQoSに基づいて前記メモリゾーンに前記メモリアドレス要求を割り振る前記ステップが、前記メモリアドレス要求を受信する高水準オペレーティングシステム(HLOS)を含む、請求項21に記載の非一時的なコンピュータ可読記録媒体。
前記QoSが、高水準オペレーティングシステム(HLOS)に関連付けられたアプリケーションプログラムインターフェース(API)を介して宣言される、請求項18に記載の非一時的なコンピュータ可読記録媒体。
前記QoSが、前記メモリゾーンのうちの1つまたは複数の現在のパフォーマンスに基づく推定QoSを含む、請求項18に記載の非一時的なコンピュータ可読記録媒体。
前記サービス品質(QoS)に基づいて前記メモリゾーンにメモリアドレス要求を割り振る前記ステップが、前記QoSを推定するメモリチャネル最適化モジュールを含む、請求項18に記載の非一時的なコンピュータ可読記録媒体。
【発明を実施するための形態】
【0009】
「例示的な」という単語は、「例、事例、または例示として機能する」ことを意味するように本明細書で使用される。「例示的な」ものとして本明細書に記載されるいずれの態様も、必ずしも他の態様よりも好ましいか、または有利であると解釈されるとは限らない。
【0010】
本明細書では、「アプリケーション」という用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイル、およびパッチなどの実行可能なコンテンツを有するファイルを含む場合もある。加えて、本明細書で言及される「アプリケーション」は、開封される必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなどの、本質的に実行可能ではないファイルを含む場合もある。
【0011】
「コンテンツ」という用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイル、およびパッチなどの実行可能なコンテンツを有するファイルを含む場合もある。加えて、本明細書で言及される「コンテンツ」は、開封される必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなどの、本質的に実行可能ではないファイルを含む場合もある。
【0012】
本明細書で使用されるように、「構成要素」、「データベース」、「モジュール」、「システム」などの用語は、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアのいずれかである、コンピュータ関連のエンティティを指すものとする。たとえば、構成要素は、プロセッサ上で実行されているプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであり得るが、これらに限定されない。例として、コンピューティングデバイス上で実行されているアプリケーションとコンピューティングデバイスの両方は、構成要素であり得る。1つまたは複数の構成要素は、プロセスおよび/または実行スレッド内に存在する場合があり、1つの構成要素は、1つのコンピュータに局所化され、かつ/または2つ以上のコンピュータ間で分散される場合がある。加えて、これらの構成要素は、様々なデータ構造を記憶している様々なコンピュータ可読媒体から実行することができる。構成要素は、1つまたは複数のデータパケット(たとえば、信号によって、ローカルシステム、分散システムにおいて別の構成要素と対話し、かつ/またはインターネットなどのネットワークにわたって他のシステムと対話する、1つの構成要素からのデータ)を有する信号に従うなどする、ローカルプロセスおよび/またはリモートプロセスによって通信することができる。
【0013】
本明細書では、「通信デバイス」、「ワイヤレスデバイス」、「ワイヤレス電話」、「ワイヤレス通信デバイス」、および「ワイヤレスハンドセット」という用語は、互換的に使用される。第3世代(「3G」)ワイヤレス技術および第4世代(「4G」)が出現したことによって、利用可能な帯域幅が拡大されたので、より多様なワイヤレス機能を備えた、より携帯が容易なコンピューティングデバイスが利用可能になっている。したがって、ポータブルコンピューティングデバイスには、携帯電話、ページャ、PDA、スマートフォン、ナビゲーションデバイス、またはワイヤレス接続もしくはワイヤレスリンクを有するハンドヘルドコンピュータが含まれ得る。
【0014】
図1は、(「異なるメモリデバイス」と呼ばれる)異なるデータ帯域幅を有する、異なるタイプまたは同様のタイプのメモリデバイスのうちの2つ以上のメモリデバイスにアクセスするための2つ以上の専用処理ユニットを有する、任意の適切なコンピューティングデバイスに実装され得るメモリ管理アーキテクチャを備えるシステム100を示す。コンピューティングデバイスは、パーソナルコンピュータと、ワークステーションと、サーバと、携帯電話、携帯情報端末(PDA)、携帯ゲーム機、パームトップコンピュータ、またはタブレットコンピュータなどのポータブルコンピューティングデバイス(PCD)と、2つ以上の異なるメモリデバイスを有する任意の他のコンピューティングデバイスとを含む場合がある。下記でより詳細に記載されるように、メモリ管理アーキテクチャは、2つの動作モード、すなわち統合モードおよび離散モードを選択的に提供するように構成される。離散モードでは、メモリ管理アーキテクチャは、上述された従来の方式における「離散アーキテクチャ」として動作し、その中で、各々の専用処理ユニットは、その意図された目的のために最適化された対応するメモリデバイスにアクセスする。たとえば、専用の汎用中央処理装置(CPU)は、最適化されたデータ帯域幅で第1のタイプのメモリデバイスにアクセスすることができ、高パフォーマンスの専用グラフィックス処理装置(GPU)は、より高いデータ帯域幅で第2のタイプのメモリデバイスにアクセスすることができる。統合モードでは、メモリ管理アーキテクチャは、異なるメモリデバイスを統合し、専用処理ユニットが、異なるメモリデバイスまたはそれらの部分の合成された帯域幅で、個別または組合せのいずれかで選択的にアクセスすることを可能にするように構成される。
【0015】
図1の実施形態に示されたように、システム100は、2つの異なるタイプのダイナミックランダムアクセスメモリ(DRAM)デバイス104aおよび104b、ならびにDRAMデバイス104aおよび104bにアクセスすることができる2つ以上の専用処理ユニット(たとえば、CPU108およびGPU106)に電気的に接続された、メモリチャネル最適化モジュール102を備える。GPU106は、電気的な接続110を介してメモリチャネル最適化モジュール102に結合される。CPU108は、電気的な接続112を介してメモリチャネル最適化モジュール102に結合される。メモリチャネル最適化モジュール102はさらに、DRAMデバイス104aおよび104bに結合するための複数のハードウェア接続を備える。ハードウェア接続は、メモリデバイスのタイプに応じて異なる場合がある。
図1の例では、DRAM104aは、それぞれ物理/制御接続116a、116b、116c、および116dに接続する、4つのチャネル114a、114b、114c、および114dをサポートする。DRAM104bは、それぞれ物理/制御接続120aおよび120bに接続する、2つのチャネル118aおよび118bをサポートする。物理/制御接続の数および構成は、メモリアドレスのサイズ(たとえば、32ビット、64ビットなど)を含む、メモリデバイスのタイプに応じて異なる場合があることを諒解されたい。
【0016】
図2は、異なるメモリデバイス(たとえば、DRAMデバイス104aおよび104b)をインターリーブすることによって、統合動作モードを実装するためのメモリチャネル最適化モジュール102によって実行される方法200を示す。ブロック202で、メモリチャネル最適化モジュール102は、DRAMデバイス104aおよび104bについてのデータ帯域幅の比を含むインターリーブ帯域幅比を決定する。データ帯域幅は、コンピューティングデバイスの立上げ時に決定される場合がある。
【0017】
一実施形態では、インターリーブ帯域幅比は、
図3に示された表300などのデータ構造にアクセスすることによって決定される場合がある。表300は、2つのDRAMデバイス104aおよび104bを実装するための異なるメモリデバイスのタイプの様々な組合せについてのインターリーブ帯域幅比を識別する。列302は、DRAMデバイス104aについての様々な構成を載せる。行304は、DRAMデバイス104bについての様々な構成を載せる。この点について、各数値データフィールドは、対応する行/列構成についてのインターリーブ帯域幅比を識別する。たとえば、表300の上部の第1のデータフィールドは、黒色で強調表示され、DRAMデバイス104aについての12.8GB/sの帯域幅、およびDRAMデバイス104bについての6.4GB/sのデータ帯域幅に対応する、2.00のインターリーブ帯域幅比を載せる。
図3では、DRAMデバイス104aおよび104bは、モバイルコンピューティングシステムで使用するために最適化される。DRAMデバイス104bは、低電力ダブルデータレート(LPDDR)メモリデバイスを備え、LPDDRメモリデバイスは、従来、CPU108による専用の使用のための離散モードで使用するために最適化される場合がある。DRAMデバイス104aは、ワイドI/O(ワイドIO)メモリデバイスを備え、ワイドI/Oメモリデバイスは、従来、GPU106による専用の使用のための離散モードで使用するために最適化される場合がある。この点について、数値は、メモリアドレスのビットサイズ(×64、×128、×256、×512)、クロック速度(MHz)、およびデータ帯域幅(GB/s)などの様々なパフォーマンスパラメータに従って、DRAMデバイス104aおよび104bについてのインターリーブ帯域幅比を識別する。メモリチャネル最適化モジュール102は、探索を実行して、DRAMデバイス104aおよび104bに関連付けられたインターリーブ帯域幅比を取得することができる。
図2のブロック202で、メモリチャネル最適化モジュール102は、(たとえば、表300から、またはDRAMデバイス104aおよび104bから直接)数値のデータ帯域幅を決定し、次いでこのデータを使用してインターリーブ帯域幅比を計算することもできる。
【0018】
メモリデバイスのタイプおよびパフォーマンスパラメータは、システム100が実装されているコンピューティングデバイス、システムアプリケーションなどの特定のタイプに応じて異なる場合があることを諒解されたい。
図3に示された例示的なタイプおよびパフォーマンスパラメータは、本明細書では、モバイルシステム内のメモリチャネル最適化モジュール102によって実行される例示的なインターリーブする方法を記載するために使用されるにすぎない。メモリチャネル最適化モジュール102に適した他のランダムアクセスメモリ技術のいくつかの例には、NORフラッシュ、EEPROM、EPROM、DDR-NVM、PSRAM、SRAM、PROM、およびROMが含まれる。様々な代替のインターリービングの方式および方法が実行され得ることを、当業者なら容易に諒解されよう。
【0019】
再び
図2を参照すると、ブロック204で、メモリチャネル最適化モジュール102は、ブロック202で決定されたインターリーブ帯域幅比に従って、DRAMデバイス104aおよび104bをインターリーブする。インターリービングプロセスは、それぞれDRAMデバイス104aおよび104b用のメモリチャネル114a、114b、114c、114d、ならびに118aおよび118bの各々へのトラフィックを、特定のチャネルの利用可能な帯域幅に適合させる。たとえば、DRAMデバイス104aが34GB/sのデータ帯域幅を有し、DRAMデバイス104bが17GB/sのデータ帯域幅を有する場合、インターリーブ帯域幅比は2:1である。これは、DRAMデバイス104aのデータレートがDRAMデバイス104bのデータレートの2倍速いことを意味する。
【0020】
図4に示されたように、メモリチャネル最適化モジュール102は、インターリーブ帯域幅比に従ってDRAMデバイス104aおよび104bについての仮想アドレスマッピングテーブルを構成および維持し、インターリーブ帯域幅比に従ってDRAMデバイス104aおよび104bにトラフィックを分散させるための、1つまたは複数のチャネル再マッピングモジュール400を備える場合がある。例示的なアドレスマッピングテーブル500が
図5に示されている。アドレスマッピングテーブル500は、インターリーブ帯域幅比に基づいて、対応するチャネルおよび/またはメモリデバイスの割当てを有する、(任意のサイズであり得る)アドレスブロックのリスト502を含む。たとえば、
図5では、列504は、1:1のインターリーブ帯域幅比に基づいて、DRAMデバイス104a(「wideio2」)とDRAMデバイス104b(「lpddr3e」)との間の交互の割当てを示す。偶数番号のアドレスブロック(N、N+2、N+4、N+6など)はwideio2に割り当てられ、奇数番号のアドレスブロック(N+1、N+3、N+5など)はlpddr3eに割り当てられる。
【0021】
列506は、2:1のインターリーブ帯域幅比についての別の割当てを示す。DRAMデバイス104a(「wideio2」)がDRAMデバイス104b(「lpddr3e」)の2倍速いレートを有する場合、lpddr3eに割り当てられた1つのアドレスブロックごとに、2つの連続するアドレスブロックがwideio2に割り当てられる。たとえば、アドレスブロックNおよびN+1はwideio2に割り当てられる。ブロックN+2はlpddr3eに割り当てられる。ブロックN+3およびN+4はwideio2に割り当てられる、以下同様。列508は、1:2のインターリーブ帯域幅比についての別の割当てを示し、その中では、DRAMデバイス104b(「lpddr3e」)がDRAMデバイス104a(「wideio2」)の2倍速いので、割当て方式が反転される。
【0022】
再び
図2のフローチャートを参照すると、ブロック206で、GPU106およびCPU108は、メモリチャネル最適化モジュール102にメモリアドレス要求を送ることによって、従来の方式で、インターリーブされたメモリにアクセスすることができる。
図6に示されたように、トラフィックは、アドレスブロックN、N+1、N+2、N+3、N+4、N+5などに対応する要求606、608、610、612、614、616などの入力ストリームとして、チャネル再マッピングロジック600によって受信することができる(
図5)。チャネル再マッピングロジック600は、インターリーブ帯域幅比およびアドレスマッピングテーブル500に含まれている適切な割当て方式(たとえば、列504、506、508など)に従って、DRAMデバイス104aおよび104bにトラフィックを分散させる(ブロック208-
図2)ように構成される。
【0023】
2:1のインターリーブ帯域幅比の上記の例に従って、チャネル再マッピングロジック600は、
図6に示されたように要求606、608、610、612、614、および616を導く。それぞれアドレスブロックN、N+1、N+3、およびN+4向けの要求606、608、612、および614は、DRAMデバイス104aに導くことができる。それぞれアドレスブロックN+2およびN+5向けの要求610および616は、DRAMデバイス104bに導くことができる。このようにして、GPU106およびCPU108から入って来るトラフィックは、DRAMデバイス104a用のメモリチャネル114および/またはDRAMデバイス104b用のメモリチャネル118のうちのいずれの利用可能な帯域幅にも最適に適合することができる。この統合動作モードにより、GPU106およびCPU108が、従来の離散動作モードの「局所化された」高パフォーマンス動作に限定されるのではなく、異なるメモリデバイスの合成された帯域幅に、個別に、かつ/または一括してアクセスすることが可能になる。
【0024】
上述されたように、メモリチャネル最適化モジュール102は、様々な望ましい使用シナリオ、システム設定などに基づいて、統合モードまたは離散モードのいずれかを選択的に有効にするように構成することができる。その上、メモリデバイス全体をインターリーブするのではなく、異なるメモリデバイスの部分をインターリーブすることができることを諒解されたい。
図7は、複数の「論理的な」デバイスまたは「論理的な」ゾーンを作成するために、メモリチャネル最適化モジュール102によって実装することができる、マルチレイヤのインターリーブ技法を示す。2:1のインターリーブ帯域幅比を使用する上記の例に従って、DRAMデバイス104aは、従来GPU106向けに最適化された34GB/sの高パフォーマンス帯域幅を有する、0.5GBのメモリデバイス702および704のペアを備える場合がある。DRAMデバイス104bは、従来CPU108向けに最適化された17GB/sのより低い帯域幅を各々が有する、1GBのメモリデバイス706および2GBのメモリデバイス708を備える場合がある。マルチレイヤのインターリーブ技法は、2つのインターリーブされたゾーン710および712、ならびにインターリーブされていないゾーン714を作成することができる。ゾーン710は、4方向にインターリーブされて、102GB/sの合成された帯域幅で合成された1.5GBを提供することができる。ゾーン712は、2方向にインターリーブされて、34GB/sで合成された1.5GBを提供することができる。ゾーン714は、インターリーブされないで、17GB/sで1GBを提供することができる。インターリーブされたゾーン710および712のコンテンツが、駆逐可能または移動可能なデータ構造およびバッファ用に明示的に指定される場合があり、一方インターリーブされていないゾーン714のコンテンツが、カーネル動作および/または他の低メモリプロセスなどの処理向けに指定される場合があるので、システム100のメモリ管理アーキテクチャと組み合わされたマルチレイヤのインターリーブ技法により、インターリーブされた部分とインターリーブされていない部分との間の遷移が容易になる場合がある。
【0025】
上述されたように、メモリチャネル最適化モジュール102は、任意の望ましいコンピューティングシステムの中に組み込まれる場合がある。
図8は、例示的なポータブルコンピューティングデバイス(PCD)800に組み込まれたメモリチャネル最適化モジュール102を示す。メモリチャネル最適化モジュール102は、ポータブルコンピューティングデバイス800用の設計物の中に個別に製造され、組み込まれる場合がある、システムオンチップ(SoC)または組込みシステムを備える場合がある。
【0026】
図示されたように、PCD800は、マルチコアCPU402Aを含むオンチップシステム322を含む。マルチコアCPU402Aは、第0のコア410、第1のコア412、および第Nのコア414を含む場合がある。コアのうちの1つは、たとえばGPU106を備え、他のコアのうちの1つまたは複数は、CPU108を備える場合がある。代替の例示的な実施形態によれば、CPU402Aは、単一コアのタイプのコアを備え、複数のコアを有するCPUではない場合もあり、その場合、CPU108およびGPU106は、システム100で示されたような専用プロセッサであり得る。
【0027】
ディスプレイコントローラ328およびタッチスクリーンコントローラ330は、GPU106に結合される場合がある。一方、オンチップシステム322の外部にあるタッチスクリーンディスプレイ108は、ディスプレイコントローラ328およびタッチスクリーンコントローラ330に結合される場合がある。
【0028】
図8はさらに、ビデオエンコーダ334、たとえば位相反転線(PAL)エンコーダ、順次式カラーメモリ(SECAM)エンコーダ、または全米テレビジョン方式委員会(NTSC)エンコーダがマルチコアCPU402Aに結合されること示す。さらに、ビデオ増幅器336は、ビデオエンコーダ334およびタッチスクリーンディスプレイ108に結合される。また、ビデオポート338はビデオ増幅器336に結合される。
図8に示されたように、ユニバーサルシリアルバス(USB)コントローラ340は、マルチコアCPU402Aに結合される。また、USBポート342はUSBコントローラ340に結合される。メモリ404Aおよび加入者識別モジュール(SIM)カード346も、マルチコアCPU402Aに結合される場合がある。メモリ404Aは、上述されたように、2つ以上の異なるメモリデバイス(たとえば、DRAMデバイス104aおよび104b)を備える場合がある。メモリチャネル最適化モジュール102は、(たとえば、CPU108およびGPU106を含む)CPU402Aに結合される場合があり、メモリ404Aは、2つ以上の異なるメモリデバイスを備える場合がある。メモリチャネル最適化モジュール102は、個別のシステムオンチップ(SoC)として、またはSoC322の構成要素として組み込まれる場合がある。
【0029】
さらに、
図8に示されたように、デジタルカメラ348は、マルチコアCPU402Aに結合される場合がある。例示的な態様では、デジタルカメラ348は、電荷結合デバイス(CCD)カメラまたは相補型金属酸化物半導体(CMOS)カメラである。
【0030】
図8にさらに示されたように、ステレオオーディオコーダ-デコーダ(コーデック)350は、マルチコアCPU402Aに結合される場合がある。その上、オーディオ増幅器352は、ステレオオーディオコーデック350に結合される場合がある。例示的な態様では、第1のステレオスピーカ354および第2のステレオスピーカ356は、オーディオ増幅器352に結合される。
図8は、マイクロフォン増幅器358がステレオオーディオコーデック350に結合される場合もあることを示す。加えて、マイクロフォン360は、マイクロフォン増幅器358に結合される場合がある。特定の態様では、周波数変調(FM)ラジオチューナ362は、ステレオオーディオコーデック350に結合される場合がある。また、FMアンテナ364は、FMラジオチューナ362に結合される。さらに、ステレオヘッドフォン366は、ステレオオーディオコーデック350に結合される場合がある。
【0031】
図8はさらに、無線周波(RF)トランシーバ368がマルチコアCPU402Aに結合される場合があることを示す。RFスイッチ370は、RFトランシーバ368およびRFアンテナ372に結合される場合がある。
図8に示されたように、キーパッド374は、マルチコアCPU402Aに結合される場合がある。また、マイクロフォン付きモノヘッドセット376は、マルチコアCPU402Aに結合される場合がある。さらに、バイブレータデバイス378は、マルチコアCPU402Aに結合される場合がある。
【0032】
図8はまた、電源380がオンチップシステム322に結合される場合があることを示す。特定の態様では、電源380は、電力を必要とするPCD800の様々な構成要素に電力を供給する直流(DC)電源である。さらに、特定の態様では、電源は、充電式DCバッテリ、または交流(AC)電源に接続されたAC-DC変換器から導出されるDC電源である。
【0033】
図8はさらに、PCD800がデータネットワーク、たとえばローカルエリアネットワーク、パーソナルエリアネットワーク、または任意の他のネットワークにアクセスするために使用され得るネットワークカード388を含む場合もあることを示す。ネットワークカード388は、Bluetooth(登録商標)ネットワークカード、WiFiネットワークカード、パーソナルエリアネットワーク(PAN)カード、パーソナルエリアネットワーク超低電力技術(PeANUT)ネットワークカード、または当技術分野でよく知られている任意の他のネットワークカードであり得る。さらに、ネットワークカード388は、チップに組み込まれる場合があり、すなわち、ネットワークカード388は、チップ内のフルソリューションであり得るし、個別のネットワークカード388ではない場合がある。
【0034】
図8に描写されたように、タッチスクリーンディスプレイ108、ビデオポート338、USBポート342、カメラ348、第1のステレオスピーカ354、第2のステレオスピーカ356、マイクロフォン360、FMアンテナ364、ステレオヘッドフォン366、RFスイッチ370、RFアンテナ372、キーパッド374、モノヘッドセット376、バイブレータ378、および電源380は、オンチップシステム322の外部にある場合がある。
【0035】
図9〜
図13は、高水準オペレーティングシステム(HLOS)環境内の
図1〜
図8に関して上述された再マッピングおよびインターリービングのソリューションの態様を活用するためのシステムおよび方法の様々な代替の実施形態を示す。HLOS環境は、HSAファウンデーションによって発行されたHSA規格で開示されたものなどの、異種コンピューティングプラットフォームまたは異種システムアーキテクチャ(HSA)を提供することができることを諒解されたい。現在の規格、AMDのI/O仮想化技術(IOMMU)仕様(公開番号第48882号、レビジョン2.00、2011年3月24日発行)は、その全体が参照により本明細書に組み込まれる。
【0036】
当技術分野で知られているように、HSAに基づくシステムは、システムメモリの統合ビューを提供するように構成することができる。HSAにより、たとえば、主流のプログラミング言語を使用し、開発者からハードウェア特有のものを隔てて抽象化し、ハードウェア特有のコーディングをハードウェアベンダによる実行にまかせることによって、開発者がより高い抽象化レベルでプログラムすることが可能になる。しかしながら、異なるメモリタイプまたはメモリデバイスを有するシステム内でHSAを効率的に実施するための既知のソリューションは存在しない。
【0037】
図9〜
図13に関して下記に記載されるシステムおよび方法は、一般に、上述されたものなどの異なるメモリタイプまたはメモリデバイスを備えるシステム内で、HSAおよび/またはHLOSをサポートするためのユニークかつ望ましいソリューションを提供することを諒解されたい。下記に記載されるシステムおよび方法は、統合されるべきプラットフォーム内のすべてのメモリに対する既存の必要性を排除することによって、高いパフォーマンス、より低い電力、およびより低いコストを実現することができる。その上、ハードウェア開発者は、たとえば、HSA規格に準拠するコンピューティングデバイス内で、高コストと低コストの両方のメモリデバイスおよび/またはメモリタイプを組み合わせる柔軟性をもつことができる。
【0038】
図9は、異なるメモリデバイスにメモリを動的に割り振るための、メモリチャネル最適化モジュール102および1つまたは複数のアプリケーション906と通信するHLOS902を備えるシステム900を示す。メモリチャネル最適化モジュール102は、一般に、上述された方式で構成され、動作することができる。メモリチャネル最適化モジュール102は、2つ以上の異なるメモリタイプまたはメモリデバイス(たとえば、DRAM104aおよび104b)、ならびに異なるメモリデバイスにアクセスすることができる任意の数の処理ユニットに電気的に結合される。処理ユニットには、専用処理ユニット(たとえば、CPU108およびGPU106)または他のプログラマブルプロセッサが含まれ得ることを諒解されたい。GPU106は、電気的な接続110を介してメモリチャネル最適化モジュール102に結合される。CPU108は、電気的な接続112を介してメモリチャネル最適化モジュール102に結合される。1つまたは複数のプログラマブルプロセッサ(図示せず)は、対応する接続を介してメモリチャネル最適化モジュール102に結合される場合がある。異なるメモリデバイスにアクセスする専用処理ユニット、プログラマブルプロセッサ、および任意のアプリケーション906は、一般に、HLOS902および/またはメモリチャネル最適化モジュール102の「クライアント」と呼ばれる場合がある。
【0039】
プログラマブルプロセッサは、たとえば、ビデオアプリケーション、オーディオアプリケーション、または任意の他のアプリケーション906を含む、専用および/または汎用のアプリケーション用のデジタル信号プロセッサ(DSP)を備える場合がある。上述されたように、専用処理ユニット、アプリケーション906、HLOS902、および/またはプログラマブルプロセッサは、異種システムアーキテクチャ(HSA)をサポートするように構成された異種コンピューティングプラットフォームをサポートすることができる。HSAは、主流のプログラマブルコンピューティング要素の利点および能力をアプリケーション906に公開する、改善されたプロセッサ設計を作成することを諒解されたい。HSAを用いて、アプリケーション906は、単一の統合されたアドレス空間内のデータ構造を作成することができ、所与のタスクに最も適切なハードウェア上で並行して作業項目を開始することができる。コンピューティング要素間でデータを共有することは、ポインタを送ることと同じように簡単である。複数のコンピューティングタスクは、データの同期を維持するために必要なバリアおよび原子メモリ動作を利用して、同じコヒーレントなメモリ領域上で動作することができる。
【0040】
より詳細に上述されたように、メモリチャネル最適化モジュール102はさらに、DRAM104aおよび104bに結合するための複数のハードウェア接続を備える。ハードウェア接続は、メモリデバイスのタイプに応じて異なる場合がある。一実施形態では、異なるメモリデバイスは、メモリチャネル最適化モジュール102上の物理/制御接続に接続する、対応するチャネルを提供するダブルデータレート(DDR)メモリデバイスを備える。物理/制御接続の数および構成は、メモリアドレスのサイズ(たとえば、32ビット、64ビットなど)を含む、メモリデバイスのタイプに応じて異なる場合があることを諒解されたい。
【0041】
HLOS902は、サービス品質(QoS)監視モジュール904を備える。QoS監視モジュール904は、アプリケーションのメモリ要件を保証および/または適合することによって、アプリケーション906にQoSサービスを提供する。QoSサービスは、たとえば、QoS監視モジュール904に関連付けられたアプリケーションプログラマインターフェース(API)1002を介してHLOS902に提供された、プログラマが宣言したQoSに基づく場合がある。他の実施形態では、HLOS902は、アプリケーション906(たとえば、プロセス、スレッドなど)のメモリアクセスの挙動および/またはパフォーマンスを監視することに基づいて、推定QoSを決定することができる。さらに、例示的なQoS値は、データアクセスを行うアプリケーションが望ましいパフォーマンスおよび品質を満足することができるように、プラットフォームメモリ上に割り振られるべきデータについての、メモリ帯域幅および/もしくは待ち時間の要件、または他のメモリパフォーマンスメトリックであり得る。
【0042】
図10の実施形態に示されたように、HLOS902は、統合アドレス空間1000によってアドレス指定された異なるメモリデバイスへのインターリーブされたメモリアクセスをサポートする。統合アドレス空間1000は、1つまたは複数の論理的なメモリゾーン(たとえば、メモリゾーン1004、1006、および1008)を備える場合がある。統合アドレス空間1000、ならびにメモリゾーン1004、1006、および1008は、上述され、かつ
図7に示されたマルチレイヤのインターリーブ技法を使用して、複数の「論理的な」デバイスまたはメモリゾーンを作成するように構成することができることを諒解されたい。たとえば、
図7の上記の例を再考すると、2:1のインターリーブ帯域幅比を採用することができる。DRAMデバイス104aは、従来GPU106向けに最適化された34GB/sの高パフォーマンス帯域幅を有する、0.5GBのメモリデバイス702と704のペアを備える場合がある。DRAMデバイス104bは、従来CPU108向けに最適化された17GB/sのより低い帯域幅を各々が有する、1GBのメモリデバイス706および2GBのメモリデバイス708を備える場合がある。マルチレイヤのインターリーブ技法は、2つのインターリーブされたゾーン710および712、ならびにインターリーブされていないゾーン714を作成することができる。ゾーン710は、4方向にインターリーブされて、102GB/sの合成された帯域幅で合成された1.5GBを提供することができる。ゾーン712は、2方向にインターリーブされて、34GB/sで合成された1.5GBを提供することができる。ゾーン714は、インターリーブされないで、17GB/sで1GBを提供することができる。インターリーブされたゾーン710および712のコンテンツが、駆逐可能または移動可能なデータ構造およびバッファ用に明示的に指定される場合があり、一方インターリーブされていないゾーン714のコンテンツが、カーネル動作および/または他の低メモリプロセスなどの処理向けに指定される場合があるので、システム100のメモリ管理アーキテクチャと組み合わされたマルチレイヤのインターリーブ技法により、インターリーブされた部分とインターリーブされていない部分との間の遷移が容易になる場合がある。
図10では、メモリゾーン1004、1006、および1008は、
図7からのゾーン710、712、および714に対応する場合がある。メモリゾーン1004、1006、および1008は、異なる密度および/またはパフォーマンスレベルを有する場合がある。
【0043】
メモリチャネル最適化モジュール102と統合されたHLOS902は、効率的なメモリ割振り方式を提供する。HLOS902および/またはメモリチャネル最適化モジュール102は、デバイスを介して、様々なメモリパフォーマンス要件を有する様々なアプリケーションの作業負荷にメモリを割り振ることができる。HLOS902は、ハードウェアプラットフォームを効率的に利用するために、様々なメモリパフォーマンス要件のメモリ構成要素の割振り/割振り解除を適切に管理するように構成される。
【0044】
QoS監視モジュール904により、動的に割り振られ、メモリゾーン1004、1006、および1008のうちの1つまたは複数を使わない仮想メモリが可能になる場合がある。一実施形態では、QoS監視モジュール904は、より高いパフォーマンスを必要とするか、または場合によっては受け取る場合がある、アプリケーション906に関連付けられたタスク/スレッドに、より高い実行ゾーンを割り当てることができる。QoS監視モジュール904は、より高いパフォーマンスを必要としないタスク/スレッドに、より低い実行ゾーンを割り当てることができる。その上、QoS監視モジュール904は、メモリ割振りを動的に制御して、たとえば、第1の要求されたゾーンタイプから第2または第3の選択にフォールバックすることができる。
【0045】
QoS監視モジュール904はさらに、そのプロセスの認証情報およびそのプロセスがそのゾーンに存在することがどれほど望ましいことであり得るかに基づいて、プロセスを監査し、より高い実行ゾーンからプロセスを移行または駆逐するように構成することができる。プロセスは監査される場合があり、削除され、電源を切られるなどされる可能性があるゾーンから移行または駆逐される場合があり、それによってスリープモード中のシステム電力の低減がもたらされる。QoS監視モジュール904は、アプリケーション906を周期的に監視し、監視されたパフォーマンスに基づいて、ゾーン化構成に対する修正を評価および推奨することができる。
【0046】
QoS監視モジュール904は、アプリケーションコード用のメモリを割り振るときに、QoS要求またはQoSヒントを提供するように構成することができる。様々なQoSパラメータまたは関連パラメータは、QoS監視モジュール904によって監視することができ、たとえば、割り振られた領域上のパフォーマンスレベルまたはアクセスの特性(たとえば、ストリーミングの高スループットで大きく連続的なアクセス、小さいチャンク内の個別のランダムアクセス、など)を示すことができることを諒解されたい。
【0047】
QoS監視モジュール904は、QoSパラメータを解釈し、それらを特定のメモリタイプまたはメモリゾーンにマッピングすることができる。たとえば、ランダムアクセスは、アプリケーションコードを効率的に実施するためのより低いメモリアクセスの待ち時間を使用することができ、ストリーミングの高スループットのアプリケーションコードは、高いメモリ帯域幅を使用することが望ましい場合がある。QoSパラメータは、たとえば、「メモリアクセスの待ち時間<xナノ秒」などの直接的な実時間値を含む場合がある。HLOS902がAPI1002を含む
図10の実施形態では、QoSパラメータは、メモリ割振りライブラリへのオプションの引数であり得る。
【0048】
QoS監視モジュール904は、カーネル内のメモリ管理モジュールを増強して、様々なタイプの異種メモリの動的な使用を記録するように構成することができる。増強されたメモリ管理モジュールは、QoSヒントに基づいてメモリゾーン1004、1006、および1008のうちの1つに対する要求されたメモリの適切な割振りを決定することができる。
【0049】
QoS値は使用される必要がないことを諒解されたい。いかなるQoS値もない場合、QoS監視モジュール904は、最初のランタイムパフォーマンスに基づいて、アプリケーション要求のメモリを割り振るための適切なメモリゾーンを決定することができる。メモリゾーン1004、1006、および1008は、たとえば、アプリケーション906のランタイムパフォーマンスが現在のメモリゾーンの割振りに基づいて影響される場合、1つのゾーンから別のゾーンに動的にシフトすることができる。QoSパラメータがない場合、QoS監視モジュール904は、アクセスが比較的大きい連続的なチャンクであるか、またはランダムにアクセスされるかを追跡することによって、プロセスおよび/またはスレッドのメモリアクセスパフォーマンスを記録することができる。各アクセスバースト間の時間ギャップは、QoSパラメータを推定するために使用することができる。
【0050】
QoS監視モジュール904はさらに、特定のプロセスまたはスレッドが保留/待機段階にあるとき、推定QoSに最適に適合する関連メモリゾーンに特定のプロセスまたはスレッド用に割り振られたメモリをスワップするように構成することができる。アクティブな実行中のオーバーヘッドをトレードオフするために、異なるゾーンに割り振られたメモリをスワップすることを実行状態中は回避することができる。
【0051】
推定QoSを実装する実施形態では、QoS監視モジュール904は、現在割り振られたメモリゾーンを適合させるように構成することができる。QoS監視モジュール904は、メモリアクセスの挙動内の将来の変化について、スレッド/プロセスを監視することができる。プロセスを監視する頻度は、必要に応じて異なる場合がある。代替として、QoS監視モジュール904は、システム900上の活動全体に基づいてさらなる監視をなくして、監視プロセスのオーバーヘッドを削減することができる。
【0052】
推定QoSを決定して適切なメモリゾーンにメモリ割振りをマッピングする目的で、プロセス/スレッドのメモリアクセスの挙動/パターンを抽出するように構成された、様々なハードウェア構造を実装することができることを諒解されたい。その上、特定のプロセス/スレッド内の様々な割振りが、QoSがより広い範囲を満足する様々なメモリゾーンに割り振られる可能性があるとき、メモリゾーンの割振りは、より粒が粗くなり得る。たとえば、いくつかの構成要素は、たとえば、速いランダムアクセスだが低い帯域幅のメモリと比較して、高スループットを必要とすることによってより高い待ち時間を切り抜けることができる高帯域幅のストリーミングデータにより良く適することができる。
【0053】
図11は、上述されたQoSサービスのうちの1つまたは複数を、メモリチャネル最適化モジュール102と統合するためのシステム1100の別の実施形態を示す。この手法は、HLOS902によって提供されるQoSソリューションに適合しない場合がある従来のアプリケーション906を適応させるために望ましい場合がある。この実施形態では、メモリチャネル最適化モジュール102はさらに、上述されたチャネル再マッピングモジュール400に動作可能に結合された、QoS監視モジュール904を備える。
【0054】
図12は、上述されたインターリービング手法および再マッピング手法に従って、システム900(
図9)またはシステム1100(
図11)のいずれかで、メモリを動的に割り振るための方法1200を示す。ブロック1202で、インターリーブ帯域幅比が決定される。上述されたように、インターリーブ帯域幅比は、2つ以上の異なるメモリタイプまたはメモリデバイスについての帯域幅の比を含む場合がある。ブロック1204で、異なるメモリタイプまたはメモリデバイスは、ブロック1202で決定されたインターリーブ帯域幅比に従ってインターリーブされる。上述または他のインターリービング手法のうちのいずれも、各メモリゾーンが異なるパフォーマンスレベルおよび/または密度レベルを有する、2つ以上のメモリゾーン(たとえば、ゾーン1004、1006、および1008)を定義するために実施することができる。ブロック1206で、HLOS902および/またはメモリチャネル最適化モジュール102は、アプリケーション906(または他のクライアント)からメモリアドレス要求を受信することができる。応答して、メモリは、(たとえば、API1002を介して)宣言されたQoSまたは推定QoSのいずれかに基づいて、適切なメモリゾーンに割り振られる。
【0055】
図13に示された実施形態では、宣言されたQoSは、API1002に対応する「malloc」(すなわち、メモリ割振り)関数を使用して実装することができる。2:1のインターリーブ帯域幅比を使用する上記の例(
図7)に従って、DRAMデバイス104aは、従来GPU106向けに最適化された34GB/sの高パフォーマンス帯域幅を有する、0.5GBのメモリデバイス702と704のペアを備える場合がある。DRAMデバイス104bは、従来CPU108向けに最適化された17GB/sのより低い帯域幅を各々が有する、1GBのメモリデバイス706および2GBのメモリデバイス708を備える場合がある。マルチレイヤのインターリーブ技法は、2つのインターリーブされたゾーン710および712、ならびにインターリーブされていないゾーン714を作成することができる。ゾーン710は、4方向にインターリーブされて、102GB/sの合成された帯域幅で合成された1.5GBを提供することができる。ゾーン712は、2方向にインターリーブされて、34GB/sで合成された1.5GBを提供することができる。ゾーン714は、インターリーブされないで、17GB/sで1GBを提供することができる。QoSは、メモリ割振り関数のすべての異なる変形形態に適用することができ、「malloc」は1つの可能な例として使用されるにすぎないことを諒解されたい。
【0056】
第1のmalloc関数1302は、たとえば、4方向にインターリーブされたメモリゾーン710に関連付けられた第1のQoSを宣言するために使用することができる。第2のmalloc関数1304は、たとえば、2方向にインターリーブされたゾーン712に関連付けられた第2のQoSを宣言するために使用することができる。第3のmalloc関数1306は、たとえば、インターリーブされていないゾーン714に関連付けられた第3のQoSを宣言するために使用することができる。
【0057】
本明細書に記載された方法ステップのうちの1つまたは複数は、上述されたモジュールなどのコンピュータプログラム命令としてメモリに記憶される場合があることを諒解されたい。これらの命令は、本明細に記載された方法を実施するために、対応するモジュールと組合せまたは協働して、任意の適切なプロセッサによって実行される場合がある。
【0058】
本発明が記載されたように機能するために、本明細書に記載されたプロセスまたはプロセスフロー内のあるステップが他のステップよりも先行するのは当然である。しかしながら、そのような順序またはシーケンスが本発明の機能を変えない場合、本発明は記載されたステップの順序に限定されない。すなわち、本発明の範囲および趣旨から逸脱することなく、あるステップは、他のステップの前に実施されるか、後に実施されるか、または他のステップと並行して(実質的に同時に)実施される場合があることを認識されたい。場合によっては、特定のステップは、本発明から逸脱することなく、省略されるか、または実行されない場合がある。さらに、「その後」、「次いで」、「次に」などの単語は、ステップの順序を限定するものではない。これらの単語は、単に例示的な方法の説明を通して読者を導くために使用される。
【0059】
加えて、プログラミングの当業者は、たとえば本明細書内のフローチャートおよび関連する説明に基づいて、コンピュータコードを書くか、または適切なハードウェアおよび/もしくは回路を識別して、開示された発明を容易に実施することができる。
【0060】
したがって、特定の1組のプログラムコード命令または詳細なハードウェアデバイスの開示が、本発明をどのように製作し使用すべきかについて適切に理解するために必要であるとは見なされない。特許請求されるコンピュータ実装の処理の発明性のある機能は、上記の説明において、かつ様々な処理の流れを示すことができる図面とともに、より詳細に説明される。
【0061】
1つまたは複数の例示的な態様では、記載された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せに実装される場合がある。ソフトウェアに実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体上で送信される場合がある。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む、コンピュータ記憶媒体と通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形式で所望のプログラムコードを搬送もしくは記憶するために使用され得るし、コンピュータによってアクセスされ得る任意の他の媒体を含む場合がある。
【0062】
また、任意の接続はコンピュータ可読媒体と適切に呼ばれる。たとえば、ソフトウェアが、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(「DSL」)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。
【0063】
本明細書で使用する場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生するが、ディスク(disc)は、レーザーで光学的にデータを再生する。前述の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【0064】
本発明の趣旨および範囲から逸脱することなく、本発明が関係する代替の実施形態は、当業者には明かになるであろう。したがって、選択された態様が詳細に図示および説明されたが、以下の特許請求の範囲によって定義されるように、本発明の趣旨および範囲から逸脱することなく、各態様において様々な置換および改変を実施できることが理解されよう。