(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-13
(45)【発行日】2023-11-21
(54)【発明の名称】圧縮支援命令
(51)【国際特許分類】
G06F 9/30 20180101AFI20231114BHJP
G06F 17/16 20060101ALI20231114BHJP
【FI】
G06F9/30 350Z
G06F17/16 Q
(21)【出願番号】P 2022515076
(86)(22)【出願日】2020-09-08
(86)【国際出願番号】 US2020049707
(87)【国際公開番号】W WO2021050423
(87)【国際公開日】2021-03-18
【審査請求日】2022-03-07
(32)【優先日】2019-09-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】503260918
【氏名又は名称】アップル インコーポレイテッド
【氏名又は名称原語表記】Apple Inc.
【住所又は居所原語表記】One Apple Park Way,Cupertino, California 95014, U.S.A.
(74)【代理人】
【識別番号】100094569
【氏名又は名称】田中 伸一郎
(74)【代理人】
【識別番号】100103610
【氏名又は名称】▲吉▼田 和彦
(74)【代理人】
【識別番号】100067013
【氏名又は名称】大塚 文昭
(74)【代理人】
【識別番号】100086771
【氏名又は名称】西島 孝喜
(74)【代理人】
【識別番号】100139712
【氏名又は名称】那須 威夫
(74)【代理人】
【識別番号】100210239
【氏名又は名称】富永 真太郎
(72)【発明者】
【氏名】ベインヴィル エリック
(72)【発明者】
【氏名】サゼガリ アリ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特表2002-522821(JP,A)
【文献】米国特許出願公開第2005/0028070(US,A1)
【文献】特開2012-033032(JP,A)
【文献】米国特許出願公開第2019/0065145(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
プロセッサであって、
複数のベクトルレジスタを備えるレジスタファイルと、
前記レジスタファイルに結合された実行コアであって、前記実行コアが、第1のベクトルオペランド、第2のオペランド、及び結果ベクトルオペランドを指定する第1の命令を実行するように構成され、前記第1のベクトルオペランドが、前記複数のベクトルレジスタのうちの第1のベクトルレジスタ内にあり、前記第2のオペランドが、第2のレジスタ内にあり、前記結果ベクトルオペランドが、前記複数のベクトルレジスタのうちの第3のベクトルレジスタに書き込まれ、前記実行コアが、前記第1のベクトルオペランド内の複数のベクトル要素に応答して、前記第2のオペランドから複数のビットフィールドを抽出するように構成され、前記複数のベクトル要素のそれぞれのベクトル要素が、前記複数のビットフィールドのそれぞれのサイズを指定し、前記実行コアが、前記第1の命令を実行することに応答して、前記結果ベクトルオペランド内の対応するベクトル要素として前記抽出された複数のビットフィールドを書き込むように構成される、実行コアと、を備え、
前記実行コアが、前記第1のベクトルオペランド、前記第2のオペランド、及び第2の結果オペランドを指定する第2の命令を実行するように構成され、前記第2の結果オペランドが、第4のレジスタに書き込まれ、前記実行コアが、前記第2の命令の実行に応答して、前記第1のベクトルオペランドの前記ベクトル要素によって指定されるビット数の合計に等しいビット数を前記第2のオペランド
の一部から削除し、前記第2のオペランドの前記一部の残りを前記第2の結果オペランドとして前記第4のレジスタに書き込むように構成される、プロセッサ。
【請求項2】
前記第2のレジスタが、前記複数のベクトルレジスタのうちの1つであり、前記実行コアが、前記第1の命令を実行することに応答して、前記複数のベクトル要素の代わりに複数の連続ビットとして前記第2のレジスタ内の値の一部を解釈するように構成される、請求項1に記載のプロセッサ。
【請求項3】
前記値の第2の部分が、前記複数の連続ビットの数を示すビットカウントである、請求項2に記載のプロセッサ。
【請求項4】
前記削除されたビットが、前記第2のオペランドの最上位ビットであり、前記実行コアが、前記第2の命令を実行することに応答して、前記第2のオペランドの前記一部の残りを前記第4のレジスタの最上位ビットに書き込むように構成される、請求項
3に記載のプロセッサ。
【請求項5】
前記実行コアが、前記第1のベクトルオペランドの前記ベクトル要素によって指定されたビット数の合計を前記ビットカウントから減算して第2のビットカウントを生成し、前記第2の命令を実行することに応答して、前記第2のビットカウントを前記第4のレジスタの第3の部分に書き込むように構成される、請求項4に記載のプロセッサ。
【請求項6】
前記複数のビットフィールドのうちの第1のビットフィールドが、前記第2のオペランドの複数の最上位ビットを含み、前記複数の最上位ビットの数が、前記第1のベクトルオペランド内の前記複数のベクトル要素のうちの第1のベクトル要素によって指定される、請求項1に記載のプロセッサ。
【請求項7】
前記複数のビットフィールドのうちの第2のビットフィールドが、前記第2のオペランド内の前記第1のビットフィールドに隣接し、前記第2のビットフィールド内のビット数が、前記第1のベクトルオペランド内の前記複数のベクトル要素の第2のベクトル要素によって指定され、前記第2のベクトル要素が、前記第1のベクトルオペランド内の前記第1のベクトル要素に隣接している、請求項6に記載のプロセッサ。
【請求項8】
前記実行コアが、前記複数のベクトルレジスタのうちの第2のベクトルレジスタ内の第2のベクトルオペランド、前記複数のベクトルレジスタのうちの第4のベクトルレジスタ内の第3のベクトルオペランド、及び第3の結果オペランドを指定する第3の命令を実行するように構成され、前記実行コアが、前記第3のベクトルオペランドのそれぞれのベクトル要素内の値に応答して、前記第2のベクトルオペランドのそれぞれのベクトル要素から複数のビットフィールドを抽出し、前記第3の命令を実行することに応答して、前記複数のビットフィールドを前記第3の結果オペランドに書き込むように構成される、請求項1に記載のプロセッサ。
【請求項9】
前記実行コアが、前記第3の命令を実行することに応答して、前記第3の結果オペランドの第1の部分内の隣接するビットに前記複数のビットフィールドを書き込むように構成される、請求項8に記載のプロセッサ。
【請求項10】
前記実行コアが、前記第3のベクトルオペランドの前記それぞれのベクトル要素の前記値を合計し、前記第3の命令を実行することに応答して、前記合計を前記第3の結果オペランドの第2の部分に書き込むように構成されている、請求項9に記載のプロセッサ。
【請求項11】
前記実行コアが、第5のレジスタ内の第5のオペランド、第6のレジスタ内の第6のオペランド、及び第4の結果オペランドを有する第4の命令を実行するように構成され、前記第5のオペランドが、第1の複数のビットを有する第1の部分と、前記第1の複数のビットの数を示す第2のビットカウントを有する第2の部分とを含み、前記第6のオペランドが、第2の複数のビットを有する第1の部分と、前記第2の複数のビットの数を示す第3のビットカウントを有する第2の部分とを含み、前記実行コアが、前記第4の命令を実行することに応答して、前記第4の結果オペランドの第1の部分において前記第1の複数のビットと前記第2の複数のビットとを連結するように構成される、請求項1に記載のプロセッサ。
【請求項12】
前記実行コアが、前記第2のビットカウント及び前記第3のビットカウントを合計し、前記第4の命令を実行することに応答して、前記合計を前記第4の結果オペランドの第2の部分に書き込むように構成される、請求項11に記載のプロセッサ。
【請求項13】
前記第5のレジスタ、前記第6のレジスタ、及び前記第4の結果オペランドを記憶する第4の結果レジスタが、前記複数のベクトルレジスタに含まれ、前記実行コアが、前記第4の命令を実行することに応答するベクトル要素の代わりに、前記第5のレジスタ、前記第6のレジスタ、及び前記第4の結果レジスタ内の値を前記第1の部分及び前記第2の部分として解釈するように構成される、請求項11に記載のプロセッサ。
【請求項14】
前記第1のベクトルオペランド内の複数のベクトル要素に基づいて、前記第2のオペランドからベクトル要素位置に複数の可変サイズのビットフィールドをシフトするように構成された複数のシフト回路と、
前記複数のシフト回路のうちのそれぞれ1つに結合され、前記複数のベクトル要素に基づいて前記複数の可変サイズのビットフィールドをマスクするように構成され、前記ベクトル要素位置に複数の抽出された可変サイズのビットフィールドをもたらす、複数のマスク回路と、
を更に備える、請求項1に記載のプロセッサ。
【請求項15】
前記実行コアが、前記複数のシフト回路に結合された加算器回路を更に備え、前記加算器回路が、前記複数のベクトル要素のサブセットを合計して、前記複数のベクトル要素の前記サブセットの前記合計に基づいて前記複数のシフト回路に対するシフト量を生成するように構成される、請求項14に記載のプロセッサ。
【請求項16】
前記第2のレジスタが、前記複数のベクトルレジスタのうちの1つであり、前記実行コアが、前記第1の命令を実行することに応答して、前記第2のレジスタ内の値の一部を前記複数のベクトル要素の代わりに複数の連続ビットとして解釈するように構成され、前記値の第2の部分が、前記複数の連続ビットの数を示すビットカウントであり、前記実行コアが、前記第1のベクトルオペランド、前記第2のオペランド、及び第2の結果オペランドを指定する第2の命令を実行するように構成され、前記第2の結果オペランドが第4のレジスタに書き込まれ、前記実行コアが、
前記第2のオペランドの一部をシフトさせて、前記第1のベクトルオペランドの前記ベクトル要素の合計に等しいビット数を削除するように構成された第2のシフト回路であって、前記第2のシフト回路が前記加算器回路に結合され、前記加算器回路が、前記ベクトル要素を加算し、前記加算器回路の出力をシフト量として提供するように構成される、第2のシフト回路を備え、
前記実行コアが、前記第2の命令を実行することに応答して、前記第2のオペランドの前記一部の残りを前記第4のレジスタ内で前記第2の結果オペランドとして書き込むように構成される、請求項15に記載のプロセッサ。
【請求項17】
前記実行コアが、前記複数のベクトルレジスタのうちの第2のベクトルレジスタ内の第2のベクトルオペランド、前記複数のベクトルレジスタのうちの第4のベクトルレジスタ内の第3のベクトルオペランド、及び第3の結果オペランドを指定する第3の命令を実行するように構成され、
前記複数のシフト回路が、前記第2のベクトルオペランドの各々のベクトル要素を、前記第3のベクトルオペランドの各々のベクトル要素内の値に基づいてシフトするように構成され、
前記複数のマスク回路が、前記第3のベクトルオペランドの前記各々のベクトル要素に基づいて、前記シフトされたベクトル要素をマスクして、可変サイズのビットフィールドを生成するように構成され、
前記実行コアが、隣接するビット内の複数のビットフィールドを含むビットストリームを生成するように前記可変サイズのビットフィールドの論理和をとるように構成され、
前記実行コアが、前記第3の命令を実行することに応答して、前記複数のビットフィールドを前記第3の結果オペランドに書き込むように構成される、請求項16に記載のプロセッサ。
【請求項18】
前記実行コアが、第5のレジスタ内の第5のオペランド、第6のレジスタ内の第6のオペランド、及び第4の結果オペランドを有する第4の命令を実行するように構成され、前記第5のオペランドが、第1の複数のビットを有する第1の部分と、前記第1の複数のビットの数を示す第2のビットカウントを有する第2の部分とを含み、前記第6のオペランドが、第2の複数のビットを有する第1の部分と、前記第2の複数のビットの数を示す第3のビットカウントを有する第2の部分とを含み、
前記実行コアが、前記第2のビットカウントによって前記第2の複数のビットをシフトするように構成された第2のシフト回路を備え、
前記実行コアが、前記第4の結果オペランドの第1の部分において前記第1の複数のビットと前記第2の複数のビットとを連結するように、前記シフトされた第2の複数のビットと前記第1の複数のビットとの論理和をとるように構成される、請求項16に記載のプロセッサ。
【請求項19】
複数のベクトルレジスタを備えるレジスタファイルを有するプロセッサにおいて第1の命令を実行することであって、前記第1の命令が、第1のベクトルオペランド、第2のオペランド、及び結果ベクトルオペランドを指定し、前記第1のベクトルオペランドが、前記複数のベクトルレジスタの第1のベクトルレジスタ内にあり、前記第2のオペランドが、第2のレジスタ内にあり、前記結果ベクトルオペランドが、前記複数のベクトルレジスタの第3のベクトルレジスタに書き込まれる、実行することと、
前記実行中に、前記第1のベクトルオペランド内の複数のベクトル要素に応答して前記第2のオペランドから複数のビットフィールドを抽出することであって、前記複数のベクトル要素の各々のベクトル要素が、前記複数のビットフィールドの各々のビットフィールドのサイズを指定する、抽出することと、
前記実行中に、前記結果ベクトルオペランド内の対応するベクトル要素として抽出された前記複数のビットフィールドを書き込むことと、
前記実行中に、前記第1のベクトルオペランド、前記第2のオペランド、及び第2の結果オペランドを指定する第2の命令を実行することであって、前記第2の結果オペランドが、第4のレジスタに書き込まれる、実行することと、
前記実行中に、前記第2の命令の実行に応答して、前記第1のベクトルオペランドの前記ベクトル要素によって指定されるビット数の合計に等しいビット数を前記第2のオペランド
の一部から削除し、前記第2のオペランドの前記一部の残りを前記第2の結果オペランドとして前記第4のレジスタに書き込むことと、
を含む、方法。
【請求項20】
プロセッサであって、
複数のベクトルレジスタを備えるレジスタファイルと、
前記レジスタファイルに結合された実行コアであって、前記実行コアが、第1のベクトルオペランド、第2のオペランド、及び結果オペランドを指定する第1の命令を実行するように構成され、前記第1のベクトルオペランドが、前記複数のベクトルレジスタのうちの第1のベクトルレジスタ内にあり、前記第2のオペランドが、第2のレジスタ内にあり、前記結果オペランドが、第3のレジスタ内にあり、前記実行コアが、前記第1の命令の実行に応答して、前記第1のベクトルオペランドのベクトル要素によって指定されるビット数の合計に等しいビット数を前記第2のオペランドの一部から削除し、前記第2のオペランドの前記一部の残りを前記結果オペランドの対応する一部として前記第3のレジスタに書き込むように構成される、
プロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書に記載の実施形態は、プロセッサに関し、より具体的には、圧縮/解凍性能及び電力効率を改善するためのプロセッサにおける圧縮支援命令に関する。
【背景技術】
【0002】
圧縮は、コンピューティングデバイスにおいて様々な理由で使用される。例えば、ソフトウェアダウンロードは、ネットワークを介した配信のために圧縮されることができ、インストールのために標的コンピューティングデバイス上で解凍されることができる。携帯型コンピューティングデバイス(例えば、スマートフォン、携帯型デジタルアシスタント、タブレットコンピュータなど)など、場合によっては、ソフトウェアは、解凍され、インストールされ、次いでデバイス上で記憶するために再圧縮されることができる。様々なソフトウェアを圧縮形式で記憶することは、ラップトップ、デスクトップ、サーバなどのより大きなコンピューティングデバイスの記憶デバイスよりも制限されることがある、デバイス上の記憶空間を節約することができる。
【0003】
圧縮/解凍は、主にソフトウェアに実装され、したがって、性能のコスト(及び電池などの制限された電源を有する携帯型デバイス上での電力消費)は、重要であり得る。圧縮アルゴリズムの有効性は、一般に、圧縮比と呼ばれる圧縮結果のサイズに対する圧縮されていない元のサイズの比に関して測定される。残念なことに、所与の圧縮アルゴリズムの有効性は、一般にその複雑さと相関しており、したがって、有効性のコストは、性能(例えば、待ち時間)及び電力である。
【発明の概要】
【0004】
一実施形態では、プロセッサは、圧縮/解凍を実行するときにプロセッサの性能を改善するために圧縮ソフトウェアにおいて使用されることができる1つ以上の圧縮支援命令をサポートする。すなわち、圧縮/解凍タスクは、圧縮支援命令が使用される場合、それらが使用されない場合よりも迅速に実行され、かつ消費電力をより少なくすることができる。場合によっては、より効果的でより複雑な圧縮アルゴリズムのコストは、より効果的でなくより複雑な圧縮アルゴリズムのコストに低減されることができる。
【0005】
下記の詳細な説明は、以下に簡単に記載する添付の図面を参照する。
【図面の簡単な説明】
【0006】
【
図1】有限状態エントロピー(FSE)圧縮アルゴリズムに基づく解凍の一実施形態のブロック図である。
【
図2】複数のインターリーブされたFSEシンボルストリームが同じデコーダ及びビットストリームを共有するFSEアルゴリズムに基づく解凍の最適化の一実施形態のブロック図である。
【
図3】複数のインターリーブされたFSEシンボル及び値ストリームが同じデコーダテーブルを共有するFSEアルゴリズムに基づく解凍の最適化の別の実施形態のブロック図である。
【
図4】ビットスタック読み出し動作の一実施形態を示すブロック図である。
【
図5】ビットスタック書き込み動作の一実施形態を示すブロック図である。
【
図6】トップ解凍支援命令の一実施形態のためのレジスタ入力及び出力を示すブロック図である。
【
図7】ポップ解凍支援命令の一実施形態のためのレジスタ入力及び出力を示すブロック図である。
【
図8】作成圧縮支援命令の一実施形態のためのレジスタ入力及び出力を示すブロック図である。
【
図9】連結圧縮支援命令の一実施形態のためのレジスタ入力及び出力を示すブロック図である。
【
図10】プロセッサを含むシステムの一実施形態のブロック図である。
【
図11】
図10に示すベクトル実行ユニットの一実施形態のブロック図である。
【
図12】トップ命令を実行するためのプロセッサの一実施形態の動作を示すフローチャートである。
【
図13】ポップ命令を実行するためのプロセッサの一実施形態の動作を示すフローチャートである。
【
図14】作成命令を実行するためのプロセッサの一実施形態の動作を示すフローチャートである。
【
図15】連結命令を実行するためのプロセッサの一実施形態の動作を示すフローチャートである。
【0007】
この開示で説明する実施形態には、各種の変更形態及び代替形態の余地があり得るが、その具体的な実施形態を例として図面に示し、本明細書で詳細に説明する。しかし、図面及び図面に関する詳細な説明は、開示する特定の形態に実施形態を限定することを意図しておらず、むしろその意図は、添付の請求項の趣旨及び範囲に含まれる全ての変更形態、均等形態、及び代替形態を網羅することであることを理解されたい。本明細書において用いられる表題は、構成を目的とするにすぎず、説明の範囲を制限するために用いることを意図していない。本出願を通して使用するとき、「~することができる、~し得る、~してもよい(may)」という語は、義務的な意味(すなわち、~しなければならないを意味する)ではなく、許容的な意味(すなわち、~する可能性を有することを意味する)で使用される。同様に、「含む(include、including、及びincludes)」という語は、「~を含むが、それに限定されるものではないこと」を意味する。本明細書で使用される用語「第1の」、「第2の」などは、名詞の前に付くラベルとして使用され、特に言及しない限りいかなるタイプの順序(例えば、空間的、時間的、論理的など)も意味しない。
【0008】
本開示内で、(「ユニット」、「回路」、他の構成要素などと様々に呼ばれることがある)様々なエンティティは、1つ以上のタスク又は動作を実行するように「構成されている(configured)」ものとして記述又は請求されることがある。[1つ以上のタスクを実施する]ように構成されている[実在物]というこの表現は、本明細書では構造(すなわち、電子回路など、物理的なもの)を指すために使用される。より具体的には、この表現は、この構造が動作中に1つ以上のタスクを実施するように配置されたことを示すために使用される。構造は、その構造が現在動作していない場合でも、何らかのタスクを実行する「ように構成されている」と述べられることがある。「出力クロック信号を生成するように構成されているクロック回路」は、例えば、当該の回路が現在使用されていない(例えば、その回路に電源が接続されていない)場合でも、動作中にこの機能を実行する回路を網羅することを意図している。このように、何らかのタスクを実施するように「構成されている」ものとして記述又は具陳されるエンティティは、そのタスクを実装するように実行可能なデバイス、回路、プログラム命令を記憶したメモリなど、物理的なものを指す。この句は、本明細書では無形のものを指すために使用されない。概して、「~ように構成されている」に対応する構造を形成する回路は、ハードウェア回路を含み得る。ハードウェア回路は、組み合わせ論理回路、フロップ、レジスタ、ラッチなどのクロックド記憶デバイス、有限状態マシン、スタティックランダムアクセスメモリ又は埋め込みダイナミックランダムアクセスメモリなどのメモリ、カスタム設計回路、アナログ回路、プログラマブル論理アレイなどの任意の組み合わせを含むことができる。同様に、種々のユニット/回路/構成要素は、説明を簡便にするために、タスク(単数又は複数)を実行するものとして述べられることがある。そのような説明は、「~ように構成されている」という語句を含むものとして解釈されるべきである。
【0009】
「~ように構成されている」という用語は、「~ように構成可能な」を意味することを意図していない。例えば、プログラムされていないFPGAは、何らかの特定の機能を実行する「ように構成可能」であり得るが、その機能を実行する「ように構成されている」とは見なされないであろう。適切なプログラミング後、FPGAは次いで、その機能を実行する「ように構成されている」と言うことができる。
【0010】
一実施形態では、本開示によるハードウェア回路は、回路の記述を、Verilog又はVHDLなどのハードウェア記述言語(hardware description language、HDL)でコーディングすることによって実装されてもよい。HDL記述は、所与の集積回路製造技術のために設計されたセルのライブラリに対して合成されてもよく、タイミング、電力、及び他の理由のために修正されて、結果としてファウンドリに送信することができる最終設計データベースとなり、マスクを生成し、最終的に集積回路を製造することができる。いくつかのハードウェア回路又はその一部も、回路図エディタでカスタム設計して、合成された回路と共に集積回路設計に取り込むことができる。集積回路は、トランジスタを含んでもよく、他の回路素子(例えば、コンデンサ、抵抗、インダクタなどの受動素子)、及びトランジスタと回路素子との間の相互接続を更に含むことができる。いくつかの実施形態は、ハードウェア回路を実現するために一体的に接続された複数の集積回路を実装することができ、及び/又は、いくつかの実施形態では、個別の要素を使用することができる。あるいは、HDL設計は、フィールドプログラマブルゲートアレイ(field programmable gate array、FPGA)などのプログラム可能な論理アレイに統合してもよく、FPGAに実装してもよい。
【0011】
本明細書で使用する「~に基づいて」又は「~に依存して」という用語は、判定に影響を及ぼす1つ以上の要因を記述するために使用される。この用語は、追加の要因が決定に影響を及ぼすことがある可能性を除外しない。すなわち、決定は、指定された要因のみに基づくか、又は、指定された要因並びに他の指定されていない要因に基づき得る。「Bに基づいてAを判定する」という語句を検討する。この語句により、Bは、Aを判定するために使用されるか、又はAの判定に影響を及ぼす要因であることが特定される。この語句は、Aの判定が、Cなど、何らかの他の要因にも基づき得ることを除外しない。この句は、AがBのみに基づいて判定される一実施形態をも網羅することを意図している。本明細書で使用する「~に基づいて」という句は、「~に少なくとも部分的に基づいて」という句と同義である。
【0012】
本開示が特定の一実施態様を指すことを意図しておらず、むしろ、添付の請求項を含む、本開示の趣旨内に入る幅広い実施形態を指すことを意図していることを示すために、本明細書は様々な実施形態への言及を含む。特定の特徴、構造、又は特性は、本開示と一貫性を有するいずれかの適切な方式で組み合わされてもよい。
【0013】
本明細書では、「a」又は「an」という語を使用して要素を指す、又は「the」という語を使用して要素を指す場合がある。これらの語は、要素の1つのインスタンスのみが存在することを意味することを意図するものではない。様々な実施形態では、2つ以上が存在し得る。したがって、「a」、「an」、及び「the」は、1つのみとして明示的に表されない限り、「1つ以上」を意味すると解釈されるべきである。
【0014】
本明細書は、結合されているような様々な構成要素、ユニット、回路などを説明することができる。いくつかの実施形態では、構成要素、ユニット、回路などは、それらが電気的に結合されている(例えば、1つ以上の他の回路を介して直接的に接続されている、又は間接的に接続されている)、及び/又は通信可能に結合されている場合に結合され得る。
【発明を実施するための形態】
【0015】
上述したように、圧縮支援命令の様々な実施形態を実装するプロセッサが開示される。一般に、圧縮支援命令は、圧縮及び/又は解凍を実行するときにプロセッサの性能を改善するように設計された命令とすることができる。したがって、圧縮支援命令は、場合によっては、解凍にのみ使用されることが期待される命令とすることができる。他の場合には、圧縮支援命令は、圧縮のみ、又は圧縮及び解凍の双方で使用されることが期待されることができる。
【0016】
圧縮支援命令及びそれらの用途を説明するために、有限状態エントロピー(FSE)圧縮アルゴリズムのいくつかの実装が示されている。FSEは、例として使用されているが、圧縮の一部として1つ以上のビットストリーム又はビットスタックを使用する機構は、以下に記載される圧縮支援命令から利益を得ることができる。
【0017】
図1は、FSE圧縮データの解凍の一実施形態のブロック図である。
図1に示すように、データは、テーブル10及びビットストリーム12を含む。すなわち、FSE圧縮アルゴリズム単位でデータが圧縮される場合、テーブル10及びビットストリーム12が生成された。初期状態が使用されて、テーブル内の初期エントリを検索することができる。すなわち、状態(参照符号16で図示)は、テーブル10へのインデックスとすることができる。各エントリは、参照符号14に示されるものと同様のデータを含むことができる。特に、エントリは、ベース、シンボル、及びビット数(n)を含むことができる。シンボルは、出力データの一部であり、以前に読み出されたシンボルと組み立てられて、元のデータである出力データストリームを生成するように提供されることができる。すなわち、シンボルは、元のデータの一部であり、データストリームの終わりに連結されることができる(又は初期状態の場合、データストリームを初期化することができる)。ビット数(n)は、ビットストリーム12から消費されるビット数を指定して、ベースに追加されるデルタ値を提供して次の状態を生成することができる。次の状態は、初期状態を置き換え、次のシンボル及び次の状態が生成されることができるテーブルエントリを検索する。次の状態生成、検索、及びシンボル出力を繰り返すことは、非圧縮の元データであるシンボルストリームを連続的に生成することができる。ある時点で、テーブル内のエントリは、データの終わりに到達したことを示すことができる。あるいは、非圧縮データは、固定サイズであってもよく、したがって、次の状態生成、検索、及びシンボル出力は、固定された回数で起こってもよい(固定サイズシンボルと仮定する)。
【0018】
図1の実施形態は、かなり連続的なプロセスであり、したがって、比較的遅い場合がある。様々な実施形態は、より並列な動作を実行することができる。例えば、
図2では、4つの状態が並列に検索されることができる。4つの状態24は、同じデコーダテーブル26を共有する4つのインターリーブされたFSEシンボルストリームに対応することができる。すなわち、シンボルストリームは、互いに独立することができるが、ビットスタック20内でインターリーブされることができる。他の実施形態は、必要に応じて、より多くの又はより少ない並列状態/シンボルストリームを実装することができる。各状態24は、テーブル26からテーブルエントリ22を読み出すことができる。各テーブルエントリ22は、
図1に示されるテーブルエントリ14と同様とすることができる。並列に読み出された4つのテーブルエントリ22の各々は、対応する出力シンボルストリームと連結されることができる(又は初期状態24の対応する出力シンボルストリームを初期化するために)シンボルを提供することができる。各エントリは、ビットスタック20からその指定されたビット数(n)を消費する(
図2の上部のエントリは、ビットスタック20の上部のビットを読み出し、次のエントリダウンは、ビットスタック20から次のビットを読み出すなどである)。したがって、上述したように、ビットスタック20は、シンボルストリームのインターリーブされたビットフィールドを有することができる。結果デルタは、それぞれのエントリ22からベースに追加されて、次の状態24を生成する。
【0019】
図3は、FSEアルゴリズムの並列化形式の別の実施形態を示している。
図3の実施形態では、シンボルを直接テーブル30に記憶する代わりに、シンボルは、テーブル30(値ベース、又はVBase)から読み出されたベース値から生成されることができ、別のビットスタック32(値ビットスタック、又はVBitスタック32)から読み出されたデルタが使用されて、シンボルを生成することができる。すなわち、各シンボルは、VBaseで始まる値の範囲に対応することができ、復号プロセスの所与の点における特定の値は、VBitスタック32からデルタを読み出し、それをVBaseに追加することによって決定される。したがって、テーブルエントリ34は、VBaseと、エントリから出力シンボルを生成するためにVbaseに追加するようにデルタ(VDeltas)として使用されるVBitスタック32から消費するためのビット数(nv)とを含むことができる。更に、各エントリ34は、各エントリからSBaseに追加して次の状態38を生成するためにデルタ(SDeltas)を形成するために状態ビットスタック36(SBitスタック36)から読み出すための状態ベース(SBase)及びビット数(ns)を含むことができる。一実施形態では、VBitスタック32及びSBitスタック36は、スタック内でインターリーブされたVBit及びSBitを有する単一ビットスタックとして実装されることができる。更に他の実施形態では、スタック内のVbitとSbitとのインターリーブと複数のスタックを実装することとの組み合わせが使用されることができる。例えば、16個のシンボルストリームのセットは、4セットの4つのインターリーブシンボルストリーム(例えば、4ビットスタック)として表されることができる。
【0020】
ベクトル命令を含むプロセッサにおいて
図2又は
図3に示される解凍を実行する1つの方法は、ベクトル演算を使用することである。例えば、4つのベクトル要素のベクトルがプロセッサによってサポートされる場合、
図2及び
図3の実施形態は、テーブルルックアップ、次の状態生成、及びシンボル値生成に関与する各動作についての1つのベクトル命令を使用して、テーブルルックアップ、次の状態生成、及びシンボル値生成を実行することができる。しかしながら、ビットスタック読み出し動作は、標準的なベクトル命令を使用してベクトル化することがより困難な場合がある。
【0021】
一般に、ベクトル演算は、各ベクトル要素に対して、並列かつ独立して、1つ以上のベクトルオペランド内の複数のベクトル要素上で指定された演算を実行する。例えば、ベクトル加算演算は、ベクトルオペランド内の対応する位置にベクトル要素を加算し、ベクトル結果オペランドのベクトル要素として合計を生成することができる。4つの要素ベクトルは、ベクトル内の隣接するベクトル要素位置において列挙された順序で、ベクトル要素VE0、VE1、VE2、及びVE3を有する。ベクトル加算は、ソースオペランドのVE0要素を加算して、結果オペランドのVE0要素を生成し、ソースオペランドのVE1要素を加算して、結果オペランドのVE1要素を生成する、などである。例えば、4つの要素ベクトルが使用されるが、他の実施形態は、ベクトルごとに異なる数のベクトル要素を使用することができ、及び/又はベクトルごとに複数のベクトル要素の数をサポートすることができる。例えば、128ビットベクトルレジスタセットは、2個の64ビットベクトル要素、4個の32ビットベクトル要素、8個の16ビットベクトル要素、及び16個の8ビットベクトル要素をサポートすることができる。異なるサイズのベクトル要素としてベクトルレジスタを使用するために、様々なベクトル命令が定義されることができる。
【0022】
したがって、ベクトル演算/命令は、同じサイズであるベクトル要素上で十分に機能し、多くの演算を並行して実行して、ベクトル化可能なアルゴリズムの性能を改善することができる。しかしながら、ビットスタック読み出し動作(及び圧縮中の対応するビットスタック書き込み動作)は、可変サイズ操作であり得る。各ビットスタック読み出しは、1(又は場合によっては0ビット)からアルゴリズムによってサポートされる最大のビット数まで、任意のビット数とすることができる。例えば、
図3のアルゴリズムの一実施形態では、1から32ビットのビットスタック読み出しがサポートされることができる。ビットスタックを固定サイズ要素(例えば、実施例では32ビット)として実装することは、アルゴリズムに対して達成可能な圧縮比を大幅に低減し、したがって、逆効果になる。
【0023】
図1~
図3に示されるものと同様の圧縮アルゴリズムの圧縮及び解凍を実行するためのベクトル演算の使用を強化するために、圧縮支援命令は、ビットスタックからベクトル要素へ(ビットスタック読み出し)、及びベクトル要素からパックされたビットスタックデータへ(ビットスタック書き込み)、ビットスタック読み出し及び書き込み動作を実行するように定義されている。
【0024】
図4~
図5は、一実施形態のための、ベクトルレジスタへの及びベクトルレジスタからのビットスタック読み出し動作及びビットスタック書き込み動作を示している。圧縮支援命令は、(圧縮支援命令を実行すると)プロセッサに、命令のオペランドを記憶する1つ以上のベクトルレジスタ内のデータをベクトル要素ではなくビットスタックデータとして解釈させるように定義されている。したがって、ビットスタックの一部は、本明細書で定義される圧縮支援命令を使用して、ベクトルレジスタにロードされ、処理されることができる。任意のベクトルレジスタが、そのようなオペランドとして指定されることができる。それは、プロセッサにベクトル要素の代わりにビットスタックデータとしてレジスタデータを解釈させる圧縮支援命令の特定のオペランドとしてのベクトルレジスタのコード化である。
【0025】
図4は、ビットスタック読み出し動作を示している。ビットスタックの上位を含むビットスタック40の一部が
図4に示されている。ビットスタックの上位は、
図4の左側にあることができ、デルタx3(スタックの上部)、x2(スタックの上位の隣)、x1、及びx0並びにそれらの下位の追加の値を含むことができる。
図4のx3、x2、x1、及びx0の幅は、各値が1つ以上のビットであり、かつ変化することができることを示すために変化する。第1のベクトルレジスタ42は、スタック上の上位4つのデルタのサイズ(x3に対応するb3、x2に対応するb2など)を記憶する4つのベクトル要素を有する。レジスタ42は、次の状態のセットに基づく所与のテーブル読み出しについての
図2のフィールド「n」から、又は所与のテーブル読み出しについての
図3のフィールド「nv」若しくは「ns」からロードされることができる。
図3の実施形態では、一方は「nv」及び一方は「ns」である2つのベクトルレジスタが使用されてもよい。一般に、ベクトルロード命令又は複数の命令は、テーブル読み出しを実行することができ、ビットスタック読み出しを実行するためにレジスタ42内のサイズ値を分離するための追加のベクトル命令が存在することができる。
【0026】
レジスタ42内のサイズに基づいて、ビットフィールドx3、x2、x1、及びx0がビットスタックの上位から結果ベクトルレジスタ44に抽出されることができ、ビットスタックが更新されて、抽出ビットフィールドを削除することができる。したがって、
図4の更新されたスタック46は、スタックの上位に残りの追加値を含む。スタック40及び46は、スタックの上位がメモリ内に移動するように、メモリ内の値を示すことができる。以下に説明するように、スタックの上位がレジスタにロードされると、ビットスタック読み出しは、(例えば、レジスタの最上位ビット、又はMSBがスタックの上位にビットを有するように)レジスタ内に残されたスタックの新たな上位をシフトすることを含むことができる。
【0027】
ビットスタック読み出し動作は、解凍プロセスの一部とすることができる。ビットスタックの作成は、圧縮アルゴリズムがシンボルを決定し、テーブルエントリ及びビットスタックを生成するため、ビットスタック書き込み動作を含むことができる。
図5は、ビットスタック書き込み動作を示している。
【0028】
図5の初期ビットスタック48は、
図4の更新されたビットスタック46と同様に、スタックの上位に追加値を含む。ビットスタック書き込みの一部としてビットスタックにより多くのビットフィールドをプッシュすることを示すために、
図4のビットスタック48の上位の左側に空間が示されている。ベクトルレジスタ50は、各ビットフィールド(x3に対応するb3、x2に対応するb2など)のサイズに対応するベクトル要素でコード化されることができる。別のベクトルレジスタ52は、ベクトル要素(x3、x2など)としてビットフィールドを有することができる。ベクトルレジスタ50及び52は、他のベクトル命令を使用して、圧縮アルゴリズムにしたがって計算されることができる。ビットスタック書き込み動作は、ビットフィールドx3、x2、x1、及びx0を連結し、それらをビットスタック内で隣接させ、ビットフィールドをビットスタックの上位に書き込み、
図5に示される更新されたビットスタック54を生成する。
【0029】
図4に示すビットスタック読み出し動作を実装するために、本明細書に記載のプロセッサは、一対の圧縮支援命令を含むことができる。これらの命令は、本明細書では「トップ」及び「ポップ」と呼ばれる。トップ命令は、実行されると、プロセッサに、ビットスタックの上位(以下に説明するように、ベクトルレジスタに記憶されることができる)から結果ベクトルレジスタのベクトル要素に複数のビットフィールドを抽出させることができる。ポップ命令は、実行されると、プロセッサに、スタックの上位からビットフィールドを削除させ、スタックの上位を、トップ命令を使用して抽出されていないビットフィールドの次のセットに移動させることができる。
【0030】
図6は、一実施形態のための、トップ命令のソースオペランド及び結果オペランドのブロック図である。
図6の上部では、トップ命令のためのニーモニックが、結果ベクトルレジスタ(RV)、ソーススタックレジスタ(SSR)、及びソースサイズベクトルレジスタ(SSV)と共に示されている。ソーススタックレジスタの内容は、参照符号60で示され、ソースサイズベクトルレジスタの内容は、参照符号62で示され、トップ命令の実行後の結果ベクトルレジスタの内容は、参照符号64で示されている。
【0031】
前述したように、スタックレジスタは、ベクトルレジスタであってもよいが、プロセッサは、レジスタが圧縮支援命令のうちの1つのスタックオペランドとして指定されることによって、内容を異なって解釈してもよい。ベクトルレジスタがビットスタックデータを記憶しているとき、レジスタは、ビットスタックフィールド66及びビットカウントフィールド68を含むことができる。ビットスタックフィールドは、この実施形態では、レジスタのMSB内に複数のビットのMSBを有する複数のビットとすることができる。複数のビットのMSBは、ビットスタックの上位ビットとすることができる。ビットカウントフィールド68は、現在スタックレジスタ内にあるビット数(例えば、ビットスタックフィールド66内の複数のビットの数)とすることができる。一実施形態では、ベクトルレジスタは、128ビットであってもよく、ビットカウントフィールドは、8ビットであってもよい。したがって、この実施形態では、ビットスタックフィールド66は、最大120ビットとすることができる。他の実施形態は、異なるサイズのベクトルレジスタを実装し、より大きい又はより小さいビットスタックフィールド及びビットカウントフィールドをサポートしてもよい。
【0032】
ビットスタックフィールド66内で、ビットフィールドx3、x2、x1、及びx0が
図6で識別される。ビットフィールドは、ソースサイズベクトルレジスタ62内のサイズによって定義される。より具体的には、ソースサイズベクトルレジスタ62は、サイズのベクトルとすることができる。すなわち、サイズは、対応するビットフィールド内のビット数のカウントとすることができる。サイズは、例えば、整数であってもよい。図示の実施形態では、ソースサイズベクトル62に以下の4つのベクトル要素が存在する:ベクトル要素3(VE3)、VE2、VE1、及びVE0。各ベクトル要素は、対応するビットフィールドのサイズを指定する。したがって、ビットフィールドx3は、ビットスタックフィールド66の最上位のb3ビットとすることができる。ビットフィールドx2は、ビットフィールドx3に隣接することができ(例えば、ビットフィールドx2のMSBは、ビットフィールドx3の最下位ビット、又はLSBに隣接することができる)、サイズがb2ビットとすることができる。ビットフィールドx1は、ビットフィールドx2に隣接することができ、サイズがb1ビットとすることができ、ビットフィールドx0は、ビットフィールドx1に隣接することができ、サイズがb0ビットとすることができる。ビットスタックフィールド66内の残りのビットは、
図6において「p」とラベル付けされている。pのMSBは、ビットスタック内の次のビットフィールドのMSBとすることができ、これは、テーブル26又は30から読み出される次のテーブルによって定義されることができる。レジスタ62内のサイズフィールドは、
図6においてベクトル要素上の一部を占めるように示されているが、フィールドは、ベクトル要素全体まで占めることができる。更にまた、結果ベクトルレジスタ64内の抽出ビットフィールドは、ベクトル要素のフルサイズまでとすることができるが、各個々のフィールドのサイズは、サイズベクトルからの対応するベクトル要素によって制御される。
【0033】
ソースサイズベクトルレジスタ62内のサイズフィールドに基づいて、トップ命令を実行するプロセッサは、ビットフィールドを結果ベクトルレジスタ64の対応するベクトル要素に抽出するように構成されることができる。したがって、x3は、結果ベクトルレジスタ64の要素VE3であり、ソースサイズベクトルレジスタ62のVE3のサイズb3に基づいて抽出され、x2は、結果ベクトルレジスタ64の要素VE2であり、ソースサイズベクトルレジスタ62のVE2のサイズb2に基づいて抽出され、x3は、ビットスタックフィールド66のMSBから並列に抽出されるため、b3によっても影響を受ける。x1は、結果ベクトルレジスタ64の要素VE1であり、ソースサイズベクトルレジスタ62のVE1のサイズb1に基づいて抽出され、b3及びb2によっても影響を受け、x0は、結果ベクトルレジスタ64の要素VE0であり、ソースサイズベクトルレジスタ62のVE0のサイズb0に基づいて抽出され、b3、b2、及びb1によっても影響を受ける。
【0034】
図7は、一実施形態のための、ポップ命令のソースオペランド及び結果オペランドのブロック図である。
図7の上部では、ポップ命令のためのニーモニックが、結果スタックレジスタ(RSR)、ソーススタックレジスタ(SSR)、及びソースサイズベクトルレジスタ(SSV)と共に示されている。ソーススタックレジスタの内容は、参照符号60で示され、ソースサイズベクトルレジスタの内容は、参照符号62で示され、ポップ命令の実行後の結果スタックレジスタの内容は、参照符号70で示されている。ポップ命令は、ビットフィールドx3、x2、x1、及びx0の抽出及び消費を反映するようにビットスタックの内容を調整するために、トップ命令とペアにされることが意図されることができる。したがって、同じソースレジスタ60及び62が示されている。しかしながら、ポップ命令は、一般に、任意のソースレジスタでコード化されてもよい。
【0035】
上述したように、ポップ命令を実行するプロセッサは、トップ命令によって消費されたビットフィールドに対応するビットを削除する。したがって、ポップ命令は、ソースサイズベクトルレジスタ62からのサイズベクトル要素b3、b2、b1、及びb0の合計を使用して、レジスタのMSBから始まる、削除するビット数を識別することができる。残りのビット(p)は、pのMSBが結果スタックレジスタ70のMSBであるようにシフトされることができる。更に、ビットカウントフィールド(n’)は、ソーススタックレジスタ60内のビットカウントフィールドnからサイズベクトル要素の合計を減算することによって、参照符号72に示されるように計算されることができる。
【0036】
結果スタックレジスタ70は、ポップ命令においてソーススタックレジスタ60と同じレジスタであるようにコード化されることができ、したがって、トップ命令を使用して次のスタック読み出し動作のためにソーススタックレジスタ60を更新して、ビットフィールドの次のセットを抽出することができることに留意されたい。スタックレジスタ内のビットスタックフィールドが枯渇すると、ロード命令を介してメモリ内の残りのビットスタックから補充されることができる。ベクトルロード命令は、単にデータをレジスタにロードすることができるため、ベクトルロード命令を使用することができる。それは、プロセッサにベクトル要素の代わりにビットスタックとして内容を解釈させるスタックレジスタオペランドとしてのレジスタの使用である。
【0037】
トップ及びポップ命令は、解凍に有用であり得る圧縮支援命令とすることができる。いくつかの実施形態では、1つ以上の圧縮支援命令が、圧縮のために同様に定義されることができる。特に、圧縮支援命令は、
図5に示されるビットスタック書き込み動作に対して定義されることができる。一実施形態では、以下の2つの圧縮支援命令が定義される:「作成」及び「連結」。
【0038】
図8は、一実施形態のための、作成命令のソースオペランド及び結果オペランドのブロック図である。
図8の上部では、作成命令のためのニーモニックが、結果スタックレジスタ(RSR)、ソースベクトルレジスタ(SV)、及びソースサイズベクトルレジスタ(SSV)と共に示されている。様々なベクトル命令が実行されて、ビットスタック書き込み動作が実行される準備が整ったときにソースベクトルレジスタ80及びソースサイズベクトルレジスタ82内にあることができる、ビットフィールド及び対応するサイズのベクトルを生成することができる。レジスタ80及び82は、
図8に示されており、ビットフィールドを記憶するベクトル要素(レジスタ80)及びサイズを記憶する対応するベクトル要素(レジスタ82)を含む。したがって、レジスタ80のVE3は、サイズb3のビットフィールドx3(レジスタ82のVE3)であり、レジスタ80のVE2は、サイズb2のビットフィールドx2(レジスタ82のVE2フィールド)であるなどである。プロセッサが作成命令を実行すると、プロセッサは、ソースベクトルレジスタ80からのビットフィールドを結果スタックレジスタ84のMSBにパックし、複数のビット内の隣接するビット位置にビットフィールドx3、x2、x1、及びx0を含む結果スタックレジスタ84のMSBに複数のビットを形成することができる(例えば、x3のLSBは、x2のMSBに隣接し、x2のLSBは、x1のMSBに隣接する、などである)。ビットカウントフィールド「n」は、参照符号86に示されるように、レジスタ82からのサイズベクトル要素の合計として計算されることができる。
【0039】
作成命令は、ビットフィールドのベクトルから複数のビットを作成する。連結命令は、作成命令の結果をビットスタックの以前のバージョンに挿入する(例えば、複数のビットをビットスタックにプッシュする)ために使用されることができる。連結命令はまた、ビットスタック読み出し動作において使用されて、枯渇したビットスタックレジスタをメモリから補充することもできる。例えば、ビットスタックの次の部分は、メモリからベクトルレジスタにロードされることができ、ビットスタック読み出しに使用されるビットスタックレジスタに連結されることができる。
【0040】
図9は、一実施形態のための、連結命令のソースオペランド及び結果オペランドのブロック図である。
図9の上部では、連結命令のためのニーモニックが、結果スタックレジスタ(RSR)、ソーススタックレジスタ1(SSR1)、及びソーススタックレジスタ2(SSR2)と共に示されている。ソーススタックレジスタ1及び2は、それぞれ、参照符号88及び90で示されている。各ソーススタックレジスタは、複数のビット(レジスタ88内のp1、レジスタ90内のp2)を含むことができる。ビットカウントフィールドは、複数のビットの数(レジスタ88内のn1、レジスタ90内のn2)を示す。連結命令を実行するプロセッサは、p2ビットをp1ビットに連結し、結果スタックレジスタ92に示されるように、より大きな複数のビットを作成することができる。結果スタックレジスタにフィールドされたビットカウントは、ビットカウントフィールドn1及びn2の合計として参照符号94に示されるように計算されることができる。
【0041】
図6~
図9の実施形態は、4つのベクトル要素を有するベクトルを示しているが、他の実施形態は、より多くの又はより少ないベクトル要素(例えば、2、8、16など)を有するベクトルをサポートしてもよい。更に、前述したように、いくつかの実施形態は、異なる数のベクトル要素を有するベクトルを使用するために、圧縮支援命令を含むベクトル命令の複数のバージョンをサポートすることができる(又は即値フィールドなどのオペランドは、その命令についてのベクトル内にいくつのベクトル要素があるかを選択することができる)。
【0042】
図10は、コンピュータシステム100の一実施形態のブロック図である。コンピュータシステム100は、プロセッサ102と、レベル2(L2)キャッシュ106と、メモリ108と、大容量記憶デバイス110とを含む。図示のように、プロセッサ102は、レベル1(L1)キャッシュ104と、L1キャッシュ104及びレジスタファイル112に結合された実行コア120とを含む。実行コア120は、図示のように、整数実行ユニット114、浮動小数点(FP)実行ユニット116、及びベクトル実行ユニット118などの1つ以上の実行ユニットを含むことができる。様々な実施形態では、実行ユニット114、116、及び118は、レジスタファイル112に結合されてもよく、及び/又は異なるオペランドタイプのための複数のレジスタファイル112が存在してもよい。コンピュータシステム100において特定の構成要素が示されて説明されるが、代替の実施形態では、異なる構成要素及び構成要素の数がコンピュータシステム100に存在してもよいことに留意されたい。例えば、コンピュータシステム100は、メモリ階層のいくつか(例えば、L2キャッシュ104、メモリ108、及び/又は大容量記憶デバイス110)を含まなくてもよい。プロセッサ102と同様の複数のプロセッサが含まれてもよい。所与のタイプの複数の実行ユニット(例えば、整数、浮動小数点、ベクトル、ロード/記憶など)が含まれてもよく、所与のタイプの実行ユニットの数は、別のタイプの実行ユニットの数とは異なってもよい。更に、L2キャッシュ106は、プロセッサ102の外部に示されているが、他の実施形態では、L2キャッシュ106は、プロセッサ102の内部にあってもよいことが企図される。そのような実施形態では、レベル3(L3)キャッシュ(図示せず)が使用されてもよいことに更に留意されたい。更に、コンピュータシステム100は、バス、ネットワーク、又は別の適切な通信チャネルを用いてプロセッサ102に接続されたグラフィックスプロセッサ、ビデオカード、ビデオキャプチャデバイス、ユーザインターフェースデバイス、ネットワークカード、光ドライブ、及び/又はその他の周辺デバイスを含むことができる(簡略化のために、全て図示せず)。
【0043】
様々な実施形態では、プロセッサ102は、計算動作を実行する汎用プロセッサを表すことができる。例えば、プロセッサ102は、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はフィールドプログラマブルゲートアレイ(FPGA)などの中央処理ユニット(CPU)とすることができる。プロセッサ102は、スタンドアロン構成要素であってもよく、又は他の構成要素(例えば、他のプロセッサ、又はシステムオンチップ(SOC)の他の構成要素など)を有する集積回路上に集積されてもよい。プロセッサ102は、他の構成要素を有するマルチチップモジュール(MCM)内の構成要素であってもよい。
【0044】
より具体的には、
図1に示すように、プロセッサ102は、実行コア120を含むことができる。実行コア120は、プロセッサ102によって実装される命令セットアーキテクチャにおいて定義された命令を実行するように構成されることができる。実行コア120は、必要に応じて、任意のマイクロアーキテクチャ及び実装特徴を有することができる。例えば、実行コア120は、スーパースカラ又はスカラ実装を含むことができる。実行コア120は、順序内又は順序外実装、及び推測的又は非推測的実装を含むことができる。実行コア120は、上記の特徴の任意の組み合わせを含むことができる。実装は、いくつかの実施形態では、マイクロコードを含むことができる。実行コア120は、様々な実行ユニットを含むことができ、各実行ユニットは、様々なタイプの動作(例えば、整数実行ユニット114、浮動小数点実行ユニット116、ベクトル実行ユニット118、ロード/記憶実行ユニット(図示せず)など)を実行するように構成されている。実行コア120は、異なる数のパイプラインステージ及び分岐予測などの様々な他の性能向上特徴を含むことができる。実行コア120は、命令復号ユニット、スケジューラ、又は予約ステーション、並べ替えバッファ、メモリ管理ユニット、I/Oインターフェースなどのうちの1つ以上を含むことができる。
【0045】
レジスタファイル112は、様々な命令のオペランドを記憶するために使用されることができるレジスタのセットを含むことができる。レジスタファイル112は、実行コア120がレジスタに記憶するように構成されているオペランドのタイプ(例えば、整数、浮動小数点、ベクトルなど)に基づいて、様々なデータタイプのレジスタを含むことができる。レジスタファイル112は、アーキテクチャレジスタ(すなわち、プロセッサ102によって実装される命令セットアーキテクチャで指定されるレジスタ)を含むことができる。代替的又は追加的に、レジスタファイル112は、(例えば、レジスタリネーミングが実行コア120に実装される場合)物理レジスタを含むことができる。
【0046】
L1キャッシュ104は、任意のキャッシュ構造を例示することができる。例えば、L1キャッシュ104は、ハーバードアーキテクチャ(命令フェッチのための別個の命令キャッシュ及びメモリ参照動作のための実行ユニットによるデータ読み出し/書き込みのためのデータキャッシュ)、共有命令及びデータキャッシュなどとして実装されてもよい。いくつかの実施形態では、メモリ参照動作を実行するためにロード/記憶実行ユニットが提供されてもよい。
【0047】
命令は、プロセッサ102によって実装される命令セットアーキテクチャで定義された実行可能エンティティであってもよい。既存の様々な命令セットアーキテクチャが存在する(例えば、Intelによって開発されたx86アーキテクチャオリジナル、ARMホルディングからのARM、IBM/MotorolaからのPower及びPowerPCなど)。各命令は、メモリにおけるその符号化、その動作、並びにレジスタ、メモリ場所、及び/又は他のプロセッサ状態へのその影響を含む、命令セットアーキテクチャで定義される。命令セットアーキテクチャの所与の実装は、各命令を直接実行することができるが、その形式は、プロセッサハードウェア内の復号及び他の操作によって変更されることができる。別の実装は、少なくともいくつかの命令を、プロセッサ102内の実行ユニットによる実行のための複数の命令動作に復号することができる。いくつかの実施形態では、いくつかの命令は、マイクロコード化されることができる。したがって、「命令動作」という用語は、本明細書では、プロセッサ102/実行コア120内の実行ユニットが単一のエンティティとして実行するように構成されている動作を指すために使用されることができる。命令は、命令動作と1対1対応を有することができ、場合によっては、命令動作は、命令(プロセッサ102/実行コア120の内部の形態で変更されることができる)とすることができる。命令はまた、命令動作と1対複数(1対多数)の対応関係を有することができる。命令動作は、本明細書ではより簡単に「op」と呼ばれることがある。
【0048】
大容量記憶デバイス110、メモリ108、L2キャッシュ10、及びL1キャッシュ104は、プロセッサ102についてのデータ及び命令を記憶するメモリ階層を集合的に形成する記憶デバイスである。より具体的には、大容量記憶デバイス110は、長いアクセス時間を有するディスクドライブ又は大型フラッシュメモリユニットなどの大容量不揮発性メモリとすることができ、L1キャッシュ104、L2キャッシュ106、及びメモリ108は、アクセス時間がより短く、より小さくすることができる。これらのより高速半導体メモリは、頻繁に使用されるデータのコピーを記憶する。メモリ108は、メモリデバイスの動的ランダムアクセスメモリ(DRAM)ファミリー内のメモリデバイスを表すことができる。メモリ108のサイズは、典型的には、L1キャッシュ104及びL2キャッシュ106よりも大きいが、L1キャッシュ104及びL2キャッシュ106は、典型的には、デバイスのスタティックランダムアクセスメモリ(SRAM)ファミリーにおけるより小さなデバイスを使用して実装される。いくつかの実施形態では、L2キャッシュ106、メモリ108、及び大容量記憶デバイス110は、コンピュータシステム100内の1つ以上のプロセッサ間で共有される。
【0049】
いくつかの実施形態では、メモリ階層内のデバイス(すなわち、L1キャッシュ104など)は、サイクルごとに複数のキャッシュラインにアクセスする(すなわち、読み出す及び/又は書き込む)ことができる。これらの実施形態は、非連続メモリアドレスに対するポインタ又は配列インデックスのベクトルに基づいて発生するメモリアクセスのより効果的な処理を可能にすることができる。
【0050】
以下に記載されるデータ構造及びプログラム命令(すなわち、コード)は、コンピュータシステム(例えば、コンピュータシステム100)によって使用するためのコード及び/又はデータを記憶することができる任意のデバイス又は記憶媒体とすることができる非一時的コンピュータ可読記憶デバイスに記憶されることができることに留意されたい。一般的に言えば、非一時的コンピュータ可読記憶デバイスは、揮発性メモリ、不揮発性メモリ、ディスクドライブ、磁気テープ、コンパクトディスク(CD)、デジタル多用途ディスク若しくはデジタルビデオディスク(DVD)などの磁気及び光記憶デバイス、又は現在知られている若しくは後に開発されるコンピュータ可読媒体を記憶することができる他の媒体を含むが、これらに限定されない。したがって、大容量記憶デバイス110、メモリ108、L2キャッシュ10、及びL1キャッシュ104は、全て非一時的なコンピュータ可読記憶媒体の例である。
【0051】
上述したように、実行コア120は、(例えば、ベクトル実行ユニット118内の)ベクトル命令を実行するように構成されることができる。ベクトル命令は、複数のデータ要素に対して並列に実行される同じ演算を定義することができるという点で、古典的な意味での単一命令複数データ(SIMD)命令として定義されることができる。命令のインスタンスによって操作されるデータ要素は、ベクトルと呼ばれる場合がある。ベクトルを形成するデータ要素は、ベクトル要素と呼ばれる場合がある。ベクトル要素自体は、任意のデータタイプ(例えば、整数、浮動小数点など)を有することができ、2つ以上のデータタイプがベクトル要素に対してサポートされることができる。
【0052】
一実施形態では、レジスタファイル112は、オペランドベクトル及び結果ベクトルを保持することができるベクトルレジスタを含むことができる。いくつかの実施形態では、ベクトルレジスタファイル内に32個のベクトルレジスタが存在し得る。しかしながら、代替の実施形態では、異なる数のベクトルレジスタ及び/又はレジスタあたり異なる数のビットが存在してもよい。更にまた、レジスタリネーミングを実装する実施形態は、アーキテクチャ化されたベクトルレジスタに割り当てられることができる任意の数の物理レジスタを含むことができる。アーキテクチャ化されたレジスタは、ベクトル命令内のオペランドとして指定可能なレジスタとすることができる。
【0053】
より具体的には、ベクトル実行ユニット118は、算術演算、論理演算、シフトなどの様々なベクトル演算に加えて、本明細書に記載の圧縮支援命令(又は圧縮支援命令から復号された命令動作)を実行するように構成されることができる。
【0054】
図11は、様々な圧縮支援命令を実行するように構成された回路を含む、ベクトル実行ユニット118の少なくとも一部の一実施形態のブロック図である。
図11に示される回路は、他のタイプのベクトル演算と共有される回路及び/又は圧縮支援命令専用の回路、又はそれらの任意の組み合わせを含むことができる。ベクトル実行ユニット118は、実行される命令動作のための入力、並びにソースオペランドV1及びV2に結合される。結果演算は、命令動作の一部として指定されてもよく、結果と共にレジスタファイル112に転送されてもよい。
【0055】
制御回路130は、命令動作を受信することができ、それに応じてベクトル実行ユニット118内の他の回路を制御することができる。したがって、制御回路130は、
図11に示される他の回路に結合されてもよいが、図面を複雑にすることを回避するために、接続は
図11には明示的に示されていない。第2のソースオペランドV2に結合されることができる加算器回路132が設けられることができる。加算器回路132は、ベクトルV2の様々な要素を加算するように構成されることができる。例えば、ソースオペランドV2がサイズベクトルである場合、サイズの合計は、命令動作の実行中に使用されることができる。全てのベクトル要素の合計は、結果オペランドがスタックレジスタであるとき、ビットカウントフィールド(n)の更新に使用されることができる。更に、ベクトル要素の部分合計も同様に使用されることができる。
【0056】
例えば、トップ命令は、部分合計及びベクトル要素のサイズに基づいて、スタックのMSBを右シフトすることによって実装されることができる。4つのベクトル要素の場合では、ベクトル要素が32ビットのサイズである場合、32-b3による32個のMSBの右シフトは、x3を結果ベクトル内のVE3要素に位置合わせされることができる(例えば、ベクトル要素サイズ(Vs)-b3による右シフト)。同様に、64-(b3+b2)による64個のMSBの右シフトは、x2を結果ベクトル内のVE2要素に位置合わせさせることができる(例えば、2Vs-(b3+b2))。96-(b3+b2+b1)による96個のMSBの右シフトは、x2を結果ベクトル内のVE1要素に位置合わせさせることができる(例えば、3Vs-(b3+b2+b1))。128-(b3+b2+b1+b0)による128個のMSBの右シフトは、x0を結果ベクトル内のVE0要素に位置合わせさせることができる(例えば、4Vs-(b3+b2+b1+b0))。他の要素サイズ及び要素の数が同様に実装されることができる。したがって、シフト回路134A~134Nは、トップ命令を実行するために、加算器回路132からのV1オペランド及びそれぞれの合計に結合されることができる。対応するマスク回路136A~136Nは、シフト回路134A~134Nの出力に結合されて、ベクトル要素の一部ではないビットをマスクすることができる(例えば、x3及びx2は、ソーススタックレジスタに隣接し、x3のビットのうちのいくつかは、シフト後にVE2要素のMSBにあり得てマスクされることができるため)。個々のシフト回路134A~134N及びマスク回路136A~136Nが
図11に示されているが、他の実施形態は、所与のベクトルのサイズに基づいて、各ベクトル要素位置のシフトを制御するために制御回路130からの制御入力を有する共有シフト回路を実装してもよい。すなわち、共有シフト回路は、所与のオペランドのベクトル要素のサイズに基づいて、2個の64ビットシフト、4個の32ビットシフト、8個の16ビットシフト、又は16個の8ビットシフトを実行するように定義されることができる。制御入力は、所与の命令動作に対して選択されたサイズに基づいて実行される正しいシフトを選択することができる。したがって、シフト回路134A~134N及びマスク回路136A~136Nは、ソーススタックレジスタ内の複数のビットから結果ベクトルレジスタのベクトル要素へのビットフィールドの抽出の一実装であり得る。
【0057】
ポップ命令/命令動作のためにシフト回路140が設けられることができる。シフト回路140は、(加算器回路132によって提供される)サイズベクトルレジスタのサイズの合計だけスタックレジスタオペランドをシフトさせることができる。したがって、シフト回路140は、加算器132及びV1ソースオペランドに結合されることができる。あるいは、シフト回路134A~134Nは、ポップ命令動作のシフトも実行するように構成されてもよく、シフト回路136は、必要とされなくてもよい。計算n回路138は、ポップ命令/命令動作並びに作成及び連結命令/命令動作のための更新されたnを計算するために使用されることができる。計算n回路138は、加算器回路132に結合されることができ、ベクトル要素のサイズ(例えば、b3+b2+b1+b0)の合計を受信して、ポップについてnを計算し、命令/命令動作を作成することができる。
【0058】
作成命令/命令動作はまた、一実施形態では、ソースベクトル要素を結果のMSBに送信するために、シフト回路134A~134Nを使用して実行されることができる。例えば、x3要素は、x3要素のサイズ(b3)(例えば、Vs-b3)よりも小さいベクトル要素サイズ(Vs)だけ左シフトされることができる。x2要素は、x3及びx2要素のサイズ(例えば、2Vs-(b3+b2))よりも小さいベクトル要素サイズの2倍だけ左シフトされることができる。同様に、x1要素は、3Vs-(b3+b2+b1)だけ左シフトされることができ、x0要素は、4Vs-(b3+b2+b1+b0)だけ左シフトされることができる。結果として得られるシフト値は、結果スタックレジスタの複数の出力ビットを生成するためにマスクされ、論理和がとられることができる。したがって、加算器回路132によって生成された和は、シフト回路134A~134Nによって使用されることができる。加算器回路132は、ベクトル要素サイズを含む全シフト量を生成するように構成されることができるか、又はシフト回路134A~134Nは、明示的又は暗黙的にベクトル要素サイズを構成することができる。
【0059】
連結命令/命令動作は、シフト回路136(n1だけp2ビットを右にシフトするために)及び計算n回路138を使用して実行され、n1及びn2を加算して出力nを生成することができる。シフトされたp2は、例えば、結果スタックレジスタの出力ビットを生成するために、p1ビットと論理和をとることができる。
【0060】
図11に示される出力選択回路142は、マスク回路136A~136N、計算n回路138、及びシフト回路140に結合されることができ、レジスタファイル112に出力を提供するために実行されている命令動作に基づいて、出力の中から選択するように構成されることができる。例えば、一緒に連結されたマスク回路136A~136Nの出力は、トップ命令のために選択されることができるが、シフト回路140及び計算n回路138の出力は、ポップ、作成、及び連結命令のために選択されることができる。
【0061】
図11の回路は、ベクトル実行ユニット118の一部の実装の単なる一例にすぎないことに留意されたい。任意の他の所望の回路が使用されてもよい。例えば、シフト回路は、回転回路であってもよい。示されている回路のブール均等物を含む任意の均等物が使用されてもよい。
【0062】
図12~
図15は、本明細書に記載の様々な圧縮支援命令を実行するためのプロセッサ102/実行コア120/ベクトル実行ユニット118の一実施形態の動作を示すフローチャートである。理解を容易にするために、特定の順序でブロックを示しているが、他の順序を使用してもよい。ブロックは、プロセッサ102/実行コア120/ベクトル実行ユニット118内の組み合わせ論理回路において並列に実行されることができる。ブロック、ブロックの組み合わせ、及び/又はフローチャート全体は、複数のクロック周期にわたってパイプライン化されることができる。
【0063】
図12は、一実施形態のための、トップ命令を実行する動作を示すフローチャートである。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソースサイズベクトルに基づいて、ソーススタックレジスタのMSBからビットフィールドを抽出することができる(ブロック150)。例えば、MSBのb3は、x3として抽出されることができ、次の連続する(隣接する)b2 MSBは、x2として抽出されることができる、などである。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ビットフィールドを結果ベクトルレジスタのベクトル要素に位置合わせすることができる(ブロック152)。抽出及び位置合わせは、上述したようにシフトを介して実行されることができる。他の実施形態は、ビットフィールドを他の方法で抽出してもよい。プロセッサ102/実行コア120/ベクトル実行ユニット118は、結果ベクトルレジスタ(結果オペランドによって識別されるベクトルレジスタ)に結果ベクトルを書き込むことができる(ブロック154)。
【0064】
図13は、一実施形態のための、ポップ命令を実行する動作を示すフローチャートである。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソースサイズベクトルに基づいて、スタックの残りの量を判定することができる(ブロック156)。例えば、プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソースサイズベクトルのベクトル要素を加算し、ソースサイズベクトルのベクトル要素の合計と等しいMSBの数が削除された後のスタックが残りのスタックであると判定することができる。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソーススタックオペランドのビットスタック部分をシフトし、結果スタックレジスタのMSBに残りのスタックを配置することができる(ブロック158)。例えば、プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソースサイズベクトルのベクトル要素の合計だけソーススタックを左シフトすることができる。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソーススタックレジスタからサイズベクトルのベクトル要素の合計を差し引いたnとしてn’を計算することができ(ブロック160)、シフトされたスタック及びn’を結果スタックレジスタに書き込むことができる(ブロック162)。
【0065】
図14は、一実施形態のための、作成命令を実行する動作を示すフローチャートである。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソースサイズベクトル要素に基づいて、ソースベクトル要素からビットフィールドを抽出することができる(ブロック170)。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ビットフィールドを結果レジスタのMSBに位置合わせすることができる(ブロック172)。抽出及び位置合わせは、前述したようにシフトすることによって実行されることができる。他の実施形態は、他の方法で抽出及び位置合わせを実行してもよい。ビットフィールドが位置合わせされると、それらは、結果レジスタに隣接することができる(例えば、x3のLSBは、x2のMSBに隣接することができ、x2のLSBは、x1のMSBに隣接することができる、などである)。プロセッサ102/実行コア120/ベクトル実行ユニット118は、サイズベクトル要素の合計としてnを計算することができ(ブロック174)、結果スタック(MSB)及びn(LSB)を結果スタックレジスタに書き込むことができる(ブロック176)。
【0066】
図15は、一実施形態のための、連結命令を実行する動作を示すフローチャートである。プロセッサ102/実行コア120/ベクトル実行ユニット118は、スタックソースオペランド2のスタック部分をn1(スタックソースオペランド1のスタック部分のビット数)だけシフトさせることができる(ブロック178)。プロセッサ102/実行コア120/ベクトル実行ユニット118は、ソーススタック1のスタック部分をシフトされたソーススタック2フィールドとマージすることができる(ブロック180)。プロセッサ102/実行コア120/ベクトル実行ユニット118は、それぞれ、ソーススタックレジスタ1及びソーススタックレジスタ2からのn1とn2との合計に等しいnを計算することができる(ブロック182)。プロセッサ102/実行コア120/ベクトル実行ユニット118は、マージされたスタックを書き込み、結果スタックレジスタにnを書き込むことができる(ブロック184)。
【0067】
上述の開示内容が十分に理解されれば、多くの変形形態及び変更形態が当業者にとって明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形形態及び修正形態を包含すると解釈されることが意図されている。