(57)【要約】【課題】記憶及び処理のためにデータを効率的に移動させるシステム、装置、及び方法を提供する。【解決手段】プロセッサ内の圧縮ユニットは、複数のハードウェアレーンを含み、２つ以上の入力ワードを選択して圧縮し、それらを複数のハードウェアレーンのうちの２つ以上に割り当てる。割り当てられた各入力ワードが処理されるとき、各ワードはテーブルの複数のエントリのうちのあるエントリと比較される。割り当てられた入力ワードのそれぞれがテーブルの同じエントリを指示すると判定された場合、最も古い入力ワードを有するハードウェアレーンが、テーブルエントリに対する単一の読み取り要求を生成し、最も若い入力ワードを有するハードウェアレーンが、圧縮完了時にテーブルエントリを更新するための単一の書き込み要求を生成する。各ハードウェアレーンは、その割り当てられた入力ワードに基づいて圧縮パケットを生成する。【選択図】図９
2020102258.tif 000002
【特許請求の範囲】
【請求項１】
複数の入力ワードを記憶するように構成された第１のバッファと、
複数のエントリを含むテーブルと、
第１の複数のハードウェアレーンを含む圧縮回路であって、圧縮命令の指示を受け取ることに応答して、
前記複数の入力ワードからの第１の群の２つ以上の入力ワードを前記第１の複数のハードウェアレーンに割り当てることと、
前記第１の群の２つ以上の入力ワードのうちの少なくとも２つが前記テーブルの同じエントリに対応すると判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、
前記第１の群の前記入力ワードのいずれかで前記テーブルを更新するか否かを判定することと、
前記複数の入力ワードからの第２の群の入力ワードを前記第１の複数のハードウェアレーンに割り当てることであって、前記第２の群は前記第１の群とは異なる、ことと、    前記複数の入力ワードに対応するデータを記憶する圧縮パケットを生成することと、  を行うように構成された、圧縮回路と、
を備える、装置。
【請求項２】
前記圧縮回路が、
前記第１の群の入力ワード間の依存関係を判定することと、
前記複数のハードウェアレーンのうちの各ハードウェアレーンについて、前記第１の群の入力ワード間の前記依存関係に基づいて、圧縮パケットのタイプを指定するコマンドを生成することと、
を行うように更に構成された、請求項１に記載の装置。
【請求項３】
アクセスされようとする各テーブルエントリについて、前記圧縮回路が、
前記第１の群の最も若い入力ワードを判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、前記第２の群に前記最も若いワードを転送することと、
を行うように更に構成された、請求項１に記載の装置。
【請求項４】
アクセスされようとする各テーブルエントリについて、前記圧縮回路が、
前記第１の群の最も古い入力ワードを判定することと、
前記複数のハードウェアレーンのうち前記最も古い入力ワードに割り当てられたハードウェアレーンのみから前記テーブル内の入力ワードの読み取り要求を送ることと、
を行うように更に構成された、請求項１に記載の装置。
【請求項５】
前記複数のハードウェアレーンのうちの各ハードウェアレーンについて、前記第１の群の入力ワード間の依存関係を判定することが、前記ハードウェアレーンに割り当てられた入力ワードを第２の入力ワードと比較することを含む、請求項４に記載の装置。
【請求項６】
前記第２の入力ワードが、前記ハードウェアレーンに割り当てられた前記入力ワードについて判定された前記テーブルのエントリに記憶された入力ワードである、請求項５に記載の装置。
【請求項７】
前記第２の入力ワードが、
前記第１の群の前記最も古い入力ワードに割り当てられた前記ハードウェアレーンについては、前記第１の群の各入力ワードについて判定された前記テーブルのエントリに記憶された入力ワードであり、
前記第１の群の前記最も古い入力ワードに割り当てられていない所与のハードウェアレーンについては、前記所与のハードウェアレーンに割り当てられた入力ワードより古い前記最も若い入力ワードである前記第１の群の入力ワードである、請求項５に記載の装置。
【請求項８】
前記圧縮回路が、圧縮パケットのタイプを特定する生成されたコマンドが前記テーブルの更新を指示すると判定することに応答して、前記テーブルに前記第１の群の前記最も若い入力ワードを記憶するように更に構成された、請求項３に記載の装置。
【請求項９】
前記圧縮回路が、圧縮パケットのタイプを特定する生成されたコマンドが前記テーブルの更新を指示すると判定する前に、前記テーブルに前記第１の群の前記最も若い入力ワードを記憶するように更に構成された、請求項３に記載の装置。
【請求項１０】
第２の複数のハードウェアレーンを備える展開回路を更に備え、展開命令の指示の受信に応答して、前記展開回路が、
複数の圧縮パケットからの２つ以上の圧縮パケットの第３の群を前記第２の複数のハードウェアレーンに割り当てることであって、前記第３の群の各圧縮パケットが前記テーブルの同じエントリにアクセスするものとして指示される、ことと、
前記第２の複数のハードウェアレーンの各ハードウェアレーンについて、割り当てられた圧縮パケットのワードを提供するソースが前記テーブルであるか、又は前記割り当てられた圧縮パケットであるかを判定することと、
前記判定されたソースから前記ワードを書き込みバッファに書き込むことと、
を行うように構成された、請求項１に記載の装置。
【請求項１１】
前記展開回路が、
前記第３の群の最も若い圧縮パケットを判定することと、
前記第２の複数のハードウェアレーンのうち前記最も若い圧縮パケットに割り当てられたハードウェアレーンについて、前記ハードウェアレーンの前記ワードを前記テーブルに記憶することと、
を行うように更に構成された、請求項１０に記載の装置。
【請求項１２】
複数の入力ワードを第１のバッファに記憶することと、
圧縮命令の指示を受信することに応答して、
前記複数の入力ワードからの２つ以上の入力ワードの第１の群を第１の複数のハードウェアレーンに割り当てることと、
前記第１の群の２つ以上の入力ワードのうちの少なくとも２つが、複数のエントリを備えるテーブルの同じエントリに対応すると判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、
前記第１の群の前記入力ワードのいずれかで前記テーブルを更新するか否かを判定することと、
前記複数入力ワードからの入力ワードの第２の群を前記第１の複数のハードウェアレーンに割り当てることであって、前記第２の群は前記第１の群とは異なる、ことと、
前記複数の入力ワードに対応するデータを記憶する圧縮パケットを生成することと
を含む、方法。
【請求項１３】
前記２つ以上の割り当てられた入力ワードのそれぞれが、前記テーブル内の複数のエントリのうち同じエントリを指す、対応するインデックスを有する、請求項１２に記載の方法。
【請求項１４】
アクセスされようとする前記テーブル内の各エントリについて、
前記第１の群の最も古い入力ワードを判定することと、
前記テーブル内の入力ワードの読み取り要求を、前記複数のハードウェアレーンのうち前記最も古い入力ワードに割り当てられたハードウェアレーンのみから送ることと
を更に含む、請求項１２に記載の方法。
【請求項１５】
前記２つ以上のハードウェアレーンのハードウェアレーンごとの前記第２の入力ワードが、前記テーブルから読み取られた前記入力ワードである、請求項１４に記載の方法。
【請求項１６】
展開命令の指示の受信に応答して、
記憶された複数の圧縮パケットのうちの２つ以上の圧縮パケットを展開するために選択することと、
前記選択された２つ以上の圧縮パケットに第２の複数のハードウェアレーンのうちの２つ以上のハードウェアレーンを割り当てることと、
前記第２の複数のハードウェアレーンのうちの前記２つ以上のハードウェアレーンのハードウェアレーンごとに、前記圧縮パケットのためのワードを提供するソースが前記テーブルであるか、又は前記圧縮パケットであるかを判定することと、
前記判定されたソースから前記ワードを書き込みバッファに書き込むことと、
を更に含む、請求項１２に記載の方法。
【請求項１７】
メモリと、
キャッシュメモリと、
プロセッサであって、
複数の入力ワードを前記キャッシュメモリにフェッチすることと、
前記複数の入力ワードからの第１の群の２つ以上の入力ワードを第１の複数のハードウェアレーンに割り当てることと、
前記第１の群の２つ以上の入力ワードのうちの少なくとも２つが、テーブル内の複数のエントリのうちの同じエントリに対応すると判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、
前記第１の群の前記入力ワードのいずれかで前記テーブルを更新するか否かを判定することと、
前記複数の入力ワードからの第２の群の入力ワードを前記第１の複数のハードウェアレーンに割り当てることであって、前記第２の群は前記第１の群とは異なる、ことと、    前記複数の入力ワードに対応するデータを記憶する圧縮パケットを生成することと、  を行うように構成されたプロセッサと、
を備えるシステム。
【請求項１８】
前記２つ以上の割り当てられた入力ワードのそれぞれが、前記テーブル内の複数のエントリのうち同じエントリを指す、対応するインデックスを有する、請求項１７に記載のシステム。
【請求項１９】
アクセスされようとする前記テーブルの各エントリについて、前記プロセッサが、
前記第１の群の最も古い入力ワードを判定することと、
前記複数のハードウェアレーンのうち前記最も古い入力ワードに割り当てられたハードウェアレーンのみから前記テーブル内の入力ワードの読み取り要求を送ることと、
を行うように更に構成された、請求項１７に記載のシステム。
【請求項２０】
展開命令の指示の受信に応答して、前記プロセッサが、
複数のパケットのうちの２つ以上のパケットを選択することと、
第２の複数のハードウェアレーンのうちの２つ以上のハードウェアレーンを、前記選択された２つ以上のパケットに割り当てることと、
前記第２の複数のハードウェアレーンのうちの前記２つ以上のハードウェアレーンのハードウェアレーンごとに、前記圧縮パケットのワードを提供するソースが前記テーブルであるか、又は前記圧縮パケットであるかを判定することと、
前記判定されたソースから前記ワードを書き込みバッファに書き込むことと、
を行うように構成された、請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載する実施形態は、演算システムの分野に関し、より詳細には、記憶及び処理のための効率的なデータの移動に関する。
【背景技術】
【０００２】
一般的に、様々な演算システムは、プロセッサ及びメモリを含み、プロセッサは、１つ以上のソフトウェアアプリケーションを処理しながら、命令及びアプリケーションデータのアクセス要求を生成する。プロセッサは、命令及びデータをフェッチするとき、ローカルキャッシュメモリの階層をチェックし、見つからない場合、プロセッサは、例えば、メインメモリ、あるいは、ＣＤ−ＲＯＭ又はハードドライブなど、他のストレージに所望の命令及びデータの要求を発行する。
【０００３】
時には、演算システムで同時に実行するソフトウェアアプリケーションの数は、かなりの数に達する。加えて、様々な演算システムは、中央処理装置（central processing unit、ＣＰＵ）、グラフィック処理ユニット（graphics processing unit、ＧＰＵ）のようなデータ並列プロセッサ、デジタル信号プロセッサ（digital signal processor、ＤＳＰ）など、複数のプロセッサを含む。したがって、複数のソフトウェアアプリケーションを処理するために使用される命令及びデータの量はかなり増える。しかしながら、ローカルキャッシュメモリ内のメモリ記憶場所の記憶空間の量は限られている。したがって、ローカルキャッシュメモリと永続的ストレージとの間の命令及びデータのスワッピングが発生する。
【０００４】
スワッピング及び要求された情報のロードを待つための対応する待ち時間は、演算システムの性能を低下させる。特定の量のデータの記憶量を減らすために、データは圧縮される。そのような圧縮は、データに含まれる個々のデータビットの反復配列を利用する。データがアクセスされようとするとき、そのデータは展開され、次いで、アクセスが完了すると、場合により再圧縮される。
【０００５】
一般的に、中央処理装置（ＣＰＵ）などの汎用プロセッサが、データを圧縮及び／又は展開するためのソフトウェアルーチンを実行しているとき、その汎用プロセッサは、その動作の間、占有される。更に、複数のプロセッサを含むシステムにおいては、多くの場合、ＣＰＵは、所望のデータの取得、圧縮及び展開のサポートを有する唯一のプロセッサである。このため、ＣＰＵは、ローカル及びネットワークデータの取得及び圧縮のうちの１つ以上を実行する間、部分的に又は完全に使用不能になる。更に、その他のプロセッサは、それらに代わってＣＰＵが取得、圧縮及び展開動作を終えるのを待つ間、遅延を被る。
【０００６】
このことから、記憶及び処理のためにデータを効率的に移動する方法及びメカニズムが求められている。
【発明の概要】
【０００７】
記憶及び処理のためにデータを効率的に移動するシステム及び方法が意図されている。各種実施形態において、演算システムは、メモリ、キャッシュメモリ及びプロセッサを含む。圧縮命令の受信に応答して、プロセッサは、メモリからキャッシュメモリにデータをフェッチする。一部の実施形態では、データは複数の入力ワードに区切られる。続いて、プロセッサは、キャッシュメモリからプロセッサ内の読み取りバッファに複数の入力ワードをロードする。プロセッサ内の圧縮ユニットは、圧縮命令を実行する回路を含む。したがって、圧縮ユニットが圧縮命令を処理する間、プロセッサは他の動作を処理するために使用可能である。
【０００８】
一実施形態では、圧縮ユニットは、割り当てられた入力ワードとして使用するために複数のワードのうちの２つ以上の入力ワードを選択する。圧縮ユニットは、圧縮アルゴリズムの動作を実行する複数のハードウェアレーンを含む。複数のハードウェアレーンのうちの２つ以上のハードウェアレーンのそれぞれが、選択された２つ以上の入力ワードのうちの対応する入力ワードに割り当てられる。２つ以上のハードウェアレーンのそれぞれが、少なくともその割り当てられた入力ワードに基づいて、対応する圧縮パケットを生成する。圧縮パケットを生成するために、各ハードウェアレーンは、割り当てられたワードと比較して群内依存関係を決定するための値を使用する。しかしながら、各種実施形態において、同じインデックスを有するワードの第１の群の群内依存関係を決定する前に、辞書は、より若い第２の群のワードについてアクセスされ、この第２の群内の各ワードは同じインデックスを有する。
【０００９】
圧縮ユニットは、圧縮パケットを圧縮パケットの群に結合させる。一部の実施形態では、圧縮ユニットは、２つ以上の群をパックされた群に更に結合させ、パックされた群を書き込みバッファに書き込む。その後、プロセッサは、パックされた群を書き込みバッファから目標記憶場所に送る。
【００１０】
各種実施形態において、割り当てられた各入力ワードが処理されるとき、それは、前に見られたデータと比較されることによって、データビットの反復配列を検索される。一部の実施形態では、前に見られたデータは、辞書と称されるデータ構造体（例えば、テーブルなど）のエントリにおいて記憶される。一部の実施形態では、複数のハードウェアレーンが、統計ベースの圧縮アルゴリズム及び辞書ベースの圧縮アルゴリズムの組合せのステップを実行する。一部の実施形態では、２つ以上のハードウェアレーンに割り当てられた２つ以上の選択された入力ワードの各々は、テーブルの複数のエントリのうちの同じエントリを指す対応するインデックスを有する。一部の実施形態では、テーブルの同じエントリの内容は、２つ以上のハードウェアレーンに現在割り当てられている入力ワードを処理するために辞書から一度読み取られる。一実施形態では、２つ以上の割り当てられた入力ワードのうちの最も古い入力ワードを有するハードウェアレーンが、単一の読み取り要求を生成する。更に、２つ以上の割り当てられた入力ワードのうちの最も若い入力ワードを有するハードウェアレーンが、２つ以上の割り当てられた入力ワードの圧縮が完了したときにテーブルを更新するための単一の書き込み要求を生成する。したがって、シリアル実装のためにテーブルに記憶されるシーケンスの複数の読み取り及び書き込み要求が、複数のハードウェアレーンを使用する並列実装の単一の読み取り要求及び単一の書き込み要求に減らされる。
【００１１】
更なる一実施形態では、プロセッサは、複数のハードウェアレーンを使用する展開ユニットを更に含む。展開命令の受信に応答して、プロセッサは、圧縮パケットをフェッチし、そして、プロセッサ内の展開ユニットは、展開命令を実行する回路を含む。したがって、プロセッサは、展開ユニットが展開命令を処理する間、他の動作を処理するために使用可能である。展開ユニットの複数のハードウェアレーンのそれぞれが、圧縮パケットに基づいてワードを生成する。
【００１２】
以下の説明及び図面を参照すると、これらの及び他の実施形態は更に理解されよう。
【図面の簡単な説明】
【００１３】
本方法及びメカニズムの前述の及び更なる利点は、以下のような添付の図面と併せて以下の説明を参照することによって、より深く理解することができる。
【００１４】
【図１】プロセッサコアの１つの実施形態のブロック図である。
【図２】圧縮／展開ユニットの１つの実施形態のブロック図である。
【図３】圧縮された情報の１つの実施形態のブロック図である。
【図４】圧縮エンジンの１つの実施形態のブロック図である
【図５】圧縮処理の１つの実施形態のブロック図である。
【図６】圧縮処理のもう１つの実施形態のブロック図である。
【図７】圧縮処理のもう１つの実施形態のブロック図である。
【図８】圧縮処理のもう１つの実施形態のブロック図である。
【図９】データを効率的に圧縮する方法の１つの実施形態のフロー図である。
【図１０】展開処理の１つの実施形態のブロック図である。
【図１１】データを効率的に展開する方法の１つの実施形態のフロー図である。
【図１２】圧縮処理のもう１つの実施形態のブロック図である。
【図１３】展開処理のもう１つの実施形態のブロック図である。
【図１４】圧縮処理のもう１つの実施形態のブロック図である。
【００１５】
本開示に記述する実施形態には、各種の変更形態及び代替形態の余地があり得るが、その具体的な実施形態を例として図面に示し、本明細書で詳細に説明する。しかしながら、図面及び図面に関する詳細な説明は、開示する特定の形態に実施形態を限定することを意図しておらず、むしろ、添付の請求項の主旨及び範囲に含まれるすべての変更形態、同等形態、及び代替形態を網羅することを意図することを理解されたい。本出願を通して、「〜し得る（may）」という語は、義務的な意味（すなわち、〜しなければならない（must）を意味する）ではなく、許容的な意味（すなわち、〜する可能性を有することを意味する）で使用される。同様に、「含む（include、including、及びincludes）」という語は、「〜を含むが、それに限定するものではないこと」を意味する。
【００１６】
各種ユニット、回路、又は他の構成要素については、１つ以上のタスクを実行「するように構成される（configured to）」ものとして述べる場合がある。このような文脈では、「〜するように構成される」は、動作中に１つ以上のタスクを実行する「回路を有する（having circuitry）」ことを広く意味する構造の広義な記述である。よって、ユニット／回路／構成要素は、そのユニット／回路／構成要素が現在動作していないときでも、タスクを実装するように構成することができる。一般に、「〜するように構成される」に対応する構造を形成する回路は、ハードウェア回路を含み得る。同様に、各種ユニット／回路／構成要素は、説明の便宜上、１つ以上のタスクを実行すると記述される場合がある。
このような説明は、「〜するように構成される」という語句を含むと解釈されるべきである。１つ以上のタスクを実行するように構成されたユニット／回路／構成要素の記載は、そのユニット／回路／構成要素について米国特許法第１１２条（ｆ）の解釈を援用しないことを明示的に意図している。
【発明を実施するための形態】
【００１７】
以下の説明では、本開示において説明される実施形態の完全な理解を実現するために、多くの具体的な詳細が記載される。しかしながら、本実施形態は、これらの具体的な詳細なく実施され得ることが、当業者には理解されよう。いくつかの例では、よく知られている回路、構造体、及び技法は、説明を容易にするために、そして本実施形態の説明を分かり難くすることを避けるために、詳細には示されていない。
【００１８】
図１を参照すると、プロセッサコア１００の１つの実施形態のブロック図が示されている。図示の実施形態において、プロセッサコア１００は、命令フェッチユニット（instruction fetch unit、ＩＦＵ）１１０、コアインターフェース１７０、圧縮／展開ユニット１８０、実行ユニット１３０、及び最終レベルキャッシュ１９０を含む。実行ユニット１３０は、実行ユニット１３０にデータを送り返すためにやはり結合された、ロードストアユニット（load store unit、ＬＳＵ）１５０に結合されている。更に、ＬＳＵ１５０は、次に最終レベルキャッシュ１９０に結合され得るコアインターフェース１７０に結合されている。図示の実施形態において、最終レベルキャッシュ１９０は、例えば、図１に示すような内部バス１０５など、オンチップネットワークを介してメインメモリに結合された、バスインターフェースユニット（bus interface unit、ＢＩＵ）１９５を含む。図１に示された実施形態は、単に一例であり、いくつかの回路ブロックは、明確にするために省略されていることに留意されたい。他の実施形態では、異なる数の回路ブロック及び異なる配置の回路ブロックが使用され得る。
【００１９】
一部の実施形態では、プロセッサコア１００は、演算システム内の独立型プロセッサである。他の実施形態では、プロセッサコア１００は、マルチコアプロセッサの複数のコアのうちの１つである。更に他の実施形態では、プロセッサコア１００を含むマルチコアプロセッサは、システムオンチップ（system-on-a-chip、ＳＯＣ）の複数のダイのうちの１つである。各種実施形態において、プロセッサコア１００は、デスクトップコンピュータ、ポータブルコンピュータ、タブレットコンピュータ、スマートフォン、モバイルデバイス、サーバ、周辺デバイスなどの中の演算システムにおいて使用される。
【００２０】
各種実施形態において、圧縮／展開ユニット１８０は、圧縮／展開アルゴリズムの動作の実行からプロセッサコア１００の残りの部分をオフロードする。したがって、プロセッサコア１００の残りの部分は、圧縮／展開ユニット１８０が圧縮／展開アルゴリズムを実行する間、他の動作を処理するために使用可能である。一部の実施形態では、圧縮／展開ユニット１８０は、様々な辞書ベースのアルゴリズムのうちの１つに基づいてデータを圧縮及び展開する。他の実施形態では、圧縮／展開ユニット１８０は、統計ベースのアルゴリズム及び辞書ベースの（テーブルベースの）アルゴリズムの組合せを使用する様々なハイブリッドアルゴリズムのうちの１つに基づいてデータを圧縮及び展開する。本明細書では、「辞書」（「テーブル」とも称される）は、複数のエントリを備えるデータ構造（ハードウェア及び／又はソフトウェアベースの）であり、各エントリは、圧縮工程を経たデータ値を記憶するように構成される。圧縮工程の間、圧縮されようとするデータ値は、それらが以前に見られたかどうか（例えば、全部又は部分的に）を判定するために、辞書に記憶された値と比較される。
【００２１】
図のように、圧縮／展開ユニット１８０は、圧縮エンジン１８２及び展開エンジン１８４を含む。エンジン１８２及び１８４はそれぞれ、圧縮／展開アルゴリズム動作を並列処理する複数のハードウェアレーンを含む。それにより、データの複数の部分が複数のハードウェアレーンによって同時に圧縮／展開されるため、圧縮／展開動作の間のスループットは増える。一実施形態では、圧縮のために送られるデータの各部分は、既知のサイズの入力ワードである。一例では、３２ビットの入力ワードがデータの部分であるが、様々な他のサイズが可能であり、意図されている。
【００２２】
一部の実施形態では、アルゴリズム動作は、スループットを更に増加させる、パイプライン方式である。更に、圧縮エンジン１８２のハードウェアレーンに現在割り当てられた複数の入力ワード間に依存関係が存在するが、一実施形態では、異なる第２の群の入力ワードが、第１の群の入力ワード間の依存関係が決定される前に、ハードウェアレーンに割り当てられる。したがって、第２の群は、第１の群による辞書更新に依存するが、第２の群は、第１の群の入力ワード間の依存関係が決定される前に、圧縮エンジン１８２のハードウェアレーンに割り当てられる。ローカルキャッシュメモリ内のメモリ記憶場所が有する記憶空間の量は限られているが、エンジン１８２及び１８４の比較的高いスループットにより、複数のソフトウェアアプリケーションを処理するために使用される命令及びデータの量は、ローカルキャッシュメモリと永続的ストレージとを切り替える長い待ち時間なしに増えることが可能にされる。
【００２３】
以下で更に詳しく説明するように、圧縮／展開ユニット１８０は、プロセッサコア１００の命令セットアーキテクチャ（instruction set architecture、ＩＳＡ）において定義された圧縮又は展開コマンド／命令の検出に応答して、複数の入力ワードの群としてデータのページを一度に圧縮又は展開する。一部の実施形態では、追加の命令が、プロセッサコア１００のＩＳＡに追加され得る。各種実施形態において、それぞれ符号化／圧縮及び復号化／展開を指示するオペコードを有する２つの命令が、データ圧縮及び展開を実行するＩＳＡに追加される。一部の実施形態では、命令は、ソースページのアドレス及びメモリ内の宛先又は目標ページのアドレスを特定する１つ以上の引数を使用する。一部の実施形態では、この２つの命令はそれぞれ、「マイクロオペ（ｍｉｃｒｏ−ｏｐｓ）」とも称される複数のマイクロオペレーションに変換される。圧縮／展開ユニット１８０は、マイクロオペを処理する。
【００２４】
各種実施形態において、圧縮／展開ユニット１８０は、圧縮又は展開するデータのページをプリフェッチするために、情報を最終レベルキャッシュ１９０に提供する。一部の例では、データのページの要求が、バスインターフェースユニット（bus interface unit、ＢＩＵ）１９５を介してメインメモリに送られ得る。プリフェッチされたページのデータは、最終レベルキャッシュ１９０又は他の適切な場所に記憶され得る。プリフェッチされたページのデータが最終レベルキャッシュ１９０に記憶されると、このページは、圧縮／展開ユニット１８０に含まれる読み取りバッファに転送され得る。エンジン１８２及び１８４のうちの１つが、受信されたページを処理する。エンジン１８２及び１８４を更に説明する前に、プロセッサコア１００の残りの部分を先ず更に説明する。
【００２５】
命令フェッチユニット（instruction fetch unit、ＩＦＵ）１１０は、実行するためにプロセッサコア１００の残りの部分に命令を提供する。図示の実施形態において、ＩＦＵ１１０は、キャッシュ又はメモリからの命令のフェッチ、実行するための様々なスレッドからの命令の選択、及び実行するための様々な機能ユニットへの命令の発行に先立つそのような命令の復号化に関連する様々な動作を実行するように構成され得る。ＩＦＵ１１０は、命令キャッシュ１１４を更に含む。１つの実施形態では、ＩＦＵ１１０は、プロセッサコア１００によって実行される各スレッドに対応するフェッチアドレス（例えば、プログラムカウンタに由来する）を維持するための、及びそれらのフェッチアドレスによる命令キャッシュ１１４からの命令の取得を調整するためのロジックを含み得る。更に、一部の実施形態では、ＩＦＵ１１０は、物理アドレスへの仮想命令アドレスのマップの一部を含み得る。マップの一部は、例えば、ＩＴＬＢ１１５など、命令変換ルックアサイドバッファ（instruction translation lookaside buffer、ＩＴＬＢ）に記憶され得る。
【００２６】
実行ユニット１３０は、ＩＦＵ１１０から発行された特定タイプの命令の結果を実行及び提供するように構成され得る。１つの実施形態では、実行ユニット１３０は、算術、ロジック、及びシフト命令など、実装されたＩＳＡにおいて定義されたある種の整数型及び浮動小数点命令を実行するように構成され得る。一部の実施形態では、プロセッサコア１００は、２つ以上の実行ユニットを含むことができ、各々の実行ユニットは機能上対称であってもなくてもよいことが意図される。
【００２７】
ロードストアユニット（load store unit、ＬＳＵ）１５０は、整数及び浮動小数点ロード及びストア命令など、データメモリ参照を処理するように構成され得る。一部の実施形態では、ＬＳＵ１５０はまた、ＩＦＵ１１０を起源とする命令キャッシュ１１４ミスの処理を助けるように構成され得る。ＬＳＵ１５０は、データキャッシュ１５２と、キャッシュミスを検出し、それに応じてキャッシュインターフェース１７０を介して特定のキャッシュメモリにデータを要求するように構成されたロジックとを含む。１つの実施形態では、データキャッシュ１５２は、すべてのストアが、それらがデータキャッシュ１５２においてヒットするかどうかにかかわらず特定のキャッシュメモリに書き込まれる、ライトスルーキャッシュとして構成され得る。他の実施形態では、データキャッシュ１５２は、ライトバックキャッシュとして実装され得る。
【００２８】
１つの実施形態では、ＬＳＵ１５０は、ミスが保留中になっているメモリアドレスを目標とする追加のメモリアクセスが、追加のキャッシュ要求トラフィックを生成することができないように、データキャッシュ１５２でミスになった保留中のメモリアクセスの記録を記憶するように構成されたミスキューを含み得る。図示の実施形態において、ロード／ストア命令のアドレス生成が、実行ユニット１３０のうちの１つによって実行され得る。命令によって指定されたアドレスモードに応じて、実行ユニット１３０のうちの１つが、算術（例えば、基底値へのインデックス値の追加など）を実行して所望のアドレスを生成し得る。更に、一部の実施形態では、ＬＳＵ１５０は、実行ユニット１３０によって生成された仮想データアドレスを物理アドレスに変換するように構成されたロジックを含み得る。例えば、本実施形態では、ＬＳＵ１５０は、データ変換ルックアサイドバッファ（data translation lookaside buffer、ＤＴＬＢ）１５３を含む。
【００２９】
図２を参照すると、圧縮／展開ユニット２００の１つの実施形態のブロック図が示されている。各種実施形態において、圧縮／展開ユニット２００は、図１の実施形態に描かれるような圧縮／展開ユニット１８０に対応し得る。図示の実施形態において、圧縮／展開ユニット２００は、読み取りバッファ２０１、圧縮エンジン２０４、展開エンジン２０３、辞書２１０、多重回路２０５、書き込みバッファ２０６、有限状態マシン回路２０８、及びプリフェッチ回路２０９を含む。図２のブロック図に描かれた実施形態は単に一例であることに留意されたい。他の実施形態では、異なる回路ブロック及び回路ブロックの異なる配置が可能であり、意図されている。
【００３０】
読み取りバッファ２０１は、データのページの部分が記憶され得る、例えばエントリ２０２ａ及び２０２ｂのような複数のエントリを含み得る。各種実施形態において、エントリは、データの複数のワードの並列処理を可能にするように編成され得る。例えば、一部の実施形態では、エントリは、圧縮エンジン２０４又は展開エンジン２０３のいずれかによって所与の数の３２ビットデータワードの読み取りを可能にするように配置され得る。一部の例では、４つの３２ビットデータワードが、圧縮エンジン２０４又は展開エンジン２０３のいずれかによって読み取られる。他の場合には、別の数のデータワードが可能であり、意図されている。読み取りバッファ２０１は、それらのエンジン内の複数の並列ハードウェアレーンがより多くのデータを受信する準備ができていることを示す、圧縮エンジン２０４及び展開エンジン２０３の各々からの準備完了信号を受信するように更に構成され得る。
【００３１】
一部の例では、読み取りバッファ２０１が、要求されたデータを受信する準備ができていない場合、データは、バスインターフェースユニット（bus interface unit、ＢＩＵ）に含まれるバッファに保持され得る。一実施形態では、ＢＩＵは、様々なキャッシュメモリとシステムメモリとの間でデータが移動されることを可能にする通信バスに結合され得る。一部の実施形態では、読み取りバッファ２０１は、クレジットベースのシステムを使用して、例えばデータキャッシュ２５２などの低レベルキャッシュメモリにデータを要求し得る。以下で更に詳しく説明するように、圧縮エンジン２０４及び展開エンジン２０３はそれぞれ、読み取りバッファ２０１から受信されたデータの部分を、それぞれ圧縮又は展開するように構成され得る。一部の実施形態では、圧縮エンジン２０４及び展開エンジン２０３は、様々な辞書ベースのアルゴリズムのうちの１つに基づいてデータを圧縮及び展開する。他の実施形態では、圧縮エンジン２０４及び展開エンジン２０３は、統計ベースのアルゴリズム及び辞書ベースのアルゴリズムの組合せを使用する様々なハイブリッドアルゴリズムのうちの１つに基づいてデータを圧縮及び展開する。
【００３２】
各種実施形態において、辞書２１０は、複数のエントリを含み得、複数のエントリのそれぞれが、所与のインデックスに対応し、一般に使用されるシーケンスのビットを記憶するように構成される。一部の実施形態では、各エントリは、インデックスを記憶するように構成され得る。他の実施形態では、エントリは、インデックスを記憶しない。一部の例では、辞書２１０は、圧縮しようとするデータの特定のワードのビットから作成されたハッシュ出力を使用してアクセスされる、コンテントアドレッサブルメモリ（content-addressable memory、ＣＡＭ）として実装され得る。他の場合には、辞書２１０は、テーブルエントリがインデックスに対応する定数のままとされる、テーブルなど、直接マップされたデータ記憶構造として実装され得る。例えば、テーブルエントリ７は、辞書２１０が使用される間にわたって、辞書２１０の第７のエントリのままである。したがって、インデックス値はエントリに記憶されない。辞書２１０は、様々な設計スタイルのうちの１つにしたがって、設計され得る。例えば、辞書２１０は、複数のラッチ、フリップフロップ、ランダムアクセスメモリ（ＲＡＭ）セル、又は、様々なエントリに含まれる個々のデータビットを記憶するように構成された他の適切な記憶回路を含み得る。
【００３３】
圧縮及び展開動作の一環として、圧縮エンジン２０４及び展開エンジン２０３は、辞書２１０にアクセスし得る。圧縮及び展開動作の間、圧縮エンジン２０４及び展開エンジン２０３は、その後の圧縮動作を改善するために、辞書２１０内の１つ以上のエントリを更新し得る。一部の実施形態では、圧縮動作及び展開動作は、スループットを更に増やすパイプライン方式である。更に、圧縮エンジン２０３のハードウェアレーンに現在割り当てられた複数の入力ワード間に依存関係が存在するが、一実施形態では、第１の群の入力ワード間の依存関係が決定される前に、異なる第２の群の入力ワードがハードウェアレーンに割り当てられる。したがって、第２の群は、第１の群による辞書２１０の更新に依存するが、第２の群は、第１の群の入力ワード間の依存関係が決定される前に、圧縮エンジン２０３のハードウェアレーンに割り当てられる。
【００３４】
多重回路２０５は、実行されているコマンドに応じた圧縮エンジン２０４又は展開エンジン２０３のいずれかからの出力の選択を可能にする複数の個別データビット多重回路を含み得る。有限状態マシン回路２０８は、圧縮／展開ユニット２００に含まれる様々な他の回路ブロックの動作を制御するための複数の信号を生成するように構成され得る。各種実施形態において、有限状態マシン回路２０８は、受信されたコマンドにおいて指定されたデータのページのプリフェッチを開始するために、命令フェッチユニット、及び信号プリフェッチ回路２０９から圧縮及び展開命令／コマンドを受信し得る。有限状態マシン回路２０８は、追加で、書き込みバッファ２０６から目標記憶場所へのデータのコピーを制御し得る。各種実施形態において、有限状態マシン回路２０８は、前述の機能を実行するように構成された複数の順序及び組合せ論理回路を含み得る。
【００３５】
プリフェッチ回路２０９は、例えば、図２の実施形態に示すようなデータキャッシュ２５２など、低レベルキャッシュにいくつかのラインをフェッチするように構成され得る順序及び組合せ論理回路の任意の適切な組合せを含み得る。一部の実施形態では、プリフェッチ回路２０９は、いくつかの使用可能なクレジットに基づいて演算システムにプリフェッチ要求を送り得る。一部の実施形態では、プリフェッチ回路２０９は、ストライド値に応じてプリフェッチを実行し得る。例えば、圧縮の場合、プロセッサコアは、所望のページの第１のＮ（但し、Ｎは正の整数）ラインをプリフェッチし得、プリフェッチ回路２０９は、各ラインがプリフェッチされた後にストライドをインクリメントし、所望のページのデータの最後にプラスＮのソースアドレスからプリフェッチし得る。
【００３６】
図３を参照すると、圧縮された情報３００の１つの実施形態のブロック図が示されている。一実施形態では、圧縮された情報３００は、圧縮パケット３０１〜３０５、圧縮パケット３１０の群及び圧縮パケット３３０の群のうちの１つ以上を含む。図３に示された圧縮された情報のタイプは、例にすぎない。他の実施形態において、圧縮／展開ユニットは、異なる配置のコマンド及びデータを含み得る異なるパケットタイプを生成及び使用する。
【００３７】
各種実施形態において、各圧縮パケットは、辞書との比較の結果に応じて、コマンド及び可能な他の追加情報を含む。一実施形態では、各コマンドは、特定のパケットタイプを符号化するデータビットの組合せである。操作されているデータの一部のデータビットがすべてゼロである場合、次いで、圧縮パケット３０１は、データのその部分のデータの圧縮されたページにおいて使用され得る。圧縮パケット３０１は単に、解凍されたファイル内のすべてのデータビットがゼロであったことを特定するコマンドを含む。
【００３８】
データの一部が辞書と比較されるとき、一部の実施形態では、３つの可能性のうちの１つが存在する。データのその部分内のデータビットのシーケンスが、辞書内のエントリのいずれとも一致しない場合には、ミスが発生し、圧縮パケット３０２が、データのうちのその部分のデータの圧縮されたページにおいて使用され得る。圧縮パケット３０２は、ビットのこのシーケンスが辞書において見つからなかったことを特定するコマンド、並びにデータの元の部分（ワード）のコピーを含む。一部の実施形態では、ミスは、空間が辞書において使用可能であることを条件として、データのこの部分との一致を可能にすることになる新しいエントリを含むように圧縮エンジンが辞書を修正する結果をもたらし得ることに留意されたい。他の実施形態において、ミスは、圧縮エンジンがワードのコピーのデータで辞書のエントリを置き換える結果をもたらす。エントリは、ワードのデータから生成されたインデックスによって指し示される。
【００３９】
データの一部が、辞書内の既存のエントリと一致した場合には、ヒットが生じ、圧縮パケット３０３が、データのこの部分のデータの圧縮されたページにおいて使用され得る。圧縮パケット３０３は、データのこの部分が辞書内のエントリと一致したことを示すコマンド、並びに、辞書内の一致したエントリを指すインデックスを含む。各種実施形態において、インデックスは、データのこの部分のハッシュでもよい。
【００４０】
一部の例では、データの一部が、辞書内のエントリと部分的に一致し得る。これが生じたとき、圧縮パケット３０４が、データのこの部分のデータの圧縮されたページにおいて使用され得る。圧縮パケット３０４は、部分的ヒットを特定するコマンド、加えて、データのこの部分に部分的に一致する辞書内のエントリに対応するインデックス又はハッシュ、加えて、エントリと一致しないデータのこの部分からの部分的ワードを含み得る。各種実施形態において、データの一部と辞書内の所与のエントリとの間で一致するデータのビット数は、任意の適切な基準に応じて、調整可能であり得る。
【００４１】
一部の実施形態では、圧縮パケット３０１（ゼロ）及び３０３（ヒット）のそれぞれは、辞書を修正せず、一方、圧縮パケット３０２（ミス）及び３０４（部分的ヒット）は、辞書に記憶された情報を有する。一実施形態では、全３２ビットのワード（又は他の選択されたワード長）が、前述のように辞書に記憶される。一部の実施形態では、辞書に書き込まれたワードは、辞書から読み取られたワードに置き換わり、辞書のワードと処理されている現群内のワードとの比較を実行するために使用される。一例では、現群内の３つのワードのそれぞれが、インデックス７などの同じインデックスを有する場合には、辞書のエントリ７が、読み取り要求などによってアクセスされる。エントリ７内のワードが辞書から取得され、現群内の３つのワードと比較される。
【００４２】
現群の最初の２つのワードが、辞書のエントリ７からのワードと一致した場合には、これら２つの比較の結果はヒットとなり、圧縮パケット３０３が、これら２つのワードのそれぞれについて生成される。辞書の修正は、これら２つのワードには実行されない。しかしながら、現群の第３のワードが、エントリ７からのワードと一致しない場合には、比較の結果はミスとなり、圧縮パケット３０２が、この第３のワードについて生成される。更に、この第３のワードが辞書に追加される。一実施形態では、この第３のワードは、辞書内のエントリ７内のワードに置き換わる。したがって、辞書は、この第３のワードについて更新される。
【００４３】
前述の例と同様に、部分的ヒットの比較結果もまた、辞書の更新につながる。第３のワードの一部が、エントリ７内のワードと一致するが、別の異なる部分が一致しない場合には、比較の結果は部分的ヒットとなる。部分的ヒットについて、圧縮パケット３０４が生成される。一例では、現群内の３２ビットの第３のワードのビット１０〜３１が、辞書のエントリ７から取得された３２ビットのワードのビット１０〜３１と一致した場合には、比較結果は部分的ヒットとなる。ビット０〜９は、圧縮パケット３０４に記憶され、一方、この第３のワードの全３２ビットが、辞書のエントリ７内のワードに置き換わる。
【００４４】
図３に示される実施形態において見られるように、圧縮パケット３０３（ヒット）及び圧縮パケット３０４（部分的ヒット）のそれぞれが、生成されたインデックスを記憶する。したがって、後の展開動作の間、インデックスを圧縮パケットから取得することができるので、インデックスは再生成されない。圧縮パケット３０１（ゼロ）は、インデックスを記憶しないが、後の展開動作の間、インデックスは再生成されない。圧縮パケット３０２（ミス）は、生成されたインデックスを記憶しない。したがって、後の展開動作の間、インデックスは、圧縮パケット３０２内のワードの内容から再生成される。
【００４５】
第５のタイプのパケットも使用され得る。圧縮パケット３０５は、いくつかの繰り返されるパケットのカウントを示すコマンドを含み得る。そのようなパケットは、複数の同一パケットを特定のパケットとそれに続くこの特定のパケットがシーケンスにおいて何回生じたかを示すランレングス符号化（run-length encoding、ＲＬＥ）パケットで置き換えるために使用され得る。ＲＬＥパケットを使用することによって、繰り返されるパケットのすべてのインスタンスの代わりに、パケットが繰り返されることになる回数とともにシーケンス内の繰り返されるパケットの単一のコピーのみを記憶することによって、更なる圧縮が達成され得る。
【００４６】
一部の実施形態では、図３に示されるような圧縮パケットは、結合されて群を形成し得る。圧縮パケット３１０の群は、圧縮パケットの群の特定の実施形態を表す。図示された実施形態において、圧縮パケット３１２、３１４、３１６及び３１８は、目標記憶場所に書き込まれ得る単一群にともに連結されている。しかしながら、一部の例では、様々な圧縮パケット内のそれらの対応するペイロードからコマンドを分離することが望ましいことがある。そのような技法を使用する圧縮パケット群３３０の一実施形態が、図３に示されている。図示の実施形態において、ペイロード３３２ａ、３３４ａ、３３６ａ及び３３８ａは、ともに連結されている。同様に、ペイロード３３２ａ〜３３８ａに対応する、コマンドＣｍｄ３３２ｂ、３３４ｂ、３３６ｂ及び３３８ｂは、次いで、前に連結されたペイロードに連結され得る。
【００４７】
図４に移ると、圧縮エンジン４００の１つの実施形態のブロック図が示されている。各種実施形態において、圧縮エンジン４００は、図２の実施形態に示すように圧縮エンジン２０４に対応する。図示された実施形態において、ハードウェアレーン４００は、読み取りインターフェース４０１、パケットジェネレータ４０２、ＲＬＥフィルタ４０３、パケットバッファ４０４、群ジェネレータ４０５、及び書き込みインターフェース４０６を含む。各種実施形態において、構成要素４０１〜４０６のそれぞれが、複数のハードウェアレーンを含む。図４に示す実施形態は単に一例であることに留意されたい。他の実施形態では、異なる回路ブロック及び回路ブロックの異なる配置が用いられ得る。
【００４８】
各種実施形態において、読み取りインターフェース４０１は、読み取りバッファ、例えば、図２に示すような読み取りバッファ２０１、から複数のワードを読み取る。例えば、一部の実施形態において、読み取りインターフェース４０１は、読み取りバッファから、並行して、４つの３２ビットワードを読み取り得る。他の実施形態において、別の数のワード及び別のワードサイズが可能であり、意図されている。読み取りインターフェース４０１は、読み取りバッファから読み取られたデータの何らかのチェックを追加で実行し得る。例えば、読み取りインターフェース４０１は、ゼロ検出ロジックでワードのうちの１つがすべてのゼロを含むかどうかをチェックして判定し得る。また、読み取りインターフェース４０１は、これらのワードのうちのいずれかがその他のワードのうちの１つ以上と同じ又は部分的に同じかをチェックし得る。
【００４９】
また、読み取りインターフェース４０１は、辞書ルックアップで使用されることになるハッシュ又はインデックスを算出し、これらのワードのうちのいずれかが同じインデックスを有するかどうかをチェックして確かめ得る。一例では、４ビットのインデックスが、直接マッピングされた１６エントリ辞書にアクセスするために使用される。一部の実施形態では、読み取りインターフェース４０１は、４ビットインデックスを生成するために、所与の４２ビットワードの特定のビット間で排他的論理和ブール演算を実行し得る。他の実施形態では、読み取りインターフェース４０１は、ワードの特定のビットに基づいてハッシュテーブルにアクセスしてインデックスを生成する。更に他の実施形態において、ハッシュ関数が、所与のワードの特定のビットで実行されてインデックスを生成する。更に、テーブルルックアップのうちの１つ以上、様々なハッシュ関数のうちの１つ、及び様々なブールロジック関数のうちの１つの組合せが、インデックスを生成するために使用される。圧縮エンジン４００は、辞書へのアクセスに使用するためのインデックスを生成する際に、統計ベースの圧縮アルゴリズムと辞書ベースの圧縮アルゴリズムとの組合せを実行する。
【００５０】
一実施形態において、最も左のワードがその群の最も古いワードとなり、最も右のワードがその群の最も若いワードとなるように、群のワードが、読み取りインターフェース４０１によって読み取られる。最も古いワードと最も若いワードとの間のワードは、同様の方式で順序付けされる。他の実施形態では、最も右のワードがその群の最も古いワードであり、最も左のワードがその群の最も若いワードである。一部の実施形態では、２つ以上のワードが同じインデックスを有するとき、各ワードから１つの複数の読み取り要求ではなくて、単一の読み取り要求が辞書に送られる。一実施形態では、読み取りインターフェース４０１は、同じインデックスを有する２つ以上のワードのうちの最も古いワードについてのみ読み取り要求を生成し、同じインデックスを有する２つ以上のワードのうちのその他のワードのために、生成されたインデックスを有する読み取り要求を辞書に送る。
【００５１】
読み取りインターフェース４０１は、パケットジェネレータ４０２にワードを送る前にそれらのワードを記憶するために、複数のフリップフロップ回路、ラッチ及び他の逐次素子を含み得る。また、一部の実施形態において、読み取りインターフェース４０１は、２つ以上のパイプラインステージを含む。このため、一実施形態において、同じインデックスを有する２つ以上のワードのためなどに、辞書の特定のエントリの内容の読み取り要求が、第１のパイプラインステージの最後にパイプライン逐次素子に記憶される。読み取り要求が、後の第２のパイプラインステージで辞書に送られ、一方で、次の群のワードが、読み取りバッファから読み取られ、インデックスが、次の群に対して生成される。
【００５２】
各種実施形態において、パケットジェネレータ４０２は、読み取りインターフェース４０１から受信された各々のワードについて圧縮パケットを生成する。パケットジェネレータ４０２は、所与のワードを辞書内の１つ以上のエントリと比較することによって、図３に示すようなパケットを生成する。１つの実施形態では、ＣＡＭベースの比較回路を使用して、所与のワードが辞書内の各エントリと比較される。他の実施形態では、辞書の特定のエントリを指定するインデックスが、辞書にアクセスするために、及び比較において使用するためのワードを取得するために、使用される。しかしながら、パケットジェネレータ４０２は、複数のハードウェアレーンによる並列実行のために、辞書から取得された内容ではなくて、別のハードウェアレーンからのワードと所与のワードを比較することによって、図３に示すものと同様のパケットを生成する。選択ロジックは、複数のハードウェアレーンのパイプラインステージのロードに基づく。後に例とともに更なる詳細を示す。パケットジェネレータ４０２は、実行された比較に基づいて適切なコマンド及びペイロードを決定し得る。パケットジェネレータ４０２はまた、生成されたパケットをＲＬＥフィルタ４０３に送る前に記憶する複数のフリップフロップ回路を含み得る。
【００５３】
ＲＬＥフィルタ４０３は、同様のパケットのシーケンスを追跡するように構成された順序論理回路又はステートマシンを含み得る。同様のパケットは、例えば、ゼロパケットのシーケンス、すなわち、すべてのゼロデータビットを含むパケット、又は同じ辞書インデックスに対するヒットパケットのシーケンスでもよい。例えばゼロパケットなどの可能なシーケンスの開始が検出されると、ＲＬＥフィルタ４０３は、そのシーケンス内の後続の数のパケットを追跡し得る。シーケンスが終了すると、ＲＬＥフィルタ４０３は、特定のパケットを複製する回数を示すＲＬＥパケットを生成し得る。シーケンス内の初期パケット及びＲＬＥパケットは記憶することができ、これにより、記憶する必要のあるパケットの数を減少させることができる。ＲＬＥパケットは、シーケンスを開始するパケットの追加コピーを生成するために、展開中に使用され得る。
【００５４】
パケットバッファ４０４は、群ジェネレータ４０５による群生成の前にパケットを記憶するために必要な複数のフリップフロップ又は他の適切な記憶回路を含み得る。各種実施形態において、群ジェネレータ４０５は、複数の多重回路及びシフトレジスタを含み得る。多重回路及びシフトレジスタは、他の論理回路とともに、パケットの群の形成を可能にするように配置され得る。一部の実施形態では、パケット群のフォーマットは、図３に示すパケット群のフォーマットに対応し得る。
【００５５】
書き込みインターフェース４０６は、群がパックされた複数のバッファを含み得る。各種実施形態において、書き込みインターフェース４０６は、バッファが満杯になるまで、複数の群を単一のバッファにパックすることができ、その時点で、バッファの内容は、目標記憶場所にコピーされるのを待ち、書き込みバッファに書き込まれ得る。パケットは様々なサイズでよいため、群も様々なサイズでもよい。そのようなものとして、複数の群が、単一のバッファに結合され得る。書き込みインターフェース４０６に含まれるバッファは、書き込みインターフェース４０６内のパイプライン式動作を可能にするように配置され得る。
【００５６】
次に図５を参照すると、圧縮処理５００の１つの実施形態のブロック図が示されている。図示の実施形態において、シリアル処理が、統計ベースの圧縮アルゴリズムと辞書ベースの圧縮アルゴリズムとの組合せを使用するハイブリッド圧縮アルゴリズムについて実行される。図のように、「レーン０」と称される、単一のハードウェアレーンが使用される。複数のハードウェアレーンにおける並列実行を伴う圧縮処理を後から提供する。レーン０は４回示されているが、これは説明を容易にするためであり、単一のハードウェアレーンのみがこの図示の例において使用される。圧縮されるデータの部分は、ワードと称される。図のように、辞書５１０は、最近見られたワードを複数のエントリに記憶する。図示された本例では、辞書５１０は、テーブルなどの直接マッピングされたデータ記憶構造である。辞書５１０は、複数のラッチ、フリップフロップ、ランダムアクセスメモリ（ＲＡＭ）セル、又は、様々なエントリに含まれる個々のデータビットを記憶するように構成された他の適切な記憶回路を含み得る。
【００５７】
図のように、時刻ｔ０に、レーン０にワード０＝Ｃがロードされる。ここで、「Ｃ」は汎用値として用いられ、マルチビット値を表す。ここで、１６進及び他の表現は使用されない。例えば、値「Ｃ」は３２ビットのワードを表し得る。時刻ｔ１に、インデックスがハッシュ関数によって生成され、結果として得られるインデックスは７である。時刻ｔ２に、読み取り要求が生成される。読み取り要求は、インデックス７を特定する。この読み取り要求が辞書５１０に送られ、エントリ７がアクセスされる。値Ｃであるエントリ７に記憶された値は、コピーされ、レーン０に戻される。
【００５８】
時刻ｔ３に、レーン０内の比較ロジックが２つの値を比較する。第１の値は、辞書５１０のエントリ７から取得された値Ｃである。第２の値は、Ｃである、ワード０の値である。比較結果はヒットである。時刻ｔ４に、レーン０内のロジックが、辞書５１０の更新は存在しないと判定する。時刻ｔ５に、２つの動作が開始される。第１の動作は、レーン０にワード１＝Ｃをロードすることである。第２の動作は、ワード０のパケットを構築することである。第１の動作に関して、ワード０＝Ｃの場合には、辞書５１０の更新は行われない。しかしながら、時刻ｔ４で更新が生じた場合には、ワード１＝Ｃの読み取り要求が辞書５１０に送られる前に、それらの更新が終了する必要がある。レーン０にワード１＝Ｃをロードすることが、レーン０の第２のコピーに示される。第２の動作に関して、一実施形態において、生成された圧縮パケットは、図３に描かれたものと同様である。例えば、圧縮パケット３０３が、ワード０について生成され得る。
【００５９】
図のように、時刻ｔ５に、レーン０にワード１＝Ｃがロードされる。再び、レーン０にワード１＝Ｃをロードすることが、レーン０の第２のコピーに示される。ハッシュ関数によりインデックスが生成され、結果として得られるインデックスは７である。時刻ｔ６（説明を容易にするために図示せず）に、読み取り要求が生成される。読み取り要求は、インデックスを７と指定する。この読み取り要求が辞書５１０に送られ、エントリ７がアクセスされる。値Ｃである、エントリ７に記憶されている値は、コピーされ、レーン０に戻される。時刻ｔ７（図示せず）に、レーン０内の比較ロジックが、２つの値を比較する。第１の値は、辞書５１０のエントリ７から取得された値Ｃである。第２の値は、Ｃである、ワード１の値である。比較結果はヒットである。
【００６０】
時刻ｔ８（図示せず）に、レーン０内のロジックは、辞書５１０の更新はないと決定する。時刻ｔ９（図示せず）に、２つの動作が開始される。第１の動作は、ワード２＝Ｃをレーン０にロードすることである。第２の動作は、ワード１のパケットを構築することである。この動作が、ワード２及びワード３について繰り返される。図のように、時刻ｔ１及びｔ５での動作は並行して行われ得るので、シリアル実装が単一のハードウェアレーンと示されるが、後のワードの処理は、先のワードに対して圧縮パケットが生成される前に開始することができる。これにより、他のパイプラインステージが、時刻ｔ１〜ｔ５などの指示された時間の間のみならず、指示された時間内にも使用され得る。例えば、時刻ｔ１に、第１のパイプラインステージはワードをロードすることができ、第２のパイプラインステージはインデックスを生成することができる。しかしながら、比較結果に基づく辞書５１０の更新及び辞書５１０からのエントリの読み取りなど、ワード間の依存関係が存在する。
【００６１】
次に図６を参照すると、圧縮処理６００のもう１つの実施形態のブロック図が示されている。図示の実施形態では、統計ベースの圧縮アルゴリズムと辞書ベースの圧縮アルゴリズムとの組合せを使用するハイブリッド圧縮アルゴリズムのシリアル実行が行われる。図のように、「レーン０」と称される単一のハードウェアレーンが使用される。前述の辞書５１０は、同じ番号を付されている。
【００６２】
図のように、時刻ｔ０に、レーン０にワード０＝Ａがロードされる。時刻ｔ１〜ｔ５に実行される動作は、図５に記載されたのと同じである。しかしながら、ここで、辞書５１０のエントリ７に記憶された値はＡである。時刻ｔ５に、レーン０にワード１＝Ｂがロードされる。値Ｂは値Ａとは異なるが、ハッシュ関数が使用する値Ｂのサブセットは同じインデックスを生成し、それは７である。一例では、このサブセットは、３２ビットワードのビット１０〜１７である。したがって、時刻ｔ７（図示しないが、時刻ｔ３と同等）に、比較ロジックが、ワード１の値Ｂと辞書５１０のエントリ７から取得された値Ａとを比較する。本例では、比較結果はミスである。部分的ヒットの比較結果も可能であるが、本例ではミスを使用する。時刻ｔ８では、この時にはワード１が直近に見られたワードであるため、辞書５１０のエントリ７がワード１の値Ｂで更新される。
【００６３】
時刻ｔ９に、レーン０にワード２＝Ｂがロードされ、インデックス７がハッシュ関数によって生成される。このため、後の時刻ｔ１１（図示しないが、時刻ｔ３と同等）では、比較ロジックが、ワード２の値Ｂと辞書５１０のエントリ７から取得された値Ｂとを比較する。比較結果はヒットである。したがって、辞書５１０は更新を必要としない。
【００６４】
時刻ｔ１３に、レーン０にワード３＝Ｃがロードされる。値Ｃは値Ａ及びＢとは異なるが、ハッシュ関数が使用する値Ｃのサブセットは、同じインデックスを生成し、それは７である。したがって、時刻ｔ１５（図示しないが、時刻ｔ３と同等）に、比較ロジックは、ワード３の値Ｃと辞書５１０のエントリ７から取得された値Ｂとを比較する。本例では、比較結果はミスである。部分的ヒットの比較結果も可能であるが、本例ではミスを使用する。時刻ｔ１６では、この時にはワード３が直近に見られたワードであるため、ワード５１０のエントリ７は、ワード３の値Ｃで更新される。本例で見られるように、比較結果に基づく辞書５１０の更新及び辞書５１０からのエントリの読み取りなど、ワード間には依存関係がある。しかしながら、所与のワードについての辞書５１０のエントリの読み取りは、所与のワードより古い、前に所与のワードに処理されたワードの圧縮パケットの生成から独立している。
【００６５】
次に図７を参照すると、圧縮処理７００の１つの実施形態のブロック図が示されている。図示の実施形態では、統計ベースの圧縮アルゴリズムと辞書ベースの圧縮アルゴリズムとの組合せを使用するハイブリッド圧縮アルゴリズムの並列実行が行われる。図のように、「レーン０」、「レーン１」、「レーン２」、及び「レーン３」と称される、複数のハードウェアレーンが使用される。図示の実施形態では４つのハードウェアレーンが示されているが、別の数の複数のハードウェアレーンが可能であり、意図されている。前述の辞書５１０は、同じ番号を付されている。
【００６６】
前述のように、各々の時刻ｔ１からｔ５の間などの指示された時刻の間のみならず指示された時間内に、パイプラインステージが使用され得る。例えば、時刻ｔ１に、第１のパイプラインステージは複数のワードをロードすることができ、第２のパイプラインステージは複数のロードされたワードのうちの各ワードのインデックスを生成することができる。また、示された時刻のうちの１つ以上が、同じパイプラインステージにおいて配置され得る。例えば、時刻ｔ３及びｔ４で実行される動作は、その動作が所与のクロックサイクル内に完了する場合、単一のパイプラインステージにおいて結合され得る。図のように、時刻ｔ０に、レーン０からレーン３のそれぞれに、ワード０からワード３のうちの対応する１つのワードがロードされる。本例では、ワード０からワード３のそれぞれが、値Ｃを有する。
【００６７】
レーン０からレーン３のうちの所与のハードウェアレーンについて時刻ｔ１〜ｔ５に実行される動作は、いくらかの調整を有して単一のハードウェアレーンについて図５に記載されたのと同じである。例えば、時刻ｔ２に、単一の読み取り要求が、ハードウェアレーンのレーン０からレーン３を代表して、レーン０から辞書５１０に送られる。各種実施形態において、圧縮エンジン内の制御ロジックは、レーン０からレーン３の各ハードウェアレーンが辞書５１０の同じエントリにアクセスすると判定する。各種実施形態において、制御ロジックは、ハードウェア回路において実装される。したがって、レーン０はワード０からワード３のワード群の最も古いワードを有することが知られる。この場合、ワード０は、レーン０においてロードされた最も古いワードである。
【００６８】
また、制御ロジックは、レーン３がワード０からワード３のワード群の最も若いワードを有すると判定する。この場合、ワード３は、レーン３においてロードされた最も若いワードである。ワード０からワード３などの第１の群のワードと、ワード４からワード７を有する後の群のロードされたワードなどの第２の群のワードとの間には、依存関係が存在する。図７の例示の実施形態において、比較結果は、辞書５１０の更新が必要とされることを示さない。しかしながら、ワード３＝Ｃの値が辞書５１０に送られて辞書５１０のエントリ７が更新された場合、破綻は生じない。
【００６９】
ワード０からワード３の比較結果に基づく辞書５１０の更新は、読み取り要求が後のワード４からワード７のうちのいずれか１つについて辞書５１０に送られる前に終了する必要がある。しかしながら、その依存関係は、ワード０からワード３のうちのいずれか２つのワード間の依存関係ではなくて、ワード３である現在最も若いワードによる辞書５１０の更新に基づく。次の例は、この事実を強調する。
【００７０】
次に図８を参照すると、圧縮処理８００のもう１つの実施形態のブロック図が示されている。図示の実施形態において、並列実行が、ハードウェアレーンのレーン０からレーン３及び辞書５１０を再び使用し、ハイブリッド圧縮アルゴリズムについて実行される。図のように、時刻ｔ０に、レーン０からレーン３のそれぞれに、ワード０からワード３のうちの対応するワードがロードされる。本例では、ワード０は値Ａを有し、ワード１及びワード２の各々は値Ｂを有し、ワード３は値Ｃを有する。辞書５１０のエントリ７は、値Ａを有する。レーン０からレーン３の所与のハードウェアレーンについて時刻ｔ１〜ｔ５で実行される動作は、いくらかの調整を有して前述と同じである。時刻ｔ１に、レーン０からレーン３のそれぞれが、各種実施形態において、同じインデックス７を生成することが発見されたとき、回路に実装された制御ロジックは、レーン０が同じインデックスを有するワード０からワード３のワード群のうちの最も古いワードを有すると判定する。また、制御ロジックは、同じインデックスを有するワード０からワード３のワード群の最も若いワードをレーン３が有すると判定する。
【００７１】
一部の実施形態では、ワード０からワード３のうちの少なくとも１つのワードが、別のワードと同じインデックスを有さないとき、この少なくとも１つのワードは、同じインデックスを有するワード群のみを同時に処理するために、次のパイプラインステージにまだ通過しない。例えば、ワード３が１２のインデックスを有する場合、次いで、ワード３は待機する一方で、ワード０からワード２は、辞書５１０にアクセスするために次のパイプラインステージに通過し得る。しかしながら、ワード３はやはり、後のワード４より先にパイプラインステージに沿って移動する。他の実施形態では、その他のワードがそれらのうちで７の同じインデックスを有するときにワード３がインデックス１２などの異なるインデックスを有するとき、ワード３は次のパイプラインステージに通過する。このような場合、辞書５１０は、２つの同時アクセスをサポートするためにデュアルポートされる、又は、ワード３が、この後のパイプラインステージにおいて辞書５１０にアクセスするのを待つ。
【００７２】
もう１つの例では、ワード０、ワード２及びワード３のそれぞれが７のインデックスを有する一方で、ワード１が１２のインデックスを有するとき、各種実施形態において、ワード０は次のパイプラインステージに単独で送られる。その後のクロックサイクルにおいて、ワード１は、次のパイプラインステージに単独で送られる。更に後のパイプラインステージにおいて、ワード２及びワード３のそれぞれが、次のパイプラインステージに送られる。このため、ワード０からワード３の順序は維持され、圧縮パケットの生成は同じ順序を有する。他の実施形態では、ワード０、ワード２及びワード３のそれぞれが、次のパイプラインステージでともに送られるが、ワード１はワード０よりも若く、ワード２よりも古いことを特定する指示は維持される。更に他の実施形態では、ワード０からワード３のそれぞれが次のパイプラインステージに送られ、辞書５１０は２つの同時アクセスをサポートするためにデュアルポートされる。
【００７３】
ワード０からワード３のそれぞれが同じインデックスの７を有する例に戻ると、時刻ｔ２に、単一の読み取り要求が、ハードウェアレーンのレーン０からレーン３を代表して、レーン０から辞書５１０に送られる。時刻ｔ３に、レーン０からレーン３で行われる各比較が、そのレーンの対応するワードの値と辞書５１０のエントリ７から取得された値との間に行われることに留意されたい。このため、ワード０からワード３の各々の間には依存関係が存在するが、辞書５１０のエントリ７からの値Ａのコピーが、レーン０からレーン３の各々において使用される。例えば、図６を再び簡単に参照すると、シリアル実行時に、ワード間の依存関係を考慮したとき、ワード２及びワード３のそれぞれと値Ｂとが比較される。辞書５１０の更新が、各々のワード０からワード３のシリアル処理中に発生した。しかしながら、ここで図８において、並列実行の間に、辞書５１０に対する更新がまだ行われていない辞書５１０のエントリ７のコピーである値Ａと、ワード２及びワード３の各々とが比較される。複数のハードウェアレーンによる並列実行を伴う図８に示す比較結果は、ワード０からワード３の初期値及びエントリ７は同じであるが単一ハードウェアレーンによるシリアル実行を有する図６に示す比較結果とは異なる。
【００７４】
図６の比較結果は、ワード０からワード３のそれぞれに圧縮パケットを生成するために使用することができるが、図８の比較結果は、ワード０からワード３のそれぞれに圧縮パケットを生成するために使用することはできない。しかしながら、ワード４からワード７など、後の第２の群のワードのうちのいずれか１つのワードが辞書５１０にアクセスすることを可能にすることは、ワード０からワード３のうちのいずれか２つのワード間の依存関係ではなくて、ワード３である現在最も若いワードによる辞書５１０の更新に依存する。そのため、ワード３である現在最も若いワードによる辞書５１０の更新が既知であれば、ワード４からワード７など、後の第２のワード群が辞書５１０にアクセスすることが可能にされる。例えば、最も若いワードの更新は、ワード４からワード７など、後の第２のワード群からの読み取り要求に転送（バイパス）され得る。
【００７５】
図示の実施形態では、時刻ｔ４に、ワード３は、同じインデックス（７）を有するワード群（ワード０からワード３）の最も若いワードであることが知られ、更に、少なくとも１つの更新がこのワード群について発生することが知られる。例えば、ミスの比較結果が、辞書５１０は更新されるべきであることを示す。前述のように、部分的ヒットの比較結果もまた、辞書５１０が更新されるべきであることを示す。少なくとも１つの辞書更新の指示が、圧縮パケットの生成のために用いられないこともあるが、この指示は、辞書５１０が更新されるべきか否かを判定するために使用することができる。本例では、制御ロジックは、更新はエントリ７が値Ｃで書かれることであると判定するのに加えて、辞書５１０の更新が発生すると判定する。このため、時刻ｔ５に、ワード０からワード３のそれぞれに圧縮パケットが生成され、同時に、後の第２の群のワード４からワード７がレーン０からレーン３にロードされる。
【００７６】
一部の実施形態では、時刻ｔ４に、後の第２の群のワード４からワード７がレーン０からレーン３にロードされ、ハッシュ関数によって、対応するインデックスが求められる。時刻ｔ５までに、それらが同じインデックスを有する場合、ワード４からワード７のために辞書５１０に読み取り要求が送られる。また、ワード４からワード７もまた同じインデックス７を有する場合、この読み取り要求に対してワード３に対応する更新が転送され得る。このため、レーン０からレーン３は、ワード４からワード７の読み取り要求に先立って、ワード０からワード３間の依存関係は未だ判定されていないにもかかわらず、ワード４からワード７の時刻ｔ６における比較に値Ｃを使用する。
【００７７】
一部の実施形態では、圧縮パケットを生成するための時間的制約はあまりない。複数のパスが圧縮パケット群に行われながら、圧縮パケットを生成するための待ち時間を隠し得る。したがって、時刻ｔ５には、第２の群のワード４からワード７の処理は既に開始している一方で、ワード０からワード７の間の真の依存関係を判定するための制御ロジックが処理を開始し得る。例えば、比較動作のために真の依存値が求められる。再び図６を簡単に参照すると、各々のワード２とワード３との真の依存値は値Ｂであり、値Ａではない。値Ｂは、ワード２より古いワードのうちの最も若いワードであるワード１の値である。ワード０及びワード１の各々はワード２よりも古く、ワード１はこれらの２つのワードのうちの最も若いワードである。同様に、ワード０、ワード１及びワード２のそれぞれはワード３よりも古く、ワード２はこれらの３つのワードのうちの最も若いワードである。ワード２の値もまたＢであり、これは、ワード３の比較動作のために用いられることになる真の依存値である。
【００７８】
真の依存値を求める制御ロジックは、比較ロジック及びマルチプレクサ回路を含み得る。真の依存値を求めるための待ち時間は、特にハードウェアレーンの数が増加するにつれて、かなり長くなり得る。ワード０からワード３の第１の群とワード４からワード７の第２の群との処理の間にこの待ち時間を付加するのではなくて、後の群内固定動作及びそれ以降の圧縮パケット生成においてこの待ち時間を除去及び隠蔽することができる。一部の実施形態では、レーン０にロードされるワードは常に特定のインデックスの最も古いワードなので、レーン０にロードされるワードの固定は決して発生しないことに留意されたい。このため、比較動作のための真の依存値は、常に、辞書５１０から読み取られた値、又は前のワードの処理から転送（バイパス）された値である。
【００７９】
次に図９を参照すると、データを効率的に圧縮する方法９００の１つの実施形態の一般化フロー図が示されている。説明のために、本実施形態（並びに図１１）の工程は順番に示される。しかしながら、他の実施形態では、いくつかの工程は図示されたのとは異なる順序で生じることがあり、いくつかの工程は同時に実行されることがあり、いくつかの工程を他の工程と組み合わせることがあり、いくつかの工程はないことがある。
【００８０】
一部の実施形態では、命令フェッチユニットは、命令キャッシュ又はシステムメモリ内の他の適切な場所から命令を受信する。命令が、復号され、圧縮命令と判定される（ブロック９０２）。一実施形態では、圧縮／解凍ユニットの圧縮エンジンが、ソースページなどのソースデータをソースバッファにロード（プリフェッチ）する（ブロック９０４）。一部の実施形態において、ソースデータは、データキャッシュに先ず記憶され、次いで、圧縮／展開ユニット内の読み取りバッファに記憶される。一実施形態では、プロセッサコアによって第１の数のラインがプリフェッチされ、ソースデータの所望のページに残った残りのラインが、圧縮／展開ユニットに含まれる専用回路によって後からプリフェッチされる。専用回路は、圧縮及び展開動作について異なり得る所定のストライド値を使用してプリフェッチし得る。
【００８１】
複数のハードウェアレーンのうちの少なくとも２つ以上のハードウェアレーンが、ソースデータの対応するワードを割り当てられる（ブロック９０６）。一部の実施形態において、ソースデータは、固定サイズのワードなどの部分に区切られる。アクセスする辞書のエントリをインデックスが指定する、特定のインデックスをワードごとに判定する（ブロック９０８）。辞書は、圧縮又は展開の動作中に、直近に見られたワードを記憶する。前述のように、ワード内の特定のビットフィールドをハッシュ関数とともに使用してインデックスを生成する。第１のワード群、同じ第１のインデックスを有する第１の群内の各ワード、について、辞書にアクセスする（ブロック９１０）。例えば、同じインデックスを有する第１の群内の複数のワードのために、単一の読み取り要求が辞書に送られる。
【００８２】
第１の群の真の群内依存関係を判定する前に、第２のワード群に対して辞書がアクセスされ、この第２の群内の各ワードは同じインデックスを有する（ブロック９１２）。各種実施形態において、第１の群と第２の群のそれぞれは、同じインデックスを有し、それにより、辞書内の同じエントリにアクセスする。第１の群の所与のワードの真の群内依存関係は、第１の群の所与のワードより古い各々のワードの比較結果及び辞書更新である。所与のワードの比較結果及び辞書更新は、第１の群内の所与のワードより若いワードの真の群内依存関係の一部である。第１の群の真の群依存関係は、第１の群の圧縮パケットを生成し、以後のより若い第２の群のために正しく辞書を更新するために使用される。しかしながら、第１の群について最も若いワードが既知であるのみならず、少なくとも１つの辞書更新が第１の群について発生したことが分かった場合、第１の群の真の群内依存関係は未だ知られていないにもかかわらず、第２の群が必要とする辞書更新はここで既知である。第２の群が必要とする辞書更新は、第１の群のインデックスが指す辞書のエントリに書き込まれている第１の群の最も若いワードの値である。各種実施形態において、第１の群の最も若いワードの値が第２の群に転送（バイパス）され、一方、辞書更新は後に又は同時に実際に発生する。
【００８３】
圧縮されたパケット（又は「圧縮パケット」）が、各々の第１の群及び第２の群内のワードに対して生成される（ブロック９１４）。各種実施形態では、少なくとも第１の群について群内固定動作が実行される。一実施形態では、圧縮動作の処理中に、少なくとも１つの辞書更新の指示が、第１の群のインデックスが指す辞書エントリに記憶されたワードのコピーと第１の群の各ワードの比較に基づいて生成される。群内固定（定着）動作中、真の値を求めて第１の群の各ワードと比較することによって、真の群内依存関係が求められる。一部の実施形態において、第１の群の所与のワードの真値は、第１の群の所与のワードより古い、より若いワードの値である。
【００８４】
前述のように、第１の群内の所与のワードと比較するための真の群内依存値を求める制御ロジックは、比較ロジック及びマルチプレクサ回路を含み得る。真の群内依存値を求めるための待ち時間は、特にハードウェアレーンの数が増加するにつれて、かなり長くなり得る。この待ち時間を第１の群の処理と第２の群の処理との間に追加するのではなくて、後の群内固定動作においてこの待ち時間を除去し、隠蔽することができる。圧縮動作の他の例を提供する前に、展開動作の例が次に説明される。
【００８５】
ここで図１０を参照すると、展開処理１０００の１つの実施形態のブロック図が示されている。図示の実施形態において、ハイブリッド圧縮アルゴリズムの並列実行が再び行われる。ここで、並列するハードウェアレーンのレーン０からレーン３は、展開エンジンにおいて使用される。４つのハードウェアレーンが図示の実施形態には示されるが、別の数の複数のハードウェアレーンが可能であり、意図されている。前述の辞書５１０は、同一番号を付されている。圧縮エンジンのハードウェアレーンと同様に、展開エンジンのハードウェアレーンは、パイプラインステージを使用し得る。
【００８６】
図のように、レーン０は、ヒットを特定するＣｍｄ（コマンド）と７のインデックスとを有するパケット０を割り当てられている。名称には「圧縮」が使用されていないが、パケット０からパケット３の各々は、前述のように生成された圧縮パケットである。レーン１は、ミスを特定するＣｍｄと値Ｂのペイロードとを有するパケット１を割り当てられている。レーン２は、ヒットを特定するＣｍｄと７のインデックスとを有するパケット２を割り当てられ、レーン３は、ミスを特定するＣｍｄと値Ｃのペイロードとを有するパケット３を割り当てられている。辞書５１０のエントリ７は、値Ａを最初に記憶する。時刻ｔ１では、インデックスなしのパケットは、それぞれのペイロードから生成されたインデックスを有する。前述のインデックス生成動作が再度使用され得る。図のように、パケット１及びパケット３のそれぞれは、７のインデックスを生成されてある。
【００８７】
各種実施形態において、展開エンジン内の制御ロジックは、７の同じインデックスを有することによりレーン０からレーン３の各ハードウェアレーンは辞書５１０の同じエントリにアクセスすると判定する。各種実施形態において、制御ロジックは、ハードウェア回路で実装される。このため、レーン０は最も古いパケットを有し、レーン３はパケット０からパケット３のうちの最も若いパケットを有することが知られる。時刻ｔ２に、単一の読み取り要求が、ハードウェアレーンのレーン０及びレーン２を代表して、レーン０から辞書５１０に送られる。パケット１及びパケット３のそれぞれは、ペイロードを有しているので、圧縮パケットに対応するワードについては、辞書５１０にアクセスする必要はない。図のように、レーン０及びレーン２のそれぞれは、辞書５１０のエントリ７から値Ａを展開ワードとして受信する。
【００８８】
図６を再び簡単に参照すると、ワード２は値Ｂを有することが理解され得る。したがって、展開エンジンは、図１０においてワード２に誤った値のＡを有する。時刻ｔ２において真の群内依存関係が考慮された場合、値Ｂがワード２に対して判定されることになる。しかしながら、圧縮エンジンと同様に、比較的高いスループットを達成するために、展開エンジンは、このとき真の群内依存関係を判定しない。パケット４からパケット７など、後の第２のパケット群の任意のパケットが辞書５１０にアクセスすることを可能にすることは、パケット０からパケット３のうちのいずれか２つのパケット間の依存関係ではなくて、現在最も若いパケット、すなわちパケット３、による辞書５１０の更新に依存する。したがって、現在最も若いパケット、すなわちパケット３、による辞書５１０の更新が知られると、パケット４からパケット７などの後の第２のパケット群は、辞書５１０にアクセスすることを許される。例えば、最も若いパケットの更新は、後の第２のパケット群からの読み取り要求に転送（バイパス）され得る。
【００８９】
図示の実施形態では、時刻ｔ３に、パケット３は同じインデックス（７）を有するパケット０からパケット３の最も若いパケットであることが知られ、更に、少なくとも１つの更新がこのパケット群について発生することが知られる。例えば、ミスのコマンド（Ｃｍｄ）は、辞書５１０が更新されるべきであることを示す。前述のように、部分的ヒットのコマンドもまた、辞書５１０が更新されるべきであることを示す。少なくとも１つの辞書更新の指示は、展開されたワードを生成するために使用されないことがあるが、この指示は、辞書５１０が更新されるべきかどうかを判定するために使用することができる。
【００９０】
本例では、制御ロジックは、更新はエントリ７が値Ｃで書かれることであると判定することに加えて、辞書５１０の更新が発生すると判定する。このため、時刻ｔ４に、展開されたワードが生成され、各々のパケット０、パケット１、及びパケット３の書き込みバッファに書き込まれ、同時に、後の第２の群のパケット４からパケット７がレーン０からレーン３にロードされる。転送（バイパス）が使用される場合、第２の群のパケット４からパケット７は、更に早くレーン０からレーン３にロードされる。一部の実施形態では、パケット０からパケット３の各々について無条件に群内定着動作が発生する。他の実施形態では、パケット０のような、その群の最も古いパケットは、この動作をスキップする。更に、パケットのコマンドを使用して、特定のパケットについて群内定着が必要かどうかを判定することができる。例えば、ミスコマンドは、ペイロードが正しい展開ワードを有することを示す。一方、ヒットコマンドは、正しい展開ワードが辞書５１０にあることと、後のために待ち時間を隠蔽するために、このときに真の群内依存関係は考慮されていないため、このときに辞書５１０から読み取られたデータは正しくない可能性があることとを示す。
【００９１】
ここで図１１を参照すると、データを効率的に圧縮する方法１１００の１つの実施形態の一般化フロー図が示されている。一部の実施形態では、命令フェッチユニットは、命令キャッシュ又はシステムメモリ内の他の適切な場所から命令を受信する。命令は復号され、展開命令であると判定される（ブロック１１０２）。一実施形態において、圧縮／展開ユニットの展開エンジンは、圧縮パケットのソースページなどのソースデータをソースバッファにロード（プリフェッチ）する（ブロック１１０４）。一部の実施形態では、ソースデータは、データキャッシュに先ず記憶され、次いで、圧縮／展開ユニット内の読み取りバッファに後に記憶される。圧縮エンジンと同様に、様々な方法を使用してソースバッファにデータをプリフェッチすることができる。
【００９２】
複数のハードウェアレーンのうちの少なくとも２つ以上のハードウェアレーンが、ソースデータの対応する圧縮パケットを割り当てられる（ブロック１１０６）。辞書にアクセスするためのインデックスを指定していない圧縮パケットについては、特定のインデックスを判定する（ブロック１１０８）。辞書は、圧縮又は展開動作中に、直近に見られたパケットを記憶する。前述のように、パケット内の特定のビットフィールドをハッシュ関数とともに使用してインデックスを生成する。第１の群のパケット、同じ第１のインデックスを有する第１の群の各パケットについて、辞書にアクセスする（ブロック１１１０）。例えば、単一の読み取り要求が、同じインデックスを有する第１の群の複数のパケットのために辞書に送られ、展開されたワードを有するペイロードを含まない。
【００９３】
第１の群の真の群内依存関係を判定する前に、第２の群のパケットについて辞書がアクセスされ、この第２の群の各パケットは同じインデックスを有する（ブロック１１１２）。各種実施形態において、第１の群及び第２の群のそれぞれは同じインデックスを有し、したがって、辞書内の同じエントリにアクセスする。第１の群の所与のパケットの真の群内依存関係は、パケット内のコマンドとして提供される比較結果、及び第１の群の所与のパケットより古い各々のパケットの辞書更新である。所与のパケットに対する比較結果及び辞書更新は、第１の群内の所与のパケットよりも若いパケットの真の群内依存関係の一部である。第１の群の真の群依存関係は、第１の群の展開ワードを生成し、以降の、より若い第２の群のために正しく辞書を更新するために使用される。しかしながら、第１の群については最も若いパケットが既知であるのみならず、圧縮中に第１の群に対して少なくとも１つの辞書更新が発生したことが知られている場合、第１の群の真の群内依存関係は未だ知られていないにもかかわらず、第２の群が必要とする辞書更新はここで知られる。第２の群が必要とする辞書更新は、第１の群のインデックスが指す辞書のエントリに第１の群の最も若いパケットに対する展開されたワードの値が書き込まれることである。各種実施形態において、第１の群の最も若いパケットの値は第２の群に転送（バイパス）され、一方、辞書の更新は後に又は同時に実際に発生する。
【００９４】
各々の第１の群及び第２の群のパケットに対して展開されたワードが生成される（ブロック１１１４）。各種実施形態では、少なくとも第１の群について群内固定動作が実行される。圧縮エンジンの群内固定（定着）動作と同様に、展開エンジンの群内固定（定着）動作は、第１の群のパケットごとに展開されたワードの真のソースを見つけることによって、真の群内依存関係を判定する。一部の実施形態において、第１の群の所与のパケットのための真値は、第１の群の所定のパケットより古い最も若いパケットの値である。
【００９５】
前述のように、第１の群内の所与のパケットと比較するための真の群内依存値を求める制御ロジックは、比較ロジック及びマルチプレクサ回路を含み得る。真の群内依存値を求めるための待ち時間は、特にハードウェアレーンの数が増加するにつれて、かなり長くなり得る。この待ち時間を第１の群の処理と第２の群の処理との間に追加するのではなくて、後の群内固定動作においてこの待ち時間を除去し、隠蔽することができる。
【００９６】
次に図１２を参照すると、圧縮処理１２００の１つの実施形態のブロック図が示されている。図示の実施形態では、ハードウェアレーンのレーン０からレーン３と辞書５１０とを使用してハイブリッド圧縮アルゴリズムを再び並列実行する。図のように、時刻ｔ０に、レーン０からレーン３の各々にワード０からワード３のうちの対応するワードがロードされる。ワード０からワード３の値は、図８の例示的実施形態で使用される値と同じである。レーン０からレーン３のうちの所与のハードウェアレーンに対する時刻ｔ１〜ｔ５に行われる動作は、いくらかの調整を有して前述と同じである。
【００９７】
この図示の実施形態では、時刻ｔ２に、レーン１からレーン３は、レーンに割り当てられたワードの値と比較するために用いる真の群内依存値を判定する。前述のように、一部の実施形態において、同じインデックスを有するワードのみがパイプライン内をともに進む。また、所与のワードに対する真の群内依存値は、所与のワードよりも古いワードのうちの最も若いワードであることは前述した。したがって、ワードをレーンに割り当て、同じインデックスを有するワードのみがパイプライン内をともに進むことができるようにすることにより、真の依存値は近隣レーン内のワードである。レーン０のワード０の真の依存値は、辞書５１０から読み取られたワードであり、レーン１のワード１の真の依存値はレーン０のワード０であり、レーン２のワード２の真の依存値はレーン１のワード１であり、レーン３のワード３の真の依存値はレーン２のワード２であることが事前に分かっている。多重化回路と比較器は使用しない。そうではなくて、直接ワイヤ経路を用いることができる。したがって、圧縮パケットを生成する前に群内定着動作を必要としない。
【００９８】
次に図１３を参照すると、展開処理１３００の１つの実施形態のブロック図が示されている。図示の実施形態では、ハードウェアレーンのレーン０からレーン３と辞書５１０とを使用してハイブリッド展開アルゴリズムを再び並列実行する。図のように、時刻ｔ０に、レーン０からレーン３のそれぞれに、パケット０からパケット３のうちの対応する１つのパケットがロードされる。パケット０からパケット３の値は、図１０の例示的実施形態で使用される値と同じである。レーン０からレーン３のうちの所与のハードウェアレーンについて時刻ｔ１〜ｔ４に行われる動作は、いくらかの調整を有して前述と同じである。
【００９９】
図示の実施形態では、時刻ｔ２に、レーン１からレーン３は、その展開されたワードを生成するために使用する真の群内依存値を判定する。前述のように、一部の実施形態では、同じインデックスを有するパケットのみがパイプライン内をともに進む。加えて、所与のパケットに対する真の群内依存値は、所与のパケットよりも古いパケットのうちの最も若いパケットであることは前述した。したがって、レーンへのパケットの割り当てと同じインデックスを有するパケットのみがパイプライン内でともに進むことを可能にすることとにより、割り当てられたパケットの各々についてインデックスが既知である時刻ｔ１の後、パケットのコマンド（Ｃｍｄ）を使用して、ペイロード（Ｃｍｄ＝ミス）と近隣レーンからの展開されたワード（Ｃｍｄ＝ヒット）とから選択する。時刻ｔ１〜ｔ２の間、レーン０のパケット０の真の展開ワードは辞書５１０から読み取られたパケットであり、レーン１のパケット１の真の展開ワードはレーン１のペイロードであり、レーン２のパケット２の真の展開ワードはレーン３のペイロードであることが分かっている。いくつかの多重化回路及びＣｍｄ値のための比較器を使用する。しかしながら、待ち時間はまだかなり短いことがあり、したがって、書き込みバッファに展開されたワードを記憶する前に、群内定着動作は必要とされない。
【０１００】
次に図１４を参照すると、圧縮処理１４００の１つの実施形態のブロック図が示されている。本例示的実施形態では、ハードウェアレーンのレーン０からレーン３と辞書５１０とを使用してハイブリッド圧縮アルゴリズムを再び並列実行する。図のように、時刻ｔ０に、レーン０からレーン３の各々にワード０からワード３のうちの対応する１つのワードがロードされる。ワード０からワード３の値は、図８及び図１２の例示的実施形態で使用されている値と同じである。レーン０からレーン３のうちの所与のハードウェアレーンの時刻ｔ１からｔ５に実行される動作は、異なる順序で実行されることを除いて、前述と同じである。
【０１０１】
前述のように、レーン０はワード０からワード３のうちの最も古いワードを有し、レーン３はワード０からワード３のうちの最も若いワードを有することを前もって知ることができる。時刻ｔ２に、レーン０から辞書５１０に単一の読み取り要求が送られる。また、時刻ｔ２に、ワード３である、最も若いワードの値を辞書５１０の後の更新のために記憶しておく。例えば、辞書５１０のエントリ７に書くために、そしてワード４からワード７を有するより若い第２の群に値Ｃを転送（バイパス）するために、ワード３の値Ｃをレジスタに記憶して使用することができる。時刻ｔ４に、真の群内依存値を求める判定が開始する。一部の実施形態において、２つ以上のパイプラインステージの時刻ｔ４での処理工程は持続する。時刻ｔ５に比較を行い、群内定着動作を行わずに圧縮パケットを生成する。
【０１０２】
各種の実施形態では、前述した方法及び／又はメカニズムを実装するためにソフトウェアアプリケーションのプログラム命令が使用され得る。このプログラム命令は、Ｃなどの高レベルプログラミング言語においてハードウェアの挙動を記述する。代替的に、Ｖｅｒｉｌｏｇなどのハードウェア設計言語（hardware design language、ＨＤＬ）を用いてもよい。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶され得る。多数のタイプの記憶媒体が利用可能である。記憶媒体は、プログラム実行のためにプログラム命令及び関連データをコンピュータに提供するために、コンピュータにより使用中にアクセス可能になり得る。一部の実施形態では、ゲートのリストを含むネットリストを合成ライブラリから生成するために、合成ツールがプログラム命令を読み取る。
【０１０３】
前述の実施形態は、実装の非限定的な例にすぎないことが強調される。前述の開示内容が十分に理解されれば、多くの変形形態及び修正形態が当業者には明らかになるであろう。以下の「特許請求の範囲」は、そのような変形形態及び修正形態のすべてを包含するように解釈されることを意図するものである。
【図１】
2020102258.tif 000003
【図２】
2020102258.tif 000004
【図３】
2020102258.tif 000005
【図４】
2020102258.tif 000006
【図５】
2020102258.tif 000007
【図６】
2020102258.tif 000008
【図７】
2020102258.tif 000009
【図８】
2020102258.tif 000010
【図９】
2020102258.tif 000011
【図１０】
2020102258.tif 000012
【図１１】
2020102258.tif 000013
【図１２】
2020102258.tif 000014
【図１３】
2020102258.tif 000015
【図１４】
2020102258.tif 000016
【手続補正書】
【提出日】令和2年3月23日(2020.3.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のエントリを含むテーブルと、
複数のハードウェアレーンを含む圧縮回路であって、圧縮命令の指示を受け取ることに応答して、
２つ以上の入力ワードの第１の群を前記複数のハードウェアレーンに割り当てることと、
前記テーブルの同一エントリに対応する、前記第１の群のうちの少なくとも第１の入力語及び第２の入力語の判定にあわせて、前記テーブルに関する単一の読み取り要求及び単一の書き込み要求を前記第１及び第２の入力語のために生成することと、
前記第１及び第２の入力語の各々のための圧縮パケットを生成することと、
を行うように構成された、圧縮回路と、
を備える、装置。
【請求項２】
前記圧縮回路が、前記複数のハードウェアレーンの一つのレーンに割り当てた各入力ワードのインデックスを作成するよう構成されている、請求項１に記載の装置。
【請求項３】
前記第１の群のうちの第１の入力語及び第２の入力語を判定することは、前記テーブルの同一エントリに対応し、前記圧縮回路は、第１の入力語及び第２の入力語が同一のインデックスを有することを判定するよう構成されている、請求項２に記載の装置。
【請求項４】
前記圧縮回路が、与えられた入力ワードのハッシュに基づき、当該入力ワードに対応するインデックスを作成するよう構成されている、請求項１に記載の装置。
【請求項５】
前記圧縮回路が、前記第１の群の入力ワード間の依存関係を判定する前に、前記第１の群の前記入力ワードのいずれかで前記テーブルを更新するか否かを判定するよう構成されている、請求項１に記載の装置。
【請求項６】
前記圧縮回路が、
前記複数の入力ワードからの第２の群の入力ワードを前記複数のハードウェアレーンに割り当てることであって、前記第２の群は前記第１の群とは異なり、
アクセスされようとする各テーブルエントリについて、さらに、
前記第１の群の最も若い入力ワードを判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、前記第２の群に前記最も若い入力ワードを転送することと、
を行うように構成されている、請求項５記載の装置。
【請求項７】
アクセスされようとする各テーブルエントリについて、前記圧縮回路が、
前記第１の群の最も古い入力ワードを判定することと、
前記複数のハードウェアレーンのうち前記最も古い入力ワードに割り当てられたハードウェアレーンのみから前記テーブル内の入力ワードの読み取り要求を送ることと、
を行うように更に構成されている、請求項６に記載の装置。
【請求項８】
複数のエントリを含むテーブルに入力ワードを記憶することと、
圧縮命令の指示を受信することに応答して、
２つ以上の入力ワードの第１の群を複数のハードウェアレーンに割り当てることと、
前記テーブルの同一エントリに対応する、前記第１の群のうちの少なくとも第１の入力語及び第２の入力語の判定にあわせて、前記テーブルに関する単一の読み取り要求及び単一の書き込み要求を前記第１及び第２の入力語のために生成することと、
前記第１及び第２の入力語の各々のための圧縮パケットを生成することと、
を含む、方法。
【請求項９】
前記複数のハードウェアレーンの一つのレーンに割り当てた各入力ワードのインデックスを作成することを更に含む、請求項８に記載の方法。
【請求項１０】
前記第１の群のうちの第１の入力語及び第２の入力語を判定することは、前記テーブルの同一エントリに対応し、第１の入力語及び第２の入力語が同一のインデックスを有することを判定することを更に含む、請求項９に記載の方法。
【請求項１１】
与えられた入力ワードのハッシュに基づき、当該入力ワードに対応するインデックスを作成することを更に含む、請求項８に記載の方法。
【請求項１２】
前記第１の群の入力ワード間の依存関係を判定する前に、前記第１の群の前記入力ワードのいずれかで前記テーブルを更新するか否かを判定することを更に含む、請求項８に記載の方法。
【請求項１３】
前記複数の入力ワードからの第２の群の入力ワードを前記複数のハードウェアレーンに割り当てることであって、前記第２の群は前記第１の群とは異なり、
アクセスされようとする各テーブルエントリについて、さらに、
前記第１の群の最も若い入力ワードを判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、前記第２の群に前記最も若い入力ワードを転送することと、
を更に含む、請求項１２に記載の方法。
【請求項１４】
アクセスされようとする各テーブルエントリについて、
前記第１の群の最も古い入力ワードを判定することと、
前記複数のハードウェアレーンのうち前記最も古い入力ワードに割り当てられたハードウェアレーンのみから前記テーブル内の入力ワードの読み取り要求を送ることと、
を更に含む、請求項１３に記載の方法。
【請求項１５】
メモリと、
前記メモリに結合されたキャッシュと、
前記メモリ及び前記キャッシュに結合されたプロセッサであって、
２つ以上の入力ワードの第１の群を複数のハードウェアレーンに割り当てることと、
テーブルの同一エントリに対応する、前記第１の群のうちの少なくとも第１の入力語及び第２の入力語の判定にあわせて、前記テーブルに関する単一の読み取り要求及び単一の書き込み要求を前記第１及び第２の入力語のために生成することと、
前記第１及び第２の入力語の各々のための圧縮パケットを生成することと、
を行うように構成されたプロセッサと、
を備えるシステム。
【請求項１６】
前記プロセッサが、前記複数のハードウェアレーンの一つのレーンに割り当てた各入力ワードのインデックスを作成するよう構成されている、請求項１５に記載のシステム。
【請求項１７】
前記第１の群のうちの第１の入力語及び第２の入力語を判定することは、前記テーブルの同一エントリに対応し、前記プロセッサが、第１の入力語及び第２の入力語が同一のインデックスを有することを判定するよう構成されている、請求項１６に記載のシステム。
【請求項１８】
前記プロセッサが、与えられた入力ワードのハッシュに基づき、当該入力ワードに対応するインデックスを作成するよう構成されている、請求項１５に記載のシステム。
【請求項１９】
前記プロセッサが、前記第１の群の入力ワード間の依存関係を判定する前に、前記第１の群の前記入力ワードのいずれかで前記テーブルを更新するか否かを判定するよう構成されている、請求項１５に記載のシステム。
【請求項２０】
前記プロセッサが、
前記複数の入力ワードからの第２の群の入力ワードを前記複数のハードウェアレーンに割り当てることであって、前記第２の群は前記第１の群とは異なり、
アクセスされようとする各テーブルエントリについて、さらに、
前記第１の群の最も若い入力ワードを判定することと、
前記第１の群の入力ワード間の依存関係を判定する前に、前記第２の群に前記最も若い入力ワードを転送することと、
を行うように構成されている、請求項１９記載のシステム。
【外国語明細書】
2020102258000001.pdf