(57)【要約】【課題】本出願は、コンピュータ・システム設計における基本課題であるメモリ・アクセス・コストの最小化に対処する。【解決手段】これは、メモリ技術又はプロセッサへの接続様式に関わらず、コンピュータ・システムの設計における基本的制約であり、所与の時間に転送可能なプロセッサとメモリとの間データについては、大きな制約、すなわち利用可能なメモリ帯域があり、利用可能なメモリ帯域によるコンピュータ計算力の制限は、しばしばメモリの壁と呼ばれている。本提供の解決においては、圧縮されるデータ構造体マップを生成し、該マップは該構造体における些少ではないデータ値の位置を表し（例えば、ゼロでない値）、圧縮構造体を提供するために該構造体から些少なデータ値を削除する。【選択図】図１
2010521728.tif 000002
【特許請求の範囲】
【請求項１】
圧縮回路であって、
ａ）個々のデータ値の構造体を格納するためのデータメモリと、
ｂ）マップを格納するためのマップ・メモリであって、前記マップは前記構造体内においてゼロでない値の位置を表すマップ・メモリと、
ｃ）データ出力であって、前記回路は、前記データメモリからゼロでないデータを取り出し、前記取り出されたデータを前記データ出力において前記マップを表すデータを組み合わせた圧縮構造体として提供するよう構成されるデータ出力と、を含む圧縮回路。
【請求項２】
前記データメモリは複数のレジスタを含む、請求項１に記載の回路。
【請求項３】
前記データメモリはレジスタ・ファイルを含む、請求項１に記載の回路。
【請求項４】
前記マップ・メモリはレジスタを含む、請求項１に記載の回路。
【請求項５】
前記位置はビットマップとして格納される、請求項４に記載の回路。
【請求項６】
前記ビットマップにおける各ビットは、前記格納された構造体における個々のデータの値に対応する、請求項５に記載の回路。
【請求項７】
複数のコンパレータを更に含み、各コンパレータはデータ値がゼロでないかどうかを識別し、各コンパレータの出力は前記マップ・メモリへの入力として提供される、請求項１に記載の回路。
【請求項８】
前記コンパレータ入力は、前記データメモリの読み込みポートによって設けられる、請求項７に記載の回路。
【請求項９】
前記コンパレータは、前記データメモリの書き込みポートによって設けられる、請求項７に記載の回路。
【請求項１０】
前記コンパレータ入力は、プロセッサのロード／ストアポートによって設けられる、請求項７に記載の回路。
【請求項１１】
前記データ出力はデータバスを含み、前記回路は、前記メモリから前記データバスに前記圧縮した構造体を連続して出力するよう構成される、請求項２に記載の回路。
【請求項１２】
前記マップからゼロでない値の前記数を計算するために、少なくとも一つの加算器を更に含む、請求項２に記載の回路。
【請求項１３】
前記メモリから前記データ出力にゼロでない出力の前記書き込みを連続して可能にするためのロジックを更に含む、請求項２に記載の回路。
【請求項１４】
前記ロジックは加算器の構成を含む、請求項１３に記載の回路。
【請求項１５】
前記構成におけるそれぞれの後続の加算器は、前記構成において先行する加算器の前記出力を、入力として有する、請求項１４に記載の回路。
【請求項１６】
各加算器は前記構造体において付随するデータ値に対応し、各加算器は前記付随するデータ値に対応する前記マップから入力を受け付ける、請求項２に記載の回路。
【請求項１７】
更に整数コンパレータのツリーを含み、各整数コンパレータは二つの整数入力を比較するためのものであり、各コンパレータの第１の入力は前記加算器ツリーにおいて対応する加算器からの出力である、請求項１４に記載の回路。
【請求項１８】
各コンパレータへの第２の入力は、配列信号である、請求項１７に記載の回路。
【請求項１９】
前記データ出力に些少ではないデータを書き込む前記正しいシーケンスを確認するために、前記マップからの前記値を個々のコンパレータ出力と結合するためのコンバイナを更に含む、請求項１７に記載の回路。
【請求項２０】
前記回路の前記動作を制御するためのコントローラを更に含む、請求項１に記載の回路。
【請求項２１】
前記データ値は、単精度浮動小数点数である、請求項１に記載の回路。
【請求項２２】
前記データ値は、倍精度浮動小数点数である、請求項１に記載の回路。
【請求項２３】
前記データ値は、拡張精度浮動小数点数である、請求項１に記載の回路。
【請求項２４】
前記データ値は、１２８ビット精度浮動小数点数である、請求項１に記載の回路。
【請求項２５】
前記データ値は、整数である、請求項１に記載の回路。
【請求項２６】
前記回路は、出力として前記マップの内容も提供するよう適合される、請求項１に記載の回路。
【請求項２７】
前記回路は、集積回路に設けられる、請求項１に記載の回路。
【請求項２８】
請求項１から請求項２７のいずれか一つに記載の少なくとも一つの回路を含むプロセッサ。
【請求項２９】
前記回路の複数の実例が存在する、請求項２８に記載のプロセッサ。
【請求項３０】
圧縮構造体から復元される構造体を提供するための復元回路であって、
ａ）個々の些少ではないデータ値の圧縮構造体を受け付けるための入力と、
ｂ）復元構造体内において些少ではないデータ値の位置を識別するマップを受信するためのマップ・レジスタと、
ｃ）復元構造体を格納するためのメモリであって、前記回路は前記マップ・レジスタの内容にしたがって個々の入力された些少ではないデータ値を前記メモリに投入するメモリと、を含む回路。
【請求項３１】
前記メモリは、複数のレジスタを含む、請求項３０に記載の回路。
【請求項３２】
前記メモリは、レジスタ・ファイルを含む、請求項３０に記載の回路。
【請求項３３】
前記位置は、ビットマップとして格納される、請求項３０に記載の回路。
【請求項３４】
前記ビットマップにおける各ビットは、復元構造体の個々のデータ値に対応する、請求項３３に記載の回路。
【請求項３５】
前記データ入力はデータバスを含み、前記回路は前記データバスから前記メモリに連続して前記圧縮構造体を入力するよう構成される、請求項３０に記載の回路。
【請求項３６】
前記マップから些少ではない値の数を計算するための少なくとも一つの加算器を更に含む、請求項３０に記載の回路。
【請求項３７】
前記データ入力からメモリに些少ではないデータの前記書き込みを可能にするためのロジックを更に含む、請求項３０に記載の回路。
【請求項３８】
前記ロジックは、加算器の構成を含む、請求項３７に記載の回路。
【請求項３９】
前記構成のそれぞれの後続する加算器は、前記構成の前記先行する加算器の前記出力を入力として有する、請求項３８に記載の回路。
【請求項４０】
各加算器は、非圧縮の前記構造体における関連データ値に対応し、各加算器は前記関連データ値に対応する前記マップからの入力を受け付ける、請求項３９に記載の回路。
【請求項４１】
整数コンパレータの構成を更に含み、各整数コンパレータは二つの整数を比較するためのものであり、各コンパレータの第１の入力は前記加算器構成において対応する加算器からの出力である、請求項４０に記載の回路。
【請求項４２】
各コンパレータへの第２の入力は、配列信号である、請求項４１に記載の回路。
【請求項４３】
前記データ出力へのゼロでないデータの書き込みの前記正しいシーケンスを確認するために、前記マップからの前記値を個々のコンパレータ出力と結合するためのコンバイナを更に含む、請求項４１に記載の回路。
【請求項４４】
前記回路の動作を制御するためのコントローラを更に含む、請求項４１に記載の回路。
【請求項４５】
前記データ値は、単精度浮動小数点数である、請求項３０に記載の回路。
【請求項４６】
前記データ値は、倍精度浮動小数点数である、請求項３０に記載の回路。
【請求項４７】
前記データ値は、整数である、請求項３０に記載の回路。
【請求項４８】
更にマップ入力を含み、前記回路は、前記マップ入力から前記マップ・レジスタへマップをロードする用適合される、請求項３０に記載の回路。
【請求項４９】
前記回路は、集積回路に設けられる、請求項３０に記載の回路。
【請求項５０】
些少なデータ値はゼロのデータ値であり、些少ではないデータ値はゼロでないデータ値である、請求項３０から請求項４９のいずれかに記載の回路。
【請求項５１】
請求項３０から請求項５０のいずれかに記載の少なくとも一つの回路を含むプロセッサ。
【請求項５２】
前記回路の複数の実例が存在する、請求項５１に記載のプロセッサ。
【請求項５３】
データ構造体を格納する命令に応答する圧縮回路を含むプロセッサ・チップであって、前記圧縮回路は、格納に対して圧縮フォーマットを提供するために前記構造体から些少な値を除去するよう適合される、プロセッサ・チップ。
【請求項５４】
前記圧縮回路は、前記構造体において些少な値の位置を識別するマップを提供するよう適合される、請求項５３に記載のプロセッサ・チップ。
【請求項５５】
前記圧縮フォーマット・データをロードする命令に応答する復元回路を更に含み、前記復元回路は、前記圧縮データにロード時に些少な値を再投入するよう適合される、請求項５３に記載のプロセッサ。
【請求項５６】
前記復元回路は、些少な値を再投入するためにマップを使用する、請求項５５に記載のプロセッサ。
【請求項５７】
些少なデータ値はゼロのデータ値であり、些少ではないデータ値はゼロでないデータ値である、請求項５３から請求項５６のいずれかに記載のプロセッサ。
【請求項５８】
前記回路は、前記データ出力に並行して、前記取り出された個々のデータを多重に提供するよう構成される、請求項１に記載の回路。
【請求項５９】
前記個々のデータ値はｘビット長であり、前記データ出力はｎｘビットのデータバスを含み、ｎは１よりも大きな整数であり、ｎデータ値はある時刻に前記データバス上に配置される、請求項５８に記載の回路。
【請求項６０】
前記回路は、個々の些少ではないデータ値の圧縮構造体を多重に受信するよう構成される、請求項３０に記載の回路。
【請求項６１】
前記個々のデータ値はｘビット長であり、前記データ入力はｎｘビットのデータバスを含み、ｎは１よりも大きな整数であり、ｎデータ値はある時刻に前記データバスから取り出される、請求項６０に記載の回路。
【請求項６２】
データ値の構造体を圧縮する方法であって、前記構造体内においてゼロの値の位置を識別するマップを生成するステップと、前記ゼロでない値及び前記マップのみからなる圧縮構造体を提供するために、前記構造体から前記識別された些少なエントリ値を除去するステップと、を含む方法。
【請求項６３】
前記データ値は、浮動小数点数である、請求項６２に記載の方法。
【請求項６４】
前記データ値は、単精度又は倍精度浮動小数点数である、請求項６２に記載の方法。
【請求項６５】
前記データ値は、拡張精度浮動小数点数又は１２８ビット精度浮動小数点数である、請求項６２に記載の方法。
【請求項６６】
前記データ値は、整数である、請求項６２に記載の方法。
【請求項６７】
前記マップは、個々のデータ値を表すビットマップの各ビットを有するビットマップを含む、請求項６２〜６６のいずれかに記載の方法。
【請求項６８】
前記位置を識別する前記ステップは、ゼロでない値であるかどうか決定するために、各データ値を比較することを含む、請求項６２〜６７のいずれかに記載の方法。
【請求項６９】
各比較の出力は、ゼロでない値の前記数に対して提供されるカウントに対して合計される、請求項６８に記載の方法。
【請求項７０】
前記カウントは、前記圧縮構造体のサイズを決定するために用いられ、請求項６８に記載の方法。
【請求項７１】
前記カウントは、前記圧縮構造体に設けられるエントリの前記数を決定するために用いる、請求項６８に記載の方法。
【請求項７２】
各比較の前記出力は、前記圧縮構造体にデータ値の書込を有効化するために用いられる、請求項６８に記載の方法。
【請求項７３】
前記構造体はマトリクスであり、前記マップは行及び列の前記数を識別する、請求項６２から７２のいずれかに記載の方法。
【請求項７４】
前記構造体は、行−列の構成に配列されるマトリクスを含む、請求項６２に記載の方法。
【請求項７５】
圧縮データ構造体であって、複数のゼロでないデータ値と、前記構造体の非圧縮形態における複数の些少ではない値に対するゼロ・データ値の位置を表すマップとを含む、圧縮データ構造体。
【請求項７６】
前記マップはビットマップを含み、それぞれの独立したデータ値は独立したビットによって表される、請求項７５に記載の圧縮データ構造体。
【請求項７７】
圧縮データ構造体を復元する方法であって、前記圧縮構造体は、複数のゼロでない値と、非圧縮構造体における前記ゼロでない値の位置を表すマップとを含み、前記方法は、
未占有の非圧縮構造体を提供することと、
前記ゼロでない値を取り出すことと、
占有された復元データ構造体を提供するために、前記マップに表される位置にしたがって、前記未占有の構造体内の前記ゼロでない値を占有することと、
のステップを含む方法。
【請求項７８】
前記未占有のマトリクスの前記値は、前記ゼロでない値によって占有の前にゼロまで初期化される）請求項７７に記載の方法。
【請求項７９】
前記マップのゼロ値として識別される占有構造体における位置は、ゼロにセットされる、請求項７７に記載の方法。
【請求項８０】
前記データ値は、浮動小数点数である、請求項７７に記載の方法。
【請求項８１】
前記データ値は、単精度浮動小数点数である、請求項７７に記載の方法。
【請求項８２】
前記データ値は、倍精度浮動小数点数である、請求項７７に記載の方法。
【請求項８３】
前記データ値は、整数である、請求項７７に記載の方法。
【請求項８４】
前記マップは、個々のデータ値を表す前記ビットマップの各ビットを有するビットマップからなる、請求項７７から８３のいずれかに記載の方法。
【請求項８５】
前記ビットマップの前記個々のビットは、前記圧縮構造体におけるゼロでない値の前記数のカウントを提供するために合計される、請求項８４に記載の方法。
【請求項８６】
前記カウントは、前記未占有の構造体に読み込まれるデータ値の量を決定するために用いられる、請求項８５に記載の方法。
【請求項８７】
前記マップは、前記非圧縮構造体へのデータ値の書き込みを有効化するために用いられる、請求項７７から８６のいずれかに記載の方法。
【請求項９９】
前記構造体は、行−列構成を有するマトリクスを含む、請求項７７から８７のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、データ圧縮方法に関し、特に構造体の圧縮に関する。
【背景技術】
【０００２】
メモリに格納されるデータ量を削減するための、圧縮方法及びアルゴリズムは、当技術分野において公知である。特に、例えば画像に対するＪＰＥＧ等、異なるデータの種類に対して、異なるアルゴリズムが知られている。
【０００３】
本出願は、マトリクス構造体の圧縮を目的とする。
【０００４】
以前に試みられた一つの方法（マローニー及びジェラティ、ＷＯ２００６１２０６６４）は、非構造体化マトリクスから構造体化マトリクスへの変換により、マトリクス構造体を圧縮することを取り入れた。この圧縮方法は、マトリクスの主対角の上下にあるデータの重複を効果的に排除した。
【０００５】
マトリクス構造体を取扱う他の方法が米国特許第６５９１０１９号に提案されており、データ値のマトリクスは、ｂｉｔＭａｐテーブル、ｓｉｇｎＭａｐテーブル及びｄａｔａＭａｐテーブルからなる構造体に圧縮される。ビットマップ・テーブルは、一連の２ビットのエントリを含み、それぞれのビットのエントリは、非圧縮マトリクス構造体のエントリに対応する。ｂｉｔＭａｐの各２ビットのエントリは、非圧縮のマトリクスの対応する値がゼロでもあるか、１であるか、ｄａｔａＭａｐにスケーリングされた形式で格納されているか、又はｄａｔａＭａｐに非圧縮形式で格納されているかを識別する。ｓｉｇｎＭａｐテーブルは、非圧縮構造体における値の符号を識別する。この方法の不利な点は、値のスケーリングにおいて情報が失われるため、無損失ではないことである。該方法は、ソフトウェア実施に対してのみ実用的である。
【０００６】
上記の各方法は、メモリ内に構造体を格納するために必要なメモリがより少ない限りにおいては、従来技術に対して改良をもたらすが、プロセッサにおいて構造体を復元するときには、これらの方法ではまだ重大な計算コストを招く。加えて、上記の方法は、いずれも、圧縮及び復元に関する複雑さのために処理速度にも弱点があり、プロセッサにおける実行の際には、装置がパフォーマンスに関して比較的巨大で低速となる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本出願は、実施コストを最小にし、実装の圧縮／復元速度を最大にすると共に、メモリ・アクセス・コストを最小にする、コンピュータ・システムの設計課題に対処することを目的とする。メモリ・アクセス・コスト（メモリ帯域幅）は、メモリ技術又はプロセッサ接続様式に関わらず、コンピュータ・システムの設計における基本的な制約であり、プロセッサとメモリとの間で所与の時間内にどれだけのデータが転送できるかについては、最大の制約があり、これらは利用可能なメモリ帯域幅であり、利用可能なメモリ帯域幅によるコンピュータ能力の制約は、「メモリ・ウォール」と呼ばれることがある。
【０００８】
本出願は、データを圧縮フォーマットに格納し、メモリ内に格納されなければならない巨大なデータセット上で動作する、例えばコンピュータ・グラフィック、剛体力学、有限要素分析及び他の科学及び工学アプリケーション等の多くのアプリケーションに用いられる、ブロック構造体データに適した圧縮及び復元手段を提供することにより、有効なメモリ帯域幅を増加させ、計算における「メモリ・ウォール」の制約を最小化することを目的とする。
【課題を解決するための手段】
【０００９】
本出願は、データ転送及びが復元プロセッサ資源を占有せず、顕著の遅延がない一方で、実装コストに関しては低くしたまま、処理速度に関しては高速である、プロセッサのハードウェアに圧縮／復元回路をプロセッサのハードウェアに組み込むことによって、メモリ・ウォールの課題に対処する。比較的単純な圧縮／復元ハードウェアを許容する好ましい圧縮方法が提供される。
【００１０】
第１実施形態は、個々のデータ値の構造体を格納するためのメモリと、構造体内の些少ではない（ゼロでない）値の位置を格納するためのマップ・メモリと、データ出力とを含む回路であって、本回路は該マップを用いてメモリから些少ではない（ゼロでない）データを取り出し、取り出したデータをデータ出力における圧縮構造体として提供するよう構成される回路を提供する。メモリは、レジスタ、複数のレジスタ及び／又はレジスタ・ファイルを適切に含む。位置は、ビットマップとして格納でき、ビットマップの各ビットは、格納された構造体における個々のデータ値に対応できる。複数のコンパレータを設けることが可能であり、各コンパレータは、データ値が些少ではないかどうかを識別し、各コンパレータの出力はマップへの入力として供給される。コンパレータ入力は、メモリの読み込みポート、メモリの書き込みポート、及び／又はプロセッサのロード／ストアポートに設けてもよい。
【００１１】
データ出力はデータバスを含んでもよく、本回路は、メモリからデータバスへ圧縮構造体を順次出力するよう構成される。本回路は、更に、マップからゼロでない値の数を算出するための少なくとも一つの加算器を含んでもよい。本回路は、更に、メモリからデータ出力までゼロでないデータを書き込むことを順次可能にするためのロジックを含んでもよい。該ロジックは、加算器の構成を含むことができ、該構成において後続の加算器は、該構成において先行する加算器の出力を入力として有する。各加算器は、構造体の関連データ値に対応でき、各加算器は関連データ値に対応するマップからの入力を受け付ける。本回路は、更に、整数コンパレータのツリーを含むことができ、各整数コンパレータは二つの整数入力を比較するためのものであり、各コンパレータにおける第１の入力は、加算器ツリーにおいて対応する加算器からの出力である。各コンパレータへの第２の入力は、配列信号である。本回路は、更に、些少ではないデータをデータ出力に書き込むという正しい配列を確実にするために、個々のコンパレータ出力を有するマップから値を結合するためのコンバイナを含んでもよい。本回路は、更に、本回路の動作を制御するためのコントローラを含んでもよい。本回路は、マップの内容を出力として提供するようにも適合できる。適切には、本回路は、集積回路上に設けることができる。本回路の一つ以上を含むプロセッサが提供されてもよい。
【００１２】
更なる態様において、圧縮構造体から復元構造体を抽出するための回路が提供される。本回路は、個々の些少ではないデータ値の圧縮構造体を受け付けるための入力と、復元構造体内の些少ではないデータ値の位置を識別するマップを受信するためのマップ・レジスタと、復元構造体を格納するためのメモリとを含み、本回路は、マップ・レジスタの内容にしたがって、メモリを些少ではないデータ値で占有するよう構成される。該メモリは、複数のレジスタ又はレジスタ・ファイルを含むことができる。該位置は、ビットマップとして格納でき、該ビットマップの各ビットは、復元構造体における個々のデータ値に対応する。
【００１３】
データ入力はデータバスを含んでもよく、この場合に本回路は、データバスからメモリに圧縮構造体を順次入力するよう構成される。本回路は、更に、マップから些少ではない値の数を算出するための少なくとも一つの加算器を含んでもよい。回路は、更に、順次データ入力からメモリへの些少ではないデータの書き込みを順次可能にするための、好適には加算器の構成であるロジックを含んでもよい。この構成における後続の加算器は、この構成における先行の加算器の出力を入力として有することができる。各加算器は、非圧縮構造体における関連データ値に対応でき、各加算器は関連データ値に対応するマップからの入力を受け付ける。本回路は、更に、整数コンパレータの構成を含むことができ、各整数コンパレータは二つの整数入力を比較するため野茂のであり、各コンパレータの第１の入力は、加算器構成において対応する加算器からの出力である。各コンパレータへの第２の入力は、配列信号でもよい。本回路は、更に、些少ではないデータのデータ出力に対する書き込みの正しい順序を確実にするために、マップからの値を個別のコンパレータ出力と結合するためのコンバイナを含んでもよい。本回路は、更に、回路の動作を制御するためのコントローラを含んでもよい。本回路は、更に、マップ入力を含んでもよく、本回路は、マップ・レジスタに入力されるマップからマップをロードするよう適合される。適切には、本回路は、集積回路上に設けることができる。適切には、些少なデータ値はゼロ・データ値であり、些少ではないデータ値はゼロでないデータ値である。アプリケーションは、これらの回路の少なくとも一つを取り入れるプロセッサに拡張する。
【００１４】
また更なる実施形態は、データ構造体を格納する指示に応答する圧縮回路を備えたプロセッサ・チップを提供し、この圧縮回路は、記憶部に圧縮フォーマットを提供するために構造体から些少な値を除去するよう適合される。圧縮回路は、構造体における些少な値の位置を識別するマップを提供するよう適合できる。プロセッサは、更に、圧縮フォーマット・データをロードする指示に応答する復元回路を含んでもよく、この復元回路は、些少な値をそれがロードされる際に圧縮データ内に再占有するよう適合される。復元回路は、些少な値が再占有するためのマップを使用できる。適切には、些少なデータ値はゼロ・データ値であり、些少ではないデータ値はゼロでないデータ値である。
【００１５】
したがって、他の実施形態は、構造体内で些少な入力値の位置を識別する単一のマップを作成するステップと、一つのマップの情報だけから単に復元可能な圧縮構造体を提供するために、識別された些少な入力値を該構造体から除去するステップとを含む、データ値の構造体を圧縮する無損失な方法を提供する。データ値は、浮動小数点数（単精度又は倍精度）、拡張精度浮動小数点数、１２８ビット精度の浮動小数点数又は整数でもよい。
【００１６】
適切には、マップは、個々のデータ値を表すビットマップの各ビットを有するビットマップを含む。位置を識別するステップは、それが些少ではないエントリ値であるかどうかを決定するために、各データ値を比較することを含むことができる。各比較の出力は合計され、些少ではないエントリ値のカウント数を提供できる。このカウントは、圧縮構造体のサイズ及び／又は圧縮構造体に提供されるエントリ数を決定するために使用できる。各比較の出力は、圧縮構造体へのデータ値の書き込みを可能にするために使用できる。構造体はマトリクスでもよく、マップは列及び行の数を識別できる。好ましい構成において、些少な入力値はゼロ値であり、些少ではない値はゼロでない。
【００１７】
更なる実施形態は、複数の些少ではないデータ値と、複数の些少ではないデータ値に対する些少なデータ値の位置を表すマップとを含む、圧縮データ構造体を提供する。好ましい構成において、些少な入力値はゼロ値であり、些少ではない値はゼロでない。マップは、個々のビットによって表される個々のデータ値を有するビットマップを含んでもよい。
【００１８】
更なる実施形態は、圧縮データ構造体を復元する方法を提供し、この圧縮構造体は、複数の些少ではないデータ値と、非圧縮構造体における些少ではない値の位置を表すマップとを含む。本方法は、占有された復元データ構造体を提供するために、未占有の非圧縮構造体を提供するステップと、些少ではない値を取り出すステップと、些少ではない値をマップに表されるその位置にしたがって当該未占有の構造体に占有させるステップとを含む。好ましい構成において、些少な入力値はゼロ値であり、些少ではない値はゼロでない。この場合、未占有のマトリクスの値は、ゼロでない値による占有の前に、ゼロに初期化してもよい。あるいは、マップにおいてゼロ値として識別される占有された構造体の位置が、ゼロにセットされてもよい。マップは、個々のデータ値を表しているビットマップの各ビットを有するビットマップを含んでもよい。ビットマップの個々のビットは合計され、圧縮構造体におけるゼロでない値のカウント数を提供できる。このカウントは、未占有の構造体に読み込まれるデータ値の量を決定するために使用できる。適切には、マップは、非圧縮構造体へのデータ値の書き込みを可能にするために使用される。構造体は、行列構成を有するマトリクスを含むことができる。
【００１９】
これらの及び他の実施形態、特徴及び利点は、後述の例示的記載から明らかである。
【００２０】
以下、添付図面を参照し、本発明を説明する。
【図面の簡単な説明】
【００２１】
【図１】本出願に係る圧縮方法の例示的フローチャートである。
【図２】非圧縮構造体の例、及び図１の方法の結果として生成する圧縮構造体である。
【図３】本出願に係る復元方法の例示的フローチャートである。
【図４】本出願に係る例示的プロセッサである。
【図５】図４のプロセッサへの導入に適切な例示的復元回路である。
【図６】図５の動作を説明する例示的タイミング図である。
【図７】図４のプロセッサへの導入に適切な例示的復元回路である。
【図８】図７の動作を説明する例示的タイミング図である。
【図９】図５及び図７の回路がどのように結合できるかを説明する例示的構造体である。
【発明を実施するための形態】
【００２２】
本出願は、３次元コンピュータ・グラフィック、ゲーム物理学（剛体力学）、有限要素解析（ＦＥＡ）及び検索エンジン等に使用されるような、巨大な浮動小数点マトリクス・データセットに含まれるゼロ・データ値を利用する、新規な方法を採用する。しかしながら、本アプリケーションは他のデータ構造体に適切であり、単にマトリクス・ベースの構造体だけに限定されない。
【００２３】
多くのマトリクスに対して、エントリの顕著な数は、浮動小数点表現における３２ビット又は６４ビットを全く占有しないゼロ充填であり、これはオンチップ又はオフチップのメモリから取り出されなければならず、メモリ又はレジスタから取り出されたゼロに対する些少な動作を実施することにプロセッサを忙殺する可能性があることを、発明者は認識してきた。
【００２４】
本出願は、ゼロ・データ値が除去された圧縮構造体において、データ値の行及び列に構成される格納用マトリクス構造体を提供する。マトリクス構造体におけるゼロ及びゼロでない値の位置を識別し、マトリクス構造体の無損失の再構築を可能にする、圧縮構造体に対する関連するマップが提供される。値が些少な値として識別されなければ、それは些少ではなく、逆も同様であることは明らかであるので、このようなマップは、些少な値の位置を識別するもの、又は些少ではない値の位置を識別するものと見なすことができることはいうまでもない。本方法は、従来技術に対して多くの重要な効果を提供する。第１に、本方法は無損失であり、第２に、本方法は直ちにハードウェアに実装されるため、メモリへのロード時に圧縮構造体の復元に伴う計算負荷を低減できる。同様に、処理リソースの追加を招くことなく、データを圧縮形態に格納できる。
【００２５】
このマップは、圧縮構造体に付随して、又は、複雑なデータ構造体へのランダムアクセスが必要な構造体の索引付けの一部として、メモリ内に格納できる。
【００２６】
本発明の技術の利点は、３２以下のデータ構造体エントリを表すために３２ビットのビットマップが用いられることを仮定し、ゼロ値の数に対するメモリからの転送要求を、単精度値に対しては３２ビットから１ビットに、又は倍精度値に対しては６４ビットから１ビットに低減することである。一般性を全く失うことなく、３２以上又は以下のエントリを有するデータ構造体を提供するため、ビットマップ・サイズが調節可能であることは明らかである。同じ効果は、整値を用いても得られうる。
【００２７】
以下、図１の例示的シーケンスのフローチャート、及び図２の１６の３２ビット単精度エントリを含む例示的４×４マトリクスを参照し、動作モードを記載する。
【００２８】
この処理は、圧縮マトリクス構造体から第１のエントリを取り出すことから開始する。第１のエントリは、それがゼロ値かゼロでない値であるかどうかを決定するために比較される。比較の結果により、第１の値をゼロとして、又はゼロでない値として識別するために、マップの第１の位置にエントリが作られる。適切には、マップは、ビットマップ内に関連ビットを有するマトリクス構造体における各値を有するビットマップである。第１のエントリがゼロ値である場合には、このエントリは廃棄、削除又は後の廃棄又は削除のためにタグ付けされ（例えばマトリクス・データから圧縮ストレージへの転送中に）、例えば第１ビットをゼロにセットすることにより、ゼロ値が存在したことを示すため、マトリクスに対するマップの第１の位置にエントリが作られる。マトリクスにおいて、例えば図２の第１のエントリが１．０である等、第１の値がゼロでない値である場合は、マップにおける第１のエントリは１にセットされ、ゼロでない値であることを指示する。同時に、この第１のエントリは、圧縮構造体における第１のエントリとして格納される。
【００２９】
次いで、マトリクスにおける残りのエントリのそれぞれに対して、この処理が繰り返される。図示の例示的マトリクスにおいて、エントリは行ごとにスキャンされるが、列ごとのスキャンも使用できること、又は単一のコンパレータを用いて順次的にするよりもむしろ複数のコンパレータを使用して単一操作でビットマップ全体の行／列を生成できることを考慮されたい。
【００３０】
したがって、１．０、２．０、３．０及び４．０という値を有する第１の行に対しては、ゼロ値のエントリがないため対応するマップは１１１１であるが、第２の行においては２番目の値のみがゼロでない値（６．０）であるため、マップは０１００である。同様に、第３の行に対しては、この行の最初の三つの値がゼロであるため、マップ内の最後のエントリのみが１である。
【００３１】
この圧縮処理の結果、１６のエントリとして（単精度に対してはそれぞれ３２ビット）メモリに以前に格納されたマトリクスは、９の圧縮マトリクス（同様にそれぞれ３２ビット）及びこれらのゼロでない値及び非圧縮マトリクスにおいて、対応するゼロ値を表す１６ビットのマップに置き換えることができる。各メモリの位置は３２ビットであるため、該マップがマトリクスを用いてどこに格納されるかというマップの格納に対して、１６よりも３２ビットが必要とされる。それにもかかわらず、１６×３２ビットの非圧縮マトリクス・フォーマット（全体で５１２ビット）は、９×３２ビットの圧縮マトリクス及び１×３２ビットのマップ（全体で３２０ビット）に置き換えられ、これは（５１２−３２０）／５１２＝３７．５％の圧縮を表している。
【００３２】
高密度マトリクス（ゼロ充填を含む）に対して一つ以上のエントリがゼロ（３２ビットのビットマップが使用される場合）である限り、圧縮は達成される。しかしながら、エントリあたりに１ビットのペナルティがあり、ゼロ充填なしで高密度のデータセットを格納するために、より多くのメモリが用いられる結果となる場合がある。実際には、３次元コンピュータ・グラフィック、ゲーム物理学（剛体力学）、有限要素解析（ＦＥＡ）及び検索エンジン（例えばＧｏｏｇｌｅ（商標））を含む関心データセットは、まばらであり、大量のゼロ充填を含む。
【００３３】
本出願は、複数の行及び列に関して記載されるが、単一の行又は列からなる構造体の圧縮にも適用できる。
【００３４】
いうまでもなく、いくつかの状況において、マトリクスを再構成するためにマトリクスの列−行構造、すなわち行及び列の数を知ることが必要な場合がある。しかしながら、膨大な数のアプリケーションにおいて、コンテンツはメモリから取り出され、スカラー形態で、すなわち図２の単一カラムに示すようにレジスタに格納され、これは無関係であり、該データをマトリクスと見なすのは、ソフトウェア／プロセッサである。加えて、圧縮と復元との間の様式に整合性があれば、行−列構造の存在は不明確でもよい。状況によっては、列−行構造についての知識が必要とされが、これはマップ内に／マップに追加して含まれてもよい。
【００３５】
図３に示すように、圧縮構造体を非圧縮構造体に展開する処理は、圧縮方法の逆である。この方法は、空の非圧縮構造体を提供し、マップをロードすることから始まる。次いで、マップの第１ビットは、ゼロであるかゼロでない値であるかを決定するために比較される。第１ビットが１である場合は、第１のデータ値は、メモリから非圧縮構造体の第１のエントリにロードされる。同様に、第１ビットがゼロである場合は、非圧縮構造体の第１のエントリにゼロ値を挿入する。非圧縮構造体の全ての値がゼロに初期化される場合には、ゼロ値を挿入する特別なステップは必要ではない。マップの終端に達するまで、又は全てのデータ値がロードされるまで、この処理が繰り返される。ロードするデータ値の数は、単にマップの個々のゼロでないビット（圧縮されたゼロでないマトリクス／ベクトル・エントリに対応する）を計数することによって算出できる。
【００３６】
図２の圧縮構造体を復元する場合、マップの最初の４つの値は１であるため、最初の４つのデータ値が、圧縮構造体から非圧縮構造体の最初の４つのエントリにロードされる。マップの５番目のビットはゼロであるため、非圧縮構造体の５番目のエントリはゼロ値で占有され、以下同様である。
【００３７】
圧縮構造体が非圧縮構造体に展開されるときでも、圧縮構造体に対するマップを保持して使用し、引き続き非常に効果を奏することが可能である。特に、マップは、出願人の同時係属中の出願に記載のように、乗算、加算又は他の算術演算の結果として、プロセッサ内で機能ユニットの制御に効果的に使用できる。
【００３８】
効率に関しては、マトリクス構造体サイズが比較的大きい場合、これを複数の下位マトリクスに分割し、それぞれの下位マトリクスがマトリクス構造体の一部を表してもよい。この構成においては、上記の方法で下位マトリクスのそれぞれを個々に圧縮できる。
【００３９】
上記の方法は、ソフトウェアに実装でき、図４に示すように、データはプロセッサと往復する際にハードウェアにおいて復元、圧縮され、処理速度に関して非常に効果を得ることができる。選択された圧縮構造体は、特に、スケーリング及び他の操作を含む従来技術の方法とは対照的に、ハードウェア実装に適していることはいうまでもない。ハードウェア構成において、プロセッサは、例えばマトリクスの格納／取り出し等、ブロック形式のデータの取り出し及び／又は格納のために特定の指示を有するよう適合できる。このような構成において、圧縮及び復元の方法／ハードウェアは、中央プロセッサ・コアに対して透過的とすることが可能であるが、上記に説明のようにプロセッサ自体の中でマップを使用することが非常に有効である場合があり、同様に、後述するように、プロセッサ・ハードウェア内に／これと組み合わせてマップを生成することが効果的である場合がある。いずれにしても、圧縮／復元の動作は、プログラマ／オペレーティング・ソフトウェアを実質的に透過的とする様式で効果的に実行できることはいうまでもない。
【００４０】
本出願を、オンチップ又はオフチップのメモリからプロセッサにデータをロード及び格納することに関して記載してきたが、多様な他のアプリケーションが可能であることはいうまでもなく、例えばコプロセッサ間でのデータ共有を含むことを、更に考慮されたい。
【００４１】
以下、メモリからプロセッサへのロードの際に、圧縮データ構造体の復元／展開を提供する例示的ハードウェア実装を記載する。説明のために、下記の表１に例示する比較的小さな３×３（９エントリ）の圧縮マトリクスを用い、ここにＡ、Ｂ、Ｃ、Ｄ及びＥはゼロでないデータ値を表し、１０１０１０１０１は３×３マトリクスのゼロでない値に対するマップである。実際には、提案する技法は、復元データに対する転送先として機能し、Ｎ×Ｍエントリ以上を有する、いずれの任意の大きさのＮ×Ｍマトリクス及びレジスタ・ファイルにも拡張できる。
【００４２】
【表１】
2010521728.tif 000003
【００４３】
例示的な復元ロジックは、図５に示すように、圧縮ビットマップ・レジスタ、書込アドレス計算機、書込アドレス・コンパレータ、コンバイナ及び転送先オンチップ・メモリを含む。例示的装置において、これらの素子は、例えばアドレス生成ユニット（ＡＧＵ）又はダイレクト・メモリ・アクセス（ＤＭＡ）コントローラ等のコントローラの制御下にある。これらの素子の構成及び動作を、以下、図６の例示的なタイミング図を参照し、より詳細に説明する。
【００４４】
圧縮ビットマップ・レジスタは、圧縮マトリクス構造体に対するマップを格納する十分なサイズのレジスタであり、実際には、これは、サポートするＮ×Ｍ圧縮マトリクスにおける各エントリについて、１ビットのエントリに対応する。例示的な装置において、圧縮ビットマップ・レジスタは、９ビット（ＭＣＢ０−ＭＣＢ８）を含み、各ビットは非圧縮構造体の位置に対応する。展開処理の開始時に、コントローラは、オンチップ又はオフチップのメモリから圧縮ビットマップ・レジスタへマップをロードする。図５のビットマップ・レジスタに示す値は、単に例示的な値であることを考慮されたい。同様に、値のデータは、圧縮マトリクス・データに対する読出アドレスを生成するコントローラ制御下のバスにおいて、該データ全体にわたり、メモリからデータに順次転送される。あるいは、データは、ゼロでないエントリのグループ内にメモリから転送でき、例えば、２×３２ビットの値を６４ビットバスを介して転送でき、配線増加というコストはあるものの一般性を失うことはない。コントローラの挙動は、復元ロジック及び圧縮ビットマップ・レジスタにより制御され、書込アドレス計算機を用いて、クロックサイクルによりベースアドレスから開始するフェッチ対象バイト数（バイト・フェッチ）を生成できる。
【００４５】
書込アドレス計算機は、オンチップ・メモリ（レジスタ・ファイル）上の各エントリに対する書込アドレス（ＷＡ）を計算するために、２の補足整数加算器のツリーを含む。ツリーの各加算器は、２つの入力を有する。第１の入力は、ビットマップ・レジスタからの対応する値であり、すなわち、ビットマップ・レジスタにおける第１のエントリ（ＭＣＢ０）は、第１の加算器への入力である。同様に、ビットマップ・レジスタの最後のエントリ（ＭＣＢ８）は、ツリーの最後の加算器への入力である。各加算器への第２の入力は、ツリーにおける以前の加算器からの出力を含むので、第１の加算器（ＷＡ０）の出力は、第２の加算器への入力であり、同様に、第８の加算器（ＷＡ７）の出力は最後の加算器への入力である。
【００４６】
第１の加算器はツリーにおいて下位の加算器を有さないため、−１のベース入力が設けられ、これはレジスタ・ファイル内の展開構造体にデータを格納するときに確実に正確なアドレス割り当てを行うためである。小さい整数の加算器ツリーは、ＭＡＰレジスタ内のエントリに基づいて、レジスタ・ファイル転送先（書込）アドレスを生成する。図示の特定の実施例は、９エントリのレジスタ・ファイルであり、加算器ツリーのベースアドレスは−１に設定される。より大きなレジスタ・ファイル（９以上のエントリ）の場合には、３×３マトリクスは、加算器ツリーのベースアドレスをｂａｓｅ＿ａｄｒ―１に設定することにより、ベースアドレスから開始して復元できる。後者の場合、３×３マトリクスは、位置０よりもむしろ特定のベースアドレスで開始するレジスタ・ファイルに配置されることになる。
【００４７】
加えて、加算器のツリーにおける最後の加算器からの出力は、メモリから取り出す必要のあるゼロでない値がいくつあるかを（ＡＧＵ／ＤＭＡ）コントローラに指示する、バイト・フェッチ値として提供される。これらのバイトは、データバス（ｄａｔａ＿ｉｎ）上ではシーケンシャルな様式でロードされる。より広いバスを介してペア又は４つのグループのいずれかでデータが転送される場合は、６４又は１２８ビットワード数を転送することを示すために、最下位１又は２ビット（ｌｓｂｓ）は、バイト・フェッチ値から削除される（かつ丸められる）。
【００４８】
書込アドレス・コンパレータは、ワードポインタ（ｗｒｄ＿ｐｔｒ）値に対して書込アドレス（ＷＡ）を比較する２の補数整数コンパレータのツリーを含み、これはコントローラに設けられるカウンタ出力であり、加算器ツリー終端由来のバイト・フェッチ出力の値までゼロからインクリメントする。
【００４９】
コンバイナは、データバスからのデータをレジスタ・ファイルの適切な場所にロードできる書込有効（ＷＥＮ）信号を生成するために、その対応するビットマップ・レジスタ値を用いてそれぞれの書込アドレス・コンパレータ出力の論理積を取るためのＡＮＤゲートを含む。特に、このｗｒｄ＿ｐｔｒ値は、データがレジスタ・ファイルにラッチされるべき時点及び場所を決定するために、加算器ツリーにより生成されるＷＡアドレス（出力）に対して比較される。
【００５０】
状況によっては、ビットマップ・レジスタのエントリがゼロ（例えば、ＭＣＢ１、ＭＣＢ３、ＭＣＢ５、ＭＣＢ７）である場合は、関連付けられるＡＮＤゲート（ＷＥＮ１、ＷＥＮ３、ＷＥＮ５、ＷＥＮ７）の出力は、決して有効化されず、レジスタ・ファイルにおいて対応する位置（ｒ１、ｒ３、ｒ５、ｒ７）には何のデータもロードされないことが明らかである。このため、それらはタイミング図には示されない。レジスタ・ファイルは、処理における最初のステップとして、クリア（全てゼロ値にセットされる）が可能である。コンパレータ値が論理積に一致し、対応するＭＣＢビットが１にセットされるときには、レジスタ・ファイルのＷＥＮ（書込有効）ビットはハイにセットされる。セットされると、ＷＥＮビットにより、ｄａｔａ＿ｉｎバスの内容は正しいレジスタ・ファイルのレジスタに書き込まれる。図示の例において、第１の書込有効信号（ＷＥＮ０）は、ｗｒｄ＿ｐｔｒがゼロであるときに、すなわち第１のゼロでない要素をレジスタ・ファイルの位置ｒ０にロードするために、有効化される。同様に、ＷＡ２＝ＭＣＢ２｛７｝＋ＷＡ１｛＝ＭＣＢＩ（０）＋ＷＡ０（０）｝＝１であり、したがって第２のゼロでないデータ値（Ｂ）は、第３のレジスタ位置ｒ２にデータバスからロードされることになるため、第３の書込有効信号（ＷＥＮ２）は、ｗｒｄ＿ｐｔｒ値が１であるときに有効化されることになる。
【００５１】
その結果、復元／展開処理の終了時において、レジスタ・ファイル内には非圧縮構造体が格納され、図示の例は、Ａ、０、Ｂ、０、Ｃ、０、Ｄ、０、Ｅ、０を表す。
【００５２】
３×３圧縮マトリクスに対してここで説明した同じ一般原理を用いて、いかなる任意のＮ×Ｍ圧縮マトリクス及び復元マトリクスのエントリのためのいかなる任意のサイズのレジスタ・ファイル転送先もサポートできる。
【００５３】
類似の構成は、圧縮経路（圧縮回路）に使用できる。図７に示す圧縮経路の場合には、非圧縮データ構造体（すなわち各レジスタ・ファイルのエントリ）内の各データ値を０．０に比較し、レジスタ・ファイルのエントリがゼロでない場合にビットマップ・エントリ・ビットを１に設定するために、浮動小数点コンパレータのツリーが必要である。９入力レジスタ・ファイル９のためのＩＥＥＥ単精度登録事項の例においては、このような浮動小数点コンパレータが必要である。
【００５４】
図７に示す例示的な圧縮回路は、３２ビット・コンパレータのバンク、圧縮ビットマップ・レジスタ、読出アドレス計算機、読出アドレス・コンパレータ、及びコンバイナを含む。上述の展開回路と同様に、これらの素子は、例えば、アドレス生成ユニット（ＡＧＵ）又はダイレクト・メモリ・アクセス（ＤＭＡ）等のコントローラの制御下にある。以下、これらの素子の構造及び動作を、図８の例示的なタイミング図を参照し、より詳細に説明する。
【００５５】
例示的な構成において、非圧縮構造体（ｒ０〜ｒ８）はレジスタ・ファイルに格納され、レジスタ内のそれぞれの値は、コンパレータ・バンク内の対応するコンパレータに提供され、個々の値がゼロでない値かゼロ値であるかを決定するために比較が実行される。
【００５６】
コンパレータは、レジスタ・ファイルからの読出値として示しているが、レジスタ・ファイル内のエントリのいずれがゼロ値／ゼロでない値であるかを指示する、ゼロビット・レジスタを有することが、より効果的である場合がある。このレジスタは、データがレジスタ・ファイルの書込ポートにラッチされる際に占有される。このゼロビット・レジスタは、他の目的（例えば、計算の高速化）に効果的に使用でき、同一出願人の同時係属出願において、より詳細に記載される。圧縮サイクル開始時に比較の必要がないため、この方法はクロックサイクルを節約する。加えて、レジスタ・ファイル上で並列比較を実施するために、配線と電力との両者の点で実装が非常に高価である９つの読出ポートを有する必要性は、取り除かれる。この方法の更なる効果は、必要とする浮動小数点コンパレータ数の減少を含む（レジスタ・ファイルに対して３つの書込ポートのある例示的構成においては３×）。
【００５７】
複数のロード／ストアポートを有するプロセッサにおいて、圧縮／復元ロジックは、単一のロード／ストアポートを有するプロセッサの場合には共有することが可能であり、単一の共有レジスタ・ファイル又は複数の独立したレジスタ・ファイルのいずれが使用されても、それぞれの独立したロード／ストアポートに対して１回複製されなければならないことに注意すべきである。
【００５８】
ただし、単に説明の容易さのために、図７の装置を参照して動作モードを説明するが、コンパレータ・バンクからの個々の出力は、圧縮ビットマップ・レジスタへの入力として設けられ、これは上述のように、圧縮／非圧縮マトリクス構造体に対するマップを格納する十分なサイズのレジスタである。しかしながら、いったんビットマップ・レジスタがロードされると、二つの異なる装置間では動作様式が同じであることはいうまでもない。コンパレータ出力は、圧縮処理の第１段階として、圧縮ビットマップ・レジスタにロードされる。図７のビットマップ・レジスタに示される値が、単に例示的な値であることはいうまでもない。
【００５９】
コントローラの挙動は、圧縮ロジック及び圧縮ビットマップ・レジスタによって制御され、読出アドレス計算機を用いて、クロックサイクルによりベースアドレスから開始する格納対象バイト数（バイト・ストア、後述する）を生成できる。
【００６０】
読出アドレス計算機は、オンチップ・メモリ（レジスタ・ファイル）上の各エントリに対する読出アドレス（ＲＡ）を計算するために、２の補足（図示の例においては５ビット）整数加算器のツリーを含む。ツリーの各加算器は、２つの入力を有する。第１の入力は、ビットマップ・レジスタからの対応する値であり、すなわち、ビットマップ・レジスタにおける第１のエントリは、第１の加算器への入力である。同様に、ビットマップ・レジスタの最後のエントリは、ツリーの最後の加算器への入力である。各加算器への第２の入力は、ツリーにおける以前の加算器からの出力を含むので、第１の加算器（ＲＡ０）の出力は、第２の加算器への入力であり、同様に、第８の加算器（ＲＡ７）の出力は最後の加算器への入力である。
【００６１】
第１の加算器はツリーにおいて下位の加算器を有さないため、０のベース入力（すなわち、入力なし）が設けられ、これはレジスタ・ファイルからのデータ読出時に確実に正確なアドレス割り当てを行う。整数加算器のツリーは、マップ・レジスタのエントリに基づいて、レジスタ・ファイル転送先（読出）アドレスを生成する。
【００６２】
加算器ツリー内の最後の加算器からの出力は、（ＡＧＵ／ＤＭＡ）コントローラに対してオンチップ又はオフチップ・メモリ内の圧縮構造体に格納が必要なゼロでない値がいくつあるかを指示する、バイト・ストア値として提供される。これらのバイトは、データバス（ｄａｔａ＿ｏｕｔ）を介して、シーケンシャルな様式で格納される。
【００６３】
読出アドレス・コンパレータは、ワードポインタ（ｒｄ＿ｐｔｒ）値に対して読出アドレス（ＲＡ）を比較する２の補数整数コンパレータのツリーを含み、これはコントローラに設けられるカウンタ出力であり、加算器ツリー終端由来のバイト・ストア出力の値までゼロからインクリメントする。
【００６４】
コンバイナは、ＡＮＤゲートのツリーを含む。各ＡＮＤゲートは、適切な位置でレジスタ・ファイルからデータを抽出できる読出有効（ＲＥＮ）信号を生成するために、読出アドレス・コンパレータ出力をその対応するビットマップ・レジスタと結合する。特に、このｒｄ＿ｐｔｒ値は、データがレジスタ・ファイルから読み出されるべき時点及び場所を決定するために、加算器ツリーにより生成されるＲＡアドレス（出力）に対して比較される。
【００６５】
状況によっては、ビットマップ・レジスタのエントリがゼロ（例えば、ＭＣＢ１、ＭＣＢ３、ＭＣＢ５、ＭＣＢ７）である場合は、関連付けられるＡＮＤゲート（ＲＥＮ１、ＲＥＮ３、ＲＥＮ５、ＲＥＮ７）の出力は有効化されず、レジスタ・ファイルにおいて対応する位置（ｒ１、ｒ３、ｒ５、ｒ７）からは何のデータも読み出されないことが明らかである。このため、それらはタイミング図には示されない。コンパレータ値が論理積に一致し、対応するＭＣＢビットが１にセットされるときには、レジスタ・ファイルのＲＥＮ（読出有効）ビットはハイにセットされる。セットされると、ＲＥＮビットにより、レジスタ・ファイル内の選択されたエントリの内容が、ｄａｔａ＿ｏｕｔバスに配置される。図示の例において、第１の読込有効信号（ＲＥＮ０）は、ｒｄ＿ｐｔｒがゼロであるときに、すなわち第１のゼロでない要素（Ａ）をレジスタ・ファイルの位置ｒ０からｄａｔａ＿ｏｕｔに読み出すために、有効化される。同様に、ＲＡ２＝ＭＣＢ２｛７｝＋ＲＡ１｛７｝＝２であり、したがって第２のゼロでないデータ値（Ｂ）は、第２のゼロでないデータ値（Ｃ）は第３のレジスタ位置ｒ２からｄａｔａ＿ｏｕｔにラッチされることになるため、第３の読出有効信号（ＲＥＮ２）は、ｒｄ＿ｐｔｒ値が２であるときに有効化されることになる。
【００６６】
その結果、圧縮処理の終了後、レジスタ・ファイルは、マップ・レジスタ由来のマップと共にオンチップ又はオフチップ・メモリ内のコントローラによって格納されたｄａｔａ＿ｏｕｔ上に、Ａ、Ｃ、Ｅ、Ｇ及びＩを配置することになる。
【００６７】
３×３非圧縮マトリクスに対して本願明細書において概説した同一の一般原理を用いて、いずれの任意のＮ×Ｍ非圧縮マトリクスもサポートできることはいうまでもない。
【００６８】
上述の説明から、コントローラの一般的制御下において同一のハードウェアを圧縮及び復元のために使用できることを、理解されたい。
【００６９】
図９に、このような組み合わせ構成を示し、これは上述のレジスタ・ファイル書込ポートに取り付けられるコンパレータを有する構成を取り入れている。この例では、レジスタ・ファイルに接続するプロセッサ・データ経路は、３つの書込ポートを必要とする。実際には、この構成案は、任意の数のレジスタ・ファイル書込ポート、及び任意の数のエントリを有するレジスタ・ファイルに容易に拡張できる。オンチップ又はオフチップ・ストレージにデータを圧縮するため、又はオンチップ又はオフチップ・ストレージからレジスタ・ファイルへのロード時にデータを展開するために、必要に応じてｗｒ＿ｐｔｒ、ｒｄ＿ｐｔｒ及び他の信号が動作／受信されることはいうまでもない。
【００７０】
ｂａｓｅ＿ａｄｄｒが−１であることは、簡便な説明のために示していない。
【００７１】
プロセッサの実行パスと直列的に浮動小数点コンパレータを書き戻す遅延が発生しないことを確実にする目的で、追加の実行パイプライン・ステージを必要とする場合があるが、さもなければ該プロセッサのクロックレートとこれによるＦＬＯＰＳレートを制約する可能性があるためである。
【００７２】
本出願に記載の新規な方法は、例えば、些少な値の格納に要するメモリを低減することによりプロセッサが必要とするメモリ帯域を削減すること、メモリを往復するオンチップ又はオフチップのバスを介する帯域に関して効率的に、圧縮又は非圧縮のいずれにおいても、スカラー、ベクトル又はマトリクス・データの移動に要するバスのサイズを削減すること、メモリ又はプロセッサ・レジスタから読み出されるときに、圧縮されたスカラー、ベクトル又はマトリクス・データ上での動作時に電力消費を削減し、効率的な処理パワー（ＦＬＯＰＳ）を向上すること、及びプロセッサのレイテンシを低減することを含む多数の重要な効果を提供する。
【００７３】
添付図面において、図示のラインは複数のラインに対応でき、これは隣接する番号を有する交差線によって表されており、例えば、図９におけるｓｔｏｒｅ＿ｄａｔａバスは３２ビット・バスを表す一方で、加算器ツリーからの各出力は５ビットである。
【００７４】
含む／からなるという言葉は、本明細書における使用時には、記載の特徴、整数、ステップ又は構成要素の存在を特定するためであるが、一以上の他の特徴、整数、ステップ、構成要素又はこれらの群の存在又は追加を排除するものではない。
【図１】
2010521728.tif 000004
【図２】
2010521728.tif 000005
【図３】
2010521728.tif 000006
【図４】
2010521728.tif 000007
【図５】
2010521728.tif 000008
【図６】
2010521728.tif 000009
【図７】
2010521728.tif 000010
【図８】
2010521728.tif 000011
【図９】
2010521728.tif 000012
【国際調査報告】
2010521728.tif 000013
2010521728.tif 000014