(57)【要約】      （修正有）【課題】浮動小数点データの圧縮性をする圧縮スキームを有するシステムを提供する。【解決手段】プロセッサにおいて、符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされるデータ要素を格納する第１のメモリと、データ要素毎にタグタイプを含む圧縮されたデータブロックを生成する回路を有する、圧縮エンジンとを備える。辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含まれている、という判断に応答して、第１のデータ要素の第１のタグタイプ及び圧縮されていない値が、圧縮されたデータブロックに含まれ、辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含まれているという判断に応答して、第２のデータ要素の第２のタグタイプ及び圧縮された値が、圧縮されたデータブロックに含まれる。【選択図】図１
2019208203.tif 000002
【特許請求の範囲】
【請求項１】
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納する第１のメモリと、
回路を有する圧縮エンジンであって、前記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成する、圧縮エンジンと
を備え、
辞書における任意のエントリの値と一致しない値を第１のデータ要素が前記第１のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、前記圧縮されたデータブロックに含まれ、
前記辞書における第１のエントリの値と一致する値を第２のデータ要素が前記第２のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第２のデータ要素の第２のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
プロセッサ。
【請求項２】
前記辞書における第２のエントリの値と一致する値を第３のデータ要素が前記第３のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第３のデータ要素の第３のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項１に記載のプロセッサ。
【請求項３】
前記辞書における第３のエントリの値と一致する値を第４のデータ要素が前記第４のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第４のデータ要素の第４のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項２に記載のプロセッサ。
【請求項４】
第３のデータ要素が、全ての０ビットを前記第３のデータ要素の指数フィールドに含んでおり、全ての０ビットを前記第３のデータ要素の仮数フィールドに含んでいる、という判断に応答して、第３のタグタイプが、前記圧縮されたデータブロックに含まれ、前記第３のデータ要素からのデータは、前記圧縮されたデータブロックに含まれない、
請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記辞書は、複数のエントリを含み、前記辞書の前記複数のエントリの各々は、それぞれの対応する指数値を格納する、
請求項１から４のいずれか一項に記載のプロセッサ。
【請求項６】
前記第２のタグタイプは、前記辞書の複数のエントリ内での前記第１のエントリの位置を示す、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記辞書は、２つのエントリを含み、前記第１のデータ要素の前記指数フィールドの最下位ビットによりインデックスを付けられている、
請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記複数のデータ要素は、第１のデータブロックを形成し、前記辞書は、前記第１のデータブロックより前に圧縮される第２のデータブロックのデータ要素に基づいて、前記第１のデータブロックの圧縮より前に更新され、前記辞書は、前記第１のデータブロックの前記圧縮中は更新されない、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記第２のデータブロックは、前記第１のデータブロックの前記圧縮の直前に前記圧縮エンジンにより圧縮される、
請求項８に記載のプロセッサ。
【請求項１０】
前記第２のデータ要素の前記圧縮された値は、前記第２のデータ要素の符号値および仮数値である、
請求項１から９のいずれか一項に記載のプロセッサ。
【請求項１１】
前記圧縮エンジンはさらに、１または複数のビットを前記圧縮されたブロックの末尾にパッドして、前記圧縮されたブロックをバイト境界で終了させる、
請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記圧縮されたブロックを第２のメモリへの格納用に前記第２のメモリへ送信するメモリコントローラをさらに備える、請求項１から１１のいずれか一項に記載のプロセッサ。
【請求項１３】
前記圧縮エンジンは、前記複数のデータ要素に関連付けられたワークロードタイプに基づいて、前記辞書の複数のエントリを初期化する、
請求項１から１２のいずれか一項に記載のプロセッサ。
【請求項１４】
前記圧縮エンジンは、前記複数のデータ要素の圧縮より前に圧縮される１または複数のデータセットにおいて指数が出現する頻度のヒストグラムに基づいて、前記辞書の複数のエントリを初期化する、
請求項１から１３のいずれか一項に記載のプロセッサ。
【請求項１５】
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納する段階と、
前記複数のデータ要素に基づいて、前記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成する段階と
を備え、
辞書における任意のエントリの値と一致しない値を第１のデータ要素が前記第１のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、前記圧縮されたデータブロックに含まれ、
前記辞書における第１のエントリの値と一致する値を第２のデータ要素が前記第２のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第２のデータ要素の第２のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
方法。
【請求項１６】
前記辞書における第２のエントリの値と一致する値を第３のデータ要素が前記第３のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第３のデータ要素の第３のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項１５に記載の方法。
【請求項１７】
前記辞書における第３のエントリの値と一致する値を第４のデータ要素が前記第４のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第４のデータ要素の第４のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項１６に記載の方法。
【請求項１８】
第３のデータ要素が、全ての０ビットを前記第３のデータ要素の指数フィールドに含んでおり、全ての０ビットを前記第３のデータ要素の仮数フィールドに含んでいる、という判断に応答して、第３のタグタイプが、前記圧縮されたデータブロックに含まれ、前記第３のデータ要素からのデータは、前記圧縮されたデータブロックに含まれない、
請求項１５から１７のいずれか一項に記載の方法。
【請求項１９】
前記辞書は、複数のエントリを含み、前記辞書の前記複数のエントリの各々は、それぞれの対応する指数値を格納する、
請求項１５から１８のいずれか一項に記載の方法。
【請求項２０】
前記第２のタグタイプは、前記辞書の複数のエントリ内での前記第１のエントリの位置を示す、
請求項１５から１９のいずれか一項に記載の方法。
【請求項２１】
前記辞書は、２つのエントリを含み、前記第１のデータ要素の前記指数フィールドの最下位ビットによりインデックスを付けられている、
請求項１５から２０のいずれか一項に記載の方法。
【請求項２２】
前記複数のデータ要素は、第１のデータブロックを形成し、前記辞書は、前記第１のデータブロックより前に圧縮される第２のデータブロックのデータ要素に基づいて、前記第１のデータブロックの圧縮より前に更新され、前記辞書は、前記第１のデータブロックの前記圧縮中は更新されない、
請求項１５から２１のいずれか一項に記載の方法。
【請求項２３】
請求項１５から２２のいずれか一項に記載の方法を実行する手段を備えるシステム。
【請求項２４】
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納することと、
前記複数のデータ要素に基づいて、前記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成することと
を含むオペレーションをプロセッサに実行させるためのコンピュータプログラムであって、
辞書における任意のエントリの値と一致しない値を第１のデータ要素が前記第１のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、前記圧縮されたデータブロックに含まれ、
前記辞書における第１のエントリの値と一致する値を第２のデータ要素が前記第２のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第２のデータ要素の第２のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
コンピュータプログラム。
【請求項２５】
第３のデータ要素が、全ての０ビットを前記第３のデータ要素の指数フィールドに含んでおり、全ての０ビットを前記第３のデータ要素の仮数フィールドに含んでいる、という判断に応答して、第３のタグタイプが、前記圧縮されたデータブロックに含まれ、前記第３のデータ要素からのデータは、前記圧縮されたデータブロックに含まれない、
請求項２４に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概して、コンピュータ開発の分野に関し、より具体的には、データ圧縮に関する。
【背景技術】
【０００２】
コンピューティングシステムは、他のコンポーネントの中でも特に、１または複数のプロセッサ、１または複数のメモリおよび／または１または複数のメモリコントローラを含み得る。コンピューティングシステムのロジックは、データ要素を圧縮するように動作可能であり得る。
【図面の簡単な説明】
【０００３】
【図１】特定の実施形態による浮動小数点データを圧縮するプロセッサのブロック図を示す。
【０００４】
【図２Ａ】特定の実施形態による半精度浮動小数点フォーマット（ＦＰ１６）に従ってフォーマットされた複数のデータ要素を含むデータブロックの圧縮を示す。
【０００５】
【図２Ｂ】特定の実施形態による圧縮されたデータブロックの例を示す。
【０００６】
【図３】特定の実施形態による図１のプロセッサの圧縮エンジンを示す。
【０００７】
【図４】特定の実施形態による２つのチャネルへの書き込みデータの圧縮および配置を示す。
【０００８】
【図５】特定の実施形態によるデータを圧縮するためのフローを示す。
【０００９】
【図６】特定の実施形態による圧縮されたデータを読み取るためのフローを示す。
【００１０】
【図７】特定の実施形態による例示的なフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を示す。
【００１１】
【図８Ａ】特定の実施形態による例示的なインオーダパイプラインと、例示的なレジスタリネーミングアウトオブオーダ発行／実行パイプラインとの両方を示すブロック図である。
【００１２】
【図８Ｂ】特定の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。
【００１３】
【図９Ａ】より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。当該コアは、特定の実施形態によるチップにおけるいくつかのロジックブロックのうちの１つ（同じタイプおよび／または異なるタイプの他のコアを潜在的に含む）となるであろうものである。
【図９Ｂ】より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。当該コアは、特定の実施形態によるチップにおけるいくつかのロジックブロックのうちの１つ（同じタイプおよび／または異なるタイプの他のコアを潜在的に含む）となるであろうものである。
【００１４】
【図１０】特定の実施形態による１つより多くのコアと、統合メモリコントローラと、統合グラフィックスとを有し得るプロセッサのブロック図である。
【００１５】
【図１１】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
【図１２】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
【図１３】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
【図１４】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
【００１６】
【図１５】特定の実施形態によるソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。
【００１７】
様々な図における同様の参照番号および表示は、同様の要素を示す。
【発明を実施するための形態】
【００１８】
様々なコンピュータアーキテクチャにおいて、メモリ帯域幅の消費は、性能向上についての課題になっている。メモリ帯域幅に対する制約は、データをメモリに格納する前にデータを圧縮することにより、部分的に緩和され得る。従来の圧縮スキーム（例えば、ＷＫｄｍ）は、データ要素のうちの少数の最下位ビット（ＬＳＢ）だけが異なる（そして、これらのデータ要素の大部分は小さな局所領域で静的なままである）整数データタイプ、インデックスまたはポインタであるこれらのデータ要素の圧縮にはよく機能し得るが、浮動小数点データの圧縮性をほとんど提供しない。仮数（小数または係数とも称される）用のビットは、データ要素にわたって著しく変動し得る。従って、汎用データ圧縮スキームは、半精度浮動小数点フォーマット（ＦＰ１６）などの浮動小数点フォーマットで格納されたデータを含み得る、機械学習において用いられるデータセット（例えば、命令、アクティブ化または重みを含む）などの特定のタイプのデータセットの圧縮には有効ではないことがあり得る。専門圧縮スキームが無いと、システムの性能は、高帯域幅メモリ（ＨＢＭ）を利用するアーキテクチャにおいてでさえ、メモリ帯域幅により制限され得る。
【００１９】
本開示の様々な実施形態は、機械学習または他の用途において用いられるタイプの浮動小数点データを圧縮するためのシステムおよび方法だけでなく、メモリ帯域幅の利用性と性能および電力消費とを向上させる効率的なハードウェア設計を提供する。 特定の実施形態は、ＦＰ１６フォーマット済みデータを圧縮するためのハードウェアを含むが、本明細書において説明される本開示は、仮数ビットおよび指数ビットを有する他の浮動小数点フォーマット（例えば、単精度浮動小数点（ＦＰ３２）、倍精度浮動小数点（ＦＰ６４）等）に準拠しているデータを圧縮するよう適合させられ得る。本開示の様々な実施形態は、ゼロ、小さい定数（例えば、＋／−１）、指数の小さいクラスタ範囲および／または特定のデータセットの符号ビットを圧縮することにより、浮動小数点データの圧縮性を向上させ得る。特定の実施形態は、ばらつき性が高いことに起因して、仮数ビットの圧縮を省略している。例字的な圧縮スキームが図２Ａに示される。
【００２０】
様々な実施形態の技術的利点は、圧縮および圧縮解除のための非常に高いスループット（例えば、サイクル毎に３２バイト）、小さいデータブロックサイズ（例えば、６４バイト）へのオペレーション、低い設計上の複雑性、合理的な読み取りレイテンシの影響（例えば、サイクル毎に４未満）、合理的なエリアへの影響（例えば、２００，０００個未満のロジックゲート）および合理的な電力フットプリントのうちの１または複数を含み得る。様々な実施形態において、最小レイテンシが読み取り／書き込み経路に加えられ、一方で、典型的なＦＰ１６フォーマットの機械学習データセットに約１０〜５０％の有効帯域幅の増加が提供される。様々な実施形態は、ページ（例えば、１ＫＢ、２ＫＢ、４ＫＢ等）などのより大きいブロックとは対照的にメモリへのデータ経路に基づくサイズである小さいブロック（例えば、１６バイト、３２バイト、６４バイト等）に対して演算を行う圧縮エンジン１０８を提供し得る。本明細書において説明される方法およびシステムは、広い範囲のブロックサイズにわたって向上した性能を提供し得る。
【００２１】
図１は、特定の実施形態による浮動小数点データを圧縮するプロセッサ１００のブロック図を示す。プロセッサ１００は、複数のコア１０４を含むプロセッサクラスタ１０２と、メモリインタフェース１０６と、圧縮エンジン１０８と、メモリコントローラ１１０とを含む。プロセッサ１００は、メモリ１１２に結合されている。
【００２２】
プロセッサ１００は、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ、ハンドヘルドプロセッサ、アプリケーションプロセッサ、コプロセッサ、システムオンチップ（ＳｏＣ）またはコード（すなわち、ソフトウェア命令）を実行する他のデバイスを備え得る。示される実施形態におけるプロセッサ１００は、プロセッサクラスタ１０２に配置された４つの処理要素（コア１０２Ａ−１０２Ｄ）を含む。プロセッサ１００は、非対称的な処理要素または対称的な処理要素を含み得る。しかしながら、プロセッサは、対称的または非対称的であり得る任意の数の処理要素を含み得る。 
【００２３】
一実施形態において、処理要素とは、ソフトウェアスレッドをサポートする回路を指す。ハードウェア処理要素の例は、スレッドユニット、スレッドスロット、スレッド、プロセス装置、コンテンツ、コンテキストユニット、ロジックプロセッサ、ハードウェアスレッド、コア、および／または実行状態またはアーキテクチャ状態などのプロセッサの状態を保持することが可能な任意の他の要素を含む。言い換えると、一実施形態において、処理要素とは、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、または独立して他のコードなどのコードに関連付けられることが可能な任意のハードウェアを指す。物理プロセッサ（またはプロセッサソケット）とは通常、コアまたはハードウェアスレッドなどの任意の数の他の処理要素を潜在的に含む集積回路を指す。
【００２４】
コア１０４（例えば、１０４Ａ−１０４Ｄ）とは、独立したアーキテクチャ状態を維持することが可能な集積回路に位置するロジックを指し得る。独立して維持されるアーキテクチャ状態の各々は、少なくともいくつかの専用実行リソースに関連付けられる。ハードウェアスレッドとは、独立したアーキテクチャ状態を維持することが可能な集積回路上に位置する任意のロジックを指し得る。独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。分かるように、特定のリソースが共有され、他のリソースがアーキテクチャ状態専用である場合、ハードウェアスレッドとコアとの間の用語体系の境界は重複する。しかししばしば、コアとハードウェアスレッドとは、オペレーティングシステムにより個々のロジックプロセッサと見られており、オペレーティングシステムは、各ロジックプロセッサ上での動作を個別にスケジューリングできる。
【００２５】
様々な実施形態において、処理要素は、１または複数の演算ロジックユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）、キャッシュ、命令パイプライン、割り込み処理ハードウェア、レジスタまたは処理要素の動作を容易にする他のハードウェアも含み得る。
【００２６】
コア１０４または他の処理要素は、メモリ要求（例えば、読み取り、書き込み、読み取り−修正−書き込み（バイト書き込みイネーブル）、コピー、バイトイネーブルとコピー、分散書き込み／コピーまたは他の要求）をメモリインタフェース１０６へ送信し得る。いくつかの例において、これらの要求は、任意の好適なサイズのデータを参照し得る。例えば、要求は、データの１または複数のキャッシュラインを求め得る。いくつかの実施形態において、要求は、多数のキャッシュラインを含むページ（例えば、１ＫＢ、２ＫＢ、４ＫＢ等のデータ）を求め得る。メモリインタフェース１０６は、要求をアンロールし、メモリコントローラ１１０へ送信されるべき複数のより小さい要求を生成し得る。例えば、メモリインタフェース１０６は、より大きい要求を、単一のキャッシュライン（例えば、６４バイト）を各々が参照する一連の読み取り要求または書き込み要求に分割し得る。
【００２７】
圧縮エンジン１０８は、メモリ１１２に書き込まれるべきデータを圧縮するように動作可能な回路を備える。例えば、プロセッサ１００の処理要素は、書き込み要求を発行し得、メモリインタフェース１０６は、１または複数のデータブロック（例えば、キャッシュラインまたは他のデータグループ）において圧縮エンジン１０８に書き込まれるべきデータを提供し得る。圧縮エンジン１０８は、本明細書において説明される実施形態のいずれかに従って書き込まれるべきデータの各ブロックを圧縮し得る。圧縮されたデータブロックは、次に、メモリ１１２への通信のためにメモリコントローラ１１０に提供され得る。
【００２８】
圧縮エンジン１０８は、メモリ１１２から読み取られるデータを圧縮解除するようにも動作可能であり得る。メモリコントローラ１１０は、メモリ１１２からデータを読み取り、読み取ったデータを圧縮エンジン１０８に提供し得る。圧縮エンジン１０８は、データを圧縮解除し、（例えば、メモリインタフェース１０６を通じて）読み取りを要求した処理要素に圧縮解除したデータを提供し得る。
【００２９】
様々な実施形態において、圧縮エンジン１０８は、１または複数のコア１０４と同じチップ、メモリコントローラ１１０および／またはメモリ１１２上に位置し得るか、またはコア１０４、メモリコントローラ１１０および／またはメモリ１１２のうちのいずれか１つまたは複数とは異なるチップ上に位置し得る。（コア１０４と同じチップまたは異なるチップ上に位置し得る）特定の実施形態において、圧縮エンジン１０８は、メモリコントローラ１１０、メモリインタフェース１０６、コア１０４（またはこれらのうちのいずれかのコンポーネントであり得る）と共に配置され得る。
【００３０】
メモリコントローラ１１０は、１または複数のメモリ１１２との間のデータのフローを制御する回路を含む。メモリコントローラ１１０は、メモリ１１２から読み取るか、メモリ１１２に書き込むか、またはメモリ１１２からの他の動作を要求するように動作可能なロジックを含み得る。動作中、メモリコントローラ１１０は、メモリ１１２からデータを読み取るべく、もしくはメモリ１１２にデータを書き込むべく（または他の動作を実行するために）、１または複数のアドレスを含むコマンドを発行し得る。
【００３１】
示される実施形態において、メモリコントローラ１１０は、圧縮フラグ１１４を格納する。圧縮フラグは、メモリ１１２への格納の前に圧縮エンジン１０８によりどのデータが圧縮されたかを示す。例えば、圧縮フラグは、キャッシュラインの特定のアドレスに対応し得、キャッシュラインデータが圧縮されたかまたはされていないかについてのバイナリインジケーションを提供し得る。圧縮フラグは、特定のアドレスに関連付けられたデータがメモリ１１２に書き込まれる前に圧縮されたかどうかをメモリコントローラ１１０が判断することを可能にする任意の他の好適な形態を取り得る。特定のアドレスにおけるデータが読み取られるべき場合、メモリコントローラは、圧縮されたデータがどのように読み取られるべきかを判断するために、対応する圧縮フラグにアクセスし得る（例えば、圧縮されていないデータブロックは、圧縮されたデータブロックとは異なるように読み取られ得る）。特定の実施形態において、圧縮フラグは、特定のデータブロックについて少なくとも５０％という圧縮比が実現されたかどうかを示すことで、圧縮されていないデータブロックを取得する場合に通常であれば読み取られるであろうデータの半分をメモリコントローラ１１０が読み取ることを可能にし得る。代替的な実施形態において、圧縮フラグ１１４は、圧縮エンジン１０８により格納され得、読み取り要求が受信された場合、圧縮エンジン１０８は、圧縮フラグに基づいて、要求されたデータが圧縮されたかどうかを判断し得、圧縮フラグに基づいて、適切な要求をメモリコントローラへ送信し得る。例えば、圧縮エンジン１０８は、通常であれば２つのチャネルにわたる読み取りを必要とするであろう特定のキャッシュラインについての読み取り要求を受信し得（キャッシュラインが圧縮されていない場合）、圧縮されたキャッシュラインを単一のチャネルで読み取るという要求をメモリコントローラへ送り得る。
【００３２】
様々な実施形態において、メモリ１１２は、データを格納する任意の数のメモリアレイを備え得る。メモリ１１２は、任意の不揮発性メモリおよび／または揮発性メモリを備え得る。メモリ１１２は、任意の好適なタイプのメモリを備え得ると共に、様々な実施形態において、メモリの特定のスピード、技術またはフォームファクタに限定されない。一例として、メモリ１１２は、ソケットに挿入され得るメモリモジュール（例えば、デュアルインラインメモリモジュール（ＤＩＭＭ）、シングルインラインメモリモジュール（ＳＩＭＭ）等）であり得る。特定の実施形態において、メモリ１１２は、ＤＩＭＭフォームファクタを有する。ＤＩＭＭは、各側に電気接点（すなわち、ピン）を含む回路基板上に取り付けられた複数のメモリチップを含み得る。様々な例において、メモリ１１２は、任意の好適な数の２８８、２６０、２４４、２４０、２０４、２００などのピンまたは他の好適な数のピンを有し得る。様々な実施形態において、メモリ１１２は、プロセッサ１００用のソケットも備える回路基板（例えば、マザーボード）上のＤＩＭＭスロットに挿入され得る。特定の実施形態において、メモリ１１２は、不揮発性メモリを含むメモリチップを備える非揮発性ＤＩＭＭ（ＮＶ−ＤＩＭＭ）である。別の実施形態において、メモリ１１２は、揮発性メモリ（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ））を含むメモリチップを備えるＤＩＭＭである。別の実施形態において、メモリ１１２は、プロセッサ１００と同じチップ上に位置し得る。例えば、メモリ１１２は、ラストレベルキャッシュまたは他のキャッシュであり得る。
【００３３】
特定の実施形態において、メモリ１１２は、互いに独立してデータを書き込むために用いられ得る複数のバンクを含む（各バンクは、メモリ１１２とメモリコントローラ１１０との間のそれぞれチャネルに結合されている）。一実施形態において、圧縮されていないブロックを書き込むために用いられるバンクの数は、圧縮されたブロックを書き込むために用いられるバンクの数より多い。例えば、メモリ１１２は、両方が圧縮されていないブロックをメモリ１１２に書き込むために用いられる２つのバンクを含み得るが、（５０％という圧縮比がそのブロックで実現されたと仮定すると）単一のバンクが、圧縮されたブロックをメモリ１１２に書き込むために用いられ得る。
【００３４】
図２Ａは、特定の実施形態による半精度浮動小数点フォーマット（ＦＰ１６）に従ってフォーマットされた複数のデータ要素を含むデータブロックの圧縮を示す。圧縮されていないデータ要素２０２の各々は、ＦＰ１６フォーマットを指定する米国電気電子技術者協会（ＩＥＥＥ）７５４規格に準拠している。従って、データ要素２０２は（示される実施形態の左側のＭＳＢから、示される実施形態の右側のＬＳＢへ動くと）、符号ビットと、５ビットの指数と、（値が１である暗黙のリードビットを有する１１ビットの仮数を指定し得る）１０ビットの仮数とを含む。指数は、１５のバイアスを有し、正規の数は、（−１）ｓｉｇｎｂｉｔ×２ｅｘｐｏｎｅｎｔ−１５×１．ｓｉｇｎｉｆｉｃａｎｄｂｉｔｓ２…と定義される。指数０００００および１１１１１は、特別に解釈される。指数が０００００であり、仮数が００００００００００である場合、表される数は０である（指数が０００００である場合に仮数が任意の他の値であるときは、表される数は、法線影とみなされ、（−１）ｓｉｇｎｂｉｔ×２−１４×０．ｓｉｇｎｉｆｉｃａｎｄｂｉｔｓ２と決定される。）。指数が１１１１１であり、仮数が００００００００００である場合、表される数は±無限である（仮数が任意の他の値である場合、表される数は、数（ＮａＮ）ではないとみなされる）。
【００３５】
データブロック２００のデータ要素２０２（すなわち、２０２Ａ〜２０２Ｎ）は、共に処理されて、圧縮されたブロック２０４が生成される。特定の実施形態において、データブロック２００のサイズ（データブロック２００におけるデータ要素「Ｎ」の数により定義される）は、バスのサイズ（１または複数のチャネルを含み得る）をメモリ１１２と一致させ得るか、メモリのバスレートに対応し得るか、または、そうでなければ、ハードウェア実装に基づき得る。例えば、（ＦＰ１６による）１６ビットのデータ要素サイズを用いてサイクル毎に１６バイトを実現する（すなわち、圧縮エンジン１０８は、読み取り用でサイクル毎に圧縮されていない１６バイトを受信し、書き込み用でサイクル毎に圧縮解除された１６バイトを出力する）ために、Ｎは８に設定される。別の例として、１６ビットのデータ要素サイズを用いてサイクル毎に３２バイトを実現するために、Ｎは１６に設定される。様々な実施形態において、データブロック２００のサイズ（例えば、６４バイト）は、メモリ１１２のキャッシュラインのサイズと一致するか、またはキャッシュラインのサイズの半分（例えば、３２バイト）である。
【００３６】
各データブロック２００は、他のブロックから独立してエンコードされる（が、以下により詳細に説明されるように、辞書が数ブロックにわたって維持され得、従って、データブロックの圧縮は、１または複数の前のブロックを用いて生成される辞書に依存し得る）。示される実施形態において、圧縮されたブロック２０４は、タグ２０６と、圧縮されていないデータ要素２０８と、辞書のマッチの圧縮されていない部分（すなわち、データ要素のうち、辞書のエントリと一致する指数を有する部分）２１０と、パッドビット２１２とを含む。圧縮されたブロック２０４の各々はタグ２０６を含み、一方で、圧縮されていないデータブロック２００のコンテンツに応じて、圧縮されていないデータ要素２０８、辞書のマッチの圧縮されていない部分２１０またはパッドビット２１２のうちの１または複数は、圧縮されたブロック２０４から省略され得る。
【００３７】
特定のワークロードにおいて、指数値の範囲は、タグを用いた一般的に用いられている指数をエンコードすることにより圧縮が実現され得るように、比較的小さいもの（例えば、−１、０または＋１）であり得る。圧縮エンジン１０８は、ブロック２００の各データ要素２０２を処理し、各データ要素のタグを決定する。最初のタグ値は、データ要素の値が０である（すなわち、指数ビットおよび仮数ビットは全て０である）ことを示す。２番目のタグ値は、データ要素の指数ビットが指数値の辞書におけるエントリと一致しなかったことを示す。特定の実施形態（例えば、ＦＰ１６データが圧縮されている場合）において、圧縮エンジン１０８は、５ビットの指数値を含む辞書を利用し得る（が、他の実施形態では、８ビットまたは１１ビットなどの任意の好適な長さの指数が辞書に格納され得る）。圧縮エンジンは、処理されているデータ要素２０２の指数ビットが辞書におけるエントリと一致しているかどうかを判断し得る。指数ビットが辞書におけるいずれのエントリとも一致していない場合には、データ要素を圧縮できなかったことを示すために、データ要素用に前述の２番目のタグ値が用いられる。指数ビットが辞書のエントリと一致している場合、一致した辞書の特定のエントリに対応するタグ値が、データ要素用にタグ２０６に含まれる。例えば、辞書が２つの５ビットの指数のエントリを格納している場合、３番目のタグ値および４番目のタグ値が、処理されているデータ要素の指数ビットと一致する、辞書の第１のエントリまたは第２のエントリにそれぞれ用いられ得る。従って、いくつかの実施形態において、各タグ値は、上述の４つのタグ値を備えるよう、２ビットの長さであり得る。別の例において、辞書は、６つの５ビットの指数のエントリを含み得、各タグ値は、処理されているデータ要素２０２の指数値と一致している辞書のそれぞれの対応するエントリに各々が対応するように、上述の最初の２つのタグ値および６つの追加のタグ値を備えるよう、３ビットの長さであり得（すなわち、０値または一致なしに対応する）。
【００３８】
特定の実施形態において、タグは、圧縮されたブロック２０４内で、共に連続して格納され得る。示される実施形態において、タグ２０６の後には、ブロック２００の圧縮されていないデータ要素２０８（すなわち、値が０ではなく、辞書の値と一致する指数ビットを有していなかったデータ要素）が続く。圧縮されていないデータ要素２０８の後に続いて、圧縮されたブロック２０４は、辞書の値と一致する指数ビットを含んだ、データ要素の圧縮されていない部分（すなわち、符号ビットおよび仮数ビット）を含む（そのようなデータ要素の指数ビットは、当該データ要素用にタグ値に圧縮される）。別の実施形態において、圧縮されていない部分２１０と圧縮されていないデータ要素２０８との順序は入れ替えられ得る。様々な実施形態において、圧縮されたブロック２０４は、圧縮されたブロック２０４のビットの総数が、圧縮解除を単純化するために（例えば、圧縮エンジン１０８が圧縮されたブロック同士を圧縮解除中により容易に区別できるように、従って、圧縮エンジンがより高い頻度で動作することを可能にするために）８または１６の倍数となるように、ビット２１２でパディングされ得る。
【００３９】
図２Ｂは、特定の実施形態による圧縮されたデータブロック２５０の例を示す。データブロック２５０は、圧縮されたデータブロック２０４の任意の好適な特性を有し得る。示される実施形態において、圧縮されたデータブロック２５０は、各データ要素のタグ値を含む。データ要素０のタグ値は００であり、データ要素１のタグ値は０１であり、データ要素２のタグ値は１０であり、データ要素３のタグ値は１１であり、データ要素４の６までのタグ値は不図示であり、データ要素７のタグ値は００である。示される実施形態において、タグ値００は、０値に対応し、従って、データ要素０のタグのみが、圧縮されたブロック２５０に格納される。同様に、データ要素７のタグのみが、圧縮されたブロック２５０に格納される。示される実施形態において、タグ値０１は、辞書におけるマッチを有していないデータ要素に対応し、従って、圧縮されたデータブロック２５０は、データ要素１の全体（データ要素１の符号、仮数および指数を含む）を含む。示される実施形態において、タグ値１０は、辞書における第１のエントリと一致する指数を有するデータ要素に対応し、タグ値１１は、辞書における第２のエントリと一致する指数を有するデータ要素に対応する。従って、データ要素２および３については、データ要素２およびデータ要素３の符号ビットおよび仮数ビットが、圧縮されたブロック２５０に格納される。データ要素４の、対応する６までの圧縮された部分または圧縮されていない部分は、示されない。圧縮されたデータブロック２５０は、圧縮されたデータブロック２５０の（例えば、バイト境界に沿った）所望の長さを実現するためのパディングも含む。
【００４０】
いくつかの実施形態において、辞書は、符号ビットと指数との組み合わせを各々が含む複数のエントリを含み得る。そのような実施形態において、データ要素の符号ビットおよび指数が辞書のエントリと一致している場合、タグはデータ要素およびタグ値に割り当てられ得、仮数（指数または符号ビットではない）は圧縮されたデータブロックに書き込まれる（なぜなら、タグ値を辞書と組み合わせることにより、符号ビットだけでなく指数もエンコードできるからである）。
【００４１】
１６ビットの長さを有するデータ要素上で動作する２ビットのタグの実装において、値０を有する各データ要素は２ビットのタグに圧縮されており、辞書のエントリと一致しない各データ要素は圧縮されておらず、１６ビット全体がブロック２０４に書き込まれ、辞書のエントリと一致する各データ要素は部分的に圧縮されている（すなわち、５ビットの指数は２ビットのタグに圧縮されており、符号ビットおよび１０ビットの仮数は圧縮されていない）。従って、マッチの数がＭであり、非０の値である不一致のデータ要素の数がＦである場合、圧縮されたブロックの総ビットカウントは、３２＋Ｆ×１６＋Ｍ×１１である。
【００４２】
１６ビットの長さを有するデータ要素上で動作する３ビットのタグの実装において、値０を有する各データ要素は３ビットのタグに圧縮されており、辞書のエントリと一致しない各データ要素は圧縮されておらず、１６ビット全体がブロック２０４に書き込まれ、辞書のエントリと一致する各データ要素は部分的に圧縮されている（すなわち、５ビットの指数は３ビットのタグに圧縮されており、符号ビットおよび１０ビットの仮数は圧縮されていない）。従って、マッチの数がＭであり、非０の値である不一致のデータ要素の数がＦである場合、圧縮されたブロックの総ビットカウントは、４８＋Ｆ×１６＋Ｍ×１１である。
【００４３】
このスキームの１つの利点は、当該情報がタグ情報に直接エンコードされるので（すなわち、一致している各タグ値が辞書の別個の位置に対応するので）、一致しているビットのオフセットまたは位置について別個のフィールドが必要ないことである。
【００４４】
図３は、特定の実施形態による図１のプロセッサ１０８の圧縮エンジンを示す。圧縮エンジン１０８は、コンプレッサ３０２、デコンプレッサ３０４およびバッファメモリ３１４を含む。コンプレッサ３０２は、エンコーダ３０６および辞書３０８Ａを含む。エンコーダ３０６は、ゼロ値と辞書３０８Ａのエントリとのマッチとをチェックし、次に、適宜、タグ２０６と、圧縮されていないデータ要素２０８と、辞書のマッチの圧縮されていない部分２１０と、パッドビット２１２とで圧縮されたブロック２０４を生成することにより、ブロック２００の各データ要素２０２のタグを決定することにより圧縮されたブロック２０４を形成するように動作可能である。バッファメモリ３１４は、圧縮されていないデータブロック２００および／または圧縮されたデータブロック２０４など、データを格納する任意の好適なメモリを備え得、圧縮および／または圧縮解除中に用いられ得る。
【００４５】
辞書３０８Ａは、示される実施形態において、ｅｎｔｒｙ０およびｅｎｔｒｙ１という２つのエントリを含むが、他の実施形態において、任意の好適な数のエントリ（例えば、タグが３ビットである場合、６つのエントリ）を含み得る。圧縮されているデータのフォーマットがＦＰ１６である場合、辞書３０８Ａのエントリは、５ビットの指数値を各々格納し得る（他の浮動小数点フォーマットでは、辞書は、エントリをデータ要素における指数の長さが一致する指数と格納し得る）。圧縮されていないブロック２００の各データ要素２０２について、データ要素の指数ビット（すなわち、ビット１４：１０）は、それらが辞書のエントリの対応するビットと一致しているかどうかを判断するために検証され得る。特定の実施形態において、圧縮されるデータ要素の指数の１または複数のビットが、辞書にインデックスを付けて辞書のエントリを選択して、データ要素の指数ビットと比較するために用いられる。例えば、エントリが２つである辞書では、データ要素の指数の単一のビットが、辞書にインデックスを付けるために用いられ得る（すなわち、ビット値が０である場合には、ｅｎｔｒｙ０がデータ要素の指数ビットと比較され、ビット値が１である場合には、ｅｎｔｒｙ１がデータ要素の指数ビットと比較される）。一実施形態において、データ要素の指数のＬＳＢは、辞書にインデックスを付けて、比較のために辞書のエントリを選択するために用いられる。
【００４６】
別の実施形態において、辞書のインデックスを計算するために、データ要素の指数の複数のビットに対してハッシュ演算が実行され得る。任意の好適なハッシュ演算が用いられ得る。一例として、６つのエントリを有する辞書３０８Ａにインデックスを付けるべく、辞書のエントリを判断してデータ要素の指数と比較するために、データ要素の指数の３つのＬＳＢに対してモジュロ６演算が実行され得る。特定の実施形態において、辞書３０８Ａおよび／または３０８Ｂは、コンテンツアドレス指定可能メモリ（ＣＡＭ）に格納され得、並列検索が可能になる。
【００４７】
辞書のエントリは、新しいデータ系列の圧縮の開始前に、エントリアップデータ３１０Ａにより任意の好適な値で初期化され得る（データ系列は、複数の圧縮されていないブロック２００を含み得る）。いくつかの実施形態において、辞書のエントリは、プロセッサ１００の動作中に変わらない静的な値に基づいて初期化される。例として、エントリが２つである辞書を利用する実施形態において、これらのエントリは、新しいデータ系列が圧縮されるたびに、＋１および−１に初期化され得る。いくつかの実施形態において、初期化は特定用途であり得る。例えば、第１のタイプのワークロード用に（例えば、機械学習ワークロードにおけるアクティブ化データの格納用に）、辞書３０８Ａのエントリは、値の第１のセットで初期化され得、第２のタイプのワークロード用に（例えば、機械学習ワークロードにおけるシナプスの重みの格納用に）、辞書３０８Ａのエントリは、値の第２のセットで初期化され得る（第２のセットの少なくとも１つの値は、第１のセットの対応する値とは異なる）。従って、これらのエントリは、特定のタイプのワークロード用に処理されるデータ要素の指数と一致する可能性が最も高い値に初期化され得る。特定用途向けの値で辞書のエントリを初期化することにより、特に、圧縮されていないデータブロックが比較的少数（例えば、２、４、８等）であるデータ系列について、圧縮比が向上し得る。なぜなら、そのような場合、辞書３０８Ａには、データ系列の通常生じる指数でプライミングされるための十分な時間がないからである（辞書３０８Ａの更新については、以下でより詳細に説明される）。より大きい辞書を用いる圧縮スキームは、最適な初期化からより小さい辞書より多くの恩恵を受け得る。
【００４８】
別の実施形態において、辞書３０８Ａの初期化のために用いられる値は、指数の出現率に基づいて、プロセッサ１００の動作中に更新される。例えば、圧縮エンジン１０８は、複数のデータ系列にわたる様々な指数についてカウントのヒストグラムを更新する性能モニタを含み得る。初期化が実行される場合、最も頻繁に生じる指数が、辞書のエントリを初期化するために用いられ得る。様々な実施形態において、ヒストグラムは、直近の時間間隔にわたって最も頻繁に生じている指数が初期化のために用いられることを保証するために、周期的にリセットされ得る。いくつかの実施形態において、別個のヒストグラムが、複数の異なるタイプの各ワークロード用に維持され得、辞書３０８Ａのエントリは、圧縮されるデータ系列に関連付けられたワークロードに対応するヒストグラムに基づいて初期化され得る。
【００４９】
辞書３０８Ａは、データ系列のデータブロック２００が圧縮エンジン１０８により処理されるときに、エントリアップデータ３１０Ａにより更新され得る。様々な従来の圧縮スキームは、辞書の更新が各データ要素の後に起きるように定義されるが、データ要素の全てが並列に圧縮される場合、これにより設計が複雑になる。なぜなら、更新ロジックは、インフライトの全てのレーンにおける全てのデータ要素をチェックして、辞書のエントリの最新の値を見つけ出さなければならないからである。本開示の特定の実施形態において、辞書３０８Ａのエントリは、データ系列の次のブロック２００について、現在のブロック２００に基づいて更新される（従って、特定のブロック用に用いられる辞書は、前のブロックのコンテンツに基づき得る）。そのような実施形態により、ブロックのデータ要素のうちでの連続した依存が回避され、任意の数のデータ要素（例えば、データ要素の全て）がコンプレッサ３０２により並列に圧縮されることが可能になる（例えば、各データ要素のタグの決定は、エンコーダ３０６により同時に実行され得る）。
【００５０】
エントリが２つである辞書を含む特定の実施形態において、辞書の２つのエントリの各々は、対応するＬＳＢと共に、最も可能性が低い指数（すなわち、データブロック２００内で最も高いインデックスを有するデータ要素２０２の指数）の値を取り得る。例えば、１６個の圧縮されるデータ要素２０２と、データ要素１２（ＤＥ１２）の１０１０１、ＤＥ１３の１０００１、ＤＥ１４の１０１００およびＤＥ１５の１００００という指数ビットとを有するデータブロック２００において、辞書の（ＬＳＢ０に対応する）第１のエントリは１００００に、辞書の（ＬＳＢ１に対応する）第２のエントリは１０００１に更新されるであろう。従って、一致するＬＳＢを有する直近の指数が、辞書３０８Ａの対応するエントリを更新するために用いられる。他の実施形態において、対応するＬＳＢと一致する指数を有するデータ要素があるデータブロック２００における最も低いインデックスが、最も高いインデックスの代わりに更新のために用いられ得る。
【００５１】
様々な実施形態において、辞書の更新動作は、０値のデータ要素（すなわち、指数ビットおよび仮数ビットの全てが０であるデータ要素）を無視し、従って、ｅｎｔｒｙ０は、１または複数のゼロ値のデータ要素に基づいて、「０００００」に更新されない（が、全てが０である指数ビットと、０ではない少なくとも１つの仮数ビットとを有する１または複数のデータ要素に基づいて、「０００００」に更新され得る）。特定のエントリのための更新基準に適合する指数を有するデータ要素がない場合、そのエントリは不変のままである。例えば、データ要素のいずれもＬＳＢが１である指数を有していない場合、ｅｎｔｒｙ１は、不変のままである。別の例として、非ゼロ値のデータ要素のいずれもＬＳＢが０である指数を有していない場合、ｅｎｔｒｙ０は、不変のままである。従って、いくつかのデータブロック２００については、辞書３０８Ａの単一のエントリのみが更新され得るか、またはいずれのエントリも更新されない。
【００５２】
他の実施形態において、辞書のエントリは、任意の好適な態様で更新され得る。例えば、各指数がブロック２００のデータ要素２０２において生じる回数がカウントされ得、各辞書エントリについて、適切なＬＳＢを有する最も頻度が高い指数がエントリを更新するために用いられ得る（すなわち、ｅｎｔｒｙ０は、ＬＳＢ０を有する最も頻度が高い指数で更新され得、ｅｎｔｒｙ１は、ＬＳＢ１を有する最も頻度が高い指数で更新され得る）。
【００５３】
様々な実施形態において、辞書３０８Ａは、Ｍ個のブロック毎に一度更新される。Ｍは、任意の好適な整数である。これにより、圧縮ハードウェアのより一層の並列化が可能になる。そのような実施形態において、辞書３０８Ａは、上述の更新スキームのいずれかまたは他の好適な更新スキームに従って、Ｍ個のブロックのうちの最後のブロック２００コンテンツ、Ｍ個のブロックのうちの１または複数のコンテンツまたはＭ個のブロックと追加の前のブロックの全てのコンテンツに基づいて更新され得る。
【００５４】
デコンプレッサ３０４は、メモリ１１２から読み取られる圧縮されたブロック２０４を受信し、それらのコンテンツに基づいて、対応する圧縮されていないブロック２００を生成するように動作可能である。デコーダ３１２は、圧縮されたブロック２０４の各タグを読み取り、当該タグがマッチまたは圧縮されていないデータ要素を示す場合、当該タグおよび関連する情報に基づいて、対応する圧縮されていないデータ要素２０２を生成し得る（例えば、辞書のマッチのうちの圧縮されていない部分、または圧縮されていないデータ要素）。辞書のマッチを示すタグについて、デコーダ３１２は、辞書３０８Ｂのエントリにアクセスして、データ要素の指数値を取得し得る。エントリアップデータ３１０Ｂは、エントリアップデータ３１０Ａと同じ態様で、辞書３０８Ｂのエントリを初期化および更新し得る。特定の実施形態において、正確な辞書エントリがデコード中に用いられることを保証すべく、データは、書き込まれたのと同じ順序で読み取られ得る。圧縮されたブロック用に用いるための辞書のエントリを更新するための任意の他の好適な方法が用いられ得る。
【００５５】
図４は、特定の実施形態による２つのチャネル４０２（すなわち、４０２Ａおよび４０２Ｂ）への書き込みデータの圧縮および配置を示す。チャネル４０２は、メモリコントローラ１１０をメモリ１１２に結合し得る。特定の実施形態において、各チャネルは、メモリ１１２の異なるバンクに結合し得る。様々な実施形態において、キャッシュラインアーキテクチャは、プロセッサ１００により用いられ得る。各データブロック２００は、キャッシュライン（例えば、３２バイトまたは６４バイト）を含む。
【００５６】
書き込みデータの各データブロック２００は、そのアドレスと共にメモリ２１２（例えば、メモリインタフェース１０６）へと送信され得る。メモリ２１２に書き込まれる前に、各データブロック２００は、圧縮エンジン１０８により処理され得る。示される実施形態において、書き込みデータは、アドレスＡに関連付けられたデータブロック２００Ａと、アドレスＢに関連付けられたデータブロック２００Ｂと、アドレスＣに関連付けられたデータブロック２００Ｃと、アドレスＤに関連付けられたデータブロック２００Ｄとを含む。データブロック２００は、２つの均等なサイズの部分を有するものとして示される。例えば、データブロック２００Ａは、第１の部分ＤＡＴＡＡ０および第２の部分ＤＡＴＡＡ１を含む。例として、第１の部分は、ブロック２００Ａのデータ要素２０２の半分を含み得、一方で、第２の部分は、ブロックのデータ要素２０２の他方の半分を含み得る。ブロック２００Ａが圧縮エンジン１０８により圧縮されていない（または十分な圧縮比が実現されていない）場合、ブロック２００Ａのデータは、チャネル４０２Ａおよび４０２Ｂの両方を用いて送信される。ＤＡＴＡＡ１は第１のチャネル４０２Ａで送信され、ＤＡＴＡＡ０は第２のチャネル４０２Ｂで送信される（データブロック２００Ｄは同様に処理される）。しかしながら、十分な圧縮比（例えば、５０％）が実現されている場合、単一のチャネルが、圧縮されたデータブロックをメモリ１１２への格納のためにメモリ１１２へ送信するために用いられ得る。示される例において、データブロック２００Ｂおよびデータブロック２００Ｃの両方は、結果として得られる圧縮されたデータブロックの各々（すなわち、データ'Ｂおよびデータ'Ｃ）が単一のチャネルで（例えば同時に）送信されるように、十分に圧縮されている。いくつかの実施形態において、圧縮されたブロックは、別の圧縮されたブロックが別のチャネルへ送信されるのと同時にチャネルで送信され得るように（圧縮されていないブロックが、中間サイクルにおいて両方のチャネルを用いて送信され得るように）、１または複数のサイクルだけ保持され得る。
【００５７】
様々な実施形態において、どのチャネル４０２へブロックが送信されるかを判断するために、圧縮されたブロック２０４のアドレスに対して、ハッシュ処理がメモリコントローラ１１０により実行され得る。そのような実施形態は、チャネル４０２のうちの圧縮されたブロック２０４を均一に分散して、高スループットを促進し得る。ハッシュ処理は、圧縮されたブロックが正確なチャネルで、かつ、メモリ１１２の正確なバンクから読み取られることを保証するために、圧縮されたブロックの読み取り時に、メモリコントローラ１１０により繰り返され得る。
【００５８】
図５は、特定の実施形態によるデータを圧縮するためのフローを示す。様々な実施形態において、フローは、圧縮エンジン１０８および／または回路を備える他の好適なロジックにより実行され得る。
【００５９】
段階５０２において、圧縮されていないデータブロック２００のデータ要素２０２がアクセスされる。５０４において、データ要素がゼロ値であるかどうかに関して判断が行われる。データ要素がゼロ値である場合、段階５０６において、ゼロ値のデータ要素に対応するタグ値が設定され、段階５０８において、タグが出力に加えられる。データ要素がゼロ値ではない場合、段階５１０において、辞書のインデックスが、データ要素の指数値に基づいて決定される。段階５１２において、そのインデックスに対応する辞書のエントリがデータ要素２０２の指数と一致しているかどうかに関して判断が行われる。そのエントリが一致している場合、段階５１４において、辞書のインデックスに対応するタグ値が設定される。段階５１６において、このタグ値が、データ要素の符号ビットおよび仮数ビットと共に、出力に加えられる。インデックスに対応する辞書のエントリがデータ要素２０２の指数と一致していない場合、段階５１８において、マッチがないことを示すタグ値が設定される。段階５２０において、タグおよびデータ要素２０２が出力に加えられる。
【００６０】
図６は、特定の実施形態による圧縮されたデータを読み取るためのフローを示す。様々な実施形態において、フローは、圧縮エンジン１０８、メモリコントローラ１１０、圧縮エンジン１０８とメモリコントローラ１１０との組み合わせおよび／または回路を備える他の好適なロジックにより実行され得る。
【００６１】
段階６０２において、キャッシュラインアドレス付きの読み取り要求が、（例えば、Ｌ１キャッシュまたはＬ２キャッシュなどのより低いレベルキャッシュにおける失敗の後に）受信される。段階６０４において、キャッシュラインが圧縮方式で（例えば、圧縮フラグ１１４に基づいて）メモリ１１２に格納されているかどうかに関して判断が行われる。キャッシュラインが圧縮されていない場合、キャッシュラインは、通常の方式でメモリ６０６から読み取られる。段階６０４においてキャッシュラインが圧縮されている場合、どのチャネルから圧縮されたキャッシュラインを読み取るかを判断するために、段階６０８において、キャッシュラインアドレスがハッシュされ得る。段階６１０において、圧縮されたキャッシュラインが、選択されたチャネルでメモリから読み取られる。段階６１２において、キャッシュラインが圧縮解除される。
【００６２】
図４〜図６において説明されたフローは、特定の実施形態において生じ得る動作を表すに過ぎない。他の実施形態において、追加の動作が実行され得る。本開示の様々な実施形態は、本明細書において説明される機能を実行するための任意の好適なシグナリングメカニズムを意図している。図４〜図６に示される動作のいくつかは、適切である場合、繰り返され、組み合わされ、修正され、または省略され得る。加えて、特定の実施形態の範囲から逸脱することなく、動作は、任意の好適な順序で実行され得る。一例として、動作５０４、５１０および５１２のうちの２以上は、いくつかの実施形態において、同時に実行され得る。
【００６３】
以下の図は、上述の実施形態を実装するための例示的なアーキテクチャおよびシステムを詳細に示す。例えば、圧縮エンジン１０８は、以下に示されるプロセッサまたはシステムのいずれかの内部に含まれ得るか、またはそれらのいずれかに結合され得る。いくつかの実施形態において、上述の１または複数のハードウェアコンポーネントおよび／または命令は、以下に詳述されるようにエミュレーションされるか、またはソフトウェアとして実装される。
【００６４】
図７は、特定の実施形態によるフィールドプログラマブルゲートアレイ（ＦＧＰＡ）７００を示す。特定の実施形態において、圧縮エンジン１０８は、ＦＰＧＡ７００により実装され得る（例えば、圧縮エンジン１０８の機能は、動作ロジック７０４の回路により実装され得る）。ＦＰＧＡは、構成可能なロジックを含む半導体デバイスであり得る。ＦＰＧＡは、ＦＰＧＡのロジックがどのように構成されるかを定義する任意の好適なフォーマットを有するデータ構造（例えば、ビットストリーム）を介してプログラムされ得る。ＦＰＧＡは、ＦＰＧＡが製造された後に、任意の回数だけ再プログラムされ得る。
【００６５】
示される実施形態において、ＦＰＧＡ７００は、構成可能なロジック７０２、動作ロジック７０４、通信コントローラ７０６およびメモリコントローラ７１０を含む。構成可能なロジック７０２は、１または複数のカーネルを実装するようにプログラムされ得る。カーネルは、ＦＰＧＡの構成されたロジックを含み得る。構成されたロジックは、１または複数の入力のセットを受信し、構成されたロジックを用いる入力のセットを処理し、かつ、１または複数の出力のセットを提供し得る。カーネルは、任意の好適なタイプの処理を実行し得る。様々な実施形態において、カーネルは、プレフィックスデコーダエンジンを含み得る。いくつかのＦＰＧＡ７００は、一度に単一のカーネルを実行することに制限され得、一方で、他のＦＰＧＡは、複数のカーネルを同時に実行することが可能であり得る。構成可能なロジック７０２は、任意の好適なタイプのロジックゲート（例えば、ＡＮＤゲート、ＸＯＲゲート）などの任意の好適なロジック、またはロジックゲート（例えば、フリップフロップ、ルックアップテーブル、加算器、乗算器、マルチプレクサ、デマルチプレクサ）の組み合わせを含み得る。いくつかの実施形態において、ロジックは（少なくとも部分的に）、ＦＰＧＡのロジックコンポーネント間のプログラム可能な相互接続を通じて構成される。
【００６６】
動作ロジック７０４は、カーネルを定義するデータ構造にアクセスし、データ構造に基づいて構成可能なロジック７０２を構成し、かつ、ＦＰＧＡの他の動作を実行し得る。いくつかの実施形態において、動作ロジック７０４は、データ構造に基づいて、制御ビットをＦＰＧＡ７００のメモリ（例えば、不揮発性フラッシュメモリまたはＳＲＡＭベースのメモリ）に書き込み得る。制御ビットは、（例えば、構成可能なロジックの部分間の特定の相互接続をアクティブ化または非アクティブ化することにより）ロジックを構成するように動作する。動作ロジック７０４は、任意の好適なタイプのメモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、１または複数のトランシーバ、クロッキング回路、ＦＰＧＡ上に位置する１または複数のプロセッサ、１または複数のコントローラまたは他の好適なロジック）を含む１または複数のメモリデバイスなど、（構成可能なロジックまたは固定ロジックに実装され得る）任意の好適なロジックを含み得る。
【００６７】
通信コントローラ７０６は、ＦＰＧＡ７００がコンピュータシステムの他のコンポーネント（例えば、圧縮エンジン）と通信すること（例えば、データセットを圧縮するというコマンドを受信すること）を可能にし得る。メモリコントローラ７１０は、ＦＰＧＡがコンピュータシステムのメモリからデータ（例えば、オペランドまたは結果）を読み取ること、またはコンピュータシステムのメモリにデータを書き込むことを可能し得る。様々な実施形態において、メモリコントローラ７１０は、ダイレクトメモリアクセス（ＤＭＡ）コントローラを備え得る。
【００６８】
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主にグラフィックおよび／または科学（スループット）コンピューティング向けの特定用途向けコアを含んでよい。異なるプロセッサの実装は、１）汎用コンピューティング向けの１または複数の汎用インオーダコアおよび／または汎用コンピューティング向けの１または複数の汎用アウトオブオーダコアを含むＣＰＵ）、および２）主にグラフィックおよび／または科学（スループット）向けの１または複数の特定用途向けコアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックスおよび／または科学（スループット）ロジックなどの特定用途向けロジックまたは特定用途向けコアと称される場合がある）、および４）上記ＣＰＵ（アプリケーションコアまたはアプリケーションプロセッサと称される場合がある）、上述のコプロセッサおよび追加の機能を同じダイ上に含み得るシステムオンチップを含み得る、異なるコンピュータシステムアーキテクチャをもたらす。例示的なコアアーキテクチャが次に説明され、その後、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【００６９】
図８Ａは、本開示の実施形態による例示的なインオーダパイプラインと、例示的なレジスタリネーミングアウトオブオーダ発行／実行パイプラインとの両方を示すブロック図である。図８Ｂは、本開示の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。図８Ａおよび図８Ｂにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方で、任意選択的な追加の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【００７０】
図８Ａにおいて、プロセッサパイプライン８００は、フェッチステージ８０２、レングスデコードステージ８０４、デコードステージ８０６、アロケーションステージ８０８、リネーミングステージ８１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ８１２、レジスタ読み取り／メモリ読み取りステージ８１４、実行ステージ８１６、ライトバック／メモリ書き込みステージ８１８、例外処理ステージ８２２およびコミットステージ８２４を含む。
【００７１】
図８Ｂは、実行エンジンユニット８５０に結合されたフロントエンドユニット８３０を含むプロセッサコア８９０を示す。フロントエンドユニット８３０および実行エンジンユニット８５０の両方は、メモリユニット８７０に結合されている。コア８９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コアまたはハイブリッドコアタイプもしくは代替的コアタイプであってよい。さらに別の選択肢として、コア８９０は、例えば、ネットワークコアまたは通信コア、圧縮エンジンおよび／または圧縮解除エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット（ＧＰＧＰＵ）コア、グラフィックコア等、特定用途向けコアであってよい。
【００７２】
フロントエンドユニット８３０は、デコードユニット８４０に結合された命令フェッチユニット８３８に結合された命令トランスレーションルックアサイドバッファ（ＴＬＢ）８３６に結合された命令キャッシュユニット８３４に結合された分岐予測ユニット８３２を含む。デコードユニット８４０（またはデコーダ）は、命令をデコードし、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成してよく、これらは、元の命令からデコードされるか、別の方法で反映されるか、または元の命令から導出される。デコードユニット８４０は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例は、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態において、コア８９０は、マイクロコードＲＯＭ、または特定のマイクロ命令のためのマイクロコードを（例えば、デコードユニット８４０またはフロントエンドユニット８３０内の他のものに）格納する他の媒体を含む。デコードユニット８４０は、実行エンジンユニット８５０におけるリネーミング／アロケータユニット８５２に結合される。
【００７３】
実行エンジンユニット８５０は、リタイアメントユニット８５４および１または複数のスケジューラユニット８５６のセットに結合されたリネーミング／アロケータユニット８５２を含む。スケジューラユニット８５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット８５６は、物理レジスタファイルユニット８５８に結合される。物理レジスタファイルユニット８５８の各々は、１または複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、次に実行される命令のアドレスである命令ポインタ）等、１または複数の異なるデータタイプを格納するもののうちの異なるいくつかを表す。一実施形態において、物理レジスタファイルユニット８５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が（例えば、リオーダバッファおよびリタイアレジスタファイルの使用、フューチャファイル、履歴バッファおよびリタイアレジスタファイルの使用、レジスタマップおよびレジスタのプールの使用等により）実装され得る様々な態様を示すよう、物理レジスタファイルユニット８５８は、リタイアメントユニット８５４と重ねられている。リタイアメントユニット８５４および物理レジスタファイルユニット８５８は、実行クラスタ８６０に結合される。実行クラスタ８６０は、１または複数の実行ユニット８６２のセットおよび１または複数のメモリアクセスユニット８６４のセットを含む。実行ユニット８６２は、様々なオペレーション（例えば、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してよい。いくつかの実施形態は、特定の機能または機能セットに専用の多数の実行ユニットを含んでよく、一方で、他の実施形態は、１つの実行ユニットのみ、または全ての機能を全てが実行する複数の実行ユニットを含んでよい。スケジューラユニット８５６、物理レジスタファイルユニット８５８および実行クラスタ８６０は、複数存在する可能性があるものとして示される。なぜなら、特定の実施形態が、特定のタイプのデータ／オペレーションについて別個のパイプラインを作成するからである（例えば、スカラ整数、パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプラインおよび／またはメモリアクセスパイプラインであり、それらの各々が自身のスケジューラユニット、物理レジスタファイルユニットおよび／または実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット８６４を有する特定の実施形態が実装される）。別個のパイプラインが用いられる場合、これらのパイプラインのうちの１または複数がアウトオブオーダ発行／実行で、残りがインオーダであってよいことも理解されるべきである。
【００７４】
メモリアクセスユニット８６４のセットは、レベル２（Ｌ２）キャッシュユニット８７６に結合されたデータキャッシュユニット８７４に結合されたデータＴＬＢユニット８７２を含むメモリユニット８７０に結合される。１つの例示的な実施形態において、メモリアクセスユニット８６４は、メモリユニット８７０におけるデータＴＬＢユニット８７２に各々が結合されたロードユニット、格納アドレスユニットおよび格納データユニットを含んでよい。命令キャッシュユニット８３４は、メモリユニット８７０におけるレベル２（Ｌ２）キャッシュユニット８７６にさらに結合される。Ｌ２キャッシュユニット８７６は、１または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【００７５】
例として、例示的なレジスタリネーミングアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン８００を実装してよい。１）命令フェッチ８３８がフェッチステージおよび長さデコードステージ８０２および８０４を実行する。２）デコードユニット８４０がデコードステージ８０６を実行する。３）リネーミング／アロケータユニット８５２がアロケーションステージ８０８およびリネーミングステージ８１０を実行する。４）スケジューラユニット８５６がスケジューリングステージ８１２を実行する。５）物理レジスタファイルユニット８５８およびメモリユニット８７０がレジスタ読み取り／メモリ読み取りステージ８１４を実行し、実行クラスタ８６０が実行ステージ８１６を実行する。６）メモリユニット８７０および物理レジスタファイルユニット８５８がライトバック／メモリ書き込みステージ８１８を実行する。７）様々なユニットが例外処理ステージ８２２に関わり得る。８）リタイアメントユニット８５４および物理レジスタファイルユニット８５８がコミットステージ８２４を実行する。
【００７６】
コア８９０は、本明細書において説明される命令を含む１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンで追加されるいくつかの拡張を伴う）、カリフォルニア州サニーベールのＭＩＰ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなどの任意選択的な追加の拡張を伴う））をサポートしてよい。一実施形態において、コア８９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能になる。
【００７７】
コアはマルチスレッディング（オペレーションまたはスレッドの２以上の並列なセットを実行すること）をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング（物理コアが同時にマルチスレッディングしているスレッドの各々に対して、単一の物理コアがロジックコアを提供する）、またはそれらの組み合わせ（例えば、タイムスライスフェッチおよびデコードならびにその後のＩｎｔｅｌ（登録商標）ハイパースレッディング技術におけるものなど、同時マルチスレッディング）を含む様々な態様でサポートしてよいことを理解されたい。
【００７８】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの示される実施形態は別個の命令およびデータキャッシュユニット８３４／８７４ならびに共有Ｌ２キャッシュユニット８７６も含むが、代替的な実施形態は、命令およびデータの両方のための、例えばレベル１（Ｌ１）内部キャッシュなどの単一の内部キャッシュ、または複数のレベルの内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコアおよび／またはプロセッサの外部にあってもよい。
【００７９】
図９Ａおよび図９Ｂは、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。当該コアは、チップにおけるいくつかのロジックブロックのうちの１つ（同じタイプおよび／または異なるタイプの他のコアを潜在的に含む）となるであろうものである。ロジックブロックは、用途に応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通じて、いくつかの固定機能ロジック、メモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏロジックと通信する。
【００８０】
図９Ａは、様々な実施形態による、オンダイ相互接続ネットワーク９０２への接続およびレベル２（Ｌ２）キャッシュ９０４のローカルサブセットと共に示した単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ９００は、パックドデータ命令セット拡張を伴うｘ８６命令セットをサポートする。Ｌ１キャッシュ９０６は、スカラユニットおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能にする。一実施形態において（設計を単純化するために）、スカラユニット９０８およびベクトルユニット９１０は、別個のレジスタセット（それぞれ、スカラレジスタ９１２およびベクトルレジスタ９１４）を用い、それらの間転送されるデータは、メモリに書き込まれ、次に、レベル１（Ｌ１）キャッシュ９０６からリードバックされるが、代替的な実施形態は、異なるアプローチを用いてよい（例えば、単一のレジスタセットを用いるか、または、データが書き込まれてリードバックされることなく２つのレジスタファイルの間で転送されることを可能にする通信経路を含む）。
【００８１】
Ｌ２キャッシュ９０４のローカルサブセットは、（いくつかの実施形態において、プロセッサコア毎に１つの）別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、自身のＬ２キャッシュ９０４のローカルサブセットへの直接的なアクセス経路を有する。プロセッサコアにより読み取られたデータは、そのＬ２キャッシュサブセット９０４に格納され、他のプロセッサコアが自身のローカルＬ２キャッシュサブセットにアクセスするのと並行して迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のＬ２キャッシュサブセット９０４に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向性であり、プロセッサコア、Ｌ２キャッシュおよび他のロジックブロックなどのエージェントが、チップ内互いに通信することを可能にする。特定の実施形態において、各リングデータ経路は、方向毎に１０１２ビット幅である。
【００８２】
図９Ｂは、実施形態による図９Ａにおけるプロセッサコアの一部の拡大図である。図９Ｂは、Ｌ１データキャッシュ９０６Ａ（Ｌ１キャッシュ９０６の一部）だけでなく、ベクトルユニット９１０およびベクトルレジスタ９１４に関するより詳細な部分を含む。具体的には、ベクトルユニット９１０は、整数単精度浮動命令および倍精度浮動命令のうちの１または複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ９２８を参照のこと）である。ＶＰＵは、スウィズルユニット９２０によるレジスタ入力のスウィズル、数値変換ユニット９２２Ａ〜Ｂによる数値変換、および複製ユニット９２４によるメモリ入力の複製をサポートする。書き込みマスクレジスタ９２６は、結果として生じるベクトル書き込みのプレディケートを可能にする。
【００８３】
図１０は、様々な実施形態による１つより多くのコアと、統合メモリコントローラと、統合グラフィックスとを有し得るプロセッサ１０００のブロック図である。図１０における実線のボックスは、単一のコア１００２Ａと、システムエージェント１０１０と、１または複数のバスコントローラユニット１０１６のセットとを備えるプロセッサ１０００を示す。一方で、破線のボックスによる任意選択的な追加は、複数のコア１００２Ａ〜Ｎと、システムエージェントユニット１０１０における１または複数の統合メモリコントローラユニット１０１４のセットと、特定用途向けロジック１００８とを備える代替的なプロセッサ１０００を示す。
【００８４】
従って、プロセッサ１０００の異なる実装は、１）（１または複数のコアを含み得る）統合グラフィックスおよび／または科学（スループット）ロジックである特定用途向けロジック１００８と、１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコアまたはそれら２つの組み合わせ）であるコア１００２Ａ〜１００２Ｎとを備えるＣＰＵ、２）主にグラフィックおよび／または科学（スループット）向けである多数の特定用途向けコアであるコア１００２Ａ〜１００２Ｎを備えるコプロセッサ、および３）多数の汎用インオーダコアであるコア１００２Ａ〜１００２Ｎを備えるコプロセッサを含み得る。従って、プロセッサ１０００は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジンおよび／または圧縮解除エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、高スループットの多くの組み込コア（ＭＩＣ）コプロセッサ（例えば、３０またはそれより多くのコアを含む）、埋め込みプロセッサ、またはロジックオペレーションを実行する他の固定ロジックもしくは構成可能なロジックなど、汎用プロセッサ、コプロセッサまたは特別用途向けプロセッサであり得る。プロセッサは、１または複数のチップ上に実装されてよい。プロセッサ１０００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳなど、多数の処理技術のいずれかを用いる１または複数の基板の一部であってよく、および／または当該基板上に実装されてもよい。
【００８５】
様々な実施形態において、プロセッサは、対称的または非対称的であり得る任意の数の処理要素を含み得る。一実施形態において、処理要素とは、ソフトウェアスレッドをサポートするハードウェアまたはロジックを指す。ハードウェア処理要素の例は、スレッドユニット、スレッドスロット、スレッド、プロセス装置、コンテンツ、コンテキストユニット、ロジックプロセッサ、ハードウェアスレッド、コア、および／または実行状態またはアーキテクチャ状態などのプロセッサの状態を保持することが可能な任意の他の要素を含む。言い換えると、一実施形態において、処理要素とは、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、または独立して他のコードなどのコードに関連付けられることが可能な任意のハードウェアを指す。物理プロセッサ（またはプロセッサソケット）とは通常、コアまたはハードウェアスレッドなどの任意の数の他の処理要素を潜在的に含む集積回路を指す。
【００８６】
コアとは、独立したアーキテクチャ状態を維持することが可能な集積回路に位置するロジックを指し得る。独立して維持されるアーキテクチャ状態の各々は、少なくともいくつかの専用実行リソースに関連付けられる。ハードウェアスレッドとは、独立したアーキテクチャ状態を維持することが可能な集積回路上に位置する任意のロジックを指し得る。独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。分かるように、特定のリソースが共有され、他のリソースがアーキテクチャ状態専用である場合、ハードウェアスレッドとコアとの間の用語体系の境界は重複する。しかししばしば、コアとハードウェアスレッドとは、オペレーティングシステムにより個々のロジックプロセッサと見られており、オペレーティングシステムは、各ロジックプロセッサ上での動作を個別にスケジューリングできる。
【００８７】
メモリ階層は、コア、セットの、または１または複数の共有キャッシュユニット１００６、および統合メモリコントローラユニット１０１４のセットに結合された外部メモリ（不図示）の内部に、１または複数のレベルのキャッシュを含む。共有キャッシュユニット１００６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）および／またはそれらの組み合わせなど、１または複数の中レベルキャッシュを含んでよい。一実施形態において、リングベース相互接続ユニット１０１２は特定用途向けロジック（例えば、統合グラフィックスロジック）１００８、共有キャッシュユニット１００６のセットおよびシステムエージェントユニット１０１０／統合メモリコントローラユニット１０１４と相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するためのよく知られている任意の数の技術を用い得る。一実施形態において、１または複数のキャッシュユニット１００６とコア１００２Ａ〜１００２Ｎとの間でコヒーレンシが維持される。
【００８８】
いくつかの実施形態において、コア１００２Ａ〜１００２Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント１０１０は、コア１００２Ａ〜１００２Ｎを調整し動作させるそれらのコンポーネント含む。システムエージェントユニット１０１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでよい。ＰＣＵは、コア１００２Ａ〜１００２Ｎおよび特定用途向けロジック１００８の電力状態を管理するために必要なロジックおよびコンポーネントであってよく、またはそれらを含んでよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【００８９】
コア１００２Ａ〜１００２Ｎは、アーキテクチャ命令セットの観点から同種または異種であってよい。つまり、コア１００２Ａ〜１００２Ｎのうちの２以上は、同じ命令セットを実行可能であってよいが、他のコアは、当該命令セットまたは異なる命令セットのサブセットのみを実行可能であってよい。
【００９０】
図１１〜図１４は、例示的なコンピュータアーキテクチャのブロック図である。当技術分野において知られている、ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイスのための他のシステム設計および構成は、本開示において説明される方法の実行にも好適である。概して、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスは、概ね好適である。
【００９１】
図１１は、本開示の一実施形態によるシステム１１００のブロック図を示す。システム１１００は、コントローラハブ１１２０に結合された１または複数のプロセッサ１１１０、１１１５を含んでよい。一実施形態において、コントローラハブ１１２０は、グラフィックメモリコントローラハブ（ＧＭＣＨ）１１９０および入力／出力ハブ（ＩＯＨ）１１５０（別個のチップまたは同じチップ上にあってよい）を含む。ＧＭＣＨ１１９０は、メモリと、メモリ１１４０に結合されたグラフィックコントローラと、コプロセッサ１１４５とを含む。ＩＯＨ１１５０は、入力／出力（Ｉ／Ｏ）デバイス１１６０をＧＭＣＨ１１９０に結合する。あるいは、メモリおよびグラフィックコントローラの１つまたは両方が（本明細書において説明されるように）プロセッサ内に組み込まれる。メモリ１１４０およびコプロセッサ１１４５は、プロセッサ１１１０に直接結合される。コントローラハブ１１２０は、ＩＯＨ１１５０を含む単一のチップである。
【００９２】
追加的なプロセッサ１１１５の任意選択的な性質が、図１１において破線で示される。各プロセッサ１１１０、１１１５は、本明細書において説明される処理コアのうちの１または複数を含み得、プロセッサ１０００の何らかのバージョンであってよい。
【００９３】
メモリ１１４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、他の好適なメモリまたはそれらの任意の組み合わせであってよい。メモリ１１４０は、コンピュータシステム１１００の機能を提供するためにプロセッサ１１１０、１１１５により用いられるデータなどの任意の好適なデータを格納してよい。例えば、実行されるプログラムまたはプロセッサ１１１０、１１１５によりアクセスされるファイルに関連付けられたデータは、メモリ１１４０に格納されてよい。様々な実施形態において、メモリ１１４０は、プロセッサ１１１０、１１１５により用いられるかまたは実行されるデータおよび／または命令シーケンスを格納してよい。
【００９４】
少なくとも１つの実施形態において、コントローラハブ１１２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）などのポイントツーポイントインタフェース、または同様の接続１１９５を介して、プロセッサ１１１０、１１１５と通信する。
【００９５】
一実施形態において、コプロセッサ１１４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンおよび／または圧縮解除エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の特別用途向けプロセッサである。一実施形態において、コントローラハブ１１２０は、統合グラフィックスアクセラレータを含んでよい。
【００９６】
物理リソース１１１０と１１１５との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含む広範な価値基準の観点から様々な差異が存在し得る。
【００９７】
一実施形態において、プロセッサ１１１０は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。それらの命令内にコプロセッサ命令が埋め込まれてもよい。プロセッサ１１１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ１１４５により実行されるべきタイプのものとして認識する。従って、プロセッサ１１１０は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ１１４５に対して発行する。コプロセッサ１１４５は、受信したコプロセッサ命令を受け入れて実行する。
【００９８】
図１２は、本開示の実施形態による第１のより具体的な例示的なシステム１２００のブロック図を示す。図１２に示されるように、マルチプロセッサシステム１２００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１２５０を介して結合された第１のプロセッサ１２７０および第２のプロセッサ１２８０を含む。プロセッサ１２７０および１２８０の各々は、何らかのバージョンのプロセッサ１０００であってよい。本開示の一実施形態において、プロセッサ１２７０および１２８０はそれぞれプロセッサ１１１０および１１１５であり、一方で、コプロセッサ１２３８はコプロセッサ１１４５である。別の実施形態において、プロセッサ１２７０および１２８０はそれぞれ、プロセッサ１１１０およびコプロセッサ１１４５である。
【００９９】
プロセッサ１２７０および１２８０は、それぞれ、統合メモリコントローラ（ＩＭＣ）ユニット１２７２および１２８２を含むものとして示される。プロセッサ１２７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ―Ｐ）インタフェース１２７６および１２７８も含む。同様に、第２のプロセッサ１２８０は、Ｐ‐Ｐインタフェース１２８６および１２８８を含む。プロセッサ１２７０、１２８０は、Ｐ―Ｐインタフェース回路１２７８、１２８８を用いたポイントツーポイント（Ｐ―Ｐ）インタフェース１２５０を介して、情報を交換してよい。図１２に示されるように、ＩＭＣ１２７２および１２８２は、プロセッサをそれぞれの対応するメモリ、すなわち、それぞれの対応するプロセッサにローカルに取り付けられたメインメモリの部分であってよいメモリ１２３２およびメモリ１２３４に結合する。
【０１００】
プロセッサ１２７０、１２８０は各々、ポイントツーポイントインタフェース回路１２７６、１２９４、１２８６、１２９８を用いた個々のＰ‐Ｐインタフェース１２５２、１２５４を介して、チップセット１２９０と情報を交換してよい。チップセット１２９０は、任意選択で、高性能インタフェース１２３９を介して、コプロセッサ１２３８と情報を交換してよい。一実施形態において、コプロセッサ１２３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンおよび／または圧縮解除エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の特別用途向けプロセッサである。
【０１０１】
プロセッサのいずれかまたは両方のローカルキャッシュ情報が、あるプロセッサが低電力モードにされた場合に共有キャッシュに格納され得るように、共有キャッシュ（不図示）が、いずれかのプロセッサまたは両方のプロセッサの外部に含まれてよく、さらに、Ｐ―Ｐ相互接続を介してプロセッサと接続されてよい。
【０１０２】
チップセット１２９０は、インタフェース１２９６を介して第１のバス１２１６に結合されてよい。一実施形態において、第１のバス１２１６は、周辺コンポーネント相互接続（ＰＣＩ）バス、またはＰＣＩエクスプレスバスもしくは別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本開示の範囲は、それに限定されない。
【０１０３】
図１２に示されるように、様々なＩ／Ｏデバイス１２１４が、第１のバス１２１６を第２のバス１２２０に結合するバスブリッジ１２１８と共に、第１のバス１２１６に結合されてよい。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイまたは任意の他のプロセッサなどの１または複数の追加のプロセッサ１２１５が、第１のバス１２１６に結合される。一実施形態において、第２のバス１２２０は、ローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、例えば、キーボードおよび／またはマウス１２２２、通信デバイス１２２７、および命令／コードおよびデータ１２３０を含んでよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット１２２８      を含む様々なデバイスが、第２のバス１２２０に結合されてよい。さらに、オーディオＩ／Ｏ１２２４が、第２のバス１２２０に結合されてよい。他のアーキテクチャが本開示により意図されていることに留意されたい。例えば、図１２のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【０１０４】
図１３は、本開示の実施形態による第２のより具体的な例示的なシステム１３００のブロック図を示す。図１２および１３における同様の要素には、同様の参照番号が付され、図１２の特定の態様は、図１３の他の態様が不明瞭になることを回避すべく、図１３から省略されている。
【０１０５】
図１３は、プロセッサ１２７０、１２８０が、統合メモリおよびＩ／Ｏコントロールロジック（「ＣＬ」）１２７２および１２８２をそれぞれ含んでよいことを示す。従って、ＣＬ１２７２、１２８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏコントロールロジックを含む。図１３は、ＣＬ１２７２、１２８２に結合されるものがメモリ１２３２、１２３４のみではなく、Ｉ／Ｏデバイス１３１４もまた制御ロジック１２７２、１２８２に結合されることを示す。レガシＩ／Ｏデバイス１３１５は、チップセット１２９０に結合される。
【０１０６】
図１４は、本開示の実施形態によるＳｏＣ１４００のブロック図を示す。図１０における同様の要素には、同様の参照番号が付される。また、破線のボックスは、より高度なＳｏＣにおける任意選択的な特徴である。図１４において、相互接続ユニット１４０２は、１または複数のコア１００２Ａ〜１００２Ｎおよび共有キャッシュユニット１００６のセットを含むアプリケーションプロセッサ１４１０と、システムエージェントユニット１０１０と、バスコントローラユニット１０１６と、統合メモリコントローラユニット１０１４と、統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得るセットあるいは１または複数のコプロセッサ１４２０と、静的ランダムアクセスメモリ（ＳＲＡＭ）ユニット１４３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１４３２と、１または複数の外部ディスプレイに結合するためのディスプレイユニット１４４０とに結合される。一実施形態において、コプロセッサ１４２０は、例えば、ネットワークプロセッサまたは通信プロセッサ、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンおよび／または圧縮解除エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサ等の特別用途向けプロセッサを含む。
【０１０７】
いくつかの場合には、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される１または複数の他の命令に（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）翻訳、モーフィング、エミュレートまたは別の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または一部がプロセッサ内かつ一部がプロセッサ外にあってよい。
【０１０８】
図１５は、本開示の実施形態によるソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。図示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせで実装されてもよい。図１５は、少なくとも１つのｘ８６命令セットコア１５１６を備えるプロセッサによりネイティブに実行され得るｘ８６二進コード１５０６を生成するためにｘ８６コンパイラ１５０４を用いてコンパイルされ得る高水準言語１５０２によるプログラムを示す。少なくとも１つのｘ８６命令セットコア１５１６を備えるプロセッサは、少なくとも１つのｘ８６命令セットコアを備えるインテル（登録商標）プロセッサと実質的に同じ結果を実現すべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを備えるインテル（登録商標）プロセッサ上での動作を目的としたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換的に実行することにより、またはそうでなければ処理することにより、少なくとも１つのｘ８６命令セットコアを備えるインテル（登録商標）プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１５０４は、ｘ８６二進コード１５０６（例えば、追加のリンク処理を伴って、または伴わないで、少なくとも１つのｘ８６命令セットコア１５１６を備えるプロセッサ上で実行され得るオブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１５は、少なくとも１つのｘ８６命令セットコア１５１４を備えていないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを備えるプロセッサ）によりネイティブに実行され得る代替的な命令セットバイナリコード１５１０を生成するために代替的な命令セットコンパイラ１５０８を用いてコンパイルされ得る高水準言語１５０２によるプログラムを示す。命令コンバータ１５１２は、ｘ８６二進コード１５０６を、ｘ８６命令セットコア１５１４を備えていないプロセッサによりネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード１５１０と同じものにはならない可能性がある。なぜなら、これが可能な命令コンバータを作るのは難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実行し、代替的な命令セットに属する命令で構成されることになる。従って、命令コンバータ１５１２は、エミュレーション、シミュレーションまたは任意の他の処理を通じて、ｘ８６命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスがｘ８６二進コード１５０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表��。
【０１０９】
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表すデータは、多数の態様で設計を表してよい。まず、シミュレーションにおいて有用であるように、ハードウェア記述言語（ＨＤＬ）または別の機能記述言語を用いてハードウェアが表されてよい。加えて、ロジックおよび／またはトランジスタゲートを用いた回路レベルモデルが、設計処理のいくつかのステージで生成されてよい。さらに、ほとんどの設計が、何らかのステージにおいて、ハードウェアモデルにおける様々なデバイスの物理配置を表すデータレベルに達する。従来の半導体製造技術が用いられる場合、ハードウェアモデルを表すデータは、集積回路を製造するために用いられるマスクの異なるマスク層上にある様々な特徴の存在または不存在を指定するデータであってよい。いくつかの実装において、そのようなデータは、Ｇｒａｐｈｉｃ  Ｄａｔａ  ＳｙｓｔｅｍシステムＩＩ（ＧＤＳ  ＩＩ）、Ｏｐｅｎ  Ａｒｔｗｏｒｋ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｃｈａｎｇｅ  Ｓｔａｎｄａｒｄ（ＯＡＳＩＳ）または同様のフォーマットなどのデータベースファイルフォーマットで格納されてよい。
【０１１０】
いくつかの実装においてソフトウェアベースのハードウェアモデルと、ＨＤＬおよび他の機能記述言語オブジェクトとは、複数の例の中でも特にレジスタトランスファ言語（ＲＴＬ）ファイルを含み得る。そのようなオブジェクトは、設計ツールがＨＤＬオブジェクト（またはモデル）を受け入れ。説明されるハードウェアの属性についてＨＤＬオブジェクトを解析し、当該オブジェクトから物理回路および／またはチップレイアウトを判断し得るように、機械解析可能であり得る。設計ツールの出力は、物理デバイスを製造するために用いられ得る。例えば、設計ツールは、ＨＤＬオブジェクトから様々なハードウェア要素および／またはファームウェア要素の構成を判断し得る。ＨＤＬオブジェクトは、ＨＤＬオブジェクトにおいてモデル化されたシステムを実現すべく実装されるであろう属性の中でも特に、バス幅、レジスタ（サイズおよびタイプを含む）、メモリブロック、物理リンク経路、ファブリックトポロジなどである。設計ツールは、システムオンチップ（ＳｏＣ）および他のハードウェアデバイスのトポロジ構成およびファブリック構成を判断するためのツール含み得る。いくつかの例において、ＨＤＬオブジェクトは、説明されるハードウェアを製造するための機器の製造に用いられ得るモデルおよび設計ファイルを開発するための基礎として用いられ得る。実際には、ＨＤＬオブジェクト自体が、説明されるハードウェアの製造をもたらすための製造システムソフトウェアへの入力として提供され得る。
【０１１１】
設計の任意の表現において、設計を表すデータは、任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスクなどの磁気ストレージまたは光ストレージは、情報を送信するよう変調される、または別の方法で生成される光波または電波を介して送信されるそのような情報を格納する機械可読媒体であってよい。コードまたは設計を示す、または搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリングまたは送信が実行される限りにおいて、新しいコピーが作成される。従って、通信プロバイダまたはネットワークプロバイダは、有形の機械可読媒体に、少なくとも一時的に、搬送波にエンコードされる情報などの項目を格納して、本開示の実施形態の技術を具現化し得る。
【０１１２】
様々な実施形態において、設計の表現を格納する媒体が、製造システム（例えば、集積回路および／または関連コンポーネントを製造することが可能な半導体製造システム）に提供されてよい。設計の表現は、上述の機能の任意の組み合わせを実行することが可能なデバイスを製造するようシステムに命令してよい。例えば、設計の表現は、どのコンポーネントを製造すべきか、どのようにコンポーネントが共に結合されるべきかに関してシステムに命令し得る。コンポーネントは、デバイス上に配置される、および／または、製造されるデバイスに関する他の好適な仕様に関するべきである。
【０１１３】
従って、機械により読み取られた場合に本明細書において説明される技術を実行するためのロジックを機械に生成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令により、少なくとも１つの実施形態の１または複数の態様が実装されてよい。そのような表現はしばしば「ＩＰコア」と称される。ＩＰコアは、非一時な有形の機械可読媒体に格納されてよく、ロジックまたはプロセッサを製造する製造機械に搭載するために様々な顧客または製造施設に供給されてよい。
【０１１４】
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにおいて実装されてよい。本開示の実施形態は、少なくとも１つのプロセッサと、（揮発性メモリおよび不揮発性メモリおよび／またはストレージ要素を含む）ストレージシステムと、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを備えるプログラマブルシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１１５】
図１２に示されるコード１２３０などのプログラムコードは、本明細書において説明される機能を実行させて出力情報を生成させる入力命令に適用されてよい。出力情報は、１または複数の出力デバイスに既知の方式で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１１６】
プログラムコードは、処理システムと通信するために、高レベルの手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書において説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されていない。様々な実施形態において、当該言語は、コンパイル型言語またはインタプリタ型言語であってよい。
【０１１７】
上記の方法、ハードウェア、ソフトウェア、ファームウェアまたはコードの実施形態は、処理要素により実行可能な（または別の方法でアクセス可能な）機械アクセス可能媒体、機械可読媒体、コンピュータアクセス可能媒体またはコンピュータ可読媒体に格納された命令またはコードを介して実装されてよい。機械アクセス可能媒体／可読媒体は、コンピュータまたは電子システムなどの機械により読み取り可能な形式の情報を提供（すなわち、格納および／または送信）する任意のメカニズムを含む。例えば、機械アクセス可能媒体は、静的ＲＡＭ（ＳＲＡＭ）または動的ＲＡＭ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、ＲＯＭ、磁気ストレージ媒体または光ストレージ媒体、フラッシュメモリデバイス、電気ストレージデバイス、光ストレージデバイス、アコースティックストレージデバイス、それらから情報を受信し得る非一時的媒体とは区別されるべき、一時的（伝搬）信号（例えば、搬送波、赤外線信号、デジタル信号）から受信した情報を保持するための他の形態のストレージデバイス等を含む。
【０１１８】
ロジックをプログラムして本開示の実施形態を実行するために用いられる命令が、ＤＲＡＭ、キャッシュ、フラッシュメモリまたは他のストレージなど、システムにおけるメモリ内に格納されてよい。さらに、命令は、ネットワークを介して、または他のコンピュータ可読媒体を用いて配信され得る。従って、機械可読媒体は、機械（例えば、コンピュータ）により読み取り可能な形式で情報を格納または送信するための任意のメカニズムを含み得るが、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク、リードオンリメモリ（ＣＤ−ＲＯＭ）、および磁気光ディスクリードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気カードもしくは光カード、フラッシュメモリ、または電気、光、音波または他の形式の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号等）を介したインターネットでの情報の送信において用いられる有形の機械可読ストレージに限定されない。従って、コンピュータ可読媒体は、機械（例えば、コンピュータ）により読み取り可能な形式で電子命令または情報を格納または送信するのに好適な任意のタイプの有形の機械可読媒体を含む。
【０１１９】
ロジックは、プロセッサ１００、コア１０４、メモリインタフェース１０６、圧縮エンジン１０８、メモリコントローラ１１０、メモリ１１２、コンプレッサ３０２、デコンプレッサ３０４、バッファメモリ３１４およびＦＰＧＡ７００、本明細書において説明される他のコンポーネントまたはこれらのコンポーネントのいずれかの任意のサブコンポーネントなどの様々なコンポーネントのあらゆる機能を実装するために用いられてよい。「ロジック」とは、ハードウェア、ファームウェア、ソフトウェア、および／または１または複数の機能を実行するための各々の組み合わせを指し得る。例として、ロジックは、マイクロコントローラまたはマイクロプロセッサにより実行されるように適合させられたコードを格納する非一時的媒体に関連付けられたマイクロコントローラまたはマイクロプロセッサなどのハードウェアを含んでよい。従って、一実施形態において、ロジックへの言及は、非一時的媒体で保持されるコードを認識および／または実行するように具体的に構成されるハードウェアを指す。さらに、別の実施形態において、ロジックの使用は、予め定められたオペレーションを実行するためにマイクロコントローラにより実行されるように具体的に適合させられたコードを含む非一時的媒体を指す。推測され得るように、さらに別の実施形態において、（この例における）ロジックという用語は、ハードウェアと非一時的媒体との組み合わせを指し得る。様々な実施形態において、ロジックは、ソフトウェア命令を実行するように動作可能なマイクロプロセッサもしくは他の処理要素、特定用途向け集積回路（ＡＳＩＣ）などのディスクリートロジック、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラムロジックデバイス、命令を含むメモリデバイス、ロジックデバイスの組み合わせ（例えば、プリント回路基板上で見うけられるであろうもの）または他の好適なハードウェアおよび／またはソフトウェアを含んでよい。ロジックは、例えばトランジスタにより実装され得る１または複数のゲートまたは他の回路コンポーネントを含んでよい。いくつかの実施形態において、ロジックは、ソフトウェアとしても完全に具現化されてよい。ソフトウェアは、非一時的コンピュータ可読ストレージ媒体に記録されるソフトウェアパッケージ、コード、命令、命令セットおよび／またはデータとして具現化されてよい。ファームウェアは、メモリデバイスにハードコーディングされた（例えば、不揮発性の）コード、命令または命令セットおよび／またはデータとして具現化されてよい。ロジックの境界は、別個の、通常は異なり、潜在的には重なるものとして示されることが多い。例えば、第１のロジックおよび第２のロジックは、ハードウェア、ソフトウェア、ファームウェアまたはそれらの組み合わせを共有してよいが、いくつかの独立したハードウェア、ソフトウェアまたはファームウェアを潜在的に維持する。
【０１２０】
一実施形態において、「に」または「構成され」という文言の使用は、指定または決定されるタスクを実行するために装置、ハードウェア、ロジックまたは要素を構成、組み合わせ、製造、販売用に提供、輸入および／または設計することを指す。この例において、動作していない装置またはその要素は、指定されたタスクを実行するように設計され、結合され、および／または相互接続されている場合、依然として、上記の指定されたタスクを実行するよう「構成され」ている。純粋に例示的な例として、ロジックゲートは、動作中０または１を提供してよい。だが、イネーブル信号をクロックへ提供するように「構成され」るロジックゲートは、１または０を提供し得る全てのロジックゲートを含むわけではない。代わりに、ロジックゲートは、動作中に１または０の出力がクロックを有効化する何らかの態様で結合されたものである。再びであるが、「構成され」という用語の使用は、オペレーションを必要としないが、代わりに、装置、ハードウェアおよび／または要素の隠れた状態に重点を置いていることに留意されたい。隠れた状態では、装置、ハードウェアおよび／または要素は、装置、ハードウェアおよび／または要素が動作している場合に特定のタスクを実行するように設計されている。
【０１２１】
さらに、一実施形態において、「可能／する」または「動作可能」という文言の使用は、装置、ロジック、ハードウェアおよび／または要素を指定される態様で用いることを可能にするように設計された何らかの装置、ロジック、ハードウェアおよび／または要素を指す。一実施形態において、する、可能または動作可能という文言の使用は、装置、ロジック、ハードウェアおよび／または要素の隠れた状態を指し、その場合、当該装置、当該ロジック、当該ハードウェアおよび／または当該要素は、動作していないが、装置を指定された態様で用いることを可能にするように設計されていることに上記同様留意されたい。
【０１２２】
本明細書において用いられる値は、数、状態、論理状態またはバイナリ論理状態の任意の既知の表現を含む。しばしば、ロジックレベル、ロジック値または論理値の使用は、「１の」および「０の」とも称され、単にバイナリロジック状態を表す。例えば、１は高ロジックレベルを指し、０は低ロジックレベルを指す。一実施形態において、トランジスタセルまたはフラッシュセルなどのストレージセルは、単一の論理値または複数の論理値を保持可能であってよい。しかしながら、コンピュータシステムにおける値の他の表現が用いられている。例えば、１０進数１０は、バイナリ値１０１０および１６進文字Ａとも表され得る。従って、ある値は、コンピュータシステムにおいて保持が可能な情報の任意の表現を含む。
【０１２３】
さらに、状態は、値または値の部分により表され得る。例として、ロジック１などの第１の値はデフォルト状態または初期状態を表し得るが、ロジックゼロなどの第２の値は非デフォルト状態を表し得る。加えて、一実施形態においてリセットおよび設定という用語は、デフォルト値および更新値または状態をそれぞれ指す。例えば、デフォルト値は、高論理値、すなわちリセットを潜在的に含み、一方で、更新値は、低論理値、すなわちセットを潜在的に含む。任意の数の状態を表すために、複数の値の任意の組み合わせが利用され得ることに留意されたい。
【０１２４】
１または複数の実施形態は、
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を（例えば、第１のメモリにより）格納し、
上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを（例えば、圧縮エンジンにより）生成する
装置、プロセッサ、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび／またはソフトウェアベースのロジックまたは方法
を提供し得る。
辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第２のデータ要素の第２のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【０１２５】
少なくとも１つの実施形態において、上記辞書における第２のエントリの値と一致する値を第３のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記データ要素の第３のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。少なくとも１つの実施形態において、上記辞書における第３のエントリの値と一致する値を第４のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第４のデータ要素の第４のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。少なくとも１つの実施形態において、第３のデータ要素が、全ての０ビットをその指数フィールドに含んでおり、全ての０ビットをその仮数フィールドに含んでいる、という判断に応答して、第３のタグタイプが、上記圧縮されたデータブロックに含まれ、上記第３のデータ要素からのデータは、上記圧縮されたデータブロックに含まれない。少なくとも１つの実施形態において、上記辞書は、複数のエントリを含み、上記辞書の各エントリは、それぞれの対応する指数値を格納する。少なくとも１つの実施形態において、上記第２のタグタイプは、上記辞書の複数のエントリ内での上記第１のエントリの位置を示す。少なくとも１つの実施形態において、上記辞書は、２つのエントリを含み、上記第１のデータ要素の上記指数フィールドの最下位ビットによりインデックスを付けられている。少なくとも１つの実施形態において、上記複数のデータ要素は、第１のデータブロックを形成し、上記辞書は、上記第１のデータブロックより前に圧縮される第２のデータブロックのデータ要素に基づいて、上記第１のデータブロックの圧縮より前に更新され、上記辞書は、上記第１のデータブロックの圧縮中は更新されない。少なくとも１つの実施形態において、上記第２のデータブロックは、上記第１のデータブロックの圧縮の直前に（例えば、上記圧縮エンジンにより）圧縮される。少なくとも１つの実施形態において、上記第２のデータ要素の上記圧縮された値は、上記第２のデータ要素の符号値および仮数値である。少なくとも１つの実施形態において、上記圧縮エンジンまたは他のコンポーネントはさらに、１または複数のビットを上記圧縮されたブロックの末尾にパッドして、上記圧縮されたブロックをバイト境界で終了させる。少なくとも１つの実施形態において、プロセッサは、圧縮されたブロックを第２のメモリへの格納用に上記第２のメモリへ送信するメモリコントローラをさらに備える。少なくとも１つの実施形態において、上記圧縮エンジンまたは他のコンポーネントは、上記複数のデータ要素に関連付けられたワークロードタイプに基づいて、上記辞書の複数のエントリを初期化する。少なくとも１つの実施形態において、上記圧縮エンジンまたは他のコンポーネントは、上記複数のデータ要素の圧縮より前に圧縮される１または複数のデータセットにおいて指数が出現する頻度のヒストグラムに基づいて、上記辞書の複数のエントリを初期化する。
【０１２６】
少なくとも１つの実施形態において、
少なくとも１つの機械可読ストレージ媒体は、その上に格納された命令であって、機械により実行された場合、符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納することと、上記複数のデータ要素に基づいて、上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成することとを上記機械にさせる、命令を有し、
辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第２のデータ要素の第２のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【０１２７】
少なくとも１つの実施形態において、上記辞書における第２のエントリの値と一致する値を第３のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第３のデータ要素の第３のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【０１２８】
少なくとも１つの実施形態において、
システムは、
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成するプロセッサと、
上記圧縮されたデータブロックを格納するメモリと、
上記プロセッサを上記メモリに結合する複数のチャネルと
を備え、
辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第２のデータ要素の第２のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【０１２９】
少なくとも１つの実施形態において、
第１のキャッシュラインは、上記複数のデータ要素を含み、
上記プロセッサは、
上記複数のチャネルの単一のチャネルを介して、上記圧縮されたデータブロックを上記メモリへ送信し、
上記複数のチャネルのうちの２つのチャネルを介して、十分な圧縮比を実現しなかった第２のキャッシュラインを送信する
メモリコントローラ
をさらに備える。  少なくとも１つの実施形態において、上記メモリコントローラは、チャネルを選択し、上記チャネル上で、上記第１のキャッシュラインのアドレスに対して実行されるハッシュ演算に基づいて、上記圧縮されたデータブロックを送信する。  少なくとも１つの実施形態において、上記システムは、
上記プロセッサに通信可能に結合されたバッテリ、
上記プロセッサに通信可能に結合されたディスプレイ、または
上記プロセッサに通信可能に結合されたネットワークインタフェース
をさらに備える。
【０１３０】
本明細書の全体にわたって、「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」または「実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」への言及は、当該実施形態に関連して説明される特定の特徴、構造または特性が、本開示の少なくとも１つの実施形態に含まれることを意味する。従って、「一実施形態において」または「実施形態において」という文言が本明細書全体の様々な箇所に現われても、必ずしも全てが同じ実施形態を指すわけではない。さらに、特定の特徴、構造または特性は、１または複数の実施形態において、任意の好適な態様で組み合わされてよい。
【０１３１】
上記明細書において、詳細な説明が、特定の例示的な実施形態を参照して行われた。しかしながら、添付の特許請求の範囲に記載される、本開示のより広い趣旨および範囲から逸脱することなく、様々な修正および変更が本明細書に対して行われ得ることは明らかであろう。従って、本明細書および図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。さらに、実施形態および他の例示的な文言の上記使用は、必ずしも同じ実施形態または同じ例を指すわけではなく、異なる実施形態および別個の実施形態ならびに潜在的に同じ実施形態を指し得る。
［項目１］
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納する第１のメモリと、
回路を有する圧縮エンジンであって、上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成する、圧縮エンジンと
を備え、
辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第２のデータ要素の第２のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
プロセッサ。
［項目２］
上記辞書における第２のエントリの値と一致する値を第３のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記データ要素の第３のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
項目１に記載のプロセッサ。
［項目３］
上記辞書における第３のエントリの値と一致する値を第４のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第４のデータ要素の第４のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
項目２に記載のプロセッサ。
［項目４］
第３のデータ要素が、全ての０ビットをその指数フィールドに含んでおり、全ての０ビットをその仮数フィールドに含んでいる、という判断に応答して、第３のタグタイプが、上記圧縮されたデータブロックに含まれ、上記第３のデータ要素からのデータは、上記圧縮されたデータブロックに含まれない、
項目１に記載のプロセッサ。
［項目５］
上記辞書は、複数のエントリを含み、上記辞書の各エントリは、それぞれの対応する指数値を格納する、
項目１に記載のプロセッサ。
［項目６］
上記第２のタグタイプは、上記辞書の複数のエントリ内での上記第１のエントリの位置を示す、
項目１に記載のプロセッサ。
［項目７］
上記辞書は、２つのエントリを含み、上記第１のデータ要素の上記指数フィールドの最下位ビットによりインデックスを付けられている、
項目１に記載のプロセッサ。
［項目８］
上記複数のデータ要素は、第１のデータブロックを形成し、上記辞書は、上記第１のデータブロックより前に圧縮される第２のデータブロックのデータ要素に基づいて、上記第１のデータブロックの圧縮より前に更新され、上記辞書は、上記第１のデータブロックの圧縮中は更新されない、
項目１に記載のプロセッサ。
［項目９］
上記第２のデータブロックは、上記第１のデータブロックの圧縮の直前に上記圧縮エンジンにより圧縮される、
項目８に記載のプロセッサ。
［項目１０］
上記第２のデータ要素の上記圧縮された値は、上記第２のデータ要素の符号値および仮数値である、
項目１に記載のプロセッサ。
［項目１１］
上記圧縮エンジンはさらに、１または複数のビットを上記圧縮されたブロックの末尾にパッドして、上記圧縮されたブロックをバイト境界で終了させる、
項目１に記載のプロセッサ。
［項目１２］
圧縮されたブロックを第２のメモリへの格納用に上記第２のメモリへ送信するメモリコントローラをさらに備える、項目１に記載のプロセッサ。
［項目１３］
上記圧縮エンジンは、上記複数のデータ要素に関連付けられたワークロードタイプに基づいて、上記辞書の複数のエントリを初期化する、
項目１に記載のプロセッサ。
［項目１４］
上記圧縮エンジンは、上記複数のデータ要素の圧縮より前に圧縮される１または複数のデータセットにおいて指数が出現する頻度のヒストグラムに基づいて、上記辞書の複数のエントリを初期化する、
項目１に記載のプロセッサ。
［項目１５］
少なくとも１つの機械可読ストレージ媒体であって、
その上に格納された命令であって、機械により実行された場合、符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納することと、上記複数のデータ要素に基づいて、上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成することとを上記機械にさせる、命令を有し、
辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第２のデータ要素の第２のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
少なくとも１つの媒体。
［項目１６］
上記辞書における第２のエントリの値と一致する値を第３のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第３のデータ要素の第３のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
項目１５に記載の少なくとも１つの媒体。
［項目１７］
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成するプロセッサと、
上記圧縮されたデータブロックを格納するメモリと、
上記プロセッサを上記メモリに結合する複数のチャネルと
を備え、
辞書における任意のエントリの値と一致しない値を第１のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第１のデータ要素の第１のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第１のエントリの値と一致する値を第２のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第２のデータ要素の第２のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
システム。
［項目１８］
第１のキャッシュラインは、上記複数のデータ要素を含み、
上記プロセッサは、
上記複数のチャネルの単一のチャネルを介して、上記圧縮されたデータブロックを上記メモリへ送信し、
上記複数のチャネルのうちの２つのチャネルを介して、十分な圧縮比を実現しなかった第２のキャッシュラインを送信する
メモリコントローラ
を有する、
項目１７に記載のシステム。
［項目１９］
上記メモリコントローラは、チャネルを選択し、上記チャネル上で、上記第１のキャッシュラインのアドレスに対して実行されるハッシュ演算に基づいて、上記圧縮されたデータブロックを送信する、
項目１８に記載のシステム。
［項目２０］
上記プロセッサに通信可能に結合されたバッテリ、
上記プロセッサに通信可能に結合されたディスプレイ、または
上記プロセッサに通信可能に結合されたネットワークインタフェース
をさらに備える、
項目１７に記載のシステム。
【図１】
2019208203.tif 000003
【図２Ａ】
2019208203.tif 000004
【図２Ｂ】
2019208203.tif 000005
【図３】
2019208203.tif 000006
【図４】
2019208203.tif 000007
【図５】
2019208203.tif 000008
【図６】
2019208203.tif 000009
【図７】
2019208203.tif 000010
【図８Ａ】
2019208203.tif 000011
【図８Ｂ】
2019208203.tif 000012
【図９Ａ】
2019208203.tif 000013
【図９Ｂ】
2019208203.tif 000014
【図１０】
2019208203.tif 000015
【図１１】
2019208203.tif 000016
【図１２】
2019208203.tif 000017
【図１３】
2019208203.tif 000018
【図１４】
2019208203.tif 000019
【図１５】
2019208203.tif 000020
【外国語明細書】
2019208203000001.pdf