(57)【要約】      （修正有）【課題】１つの乗累算命令で２つの複素数を乗算する関数を実行する。【解決手段】乗加算回路が、第１（８１０）、第２（８１１）、第３（８１２）、および第４の乗算器（８１３）を含み、各乗算器が、対応する前記データ要素セットを受け取る。乗加算回路はさらに、第１および第２の乗算器（８１０、８１１）に結合した第１の加算器（８５０）、および第３および第４の乗算器（８１２、８１３）に結合した第２の加算器（８５１）を含む。第３の記憶領域（８７１）が加算器（８５０、８５１）に結合される。第３の記憶領域（８７１）は、第１および第２の加算器（８５０、８５１）の出力を、第３のパック・データの第１および第２のデータ要素としてそれぞれ保存する第１および第２のフィールドを含む。【選択図】図８
2006107463.tif 000002
【特許請求の範囲】
【請求項１】
第１の複数のデータ要素を有する第１のパック・データ、およびそれに対応する第２の複数のデータ要素を有する第２のパック・データを指定する命令を受け取りデコードする第１の回路と；
前記第１の回路と通信状態にあり、前記第１および第２のパック・データの前記データ要素に少なくとも１回の加算および少なくとも１回の乗算を実行することによって少なくとも１つの結果データ要素を生成する第２の回路とを備えることを特徴とする演算装置。
【請求項２】
少なくとも４つのデータ要素を含む第１のパック・データ、および少なくとも４つのデータ要素を含む第２のパック・データを記憶するメモリと；
前記第１のパック・データおよび前記第２のパック・データを受け取るように前記メモリと結合し、命令の受け取りに応答して前記第１のパック・データ中および前記第２のパック・データ中のデータ要素に演算を実行して、少なくとも２つが乗加算演算の結果を含む、第３のパック・データ中の複数のデータ要素を生成する処理装置とを備えることを特徴とする演算装置。
【請求項３】
前記処理装置が、前記命令のビット３から５によって指定される前記メモリのある場所に、前記第３のパック・データを記憶することを特徴とする請求項２に記載の装置。
【請求項４】
前記処理装置が、前記第１のパック・データを前記第３のパック・データで上書きすることを特徴とする請求項２に記載の装置。
【請求項５】
前記処理装置が、各々が乗加算演算の結果を含む、前記第３のパック・データ中の少なくとも４つのデータ要素を生成することを特徴とする請求項２に記載の装置。
【請求項６】
前記処理装置が、前記第１のパック・データ中の８つのデータ要素、および前記第２のパック・データ中の８つのデータ要素に演算を実行することを特徴とする請求項５に記載の装置。
【請求項７】
第１のパック・データ中の各データ要素が第２のパック・データ要素中に対応するデータ要素を有する諸データ要素をそれぞれが含む前記第１のパック・データおよび前記第２のパック・データを受け取る段階と；
前記第１のパック・データ中および前記第２のパック・データ中の前記対応するデータ要素どうしを掛け合わせて、いくつかのセットに分割された対応する中間データ要素を生成する段階と；
複数の結果データ要素の第１の要素が、前記いくつかのセットの第１のセット中の中間データ要素の合計を表し、前記複数の結果データ要素の第２の要素が、前記いくつかのセットの第２のセット中の中間データ要素の合計を表す前記複数の結果データ要素を生成する段階と；
前記複数の結果データ要素を合計せずに、単一の命令の実行を完了させる段階とを含むことを特徴とする演算方法。
【請求項８】
他の命令に対するオペランドとして使用するために、前記複数の結果データ要素を第３のパック・データとして記憶する段階をさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記第１のパック・データ上に前記複数の結果データ要素を書き込む段階をさらに含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記いくつかのセットの第３のセット中の中間データ要素の合計を表す前記複数の結果データ要素の第３の要素を生成する段階と；
前記いくつかのセットの第４のセット中の中間データ要素の合計を表す前記複数の結果データ要素の第４の要素を生成する段階と；
前記複数の結果データ要素を合計せずに、前記単一の命令の実行を完了させる段階とをさらに含むことを特徴とする請求項７に記載の方法。
【請求項１１】
第１のパック・データの各データ要素が第２のパック・データの異なるデータ要素に対応する、第１の複数のデータ要素を有する前記第１のパック・データおよび第２の複数のデータ要素を有する前記第２のパック・データの場所を指定する命令を受け取りデコードするデコーダと；
前記デコーダと通信状態にあり、前記第１および第２のパック・データの対応するデータ要素の積の合計をそれぞれが含む複数の結果データ要素を有するパック・データ結果を、前記デコーダが前記命令をデコードした後で、乗算および加算を実行することによって生成する実行ユニットとを備えることを特徴とする演算装置。
【請求項１２】
前記実行ユニットが、前記第１のパック・データまたは前記第２のパック・データのどちらかの上に前記パック・データ結果を記憶することを特徴とする請求項１１に記載の装置。
【請求項１３】
前記実行ユニットが、前記第１のパック・データの前記データ要素よりも精度の高い結果データ要素を生成することを特徴とする請求項１１に記載の装置。
【請求項１４】
前記実行ユニットが、前記複数の結果データ要素を合計せずに、前記命令の実行を完了させることを特徴とする請求項１１に記載の装置。
【請求項１５】
前記デコーダが、命令のビット０から２までが前記第２のパック・データの場所を指定し、前記命令のビット３から５までが前記第１のパック・データの場所を指定する２４ビットの命令フォーマットを有する前記命令をデコードすることを特徴とする請求項１１に記載の装置。
【請求項１６】
第１のパック・データの各データ要素が第２のパック・データの異なるデータ要素に対応する、第１の複数のデータ要素を有する前記第１のパック・データおよび第２の複数のデータ要素を有する前記第２のパック・データの場所を指定する命令を受け取る段階と；
前記命令を実行することにより、それぞれが前記第１および第２のパック・データの対応するデータ要素の４つの積の合計を含む４つの結果データ要素を含むパック・データ結果を生成する段階とを含むことを特徴とする演算方法。
【請求項１７】
前記結果データ要素が３２ビットのデータ要素であることを特徴とする請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、具体的には、コンピュータ・システム分野に関する。より詳細には、パック・データ演算の分野に関する。
【０００２】
一般的なコンピュータ・システムにおいて、処理装置は、命令を使用して、多数のビット（例えば６４個）で表された値を処理し、１つの結果を得るように構成されている。例えば、加算命令の実行では、第１の６４ビット値と第２の６４ビット値を加算して、その結果を、第３の６４ビット値として記憶する。しかし、マルチメディア・アプリケーション（例えば、ＣＳＣ（ｃｏｍｐｕｔｅｒ  ｓｕｐｐｏｒｔｅｄ  ｃｏｏｐｅｒａｔｉｏｎ：マルチメディア・データ操作と通信会議の統合）、２Ｄ／３Ｄグラフィックス、画像処理、映像圧縮／解凍、認識アルゴリズム、音声操作を対象としたアプリケーション）では、少数のビットで表されることもある大量のデータを操作する必要がある。例えば、グラフィック・データには一般に８ビットまたは１６ビットが必要であり、音声データには一般に、８ビットまたは１６ビットが必要である。これらのマルチメディア・アプリケーションはそれぞれ、１つまたは複数のアルゴリズムを必要とし、これらのアルゴリズムのそれぞれは、いくつかの演算を必要とする。アルゴリズムには例えば、加算演算、比較演算およびシフト演算を必要とするものがある。
【０００３】
マルチメディア・アプリケーション（および同じ特性を有するその他のアプリケーション）の能率を改善するために、処理装置によって、パック・データ・フォーマットが用いられることがある。パック・データ・フォーマットは、単一の値を表すために一般には使用されるビット群が、それぞれが別の値を表す一定の大きさのいくつかのデータ要素に分割されるものである。例えば、６４ビット・レジスタが、別々の３２ビット値を表す２つの３２ビット要素に分割される。さらに、これらの処理装置は、単一の命令に応答して、これらのパック・データの各要素を別々に並列に操作する命令を用意している。例えば、パック加算命令は、第１のパック・データのデータ要素と対応する第２のパック・データのデータ要素を加算する。したがって、多数のデータ要素に対して実行されなければならない５つの演算を含むループをマルチメディア・アルゴリズムが要求する場合には、これらのデータをパックし、パック・データ命令を使用してこれらの演算を並列に実行することが望ましい。このようにすると、これらの処理装置はより効率的に、マルチメディア・アプリケーションを処理することができる。
【０００４】
しかし、演算ループが、パック・データに対して処理装置によって実行されない演算を含む（すなわち、処理装置が適当な命令を欠いている）場合には、データは、この演算を実行するためにアンパックされなければならない。例えば、マルチメディア・アルゴリズムが加算演算を要求し、前述のパック加算命令が使用できない場合には、プログラマは、第１のパック・データおよび第２のパック・データをアンパック（すなわち、第１のパック・データおよび第２のパック・データを含む要素を分離する）し、分離された要素を個々に加算し、次いで、この結果をパックして、以降のパック処理のためのパック・データとしなければならない。このようなパックおよびアンパック操作を実行するのに必要な処理時間がしばしば、パック・データ・フォーマットを導入した理由である性能上の利点を打ち消す。したがって、コンピュータ・システムには、一般的なマルチメディア・アルゴリズムに必要な全ての演算を用意したパック・データ・セット命令を組み込むことが望ましい。しかし、現在の汎用マイクロプロセッサではダイの面積が限られているため、追加することのできる命令の数も限られてくる。したがって、汎用性（すなわち、多種多様なマルチメディア・アルゴリズムに使用できる命令）および最大限の性能上の利点をともに提供する命令を考案することが望ましい。
【０００５】
マルチメディア・アルゴリズムで使用する演算を行う１つの技術は、別個のディジタル信号処理装置（ＤＳＰ）を既存の汎用処理装置（米国カリフォルニア州サンタクララ市のインテル社（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ）製のＩｎｔｅｌ（R） ４８６など）に結合するものである。汎用処理装置は、パック・データを使用して実行できるジョブ（例えば、ビデオ処理）をＤＳＰに割り当てる。
【０００６】
このようなＤＳＰには、累算値に、２つの値の乗算結果を加算する乗累算（multiply accumulate）命令が含まれる。（Ｋａｗａｋａｍｉ他「Ａ  Ｓｉｎｇｌｅ−Ｃｈｉｐ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  Ｖｏｉｃｅｂａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ」，  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｃｉｒｃｕｉｔｓ  Ｃｏｎｆｅｒｅｎｃｅ，  １９８０，  ｐｐ．  ４０−４１を参照のこと。）このＤＳＰ用の乗累算演算の例を以下の第１表に示す。この命令は、ソース１およびソース２としてそれぞれアクセスされるデータ値Ａ1 およびＢ1 に対して実行される。
【０００７】
【表１】
2006107463.tif 000003
【０００８】
この命令の１つの限界は、その効率に限界があることである。すなわち、この命令は、２つの値と１つの累算値に対する演算だけしか実施しない。例えば、２セットの２つの値を乗累算するためには、以下の２つの命令を直列に実行する必要がある。１）第１のセットの第１の値と第２のセットの第１の値、ならびに累算値または０（ゼロ）から乗累算を実施し、中間累算値を導く。２）第１のセットの第２の値と第２のセットの第２の値、ならびに中間累積値から乗累算を実施し、結果を導く。
【０００９】
２セットの２つの値および１つの累算値に対して演算を実施する乗累算命令を含む別のＤＳＰがある（本明細書ではＡｎｄｏ他と称する米国特許第４７７１４７０号「Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ  ｗｉｔｈ  Ｐａｒａｌｌｅｌ  Ｍｕｌｔｉｐｌｉｅｒｓ」を参照のこと）。このＤＳＰ用の乗累算命令の例を以下の第２表に示す。この命令は、ソース１〜４としてそれぞれアクセスされるデータ値Ａ1 、Ａ2 、Ｂ1 、Ｂ2 に対して実行される。
【００１０】
【表２】
2006107463.tif 000004
【００１１】
この技術を使用すると１つの命令で、２セットの２つの値に乗算が実行され、次いで累算値に加算される。
この乗累算命令は、常に累算値に加算されるので、その汎用性には限界がある。そのため、乗累算以外の演算にこの命令を使用することは難しい。例えば、マルチメディア・アプリケーションでは、複素数の乗算がよく使用される。２つの複素数（例えば、ｒ１ｉ１およびｒ２ｉ２）の乗算は、次式に従って実行される。
実数部＝ｒ１・ｒ２‐ｉ１・ｉ２
虚数部＝ｒ１・ｉ２＋ｒ２・ｉ１
このＤＳＰは、１つの乗累算命令で、２つの複素数を乗算する関数を実行することができない。
【００１２】
このような計算の結果が、後段の累算ではない乗算演算に必要である場合には、この乗累算命令の限界はより明らかになる。例えば、実数部がこのＤＳＰを使用して計算される場合には、結果を正確に計算するために累算値をゼロに初期設定する必要がある。次いで、虚数部を計算するために累算値を再びゼロに初期設定する必要がある。この結果生じた複素数と第３の複素数（例えばｒ３ｉ３）について別の複素数乗算を実行するためには、結果の複素数を基準化（ｓｃａｌｉｎｇ）し直して、受入れ可能なメモリ・フォーマットとしてに記憶しなけばならず、累算値の初期値を再びゼロに設定しなければならない。こうして初めて、前述のような複素数乗算の実行が可能となる。これらのそれぞれの演算では、累算値に向けられたＡＬＵは余分なハードウェアであり、この累算値を再初期設定するために追加の命令が必要となる。これらの追加命令が、このような場合以外に必要となる可能性は低い。
【００１３】
この技術の他の限界は、高価なマルチポート・メモリを介してデータにアクセスしなければならないことである。これは、乗算器が直接にデータ・メモリと接続されるためである。したがって、相互接続のコストおよびこの相互接続が命令から分離されないことによって、利用できる並列処理の量は制限される。
Ａｎｄｏ他はまた、この高価な相互接続に代わるものは、乗算すべき後続のデータ対それぞれに遅延を与えることであると記載している。この解決策は、第１表に示した解決策が提供する性能上の利点を減少させる。
さらに、マルチポート・メモリまたはパイプライン・メモリ・アクセスの概念は複数アドレスの使用を必然的に伴う。１データ１アドレスの明示的な使用が、重要なパック・データの概念がこの技術に用いられないことを明白に示している。
【発明を実施するための最良の形態】
【００１４】
処理装置は、第１のパック・データを有する第１の記憶領域および第２のパック・データを有する第２の記憶領域を有する。各パック・データは、第１、第２、第３、第４のデータ要素を含む。
【００１５】
乗加算回路が、第１および第２の記憶領域に結合される。乗加算回路は、第１、第２、第３、第４の乗算器を含み、各乗算器は、対応する１セットの前記データ要素セットを受け取る。乗加算回路はさらに、第１および第２の乗算器に結合された第１の加算器および、第３および第４の乗算器に結合された第２の加算器を含む。第３の記憶領域が加算器に結合される。第３の記憶領域は、第１および第２の加算器の出力を、第３のパック・データの第１および第２のデータ要素としてそれぞれ保存するための第１および第２のフィールドを含む。
【００１６】
以下の説明では、本発明を完全に理解してもらうために数多くの具体的な詳細を説明する。ただし、これらの具体的な詳細なしでも本発明を実施できることを理解されたい。その他の例では、本発明が不明瞭にならないように、周知の回路、構造、技術を詳細に示すことはしない。
【００１７】
定義
本発明の実施形態の説明を理解する基礎として、以下の定義を示す。
ビットＸ〜ビットＹ：  ２進数のサブフィールドを定義する。例えば、バイト００１１１０１０2 （２進法）のビット６〜ビット０は、サブフィールド１１１０１０2 を表す。２進数の後の数字「２」は２進法を表す。したがって、１０００2は、８10に等しく、Ｆ16は１５10に等しい。
Ｒｘ：  レジスタである。レジスタとは、データを記憶し、供給することのできる一切の装置を指す。レジスタの他の機能は後に説明する。処理装置と同じダイまたは同じパッケージにレジスタが含まれている必要は必ずしもない。
ＳＲＣ１、ＳＲＣ２、ＤＥＳＴ：  記憶領域（メモリ・アドレス、レジスタなど）の識別に用いる。
ソース１‐ｉ、結果１‐ｉ：  データを表す。
【００１８】
概要
この出願には、処理装置中にあって、パック・データの乗加算演算を実行する装置を記載する。一実施形態においては、下記の第３ａ表および第３ｂ表に示すように、単一の乗加算命令を使用して２つの乗加算演算が実行される。第３ａ表は、開示の乗加算演算を単純化して示したものであり、第３ｂ表は、開示の乗加算演算のビット・レベルでの例を示すものである。
【００１９】
【表３】
2006107463.tif 000005
【００２０】
【表４】
2006107463.tif 000006
【００２１】
このように、記載の乗加算演算の実施形態は、ソース１とソース２の対応する１６ビット・データ要素どうしを乗算し、４つの３２ビット中間結果を生成する。これらの３２ビット中間結果は、２つずつ加算されて２つの３２ビット結果が生成され、これらはパックされて、パック結果のそれぞれの要素となる。後述するように、代替実施形態では、データ要素、中間結果、結果のビット数が可変である。さらに、代替実施形態では、使用されるデータ要素の数、生成される中間結果の数、および結果として生じるパック・データのデータ要素の数が可変である。
【００２２】
コンピュータ・システム
第１図に、本発明の一実施形態に基づいた例示的なコンピュータ・システム１００を示す。コンピュータ・システム１００は、情報を受け渡しするバス１０１または、その他の通信ハードウェアおよびソフトウェア、およびバス１０１に結合し、情報を処理する処理装置１０９を含む。処理装置１０９は、ＣＩＳＣまたはＲＩＳＣ型アーキテクチャを含むあらゆる種類、アーキテクチャの中央処理装置を代表する。コンピュータ・システム１００はさらに、バス１０１に結合し、処理装置１０９が実行する情報および命令を記憶するランダム・アクセス・メモリ（ＲＡＭ）またはその他の動的記憶装置（主記憶１０４と称する）を含む。主記憶１０４は、処理装置１０９による命令の実行中に、一時変数またはその他の中間情報を記憶するためにも使用することができる。コンピュータ・システム１００はさらに、バス１０１に結合され、処理装置１０９のための静的情報および命令を記憶するリード・オンリー・メモリ（ＲＯＭ）１０６および／またはその他の静的記憶装置を含む。情報および命令を記憶するデータ記憶装置１０７がバス１０１に結合される。
【００２３】
第１図に示す処理装置１０９はさらに、実行ユニット１３０、乗加算ユニット１４５、レジスタ・ファイル１５０、キャッシュ１６０、デコーダ１６５、内部バス１７０を含む。当然ながら、処理装置１０９は、本発明の理解には必要のない追加の回路も含んでいる。
【００２４】
実行ユニット１３０は、処理装置１０９が受け取った命令の実行に使用される。汎用型処理装置内で一般に実行される命令を認識するほかに、実行ユニット１３０は、パック・データ・フォーマットに対する演算を実行するパック命令セット１４０中の命令１４２を認識する。パック命令セット１４０は、乗加算演算をサポートする命令を含む。 に提出された出願第 号「Ａ  Ｓｅｔ  ｏｆ  ｉｎｓｔｒｕｃｔｉｏｎｓ  ｆｏｒ  Ｏｐｅｒａｔｉｎｇ  ｏｎ  Ｐａｃｋｅｄ  Ｄａｔａ」に記載されているように、パック命令セット１４０にはさらに、パック操作、アンパック操作、パック加算演算、パック除算演算、パック乗算演算、パック・シフト演算、パック比較演算、ポピュレーションカウント、パック論理演算セット（パックＡＮＤ、パックＡＮＤＮＯＴ、パックＯＲ、パックＸＯＲを含む）を含めることができる。実行ユニット１３０さらに、乗加算演算を実行する乗加算ユニット１４５を含む。
【００２５】
実行ユニット１３０は、内部バス１７０によってレジスタ・ファイル１５０に結合される。レジスタ・ファイル１５０は、データを含む情報を記憶する処理装置１０９の記憶領域を表す。実行ユニット１３０はさらに、キャッシュ１６０およびデコーダ１６５に結合される。キャッシュ１６０は、例えば主記憶１０４からのデータおよび／または制御信号をキャッシュするのに使用される。デコーダ１６５は、処理装置１０９が受け取った命令をデコードして、制御信号および／またはマイクロコード・エントリ・ポイントとするのに使用される。これらの制御信号および／またはマイクロコード・エントリ・ポイントに応答して、実行ユニット１３０が適当な演算を実行する。例えば、加算命令を受け取った場合には、デコーダ１６５は実行ユニット１３０に、要求のあった加算を実行させる。デコーダ１６５は、どんな機構（例えば、ルックアップ・テーブル、ハードウェア・インプリメンテーション、ＰＬＡなど）を使用して実現してもよい。したがって、デコーダおよび実行ユニットによる各種命令の実行は一連のｉｆ／ｔｈｅｎ文によって表現されるが、命令の実行は、これらのｉｆ／ｔｈｅｎ文の逐次処理を要求しないことが理解される。このｉｆ／ｔｈｅｎ処理を論理的に実行する機構は全て本発明の範囲に含まれると考えるべきである。
【００２６】
第１図にはさらに、磁気ディスクまたは光ディスクなどのデータ記憶装置１０７が示されている。これに対応するディスク駆動機構をコンピュータ・システム１００に結合することができる。コンピュータの使用者に向けて情報を表示するため、コンピュータ・システム１００をさらに、バス１０１を介して表示装置１２１に結合するとができる。表示装置１２１には、フレーム・バッファ、専用のグラフィックス・レンダリング装置、陰極線管（ＣＲＴ）、および／またはフラット・パネル・ディスプレイを含めることができる。情報およびコマンド選択を処理装置１０９に送るために、文字数字およびその他のキーを含む文字数字式入力装置１２２が一般にバス１０１に結合される。別の種類のユーザ入力装置が、マウス、トラックボール、ペン、タッチ・スクリーン、カーソル方向キーなどのカーソル制御装置１２３である。これらは、方向情報およびコマンド選択を処理装置１０９に送り、表示装置１２１上でのカーソルの動きを制御する。この入力装置は一般に、２軸、すなわち第１の軸（例えばｘ軸）および第２の軸（例えばｙ軸）に対する自由度２を有し、これによってこの装置は、平面上の位置を指定することができる。しかし、本発明を、自由度が２の入力装置のみに限定してはならない。
【００２７】
バス１０１に結合することのできる別の装置は、命令、データまたはその他の情報を紙、フィルム、またはこれらと類似の媒体に印刷するのに使用できるハード・コピー装置１２４である。コンピュータ・システム１００はさらに、情報を記録するためにマイクロホンに結合させたオーディオ・ディジタイザなどの録音および／または再生装置１２５に結合することができる。この装置にはさらに、ディジタル音声を再生するためにデジタル／アナログ（Ｄ／Ａ）変換器に結合したスピーカを含めることができる。
【００２８】
また、コンピュータ・システム１００をコンピュータ・ネットワーク（例えばＬＡＮ）の端末とすることができる。この場合、コンピュータ・システム１００はコンピュータ・ネットワークのコンピュータ・サブシステムとなる。コンピュータ・システム１００に任意選択でビデオ・ディジタイジング装置１２６を含めてもよい。ビデオ・ディジタイジング装置１２６を使用して、ビデオ画像を捕捉し、コンピュータ・ネットワーク上の端末に伝送することが可能となる。
【００２９】
一実施形態ではさらに、米国カリフォルニア州サンタクララのインテル社製の既存処理装置（Ｐｅｎｔｉｕｍ（R） プロセッサなど）が使用するｘ８６命令セットと互換性のある命令セットを処理装置１０９がサポートする。したがって一実施形態では、処理装置１０９が、米国カリフォルニア州サンタクララのインテル社が規定したＩＡTM−Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（米国カリフォルニア州サンタクララのインテル社発行の「Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｌ  Ｄａｔａ  Ｂｏｏｋｓ  」ｖｏｌｕｍｅ  １  ａｎｄ  ｖｏｌｕｍｅ  ２．  １９９２  ａｎｄ  １９９３参照）でサポートされている全ての演算をサポートする。この結果、処理装置１０９は、本発明の演算に加えて既存のｘ８６演算をサポートすることができる。本発明を、ｘ８６ベースの命令セットに組み込まれているように記述しているが、本発明を、他の命令セットに組み込んだ代替実施形態も可能である。例えば本発明を、新たな命令セットを使用する６４ビット処理装置に組み込むことができる。
【００３０】
第２図に、本発明の一実施形態に基づいた処理装置のレジスタ・ファイルを示す。レジスタ・ファイル１５０は、制御／ステータス情報、整数データ、浮動小数点データ、パック・データを含む情報を記憶するのに使用される。第２図に示す実施形態では、レジスタ・ファイル１５０は、整数レジスタ２０１、レジスタ２０９、ステータス・レジスタ２０８、命令ポインタ・レジスタ２１１を含む。ステータス・レジスタ２０８は処理装置１０９のステータスを表示する。命令ポインタ・レジスタ２１１は、次に実行する命令のアドレスを記憶する。整数レジスタ２０１、レジスタ２０９、ステータス・レジスタ２０８、命令ポインタ・レジスタ２１１は全て、内部バス１７０に結合される。追加のレジスタを内部バス１７０に結合することもできる。
【００３１】
一実施形態では、レジスタ２０９が、パック・データおよび浮動小数点データの両方に使用される。このような実施形態では、処理装置１０９はレジスタ２０９を常に、スタック・リファレンス式の浮動小数点レジスタまたは非スタック・リファレンス式のパック・データ・レジスタのいずれかとして取り扱う。この実施形態では、処理装置１０９がレジスタ２０９を、レジスタ２０９上のスタック・リファレンス式の浮動小数点レジスタと非スタック・リファレンス式のパック・データ・レジスタの間で切り換えることができる機構が含められる。このような他の実施形態では、処理装置１０９がレジスタ２０９を、非スタック・リファレンス式の浮動小数点レジスタおよびパック・データ・レジスタとして同時に操作する。別の例として他の実施形態では、同じこれらのレジスタを整数データの記憶に使用することができる。
【００３２】
当然ながら、異なる数のレジスタ・セットを含む代替の実施形態も実施可能である。例えば、代替実施形態が、浮動小数点データを記憶する別個の浮動小数点レジスタ・セットを含んでもよい。別の例として、代替実施形態が、それぞれのレジスタが制御／ステータス情報を記憶する第１のレジスタ・セットおよび、それぞれのレジスタが、整数データ、浮動小数点データ、およびパック・データを記憶することができる第２のレジスタ・セットを含んでもよい。本発明の実施形態のレジスタを、特定の種類の回路を意味するものと限定すべきではないことは明白である。本発明の実施形態のレジスタは、データの記憶および供給、ならびに本明細書に記載する機能の実行ができるものであれば何でもよい。
【００３３】
各種レジスタ・セット（例えば、整数レジスタ２０１、レジスタ２０９）を、異なる数および／または異なる大きさのレジスタを含むように実施することができる。例えば、一実施形態では、整数レジスタ２０１が３２ビットを記憶するように実施され、レジスタ２０９が８０ビットを記憶するように実施される（浮動小数点データの記憶には８０ビット全てが使用され、パック・データの記憶には６４ビットのみが使用される）。さらに、レジスタ２０９は８つのレジスタＲ0  ２１２ａ〜Ｒ7   ２１２ｈを含む。Ｒ1   ２１２ａ、Ｒ2   ２１２ｂ、Ｒ3   ２１２ｃはレジスタ２０９中の別のレジスタの例である。レジスタ２０９中のレジスタの３２個のビットを整数レジスタ２０１中の整数レジスタに移動させることができる。同様に、整数レジスタ中の値を、レジスタ２０９中の３２ビットのレジスタに移動させることができる。別の実施形態では、整数レジスタ２０１は各レジスタが６４ビットを含み、６４ビットのデータを、整数レジスタ２０１とレジスタ２０９の間で移動させることができる。
【００３４】
第３図は、本発明の一実施形態に従ってデータを操作するのに処理装置が使用する一般的なステップを示すフロー図である。すなわち第３図は、パック・データの演算の実行、アンパック・データの演算の実行、またはその他の演算の実行の間に処理装置１０９がたどるステップを示す図である。例えば、このような演算には、キャッシュ１６０、主記憶１０４、リード・オンリー・メモリ（ＲＯＭ）１０６、またはデータ記憶装置１０７のデータをレジスタ・ファイル１５０中のレジスタにロードするロード演算が含まれる。
【００３５】
ステップ３０１で、デコーダ１６５が、キャッシュ１６０またはバス１０１から制御信号を受け取る。デコーダ１６５は制御信号をデコードし、実行すべき演算を決定する。
ステップ３０２で、デコーダ１６５は、レジスタ・ファイル１５０またはメモリ中の記憶場所にアクセスする。レジスタ・ファイル１５０中のレジスタまたはメモリ中の記憶場所へのアクセスは、制御信号が指定したレジスタ・アドレスに従って実施される。例えば、パック・データの演算に対しては、レジスタ・アドレスＳＲＣ１、ＳＲＣ２およびＤＥＳＴを制御信号が含む。ＳＲＣ１は、第１のソース・レジスタのアドレスである。ＳＲＣ２は、第２のソース・レジスタのアドレスである。全ての演算が、２つのソース・アドレスを必要とするわけではないので、いくつかの場合には、ＳＲＣ２アドレスは任意となる。ある演算に、ＳＲＣ２アドレスが必要ない場合には、その演算にはＳＲＣ１アドレスのみが使用される。ＤＥＳＴは、結果データが記憶される宛先レジスタのアドレスである。一実施形態では、ＳＲＣ１またはＳＲＣ２がＤＥＳＴとしても使用される。ＳＲＣ１、ＳＲＣ２、ＤＥＳＴについては、第６ａ図および第６ｂ図に関してより詳細に説明する。対応するレジスタに記憶されたデータをそれぞれソース１、ソース２、結果と称する。これらのデータはそれぞれ６４ビット長である。
【００３６】
本発明の他の実施形態では、ＳＲＣ１、ＳＲＣ２、ＤＥＳＴのいずれか１つまたはこれら全てが、処理装置１０９のアドレス可能な記憶空間内の記憶場所を定義することができる。例えば、ＳＲＣ１が、主記憶１０４中の記憶場所を識別し、ＳＲＣ２が、整数レジスタ２０１中の第１のレジスタを識別し、ＤＥＳＴが、レジスタ２０９中の第２のレジスタを識別するようにすることができる。本明細書の説明を単純にするために、本発明を、レジスタ・ファイル１５０へのアクセスに関して説明する。ただし、代わりにメモリを使用してもこれらのアクセスは実施できる。
【００３７】
ステップ３０３で、実行ユニット１３０が使用可能となって、アクセスされたデータの演算を実行する。ステップ３０４で、制御信号の要求に従ってレジスタ・ファイル１５０に結果が再び記憶される。
【００３８】
データおよび記憶フォーマット
第４図に、本発明の一実施形態に基づくパック・データのデータ型を示す。３つのパック・データ・フォーマット、すなわちパック・バイト４０１、パック・ワード４０２、パック・ダブルワード４０３が示されている。本発明の一実施形態では、パック・バイトは６４ビット長であり、８つのデータ要素を含む。各データ要素は１バイト長である。データ要素は一般に、同じ長さのその他のデータ要素とともに単一のレジスタ（または記憶場所）に記憶される個別のデータ片である。本発明の一実施形態においては、１つのレジスタに記憶されるデータ要素の数は、データ要素のビット長で６４ビットを割った数である。
【００３９】
パック・ワード４０２は、６４ビット長であり、ワード４０２の４つのデータ要素を含む。ワード４０２の各データ要素は１６ビットの情報を含む。
パック・ダブルワード４０３は６４ビット長で、ダブルワード４０３の２つのデータ要素を含む。ダブルワード４０３の各データ要素は３２ビットの情報を含む。
【００４０】
第５ａ図ないし第５ｃ図に、本発明の一実施形態に基づいたレジスタ内のパック・データ記憶表現を示す。符号なしパック・バイトのレジスタ内表現５１０は、レジスタＲ0   ２１２ａ〜Ｒ7   ２１２ｈのうちの１つにおける符号なしパック・バイト４０１の記憶領域を示したものである。バイト・データ要素の情報はそれぞれ、バイト０の情報は、ビット７〜ビット０に、バイト１の情報は、ビット１５〜ビット８に、バイト２の情報は、ビット２３〜ビット１６に、バイト３の情報は、ビット３１〜ビット２４に、バイト４の情報は、ビット３９〜ビット３２に、バイト５の情報は、ビット４７〜ビット４０に、バイト６の情報は、ビット５５〜ビット４８に、バイト７の情報は、ビット６３〜ビット５６に記憶される。したがって、レジスタの使用可能なビットは全て使用されている。この記憶配置は、処理装置の記憶効率を向上させる。８つのデータ要素にアクセスすると、８つのデータ要素に対して１つの演算を同時に実行することができる。符号付きパック・バイトのレジスタ内表現５１１は、符号付きパック・バイト４０１の記憶領域を示したものである。全てのバイト・データ要素の第８ビットが符号標識となっていることに留意されたい。
【００４１】
符号なしパック・ワードのレジスタ内表現５１２は、ワード３〜ワード０がどのように、レジスタ２０９の１つのレジスタに記憶されるかを示したものである。ビット１５〜ビット０が、データ要素ワード０の情報を含み、ビット３１〜ビット１６が、データ要素ワード１の情報を含み、ビット４７〜ビット３２が、データ要素ワード２の情報を含み、ビット６３〜ビット４８が、データ要素ワード３の情報を含む。符号付きパック・ワードのレジスタ内表現５１３も、符号なしパック・ワードのレジスタ内表現５１２と同様である。各データ要素ワードの第１６ビットが符号標識となっていることに留意されたい。
【００４２】
符号なしパック・ダブルワードのレジスタ内表現５１４は、２つのダブルワード・データ要素がレジスタ２０９に記憶される方法を示したものである。ダブルワード０は、レジスタのビット３１〜ビット０に記憶される。ダブルワード１は、レジスタのビット６３〜ビット３２に記憶される。符号付きパック・ダブルワードのレジスタ内表現５１５も、符号なしパック・ダブルワードのレジスタ内表現５１４と同様である。必要な符号ビットが、ダブルワード・データ要素の第３２ビットにあることに留意されたい。
【００４３】
前述のようにレジスタ２０９を、パック・データおよび浮動小数点データの両方に使用することができる。本発明のこの実施形態では、個別のプログラム処理装置１０９が、アドレスされたレジスタ、例えばＲ0   ２１２ａに、パック・データまたは浮動小数点データのどちらが記憶されているかを追跡する必要がある場合がある。代替実施形態では、処理装置１０９は、レジスタ２０９の個々のレジスタに記憶されたデータの種類を追跡することができる。この代替実施形態では、例えば、パック加算演算を浮動小数点データに対して試みた場合にエラーを生じる。
【００４４】
制御信号フォーマット
パック・データを操作するのに処理装置１０９が使用する制御信号フォーマットの一実施形態を以下に説明する。本発明の一実施形態では、制御信号は３２ビットで表される。デコーダ１６５はバス１０１から制御信号を受け取ることができる。他の実施形態では、このような制御信号をデコーダ１６５は、キャッシュ１６０から受け取ることができる。
【００４５】
第６ａ図に、パック・データの使用を指示する本発明の一実施形態に基づいた制御信号フォーマットを示す。ビット３１〜ビット２６のオペレーション・フィールドＯＰ  ６０１は、処理装置１０９が実行すべき、例えば、パック加算演算などの演算についての情報を提供する。ビット２５〜ビット２０のＳＲＣ１  ６０２は、レジスタ２０９中の１つのソース・レジスタのアドレスを供給する。このソース・レジスタは、制御信号の実行に使用される第１のパック・データ、すなわちソース１を含む。同様に、ビット１９〜ビット１４のＳＲＣ２  ６０３は、レジスタ２０９中の１つのレジスタのアドレスを供給する。この第２のソース・レジスタは、演算の実行中に使用されるパック・データ、すなわちソース２を含む。ビット５〜ビット０のＤＥＳＴ  ６０５は、レジスタ２０９中の１つのレジスタのアドレスを含む。この宛先レジスタは、パック・データ演算の結果パック・データを記憶する。
【００４６】
ビット１２およびビット１３の制御ビットＳＺ  ６１０は、第１および第２のパック・データ・ソース・レジスタにおけるデータ要素の長さを指示する。ＳＺ  ６１０が０１2 の場合には、パック・データは、パック・バイト４０１としてフォーマットされる。ＳＺ  ６１０が１０2 の場合には、パック・データは、パック・ワード４０２としてフォーマットされる。ＳＺ  ６１０の００2 および１１2 は予備であるが、他の実施形態では、これらの値の１つをパック・ダブルワード４０３の指示に使用することができる。
ビット１１の制御ビットＴ  ６１１は演算を、飽和モード（ｓａｔｕｒａｔｅ  ｍｏｄｅ）で実行するかどうかを指示する。Ｔ  ６１１が１の場合には、飽和演算（ｓａｔｕｒａｔｉｎｇ  ｏｐｅｒａｔｉｏｎ）が実行される。Ｔ  ６１１が０の場合には、非飽和演算（ｎｏｎ−ｓａｔｕｒａｔｉｎｇ  ｏｐｅｒａｔｉｏｎ）が実行される。飽和演算については後に述べる。
【００４７】
ビット１０の制御ビットＳ  ６１２は符号付き演算の使用を指示する。Ｓ  ６１２が１の場合には、符号付き演算が実行される。Ｓ  ６１２が０の場合には、符号なし演算が実行される。
【００４８】
第６ｂ図に、パック・データの使用を指示する本発明の一実施形態に基づいた第２の制御信号フォーマットを示す。このフォーマットは、インテル社（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ，Ｌｉｔｅｒａｔｕｒｅ  Ｓａｌｅｓ，Ｐ．Ｏ．  Ｂｏｘ  ７６４１，Ｍｔ．ｐｒｏｓｐｅｃｔ，ＩＬ，６００５６−７６４１）発行の「Ｐｅｎｔｉｕｍ  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ」に記載されている汎用整数演算コード・フォーマットと符合する。ＯＰ  ６０１、ＳＺ  ６１０、Ｔ  ６１１およびＳ６１２は全てが結合されて１つの大きなフィールドを占めることに留意されたい。いくつかの制御信号では、ビット３〜ビット５がＳＲＣ１  ６０２である。ＳＲＣ１  ６０２のアドレスが存在する一実施形態では、ビット３〜ビット５はまた、ＤＥＳＴ  ６０５にも対応する。ＳＲＣ２  ６０３のアドレスが存在する代替実施形態ではビット０〜ビット２がＤＥＳＴ  ６０５にも対応する。パック・シフト即値演算のようなその他の制御信号では、ビット３〜ビット５が、演算コード・フィールドの拡張部分を表す。一実施形態では、プログラマが、制御信号のこの拡張部分に、桁移動数などの即値を含めることができる。一実施形態では、即値は、制御信号の後に続く。これは、「Ｐｅｎｔｉｕｍ  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ」のａｐｐｅｎｄｉｘ  Ｆ、Ｆ−１〜Ｆ−３ページに詳述されている。ビット０〜ビット２はＳＲＣ２  ６０３を表す。この汎用フォーマットでは、レジスタ・ツー・レジスタ、メモリ・ツー・レジスタ、レジスタ・バイ・メモリ、レジスタ・バイ・レジスタ、レジスタ・バイ・イミディエート（即値）、レジスタ・ツー・メモリの各アドレッシングが可能である。一実施形態では、この汎用フォーマットは、整数レジスタ・ツー・レジスタ、およびレジスタ・ツー・整数レジスタの各アドレッシングもサポートする。
【００４９】
飽和／不飽和の説明
前述のとおり、Ｔ  ６１１は、演算を選択的に飽和させるかどうかを指示する。  飽和イネーブル状態で演算結果がデータ範囲を、オーバーフローまたはアンダーフローする場合には、この結果はクランプされる。クランプとは、結果が、データ範囲の最大値または最小値を上まわる場合に、この結果を、最大値または最小値に設定することである。アンダーフローの場合には、飽和によって結果が、データ範囲の最小値にクランプされ、オーバーフローの場合には最大値にクランプされる。各データ・フォーマットに対する許容範囲を第４表に示す。
【００５０】
【表５】
2006107463.tif 000007
【００５１】
前述のように、Ｔ  ６１１は、飽和演算が実行されているかどうかを指示する。したがって、飽和イネーブル状態で、符号なしバイト・データ・フォーマットを使用した演算結果が２５８である場合、この結果は２５５にクランプされ、その後、その演算の宛先レジスタに記憶される。同様に、処理装置１０９が、飽和イネーブル状態で、符号付きワード・データ・フォーマットを使用していて、演算結果が−３２９９９である場合、この結果は−３２７６８にクランプされ、その後、その演算の宛先レジスタに記憶される。
【００５２】
乗加算演算
本発明の一実施形態では、ＳＲＣ１レジスタは、パック・データ（ソース１）を、ＳＲＣ２レジスタは、パック・データ（ソース２）を含み、ＤＥＳＴレジスタは、ソース１とソース２の乗加算演算を実行した結果を含む。乗加算演算の第１ステップでは、ソース１の各データ要素を、ソース２の対応するデータ要素と独立に掛け合わせて、中間結果セットを生成する。これらの中間結果を対で合計して、この乗加算演算の結果を生成する。
本発明の一実施形態では、符号付きパック・データに対して乗加算演算が実行され、この結果は、オーバーフローを避けるために切り捨てられる。さらに、この演算は、パック・ワード・データに対して実行され、その結果は、パック・ダブルワードにパックされる。ただし、その他の種類のパック・データに対する演算をサポートする代替実施形態も可能である。
【００５３】
第７図は、本発明の一実施形態に従って、パック・データの乗加算演算を実行するステップを示すフロー図である。
ステップ７０１で、デコーダ１６５は、処理装置１０９が受け取った制御信号をデコードする。したがってデコーダ１６５は、乗加算演算の演算コードをデコードする。
ステップ７０２で、デコーダ１６５は、ＳＲＣ１  ６０２およびＳＲＣ２  ６０３のアドレスが与えられているレジスタ・ファイル１５０内のレジスタ２０９に内部バス１７０を介してアクセスする。レジスタ２０９は実行ユニット１３０に、ＳＲＣ１  ６０２レジスタに記憶されたパック・データ（ソース１）およびＳＲＣ２  ６０３レジスタに記憶されたパック・データ（ソース２）を供給する。すなわち、レジスタ２０９はパック・データを内部バス１７０を介して実行ユニット１３０に送る。
【００５４】
ステップ７０３で、デコーダ１６５は、実行ユニット１３０の乗加算ユニット１４５を命令の実行ができるイネーブル状態とする。ステップ７１４では以下の操作が実行される。ソース１のビット１５〜ビット０に、ソース２のビット１５〜ビット０が乗じられ、第１の３２ビット中間結果（中間結果１）が生成される。ソース１のビット３１〜ビット１６に、ソース２のビット３１〜ビット１６が乗じられ、第２の３２ビット中間結果（中間結果２）が生成される。ソース１のビット４７〜ビット３２に、ソース２のビット４７〜ビット３２が乗じられ、第３の３２ビット中間結果（中間結果３）が生成される。ソース１のビット６３〜ビット４８に、ソース２のビット６３〜ビット４８が乗じられ、第４の３２ビット中間結果（中間結果４）が生成される。中間結果１が中間結果２に加算され、結果ビット３１〜０が生成され、中間結果３が中間結果４に加算され、結果ビット６３〜３２が生成される。
【００５５】
乗算と加算を、直列演算、並列演算、または直列演算と並列演算の組合せで実行する異なる実施形態も可能である。
ステップ７２０で結果が、ＤＥＳＴレジスタに記憶される。
【００５６】
パック・データ乗加算回路
一実施形態では、アンパック・データの１回の乗算と同じクロック・サイクル数で、複数のデータ要素に対する乗加算演算を実行できる。同じクロック・サイクル数で実行するために、並列処理を使用する。すなわち、データ要素の乗加算演算を実行する命令を同時にレジスタに与える。
【００５７】
第８図に、本発明の一実施形態に基づいてパック・データの乗加算演算を実行する回路の概要を示す。演算制御装置８００は、乗加算命令の制御信号を処理する。演算制御装置８００は、パック乗加算器８０１の制御信号をイネーブル線８８０上に出力する。
パック乗加算器８０１は以下の入力、すなわちソース１〔６３：０〕入力８３１、ソース２〔６３：０〕入力８３３、およびイネーブル入力８８０を有する。パック乗加算器８０１は、４つの１６×１６乗算回路、すなわち１６×１６乗算器Ａ  ８１０、１６×１６乗算器Ｂ  ８１１、１６×１６乗算器Ｃ  ８１２、および１６×１６乗算器Ｄ  ８１３を有する。１６×１６乗算器Ａ  ８１０は、ソース１〔１５：０〕およびソース２〔１５：Ｏ〕をその入力とする。１６×１６乗算器Ｂ  ８１１は、ソース１〔３１：１６〕およびソース２〔３１：１６〕をその入力とする。１６×１６乗算器Ｃ  ８１２は、ソース１〔４７：３２〕およびソース２〔４７：３２〕をその入力とする。１６×１６乗算器Ｄ  ８１３は、ソース１〔６３：４８〕およびソース２〔６３：４８〕をその入力とする。１６×１６乗算器Ａ  ８１０および１６×１６乗算器Ｂ  ８１１によって生成された３２ビットの中間結果は加算器８５０が受け取り、１６×１６乗算器Ｃ  ８１２および１６×１６乗算器Ｄ  ８１３によって生成された３２ビットの中間結果は加算器８５１が受け取る。
【００５８】
加算器８５０および加算器８５１はそれぞれ、その２つの３２ビット入力を加算する。加算器８５０の出力（すなわち、結果ビット３１〜ビット０）および加算器８５１の出力（すなわち、結果ビット６３〜ビット３２）は６４ビットの結果に結合されて結果レジスタ８７１に送られる。
【００５９】
一実施形態では、加算器８５１および加算器８５０がそれぞれ、適当な伝播遅延を有する３２ビット加算器から成る。しかし、各種の方法で、加算器８５１および加算器８５０を実現する代替実施形態も可能である。
第１表に関して記載した従来技術のＤＳＰ処理装置を使用して、この乗加算命令と等価の演算を実行するには、累算値をゼロにする１つの命令および４つの乗累算命令が必要である。第２表に関して記載した従来技術のＤＳＰ処理装置を使用して、この乗加算命令と等価の演算を実行するには、累算値をゼロにする１つの命令および２つの乗累算命令が必要である。
【００６０】
本発明の乗加算ユニット１４５の一実施形態では、本発明においてパック乗算演算に使用されるそれぞれの１６ビット乗算は、２ビットのブースの方法（Ｂｏｏｔｈ  ａｌｇｏｒｉｔｈｍ）を使用して実現される。乗算器におけるブースの方法の主な目的は、合計される部分積の数を減らすことである。部分積を少なくすると結果的に、乗算器に対するハードウェアおよび面積の要件が緩和される。以下の第５表に、１６個の部分積が生成される共通１６ビット乗算プロセスを記述する。各部分積は１ビットだけ左にシフトされ、乗数のそれぞれのビットが「１」であるか「０」であるかによって、全ての項が「０」となるか、または被乗数の正確な複製となる。全ての１６個の部分積全てをスライスごとに合計して、３２ビットの結果を生成する。
【００６１】
【表６】
2006107463.tif 000008
【００６２】
一方、下記の第６表に示す２ビット・ブース乗算器は異なる操作をする。この場合、合計で８つの部分積があり、各部分積は１７ビット長である。全ての部分積は、それぞれの部分積の内容を書き取るそれ自体のブース・エンコーダを有する。代替実施形態では、部分積を選択するのに、その他のブース・エンコード方式を使用することができる。
一般的な２ビット・ブース・エンコーダは５つの出力を有する。これらはそれぞれ、ゼロ、プラス１、プラス２、マイナス１、マイナス２演算用のものである。その真理値表を下記の第６表に示す。
【００６３】
【表７】
2006107463.tif 000009
【００６４】
ブース＝−２ｙｋ＋ｙｋ＋ｙｋ−１
第６表に示すように、ｙｋ＋１、ｙｋ、およびｙｋ‐１は、上位から降順に並べた乗数の隣接するビットである。下記の第７表にさらに、ブース・エンコーダの出力に基づく部分積の形態を記載する。
【００６５】
【表８】
2006107463.tif 000010
【００６６】
部分積を拡張する符号の代わりに、符号生成方法を使用して、部分積を減らすのに必要な桁上げ保存加算器（ＣＳＡ）の数を減らす。第８表に、符号生成方法を示す。部分積の符号ビットの補数が部分積の前に付加される。次いで、２つの１ビットが符号ビットの補数の前に付加される。
【００６７】
【表９】
2006107463.tif 000011
【００６８】
下記の第９表に、２ビット・ブース・エンコーダおよび符号生成方法を使用して８つの部分積を生成する本発明の一実施形態に使用される１６ビット乗算のプロセスを示す。
【００６９】
【表１０】
2006107463.tif 000012
【００７０】
一実施形態では、各ブース・エンコーダが隣接する３つの乗数ビットを含む（ｙ０は、乗算器ビットの最下位ビットであり、ｙ１５は最上位ビットである）。部分積の形態が、特定のブース・エンコーダに接続された１７個のセレクタおよび否定回路によって定義される。セレクタのデータ・ビットは、隣接する２つの乗数ビット、それらの補数、およびＶｃｃ（ゼロ演算用）を含む。選択された出力は次いで、一般にウォレス・ツリーと呼ばれる部分積減数ツリーの迷路を通過する。
部分積が全て選択されると、部分積の加算が開始される。ウォレス・ツリーは、全加算器および半加算器から形成される。第９ａ図ないし第９ｅ図に、乗加算ユニット１４５内の４つの１６ビット乗算器のそれぞれで実現され、本発明の一実施形態のために部分積の合計および減数を実行するウォレス・ツリーを示す。図示のように、８つの部分積は６つの部分積に減数され、次いで、４つの部分積、３つの部分積、最終的に２つの部分積にまで減数される。
【００７１】
より具体的には、第９ａ図ないし第９ｅ図に示すように、各行の下付き数字は、部分積のビットを表す（ａse15、ａs15 、ａ14〜ａ0 ）。各行は、別々の部分積を表す。ｎｅｇh 〜ｎｅｇa は、各部分積の２の補数の＋１部分を表す。その結果、ブース・エンコードされた乗数のあるビットが負の場合には、その対応する部分積の「ｎｅｇ」ビットが１であることが次の行に明示される。
【００７２】
さらに、第９ａ図ないし第９ｅ図に示すように、Ｓ＜位置＞＜加算器番号＞は、桁上げ保存加算器の合計部分を表す。＜加算器番号＞は、どの加算器行に合計が属するかを示す。加算器は、第９ａ図ないし第９ｅ図の上から下に向かって番号が付けられている。＜位置＞は、この加算器が、どの位置（０．．．３１）に対して演算を実施するかを示す。例えば、Ｓ42は、ビット位置４に対応する桁上げ保存加算器２の合計である。
【００７３】
Ｃ＜位置＞＜レベル＞は、桁上げ保存加算器の桁上げ部分を表す。＜レベル＞は、加算器のそれぞれの桁上げ行を示す。＜位置＞は、この加算器が、どの位置（０．．．３１）に対して演算を実施するかを示す。桁上げ保存加算器は、全加算器でも、半加算器でもよい。全加算器は３ビットを加算する。半加算器は２ビットを加算する。
【００７４】
第９ａ図ないし第９ｅ図には前述のとおり、符号生成方法の実施態様も示されている。図示のように、符号生成方法は、第１の部分積行の上の行のビット位置１６に１を生成する。最後の部分積行には、最上位のブース・エンコード数が負の場合には、この部分積は２の補数がとられるので、下の１行に１が作り出される。このプロセスは一般に、８行ではなく１０行を必要とする。乗算の行が多いほど、ハードウェアは、部分積を、桁上げ伝播加算器が加算できる２つの数にまで減らす必要が増す。
【００７５】
しかし、２進乗算は加算を介して実行される。２つの数を加算するときには、数の順序は関係ない。どちらの数が最初であっても結果は同じである。ウォレス・ツリー全般にわたってこの原理を利用して、必要とされる桁上げ保存の回数を低減させる。具体的には、一実施形態において、第９ａ図の第１行のビット位置１６にある１が、ｎｅｇh を含む第９図の最後の行のビット位置１６に移される。その結果、使用する行が少なくなるので、減数を実施するのに必要なハードウェアが少なくて済む。
【００７６】
第９ｂ図に、減数の第１レベルの結果を示す。四角い囲いは、桁上げ保存加算器がどのビットに対して演算を実施したかを示している。全てのものを６つの行にはめ込むため、いくつかのビットが移動されている。例えば、ビットｄse15は第１行に、Ｃse15は第５行にそれぞれ移動されている。ただし、ビットは、同じビット位置の中だけで上下に移動させなければならない。第９ｂ図から第９ｃ図に移ると、行の数が４に減少している。第９ｃ図から第９ｅ図に移ると、行の数が３に減少している。最終的には第９ｅ図に示すように、桁上げ保存加算器のもう一つの行によって行数が２に減少する。
第１０ａ図ないし第１０ｆ図に、第９ａ図ないし第９ｅ図に示したウォレス・ツリーの線図を実現する全加算器および半加算器からなる回路の一実施形態を示す。
【００７７】
第１１図に、この装置の一実施形態のブロック図を示す。全く同じ２つの１６ビット乗算器が示されている。この乗算器は、ビット０〜３１またはビット３２〜６３のいずれかに対して乗加算演算を実行することができる。乗加算ユニット１４５を完成させるために、図示の乗算器と構造が非常によく似た２つの１６ビット乗算器を追加することもできる。図示のように、各乗算器は、１６ビット乗算を実行し、１．５クロック・サイクルの間に２つの部分積を生成する。第３４クロックの低位相である次の０．５クロック・サイクルで、乗算器１１１０および１１２０によって生成された４つの部分積が４：２ＣＳＡ  １１３０によって再び加算される。制御信号１１５０が、乗算器１１１０の部分積か、または４：２ＣＳＡ  １１３０の出力で生成された部分積のいずれかを選択する（ｓｕｍｒｅｓおよびｃｏｕｔｒｅｓ）。選択されたデータは、乗算器１１２０の部分積とともにラッチされる。第３５クロックの高位相でＣＰＡ  １１４０が、生成された部分積を加算して３２ビットの結果を生成する。３２ビット加算の最後の分割が、ＦＵＢの外側のＭＵＸ−ラッチによって実施され、選択されたデータが、第３５クロック・サイクルの低位相で再び書き込まれる。
【００７８】
一実施形態では、乗加算ユニット１４５は、３レイテンシ−１スループット・ルールで動作する。言い替えると、ユニット１４５は、パイプされていないデータ・ストリームが入力されるたびにそのタスクを完了するのに３クロック・サイクルを要する。ユニット１４５の全ての入力は、バッファリングされ、これによって、外界へのキャパシタンスが非常に小さくなる。
【００７９】
３２Ｌの始めでデータは、ユニット１４５の入力で使用可能となるが、３３Ｈが開始されるまでは、データは有効ではない。したがってこの乗算は、３３Ｈの開始時に開始されたとみなされる。３３Ｈの間に、被乗数入力上の有効で安定なデータは、遅延部品を通過して流れ、ラッチ１１６０および１１７０によってそれぞれラッチされる。同時に、乗数入力上のデータは、入力バッファおよびブース・エンコーダ１１６５、１１７５を通過して伝播し、ラッチ１１８０および１１８２によってラッチされる。この時点で、乗数経路上のデータと被乗数経路上のデータは相互に完全に同期される。３３Ｌで、データは、ビット・セレクタ・アレイおよび、ウォレス・ツリーの第１の部分を形成する全加算器セットを通過し、ラッチ１１８０および１１８２のセットアップ時間前に有効となる。この時点で、部分積の数は８から４に減少する。３４Ｈで、データは、ウォレス・ツリーの残りの部分を形成する別の全加算器セットを通過し、３４Ｈの終わりに有効かつ安定となって、ラッチ１１８４および１１８６にラッチされる。
【００８０】
先に説明したように、３４Ｌの間に、データは、部分積の最後の選択のために、４：２圧縮器１１３０（２つの直列全加算器）および２−１ＭＵＸ１１３５を通過する。データは３４Ｌの終わりに有効となり、ラッチ１１９０によってラッチされる。３５Ｈの間に、ラッチ１１９０の出力の２つの部分積は最終的に、１つの加算ベクトルに減数される。この加算ベクトルは、ユニット１４５の外部とののマルチプレクサ−ラッチ境界、すなわちラッチ１１９５によって、分割されラッチされる。３５Ｌでデータは、ライトバック演算に使用可能となる。
【００８１】
前述のように、以前の乗累算命令は常に、乗算結果を累算値に加算する。この累算値が、乗算および累算以外の演算を実行する際の障害になる（例えば、以前の累算値を必要としない新しい演算セットが要求されるたびに、累算値は消去されなければならない）。累算の前に、丸めこみなどの演算を実行する必要がある場合にも、この累算値は障害となる。
【００８２】
対照的に、開示の乗加算演算は累算値を繰り越さない。そのため、これらの命令を、より広範なアルゴリズムに容易に使用できる。さらに、ソフトウェアのパイプライン処理を使用して、他に引けを取らないスループットを達成することができる。この乗加算命令の汎用性を示すために、いくつかの例示的なマルチメディア・アルゴリズムを以下に説明する。これらのマルチメディア・アルゴリズムのいくつかは、追加のパック・データ命令を使用する。これらの追加パック・データ命令の操作を、記載のアルゴリズムに関して示す。これらのパック・データ命令のより詳細な記述については、 に提出された出願第 号「Ａ  Ｓｅｔ  ｏｆ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｆｏｒ  Ｏｐｅｒａｔｉｎｇ  ｏｎ  Ｐａｃｋｅｄ  Ｄａｔａ」を参照されたい。当然のことながら、その他のパック・データ命令を使用することもできる。なお、データ転送、ルーピング、および条件つき分岐を管理する汎用処理命令の使用を必要とするいくつかのステップは、以下の例では割愛した。
【００８３】
１）複素数の乗算
開示の乗加算命令を使用して、単一の命令で、第１０ａ表に示す２つの複素数の乗算を実行することができる。前述のとおり、２つの複素数（例えばｒ１ｉ１およびｒ２ｉ２）の乗算は次式に従って実行される。
実数部＝ｒ１・ｒ２‐ｉ１・ｉ２
虚数部＝ｒ１・ｉ２＋ｒ２・ｉ１
１クロック・サイクルごとにこの命令が完了するようにこの命令が実施される場合には、本発明によって、２つの複素数の乗算を１クロック・サイクルごとに実行することができる。
【００８４】
【表１１】
2006107463.tif 000013
【００８５】
別の例として、第１０ｂ表に、３つの複素数の乗算に使用する命令を示す。
【表１２】
2006107463.tif 000014
【００８６】
２）乗累算演算
開示の乗加算命令を、値を乗累算するのにも使用することができる。例えば、下記の第１１表に示すように、それぞれ４つのデータ要素から成る２つのデータ要素セット（Ａ1−4 およびＢ1−4 ）の乗累算を実行することができる。一実施形態では、第６表に示した各命令が、各クロック・サイクルごとに完了するように実現される。
【００８７】
【表１３】
2006107463.tif 000015
【００８８】
各データ要素セットのデータ要素の数が８個を上まわり、それが４の倍数である場合には、以下の第１２表に示すように実行すると、これらのデータ要素セットの乗累算を少ない命令で実行することができる。
【００８９】
【表１４】
2006107463.tif 000016
【００９０】
他の例として、第１３表に、それぞれが２つのデータ要素を含むデータ要素セットＡおよびＢと、ＣおよびＤの個別の乗累算演算を示す。
【００９１】
【表１５】
2006107463.tif 000017
【００９２】
他の例として、第１４表に、それぞれが４つのデータ要素を含むデータ要素セットＡおよびＢと、ＣおよびＤの個別の乗累算演算を示す。
【００９３】
【表１６】
2006107463.tif 000018
【００９４】
３）ドット積アルゴリズム
ドット積（内積とも言う）は、信号処理演算および行列演算に使用される。ドット積は例えば、行列の積の計算、演算のディジタル・フィルタリング（ＦＩＲ、ＩＩＲフィルタリングなど）、相関シーケンスの計算などに使用される。多くの音声圧縮アルゴリズム（例えば、ＧＳＭ、Ｇ．７２８、ＣＥＬＰ、ＶＳＥＬＰなど）、およびＨｉ−Ｆｉ圧縮アルゴリズム（例えば、ＭＰＥＧ、サブバンド・コーディングなど）で、ディジタル・フィルタリングおよび相関計算が広範に使用されているため、ドット積の性能の向上が、これらのアルゴリズムの性能を向上させる。
長さＮの２つのシーケンスＡおよびＢのドット積は以下のように定義される。
【００９５】
【数１】
2006107463.tif 000019
【００９６】
ドット積計算の実行には、乗累算演算が広範に利用されている。この場合には、各シーケンスの対応する要素どうしが乗算され、これらの結果が累積されて、その結果としてのドット積が生成される。
ドット積計算は、乗加算命令を使用して実行することができる。例えば、４つの１６ビット要素を含む種類のパック・データが使用される場合には、ドット積計算は、４つの値をそれぞれが含む２つのシーケンスに対して以下のように実行される。
【００９７】
１）転送命令を使用して、Ａシーケンスの４つの１６ビット値にアクセスしソース１を生成する。
２）転送命令を使用して、Ｂシーケンスの４つの１６ビット値にアクセスしソース２を生成する。
３）乗加算命令、パック加算命令、シフト命令を使用して、前述のように乗累算演算を実行する。
【００９８】
数個以上の要素を有するベクトルに対して、第９表に示した方法が使用され、最終結果が最後に合計される。その他の支援命令には、累算レジスタを初期状態にするパックＯＲ命令およびパックＸＯＲ命令、計算の最後の段階で不必要な値を桁移動して切り捨てるパックシフト命令などがある。ループ制御演算は、処理装置１０９の命令セット中にすでに存在する命令を使用して実現される。
【００９９】
４）離散コサイン変換アルゴリズム
離散コサイン変換（ＤＣＴ）は、多くの信号処理アルゴリズムに使用される周知の関数である。この変換は、ビデオ圧縮および画像圧縮アルゴリズムで特に広範に利用されている。
画像圧縮およびビデオ圧縮アルゴリズムでは、ＤＣＴを使用して画素ブロックを、空間表現から周波数表現に変換している。周波数表現では、画像情報が、重要性が異なる各種周波数成分に分割される。圧縮アルゴリズムは、復元される画像内容に影響を及ぼさないよう選択的に、周波数成分を数量化するか、または破棄する。このようにして圧縮が達成される。
【０１００】
ＤＣＴの実施態様は多数ある。最も普及しているのは、高速フーリエ変換（ＦＦＴ）の計算手順に基づいてモデル化された高速変換法である。高速変換法では、Ｎ桁の変換は、Ｎ／２桁の変換とその結果の再結合とに分解される。この分解は、最小の２桁の変換に達するまで、実行することができる。この基本となる２桁の変換カーネルはしばしば、バタフライ演算と呼ばれる。バタフライ演算は次のように表現される。
Ｘ＝ａ＊ｘ＋ｂ＊ｙ
Ｙ＝ｃ＊ｘ‐ｄ＊ｙ
上式において、ａ、ｂ、ｃ、およびｄは係数と呼ばれるものであり、ｘおよびｙは入力データ、ＸおよびＹは変換出力である。
【０１０１】
乗加算演算によって、パック・データを使用したＤＣＴ計算を以下のように実行することができる。
１）転送命令およびアンパック命令を使用して、ｘおよびｙを表す２つの１６ビット値にアクセスしソース１（下記第１５表参照）を生成する。
２）下記第１５表に示すようにソース２を生成する。なお、ソース２を、いくつかのバタフライ演算で再使用することができることに留意されたい。
３）ソース１およびソース２を使用して乗加算命令を実行し、結果を生成する（下記第１５表参照）。
【０１０２】
【表１７】
2006107463.tif 000020
【０１０３】
いくつかの状況では、バタフライ演算の係数が１となる。これらの場合、このバタフライ演算は、パック加算命令およびパック減算命令を使用して実行できる加減算にすぎなくなる。
【０１０４】
ＩＥＥＥの文書に、ビデオ会議用に逆ＤＣＴ演算を実行する際に従わなければならない精度が指定されている。（ＩＥＥＥ  Ｃｉｒｃｕｉｔｓ  ａｎｄ  Ｓｙｓｔｅｍｓ  Ｓｏｃｉｅｔｙ，「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  Ｓｐｅｃｉｆｉｃａｔｉｏｎｓ  ｆｏｒ  ｔｈｅ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎｓ  ｏｆ  ８×８  Ｉｎｖｅｒｓｅ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ」，ＩＥＥＥ  Ｓｔｄ．１１８０−１９９０，ＩＥＥＥ  Ｉｎｃ．３４５  Ｅａｓｔ  ４７ｔｈ  Ｓｔ．，ＮＹ，ＮＹ  １００１７，ＵＳＡ．Ｍａｒｃｈ  １８，１９９１を参照されたい。）開示の乗加算命令は、１６ビットの入力を使用して３２ビットの出力を生成するので、要求される精度を満足する。
【０１０５】
このように、本明細書に記載の乗加算命令を使用して、複素数の乗算が必要なアルゴリズム、変換を必要とするアルゴリズム、および乗累算演算を必要とするアルゴリズムを含むいくつかの異なるアルゴリズムの性能を向上させることができる。その結果、この乗加算命令を汎用処理装置に使用して、前述の命令を上まわる数のアルゴリズムの性能を向上させることができる。
【０１０６】
本発明を、いくつかの実施形態に関して説明してきたが、本発明が、記載の実施形態に限定されるものではないことを当業者は理解するであろう。本発明の方法および装置は、添付した請求の範囲の趣旨および範囲に含まれる修正および変更を使用しても実施可能である。したがって、本明細書の説明を、本発明を限定するものとしてではなく例示的なものとしてとらえるべきである。
【図面の簡単な説明】
【０１０７】
【図１】第１図は、本発明の一実施形態を含むコンピュータ・システムを示す図である。
【図２】第２図は、本発明の一実施形態に基づいた処理装置のレジスタ・ファイルを示す図である。
【図３】第３図は、本発明の一実施形態に従ってデータを操作するのに処理装置が使用する一般的なステップを示すフロー図である。
【図４】第４図は、本発明の一実施形態に基づいたパック・データのデータ型を示す図である。
【図５ａ】第５ａ図は、本発明の一実施形態に基づいたレジスタ中のパック・データ表現を示す図である。
【図５ｂ】第５ｂ図は、本発明の一実施形態に基づいたレジスタ中のパック・データ表現を示す図である。
【図５ｃ】第５ｃ図は、本発明の一実施形態に基づいたレジスタ中のパック・データ表現を示す図である。
【図６ａ】第６ａ図は、本発明の一実施形態に基づいたパック・データの使用を指示する制御信号フォーマットを示す図である。
【図６ｂ】第６ｂ図は、本発明の一実施形態に基づいたパック・データの使用を指示する第２の制御信号フォーマットを示す図である。
【図７】第７図は、本発明の一実施形態に基づいたパック・データの乗加算演算を実行するステップを示すフロー図である。
【図８】第８図は、本発明の一実施形態に基づいたパック・データの乗加算演算を実行する回路を示す図である。
【図９ａ−９ｅ】第９ａ図ないし第９ｅ図は、本発明の一実施形態のために部分積の加算および減数を実行するウォレス・ツリーを示す図である。
【図１０ａ−１０ａｆ】第１０ａ図ないし第１０ａｆ図は、本発明の一実施形態に対して、第９ａ図ないし第９ｅ図のウォレス・ツリーを実現する回路の一実施形態を示す図である。
【図１１】第１１図は、本発明の一実施形態に基づいてパック・データの乗加算演算を実行する回路を示す図である。
【図１】
2006107463.tif 000021
【図２】
2006107463.tif 000022
【図３】
2006107463.tif 000023
【図４】
2006107463.tif 000024
【図５ａ】
2006107463.tif 000025
【図５ｂ】
2006107463.tif 000026
【図５ｃ】
2006107463.tif 000027
【図６ａ】
2006107463.tif 000028
【図６ｂ】
2006107463.tif 000029
【図７】
2006107463.tif 000030
【図８】
2006107463.tif 000031
【図９ａ】
2006107463.tif 000032
【図９ｂ】
2006107463.tif 000033
【図９ｃ】
2006107463.tif 000034
【図９ｄ】
2006107463.tif 000035
【図９ｅ】
2006107463.tif 000036
【図１０ａ】
2006107463.tif 000037
【図１０ｂ】
2006107463.tif 000038
【図１０ｃ】
2006107463.tif 000039
【図１０ｄ】
2006107463.tif 000040
【図１０ｅ】
2006107463.tif 000041
【図１０ｆ】
2006107463.tif 000042
【図１０ｇ】
2006107463.tif 000043
【図１０ｈ】
2006107463.tif 000044
【図１０ｉ】
2006107463.tif 000045
【図１０ｊ】
2006107463.tif 000046
【図１０ｋ】
2006107463.tif 000047
【図１０ｌ】
2006107463.tif 000048
【図１０ｍ】
2006107463.tif 000049
【図１０ｎ】
2006107463.tif 000050
【図１０ｏ】
2006107463.tif 000051
【図１０ｐ】
2006107463.tif 000052
【図１０ｑ】
2006107463.tif 000053
【図１０ｒ】
2006107463.tif 000054
【図１０ｓ】
2006107463.tif 000055
【図１０ｔ】
2006107463.tif 000056
【図１０ｕ】
2006107463.tif 000057
【図１０ｖ】
2006107463.tif 000058
【図１０ｗ】
2006107463.tif 000059
【図１０ｘ】
2006107463.tif 000060
【図１０ｙ】
2006107463.tif 000061
【図１０ｚ】
2006107463.tif 000062
【図１０ａａ】
2006107463.tif 000063
【図１０ａｂ】
2006107463.tif 000064
【図１０ａｃ】
2006107463.tif 000065
【図１０ａｄ】
2006107463.tif 000066
【図１０ａｅ】
2006107463.tif 000067
【図１０ａｆ】
2006107463.tif 000068
【図１１】
2006107463.tif 000069
【手続補正書】
【提出日】平成18年2月7日(2006.2.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１の複数のデータ要素を有する第１のパック・データ、およびそれに対応する第２の複数のデータ要素を有する第２のパック・データを指定する命令を受け取りデコードする第１の回路と；  前記第１の回路と通信状態にあり、前記第１および第２のパック・データの前記データ要素に少なくとも１回の加算および少なくとも１回の乗算を実行することによって少なくとも１つの結果データ要素を生成する第２の回路とを備えることを特徴とする演算装置。
【請求項２】
少なくとも４つのデータ要素を含む第１のパック・データ、および少なくとも４つのデータ要素を含む第２のパック・データを記憶する記憶領域と；  前記第１のパック・データおよび前記第２のパック・データを受け取るように前記記憶領域と結合し、命令の受け取りに応答して前記第１のパック・データ中および前記第２のパック・データ中のデータ要素に演算を実行して、少なくとも２つが乗加算演算の結果を含む、第３のパック・データ中の複数のデータ要素を生成するパック乗加算回路とを備えることを特徴とする演算装置。
【請求項３】
前記回路が、前記命令のビット３から５によって指定される前記記憶領域のある場所に、前記第３のパック・データを記憶することを特徴とする請求項２に記載の装置。
【請求項４】
前記回路が、前記第１のパック・データを前記第３のパック・データで上書きすることを特徴とする請求項２に記載の装置。
【請求項５】
前記回路が、各々が乗加算演算の結果を含む、前記第３のパック・データ中の少なくとも４つのデータ要素を生成することを特徴とする請求項２に記載の装置。
【請求項６】
前記回路が、前記第１のパック・データ中の８つのデータ要素、および前記第２のパック・データ中の８つのデータ要素に演算を実行することを特徴とする請求項５に記載の装置。
【請求項７】
第１のパック・データ中の各データ要素が第２のパック・データ要素中に対応するデータ要素を有する諸データ要素をそれぞれが含む命令で特定される前記第１のパック・データと前記第２のパック・データを受け取る段階と；  前記第１のパック・データ中および前記第２のパック・データ中の前記対応するデータ要素どうしを掛け合わせて、いくつかのセットにグループ化された対応する中間データ要素を生成する段階と；  複数の結果データ要素の第１の要素が、前記いくつかのセットの第１のセット中の中間データ要素の合計を含み、前記複数の結果データ要素の第２の要素が、前記いくつかのセットの第２のセット中の中間データ要素の合計を含む前記複数の結果データ要素を生成する段階と；  前記複数の結果データ要素を合計せずに、単一の命令の実行を完了させる段階とを含むことを特徴とする命令を実行する方法。
【請求項８】
他の命令に対するオペランドとして使用するために、前記複数の結果データ要素を第３のパック・データとして記憶する段階をさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記第１のパック・データ上に前記複数の結果データ要素を書き込む段階をさらに含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記いくつかのセットの第３のセット中の中間データ要素の合計を含む前記複数の結果データ要素の第３の要素を生成する段階と；  前記いくつかのセットの第４のセット中の中間データ要素の合計を含む前記複数の結果データ要素の第４の要素を生成する段階と；をさらに含むことを特徴とする請求項７に記載の方法。
【請求項１１】
第１のパック・データの各データ要素が第２のパック・データの異なるデータ要素に対応する、第１の複数のデータ要素を有する前記第１のパック・データおよび第２の複数のデータ要素を有する前記第２のパック・データの場所を指定する命令を受け取りデコードするデコーダと；  前記デコーダと通信状態にあり、前記第１および第２のパック・データの対応するデータ要素の積の合計をそれぞれが含む複数の結果データ要素を有するパック・データ結果を、前記デコーダが前記命令をデコードした後で、乗算および加算を実行することによって生成する実行ユニットとを備えることを特徴とする演算装置。
【請求項１２】
前記実行ユニットが、前記第１のパック・データまたは前記第２のパック・データのどちらかの上に前記パック・データ結果を記憶することを特徴とする請求項１１に記載の装置。
【請求項１３】
前記実行ユニットが、前記第１のパック・データの前記データ要素よりも精度の高い結果データ要素を生成することを特徴とする請求項１１に記載の装置。
【請求項１４】
前記実行ユニットが、前記複数の結果データ要素を合計せずに、前記命令の実行を完了させることを特徴とする請求項１１に記載の装置。
【請求項１５】
前記デコーダが、命令のビット０から２までが前記第２のパック・データの場所を指定し、前記命令のビット３から５までが前記第１のパック・データの場所を指定する２４ビットの命令フォーマットを有する前記命令をデコードすることを特徴とする請求項１１に記載の装置。
【請求項１６】
第１のパック・データの各データ要素が第２のパック・データの異なるデータ要素に対応する、第１の複数のデータ要素を有する前記第１のパック・データおよび第２の複数のデータ要素を有する前記第２のパック・データの場所を指定する命令を受け取る段階と；  前記命令を実行することにより、それぞれが前記第１および第２のパック・データの対応するデータ要素の４つの積の合計を含む４つの結果データ要素を含むパック・データ結果を生成する段階とを含むことを特徴とする演算方法。
【請求項１７】
前記結果データ要素が３２ビットのデータ要素であることを特徴とする請求項１６に記載の方法。
【請求項１８】
複数の結果データ要素群の第１結果データ要素はセット群の第１のセット内の中間データ要素を示し、また複数の結果データ要素群の第２結果データ要素はセット群の第２セット内の中間データ要素を示すことを特徴とする請求項７記載の方法。
【請求項１９】
上記中間データ要素は対になって複数のセットとなることを特徴とする請求項７記載の方法。
【請求項２０】
結果データ要素は第１および第２パックデータ間の対応するデータ要素の２つの積の合計値を有することを特徴とする請求項１１記載の装置。
【請求項２１】
少なくとも要素Ａ1，Ａ2，Ａ3およびＡ4を有する第１パックデータを記憶するように動作する第１記憶領域と；
少なくとも要素Ｂ1，Ｂ2，Ｂ3およびＢ4を有する第２パックデータを記憶するように動作する第２記憶領域と；
乗算回路と；
から構成され：
上記乗算回路は、上記要素Ａ1を受ける第１記憶領域と上記要素Ｂ1を受ける第２記憶領域に結合した第１乗算器と、上記要素Ａ2を受ける第１記憶領域と上記要素Ｂ2を受ける第２記憶領域に結合した第１の乗算器と、上記要素Ａ2を受ける第１記憶領域と上記要素Ｂ2を受ける第２記憶領域に結合した第２乗算器と、上記要素Ａ3を受ける第１記憶領域と上記要素Ｂ3を受ける第２記憶領域に結合した第３乗算器と、上記要素Ａ4を受けるように第１記憶領域と上記要素Ｂ4を受けるように第２記憶領域に結合した第４乗算器と、上記第１と第２の乗算器に接続した第１加算器と、第３と第４の乗算器に接続した第２加算器と、第１および第２の加算器に接続した第３記憶領域とから構成されており：上記第３の記憶領域は少くとも第１フィールドと第２フィールドを有し、上記第１フィールドは第３パックデータの第１データ要素として第１加算器の出力を保持し、また第２フィールドは第３パックデータの第２データ要素として第２加算器の出力を保存することを特徴とする演算装置。
【請求項２２】
Ａ1は１６ビット構成であり、第１データ要素は３２ビット構成である請求項２１記載の装置。
【請求項２３】
第１記憶領域又は第２記憶領域のいづれかが第３記憶領域として使用される請求項２１記載の装置。
【請求項２４】
第１加算器の出力は（Ａ1ｘＢ1＋Ａ2ｘＢ2）である請求項２１記載の装置。