(57)【要約】      （修正有）【課題】ドット積演算に必要な命令数の大幅な削減を行う方法、装置、およびプログラム手段を提供する。【解決手段】一実施形態では、装置は、１つのマイクロオペレーションに復号化された第１の命令を実行する実行リソースを含む。第１の命令に応答して、実行リソースは、少なくとも２つのソースオペランドのドット積を整数および浮動小数点を含む特定のデータタイプに対して演算し、結果値を前記ソースオペランドのうちの１つと同じレジスタまたはメモリロケーションに格納する。【選択図】図４
2008077663.tif 000002
【特許請求の範囲】
【請求項１】
一の命令が格納された機械可読媒体であって、
前記命令は一の機械により実行されると、前記機械に一の方法を実行させ、
前記方法は、少なくとも２つのオペランドの一のドット積結果を決定する工程と、前記ドット積結果を格納する工程とを含み、
前記少なくとも２つのオペランドは、それぞれ、第１のデータタイプの複数のパックド値を有する、機械可読媒体。
【請求項２】
前記第１のデータタイプは、整数データタイプである請求項１に記載の機械可読媒体。
【請求項３】
前記第１のデータタイプは、浮動小数点データタイプである請求項１に記載の機械可読媒体。
【請求項４】
前記少なくとも２つのオペランドは、それぞれ２つのパックド値しか有さない請求項１に記載の機械可読媒体。
【請求項５】
前記少なくとも２つのオペランドは、それぞれ４つのパックド値しか有さない請求項１に記載の機械可読媒体。
【請求項６】
前記複数のパックド値のそれぞれは、一の単精度値であり、また、３２ビットにより表現される請求項１に記載の機械可読媒体。
【請求項７】
前記複数のパックド値のそれぞれは、一の倍精度値であり、また、６４ビットにより表現される請求項１に記載の機械可読媒体。
【請求項８】
前記少なくとも２つのオペランドおよび前記ドット積結果は、最大１２８ビットのデータを格納する少なくとも２つのレジスタに格納される請求項１に記載の機械可読媒体。
【請求項９】
第１のデータタイプの少なくとも２つのパックドオペランドに、一の単一命令複数データ（ＳＩＭＤ）ドット積命令を実行する一の第１の論理を含む装置。
【請求項１０】
前記ＳＩＭＤドット積命令は、一のソースオペランド指示子、一のデスティネーションオペランド指示子、および少なくとも１つの即値指示子を含む請求項９に記載の装置。
【請求項１１】
前記ソースオペランド指示子は、複数のパックド値を格納する複数の要素を有する一のソースレジスタの一のアドレスを含む請求項１０に記載の装置。
【請求項１２】
前記デスティネーションオペランド指示子は、複数のパックド値を格納する複数の要素を有する一のデスティネーションレジスタの一のアドレスを含む請求項１１に記載の装置。
【請求項１３】
前記即値指示子は、複数の制御ビットを含む請求項１２に記載の装置。
【請求項１４】
前記少なくとも２つのパックドオペランドは、それぞれ倍精度整数である請求項９に記載の装置。
【請求項１５】
前記少なくとも２つのパックドオペランドは、それぞれ倍精度浮動小数点値である請求項９に記載の装置。
【請求項１６】
前記少なくとも２つのパックドオペランドは、それぞれ単精度整数である請求項９に記載の装置。
【請求項１７】
前記少なくとも２つのパックドオペランドは、それぞれ単精度浮動小数点値である請求項９に記載の装置。
【請求項１８】
一の単一命令複数データ（ＳＩＭＤ）ドット積命令を格納する一の第１のメモリと、
前記ＳＩＭＤドット積命令を実行するよう前記第１のメモリに結合される一のプロセッサと、
を含むシステム。
【請求項１９】
前記ＳＩＭＤドット積命令は、一のソースオペランド指示子、一のデスティネーションオペランド指示子、および少なくとも１つの即値指示子を含む請求項１８に記載のシステム。
【請求項２０】
前記ソースオペランド指示子は、複数のパックド値を格納する複数の要素を有する一のソースレジスタの一のアドレスを含む請求項１９に記載のシステム。
【請求項２１】
前記デスティネーションオペランド指示子は、複数のパックド値を格納する複数の要素を有する一のデスティネーションレジスタの一のアドレスを含む請求項２０に記載のシステム。
【請求項２２】
前記即値指示子は、複数の制御ビットを含む請求項２１に記載のシステム。
【請求項２３】
前記少なくとも２つのパックドオペランドは、それぞれ倍精度整数である請求項１８に記載のシステム。
【請求項２４】
前記少なくとも２つのパックドオペランドは、それぞれ倍精度浮動小数点値である請求項１８に記載のシステム。
【請求項２５】
前記少なくとも２つのパックドオペランドは、それぞれ単精度整数である請求項１８に記載のシステム。
【請求項２６】
前記少なくとも２つのパックドオペランドは、それぞれ単精度浮動小数点値である請求項１８に記載のシステム。
【請求項２７】
一の第１の積を生成するよう一の第１のパックドオペランドの一の第１のデータ要素と、一の第２のパックドオペランドの一の第１のデータ要素とを乗算する工程と、
一の第２の積を生成するよう前記第１のパックドオペランドの一の第２のデータ要素と、前記第２のパックドオペランドの一の第２のデータ要素とを乗算する工程と、
一のドット積結果を生成するよう前記第１の積と前記第２の積とを加算する工程と、
を含む方法。
【請求項２８】
一の第３の積を生成するよう前記第１のパックドオペランドの一の第３のデータ要素と、前記第２のパックドオペランドの一の第３のデータ要素とを乗算する工程をさらに含む請求項２７に記載の方法。
【請求項２９】
一の第４の積を生成するよう前記第１のパックドオペランドの一の第４のデータ要素と、前記第２のパックドオペランドの一の第４のデータ要素とを乗算する工程をさらに含む請求項２８に記載の方法。
【請求項３０】
一の第１のデータ値および一の第２のデータ値を含む一の第１のパックドオペランドを格納する一のソースレジスタと、
一の第３のデータ値および一の第４のデータ値を含む一の第２のパックドオペランドを格納する一のデスティネーションレジスタと、
一の単一命令複数データ（ＳＩＭＤ）ドット積命令を、該ドット積命令により示される一の制御値に応じて実行する論理と、
を含み、
前記論理は、
一の第１の積を生成するよう前記第１のデータ値と前記第３のデータ値を乗算する一の第１の乗算器と、
一の第２の積を生成するよう前記第２のデータ値と前記第４のデータ値を乗算する一の第２の乗算器と、
を含み、
前記論理はさらに、
少なくとも１つの和を生成するよう前記第１の積と前記第２の積を加算する少なくとも１つの加算器と、
を含むプロセッサ。
【請求項３１】
前記論理はさらに、前記制御値の一の第１のビットに依存して前記第１の積と一のヌル値との間で選択する一の第１のマルチプレクサを含む請求項３０に記載のプロセッサ。
【請求項３２】
前記論理はさらに、前記制御値の一の第２のビットに依存して前記第２の積と一のヌル値との間で選択する一の第２のマルチプレクサを含む請求項３１に記載のプロセッサ。
【請求項３３】
前記論理はさらに、前記デスティネーションレジスタの一の第１の要素に格納されるよう前記和と一のヌル値との間で選択する一の第３のマルチプレクサを含む請求項３２に記載のプロセッサ。
【請求項３４】
前記論理はさらに、前記デスティネーションレジスタの一の第２の要素に格納されるよう前記和と一のヌル値との間で選択する一の第４のマルチプレクサを含む請求項３３に記載のプロセッサ。
【請求項３５】
前記第１のデータ値、前記第２のデータ値、前記第３のデータ値、および前記第４のデータ値は、６４ビットの整数値である請求項３０に記載のプロセッサ。
【請求項３６】
前記第１のデータ値、前記第２のデータ値、前記第３のデータ値、および前記第４のデータ値は、６４ビットの浮動小数点値である請求項３０に記載のプロセッサ。
【請求項３７】
前記第１のデータ値、前記第２のデータ値、前記第３のデータ値、および前記第４のデータ値は、３２ビットの整数値である請求項３０に記載のプロセッサ。
【請求項３８】
前記第１のデータ値、前記第２のデータ値、前記第３のデータ値、および前記第４のデータ値は、３２ビットの浮動小数点値である請求項３０に記載のプロセッサ。
【請求項３９】
前記ソースレジスタおよび前記デスティネーションレジスタは、少なくとも１２８ビットのデータを格納する請求項３０に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数学演算を実行する処理装置、関連付けられるソフトウェア、およびソフトウェアシーケンスに関する。
【背景技術】
【０００２】
コンピュータシステムは、社会においてますます浸透してきている。コンピュータの処理能力は、様々な専門的職業において労働者の効率および生産性を向上してきた。コンピュータを購入および所有するための費用が下がり続けるのに従い、より多くの消費者がより新しく、より高速のマシーンの利益を享受することができるようになってきている。さらには、多くの人々が、その自由度のためにノート型コンピュータを使用している。モバイルコンピュータは、ユーザが会社を離れたり旅行したりする際にデータをユーザとともに容易に持ち運んだり、処理することを可能にする。このことは、マーケティングスタッフ、会社役員、さらには学生にもよく知られていることである。
【０００３】
プロセッサ技術が向上するのに従い、より新しいソフトウェアコードも、これらのプロセッサを有するマシーン上で実行するよう作成されている。ユーザは、一般的に、使用されているソフトウェアのタイプに関係なくユーザが使用するコンピュータでのより高いパフォーマンスを期待および要求する。このような問題の１つは、プロセッサ内で実際に実行される命令および演算の種類により生じる。特定のタイプの演算は、その演算の複雑性および／または必要な回路のタイプに基づいて、完了するのにより時間がかかる。このことは、プロセッサ内で特定の複雑な演算が実行される方法を最適化する機会を与える。
【０００４】
メディアアプリケーションは、十年以上もの間マイクロプロセッサの発展を促す機動力となってきている。実際に、ここ数年の多くのコンピューティングアップグレードは、メディアアプリケーションにより推進されてきている。これらのアップグレードは、主に消費者セグメントで行われてきたが、エンターテイメントエンハンスド教育およびコミュニケーションを目的とする企業セグメントにおいても著しい発展が見られる。それでもなお、将来のメディアアプリケーションは、より高い一層計算要件が必要となろう。その結果、未来の個人のコンピューティング経験は、オーディオ−ビジュアル効果においてより一層豊かになって使用するのが容易になり、また、より重要なことには、コンピューティングはコミュニケーションと融合するであろう。
【０００５】
したがって、画像の表示、並びに、集合的にコンテンツと称するオーディオおよびビデオデータの再生は、今日の計算装置においてますます人気の高いアプリケーションとなってきている。フィルタリング演算および畳み込み演算は、画像オーディオおよびビデオデータといったコンテンツデータに行われる最も一般的に行われる演算の一部である。このような演算は、計算集約的であるが、たとえば、単一命令複数データ（ＳＩＭＤ）レジスタといった様々なデータストレージデバイスを使用して効率のよい実施を行うことのできる高レベルのデータ並列処理を提供する。多くの現在のアーキテクチャも、多くのオペランドに様々な数学演算を実行するために複数の演算、命令、またはサブ命令（しばしば、「マイクロオペレーション」、すなわち、「ｕｏｐ」と称される）を必要とし、それにより、スループットを減少し、数学演算を実行するのに必要なクロックサイクル数を増加する。
【０００６】
たとえば、多数の命令を含む命令シーケンスが、ドット積を生成するのに必要な１つ以上の演算を実行するのに必要となる場合がある。命令には、処理装置、システム、またはコンピュータプログラムにおいて様々なデータタイプによって示される２つ以上の数の積を加算することが含まれる。しかし、このような従来技術の技法は、多数の処理サイクルを必要とし得、また、ドット積を生成するためにプロセッサまたはシステムが不必要に電力を消費する場合がある。さらに一部の従来技術の技法は、演算されうるオペランドデータタイプが限定される場合もある。
【発明を実施するための最良の形態】
【０００７】
本発明を、添付図面を参照して、例示的に且つ非限定的に説明する。
【０００８】
以下の説明は、処理装置、コンピュータシステム、またはソフトウェアプログラムにおいてドット積演算を行う技法の実施形態を説明する。以下の説明では、本発明のより完全な理解を提供するようプロセッサタイプ、マイクロアーキテクチャ条件、イベント、イネーブルメント機構などの多数の特定の詳細な記述がある。しかし、当業者には、本発明は、そのような特定の詳細な記述がなくても実施しうることを理解されよう。さらには、一部の周知の構造、回路などは、本発明を不必要に曖昧にすることを回避するよう詳述していない。
【０００９】
以下の実施形態は、プロセッサを参照して説明しているが、他の実施形態は他のタイプの集積回路および論理装置に適用することができる。本発明の同一の技法および教示内容を、より高いパイプラインスループットおよび向上した性能を得ることにより恩恵を受ける他のタイプの回路または半導体装置に容易に適用することができる。本発明の教示内容は、データ操作を実行する任意のプロセッサまたはマシーンに適用することができる。しかし、本発明は、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットデータ演算を実行するプロセッサまたはマシーンに限定されない。また、本発明は、パックドデータの操作を必要とする任意のプロセッサおよびマシーンに適用することができる。
【００１０】
以下の説明において、説明目的として、本発明の完全な理解を与えるよう多数の特定の詳細を示す。しかし、当業者は、これらの特定の詳細は、本発明を実施するのに必要不可欠ではないことを理解するであろう。また、周知の電気構造および回路は、本発明を不必要に曖昧にしないよう特に詳しくは述べていない。さらに、以下の説明は例を与えるものであり、また、添付図面は、説明目的の様々な例を示す。しかし、これらの例は、本発明のすべての可能な実施を網羅するものではなく、むしろ本発明の例を与えるに過ぎないので限定的に解釈すべきではない。
【００１１】
以下の例では、実行ユニットおよび論理回路のコンテキストにおける命令の処理および分配を説明するが、本発明の他の実施形態は、ソフトウェアにより実現することができる。一実施形態では、本発明の方法は、機械実行可能命令に具現化される。命令は、その命令がプログラムされた汎用プロセッサまたは特殊用途向けプロセッサが本発明の段階を実行するよう使用することができる。本発明は、本発明のプロセスを実行するようコンピュータ（または他の電子装置）をプログラムするよう使用されうる命令が格納された機械またはコンピュータ可読媒体を含みうるコンピュータプログラムプロダクトまたはソフトウェアとして供給されうる。あるいは、本発明の段階は、段階を実行する配線論理を含む特定のハードウェアコンポーネント、または、プログラムされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより実行されうる。そのようなソフトウェアは、システムのメモリ内に格納することができる。同様に、コードは、ネットワークを介して、または、他のコンピュータ可読媒体によって分配されることができる。
【００１２】
したがって、機械可読媒体は、機械（たとえば、コンピュータ）が可読の形式で情報を格納または伝送する任意の機構を含みうるが、フロッピー（登録商標）ディスケット、光学ディスク、コンパクトディスク、読み出し専用メモリ（ＣＤ−ＲＯＭ）、および磁気光学ディスク、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ）、電気消去可能プログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）、磁気または光学カード、フラッシュメモリ、インターネット上の伝送、電気的、光学的、音響的、または他の形式の伝播信号（たとえば、搬送波、赤外線信号、デジタル信号など）などに限定されない。したがって、コンピュータ可読媒体は、機械（たとえば、コンピュータ）が可読の形式で電子命令または情報を格納または伝送するのに好適な任意のタイプの媒体／機械可読媒体を含む。さらに、本発明は、コンピュータプログラムプロダクトとしてダウンロードされてもよい。したがって、プログラムは、リモートコンピュータ（たとえば、サーバ）からリクエストを出したコンピュータ（たとえば、クライアント）に転送されうる。プログラムの転送は、搬送波、または、通信リンク（たとえば、モデム、ネットワーク接続など）を介する他の伝播媒体で具現化される電気的、光学的、音響的、または他の形式のデータ信号によって行われうる。
【００１３】
設計は、作成からシミュレーション、さらには製作まで様々な段階を経る。１つの設計を示すデータは、多数の方法でその設計を表しうる。第一に、シミュレーションにおいて有用であるので、ハードウェアは、ハードウェア記述言語、または別の機能記述言語を使用して表されうる。さらに、論理ゲートおよび／またはトランジスタゲートを有する回路レベルモデルが設計プロセスの一部の段階において生成されうる。さらに、多くの設計は、ある段階において、ハードウェアモデルにおける様々な装置の物理的配置を表すデータのレベルに到達する。従来の半導体製造技術が使用される場合、ハードウェアモデルを表すデータは、集積回路の生成に使用されるマスクの様々なマスク層上の様々な特徴の有無を特定するデータでありうる。設計のどの表現においても、データは、任意の形式の機械可読媒体で格納されうる。そのような情報を伝送するよう変調、そうでなければ生成された光波または電波、メモリ、或いは、ディスクといった磁気または光学ストレージは、機械可読媒体でありうる。これらの媒体はいずれも、設計またはソフトウェア情報を「担持する」、または「示し」うる。コードまたは設計を示すまたは担持する電気搬送波が伝送される場合、電気信号のコピー、バッファリング、または再伝送が行われると、新しいコピーが作成される。したがって、通信プロバイダまたはネットワークプロバイダは、本発明の技法を具現化するアーティクル（搬送波）のコピーを作成しうる。
【００１４】
最新のプロセッサでは、多数の異なる実行ユニットを使用して、様々なコードおよび命令が処理および実行される。すべての命令はが同等に作成されているわけではなく、というのは、早く完了する命令もあれば、非常に大きい数のクロックサイクルを必要とする命令もあるからである。命令のスループットが高速であるほど、プロセッサ全体の性能はよりよくなる。したがって、多くの命令が可能な限り高速で実行されることが有利である。しかし、特定の命令はより複雑で、より多くの実行時間およびプロセッサリソースを必要とする。たとえば、浮動小数点命令、ロード演算／格納演算、データ移動などがある。
【００１５】
インターネットおよびマルチメディアアプリケーションにより多くのコンピュータシステムが使用されるにしたがって、追加のプロセッササポートが導入されるようになってきている。たとえば、単一命令、複数データ（ＳＩＭＤ）整数／浮動小数点命令、およびストリーミングＳＩＭＤ拡張（ＳＳＥ）は、特定のプログラムタスクを実行するのに必要な命令の総数を減少する命令である。換言すると、電力消費量を減少することができる。これらの命令は、複数のデータ要素を並列で演算することによりソフトウェアの性能を高速化することができる。その結果、ビデオ、スピーチ、および画像／写真処理を含む様々なアプリケーションにおいて性能向上を達成することができる。マイクロプロセッサおよび同様のタイプの論理回路でのＳＩＭＤ命令の実施は、通常多数の問題が伴う。さらに、ＳＩＭＤ演算は複雑なので、しばしば、データを正しく処理および操作するには追加回路を必要とする。
【００１６】
現在、ＳＩＭＤドット積命令は利用することができない。ＳＩＭＤドット積命令がなければ、オーディオ／ビデオ圧縮、処理、および操作といったアプリケーションで同じ結果を達成するには多数の命令およびデータレジスタが必要となりうる。したがって、本発明の一実施形態による少なくとも１つのドット積命令はコードオーバーヘッドおよびリソース要件を削減することができる。本発明の実施形態は、ＳＩＭＤ関連ハードウェアを使用するアルゴリズムとしてドット積演算を実施する方法を提供する。現在では、ＳＩＭＤレジスタ内のデータにドット積演算を行うことは若干困難且つ冗長的である。一部のアルゴリズムは、算術演算用にデータを配置するのに、これらの演算を実行する命令の実際の数より多くの命令を必要とする。本発明の実施形態によるドット積演算の実施形態を行うことにより、ドット積処理を実現するのに必要な命令数を大幅に削減することができる。
【００１７】
本発明の実施形態には、ドット積演算を実施する命令が関連する。ドット積演算は一般的に、少なくとも２つの値を乗算し、その積を、少なくとも２つの他の値の積に加算することが含まれる。一般的なドット積アルゴリズムに他の変更を加えてもよく、それには、様々なドット積演算の結果を加算して、別のドット積を生成することが含まれる。たとえば、データ要素に適用される一実施形態によるドット積演算は、一般的に以下のように表すことができる。
ＤＥＳＴ１←ＳＲＣ１＊ＳＲＣ２；
ＤＥＳＴ２←ＳＲＣ３＊ＳＲＣ４；
ＤＥＳＴ３←ＤＥＳＴ１+ＤＥＳＴ２；
パックドＳＩＭＤデータオペランドでは、このフローは、各オペランドの各データ要素に適用することができる。
【００１８】
上述のフローにおいて、「ＤＥＳＴ」および「ＳＲＣ」は、対応するデータまたは演算のソースおよびデスティネーションを表す一般的な用語である。一部の実施形態では、これらは、レジスタ、メモリ、または、示したもの以外の他の名前或いは機能を有する他のストレージ領域によって実施されうる。たとえば、一実施形態では、ＤＥＳＴ１およびＤＥＳＴ２は、第１および第２の一時ストレージ領域（たとえば、「ＴＥＭＰ１」レジスタおよび「ＴＥＭＰ２」レジスタ）でありうる。また、ＳＲＣ１およびＳＲＣ３は、第１および第２のデスティネーションストレージ領域（たとえば、「ＤＥＳＴ１」レジスタおよび「ＤＥＳＴ２」レジスタ）でありうる。他の実施形態では、２つ以上のＳＲＣおよびＤＥＳＴストレージ領域が、同じストレージ領域（たとえば、ＳＩＭＤレジスタ）内の異なるデータストレージ要素に対応しうる。さらに、１つの実施形態では、ドット積演算は、上述の一般的なフローによって生成されたドット積の和を生成しうる。
【００１９】
図１Ａは、本発明の一実施形態による、ドット積演算の命令を実行する実行ユニットを含むプロセッサを具備する例示的なコンピュータシステムを示すブロック図である。システム１００は、本願に説明する実施形態におけるような、本発明によるデータ処理アルゴリズムを実行する論理を含む実行ユニットを使用するプロセッサ１０２といった構成要素を含む。システム１００は、カリフォルニア州サンタクララにあるインテル社から入手できるＰＥＮＴＩＵＭ（登録商標）ＩＩＩマイクロプロセッサ、ＰＥＮＴＩＵＭ（登録商標）４マイクロプロセッサ、Ｘｅｏｎ（登録商標）マイクロプロセッサ、Ｉｔａｎｉｕｍ（登録商標）マイクロプロセッサ、ＸＳｃａｌｅ（登録商標）マイクロプロセッサ、および／またはＳｔｒｏｎｇＡＲＭ（登録商標）マイクロプロセッサに基づいた処理システムを表すが、他のシステム（他のマイクロプロセッサを有するＰＣ、エンジニアリングワークステーション、セットトップボックスなどを含む）を使用してもよい。一実施形態では、サンプルのシステム１００は、ワシントン州レドモンドにあるマイクロソフト社から入手できるＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムの１つのバージョンを実行しうるが、他のオペレーティングシステム（たとえば、ＵＮＩＸ（登録商標）およびリナックス）、組み込みソフトウェア、および／またはグラフィカルユーザインタフェースを使用してもよい。したがって、本発明の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
【００２０】
実施形態は、コンピュータシステムに限定されない。本発明の代替実施形態は、ハンドヘルド式装置といった他の装置および組み込みアプリケーションに使用することができる。ハンドヘルド式装置の一部の例には、セルラ電話機、インターネットプロトコル装置、デジタルカメラ、携帯情報端末（ＰＤＡ）、およびハンドヘルド式ＰＣが含まれる。組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、広域ネットワーク（ＷＡＮ）スイッチ、またはオペランドにドット積演算を行う任意の他のシステムを含むことができる。さらに、マルチメディアアプリケーションの効率を向上するために命令が幾つかのデータを同時に演算することができるよう一部のアーキテクチャが実施されている。データのタイプおよび容量が増えるにしたがって、コンピュータおよびそのプロセッサは、データをより効率のよい方法で操作するよう向上する必要がある。
【００２１】
図１Ａは、本発明の一実施形態による、１つ以上のオペランドからのデータ要素のドット積を計算するアルゴリズムを実行する１つ以上の実行ユニット１０８を含むプロセッサ１０２を具備するコンピュータシステム１００を示すブロック図である。一実施形態は、単一のプロセッサデスクトップまたはサーバシステムのコンテキストで説明されうるが、代替実施形態は、マルチプロセッサシステムに含まれてもよい。システム１００は、ハブアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実施するプロセッサ、または、たとえばデジタル信号プロセッサといった任意の他のプロセッサ装置でありうる。プロセッサ１０２は、プロセッサ１０２とシステム１００内の他のコンポーネントとの間でデータ信号を伝送可能なプロセッサバス１１０に結合される。システム１００の構成要素は、当業者には周知である従来の機能を行う。
【００２２】
一実施形態では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャに依存して、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有することができる。或いは、別の実施形態では、キャッシュメモリは、プロセッサ１０２の外部にあってもよい。他の実施形態は、特定の実施およびニーズに依存して内部キャッシュおよび外部キャッシュの両方の組み合わせを含むこともできる。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタ内に様々なタイプのデータを格納することができる。
【００２３】
実行ユニット１０８は、整数演算および浮動小数点演算を行う論理を含み、プロセッサ１０２内にある。プロセッサ１０２はさらに、特定のマクロ命令のマイクロコードを格納するマイクロコード（ｕコード）ＲＯＭを含む。この実施形態では、実行ユニット１０８は、パックド命令セット１０９を取り扱う論理を含む。一実施形態では、パックド命令セット１０９は、多数のオペランドのドット積を計算するパックドドット積命令を含む。パックド命令セット１０９を、命令を実行する関連付けられる回路とともに汎用プロセッサ１０２の命令セットに含むことによって、多くのマルチメディアアプリケーションによって使用される演算が、汎用プロセッサ１０２内でパックドデータを使用して実行されうる。したがって、多くのマルチメディアアプリケーションは、パックドデータに演算を実行するプロセッサのデータバスの全幅を使用することによって、より効率的に加速および実行されることができる。これは、一回に１つのデータ要素に１つ以上の演算を行うようプロセッサのデータバス全体に小さいデータユニットを転送する必要をなくす。
【００２４】
実行ユニット１０８の代替実施形態は、マイクロコントローラ、組み込みプロセッサ、グラフィックス装置、ＤＳＰ、および他のタイプの論理回路にも使用することができる。システム１００は、メモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）装置、スタティックランダムアクセスメモリ（ＳＲＡＭ）装置、フラッシュメモリ装置、または他のメモリ装置でありうる。メモリ１２０は、プロセッサ１０２により実行することのできるデータ信号により表される命令および／またはデータを格納することができる。
【００２５】
システム論理チップ１１６は、プロセッサバス１１０およびメモリ１２０に結合される。図示する実施形態におけるシステム論理チップ１１６は、メモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６に通信することができる。ＭＣＨ１１６は、命令およびデータの格納、ならびに、グラフィックコマンド、データ、およびテクスチャの格納を目的としたメモリ１２０への高帯域メモリパス１１８を供給する。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０、およびシステム１００内の他の構成要素の間でデータ信号を導き、且つ、プロセッサバス１１０、メモリ１２０、およびシステムＩ／Ｏ１２２の間でデータ信号をブリッジする。一部の実施形態では、システム論理チップ１１６は、グラフィックコントローラ１１２に結合するグラフィックポートを供給することができる。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に結合される。グラフィックカード１１２は、アクセレートグラフィックポート（ＡＧＰ）相互接続部１１４を介してＭＣＨ１１６に結合される。
【００２６】
システム１００は、専用ハブインタフェースバス１２２を使用してＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に結合する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して一部のＩ／Ｏ装置への直接接続を供給する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセット、およびプロセッサ１０２に接続することを目的とした高速Ｉ／Ｏバスである。一部の例は、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、ワイヤレス送受信器１２６、データストレージ１２４、ユーザ入力およびキーボードインタフェースを含むレガシＩ／Ｏコントローラ、汎用シリアルバス（ＵＳＢ）といったシリアル拡張ポート、およびネットワークコントローラ１３４である。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、または他のマスストレージデバイスを含むことができる。
【００２７】
システムの別の実施形態では、ドット積命令を有するアルゴリズムを実行する実行ユニットは、システムオンチップとともに使用することができる。システムオンチップの一実施形態は、プロセッサおよびメモリを含む。１つのこのようなシステムのメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステム構成要素と同じダイ上に位置付けられることが可能である。さらに、メモリコントローラまたはグラフィックコントローラといった他の論理ブロックも、システムオンチップ上に位置付けられる。
【００２８】
図１Ｂは、本発明の一実施形態の原理を実施するデータ処理システム１４０を示す。当業者には、本願に説明する実施形態は、本発明の範囲から逸脱することなく代替の処理システムに使用することができることは容易に理解できよう。
【００２９】
コンピュータシステム１４０は、ドット積演算を含むＳＩＭＤ演算を行うことのできる処理コア１５９を含む。一実施形態では、処理コア１５９は、以下に限定されないが、ＣＩＳＣ、ＲＩＳＣ、またはＶＬＩＷ型アーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを示す。処理コア１５９はさらに、１つ以上の処理技術での製造に好適でありうる。また、処理コア１５９は、十分に詳しく機械可読媒体上に表現されることによって、上述の製造を容易にするのに好適でありうる。
【００３０】
処理コア１５９は、実行ユニット１４２、一組のレジスタファイル１４５、およびデコーダ１４４を含む。処理コア１５９は追加回路（図示せず）も含むが、これは、本発明の理解には必要ではない。実行ユニット１４２は、処理コア１５９により受信された命令を実行するよう使用される。一般的なプロセッサ命令を認識することに加えて、実行ユニット１４２は、パックドデータ形式で演算を行うようパックド命令セット１４３内の命令を認識することができる。パックド命令セット１４３は、ドット積演算をサポートする命令を含み、さらに、他のパックド命令も含みうる。実行ユニット１４２は、内部バスによりレジスタファイル１４５に結合される。レジスタファイル１４５は、データを含む情報を格納するための処理コア１５９上のストレージ領域を表す。上述したように、パックドデータを格納するよう使用されるストレージ領域は、必要不可欠なわけではないことを理解するものとする。実行ユニット１４２は、デコーダ１４４に結合される。デコーダ１４４は、処理コア１５９によって受信された命令を、制御信号および／またはマイクロコードのエントリポイントに復号化するよう使用される。これらの制御信号および／またはマイクロコードのエントリポイントに応答して、実行ユニット１４２は適切な演算を実行する。
【００３１】
処理コア１５９は、様々な他のシステム装置と通信するためのバス１４１に結合される。この様々な他のシステム装置には、以下に限定されないが、たとえば、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントロール１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）コントロール１４７、バーストフラッシュメモリインタフェース１４８、パーソナルコンピュータメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（ＣＦ）（登録商標）カードコントロール１４９、液晶ディスプレイ（ＬＣＤ）コントロール１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、および代替バスマスタインタフェース１５２を含みうる。一実施形態では、データ処理システム１４０はさらに、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏ装置と通信するためのＩ／Ｏブリッジ１５４も含みうる。このようなＩ／Ｏ装置は、以下に制限されないが、汎用非同期受信器／送信器（ＵＡＲＴ）１５５、汎用シリアルバス（ＵＳＢ）１５６、ブルートゥースワイヤレスＵＡＲＴ１５７、およびＩ／Ｏ拡張インタフェース１５８を含みうる。
【００３２】
データ処理システム１４０の一実施形態は、モバイル、ネットワークおよび／またはワイヤレス通信を供給し、処理コア１５９は、ドット積演算を含むＳＩＭＤ演算を実行することができる。処理コア１５９は、ウォルシュ・アダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびそれぞれの逆変換、色空間変換といった圧縮／復元技法、ビデオエンコード動き推定またはビデオデコード動き補償、およびパルス符号変調（ＰＣＭ）といった変調／復調（ＭＯＤＥＭ）関数を含む様々なオーディオ、ビデオ、イメージング、および通信アルゴリズムでプログラムされうる。本発明の一部の実施形態はさらに、３次元（「３Ｄ」）モデリング、レンダリング、オブジェクトコリジョン検出、３Ｄオブジェクト変換およびライティングなどといったグラフィックアプリケーションにも適用してもよい。
【００３３】
図１Ｃは、ＳＩＭＤドット積演算を実行することのできるデータ処理システムの更なる一実施形態を示す。代替実施形態では、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入力／出力システム１６８を含みうる。入力／出力システム１６８は、ワイヤレスインタフェース１６９に選択的に結合されうる。ＳＩＭＤコプロセッサ１６１は、ドット積演算を含むＳＩＭＤ演算を実行することができる。処理コア１７０は、１つ以上の処理技術での製造に好適でありうる。また、処理コア１７０は、十分に詳しく機械可読媒体上に表現されることによって、処理コア１７０を含むデータ処理システム１６０の全体または一部の製造を容易にするのに好適でありうる。
【００３４】
一実施形態では、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２および一組のレジスタファイル１６４を含む。メインプロセッサ１６５の一実施形態は、実行ユニット１６２によって実行されるＳＩＭＤドット積計算命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む。代替実施形態では、ＳＩＭＤコプロセッサ１６１はさらに、命令セット１６３の命令を復号化するための少なくとも１つのデコーダ１６５Ｂの一部を含む。処理コア１７０はさらに追加回路（図示せず）を含むが、これは、本発明の実施形態を理解するには必要なわけではない。
【００３５】
動作時、メインプロセッサ１６６は、キャッシュメモリ１６７、および入力／出力システム１６８とのインタラクションを含む一般的なタイプのデータ処理演算を制御する一連のデータ処理命令を実行する。ＳＩＭＤコプロセッサ命令は、一連のデータ処理命令の中に組み込みされる。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令が、付属ＳＩＭＤコプロセッサ１６１により実行されるべきタイプであると認識する。それにより、メインプロセッサ１６６は、コプロセッサバス１６６上にこれらのＳＩＭＤコプロセッサ命令（またはＳＩＭＤコプロセッサ命令を表す制御信号）を発行する。コプロセッサバス１６６から、これらのＳＩＭＤコプロセッサ命令は任意の付属ＳＩＭＤコプロセッサにより受信される。この場合、ＳＩＭＤコプロセッサ１６１は、ＳＩＭＤコプロセッサ１６１を対象とした任意の受信ＳＩＭＤコプロセッサ命令を受け取り且つ実行する。
【００３６】
データは、ＳＩＭＤコプロセッサ命令による処理のためにワイヤレスインタフェース１６９を介して受信されてもよい。１つの例として、音声通信は、デジタル信号形式で受信されうる。このデジタル信号は、ＳＩＭＤコプロセッサ命令により処理されて、音声通信を表すデジタルオーディオサンプルを再生しうる。別の例では、圧縮オーディオおよび／またはビデオはデジタルビットストリーム形式で受信されうる。このデジタルビットストリームは、ＳＩＭＤコプロセッサ命令により処理されて、デジタルオーディオサンプルおよび／またはモーションビデオフレームを再生しうる。処理コア１７０の一実施形態では、ＳＩＭＤドット積命令を含む命令セット１６３の命令を認識するようメインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、実行ユニット１６２、一組のレジスタファイル１６４、およびデコーダ１６５を含む単一の処理コア１７０内に組み込まれる。
【００３７】
図２は、本発明の一実施形態によるドット積命令を実行する論理回路を含むプロセッサ２００のマイクロアーキテクチャを示すブロック図である。ドット積命令の一実施形態では、命令は、第１のデータ要素を第２のデータ要素と乗算し、その積を、第３のデータ要素と第４のデータ要素との積に加算することができる。一部の実施形態では、ドット積命令は、バイト、ワード、ダブルワード、クワッドワードなどのサイズ、ならびに、単および倍精度の整数および浮動小数点データタイプといったデータタイプを有するデータ要素に対して演算するよう実施することができる。一実施形態では、インオーダーフロントエンド２０１は、実行されるべきマクロ命令をフェッチし、マクロ命令がプロセッサパイプラインにおいて後ほど使用されるよう準備するプロセッサ２００の一部である。フロントエンド２０１は、幾つかのユニットを含みうる。一実施形態では、命令プリフェッチャ２２６は、メモリからマクロ命令をフェッチし、それらを命令デコーダ２２８に供給する。命令デコーダ２２８は次に、マクロ命令を、機械が実行することのできるマイクロ命令またはマイクロオペレーション（マイクロｏｐまたはｕｏｐとも称される）と称されるプリミティブに復号化する。一実施形態では、トレースキャッシュ２３０は、復号化されたｕｏｐを受け取り、それらを、実行のためにｕｏｐキュー２３４においてプログラムの順番がつけられたシーケンスまたはトレースにアセンブルする。トレースキャッシュ２３０が、複雑なマクロ命令に遭遇する場合、マイクロコードＲＯＭ２３２は、演算を完了するのに必要なｕｏｐを供給する。
【００３８】
多くのマクロ命令は、単一のマイクロ−ｏｐに変換される。一方で一部のマクロ命令は、完全な演算を完了するには幾つかのマイクロ−ｏｐを必要とする。一実施形態では、マクロ命令を完了するのに４つ以上のマイクロ‐ｏｐが必要な場合は、デコーダ２２８は、マクロ命令を行うようマイクロコードＲＯＭ２３２にアクセスする。一実施形態では、パックドドット積命令は、命令デコーダ２２８における処理のために少数のマイクロｏｐに復号化されることができる。別の実施形態では、パックドドット積アルゴリズムの命令は、演算を完了するのに多数のマイクロ‐ｏｐが必要である場合には、マイクロコードＲＯＭ２３２内に格納できる。トレースキャッシュ２３０は、マイクロコードＲＯＭ２３２内のドット積アルゴリズムのマイクロコードシーケンスを読み出しするための正しいマイクロ命令ポインタを決定するためにエントリポイントプログラマブル論理アレイ（ＰＬＡ）を参照する。マイクロコードＲＯＭ２３２が、現在のマクロ命令のマイクロ−ｏｐのシーケンシングを終了後、機械のフロントエンド２０１は、トレースキャッシュ２３０からのマイクロ−ｏｐのフェッチを再開する。
【００３９】
一部のＳＩＭＤ命令および他のマルチメディアタイプの命令は、複雑な命令と考えられる。多くの浮動小数点関連命令も複雑な命令である。したがって、命令デコーダ２２８が複雑なマクロ命令に遭遇する場合、マイクロコードＲＯＭ２３２の適切なロケーションがアクセスされ、そのマクロ命令のためのマイクロコードシーケンスが取り出しされる。そのマクロ命令を実行するのに必要な様々なマイクロ−ｏｐは、アウトオブオーダー実行エンジン２０３に通信され、適切な整数および浮動小数点実行ユニットにおいて実行される。
【００４０】
アウトオブオーダー実行エンジン２０３では、実行のためにマイクロ命令の準備が整えられる。アウトオブオーダー実行論理は、マイクロ命令がパイプラインを下流に流れる際のパフォーマンスを最適化し、予定通りに実行されるようマイクロ命令のフローを滑らか且つ再度順序付けるための多数のバッファを有する。アロケータ論理は、各ｕｏｐを実行するのに必要なマシーンバッファとリソースを割り当てする。レジスタリネーミング論理は、論理レジスタをレジスタファイル内のエントリにリネームする。アロケータはさらに、命令スケジューラ、すなわち、メモリスケジューラ、高速スケジューラ２０２、低速／汎用浮動小数点スケジューラ２０４、および単純浮動小数点スケジューラ２０６の前に、エントリを、２つのｕｏｐキューのうちの１つにおける各ｕｏｐに対して、メモリ演算に対して、および非メモリ演算に対して割り当てする。ｕｏｐスケジューラ２０２、２０４、２０６は、スケジューラの依存入力レジスタオペランドソースの準備状態と、演算を完了するのに必要なｕｏｐの実行リソースの可用性とに基づいて、ｕｏｐを実行する準備が整っているときを判断する。この実施形態における高速スケジューラ２０２は、１メインクロックサイクルの各半分でスケジュールすることができるが、他のスケジューラは、メインプロセッサクロックサイクルにつき１回しかスケジュールすることができない。スケジューラは、実行するｕｏｐをスケジュールするためにディスパッチポートを仲裁する。
【００４１】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間にある。整数演算および浮動小数点演算に対してそれぞれ別個のレジスタファイル２０８、２１０がある。本実施形態の各レジスタファイル２０８、２１０はさらに、新しい依存ｕｏｐに対してレジスタファイル内にまだ書き込みされていない完了したばかりの結果をバイパスまたは転送することのできるバイパスネットワークを含む。整数レジスタファイル２０８および浮動小数点レジスタファイル２１０は、互いにデータを通信することもできる。一実施形態では、整数レジスタファイル２０８は、２つの別個のレジスタファイルに分割される。すなわち、データの下位３２ビット用のレジスタファイルと、データの上位３２ビット用の第２のレジスタファイルである。一実施形態の浮動小数点レジスタファイル２１０は、浮動小数点命令は一般的に６４乃至１２８ビット幅のオペランドを有するので、１２８ビット幅エントリを有する。
【００４２】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含み、ここで命令が実際に実行される。このセクションは、マイクロ命令が実行する必要のある整数および浮動小数点データオペランド値を格納するレジスタ２０８、２１０を含む。この実施形態のプロセッサ２００は、多数の実行ユニット、すなわち、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４を含む。この実施形態では、浮動小数点実行ブロック２２２、２２４が、浮動小数点演算、ＭＭＸ演算、ＳＩＭＤ演算、およびＳＳＥ演算を実行する。この実施形態の浮動小数点ＡＬＵ２２２は、除算、平方根、および剰余のマイクロ−ｏｐを実行する６４ビット×６４ビット浮動小数点除算器を含む。本発明の実施形態では、浮動小数点値に関連する任意の動作は、浮動小数点ハードウェアを使用して行われる。たとえば、整数形式と浮動小数点形式との間の変換は、浮動小数点レジスタファイルが関連する。同様に、浮動小数点減算演算は、浮動小数点減算器において行われる。一方で、非浮動小数点数および整数タイプは、整数ハードウェアリソースを使用して取り扱われる。単純で、非常に頻度の高いＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８に供給される。本実施例の高速ＡＬＵ２１６、２１８は、１クロックサイクルの半分の有効レイテンシーで高速演算を実行することができる。一実施形態では、多くの複雑な整数演算は、低速ＡＬＵ２２０に供給される。というのは、低速ＡＬＵ２２０は、乗算器、シフト、フラグ論理、およびブランチ処理といった長いレイテンシータイプの演算用の整数実行ハードウェアを含むからである。メモリロード／格納演算は、ＡＧＵ２１２、２１４により実行される。この実施形態では、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドに整数演算を実行するコンテキストにおいて説明される。代替実施形態では、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６などを含む様々なデータビットをサポートするよう実施することができる。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有する様々なオペランドをサポートするよう実施することができる。一実施形態では、浮動小数点ユニット２２２、２２４は、ＳＩＭＤおよびマルチメディア命令とともに１２８ビット幅のパックドデータオペランドに対して演算することができる。
【００４３】
この実施形態では、ｕｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に依存演算をディスパッチする。ｕｏｐは考えられてスケジュールされ、プロセッサ２００内で実行されるので、プロセッサ２００は、メモリミスに対処する論理も含む。データキャッシュへのデータロードが失敗した場合、一時的に不正確なデータを有してスケジューラから離れた依存演算が、パイプライン内に経過中でありうる。再生メカニズムが、不正確なデータを使用する命令を追跡し、再実行する。依存演算だけが再生される必要があり、独立演算は完了することができる。プロセッサの一実施形態のスケジューラおよび再生メカニズムはさらに、ドット積演算用の命令シーケンスを捕捉するよう設計される。
【００４４】
本願に使用する「レジスタ」という用語は、オペランドを識別するためにマクロ命令の一部として使用されるオンボードプロセッサストレージロケーションを意味する。換言すれば、本願で参照するレジスタは、プロセッサの外側から（プログラマの視点から）可視であるレジスタを意味する。しかし、一実施形態のレジスタは、特定のタイプの回路を意味すると限定されるべきではない。むしろ一実施形態のレジスタは、データを格納および供給することができ、また本願に記載する機能を実行することさえできればよい。本願に記載するレジスタは、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせなどといった様々な技法のうちの任意の数の技法を用いてプロセッサ内の回路によって実施されることができる。一実施形態では、整数レジスタは、３２ビット整数データを格納する。一実施形態のレジスタファイルはさらに、パックドデータに対して１６個のＸＭＭレジスタおよび汎用レジスタと、８個のマルチメディア（たとえば、「ＥＭ６４Ｔ」追加）マルチメディアＳＩＭＤレジスタを含む。以下の説明において、レジスタは、カリフォルニア州サンタクララのインテル社のＭＭＸ技術が有効にされたマイクロプロセッサ内の６４ビット幅ＭＭＸ（登録商標）レジスタ（一部では、「ｍｍ」レジスタとも称される）といったように、パックドデータを保持するよう設計されるデータレジスタであると理解する。これらのＭＭＸレジスタは、整数と浮動小数点の形式の両方で使用でき、ＳＩＭＤおよびＳＳＥ命令を伴うパックドデータ要素とともに動作することができる。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはそれ以降（「ＳＳＥｘ」と総称する）の技術に関連する１２８ビット幅ＸＭＭレジスタもそのようなパックドデータオペランドを保持するよう使用することができる。この実施形態では、パックドデータおよび整数データを格納するにあたって、レジスタは、２つのデータタイプを区別する必要はない。
【００４５】
以下の図面の例において、多数のデータオペランドを説明する。図３Ａは、本発明の一実施形態によるマルチメディアレジスタにおける様々なパックドデータタイプの表現を示す。図３Ａは、１２８ビット幅オペランドに対するパックドバイト３１０、パックドワード３２０、およびパックドダブルワード（ｄワード）３３０のデータタイプを示す。この例のパックドバイト形式３１０は、１２８ビット長であり、１６個のパックドバイトデータ要素を含む。ここでは１バイトは、８ビットのデータとして定義される。各バイトデータ要素の情報は、バイト０に対してビット７乃至ビット０に格納され、バイト１に対してビット１５乃至ビット８に格納され、バイト２に対してビット２３乃至ビット１６に格納され、最後に、バイト１５に対してビット１２０乃至ビット１２７に格納される。したがって、レジスタにおいてすべての利用可能なビットは使用される。このストレージ配置は、プロセッサのストレージ効率を向上する。その上、１６個のデータ要素にアクセスされることによって、１つの演算を、１６個のデータ要素で並列に実行することができる。
【００４６】
一般的に、データ要素は、他の同じ長さのデータ要素とともに単一のレジスタまたはメモリロケーションに格納される個々のデータ片である。ＳＳＥｘ技術に関連するパックドデータシーケンスでは、ＸＭＭレジスタ内に格納されるデータ要素の数は、１２８ビットを個々のデータ要素のビット長により除算した数である。同様に、ＭＭＸおよびＳＳＥ技術に関連するパックドデータシーケンスでは、ＭＭＸレジスタ内に格納されるデータ要素の数は、６４ビットを個々のデータ要素のビット長により除算した数である。図３Ａに示すデータタイプは、１２８ビット長であるが、本発明の実施形態は、６４ビット幅または他のサイズのオペランドを使用して演算することができる。この例のパックドワード形式３２０は、１２８ビット長であり、８個のパックドワードデータ要素を含む。各パックドワードは、１６ビットの情報を含む。図３Ａのパックドダブルワード形式３３０は、１２８ビット長であり、４個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は、３２ビットの情報を含む。パックドクワッドワードは、１２８ビット長であり、２個のパックドクワッドワードデータ要素を含む。
【００４７】
図３Ｂは、レジスタにおける代替のデータストレージ形式を示す。各パックドデータは、１つ以上の独立データ要素を含んでもよい。３つのパックドデータ形式、すなわち、パックドハーフ３４１、パックドシングル３４２、パックドダブル３４３を示す。パックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３の一実施形態は、固定小数点データ要素を含む。代替実施形態では、１つ以上のパックドハーフ３４１、パックドシングル３４２、およびパックドダブル３４３は、浮動小数点データ要素を含んでもよい。パックドハーフ３４１の１つの代替実施形態は、８個の１６ビットデータ要素を含む１２８ビット長である。パックドシングル３４２の一実施形態は、１２８ビット長であり、４個の３２ビットデータ要素を含む。パックドダブル３４３の一実施形態は、１２８ビット長であり、２個の６４ビットデータ要素を含む。このようなパックドデータ形式は、たとえば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビットまたはそれ以上の他のレジスタ長にさらに拡張されうることを理解されよう。
【００４８】
図３Ｃは、本発明の一実施形態による、マルチメディアレジスタにおける様々な符号付きおよび符号なしパックドデータタイプ表現を示す。符号なしパックドバイト表現３４４は、ＳＩＭＤレジスタにおける符号なしパックドバイトのストレージを示す。各バイトデータ要素に対する情報は、バイト０に対してビット７乃至ビット０に格納され、バイト１に対してビット１５乃至ビット８に格納され、バイト２に対してビット２３乃至ビット１６に格納され、最後に、バイト１５に対してビット１２０乃至ビット１２７に格納される。したがって、レジスタにおいてすべての利用可能なビットは使用される。このストレージ配置は、プロセッサのストレージ効率を向上する。その上、１６個のデータ要素にアクセスされることによって、１つの演算を、１６個のデータ要素で並列に実行することができる。符号付きパックドバイト表現３４５は、符号付きパックドバイトのストレージを示す。なお、各バイトデータ要素の８番目のビットは、符号指示子である。符号なしパックドワード表現３４６は、ワード７乃至ワード０がＳＩＭＤレジスタ内に格納される方法を示す。符号付きパックドワード表現３４７は、符号なしパックドワードレジスタ内表現３４６と似ている。なお、各ワードデータ要素の１６番目のビットは、符号指示子である。符号なしパックドダブルワード表現３４８は、ダブルワードデータ要素が格納される方法を示す。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードレジスタ内表現３４８と似ている。なお、必要な符号ビットは、各ダブルワードデータ要素の３２番目のビットである。
【００４９】
図３Ｄは、３２以上のビットと、ワールドワイドウェブ（ｗｗｗ）のintel.com/design/litcentr.上でカリフォルニア州サンタクララのインテル社から入手可能な「IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference」に記載される１つのタイプのｏｐコード形式に対応するレジスタ／メモリオペランドアドレッシングモードを有する演算符号化（ｏｐコード）形式３６０の一実施形態を示す。一実施形態では、ドット積演算は、１つ以上のフィールド３６１および３６２により符号化されうる。１命令につき最大２つのオペランドロケーションが識別され、最大２つのソースオペランド識別子３６４および３６５が含まれる。ドット積命令の一実施形態では、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６４と同じである。一方で他の実施形態では、デスティネーションオペランド識別子３６６とソースオペランド識別子３６４は異なる。代替実施形態では、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６５と同じである。一方で他の実施形態では、デスティネーションオペランド識別子３６６と、ソースオペランド識別子３６５は異なる。ドット積命令の一実施形態では、ソースオペランド識別子３６４および３６５により識別されるソースオペランドのうちの１つは、ドット積演算の結果により上書きされ、一方で別の実施形態では、識別子３６４は、ソースレジスタ要素に対応し、識別子３６５は、デスティネーションレジスタ要素に対応する。ドット積命令の一実施形態では、オペランド識別子３６４および３６５は、３２ビットまたは６４ビットのソースおよびデスティネーションオペランドを識別するよう使用されうる。
【００５０】
図３Ｅは、４０以上のビットを有する別の代替演算符号化（ｏｐコード）形式３７０を示す。ｏｐコード形式３７０は、ｏｐコード形式３６０に対応し、オプションのプレフィックスバイト３７８を含む。ドット積演算のタイプは、１つ以上のフィールド３７８、３７１、および３７２により符号化されうる。１命令につき最大２つのオペランドロケーションが、ソースオペランド識別子３７４および３７５、およびプレフィックスバイト３７８により識別されうる。ドット積命令の一実施形態では、プレフィックスバイト３７８は、３２ビットまたは６４ビットのソースおよびデスティネーションオペランドを識別するよう使用されうる。ドット積命令の一実施形態では、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７４と同じである。一方で別の実施形態では、デスティネーションオペランド識別子３７６とソースオペランド識別子３７４は異なる。代替実施形態では、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７５と同じである。一方で別の実施形態では、デスティネーションオペランド識別子３７６とソースオペランド識別子３７５は異なる。一実施形態では、ドット積演算は、オペランド識別子３７４および３７５により識別されるオペランドの１つを、オペランド識別子３７４および３７５により識別される別のオペランドに対して乗算し、また、ドット積演算の結果によって上書きされる。一方で、他の実施形態では、識別子３７４および３７５により識別されるオペランドのドット積は、別のレジスタの別のデータ要素に書き込みされる。ｏｐコード形式３６０および３７０は、ＭＯＤフィールド３６３および３７３、ならびにオプションのスケール−インデックス−ベースバイトおよび移動バイトにより部分的に特定される、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即時によるレジスタ、レジスタ対メモリのアドレッシングを可能にする。
【００５１】
次に図３Ｆを参照するに、一部の代替実施形態では、６４ビット単一命令複数データ（ＳＩＭＤ）算術演算は、コプロセッサデータ処理（ＣＤＰ）命令を介して行われうる。演算符号化（ｏｐコード）形式３８０は、ＣＤＰｏｐコードフィールド３８２および３８９を有する１つのそのようなＣＤＰ命令を示す。ＣＤＰ命令のタイプは、ドット積演算の代替実施形態では、１つ以上のフィールド３８３、３８４、３８７、および３８８により符号化されうる。１命令につき最大３つのオペランドロケーションが識別され、最大２つのソースオペランド識別子３８５および３９０、および１つのデスティネーションオペランド識別子３８６が含まれうる。コプロセッサの一実施形態は、８、１６、３２、および６４ビット値に対して動作することができる。一実施形態では、ドット積演算は、整数データ要素に対して行われる。一部の実施形態では、ドット積命令は、選択フィールド３８１を使用して条件付きで実行されうる。一部のドット積命令では、ソースデータサイズは、フィールド３８３により符号化されうる。ドット積命令の一部の実施形態では、ゼロ（Ｚ）、負（Ｎ）、キャリー（Ｃ）、およびオーバーフロー（Ｖ）の検出をＳＩＭＤフィールド上で行うことができる。一部の命令では、飽和のタイプがフィールド３８４によって符号化されうる。
【００５２】
図４は、本発明によるパックドデータオペランドにドット積演算を行う論理の一実施形態を示すブロック図を示す。本発明の実施形態は、上述したような様々なタイプのオペランドとともに機能するよう実施できる。一実施形態では、本発明によるドット積演算は、特定のデータタイプに対して演算する一組の命令として実施される。たとえば、ドット積パックド単精度（ＤＰＰＳ）命令は、整数および浮動小数点を含む３２ビットデータタイプのドット積を決定するよう供給される。同様に、ドット積パックド倍精度（ＤＰＰＤ）命令は、整数および浮動小数点を含む６４ビットデータタイプのドット積を決定するよう供給される。これらの命令は異なる名前を有するが、これらの命令が行うドット積演算は全体的に似ている。簡単にすることを目的として、以下の説明および例は、データ要素を処理するドット積命令のコンテキストで示す。
【００５３】
一実施形態では、ドット積命令は、第１のデータオペランドデータＡ４１０の識別子および第２のデータオペランドデータＢ４２０の識別子、ならびにドット積演算の結果４４０の識別子（一実施形態では、第１のデータオペランド識別子のうちの１つと同じ識別子でありうる）における様々な情報を特定する。以下の説明において、データＡ、データＢ、および結果は、オペランドまたはデータブロックとして一般的に称されるが、これらに限定されず、また、レジスタ、レジスタファイル、およびメモリロケーションも含む。一実施形態では、各ドット積命令（ＤＰＰＳ、ＤＰＰＤ）は、１つのマイクロオペレーションに復号化される。代替実施形態では、各命令は、データオペランドにドット積演算を行う様々な数のマイクロｏｐに復号化されうる。ここの例では、オペランド４１０、４２０は、ワード幅データ要素を有するソースレジスタ／メモリに格納される１２８ビット幅の情報片である。一実施形態では、オペランド４１０、４２０は、１２８ビットＳＳＥｘ  ＸＭＭレジスタといった１２８ビット長のＳＩＭＤレジスタに保持される。一実施形態では、結果４４０も、ＸＭＭデータレジスタである。さらに、結果４４０は、ソースオペランドのうちの１つと同じレジスタまたはメモリロケーションでありうる。特定の実施に依存して、オペランドおよびレジスタは、３２、６４、および２５６ビットといったように他の長さで、また、バイト、ダブルワード、またはクワッドワードサイズのデータ要素を有することができる。ここの例では、データ要素は、ワードのサイズであるが、同じ考え方を、バイトおよびダブルワードサイズの要素に拡張することができる。データオペランドが６４ビット幅である一実施形態では、ＭＭＸレジスタは、ＸＭＭレジスタの代わりに使用される。
【００５４】
ここの例での第１のオペランド４１０は、８個のデータ要素のセット、すなわち、Ａ３、Ａ２、Ａ１、およびＡ０を含む。各データ要素はそれぞれ、結果４４０におけるデータ要素の位置に対応する。第２のオペランド４２０は、８個のデータセグメントの別のセット、すなわち、Ｂ３、Ｂ２、Ｂ１、およびＢ０を含む。ここでのデータセグメントはそれぞれ長さが等しく、それぞれ、シングルワード（３２ビット）のデータを含む。しかし、データ要素およびデータ要素位置は、ワード以外の他の粒度も有することができる。各データ要素がバイト（８ビット）、ダブルワード（３２ビット）、またはクワッドワード（６４ビット）である場合、１２８ビットのオペランドは、それぞれ、１６個のバイト幅、４個のダブルワード幅、または２つのクワッドワード幅のデータ要素を有することになる。本発明の実施形態は、特定の長さのデータオペランドまたはデータセグメントに限定されず、各実施に適切にサイズを決めることができる。
【００５５】
オペランド４１０、４２０は、レジスタまたはメモリロケーション、或いは、レジスタファイルまたはミックス内にありうる。データオペランド４１０、４２０は、ドット積命令とともにプロセッサ内の実行ユニットのドット積計算論理４３０に送信される。一実施形態では、ドット積命令が実行ユニットに到達するころには、命令はプロセッサのパイプラインにおいて先に復号化されているべきである。したがって、ドット積命令は、マイクロオペレーション（ｕｏｐ）の形式または一部の他の復号化形式でありうる。一実施形態では、２つのデータオペランド４１０、４２０は、ドット積計算論理４３０において受信される。ドット積計算論理４３０は、第１のオペランド４１０の２つのデータ要素の第１の乗算積を、第２のオペランド４２０の対応するデータ要素位置にある２つのデータ要素の第２の乗算積とともに生成し、第１の乗算積と第２の乗算積の和を、結果４４０の適切な位置に格納する。この位置は、第１のオペランドまたは第２のオペランドと同じストレージ位置に対応しうる。一実施形態では、第１および第２のオペランドからのデータ要素は、単精度（たとえば、３２ビット）である。一方で別の実施形態では、第１および第２のオペランドからのデータ要素は、倍精度（たとえば、６４ビット）である。
【００５６】
一実施形態では、すべてのデータ位置に対するデータ要素が並列で処理される。別の実施形態では、データ要素位置の特定の部分を、一度に一緒に処理することができる。一実施形態では、結果４４０は、ＤＰＰＤまたはＤＰＰＳが行われたかどうかに依存してそれぞれ２つまたは４つの可能なドット積結果位置、すなわち、ＤＯＴ−ＰＲＯＤＵＣＴＡ３１−０、ＤＯＴ−ＰＲＯＤＵＣＴＡ６３−３２、ＤＯＴ−ＰＲＯＤＵＣＴＡ９５−６４、ＤＯＴ−ＰＲＯＤＵＣＴＡ１２７−９６（ＤＰＰＳ命令結果）、およびＤＯＴ−ＰＲＯＤＵＣＴＡ６３−０、ＤＯＴ−ＰＲＯＤＵＣＴＡ１２７−６４（ＤＰＰＤ命令結果）を含む。
【００５７】
一実施形態では、結果４４０におけるドット積結果の位置は、ドット積命令に関連付けられる選択フィールドに依存する。たとえば、ＤＰＰＳ命令では、結果４４０におけるドット積結果の位置は、選択フィールドが第１の値である場合は、ＤＯＴ−ＰＲＯＤＵＣＴＡ３１−０であり、選択フィールドが第２の値である場合は、ＤＯＴ−ＰＲＯＤＵＣＴＡ６３−３２であり、選択フィールドが第３の値である場合は、ＤＯＴ−ＰＲＯＤＵＣＴＡ９５−６４であり、選択フィールドが第４の値である場合は、ＤＯＴ−ＰＲＯＤＵＣＴＡ１２７−６４である。ＤＰＰＤ命令の場合では、結果４４０におけるドット積結果の位置は、選択フィールドが第１の値である場合は、ＤＯＴ−ＰＲＯＤＵＣＴＡ６３−０であり、選択フィールドが第２の値である場合は、ＤＯＴ−ＰＲＯＤＵＣＴＡ１２７−６４である。
【００５８】
図５ａは、本発明の一実施形態によるドット積命令の演算を示す図である。特に、図５ａは、一実施形態によるＤＰＰＳ命令の演算を示す。一実施形態では、図５ａに示す例のドット積演算は、図４のドット積計算論理４３０によって実質的に実行されうる。別の実施形態では、図５ａのドット積演算は、ハードウェア、ソフトウェア、または一部のそれらの組み合わせを含む他の論理によって実行されてもよい。
【００５９】
別の実施形態では、図４、５ａ、および５ｂに示す演算は、ドット積結果を生成するよう任意の組み合わせまたは順序で実行されうる。一実施形態では、図５ａは、それぞれ３２ビットの最大４つの単精度浮動小数点または整数値、Ａ０乃至Ａ３を格納するストレージロケーションを含む１２８ビットのソースレジスタ５０１ａを示す。同様に、図５ａには、それぞれ３２ビットの最大４つの単精度浮動小数点または整数値、Ｂ０乃至Ｂ３を格納するストレージロケーションを含む１２８ビットのデスティネーションレジスタ５０５ａを示す。一実施形態では、ソースレジスタに格納された各値、すなわち、Ａ０乃至Ａ３は、デスティネーションレジスタの対応する位置に格納された対応値、すなわち、Ｂ０乃至Ｂ３に対して乗算され、各結果の値、すなわちＡ０＊Ｂ０、Ａ１＊Ｂ１、Ａ２＊Ｂ２、Ａ３＊Ｂ３（本願では、「積」と称する）は、それぞれ３２ビットの最大４つの単精度浮動小数点または整数値を格納するストレージロケーションを含む第１の１２８ビット一時レジスタ（「ＴＥＭＰ１」）５１０ａの対応するストレージロケーションに格納される。
【００６０】
一実施形態では、積の対は互いに加算され、各和（本願では「中間和」と称する）は、第２の１２８ビット一時レジスタ（「ＴＥＭＰ２」）５１５ａおよび第３の１２８ビット一時レジスタ（「ＴＥＭＰ３」）５２０ａのストレージロケーションに格納される。一実施形態では、積は、第１および第２の一時レジスタの最下位−最上位３２ビット要素ストレージロケーションに格納される。他の実施形態では、積は、第１および第２の一時レジスタの他の要素ストレージロケーションに格納されうる。さらに、一部の実施形態では、積は、第１または第２の一時レジスタといったように同じレジスタ内に格納されうる。
【００６１】
一実施形態では、中間和は互いに加算され（本願では「最終和」と称する）、第４の１２８ビット一時レジスタ（「ＴＥＭＰ４」）５２５ａのストレージ要素に格納される。一実施形態では、最終和は、ＴＥＭＰ４の最下位３２ビットストレージ要素に格納される。一方で別の実施形態では、最終和は、ＴＥＭＰ４の別のストレージ要素に格納される。次に、最終和は、デスティネーションレジスタ５０５ａのストレージ要素に格納される。最終和が格納されるべき正確なストレージ要素は、ドット積命令内で設定することのできる変数に依存しうる。一実施形態では、最終和が格納されるべきデスティネーションレジスタのストレージ要素を決定することを目的として、多数のビットストレージロケーションを含む直接フィールド（immediate field）（「ＩＭＭｙ［ｘ］」）を使用しうる。たとえば、一実施例では、ＩＭＭ８［０］フィールドが第１の値（たとえば、「１」）を含む場合、最終和は、デスティネーションレジスタのストレージ要素Ｂ０に格納される。ＩＭＭ８［１］フィールドが第１の値（たとえば、「１」）を含む場合、最終和は、デスティネーションレジスタのストレージ要素Ｂ１に格納される。ＩＭＭ８［２］フィールドが第１の値（たとえば、「１」）を含む場合、最終和は、デスティネーションレジスタのストレージ要素Ｂ２に格納される。ＩＭＭ８［３］フィールドが第１の値（たとえば、「１」）を含む場合、最終和は、デスティネーションレジスタのストレージ要素Ｂ３に格納される。別の実施形態では、他の直接フィールドを使用して、最終和が格納されるべきデスティネーションレジスタのストレージ要素を決定してもよい。
【００６２】
一実施例では、直接フィールドは、図５ａに示す演算において各乗算演算および加算演算が実行されるか否かを制御するよう使用されうる。たとえば、ＩＭＭ８［４］は（たとえば、「０」または「１」に設定されることによって）、Ａ０がＢ０によって乗算され、また、その結果がＴＥＭＰ１に格納されるべきか否かを示すよう使用されうる。同様に、ＩＭＭ８［５］は（たとえば、「０」または「１」に設定されることによって）、Ａ１がＢ１によって乗算され、また、その結果がＴＥＭＰ１に格納されるべきか否かを示すよう使用されうる。同じように、ＩＭＭ８［６］は（たとえば、「０」または「１」に設定されることによって）、Ａ２がＢ２によって乗算され、また、その結果がＴＥＭＰ１に格納されるべきか否かを示すよう使用されうる。最後に、ＩＭＭ８［７］は（たとえば、「０」または「１」に設定されることによって）、Ａ３がＢ３によって乗算され、また、その結果がＴＥＭＰ１に格納されるべきか否かを示すよう使用されうる。
【００６３】
図５ｂは、一実施例によるＤＰＰＤ命令の演算を示す図である。ＤＰＰＳ命令とＤＰＰＤ命令との１つの差異は、ＤＰＰＤは、単精度値ではなく倍精度浮動小数点および整数値（たとえば、６４ビット値）に対して演算を行う点である。したがって、対処するデータ要素数は少なくなり、また、したがって、一実施例では、ＤＰＰＤ命令を実行する場合は、中間演算およびストレージユニット（たとえば、レジスタ）が、ＤＰＰＳ命令実行時より少なくなる。
【００６４】
一実施例において、図５ｂは、それぞれ６４ビットの最大２つの倍精度浮動小数点または整数値、すなわち、Ａ０−Ａ１を格納するストレージ要素を含む１２８ビットのソースレジスタ５０１ｂを示す。同様に、図５ｂには、それぞれ６４ビットの最大２つの倍精度浮動小数点または整数値、すなわち、Ｂ０−Ｂ１を格納するストレージ要素を含む１２８ビットのデスティネーションレジスタ５０５ｂを示す。一実施形態では、ソースレジスタ内に格納される各値、すなわち、Ａ０−Ａ１は、デスティネーションレジスタの対応位置に格納される対応値、すなわち、Ｂ０−Ｂ１に対して乗算され、各結果値、すなわち、Ａ０＊Ｂ０、Ａ１＊Ｂ１（本願では、「積」と称する）は、それぞれ６４ビットで最大２つの倍精度浮動小数点または整数値を格納するストレージ要素を含む第１の１２８ビット一時レジスタ（「ＴＥＭＰ１」）５１０ｂの対応するストレージ要素に格納される。
【００６５】
一実施形態では、積の対は互いに加算され、各和（本願では、「最終和」と称する）は、第２の１２８ビット一時レジスタ（「ＴＥＭＰ２」）５１５ｂのストレージ要素に格納される。一実施形態では、積および最終和は、それぞれ第１および第２の一時レジスタの最下位−最上位６４ビット要素ストレージロケーションに格納される。他の実施形態では、積および最終和は、第１および第２の一時レジスタの他の要素ストレージロケーションに格納されうる。
【００６６】
一実施形態では、最終和は、デスティネーションレジスタ５０５ｂのストレージ要素に格納される。最終和が格納されるべき正確なストレージ要素は、ドット積命令において設定することのできる変数に依存しうる。一実施形態では、最終和が格納されるべきデスティネーションレジスタのストレージ要素を決定することを目的として、多数のビットストレージロケーションを含む直接フィールド（「ＩＭＭｙ［ｘ］」）を使用しうる。たとえば、一実施例では、ＩＭＭ８［０］フィールドが第１の値（たとえば、「１」）を含む場合、最終和は、デスティネーションレジスタのストレージ要素Ｂ０に格納される。ＩＭＭ８［１］フィールドが第１の値（たとえば、「１」）を含む場合、最終和は、デスティネーションレジスタのストレージ要素Ｂ１に格納される。別の実施形態では、他の直接フィールドを使用して、最終和が格納されるべきデスティネーションレジスタのストレージ要素を決定してもよい。
【００６７】
一実施形態では、直接フィールドは、図５ｂに示すドット積演算において各乗算演算が実行されるか否かを制御するよう使用されうる。たとえば、ＩＭＭ８［４］は（たとえば、「０」または「１」に設定されることによって）、Ａ０がＢ０によって乗算され、また、その結果がＴＥＭＰ１に格納されるべきか否かを示すよう使用されうる。同様に、ＩＭＭ８［５］は（たとえば、「０」または「１」に設定されることによって）、Ａ１がＢ１によって乗算され、また、その結果がＴＥＭＰ１に格納されるべきか否かを示すよう使用されうる。別の実施形態では、ドット積の乗算演算を実行するか否かを決定するよう他の制御技法を使用してもよい。
【００６８】
図６Ａは、一実施形態による、単精度整数または浮動小数点値に対してドット積演算を行う回路６００ａを示すブロック図である。本実施形態の回路６００ａは、乗算器６１０ａ−６１３ａを介して２つのレジスタ６０１ａおよび６０５ａの対応する単精度要素を乗算する。その結果は、直接フィールドＩＭＭ８［７：４］を使用してマルチプレクサ６１５ａ−６１８ａにより選択されうる。或いは、マルチプレクサ６１５ａ−６１８ａは、各要素に対する乗算演算の対応積ではなくゼロ値を選択しうる。マルチプレクサ６１５ａ−６１８ａによる選択の結果は、次に、加算器６２０ａによって互いに加算され、結果は、マルチプレクサ６２５ａ−６２８ａを使用して加算器６２０ａからの対応する和結果を選択する直接フィールドＩＭＭ８［３：０］の値に依存して、結果レジスタ６３０ａの任意の要素に格納される。一実施形態では、マルチプレクサ６２５ａ−６２８ａは、和結果が結果要素に格納されるよう選択されない場合、結果レジスタ６３０ａの要素を埋めるようゼロを選択しうる。他の実施形態では、より多くの加算器を使用して、様々な乗算積の和を生成しうる。さらに、一部の実施形態では、中間ストレージ要素を、積または和結果がさらに演算されるまでそれらを格納するよう使用されうる。
【００６９】
図６Ｂは、一実施形態による、単精度整数または浮動小数点値に対してドット積演算を実行する回路６００ｂを示すブロック図である。本実施形態の回路６００ｂは、乗算器６１０ｂ、６１２ｂを介して２つのレジスタ６０１ｂおよび６０５ｂの対応する単精度要素を乗算する。その結果は、直接フィールドＩＭＭ８［７：４］を使用してマルチプレクサ６１５ｂ、６１７ｂにより選択されうる。或いは、マルチプレクサ６１５ｂ、６１８ｂは、各要素に対する乗算演算の対応積ではなくゼロ値を選択しうる。マルチプレクサ６１５ｂ、６１８ｂによる選択の結果は、次に、加算器６２０ｂによって互いに加算され、結果は、マルチプレクサ６２５ｂ、６２７ｂを使用して加算器６２０ｂからの対応する和結果を選択する直接フィールドＩＭＭ８［３：０］の値に依存して、結果レジスタ６３０ｂの任意の要素に格納される。一実施形態では、マルチプレクサ６２５ｂ−６２７ｂは、和結果が結果要素に格納されるよう選択されない場合、結果レジスタ６３０ｂの要素を埋めるようゼロを選択しうる。他の実施形態では、より多くの加算器を使用して、様々な乗算積の和を生成しうる。さらに、一部の実施形態では、中間ストレージ要素を、積または和結果がさらに演算されるまでそれらを格納するよう使用されうる。
【００７０】
図７Ａは、一実施形態による、ＤＰＰＳ命令を実行する演算の疑似コード表現を示す図である。図７Ａに示す疑似コードは、ソースレジスタ（「ＳＲＣ」）においてビット３１−０に格納された単精度浮動小数点または整数値は、デスティネーションレジスタ（「ＤＥＳＴ」）においてビット３１−０に格納された単精度浮動小数点または整数値と乗算されるべきであり、結果は、直接フィールド（「ＩＭＭ８［４］」）に格納された即値が「１」である場合にのみ、一時レジスタ（「ＴＥＭＰ１」）のビット３１−０に格納されることを示す。即値が「１」でない場合には、ビットストレージロケーション３１−０は、すべてゼロといったようにヌル値を含みうる。
【００７１】
さらに図７Ａには、ＳＲＣレジスタにおいてビット６３−３２に格納された単精度浮動小数点または整数値は、ＤＥＳＴレジスタにおいてビット６３−３２に格納された単精度浮動小数点または整数値と乗算されるべきであり、結果は、直接フィールド（「ＩＭＭ８［５］」）に格納された即値が「１」である場合にのみ、ＴＥＭＰ１レジスタのビット６３−３２に格納されることを示す疑似コードを示す。即値が「１」でない場合には、ビットストレージロケーション６３−３２は、すべてゼロといったようにヌル値を含みうる。
【００７２】
同様に、図７Ａには、ＳＲＣレジスタにおいてビット９５−６４に格納された単精度浮動小数点または整数値は、ＤＥＳＴレジスタにおいてビット９５−６４に格納された単精度浮動小数点または整数値と乗算されるべきであり、結果は、直接フィールド（「ＩＭＭ８［６］」）に格納された即値が「１」である場合にのみ、ＴＥＭＰ１レジスタのビット９５−６４に格納されることを示す疑似コードを示す。即値が「１」でない場合には、ビットストレージロケーション９５−６４は、すべてゼロといったようにヌル値を含みうる。
【００７３】
最後に図７Ａには、ＳＲＣレジスタにおいてビット１２７−９６に格納された単精度浮動小数点または整数値は、ＤＥＳＴレジスタにおいてビット１２７−９６に格納された単精度浮動小数点または整数値と乗算されるべきであり、結果は、直接フィールド（「ＩＭＭ８［７］」）に格納された即値が「１」である場合にのみ、ＴＥＭＰ１レジスタのビット１２７−９６に格納されることを示す疑似コードを示す。即値が「１」でない場合には、ビットストレージロケーション１２７−９６は、すべてゼロといったようにヌル値を含みうる。
【００７４】
次に、図７Ａは、ビット３１−０は、ＴＥＭＰ１のビット６３−３２に加算され、結果は、第２の一時レジスタ（「ＴＥＭＰ２」）のビットストレージ３１−０に格納されることを示す。同様に、ビット９５−６４は、ＴＥＭＰ１のビット１２７−９６に加算され、結果は、第３の一時レジスタ（「ＴＥＭＰ３」）のビットストレージ３１−０に格納される。最後にＴＭＥＰ２のビット３１−０は、ＴＥＭＰ３のビット３１−０に加算され、結果は、第４の一時レジスタ（「ＴＥＭＰ４」）のビットストレージ３１−０に格納される。
【００７５】
一実施形態では、一時レジスタに格納されたデータは、次に、ＤＥＳＴレジスタに格納されうる。データを格納するためのＤＥＳＴレジスタにおける特定のロケーションは、ＩＭＭ８［ｘ］のフィールドといったＤＰＰＳ命令における他のフィールドに依存しうる。特に、図７Ａは、一実施形態では、ＴＥＭＰ４のビット３１−０は、ＩＭＭ８［０］が「１」である場合にＤＥＳＴビットストレージ３１−０に格納され、ＩＭＭ８［１］が「１」である場合にＤＥＳＴビットストレージ６３−３２に格納され、ＩＭＭ８［２］が「１」である場合にＤＥＳＴビットストレージ９５−６４に格納され、またはＩＭＭ８［３］が「１」である場合にＤＥＳＴビットストレージ１２７−９６に格納されることを示す。「１」ではない場合は、対応するＤＥＳＴビット要素は、すべてゼロといったようにヌル値を含みうる。
【００７６】
図７Ｂは、一実施形態による、ＤＰＰＤ命令を実行する演算の疑似コード表現を示す図である。図７Ｂに示す疑似コードは、ソースレジスタ（「ＳＲＣ」）においてビット６３−０に格納された単精度浮動小数点または整数値は、デスティネーションレジスタ（「ＤＥＳＴ」）においてビット６３−０に格納された単精度浮動小数点または整数値と乗算されるべきであり、結果は、直接フィールド（「ＩＭＭ８［４］」）に格納された即値が「１」である場合にのみ、一時レジスタ（「ＴＥＭＰ１」）のビット６３−０に格納されることを示す。即値が「１」でない場合には、ビットストレージロケーション６３−０は、すべてゼロといったようにヌル値を含みうる。
【００７７】
さらに図７Ｂには、ＳＲＣレジスタにおいてビット１２７−６４に格納された単精度浮動小数点または整数値は、ＤＥＳＴレジスタにおいてビット１２７−６４に格納された単精度浮動小数点または整数値と乗算されるべきであり、結果は、直接フィールド（「ＩＭＭ８［５］」）に格納された即値が「１」である場合にのみ、ＴＥＭＰ１レジスタのビット１２７−６４に格納されることを示す疑似コードを示す。即値が「１」でない場合には、ビットストレージロケーション１２７−６４は、すべてゼロといったようにヌル値を含みうる。
【００７８】
次に、図７Ｂは、ビット６３−０は、ＴＥＭＰ１のビット１２７−６４に加算され、結果は、第２の一時レジスタ（「ＴＥＭＰ２」）のビットストレージ６３−０に格納されることを示す。一実施形態では、一時レジスタに格納されたデータは、次に、ＤＥＳＴレジスタに格納されうる。データを格納するためのＤＥＳＴレジスタにおける特定のロケーションは、ＩＭＭ８［ｘ］のフィールドといったＤＰＰＳ命令における他のフィールドに依存しうる。特に、図７Ａは、一実施形態では、ＴＥＭＰ２のビット６３−０は、ＩＭＭ８［０］が「１」である場合にＤＥＳＴビットストレージ６３−０に格納され、または、ＴＥＭＰ２のビット６３−０は、ＩＭＭ８［１］が「１」である場合にＤＥＳＴビットストレージ１２７−６４に格納されることを示す。「１」ではない場合は、対応するＤＥＳＴビット要素は、すべてゼロといったようにヌル値を含みうる。
【００７９】
図７Ａおよび７Ｂに開示した演算は、本発明の一以上の実施形態に使用されうる１つの演算表現に過ぎない。特に、図７Ａおよび７Ｂに示す疑似コードは、１２８ビットレジスタを有する１つ以上のプロセッサアーキテクチャに応じて実行される演算に対応する。他の実施形態は、任意のサイズのレジスタ、または他のタイプのストレージ領域を有するプロセッサアーキテクチャにおいて実施されうる。さらに他の実施形態は、図７Ａおよび７Ｂに示す通りのレジスタを使用しなくてもよい。たとえば、一部の実施形態では、異なる数の一時レジスタを使用してオペランドを格納するか、または、まったくレジスタを使用しなくてもよい。最後に、本発明の実施形態は、任意の数のレジスタまたはデータタイプを使用して多数のプロセッサまたは処理コアで実行されうる。
【００８０】
したがって、ドット積演算を実行するための技法を開示した。特定の例示的な実施形態を添付図面において説明および示したが、これらの実施形態は、説明的に過ぎず、発明の範囲を限定しないことを理解するものとする。また、当業者は本開示を研究した後、様々な他の変形を想到しうるので、本発明を図示および説明した特定の構成および配置に限定しないことを理解するものとする。成長が速く、更なる発展を容易に予測することはできないこのような技術分野において、開示した実施形態は、本開示の原理または請求項の範囲から逸脱することなく技術発展を可能にすることにより促進されるので、配置および細部において容易に変更してもよい。
【図面の簡単な説明】
【００８１】
【図１Ａ】本発明の一実施形態による、ドット積演算の命令を実行する実行ユニットを含むプロセッサを具備する例示的なコンピュータシステムを示すブロック図である。
【００８２】
【図１Ｂ】本発明の代替実施形態による別の例示的なコンピュータシステムを示すブロック図である。
【００８３】
【図１Ｃ】本発明の別の代替実施形態によるさらに別の例示的なコンピュータシステムを示すブロック図である。
【００８４】
【図２】本発明によるドット積命令を実行する論理回路を含む一実施形態のプロセッサのマイクロアーキテクチャを示すブロック図である。
【００８５】
【図３Ａ】本発明の一実施形態によるマルチメディアレジスタにおける様々なパックドデータタイプの表現を示す図である。
【００８６】
【図３Ｂ】代替実施形態によるパックドデータタイプを示す図である。
【００８７】
【図３Ｃ】本発明の一実施形態による、マルチメディアレジスタにおける様々な符号付きおよび符号なしパックドデータタイプ表現を示す図である。
【００８８】
【図３Ｄ】演算符号化（ｏｐコード）形式の一実施形態を示す図である。
【００８９】
【図３Ｅ】代替演算符号化（ｏｐコード）形式を示す図である。
【００９０】
【図３Ｆ】さらに別の代替演算符号化形式を示す図である。
【００９１】
【図４】本発明によるパックドデータオペランドにドット積演算を行う論理の一実施形態を示すブロック図を示す。
【００９２】
【図５Ａ】本発明の一実施形態による、単精度パックドデータオペランドにドット積演算を行う論理を示すブロック図である。
【００９３】
【図５Ｂ】本発明の一実施形態による、倍精度パックドデータオペランドにドット積演算を行う論理を示すブロック図である。
【００９４】
【図６Ａ】本発明の一実施形態によるドット積演算を行う回路を示すブロック図である。
【００９５】
【図６Ｂ】本発明の別の実施形態によるドット積演算を行う回路を示すブロック図である。
【００９６】
【図７Ａ】一実施形態による、ＤＰＰＳ命令を実行することにより行われうる演算の疑似コード表現を示す図である。
【００９７】
【図７Ｂ】一実施形態による、ＤＰＰＤ命令を実行することにより行われうる演算の疑似コード表現を示す図である。
【符号の説明】
【００９８】
１０２  プロセッサ
１０４  キャッシュ
１０６  レジスタファイル
１０８  実行ユニット
１０９  パックド命令セット
１１０  プロセッサバス
１１２  グラフィック／ビデオカード
１１６  メモリコントローラハブ
１２０  メモリ
１２４  データストレージ
１２６  ワイヤレス送受信器
１２８  フラッシュＢＩＯＳ
１３０  Ｉ／Ｏコントローラハブ
１３４  ネットワークコントローラ
１４０  データ処理システム
１４１  バス
１４２  実行ユニット
１４３  パックド命令セット
１４４  デコーダ
１４５  レジスタファイル
１４６  ＳＤＲＡＭコントロール
１４７  ＳＲＡＭコントロール
１４８  バーストフラッシュメモリインタフェース
１４９  ＰＣＭＣＩＡ／ＣＦカードコントロール
１５０  ＬＣＤコントロール
１５１  ＤＭＡコントロール
１５２  代替バスマスタインタフェース
１５３  Ｉ／Ｏバス
１５４  Ｉ／Ｏブリッジ
１５５  ＵＡＲＴ
１５６  ＵＳＢ
１５７  ブルートゥースＵＡＲＴ
１５８  Ｉ／Ｏ拡張インタフェース
１５９  処理コア
１６０  データ処理システム
１６１  ＳＩＭＤコプロセッサ
１６２  実行ユニット
１６３  命令セット
１６４  レジスタファイル
１６５  デコーダ
１６６  メインプロセッサ
１６７  キャッシュ
１６８  Ｉ／Ｏシステム
１６９  ワイヤレスインタフェー
１７０  処理コア
２００  プロセッサ
２０１  フロントエンド
２０２  高速スケジューラ
２０３  アウトオブオーダーエンジン
２０４  低速／汎用浮動小数点スケジューラ
２０６  単純浮動小数点スケジューラ
２０８  整数レジスタファイル／バイパスネットワーク
２１０  浮動小数点レジスタファイル／バイパスネットワーク
２１１  実行ブロック
２１６  高速ＡＬＵ
２１８  高速ＡＬＵ
２２０  低速ＡＬＵ
２２４  浮動小数点移動
２２６  命令プリフェッチャ
２２８  命令デコーダ
２３０  トレースキャッシュ
２３２  マイクロコードＲＯＭ
２３４  ＵＯＰキュー
３１０  パックドバイト
３２０  パックドワード
３３０  パックドダブルワード
３４１  パックドハーフ
３４２  パックドシングル
３４３  パックドダブル
３４４  符号なしパックドバイト表現
３４５  符号付きパックドバイト表現
３４６  符号なしパックドワード表現
３４７  符号付きパックドワード表現
３４８  符号なしパックドダブルワード表現
３４９  符号付きパックドダブルワード表現
４３０  ドット積計算論理
４４０  結果
７０１  データＡ
７１１  データＢ
７２１  結果
【図１Ａ】
2008077663.tif 000003
【図１Ｂ】
2008077663.tif 000004
【図１Ｃ】
2008077663.tif 000005
【図２】
2008077663.tif 000006
【図３Ａ】
2008077663.tif 000007
【図３Ｂ】
2008077663.tif 000008
【図３Ｃ】
2008077663.tif 000009
【図３Ｄ】
2008077663.tif 000010
【図３Ｅ】
2008077663.tif 000011
【図３Ｆ】
2008077663.tif 000012
【図４】
2008077663.tif 000013
【図５Ａ】
2008077663.tif 000014
【図５Ｂ】
2008077663.tif 000015
【図６Ａ】
2008077663.tif 000016
【図６Ｂ】
2008077663.tif 000017
【図７】
2008077663.tif 000018
【図７Ａ】
2008077663.tif 000019
【図７Ｂ】
2008077663.tif 000020
【手続補正書】
【提出日】平成19年11月6日(2007.11.6)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００９６
【補正方法】変更
【補正の内容】
【００９６】
【図７】データＡ、データＢおよび演算結果を示す図である。
【図７Ａ】一実施形態による、ＤＰＰＳ命令を実行することにより行われうる演算の疑似コード表現を示す図である。
【外国語明細書】
2008077663.tif 000021
2008077663.tif 000022
2008077663.tif 000023
2008077663.tif 000024
2008077663.tif 000025
2008077663.tif 000026
2008077663.tif 000027
2008077663.tif 000028
2008077663.tif 000029
2008077663.tif 000030
2008077663.tif 000031
2008077663.tif 000032
2008077663.tif 000033
2008077663.tif 000034
2008077663.tif 000035
2008077663.tif 000036
2008077663.tif 000037
2008077663.tif 000038
2008077663.tif 000039
2008077663.tif 000040
2008077663.tif 000041
2008077663.tif 000042
2008077663.tif 000043
2008077663.tif 000044
2008077663.tif 000045
2008077663.tif 000046
2008077663.tif 000047
2008077663.tif 000048
2008077663.tif 000049
2008077663.tif 000050
2008077663.tif 000051
2008077663.tif 000052
2008077663.tif 000053
2008077663.tif 000054
2008077663.tif 000055
2008077663.tif 000056
2008077663.tif 000057
2008077663.tif 000058
2008077663.tif 000059
2008077663.tif 000060
2008077663.tif 000061
2008077663.tif 000062
2008077663.tif 000063
2008077663.tif 000064
2008077663.tif 000065
2008077663.tif 000066
2008077663.tif 000067
2008077663.tif 000068
2008077663.tif 000069
2008077663.tif 000070
2008077663.tif 000071