IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許7351060浮動小数点データを圧縮するためのシステム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-19
(45)【発行日】2023-09-27
(54)【発明の名称】浮動小数点データを圧縮するためのシステム
(51)【国際特許分類】
   H03M 7/42 20060101AFI20230920BHJP
   G06F 7/483 20060101ALI20230920BHJP
   G06F 15/78 20060101ALI20230920BHJP
   G06F 9/34 20180101ALI20230920BHJP
   G06F 12/04 20060101ALI20230920BHJP
   H03M 7/24 20060101ALI20230920BHJP
【FI】
H03M7/42
G06F7/483
G06F15/78 515
G06F9/34 350A
G06F9/34 320A
G06F12/04 530
H03M7/24
【請求項の数】 25
【外国語出願】
(21)【出願番号】P 2019073829
(22)【出願日】2019-04-08
(65)【公開番号】P2019208203
(43)【公開日】2019-12-05
【審査請求日】2022-04-01
(31)【優先権主張番号】15/977,720
(32)【優先日】2018-05-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ジェイムズ ディー. ギルフォード
(72)【発明者】
【氏名】ヴィノード ゴーパル
(72)【発明者】
【氏名】カーク エス. ヤップ
(72)【発明者】
【氏名】オリビア ケー. ウー
【審査官】北村 智彦
(56)【参考文献】
【文献】特表2014-521273(JP,A)
【文献】特開2014-017629(JP,A)
【文献】国際公開第2016/186564(WO,A1)
【文献】特表2005-535175(JP,A)
【文献】国際公開第2016/186563(WO,A1)
【文献】Angelos Arelakis et al.,HyComp: A hybrid cache compression method for selection of data-type-specific compression methods[online],2015 48th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO),2017年02月16日,pp.38-49,[検索日:2023.03.28],インターネット<URL:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7856586>
(58)【調査した分野】(Int.Cl.,DB名)
H03M 7/42
G06F 7/483
G06F 15/78
G06F 9/34
G06F 12/04
H03M 7/24
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納する第1のメモリと、
回路を有する圧縮エンジンであって、前記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成する、圧縮エンジンと
を備え、
辞書における任意のエントリの値と一致しない値を第1のデータ要素が前記第1のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、前記圧縮されたデータブロックに含まれ、
前記辞書における第1のエントリの値と一致する値を第2のデータ要素が前記第2のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第2のデータ要素の第2のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれ
第3のデータ要素が、全て0のビットを前記第3のデータ要素の指数フィールドに含んでおり、全て0のビットを前記第3のデータ要素の仮数フィールドに含んでいる、という判断に応答して、第3のタグタイプが、前記圧縮されたデータブロックに含まれ、前記第3のデータ要素からのデータは、前記圧縮されたデータブロックに含まれない、
プロセッサ。
【請求項2】
前記辞書における第2のエントリの値と一致する値を第のデータ要素が前記第のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第のデータ要素の第のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項1に記載のプロセッサ。
【請求項3】
前記辞書における第3のエントリの値と一致する値を第のデータ要素が前記第のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第のデータ要素の第のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項2に記載のプロセッサ。
【請求項4】
前記複数のデータ要素のそれぞれについて、
前記圧縮されていない値は、圧縮されていない指数値および圧縮されていない仮数値を含み、
前記圧縮された値は、指数値を含まず圧縮されていない仮数値を含む、
請求項1から3のいずれか一項に記載のプロセッサ。
【請求項5】
前記辞書は、複数のエントリを含み、前記辞書の前記複数のエントリの各々は、それぞれの対応する指数値を格納する、
請求項1から4のいずれか一項に記載のプロセッサ。
【請求項6】
前記第2のタグタイプは、前記辞書の複数のエントリ内での前記第1のエントリの位置を示す、
請求項1から5のいずれか一項に記載のプロセッサ。
【請求項7】
前記辞書は、2つのエントリを含み、前記複数のデータ要素のうちの一のデータ要素についての前記辞書のエントリは、前記一のデータ要素の前記指数フィールドの最下位ビットによりインデックスを付けられ
請求項1から6のいずれか一項に記載のプロセッサ。
【請求項8】
前記複数のデータ要素は、第1のデータブロックを形成し、前記辞書は、前記第1のデータブロックより前に圧縮される第2のデータブロックのデータ要素に基づいて、前記第1のデータブロックの圧縮より前に更新され、前記辞書は、前記第1のデータブロックの前記圧縮中は更新されない、
請求項1から7のいずれか一項に記載のプロセッサ。
【請求項9】
前記第2のデータブロックは、前記第1のデータブロックの前記圧縮の直前に前記圧縮エンジンにより圧縮される、
請求項8に記載のプロセッサ。
【請求項10】
前記第2のデータ要素の前記圧縮された値は、前記第2のデータ要素の符号値および仮数値である、
請求項1から9のいずれか一項に記載のプロセッサ。
【請求項11】
前記圧縮エンジンはさらに、1または複数のビットを前記圧縮されたブロックの末尾にパッドして、前記圧縮されたブロックをバイト境界で終了させる、
請求項1から10のいずれか一項に記載のプロセッサ。
【請求項12】
前記圧縮されたブロックを第2のメモリへの格納用に前記第2のメモリへ送信するメモリコントローラをさらに備える、請求項1から11のいずれか一項に記載のプロセッサ。
【請求項13】
前記圧縮エンジンは、前記複数のデータ要素に関連付けられたワークロードタイプに基づいて、前記辞書の複数のエントリを初期化する、
請求項1から12のいずれか一項に記載のプロセッサ。
【請求項14】
前記圧縮エンジンは、前記複数のデータ要素の圧縮より前に圧縮される1または複数のデータセットにおいて指数が出現する頻度のヒストグラムに基づいて、前記辞書の複数のエントリを初期化する、
請求項1から13のいずれか一項に記載のプロセッサ。
【請求項15】
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納する段階と、
前記複数のデータ要素に基づいて、前記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成する段階と
を備え、
辞書における任意のエントリの値と一致しない値を第1のデータ要素が前記第1のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、前記圧縮されたデータブロックに含まれ、
前記辞書における第1のエントリの値と一致する値を第2のデータ要素が前記第2のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第2のデータ要素の第2のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれ
第3のデータ要素が、全て0のビットを前記第3のデータ要素の指数フィールドに含んでおり、全て0のビットを前記第3のデータ要素の仮数フィールドに含んでいる、という判断に応答して、第3のタグタイプが、前記圧縮されたデータブロックに含まれ、前記第3のデータ要素からのデータは、前記圧縮されたデータブロックに含まれない、
方法。
【請求項16】
前記辞書における第2のエントリの値と一致する値を第のデータ要素が前記第のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第のデータ要素の第のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項15に記載の方法。
【請求項17】
前記辞書における第3のエントリの値と一致する値を第のデータ要素が前記第のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第のデータ要素の第のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれる、
請求項16に記載の方法。
【請求項18】
前記複数のデータ要素のそれぞれについて、
前記圧縮されていない値は、圧縮されていない指数値および圧縮されていない仮数値を含み、
前記圧縮された値は、指数値を含まず圧縮されていない仮数値を含む、
請求項15から17のいずれか一項に記載の方法。
【請求項19】
前記辞書は、複数のエントリを含み、前記辞書の前記複数のエントリの各々は、それぞれの対応する指数値を格納する、
請求項15から18のいずれか一項に記載の方法。
【請求項20】
前記第2のタグタイプは、前記辞書の複数のエントリ内での前記第1のエントリの位置を示す、
請求項15から19のいずれか一項に記載の方法。
【請求項21】
前記辞書は、2つのエントリを含み、前記複数のデータ要素のうちの一のデータ要素についての前記辞書のエントリは、前記一のデータ要素の前記指数フィールドの最下位ビットによりインデックスを付けられ
請求項15から20のいずれか一項に記載の方法。
【請求項22】
前記複数のデータ要素は、第1のデータブロックを形成し、前記辞書は、前記第1のデータブロックより前に圧縮される第2のデータブロックのデータ要素に基づいて、前記第1のデータブロックの圧縮より前に更新され、前記辞書は、前記第1のデータブロックの前記圧縮中は更新されない、
請求項15から21のいずれか一項に記載の方法。
【請求項23】
請求項15から22のいずれか一項に記載の方法を実行する手段を備えるシステム。
【請求項24】
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納することと、
前記複数のデータ要素に基づいて、前記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成することと
を含むオペレーションをプロセッサに実行させるためのコンピュータプログラムであって、
辞書における任意のエントリの値と一致しない値を第1のデータ要素が前記第1のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、前記圧縮されたデータブロックに含まれ、
前記辞書における第1のエントリの値と一致する値を第2のデータ要素が前記第2のデータ要素の指数フィールドに含んでいる、という判断に応答して、前記第2のデータ要素の第2のタグタイプおよび圧縮された値が、前記圧縮されたデータブロックに含まれ
第3のデータ要素が、全て0のビットを前記第3のデータ要素の指数フィールドに含んでおり、全て0のビットを前記第3のデータ要素の仮数フィールドに含んでいる、という判断に応答して、第3のタグタイプが、前記圧縮されたデータブロックに含まれ、前記第3のデータ要素からのデータは、前記圧縮されたデータブロックに含まれない、
コンピュータプログラム。
【請求項25】
前記複数のデータ要素のそれぞれについて、
前記圧縮されていない値は、圧縮されていない指数値および圧縮されていない仮数値を含み、
前記圧縮された値は、指数値を含まず圧縮されていない仮数値を含む、
請求項24に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は概して、コンピュータ開発の分野に関し、より具体的には、データ圧縮に関する。
【背景技術】
【0002】
コンピューティングシステムは、他のコンポーネントの中でも特に、1または複数のプロセッサ、1または複数のメモリおよび/または1または複数のメモリコントローラを含み得る。コンピューティングシステムのロジックは、データ要素を圧縮するように動作可能であり得る。
【図面の簡単な説明】
【0003】
図1】特定の実施形態による浮動小数点データを圧縮するプロセッサのブロック図を示す。
【0004】
図2A】特定の実施形態による半精度浮動小数点フォーマット(FP16)に従ってフォーマットされた複数のデータ要素を含むデータブロックの圧縮を示す。
【0005】
図2B】特定の実施形態による圧縮されたデータブロックの例を示す。
【0006】
図3】特定の実施形態による図1のプロセッサの圧縮エンジンを示す。
【0007】
図4】特定の実施形態による2つのチャネルへの書き込みデータの圧縮および配置を示す。
【0008】
図5】特定の実施形態によるデータを圧縮するためのフローを示す。
【0009】
図6】特定の実施形態による圧縮されたデータを読み取るためのフローを示す。
【0010】
図7】特定の実施形態による例示的なフィールドプログラマブルゲートアレイ(FPGA)を示す。
【0011】
図8A】特定の実施形態による例示的なインオーダパイプラインと、例示的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。
【0012】
図8B】特定の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。
【0013】
図9A】より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。当該コアは、特定の実施形態によるチップにおけるいくつかのロジックブロックのうちの1つ(同じタイプおよび/または異なるタイプの他のコアを潜在的に含む)となるであろうものである。
図9B】より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。当該コアは、特定の実施形態によるチップにおけるいくつかのロジックブロックのうちの1つ(同じタイプおよび/または異なるタイプの他のコアを潜在的に含む)となるであろうものである。
【0014】
図10】特定の実施形態による1つより多くのコアと、統合メモリコントローラと、統合グラフィックスとを有し得るプロセッサのブロック図である。
【0015】
図11】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図12】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図13】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
図14】特定の実施形態による例示的なコンピュータアーキテクチャのブロック図である。
【0016】
図15】特定の実施形態によるソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。
【0017】
様々な図における同様の参照番号および表示は、同様の要素を示す。
【発明を実施するための形態】
【0018】
様々なコンピュータアーキテクチャにおいて、メモリ帯域幅の消費は、性能向上についての課題になっている。メモリ帯域幅に対する制約は、データをメモリに格納する前にデータを圧縮することにより、部分的に緩和され得る。従来の圧縮スキーム(例えば、WKdm)は、データ要素のうちの少数の最下位ビット(LSB)だけが異なる(そして、これらのデータ要素の大部分は小さな局所領域で静的なままである)整数データタイプ、インデックスまたはポインタであるこれらのデータ要素の圧縮にはよく機能し得るが、浮動小数点データの圧縮性をほとんど提供しない。仮数(小数または係数とも称される)用のビットは、データ要素にわたって著しく変動し得る。従って、汎用データ圧縮スキームは、半精度浮動小数点フォーマット(FP16)などの浮動小数点フォーマットで格納されたデータを含み得る、機械学習において用いられるデータセット(例えば、命令、アクティブ化または重みを含む)などの特定のタイプのデータセットの圧縮には有効ではないことがあり得る。専門圧縮スキームが無いと、システムの性能は、高帯域幅メモリ(HBM)を利用するアーキテクチャにおいてでさえ、メモリ帯域幅により制限され得る。
【0019】
本開示の様々な実施形態は、機械学習または他の用途において用いられるタイプの浮動小数点データを圧縮するためのシステムおよび方法だけでなく、メモリ帯域幅の利用性と性能および電力消費とを向上させる効率的なハードウェア設計を提供する。 特定の実施形態は、FP16フォーマット済みデータを圧縮するためのハードウェアを含むが、本明細書において説明される本開示は、仮数ビットおよび指数ビットを有する他の浮動小数点フォーマット(例えば、単精度浮動小数点(FP32)、倍精度浮動小数点(FP64)等)に準拠しているデータを圧縮するよう適合させられ得る。本開示の様々な実施形態は、ゼロ、小さい定数(例えば、+/-1)、指数の小さいクラスタ範囲および/または特定のデータセットの符号ビットを圧縮することにより、浮動小数点データの圧縮性を向上させ得る。特定の実施形態は、ばらつき性が高いことに起因して、仮数ビットの圧縮を省略している。例字的な圧縮スキームが図2Aに示される。
【0020】
様々な実施形態の技術的利点は、圧縮および圧縮解除のための非常に高いスループット(例えば、サイクル毎に32バイト)、小さいデータブロックサイズ(例えば、64バイト)へのオペレーション、低い設計上の複雑性、合理的な読み取りレイテンシの影響(例えば、サイクル毎に4未満)、合理的なエリアへの影響(例えば、200,000個未満のロジックゲート)および合理的な電力フットプリントのうちの1または複数を含み得る。様々な実施形態において、最小レイテンシが読み取り/書き込み経路に加えられ、一方で、典型的なFP16フォーマットの機械学習データセットに約10~50%の有効帯域幅の増加が提供される。様々な実施形態は、ページ(例えば、1KB、2KB、4KB等)などのより大きいブロックとは対照的にメモリへのデータ経路に基づくサイズである小さいブロック(例えば、16バイト、32バイト、64バイト等)に対して演算を行う圧縮エンジン108を提供し得る。本明細書において説明される方法およびシステムは、広い範囲のブロックサイズにわたって向上した性能を提供し得る。
【0021】
図1は、特定の実施形態による浮動小数点データを圧縮するプロセッサ100のブロック図を示す。プロセッサ100は、複数のコア104を含むプロセッサクラスタ102と、メモリインタフェース106と、圧縮エンジン108と、メモリコントローラ110とを含む。プロセッサ100は、メモリ112に結合されている。
【0022】
プロセッサ100は、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、ハンドヘルドプロセッサ、アプリケーションプロセッサ、コプロセッサ、システムオンチップ(SoC)またはコード(すなわち、ソフトウェア命令)を実行する他のデバイスを備え得る。示される実施形態におけるプロセッサ100は、プロセッサクラスタ102に配置された4つの処理要素(コア102A-102D)を含む。プロセッサ100は、非対称的な処理要素または対称的な処理要素を含み得る。しかしながら、プロセッサは、対称的または非対称的であり得る任意の数の処理要素を含み得る。
【0023】
一実施形態において、処理要素とは、ソフトウェアスレッドをサポートする回路を指す。ハードウェア処理要素の例は、スレッドユニット、スレッドスロット、スレッド、プロセス装置、コンテンツ、コンテキストユニット、ロジックプロセッサ、ハードウェアスレッド、コア、および/または実行状態またはアーキテクチャ状態などのプロセッサの状態を保持することが可能な任意の他の要素を含む。言い換えると、一実施形態において、処理要素とは、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、または独立して他のコードなどのコードに関連付けられることが可能な任意のハードウェアを指す。物理プロセッサ(またはプロセッサソケット)とは通常、コアまたはハードウェアスレッドなどの任意の数の他の処理要素を潜在的に含む集積回路を指す。
【0024】
コア104(例えば、104A-104D)とは、独立したアーキテクチャ状態を維持することが可能な集積回路に位置するロジックを指し得る。独立して維持されるアーキテクチャ状態の各々は、少なくともいくつかの専用実行リソースに関連付けられる。ハードウェアスレッドとは、独立したアーキテクチャ状態を維持することが可能な集積回路上に位置する任意のロジックを指し得る。独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。分かるように、特定のリソースが共有され、他のリソースがアーキテクチャ状態専用である場合、ハードウェアスレッドとコアとの間の用語体系の境界は重複する。しかししばしば、コアとハードウェアスレッドとは、オペレーティングシステムにより個々のロジックプロセッサと見られており、オペレーティングシステムは、各ロジックプロセッサ上での動作を個別にスケジューリングできる。
【0025】
様々な実施形態において、処理要素は、1または複数の演算ロジックユニット(ALU)、浮動小数点ユニット(FPU)、キャッシュ、命令パイプライン、割り込み処理ハードウェア、レジスタまたは処理要素の動作を容易にする他のハードウェアも含み得る。
【0026】
コア104または他の処理要素は、メモリ要求(例えば、読み取り、書き込み、読み取り-修正-書き込み(バイト書き込みイネーブル)、コピー、バイトイネーブルとコピー、分散書き込み/コピーまたは他の要求)をメモリインタフェース106へ送信し得る。いくつかの例において、これらの要求は、任意の好適なサイズのデータを参照し得る。例えば、要求は、データの1または複数のキャッシュラインを求め得る。いくつかの実施形態において、要求は、多数のキャッシュラインを含むページ(例えば、1KB、2KB、4KB等のデータ)を求め得る。メモリインタフェース106は、要求をアンロールし、メモリコントローラ110へ送信されるべき複数のより小さい要求を生成し得る。例えば、メモリインタフェース106は、より大きい要求を、単一のキャッシュライン(例えば、64バイト)を各々が参照する一連の読み取り要求または書き込み要求に分割し得る。
【0027】
圧縮エンジン108は、メモリ112に書き込まれるべきデータを圧縮するように動作可能な回路を備える。例えば、プロセッサ100の処理要素は、書き込み要求を発行し得、メモリインタフェース106は、1または複数のデータブロック(例えば、キャッシュラインまたは他のデータグループ)において圧縮エンジン108に書き込まれるべきデータを提供し得る。圧縮エンジン108は、本明細書において説明される実施形態のいずれかに従って書き込まれるべきデータの各ブロックを圧縮し得る。圧縮されたデータブロックは、次に、メモリ112への通信のためにメモリコントローラ110に提供され得る。
【0028】
圧縮エンジン108は、メモリ112から読み取られるデータを圧縮解除するようにも動作可能であり得る。メモリコントローラ110は、メモリ112からデータを読み取り、読み取ったデータを圧縮エンジン108に提供し得る。圧縮エンジン108は、データを圧縮解除し、(例えば、メモリインタフェース106を通じて)読み取りを要求した処理要素に圧縮解除したデータを提供し得る。
【0029】
様々な実施形態において、圧縮エンジン108は、1または複数のコア104と同じチップ、メモリコントローラ110および/またはメモリ112上に位置し得るか、またはコア104、メモリコントローラ110および/またはメモリ112のうちのいずれか1つまたは複数とは異なるチップ上に位置し得る。(コア104と同じチップまたは異なるチップ上に位置し得る)特定の実施形態において、圧縮エンジン108は、メモリコントローラ110、メモリインタフェース106、コア104(またはこれらのうちのいずれかのコンポーネントであり得る)と共に配置され得る。
【0030】
メモリコントローラ110は、1または複数のメモリ112との間のデータのフローを制御する回路を含む。メモリコントローラ110は、メモリ112から読み取るか、メモリ112に書き込むか、またはメモリ112からの他の動作を要求するように動作可能なロジックを含み得る。動作中、メモリコントローラ110は、メモリ112からデータを読み取るべく、もしくはメモリ112にデータを書き込むべく(または他の動作を実行するために)、1または複数のアドレスを含むコマンドを発行し得る。
【0031】
示される実施形態において、メモリコントローラ110は、圧縮フラグ114を格納する。圧縮フラグは、メモリ112への格納の前に圧縮エンジン108によりどのデータが圧縮されたかを示す。例えば、圧縮フラグは、キャッシュラインの特定のアドレスに対応し得、キャッシュラインデータが圧縮されたかまたはされていないかについてのバイナリインジケーションを提供し得る。圧縮フラグは、特定のアドレスに関連付けられたデータがメモリ112に書き込まれる前に圧縮されたかどうかをメモリコントローラ110が判断することを可能にする任意の他の好適な形態を取り得る。特定のアドレスにおけるデータが読み取られるべき場合、メモリコントローラは、圧縮されたデータがどのように読み取られるべきかを判断するために、対応する圧縮フラグにアクセスし得る(例えば、圧縮されていないデータブロックは、圧縮されたデータブロックとは異なるように読み取られ得る)。特定の実施形態において、圧縮フラグは、特定のデータブロックについて少なくとも50%という圧縮比が実現されたかどうかを示すことで、圧縮されていないデータブロックを取得する場合に通常であれば読み取られるであろうデータの半分をメモリコントローラ110が読み取ることを可能にし得る。代替的な実施形態において、圧縮フラグ114は、圧縮エンジン108により格納され得、読み取り要求が受信された場合、圧縮エンジン108は、圧縮フラグに基づいて、要求されたデータが圧縮されたかどうかを判断し得、圧縮フラグに基づいて、適切な要求をメモリコントローラへ送信し得る。例えば、圧縮エンジン108は、通常であれば2つのチャネルにわたる読み取りを必要とするであろう特定のキャッシュラインについての読み取り要求を受信し得(キャッシュラインが圧縮されていない場合)、圧縮されたキャッシュラインを単一のチャネルで読み取るという要求をメモリコントローラへ送り得る。
【0032】
様々な実施形態において、メモリ112は、データを格納する任意の数のメモリアレイを備え得る。メモリ112は、任意の不揮発性メモリおよび/または揮発性メモリを備え得る。メモリ112は、任意の好適なタイプのメモリを備え得ると共に、様々な実施形態において、メモリの特定のスピード、技術またはフォームファクタに限定されない。一例として、メモリ112は、ソケットに挿入され得るメモリモジュール(例えば、デュアルインラインメモリモジュール(DIMM)、シングルインラインメモリモジュール(SIMM)等)であり得る。特定の実施形態において、メモリ112は、DIMMフォームファクタを有する。DIMMは、各側に電気接点(すなわち、ピン)を含む回路基板上に取り付けられた複数のメモリチップを含み得る。様々な例において、メモリ112は、任意の好適な数の288、260、244、240、204、200などのピンまたは他の好適な数のピンを有し得る。様々な実施形態において、メモリ112は、プロセッサ100用のソケットも備える回路基板(例えば、マザーボード)上のDIMMスロットに挿入され得る。特定の実施形態において、メモリ112は、不揮発性メモリを含むメモリチップを備える非揮発性DIMM(NV-DIMM)である。別の実施形態において、メモリ112は、揮発性メモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM))を含むメモリチップを備えるDIMMである。別の実施形態において、メモリ112は、プロセッサ100と同じチップ上に位置し得る。例えば、メモリ112は、ラストレベルキャッシュまたは他のキャッシュであり得る。
【0033】
特定の実施形態において、メモリ112は、互いに独立してデータを書き込むために用いられ得る複数のバンクを含む(各バンクは、メモリ112とメモリコントローラ110との間のそれぞれチャネルに結合されている)。一実施形態において、圧縮されていないブロックを書き込むために用いられるバンクの数は、圧縮されたブロックを書き込むために用いられるバンクの数より多い。例えば、メモリ112は、両方が圧縮されていないブロックをメモリ112に書き込むために用いられる2つのバンクを含み得るが、(50%という圧縮比がそのブロックで実現されたと仮定すると)単一のバンクが、圧縮されたブロックをメモリ112に書き込むために用いられ得る。
【0034】
図2Aは、特定の実施形態による半精度浮動小数点フォーマット(FP16)に従ってフォーマットされた複数のデータ要素を含むデータブロックの圧縮を示す。圧縮されていないデータ要素202の各々は、FP16フォーマットを指定する米国電気電子技術者協会(IEEE)754規格に準拠している。従って、データ要素202は(示される実施形態の左側のMSBから、示される実施形態の右側のLSBへ動くと)、符号ビットと、5ビットの指数と、(値が1である暗黙のリードビットを有する11ビットの仮数を指定し得る)10ビットの仮数とを含む。指数は、15のバイアスを有し、正規の数は、(-1)signbit×2exponent-15×1.significandbits2…と定義される。指数00000および11111は、特別に解釈される。指数が00000であり、仮数が0000000000である場合、表される数は0である(指数が00000である場合に仮数が任意の他の値であるときは、表される数は、法線影とみなされ、(-1)signbit×2-14×0.significandbitsと決定される。)。指数が11111であり、仮数が0000000000である場合、表される数は±無限である(仮数が任意の他の値である場合、表される数は、数(NaN)ではないとみなされる)。
【0035】
データブロック200のデータ要素202(すなわち、202A~202N)は、共に処理されて、圧縮されたブロック204が生成される。特定の実施形態において、データブロック200のサイズ(データブロック200におけるデータ要素「N」の数により定義される)は、バスのサイズ(1または複数のチャネルを含み得る)をメモリ112と一致させ得るか、メモリのバスレートに対応し得るか、または、そうでなければ、ハードウェア実装に基づき得る。例えば、(FP16による)16ビットのデータ要素サイズを用いてサイクル毎に16バイトを実現する(すなわち、圧縮エンジン108は、読み取り用でサイクル毎に圧縮されていない16バイトを受信し、書き込み用でサイクル毎に圧縮解除された16バイトを出力する)ために、Nは8に設定される。別の例として、16ビットのデータ要素サイズを用いてサイクル毎に32バイトを実現するために、Nは16に設定される。様々な実施形態において、データブロック200のサイズ(例えば、64バイト)は、メモリ112のキャッシュラインのサイズと一致するか、またはキャッシュラインのサイズの半分(例えば、32バイト)である。
【0036】
各データブロック200は、他のブロックから独立してエンコードされる(が、以下により詳細に説明されるように、辞書が数ブロックにわたって維持され得、従って、データブロックの圧縮は、1または複数の前のブロックを用いて生成される辞書に依存し得る)。示される実施形態において、圧縮されたブロック204は、タグ206と、圧縮されていないデータ要素208と、辞書のマッチの圧縮されていない部分(すなわち、データ要素のうち、辞書のエントリと一致する指数を有する部分)210と、パッドビット212とを含む。圧縮されたブロック204の各々はタグ206を含み、一方で、圧縮されていないデータブロック200のコンテンツに応じて、圧縮されていないデータ要素208、辞書のマッチの圧縮されていない部分210またはパッドビット212のうちの1または複数は、圧縮されたブロック204から省略され得る。
【0037】
特定のワークロードにおいて、指数値の範囲は、タグを用いた一般的に用いられている指数をエンコードすることにより圧縮が実現され得るように、比較的小さいもの(例えば、-1、0または+1)であり得る。圧縮エンジン108は、ブロック200の各データ要素202を処理し、各データ要素のタグを決定する。最初のタグ値は、データ要素の値が0である(すなわち、指数ビットおよび仮数ビットは全て0である)ことを示す。2番目のタグ値は、データ要素の指数ビットが指数値の辞書におけるエントリと一致しなかったことを示す。特定の実施形態(例えば、FP16データが圧縮されている場合)において、圧縮エンジン108は、5ビットの指数値を含む辞書を利用し得る(が、他の実施形態では、8ビットまたは11ビットなどの任意の好適な長さの指数が辞書に格納され得る)。圧縮エンジンは、処理されているデータ要素202の指数ビットが辞書におけるエントリと一致しているかどうかを判断し得る。指数ビットが辞書におけるいずれのエントリとも一致していない場合には、データ要素を圧縮できなかったことを示すために、データ要素用に前述の2番目のタグ値が用いられる。指数ビットが辞書のエントリと一致している場合、一致した辞書の特定のエントリに対応するタグ値が、データ要素用にタグ206に含まれる。例えば、辞書が2つの5ビットの指数のエントリを格納している場合、3番目のタグ値および4番目のタグ値が、処理されているデータ要素の指数ビットと一致する、辞書の第1のエントリまたは第2のエントリにそれぞれ用いられ得る。従って、いくつかの実施形態において、各タグ値は、上述の4つのタグ値を備えるよう、2ビットの長さであり得る。別の例において、辞書は、6つの5ビットの指数のエントリを含み得、各タグ値は、処理されているデータ要素202の指数値と一致している辞書のそれぞれの対応するエントリに各々が対応するように、上述の最初の2つのタグ値および6つの追加のタグ値を備えるよう、3ビットの長さであり得(すなわち、0値または一致なしに対応する)。
【0038】
特定の実施形態において、タグは、圧縮されたブロック204内で、共に連続して格納され得る。示される実施形態において、タグ206の後には、ブロック200の圧縮されていないデータ要素208(すなわち、値が0ではなく、辞書の値と一致する指数ビットを有していなかったデータ要素)が続く。圧縮されていないデータ要素208の後に続いて、圧縮されたブロック204は、辞書の値と一致する指数ビットを含んだ、データ要素の圧縮されていない部分(すなわち、符号ビットおよび仮数ビット)を含む(そのようなデータ要素の指数ビットは、当該データ要素用にタグ値に圧縮される)。別の実施形態において、圧縮されていない部分210と圧縮されていないデータ要素208との順序は入れ替えられ得る。様々な実施形態において、圧縮されたブロック204は、圧縮されたブロック204のビットの総数が、圧縮解除を単純化するために(例えば、圧縮エンジン108が圧縮されたブロック同士を圧縮解除中により容易に区別できるように、従って、圧縮エンジンがより高い頻度で動作することを可能にするために)8または16の倍数となるように、ビット212でパディングされ得る。
【0039】
図2Bは、特定の実施形態による圧縮されたデータブロック250の例を示す。データブロック250は、圧縮されたデータブロック204の任意の好適な特性を有し得る。示される実施形態において、圧縮されたデータブロック250は、各データ要素のタグ値を含む。データ要素0のタグ値は00であり、データ要素1のタグ値は01であり、データ要素2のタグ値は10であり、データ要素3のタグ値は11であり、データ要素4の6までのタグ値は不図示であり、データ要素7のタグ値は00である。示される実施形態において、タグ値00は、0値に対応し、従って、データ要素0のタグのみが、圧縮されたブロック250に格納される。同様に、データ要素7のタグのみが、圧縮されたブロック250に格納される。示される実施形態において、タグ値01は、辞書におけるマッチを有していないデータ要素に対応し、従って、圧縮されたデータブロック250は、データ要素1の全体(データ要素1の符号、仮数および指数を含む)を含む。示される実施形態において、タグ値10は、辞書における第1のエントリと一致する指数を有するデータ要素に対応し、タグ値11は、辞書における第2のエントリと一致する指数を有するデータ要素に対応する。従って、データ要素2および3については、データ要素2およびデータ要素3の符号ビットおよび仮数ビットが、圧縮されたブロック250に格納される。データ要素4の、対応する6までの圧縮された部分または圧縮されていない部分は、示されない。圧縮されたデータブロック250は、圧縮されたデータブロック250の(例えば、バイト境界に沿った)所望の長さを実現するためのパディングも含む。
【0040】
いくつかの実施形態において、辞書は、符号ビットと指数との組み合わせを各々が含む複数のエントリを含み得る。そのような実施形態において、データ要素の符号ビットおよび指数が辞書のエントリと一致している場合、タグはデータ要素およびタグ値に割り当てられ得、仮数(指数または符号ビットではない)は圧縮されたデータブロックに書き込まれる(なぜなら、タグ値を辞書と組み合わせることにより、符号ビットだけでなく指数もエンコードできるからである)。
【0041】
16ビットの長さを有するデータ要素上で動作する2ビットのタグの実装において、値0を有する各データ要素は2ビットのタグに圧縮されており、辞書のエントリと一致しない各データ要素は圧縮されておらず、16ビット全体がブロック204に書き込まれ、辞書のエントリと一致する各データ要素は部分的に圧縮されている(すなわち、5ビットの指数は2ビットのタグに圧縮されており、符号ビットおよび10ビットの仮数は圧縮されていない)。従って、マッチの数がMであり、非0の値である不一致のデータ要素の数がFである場合、圧縮されたブロックの総ビットカウントは、32+F×16+M×11である。
【0042】
16ビットの長さを有するデータ要素上で動作する3ビットのタグの実装において、値0を有する各データ要素は3ビットのタグに圧縮されており、辞書のエントリと一致しない各データ要素は圧縮されておらず、16ビット全体がブロック204に書き込まれ、辞書のエントリと一致する各データ要素は部分的に圧縮されている(すなわち、5ビットの指数は3ビットのタグに圧縮されており、符号ビットおよび10ビットの仮数は圧縮されていない)。従って、マッチの数がMであり、非0の値である不一致のデータ要素の数がFである場合、圧縮されたブロックの総ビットカウントは、48+F×16+M×11である。
【0043】
このスキームの1つの利点は、当該情報がタグ情報に直接エンコードされるので(すなわち、一致している各タグ値が辞書の別個の位置に対応するので)、一致しているビットのオフセットまたは位置について別個のフィールドが必要ないことである。
【0044】
図3は、特定の実施形態による図1のプロセッサ108の圧縮エンジンを示す。圧縮エンジン108は、コンプレッサ302、デコンプレッサ304およびバッファメモリ314を含む。コンプレッサ302は、エンコーダ306および辞書308Aを含む。エンコーダ306は、ゼロ値と辞書308Aのエントリとのマッチとをチェックし、次に、適宜、タグ206と、圧縮されていないデータ要素208と、辞書のマッチの圧縮されていない部分210と、パッドビット212とで圧縮されたブロック204を生成することにより、ブロック200の各データ要素202のタグを決定することにより圧縮されたブロック204を形成するように動作可能である。バッファメモリ314は、圧縮されていないデータブロック200および/または圧縮されたデータブロック204など、データを格納する任意の好適なメモリを備え得、圧縮および/または圧縮解除中に用いられ得る。
【0045】
辞書308Aは、示される実施形態において、entryおよびentryという2つのエントリを含むが、他の実施形態において、任意の好適な数のエントリ(例えば、タグが3ビットである場合、6つのエントリ)を含み得る。圧縮されているデータのフォーマットがFP16である場合、辞書308Aのエントリは、5ビットの指数値を各々格納し得る(他の浮動小数点フォーマットでは、辞書は、エントリをデータ要素における指数の長さが一致する指数と格納し得る)。圧縮されていないブロック200の各データ要素202について、データ要素の指数ビット(すなわち、ビット14:10)は、それらが辞書のエントリの対応するビットと一致しているかどうかを判断するために検証され得る。特定の実施形態において、圧縮されるデータ要素の指数の1または複数のビットが、辞書にインデックスを付けて辞書のエントリを選択して、データ要素の指数ビットと比較するために用いられる。例えば、エントリが2つである辞書では、データ要素の指数の単一のビットが、辞書にインデックスを付けるために用いられ得る(すなわち、ビット値が0である場合には、entryがデータ要素の指数ビットと比較され、ビット値が1である場合には、entryがデータ要素の指数ビットと比較される)。一実施形態において、データ要素の指数のLSBは、辞書にインデックスを付けて、比較のために辞書のエントリを選択するために用いられる。
【0046】
別の実施形態において、辞書のインデックスを計算するために、データ要素の指数の複数のビットに対してハッシュ演算が実行され得る。任意の好適なハッシュ演算が用いられ得る。一例として、6つのエントリを有する辞書308Aにインデックスを付けるべく、辞書のエントリを判断してデータ要素の指数と比較するために、データ要素の指数の3つのLSBに対してモジュロ6演算が実行され得る。特定の実施形態において、辞書308Aおよび/または308Bは、コンテンツアドレス指定可能メモリ(CAM)に格納され得、並列検索が可能になる。
【0047】
辞書のエントリは、新しいデータ系列の圧縮の開始前に、エントリアップデータ310Aにより任意の好適な値で初期化され得る(データ系列は、複数の圧縮されていないブロック200を含み得る)。いくつかの実施形態において、辞書のエントリは、プロセッサ100の動作中に変わらない静的な値に基づいて初期化される。例として、エントリが2つである辞書を利用する実施形態において、これらのエントリは、新しいデータ系列が圧縮されるたびに、+1および-1に初期化され得る。いくつかの実施形態において、初期化は特定用途であり得る。例えば、第1のタイプのワークロード用に(例えば、機械学習ワークロードにおけるアクティブ化データの格納用に)、辞書308Aのエントリは、値の第1のセットで初期化され得、第2のタイプのワークロード用に(例えば、機械学習ワークロードにおけるシナプスの重みの格納用に)、辞書308Aのエントリは、値の第2のセットで初期化され得る(第2のセットの少なくとも1つの値は、第1のセットの対応する値とは異なる)。従って、これらのエントリは、特定のタイプのワークロード用に処理されるデータ要素の指数と一致する可能性が最も高い値に初期化され得る。特定用途向けの値で辞書のエントリを初期化することにより、特に、圧縮されていないデータブロックが比較的少数(例えば、2、4、8等)であるデータ系列について、圧縮比が向上し得る。なぜなら、そのような場合、辞書308Aには、データ系列の通常生じる指数でプライミングされるための十分な時間がないからである(辞書308Aの更新については、以下でより詳細に説明される)。より大きい辞書を用いる圧縮スキームは、最適な初期化からより小さい辞書より多くの恩恵を受け得る。
【0048】
別の実施形態において、辞書308Aの初期化のために用いられる値は、指数の出現率に基づいて、プロセッサ100の動作中に更新される。例えば、圧縮エンジン108は、複数のデータ系列にわたる様々な指数についてカウントのヒストグラムを更新する性能モニタを含み得る。初期化が実行される場合、最も頻繁に生じる指数が、辞書のエントリを初期化するために用いられ得る。様々な実施形態において、ヒストグラムは、直近の時間間隔にわたって最も頻繁に生じている指数が初期化のために用いられることを保証するために、周期的にリセットされ得る。いくつかの実施形態において、別個のヒストグラムが、複数の異なるタイプの各ワークロード用に維持され得、辞書308Aのエントリは、圧縮されるデータ系列に関連付けられたワークロードに対応するヒストグラムに基づいて初期化され得る。
【0049】
辞書308Aは、データ系列のデータブロック200が圧縮エンジン108により処理されるときに、エントリアップデータ310Aにより更新され得る。様々な従来の圧縮スキームは、辞書の更新が各データ要素の後に起きるように定義されるが、データ要素の全てが並列に圧縮される場合、これにより設計が複雑になる。なぜなら、更新ロジックは、インフライトの全てのレーンにおける全てのデータ要素をチェックして、辞書のエントリの最新の値を見つけ出さなければならないからである。本開示の特定の実施形態において、辞書308Aのエントリは、データ系列の次のブロック200について、現在のブロック200に基づいて更新される(従って、特定のブロック用に用いられる辞書は、前のブロックのコンテンツに基づき得る)。そのような実施形態により、ブロックのデータ要素のうちでの連続した依存が回避され、任意の数のデータ要素(例えば、データ要素の全て)がコンプレッサ302により並列に圧縮されることが可能になる(例えば、各データ要素のタグの決定は、エンコーダ306により同時に実行され得る)。
【0050】
エントリが2つである辞書を含む特定の実施形態において、辞書の2つのエントリの各々は、対応するLSBと共に、最も可能性が低い指数(すなわち、データブロック200内で最も高いインデックスを有するデータ要素202の指数)の値を取り得る。例えば、16個の圧縮されるデータ要素202と、データ要素12(DE12)の10101、DE13の10001、DE14の10100およびDE15の10000という指数ビットとを有するデータブロック200において、辞書の(LSB0に対応する)第1のエントリは10000に、辞書の(LSB1に対応する)第2のエントリは10001に更新されるであろう。従って、一致するLSBを有する直近の指数が、辞書308Aの対応するエントリを更新するために用いられる。他の実施形態において、対応するLSBと一致する指数を有するデータ要素があるデータブロック200における最も低いインデックスが、最も高いインデックスの代わりに更新のために用いられ得る。
【0051】
様々な実施形態において、辞書の更新動作は、0値のデータ要素(すなわち、指数ビットおよび仮数ビットの全てが0であるデータ要素)を無視し、従って、entryは、1または複数のゼロ値のデータ要素に基づいて、「00000」に更新されない(が、全てが0である指数ビットと、0ではない少なくとも1つの仮数ビットとを有する1または複数のデータ要素に基づいて、「00000」に更新され得る)。特定のエントリのための更新基準に適合する指数を有するデータ要素がない場合、そのエントリは不変のままである。例えば、データ要素のいずれもLSBが1である指数を有していない場合、entryは、不変のままである。別の例として、非ゼロ値のデータ要素のいずれもLSBが0である指数を有していない場合、entryは、不変のままである。従って、いくつかのデータブロック200については、辞書308Aの単一のエントリのみが更新され得るか、またはいずれのエントリも更新されない。
【0052】
他の実施形態において、辞書のエントリは、任意の好適な態様で更新され得る。例えば、各指数がブロック200のデータ要素202において生じる回数がカウントされ得、各辞書エントリについて、適切なLSBを有する最も頻度が高い指数がエントリを更新するために用いられ得る(すなわち、entryは、LSB0を有する最も頻度が高い指数で更新され得、entryは、LSB1を有する最も頻度が高い指数で更新され得る)。
【0053】
様々な実施形態において、辞書308Aは、M個のブロック毎に一度更新される。Mは、任意の好適な整数である。これにより、圧縮ハードウェアのより一層の並列化が可能になる。そのような実施形態において、辞書308Aは、上述の更新スキームのいずれかまたは他の好適な更新スキームに従って、M個のブロックのうちの最後のブロック200コンテンツ、M個のブロックのうちの1または複数のコンテンツまたはM個のブロックと追加の前のブロックの全てのコンテンツに基づいて更新され得る。
【0054】
デコンプレッサ304は、メモリ112から読み取られる圧縮されたブロック204を受信し、それらのコンテンツに基づいて、対応する圧縮されていないブロック200を生成するように動作可能である。デコーダ312は、圧縮されたブロック204の各タグを読み取り、当該タグがマッチまたは圧縮されていないデータ要素を示す場合、当該タグおよび関連する情報に基づいて、対応する圧縮されていないデータ要素202を生成し得る(例えば、辞書のマッチのうちの圧縮されていない部分、または圧縮されていないデータ要素)。辞書のマッチを示すタグについて、デコーダ312は、辞書308Bのエントリにアクセスして、データ要素の指数値を取得し得る。エントリアップデータ310Bは、エントリアップデータ310Aと同じ態様で、辞書308Bのエントリを初期化および更新し得る。特定の実施形態において、正確な辞書エントリがデコード中に用いられることを保証すべく、データは、書き込まれたのと同じ順序で読み取られ得る。圧縮されたブロック用に用いるための辞書のエントリを更新するための任意の他の好適な方法が用いられ得る。
【0055】
図4は、特定の実施形態による2つのチャネル402(すなわち、402Aおよび402B)への書き込みデータの圧縮および配置を示す。チャネル402は、メモリコントローラ110をメモリ112に結合し得る。特定の実施形態において、各チャネルは、メモリ112の異なるバンクに結合し得る。様々な実施形態において、キャッシュラインアーキテクチャは、プロセッサ100により用いられ得る。各データブロック200は、キャッシュライン(例えば、32バイトまたは64バイト)を含む。
【0056】
書き込みデータの各データブロック200は、そのアドレスと共にメモリ212(例えば、メモリインタフェース106)へと送信され得る。メモリ212に書き込まれる前に、各データブロック200は、圧縮エンジン108により処理され得る。示される実施形態において、書き込みデータは、アドレスAに関連付けられたデータブロック200Aと、アドレスBに関連付けられたデータブロック200Bと、アドレスCに関連付けられたデータブロック200Cと、アドレスDに関連付けられたデータブロック200Dとを含む。データブロック200は、2つの均等なサイズの部分を有するものとして示される。例えば、データブロック200Aは、第1の部分DATAA0および第2の部分DATAA1を含む。例として、第1の部分は、ブロック200Aのデータ要素202の半分を含み得、一方で、第2の部分は、ブロックのデータ要素202の他方の半分を含み得る。ブロック200Aが圧縮エンジン108により圧縮されていない(または十分な圧縮比が実現されていない)場合、ブロック200Aのデータは、チャネル402Aおよび402Bの両方を用いて送信される。DATAA1は第1のチャネル402Aで送信され、DATAA0は第2のチャネル402Bで送信される(データブロック200Dは同様に処理される)。しかしながら、十分な圧縮比(例えば、50%)が実現されている場合、単一のチャネルが、圧縮されたデータブロックをメモリ112への格納のためにメモリ112へ送信するために用いられ得る。示される例において、データブロック200Bおよびデータブロック200Cの両方は、結果として得られる圧縮されたデータブロックの各々(すなわち、データ'およびデータ')が単一のチャネルで(例えば同時に)送信されるように、十分に圧縮されている。いくつかの実施形態において、圧縮されたブロックは、別の圧縮されたブロックが別のチャネルへ送信されるのと同時にチャネルで送信され得るように(圧縮されていないブロックが、中間サイクルにおいて両方のチャネルを用いて送信され得るように)、1または複数のサイクルだけ保持され得る。
【0057】
様々な実施形態において、どのチャネル402へブロックが送信されるかを判断するために、圧縮されたブロック204のアドレスに対して、ハッシュ処理がメモリコントローラ110により実行され得る。そのような実施形態は、チャネル402のうちの圧縮されたブロック204を均一に分散して、高スループットを促進し得る。ハッシュ処理は、圧縮されたブロックが正確なチャネルで、かつ、メモリ112の正確なバンクから読み取られることを保証するために、圧縮されたブロックの読み取り時に、メモリコントローラ110により繰り返され得る。
【0058】
図5は、特定の実施形態によるデータを圧縮するためのフローを示す。様々な実施形態において、フローは、圧縮エンジン108および/または回路を備える他の好適なロジックにより実行され得る。
【0059】
段階502において、圧縮されていないデータブロック200のデータ要素202がアクセスされる。504において、データ要素がゼロ値であるかどうかに関して判断が行われる。データ要素がゼロ値である場合、段階506において、ゼロ値のデータ要素に対応するタグ値が設定され、段階508において、タグが出力に加えられる。データ要素がゼロ値ではない場合、段階510において、辞書のインデックスが、データ要素の指数値に基づいて決定される。段階512において、そのインデックスに対応する辞書のエントリがデータ要素202の指数と一致しているかどうかに関して判断が行われる。そのエントリが一致している場合、段階514において、辞書のインデックスに対応するタグ値が設定される。段階516において、このタグ値が、データ要素の符号ビットおよび仮数ビットと共に、出力に加えられる。インデックスに対応する辞書のエントリがデータ要素202の指数と一致していない場合、段階518において、マッチがないことを示すタグ値が設定される。段階520において、タグおよびデータ要素202が出力に加えられる。
【0060】
図6は、特定の実施形態による圧縮されたデータを読み取るためのフローを示す。様々な実施形態において、フローは、圧縮エンジン108、メモリコントローラ110、圧縮エンジン108とメモリコントローラ110との組み合わせおよび/または回路を備える他の好適なロジックにより実行され得る。
【0061】
段階602において、キャッシュラインアドレス付きの読み取り要求が、(例えば、L1キャッシュまたはL2キャッシュなどのより低いレベルキャッシュにおける失敗の後に)受信される。段階604において、キャッシュラインが圧縮方式で(例えば、圧縮フラグ114に基づいて)メモリ112に格納されているかどうかに関して判断が行われる。キャッシュラインが圧縮されていない場合、キャッシュラインは、通常の方式でメモリ606から読み取られる。段階604においてキャッシュラインが圧縮されている場合、どのチャネルから圧縮されたキャッシュラインを読み取るかを判断するために、段階608において、キャッシュラインアドレスがハッシュされ得る。段階610において、圧縮されたキャッシュラインが、選択されたチャネルでメモリから読み取られる。段階612において、キャッシュラインが圧縮解除される。
【0062】
図4図6において説明されたフローは、特定の実施形態において生じ得る動作を表すに過ぎない。他の実施形態において、追加の動作が実行され得る。本開示の様々な実施形態は、本明細書において説明される機能を実行するための任意の好適なシグナリングメカニズムを意図している。図4図6に示される動作のいくつかは、適切である場合、繰り返され、組み合わされ、修正され、または省略され得る。加えて、特定の実施形態の範囲から逸脱することなく、動作は、任意の好適な順序で実行され得る。一例として、動作504、510および512のうちの2以上は、いくつかの実施形態において、同時に実行され得る。
【0063】
以下の図は、上述の実施形態を実装するための例示的なアーキテクチャおよびシステムを詳細に示す。例えば、圧縮エンジン108は、以下に示されるプロセッサまたはシステムのいずれかの内部に含まれ得るか、またはそれらのいずれかに結合され得る。いくつかの実施形態において、上述の1または複数のハードウェアコンポーネントおよび/または命令は、以下に詳述されるようにエミュレーションされるか、またはソフトウェアとして実装される。
【0064】
図7は、特定の実施形態によるフィールドプログラマブルゲートアレイ(FGPA)700を示す。特定の実施形態において、圧縮エンジン108は、FPGA700により実装され得る(例えば、圧縮エンジン108の機能は、動作ロジック704の回路により実装され得る)。FPGAは、構成可能なロジックを含む半導体デバイスであり得る。FPGAは、FPGAのロジックがどのように構成されるかを定義する任意の好適なフォーマットを有するデータ構造(例えば、ビットストリーム)を介してプログラムされ得る。FPGAは、FPGAが製造された後に、任意の回数だけ再プログラムされ得る。
【0065】
示される実施形態において、FPGA700は、構成可能なロジック702、動作ロジック704、通信コントローラ706およびメモリコントローラ710を含む。構成可能なロジック702は、1または複数のカーネルを実装するようにプログラムされ得る。カーネルは、FPGAの構成されたロジックを含み得る。構成されたロジックは、1または複数の入力のセットを受信し、構成されたロジックを用いる入力のセットを処理し、かつ、1または複数の出力のセットを提供し得る。カーネルは、任意の好適なタイプの処理を実行し得る。様々な実施形態において、カーネルは、プレフィックスデコーダエンジンを含み得る。いくつかのFPGA700は、一度に単一のカーネルを実行することに制限され得、一方で、他のFPGAは、複数のカーネルを同時に実行することが可能であり得る。構成可能なロジック702は、任意の好適なタイプのロジックゲート(例えば、ANDゲート、XORゲート)などの任意の好適なロジック、またはロジックゲート(例えば、フリップフロップ、ルックアップテーブル、加算器、乗算器、マルチプレクサ、デマルチプレクサ)の組み合わせを含み得る。いくつかの実施形態において、ロジックは(少なくとも部分的に)、FPGAのロジックコンポーネント間のプログラム可能な相互接続を通じて構成される。
【0066】
動作ロジック704は、カーネルを定義するデータ構造にアクセスし、データ構造に基づいて構成可能なロジック702を構成し、かつ、FPGAの他の動作を実行し得る。いくつかの実施形態において、動作ロジック704は、データ構造に基づいて、制御ビットをFPGA700のメモリ(例えば、不揮発性フラッシュメモリまたはSRAMベースのメモリ)に書き込み得る。制御ビットは、(例えば、構成可能なロジックの部分間の特定の相互接続をアクティブ化または非アクティブ化することにより)ロジックを構成するように動作する。動作ロジック704は、任意の好適なタイプのメモリ(例えば、ランダムアクセスメモリ(RAM)、1または複数のトランシーバ、クロッキング回路、FPGA上に位置する1または複数のプロセッサ、1または複数のコントローラまたは他の好適なロジック)を含む1または複数のメモリデバイスなど、(構成可能なロジックまたは固定ロジックに実装され得る)任意の好適なロジックを含み得る。
【0067】
通信コントローラ706は、FPGA700がコンピュータシステムの他のコンポーネント(例えば、圧縮エンジン)と通信すること(例えば、データセットを圧縮するというコマンドを受信すること)を可能にし得る。メモリコントローラ710は、FPGAがコンピュータシステムのメモリからデータ(例えば、オペランドまたは結果)を読み取ること、またはコンピュータシステムのメモリにデータを書き込むことを可能し得る。様々な実施形態において、メモリコントローラ710は、ダイレクトメモリアクセス(DMA)コントローラを備え得る。
【0068】
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックおよび/または科学(スループット)コンピューティング向けの特定用途向けコアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング向けの1または複数の汎用インオーダコアおよび/または汎用コンピューティング向けの1または複数の汎用アウトオブオーダコアを含むCPU)、および2)主にグラフィックおよび/または科学(スループット)向けの1または複数の特定用途向けコアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの特定用途向けロジックまたは特定用途向けコアと称される場合がある)、および4)上記CPU(アプリケーションコアまたはアプリケーションプロセッサと称される場合がある)、上述のコプロセッサおよび追加の機能を同じダイ上に含み得るシステムオンチップを含み得る、異なるコンピュータシステムアーキテクチャをもたらす。例示的なコアアーキテクチャが次に説明され、その後、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【0069】
図8Aは、本開示の実施形態による例示的なインオーダパイプラインと、例示的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。図8Bは、本開示の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図8Aおよび図8Bにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方で、任意選択的な追加の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【0070】
図8Aにおいて、プロセッサパイプライン800は、フェッチステージ802、レングスデコードステージ804、デコードステージ806、アロケーションステージ808、リネーミングステージ810、スケジューリング(ディスパッチまたは発行としても知られる)ステージ812、レジスタ読み取り/メモリ読み取りステージ814、実行ステージ816、ライトバック/メモリ書き込みステージ818、例外処理ステージ822およびコミットステージ824を含む。
【0071】
図8Bは、実行エンジンユニット850に結合されたフロントエンドユニット830を含むプロセッサコア890を示す。フロントエンドユニット830および実行エンジンユニット850の両方は、メモリユニット870に結合されている。コア890は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コアまたはハイブリッドコアタイプもしくは代替的コアタイプであってよい。さらに別の選択肢として、コア890は、例えば、ネットワークコアまたは通信コア、圧縮エンジンおよび/または圧縮解除エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィックコア等、特定用途向けコアであってよい。
【0072】
フロントエンドユニット830は、デコードユニット840に結合された命令フェッチユニット838に結合された命令トランスレーションルックアサイドバッファ(TLB)836に結合された命令キャッシュユニット834に結合された分岐予測ユニット832を含む。デコードユニット840(またはデコーダ)は、命令をデコードし、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成してよく、これらは、元の命令からデコードされるか、別の方法で反映されるか、または元の命令から導出される。デコードユニット840は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例は、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア890は、マイクロコードROM、または特定のマイクロ命令のためのマイクロコードを(例えば、デコードユニット840またはフロントエンドユニット830内の他のものに)格納する他の媒体を含む。デコードユニット840は、実行エンジンユニット850におけるリネーミング/アロケータユニット852に結合される。
【0073】
実行エンジンユニット850は、リタイアメントユニット854および1または複数のスケジューラユニット856のセットに結合されたリネーミング/アロケータユニット852を含む。スケジューラユニット856は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット856は、物理レジスタファイルユニット858に結合される。物理レジスタファイルユニット858の各々は、1または複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行される命令のアドレスである命令ポインタ)等、1または複数の異なるデータタイプを格納するもののうちの異なるいくつかを表す。一実施形態において、物理レジスタファイルユニット858は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアレジスタファイルの使用、フューチャファイル、履歴バッファおよびリタイアレジスタファイルの使用、レジスタマップおよびレジスタのプールの使用等により)実装され得る様々な態様を示すよう、物理レジスタファイルユニット858は、リタイアメントユニット854と重ねられている。リタイアメントユニット854および物理レジスタファイルユニット858は、実行クラスタ860に結合される。実行クラスタ860は、1または複数の実行ユニット862のセットおよび1または複数のメモリアクセスユニット864のセットを含む。実行ユニット862は、様々なオペレーション(例えば、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態は、特定の機能または機能セットに専用の多数の実行ユニットを含んでよく、一方で、他の実施形態は、1つの実行ユニットのみ、または全ての機能を全てが実行する複数の実行ユニットを含んでよい。スケジューラユニット856、物理レジスタファイルユニット858および実行クラスタ860は、複数存在する可能性があるものとして示される。なぜなら、特定の実施形態が、特定のタイプのデータ/オペレーションについて別個のパイプラインを作成するからである(例えば、スカラ整数、パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプラインおよび/またはメモリアクセスパイプラインであり、それらの各々が自身のスケジューラユニット、物理レジスタファイルユニットおよび/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット864を有する特定の実施形態が実装される)。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行で、残りがインオーダであってよいことも理解されるべきである。
【0074】
メモリアクセスユニット864のセットは、レベル2(L2)キャッシュユニット876に結合されたデータキャッシュユニット874に結合されたデータTLBユニット872を含むメモリユニット870に結合される。1つの例示的な実施形態において、メモリアクセスユニット864は、メモリユニット870におけるデータTLBユニット872に各々が結合されたロードユニット、格納アドレスユニットおよび格納データユニットを含んでよい。命令キャッシュユニット834は、メモリユニット870におけるレベル2(L2)キャッシュユニット876にさらに結合される。L2キャッシュユニット876は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【0075】
例として、例示的なレジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン800を実装してよい。1)命令フェッチ838がフェッチステージおよび長さデコードステージ802および804を実行する。2)デコードユニット840がデコードステージ806を実行する。3)リネーミング/アロケータユニット852がアロケーションステージ808およびリネーミングステージ810を実行する。4)スケジューラユニット856がスケジューリングステージ812を実行する。5)物理レジスタファイルユニット858およびメモリユニット870がレジスタ読み取り/メモリ読み取りステージ814を実行し、実行クラスタ860が実行ステージ816を実行する。6)メモリユニット870および物理レジスタファイルユニット858がライトバック/メモリ書き込みステージ818を実行する。7)様々なユニットが例外処理ステージ822に関わり得る。8)リタイアメントユニット854および物理レジスタファイルユニット858がコミットステージ824を実行する。
【0076】
コア890は、本明細書において説明される命令を含む1または複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加されるいくつかの拡張を伴う)、カリフォルニア州サニーベールのMIP TechnologiesのMIP命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意選択的な追加の拡張を伴う))をサポートしてよい。一実施形態において、コア890は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能になる。
【0077】
コアはマルチスレッディング(オペレーションまたはスレッドの2以上の並列なセットを実行すること)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドの各々に対して、単一の物理コアがロジックコアを提供する)、またはそれらの組み合わせ(例えば、タイムスライスフェッチおよびデコードならびにその後のIntel(登録商標)ハイパースレッディング技術におけるものなど、同時マルチスレッディング)を含む様々な態様でサポートしてよいことを理解されたい。
【0078】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの示される実施形態は別個の命令およびデータキャッシュユニット834/874ならびに共有L2キャッシュユニット876も含むが、代替的な実施形態は、命令およびデータの両方のための、例えばレベル1(L1)内部キャッシュなどの単一の内部キャッシュ、または複数のレベルの内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコアおよび/またはプロセッサの外部にあってもよい。
【0079】
図9Aおよび図9Bは、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示す。当該コアは、チップにおけるいくつかのロジックブロックのうちの1つ(同じタイプおよび/または異なるタイプの他のコアを潜在的に含む)となるであろうものである。ロジックブロックは、用途に応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通じて、いくつかの固定機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックと通信する。
【0080】
図9Aは、様々な実施形態による、オンダイ相互接続ネットワーク902への接続およびレベル2(L2)キャッシュ904のローカルサブセットと共に示した単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ900は、パックドデータ命令セット拡張を伴うx86命令セットをサポートする。L1キャッシュ906は、スカラユニットおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能にする。一実施形態において(設計を単純化するために)、スカラユニット908およびベクトルユニット910は、別個のレジスタセット(それぞれ、スカラレジスタ912およびベクトルレジスタ914)を用い、それらの間転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ906からリードバックされるが、代替的な実施形態は、異なるアプローチを用いてよい(例えば、単一のレジスタセットを用いるか、または、データが書き込まれてリードバックされることなく2つのレジスタファイルの間で転送されることを可能にする通信経路を含む)。
【0081】
L2キャッシュ904のローカルサブセットは、(いくつかの実施形態において、プロセッサコア毎に1つの)別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、自身のL2キャッシュ904のローカルサブセットへの直接的なアクセス経路を有する。プロセッサコアにより読み取られたデータは、そのL2キャッシュサブセット904に格納され、他のプロセッサコアが自身のローカルL2キャッシュサブセットにアクセスするのと並行して迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット904に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向性であり、プロセッサコア、L2キャッシュおよび他のロジックブロックなどのエージェントが、チップ内互いに通信することを可能にする。特定の実施形態において、各リングデータ経路は、方向毎に1012ビット幅である。
【0082】
図9Bは、実施形態による図9Aにおけるプロセッサコアの一部の拡大図である。図9Bは、L1データキャッシュ906A(L1キャッシュ906の一部)だけでなく、ベクトルユニット910およびベクトルレジスタ914に関するより詳細な部分を含む。具体的には、ベクトルユニット910は、整数単精度浮動命令および倍精度浮動命令のうちの1または複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU928を参照のこと)である。VPUは、スウィズルユニット920によるレジスタ入力のスウィズル、数値変換ユニット922A~Bによる数値変換、および複製ユニット924によるメモリ入力の複製をサポートする。書き込みマスクレジスタ926は、結果として生じるベクトル書き込みのプレディケートを可能にする。
【0083】
図10は、様々な実施形態による1つより多くのコアと、統合メモリコントローラと、統合グラフィックスとを有し得るプロセッサ1000のブロック図である。図10における実線のボックスは、単一のコア1002Aと、システムエージェント1010と、1または複数のバスコントローラユニット1016のセットとを備えるプロセッサ1000を示す。一方で、破線のボックスによる任意選択的な追加は、複数のコア1002A~Nと、システムエージェントユニット1010における1または複数の統合メモリコントローラユニット1014のセットと、特定用途向けロジック1008とを備える代替的なプロセッサ1000を示す。
【0084】
従って、プロセッサ1000の異なる実装は、1)(1または複数のコアを含み得る)統合グラフィックスおよび/または科学(スループット)ロジックである特定用途向けロジック1008と、1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコアまたはそれら2つの組み合わせ)であるコア1002A~1002Nとを備えるCPU、2)主にグラフィックおよび/または科学(スループット)向けである多数の特定用途向けコアであるコア1002A~1002Nを備えるコプロセッサ、および3)多数の汎用インオーダコアであるコア1002A~1002Nを備えるコプロセッサを含み得る。従って、プロセッサ1000は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジンおよび/または圧縮解除エンジン、グラフィックスプロセッサ、GPGPU(general purpose graphics processing unit)、高スループットの多くの組み込コア(MIC)コプロセッサ(例えば、30またはそれより多くのコアを含む)、埋め込みプロセッサ、またはロジックオペレーションを実行する他の固定ロジックもしくは構成可能なロジックなど、汎用プロセッサ、コプロセッサまたは特別用途向けプロセッサであり得る。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ1000は、例えば、BiCMOS、CMOSまたはNMOSなど、多数の処理技術のいずれかを用いる1または複数の基板の一部であってよく、および/または当該基板上に実装されてもよい。
【0085】
様々な実施形態において、プロセッサは、対称的または非対称的であり得る任意の数の処理要素を含み得る。一実施形態において、処理要素とは、ソフトウェアスレッドをサポートするハードウェアまたはロジックを指す。ハードウェア処理要素の例は、スレッドユニット、スレッドスロット、スレッド、プロセス装置、コンテンツ、コンテキストユニット、ロジックプロセッサ、ハードウェアスレッド、コア、および/または実行状態またはアーキテクチャ状態などのプロセッサの状態を保持することが可能な任意の他の要素を含む。言い換えると、一実施形態において、処理要素とは、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、または独立して他のコードなどのコードに関連付けられることが可能な任意のハードウェアを指す。物理プロセッサ(またはプロセッサソケット)とは通常、コアまたはハードウェアスレッドなどの任意の数の他の処理要素を潜在的に含む集積回路を指す。
【0086】
コアとは、独立したアーキテクチャ状態を維持することが可能な集積回路に位置するロジックを指し得る。独立して維持されるアーキテクチャ状態の各々は、少なくともいくつかの専用実行リソースに関連付けられる。ハードウェアスレッドとは、独立したアーキテクチャ状態を維持することが可能な集積回路上に位置する任意のロジックを指し得る。独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。分かるように、特定のリソースが共有され、他のリソースがアーキテクチャ状態専用である場合、ハードウェアスレッドとコアとの間の用語体系の境界は重複する。しかししばしば、コアとハードウェアスレッドとは、オペレーティングシステムにより個々のロジックプロセッサと見られており、オペレーティングシステムは、各ロジックプロセッサ上での動作を個別にスケジューリングできる。
【0087】
メモリ階層は、コア、セットの、または1または複数の共有キャッシュユニット1006、および統合メモリコントローラユニット1014のセットに結合された外部メモリ(不図示)の内部に、1または複数のレベルのキャッシュを含む。共有キャッシュユニット1006のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)および/またはそれらの組み合わせなど、1または複数の中レベルキャッシュを含んでよい。一実施形態において、リングベース相互接続ユニット1012は特定用途向けロジック(例えば、統合グラフィックスロジック)1008、共有キャッシュユニット1006のセットおよびシステムエージェントユニット1010/統合メモリコントローラユニット1014と相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するためのよく知られている任意の数の技術を用い得る。一実施形態において、1または複数のキャッシュユニット1006とコア1002A~1002Nとの間でコヒーレンシが維持される。
【0088】
いくつかの実施形態において、コア1002A~1002Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント1010は、コア1002A~1002Nを調整し動作させるそれらのコンポーネント含む。システムエージェントユニット1010は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア1002A~1002Nおよび特定用途向けロジック1008の電力状態を管理するために必要なロジックおよびコンポーネントであってよく、またはそれらを含んでよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0089】
コア1002A~1002Nは、アーキテクチャ命令セットの観点から同種または異種であってよい。つまり、コア1002A~1002Nのうちの2以上は、同じ命令セットを実行可能であってよいが、他のコアは、当該命令セットまたは異なる命令セットのサブセットのみを実行可能であってよい。
【0090】
図11図14は、例示的なコンピュータアーキテクチャのブロック図である。当技術分野において知られている、ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイスのための他のシステム設計および構成は、本開示において説明される方法の実行にも好適である。概して、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスは、概ね好適である。
【0091】
図11は、本開示の一実施形態によるシステム1100のブロック図を示す。システム1100は、コントローラハブ1120に結合された1または複数のプロセッサ1110、1115を含んでよい。一実施形態において、コントローラハブ1120は、グラフィックメモリコントローラハブ(GMCH)1190および入力/出力ハブ(IOH)1150(別個のチップまたは同じチップ上にあってよい)を含む。GMCH1190は、メモリと、メモリ1140に結合されたグラフィックコントローラと、コプロセッサ1145とを含む。IOH1150は、入力/出力(I/O)デバイス1160をGMCH1190に結合する。あるいは、メモリおよびグラフィックコントローラの1つまたは両方が(本明細書において説明されるように)プロセッサ内に組み込まれる。メモリ1140およびコプロセッサ1145は、プロセッサ1110に直接結合される。コントローラハブ1120は、IOH1150を含む単一のチップである。
【0092】
追加的なプロセッサ1115の任意選択的な性質が、図11において破線で示される。各プロセッサ1110、1115は、本明細書において説明される処理コアのうちの1または複数を含み得、プロセッサ1000の何らかのバージョンであってよい。
【0093】
メモリ1140は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、他の好適なメモリまたはそれらの任意の組み合わせであってよい。メモリ1140は、コンピュータシステム1100の機能を提供するためにプロセッサ1110、1115により用いられるデータなどの任意の好適なデータを格納してよい。例えば、実行されるプログラムまたはプロセッサ1110、1115によりアクセスされるファイルに関連付けられたデータは、メモリ1140に格納されてよい。様々な実施形態において、メモリ1140は、プロセッサ1110、1115により用いられるかまたは実行されるデータおよび/または命令シーケンスを格納してよい。
【0094】
少なくとも1つの実施形態において、コントローラハブ1120は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath相互接続(QPI)などのポイントツーポイントインタフェース、または同様の接続1195を介して、プロセッサ1110、1115と通信する。
【0095】
一実施形態において、コプロセッサ1145は、例えば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンおよび/または圧縮解除エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサ等の特別用途向けプロセッサである。一実施形態において、コントローラハブ1120は、統合グラフィックスアクセラレータを含んでよい。
【0096】
物理リソース1110と1115との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含む広範な価値基準の観点から様々な差異が存在し得る。
【0097】
一実施形態において、プロセッサ1110は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。それらの命令内にコプロセッサ命令が埋め込まれてもよい。プロセッサ1110は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1145により実行されるべきタイプのものとして認識する。従って、プロセッサ1110は、コプロセッサバスまたは他の相互接続上で、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1145に対して発行する。コプロセッサ1145は、受信したコプロセッサ命令を受け入れて実行する。
【0098】
図12は、本開示の実施形態による第1のより具体的な例示的なシステム1200のブロック図を示す。図12に示されるように、マルチプロセッサシステム1200は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1250を介して結合された第1のプロセッサ1270および第2のプロセッサ1280を含む。プロセッサ1270および1280の各々は、何らかのバージョンのプロセッサ1000であってよい。本開示の一実施形態において、プロセッサ1270および1280はそれぞれプロセッサ1110および1115であり、一方で、コプロセッサ1238はコプロセッサ1145である。別の実施形態において、プロセッサ1270および1280はそれぞれ、プロセッサ1110およびコプロセッサ1145である。
【0099】
プロセッサ1270および1280は、それぞれ、統合メモリコントローラ(IMC)ユニット1272および1282を含むものとして示される。プロセッサ1270は、そのバスコントローラユニットの一部として、ポイントツーポイント(P―P)インタフェース1276および1278も含む。同様に、第2のプロセッサ1280は、P‐Pインタフェース1286および1288を含む。プロセッサ1270、1280は、P―Pインタフェース回路1278、1288を用いたポイントツーポイント(P―P)インタフェース1250を介して、情報を交換してよい。図12に示されるように、IMC1272および1282は、プロセッサをそれぞれの対応するメモリ、すなわち、それぞれの対応するプロセッサにローカルに取り付けられたメインメモリの部分であってよいメモリ1232およびメモリ1234に結合する。
【0100】
プロセッサ1270、1280は各々、ポイントツーポイントインタフェース回路1276、1294、1286、1298を用いた個々のP‐Pインタフェース1252、1254を介して、チップセット1290と情報を交換してよい。チップセット1290は、任意選択で、高性能インタフェース1239を介して、コプロセッサ1238と情報を交換してよい。一実施形態において、コプロセッサ1238は、例えば、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンおよび/または圧縮解除エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサ等の特別用途向けプロセッサである。
【0101】
プロセッサのいずれかまたは両方のローカルキャッシュ情報が、あるプロセッサが低電力モードにされた場合に共有キャッシュに格納され得るように、共有キャッシュ(不図示)が、いずれかのプロセッサまたは両方のプロセッサの外部に含まれてよく、さらに、P―P相互接続を介してプロセッサと接続されてよい。
【0102】
チップセット1290は、インタフェース1296を介して第1のバス1216に結合されてよい。一実施形態において、第1のバス1216は、周辺コンポーネント相互接続(PCI)バス、またはPCIエクスプレスバスもしくは別の第3世代I/O相互接続バスなどのバスであってよいが、本開示の範囲は、それに限定されない。
【0103】
図12に示されるように、様々なI/Oデバイス1214が、第1のバス1216を第2のバス1220に結合するバスブリッジ1218と共に、第1のバス1216に結合されてよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイまたは任意の他のプロセッサなどの1または複数の追加のプロセッサ1215が、第1のバス1216に結合される。一実施形態において、第2のバス1220は、ローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボードおよび/またはマウス1222、通信デバイス1227、および命令/コードおよびデータ1230を含んでよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット1228 を含む様々なデバイスが、第2のバス1220に結合されてよい。さらに、オーディオI/O1224が、第2のバス1220に結合されてよい。他のアーキテクチャが本開示により意図されていることに留意されたい。例えば、図12のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【0104】
図13は、本開示の実施形態による第2のより具体的な例示的なシステム1300のブロック図を示す。図12および13における同様の要素には、同様の参照番号が付され、図12の特定の態様は、図13の他の態様が不明瞭になることを回避すべく、図13から省略されている。
【0105】
図13は、プロセッサ1270、1280が、統合メモリおよびI/Oコントロールロジック(「CL」)1272および1282をそれぞれ含んでよいことを示す。従って、CL1272、1282は、統合メモリコントローラユニットを含み、I/Oコントロールロジックを含む。図13は、CL1272、1282に結合されるものがメモリ1232、1234のみではなく、I/Oデバイス1314もまた制御ロジック1272、1282に結合されることを示す。レガシI/Oデバイス1315は、チップセット1290に結合される。
【0106】
図14は、本開示の実施形態によるSoC1400のブロック図を示す。図10における同様の要素には、同様の参照番号が付される。また、破線のボックスは、より高度なSoCにおける任意選択的な特徴である。図14において、相互接続ユニット1402は、1または複数のコア1002A~1002Nおよび共有キャッシュユニット1006のセットを含むアプリケーションプロセッサ1410と、システムエージェントユニット1010と、バスコントローラユニット1016と、統合メモリコントローラユニット1014と、統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得るセットあるいは1または複数のコプロセッサ1420と、静的ランダムアクセスメモリ(SRAM)ユニット1430と、ダイレクトメモリアクセス(DMA)ユニット1432と、1または複数の外部ディスプレイに結合するためのディスプレイユニット1440とに結合される。一実施形態において、コプロセッサ1420は、例えば、ネットワークプロセッサまたは通信プロセッサ、高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンおよび/または圧縮解除エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサ等の特別用途向けプロセッサを含む。
【0107】
いくつかの場合には、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される1または複数の他の命令に(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)翻訳、モーフィング、エミュレートまたは別の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または一部がプロセッサ内かつ一部がプロセッサ外にあってよい。
【0108】
図15は、本開示の実施形態によるソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。図示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせで実装されてもよい。図15は、少なくとも1つのx86命令セットコア1516を備えるプロセッサによりネイティブに実行され得るx86二進コード1506を生成するためにx86コンパイラ1504を用いてコンパイルされ得る高水準言語1502によるプログラムを示す。少なくとも1つのx86命令セットコア1516を備えるプロセッサは、少なくとも1つのx86命令セットコアを備えるインテル(登録商標)プロセッサと実質的に同じ結果を実現すべく、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを備えるインテル(登録商標)プロセッサ上での動作を目的としたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換的に実行することにより、またはそうでなければ処理することにより、少なくとも1つのx86命令セットコアを備えるインテル(登録商標)プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1504は、x86二進コード1506(例えば、追加のリンク処理を伴って、または伴わないで、少なくとも1つのx86命令セットコア1516を備えるプロセッサ上で実行され得るオブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図15は、少なくとも1つのx86命令セットコア1514を備えていないプロセッサ(例えば、カリフォルニア州サニーベールのMIP TechnologiesのMIP命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを備えるプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード1510を生成するために代替的な命令セットコンパイラ1508を用いてコンパイルされ得る高水準言語1502によるプログラムを示す。命令コンバータ1512は、x86二進コード1506を、x86命令セットコア1514を備えていないプロセッサによりネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1510と同じものにはならない可能性がある。なぜなら、これが可能な命令コンバータを作るのは難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実行し、代替的な命令セットに属する命令で構成されることになる。従って、命令コンバータ1512は、エミュレーション、シミュレーションまたは任意の他の処理を通じて、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスがx86二進コード1506を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【0109】
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表すデータは、多数の態様で設計を表してよい。まず、シミュレーションにおいて有用であるように、ハードウェア記述言語(HDL)または別の機能記述言語を用いてハードウェアが表されてよい。加えて、ロジックおよび/またはトランジスタゲートを用いた回路レベルモデルが、設計処理のいくつかのステージで生成されてよい。さらに、ほとんどの設計が、何らかのステージにおいて、ハードウェアモデルにおける様々なデバイスの物理配置を表すデータレベルに達する。従来の半導体製造技術が用いられる場合、ハードウェアモデルを表すデータは、集積回路を製造するために用いられるマスクの異なるマスク層上にある様々な特徴の存在または不存在を指定するデータであってよい。いくつかの実装において、そのようなデータは、Graphic Data SystemシステムII(GDS II)、Open Artwork System Interchange Standard(OASIS)または同様のフォーマットなどのデータベースファイルフォーマットで格納されてよい。
【0110】
いくつかの実装においてソフトウェアベースのハードウェアモデルと、HDLおよび他の機能記述言語オブジェクトとは、複数の例の中でも特にレジスタトランスファ言語(RTL)ファイルを含み得る。そのようなオブジェクトは、設計ツールがHDLオブジェクト(またはモデル)を受け入れ。説明されるハードウェアの属性についてHDLオブジェクトを解析し、当該オブジェクトから物理回路および/またはチップレイアウトを判断し得るように、機械解析可能であり得る。設計ツールの出力は、物理デバイスを製造するために用いられ得る。例えば、設計ツールは、HDLオブジェクトから様々なハードウェア要素および/またはファームウェア要素の構成を判断し得る。HDLオブジェクトは、HDLオブジェクトにおいてモデル化されたシステムを実現すべく実装されるであろう属性の中でも特に、バス幅、レジスタ(サイズおよびタイプを含む)、メモリブロック、物理リンク経路、ファブリックトポロジなどである。設計ツールは、システムオンチップ(SoC)および他のハードウェアデバイスのトポロジ構成およびファブリック構成を判断するためのツール含み得る。いくつかの例において、HDLオブジェクトは、説明されるハードウェアを製造するための機器の製造に用いられ得るモデルおよび設計ファイルを開発するための基礎として用いられ得る。実際には、HDLオブジェクト自体が、説明されるハードウェアの製造をもたらすための製造システムソフトウェアへの入力として提供され得る。
【0111】
設計の任意の表現において、設計を表すデータは、任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスクなどの磁気ストレージまたは光ストレージは、情報を送信するよう変調される、または別の方法で生成される光波または電波を介して送信されるそのような情報を格納する機械可読媒体であってよい。コードまたは設計を示す、または搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリングまたは送信が実行される限りにおいて、新しいコピーが作成される。従って、通信プロバイダまたはネットワークプロバイダは、有形の機械可読媒体に、少なくとも一時的に、搬送波にエンコードされる情報などの項目を格納して、本開示の実施形態の技術を具現化し得る。
【0112】
様々な実施形態において、設計の表現を格納する媒体が、製造システム(例えば、集積回路および/または関連コンポーネントを製造することが可能な半導体製造システム)に提供されてよい。設計の表現は、上述の機能の任意の組み合わせを実行することが可能なデバイスを製造するようシステムに命令してよい。例えば、設計の表現は、どのコンポーネントを製造すべきか、どのようにコンポーネントが共に結合されるべきかに関してシステムに命令し得る。コンポーネントは、デバイス上に配置される、および/または、製造されるデバイスに関する他の好適な仕様に関するべきである。
【0113】
従って、機械により読み取られた場合に本明細書において説明される技術を実行するためのロジックを機械に生成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令により、少なくとも1つの実施形態の1または複数の態様が実装されてよい。そのような表現はしばしば「IPコア」と称される。IPコアは、非一時な有形の機械可読媒体に格納されてよく、ロジックまたはプロセッサを製造する製造機械に搭載するために様々な顧客または製造施設に供給されてよい。
【0114】
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにおいて実装されてよい。本開示の実施形態は、少なくとも1つのプロセッサと、(揮発性メモリおよび不揮発性メモリおよび/またはストレージ要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0115】
図12に示されるコード1230などのプログラムコードは、本明細書において説明される機能を実行させて出力情報を生成させる入力命令に適用されてよい。出力情報は、1または複数の出力デバイスに既知の方式で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【0116】
プログラムコードは、処理システムと通信するために、高レベルの手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書において説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されていない。様々な実施形態において、当該言語は、コンパイル型言語またはインタプリタ型言語であってよい。
【0117】
上記の方法、ハードウェア、ソフトウェア、ファームウェアまたはコードの実施形態は、処理要素により実行可能な(または別の方法でアクセス可能な)機械アクセス可能媒体、機械可読媒体、コンピュータアクセス可能媒体またはコンピュータ可読媒体に格納された命令またはコードを介して実装されてよい。機械アクセス可能媒体/可読媒体は、コンピュータまたは電子システムなどの機械により読み取り可能な形式の情報を提供(すなわち、格納および/または送信)する任意のメカニズムを含む。例えば、機械アクセス可能媒体は、静的RAM(SRAM)または動的RAM(DRAM)などのランダムアクセスメモリ(RAM)、ROM、磁気ストレージ媒体または光ストレージ媒体、フラッシュメモリデバイス、電気ストレージデバイス、光ストレージデバイス、アコースティックストレージデバイス、それらから情報を受信し得る非一時的媒体とは区別されるべき、一時的(伝搬)信号(例えば、搬送波、赤外線信号、デジタル信号)から受信した情報を保持するための他の形態のストレージデバイス等を含む。
【0118】
ロジックをプログラムして本開示の実施形態を実行するために用いられる命令が、DRAM、キャッシュ、フラッシュメモリまたは他のストレージなど、システムにおけるメモリ内に格納されてよい。さらに、命令は、ネットワークを介して、または他のコンピュータ可読媒体を用いて配信され得る。従って、機械可読媒体は、機械(例えば、コンピュータ)により読み取り可能な形式で情報を格納または送信するための任意のメカニズムを含み得るが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリメモリ(CD-ROM)、および磁気光ディスクリードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気カードもしくは光カード、フラッシュメモリ、または電気、光、音波または他の形式の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネットでの情報の送信において用いられる有形の機械可読ストレージに限定されない。従って、コンピュータ可読媒体は、機械(例えば、コンピュータ)により読み取り可能な形式で電子命令または情報を格納または送信するのに好適な任意のタイプの有形の機械可読媒体を含む。
【0119】
ロジックは、プロセッサ100、コア104、メモリインタフェース106、圧縮エンジン108、メモリコントローラ110、メモリ112、コンプレッサ302、デコンプレッサ304、バッファメモリ314およびFPGA700、本明細書において説明される他のコンポーネントまたはこれらのコンポーネントのいずれかの任意のサブコンポーネントなどの様々なコンポーネントのあらゆる機能を実装するために用いられてよい。「ロジック」とは、ハードウェア、ファームウェア、ソフトウェア、および/または1または複数の機能を実行するための各々の組み合わせを指し得る。例として、ロジックは、マイクロコントローラまたはマイクロプロセッサにより実行されるように適合させられたコードを格納する非一時的媒体に関連付けられたマイクロコントローラまたはマイクロプロセッサなどのハードウェアを含んでよい。従って、一実施形態において、ロジックへの言及は、非一時的媒体で保持されるコードを認識および/または実行するように具体的に構成されるハードウェアを指す。さらに、別の実施形態において、ロジックの使用は、予め定められたオペレーションを実行するためにマイクロコントローラにより実行されるように具体的に適合させられたコードを含む非一時的媒体を指す。推測され得るように、さらに別の実施形態において、(この例における)ロジックという用語は、ハードウェアと非一時的媒体との組み合わせを指し得る。様々な実施形態において、ロジックは、ソフトウェア命令を実行するように動作可能なマイクロプロセッサもしくは他の処理要素、特定用途向け集積回路(ASIC)などのディスクリートロジック、フィールドプログラマブルゲートアレイ(FPGA)などのプログラムロジックデバイス、命令を含むメモリデバイス、ロジックデバイスの組み合わせ(例えば、プリント回路基板上で見うけられるであろうもの)または他の好適なハードウェアおよび/またはソフトウェアを含んでよい。ロジックは、例えばトランジスタにより実装され得る1または複数のゲートまたは他の回路コンポーネントを含んでよい。いくつかの実施形態において、ロジックは、ソフトウェアとしても完全に具現化されてよい。ソフトウェアは、非一時的コンピュータ可読ストレージ媒体に記録されるソフトウェアパッケージ、コード、命令、命令セットおよび/またはデータとして具現化されてよい。ファームウェアは、メモリデバイスにハードコーディングされた(例えば、不揮発性の)コード、命令または命令セットおよび/またはデータとして具現化されてよい。ロジックの境界は、別個の、通常は異なり、潜在的には重なるものとして示されることが多い。例えば、第1のロジックおよび第2のロジックは、ハードウェア、ソフトウェア、ファームウェアまたはそれらの組み合わせを共有してよいが、いくつかの独立したハードウェア、ソフトウェアまたはファームウェアを潜在的に維持する。
【0120】
一実施形態において、「に」または「構成され」という文言の使用は、指定または決定されるタスクを実行するために装置、ハードウェア、ロジックまたは要素を構成、組み合わせ、製造、販売用に提供、輸入および/または設計することを指す。この例において、動作していない装置またはその要素は、指定されたタスクを実行するように設計され、結合され、および/または相互接続されている場合、依然として、上記の指定されたタスクを実行するよう「構成され」ている。純粋に例示的な例として、ロジックゲートは、動作中0または1を提供してよい。だが、イネーブル信号をクロックへ提供するように「構成され」るロジックゲートは、1または0を提供し得る全てのロジックゲートを含むわけではない。代わりに、ロジックゲートは、動作中に1または0の出力がクロックを有効化する何らかの態様で結合されたものである。再びであるが、「構成され」という用語の使用は、オペレーションを必要としないが、代わりに、装置、ハードウェアおよび/または要素の隠れた状態に重点を置いていることに留意されたい。隠れた状態では、装置、ハードウェアおよび/または要素は、装置、ハードウェアおよび/または要素が動作している場合に特定のタスクを実行するように設計されている。
【0121】
さらに、一実施形態において、「可能/する」または「動作可能」という文言の使用は、装置、ロジック、ハードウェアおよび/または要素を指定される態様で用いることを可能にするように設計された何らかの装置、ロジック、ハードウェアおよび/または要素を指す。一実施形態において、する、可能または動作可能という文言の使用は、装置、ロジック、ハードウェアおよび/または要素の隠れた状態を指し、その場合、当該装置、当該ロジック、当該ハードウェアおよび/または当該要素は、動作していないが、装置を指定された態様で用いることを可能にするように設計されていることに上記同様留意されたい。
【0122】
本明細書において用いられる値は、数、状態、論理状態またはバイナリ論理状態の任意の既知の表現を含む。しばしば、ロジックレベル、ロジック値または論理値の使用は、「1の」および「0の」とも称され、単にバイナリロジック状態を表す。例えば、1は高ロジックレベルを指し、0は低ロジックレベルを指す。一実施形態において、トランジスタセルまたはフラッシュセルなどのストレージセルは、単一の論理値または複数の論理値を保持可能であってよい。しかしながら、コンピュータシステムにおける値の他の表現が用いられている。例えば、10進数10は、バイナリ値1010および16進文字Aとも表され得る。従って、ある値は、コンピュータシステムにおいて保持が可能な情報の任意の表現を含む。
【0123】
さらに、状態は、値または値の部分により表され得る。例として、ロジック1などの第1の値はデフォルト状態または初期状態を表し得るが、ロジックゼロなどの第2の値は非デフォルト状態を表し得る。加えて、一実施形態においてリセットおよび設定という用語は、デフォルト値および更新値または状態をそれぞれ指す。例えば、デフォルト値は、高論理値、すなわちリセットを潜在的に含み、一方で、更新値は、低論理値、すなわちセットを潜在的に含む。任意の数の状態を表すために、複数の値の任意の組み合わせが利用され得ることに留意されたい。
【0124】
1または複数の実施形態は、
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を(例えば、第1のメモリにより)格納し、
上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを(例えば、圧縮エンジンにより)生成する
装置、プロセッサ、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジックまたは方法
を提供し得る。
辞書における任意のエントリの値と一致しない値を第1のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第1のエントリの値と一致する値を第2のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第2のデータ要素の第2のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【0125】
少なくとも1つの実施形態において、上記辞書における第2のエントリの値と一致する値を第3のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記データ要素の第3のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。少なくとも1つの実施形態において、上記辞書における第3のエントリの値と一致する値を第4のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第4のデータ要素の第4のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。少なくとも1つの実施形態において、第3のデータ要素が、全ての0ビットをその指数フィールドに含んでおり、全ての0ビットをその仮数フィールドに含んでいる、という判断に応答して、第3のタグタイプが、上記圧縮されたデータブロックに含まれ、上記第3のデータ要素からのデータは、上記圧縮されたデータブロックに含まれない。少なくとも1つの実施形態において、上記辞書は、複数のエントリを含み、上記辞書の各エントリは、それぞれの対応する指数値を格納する。少なくとも1つの実施形態において、上記第2のタグタイプは、上記辞書の複数のエントリ内での上記第1のエントリの位置を示す。少なくとも1つの実施形態において、上記辞書は、2つのエントリを含み、上記第1のデータ要素の上記指数フィールドの最下位ビットによりインデックスを付けられている。少なくとも1つの実施形態において、上記複数のデータ要素は、第1のデータブロックを形成し、上記辞書は、上記第1のデータブロックより前に圧縮される第2のデータブロックのデータ要素に基づいて、上記第1のデータブロックの圧縮より前に更新され、上記辞書は、上記第1のデータブロックの圧縮中は更新されない。少なくとも1つの実施形態において、上記第2のデータブロックは、上記第1のデータブロックの圧縮の直前に(例えば、上記圧縮エンジンにより)圧縮される。少なくとも1つの実施形態において、上記第2のデータ要素の上記圧縮された値は、上記第2のデータ要素の符号値および仮数値である。少なくとも1つの実施形態において、上記圧縮エンジンまたは他のコンポーネントはさらに、1または複数のビットを上記圧縮されたブロックの末尾にパッドして、上記圧縮されたブロックをバイト境界で終了させる。少なくとも1つの実施形態において、プロセッサは、圧縮されたブロックを第2のメモリへの格納用に上記第2のメモリへ送信するメモリコントローラをさらに備える。少なくとも1つの実施形態において、上記圧縮エンジンまたは他のコンポーネントは、上記複数のデータ要素に関連付けられたワークロードタイプに基づいて、上記辞書の複数のエントリを初期化する。少なくとも1つの実施形態において、上記圧縮エンジンまたは他のコンポーネントは、上記複数のデータ要素の圧縮より前に圧縮される1または複数のデータセットにおいて指数が出現する頻度のヒストグラムに基づいて、上記辞書の複数のエントリを初期化する。
【0126】
少なくとも1つの実施形態において、
少なくとも1つの機械可読ストレージ媒体は、その上に格納された命令であって、機械により実行された場合、符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納することと、上記複数のデータ要素に基づいて、上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成することとを上記機械にさせる、命令を有し、
辞書における任意のエントリの値と一致しない値を第1のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第1のエントリの値と一致する値を第2のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第2のデータ要素の第2のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【0127】
少なくとも1つの実施形態において、上記辞書における第2のエントリの値と一致する値を第3のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第3のデータ要素の第3のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【0128】
少なくとも1つの実施形態において、
システムは、
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成するプロセッサと、
上記圧縮されたデータブロックを格納するメモリと、
上記プロセッサを上記メモリに結合する複数のチャネルと
を備え、
辞書における任意のエントリの値と一致しない値を第1のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第1のエントリの値と一致する値を第2のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第2のデータ要素の第2のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる。
【0129】
少なくとも1つの実施形態において、
第1のキャッシュラインは、上記複数のデータ要素を含み、
上記プロセッサは、
上記複数のチャネルの単一のチャネルを介して、上記圧縮されたデータブロックを上記メモリへ送信し、
上記複数のチャネルのうちの2つのチャネルを介して、十分な圧縮比を実現しなかった第2のキャッシュラインを送信する
メモリコントローラ
をさらに備える。 少なくとも1つの実施形態において、上記メモリコントローラは、チャネルを選択し、上記チャネル上で、上記第1のキャッシュラインのアドレスに対して実行されるハッシュ演算に基づいて、上記圧縮されたデータブロックを送信する。 少なくとも1つの実施形態において、上記システムは、
上記プロセッサに通信可能に結合されたバッテリ、
上記プロセッサに通信可能に結合されたディスプレイ、または
上記プロセッサに通信可能に結合されたネットワークインタフェース
をさらに備える。
【0130】
本明細書の全体にわたって、「一実施形態(one embodiment)」または「実施形態(an embodiment)」への言及は、当該実施形態に関連して説明される特定の特徴、構造または特性が、本開示の少なくとも1つの実施形態に含まれることを意味する。従って、「一実施形態において」または「実施形態において」という文言が本明細書全体の様々な箇所に現われても、必ずしも全てが同じ実施形態を指すわけではない。さらに、特定の特徴、構造または特性は、1または複数の実施形態において、任意の好適な態様で組み合わされてよい。
【0131】
上記明細書において、詳細な説明が、特定の例示的な実施形態を参照して行われた。しかしながら、添付の特許請求の範囲に記載される、本開示のより広い趣旨および範囲から逸脱することなく、様々な修正および変更が本明細書に対して行われ得ることは明らかであろう。従って、本明細書および図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。さらに、実施形態および他の例示的な文言の上記使用は、必ずしも同じ実施形態または同じ例を指すわけではなく、異なる実施形態および別個の実施形態ならびに潜在的に同じ実施形態を指し得る。
[項目1]
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納する第1のメモリと、
回路を有する圧縮エンジンであって、上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成する、圧縮エンジンと
を備え、
辞書における任意のエントリの値と一致しない値を第1のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第1のエントリの値と一致する値を第2のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第2のデータ要素の第2のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
プロセッサ。
[項目2]
上記辞書における第2のエントリの値と一致する値を第3のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記データ要素の第3のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
項目1に記載のプロセッサ。
[項目3]
上記辞書における第3のエントリの値と一致する値を第4のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第4のデータ要素の第4のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
項目2に記載のプロセッサ。
[項目4]
第3のデータ要素が、全ての0ビットをその指数フィールドに含んでおり、全ての0ビットをその仮数フィールドに含んでいる、という判断に応答して、第3のタグタイプが、上記圧縮されたデータブロックに含まれ、上記第3のデータ要素からのデータは、上記圧縮されたデータブロックに含まれない、
項目1に記載のプロセッサ。
[項目5]
上記辞書は、複数のエントリを含み、上記辞書の各エントリは、それぞれの対応する指数値を格納する、
項目1に記載のプロセッサ。
[項目6]
上記第2のタグタイプは、上記辞書の複数のエントリ内での上記第1のエントリの位置を示す、
項目1に記載のプロセッサ。
[項目7]
上記辞書は、2つのエントリを含み、上記第1のデータ要素の上記指数フィールドの最下位ビットによりインデックスを付けられている、
項目1に記載のプロセッサ。
[項目8]
上記複数のデータ要素は、第1のデータブロックを形成し、上記辞書は、上記第1のデータブロックより前に圧縮される第2のデータブロックのデータ要素に基づいて、上記第1のデータブロックの圧縮より前に更新され、上記辞書は、上記第1のデータブロックの圧縮中は更新されない、
項目1に記載のプロセッサ。
[項目9]
上記第2のデータブロックは、上記第1のデータブロックの圧縮の直前に上記圧縮エンジンにより圧縮される、
項目8に記載のプロセッサ。
[項目10]
上記第2のデータ要素の上記圧縮された値は、上記第2のデータ要素の符号値および仮数値である、
項目1に記載のプロセッサ。
[項目11]
上記圧縮エンジンはさらに、1または複数のビットを上記圧縮されたブロックの末尾にパッドして、上記圧縮されたブロックをバイト境界で終了させる、
項目1に記載のプロセッサ。
[項目12]
圧縮されたブロックを第2のメモリへの格納用に上記第2のメモリへ送信するメモリコントローラをさらに備える、項目1に記載のプロセッサ。
[項目13]
上記圧縮エンジンは、上記複数のデータ要素に関連付けられたワークロードタイプに基づいて、上記辞書の複数のエントリを初期化する、
項目1に記載のプロセッサ。
[項目14]
上記圧縮エンジンは、上記複数のデータ要素の圧縮より前に圧縮される1または複数のデータセットにおいて指数が出現する頻度のヒストグラムに基づいて、上記辞書の複数のエントリを初期化する、
項目1に記載のプロセッサ。
[項目15]
少なくとも1つの機械可読ストレージ媒体であって、
その上に格納された命令であって、機械により実行された場合、符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素を格納することと、上記複数のデータ要素に基づいて、上記複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成することとを上記機械にさせる、命令を有し、
辞書における任意のエントリの値と一致しない値を第1のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第1のエントリの値と一致する値を第2のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第2のデータ要素の第2のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
少なくとも1つの媒体。
[項目16]
上記辞書における第2のエントリの値と一致する値を第3のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第3のデータ要素の第3のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
項目15に記載の少なくとも1つの媒体。
[項目17]
符号フィールドと、指数フィールドと、仮数フィールドとを含む浮動小数点フォーマットに従ってエンコードされる複数のデータ要素のデータ要素毎にタグタイプを含む圧縮されたデータブロックを生成するプロセッサと、
上記圧縮されたデータブロックを格納するメモリと、
上記プロセッサを上記メモリに結合する複数のチャネルと
を備え、
辞書における任意のエントリの値と一致しない値を第1のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第1のデータ要素の第1のタグタイプおよび圧縮されていない値が、上記圧縮されたデータブロックに含まれ、
上記辞書における第1のエントリの値と一致する値を第2のデータ要素がその指数フィールドに含んでいる、という判断に応答して、上記第2のデータ要素の第2のタグタイプおよび圧縮された値が、上記圧縮されたデータブロックに含まれる、
システム。
[項目18]
第1のキャッシュラインは、上記複数のデータ要素を含み、
上記プロセッサは、
上記複数のチャネルの単一のチャネルを介して、上記圧縮されたデータブロックを上記メモリへ送信し、
上記複数のチャネルのうちの2つのチャネルを介して、十分な圧縮比を実現しなかった第2のキャッシュラインを送信する
メモリコントローラ
を有する、
項目17に記載のシステム。
[項目19]
上記メモリコントローラは、チャネルを選択し、上記チャネル上で、上記第1のキャッシュラインのアドレスに対して実行されるハッシュ演算に基づいて、上記圧縮されたデータブロックを送信する、
項目18に記載のシステム。
[項目20]
上記プロセッサに通信可能に結合されたバッテリ、
上記プロセッサに通信可能に結合されたディスプレイ、または
上記プロセッサに通信可能に結合されたネットワークインタフェース
をさらに備える、
項目17に記載のシステム。
図1
図2A
図2B
図3
図4
図5
図6
図7
図8A
図8B
図9A
図9B
図10
図11
図12
図13
図14
図15