添付の図面を参照して、様々な態様が詳細に説明される。可能な限り、同じまたは同様の部分を指すために図面全体を通じて同じ参照番号が使用される。特定の例および実装形態になされる言及は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
「例示的な」という単語は、本明細書では、「例、実例、または例証として機能する」ことを意味するのに使用される。「例示的な」として本明細書で説明されるいかなる実装形態も、必ずしも他の実装形態よりも好ましいか、または有利であると解釈されるべきではない。
様々な態様は、データセグメントがキャッシュライン上で重複するようにキャッシュ内のデータセグメントを小型化することによって、キャッシュメモリ中の圧縮されたデータセグメントの密集度を向上させるためにコンピューティングデバイスにおいて実施され得る方法を含む。キャッシュライン上でデータを重複させることによって、小さな圧縮されたデータセグメントがキャッシュラインを共有することができ、メモリアクセスをより効率的に、かつ不要なオーバーフェッチングをより少なくすることが可能になる。
本明細書では「コンピューティングデバイス」という用語は、携帯電話、スマートフォン、ウェブパッド、タブレットコンピュータ、インターネット対応携帯電話、WiFi対応電子デバイス、携帯情報端末(PDA)、ラップトップコンピュータ、デスクトップコンピュータ(またはパーソナルコンピュータ)、サーバ、および少なくとも1つのプロセッサを備える同様の電子デバイスのうちの任意の1つまたはすべてを指すために使用される。コンピューティングデバイスは、プロセッサを介したソフトウェア命令の実行を可能にするために様々なアーキテクチャを利用することができ、ランダムアクセスメモリユニット(たとえば、DDR RAMなど)およびキャッシュユニット(たとえば、L2キャッシュ、L3キャッシュなど)などの1つまたは複数のメモリユニットを含み得る。
本明細書では「ソースデータセグメント」という用語は、コンピューティングデバイスのメモリまたはキャッシュユニットに記憶され得る圧縮されていないデータセグメントを指すために使用される。様々な態様では、ソースデータセグメントはサイズが256バイトであり得る。さらに、ソースデータセグメントは、キャッシュに記憶され得る物理アドレス空間の独占的な範囲と関連付けられてよく、独占的な範囲はソースデータセグメントと同じサイズ(たとえば、圧縮されていないタイルまたはデータブロックのサイズ)である。たとえば、ソースデータセグメントの独占的な範囲は256バイトであり得る。ソースデータセグメントは2つ以上のキャッシュラインに記憶され得るので、ソースデータセグメントの独占的な範囲は複数のキャッシュラインを包含する(または部分的に包含する)ように延び得る。本明細書では「ベースアドレス」という用語は、キャッシュにおけるソースデータセグメントの独占的な範囲の始点を表す物理アドレスまたは仮想アドレスを指すために使用される。本明細書では「オフセットアドレス」という用語は、ベースアドレス(物理または仮想)のオフセットである物理アドレスまたは仮想アドレスを指すために使用される。
本明細書では「圧縮されたデータセグメント」という用語は、従来のデータ圧縮アルゴリズムを実行するコンピューティングデバイスによってサイズが低減されたデータセグメントを指すために使用される。圧縮されたデータセグメントは、それぞれのソースデータセグメントよりもサイズ(たとえば、バイト)が小さいことがある。たとえば、圧縮されたデータセグメントは64バイトであり得るが、対応するソースデータセグメントは256バイトであり得る。
圧縮技法はしばしば、メモリユニットとキャッシュユニットとの間で移送されるデータの量を減らすことによって、コンピューティングデバイスの性能を向上させるために使用される。しかしながら、サイズがより小さいにもかかわらず、圧縮されたデータセグメントは依然として、キャッシュの特定のアドレス(たとえば、物理アドレス)に関連付けられて揃えられることがあり、キャッシュラインの使用をしばしば最適ではないものにする。たとえば、128バイトのキャッシュラインを使用して、256バイトのデータセグメントを64バイト(すなわち、4:1の圧縮比を使用する)または192バイト(すなわち、4:3の圧縮比を使用する)の圧縮されたデータセグメントへと圧縮するとき、キャッシュラインの64バイトはオーバーフェッチが原因で無駄にされることがある。キャッシュラインサイズ(たとえば、128バイト)よりも小さな最小の圧縮サイズ(たとえば、64バイト)の圧縮されたデータセグメントを用いると、従来の技法を介したキャッシュへのデータロードは無駄なデータを含み、そのことが帯域幅を増大させて圧縮を悪化させる。たとえば、64バイトおよび192バイトの圧縮されたデータセグメントは、一部の作業負荷(たとえば、ユーザインターフェース(UI)作業負荷)に対するキャッシュのトランザクションのかなりの部分を備えることがあるので、キャッシュ空間の非効率な使用、さらには不必要なオーバーフェッチングにつながり得る。多くの場合、UI作業負荷に圧縮が関与する状況などにおいて、キャッシュライン内に圧縮されたデータを配置するための従来の技法は、4:1または4:3の圧縮比を用いて圧縮されたデータセグメントを扱うときに特に非効率であり得る。
図2はさらに、従来の技法の潜在的な非効率性を強調しており、図1は、当技術分野において知られているような従来の圧縮技法を実施するコンピューティングデバイスのキャッシュラインにおける圧縮されたデータセグメントの問題のある配置を示す概略図101を示す。例示的なキャッシュは、連続的に並べられ各々が128バイトなどの固定されたサイズを有する、キャッシュライン102a〜102dを含み得る。概略図101の第1のライン110は、キャッシュに記憶され得る第1のソースデータセグメント112(またはタイルまたはデータブロック)および第2のソースデータセグメント114を示す。第1のソースデータセグメント112は、第1のキャッシュライン102aおよび第2のキャッシュライン102bに対応し得る(すなわち、第1のソースデータセグメント112はキャッシュライン102aと102bの両方に記憶され得る)。同様に、第2のデータセグメント114は、第3のキャッシュライン102cおよび第4のキャッシュライン102dに対応し得る(すなわち、第2のソースデータセグメント114はキャッシュライン102cと102dの両方に記憶され得る)。
様々な従来の圧縮アルゴリズムを実行するように構成されるコンピューティングデバイスは、4:1の圧縮比(たとえば、256バイトのデータセグメントを64バイトのデータセグメントへと圧縮する)、4:2の圧縮比(たとえば、256バイトのデータセグメントを128バイトのデータセグメントへと圧縮する)、4:3の圧縮比(たとえば、256バイトのデータセグメントを192バイトのデータセグメントへと圧縮する)、および4:4の圧縮比(たとえば、256バイトのデータセグメントを256バイトのデータセグメントへと圧縮する、すなわち圧縮なし)などの、様々な圧縮比を用いてソースデータセグメント112、114を圧縮することが可能であり得る。
たとえば、概略図101の第2のライン120は、ソースデータセグメント112、114の第1の圧縮を示す。具体的には、第1のソースデータセグメント112は、コンピューティングデバイスによって、サイズが192バイトである第1の圧縮されたデータセグメント122へと(すなわち、4:3の圧縮比を使用して)圧縮され得る。第1の圧縮されたデータセグメント122は、第1のソースデータセグメント112と揃ったままであり得る(すなわち、第1の圧縮されたデータセグメント122の始点は第1のキャッシュライン102aにおいてオフセットを伴わずに記憶され得る)。第2のライン120において、第2のソースデータセグメント114に関して、コンピューティングデバイスは、4:4の圧縮比を使用することができ(すなわち圧縮されなくてよく)、したがって、第2のソースデータセグメント114は依然としてサイズが256バイトであり得る。コンピューティングデバイスによって使用される圧縮アルゴリズムがある特定のデータセグメントを圧縮することが可能であるように構成されないとき、または、コンピューティングデバイスが別様にデータセグメントを圧縮することを選択しないように構成されるときなどは、ソースデータセグメントは選択的に圧縮され得る。
第1の圧縮されたデータセグメント122は依然として第1のキャッシュライン102aおよび第2のキャッシュライン102bに対応し得る(またはそれらと揃えられ得る)が、そのより小さなサイズ(すなわち、元の256バイトよりも小さなサイズ)が原因で、第1の圧縮されたデータセグメント122は、第2のキャッシュライン102bの一部(または半分)しか利用できない。言い換えると、192バイトの第1の圧縮されたデータセグメント122は、128バイトの第1のキャッシュライン102aが完全に使用されるようにし、128バイトの第2のキャッシュライン102bが半分しか使用されないようにし得る。第2のキャッシュライン102bを半分使用する結果として、使用されていないデータの第1の64バイトのオーバーフェッチデータセグメント123(図1では「OF」と呼ばれる)も、第2のキャッシュライン102bに存在し得る。たとえば、第1のオーバーフェッチセクション123は、DDRまたは他のメモリの中の第1の圧縮されたデータセグメント122を読み取るとき、第2のキャッシュライン102bにロードされ得る。
別の例として、概略図101の第3のライン130は、ソースデータセグメント112、114の第2の圧縮を示す。具体的には、第1のソースデータセグメント112は、コンピューティングデバイスによって、サイズが64バイトである第2の圧縮されたデータセグメント132へと(すなわち、4:1の圧縮比を使用して)圧縮され得る。第2の圧縮されたデータセグメント132は、第1のソースデータセグメント112と揃ったままであり得る(すなわち、第2の圧縮されたデータセグメント132の始点は第1のキャッシュライン102aにおいてオフセットを伴わずに記憶され得る)。第2の圧縮されたデータセグメント132は第2のキャッシュライン102bを利用しないことがあるので、第2のキャッシュライン102bは2つの64バイトの使用されていないデータセグメント139(たとえば、無効な、空の、または別様に使用されていないデータセグメント)で満たされることがある。代替的に、第2のキャッシュライン102bは、1つの128バイトの無効なデータセグメントで満たされることがある。64バイトの第2の圧縮されたデータセグメント132が128バイトの第1のキャッシュライン102aの半分しか満たさないことが原因で、オーバーフェッチデータ/使用されていないデータの第2の64バイトのオーバーフェッチデータセグメント133も、第1のキャッシュライン102aに存在し得る。
第3のライン130の中の第2の圧縮されたデータセグメント132と同様に、第2のソースデータセグメント114は、コンピューティングデバイスによって、サイズが64バイトである第3の圧縮されたデータセグメント134へと(すなわち、4:1の圧縮比を使用して)圧縮され得る。第3の圧縮されたデータセグメント134は、第2のソースデータセグメント114と揃ったままであり得る(すなわち、第3の圧縮されたデータセグメント134の始点は第3のキャッシュライン102cにおいてオフセットを伴わずに記憶され得る)。第3の圧縮されたデータセグメント134は第4のキャッシュライン102dを利用しないことがあるので、第4のキャッシュライン102dは2つの64バイトの使用されていないデータセグメント139(または代替的に、1つの128バイトの使用されていないデータセグメント)で満たされることがある。しかしながら、64バイトの第3の圧縮されたデータセグメント134が128バイトの第3のキャッシュライン102cの半分しか満たさないことが原因で、オーバーフェッチデータ/使用されていないデータの第3の64バイトのオーバーフェッチデータセグメント135も、第3のキャッシュライン102cに存在し得る。
別の例として、概略図101の第4のライン140は、ソースデータセグメント112、114の第3の圧縮を示す。具体的には、第1のソースデータセグメント112は、コンピューティングデバイスによって、サイズが128バイトである第4の圧縮されたデータセグメント142へと(すなわち、4:2の圧縮比を使用して)圧縮され得る。第4の圧縮されたデータセグメント142は、第1のソースデータセグメント112と揃ったままであり得る(すなわち、第4の圧縮されたデータセグメント142の始点は第1のキャッシュライン102aにおいてオフセットを伴わずに記憶され得る)。第4の圧縮されたデータセグメント142は第2のキャッシュライン102bを利用しないことがあるので、第2のキャッシュライン102bは128バイトの使用されていないデータセグメント149(または代替的に、2つの64バイトの使用されていないデータセグメント)で満たされることがある。
第2のソースデータセグメント114は、コンピューティングデバイスによって、サイズが192バイトである第5の圧縮されたデータセグメント144へと(すなわち、4:3の圧縮比を使用して)圧縮され得る。第5の圧縮されたデータセグメント144は、第2のソースデータセグメント114と揃ったままであり得る(すなわち、第5の圧縮されたデータセグメント144の始点は第3のキャッシュライン102cにおいてオフセットを伴わずに記憶され得る)。第5の圧縮されたデータセグメント144は第4のキャッシュライン102dを部分的にしか利用しないことがあるので、第4のキャッシュライン102dは第4の64バイトのオーバーフェッチデータセグメント145で満たされることがある。
図1に示される従来の技法の圧縮されたデータセグメントの非効率な配置を改善するために、様々な態様は、データセグメントがキャッシュライン上で重複するようにキャッシュ内のデータセグメントを小型化するための、方法、デバイス、および非一時的プロセッサ可読記憶媒体を含む。言い換えると、データセグメントを、その固有の通常のアドレス範囲内ではなく、他のデータセグメントと通常は関連付けられるキャッシュのアドレス範囲(たとえば、物理アドレス範囲)内に置くことができ、キャッシュラインのより効率的な使用をもたらす(すなわち、同じ量のデータを記憶するのに必要とされるキャッシュラインがより少ない)。そのような重複により、小さな圧縮されたデータセグメントがキャッシュラインを共有することができ、メモリアクセス(たとえば、DDR MAL)をより効率的に、かつ不要なオーバーフェッチングをより少なくすることが可能になる。
様々な態様では、コンピューティングデバイスは、別のデータセグメントと通常は関連付けられるキャッシュの独占的な範囲(またはアドレス空間)へとデータセグメントの配置を移す(またはオフセットする)、キャッシュライン小型化動作を実行するように構成され得る。たとえば、コンピューティングデバイスは、2つの連続する独占的な範囲が単一のキャッシュラインの各々の半分へと延びるように、それらの範囲を移すことができる。そのような小型化を達成するために、コンピューティングデバイスは、第2のデータセグメントと通常は関連付けられるキャッシュライン内に(たとえば、物理アドレス内に)第1のデータセグメントを記憶するために、第1のデータセグメント(またはデータブロック)のベースアドレスに適用されるべきベースオフセットを特定することができる。ベースオフセットは、データセグメントの少なくともデータサイズに基づいて、コンピューティングデバイスによって決定され得る。そのようなデータサイズは、データセグメントの圧縮比(すなわち、圧縮されるサイズに対する圧縮されていないサイズの比)に基づいて特定され得る。たとえば、データセグメントのベースオフセットは、データセグメントが第1の圧縮比(たとえば、4:4)にて圧縮されるときはベースアドレスからの第1の量(バイト単位)、データセグメントが第2の圧縮比(たとえば、4:1)にて圧縮されるときは第2の量であり得る。そのような圧縮比は、データセグメントを圧縮するためにコンピューティングデバイスによって利用される様々な圧縮アルゴリズムに基づいて、コンピューティングデバイスによって特定され得る。
データサイズ(たとえば、圧縮比)に加えて、ベースオフセットは、ベースアドレス自体に基づいてコンピューティングデバイスによって決定され得る。たとえば、ある圧縮レベル(たとえば、4:1)にて圧縮されるデータセグメントは、そのベースアドレスのあるビット(たとえば、ビット8)が奇数(すなわち、「1」)であるときは第1のオフセット(たとえば、64バイト)を、そのビットが偶数(すなわち、「0」)であるときは第2のオフセット(たとえば、256バイト)を有し得る。いくつかの態様では、ベースアドレスのビット8の値は、ベースアドレスにおいて256バイトごとに変化し得る。たとえば、キャッシュ中の第1のアドレスに対して、ビット8は「0」という値であり得るが、第1のアドレスから256バイト離れた第2のアドレスに対しては、ビット8の値は「1」という値であり得る。
いくつかの態様では、圧縮されたデータセグメントのベースオフセットは、4KB未満のページサイズであり得る。したがって、コンピューティングデバイスは、様々なメモリまたはキャッシュユニットの任意の仮想アドレスまたは物理アドレスに対して、態様の小型化の動作または技法を実行することができる。
いくつかの態様では、コンピューティングデバイスは、圧縮比とデータセグメントのベースアドレス(たとえば、キャッシュ中の物理アドレス)についての情報とを使用して、事前に定義されているデータテーブル上で検索を実行して、対応するベースオフセットを特定することができる。しかしながら、所定のデータテーブルを利用する代わりに、いくつかの態様では、コンピューティングデバイスは、論理、ソフトウェア、回路、および他の機能を使用して、キャッシュ内のデータセグメントを小型化するためのオフセット値を特定することができる。たとえば、コンピューティングデバイスは、ソフトウェア(たとえば、記憶されているデータテーブルにアクセスするための動作など)を実行するコンピューティングデバイスのプロセッサを介して、かつ/または、コンピューティングデバイスのプロセッサに結合された専用回路を介して、オフセット値を特定し、オフセットアドレスを計算することができる。
いくつかの態様では、コンピューティングデバイスは、すべての独占的な範囲を、ベースアドレスから(最小の圧縮サイズに等しい)キャッシュラインの半分だけ移すことができる。このようにして、キャッシュラインを満たさない圧縮されたデータセグメントを、別のソースデータセグメントの独占的な範囲と共有されるキャッシュラインへとオフセットすることができ、キャッシュライン全体の日和見主義的な使用が可能になる(すなわち、共有されるキャッシュラインに連続する圧縮をマッピングすることができる)。
バッファ内の他のデータセグメントとは独立にデータセグメントを小型化するために、態様の技法がコンピューティングデバイスによって利用され得る。たとえば、隣接するデータセグメントのために使用される圧縮比とは無関係に、特定のデータセグメントは、それ自体の圧縮比およびベースアドレスだけに基づいて、キャッシュライン内でオフセットされ得る。言い換えると、データセグメントを小型化するために、コンピューティングデバイスは、他のデータセグメントの圧縮比および/またはオフセットを認識することを求められないことがある。
以下は、コンピューティングデバイスによるある態様の方法の例示的な適用である。コンピューティングデバイスは、圧縮されていないデータセグメント(すなわち、ソースデータセグメント)を取り出すために、メモリユニット(たとえば、DDR)から読取りを実行するように構成され得る。圧縮されていない取り出されたデータセグメントは通常、キャッシュ中のベースアドレス(たとえば、物理アドレス)と関連付けられ得る。コンピューティングデバイスは、取り出されたデータセグメントを評価して、圧縮アルゴリズムを介して適用され得る圧縮のレベル(または比)を特定することができる。特定された圧縮比は、キャッシュ空間の使用率を最大にするために、データセグメントに対して可能な最大値にすることができる。コンピューティングデバイスは、その圧縮比にてデータセグメントを圧縮することができる。圧縮されていないデータセグメントと関連付けられる圧縮比およびベースアドレスに基づいて、コンピューティングデバイスは、ベースアドレスからの64バイトのオフセットなどの、圧縮されたデータセグメントを記憶するためのキャッシュ内でのオフセットを特定することができる。コンピューティングデバイスは次いで、圧縮されたデータセグメントをオフセットアドレスにロードすることができる。
これらの様々な態様は、電力および/またはメモリ帯域幅(たとえば、DDR)使用率の改善が望ましい様々なタイプのコンピューティングデバイスにおけるオーバーフェッチングに関する不必要な帯域幅の使用を減らすのに、有益であり得る。たとえば、態様の動作は、システムオンチップを利用するモバイルデバイス(たとえば、スマートフォン)によって利用され得る。さらに、様々な態様は、コンピューティングデバイスの性能を改善するためにL3キャッシュまたは他の同様のメモリもしくは記憶ユニットにおいて使用するためのプリフェッチングを可能にすることによって、有益であり得る。具体的には、共有されるキャッシュラインに記憶されるデータセグメントおよび隣のデータセグメント(または隣接するセグメント)を同時にフェッチングすることができ、これによって読取りを減らす。たとえば、コンピューティングデバイスは、64バイトのサイズの第1の圧縮されたデータセグメントを、64バイトのサイズの隣の第2の圧縮されたデータセグメントとともに取り出すことができる。
本明細書で説明される態様のキャッシュライン小型化動作は、UI作業負荷を含む様々な作業負荷に対するオーバーフェッチを減らすために、コンピューティングデバイスによって実行され得る。態様の動作は特に、連続するブロックの中に存在する4:1および4:3の圧縮比にて圧縮されるデータセグメントならびに4:1または4:2の圧縮比にて圧縮されるデータセグメントを含む作業負荷に対するオーバーフェッチを減らす際に有益であり得る。
従来の技法は、圧縮されたラインと圧縮されていないラインとをサポートするようにキャッシュを構成するための動作、ならびにデータを圧縮するかどうかを決定するための動作を含む。たとえば、従来の技法は、圧縮動作の典型的な影響だけが原因で、隣り合う2つの圧縮されていないラインを単一の要素へと圧縮するための方法を含み得る(たとえば、物理アドレス空間において順次的な隣り合うラインが、圧縮動作が原因で、1つのラインに収まるように圧縮され得る)。
従来の技法とは異なり、様々な態様は単に、圧縮またはキャッシュへの圧縮されたデータの記憶に対処するのではない。代わりに、態様の技法は、従来の圧縮されたデータがキャッシュライン内でより良好に配置され得るように、そのような従来の圧縮技法を変更するために使用され得る機能を提供する。言い換えると、態様の技法は、データを圧縮した後の処理段階においてコンピューティングデバイスにより利用され得るので、従来は異なるキャッシュラインに配置されたであろう圧縮後の出力(すなわち、すでに圧縮されているデータセグメント)が、より効率的な方式でキャッシュへと詰め込まれる。たとえば、態様の動作を実行するコンピューティングデバイスは、2つの異なる部分的に使用されるキャッシュラインへとロードされていたであろう2つの異なる圧縮データセグメントを取り出し、オフセット移動を使用することによってそれらの2つの圧縮されたデータセグメントを単一のキャッシュラインに記憶することができる。言い換えると、これらの態様は、キャッシュのアドレス空間(たとえば、物理アドレス空間)内のすでに圧縮されているデータセグメントを移し、キャッシュの使用率を改善するように圧縮されたデータセグメントのベースアドレスを変更することを特徴とする。
簡単にするために、様々な態様の記述は、キャッシュ内の圧縮されたデータセグメントを小型化する動作に言及し得る。しかしながら、様々な態様の動作は、任意の記憶ユニットまたはアーキテクチャ(たとえば、SRAM、キャッシュなど)内のあらゆる種類のデータ(たとえば、圧縮されているデータまたは圧縮されていないデータ)を小型化するために、コンピューティングデバイスによって適用され得る。言い換えると、様々な態様は、データ圧縮方式とともに使用することに限定されることを意図しない。たとえば、コンピューティングデバイスは、可変長のデータセグメントを含むあらゆるデータセット、またはバッファ中の穴(たとえば、使用されていないデータセグメント)を伴うあらゆるデータセットの小型化を改善するために、本明細書で説明される態様の方法を実行することができる。ベースアドレスは本明細書では物理アドレスと呼ばれ得るが、いくつかの態様では、ベースアドレスは仮想アドレスであり得ることを理解されたい。
様々な態様では、コンピューティングデバイスは、連続的なキャッシュライン(およびしたがって、キャッシュラインと関連付けられるデータまたはその中に記憶されるデータ)を利用することができる(すなわち、隣接する記憶)。しかしながら、いくつかの態様では、コンピューティングデバイスは、キャッシュ内の非連続的なアドレスにデータセグメントを記憶する/キャッシュ内の非連続的なアドレス内のデータセグメントにアクセスするように構成され得る。言い換えると、態様の技法は、メモリ中の異なる位置にあることもないこともある、キャッシュラインに記憶されているデータセグメントの小型化を可能にし得る。
簡単にするために、様々な態様の方法を実行するコンピューティングデバイスは、オフセットアドレスを計算するためにデータセグメントと関連付けられる圧縮比を特定するものとして、またはそうでなければ使用するものとして言及され得る。しかしながら、そのような態様を実行するコンピューティングデバイスは、様々な態様に従ってデータセグメントを小型化するために、そのようなデータセグメントのデータサイズを示す任意の形態のものを特定し、またはそうでなければ使用できることを理解されたい。言い換えると、様々な態様は、圧縮されることもされないこともあるデータセグメントの小型化を実行するために使用され得る。様々な態様の技法を実行するコンピューティングデバイスは、様々な圧縮比およびデータサイズの分布に基づいてデータセグメントのデータサイズを特定することが可能であり得るので、様々な態様の記述において言及される圧縮比の例は、特許請求の範囲を4:1、4:2、4:3、4:4の圧縮比に限定することを意図しない。
図2は、コンピューティングデバイスによって実行される態様のキャッシュライン小型化動作に従った、キャッシュライン220〜227内のデータセグメントの配置を示す。コンピューティングデバイスは、従来の圧縮アルゴリズムを利用して、様々なデータセグメントを圧縮するように構成され得る。具体的には、図2は、コンピューティングデバイスが圧縮アルゴリズムを使用して、256バイトのソースデータセグメント200a〜206aを、4:1の圧縮比を介して64バイトの圧縮されたセグメントへと、4:2の圧縮比を介して128バイトの圧縮されたセグメントへと、4:3の圧縮比を介して192バイトの圧縮されたセグメントへと、または4:4の圧縮比を介して256バイトの圧縮されたセグメントへと圧縮することができる。図2の以下の説明をわかりやすくするために、連続的に並べられているキャッシュライン220〜227の固定されたサイズ(たとえば、128バイト)を示すために、キャッシュラインのマッピングが垂直方向の線により示されており、点線270は1kBのインターリーブを示し得る。
キャッシュライン220〜227は、左から右に向かって増大し得る物理アドレスと関連付けられ得る(すなわち、第1のキャッシュライン220の物理アドレスは、第2のキャッシュライン221の物理アドレスと関連付けられる数未満の数である、など)。いくつかの態様では、キャッシュライン220〜227の物理アドレスは、少なくとも8つのビットによって表され得る。図2は、様々なキャッシュライン220〜227の関連する物理アドレスの8番目および7番目のビットの指示を示す。たとえば、第1のキャッシュライン220の8番目のビット(またはビット8)は「0」という値であってよく、第1のキャッシュライン220の7番目のビット(またはビット7)は「0」という値であってよく、第2のキャッシュライン221の8番目のビット(またはビット8)は「0」という値であってよく、第2のキャッシュライン221の7番目のビット(またはビット7)は「1」という値であってよく、第3のキャッシュライン222の8番目のビット(またはビット8)は「1」という値であってよく、第3のキャッシュライン222の7番目のビット(またはビット7)は「0」という値であってよい、などである。
概略図200の第1の線228は、通常の技法に従ってキャッシュに記憶されるときの、256バイトのセグメント境界210〜216内の圧縮されていないソースデータセグメント200a〜206aのデフォルトの配置を示す。言い換えると、ソースデータセグメント200a〜206aは、256バイトの間隔で、それらのベースアドレス内に記憶され得る。具体的には、第1のソースデータセグメント200a(図2では「A」と呼ばれる)は、第1のキャッシュライン220および第2のキャッシュライン221内でオフセットを伴わずに配置され得る。第2のソースデータセグメント202a(図2では「B」と呼ばれる)は、第3のキャッシュライン222および第4のキャッシュライン223内でオフセットを伴わずに配置され得る。第3のソースデータセグメント204a(図2では「C」と呼ばれる)は、第5のキャッシュライン224および第6のキャッシュライン225内でオフセットを伴わずに配置され得る。第4のソースデータセグメント206a(図2では「D」と呼ばれる)は、第7のキャッシュライン226および第8のキャッシュライン227内でオフセットを伴わずに配置され得る。
概略図200のライン229、230、240、250、260は、態様の技法に従ったベースアドレスと重複する圧縮された形態のソースデータセグメント200a〜206aのオフセット配置を示す。いくつかの態様では、以下で説明されるように様々な圧縮されたデータセグメントを配置するためにコンピューティングデバイスによって使用されるベースオフセットは、図3に関して以下で説明されるような、事前に定義されたデータテーブル上で実行される検索に基づき得る。
概略図200の第2のライン229は、それぞれのベースアドレスから64バイトのベースオフセット以内の、256バイトの圧縮されたデータセグメント200b〜206bの単純なオフセット配置を示す。そのようなマッピングは、追加の64バイトがこの態様を使用してすべての圧縮されたデータバッファの終わりに割り振られることを要求し得る。第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の圧縮されたデータセグメント200bは、第1のキャッシュライン220の半分、第2のキャッシュライン221全体、および第3のキャッシュライン222の半分の中に来るように、64バイトのオフセットを用いてコンピューティングデバイスによって配置され得る。第1の圧縮されたデータセグメント200bは、64バイトの重複280の分だけ第3のキャッシュライン222と重複し得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の圧縮されたデータセグメント202bは、第3のキャッシュライン222の半分、第4のキャッシュライン223全体、および第5のキャッシュライン224の半分の中に来るように、64バイトのオフセットを用いてコンピューティングデバイスによって配置され得る。第2の圧縮されたデータセグメント202bは、64バイトの重複282の分だけ第5のキャッシュライン224と重複し得る。第3のソースデータセグメント204a(すなわち、「C」)に対応する第3の圧縮されたデータセグメント204bは、第5のキャッシュライン224の半分、第6のキャッシュライン225全体、および第7のキャッシュライン226の半分の中に来るように、64バイトのオフセットを用いてコンピューティングデバイスによって配置され得る。第3の圧縮されたデータセグメント204bは、64バイトの重複284の分だけ第7のキャッシュライン226と重複し得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する第4の圧縮されたデータセグメント206bは、第7のキャッシュライン226の半分、第8のキャッシュライン227全体、および別のキャッシュライン(図示せず)の半分の中に来るように、64バイトのオフセットを用いてコンピューティングデバイスによって配置され得る。第4の圧縮されたデータセグメント206bは、インターリーブと交差することができ、64バイトの重複286の分だけ別のキャッシュライン(図示せず)と重複し得る。圧縮されたデータセグメント200b〜206bは、4:4の圧縮比にてコンピューティングデバイスによって圧縮され、または代替的には圧縮されず、ベースオフセットを介して移されるだけであり得る。
概略図200の第3のライン230は、コンピューティングデバイスによって4:1の圧縮比にて圧縮される64バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の64バイトの圧縮されたデータセグメント231は、第3のキャッシュライン222の半分の中に来るように、256バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の64バイトの圧縮されたデータセグメント232は、第3のキャッシュライン222の他方の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。言い換えると、第1の64バイトの圧縮されたデータセグメント231および第2の64バイトの圧縮されたデータセグメント232は、第3のキャッシュライン222が第2のソースデータセグメント202a(すなわち、「B」)だけと通常は関連付けられるにもかかわらず、キャッシュライン222を共有することができる。第1の64バイトの圧縮されたデータセグメント231および第2の64バイトの圧縮されたデータセグメント232の、それぞれの256バイトと64バイトのオフセット配置により、第1のキャッシュライン220、第2のキャッシュライン221、および第4のキャッシュライン223は、使用されていないデータ299を含み得る。言い換えると、コンピューティングデバイスは、これらのキャッシュライン220、221、223のためのデータをフェッチすることを求められていない可能性がある。そのような使用されていないキャッシュライン(すなわち、使用されていないデータ299と関連付けられるキャッシュライン220、221、223)を、キャッシュが他の要求に自由に割り振ることができる。
概略図200の第3のライン230も参照すると、第3のソースデータセグメント204a(すなわち、「C」)に対応する第3の64バイトの圧縮されたデータセグメント234は、第7のキャッシュライン226の半分の中に来るように、256バイトのオフセットにてコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する192バイトの圧縮されたデータセグメント236は、第7のキャッシュライン226の他方の半分および第8のキャッシュライン227全体の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。192バイトの圧縮されたデータセグメント236は、4:3の圧縮比にてコンピューティングデバイスによって圧縮されている可能性がある。第3の64バイトの圧縮されたデータセグメント234および192バイトの圧縮されたデータセグメント236は、第7のキャッシュライン226が第4のソースデータセグメント206a(すなわち、「D」)だけと通常は関連付けられるにもかかわらず、キャッシュライン226を共有することができる。第3の64バイトの圧縮されたデータセグメント234および192バイトの圧縮されたデータセグメント236の、それぞれの256バイトと64バイトのオフセット配置により、第5のキャッシュライン224および第6のキャッシュライン225は、使用されていないデータ299を含み得る。
概略図200の第4のライン240は、コンピューティングデバイスによって4:2の圧縮比にて圧縮される128バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の128バイトの圧縮されたデータセグメント241は、第2のキャッシュライン221の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の128バイトの圧縮されたデータセグメント242は、第4のキャッシュライン223の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第1の128バイトの圧縮されたデータセグメント241および第2の128バイトの圧縮されたデータセグメント242は依然として、それらの通常のセグメントの境界210、212の中に記憶され得るが、第1のキャッシュライン220および第3のキャッシュライン222が使用されていないデータ299を含むようにオフセットされ得る。言い換えると、128バイトのオフセットにより、コンピューティングデバイスは、これらのキャッシュライン220、223のためのデータをフェッチすることを求められていない可能性がある。
概略図200の第4のライン240も参照すると、第3のソースデータセグメント200c(すなわち、「C」)に対応する第3の128バイトの圧縮されたデータセグメント244は、第6のキャッシュライン225の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する64バイトの圧縮されたデータセグメント246は、第7のキャッシュライン226の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第3の128バイトの圧縮されたデータセグメント244および64バイトの圧縮されたデータセグメント246は依然として、それらの通常のセグメントの境界214、216の中に記憶され得るが、第5のキャッシュライン224および第8のキャッシュライン227が使用されていないデータ299を含むようにオフセットされ得る。しかしながら、64バイトの圧縮されたデータセグメント246が第7のキャッシュライン226を完全には満たさないこと、および第3の128バイトの圧縮されたデータセグメント244が第4のセグメントの境界216に入り込むようにオフセットされないことにより、第7のキャッシュライン226は、オーバーフェッチデータ291により半分だけ満たされ得る。
概略図200の第5のライン250は、コンピューティングデバイスによって4:3の圧縮比にて圧縮される192バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の192バイトの圧縮されたデータセグメント251は、第2のキャッシュライン221および第3のキャッシュライン222の半分の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の192バイトの圧縮されたデータセグメント252は、第3のキャッシュライン222の半分および第4のキャッシュライン223の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第1の192バイトの圧縮されたデータセグメント251および第2の192バイトの圧縮されたデータセグメント252を、第3のキャッシュライン222を共有するようにオフセットすることができ、第1のキャッシュライン220が使用されていないデータ299を含むことを可能にする。言い換えると、192バイトのオフセットにより、コンピューティングデバイスは、第1のキャッシュライン220のためのデータをフェッチすることを求められていない可能性がある。
概略図200の第5のライン250も参照すると、ソースデータセグメント200c(すなわち、「C」)に対応する64バイトの圧縮されたデータセグメント254は、第7のキャッシュライン226の中に来るように、256バイトのオフセットにてコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する256バイトの圧縮されたデータセグメント256は、第7のキャッシュライン226の半分、第8のキャッシュライン227のすべて、および別のキャッシュライン(図示せず)の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第5のキャッシュライン224および第6のキャッシュライン225は、使用されていないデータ299を含み得る。しかしながら、256バイトの圧縮されたデータセグメント256は、インターリーブと交差し得るので、コンピューティングデバイスは、別々のトランザクションを使用することを求められ得る。
概略図200の第6のライン260は、コンピューティングデバイスによって4:4の圧縮比にて圧縮される256バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の256バイトの圧縮されたデータセグメント261は、第1のキャッシュライン220の半分、第2のキャッシュライン221全体、および第3のキャッシュライン222の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の256バイトの圧縮されたデータセグメント262は、第3のキャッシュライン222の半分、第4のキャッシュライン223全体、および第5のキャッシュライン224の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。さらに、第3のソースデータセグメント200c(すなわち、「C」)に対応する第3の256バイトの圧縮されたデータセグメント264は、第5のキャッシュライン224の半分、第6のキャッシュライン225のすべて、および第7のキャッシュライン226の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する64バイトの圧縮されたデータセグメント266は、第7のキャッシュライン226の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第8のキャッシュライン227は、使用されていないデータ299を含み得る。しかしながら、第1の256バイトの圧縮されたデータセグメント261が第1のキャッシュライン220を完全には満たさないことが原因で、第1のキャッシュライン220は、オーバーフェッチデータ290により半分だけ満たされ得る。
いくつかの態様では、コンピューティングデバイスは、データセグメントがインターリーブおよび/またはページ境界と交差するようにマッピングされることを減らすために、データセグメントを、境界にまたがる別々のトランザクションに分割することができる。たとえば、図5において以下で説明されるように、コンピューティングデバイスがインターリーブおよび/またはページ境界にまたがって256バイトの圧縮されたデータセグメント(たとえば、4:4の圧縮比で圧縮されるセグメント)を配置するとき、2つの別々のトランザクションが必要とされ得る。
図3は、いくつかの態様において使用するのに適した圧縮比およびベースアドレス情報(すなわち、ベースアドレスパリティ値)に対応するオフセット値を含む、データテーブル300を示す。態様の小型化技法を実施するコンピューティングデバイスは、特定の圧縮されたデータセグメントに対する圧縮比情報310およびベースアドレスパリティ情報302を使用して、データテーブル300上で検索を実行し、キャッシュ内にデータセグメントを配置する(またはキャッシュ内のデータセグメントにアクセスする)ために使用されるべきベースオフセットのサイズを特定することができる。ベースアドレスパリティ情報302は、キャッシュ中のデータセグメントのベースアドレス(たとえば、物理アドレス)のビット8が奇数(すなわち、「1」という値)であるか偶数(すなわち、「0」という値)であるかの指示であり得る。いくつかの態様では、データテーブル300は、コンピューティングデバイスのメモリに記憶される2次元(2D)アレイであり得る。いくつかの態様では、ハードウェアとソフトウェアの両方が、テーブルまたは論理を利用するコンピューティングデバイスなどによって、技法を実施するために利用され得る。
たとえば、4:1の圧縮レートにて圧縮され偶数値のビット8を伴うベースアドレスを有するデータセグメントを求めて、データテーブル300上で検索を実行することに応答して、コンピューティングデバイスは、256バイトのベースオフセットを特定することができる。4:1の圧縮レートにて圧縮され奇数値のビット8を伴うベースアドレスを有するデータセグメントを求めて、データテーブル300上で検索を実行することに応答して、コンピューティングデバイスは、64バイトのベースオフセットを特定することができる。4:2の圧縮レートにて圧縮され偶数値または奇数値のビット8を伴うベースアドレスを有するデータセグメントを求めて、データテーブル300上で検索を実行することに応答して、コンピューティングデバイスは、128バイトのベースオフセットを特定することができる。4:3の圧縮レートにて圧縮され偶数値のビット8を伴うベースアドレスを有するデータセグメントを求めて、データテーブル300上で検索を実行することに応答して、コンピューティングデバイスは、128バイトのベースオフセットを特定することができる。4:3の圧縮レートにて圧縮され奇数値のビット8を伴うベースアドレスを有するデータセグメントを求めて、データテーブル300上で検索を実行することに応答して、コンピューティングデバイスは、64バイトのベースオフセットを特定することができる。4:4の圧縮レートにて圧縮され偶数値または奇数値のビット8を伴うベースアドレスを有するデータセグメントを求めて、データテーブル300上で検索を実行することに応答して、コンピューティングデバイスは、64バイトのベースオフセットを特定することができる。
図4Aは、キャッシュ内への圧縮されたデータセグメントのオフセット配置のための新しいアドレス(たとえば、物理アドレス)を特定するためにコンピューティングデバイスによって実行され得る関数の例示的な疑似コード400を示す。たとえば、コンピューティングデバイスは、上で図2において示されたようにデータセグメントを配置するために、以下で説明されるような命令により構成され得る。疑似コード400によって示される関数は、圧縮ルーチン(たとえば、データセットに対する圧縮ルーチン)の実行の間、またはその後などに、アプリケーション、ファームウェア、アプリケーションプログラミングインターフェース(API)、ルーチン、および/または演算の一部として、コンピューティングデバイスによって実行され得る。そのような疑似コード400は全般的な説明を目的に与えられているので、特定のプログラミング言語、構造、またはフォーマットを表すことを意図していないことを理解されたい。
疑似コード400(図4Aでは「疑似コードA」と呼ばれる)は、特定のデータセグメントに関するBase_Address入力パラメータおよびCompression_Ratio入力パラメータを必要とし得る、「getNewAddress_oddOrEven()」と呼ばれる関数を表し得る。いくつかの態様では、Base_Addressは、物理アドレスまたは仮想アドレスのバイナリ表現であり得る。疑似コード400において示される関数は、データセグメントのベースアドレスのビット8を、Shift変数への記憶のために一番右のビットへ移動するために(図4Aでは「>>8」として示される右シフト演算)、Base_Address入力パラメータに対して右シフト演算をコンピューティングデバイスが実行するための命令を含み得る。疑似コード400において示される関数は、アドレスのビット8(すなわち、Shift変数)および「1」の値(たとえば、「…000000001」)に対するビットごとのAND演算(すなわち図4Aでは「&」)を実行するための命令を含んでよく、この演算はParity変数に記憶される値を生成し得る。言い換えると、Parity変数の値は、Shift変数が0であるときは0であってよく、Parity変数の値は、Shift変数が1であるときは1であってよい。
疑似コード400において示される関数はまた、Compression_Ratio入力パラメータおよび計算されたParity変数を使用して、図3において説明されたような事前に定義されたテーブル上での検索動作をコンピューティングデバイスが実行するための命令を含み得る。検索から取り出された値は、Offset変数に記憶され得る。いくつかの態様では、検索動作は、コンピューティングデバイスのメモリに記憶される2次元(2D)アレイ中の情報にアクセスするための動作であり得る。最終的に、疑似コード400において示される関数は、コンピューティングデバイスが、Base_AddressとOffset変数を足して、コンピューティングデバイスがデータセグメントを配置するのに使用するために返され得るオフセットアドレス(たとえば、新しいオフセット物理アドレス)を生成するための命令を含み得る。
いくつかの態様では、コンピューティングデバイスは、疑似コード400により示されるようなテーブル検索動作を利用する代わりに、新しいアドレスを生成するための簡略化された論理、回路、ソフトウェア命令、および/またはルーチンにより構成され得る。
図4B〜図4Cは、図4Aで説明される疑似コード400において示される関数の呼出しの際に使用され得る例示的な疑似コードおよび値を示す。図4B〜図4Cの例示的な値は説明を目的とするものであり、態様の範囲を限定することは意図していないことを理解されたい。
図4Bは、図4Aにおいて上で説明されたようにデータセグメントのための新しいオフセットアドレスを決定するための例示的な関数を呼び出すために、コンピューティングデバイスによって実行され得る例示的な疑似コード450を示す。例示的な疑似コード450は、getNewAddress_oddOrEven()関数の呼出しのために入力パラメータとして使用され得る、Base_AddressおよびCompression_Ratio変数の値を設定するための命令を含み得る。たとえば、Base_Addressは、物理アドレスが少なくとも8つのビットを含む場合、データセグメントのための物理アドレス(たとえば、「…100000000」)として設定され得る。別の例として、Compression_Ratio変数は、コンピューティングデバイスが圧縮アルゴリズムを使用してデータセグメントを圧縮した際の圧縮のレベル(または圧縮比)を示す値(たとえば、4:4)として設定され得る。疑似コード450は、これらの入力パラメータおよび値を使用する関数getNewAddress_oddOrEven()の呼出しを含んでよく、キャッシュラインにおけるオフセット配置を可能にするデータセグメントのための新しい物理アドレスなどの、関数からの戻り値を、コンピューティングデバイスがnew_address変数に記憶することを可能にし得る。
図4Cは、図4Aの疑似コード400と同様であるが、図4Bにおいて上で説明された入力パラメータ値に基づいて様々な命令において使用される例示的な値も含む、例示的な疑似コード460を示す。言い換えると、疑似コード460は、例示的な関数getNewAddress_oddOrEven()の一部として実行される計算の値を示すものが追加されている、図4Aの例示的な疑似コード400と等価な関数である。
たとえば、図4Cでは、関数は、「…100000000」という値を伴うBase_Address入力パラメータおよび「4:4」という値を伴うCompression_Ratio入力パラメータを利用することができる。Base_Address入力パラメータに対する右シフト演算を実行したことに応答して、コンピューティングデバイスは、データセグメントのベースアドレス(たとえば、物理アドレス)のビット8を、Shift変数への記憶のために一番右のビットへ移すために、「…000000010」という値を生成することができる。この関数は、Shift変数および1の値(すなわち「…000000001」)に対するビットごとのAND演算を実行するための命令を含んでよく、この演算はParity変数に記憶される値を生成し得る。たとえば、Shift変数が「000000010」という値を有するとき、ビットごとのAND演算は、「…000000000」(または単に0)というParity変数値を生成し得る。0という例示的なParity変数値および4:4というCompression_Ratioの例示的な値のもとでは、図3において説明される事前に定義されたテーブルに対する検索の結果は、64バイトというOffset変数値を返し得る。この関数は次いで、Offset変数値(たとえば、64バイト)およびBase_Address(たとえば、「…100000000」)の組合せである、データセグメントのための新しいオフセットアドレスを返すことができる。
いくつかの態様では、コンピューティングデバイスは、ページ境界またはインターリーブが交差しないような方法で、キャッシュラインにおいてオフセットとともにデータセグメントを配置するように構成され得る。言い換えると、コンピューティングデバイスは、データセグメントがページ境界との交差を避けるために512バイトのセクションの始点にラップアラウンドするように、その512バイトのセクション(または2つの256バイトのセクション)の外側に64バイトのデータセグメントをマッピングすることができる。そのような態様を示すために、図5は、そのようなラップアラウンドを利用する別の態様のキャッシュライン小型化技法に従って、様々な圧縮比で圧縮されるデータセグメントのオフセット配置を示す。図5の概略図500は、図5に示される態様のオフセット配置が、512バイトよりも大きくページとインターリーブのいずれかと交差するようにキャッシュにおいてデータセグメントが配置されることを許容しない可能性があることを除き、図2を参照して上で説明された概略図200と同様である。図6に示される態様のオフセット配置はまた、データセグメントの配置のためのより均等なキャッシュバンクの使用をもたらし得る。しかしながら、図2に示される態様のオフセット配置と比較すると、図5に示される代替的な態様により、平均で、4:4の圧縮比にて圧縮されたデータセグメントの半分が、2つのトランザクションへと分割されるようになり得る。言い換えると、4:4の圧縮比にて圧縮されるデータセグメントを配置するための非連続的な要求は、図2に示される態様の技法よりも多くの分割された要求をもたらし得る。図5によって示される態様の技法は、L3キャッシュとともに使用されるときは特に、大半のオーバーフェッチを減らすのに有益であり得る。さらに、単純なプリフェッチングは、L3キャッシュがあってもなくても可能になり得る。様々な態様では、4:4の圧縮比は最も確率の低い圧縮比であり得るので、データセグメントを2つのトランザクションへと分割するのは、特殊な場合であり得る。
図5に示されるように、キャッシュライン520〜527は、左から右に向かって増大し得る物理アドレスと関連付けられ得る(すなわち、第1のキャッシュライン520の物理アドレスは、第2のキャッシュライン521の物理アドレスと関連付けられる数未満の数である、など)。いくつかの態様では、キャッシュライン520〜527の物理アドレスは、少なくとも9つのビットによって表され得る。図5は、様々なキャッシュライン520〜527の関連する物理アドレスの9番目、8番目、および7番目のビットの指示を示す。たとえば、第1のキャッシュライン520の9番目のビット(またはビット9)は「0」という値であってよく、第1のキャッシュライン520の8番目のビット(またはビット8)は「0」という値であってよく、第1のキャッシュライン520の7番目のビット(またはビット7)は「0」という値であってよく、第5のキャッシュライン524の9番目のビット(またはビット9)は「1」という値であってよく、第5のキャッシュライン524の8番目のビット(またはビット8)は「0」という値であってよく、第5のキャッシュライン524の7番目のビット(またはビット7)は「0」という値であってよい。
図2を参照して上で説明されたように、概略図500の第1のライン228は、通常の技法に従ってキャッシュに記憶されるときの、256バイトのセグメント境界210〜216内のソースデータセグメント202a〜206aのデフォルトの配置を示す。第1のソースデータセグメント200a(図5では「A」と呼ばれる)は、第1のキャッシュライン520および第2のライン521内でオフセットを伴わずにコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(図5では「B」と呼ばれる)は、第3のキャッシュライン522および第4のキャッシュライン523内でオフセットを伴わずにコンピューティングデバイスによって配置され得る。第3のソースデータセグメント204a(図5では「C」と呼ばれる)は、第5のキャッシュライン524および第6のキャッシュライン525内でオフセットを伴わずにコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(図5では「D」と呼ばれる)は、第7のキャッシュライン526および第8のキャッシュライン527内でオフセットを伴わずにコンピューティングデバイスによって配置され得る。
しかしながら、概略図500のライン529、530、540、550、560は、コンピューティングデバイスによって実行される態様の動作に従ったベースアドレスと重複する圧縮された形態のソースデータセグメント200a〜206aのオフセット配置を示す。いくつかの態様では、様々な圧縮されたデータセグメントを配置するためにコンピューティングデバイスによって使用されるベースオフセットは、以下で図6において説明されるような、事前に定義されたデータテーブル上で実行される検索に基づき得る。
概略図500の第2のライン529は、256バイトの圧縮されたデータセグメント501、502a〜502b、504a〜504b、506のオフセット配置を示す。第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の圧縮されたデータセグメント501は、第1のキャッシュライン520の半分、第2のキャッシュライン521全体、および第3のキャッシュライン522の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。第1の圧縮されたデータセグメント501は、64バイトの重複の分だけ第3のキャッシュライン522と重複し得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の圧縮されたデータセグメント502aは、第3のキャッシュライン522の半分および第4のキャッシュライン523全体の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。しかしながら、インターリーブと交差するのを避けるために、コンピューティングデバイスは、256バイトの第2の圧縮されたデータセグメント502aを2つの別々のセクションに記憶するように構成され得る。したがって、256バイトの第2の圧縮されたデータセグメント502aの残り502b(図5では「B-Rem」と呼ばれる)は、第1のキャッシュライン520の最初の半分の中にコンピューティングデバイスによって配置され得る。第3のソースデータセグメント204a(すなわち、「C」)に対応する第3の圧縮されたデータセグメント504aは、第5のキャッシュライン524および第6のキャッシュライン525の半分の中に来るように、オフセットを伴わずにコンピューティングデバイスによって配置され得る。第2の圧縮されたデータセグメント502aと同様に、第3の圧縮されたデータセグメント504aは、インターリーブと交差するのを避けるために2つのセクションに分割され得る。したがって、第3の圧縮されたデータセグメント504aの残り504bは、第8のキャッシュライン527の半分に配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する第4の圧縮されたデータセグメント506は、第6のキャッシュライン525の半分、第7のキャッシュライン526全体、および第8のキャッシュライン527の半分の中に来るように、負の64バイトのオフセットにてコンピューティングデバイスによって配置され得る。
概略図500の第3のライン530は、コンピューティングデバイスによって4:1の圧縮比にて圧縮される64バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の64バイトの圧縮されたデータセグメント531は、第3のキャッシュライン522の半分の中に来るように、256バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の64バイトの圧縮されたデータセグメント532は、第3のキャッシュライン522の他方の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。言い換えると、第1の64バイトの圧縮されたデータセグメント531および第2の64バイトの圧縮されたデータセグメント532は、第3のキャッシュライン522が第2のソースデータセグメント202a(すなわち、「B」)だけと通常は関連付けられるにもかかわらず、キャッシュライン522を共有することができる。第1の64バイトの圧縮されたデータセグメント531および第2の64バイトの圧縮されたデータセグメント532の、それぞれの256バイトと64バイトのオフセット配置により、第1のキャッシュライン520、第2のキャッシュライン521、および第4のキャッシュライン523は、使用されていないデータ599を含み得る。言い換えると、コンピューティングデバイスは、これらのキャッシュライン520、521、523のためのデータをフェッチすることを求められていない可能性がある。そのような使用されていないキャッシュライン(すなわち、使用されていないデータ599と関連付けられるキャッシュライン520、521、523)を、キャッシュが他の要求に自由に割り振ることができる。
概略図500の第3のライン530も参照すると、第3のソースデータセグメント204a(すなわち、「C」)に対応する第3の64バイトの圧縮されたデータセグメント534は、第6のキャッシュライン525の半分の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する192バイトの圧縮されたデータセグメント536は、第6のキャッシュライン525の他方の半分および第7のキャッシュライン526全体の中に来るように、負の64バイトのオフセットにてコンピューティングデバイスによって配置され得る。192バイトの圧縮されたデータセグメント536は、4:3の圧縮比にてコンピューティングデバイスによって圧縮されている可能性がある。第3の64バイトの圧縮されたデータセグメント534および192バイトの圧縮されたデータセグメント536の、それぞれの128バイトと負の64バイトのオフセット配置により、第5のキャッシュライン524および第8のキャッシュライン527は、使用されていないデータ599を含み得る。
概略図500の第4のライン540は、コンピューティングデバイスによって4:2の圧縮比にて圧縮される128バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の128バイトの圧縮されたデータセグメント541は、第2のキャッシュライン521の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の128バイトの圧縮されたデータセグメント542は、第4のキャッシュライン523の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第1の128バイトの圧縮されたデータセグメント541および第2の128バイトの圧縮されたデータセグメント542は依然として、それらの通常のセグメントの境界210、212の中に記憶され得るが、第1のキャッシュライン520および第3のキャッシュライン522が使用されていないデータ599を含むようにオフセットされ得る。言い換えると、128バイトのオフセットにより、コンピューティングデバイスは、これらのキャッシュライン520、523のためのデータをフェッチすることを求められていない可能性がある。
概略図500の第4のライン540も参照すると、第3のソースデータセグメント200c(すなわち、「C」)に対応する第3の128バイトの圧縮されたデータセグメント544は、オフセットを伴わずに第5のキャッシュライン524内にコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する64バイトの圧縮されたデータセグメント546は、第6のキャッシュライン525の半分の中に来るように、負の64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第3の128バイトの圧縮されたデータセグメント544および64バイトの圧縮されたデータセグメント546は依然として、第7のキャッシュライン526および第8のキャッシュライン527が使用されていないデータ599を含むようにオフセットされ得る。しかしながら、64バイトの圧縮されたデータセグメント546が第6のキャッシュライン525を完全には満たさないことが原因で、第6のキャッシュライン525は、オーバーフェッチデータ590により半分だけ満たされ得る。
概略図500の第5のライン550は、コンピューティングデバイスによって4:3の圧縮比にて圧縮される192バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の192バイトの圧縮されたデータセグメント551は、第2のキャッシュライン521および第3のキャッシュライン522の半分の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の192バイトの圧縮されたデータセグメント552は、第3のキャッシュライン522の半分および第4のキャッシュライン523の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第1の192バイトの圧縮されたデータセグメント551および第2の192バイトの圧縮されたデータセグメント552を、第3のキャッシュライン522を共有するようにオフセットすることができ、第1のキャッシュライン520が使用されていないデータ599を含むことを可能にする。言い換えると、192バイトのオフセットにより、コンピューティングデバイスは、第1のキャッシュライン520のためのデータをフェッチすることを求められていない可能性がある。
概略図500の第5のライン550も参照すると、第3のソースデータセグメント200c(すなわち、「C」)に対応する64バイトの圧縮されたデータセグメント554は、第6のキャッシュライン525の半分の中に来るように、128バイトのオフセットにてコンピューティングデバイスによって配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する256バイトの圧縮されたデータセグメント556は、第6のキャッシュライン525の半分、第7のキャッシュライン526のすべて、および第8のキャッシュライン527の半分の中に来るように、負の64バイトのオフセットにてコンピューティングデバイスによって配置され得る。このようにして、第5のキャッシュライン524は、使用されていないデータ599を含み得る。しかしながら、オーバーフェッチデータ591は、第8のキャッシュライン527の半分の中にあり得る。
概略図500の第6のライン560は、コンピューティングデバイスによって4:4の圧縮比にて圧縮される256バイトのデータセグメントのオフセット配置を示す。具体的には、第1のソースデータセグメント200a(すなわち、「A」)に対応する第1の256バイトの圧縮されたデータセグメント561は、第1のキャッシュライン520の半分、第2のキャッシュライン521全体、および第3のキャッシュライン522の半分の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。第2のソースデータセグメント202a(すなわち、「B」)に対応する第2の256バイトの圧縮されたデータセグメント562aは、第3のキャッシュライン522の半分および第4のキャッシュライン523全体の中に来るように、64バイトのオフセットにてコンピューティングデバイスによって配置され得る。しかしながら、コンピューティングデバイスは、第2の256バイトの圧縮されたデータセグメント562aを2つの別々のセクションに記憶するように構成され得る。したがって、第2の256バイトの圧縮されたデータセグメント562aの残り562b(図5では「B-Rem」と呼ばれる)は、第1のキャッシュライン520の最初の半分の中にコンピューティングデバイスによって配置され得る。第3のソースデータセグメント204a(すなわち、「C」)に対応する第3の圧縮されたデータセグメント564aは、第5のキャッシュライン524および第6のキャッシュライン525の半分の中に来るように、オフセットを伴わずにコンピューティングデバイスによって配置され得る。第2の圧縮されたデータセグメント502aと同様に、第3の圧縮されたデータセグメント564aは、インターリーブと交差するのを避けるために2つのセクションに分割され得る。したがって、第3の圧縮されたデータセグメント564aの残り564bは、第8のキャッシュライン527の半分に配置され得る。第4のソースデータセグメント206a(すなわち、「D」)に対応する64バイトの圧縮されたデータセグメント566は、第6のキャッシュライン525の半分の中に来るように、負の64バイトのオフセットにてコンピューティングデバイスによって配置され得る。しかしながら、オーバーフェッチデータ592は、第8のキャッシュライン527の半分の中にあり得る。
図6は、いくつかの態様において使用するのに適した、圧縮比およびベースアドレスパリティ値に対応するベースオフセット値を含むデータテーブルを示す概略図である。図5を参照して上で説明されたように、ある態様の小型化技法を実施するコンピューティングデバイスは、特定の圧縮されたデータセグメントに対する圧縮比情報610およびベースアドレスパリティ情報602を使用して、データテーブル600上で検索を実行し、キャッシュ内にデータセグメントを配置する(またはキャッシュ内のデータセグメントにアクセスする)ために使用されるべきベースオフセットのサイズを特定することができる。いくつかの態様では、データテーブル600は、コンピューティングデバイスのメモリに記憶される2次元(2D)アレイであり得る。
そのようなデータテーブル600は、図6のベースアドレスパリティ情報602がデータセグメントのベースアドレスのビット8およびビット9の値を示すもの(たとえば、2つのビットに対して0または1)であり得ることを除き、図3を参照して上で説明されたデータテーブル300と同様であり得る。言い換えると、データテーブル600上で実行される検索は、データセグメントのベースアドレス(たとえば物理アドレス)に適用すべきベースオフセット値をコンピューティングデバイスが特定するために、2ビットの値および圧縮比を必要とし得る。データテーブル600と図3のデータテーブル300との別の違いは、データテーブル600が、いくつかの圧縮比(たとえば、4:4の圧縮比)に対する2つ以上のベースオフセット値と、データセグメントアドレス(たとえば、物理アドレス)と関連付けられる2ビットの値とを記憶し得るということである。具体的には、ページ境界またはインターリーブとの交差を避けるためにセグメントが2つのトランザクションへと分割されることが必要であるとき、データテーブル600は、第1のトランザクションのための第1のベースオフセット値と、第2のトランザクションのための第2のベースオフセット値とを含み得る。そのような場合、データテーブル600は、ベースオフセット値の各々と関連付けられる各トランザクションのサイズを示し得る。いくつかの態様では、コンピューティングデバイスは、ビットの他の組合せを使用して検索を実行することができ、そのような組合せは記憶されているデータのハッシュ化に基づき得る。
たとえば、4:1の圧縮レートにて圧縮されビット9の値が0でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、256バイトのベースオフセットを特定することができる。4:1の圧縮レートにて圧縮されビット9の値が0でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、64バイトのベースオフセットを特定することができる。4:1の圧縮レートにて圧縮されビット9の値が1でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、128バイトのベースオフセットを特定することができる。4:1の圧縮レートにて圧縮されビット9の値が1でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、負の64バイトのベースオフセットを特定することができる。
別の例として、4:2の圧縮レートにて圧縮されビット9の値が0でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、128バイトのベースオフセットを特定することができる。4:2の圧縮レートにて圧縮されビット9の値が0でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、128バイトのベースオフセットを特定することができる。4:2の圧縮レートにて圧縮されビット9の値が1でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、0バイトのベースオフセット(すなわち、ベースオフセットなし)を特定することができる。4:2の圧縮レートにて圧縮されビット9の値が1でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、0バイトのベースオフセット(すなわち、ベースオフセットなし)を特定することができる。
別の例として、4:3の圧縮レートにて圧縮されビット9の値が0でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、128バイトのベースオフセットを特定することができる。4:3の圧縮レートにて圧縮されビット9の値が0でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、64バイトのベースオフセットを特定することができる。4:3の圧縮レートにて圧縮されビット9の値が1でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、0バイトのベースオフセット(すなわち、ベースオフセットなし)を特定することができる。4:3の圧縮レートにて圧縮されビット9の値が1でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、負の64バイトのベースオフセットを特定することができる。
別の例として、4:4の圧縮レートにて圧縮されビット9の値が0でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、64バイトのベースオフセットを特定することができる。4:4の圧縮レートにて圧縮されビット9の値が0でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、サイズが64バイトである第1のトランザクションに対する負の256バイトのベースオフセットと、サイズが192バイトである第2のトランザクションに対する64バイトのベースオフセットとを特定することができる。4:4の圧縮レートにて圧縮されビット9の値が1でありビット8の値が0であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、サイズが192バイトである第1のトランザクションに対する0バイトのベースオフセットと、サイズが64バイトである第2のトランザクションに対する448バイトのベースオフセットとを特定することができる。4:4の圧縮レートにて圧縮されビット9の値が1でありビット8の値が1であるベースアドレスを有するデータセグメントを求めて、データテーブル600上で検索を実行することに応答して、コンピューティングデバイスは、負の64バイトのベースオフセットを特定することができる。
図7Aは、別の態様のキャッシュライン小型化技法に従って、キャッシュ内の圧縮されたデータセグメントのオフセット配置のための新しいアドレスを特定するために、コンピューティングデバイスによって実行され得る関数の例示的な疑似コード700を示す。たとえば、コンピューティングデバイスは、上で図5において示されたようにデータセグメントを配置するために、以下で説明されるような命令により構成され得る。図7Aの疑似コード700は、ベースオフセットを特定するために検索動作を実行するときにベースアドレス(たとえば、物理アドレス)の2つのビット(すなわち、ビット8およびビット9)をコンピューティングデバイスに利用させるための命令を含むことがあり、2つのオフセットアドレスを場合によっては返すようにさらに構成され得ることを除き、上で説明された図4Aの疑似コード400と同様である。そのようなオフセットアドレスは、ベースアドレスが物理アドレスか仮想アドレスかに応じて、オフセット物理アドレスまたはオフセット仮想アドレスであり得る。疑似コード700によって示される関数は、圧縮ルーチン(たとえば、データセットに対する圧縮ルーチン)の実行の間、またはその後などに、アプリケーション、ファームウェア、アプリケーションプログラミングインターフェース(API)、ルーチン、および/または演算の一部として、コンピューティングデバイスによって実行され得る。そのような疑似コード700は全般的な説明を目的に与えられているので、使用可能であり得る特定のプログラミング言語、構造、またはフォーマットを表すことを意図していないことを理解されたい。
疑似コード700(図7Aでは「疑似コードB」と呼ばれる)は、特定のデータセグメントに関するBase_Address入力パラメータおよびCompression_Ratio入力パラメータを必要とし得る、「getNewAddress_bit8-9 ()」と呼ばれる関数を表し得る。いくつかの態様では、Base_Addressは、物理アドレスのバイナリ表現であり得る。関数の操作可能な内容は、データセグメントのベースアドレスのビット8を、Shift変数への記憶のために一番右のビットへ移動するために、Base_Address入力パラメータに対して第1の右シフト演算をコンピューティングデバイスが実行するための命令を含み得る。そのような移動はまた、Base_Addressのビット9をShift変数中の右から2番目のビットに移し得る。この関数は、シフトされるアドレス(すなわち、Shift変数)および右から2番目までのビットの「1」の値(たとえば、「…011」)に対してビットごとのAND演算(すなわち図7Aでは「&」)を実行するための命令を含んでよく、この演算はParity変数に記憶される値を生成し得る。言い換えると、ビットごとのAND演算は、シフトされるアドレスが検索を実行するためのパリティ値として使用され得るように、シフトされるアドレス(すなわち、Shift変数)中のあらゆる他のビットを0にすることができる。
疑似コード700によって示される関数はまた、コンピューティングデバイスが、Compression_Ratio入力パラメータおよび計算されたParity変数を使用して、図5を参照して説明されたような事前に定義されたテーブル上での検索動作を実行するための命令を含み得る。しかしながら、2つ以上のベースオフセット値がテーブルの検索から返されることを必要とし得る2つのあり得る事例があるので、関数は、Compression_Ratioが4:4に等しいかどうか、または、ビット9およびビット8が同じである(すなわち、「…00」または「…11」)ことをParity変数の値が示すかどうかを評価することを含み得る。Compression_Ratioが4:4に等しいことと、ビット9およびビット8が同じである(すなわち、「…00」または「…11」)ことをParity変数の値が示すこととのいずれかを、コンピューティングデバイスが決定する場合、コンピューティングデバイスは、Compression_RatioおよびParityを使用して検索動作を実行し、Offset変数に記憶されるべき単一のオフセット値を取り出すことができる。そのような単一のオフセット値は、Base_Addressと組み合わされ、オフセット配置において使用するために返され得る。
しかしながら、Compression_Ratioが4:4に等しいことと、ビット9およびビット8が同じではない(すなわち、「…01」または「…10」)ことをParity変数の値が示すこととを、コンピューティングデバイスが決定する場合、コンピューティングデバイスは、Compression_RatioおよびParityを使用して検索動作を実行し、Offset[]アレイ変数に記憶されるべき2つのオフセット値を取り出すことができる。2つのオフセット値の各々が、データセグメントのための2つのトランザクションに対する新しいアドレスを生成するために、個別にBase_Addressと組み合わされ得る。様々な態様では、2つのトランザクションのサイズはオフセット値とともに返され得る。いくつかの態様では、そのようなトランザクションのためのサイズおよびオフセット値を別々に計算し、かつ/または返すために、別の呼出しまたは関数が利用され得る。
いくつかの態様では、コンピューティングデバイスは、疑似コード700により示されるようなテーブル検索を利用する代わりに、新しいアドレスを生成するための簡略化された論理、回路、ソフトウェア命令、および/またはルーチンにより構成され得る。
図7B〜図7Cは、図7Aで説明される疑似コード700の関数の呼出しの際に使用され得る例示的な疑似コードおよび値を示す。図7B〜図7Cの例示的な値は説明を目的とするものであり、態様の範囲を限定することは意図していないことを理解されたい。
図7Bは、図7Aにおいて上で説明されたようにデータセグメントのための新しいオフセットアドレスを決定するための例示的な関数を呼び出すために、コンピューティングデバイスによって実行され得る例示的な疑似コード750を示す。例示的な疑似コード750は、getNewAddress_bit8-9()関数の呼出しのために入力パラメータとして使用され得る、Base_AddressおよびCompression_Ratio変数の値を設定するための命令を含み得る。たとえば、Base_Addressは、物理アドレスが少なくとも9つのビットを含む場合、データセグメントのための物理アドレス(たとえば、「…100000000」)として設定され得る。別の例として、Compression_Ratio変数は、コンピューティングデバイスが圧縮アルゴリズムを使用してデータセグメントを圧縮した際の圧縮のレベル(または圧縮比)を示す値(たとえば、4:4)として設定され得る。疑似コード750は、これらの入力パラメータおよび値を使用した関数getNewAddress_bit8-9()の呼出しを含んでよく、コンピューティングデバイスが、キャッシュラインにおけるオフセット配置を可能にするデータセグメントのための新しい物理アドレスなどの、関数からの戻り値を、new_address変数に記憶することを可能にし得る。
図7Cは、図7Aの疑似コード700と同様であるが、図7Bにおいて上で説明された入力パラメータ値に基づいて様々な命令のための例示的な値も含む、例示的な疑似コード760を示す。言い換えると、疑似コード760は、関数getNewAddress_bit8-9()の一部として実行される計算の例示的な値を示すものが追加されている、図7Aの例示的な疑似コード700に等価な関数である。
たとえば、図7Cでは、関数は、「…100000000」という値を伴うBase_Address入力パラメータおよび「4:4」という値を伴うCompression_Ratio入力パラメータを利用することができる。Base_Address入力パラメータに対する右シフト演算を実行したことに応答して、コンピューティングデバイスは、データセグメントのベースアドレス(たとえば、物理アドレス)のビット8を、Shift変数への記憶のために一番右のビットへ移すために、「…000000010」という値を生成することができる。この関数は、Shift変数および「…11」の値に対するビットごとのAND演算を実行するための命令を含んでよく、この演算はParity変数に記憶される値を生成し得る。たとえば、Shift変数が「…000000010」という値を有するとき、ビットごとのAND演算は、「…000000010」というParity変数値を生成し得る。
例示的なCompression_Ratioは「4:4」であり、例示的なParity変数値は「…00」または「…11」に等しくないので、コンピューティングデバイスは、検索テーブルから単一のベースオフセット値を取り出す動作を実行しなくてよい。代わりに、コンピューティングデバイスは、2つのベースオフセット値を返す検索を実行するための命令を実行することができる。具体的には、「…000000010」という例示的なParity変数値および「4:4」というCompression_Ratioの例示的な値のもとでは、図6において説明される事前に定義されたテーブルに対する検索動作の結果は、0バイトという第1のベースオフセット値および448バイトという第2のベースオフセット値を返し得る。いくつかの態様では、検索の結果はまた、ベースオフセット値と関連付けられるトランザクションのサイズを含み得る。この関数は次いで、データセグメントのための2つのトランザクションに対する2つの新しいベースオフセットアドレス、すなわち、0バイトとBase_Addressの組合せ(たとえば、「…100000000」+0バイト)である第1のアドレスと、448バイトとBase_Addressの組合せ(たとえば、「…100000000」+448バイト)である第2のアドレスとを返すことができる。
図8Aは、コンピューティングデバイスがキャッシュのキャッシュライン内のデータを小型化するためのある態様の方法800を示す。方法800は、従来の圧縮アルゴリズムをコンピューティングデバイスが実行することと組み合わせて、またはそれに応答して行われ得る、ルーチン、アプリケーション、関数、または他の動作として、コンピューティングデバイスによって実行され得る。たとえば、データセグメントを圧縮したことに応答して、コンピューティングデバイスは、方法800の動作を実行して、データセグメントがキャッシュライン上で重複するようにオフセットを伴って圧縮されたデータセグメントを配置することができる。以下の説明はオフセットアドレス(たとえば、オフセット物理アドレス)に配置され得る単一のデータセグメントに言及し得るが、コンピューティングデバイスは、複数のデータセグメントをループなどに配置するために方法800を実行するように構成され得ることを理解されたい。さらに、コンピューティングデバイスは、任意の可変長のデータ(圧縮された、または圧縮されていない)を様々なタイプのメモリユニットまたはキャッシュユニットへと配置するために、方法800の動作を実行することができる。いくつかの態様では、コンピューティングデバイスは、別のデバイスによって圧縮されたデータセグメントを配置するために方法800の動作を実行するように構成され得る。
ブロック802において、コンピューティングデバイスのプロセッサは、データセグメントのベースアドレス(たとえば、ベース物理アドレスまたはベース仮想アドレス)を特定することができる。上で説明されたように、そのようなベースアドレスは、データセグメントが通常は関連付けられるキャッシュラインまたはキャッシュアドレスであり得る。たとえば、ベースアドレスは、圧縮されていない状態にあるときにデータセグメント(またはソースデータセグメント)が記憶される第1のキャッシュラインのアドレスであり得る。ベースアドレスは、データセグメントの初期開始アドレスであり得るが、データセグメントが記憶される必要のあり得るキャッシュライン(またはキャッシュ空間)の数を示さないことがある。いくつかの態様では、ベースアドレスは、キャッシュ中の割り振られたラインによって表され得るが一般には表されないことがある、要求されるブロックの開始アドレスであってよく、それは、キャッシュが圧縮されたバージョンを割り振り得るからである。
ブロック804において、コンピューティングデバイスのプロセッサは、データセグメントのデータサイズ(たとえば、圧縮比に基づく)を特定することができる。たとえば、特定されたデータサイズは、別のデータバッファに対する読取り動作を実行して圧縮比を取得するコンピューティングデバイスによって特定されるような、データセグメントの圧縮比に基づき得る。様々な態様では、コンピューティングデバイスが利用するように構成される圧縮アルゴリズムのタイプに応じて、データセグメントに対して利用可能な複数の圧縮比があり得る。たとえば、コンピューティングデバイスが圧縮アルゴリズムを利用するように構成されるとき、データセグメントは、4:1の圧縮比、4:2の圧縮比(または2:1の圧縮比)、4:3の圧縮比、および/または4:4の圧縮比(または1:1の圧縮比)にて圧縮され得る。データセグメントの特定されるデータサイズは、データセグメントのサイズの最大限の可能な低減(または最大の圧縮)をもたらす圧縮比に基づき得る。様々な態様では、特定されるデータサイズ(または圧縮サイズ)は、異なるタイプのデータ、データ構造、および/またはコンテキストに対しては異なり得る。たとえば、コンピューティングデバイスは、第1のデータタイプの第1のデータセグメントに対しては第1の圧縮比のための第1のデータサイズを特定し得るが、第2のデータタイプの第2のデータセグメントに対しては第2の圧縮比のための第2のデータサイズを特定し得る。
ブロック806において、コンピューティングデバイスのプロセッサは、データセグメントの特定されたデータサイズおよびベースアドレスに基づいてベースオフセットを取得することができる。ベースオフセットは、64バイト、128バイト、192バイト、および/または256バイトなどの、ある数のバイトであり得る。いくつかの態様では、ベースオフセットは、負の64バイトなどの、ある負の数のバイトであり得る。いくつかの態様では、ベースオフセットのサイズは、コンピューティングデバイス中のキャッシュのキャッシュラインの半分のサイズの倍数であり得る。いくつかの態様では、コンピューティングデバイスは、図3または図6を参照して上で説明されたようにデータテーブル上で検索を実行し、ベースオフセット値を取り出すことができる。いくつかの態様では、コンピューティングデバイスは、ベースオフセットを決定するために、式、ルーチン、回路、および/またはソフトウェアモジュールを利用することができる。図8Bは、ベースオフセットを取得するための特定の態様の動作を示す。
ブロック808において、コンピューティングデバイスのプロセッサは、取得されたベースオフセットを用いてベースアドレスをオフセットすることによって、オフセットアドレスを計算することができる。たとえば、コンピューティングデバイスは、取得されたベースオフセット(たとえば、ある数のバイト)をベースアドレスと組み合わせて、キャッシュにおいてベースアドレスの前または後に現れる新しいアドレス(たとえば、物理アドレス)を計算することができる。そのような計算は、取得されたベースオフセットが正の値であるときはベースアドレスよりも大きいオフセットアドレスをもたらし、取得されたベースアドレスが負の値であるときはベースアドレスよりも小さいオフセットアドレスをもたらし得る。任意選択のブロック810において、コンピューティングデバイスのプロセッサは、計算されたオフセットアドレスにデータセグメントを記憶することができる。言い換えると、計算されたオフセットアドレスは、キャッシュを埋めるために使用され得る。たとえば、コンピューティングデバイスは、メモリ(たとえば、DDR)からデータセグメントを読み取り、オフセットアドレスにおいて開始する1つまたは複数のキャッシュライン内にデータセグメントをロードすることができる。いくつかの態様では、コンピューティングデバイスは、圧縮されたメモリから圧縮されたデータセグメントとしてデータセグメントを読み取り得る。任意選択のブロック812において、コンピューティングデバイスのプロセッサは、計算されたオフセットアドレスにあるデータセグメントを読み取ることができる。言い換えると、計算されたオフセットアドレスは、キャッシュライン内に以前に記憶されたデータセグメントを取り出し、または見つけるために使用され得る。たとえば、コンピューティングデバイスは、計算されたオフセットアドレスを使用して、アプリケーションの動作において使用するデータセグメントをキャッシュから取り出すことなどができる。さらに、任意選択のブロック812における動作の読取りは、上で決定されたデータサイズなどの指定されたサイズであり得る。任意選択のブロック813において、コンピューティングデバイスのプロセッサは、読み取られたデータセグメントを解凍することができる。いくつかの態様では、解凍されたデータセグメントは、ローカルに、たとえば関連するベースアドレス内に記憶され得る。
いくつかの態様では、データセグメントは、キャッシュの中にないことがあり、メモリからフェッチされてキャッシュに挿入されることが必要であり得る。いくつかの態様では、キャッシュがないことがあり、様々な態様の技法がプリフェッチングから利益を得ることができる。
図8Bは、コンピューティングデバイスがキャッシュのキャッシュライン内のデータを小型化するためのある態様の方法850を示す。方法850の動作は、オフセット値の事前に定義されたデータテーブルにおいて検索動作を実行するための動作を含み得ることを除き、図8Aを参照して上で説明された方法800の動作と同様である。たとえば、コンピューティングデバイスは、ベースアドレスおよび圧縮比についての情報を使用して、図3および図6を参照して上で説明されたようにデータテーブルからオフセット値を取り出すように構成され得る。
ブロック802〜804、808〜812の動作は、図8Aを参照して上で説明されたものと同じであり得る。ブロック852において、コンピューティングデバイスのプロセッサは、ベースアドレスに基づいてデータセグメントのパリティ値を特定することができる。いくつかの態様では、コンピューティングデバイスは、ベースアドレスのビット8を評価して、ビット8が偶数値(すなわち、0)であるか奇数値(すなわち、1)であるかを示すパリティ値を特定することができる。そのようなパリティ値の使用が図2〜図4Cに示されている。いくつかの態様では、パリティ値を特定するために、コンピューティングデバイスは、ベースアドレスのバイナリ表現に対して右シフト演算を実行してビット8を一番右のビットにし、「…001」というバイナリ値および右シフト演算のバイナリの結果にビットごとのAND演算を適用してパリティ値を特定することができる。いくつかの態様では、コンピューティングデバイスは、ベースアドレスのビット9およびビット8を評価して、これらの2ビットが、データテーブルまたは2Dアレイ(たとえば、「00」、「01」、「10」、「11」)においてインデックスとして使用され得る事前に定義された組合せと一致するかどうかを特定することができる。そのようなパリティ値の使用が図5〜図7Cに示されている。いくつかの態様では、パリティ値を特定するために、コンピューティングデバイスは、ベースアドレスのバイナリ表現に対して右シフト演算を実行してビット8を一番右のビットにし、「…011」というバイナリ値および右シフト演算のバイナリの結果にビットごとのAND演算を適用してパリティ値を特定する(たとえば、ベースアドレスのバイナリ表現の8ビットおよび9ビットを除き、右シフト演算のバイナリの結果のすべての値を0にする)ことができる。
ブロック854において、コンピューティングデバイスのプロセッサは、特定されたデータサイズ(たとえば、特定された圧縮比に基づくサイズ)および特定されたパリティ値を使用して、記憶されたテーブル上で検索を実行することによって、ベースオフセットを取得することができる。たとえば、図3および図6に示されるように、コンピューティングデバイスは、特定された圧縮比(たとえば、4:1など)およびパリティ値の表現またはコードを、データテーブルまたは2Dアレイ上のインデックスとして使用することができる。いくつかの態様では、取得されたオフセットは、上で説明されたように、第1のトランザクションのための第1のオフセットと、第2のトランザクションのための第2のオフセットとを含み得る。たとえば、オフセットデータセグメントがインターリーブまたはページ境界と交差するのを避けるために、データセグメントは、ベースアドレスからの第1のオフセット(たとえば、0バイト)および第2のオフセット(たとえば、448バイト)と関連付けられる2つのトランザクションへと分割され得る。コンピューティングデバイスは、ブロック808の動作を続けてオフセットアドレスを計算することができる。いくつかの態様では、取得されたベースオフセットが2つのオフセットを含むとき、コンピューティングデバイスは、分割されたセグメントをキャッシュ中に配置するための2つのオフセットアドレスを計算することができる。
図8Cは、コンピューティングデバイスがキャッシュのキャッシュライン内のデータを小型化するためのある態様の方法870を示す。方法870の動作は、次のデータセグメントをプリフェッチするための動作を含み得ることを除き、図8Aを参照して上で説明された方法800の動作と同様である。ブロック802〜804、808〜812の動作は、図8Aを参照して上で説明されたものと同じであり得る。
決定ブロック872において、コンピューティングデバイスのプロセッサは、ブロック812の動作により読み取られたデータセグメント(または第1のデータセグメント)と連続的となるのに正しい圧縮比を次のデータセグメント(または第2のデータセグメント)が有するかどうかを決定することができる。たとえば、コンピューティングデバイスがより大きな読取り要求サイズを伴う任意選択のプリフェッチングを実行するように構成されるとき、コンピューティングデバイスは、キャッシュ内でのサイズ決定と特定のためにブロック802〜808の動作が実行されたデータセグメントの隣の、次のデータブロック(または圧縮されたデータブロック)を取り出し、または読み取ることができる。そのような決定は、読み取られたデータセグメントの隣のデータブロックが、読み取られたデータセグメントと連続的となるのに正しい圧縮レベルを有するかどうかを決定するように構成される、論理試験ルーチンまたは回路に基づき得る。言い換えると、コンピューティングデバイスは、データセグメントの読取りが次のデータセグメントも含み得るようなサイズへと次のデータセグメントが圧縮されるかどうかを決定することができる。次のデータセグメントが連続的となるのに正しい圧縮比を有するとの決定に応答して(すなわち、決定ブロック872=「Yes」)、コンピューティングデバイスのプロセッサは、ブロック874において、他のデータセグメントの読取りとともに次のデータセグメントをプリフェッチすることができる。次のデータセグメントが連続的となるのに正しい圧縮比を有しないとの決定に応答して(すなわち、決定ブロック872=「No」)、コンピューティングデバイスのプロセッサは方法870を終了することができる。
図9は、データセグメントを圧縮したことに応答して、コンピューティングデバイスがキャッシュのキャッシュライン内のデータを小型化するためのある態様の方法900を示す。方法900の動作は、たとえばオフセットアドレスにデータセグメントを記憶する前に圧縮アルゴリズムを実行することなどによって、コンピューティングデバイスがデータセグメントを圧縮するための動作も含み得ることを除き、図8Aを参照して上で説明された方法800の動作と同様である。
ブロック802、806〜808の動作は、図8Aを参照して上で説明されたものと同じであり得る。ブロック901において、コンピューティングデバイスのプロセッサは、データセグメントが圧縮され得る最適な圧縮比(たとえば、4:1、4:2、4:3、4:4など)などの、データセグメントのための圧縮比を特定することができる。ブロック901の動作は、図8のブロック804を参照して上で説明されたものと同様であり得る。ブロック902において、コンピューティングデバイスのプロセッサは、たとえばキャッシュからデータセグメントを読み取ることなどによって、ベースアドレスにある圧縮されていないデータとしてデータセグメントを読み取ることができる。ブロック904において、コンピューティングデバイスのプロセッサは、特定された圧縮比にてデータセグメントを圧縮することができる。たとえば、データセグメントに対して利用可能な最大の特定された圧縮比(たとえば、4:1、4:2、4:3、4:4など)に基づいて、コンピューティングデバイスは、圧縮アルゴリズムまたはルーチンを実行して、データセグメントのサイズを低減させることができる。上で説明されたように、コンピューティングデバイスは、ブロック806においてベースオフセットを取得し、ブロック808においてオフセットアドレスを計算することができる。ブロック906において、コンピューティングデバイスのプロセッサは、計算されたオフセットアドレスに圧縮されたデータセグメントを記憶することができる。
様々な態様を実装するために、様々な形態のコンピューティングデバイス(たとえば、パーソナルコンピュータ、スマートフォン、ラップトップコンピュータなど)が使用され得る。そのようなコンピューティングデバイスは、通常、例示的なコンピューティングデバイス1000を示す図10に示されたコンポーネントを含む。様々な態様では、コンピューティングデバイス1000は、タッチスクリーンコントローラ1004および内部メモリ1002に結合されたプロセッサ1001を含み得る。プロセッサ1001は、汎用または特定の処理タスクのために指定された1つもしくは複数のマルチコアICであり得る。内部メモリ1002は、揮発性メモリまたは不揮発性メモリであってよく、また、セキュアメモリおよび/もしくは暗号化メモリ、または非セキュアメモリおよび/もしくは非暗号化メモリ、あるいはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ1004およびプロセッサ1001はまた、抵抗感知タッチスクリーン、静電容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル1012に結合され得る。いくつかの態様では、コンピューティングデバイス1000は、送受信のための、互いにおよび/またはプロセッサ1001に結合された、1つまたは複数の無線信号送受信機1008(たとえば、Peanut(登録商標)、Bluetooth(登録商標)、Zigbee(登録商標)、Wi-Fi、RF無線)と、アンテナ1010とを有し得る。送受信機1008およびアンテナ1010は、様々なワイヤレス送信のプロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用され得る。いくつかの態様では、コンピューティングデバイス1000は、セルラーネットワークを介する通信を可能にしてプロセッサに結合される、セルラーネットワークワイヤレスモデムチップ1016を含み得る。コンピューティングデバイス1000は、プロセッサ1001に結合された周辺デバイス接続インターフェース1018を含み得る。周辺デバイス接続インターフェース1018は、1つのタイプの接続を受け入れるように単独で構成されてよく、または、USB、FireWire、Thunderbolt、もしくはPCIeなどの、一般的な、または独自の様々なタイプの物理的接続および通信接続を受け入れるように多様に構成され得る。周辺デバイス接続インターフェース1018は、同様に構成された周辺デバイス接続ポート(図示せず)にも結合され得る。コンピューティングデバイス1000はまた、オーディオ出力を提供するためのスピーカー1014を含み得る。コンピューティングデバイス1000はまた、本明細書で論じられたコンポーネントのすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築された筐体1020を含み得る。コンピューティングデバイス1000は、使い捨てまたは充電可能なバッテリなどの、プロセッサ1001に結合された電源1022を含み得る。充電可能なバッテリは、コンピューティングデバイス1000の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートにも結合され得る。
プロセッサ1001は、上で説明された様々な態様の機能を含む、様々な機能を実行するようにソフトウェア命令(たとえば、アプリケーション)によって構成され得る、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであり得る。様々なデバイスでは、ワイヤレス通信機能専用の1つのプロセッサおよび他のアプリケーションの実行専用の1つのプロセッサなど、複数のプロセッサが設けられ得る。通常、ソフトウェアアプリケーションは、アクセスされ、プロセッサ1001にロードされる前に、内部メモリ1002に記憶され得る。プロセッサ1001は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含み得る。多くのデバイスでは、内部メモリは、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合であり得る。本明細書では、メモリへの一般的な言及は、内部メモリまたは様々なデバイスに差し込まれるリムーバブルメモリと、プロセッサ1001内のメモリとを含む、プロセッサ1001によってアクセス可能なメモリを指す。
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様のステップが提示された順序で実行されなければならないことを要求または意味するものではない。当業者によって理解されるように、上記の態様におけるステップの順序は、いかなる順序で実行されてもよい。「その後」、「次いで」、「次に」などの単語は、ステップの順序を限定するものではなく、これらの単語は、単に、方法の説明を通して読者を導くために使用される。さらに、たとえば冠詞「a」、「an」、または「the」を使用する、単数形での請求項の要素に対する任意の参照は、要素を単数形に限定すると解釈されるべきではない。
本明細書で開示された態様に関して記載された様々な説明のための論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアおよびソフトウェアのこの互換性を明確に説明するために、上では、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップが、それらの機能に関して概略的に説明された。そのような機能がハードウェアとして実現されるか、ソフトウェアとして実現されるかは、具体的な適用例およびシステム全体に課される設計制約によって決まる。当業者は、各々の具体的な適用例に対して様々な方法で説明された機能を実装することができるが、そのような実装形態の決定は、本発明の範囲からの逸脱を引き起こすと解釈されるべきではない。
本明細書で開示された態様に関して説明された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェアコンポーネント、または本明細書で説明される機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替形態では、プロセッサは、任意の従来型プロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。代替的に、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行され得る。
1つまたは複数の例示的な態様では、説明される機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。機能は、ソフトウェアで実装される場合、1つまたは複数の命令またはコードとして、非一時的プロセッサ可読、コンピュータ可読もしくはサーバ可読媒体、または非一時的プロセッサ可読記憶媒体上に記憶され、またはその上で送信され得る。本明細書で開示される方法またはアルゴリズムのステップは、非一時的コンピュータ可読記憶媒体、非一時的サーバ可読記憶媒体、および/または非一時的プロセッサ可読記憶媒体上に存在し得る、プロセッサ実行可能ソフトウェアモジュールまたはプロセッサ実行可能命令において具現化され得る。たとえば、そのような命令は、記憶されているプロセッサ実行可能ソフトウェア命令であり得る。有形の非一時的コンピュータ可読記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を含み得る。ディスク(disk)およびディスク(disc)は、本明細書で使用されるとき、コンパクトディスク(disc)(CD)、レーザーディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読媒体の範囲内に含まれるべきである。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、有形の非一時的プロセッサ可読記憶媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せまたはセットとして存在し得る。
開示された態様の上記の説明は、任意の当業者が本発明を作成または使用することを可能にするように提供される。これらの態様に対する様々な修正は当業者には容易に明らかとなり、本明細書で定義された一般原理は、本発明の趣旨または範囲から逸脱することなく、他の態様に適用され得る。したがって、本発明は、本明細書に示される態様に限定されるものではなく、以下の特許請求の範囲、ならびに、本明細書で開示される原理および新規の特徴と一致する最も広い範囲を与えられるべきである。