特許第5945291号(P5945291)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

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

特許5945291デフレート圧縮のために高速で高圧縮のLZ77トークン化及びハフマンエンコーディングを行う並列装置
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5945291
(24)【登録日】2016年6月3日
(45)【発行日】2016年7月5日
(54)【発明の名称】デフレート圧縮のために高速で高圧縮のLZ77トークン化及びハフマンエンコーディングを行う並列装置
(51)【国際特許分類】
   G06F 9/38 20060101AFI20160621BHJP
   G06F 5/00 20060101ALI20160621BHJP
   H03M 7/40 20060101ALI20160621BHJP
   H03M 7/42 20060101ALI20160621BHJP
【FI】
   G06F9/38 370C
   G06F5/00
   H03M7/40
   H03M7/42
【請求項の数】17
【外国語出願】
【全頁数】26
(21)【出願番号】特願2014-43707(P2014-43707)
(22)【出願日】2014年3月6日
(65)【公開番号】特開2014-182810(P2014-182810A)
(43)【公開日】2014年9月29日
【審査請求日】2014年3月6日
(31)【優先権主張番号】61/800,263
(32)【優先日】2013年3月15日
(33)【優先権主張国】US
(31)【優先権主張番号】13/853,286
(32)【優先日】2013年3月29日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ミルン、アンドリュー
(72)【発明者】
【氏名】ビッセサー、セイレシュ
(72)【発明者】
【氏名】メレル、クイン ダブリュー.
(72)【発明者】
【氏名】モサー、ロクプラヴィーン ビー.
【審査官】 三坂 敏夫
(56)【参考文献】
【文献】 国際公開第2012/090584(WO,A1)
【文献】 特開平07−111460(JP,A)
【文献】 特開平08−069370(JP,A)
【文献】 特開平07−297728(JP,A)
【文献】 特開2010−268146(JP,A)
【文献】 特開2005−175940(JP,A)
【文献】 特表2005−521938(JP,A)
【文献】 田中 望 他,「LZH法による並列データ圧縮技報」,情報処理学会第52回(平成8年前期)全国大会),日本,情報処理学会,1997年 3月 8日,6-133頁〜6-134頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 5/00
H03M 7/40
H03M 7/42
(57)【特許請求の範囲】
【請求項1】
入力データストリーム内のターゲットデータを探索するために、1つ又は複数の履歴バッファー内の複数のロケーションを特定するハッシュ回路と、
前記1つ又は複数の履歴バッファーにおいて、複数のシーケンシャルターゲットデータの前記ターゲットデータのパイプライン化された複数の探索を並列に行う複数の照合エンジンと、
記パイプライン化された複数の探索からの結果を選択して前記入力データストリームを圧縮する一致選択器と、
を備え
前記ハッシュ回路は、前記ターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを取得し、前記複数のエントリーは前記1つ又は複数の履歴バッファーの前記複数のロケーションへの複数の参照を含み、前記ハッシュ回路は前記複数の参照を出力して、前記複数のロケーションが並列に読み取られることを可能にする、装置。
【請求項2】
前記ハッシュ回路、前記照合エンジン及び前記一致選択器はプロセッサの実行回路内に配置される、請求項1に記載の装置。
【請求項3】
前記ハッシュ回路、前記照合エンジン及び前記一致選択器はプロセッサに結合されたコプロセッサ内に配置される、請求項1に記載の装置。
【請求項4】
前記パイプライン化された複数の探索ら組み立てられた結果をトークンのシーケンス及びヘッダーとして受信する複数のエンコーダーを更に備え、
前記ヘッダーは前記シーケンス内の前記トークンのそれぞれのオフセットに関する情報を提供し、前記エンコーダーは前記トークンを並列にエンコードする、請求項1から3のいずれか1項に記載の装置。
【請求項5】
前記一致選択器は、前記パイプライン化された複数の探索から最も長い一致を選択する、請求項1から4のいずれか1項に記載の装置。
【請求項6】
並列デフレート命令に応じて、前記パイプライン化された複数の探索並列に行う実行回路を更に備える、請求項1からのいずれか1項に記載の装置。
【請求項7】
入力データストリーム内のターゲットデータを探索するために、1つ又は複数の履歴バッファー内の複数のロケーションを特定する段階と、
前記1つ又は複数の履歴バッファーにおいて、複数のシーケンシャルターゲットデータの前記ターゲットデータのパイプライン化された複数の探索を並列に行うことと、
前記パイプライン化された複数の探索らの結果を選択して、前記入力データストリームを圧縮する段階と、
を含み、
前記複数のロケーションを特定する段階は、
前記ターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを取得する段階であって、前記複数のエントリーは前記1つ又は複数の履歴バッファーの前記複数のロケーションへの複数の参照を含む段階と、
前記複数の参照を出力して、前記複数のロケーションが並列に読み取られることを可能にする段階と、
を更に含む、
方法。
【請求項8】
前記パイプライン化された複数の探索らの結果をトークンのシーケンス及びヘッダーとして組み立てる段階と、
前記トークンを並列にエンコードする段階と、
を更に含み、
前記ヘッダーは前記シーケンス内の前記トークンのそれぞれのオフセットに関する情報を提供する、請求項に記載の方法。
【請求項9】
前記結果を選択する段階は、
前記パイプライン化された複数の探索から最も長い一致を選択する段階、
を更に含む、請求項またはに記載の方法。
【請求項10】
スコアボードにおいて前記ターゲットデータの前記パイプライン化された複数の探索の結果を追跡する段階と、
前記複数のシーケンシャルターゲットデータのそれぞれについて複数のスコアボードを更新する段階と、
を更に含む、請求項からのいずれか1項に記載の方法。
【請求項11】
命令を受信して、ネットワーク機能を実行する段階と、
前記命令に応じて前記入力データストリームに対しデフレート圧縮を行う段階と、
を更に含み、
前記デフレート圧縮は前記パイプライン化された複数の探索含む、請求項から10のいずれか1項に記載の方法。
【請求項12】
メモリと、
前記メモリに結合された処理回路と、
を備え、
前記処理回路は、
入力データストリーム内のターゲットデータを探索するために、1つ又は複数の履歴バッファー内の複数のロケーションを特定するハッシュ回路と、
前記1つ又は複数の履歴バッファーにおいて、複数のシーケンシャルターゲットデータの前記ターゲットデータのパイプライン化された複数の探索を並列に行う複数の照合エンジンと、
前記パイプライン化された複数の探索らの結果を選択して前記入力データストリームを圧縮する一致選択器と、
を含み、
前記ハッシュ回路は、前記ターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを取得し、前記複数のエントリーは前記1つ又は複数の履歴バッファーの前記複数のロケーションへの複数の参照を含み、前記ハッシュ回路は前記複数の参照を出力して、前記複数のロケーションが並列に読み取られることを可能にする、
システム。
【請求項13】
前記処理回路はプロセッサの実行回路内に配置される、請求項12に記載のシステム。
【請求項14】
前記処理回路はプロセッサに結合されたコプロセッサ内に配置される、請求項12に記載のシステム。
【請求項15】
前記パイプライン化された複数の探索ら組み立てられた結果をトークンのシーケンス及びヘッダーとして受信する複数のエンコーダーを更に備え、
前記ヘッダーは前記シーケンス内の前記トークンのそれぞれのオフセットに関する情報を提供し、前記エンコーダーは前記トークンを並列にエンコードする、請求項12から14のいずれか1項に記載のシステム。
【請求項16】
前記一致選択器は、前記パイプライン化された複数の探索から最も長い一致を選択する、請求項12から15のいずれか1項に記載のシステム。
【請求項17】
並列デフレート命令に応じて、前記パイプライン化された複数の探索並列に行う実行回路を更に備える、請求項12から16のいずれか1項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2013年3月15日に出願された、米国仮特許出願第61/800,263号に関し、この米国仮特許出願からの優先権の利益を主張する。
【0002】
本開示は、処理ロジック、マイクロプロセッサ、及びプロセッサ又は他の処理ロジックによって実行されると、論理演算、数学演算、又は他の関数演算を実行する関連した命令セットアーキテクチャの分野に関する。
【背景技術】
【0003】
LZ77(「LZ」はLempel-Zivを表す)は、デフレート圧縮アルゴリズムを含む幾つかのユビキタス圧縮方式の基礎をなす可逆データ圧縮アルゴリズムである。LZ77アルゴリズムは、現在の入力データシーケンスを、入力データストリーム内に以前から存在するデータシーケンスのコピーへの参照と照合することによって圧縮を実行する。一致が見つかると、この一致は長さ−距離(L,D)の対によってエンコードされる。長さ−距離の対は、「現在の入力データロケーションからD文字戻り、そのロケーションからL文字コピーする」という命令文と同等のものを指す。
【0004】
一致を突き止めるために、LZ77エンコーダーは入力データストリーム内の最も近時のデータを追跡する。このデータが保持されるデータ構造は履歴ウィンドウと呼ばれ、これは時間とともに更新されるスライディングウィンドウである。エンコーダーは、一致を探すのにこのデータを維持する必要があり、デコーダーはエンコーダーが参照する一致を解釈するのにこのデータを維持する必要がある。スライディングウィンドウが大きくなるほど、エンコーダーが参照を作成するために後方をより長く探索する場合がある。
【0005】
最新のデータ処理及びネットワーキングにおいて、送信端におけるオンザフライ圧縮及び受信端における解凍を行うのに、多くの場合にデフレート圧縮が用いられる。デフレート圧縮は、LZ77圧縮及びハフマン符号化の組み合わせを用いる標準化された可逆データ圧縮アルゴリズムである。LZ77圧縮及びハフマン符号化は本質的に直列である。
【発明の概要】
【0006】
実施形態は、添付図面の図に限定ではなく例として示されている。
【図面の簡単な説明】
【0007】
図1A】1つの実施形態による並列デフレート圧縮を行うコプロセッサを示すブロック図である。
【0008】
図1B】1つの実施形態による並列デフレート圧縮を行うプロセッサを示すブロック図である。
【0009】
図2】1つの実施形態による並列デフレート圧縮回路のブロック図である。
【0010】
図3】別の実施形態による並列デフレート圧縮回路のブロック図である。
【0011】
図4A】更に別の実施形態による並列デフレート圧縮回路のブロック図である。
【0012】
図4B】1つの実施形態による並列探索を実行するパイプラインの一例を示す図である。
【0013】
図5】1つの実施形態による並列エンコーディング回路のブロック図である。
【0014】
図6】1つの実施形態による並列デフレート命令に応答して実行される動作を示す流れ図である。
【0015】
図7A】1つの実施形態によるインオーダーパイプライン及びアウトオブオーダーパイプラインのブロック図である。
【0016】
図7B】1つの実施形態によるインオーダーコア及びアウトオブオーダーコアのブロック図である。
【0017】
図8A】1つの実施形態による、より詳細な例示的なインオーダーコアアーキテクチャのブロック図である。
図8B】1つの実施形態による、より詳細な例示的なインオーダーコアアーキテクチャのブロック図である。
【0018】
図9】1つの実施形態によるプロセッサのブロック図である。
【0019】
図10】1つの実施形態によるシステムのブロック図である。
【0020】
図11】1つの実施形態による第2のシステムのブロック図である。
【0021】
図12】1つの実施形態による第3のシステムのブロック図である。
【0022】
図13】1つの実施形態によるシステムオンチップ(SoC)のブロック図である。
【発明を実施するための形態】
【0023】
以下の説明において、多数の具体的な詳細が示される。しかしながら、本明細書において説明される実施形態は、これらの特定の詳細なしで実施することができることが理解される。他の例において、既知の回路、構造及び技法は、この説明の理解を不明瞭にしないために詳細に示されていない。
【0024】
本明細書において説明される実施形態は、ネットワークコンテキスト等において、高スループットパイプラインを用いて、効率的、高スループット、高品質のデフレート圧縮の並列メカニズムを提供する。実施形態は、ハードウェアにおいて並列に入力データストリームのLZ77トークン化を行う並列の方法、装置及びシステムを提供する。クロックあたり複数バイトが圧縮される。シーケンシャルデータストリームにおいて複数の探索が並列に実行され、これらの探索は並列に分解される。「収束(funneling)」一致選択技法は、複数の発信トークンを分解して直列出力ストリームにするので、ストリームはコヒーレントなままであり、入力を適切に反映している。
【0025】
本明細書において説明される実施形態は、組込みデフレート圧縮(embedded deflate compression)を行い、これはネットワーキング等の商業的運用、並びにストレージアプリケーション及びストレージシステムに有用である。組込みデフレート圧縮は、ネットワークインターフェース付近の圧縮又はファイルシステム圧縮等のスループットの影響を受けやすい(throughput-sensitive)動作の性能を改善する。
【0026】
通常、デフレート圧縮は直列で行われ、高速汎用プロセッサにおいて実行される。クロックあたり1つのトークンの直列レートを超えて直列実装を加速するのは困難である。したがって、本明細書において説明される実施形態は、大きな潜在的商業価値を有する。
【0027】
デフレート圧縮の実施形態は、2つのレベルで並列探索を実行する。第1のレベルにおいて、並列の探索が単一の「ターゲット」点(「ターゲットデータ」、「ターゲットデータシーケンス」とも呼ばれ、入力ストリーム内の1つ又は複数のバイト/文字とすることができる)に対して行われる。単一のターゲット点の探索結果の中で、過去のデータシーケンス(「履歴ウィンドウ」とも呼ばれる)において最も長い一致を特定する1つの探索結果が選択される。第2のレベルにおいて、探索の並列の組が複数のシーケンシャルターゲット(例えば、入力ストリームにおける現在のターゲット点及び後続の3バイト)に対して行われる。1つの実施形態では、これらのシーケンシャルターゲットに対する探索はパイプラインで行うことができる。パイプライン化された探索の結果は、シーケンシャルターゲットの最も長い一致が選択されるように結合することができる。第1のレベルの並列探索を第2のレベルのパイプライン化された探索と結合することによって、全てのクロックサイクルにおいて複数の探索結果が生成されることが可能になる。並列探索に続いて、探索結果がハフマンエンコーディングされ、出力ストリームが生成される。
【0028】
1つの実施形態では、デフレート圧縮は処理システムのプロセッサに結合された専用ハードウェアによって実行することができる。図1Aは、1つの実施形態による処理システム100を示すブロック図である。処理システム100は、バス又は相互接続161を介してメモリ141、I/Oデバイス151及びコプロセッサ131に結合されたプロセッサ121を備える。コプロセッサ131は、プロセッサ121と同じダイ上で同一ロケーションに配置することもできるし、プロセッサ121と別個のダイ(例えばチップセット)上に配置することもできる。1つの実施形態では、コプロセッサ131は、並列デフレート命令に応答してデフレート圧縮動作を実行するデフレート回路135を備える。1つの実施形態では、コプロセッサ131は、ネットワーキング又はストレージ用の通信コプロセッサモジュール又はストレージコプロセッサモジュールとすることができる。処理システム100は簡略化された表現であり、他の構成要素が存在し得ることが理解される。
【0029】
代替的な実施形態では、デフレート圧縮はプロセッサ内のハードウェアにおいて実施することができる。図1Bは、実行ユニット140を有するプロセッサ115等の命令処理装置の一実施形態のブロック図である。1つの実施形態では、実行ユニット140は、並列デフレート命令を含む命令を実行するように動作可能なデフレート回路135を備える。幾つかの実施形態では、プロセッサ115はマルチコアプロセッサのプロセッサコア、又は電子システムにおける処理要素とすることができる。
【0030】
デコーダー130は、到来する命令を、より高レベルの機械命令又はマクロ命令の形態で受信し、これらの命令をデコードして、低レベルのマイクロオペレーション、マイクロコードエントリー点、マイクロ命令、又は他のより低いレベルの命令若しくは制御信号を生成する。これらはオリジナルのより高レベルの命令を反映し及び/又はそれらから導出される。それらのより低レベルの命令又は制御信号は、より低レベル(例えば回路レベル又はハードウェアレベル)の動作を通じてより高レベルの命令の動作を実施することができる。デコーダー130は、様々な異なるメカニズムを用いて実施することができる。適切なメカニズムの例には、限定ではないが、マイクロコード、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA)、当該技術分野において既知のデコーダーを実施するのに用いられる他のメカニズム等が含まれる。
【0031】
デコーダー130は、キャッシュ110、メモリ120又は他のソースのための到来する命令を受信することができる。デコードされた命令は実行ユニット140に送信される。実行ユニット140は、デコーダー130から、1つ又は複数のマイクロ動作、マイクロコードエントリー点、マイクロ命令、他の命令、又は他の制御信号を受信することができる。これらは、受信した命令を反映しているか又はそれらから導出される。実行ユニット140は、レジスタファイル170、キャッシュ110及び/又はメモリ120からデータ入力を受信し、それらへのデータ出力を生成する。
【0032】
説明を不明瞭にすることを避けるために、比較的単純なプロセッサ115が示され説明された。他の実施形態は2つ以上の実行ユニットを有する場合があることを理解されたい。例えば、プロセッサ115は、例えば算術ユニット、算術論理ユニット(ALU)、整数ユニット、浮動小数点ユニット等の複数の異なるタイプの実行ユニットを備えることができる。命令処理装置又はプロセッサの更に他の実施形態は、複数のコア、論理プロセッサ又は実行エンジンを有することができる。後に図7図13に関してプロセッサ115の複数の実施形態が提供される。
【0033】
図2は、1つの実施形態による圧縮モジュール200(例えば図1A又は図1Bのデフレート回路135)の一例を示すブロック図である。この実施形態では、圧縮モジュール200は、単一のターゲット点に対して並列探索を行う。圧縮モジュール200は、入力データストリームをバッファーリングする入力バッファー210を含む。入力データストリームはルックアサイドキュー(LAQ)212並びに履歴バッファー216A及び216B内に供給される。LAQ212は、圧縮される現在のデータシーケンスを記憶し、履歴バッファー216A及び216Bは、同じ入力データストリーム内の過去のデータシーケンスを記憶するスライディングウィンドウである。この実施形態では、各履歴バッファー216A及び216Bは1つしか読取りポートを有しないと仮定され、したがって、過去のデータシーケンスは、各履歴バッファー216A及び216Bがこの過去のデータシーケンスの同一のコピーを記憶するように複製される。履歴バッファーが複数の読取り/書込みポートを有する代替的な実施形態では、そのような履歴バッファーは1つしか必要とされない。履歴バッファー216A及び216B内のデータが探索され、照合エンジン217A及び217Bによって現在のデータシーケンスと並列に照合される。
【0034】
説明を簡単にするために、2つの照合エンジン217A及び217Bのみが示される。圧縮モジュール200は任意の数の照合を並列に行う任意の数の照合エンジンを備えることができることが理解される。
【0035】
1つの実施形態において、探索速度を改善するために、現在のデータシーケンスはハッシュ関数ユニット(例えばハッシャー213)によってハッシングされる。ハッシュの結果はハッシュテーブル214へのポインター(例えばアドレス又はインデックス)である。そのアドレスにおいて、ハッシュテーブル214は複数のエントリーを記憶し、各エントリーは参照を含み、各参照は履歴バッファー216A及び216Bにおける或るロケーションを指し示す。ハッシュテーブル214内に記憶することができる参照の数がハッシュテーブル214の容量を超えている場合、ハッシュスピルコントローラー(hash spill controller)215は、ハッシュテーブル214内のエントリーのうちのいずれを外部メモリに移すことができるかを判断する。例えば、ハッシュテーブル214の外に移すことができるエントリーは、最も用いられていないか又は最も長く用いられていないエントリーとすることができる。ハッシュテーブル214を用いて、照合エンジン217A及び217Bは履歴バッファー216A及び216Bにおけるこれらのロケーションまで探索を狭めて、LAQ212内の探索ターゲットが履歴バッファー216A及び216Bにおけるデータシーケンスの任意の部分に一致するか否かを判断することができる。照合エンジン217A及び217Bの出力から、一致選択器220は、探索ターゲットについて最も長い一致を有する出力のうちの1つを選択する。選択された一致した出力は1つ又は複数のエンコーダー225に送信され、1つ又は複数のエンコーダー225はデータストリームをエンコードし、エンコードされたストリームを出力バッファー230に送信する。
【0036】
図3は、別の実施形態による圧縮モジュール300(例えば図1A又は図1Bのデフレート回路135)の例を示すブロック図である。この実施形態では、圧縮モジュール300は、入力データストリームをバッファーリングする入力バッファー310を備える。入力データストリームは履歴バッファー312内に供給される。入力データストリームは、ハッシュ関数ユニット(例えばハッシャー313)によってハッシュされる。ハッシュ結果はハッシュテーブル314へのポインター(例えばアドレス又はインデックス)である。この実施形態では、ハッシュテーブル314は複数のレベルを含む。入力データシーケンス(すなわちターゲット点)がハッシュされるとき、ハッシュされた値はハッシュテーブル314内の「バケット(bucket)」を指すポインターである。各バケットは複数のエントリーを含み、各エントリーは異なるハッシュレベルにある。各エントリーは履歴バッファー312への参照(ロケーションを指示する)を含む。履歴バッファー312のこれらの複数のロケーションを独立探索し、ターゲット点と比較することができる。
【0037】
1つの実施形態では、各照合レベルは対応する照合エンジン317を有する。照合エンジン317は単一のターゲット点について履歴バッファー312の異なるロケーションにおいて並列に探索を行う。照合エンジン317は衝突アービトレーター(collision arbitrator)316を通じて履歴バッファー312にアクセスすることができ、衝突アービトレーター316はアクセス動作における衝突を解消する。照合エンジン317の出力は、一致選択器320によって比較され、最も長い一致を有する出力が選択される。選択された一致した出力は1つ又は複数のエンコーダー325に送信され、1つ又は複数のエンコーダー325はデータストリームをエンコードし、エンコードされたストリームを出力バッファー330に送信する。
【0038】
図4Aは、別の実施形態による圧縮モジュール400(例えば図1A又は図1Bのデフレート回路135)の一例を示すブロック図である。この実施形態では、並列探索(例えば4つの並列探索)が入力データストリーム内の複数のシーケンシャルターゲット点(例えば8つのターゲット点)に対して行われる。一致選択の第1のレベルにおいて、単一のターゲット点に対して動作する並列探索について最良の一致が選択される。一致選択の第2のレベルにおいて、シーケンシャルターゲットの最良の一致が選択され、並列探索結果と統合され、最良の圧縮を生成する組合せが選択される。
【0039】
この実施形態では、圧縮モジュール400は入力データストリームをバッファーリングする入力バッファー410を備える。入力データストリームは履歴バッファー416及びLAQ412に供給される。4つの入力ターゲットがハッシュ関数ユニット(例えばハッシャー413)によってそれぞれハッシュされる。ハッシュ結果は、ハッシュテーブル414のアドレス(又はインデックス)へのポインターである。ハッシュテーブル414へ書き込むには、ハッシャー出力がまずハッシュ書込みバッファー432に送信される。ハッシュ書込みバッファー432はハッシュテーブル更新ロジック433に結合されている。ハッシュテーブル更新ロジック433は、ハッシュテーブル書込みポインター434に更に結合されている。ハッシュテーブル書込みポインター434は、ハッシュテーブルバケットチェーンに書き込む次のバケットを指し示し、サイクルあたり最大でn個の読取り/インクリメントイベントまでの、非常に高速な読取り/インクリメントに利用可能である。ここで、nはハッシャー数である。
【0040】
ハッシュテーブル更新ロジック433及びハッシュテーブル書込みポインター434は、ハッシュテーブル414への書込みが許可されるか否か(例えばアクセスへの衝突がないとき)、及びハッシュテーブル414内のどこに書き込むかを制御する。ハッシュテーブル414内に記憶することができるエントリー数がハッシュテーブル414の容量を超えているとき、ハッシュスピルコントローラー415は、ハッシュテーブル414内のエントリーのうちのいずれを外部メモリに移すことができるかを判断する。この実施形態では、ハッシュ回路セクションのスループットはnである。ここで、n>サイクルあたり4バイトの最小スループット、である。このスループットは、長い一致によって、探索エンジンが潜伏した状態で処理が探索バッファーを通じて迅速にホップできるようになる「ジャンプアヘッド(jump-ahead)」を可能にする。
【0041】
その一方で、シーケンシャルターゲットは履歴バッファー416及びLAQ412にも入力される。ハッシュテーブル314内の参照に基づいて、照合エンジン417は履歴バッファー416内の参照によって指示されたロケーションを探索する。各クロックサイクルにおいて、4つの探索が行われ、各探索は最大で8深度(すなわち、8つのパイプラインステージ)であり、サイクルあたり最大32個の照合エンジン417の実行である。8つの照合エンジン417の各群はスコアボード418と関連付けられる。スコアボード418はシーケンシャルターゲットの照合結果を追跡し、これらの結果を一致選択器420に転送する。一致選択器420は、単一のターゲットの最も長い一致を選択し、4つのシーケンシャルターゲットの照合結果を統合する。生成された一致した点はエンコーダー425に送信され、エンコーダー425はハフマン符号ルックアップテーブル(LUT)426を用いてデータストリームをエンコードし、エンコードされたストリームを出力バッファー430に送信する。
【0042】
図4Bは、1つの実施形態による、入力データシーケンスのパイプライン化された並列探索を行うパイプラインの一例を示している。パイプラインは、上から下までステージ0〜7で示される8つのパイプラインステージ(8つのクロックサイクルに対応する)において入力データシーケンスに対し並列探索を行う。図4Bのパイプラインは、図4Aのブロック470の代替的な実施形態である。この実施形態では、入力データシーケンス(4つのターゲット点を含む)が各クロックサイクルにおいて処理される。最上位における入力はLAQ内に4つのターゲット点(例えば4バイトデータ)を含み、最下位における出力は履歴バッファーのデータ出力であり、このデータ出力は、LAQの適切なバイトと比較され、一致が存在するか否かが判断される。パイプラインステージ3において、4つの読取り要求がハッシュテーブル(HTRD0〜3として示される)に発行され、読み取られる履歴バッファーのロケーションが決定される。パイプラインステージ5において、16個の読取り要求が履歴バッファー(HB0rd0及びHR1rd0)に発行される。この実施形態では、履歴バッファーに対する16個の読取り要求が存在する。なぜなら、この実施形態は、一度に4つの連続ストリームバイトに対し機能するように設計されるためである。ハッシュ及びハッシュテーブルルックアップが4バイトのそれぞれについて行われる。各ルックアップによって、4つのハッシュバケット(レベル)のコンテンツが得られ、これらはハッシュアドレスに割り当てられる。ハッシュテーブルは16個の履歴バッファーアドレスを出力する。ハッシュテーブル及び履歴バッファーに対する読取り要求は、読取り対応生成ロジック(「RD EN生成ロジック476及び478)によって可能にされる。読取りアドレスが同じメモリロケーション又は同じ近傍内のエリアに対するものであるとき、行うことができる読取り数に物理的制限が存在する。この制限又は制約は、バンク衝突と呼ばれる。バンク衝突が生じると、そのクロックにおいて複数の読取り要求のうちの1つ又は複数を満たすことができず、したがってドロップ又は再スケジューリングされる。バンク衝突はバンク衝突ロジック472及び474によって解決される。
【0043】
並列探索の後、探索結果がLZ77トークンのシーケンシャルストリームに組み立てられる。LZ77トークンは、「リテラル」(履歴バッファー内で一致を見つけることができないデータ)及び(距離、長さの)対(一致を見つけることができるとき)を含む。各トークンは可変のサイズを有する。LZ77トークンのストリームはハフマンエンコーディングに従って並列にエンコードされる。
【0044】
図5は、1つの実施形態によるLZ77トークンストリーム520の並列エンコーディングの一例を示している。この実施形態では、8つのLZ77トークン520が並列にエンコードされ、ハフマンエンコーディングはテーブルをルックアップすることによって行われる(例えば、ハフマン符号ルックアップテーブル(LUT)526)。代替的な実施形態では、異なる数のLZ77トークンを並列にエンコードすることができることが理解される。圧縮出力(一致選択器出力)からの単一の「パケット」は、ヘッダー510と、8つのLZ77トークン520を含むペイロードを含む。ヘッダー510は、各トークン520が他のトークンと独立してロケーションを特定され処理されることができるように、各トークン520のオフセットに関する情報を提供する。1つの実施形態では、各トークン520は8ビットのリテラル又は24ビットの参照のいずれかである。ヘッダー510は16ビットとすることができ、ペイロード内の対応するトークンがリテラルであろうと参照であろうと(又はパケットの終了を示そうと)、シグナリングごとに8対のビットを含む。ヘッダー510の使用によって、各トークン520の独立した高速で並列なルックアップが可能になる。
【0045】
ハフマン符号LUT526を用いると、8つのエンコーダー525によって8つのLZ77トークン520が並列にエンコードされる。トークン520ごとに、対応するエンコーダー525がコード及び長さを出力する。各エンコーダー525はまず、ヘッダー510内のビットを検査してペイロード内のそのエンコーダー自身のトークンのオフセットを見つける。例えば、エンコーダー525は、オフセットを見つけるには、エンコーダー525のトークンの前にリテラル及び参照がいくつ存在するかを求める必要がある場合がある。次に、エンコーダー525はエンコーダー525自身のトークンをエンコードし、コード及び長さを出力する。エンコードされた出力は、コード再結合ブロック527によってハフマンエンコーディングされた出力530のシーケンシャルストリームに再組立てされる。これは並列デフレート圧縮の最終的な出力でもある。
【0046】
図6は、1つの実施形態による、LZ77圧縮に基づいて並列圧縮を行う方法600のブロック流れ図である。並列圧縮は、並列デフレート圧縮の一部とすることができる。1つの実施形態では並列圧縮は並列デフレート命令に応答して行われる。
【0047】
方法600は、処理回路(例えば図1Aのコプロセッサ131又は図1Bの実行ユニット140)が入力データストリーム上で並列圧縮を行うことから開始する。1つ又は複数の履歴バッファーにおいて、入力データストリーム内のターゲットデータを探索する複数のロケーションが特定される(611)。1つ又は複数の履歴バッファーにおいて、ターゲットデータの複数の探索が並列に行われる(612)。連続クロックサイクルにおいて、入力データストリーム内の複数のシーケンシャルターゲットデータのパイプライン化された探索が行われる(613)。次に、複数の探索及びパイプライン化された探索から結果が選択され、入力データストリームが圧縮される(614)。
【0048】
1つの実施形態では、方法600は、複数の探索及びパイプライン化された探索からの結果をトークン及びヘッダーのシーケンスとして組み立てることと、トークンを並列にエンコードすることとを更に含む。ヘッダーはシーケンス内のトークンのそれぞれのオフセットに関する情報を提供する。1つの実施形態では、複数の探索及びパイプライン化された探索から結果を選択するとき、処理回路は複数の探索から最も長い一致を選択し、複数の探索からのこの最も長い一致を、パイプライン化された探索の結果と統合する。1つの実施形態では、複数のロケーションを特定するとき、処理回路はターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを得る。エントリーは1つ又は複数の履歴バッファーの複数のロケーションへの複数の参照を含む。複数の参照を用いて複数のロケーションが並列に読み取られることを可能にする。
【0049】
1つの実施形態では、スコアボードにおいてターゲットデータの複数の探索の結果が追跡される。複数のスコアボードが複数のシーケンシャルターゲットデータのそれぞれについて更新される。1つの実施形態において、処理回路がネットワーク機能を行う命令を受信すると、処理回路は命令に応答して入力データストリームに対しデフレート圧縮を行う。デフレート圧縮は複数の探索及びパイプライン化された探索を含む。
【0050】
様々な実施形態において、図6の方法は汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサ又はデジタル信号プロセッサ)又は任意のタイプのデジタル論理デバイス又は命令処理装置によって行うことができる。幾つかの実施形態では、図6の方法は図1Aのコプロセッサ131、図1Bのプロセッサ115、又は図7図13に示す実施形態等の同様のプロセッサ、装置、又はシステムによって行うことができる。さらに、図1Aのコプロセッサ131、図1Bのプロセッサ115、及び図7図13に示すプロセッサ、装置又はシステムは、図6の方法の実施形態と同じか、同様であるか又は異なる動作及び方法の実施形態を行うことができる。
【0051】
例示的なコアアーキテクチャインオーダー及びアウトオブオーダーコアブロック図 図7Aは、1つの実施形態による、例示的なインオーダーパイプライン及び例示的なレジスタリネーミング、アウトオブオーダー発行/実行パイプラインを示すブロック図である。図7Bは、1つの実施形態による、プロセッサに含まれる、インオーダーアーキテクチャコアの例示的な実施形態、及び例示的なレジスタリネーミング、アウトオブオーダー発行/実行アーキテクチャコアの双方を示すブロック図である。図7A及び図7Bの実線のボックスは、インオーダーパイプライン及びインオーダーコアを示す一方、破線のボックスのオプションの追加は、レジスタリネーミング、アウトオブオーダー発行/実行パイプライン及びコアを示す。インオーダーの態様がアウトオブオーダーの態様のサブセットであることを考慮して、アウトオブオーダーの態様を説明する。
【0052】
図7Aにおいて、プロセッサパイプライン700は、フェッチステージ702と、レングスデコードステージ704と、デコードステージ706と、アロケーションステージ708と、リネーミングステージ710と、スケジューリング(ディスパッチ又は発行としても知られる)ステージ712と、レジスタ読取り/メモリ読取りステージ714と、実行ステージ716と、ライトバック/メモリ書込みステージ718と、例外ハンドリングステージ722と、コミットステージ724とを備える。
【0053】
図7Bは、実行エンジンユニット750に結合されたフロントエンドユニット730を含むプロセッサコア790を示し、これらの実行エンジンユニット及びフロントエンドユニットの双方はメモリユニット770に結合されている。コア790は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューター(CISC)コア、超長命令語(VLIW)コア、又はハイブリッド若しくは代替のコアタイプとすることができる。さらに別の選択肢として、コア790は、例えば、ネットワークコア又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等の専用コアとすることができる。
【0054】
フロントエンドユニット730は、命令キャッシュユニット734に結合された分岐予測ユニット732を備える。命令キャッシュユニット734は、命令変換ルックアサイドバッファー(TLB)736に結合され、命令変換ルックアサイドバッファー(TLB)736は命令フェッチユニット738に結合され、命令フェッチユニット738はデコードユニット740に結合される。デコードユニット740(又はデコーダー)は命令をデコードし、出力として、1つ又は複数のマイクロオペレーション、マイクロコードエントリー点、マイクロ命令、他の命令、又は他の制御信号を生成することができる。これらは、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映しているか、又はオリジナルの命令から導出される。デコードユニット740は、様々な異なるメカニズムを用いて実施することができる。適したメカニズムの例には、限定ではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)等が含まれる。1つの実施形態では、コア790はマイクロコードROM又は或る特定のマクロ命令のマイクロコードを(例えばデコードユニット740に又はそうでない場合フロントエンドユニット730内に)記憶する他の媒体を含む。デコードユニット740は実行エンジンユニット750内のリネーム/アロケーターユニット752に結合されている。
【0055】
実行エンジンユニット750は、リタイアメントユニット(retirement unit:退避ユニット)754に結合されるリネーム/アロケーターユニット752と、1組の1つ又は複数のスケジューラーユニット756を備える。スケジューラーユニット(複数の場合もある)756は、リザベーションステーション、中央命令ウィンドウ等の任意の数の異なるスケジューラーを表す。スケジューラーユニット(複数の場合もある)756は、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758に結合されている。物理レジスタファイル(複数の場合もある)ユニット758のそれぞれは、1つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインター)等の1つ又は複数の異なるデータタイプを記憶する。1つの実施形態では、物理レジスタファイル(複数の場合もある)ユニット758は、ベクトルレジスタユニットと、書込みマスクレジスタユニットと、スカラーレジスタユニットとを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。レジスタリネーミング及びアウトオブオーダー実行を(例えば、再順序付けバッファー(複数の場合もある)及びリタイアメントレジスタファイル(複数の場合もある)を用いるか、フューチャーファイル(複数の場合もある)、履歴バッファー(複数の場合もある)、及びリタイアメントレジスタファイル(複数の場合もある)を用いるか、レジスタマップ及びレジスタのプールを用いる等して)実施することができる様々な方法を示すために、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758は、リタイアメントユニット754によってオーバーラップされている。リタイアメントユニット754及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758は実行クラスター(複数の場合もある)760に結合されている。実行クラスター(複数の場合もある)760は、一組の1つ又は複数の実行ユニット762と、一組の1つ又は複数のメモリアクセスユニット764とを備える。実行ユニット762は、様々なタイプのデータ(例えばスカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々な演算(例えば、シフト、加算、減算、乗算)を行うことができる。実施形態の中には、特定の機能又は機能のセットに専用の複数の実行ユニットを備えることができるものもあれば、1つの実行ユニットのみを備えるか、又は全てが全ての機能を行う複数の実行ユニットを備えることができるものもある。スケジューラーユニット(複数の場合もある)756、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758、及び実行クラスター(複数の場合もある)760は、場合によっては複数のものとして示されている。なぜなら、或る特定の実施形態は、或る特定のタイプのデータ/動作に別個のパイプライン(例えば、スカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はそれぞれがそれ自身のスケジューラーユニット、物理レジスタファイル(複数の場合もある)ユニット、及び/又は実行クラスターを有するメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット(複数の場合もある)764を有する或る特定の実施形態が実施される)を作製するためである。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数は、アウトオブオーダー発行/実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
【0056】
一組のメモリアクセスユニット764は、メモリユニット770に結合されている。このメモリユニットは、レベル2(L2)キャッシュユニット776に結合されたデータキャッシュユニット774に結合されたデータTLBユニット772を備える。1つの例示的な実施形態では、メモリアクセスユニット764は、ロードユニットと、ストアアドレスユニットと、ストアデータユニットとを備えることができ、これらのそれぞれは、メモリユニット770内のデータTLBユニット772に結合されている。命令キャッシュユニット734は、メモリユニット770内のレベル2(L2)キャッシュユニット776に更に結合されている。L2キャッシュユニット776は、キャッシュの1つ又は複数の他のレベルに結合され、最終的にメインメモリに結合される。
【0057】
例として、例示的なレジスタリネーミング、アウトオブオーダー発行/実行コアアーキテクチャは、パイプライン700を以下のように実施することができる。1)命令フェッチ738が、フェッチステージ702及びレングスデコードステージ704を実行し、2)デコードユニット740がデコードステージ706を実行し、3)リネーム/アロケーターユニット752がアロケーションステージ708及びリネーミングステージ710を実行し、4)スケジューラーユニット(複数の場合もある)756がスケジュールステージ712を実行し、5)物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758及びメモリユニット770がレジスタ読取り/メモリ読取りステージ714を実行し、実行クラスター760が実行ステージ716を実行し、6)メモリユニット770及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758がライトバック/メモリ書込みステージ718を実行し、7)様々なユニットが例外ハンドリングステージ722に関与することができ、8)リタイアメントユニット754及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)758がコミットステージ724を実行する。
【0058】
コア790は、本明細書において説明した命令(複数の場合もある)を含む、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンとともに追加された幾つかの拡張を有する);カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セット、カリフォルニア州サニーベールのARM Holdings社の(NEON等のオプションの追加拡張を有する)ARM命令セット)をサポートすることができる。1つの実施形態では、コア790は、パックドデータ命令セット拡張(例えばSSE、AVX1、AVX2等)をサポートし、それによって多くのマルチメディアアプリケーションによって用いられる演算がパックドデータを用いて実行されることを可能にするロジックを含む。
【0059】
コアは、マルチスレッディング(並列の複数組の演算又はスレッドを実行する)をサポートすることができ、タイムスライスされたマルチスレッディング、同時のマルチスレッディング(単一の物理コアが、当該物理コアが同時にマルチスレッディングしているスレッドのそれぞれについて論理コアを提供する)、又はそれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディング技術におけるようなタイムスライスされたフェッチ及びデコード並びにその後の同時のマルチスレッディング)を含む様々な方法でそうすることができることが理解されるべきである。
【0060】
レジスタリネーミングは、アウトオブオーダー実行に関して説明されるが、レジスタリネーミングは、インオーダーアーキテクチャにおいて用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別個の命令キャッシュユニット734/データキャッシュユニット774及び共有されたL2キャッシュユニット776も備えるが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、又は複数のレベルの内部キャッシュ等の、命令及びデータの双方の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、コア及び/又はプロセッサの外部にある内部キャッシュ及び外部キャッシュの組み合わせを備えることができる。代替的に、キャッシュの全てを、コア及び/又はプロセッサの外部にすることができる。
【0061】
特定の例示的なインオーダーコアアーキテクチャ 図8A及び図8Bは、より詳細な例示的なインオーダーコアアーキテクチャのブロック図を示す。このコアは、チップ内の幾つかの論理ブロックのうちの1つである(同じタイプ及び/又は異なるタイプの他のコアを含む)。論理ブロックは、用途に応じて、或る固定機能ロジック、メモリI/Oインターフェース、及び他の必要なI/Oロジックを用いて高帯域幅相互接続ネットワーク(例えばリングネットワーク)を通じて通信する。
【0062】
図8Aは、1つの実施形態による、単一プロセッサコア、並びにオンダイ相互接続ネットワーク802及びそのローカルサブセットであるレベル2(L2)キャッシュ804との単一プロセッサコアの接続のブロック図である。1つの実施形態では、命令デコーダー800はパックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ806は、スカラーユニット及びベクトルユニットへのキャッシュメモリへの低レイテンシのアクセスを可能にする。(設計を簡単にするために)1つの実施形態では、スカラーユニット808及びベクトルユニット810は別個のレジスタセット(それぞれ、スカラーレジスタ812及びベクトルレジスタ814)を用い、それらの間で転送されるデータはメモリに書き込まれ、次にレベル1(L1)キャッシュ806からリードバックされるが、代替的な実施形態は異なる手法を用いてもよい(例えば、単一のレジスタセットを用いるか、又はデータが書込み及びリードバックされることなく2つのレジスタファイル間で転送されることを可能にする通信パスを含む)。
【0063】
L2キャッシュのローカルサブセット804は、プロセッサコアあたり1つの別個のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、そのプロセッサコア自身のL2キャッシュのローカルサブセット804への直接アクセスパスを有する。プロセッサコアによって読み取られるデータは、そのL2キャッシュサブセット804に記憶され、自身のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列に迅速に、このデータにアクセスすることができる。プロセッサコアによって書き込まれるデータはこのプロセッサコア自身のL2キャッシュサブセット804に記憶され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンス性を確保する。リングネットワークは双方向であり、プロセッサコア等のエージェント、L2キャッシュ、及び他の論理ブロックがチップ内で互いに通信することを可能にする。
【0064】
図8Bは、1つの実施形態によれば、図8A内のプロセッサコアの一部の拡大図である。図8Bは、L1キャッシュ804のL1データキャッシュ806A部分と、ベクトルユニット810及びベクトルレジスタ814に関する更なる詳細を含む。詳細には、ベクトルユニット810は、16要素(16-wide)ベクトル処理ユニット(VPU)(16要素ALU828を参照)であり、整数命令、単精度浮動小数点命令及び倍精度浮動小数点命令のうちの1つ又は複数を実行する。VPUはスウィズルユニット820を用いたレジスタ入力のスウィズリング、数値変換ユニット822A及び822Bを用いた数値変換、並びにメモリ入力における複製ユニット824を用いた複製をサポートする。書込みマスクレジスタ826によって、結果としてのベクトル書込みの予測が可能になる。
【0065】
統合メモリコントローラー及びグラフィックスを有するプロセッサ 図9は、1つの実施形態による、2つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサ900のブロック図である。図9における実線のボックスは、単一のコア902A、システムエージェント910、一組の1つ又は複数のバスコントローラーユニット916を有するプロセッサ900を示す一方、破線のボックスのオプションの追加は、複数のコア902A〜902N、システムエージェントユニット910内の一組の1つ又は複数の統合メモリコントローラーユニット914、及び専用ロジック908を有する代替的なプロセッサ900を示している。
【0066】
このため、プロセッサ900の様々な実施態様は、1)統合されたグラフィックス及び/又は科学的(スループット)ロジック(1つ又は複数のコアを含むことができる)である専用ロジック908と、1つ又は複数の汎用コア(例えば汎用インオーダーコア、汎用アウトオブオーダーコア、2つの組み合わせ)であるコア902A〜902Nとを有するCPUと、2)主にグラフィックス及び/又は科学的(スループット)意図の多数の専用コアであるコア902A〜902Nを有するコプロセッサと、3)多数の汎用インオーダーコアであるコア902A〜902Nを有するコプロセッサと、を備えることができる。このため、プロセッサ900は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット多数統合コア(MIC)コプロセッサ(30以上のコアを含む)、組込みプロセッサ等の、汎用プロセッサ、コプロセッサ又は専用プロセッサとすることができる。プロセッサは、1つ又は複数のチップ上に実装することができる。プロセッサ900は、例えば、BiCMOS、CMOS、又はNMOS等の複数のプロセス技術のうちの任意のものを用いた1つ又は複数の基板のうちの一部とすることができ、及び/又はそれらの1つ又は複数の基板上に実装することができる。
【0067】
メモリ階層構造は、一組の統合メモリコントローラーユニット914に結合された、コア内の1つ又は複数のレベルのキャッシュと、一組の1つ若しくは複数の共有キャッシュユニット906、及び外部メモリ(図示せず)とを含む。この一組の共有キャッシュユニット906は、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュ等の1つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はそれらの組み合わせを含むことができる。1つの実施形態では、リングベースの相互接続ユニット912が、統合グラフィックスロジック908、一組の共有キャッシュユニット906、及びシステムエージェントユニット910/統合メモリコントローラーユニット(複数の場合もある)914を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。1つの実施形態では、コヒーレンス性は1つ又は複数のキャッシュユニット906とコア902A〜902Nとの間で維持される。
【0068】
幾つかの実施形態では、コア902A〜902Nのうちの1つ又は複数は、マルチスレッディングすることができる。システムエージェント910は、コア902A〜902Nを協調及び動作させる構成要素を備える。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを備えることができる。PCUは、コア902A〜902N及び統合グラフィックスロジック908の電力状態を調整するのに必要とされるロジック及び構成要素とすることもできるし、それらを備えることもできる。ディスプレイユニットは、1つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
【0069】
コア902A〜902Nは、命令セットアーキテクチャに関して、同種とすることもできるし、異種とすることもできる。すなわち、コア902A〜902Nのうちの2つ以上は、同じ命令セットを実行することができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行することができる。
【0070】
例示的なコンピューターアーキテクチャ 図10図13は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスの技術分野において知られている他のシステム設計及び構成も好適である。一般的に、本明細書において開示するようなプロセッサ及び/又は他の実行ロジックを組み込むことができる膨大な様々のシステム又は電子デバイスが一般に好適である。
【0071】
ここで図10を参照すると、1つの実施形態によるシステム1000のブロック図が示されている。システム1000は、コントローラーハブ1020に結合された1つ又は複数のプロセッサ1010、1015を備えることができる。1つの実施形態では、コントローラーハブ1020は、グラフィックスメモリコントローラーハブ(GMCH)1090及び入出力ハブ(IOH)1050(別個のチップ上に存在することができる)を含み、GMCH1090は、メモリと、メモリ1040及びコプロセッサ1045が結合されたグラフィックスコントローラーとを含み、IOH1050は入/出力(I/O)デバイス1060をGMCH1090に結合する。代替的に、メモリ及びグラフィックスコントローラーの一方又は双方が(本明細書に説明されるように)プロセッサ内に統合され、メモリ1040及びコプロセッサ1045は、プロセッサ1010と、IOH1050を有する単一チップ内のコントローラーハブ1020に直接結合される。
【0072】
追加のプロセッサ1015のオプションの特性が図10において破線で示されている。各プロセッサ1010、1015は、本明細書において説明されるプロセッサコアのうちの1つ又は複数を含むことができ、プロセッサ900の或るバージョンとすることができる。
【0073】
メモリ1040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はそれら2つの組み合わせとすることができる。少なくとも1つの実施形態について、コントローラーハブ1020は、フロントサイドバス(FSB)等のマルチドロップバス、クイックパス相互接続(QPI)等のポイントツーポイントインターフェース、又は同様の接続1095を介してプロセッサ(複数の場合もある)1010、1015と通信する。
【0074】
1つの実施形態では、コプロセッサ1045は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組込みプロセッサ等の専用プロセッサである。1つの実施形態では、コントローラーハブ1020は、統合グラフィックスアクセラレーターを含むことができる。
【0075】
物理リソース1010、1015間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性等を含む、或る範囲の利点というメトリックから、様々な相違が存在する可能性がある。
【0076】
1つの実施形態では、プロセッサ1010は、一般的なタイプのデータ処理動作を制御する命令を実行する。これらの命令内には、コプロセッサ命令を埋め込むことができる。プロセッサ1010は、これらのコプロセッサ命令を、アタッチされたコプロセッサ1045によって実行されるべきタイプであるとして認識する。したがって、プロセッサ1010は、これらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)をコプロセッサバス又は他の相互接続上でコプロセッサ1045に発行する。コプロセッサ(複数の場合もある)1045は受信されたコプロセッサ命令を受け取って実行する。
【0077】
ここで図11を参照すると、1つの実施形態による第1のより詳細な例示的なシステム1100のブロック図が示されている。図11に示すように、マルチプロセッサシステム1100は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1150を介して結合された第1のプロセッサ1170及び第2のプロセッサ1180を備える。プロセッサ1170及び1180のそれぞれは、プロセッサ900の或るバージョンとすることができる。1つの実施形態では、プロセッサ1170及び1180はそれぞれプロセッサ1010及び1015である一方で、コプロセッサ1138はコプロセッサ1045である。別の実施形態では、プロセッサ1170及び1180はそれぞれプロセッサ1010及びコプロセッサ1045である。
【0078】
統合メモリコントローラー(IMC)ユニット1172及び1182をそれぞれ備えるプロセッサ1170及び1180が示されている。プロセッサ1170は、そのバスコントローラーユニットの一部として、ポイントツーポイント(P−P)インターフェース1176及び1178も備える。同様に、第2のプロセッサ1180は、P−Pインターフェース1186及び1188を備える。プロセッサ1170、1180は、P−Pインターフェース回路1178、1188を用いたポイントツーポイント(P−P)インターフェース1150を介して情報を交換することができる。図11に示すように、IMC1172及び1182は、プロセッサをそれぞれのメモリ、すなわち、メモリ1132及びメモリ1134に結合する。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部とすることができる。
【0079】
プロセッサ1170、1180はそれぞれ、ポイントツーポイントインターフェース回路1176、1194、1186、1198を用いて、個々のP−Pインターフェース1152、1154を介してチップセット1190と情報を交換することができる。チップセット1190は、高性能グラフィックスインターフェース1139を介してオプションでコプロセッサ1138と情報を交換することができる。1つの実施形態では、コプロセッサ1138は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組込みプロセッサ等の専用プロセッサである。
【0080】
プロセッサが低電力モードになる場合に、いずれか又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶することができるように、いずれかのプロセッサ内又は双方のプロセッサの外部に共有キャッシュ(図示せず)を備えることができ、P−P相互接続を介してプロセッサと更に接続することができる。
【0081】
チップセット1190は、インターフェース1196を介して第1のバス1116に結合することができる。1つの実施形態では、第1のバス1116は、周辺機器相互接続(PCI)バス、又はPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスとすることができる。代替の実施形態も用いることができる。
【0082】
図11に示すように、第1のバス1116を第2のバス1120に結合するバスブリッジ1118とともに、様々なI/Oデバイス1114を第1のバス1116に結合することができる。1つの実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレーター(例えば、グラフィックスアクセラレーター又はデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサ等の1つ又は複数の追加のプロセッサ1115が第1のバス1116に結合される。1つの実施形態では、第2のバス1120は、ローピンカウント(LPC)バスとすることができる。例えば、キーボード及び/又はマウス1122、通信デバイス1127、並びに1つの実施形態では命令/コード及びデータ1130を含むことができるディスクドライブ又は他のマスストレージデバイス等の記憶ユニット1128を含む様々なデバイスを第2のバス1120に結合することができる。さらに、オーディオI/O1124を第2のバス1120に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図11のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
【0083】
ここで図12を参照すると、本発明の1つの実施形態による第2のより詳細な例示的なシステム1200のブロック図が示されている。図11及び図12における同様の要素は、同様の参照符号を有し、図11の或る特定の態様は、図12の他の態様を分かりにくくすることを回避するために、図12から省かれている。
【0084】
図12は、プロセッサ1170、1180がそれぞれ統合メモリ及びI/O制御ロジック(「CL」)1172及び1182を備えることができることを示している。したがって、CL1172、1182は、統合メモリコントローラーユニットを備え、I/O制御ロジックを備える。図12は、CL1172、1182に結合されているのはメモリ1132、1134だけでなく、I/Oデバイス1214も制御ロジック1172、1182に結合されていることを示している。レガシーI/Oデバイス1215は、チップセット1190に結合されている。
【0085】
ここで図13を参照すると、本発明の1つの実施形態によるSoC1300のブロック図が示されている。図9における同様の要素は、同様の参照符号を有する。また、破線のボックスは、更に高度化したSoC上のオプションの特徴部である。図13において、相互接続ユニット(複数の場合もある)1302は、一組の1つ又は複数のコア902A〜902N及び共有キャッシュユニット(複数の場合もある)906を備えるアプリケーションプロセッサ1310と、システムエージェントユニット910と、バスコントローラーユニット(複数の場合もある)916と、統合メモリコントローラーユニット(複数の場合もある)914と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを備えることができる、一組の1つ又は複数のコプロセッサ1320と、スタティックランダムアクセスメモリ(SRAM)ユニット1330と、ダイレクトメモリアクセス(DMA)ユニット1332と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット1340とに結合されている。1つの実施形態では、コプロセッサ(複数の場合もある)1320は、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組込みプロセッサ等の専用プロセッサを含むことができる。
【0086】
本明細書において開示したメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組み合わせで実施することができる。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性メモリ及び不揮発性メモリ及び/又は記憶要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
【0087】
図11に示されているコード1130のようなプログラムコードは、入力命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、1つ又は複数の出力デバイスに既知の方法で適用することができる。この用途のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラー、特定用途向け集積回路(ASIC)、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【0088】
プログラムコードは、処理システムと通信するように高級手続型プログラム言語又はオブジェクト指向型言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
【0089】
少なくとも1つの実施形態の1つ又は複数の態様は、機械によって読み取れると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上に記憶された代表的な命令によって実施することができる。「IPコア」として知られているそのような表現は、有形の機械可読媒体上に記憶することができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
【0090】
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、再書込み可能コンパクトディスク(CD−RW)、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気カード若しくは光カード、又は電子命令を記憶するのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
【0091】
したがって、実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び/又はシステムの特徴を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【0092】
或る特定の例示の実施形態が、説明され、添付図面に示されているが、そのような実施形態は、広範な本発明の単なる例示にすぎず、広範な本発明を制限するものではないこと、及び、本発明は、図示及び説明された特定の構造及び構成に限定されるものではないことが理解されるべきである。なぜならば、この開示を検討すると、他の様々な変更が当業者には思い浮かべることができるからである。このような技術の分野では、成長が速く、更なる進歩が容易に予見されない場合、開示された実施形態は、本開示の原理又は添付の特許請求の範囲の範囲から逸脱することなく技術的進歩を可能にすることによって容易にされるように、構成及び細部が容易に変更可能な場合がある。
本実施形態の例を下記の各項目として示す。
[項目1]
入力データストリーム内のターゲットデータを探索するために、1つ又は複数の履歴バッファー内の複数のロケーションを特定するハッシュ回路と、
前記1つ又は複数の履歴バッファーにおいて、前記ターゲットデータの複数の探索を並列に行う複数の照合エンジンと、
連続クロックサイクルにおいて前記入力データストリーム内の複数のシーケンシャルターゲットデータの探索をパイプライン化するパイプライン回路と、
前記複数の探索及び前記パイプライン化された探索からの結果を選択して前記入力データストリームを圧縮する一致選択器と、
を備える、装置。
[項目2]
前記ハッシュ回路、前記照合エンジン及び前記一致選択器はプロセッサの実行回路内に配置される、項目1に記載の装置。
[項目3]
前記ハッシュ回路、前記照合エンジン及び前記一致選択器はプロセッサに結合されたコプロセッサ内に配置される、項目1に記載の装置。
[項目4]
前記複数の探索及び前記パイプライン化された探索から組み立てられた結果をトークンのシーケンス及びヘッダーとして受信する複数のエンコーダーを更に備え、
前記ヘッダーは前記シーケンス内の前記トークンのそれぞれのオフセットに関する情報を提供し、前記エンコーダーは前記トークンを並列にエンコードする、項目1から3のいずれか1項に記載の装置。
[項目5]
前記一致選択器は、前記複数の探索から最も長い一致を選択し、該複数の探索からの該最も長い一致を前記パイプライン化された探索の結果と統合する、項目1から4のいずれか1項に記載の装置。
[項目6]
前記ハッシュ回路は、前記ターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを取得し、前記複数のエントリーは前記1つ又は複数の履歴バッファーの前記複数のロケーションへの複数の参照を含み、前記ハッシュ回路は前記複数の参照を出力して、前記複数のロケーションが並列に読み取られることを可能にする、項目1から5のいずれか1項に記載の装置。
[項目7]
並列デフレート命令に応じて、前記複数の探索及び前記パイプライン化された探索を並列に行う実行回路を更に備える、項目1から6のいずれか1項に記載の装置。
[項目8]
入力データストリーム内のターゲットデータを探索するために、1つ又は複数の履歴バッファー内の複数のロケーションを特定する段階と、
前記1つ又は複数の履歴バッファーにおいて、前記ターゲットデータの複数の探索を並列に行うことと、
連続クロックサイクルにおいて前記入力データストリーム内の複数のシーケンシャルターゲットデータの探索をパイプライン化する段階と、
前記複数の探索及び前記パイプライン化された探索からの結果を選択して、前記入力データストリームを圧縮する段階と、
を含む、方法。
[項目9]
前記複数の探索及び前記パイプライン化された探索からの結果をトークンのシーケンス及びヘッダーとして組み立てる段階と、
前記トークンを並列にエンコードする段階と、
を更に含み、
前記ヘッダーは前記シーケンス内の前記トークンのそれぞれのオフセットに関する情報を提供する、項目8に記載の方法。
[項目10]
前記結果を選択する段階は、
前記複数の探索から最も長い一致を選択する段階と、
前記複数の探索からの前記最も長い一致を前記パイプライン化された探索の結果と統合する段階と、
を更に含む、項目8または9に記載の方法。
[項目11]
前記複数のロケーションを特定する段階は、
前記ターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを取得する段階であって、前記複数のエントリーは前記1つ又は複数の履歴バッファーの前記複数のロケーションへの複数の参照を含む段階と、
前記複数の参照を出力して、前記複数のロケーションが並列に読み取られることを可能にする段階と、
を更に含む、項目8から10のいずれか1項に記載の方法。
[項目12]
スコアボードにおいて前記ターゲットデータの前記複数の探索の結果を追跡する段階と、
前記複数のシーケンシャルターゲットデータのそれぞれについて複数のスコアボードを更新する段階と、
を更に含む、項目8から11のいずれか1項に記載の方法。
[項目13]
命令を受信して、ネットワーク機能を実行する段階と、
前記命令に応じて前記入力データストリームに対しデフレート圧縮を行う段階と、
を更に含み、
前記デフレート圧縮は前記複数の探索及び前記パイプライン化された探索を含む、項目8から12のいずれか1項に記載の方法。
[項目14]
メモリと、
前記メモリに結合された処理回路と、
を備え、
前記処理回路は、
入力データストリーム内のターゲットデータを探索するために、1つ又は複数の履歴バッファー内の複数のロケーションを特定するハッシュ回路と、
前記1つ又は複数の履歴バッファーにおいて、前記ターゲットデータの複数の探索を並列に行う複数の照合エンジンと、
連続クロックサイクルにおいて前記入力データストリーム内の複数のシーケンシャルターゲットデータの探索をパイプライン化するパイプライン回路と、
前記複数の探索及び前記パイプライン化された探索からの結果を選択して前記入力データストリームを圧縮する一致選択器と、
を含む、システム。
[項目15]
前記処理回路はプロセッサの実行回路内に配置される、項目14に記載のシステム。
[項目16]
前記処理回路はプロセッサに結合されたコプロセッサ内に配置される、項目14に記載のシステム。
[項目17]
前記複数の探索及び前記パイプライン化された探索から組み立てられた結果をトークンのシーケンス及びヘッダーとして受信する複数のエンコーダーを更に備え、
前記ヘッダーは前記シーケンス内の前記トークンのそれぞれのオフセットに関する情報を提供し、前記エンコーダーは前記トークンを並列にエンコードする、項目14から16のいずれか1項に記載のシステム。
[項目18]
前記一致選択器は、前記複数の探索から最も長い一致を選択し、該複数の探索からの該最も長い一致を前記パイプライン化された探索の結果と統合する、項目14から17のいずれか1項に記載のシステム。
[項目19]
前記ハッシュ回路は、前記ターゲットデータをハッシュして、ハッシュテーブル内の複数のエントリーを指し示すポインターを取得し、前記複数のエントリーは前記1つ又は複数の履歴バッファーの前記複数のロケーションへの複数の参照を含み、前記ハッシュ回路は前記複数の参照を出力して、前記複数のロケーションが並列に読み取られることを可能にする、項目14から18のいずれか1項に記載のシステム。
[項目20]
並列デフレート命令に応じて、前記複数の探索及び前記パイプライン化された探索を並列に行う実行回路を更に備える、項目14から19のいずれか1項に記載のシステム。
図1A
図1B
図2
図3
図4A
図4B
図5
図6
図7A
図7B
図8A
図8B
図9
図10
図11
図12
図13