(57)【特許請求の範囲】
【請求項１】
第１のメモリバッファを、第１の複数のメモリバンクと、第１のシーケンス識別子とに関連付けるステップであって、前記第１のメモリバッファは、メモリチャネルの第１のセットの複数のメモリバンクにわたっており、メモリチャネルは複数のメモリデバイスを備える、ステップと、
第２のメモリバッファを、第２の複数のメモリバンクと、第２のシーケンス識別子とに関連付けるステップであって、前記第２のメモリバッファは、メモリチャネルの第２のセットの複数のメモリバンクにわたる、ステップと、
第１のコンピューティングデバイスおよび第２のコンピューティングデバイスを用いて、前記第１のシーケンス識別子および前記第２のシーケンス識別子に基づいて、前記第１のメモリバッファおよび前記第２のメモリバッファのうち対応するメモリバッファにアクセスするステップであって、前記第１のシーケンス識別子および前記第２のシーケンス識別子は、前記第１のメモリバッファおよび前記第２のメモリバッファに対するアクセスのシーケンスを示す、ステップと、を含む、
方法。
【請求項２】
前記第１のメモリバッファに関連する第１のメモリオペレーションを第１の動作周波数で実行するステップと、
前記第１の動作周波数とは異なる第２の動作周波数で前記第２のメモリバッファに関連した第２のメモリオペレーションを実行するステップと、
前記第１のメモリオペレーションの実行後に前記第１の複数のメモリバンクから前記第１のメモリバッファの割り当てを解除し、前記第２のメモリオペレーションの実行後に前記第２の複数のメモリバンクから前記第２のメモリバッファの割り当てを解除するステップと、
をさらに含む請求項１の方法。
【請求項３】
前記第２の複数のメモリバンクは、前記第１の複数のメモリバンクと異なっている、請求項１の方法。
【請求項４】
前記第２の複数のメモリバンクは、前記第１の複数のメモリバンクと同じである、請求項１の方法。
【請求項５】
前記第１のコンピューティングデバイスおよび第２のコンピューティングデバイスを用いて、前記第１のメモリバッファおよび前記第２のメモリバッファのうち対応するメモリバッファにアクセスするステップは、メモリバンクのコンテンションを回避し、前記複数のメモリチャネルの全帯域幅を利用するために、前記第１のメモリバッファおよび前記第２のメモリバッファに順番にアクセスするステップを含む、請求項１の方法。
【請求項６】
第１のメモリバッファを、第１の複数のメモリバンクと、第１のシーケンス識別子とに関連付ける手段であって、前記第１のメモリバッファは、メモリチャネルの第１のセットの複数のメモリバンクにわたっており、メモリチャネルは複数のメモリデバイスを備える、手段と、
第２のメモリバッファを、第２の複数のメモリバンクと、第２のシーケンス識別子とに関連付ける手段であって、前記第２のメモリバッファは、メモリチャネルの第２のセットの複数のメモリバンクにわたる、手段と、
第１のコンピューティングデバイスおよび第２のコンピューティングデバイスを用いて、前記第１のシーケンス識別子および前記第２のシーケンス識別子に基づいて、前記第１のメモリバッファおよび前記第２のメモリバッファのうち対応するメモリバッファにアクセスする手段であって、前記第１のシーケンス識別子および前記第２のシーケンス識別子は、前記第１のメモリバッファおよび前記第２のメモリバッファに対するアクセスのシーケンスを示す、手段と、を備える、
コンピューティング装置。
【請求項７】
前記第１のメモリバッファに関連した第１のメモリオペレーションを第１の動作周波数で実行する手段と、
前記第２のメモリバッファに関連した第２のメモリオペレーションを、前記第１の動作周波数とは異なる第２の動作周波数で実行する手段と、
前記第１のメモリオペレーションおよび前記第２のメモリオペレーションの実行後、前記第１の複数のメモリバンクから前記第１のメモリバッファを、前記第２の複数のメモリバンクから前記第２のメモリバッファの割り当てをそれぞれ解除する手段と、をさらに含む、
請求項６のコンピューティング装置。
【請求項８】
前記第２の複数のメモリバンクは、前記第１の複数のメモリバンクと異なっている、請求項６のコンピューティング装置。
【請求項９】
前記第２の複数のメモリバンクは、前記第１の複数のメモリバンクと同じである、請求項６のコンピューティング装置。
【請求項１０】
前記第１のコンピューティングデバイスおよび第２のコンピューティングデバイスを用いて、前記第１のメモリバッファおよび前記第２のメモリバッファのうち対応するメモリバッファにアクセスすることは、メモリバンクのコンテンションを回避し、前記複数のメモリチャネルの全帯域幅を利用するために、前記第１のメモリバッファおよび前記第２のメモリバッファに順番にアクセスすることを含む、請求項６のコンピューティング装置。
【請求項１１】
第１のコンピューティングデバイスと、
第２のコンピューティングデバイスと、
複数のメモリデバイスをそれぞれ備える複数のメモリチャネルと、
メモリコントローラとを備え、
前記メモリコントローラは、
前記第１のコンピューティングデバイスおよび前記第２のコンピューティングデバイスを、前記複数のメモリチャネルに通信可能に接続し、
第１のシーケンス識別子および第１の複数のメモリバンクを、メモリチャネルの第１のセットの複数のメモリバンクにわたる第１のメモリバッファに割り当て、
第２のシーケンス識別子および第２の複数のメモリバンクを、メモリチャネルの第２のセットの複数のメモリバンクにわたる第２のメモリバッファに割り当て、
前記第１のコンピューティングデバイスおよび前記第２のコンピューティングデバイスを用いて、前記第１のシーケンス識別子および前記第２のシーケンス識別子に基づき、前記第１のメモリバッファおよび前記第２のメモリバッファにアクセスする、ように構成されており、
前記第１のシーケンス識別子および前記第２のシーケンス識別子は、前記第１のメモリバッファおよび前記第２のメモリバッファに対するアクセスのシーケンスを示す、
コンピューティングシステム。
【請求項１２】
複数のメモリデバイスに対応する複数のデータバスであって、前記メモリコントローラと前記複数のメモリデバイスとの間でデータを転送するように構成された複数のデータバスをさらに備える、
請求項１１のコンピューティングシステム。
【請求項１３】
前記メモリコントローラは、前記複数のデータバスの全帯域幅を使用して、前記第１のコンピューティングデバイスまたは前記第２のコンピューティングデバイスと、前記複数のメモリデバイスとの間のデータ転送を制御するように構成されている、
請求項１２のコンピューティングシステム。
【請求項１４】
前記第１のコンピューティングデバイスおよび前記第２のコンピューティングデバイスは、中央処理装置、グラフィック処理装置、および特定用途向け集積回路のうち少なくとも１つを備える、
請求項１１のコンピューティングシステム。
【請求項１５】
前記複数のメモリデバイスのそれぞれは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイスを備える、
請求項１１のコンピューティングシステム。
【請求項１６】
前記メモリコントローラは、
第１の動作周波数で、前記第１のメモリバッファに関連する第１のメモリオペレーションを実行し、
前記第１の動作周波数とは異なる第２の動作周波数で、前記第２のメモリバッファに関連する第２のメモリオペレーションを実行し、
前記第１のメモリオペレーションの実行後に前記第１のメモリバッファの割り当てを前記第１の複数のメモリバンクから解除し、前記第２のメモリオペレーションの実行後に、前記第２のメモリバッファの割り当てを前記第２の複数のメモリバンクから解除するように構成されている、
請求項１１のコンピューティングシステム。
【請求項１７】
前記第２の複数のメモリバンクは、前記第１の複数のメモリバンクと異なっている、請求項１１のコンピューティングシステム。
【請求項１８】
前記第２の複数のメモリバンクは、前記第１の複数のメモリバンクと同じである、請求項１１のコンピューティングシステム。
【請求項１９】
前記メモリコントローラは、メモリバンクのコンテンションを回避し、前記複数のメモリチャネルの全帯域幅を利用するために、前記第１のメモリバッファおよび前記第２のメモリバッファに順番にアクセスするように構成されている、
請求項１１のコンピューティングシステム。
【請求項２０】
前記メモリコントローラは、メモリ空間の穴の発生を抑えるために、メモリバッファごとに追跡情報を維持するように構成されている、
請求項１１のコンピューティングシステム。
【請求項２１】
前記追跡情報は、
メモリバッファが使用中、解放またはリザーブされているという指標、
割り当てられたメモリバッファに関連するメモリチャネルおよびメモリバンク、
前記割り当てられたメモリバッファに関連するシーケンス識別子、および
前記割り当てられたメモリバッファのパフォーマンスパラメータ、
のうち少なくとも１つを含む、
請求項２０のコンピューティングシステム。
【請求項２２】
前記パフォーマンスパラメータは、前記割り当てられたメモリバッファに関連するメモリチャネルに対する所定のクロック周波数を含む、
請求項２１のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概して複数のメモリチャネルを有するコンピューティングシステムにおける１つ以上のメモリバッファの割り当てに関する。
【背景技術】
【０００２】
処理速度と処理量の増加の需要によって、多くのコンピュータシステムでは複数のクライアントデバイス（例、コンピューティングデバイス）を採用している。複数のクライアントデバイスを有する通常のコンピュータシステムでは、各クライアントデバイスが、システムバス経由で複数のメモリデバイスと通信することができる。こうしたシステムバスが非効率になる原因は、クライアントデバイスがメモリデバイスの同じメモリバンクから連続してデータ転送を要求する際の（本明細書では「メモリバンクのコンテンション」ともいう）メモリデバイスのリカバリ時間にある。このリカバリ時間は、当該メモリデバイスに対する最初のアクセスとその直後の２回目のアクセスとの間のメモリデバイスによる遅延時間を意味する。メモリデバイスはデータにアクセスするが、リカバリ時間中にはシステムバス上でデータが転送できない。その結果、システムバスが非効率的になる。
【０００３】
このシステムバスは、一度に１つのクライアントデバイスのみ使用可能なため、バスの効率を上げる方法のひとつとして、システムバス上の複数のメモリデバイス内でメモリアドレスをインターリーブすることが考えられる。メモリアドレスがシステムバス上でインターリーブされる場合、連続するメモリの記憶場所（例、連続するアドレスを持つ記憶場所）は、別個のメモリデバイスに配置される。連続する記憶場所を別個のメモリデバイスに配置することにより、所与のメモリデバイスに対するリカバリ時間の影響を減らすことができ、ひいてはメモリバンクのコンテンションを削減することができる。
【０００４】
しかし、複数のクライアントデバイスを有するコンピュータシステムでは、複数のメモリデバイス内でメモリアドレスをインターリーブすることは、システムバスの最適使用にはつながらないかもしれない。特に、システムバスは通常、どのクライアントデバイスがシステムバス、および複数のメモリデバイス内でインターリーブされたメモリアドレスにアクセスできるかを判断する調停状態になる。たとえば、この調停状態では、第２のクライアントデバイスよりも先に、第１のクライアントデバイスがシステムバスおよび複数のメモリデバイス内の連続する記憶場所にアクセスできるようにする。しかし、この調停状態では、第２のクライアントデバイスが、第１のクライアントデバイスと同じ連続する記憶場所にただちにアクセスすることは保証できない。したがって、インターリーブされたメモリアーキテクチャの利点（例、メモリバンクのコンテンションの削減）が損なわれてしまう。
【０００５】
複数のクライアントデバイスを有するコンピュータシステムでメモリバンクのコンテンションを低減または排除する方法およびシステムが必要である。
【発明の概要】
【０００６】
本発明の実施形態には、複数のメモリチャネルを有するコンピューティングシステムにおいて１以上のメモリバッファを割り当てる方法を含む。この方法には、以下が含まれる。即ち、第１のメモリバッファを第１の複数のメモリバンクに割り当てるステップであって、第１の複数のメモリバンクは、１以上のメモリチャネルの第１のセットにわたって広がっているステップと、第２のメモリバッファを第２の複数のメモリバンクに割り当てるステップであって、第２の複数のメモリバンクは、１以上のメモリチャネルの第２のセットにわたって広がっているステップと、第１のシーケンス識別子を第１のメモリバッファに、第２のシーケンス識別子を第２のメモリバッファにそれぞれ関連付けるステップと、第１および第２のシーケンス識別子に基づき第１および第２のメモリバッファにアクセスするステップとが含まれる。この方法は、第１の動作周波数で、第１のメモリバッファに関連する第１のメモリオペレーションを実行するステップも含み得る。同様に、この方法は、第２の動作周波数で、第２のメモリバッファに関連する第２のメモリオペレーションを実行するステップを含むことができ、この場合、第１の動作周波数は第２の動作周波数とは異なる。
【０００７】
本発明の実施形態は、さらにコンピュータプログラム製品を含み、このコンピュータプログラム製品は、プロセッサが、複数のメモリチャネルを有するコンピューティングシステムにおいて１以上のメモリバッファを割り当てることを可能にするコンピュータプログラム論理を記録した、コンピュータで使用可能な媒体を含む。このコンピュータプログラム論理は、以下のものを含むことができる。即ち、第１のコンピュータで読み取り可能なプログラムコードであって、プロセッサが第１の複数のメモリバンクに第１のメモリバッファを割り当てることができるようし、第１の複数のメモリバンクは１以上のメモリチャネルの第１のセットにわたって広がる、プログラムコードと、第２のコンピュータで読み取り可能なプログラムコードであって、プロセッサが第２の複数のメモリバンクに第２のメモリバッファを割り当てることができるようにし、第２の複数のメモリバンクは１以上のメモリチャネルの第２のセットにわたって広がる、プログラムコードと、第３のコンピュータで読み取り可能なプログラムコードであって、プロセッサが、第１のシーケンス識別子と第１のメモリバッファとを、第２のシーケンス識別子と第２のメモリバッファとに関連付けできるようにする、プログラムコードと、第４のコンピュータで読み取り可能なプログラムコードであって、プロセッサが第１および第２のシーケンス識別子に基づき、第１および第２のメモリバッファにアクセスできるようにする、プログラムコードと、を含む。コンピュータプログラム論理は、以下のものも含むことができる。即ち、第５のコンピュータで読み取り可能なプログラムコードであって、プロセッサが第１の動作周波数で、第１のメモリバッファに関連する第１のメモリオペレーションを実行することができるようにする、プログラムコードと、第６のコンピュータで読み取り可能なプログラムコードであって、プロセッサが第２の動作周波数で、第２のメモリバッファに関連する第２のメモリオペレーションを実行できるようにし、第１の動作周波数は第２の動作周波数とは異なる、プログラムコードと、を含む。
【０００８】
本発明の実施形態は、さらにコンピューティングシステムを含む。このコンピューティングシステムは、第１のクライアントデバイスと、第２のクライアントデバイスと、複数のメモリチャネルと、メモリコントローラとを含むことができる。複数のメモリチャネルは複数のメモリデバイスを含むことができる（例えば、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）など）。メモリコントローラは、第１のクライアントデバイスと第２のクライアントデバイスとを、複数のメモリチャネルに通信可能に接続するように構成される。メモリコントローラは、以下の機能を行うようにも構成され得る。即ち、メモリコントローラは、第１のメモリバッファを、１以上のメモリチャネルの第１のセットにわたって広がる第１の複数のメモリバンクに割り当てる機能と、第２のメモリバッファを、１以上のメモリチャネルの第２のセットにわたって広がる第２の複数のメモリバンクに割り当てる機能と、第１のシーケンス識別子を第１のメモリバッファに、第２のシーケンス識別子を第２のメモリバッファに、それぞれ関連付ける機能と、第１および第２のシーケンス識別子に基づき、第１および第２のメモリバッファにアクセスする機能とを行うように構成され得る。さらに、メモリコントローラは、第１の動作周波数で、第１のメモリバッファに関連する第１のメモリオペレーションを実行し、第２の動作周波数で、第２のメモリバッファに関連する第２のメモリオペレーションを実行するようにも構成され、この場合、第１の動作周波数は第２の動作周波数とは異なる。
【０００９】
本発明のさらなる特徴および利点、ならびに本発明の様々な実施形態の構造およびオペレーションは、添付図面を参照して以下に詳細に説明する。本発明は、本明細書で説明する特定の実施形態に限定されないことに注意されたい。こうした実施形態は、例示目的のみに限って示されたものである。さらなる実施形態は、本明細書に含まれる教示に基づき、当業者にとって明らかであろう。
【００１０】
本明細書に含まれ、本明細書の一部を構成する添付図面は、本発明の実施形態を図示し、その記述と合わせて、さらに本発明の原理を説明するように機能し、当業者が本発明を実施し、利用できるようにする。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態を実現可能な複数のクライアントデバイスを有する例示的なシステムを示す図である。
【図２】複数のメモリチャネルにわたって広がる複数のメモリバッファの実施形態を示す図である。
【図３】メモリコントローラの実施形態を示す図である。
【図４】コンピューティングデバイスから要求されたメモリバッファよりも利用可能なメモリ空間が少ない場合のシナリオ例を示す図である。
【図５】複数のメモリチャネルを有するコンピューティングシステム内で１以上のメモリバッファを割り当てる方法の実施形態を示す図である。
【図６】本発明の実施形態を実現可能なコンピュータシステム例を示す図である。
【発明を実施するための形態】
【００１２】
以下の発明を実施するための形態では、本発明と一貫性がある例示的な実施例を表す添付図面を参照する。その他の実施形態も可能であり、本発明の精神と範囲内で実施形態を改良することが可能である。したがって、この詳細な説明は、本発明を制限するものではない。むしろ、本発明の範囲は、添付の特許請求の範囲によって定義される。
【００１３】
本発明は以下に記述するように、ソフトウェア、ハードウェア、ファームウェア、および／または図に示されているエンティティの多くの異なる実施形態によって実現可能なことは当業者にとって明らかであろう。したがって、本発明の実施形態の動作の挙動は、本明細書で示す詳細度を考慮に入れると、実施形態の改良および変更が可能であるという理解に基づき説明される。
【００１４】
図１は、マルチクライアントコンピューティングシステム１００の一実施形態を示す図である。マルチクライアントコンピューティングシステム１００には、第１のコンピューティングデバイス１１０と、第２のコンピューティングデバイス１２０と、メモリコントローラ１３０と、メモリデバイス１４０，１５０，１６０，１７０とが含まれる。第１のコンピューティングデバイス１１０と、第２のコンピューティングデバイス１２０とは、システムバス１８０を介してメモリコントローラ１３０に通信可能に接続されている。また、メモリコントローラ１３０は、データバス１４１，１５１，１６１，１７１を介してそれぞれメモリデバイス１４０，１５０，１６０，１７０に通信可能に接続されている。メモリデバイス１４０，１５０，１６０，１７０は、本明細書ではメモリチャネル１４０，１５０，１６０，１７０ともいう。
【００１５】
本明細書の記述に基づき、当業者はマルチクライアントコンピューティングシステム１００には、２つより多いまたは少ないコンピューティングデバイス、複数のメモリコントローラ、４つより多いまたは少ないメモリデバイス、またはそれらの組み合わせを含み得ることを認識するであろう。こうしたマルチクライアントコンピューティングシステム１００の異なる構成は、本明細書に記載する実施形態の範囲、精神に沿ったものである。しかし、わかりやすく説明するために、本明細書の実施形態では、図１記載のシステムアーキテクチャに沿って説明する。
【００１６】
一実施形態では、コンピューティングデバイス１１０および１２０の各々は、たとえば、また限定されるものではないが、中央処理装置（ＣＰＵと）、グラフィック処理ユニット（ＧＰＵ）と、特定用途向け集積回路（ＡＳＩＣ）コントローラと、その他の類似タイプの処理ユニット、またはそれらの組み合わせを含む。コンピューティングデバイス１１０，１２０は、マルチクライアントコンピューティングシステム１００に関連する命令を実行し、オペレーションを行うように構成されている。たとえば、マルチクライアントコンピューティングシステム１００は、グラフィックスをレンダリングし、表示するように構成することができる。マルチクライアントコンピューティングシステム１００は、ＣＰＵ（コンピューティングデバイス１１０の一例）と、ＧＰＵ（コンピューティングデバイス１２０の一例）とを含むことができ、この場合ＧＰＵは、二次元および三次元のグラフィックスをレンダリングするように構成可能であり、ＣＰＵはレンダリングしたグラフィックスを表示デバイス（図１に図示せず）に表示する調整を行うように構成することができる。コンピューティングデバイス１１０，１２０は、別個のデバイス（例えば、別個の半導体集積回路または別個の「チップ」）、同じパッケージ内の別個のデバイス、単独のデバイス上でデバイスを組み合わせたもの（例えば、単独の半導体デバイス上の素子）、またはその変形したものでも構成可能である。
【００１７】
図１を参照すると、本発明の実施形態によれば、メモリデバイス１４０，１５０，１６０，１７０の各々は、４つのメモリバンク（例えば、後述する図２におけるメモリバンク０〜３）を有するダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイスである。本明細書の記述に基づき、メモリデバイス１４０，１５０，１６０，１７０は、例えば、限定されるものではないが、スタティックランダムアクセスメモリ（ＳＲＡＭ）、スタティックダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、フラッシュメモリデバイス、またはそれらの組み合わせなど、他のタイプのメモリデバイスになり得ることを当業者は認識するであろう。
【００１８】
一実施形態では、１以上のメモリバッファが複数のメモリバンクに割り当てられ、または関連付けられるが、この複数のメモリバンクは１以上のメモリチャネルにわたって広がり得る。図２は、複数のメモリチャネル１４０，１５０，１６０，１７０にわたって広がる複数のメモリバッファ２１０，２２０，２３０，２４０，２５０の実施形態を表したものである。たとえば、メモリバッファ２１０は、メモリチャネル１４０，１５０，１６０，１７０のメモリバンク０〜３にわたって広がり、メモリバッファ２２０は、メモリチャネル１７０のメモリバンク０〜３にわたって広がり、メモリバッファ２３０，２４０は、メモリチャネル１６０のメモリバンク０〜３にわたって広がり、メモリバッファ２５０は、メモリチャネル１４０，１５０のメモリバンク０〜３にわたって広がる。本発明の実施形態によれば、複数のメモリバッファ２１０〜２５０は、メモリチャネル１４０〜１７０内の１以上のメモリバンクにわたってインターリーブされている。複数のメモリバンク上でメモリアドレスをインターリーブする方法と技術は、当業者に知られている。
【００１９】
図１を参照すると、マルチクライアントコンピューティングシステム１００に関連する命令を実行し、オペレーションを行う場合、コンピューティングデバイス１１０，１２０は、メモリデバイス１４０，１５０，１６０，１７０に保存されている情報に対してメモリコントローラ１３０経由でアクセスすることができる。図３は、メモリコントローラ１３０の実施形態を図示したものである。メモリコントローラ１３０には、メモリ管理ユニット３１０およびスケジューラ３２０が含まれる。
【００２０】
メモリ管理ユニット３１０の数ある中の１つの機能は、１以上のメモリバッファをコンピューティングデバイス１１０，１２０に関連するオペレーションに割り当て、または関連付けることである。一実施形態では、メモリ管理ユニット３１０は、メモリチャネル／メモリバンクの詳細度でメモリバッファを割り当てる（関連付ける）。この詳細度は、１以上のメモリバッファに割り当てられるメモリチャネルの数、およびメモリバンクの数（メモリチャネル内の）を意味する。一実施形態では、この詳細度は、以下でさらに詳細に説明するように、コンピューティングデバイス１１０，１２０によって決まる。
【００２１】
一実施形態では、メモリ管理ユニット３１０は、第１のメモリバッファを第１の複数のメモリバンクに割り当て、または関連付けるように構成されるが、この場合、第１の複数のメモリバンクは、１以上のメモリチャネルの第１のセットにわたって広がる。第１のメモリバッファの一例は、図２におけるメモリバッファ２２０である。本発明の実施形態によれば、メモリ管理ユニット３１０はまた、第２のメモリバッファを第２の複数のメモリバンクに割り当て、または関連付けるようにも構成されるが、この場合、第２の複数のメモリバンクは、１以上のメモリチャネルの第２のセットにわたって広がる。第２のメモリバッファの一例は、図２におけるメモリバッファ２５０である。一実施形態では、第２の複数のメモリバンクは、第１の複数のメモリバンクとは異なる。例えば、メモリバッファ２２０は、メモリバッファ２５０とは別の複数のメモリバンクを占有する。別の実施形態では、第２の複数のメモリバンクは、第１の複数のメモリバンクと同じである。例えば、メモリバッファ２３０は、図２におけるメモリバッファ２４０と同一の複数のメモリバンクを占有する。
【００２２】
当業者が理解するように、コンピューティングシステム（例えば、マルチクライアントコンピューティングシステム１００）のメモリバッファは通常、コンピューティングデバイス（例えば、図１におけるコンピューティングデバイス１１０，１２０）が実行するオペレーションまたはプロセスの間でデータを移動するときに用いられる。一実施形態では、コンピューティングデバイス１１０はＣＰＵであり、第１の複数のメモリバンクは第１のメモリバッファに割り当てられる（例えば、図２におけるメモリバッファ２２０）。本発明の実施形態によれば、レイテンシセンシティブなＣＰＵの命令コードを実行する必要があるメモリバッファは、第１のメモリバッファにマッピングすることができる。レイテンシセンシティブなＣＰＵの命令コードを第１のメモリバッファにマッピングすることについての数ある中の１つの利点は、コンピューティングデバイス１１０，１２０の間のメモリバンクのコンテンション問題を低減することができる、または回避することができる点である。
【００２３】
一実施形態では、コンピューティングデバイス１２０はＧＰＵであり、第２のメモリバッファ（例えば、図２におけるメモリバッファ２５０）は、コンピューティングデバイス１２０によるオペレーションの実行に使用可能である。例えば、グラフィックスのオペレーション実行のために必要なフレームメモリバッファは、第２のメモリバッファにマッピングされ得る。１以上のメモリバンクはＧＰＵオペレーション専用であるため、第２のメモリバッファの数ある中の１つの利点は、コンピューティングデバイス１１０，１２０間のメモリバンクのコンテンション問題を低減することができる、または回避することができるという点である。
【００２４】
他の実施形態では、第１および第２のメモリバッファは、コンピューティングデバイス１１０またはコンピューティングデバイス１２０によるオペレーションの実行に使用できる。一実施形態では、コンピューティングデバイス１１０はＧＰＵであり、第１および第２のメモリバッファは、コンピューティングデバイス１１０によるオペレーションの実行に使用できる。例えば、図２におけるメモリバッファ２１０は、フレームのバッファリングに関連するＧＰＵオペレーションに割り当て可能であり、メモリバッファ２２０，２３０，２４０は、ビデオのデコーディングに関連するＧＰＵオペレーションに割り当て可能であり、メモリバッファ２５０は、静的画面状態に関連するＧＰＵオペレーションの実行に割り当て可能である。本明細書の記載に基づき、図２におけるメモリバッファ２１０〜２５０は、他のＧＰＵオペレーションに割り当て可能であり、それは本明細書に記載された実施形態の範囲と精神に沿っていることを当業者は認識するであろう。また、本明細書の記載に基づき、メモリバッファ２１０〜２５０は、他のタイプのコンピューティングデバイスに関連付けられたオペレーション（例えば、ＣＰＵおよびＡＳＩＣコントローラ）に割り当て可能であり、それは本明細書に記載された実施形態の範囲と精神に沿っていることを当業者は認識するであろう。
【００２５】
メモリバッファ２１０〜２５０を図１のマルチクライアントコンピューティングシステム１００（例えば、図２のメモリチャネル１４０〜１７０）の全てのメモリチャネルにわたって割り当てることについての数ある中の１つの利点は、特に、メモリバンクのコンテンション問題を低減する、または回避することができるだけでなく、メモリチャネルの全帯域幅を使用できるということである。マルチコンピューティングシステム１００でメモリチャネルの全帯域幅を使用することで、その電力と効率の両方が向上する。
【００２６】
図３を参照すると、メモリ管理ユニット３１０は、図１のコンピューティングデバイス１１０，１２０に関連するオペレーションに対して、メモリ空間の「穴」を最小限に抑えるような方法で１以上のメモリバッファを割り当てるように構成されている。「穴」とは、利用可能なメモリバッファが、コンピューティングデバイス１１０または１２０が要求したものよりも少なく、要求されたメモリバッファがより高位のアドレス空間に割り当てられる状況を表している。これは、結果として利用可能なメモリバッファ空間が未使用のまま残されることを意味する。一実施形態では、メモリ管理ユニット３１０は、メモリ空間における穴の発生を最小限に抑える、または回避するために、メモリバッファのアカウンティングとステータスを維持するように構成されている。このアカウンティングとステータスの情報は、本明細書では「追跡情報」ともいう。一実施形態では、この追跡情報は、以下の情報を提供する。即ち、（１）割り当てられたメモリバッファが使用中、解放、またはリザーブされているか、（２）割り当てられたメモリバッファのメモリチャネル／メモリバンクの詳細度、（３）割り当てられたメモリバッファに関連するシーケンス識別子、および（４）割り当てられたメモリバッファのパフォーマンスパラメータ、である。この割り当てられたメモリバッファに関連するシーケンス識別子およびパフォーマンスパラメータについては、以下でさらに詳細に説明する。
【００２７】
図４は、利用可能なメモリ空間４１０が、コンピューティングデバイス１１０または１２０が要求したメモリバッファ４２０よりも小さい場合のシナリオ例を図示したものである。一実施形態では、すべてのメモリチャネル（例えば、メモリチャネル１４０〜１７０）の帯域幅全体を利用するために、メモリバッファ４２０を、利用可能なメモリ空間４１０に割り当てることが望ましく、かつ最適である。本発明の一実施形態によれば、図３のメモリ管理ユニット３１０は、図１のコンピューティングデバイス１１０，１２０のオペレーションに関連するメモリバッファへのメモリ空間の割り当てを追跡するように構成されており、これは将来のオペレーションでメモリ空間の割り当てにこの追跡情報を使用できるように行われている。例えば、図４のシナリオ例では、メモリ管理ユニット３１０が維持する追跡情報は、コンピューティングデバイスの将来のオペレーションのために、メモリバッファ４２０がメモリチャネル１７０のメモリバンク０〜３全体に割り当てできるように、メモリバッファ２１０，２３０，２４０，２５０のメモリ空間の割り当てを調整するために使用できる（例えば、図２のメモリバッファの配列と同様に）。その結果、図１のマルチクライアントコンピューティングシステム１００でメモリチャネルの帯域幅全体を利用可能になり、したがってマルチクライアントコンピューティングシステム１００の電力と効率の改善がもたらされる。
【００２８】
図３を参照すると、メモリ管理ユニット３１０は、図１のコンピューティングデバイス１１０，１２０の作業負荷予測に基づき、コンピューティングデバイス１１０，１２０に関連するオペレーションに対して１以上のメモリバッファを割り当てるようにも構成される。一実施形態では、コンピューティングデバイス１１０は、ＧＰＵであり、特定の帯域幅または速度で、１以上のメモリバッファに対して１以上のＧＰＵオペレーションを実行するように要求する。コンピューティングデバイス１１０（例えば、ＧＰＵ）が要求するＧＰＵオペレーションのタイプに基づき、メモリ管理ユニット３１０は、適切量のメモリ空間およびメモリバッファをＧＰＵオペレーションに割り当てることができる。例えば、図２を参照すると、メモリバッファ２２０，２３０，２４０，２５０を使用してビデオデコードパイプラインオペレーションを行うことができる。例えば、メモリバッファ２５０は、ビデオデコードパイプラインの静的画面状態で使用できる。メモリバッファ２３０，２４０は、そのパイプラインのビデオデコーダによる内部使用の用途で使うことができる。さらに、メモリバッファ２２０は、例えば、ビデオデコードパイプラインで、ビデオデコーダによる書き込みオペレーション、および１以上のグラフィックスブロックからの読み出しオペレーションに使用できる。
【００２９】
本発明の実施形態によれば、メモリバッファ２２０，２３０，２４０，２５０のそれぞれに、シーケンス識別子を割り当てることができる。一実施形態では、シーケンス識別子は、図１のメモリコントローラ１３０およびメモリデバイス１４０，１５０，１６０，１７０に対して、割り当てられたメモリバッファのアドレス／アクセスのシーケンスのインジケータとなるリファレンスを与える。例えば、上記のビデオデコードパイプラインの例に戻ると、シーケンス識別子「１」は、ビデオデコードパイプラインのメモリバッファ２５０および静的画面状態のオペレーションに割り当てられる。シーケンス識別子「２」は、メモリバッファ２４０およびビデオデコーダの内部オペレーションに割り当てられる。シーケンス識別子「３」は、メモリバッファ２３０およびビデオデコーダによる書き込みオペレーションと、１以上のグラフィックスブロックからの読み出しオペレーションとに割り当てられる。さらに、シーケンス識別子「４」は、メモリバッファ２２０およびビデオデコーダの内部オペレーションに割り当てられる。
【００３０】
本発明の実施形態によれば、ビデオデコードパイプラインオペレーションの一部について、メモリコントローラ１３０およびメモリデバイス１４０〜１７０は、特定のシーケンスで、メモリバッファ２２０，２３０，２４０，２５０にアドレス／アクセスしてもよい。このメモリバッファ２２０，２３０，２４０，２５０のシーケンス識別子は、特定シーケンスのパラメータとして使用できる。例えば、特定のシーケンスが「１」「２」および「４」の場合、最初にメモリバッファ２５０がアドレス／アクセスされ、次にメモリバッファ２４０がアドレス／アクセスされ、最後にメモリバッファ２２０がアドレス／アクセスされる。他の例では、特定のシーケンスが「１」「３」および「４」の場合、最初にメモリバッファ２５０がアドレス／アクセスされ、次にメモリバッファ２３０がアドレス／アクセスされ、最後にメモリバッファ２２０がアドレス／アクセスされる。この両方の例において、特定のシーケンスでは、「２」と「３」は続けて起こらない。その結果、メモリチャネル１６０におけるメモリバンクのコンテンション問題が低減される、または回避されるだけでなく、マルチクライアントコンピューティングシステム１００でメモリチャネルの全帯域幅を利用することもできる。
【００３１】
本発明の実施形態によれば、メモリ管理ユニット３１０が、コンピューティングデバイス１１０，１２０の作業負荷予測の情報を有しない場合、コンピューティングデバイス１１０，１２０に関連するオペレーションに対してデフォルトのメモリバッファ配列を使用することができる。一実施形態では、このデフォルトのメモリバッファ配列は、すべてのメモリチャネルの、およびすべてのメモリチャネルにわたるメモリバンク全体に広がっている。このメモリバッファ配列の一例が図２のメモリバッファ２１０として示されており、メモリバッファ２１０はすべてのメモリチャネル１４０〜１７０のメモリバンク０〜３全体に広がっている。
【００３２】
コンピューティングデバイス１１０，１２０の作業負荷予測を評価することに加えて、メモリ管理ユニット３１０は、メモリチャネル１４０，１５０，１６０，１７０のそれぞれを特定の動作周波数で動作させるように構成される。その結果、メモリチャネル毎の帯域幅を、１以上のメモリチャネル全体に割り当てられたメモリバッファに基づき評価することができる。例えば、メモリチャネル１４０，１５０，１６０，１７０全体のメモリバッファ（例えば、図２のメモリバッファ２１０，２２０，２３０，２４０，２５０）の特定配列に基づき、図１のマルチクライアントコンピュータシステム１００のパフォーマンス（例えば、スループット）がメモリバッファの配列に基づいて向上するかどうかを評価するために、メモリチャネルそれぞれのクロック周波数を増やす、または減らすことができる。この情報に基づき、コンピューティングデバイスに関連するメモリオペレーションが最適化できるように、１以上のメモリバッファに関連する１以上のメモリチャネルに対して最適なクロック周波数を使用できる。一実施形態では、上述した追跡情報のパフォーマンスパラメータ部分には、メモリチャネル１４０，１５０，１６０，１７０のそれぞれに対する最適なクロック周波数が含まれる。
【００３３】
図３を参照すると、スケジューラ３２０は、メモリ管理ユニット３１０からのメモリ要求を処理するように構成される。一実施形態では、スケジューラ３２０は、メモリ管理ユニット３１０が提供する追跡情報に基づき、メモリ要求を処理する。上述したように、一実施形態では、この追跡情報は以下の情報を提供することができる。即ち、（１）割り当てられたメモリバッファが使用中、解放、またはリザーブされているか、（２）割り当てられたメモリバッファのメモリチャネル／メモリバンクの詳細度、（３）割り当てられたメモリバッファに関連するシーケンス識別子、および（４）割り当てられたメモリバッファのパフォーマンスパラメータ、である。こうした追跡情報に基づき、スケジューラ３２０は、図１のデータバス１４１，１５１，１６１，１７１のそれぞれを介してメモリチャネル１４０，１５０，１６０，１７０への読み出しオペレーションおよび書き込みオペレーションを送るために必要なアドレス、コマンド、および制御信号を生成する。図１のコンピューティングデバイス１１０，１２０からの読み出し、および書き込みのメモリ要求に対応するアドレス、コマンド、および制御信号の生成は、当業者にとって既知である。
【００３４】
一実施形態では、スケジューラ３２０は、メモリ管理ユニット３１０と共に動作し、図１のコンピューティングデバイス１１０，１２０間のアービトレーション（調停）のスレッドをソートする。一実施形態では、図１のメモリコントローラ１３０は、アービトレーションの２つのスレッドを管理できる。この２つのスレッドの１つは、コンピューティングデバイス１１０からのメモリ要求に割り当てられたアービトレーションのスレッド、もう１つはコンピューティングデバイス１２０からのメモリ要求に割り当てられたアービトレーションのスレッドである。スケジューラ３２０は、一方のコンピューティングデバイスのメモリ要求を先に処理してから、他方のコンピューティングデバイスのメモリ要求を処理することで最適化できる。例えば、コンピューティングデバイス１１０がＣＰＵであり、コンピューティングデバイス１２０がＧＰＵの場合、通常、ＣＰＵのパフォーマンスは、ＧＰＵのパフォーマンスよりもメモリ遅延の影響を受けやすいため、スケジューラ３２０は、ＣＰＵ関連のメモリ要求をＧＰＵ関連のメモリ要求よりも先に処理することができる。ここで、本発明の実施形態によれば、スケジューラ２２０は、ＣＰＵ関連のメモリ要求に関連するデータ転送がＧＰＵ関連のメモリ要求に関連するデータ転送よりも優先されるように、図１のシステムバス１８０の制御をコンピューティングデバイス１１０に提供する。
【００３５】
一実施形態では、図１のコンピューティングデバイス１１０，１２０に関連するオペレーションが（例えば、図２のメモリバッファ２１０〜２５０を使用して）実行された後、図３のメモリ管理ユニット３１０は、メモリ空間からのオペレーションに関連する１以上のメモリバッファの割り当てを解除する。この時点で、メモリ管理ユニット３１０は、その解放されたメモリ空間を、コンピューティングデバイス１１０，１２０のオペレーションに関連する他のメモリバッファに割り当てることができる。メモリ管理ユニット３１０は、その解放されたメモリ空間を前のオペレーションと同じ配列の他のメモリバッファに割り当てる（例えば、前のオペレーションに関連するメモリバッファに割り当てられた同じ番号のバンクとチャネルに割り当てる）ことができ、または、前のオペレーションとは異なる配列に割り当てる（例えば、前のオペレーションに関連するもう１つのメモリバッファに割り当てられた異なる番号のバンクとチャネルに割り当てる）ことができる。メモリ管理ユニット３１０は、図３に関して上記で説明したのと同じ方法で、コンピューティングデバイス１１０，１２０のオペレーションに対してもう１つのメモリバッファを割り当てるように構成される。
【００３６】
図５は、複数のメモリチャネルを有するコンピューティングシステムにおいて１以上のメモリバッファを割り当てるための方法５００の実施形態を示している。方法５００は、たとえば、図１のマルチクライアントコンピューティングシステム１００を使用して行うことができるが、これに制限されるものではない。
【００３７】
ステップ５１０では、第１のメモリバッファが第１の複数のメモリバンクに割り当て、または関連付けられており、第１の複数のメモリバンクは、１以上のメモリチャネルの第１のセットにわたって広がっている。図３のメモリ管理ユニット３１０は、例えば、ステップ５１０を実行するために使用できる。
【００３８】
ステップ５２０では、第２のメモリバッファが、第２の複数のメモリバンクに割り当て、または関連付けられており、第２の複数のメモリバンクは、１以上のメモリチャネルの第２のセットにわたって広がっている。一実施形態では、第２の複数のメモリバンクは（ステップ５１０の）第１の複数のメモリバンクとは異なる。他の実施形態では、第２の複数のメモリバンクは、第１の複数のメモリバンクと同じである。例えば、図３のメモリ管理ユニット３１０を使用して、ステップ５２０を実行することができる。
【００３９】
ステップ５３０では、第１のシーケンス識別子は第１のメモリバッファに、第２のシーケンス識別子は第２のメモリバッファにそれぞれ関連付けられる。例えば、図３のメモリ管理ユニット３１０を使用して、ステップ５３０を実行することができる。
【００４０】
ステップ５４０では、第１および第２のシーケンス識別子に基づき、第１および第２のメモリバッファがアクセスされる。一実施形態では、メモリバンクのコンテンションを回避し、複数のメモリチャネルの全帯域幅を利用するために、第１および第２のメモリバッファは、順番にアクセスされる。例えば、図３のメモリ管理ユニット３１０とスケジューラ３２０とを使用して、ステップ５４０を実行することができる。
【００４１】
さらに、一実施形態では、第１のメモリバッファに関連する第１のメモリオペレーション、および第２のメモリバッファに関連する第２のメモリオペレーションを実行する場合、第１のメモリオペレーションは第１の動作周波数で、第２のメモリオペレーションは第２の動作周波数でそれぞれ実行される。本発明の一実施形態によれば、第１および第２の動作周波数は互いに異なる。
【００４２】
ステップ５５０では、第１のメモリバッファに関連する第１のメモリオペレーション、および第２のメモリバッファに関連する第２のメモリオペレーションのそれぞれを実行後、各メモリ空間から第１および第２のメモリバッファの割り当てが解除される。第１および第２のメモリバッファの割り当てが解除されると、他のメモリオペレーションに関連するメモリバッファをその解放されたメモリ空間に割り当てることができる。
【００４３】
本発明の様々な態様は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせで実施してもよい。図６は、本発明またはその一部の実施形態をコンピュータで読み取り可能なコードで実施可能なコンピュータシステム６００の一例を図示したものである。例えば、図５のフローチャート５００に示されている方法は、システム６００で実施できる。本発明の様々な実施形態は、このコンピュータシステム６００の例に関して説明されている。本明細書を読めば、他のコンピュータシステムおよび／またはコンピュータアーキテクチャを使用した本発明の実施形態の実施方法は、当業者にとって明らかであろう。
【００４４】
本発明の様々な実施形態のシミュレーション、合成、および／または製造は、一部には、汎用プログラミング言語（例えば、Ｃ、Ｃ＋＋など）、例えば、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬ、Ａｌｔｅｒａ  ＨＤＬ（ＡＨＤＬ）などのハードウェア記述言語（ＨＤＬ）、またはその他の利用可能なプログラミングおよび／またはスキマティックキャプチャツール（例えば、回路キャプチャツールなど）を含むコンピュータで読み取り可能なコードを用いて達成されてもよいことに留意すべきである。こうしたコンピュータで読み取り可能なコードは、半導体、磁気ディスク、光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）を含む任意の既知のコンピュータで使用可能な媒体に記憶することができる。そのため、このコードは、インターネットを含む通信ネットワーク上で送信することができる。上記で説明したシステムおよび技術によって達成される機能および／または提供される構造は、プログラムコードで実現し、集積回路の製造の一部としてハードウェアに変換することができるコア（例えば、ＧＰＵコアなど）で表すことができる、ということが理解される。
【００４５】
コンピュータシステム６００には、プロセッサ６０４などの１以上のプロセッサが含まれる。プロセッサ６０４は、特殊用途または汎用のプロセッサの場合がある。プロセッサ６０４は、通信インフラストラクチャ６０６（例えば、バスまたはネットワーク）に接続されている。
【００４６】
コンピュータシステム６００には、主記憶装置６０８、好適にはランダムアクセスメモリ（ＲＡＭ）も含まれ、さらに補助記憶装置６１０が含まれる場合もある。補助記憶装置６１０には、例えば、ハードディスクドライブ６１２、リムーバブル記憶装置ドライブ６１４、および／またはメモリスティックを含むことができる。リムーバブル記憶装置ドライブ６１４には、フロッピディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュメモリなどが含まれる。リムーバブル記憶装置ドライブ６１４は、よく知られている方式で、リムーバブル記憶装置６１８からの読み出し、および／またはリムーバブル記憶装置６１８に対する書き込みを行う。リムーバブル記憶装置６１８は、リムーバブル記憶装置ドライブ６１４によって読み書きされるフロッピディスク、磁気テープ、光ディスクなどを含む。当業者が理解するように、リムーバブル記憶装置６１８には、コンピュータソフトウェアおよび／またはデータが保存されたコンピュータで使用可能な記憶媒体が含まれる。
【００４７】
代替の実装では、補助記憶装置６１０には、コンピュータプログラムやその他の命令をコンピュータシステム６００にロードできるようにするための他の類似デバイスを含むことができる。こうしたデバイスには、例えば、リムーバブル記憶装置６２２およびインタフェース６２０を含むことができる。こうしたデバイスの例としては、プログラムカートリッジおよびカートリッジインタフェース（例えば、ビデオゲームデバイスで使用されているようなもの）、リムーバブルメモリチップ（例えば、ＥＰＲＯＭまたはＰＲＯＭ）および関連ソケット、ならびにリムーバブル記憶装置６２２からコンピュータシステム６００にソフトウェアとデータを転送できるようにするその他のリムーバブル記憶装置６２２およびインタフェース６２０を含むことができる。
【００４８】
コンピュータシステム６００には、通信インタフェース６２４も含むことができる。通信インタフェース６２４は、コンピュータシステム６００と外部デバイスとの間でソフトウェアとデータを転送できるようにする。通信インタフェース６２４には、モデム、ネットワークインタフェース（例えばＥｔｈｅｒｎｅｔ（登録商標）カードなど）、通信ポート、ＰＣＭＣＩＡスロットおよびカードなどを含むことができる。通信インタフェース６２４経由で転送されるソフトウェアやデータは、信号形式であり、通信インタフェース６２４が受信可能な電子、電磁気、光、またはその他の信号であってもよい。こうした信号は、通信経路６２６経由で通信インタフェース６２４に提供される。通信経路６２６は、信号を伝搬するものであり、電線すなわちケーブル、光ファイバ、電話回線、携帯電話網、ＲＦリンク、またはその他の通信チャネルによって実装され得る。
【００４９】
本明細書では、「コンピュータプログラム媒体」および「コンピュータで使用可能な媒体」という用語は、一般的にリムーバブル記憶装置６１８、リムーバブル記憶装置６２２、およびハードディスクドライブ６１２に設けられているハードディスクのことをいうために用いられる。コンピュータプログラム媒体およびコンピュータで使用可能な媒体は、主記憶装置６０８および補助記憶装置６１０などの記憶装置のことを言うこともでき、半導体記憶装置（ＤＲＡＭなど）のことをいうこともできる。こうしたコンピュータプログラム製品は、コンピュータシステム６００に対してソフトウェアを提供する。
【００５０】
コンピュータプログラム（コンピュータ制御論理ともいう）は、主記憶装置６０８および／または補助記憶装置６１０に記憶される。コンピュータプログラムは、通信インタフェース６２４経由で受信されてもよい。こうしたコンピュータプログラムが実行されると、コンピュータシステム６００は、本明細書で説明したように本発明の実施形態を実施できるようになる。特に、コンピュータプログラムが実行されると、プロセッサ６０４は、上記で説明した図５のフローチャート５００によって図示される方法のステップなどの本発明の実施形態のプロセスを実行できる。従って、こうしたコンピュータプログラムは、コンピュータシステム６００のコントローラを表す。本発明の実施形態がソフトウェアを使用して実施される場合、このソフトウェアはコンピュータプログラム製品に記憶され、リムーバブル記憶装置ドライブ６１４、インタフェース６２０、ハードディスクドライブ６１２、または通信インタフェース６２４を使用してコンピュータシステム６００にロードされることが可能である。
【００５１】
本発明の実施形態は、任意のコンピュータで使用可能な媒体に記憶されているソフトウェアを含むコンピュータプログラム製品も対象である。こうしたソフトウェアが１以上のデータ処理デバイスで実行されると、本明細書で説明したようにデータ処理デバイスが動作する。本発明の実施形態では、現在知られている、または将来的に知られるであろう、任意のコンピュータで使用可能または読み出し可能な媒体を採用する。コンピュータで使用可能な媒体には、主記憶装置（例えば、任意のタイプのランダムアクセスメモリ）および補助記憶装置（例えば、ハードドライブ、フロッピディスク、ＣＤ−ＲＯＭ、ＺＩＰディスク、テープ、磁気記憶装置、光記憶装置、ＭＥＭＳ、ナノ技術記憶装置など）、および通信媒体（例、有線および無線の通信ネットワーク、ローカルエリアネットワーク、広域ネットワークなど）が含まれるが、これらに制限されるものではない。
【００５２】
上記で本発明の様々な実施形態を説明してきたが、これらは例示目的のみのものであり、制限目的ではないことを理解するべきである。添付の請求項によって定義される発明の範囲および精神に従って、様々な形態および詳細の変更を施すことが可能であることを当業者は理解するであろう。本発明はこうした例に制限されるものではないことを理解するべきである。本発明は、本明細書に記載されているように動作するあらゆる要素に適用可能である。したがって、本発明の広さと範囲は、上記で説明した例示的実施形態のいずれによっても制限されるものではなく、以下の請求項および均等物によってのみ定義されるべきである。
【図１】
0005947302.tif 000002
【図２】
0005947302.tif 000003
【図３】
0005947302.tif 000004
【図４】
0005947302.tif 000005
【図５】
0005947302.tif 000006
【図６】
0005947302.tif 000007