JP4869552B2 - 符号乗算処理を実行する方法及び装置 - Google Patents

符号乗算処理を実行する方法及び装置 Download PDF

Info

Publication number
JP4869552B2
JP4869552B2 JP2003425712A JP2003425712A JP4869552B2 JP 4869552 B2 JP4869552 B2 JP 4869552B2 JP 2003425712 A JP2003425712 A JP 2003425712A JP 2003425712 A JP2003425712 A JP 2003425712A JP 4869552 B2 JP4869552 B2 JP 4869552B2
Authority
JP
Japan
Prior art keywords
data
operand
instruction
packed
sign
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2003425712A
Other languages
English (en)
Other versions
JP2005025719A5 (ja
JP2005025719A (ja
Inventor
ダブリュー メイシー,ジュニア ウィリアム
ヴィ ギュエン ヒュイ
Original Assignee
インテル コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2005025719A publication Critical patent/JP2005025719A/ja
Publication of JP2005025719A5 publication Critical patent/JP2005025719A5/ja
Application granted granted Critical
Publication of JP4869552B2 publication Critical patent/JP4869552B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Description

本開示は、数学的演算を実行する処理装置、関連ソフトウェア及びソフトウェアシーケンスの技術分野に関する。本出願は、2003年6月30日に出願された同時係属中の米国特許出願第10/610,929号「SIMD符号絶対値処理を利用した非線形フィルタリング及びブロック解除アプリケーション(Nonlinear Filtering And Deblocking Applications Utilizing SIMD Sign And Absolute Value Operations)」に関連する。
今日の社会において、コンピュータシステムはますます広く普及しつつある。コンピュータ処理能力は、広い範囲の分野における労働者の効率性と生産性を高めてきた。コンピュータの購入及び所持コストが逓減するにつれ、より多くの消費者が最新のより高速なマシーンを利用することが可能になった。さらに、多くの人々がノートブックコンピュータの利用をその利用に関する柔軟性により享受している。モバイルコンピュータにより、ユーザはオフィスから外出したり、あるいは出先でも、データを携帯し作業を行うことが容易にできる。このような場面は、マーケティングスタッフ、企業の役員、学生においてさえもよく見られるものである。
プロセッサ技術の進歩に伴い、先端的なプロセッサを備えたマシーン上で実行するための新たなソフトウェアコードが生成される。一般に、ユーザは、使用しているソフトウェアのタイプに関わらず、コンピュータからより高いパフォーマンスを期待及び要求する。ここで、プロセッサ内部において実行されている命令及び処理タイプにより生じる可能性のある1つの問題がある。すなわち、あるタイプの処理には処理の複雑さ及び/あるいは必要とされる回路の種類に基づき、その完了に多くの時間を要するものもある。このようなことから、プロセッサ内部での複雑な処理を実行する方法を最適化するという動機付けが生じる。
メディアアプリケーションは、数十年もの間、マイクロプロセッサの発達を促進してきた。実際、近年における計算機の性能向上の多くはメディアアプリケーションにより促進されてきたものである。娯楽性を高めた教育及び通信目的のため、重大な進歩は企業部門において見出されてきたが、上記のような性能の向上は主として消費者部門において起こってきたものである。にもかかわらず、これからのメディアアプリケーションには、さらに高い計算能力が要求されるであろう。この結果、将来のパーソナルコンピュータ(PC)では、使い安さだけでなくより充実したオーディオビジュアル機能が実現されるであろう。さらに、より重要なものとしては計算機と通信の融合であろう。
従って、現在の計算機においては、コンテンツとして総称される音声及び映像データの再生だけでなく画像の表示も、ますます一般的なアプリケーションとなりつつある。フィルタリング及び畳み込み処理は、画像、音声及び映像データのようなコンテンツデータに対し最もよく実行される処理である。これらの処理は大きな計算量を要することから、例えば、単一命令多重データ(SIMD)レジスタのような様々なデータ記憶装置を利用することにより、効率的な実行を行うための高いレベルでのデータ並列処理が提供されている。
既存のアーキテクチャの多くは不必要なデータタイプの変更を必要とし、それによって、命令スループットの減少を招き、算術演算のためのデータ順序付けに要するクロックサイクル数を著しく増加させてしまう。
signum命令のような従来技術による様々な符号に関する命令により、2進数の符号は決定される。しかしながら、このような従来技術によるsignum命令では、特にsignum処理による結果がさらに処理される場合、この結果はより大きなアルゴリズムの中の中間結果であるためその有用性は限定的なものとなる。所望の結果を得るためさらなる命令を要することにより、処理リソースやパイプラインスロットに関して追加的なコストが発生することになる。
本発明は、このような問題点に鑑み、符号乗算処理を実行するための装置、プロセッサ、方法、システム及び物品を提供することを目的とする。
上記課題を解決するために、本発明による装置は、格納領域と、第1オペランドと第2オペランドに対し第1命令を実行し、該第1命令に応答して、前記第2オペランドが正である場合には前記第1オペランドの値を、前記第2オペランドが零である場合にはゼロの値を、前記第2オペランドが負である場合には前記第1オペランドの否定の値を有する結果を前記格納領域に格納する実行リソースを有することを特徴とする。
上記課題を解決するために、本発明によるプロセッサは、Packedデータ要素を格納できるレジスタファイルと、前記レジスタファイルに接続され、複数のPackedデータ命令に応答して前記レジスタファイルに値を格納する実行ユニットを有するプロセッサであって、該実行ユニットは複数の結果データ要素から構成される結果を前記レジスタファイルに格納することにより前記複数のPackedデータ命令の第1命令に応答し、前記複数の結果データ要素の各々は、複数の第1ソースデータ要素と複数の第2ソースデータ要素の各自の値に対して、前記複数の第1ソースデータ要素の対応するものに前記複数の第2ソースデータ要素の対応するものの符号を乗じた値に等しいことを特徴とする。
上記課題を解決するために、本発明による方法は、第1オペランド符号と第1オペランド量を有する第1オペランドと第2オペランド符号と第2オペランド量を有する第2オペランドを特定する命令をフェッチするステップと、前記第2オペランドが零であるか判断し、そうである場合には、前記命令の最終結果としてゼロを格納するステップと、前記第2オペランドが非零であるか判断し、そうである場合には、前記第1オペランド量に等しい最終結果量と、前記第2オペランド量のユニタリ値と非ユニタリ値に対する前記第1オペランド符号と前記第2オペランド符号の関数である最終結果符号とを有する最終結果を格納するステップとを有することを特徴とする。
上記課題を解決するために、本発明による方法は、第1オペランドと第2オペランドを特定する命令をフェッチするステップと、前記第2オペランドが正であるか判断し、そうである場合には、前記命令の結果として前記第1オペランドを格納するステップと、前記第2オペランドが負であるか判断し、そうである場合には、前記命令の結果として前記第1オペランドに−1を乗じた値を格納するステップと、前記第2オペランドが零であるか判断し、そうである場合には、前記命令の結果としてゼロを格納するステップとを有することを特徴とする。
上記課題を解決するために、本発明によるシステムは、第1Packedデータ命令と、複数の第1ソースデータ要素から構成される第1Packedデータと、複数の第2ソースデータ要素から構成される第2Packedデータとを格納するメモリと、前記第1Packedデータ命令を実行し、複数の結果Packedデータ要素から構成される結果Packedデータをプロセッサ格納領域に格納するプロセッサとを有するシステムであって、前記複数の結果Packedデータ要素の各々は、前記複数の第2ソースデータ要素の非零値に対し前記複数の第1ソースデータ要素と前記複数の第2ソースデータ要素の対応するものの両方の符号の関数であり、前記複数の第2ソースデータ要素の前記対応するもののユニタリ値と非ユニタリ値に対し前記複数の第1Packedデータ要素の前記対応するものの大きさの関数であることを特徴とする。
上記課題を解決するために、本発明による物品は、装置を実現するよう製造あるいはシミュレートされるマシーン読み出し可能な媒体を有する物品であって、前記装置は、格納領域と、第1オペランドと第2オペランドに対し第1命令を実行し、該第1命令に応答して、前記第2オペランドが正である場合には前記第1オペランドの値を、前記第2オペランドが零である場合にはゼロの値を、前記第2オペランドが負である場合には前記第1オペランドの否定の値を有する結果を前記格納領域に格納する実行リソースとを有することを特徴とする。
上記課題を解決するために、本発明による装置は、格納領域と、第1の大きさと第1オペランド初期符号を有する第1オペランドと第2オペランド符号を有する第2オペランドに対し第1命令を実行する実行リソースとを有する装置であって、前記実行リソースは、前記第1命令に応答して、前記第2オペランドが正である場合には前記第1の大きさと前記第1オペランド初期符号を有する結果を、前記第2オペランドが零である場合にはゼロである結果を、前記第2オペランドが負である場合には前記第1の大きさ及び前記第1オペランド初期符号と前記第2オペランド符号との積である符号結果を有する結果を前記格納領域に格納することを特徴とする。
以上のように、本発明によれば、符号乗算処理を実行するための装置、プロセッサ、方法、システム及び物品が得られる。
以下、本発明の実施の形態について図面に基づいて説明する。ここで、本発明は添付される図面に制限されるものではない。また図面中、同一の参照記号は同一の要素を示している。
以下の説明は符号乗算処理を実行する方法、装置及び命令の実施例を説明する。以下の説明において、本発明のより完全なる理解を提供するために、プロセッサタイプ、マイクロアーキテクチャ状態、イベント、実施可能な機構などのような具体的詳細が与えられる。しかしながら、本発明はこのような具体的詳細以外でも実践可能であるということは当業者には認識されるであろう。さらに、周知の構成及び回路などは、本発明を不必要に不明瞭にしないよう詳細には示されていない。
以下の実施例はプロセッサに関し説明されるが、他の実施例では、他のタイプの集積回路及び論理装置に適用することもできる。本発明の同様なテクニック及び教示は、より高いパイプラインスループット及び性能を享受しうる他のタイプの回路あるいは半導体デバイスに容易に適用することができる。本発明の教示は、データ操作を実行する任意のプロセッサあるいはマシーンに適用可能である。しかしながら、本発明は、256ビット、128ビット、64ビット、32ビットあるいは16ビットデータ処理を実行するプロセッサあるいはマシーンに限定されるものでなく、Packedデータに対する操作が必要とされる任意のプロセッサ及びマシーンに適用することができる。
以下の記述では、説明のため、本発明の完全な理解を提供するため様々な具体的詳細が与えられる。本発明の実践に対し、これら具体的詳細が必ずしも必要でないということは当業者には認識されるであろう。また、周知の電気構造及び回路は、本発明を不必要に不明瞭にしないよう詳細には与えられていない。さらに、以下の説明は実施例を与えるものであり、添付される図面は例示のため様々な実施例を示している。しかしながら、これらの実施例は限定のためのものと解釈されるべきでない。これらの実施例は、本発明のすべての可能な実現を包括的に列挙するものでなく、単に本発明の一例を提供することを目的としている。
以下の実施例は実行ユニットや論理回路に関する命令処理や配置を説明するが、本発明の他の実施例はソフトウェアにより達成可能である。一実施例において、本発明による方法は、マシーン実行可能な命令により実現される。これらの命令により、プログラム可能な汎用あるいは特定用途向けプロセッサが本発明の各ステップを実行する。本発明に従う処理を実行するコンピュータ(あるいは他の電子装置)をプログラムするのに利用される命令を格納したマシーンまたはコンピュータによる読み出し可能な媒体を含むコンピュータプログラムプロダクツまたはソフトウェアとして本発明は提供される。あるいは、本発明の各ステップは、これらのステップを実行する配線論理を含む特定のハードウェア要素により実行されてもよいし、あるいはプログラムされたコンピュータ構成要素及びカスタムハードウェア構成要素による任意の組み合わせにより実行されてもよい。このようなソフトウェアはシステム内のメモリに格納することが可能である。同じように、そのようなコードはネットワークを介し、あるいは他のコンピュータ読み出し可能な媒体により配信可能である。
従って、マシーン読み出し可能な媒体は、以下に限定されるものではないが、フロッピーディスク(登録商標)、光ディスク、CD(Compact Disc)、CD−ROM(CD Read−Only Memory)、光磁気ディスク、ROM(Read−Only Memory)、RAM(Random Access Memory)、EPROM(Erasable Programmable Read−Only Memory)、EEPROM(Electrically Erasable Programmable Read−Only Memory)、磁気あるいは光カード、フラッシュメモリ、インターネット上の送信、電子、光、音響あるいは他の搬送信号(例えば、搬送波、赤外線信号、デジタル信号など)などのマシーン(例えば、コンピュータ)により読み出し可能な形態での情報の格納及び送信のための任意の機構が含まれる。従って、コンピュータ読み出し可能な媒体には、マシーン(例えば、コンピュータ)による読み出し可能な形態により電子的命令あるいは情報の格納または送信に適した任意のタイプのメディア/マシーン読み出し可能な媒体が含まれる。さらに、本発明はまた、コンピュータプログラムプロダクツとしてダウンロード可能であってもよい。その場合、プログラムはリモートコンピュータ(例えば、サーバ)からリクエストコンピュータ(例えば、クライアント)に転送される。プログラムの転送は、電子、光、音響あるいは搬送波で実現される他の形態のデータ信号、あるいは通信リンク(例えば、モデム、ネットワーク接続など)を介した他の伝搬媒体により実行されてもよい。
設計は、制作からシミュレーションそして製造と様々な段階を経ているかもしれない。設計を表すデータは様々な方法で当該設計を表しているかもしれない。まず、シミュレーションにおいて有益なように、ハードウェア記述言語や他の機能記述言語を使ってハードウェアが表現される。さらに、論理及び/あるいはトランジスタゲートによる回路レベルのモデルが設計処理のある段階において生成される。さらに、ある段階では、大部分の設計がハードウェアモデルの様々な装置の物理的配置を表すデータレベルに達する。従来の半導体製造技術が利用される場合、ハードウェアモデルを表すデータは、集積回路の生成に利用されるマスクのマスクレイヤに関する様々な特徴の有無を特定するデータであるかもしれない。任意の設計表現において、このデータは任意の形態のマシーン読み出し可能な媒体に格納することができる。このような情報の送信のため生成あるいは変調される光または電気波、メモリ、ディスクのような磁気または光記憶装置などは、マシーン読み出し可能な媒体である。これらの媒体の何れもが設計やソフトウェア情報を「搬送」または「表現」することができる。コードや設計を示し搬送する電気搬送波が送信されるとき、電気信号のコピー、バッファリングあるいは再送が実行される程度まで新たなコピーが行われる。従って、通信プロバイダやネットワークプロバイダは本発明のテクニックを実現するもの(搬送波)のコピーを行える。
今日のプロセッサでは、様々なコードと命令の処理及び実行に多くの実行ユニットが利用されている。命令の中には即座に完了するものがある一方、膨大なクロックサイクルを要する命令もあるので、必ずしもすべての命令が等しく生成されるとは限らない。命令のスループットが速くなるほど、プロセッサの全体的なパフォーマンスはより向上する。従ってできる限り多くの命令を高速に実行させることが望ましい。しかしながら、より大きな複雑さを有し、より多くの実行時間及びプロセッサリソースを要する命令もある。例えば、浮動小数点命令、ロード/ストア処理、データ転送などが挙げられる。
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションにおいて利用されるに従い、追加的なプロセッササポートがこれまで導入されてきた。例えば、単一命令多重データ(SIMD)整数/浮動小数点命令やストリーミングSIMDエクステンション(SSE)は、特定のプログラムタスクの実行に要する全体の命令数を減少させる命令である。これらの命令は、複数のデータ要素に対し並列処理を行うことにより、ソフトウェアパフォーマンスの高速化を可能にする。これにより、映像、音声、及び画像/フォト処理を含む広範なアプリケーションにおいてパフォーマンスの向上を達成することが可能となる。通常、マイクロプロセッサや類似の論理回路におけるSIMD命令の実現には多くの発行が伴う。さらに、SIMD処理の複雑さはしばしば、正確なデータ処理及び操作のための追加的回路の必要性を生じさせる。
現時点では、SIMD符号乗算命令は利用可能となっていない。また絶対値の処理に関するSIMD命令も提供されていない。乗算を行う符号処理がなければ、音声/映像の圧縮、処理及び操作のようなアプリケーションにおいて同じ結果を得るためには、多くの命令とデータレジスタが必要となる。このような背景に基づき、本発明による符号命令はコードオーバーヘッドとリソース要求を軽減させることを可能にする。本発明の実施例では、SIMD関連のハードウェアを利用するアルゴリズムとして、符号処理を実現する方法が提供される。いくつかの実施例ではまた、絶対値処理を実現する方法が提供される。現時点では、SIMDレジスタにおけるデータを処理することは困難である。アルゴリズムの中には、算術処理のためのデータ配置に要する命令が、これらの処理の実行に要する命令数より多くなるものもある。本発明による符号乗算処理の実施例を実行することにより、符号処理に要する命令数を大きく低減させることができる。
本発明の実施例は、signum処理の変形を実現する命令に関する。signum処理では、所与の数が正、負あるいはゼロであるか決定される。signum処理においては、x>0に対してsignum(x)=1、x=0に対してsignum(x)=0、x<0に対してsignum(x)=−1として関数は数を評価する。しかしながら、マルチメディアアプリケーションでは、様々なアルゴリズムにおいてあるデータ値と他のデータ値の符号の乗算がしばしば必要とされる。符号乗算処理は、多くの異なる処理の実行を回避することができる。提供される符号処理の実施例では、乗算処理を含むsignumよりも機能性の高い処理方法が提供される。
本発明による符号命令は、DEST=SRC1×SIGNUM(SRC2)を計算する。SRC2が正である場合、SRC2のsignumは「+1」となる。SRC2がゼロである場合、SRC2のsignumはゼロとなる。SRC2が不である場合、SRC2のsignumは「−1」となる。本発明の実施例による符号乗算処理では、第2データ要素のsignumがとられ、このsignumがとられた結果と第1データ要素の値が掛け合わされ、結果としての積が得られる。一実施例の符号処理が、個々のデータ要素に適用されるとき、以下のように表すことができる。
Figure 0004869552
Packedデータオペランドに対し、このフローが各データ要素位置に適用される。
さらに、符号乗算処理の一実施例はまた、符号処理において第1ソース要素として「1」を、第2ソース要素として対象となる値を利用することによってsignum処理を代替することができる。本実施例の符号処理は、第2要素の符号に基づき第1ソース要素と「+1」、「0」及び「−1」の1つを掛け合わせるので、signumを複製することができる。同様に、本発明の符号処理の実施例はまた、第1ソース要素を第2ソース要素と同じ符号に設定することにより絶対値処理を実行することができる。これは、ソース値が同一の符号と実質的に乗算されるためであり、結果としての値を「0」または正とすることができる。
図1Aは、本発明の一実施例による符号乗算処理のための命令を実行する実行ユニットを含むプロセッサにより構成される一例となるコンピュータシステムのブロック図である。システム100は、ここで説明される実施例のような本発明によるデータ処理アルゴリズムを実行する論理を含む実行ユニットを利用するプロセッサ102のような構成要素を備える。システム100は、カリフォルニア州サンタクララのインテルコーポレーションより入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)及び/またはStrongARM(登録商標)マイクロプロセッサに基づく処理システムにより代表される。しかしながら、(他のマイクロプロセッサ、エンジニアリング・ワークステーション、セットトップボックスなどを含む)他のシステムが利用されてもよい。一実施例では、サンプルシステム100は、ワシントン州レッドモンドのマイクロソフトコーポレーションから入手可能なあるバージョンのWINDOWS(登録商標)オペレーティングシステムを実行してもよい。しかしながら、(例えば、UNIX(登録商標)やLinuxのような)他のオペレーティングシステム、埋め込みソフトウェア及び/またはグラフィカルユーザインタフェースが使われてもよい。本発明は、ハードウェア回路とソフトウェアの特定の組み合わせに限定されるものではない。
ここでの実施例はコンピュータシステムに限定されるものではない。本発明の他の実施例では、携帯装置や埋め込みアプリケーションのような他の装置において利用可能である。携帯装置の例として、携帯電話、インターネットプロトコル装置、デジタルカメラ、PDA(Personal Digital Assistant)、及び携帯型パーソナルコンピュータなどが含まれる。埋め込みアプリケーションには、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、あるいはオペランドに対し符号及び/または絶対値処理を実行する他のシステムなどが含まれる。さらに、マルチメディアアプリケーションの効率向上のため、同時に複数のデータに対し処理する命令を可能にするよう実現されたアーキテクチャがある。データタイプやデータ量が増大するに従い、より効率的な方法によりデータを操作できるようコンピュータ及びそのプロセッサの性能を向上させねばならない。
図1Aは、1つのオペランドからデータ要素の符号を抽出し、当該符号を他のデータ要素に掛ける本発明によるアルゴリズムを処理する1つ以上の実行ユニット108を備えるプロセッサ102により構成されるコンピュータシステム100のブロック図である。本実施例は単一のプロセッサデスクトップやサーバシステムに関し説明されるが、他の実施例はマルチプロセッサシステムに含まれるよう構成することができる。システム100はハブアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を有する。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピュータ(RISC)マイクロプロセッサ、VLIW(Very Long Instruction Word)マクロプロセッサ、命令セットの組み合わせを実現するプロセッサ、あるいはデジタル信号プロセッサのような他のプロセッサ装置でありうる。プロセッサ102は、プロセッサ102とシステム100内の他の構成要素との間のデータ信号を送信することができるプロセッサバス110に接続される。システム100の構成要素は、当業者には周知のそれの既存の機能を実行する。
一実施例では、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は単一の内部キャッシュあるいは複数レベルの内部キャッシュを有する。また他の実施例では、キャッシュメモリはプロセッサ102の外部に設けられていてもよい。他の実施例ではまた、要求される実施形態に応じて、内部キャッシュと外部キャッシュの両方の組み合わせが含まれうる。レジスタファイル106は、様々なタイプのデータを整数レジスタ、浮動小数点レジスタ、ステータスレジスタ及び命令ポインタレジスタを含む様々なレジスタに格納することができる。
実行ユニット108は、整数及び浮動小数点処理を実行する論理を含み、プロセッサ102に設けられる。プロセッサ102はまた、あるマクロ命令のためのマイクロコードを格納するマイクロコード(ucode)ROMを備えていてもよい。本実施例では、実行ユニット108はPacked命令セット109を扱う論理を含んでいる。一実施例において、Packed命令セット109は、データの符号を変えるためのPacked符号命令を含んでいる。汎用プロセッサ102の命令セットのPacked命令セット109を、命令を実行する関連回路と共に含めることにより、多くのマルチメディアアプリケーションにより利用される処理が、汎用プロセッサ102のPackedデータを使うことにより実行されてもよい。これにより、Packedデータに処理を実行するためのプロセッサのデータバスの全幅を使用することにより、多くのマルチメディアアプリケーションがより効率的に実行されうる。この結果、1つのデータ要素に1つ以上の処理を同時に実行するために、より小さいデータユニットをプロセッサのデータバスに送信する必要がなくなる。
実行ユニット108の他の実施例はまた、マイクロコントローラ、埋め込みプロセッサ、グラフィックス装置、DSP及び他のタイプの論理回路において利用可能である。システム100はメモリ120を備える。メモリ120は、DRAM(Dynamic Random Access Memory)装置、SRAM(Static Random Access Memory)装置、フラッシュメモリ装置、あるいは他のメモリ装置であってもよい。メモリ120は、プロセッサ102により実行可能なデータ信号により表される命令及び/あるいはデータを格納することができる。
システム論理チップ116は、プロセッサバス110とメモリ120に接続される。例示された実施例のシステム論理チップ116はメモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介しMCH116と通信することができる。MCH116は、命令及びデータの格納と、グラフィックスコマンド、データ及びテクスチャの格納のため、メモリ120への高帯域幅メモリパス118を与える。MCH116は、プロセッサ102、メモリ120及びシステム100の他の構成要素間においてデータ信号を導き、プロセッサバス110、メモリ120及びシステムI/O122間においてデータ信号をブリッジする。いくつかの実施例では、システム論理チップ116は、グラフィックスコントローラ112への接続のために、グラフィックスポートを備えうる。MCH116は、メモリインタフェース118を介しメモリ120に接続される。グラフィックスカード112は、AGP(Accelerated Graphics Port)インターコネクト114を介しMCH116に接続される。
システム100は、専用ハブインタフェースバス122を使って、MCH116をI/Oコントローラハブ(ICH)130に接続する。ICH130は、ローカルI/Oバスを介しいくつかのI/O装置への直接の接続を提供する。ローカルI/Oバスは、周辺装置をメモリ120、チップセット及びプロセッサ102に接続する高速I/Oバスである。いくつかの例は、音声コントローラ、ファームウェアハブ(フラッシュBIOS)128、無線送信機126、データ記憶装置124、ユーザ入力及びキーボードインタフェースを含む既存のI/Oコントローラ、USB(Universal Serial Bus)のようなシリアル拡張ポート、及びネットワークコントローラ134である。データ記憶装置124は、ハードディスクドライブ、フロッピーディスク(登録商標)ドライブ、CD−ROM装置、フラッシュメモリ装置、または他の大容量記憶装置から構成されうる。
システムの他の実施例では、符号命令によるアルゴリズムを実行する実行ユニットは、システムオンチップと共に利用することができる。システムオンチップの一実施例は、プロセッサとメモリから構成される。そのようなシステムのためのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステム構成要素と同じチップ上に設けられる。さらに、メモリコントローラやグラフィックスコントローラのような他の論理ブロックがまた、システムオンチップ上に配置されうる。
図1Bは、本発明の原理を実現するデータ処理システム140の他の実施例を示す。データ処理システム140の一実施例は、(www.intel.comにて説明されるような)インテルXScale(商標)技術によるインテル(登録商標)パーソナルインターネットクライアントアーキテクチャ(PCA)アプリケーションプロセッサである。ここで説明される実施例は、発明の範囲から逸脱することなく他の処理システムと共に利用することができるということは、当業者には認識されるであろう。
コンピュータシステム140は、符号及び絶対値を含むSIMD処理を実行することができる処理コア159を備える。一実施例において、処理コア159は、CISC、RISC、VLIWタイプアーキテクチャに限定されることなく、任意のタイプのアーキテクチャの処理ユニットを表す。処理コア159はまた、1以上の処理技術における製造に適したものであってもよいし、十分詳細にマシーン読み出し可能なメディアに表されることにより、処理コア159はこの製造の容易化に適したものであってもよい。
処理コア159は、実行ユニット142、レジスタファイルセット145、及びデコーダ144から構成される。処理コア159はまた、本発明の理解に必要でない追加的な回路(図示せず)を含んでもよい。実行ユニット142は、処理コア159により受信された命令の実行に利用される。典型的なプロセッサ命令の認識に加えて、実行ユニット142はPackedデータフォーマットに対する処理の実行のため、Packed命令セット143における命令を認識することができる。Packed命令セット143は、符号及び絶対値処理をサポートする命令を含み、またさらに他のPacked命令を含んでいてもよい。実行ユニット142は内部バスによりレジスタファイル145に接続される。レジスタファイル145は、データを含む情報の格納のための処理コア159における記憶領域を表す。前述のように、Packedデータの格納に利用される記憶領域が何れであるかは重要ではないということは理解されるであろう。実行ユニット142はデコーダ144に接続される。デコーダ144は、処理コア159により受信された命令を制御信号及び/あるいはマイクロコード入力ポイントに復号するために利用される。これらの制御信号及び/あるいはマイクロコード入力ポイントに応答して、実行ユニット142は適切な処理を実行する。
処理コア159は、以下に限定されるものではないが、例えば、SDRAM(Synchronous Dynamic Random Access Memory)コントロール146、SRAM(Static Random Access Memory)コントロール147、バーストフラッシュメモリインタフェース148、PCMCIA(Personal Computer Memory Card International Association)/CF
(Compact Flash)カードコントロール149、液晶(LCD)コントロール150、DMA(Direct Memory Access)コントローラ151、及び代替バスマスタインタフェース152を含む他の様々なシステム装置と通信するためのバス141に接続される。一実施例では、データ処理システム140はまた、I/Oバス153を介し様々なI/O装置と通信するためのI/Oブリッジ154を備える。このようなI/O装置は、以下に限定されるものではないが、例えば、UART(Universal Asynchronous Receiver/Transmitter)155、USB156、ブルートゥース無線UART157、及びI/O拡張インタフェース158から構成されてもよい。
データ処理システム140の一実施例は、モバイル、ネットワーク及び/あるいは無線通信のために、符号または絶対値処理を含むSIMD処理を実行することができる処理コア159を備える。処理コア159は、ウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)及びそれら各自の逆変換などの離散変換と、色空間変換、映像符号化動き予測または映像復号化動き予測などの圧縮/解凍技術と、パルス符号変調(PCM)のような変調/復調(MODEM)機能とを含む様々な音声、映像、画像形成及び通信アルゴリズムによりプログラムされてもよい。
図1Cは、SIMD符号または絶対値処理を実行することができるデータ処理システムの他の実施例を示す。他の実施例によると、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167及び入出力システム168を備える。入出力システム168は、選択的に無線インタフェース169に接続されてもよい。SIMDコプロセッサ161は、符号または絶対値を含むSIMD処理を実行することができる。処理コア170は、1つ以上の処理技術における製造に適したものであってよいし、十分詳細にマシーン読み出し可能なメディアに表すことにより、処理コア170はそれを含んだデータ処理システム160のすべてあるいは一部の製造を容易化するのに適したものであってもよい。
一実施例において、SIMDコプロセッサ161は、実行ユニット162とレジスタファイルセット164から構成される。メインプロセッサ165の一実施例は、実行ユニット162による実行のため、SIMD符号及び絶対値命令を含む命令セット163の命令を認識するデコーダ165を備える。他の実施例では、SIMDコプロセッサ161はまた、命令セット163の命令を復号するデコーダ165Bの少なくとも一部を備える。処理コア170はまた、本発明の理解に必要でない追加的回路(図示せず)を含む。
動作中、メインプロセッサ166は、キャッシュメモリ167と入出力システム168との相互作用を含む一般的タイプのデータ処理動作を制御するデータ処理命令のストリームを実行する。SIMDコプロセッサ命令は、データ処理命令のストリームに埋め込まれる。メインプロセッサ166のデコーダ165は、装着されたSIMDコプロセッサ161により実行されるべきタイプとしてこれらのSIMDコプロセッサ命令を発する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(あるいはSIMDコプロセッサ命令を表す制御信号)をコプロセッサバス166において発行し、そこから装着されたSIMDコプロセッサにより受信される。この場合、SIMDコプロセッサ161は受信したSIMDコプロセッサ命令を受領及び実行する。
SIMDコプロセッサ命令による処理のため、データは無線インタフェース169を介し受信されてもよい。一例として、音声通信はデジタル信号の形式で受け取られ、当該音声信号を表すデジタル音声サンプルを再生成するためSIMDコプロセッサ命令により処理されてもよい。他の例として、圧縮された音声及び/または映像がデジタルビットストリーム形式で受信され、デジタル音声サンプル及び/または動き映像フレームを再生成するためSIMDコプロセッサ命令により処理されてもよい。一実施例において、処理コア170、メインプロセッサ166及びSIMDコプロセッサ161は、実行ユニット162、レジスタファイルセット164及びデコーダ165からなる単一の処理コア170に一体化され、SIMD符号及び絶対値命令を含む命令セット163の命令を認識する。
図2は、本発明による符号乗算処理を実行する論理回路を有する一実施例のプロセッサ200のためのマイクロアーキテクチャのブロック図である。符号処理はまた、上述のように、Packed符号処理またはPacked符号命令と呼ばれるかもしれない。符号命令の一実施例では、当該命令により、第1データ要素と第2データ要素の符号が乗算される。この命令はまたPSIGNあるいはPacked符号とも呼ばれる。本実施例では、符号命令はまた、バイトサイズ、ワードサイズ、ダブルワードサイズ、クアドワードサイズなどを有するデータ要素を処理するよう実現されてもよい。イン・オーダーフロントエンド(in−order front end)201は、実行対象のマクロ命令をフェッチし、プロセッサパイプラインにおける後の利用のため当該命令を用意するプロセッサ200の一部である。本実施例のフロントエンド201は複数のユニットを備えている。命令プリフェッチャ226は、メモリからマクロ命令をフェッチし、命令デコーダ228に供給し、マシーンにより実行可能なマイクロ命令あるいはマイクロ処理(または、マイクロopあるいはuopと呼ばれる)と呼ばれる要素に復号する。トレースキャッシュ230は、復号化されたuopを受け取り、実行のためuopキュー234においてそれらが順序付けされたプログラムシーケンスあるいはトレースに分解する。トレースキャッシュ230が複雑なマクロ命令に直面すると、マイクロコードROM232が当該処理の完了に必要なuopを提供する。
多くのマクロ命令が1つのマイクロopに変換される一方、他のマクロ命令は完全な処理の完了のため複数のマイクロopを必要とする。一実施例では、マクロ命令の完了のため4より多くのマイクロopが必要な場合、デコーダ228はマイクロコードROM232にアクセスし、マクロ命令を実行する。一実施例では、Packed符号命令が、命令デコーダ228における処理のため少数のマイクロopに復号される。他の実施例では、Packed符号アルゴリズムのための命令が、処理の完了に多数のマイクロopが必要とされる場合、マイクロROM232に格納される。トレースキャッシュ230は、入力ポイントPLA(Programmable Logic Array)を参照し、マイクロコードROM232におけるマージアルゴリズムのためのマイクロコードシーケンスを読み込むための正しいマイクロ命令ポインタを決定する。マイクロコードROM232が現在のマクロ命令に対するマイクロopの順序付けを完了すると、マシーンのフロントエンド201はトレースキャッシュ230からマイクロopの取り込みを再開する。
いくつかのSIMD及び他のマルチメディアタイプの命令は複雑な命令とみなされる。浮動小数点に関する大部分の命令もまた複雑な命令である。さらに、命令デコーダ228が複雑なマクロ命令に直面すると、マイクロコードROM232は当該マクロ命令のためのマイクロコードシーケンスを抽出するために、適当な位置でアクセスされる。このマクロ命令の実行に要する様々なマイクロopが、適当な整数及び浮動小数点実行ユニットにおける実行のため、アウト・オブ・オーダー実行エンジン(out−of−order execution engine)203に通信される。
アウト・オブ・オーダー実行エンジン203では、実行のためのマイクロ命令が用意されている。アウト・オブ・オーダー実行論理は、マイクロ命令がパイプラインに入り、実行のためスケジューリングされるとき、パフォーマンスを最適化するためマイクロ命令のフローを平滑化及び順序調整をするための複数のバッファを有する。割り当てまたはアロケータ論理は、各uopが実行に必要とするマシーンバッファやリソースを割り当てる。レジスタリネーム論理は、レジスタファイルの入力の論理レジスタを改名する。割り当て論理はまた、メモリスケジューラ、高速スケジューラ202、低速/通常浮動小数点スケジューラ204、及びシンプル浮動小数点スケジューラ206の命令スケジューラの前に、メモリ処理及び非メモリ処理のための2つのuopキューの1つへの各uopの入力を割り当てる。uopスケジューラ202、204及び206は、スケジューラの従属入力レジスタオペランドソースの準備状況と、uopが処理の遂行に必要とする実行リソースの利用可能状況に基づき、uopの実行準備がいつ整うかを判断する。本実施例の高速スケジューラ202がメインクロックサイクルの半サイクルごとにスケジューリングを行う一方、その他のスケジューラはメインプロセッサクロックサイクルあたり1回だけスケジューリングを行うことができる。スケジューラはディスパッチポートを調停して、実行のためのuopをスケジューリングする。
レジスタファイル208と210は、スケジューラ202、204及び206と、実行ブロック211の実行ユニット212、214、216、218、220、222及び224との間に配置される。整数及び浮動小数点演算のためにそれぞれレジスタファイル208と210がある。本実施例のレジスタファイル208と210のそれぞれはまた、まだレジスタファイルに書き込まれていない終了結果を新しい従属uopにバイパスあるいは転送するバイパスネットワークを含む。整数レジスタファイル208と浮動小数点レジスタファイル210はまた、互いにデータの通信を行うことができる。一実施例において、整数レジスタファイル208は2つのレジスタファイルに分割され、その一方は下位32ビットデータ用のレジスタファイルであり、もう一方は上位32ビットデータ用のレジスタファイルである。一実施例の浮動小数点レジスタファイルは210は、128ビット幅の入力を有する。これは浮動小数点命令は典型的に、64から128ビット幅のオペランドを有するからである。
実行ブロック211は、命令を実際に実行する実行ユニット212、214、216、218、220、222及び224を含む。この部分は、マイクロ命令が実行に必要とする整数及び浮動小数点データオペランド値を格納するレジスタファイル208と210を含む。本実施例のプロセッサ200は、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222及び浮動小数点移動ユニット224からなる複数の実行ユニットから構成される。本実施例において、浮動小数点実行ブロック222と224は、浮動小数点処理、MMX処理、SIMD処理及びSSE処理を実行する。本実施例の浮動小数点ALU222は、割算、平方根及び剰余に関するマイクロopを実行するための64ビット単位浮動小数点割算器を有する。本発明の実施例では、浮動小数に関する任意の処理は浮動小数点ハードウェアで行われる。例えば、整数形式と浮動小数形式間の変換には、浮動小数点レジスタファイルが関与する。同じように、浮動小数割算処理は浮動小数点割算器において行われる。他方、非浮動小数点数及び整数タイプは整数ハードウェアリソースにより処理される。単純かつ頻繁に使用されるALU演算は、高速ALU実行ユニット216と218において処理される。本実施例の高速ALU216と218は、半分のクロックサイクルの効果的な待ち時間により高速処理を実行することができる。一実施例では、大部分の複雑な整数演算は低速ALU220に渡される。低速ALU220は、乗算、シフト、フラグ論理及び分岐処理のような長い待ち時間を要するタイプの処理用の整数実行ハードウェアを含む。メモリロード/ストア処理は、AGU212と214により実行される。本実施例では、整数ALU216、218及び220は、64ビットデータオペランドに対する整数処理の実行に関して説明される。他の実施例では、ALU216、218及び220は、16、32、128、256などの様々なデータビットをサポートするよう実現することができる。同じように、浮動小数点ユニット222と224は、様々なビット幅を有するオペランドをサポートするよう実現することができる。一実施例では、浮動小数点ユニット222と224は、SIMD及びマルチメディア命令に関して、128ビット幅のPackedデータオペランドにおいて実行される。
本実施例では、uopスケジューラ202、204及び206は、親ロードによる実行の終了前に、従属処理をディスパッチする。uopはプロセッサ200において投機的にスケジューリング及び実行されるので、プロセッサ200はメモリミスを扱う論理を有する。データキャッシュにおいてデータロードがミスする場合、一時的に間違ったデータによるスケジューラから発せられた従属処理がパイプライン中に含まれるかもしれない。再生機構は、誤ったデータを利用した命令を追跡及び再実行する。従属処理のみが生成される必要があり、独立処理は終了させることができる。プロセッサの一実施例のスケジューラ及び再生機構はまた、符号処理及び絶対値処理のための命令シーケンスを捕えるよう設計される。
オペランドを特定するマクロ命令の一部として利用されるオン・ボードプロセッサの記憶領域を参照するのに、ここでは「レジスタ」という単語が使われる。言い換えると、ここで呼ばれるレジスタとは、プロセッサ外部から(プログラマーの視点から)見ることができるものである。しかしながら、一実施例のレジスタは特定タイプの回路に限定されない。むしろ一実施例のレジスタはデータの格納及び提供、及びここで説明される機能の実行が可能であればよい。ここで述べられるレジスタは、例えば、専用物理レジスタ、レジスタリネーミングを利用することによる動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとを組み合わせたものなどのような様々なテクニックを利用したプロセッサ内部の回路により実現することができる。一実施例では、整数レジスタは32ビット整数データを格納している。一実施例のレジスタファイルはまた、Packedデータのための8つのマルチメディアSIMDレジスタを含んでいる。以下の説明のため、レジスタは、カリフォルニア州サンタクララのインテルコーポレーションからのMMX技術が可能なマイクロプロセッサにおける64ビット幅MMX(商標)レジスタ(mmレジスタ)のようなPackedデータの保持が可能なデータレジスタであると解釈される。このようなMMXレジスタは、整数及び浮動小数点の両方の形式で利用可能であり、SIMDとSSE命令を伴うPackedデータ要素により動作可能である。同様に、SSE2技術に関する128ビット幅XMMレジスタもまた、そのようなPackedデータオペランドの保持に利用可能である。本実施例では、Packedデータと整数データの格納において、レジスタは2つのデータタイプ間での区別をする必要はない。
以下に示される実施例では、多数のデータオペランドが説明される。図3Aは、本発明の一実施例によるマルチメディアレジスタでの様々なPackedデータタイプ表現を示す。本実施例のPackedバイトフォーマットは6つのPackedバイトデータ要素を含んでいる。図3Aでは、128ビット幅のオペランドに対するPackedバイト310、Packedワード320及びPackedダブルワード(dword)330のデータタイプが示される。本実施例のPackedバイトフォーマット310は、128ビット長であり、16のPackedバイトデータ要素を含んでいる。ここでは、1バイトは8ビットとして定義される。各バイトデータ要素の情報が、第0バイトに対しては第7ビットから第0ビットに、第1バイトに対しては第15ビットから第8ビットに、第2バイトに対しては第23ビットから第16ビットに、最後に第15バイトに対しては第128ビットから第120ビットにそれぞれ格納される。従って、利用可能なすべてのビットがレジスタにおいて利用される。この格納配置により、プロセッサの記憶効率の向上がもたらされる。16のデータ要素がアクセスされると、1つの処理が16のデータ要素に対し並列に実行される。
一般に、データ要素は、1つのレジスタあるいはメモリ領域に同じ長さの他のデータ要素と共に格納されるデータ部分である。SSE2技術に関するPackedデータシーケンスにおいて、XMMレジスタに格納されるデータ要素数は、各データ要素のビット長により割られた128ビットである。同様に、MMX及びSSE技術に関するPackedデータシーケンスでは、MMXレジスタに格納されるデータ要素数は、各データ要素のビット長により割られた64ビットである。図3Aに示されたデータタイプは128ビット長であるが、本発明の実施例はまた64ビット幅あるいは他のサイズのオペランドにおいて動作可能である。本実施例のPackedワードフォーマット320は、128ビット長であり、8つのPackedワードデータ要素を含む。各Packedワードは16ビットの情報を含んでいる。図3AのPackedダブルワードフォーマット330は、128ビット長であり、4つのPackedダブルワードデータ要素を含んでいる。各Packedダブルワードデータ要素は32ビットの情報を含んでいる。Packedクアドワードは、128ビット長であり、2つのPackedクアドワードデータ要素を含んでいる。
図3Bは、他のイン・レジスタデータ記憶フォーマットを示す。各Packedデータは複数の独立データ要素を含みうる。Packedハーフ341、Packedシングル342及びPackedダブル343の3つのPackedデータフォーマットが示される。Packedハーフ341、Packedシングル342及びPackedダブル343の一実施例は定点データ要素を含んでいる。他の実施例では、Packedハーフ341、Packedシングル342及びPackedダブル343の1つ以上が浮動小数点データ要素を含みうる。Packedハーフ341の他の実施例は、8つの16ビットデータ要素を含む128ビット長である。Packedシングル342の一実施例は、128ビット長であり、4つの32ビットデータ要素を含む。Packedダブル343の一実施例は、128ビット長であり、2つの64ビットデータ要素を含む。このようなPackedデータフォーマットは、例えば、96ビット、160ビット、192ビット、224ビット、256ビットあるいはそれ以上の他のレジスタ長にさらに拡張することが可能であるということは理解されるであろう。
図3Cは、本発明の一実施例によるマルチメディアレジスタにおける様々な符号付き及び符合なしPackedデータタイプ表現を示す。符号なしPackedバイト表現344は、SIMDレジスタへの符号なしPackedバイトの格納処理を示す。各バイトデータ要素のための情報が、第0バイトに対しては第7ビットから第0ビットに、第1バイトに対しては第15ビットから第8ビットに、第2バイトに対しては第23ビットから第16ビットに、そして最後に第15バイトに対しては第127ビットから第120ビットにそれぞれ格納される。従って、利用可能なすべてのビットがレジスタで利用される。この格納配置により、プロセッサの記憶効率の向上がもたらされる。16のデータ要素がアクセスされると、1つの処理が16のデータ要素に対し並列に実行される。符号付きPackedバイト表現345は、符号付きPackedバイトの格納を示している。ここで、各バイトデータ要素の第18ビットは符号標識である。符号なしPackedワード表現346は、第7ワードから第0ワードがSIMDレジスタにどのように格納されているかを示している。符号付きPackedワード表現347は、符号なしPackedワードイン・レジスタ表現346と同様である。ここで、各ワードデータ要素の第16ビットは符号標識である。符号なしPackedダブルワード表現348は、ダブルワードデータ要素がどのように格納されているかを示している。符号付きPackedダブルワード表現349は、符号なしPackedダブルワードイン・レジスタ表現348と同様である。ここで、必要な符号ビットは、各ダブルワードデータ要素の第32ビットである。
図3Dは、「www.intel.com/design/litcentr」を介しインテルコーポレーションから利用可能な「IA−32インテルアーキテクチャソフトウェア開発者のためのマニュアル2」において説明されている一タイプの処理符号化フォーマット(オペコード)に対応する32以上のビットを有する処理符号化フォーマットとレジスタ/メモリオペランドアドレッシングモードの一実施例を示す。符号乗算処理のタイプが、1つ以上のフィールド361と362により符号化される。2つまでのソースオペランド識別子364と365を含めて命令あたり2つまでのオペランドの位置が特定される。符号命令の一実施例において、宛先オペランド識別子366はソースオペランド識別子364と同一である。他の実施例においては、宛先オペランド識別子366はソースオペランド識別子365と同一である。従って、符号乗算処理の実施例において、ソースオペランド識別子364と365により特定されるソースオペランドの1つが符号処理の結果により上書きされる。符号命令の一実施例において、オペランド識別子364と365は、64ビットソース及び宛先オペランドの特定に利用されうる。
図3Eは、40ビット以上を有する他の処理符号化(オペコード)フォーマット370を示す。オペコードフォーマット370は、オペコードフォーマット360に対応し、選択的なプレフィックスバイト(prefix byte)378から構成される。符号乗算処理のタイプが1つ以上のフィールド378、371及び372により符号化される。命令あたり2つまでのオペランド位置がソースオペランド識別子374と375、及びプレフィックスバイト378により特定される。符号処理の一実施例において、128ビットソース及び宛先オペランドの特定にプレフィックスバイト378が利用される。符号命令の一実施例において、宛先オペランド識別子376はソースオペランド識別子374と同じである。他の実施例において、宛先オペランド識別子376はソースオペランド識別子375と同じである。従って、符号乗算処理の実施例において、ソースオペランド識別子374と375により特定されるソースオペランドの1つが符号処理の結果により上書きされる。オペコードフォーマット360と370はMODフィールド363と373及び選択的なスケール−インデックス−ベース(scale−index−base)及びディスプレースメント(displacement)バイトにより部分的に特定されるレジスタ・ツー・レジスタ(register to register)、メモリ・ツー・レジスタ(memory to register)、レジスタ・バイ・メモリ(register by memory)、レジスタ・バイ・レジスタ(register by register)、レジスタ・バイ・即値(register by immediate)、レジスタ・ツー・メモリ(register to memory)アドレッシングを可能にする。
図3Fに示されるように、他の実施例では、64ビット単一命令多重データ(SIMD)算術処理が、コプロセッサデータ処理(CDP)命令を通じ実行される。処理符号化(オペコード)フォーマット380は、CDPオペコードフィールド382と389を有するCDP命令を示す。符号または絶対値処理の他の実施例では、CDP命令のタイプは1つ以上のフィールド383、384、387及び388により符号化される。2つまでのソースオペランド識別子385と390及び1つの宛先オペランド識別子386を含めて命令あたり3つまでのオペランド位置が特定される。コプロセッサの一実施例は、8、16、32及び64ビット値に対し動作することができる。一実施例において、符号または絶対値処理が整数データ要素に対し実行される。いくつかの実施例では、条件フィールド381を利用して符号または絶対値命令が条件付きで実行されてもよい。いくつかの符号または絶対値命令では、ソースデータのサイズがフィールド383により符号化される。符号または絶対値命令のいくつかの実施例では、ゼロ(Z)、ネガティブ(N)、キャリー(C)及びオーバーフロー(V)の検出がSIMDフィールドにおいて実行される。いくつかの命令では、サチュレーション(saturation)のタイプがフィールド384により符号化される。
図4は、本発明によるPackedデータオペランドに対する符号処理を実行する論理の一実施例のブロック図である。本発明の実施例は、上述のような様々なタイプのオペランドに対し機能するよう実現される。一実施例において、本発明による符号処理は特定のデータタイプに関する処理を行う命令セットとして実現される。例えば、Packed符号バイト(PSIGNB)命令は、バイトデータタイプの符号を決定するのに与えられる。Packed符号ワード(PSIGNW)命令は、ワードデータタイプへの符号処理を行わせる。Packed符号ダブルワード(PSIGND)命令は、ダブルワードデータタイプへの符号乗算処理を実行させる。これらの命令は異なる名前が付けられているが、一般的な符号乗算処理は同様の方法で行われる。簡単化のために、以下の説明はデータ要素を処理するPacked符号(PSIGN)命令に関し与えられる。
本実施例の符号乗算処理のためのPSIGN命令は、第1データオペランドDATA A410と第2データオペランドDATA B420の2つの情報から開始される。以下の説明では、DATA A、DATA B及びRESULTANTは一般的に、オペランドあるいはデータブロックとして呼ばれ、以下に限定されるものではないが、レジスタ、レジスタファイル及びメモリ領域を含んでいる。一実施例では、各符号命令(PSIGNB、PSIGNW、PSIGND)は1つのマイクロopに復号される。他の実施例では、各命令はデータオペランドに符号処理を実行する様々なマイクロopに復号される。本実施例では、オペランド410と420は、ワード幅のデータ要素を有するソースレジスタ/メモリに格納される128ビット幅の情報である。一実施例では、オペランド410と420は、128ビットSSE2 XMMレジスタのような128ビット長のSIMDレジスタに保持される。一実施例では、RESULTANT440はXMMデータレジスタである。さらに、RESULTANT440は、ソースオペランドの1つと同じレジスタまたはメモリ領域であってもよい。特定の実施形態に応じて、オペランドとレジスタは、32ビット、64ビットまたは256ビットのような他の長さであってもよく、バイト、ダブルワードあるいはクアドワードサイズのデータ要素を有することもできる。本実施例のデータ要素はワードサイズであるが、同様の趣旨がバイト及びダブルワードサイズの要素に拡張されてもよい。データオペランドが64ビット幅である場合、XMMレジスタの代わりにMMXレジスタが利用される。
本実施例の第1オペランド410は、A7、A6、A5、A4、A3、A2、A1、A0の8つのデータ要素セットから構成される。各データ要素はRESULTANT440のデータ要素位置に対応している。第2オペランド420は、B7、B6、B5、B4、B3、B2、B1、B0の8つのデータ要素セットから構成される。ここでのデータセグメントは同じ長さであり、各々は1ワード(16ビット)のデータから構成される。しかしながら、データ要素とデータ要素位置は、ワード以外の他の粒度を有してもよい。各データ要素が1バイト(8ビット)、ダブルワード(32ビット)またはクアドワード(64ビット)である場合、128ビットオペランドはそれぞれ、16バイト幅、4ダブルワード幅または2クアドワード幅のデータ要素を有する。本発明の実施例は、特定の長さのデータオペランドまたはデータセグメントに限定されるものではなく、実施形態に適したサイズとすることができる。
オペランド410と420は、レジスタ、メモリ領域、レジスタファイルあるいはそれらを組み合わせたものに配置される。データオペランド410と420は、符号命令と共に、プロセッサ内の実行ユニットの符号計算論理430に送られる。符号命令が実行ユニットに達するまでに、当該命令はプロセッサパイプラインにおいて前もって復号されるべきである。符号命令は、マイクロ処理(uop)形式あるいは他の復号形式とすることができる。本実施例では、2つのデータオペランド410と420が符号計算論理430において受信される。符号計算論理430は、第1オペランド410の各データ要素に対し符号またはsignumを選び、第2オペランド420の対応するデータ要素位置のデータ要素の値を当該符号と掛け合わせ、RESULTANT440の適当な位置にこの乗算の積を配置する。乗算処理の基本原理がここで説明されるが、乗算による同じ所望の結果を得るための他の方法及び手段も可能である。例えば、一実施例では、乗算が乗算ユニットにより実行される。他の実施例では、値を変えなかったり、ゼロに設定したり、あるいは符号を「+」から「−」あるいはその反対に変更するなどのアルゴリズムを処理する論理により同一の結果を得るようにしてもよい。
この符号抽出及び乗算処理が、第1オペランドのデータ要素位置の全体に繰り返される。本実施例のデータ処理は符号抽出と乗算処理から構成されているが、「符号処理」あるいは「符号乗算処理」という単語はまた、このようなデータ処理を参照するに一般的に使われる。一実施例では、すべてのデータ位置のデータ要素が並列に処理される。他の実施例では、データ要素位置の一部が同時に処理されるようにしてもよい。ここで、RESULTANT440は、B7×SIGNA7、B6×SIGNA6、B5×SIGNA5、B4×SIGNA4、B3×SIGNA3、B2×SIGNA2、B1×SIGNA1、B0×SIGNA0の8つの積から構成される。本実施例では、データ要素のsignumあるいは符号(SIGN)は、非零正値に対しては「+1」、非零負値に対しては「−1」、ゼロに対しては「0」とされる。アーキテクチャが「+0」と「−0」が許されている他の実施例では、2つのタイプのゼロがゼロとして扱われ、当該データ要素のsignumまたは符号は「0」とされる。
図5は、本発明の一実施例によるデータ要素への符号乗算処理の動作を示す。本実施例の符号処理は、図4の符号計算論理430において実行することができる。本実施例では、符号処理530が1つのデータ要素位置のデータ要素に関し説明される。第1データオペランドからの第1データ要素DATA ELEMENT A510と第2データオペランドからの第2データ要素DATA ELEMENT B520が取り出される。各データ要素は、符号部と数値基底部を有する値から構成される。例えば、DATA ELEMENT A510は、SIGNとBASEからなる数512として解釈される。同じように、DATA ELEMENT B520は、SIGNとBASEからなる数522として解釈される。
符号処理530において、符号計算論理は、第1オペランドの符号であるDATA ELEMENT A510のSIGNを抽出し、DATA ELEMENT B520の数とその符号を掛け合わせる。例えば、この論理は、SIGNの値に応答して、適切な乗算処理を実行する。数の符号部は、正「+」または負「−」である。数の数値部は、ゼロ「0」または非零値である。一実施例の符号処理では、論理は第1データ要素を、正「+」、「0」または負「−」の1つに変換する。第1データ要素510が正である、すなわち、その符号が正である場合、正の符合は「+1」であるSIGNと第2データ要素520との乗数として扱われ、当該データ位置の結果540は実質的に第2データ要素520となる。第1データ要素510がゼロである場合、このゼロは「0」であるSIGNと第2データ要素520との乗数として扱われ、第1データ要素510の符号はゼロとみなされ、ゼロの結果520が生成される。第1データ要素510が負である、すなわち、その符号が負である場合、当該データ位置の結果540は第2データ要素520と「−1」であるSIGNとの乗算の積となる。DATA ELEMENT A510とDATA ELEMENT B520に関する与えられたデータ要素位置に対する符号乗算処理の結果540は、「SIGN×DATA ELEMENT」となる。他の実施例では、当該論理は符号SIGNとSIGNを掛け合わせ、結果として得られる符合をBASEに適用し、当該データ位置に対する最終結果を生成する。
図6Aは、本発明による符号乗算処理を実行するための回路600の一実施例のブロック図である。本実施例の回路600は、第1データオペランドからの要素の符号を評価し、第2ソースオペランドからの対応する要素と当該符号との積を効率的に計算する多重化構造論理から構成される。図6Aの回路600は、説明の簡単化のため結果として得られるPackedデータブロックの一データ要素位置に対し示されている。さらに、論理600は、同一実行ユニットの複数のインスタンスにて存在するデータ要素位置に対し示されている。特定の実施形態に応じて、複数の回路要素が所望の個数のデータ要素に必要なものとして外挿される。例えば、8つのデータ要素に対して、この8つのデータ要素のすべてのビットを扱うのに十分なマルチプレクサと加算器が物理的に与えられてもよい。同じように、それぞれが16データ要素を有する2つのオペランドを扱う回路の16のインスタンスが設けられてもよい。他の実施例では、例えば、加算器614のような論理のいくつかがずべてのデータ要素位置において共有されていてもよい。また他の実施例では、回路はPackedデータの処理が可能とされ、複数のデータ要素位置のデータが当該論理により処理可能とされてもよい。
本実施例では、符号処理のための論理部分は、装置の個数と冗長性を低減するため他のPacked処理と共有されていてもよい。本実施例の回路600は、ソースオペランドから入力データ要素を受け取り、結果として得られるPackedデータオペランドの特定のデータ要素位置にデータ要素結果を出力する。ソース要素SRC X602とSRC Y604は単一のデータ要素として参照されているが、これらの要素はPacked符号命令を伴うより大きなPackedデータオペランドの一部であると解釈することもできる。本実施例では、第1データ要素SRC X602は、2−入力(2:1)マルチプレクサ(mux)606に接続される。SIGN信号622は、この2:1muxの動作を制御する。本実施例では、符号処理が行われる場合、SIGN622はmux606第2入力としてmux606に接続される「0」を出力するよう命令する。他のタイプの処理が実行される場合、SIGN622はmux606にSRC X602を出力させる。
本実施例の第2ソースデータ要素SRC Y604は、反転タイプ605及び非反転タイプ604として他の2:1mux608に接続される。符号処理が実行される場合、SIGN622はmux608に反転された入力605を出力させる。2つのmux606と608が加算器614に接続される。mux出力610と612はそれぞれ加算器614への第1及び第2入力である。加算器614はこれらの入力を加算し、その出力616として合計を生成する。符号処理において、加算器は、その第1入力610として「0」を、ぞの第2入力として反転されたSRC Y605を受け取る。加算器614は、反転されたSRC Y605に「0」603を加算する。本実施例のSRC Y604の反転は、基本的にSRC Y604の符号を正から負、あるいは負から正に変換させる。従って、反転されたSRC Y605は、実質的には、加算器614にSRC Y604を「0」603からの数学的減算を実行させる。加算器614の出力616は、「0−SRC Y」の和として表現することができる。
SRC X602のデータビットはまた、ゼロ検出回路624に接続され、SRC X602がゼロに等しいか検出する。ゼロが検出されるかを示すゼロ検出器の出力626が、3−入力(3:1)mux618に制御信号として接続され、論理NORゲート628に入力として接続される。一実施例のゼロ検出は、加算と並列に実行され、新たなクリティカルタイミングパス(critical timing path)を生成することはない。SRC X602もN個の符号ビット(ただし、Nは1以上の整数)が、3:1mux618への制御として論理NORケーと628に接続される。このNORゲート628は、2つの入力の何れもがアクティブLOWである場合にアクティブHIGH信号を出力する。本実施例では、NORゲート出力632は、符号ビット620の入力の両方がLOWである場合にHIGHとなり、SRC X602が正で、ゼロ検出器の結果の入力がLOWであることを示す。
3:1mux618に接続される制御信号群634は、結果630として出力されるよう適当なデータ値を選択する。SRC X602とSRC Y604のデータ値と「0−SRC Y」616の合計が、3:1mux618への入力として接続される。本実施例では、信号634は3つの状況の1つに従って入力の1つが選択される。第1のケースは、第1ソース要素SRC X602がゼロである場合である。言い換えると、第2データ要素604はゼロで乗算される。この状態はゼロ検出器の出力626により示される。このケースでは、ゼロであるSRC X602の入力が選択され、結果630として出力される。本実施例では、このゼロ状態により、他の制御信号620と632が利用され、SRC X602の符号とSRC Y604のコンテンツに関わらずゼロが出力される。
第2のケースは、第1ソース要素SRC X602が正である場合である。この状態はNORゲート出力632により示される。本質的に、第2データ要素604は「+1」と乗算され、SRC Y604自体が生成される。このケースでは、SRC Y604の入力が選択され、結果630として出力される。第3のケースは、第1ソース要素SRC X602が負である場合である。この状態は、SRC X602のN個の符号ビットにより示され、SRC X602が負であるときにはアクティブHIGHが、SRC X602が正であるときにはアクティブLOWが与えられる。この場合、「0−SRC Y」616の和の入力が選択され、結果630として出力される。本質的に、SRC X602の負の符号は「−1」として扱われ、「0−SRC Y」の計算は第2データ要素SRC Y604と「−1」との乗算に数学的に等価である。本実施例では、これとその他のデータ要素位置の結果がソースデータオペランドと同じサイズを有する結果として得られるデータブロックにPackされる。例えば、ソースPackedデータオペランドが64または128ビット幅である場合、結果として得られるPackedデータブロックもまたそれぞれ64または128ビット幅となる。さらに、符号処理のためのソースデータオペランドはレジスタあるいはメモリ領域から取り出される。本実施例では、結果として得られるPackedデータブロックは、ソースデータオペランドの1つに対しSIMDレジスタのデータを上書きする。
図6Bは、本発明による符号処理を実行する回路650の他の実施例のブロック図である。回路配置及び接続は異なるが、本実施例の基本スキーム及び機能は図6Aの回路と同様である。本実施例の回路650は、第1データ要素の符号を評価し、当該符号と第2データ要素を掛け合わす多重構造論理から構成される。当該回路650は、結果として得られるPackedオペランドの1つのデータ要素位置に関し説明されるが、必要に応じて装置及び方法は拡張可能であり、特定の実施形態に基づき可変長オペランドに適用することができる。図6Bの回路要素は、より多くのデータ要素に利用するため複製されてよい。例えば、オペランドが16のデータ要素位置を有することができる場合、図6Bの回路はこの16のデータ要素位置をサポートするよう拡張することができる。
本実施例の回路650は、第1Packedオペランドから第1データ要素SRC X602として、及び第2Packedオペランドから第2データ要素SRC Y604として入力データを受け取る。SRC X602は、入力として3:1mux618とゼロ検出論理624に接続される。ゼロ検出器624は、SRC X602がゼロであるか判断する。SRC Y604は3:1mux618に接続され、反転タイプ613(−SRC Y)は加算器614に接続される。加算器614は、出力616での和を得るために、この場合、反転されたSRC Y613を他の加算器の入力「0」603に加算する。SRC Y604の反転タイプを加算することにより、加算器はゼロと負のSRC Yを加算し、「0」からSRC Yを数学的に減算する。加算器614への出力616は「0−SRC Y」であり、入力として3:1mux618に接続される。「0−SRC Y」はまた、SRC Y604と「−1」との乗算に等価である。
ゼロ検出回路624の出力信号626は、制御信号として3:1mux618に接続され、入力として2−入力論理NORゲート628に接続される。同じように、SRC X602のN個の符号ビットが制御信号として3:1mux618に接続され、他の入力としてNORゲート628に接続される。本実施例によるNORゲート628の出力632は、符号ビット620とゼロ検出器の出力626が共にアクティブLOWである場合、アクティブHIGHとなる。NORゲート出力632はまた、制御信号として3:1mux618に接続される。この制御信号群634は、3つのmux入力602、604及び616の1つを選択し、状態に応じて結果630として出力される。図6Aに関し上述されたように、これら3つの状態とは、(1)SRC X602がゼロ、(2)SRC X602が正、(3)SRC X602が負である場合である。第1のケースでは、ゼロであるSRC X602が選択される。第2のケースでは、「SRC Y×(+1)」であるSRC Y604が選択される。第3のケースでは、「SRC Y×(−1)」である「0−SRC Y」616が選択される。各データ要素位置に対する結果がデータオペランドの結果にPackされる。
図7は、本発明の一実施例による複数のデータ要素に関するPacked符号命令の動作を示す。これは、「PSIGNW DATA B, DATA A」命令の一例である。PSIGNW命令は、符号乗算処理を第1ソースPackedオペランドDATA B711と第2ソースPackedオペランドDATA A701におけるワードサイズのデータ要素に対し実行させる。ここでの記述は、PSIGNBやPSIGNDのような他のPacked符号命令にも適用可能である。本実施例では、宛先データ記憶装置721に編成される積を取得するために、乗算を通じてソースデータ701からの符号がもう1つのソースデータ711の値に適用される。2つのソースオペランドDATA A701とDATA B711はそれぞれ、結果721と同様に、8つのPackedデータ要素から構成される。本実施例では、関係するデータ要素のそれぞれは8ビットまたは1バイト幅である。従って、DATA A701、DATA B711及びRESULTANT721のデータブロックのそれぞれは128ビット長である。さらに、これらのデータブロックはメモリ及び/またはレジスタに配置することができる。
図7に示されるように、DATA A702は、「−4270」702、「240」703、「−3573」704、「7033」705、「−2427」706、「−9703」707、「0」708、「2605」709の基数10の数値を有するデータ要素を含む。同様に、DATA B711は、「−1120」712、「6401」713、「36」714、「0」715、「691」716、「−6780」717、「−855」718、「5177」719の基数10のソースデータ要素を含む。基数10の数値は、サブスクリプト10により記される。従って、第2データオペランド701の各データ要素の符号が抽出され、第1データオペランド711の対応するデータ要素位置の各データ要素の数と掛け合わされる。第2オペランドのデータ要素の数が「0」である場合、結果として得られる対応するデータ要素位置に「0」が入力される。一実施例では、ソースデータ701と711の1つ以上のデータ要素位置に対する符号乗算処理は並列に実行することが可能である。
第2オペランド701の各データ要素の符号が評価されると、第1オペランド711の対応するデータ要素位置の数が適当な因数と乗算される。本実施例では、第2データオペランドのデータ要素の符号に応じて、被乗数は「−1」、「0」または「+1」である。ここで符号処理が乗算と共に説明されているが、実際の乗算処理は同じ数学的結果に達するのに物理的に必要ではないかもしれない。例えば、「0」の積に達するのに「0」との乗算を実行する必要はない。また、積が自分自身になるように、ある数と「+1」を掛け合わせることは物理的に不要である。同じように、ある数と「−1」との乗算の結果は、当該数値を「0」から引くことにより行うことができる。
例えば、第2オペランド701の最左データ要素702は、負の数「−427010」を有する。一方、第1オペランド711の最左データ要素712は、「−112010」を有する。第2オペランドのデータ要素702の符号は負であるので、対応する第1オペランドのデータ要素712の「−112010」は、「−1」が乗ぜられ、Packed符号処理において「112010」の積が生成される。この積が結果721の適当なデータ要素位置722に格納される。
同様に、第2オペランド701の最右データ要素709は、正の数「260510」を有する。一方、第1オペランド711の最右データ要素719は「517710」を有する。第2データオペランドのデータ要素709の符号は正であるので、第1オペランドの対応するデータ要素719の「517710」は「+1」と乗ぜられ、Packed符号処理において「517710」の積が生成される。この積は、結果721の最右データ要素位置729に格納される。第2オペランドのデータ要素709の符号が正であるとすると、積729は単に第1オペランドのデータ要素719なので、実際の乗算は必要とされないかもしれない。
第2オペランド701の右から2番目のデータ要素708における値は「010」である。一方、第1オペランドの右から2番目のデータ要素718の値は「−85510」である。第2オペランドのデータ要素708の値がゼロであるので、対応するデータ要素718の「−85510」は「0」と乗ぜられ、Packed符号処理において「0」の積が生成される。「0」は結果721における右から2番目のデータ要素位置728に格納される。第2オペランドのデータ要素708ゼロであるので、「0」となる積を実現するのに乗算は必要でない。同じように、本実施例において第2オペランドのデータ要素のゼロは、第2オペランドのデータ要素に対し存在する符号に関わらず、結果となる位置に「0」を生じさせる。
図8Aは、符号処理を実行するための方法の一実施例を示すフローチャート800である。ここで、オペランドのやデータブロックの幅を表すのにLの長さが利用される。特定の実施形態に応じて、Lを使ってビット数、バイト数、ワード数などについての長さが指定される。同様に、オペランド内のPackedデータセグメント数あるいはセグメント数を示すのに記号Mが使用される。ブロック810において、M個の要素を有する長さLの第1データオペランドBが受け取られる。ブロック820において、M個の要素を有する長さLのデータオペランドAが受け取られる。本実施例では、ソースオペランドと結果は等しい長さを有し、同じデータ要素数を有する。ブロック830において、符号乗算処理の実行命令が処理される。
本実施例のブロック830における符号処理の詳細が、各データ要素位置に対し行われる処理に関してさらに説明される。一実施例では、結果として得られるPackedデータ要素位置のすべてに対して、並列に符号処理が実行される。他の実施例では、データ要素の一部が同時に処理される。ブロック831において、データオペランドAからの要素の値が負(ゼロより小)であるかチェックされる。当該値が負であると判断されると、ブロック832において、当該データ要素位置の結果として得られた値がデータオペランドBからの要素の値と「−1」との積として計算される。オペランドAからの要素の値がブロック831において負でない場合、ブロック833においてオペランドAからの要素の値がゼロに等しいかチェックされる。この値がゼロであると判断されると、ブロック833においてこのデータ要素位置の結果として得られる値は「0」に設定される。オペランドAの要素の値がブロック833においてゼロに等しくないと判断されると、ブロック835においてオペランドAの要素の値が正(ゼロより大)であるかチェックされる。もしこのオペランドAの要素の値が正である場合、ブロック836において当該データ要素位置の結果として得られる値が、オペランドBのデータ要素の値と「+1」との積として計算される。ブロック835においてオペランドAの要素の値が正でなければ、ブロック837において値は3つの状態(正、「0」、負)の何れでもない未定義(undefined)として扱われる。これら異なるデータ要素の結果として得られる値は、Packedオペランドの結果のソース要素ペアに対応する適切なデータ要素位置に配置される。
図8Bは、符号処理の実行方法の他の実施例を示すフローチャートである。本実施例におけるブロック810と820でのフローは図8Aのものと同様である。本実施例では、符号乗算処理におけるブロック830がやや異なっている。本実施例のブロック830における符号処理の詳細が、各データ要素位置に対し行われる処理に関して詳細に説明される。ブロック840において、データオペランドAの要素の値がゼロに等しいかチェックされる。値がゼロであると判断されると、ブロック841においてこのデータ要素位置の結果に「0」が入力される。この位置のオペランドAのデータ要素がゼロでない場合、ブロック842においてオペランドBのデータ要素の値とオペランドAのデータ要素の符号の積としてこのデータ要素位置の結果が計算される。図8Aに示されるように、各データ要素位置の結果がPackedデータブロックの結果における適切な位置に配置される。
図9は、Packedデータオペランドの対する絶対値処理を実行する論理の一実施例のブロック図である。一実施例において、本発明による絶対値処理がPacked絶対値(PABS)命令として様々なデータタイプを処理するのに実行される。簡単化のため、このPABS命令は8つのデータ要素を有するPackedオペランドに関し説明される。これらのデータ要素は、特定の実施形態に応じてバイト、ワード、ダブルワードなどとすることができる。本実施例では、Packed絶対値処理は「PABS SRC1」ようなコードラインにより呼び出される。ここで、SRC1はSIMDレジスタまたはメモリ領域を指す。この場合、SRC1はデータソースでもあり、また結果の宛先でもある。一実施例において、命令フォーマットは2オペランドを要し、このラインは「PABS SRC1, SRC2」を読み込む。この場合、PABS命令によりSRC2のデータ要素の絶対値はSRC1に置かれる。さらに、一実施例では、バイトデータタイプの絶対値を生成するためPacked絶対値バイト(PABSB)命令が与えられる。また、ワードデータタイプの絶対値を生成するためPacked絶対値ワード(PABSW)命令が与えられる。ダブルワードデータタイプの絶対値を生成するためPacked絶対値ダブルワード(PABSD)命令が与えられる。
本実施例の絶対値処理のPASB命令は、A7、A6、A5、A4、A3、A2、A1、A0の8つのデータ要素を有する第1データオペランドSOURCE DATA910から開始される。各データ要素は結果930のデータ要素位置に対応する。データオペランド910が、絶対値命令と共に、絶対値計算論理920に送信される。絶対値計算論理920は、各ソースデータ要素の値を修正して、結果930の対応する要素位置の値が当該ソースデータ要素の数の符号なし絶対値を有するようにする。例えば、結果として得られる最左要素位置はソース要素A7の数の符号なし絶対値を有する。ソースオペランド910の全データ要素位置に対して、この絶対値処理が繰り返される。本実施例では、結果位置はソースオペランドの位置と同一とすることができる。2つのオペランドがPABS命令による特定される他の実施例では、1つのオペランドがソースを特定し、もう一方が宛先を特定する。
画像処理ではしばしば圧縮が行われる。一般に、映像フレームは画素ブロックで圧縮される。高圧縮映像では、量子化処理のためブロックアーチファクトが現れる。多くの符号化アルゴリズムにおいて、低ビットレートで現れる1つのタイプの画像劣化はブロック効果と呼ばれるものである。このブロック効果は、画像処理中に画像を一定のグリッドで矩形ブロックに分割することにより生じるものである。各ブロックの符号化はそれぞれ独立しているので、ブロック間の境界における符号化画像値の連続性の保証はない。離散コサイン変換のDC係数の量子化では、オフセットがブロックに加減され、隣接ブロックに対し明るさが変化し、ブロック境界に沿って直線が現れてしまう。これによりときには、不自然なエッジが顕著となり、符号化された画像にブロックアーチファクトが出現する。画像シーケンスにおいて、移動シーンに対して非移動エッジの背景グリッドにより、不自然かつ望ましくない画像劣化が発生する。このようなブロック効果の発生を回避するために、ブロック解除スキームはフィルタを利用して、不自然なエッジのスムージングが行われる。ブロック間の境界をスムージングするブロック解除アルゴリズムにより、このようなアーチファクトを目立たなくすることができる。しかしながら、ブロックの境界に沿って真のエッジが存在する場合、アルゴリズムはブロック間のステップをスムージングを実行すべきではない。一般的に、隣接ブロック間のステップは、エッジステップのサイズが量子化により生成されるステップサイズより大きい場合、真のエッジであるとみなすことができる。同じように、他のアルゴリズムを使ってブロック上の表面をフィッティングさせることができる。
映像圧縮方法H.263やMPEG4のブロック解除アルゴリズムのいくつかは、符号またはsignum処理、及び絶対値処理を利用する。これらの映像ブロック解除アルゴリズムでは、符号関数が補正係数の符号を計算し、絶対値処理を利用して補正係数の大きさの決定、及び所定の閾値により映像内の変化の比較が行われる。前述のPSIGN及びPABSのようなSIMD命令の実施例がH.263やMPEG4のブロック解除アルゴリズムにおいて使用される。signum処理は、データの符号の評価及び符号を示すものを与える。例えば、あるデータ要素に対するsignum処理は、当該データ要素がゼロである場合には「0」を出力し、当該データ要素が負である場合には「−1」を出力し、当該データ要素が正である場合には「+1」を出力する。一実施例では、本発明によるPSIGN命令を使ってsignum機能が提供される。
非線形フィルタブロック解除処理の一アプローチでは、3−ステップ非線形フィルタリングアプローチが利用される。第1に、ブロック境界が特徴付けされる。第2に、第1ステップの結果を利用して、ブロック境界に沿って画素値を補正するための係数が計算される。第3に、第2ステップにおいて計算された係数を加減することにより、境界に沿った画素値の補正が行われる。以下の例は、一実施例によるH.263ブロック解除アルゴリズムが説明される。AとBはブロック境界の一方のサイドの画素である。A1012は、ブロック境界からの画素単位の距離のアレイである。B1014は、ブロック境界に沿った画素のアレイである。CとDはブロック境界のもう一方のサイドの画素である。C1022は、アレイBからの境界のもう一方のサイドのブロック境界に沿ったアレイである。D1024は、アレイC1022と同じブロック1020におけるブロック境界からの画素単位の距離のアレイである。ブロックX1010とブロックY1020との間の量子化に起因する連続したアーチファクトを低減するために、真のエッジを保持しながらのブロック解除が実行される。ブロック解除の結果はA’、B’、C’及びD’とラベル付けされる。
図10は、本発明によるSIMD命令を利用したブロック解除の動作を示す。2つのデータブロック1010と1020が図10に示される。本実施例では、これらのブロックは画像あるいは映像ストリームにデータを含んでいる。各ブロックは、複数のデータ要素の列と行から構成される。例えば、ある画像処理アルゴリズムでのブロックは8×8データブロックである。ここでは、BLOCK X1010とBLOCK Y1020との間のブロック境界に着目して例示される。下の2つのデータ行1012と1014はBLOCK X1010に対し示される。上の2つのデータ行1022と1024がBLOCK Y1020に対し示される。各データ行は7から0までのデータ要素から構成される。
SIMDレジスタはアレイA1012、B1014、C1022及びD1024の画素データによりロードされる。第1に、ブロック境界が特徴付けされる。ブロック境界までのステップのサイズと向きが決定される。これは以下の方程式により表される。
d=(A−4B+4C−D)/8
ここで、アレイB1014とC1022の補正係数が、アップダウンランプ(updown ramp)
=SIGN(d)×(MAX(0, ABS(d)−MAX(0, 2×(ABS(d)−strength))))
により計算される。
アレイA1012とD1024の補正係数が、
=clipd1((A−D)/4, d/2)
により計算される。
ここで、絶対値、最大値及びクリッピング処理を利用して、画素補正係数dとdの大きさが計算される。符号処理では、第1ステップからの係数dを使って補正係数dの符号が計算される。補正係数dとdは画素値に対して加減される。アレイB1014とC1022の境界画素が以下の方程式に従って、
B’=clip(B+d) C’=clip(C−d
補正される。
その後、アレイA1012とD1024の画素が以下の方程式に従って、
A’=A−d D’=D+d
補正される。
の計算はアップダウンランプと呼ばれる機能である。dが「strength」に等しいとき値がピークとなり、dが「2×strength」に等しいとき値がゼロになる。「strength」の値は量子化ステップのサイズにより決定される。一般に、「strength」はステップサイズの約半分である。関数」「clipd1()」は、「(A−D)/4」の結果に「d/2」の絶対値の「+」または「−」をクリップする。関数「clip()」は、評価結果に「0」または「255」をクリップする。このアルゴリズムの実施例はSIMD命令により実行される。本実施例では、符号処理がPSIGNBまたはPSIGNWにより実行することができる。同じように、絶対値処理がPABSBまたはPABSWにより実行することができる。本実施例では、アレイA、B、C及びDの複数の画素値が個別のSIMDレジスタにロードされる。一実施例では、ブロック解除処理が複数の画素列に一斉にまたは並列に適用される。符号、絶対値及び最大値命令を利用して、中間値dとdの複数の値がSIMDレジスタで計算される。結果A’、B’、C’及びD’がSIMDレジスタにおいて計算される。クリッピング処理はSIMD最大及び最小命令により計算することができる。
上述の符号命令の機能が、本実施例の非線形フィルタリングブロック解除アルゴリズムにおいて利用される。このブロック解除アルゴリズムの実施例は、H.263またはMPEG4のような符号化テクニックにより、よく知られたこれら2つの映像圧縮方法の量子化処理により生じるブロックアーチファクトを取り除くために実行される。ブロック解除アルゴリズムの符号乗算命令を利用することにより、本スキームの実施例はこれら符号化アルゴリズムの計算を高速化し、コードサイズを減少させることができる。例えば、1つのPSIGN命令は、Packedデータに対し処理することができない同様のデータ操作または命令の実行に必要な複数の算術命令と置換することができる。これにより、全体のスループットは改善され、処理リソースが節約される。
ブロック解除アルゴリズムの一実施例では、符号命令及び絶対値命令は飽和しない。これは、Packed絶対値命令に対して、−2n−1の値を有するNビットデータが2n−1に評価される。Packed符号命令では、−2n−1に等しい第1ソース要素と負の第2ソース要素を有するNビットデータが2n−1に評価される。いくつかの場合で、符号付きの結果が必要とされ、それゆえ2n−1−1より大きな正の値は許可されない。1つの解決策は、PABSまたはPSIGN命令が実行される前に、最大正負値が同じ大きさを有するようにすることである。
一実施例の符号及び絶対値処理はまた、以下に説明されるMPEG4ブロック解除アルゴリズムに適用することができる。10個の画素からなり、ブロック境界の各サイドに5つの画素が配置される状態が、V0 V1 V2 V3 V4|V5 V6 V7 V8 V9として表される。「|」はブロック境界を表す。まず、ブロック境界が以下に従って、
Figure 0004869552
特徴付けされる。countがTHRESHOLD2以上であれば、DCモードを利用し、そうでなければ、デフォルトモードを利用する。ブロック境界はまた以下に従って、
最大値=MAX(V1 V2 V3 V4 V5 V6 V7 V8)
最小値=MIN(V1 V2 V3 V4 V5 V6 V7 V8)
特徴付けされる。
ABS(最大値−最小値)<2×量子化係数である場合、DCに関する補正ステップ2と3が実行され、そうでない場合、補正は行われない。デフォルトモードでは、補正係数は以下に従って、
a3,0=(2×V3−5×V4+5×V5−2×V6)/8
a3,1=(2×V1−5×V2+5×V3−2×V4)/8
a3,2=(2×V5−5×V6+5×V7−2×V8)/8
a3,0’=SIGN(a3,0)×MIN(ABS(a3,0), ABS(a3,1), ABS(a3,2))
d=CLIP(5×(a3,0’−a3,0)/8, 0, ((V4−V5)/2×δ(ABS(a3,0)<量子化係数))
計算される。ただし、δ()は、真の場合には1、偽の場合には0と評価する。
その後、境界画素が補正される。関数CLIP(r, p, q)がpとqとの間にrをクリップする。DCモードでは、補正係数は以下に従って、
m<1の場合、ABS(V1−V0)<QPのとき、p=V0とし、そうでないときp=V1とする。
1≦m≦8の場合、p=Vとする。
m>8の場合、ABS(V8−V9)<量子化係数のとき、p=V9とし、そうでないときp=V8とする。
図11は、SIMD命令を利用したブロック解除アルゴリズムを実行するための方法の一実施例を示すフローチャート1100である。例えば、このようなブロック解除アルゴリズムは、H.263やMPEG4圧縮方法のコードにより実現される。ブロック1102において、第1ブロックと第2ブロックの画素データが受け取られる。ブロック1140において、これら2つのブロック間のブロック境界が特徴付けされる。ブロック1106において、Packed符号乗算処理及びPacked絶対値処理の実行命令を利用することにより、1つ以上の補正係数がPacked画素データにおいて計算される。ブロック解除アルゴリズムの補正係数を計算するとき、PSIGN及び/またはPABS命令を利用することにより、必要とされる非SIMD命令の数を減らすことができ、処理リソースの効率を向上させることができる。例えば、本発明による画像処理アルゴリズムのブロック解除シーケンスの一実施例は、PSIGN処理を利用することにより補正係数の符号を判断し、PABSを利用することにより補正係数の大きさを計算する。ブロック1108において、第1ブロック及び第2ブロックの境界画素が、符号乗算処理及び絶対値処理により計算された1つ以上の補正係数により補正される。
符号乗算処理を実行する方法、装置及び命令のためのテクニックが開示された。特定の実施例が添付された図面と共に説明及び示されたが、このような実施例は単なる例示のものであり、発明の範囲を限定するものではない。また、本発明は例示及び説明された特定の構成及び配置に制限されるものではなく、当業者により本開示に基づき他の様々な変更を行うことができるであろう。進歩のスピードが速く、さらなる進展が容易に予想できないこのような技術分野では、開示された実施例は、本開示の原理あるいは添付されたクレームの範囲を逸脱することなく、技術の進歩により促進されるような修正が可能である。
本発明は上記特定の実施例に限定されるものではなく、本発明の要旨内において様々な変形・変更が可能である。
図1Aは、本発明の一実施例による符号乗算処理のための命令を実行する実行ユニットを有するプロセッサから構成されるコンピュータシステムのブロック図である。 図1Bは、本発明の他の実施例による他の一例となるコンピュータシステムのブロック図である。 図1Cは、本発明の他の実施例によるさらなる他の一例となるコンピュータシステムのブロック図である。 図2は、本発明による符号乗算処理を実行する論理回路を有する一例となるプロセッサのマイクロアーキテクチャのブロック図である。 図3Aは、本発明の一実施例によるマルチメディアレジスタの様々なPackedデータタイプ表現を示す。 図3Bは、他の実施例によるPackedデータタイプを示す。 図3Cは、本発明の一実施例によるマルチメディアレジスタの様々な符号付き及び符号なしPackedデータタイプ表現を示す。 図3Dは、オペコードフォーマットの一実施例を示す。 図3Eは、オペコードフォーマットの他の実施例を示す。 図3Fは、オペコードフォーマットのさらなる他の実施例を示す。 図4は、本発明によるPackedデータオペランドに対する符号処理を実行する論理の一実施例のブロック図である。 図5は、本発明の一実施例によるデータ要素に対する符号乗算処理の動作を示す。 図6Aは、本発明による符号処理を実行する回路の一実施例のブロック図である。 図6Bは、本発明による符号処理を実行する回路の他の実施例のブロック図である。 図7は、本発明の一実施例による複数のデータ要素に対するPacked符号命令の動作を示す。 図8Aは、符号処理を実行するための方法の一実施例を示すフローチャートである。 図8Bは、符号処理を実行するための方法の他の実施例を示すフローチャートである。 図9は、Packedデータオペランドに対する絶対値処理を実行するための論理の一実施例のブロック図である。 図10は、本発明によるSIMD命令を利用したブロック解除アルゴリズムの動作を示す。 図11は、SIMD命令を利用したブロック解除アルゴリズムを実行するための方法の一実施例を示すフローチャートである。
符号の説明
100、160 コンピュータシステム
102、166、200 プロセッサ
104、167 キャッシュ
106、145、164 レジスタファイル
108、142、162 実行ユニット
109、143,163 命令セット
110 プロセッサバス
112 グラフィックス/ビデオカード
114 AGPインターコネクト
116 メモリコントローラハブ(MCH)
118 メモリインタフェース
120 メモリ
122 専用ハブインタフェースバス
124 データ記憶装置
126 無線送信機
128 フラッシュBIOS
130 I/Oコントローラハブ(ICH)
134 ネットワークコントローラ
141 バス
144、165 デコーダ
146 SDRAMコントロール
147 SRAMコントロール
148 バーストフラッシュメモリインタフェース
149 PCMCIA/CFカードコントロール
150 LCDコントロール
151 DMAコントロール
152 代替バスマスタインタフェース
153 I/Oバス
154 I/Oブリッジ
155 UART
156 USB
157 ブルートゥースUART
158 I/O拡張インタフェース
159 処理コア
161 SIMDコプロセッサ
168 I/Oシステム
169 無線インタフェース
201 フロントエンド
202 高速スケジューラ
203 アウト・オブ・オーダーエンジン
204 低速/通常浮動小数点スケジューラ
206 シンプル浮動小数点スケジューラ
211 実行ブロック
212、214 アドレス生成ユニット(AGU)
216、218 高速ALU
220 低速ALU
222 浮動小数点ALU
224 浮動小数点移動ユニット
226 命令プリフェッチャ
228 命令デコーダ
230 トレースキャッシュ
232 マイクロコードROM
234 uopキュー
430 符号計算論理
600、650 回路
606、608 2−入力(2:1)マルチプレクサ(mux)
614 加算器
618 3−入力(3:1)マルチプレクサ(mux)
624 ゼロ検出回路
628 論理NORゲート
920 絶対値計算論理

Claims (4)

  1. 格納領域と、
    該格納領域に接続される実行リソースと、
    を有するプロセッサを含む装置であって、
    前記実行リソースは、第1オペランドと第2オペランドとを含む第1命令を実行し、該第1命令に応答して、前記第2オペランドが正の値である場合には前記第1オペランドの値を、前記第2オペランドがゼロの値である場合にはゼロの値を、前記第2オペランドが負の値である場合には前記第1オペランドの反対の符号の値を有する結果を前記格納領域に格納することを特徴とする装置。
  2. Packedデータ要素を格納できるレジスタファイルと、
    前記レジスタファイルに接続され、複数のPackedデータ命令に応答して前記レジスタファイルに値を格納する実行ユニットと、
    を有するプロセッサであって、
    前記実行ユニットは、複数の結果データ要素から構成される結果を前記レジスタファイルに格納することにより前記複数のPackedデータ命令の第1命令に応答し、
    前記複数の結果データ要素の各々は、複数の第1ソースデータ要素と複数の第2ソースデータ要素の各自の値に対して、前記複数の第2ソースデータ要素の対応する第2ソースデータ要素の「1」,「0」又は「−1」の符号の値と乗算された前記複数の第1ソースデータ要素の対応する第1ソースデータ要素に等しいことを特徴とするプロセッサ。
  3. フロントエンドによって、第1オペランド符号と第1オペランド量を有する第1オペランドと第2オペランド符号と第2オペランド量を有する第2オペランドとを特定する命令をフェッチするステップと、
    実行ユニットを使用して、入力された前記第2オペランドが正であるか判断し、そのとき前記命令に応答して前記第1オペランドを結果として格納し、前記第2オペランドが負であるか判断し、そのとき前記第1オペランドと「−1」との積に等しい値を前記命令の結果として格納し、前記第2オペランドがゼロであるか判断し、そのときゼロを前記命令の結果として格納するステップと、
    を有することを特徴とする方法。
  4. 第1Packedデータ命令と、複数の第1ソースデータ要素から構成される第1Packedデータと、複数の第2ソースデータ要素から構成される第2Packedデータとを格納するメモリと、
    前記第1Packedデータ命令を実行し、複数の結果Packedデータ要素から構成される結果Packedデータをプロセッサ格納領域に格納するプロセッサと、
    を有するシステムであって、
    前記複数の第2ソースデータ要素の非ゼロ要素に対応する前記複数の結果Packedデータ要素のそれぞれは、前記複数の第1ソースデータ要素と前記複数の第2ソースデータ要素との対応する要素の双方の符号により決定される符号と、前記複数の第2ソースデータ要素の対応する要素のすべての非ゼロの値に対する前記複数の第1Packedデータ要素の対応する要素の大きさとを有することを特徴とするシステム。
JP2003425712A 2003-06-30 2003-12-22 符号乗算処理を実行する方法及び装置 Expired - Fee Related JP4869552B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/610,929 US7539714B2 (en) 2003-06-30 2003-06-30 Method, apparatus, and instruction for performing a sign operation that multiplies
US610929 2003-06-30

Publications (3)

Publication Number Publication Date
JP2005025719A JP2005025719A (ja) 2005-01-27
JP2005025719A5 JP2005025719A5 (ja) 2007-02-01
JP4869552B2 true JP4869552B2 (ja) 2012-02-08

Family

ID=33452633

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003425712A Expired - Fee Related JP4869552B2 (ja) 2003-06-30 2003-12-22 符号乗算処理を実行する方法及び装置

Country Status (10)

Country Link
US (1) US7539714B2 (ja)
EP (2) EP2284694B1 (ja)
JP (1) JP4869552B2 (ja)
KR (1) KR100841131B1 (ja)
CN (1) CN1577249B (ja)
BR (2) BRPI0306094B1 (ja)
MX (1) MXPA03011899A (ja)
RU (1) RU2275677C2 (ja)
SG (1) SG144700A1 (ja)
TW (1) TWI305882B (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7424501B2 (en) * 2003-06-30 2008-09-09 Intel Corporation Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations
US7729426B2 (en) * 2004-09-20 2010-06-01 Divx, Inc. Video deblocking filter
US7475103B2 (en) * 2005-03-17 2009-01-06 Qualcomm Incorporated Efficient check node message transform approximation for LDPC decoder
US20070074007A1 (en) * 2005-09-28 2007-03-29 Arc International (Uk) Limited Parameterizable clip instruction and method of performing a clip operation using the same
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US20090113174A1 (en) * 2007-10-31 2009-04-30 Texas Instruments Incorporated Sign Operation Instructions and Circuitry
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US8041927B2 (en) * 2008-04-16 2011-10-18 Nec Corporation Processor apparatus and method of processing multiple data by single instructions
JP5490710B2 (ja) * 2008-10-24 2014-05-14 シャープ株式会社 表示装置および表示装置の駆動方法
US9747105B2 (en) 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
US9003170B2 (en) * 2009-12-22 2015-04-07 Intel Corporation Bit range isolation instructions, methods, and apparatus
SG187065A1 (en) * 2010-07-14 2013-03-28 Ntt Docomo Inc Low-complexity intra prediction for video coding
RU2467377C1 (ru) * 2011-04-19 2012-11-20 ОАО "Концерн "Моринформсистема-Агат" Способ и устройство умножения чисел в коде "1 из 4"
RU2461867C1 (ru) * 2011-06-23 2012-09-20 Российская Федерация, от имени которой выступает Государственная корпорация по атомной энергии "Росатом" - Госкорпорация "Росатом" Реконфигурируемый вычислительный конвейер
US9507593B2 (en) * 2011-12-23 2016-11-29 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
US9715383B2 (en) 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
US9710266B2 (en) 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
US9459867B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9207941B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses, and methods for reducing the number of short integer multiplications
CN103995475B (zh) * 2014-05-16 2016-05-18 北京航空航天大学 一种柔性嵌入式被测设备模拟器
US20160125263A1 (en) 2014-11-03 2016-05-05 Texas Instruments Incorporated Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor
US10346944B2 (en) * 2017-04-09 2019-07-09 Intel Corporation Machine learning sparse computation mechanism
CN108733347B (zh) * 2017-04-20 2021-01-29 杭州海康威视数字技术股份有限公司 一种数据处理方法及装置
RU2653310C1 (ru) * 2017-05-24 2018-05-07 федеральное государственное бюджетное образовательное учреждение высшего образования "Воронежский государственный университет" (ФГБОУ ВО "ВГУ") Устройство для умножения числа по модулю на константу
CN107729989B (zh) * 2017-07-20 2020-12-29 安徽寒武纪信息科技有限公司 一种用于执行人工神经网络正向运算的装置及方法
RU2666285C1 (ru) * 2017-10-06 2018-09-06 Федеральное государственное бюджетное образовательное учреждение высшего образования "Вятский государственный университет" (ВятГУ) Способ организации выполнения операции умножения двух чисел в модулярно-логарифмическом формате представления с плавающей точкой на гибридных многоядерных процессорах
US11614920B2 (en) * 2020-05-07 2023-03-28 Meta Platforms, Inc. Bypassing zero-value multiplications in a hardware multiplier

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR1398092A (fr) * 1964-03-26 1965-05-07 Saint Gobain Nouveau circuit électronique de commutation
FR1509926A (fr) * 1966-03-21 1968-01-19 Saint Gobain Techn Nouvelles Circuit multiplicateur scalaire
JPS63310023A (ja) * 1987-06-11 1988-12-19 Matsushita Electric Ind Co Ltd 符号付固定小数点乗算装置
NL9001608A (nl) * 1990-07-16 1992-02-17 Philips Nv Ontvanger voor meerwaardige digitale signalen.
JPH04155503A (ja) * 1990-10-19 1992-05-28 Matsushita Electric Ind Co Ltd ニューロ制御装置
US5128890A (en) * 1991-05-06 1992-07-07 Motorola, Inc. Apparatus for performing multiplications with reduced power and a method therefor
US5349545A (en) * 1992-11-24 1994-09-20 Intel Corporation Arithmetic logic unit dequantization
US6023489A (en) * 1995-05-24 2000-02-08 Leica Geosystems Inc. Method and apparatus for code synchronization in a global positioning system receiver
US6038583A (en) * 1997-10-23 2000-03-14 Advanced Micro Devices, Inc. Method and apparatus for simultaneously multiplying two or more independent pairs of operands and calculating a rounded products
US6490607B1 (en) * 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
US6243803B1 (en) * 1998-03-31 2001-06-05 Intel Corporation Method and apparatus for computing a packed absolute differences with plurality of sign bits using SIMD add circuitry
US6351293B1 (en) * 1998-05-18 2002-02-26 Sarnoff Corporation Decision directed phase detector
US6292814B1 (en) * 1998-06-26 2001-09-18 Hitachi America, Ltd. Methods and apparatus for implementing a sign function
US6397240B1 (en) * 1999-02-18 2002-05-28 Agere Systems Guardian Corp. Programmable accelerator for a programmable processor system

Also Published As

Publication number Publication date
EP1496432A2 (en) 2005-01-12
BR0306094A (pt) 2005-05-17
EP2284694A1 (en) 2011-02-16
EP1496432A3 (en) 2007-12-12
SG144700A1 (en) 2008-08-28
TW200500878A (en) 2005-01-01
BRPI0306094B1 (pt) 2017-06-27
MXPA03011899A (es) 2005-01-13
US7539714B2 (en) 2009-05-26
CN1577249A (zh) 2005-02-09
JP2005025719A (ja) 2005-01-27
RU2003137709A (ru) 2005-06-10
KR20050005729A (ko) 2005-01-14
KR100841131B1 (ko) 2008-06-24
EP2284694B1 (en) 2013-05-15
RU2275677C2 (ru) 2006-04-27
CN1577249B (zh) 2010-04-14
TWI305882B (en) 2009-02-01
US20040267858A1 (en) 2004-12-30

Similar Documents

Publication Publication Date Title
US10474466B2 (en) SIMD sign operation
JP4869552B2 (ja) 符号乗算処理を実行する方法及び装置
CN107741842B (zh) 用于执行点积运算的指令和逻辑
JP4480997B2 (ja) Simd整数乗算上位丸めシフト
JP6567285B2 (ja) 文字列を処理するための命令及び論理回路

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061213

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091102

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091110

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101026

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110126

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111025

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111116

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141125

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees