以下の説明では、プロセッサ、コンピュータシステム、又は他の処理装置内で、あるいはこれらに関連して、アトミックな範囲演算を提供する命令及び処理ロジックが開示される。
いくつかの実施形態では、本明細書に開示される命令及びロジックは、マルチプロセッシングシステムにおいてアトミックな範囲演算を提供する。いくつかの実施形態では、アトミックな範囲変更命令が、範囲インデックスのセットのアドレスを指定する。命令は、範囲インデックスのセットへのアクセスをロックし、範囲サイズをチェックするために範囲インデックスを読み込む。範囲サイズは、範囲変更を行うのに十分なサイズと比較される。範囲サイズが範囲変更を行うのに十分である場合、範囲変更が行われ、範囲インデックスのセットのうち、1つ又は複数の変更された範囲インデックスがメモリに戻され格納される。そうではなく、範囲サイズが上記範囲変更を行うのに十分ではない場合、エラー信号がセットされてよい。例えば、エラー信号は、レジスタにセットされる戻り値を含むことができる。いくつかの実施形態では、エラー信号は、プロセッサの条件コードレジスタ又はフラグレジスタ(例えば、ゼロフラグ)にセットされてよい。範囲インデックスのセットへのアクセスは、アトミックな範囲変更命令の完了に応答して、ロック解除される。したがって、そのようなアトミックな範囲変更命令の読み出し、条件変更、書き込みオペレーションは、システムの全ての観察者には、瞬時に行われているように見える。いくつかの実施形態では、範囲は、NEXT及びENDという一対の64ビットインデックスをメモリ内に含むことができる。いくつかの代替の実施形態では、範囲は、NEXT及びENDという一対の32ビット(又は16ビット)インデックスをメモリ内に含むことができる。実施形態には、アトミックにNEXTを増分(インクリメント)する命令、アトミックにNEXTに加算する命令、アトミックにENDを減分(デクリメント)する命令、及び/又はアトミックにENDから減算する命令が含まれてよい。
例えば、範囲[NEXT,END)には、NEXTからEND−1までのインデックスが含まれる。NEXTがEND以上である場合、範囲[NEXT,END)は空である。範囲[NEXT,END)のサイズは、ENDがNEXTより大きい場合、END−NEXTに等しい。1以上のサイズを有する範囲が、アトミックにNEXTを増分する命令(INC NEXT)、又はアトミックにENDを減分する命令(DEC END)を実行するのに十分である。範囲のサイズがX以上であれば、アトミックにNEXTにXを加算する命令(ADD NEXT)、又はアトミックにENDからXを減算する命令(SUB END)を実行するのに十分である。
SPMD処理は、タスクを分割し、機能の複数のインスタンス(例えば、ベジェ曲線、ベジェサーフェス、データベース検索/更新など)を呼び出す、又は複数のプロセッサ(又は論理プロセッサ)上でループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、アトミックな範囲演算を用いることができることが理解されよう。これらの複数のプロセッサ(例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど)が一般的なキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期(例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信)によって、協同するSPMDプロセッサ(又は論理プロセッサ)の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
以下の説明では、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実行可能メカニズムなどの多くの具体的な詳細が、本発明の実施形態のより完全な理解を提供するために明記されている。しかし、そのような具体的な詳細がなくても、本発明は実施できることが、当業者には理解されよう。さらに、本発明の実施形態を不必要にあいまいにしないように、いくつかのよく知られた構造、回路などは詳細に示されていない。
以下の実施形態はプロセッサに関して説明されているが、他のタイプの集積回路及びロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に関する類似の技術及び教示は、他のタイプの回路又は半導体デバイスに適用することができ、当該回路又は半導体デバイスは、より高いパイプラインスループット及び性能の向上によって恩恵を受けることができる。本発明の実施形態の教示は、データ操作を行うあらゆるプロセッサ又は機械に適用可能である。しかし、本発明は512ビット、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータ操作を行うプロセッサ又は機械に限定されず、本発明は、データの操作又は管理が行われるあらゆるプロセッサ及び機械に適用することができる。さらに、以下の説明は複数の例を提供しており、添付図面は例示を目的として様々な例を示している。しかし、これらの例は、本発明の実施形態に関する全ての可能性のある実装を網羅的に列挙して提供するのではなく、単に本発明の実施形態の例を提供することを意図しているので、限定的な意味において解釈されるべきではない。
以下の例は、実行ユニット及びロジック回路との関連で命令の処理及び分配を説明するが、本発明の他の実施形態は、機械により行われると、本発明の少なくとも1つの実施形態と一致する機能を機械に行わせる機械可読で有形の媒体に格納されたデータ及び/又は命令によって実現され得る。1つの実施形態では、本発明の実施形態に関連付けられる機能は、機械実行可能命令で具現化される。命令は、命令でプログラムされる汎用プロセッサ又は専用プロセッサに、本発明の段階を行わせるのに用いることができる。本発明の実施形態は、本発明の実施形態による1つ又は複数のオペレーションを行うために、コンピュータ(又は他の電子デバイス)をプログラムするのに用いることができる命令を格納した機械可読媒体又はコンピュータ可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供されてよい。あるいは、本発明の実施形態の複数の段階は、当該段階を行うための固定機能ロジックを含む特定のハードウェアコンポーネントによって、又はプログラムされたコンピュータコンポーネント及び固定機能ハードウェアコンポーネントの任意の組み合わせによって、行われることもある。
本発明の実施形態を行うロジックをプログラムするのに用いられる命令は、DRAM、キャッシュ、フラッシュメモリ、又は他のストレージなど、システム内のメモリの中に格納することができる。さらに、命令は、ネットワークを介して、又は他のコンピュータ可読媒体によって配信することができる。したがって、機械可読媒体は、機械(例えば、コンピュータ)が可読な形態で、情報を格納又は送信するためのあらゆるメカニズムを含むことができ、当該メカニズムには、限定されないが、フロッピー(登録商標)ディスケット、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、及び光磁気ディスク、並びに、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気カード又は光カード、フラッシュメモリ、あるいは、電気、光、音波、又は他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号など)を介してインターネット上で情報の送信に用いられる有形の機械可読ストレージが含まれる。したがって、コンピュータ可読媒体には、機械(例えば、コンピュータ)が可読な形態で電子命令又は電子情報を格納又は送信するのに適した、あらゆるタイプの有形の機械可読媒体が含まれる。
設計は、作成からシミュレーション、製造まで様々なステージを経ることもある。設計を表すデータは、複数の形式で設計を表すことができる。まず、シミュレーションで役立つように、ハードウェア記述言語又は別の機能記述言語を用いて、ハードウェアを表すことができる。さらに、ロジック及び/又はトランジスタゲートを用いた回路レベルのモデルを、設計プロセスのいくつかのステージで作り出すことができる。さらに、大部分の設計が、どこかのステージにおいて、ハードウェアモデルで様々なデバイスの物理配置を表すデータレベルに到達する。従来の半導体製造技術が用いられる場合には、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスクレイヤ上に様々な特徴が存在する又は存在しないことを指定するデータであってよい。設計のあらゆる表現において、データは、あらゆる形態の機械可読媒体に格納されてよい。メモリ、あるいはディスクなどの磁気ストレージ又は光ストレージは、光波又は電波を介して送信された情報を格納する機械可読媒体であってよく、光波又は電波は、そのような情報を送信するよう変調される、又は別の方法で生成される。コード又は設計を示す、あるいはそれを搬送する電気搬送波が、電気信号のコピー、バッファリング、再送信が行われるという程度まで送信されると、新たなコピーが作られる。したがって、通信事業者又はネットワーク事業者は、搬送波にエンコードされた情報などの物品を、有形の機械可読媒体に少なくとも一時的に格納して、本発明の実施形態の技術を具現化することができる。
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理して実行するのに用いられる。命令によっては、より高速で完了するものもあれば、完了に多くのクロックサイクルを必要とし得るものもあるなど、全ての命令が等しく作成されているわけではない。命令のスループットが高速になればなるほど、プロセッサの全体的な性能もそれだけ良くなる。したがって、多くの命令を可能な限り高速で実行させることが有利であろう。しかし、複雑さがより増して、実行時間及びプロセッサリソースに関してより多くを必要とする特定の命令が存在する。例えば、浮動小数点命令、ロード/ストア演算、データ移動などがある。
より多くのコンピュータシステムがインターネット、テキスト、及びマルチメディアアプリケーションで用いられるにつれ、追加のプロセッササポートが徐々に導入されている。1つの実施形態では、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理及び例外処理、並びに外部入力及び出力(I/O)を含む1つ又は複数のコンピュータアーキテクチャに、命令セットが関連付けられてよい。
1つの実施形態では、命令セットアーキテクチャ(ISA)は1つ又は複数のマイクロアーキテクチャで実装されてよく、マイクロアーキテクチャには1つ又は複数の命令セットを実装するのに用いられるプロセッサロジック及び回路が含まれる。代替の実施形態は、マイクロコード、拡張マイクロコード又はマイクロコードアシスト、ハイパーバイザ、バイナリ変換、ハードウェア、再コンパイルなどによって、ISAを実装することができる。したがって、異なるマイクロアーキテクチャを有するプロセッサが、共通の命令セットの少なくとも一部を共有することができる。例えば、Intel(登録商標)のPentium(登録商標)4プロセッサ、Intel(登録商標)のCore (商標)プロセッサ、及びAdvanced Micro Devices,Inc.(カリフォルニア州、サニーベール)のプロセッサは、ほぼ同一バージョンのx86命令セット(より新しいバージョンに追加された、いくつかの拡張を有する)を実装するが、異なる内部設計を有する。同様に、ARM Holdings,Ltd.、MIPSなどの他のプロセッサ開発会社、あるいはこれらのライセンス先又は採用者が設計したプロセッサは、共通の命令セットの少なくとも一部を共有することができるが、異なるプロセッサ設計を含むこともできる。例えば、ISAの同じレジスタアーキテクチャは、異なる方法で、異なるマイクロアーキテクチャに、新たな技術又はよく知られた技術を用いて実装することができ、専用物理レジスタ、レジスタリネーミングメカニズムを用いる(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)及びリタイアメントレジスタファイルを用いる)1つ又は複数の動的に割り当てられる物理レジスタを含む。1つの実施形態では、レジスタは1つ又は複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含んでよく、それらは、ソフトウェアプログラマがアドレス指定可能であってもなくてもよい。
1つの実施形態では、命令は1つ又は複数の命令フォーマットを含むことができる。1つの実施形態では、命令フォーマットは、とりわけ、行われるべき演算、及びその演算が行われるオペランドを指定する様々なフィールド(ビットの数、ビットの位置など)を示すことができる。いくつかの命令フォーマットは、命令テンプレート(又はサブフォーマット)によって、さらに分割され定義されることもある。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく、及び/又は異なるように解釈された所与のフィールドを有するよう定義されてもよい。1つの実施形態では、命令は命令フォーマットを用いて(及び、定義されている場合は、命令フォーマットの命令テンプレートのうち所与の1つで)表され、演算及びその演算が処理するオペランドを指定又は示す。
科学アプリケーション、財務アプリケーション、自動ベクトル化された汎用アプリケーション、RMS(認識、マイニング、及び合成)アプリケーション、並びに視覚アプリケーション及びマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、映像圧縮/解凍、音声認識アルゴリズム、オーディオ操作)は、同じ演算が多数のデータ項目に対して行われることを必要とし得る。1つの実施形態では、単一命令複数データ(SIMD)は、複数のデータ要素に対して1つの演算をプロセッサに行わせる命令のタイプを指す。SIMD技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割できるプロセッサに用いることができ、各データ要素は別個の値を表す。例えば、1つの実施形態では、64ビットレジスタ内のビットは、4つの別個の16ビットデータ要素を含むソースオペランドとして編成することができ、各データ要素は別個の16ビット値を表す。このタイプのデータは、「パックド」データタイプ、又は「ベクトル」データタイプと呼ばれることもあり、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。1つの実施形態では、パックドデータ項目又はベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であってよく、パックドデータオペランド又はベクトルオペランドは、SIMD命令(あるいは、「パックドデータ命令」又は「ベクトル命令」)のソースオペランド又はデスティネーションオペランドであってよい。1つの実施形態では、SIMD命令は、2つのソースベクトルオペランドに対して行われる単一のベクトル演算を指定し、同じ又は異なるサイズのデスティネーションベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を、同じ又は異なる数のデータ要素を用いて、同じ又は異なるデータ要素の順序で生成する。
x86命令、MMX(商標)命令、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令、及びSSE4.2命令を含む命令セットを有するIntel(登録商標)のCore (商標)プロセッサ、ベクトル浮動小数点(VFP)命令及び/又はNEON命令を含む命令セットを有するARMのCortex(登録商標)ファミリのプロセッサなどのARMプロセッサ、並びに中国科学院の計算技術研究所(ICT)が開発した龍芯(Loongson)ファミリのプロセッサなどMIPSプロセッサにより採用された技術などのSIMD技術は、アプリケーション性能において著しい向上を可能にした(Core (商標)及びMMX(商標)は、Intel(登録商標)Corporation(カリフォルニア州、サンタクララ)の登録商標又は商標である)。
1つの実施形態では、デスティネーション及びソースレジスタ/データは、対応するデータ又は演算のソース及びデスティネーションを表す一般名称である。いくつかの実施形態では、これらは、レジスタ、メモリ、又は示されたもの以外の他の名称又は機能を有する他のストレージ領域により実装されてもよい。例えば、1つの実施形態では、「DEST1」が一時的なストレージレジスタ又は他のストレージ領域であってよく、「SRC1」及び「SRC2」が、第1及び第2のソースストレージレジスタ又は他のストレージ領域であってよい、などである。他の実施形態では、SRCストレージ領域及びDESTストレージ領域のうち2つ又はそれより多くが、同じストレージ領域内(例えば、SIMDレジスタ)の異なるデータストレージエレメントに対応してよい。1つの実施形態では、複数のソースレジスタのうち1つが、例えば、第1のソースデータ及び第2のソースデータに対して行われた演算結果をデスティネーションレジスタとして機能する2つのソースレジスタのうちの1つに書き戻すことによって、デスティネーションレジスタとしても動作してよい。
図1Aは、本発明の1つの実施形態による命令を実行する実行ユニットを含むプロセッサと共に形成された、例示的なコンピュータシステムのブロック図である。システム100は、本明細書で説明される実施形態などにおいて、本発明に従って、プロセスデータ用のアルゴリズムを実行するロジックを含んだ実行ユニットを利用するプロセッサ102などのコンポーネントを含む。システム100は、Intel Corporation(カリフォルニア、サンタクララ)から入手可能なPentium(登録商標)III、Pentium(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)、及び/又はStrongARM(商標)マイクロプロセッサに基づく処理システムを代表するものであるが、他のシステム(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックスなどを含む)が用いられてもよい。1つの実施形態では、例示のシステム100は、Microsoft Corporation(ワシントン州、レドモンド)から入手可能なWindows(登録商標)版のオペレーティングシステムを実行することができるが、他のオペレーティングシステム(例えば、UNIX(登録商標)、Linux(登録商標))、組込みソフトウェア、及び/又はグラフィカルユーザインタフェースが用いられてもよい。したがって、本発明の実施形態は、ハードウェア回路、及びソフトウェアのいかなる具体的な組み合わせにも限定されてはいない。
実施形態はコンピュータシステムに限定されてはいない。本発明の代替の実施形態は、ハンドヘルドデバイス及び組込みアプリケーションなどの他のデバイスにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、及びハンドヘルドPCが含まれる。組込みアプリケーションには、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、又は少なくとも1つの実施形態に従って1つ又は複数の命令を実行することができる任意の他のシステムが含まれ得る。
図1Aは、本発明の1つの実施形態による少なくとも1つの命令を実行するアルゴリズムを実行する1つ又は複数の実行ユニット108を含んだプロセッサ102と共に形成される、コンピュータシステム100のブロック図である。1つの実施形態は、単一プロセッサのデスクトップ又はサーバシステムとの関連で説明することができるが、代替の実施形態は、マルチプロセッサシステムに含まれ得る。システム100は、「ハブ」システムアーキテクチャの例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、例えば、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は、デジタル信号プロセッサなどのその他のプロセッサデバイスであり得る。プロセッサ102は、プロセッサ102とシステム100内の他のコンポーネントとの間でデータ信号を送信することができるプロセッサバス110に結合される。システム100の諸要素は、当技術分野に詳しい者によく知られた従来の機能を実行する。
1つの実施形態では、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。あるいは、別の実施形態では、キャッシュメモリはプロセッサ102の外部に存在することもできる。他の実施形態は、特定の実装及び必要に応じて、内部キャッシュ及び外部キャッシュの両方の組み合わせを含むこともできる。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに、異なるタイプのデータを格納することができる。
整数及び浮動小数点演算を実行するロジックを含む実行ユニット108も、プロセッサ102内に存在する。プロセッサ102は、特定のマクロ命令用のマイクロコードを格納するマイクロコード(ucode)ROMも含む。1つの実施形態では、実行ユニット108はパックド命令セット109を処理するロジックを含む。命令を実行する関連回路と共に、パックド命令セット109を汎用プロセッサ102の命令セットに含めることで、多くのマルチメディアアプリケーションにより用いられる演算は、汎用プロセッサ102内のパックドデータを用いて実行されてよい。したがって、多くのマルチメディアアプリケーションは、パックドデータに演算を実行するために、プロセッサのデータバスの全幅を用いることで、より効率的に加速され実行され得る。これにより、1つ又は複数の演算を一度に1つのデータ要素に対して実行するために、より小さいユニットのデータをプロセッサのデータバス全体にわたって転送する必要性を排除することができる。
実行ユニット108の代替の実施形態も、マイクロコントローラ、組込みプロセッサ、グラフィックスデバイス、DSP、及び他のタイプのロジック回路に用いられ得る。システム100はメモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、又は他のメモリデバイスであり得る。メモリ120は、プロセッサ102が実行できるデータ信号で表される命令及び/又はデータを格納することができる。
システムロジックチップ116が、プロセッサバス110及びメモリ120に結合される。例示された実施形態のシステムロジックチップ116はメモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信することができる。MCH116は、命令及びデータのストレージ用に、並びにグラフィックスコマンド、データ、及びテクスチャのストレージ用に、高帯域幅のメモリパス118をメモリ120に提供する。MCH116は、プロセッサ102、メモリ120、及びシステム100内の他のコンポーネントの間でデータ信号を送信し、プロセッサバス110、メモリ120、及びシステムI/O122の間でデータ信号を橋渡しする。いくつかの実施形態では、システムロジックチップ116は、グラフィックスコントローラ112に結合するためのグラフィックスポートを提供することができる。MCH116は、メモリインタフェース118を通じてメモリ120に結合される。グラフィックスカード112は、加速式グラフィックスポート(AGP)相互接続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)などのシリアル拡張ポート、並びにネットワークコントローラ134がある。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、又は他の大容量ストレージデバイスを含むことができる。
システムの別の実施形態では、1つの実施形態による命令が、システムオンチップと共に用いられ得る。システムオンチップの1つの実施形態は、プロセッサ及びメモリを備える。そのような1つのシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同じダイ上に位置することができる。さらに、メモリコントローラ又はグラフィックスコントローラなどの他のロジックブロックも、システムオンチップ上に位置することができる。
図1Bは、本発明の1つの実施形態の原理を実装するデータ処理システム140を示す。本明細書に説明される実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に用いられ得ることが、当業者には容易に理解されよう。
コンピュータシステム140は、1つの実施形態による少なくとも1つの命令を実行可能な処理コア159を備える。1つの実施形態では、処理コア159は、限定されないが、CISC、RISC、又はVLIWタイプのアーキテクチャを含むあらゆるタイプのアーキテクチャの処理ユニットを表す。処理コア159はまた、1つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、上記製造を容易にするのに適している場合がある。
処理コア159は、実行ユニット142、レジスタファイル145のセット、及びデコーダ144を含む。処理コア159は、本発明の実施形態を理解するのに必須ではない追加の回路(不図示)も含む。実行ユニット142は、処理コア159が受信した命令を実行するのに用いられる。通常のプロセッサ命令を実行することに加えて、実行ユニット142は、パックドデータフォーマットで演算を実行するために、パックド命令セット143内の命令を実行することができる。パックド命令セット143は、本発明の実施形態を実行するための命令、及び他のパックド命令を含む。実行ユニット142は、内部バスでレジスタファイル145に結合される。レジスタファイル145は、データを含む情報を格納するための、処理コア159上のストレージ領域を表す。前述したように、パックドデータの格納に用いられるストレージ領域は、不可欠ではないことが理解される。実行ユニット142はデコーダ144に結合される。デコーダ144は、処理コア159が受信した命令を、制御信号及び/又はマイクロコードエントリポイントにデコードするのに用いられる。これらの制御信号及び/又はマイクロコードエントリポイントに応答して、実行ユニット142は適切な演算を実行する。1つの実施形態では、デコーダは命令のオペコードを解釈するのに用いられ、それにより、命令内に示された対応するデータに対してどの演算が行われるべきかが示されることになる。
処理コア159は、様々な他のシステムデバイスと通信するためにバス141に結合され、これらのシステムデバイスには、限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)制御146、スタティックランダムアクセスメモリ(SRAM)制御147、バーストフラッシュメモリインタフェース148、パーソナルコンピュータメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カード制御149、液晶ディスプレイ(LCD)制御150、ダイレクトメモリアクセス(DMA)コントローラ151、及び代替のバスマスタインタフェース152が含まれてよい。1つの実施形態では、データ処理システム140は、I/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154も備えることができる。そのようなI/Oデバイスは、限定されないが、例えば、汎用非同期送受信機(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、及びI/O拡張インタフェース158を含むことができる。
データ処理システム140の1つの実施形態は、モバイル通信、ネットワーク通信、及び/又は無線通信、並びにテキスト文字列比較演算を含むSIMD演算を実行可能な処理コア159を提供する。処理コア159は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージングアルゴリズム、及び通信アルゴリズムを用いてプログラムされてよく、これらのアルゴリズムには、ウォルシュ・アダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、及びこれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定又はビデオデコード動き補償などの圧縮/解凍技術、並びにパルス符号変調(PCM)などの変調/復調(MODEM)機能が含まれる。
図1Cは、アトミックな範囲演算を提供する命令を実行することが可能な、データ処理システムの別の代替の実施形態を示す。1つの代替の実施形態において、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、及び入出力システム168を含むことができる。入出力システム168はオプションとして、無線インタフェース169に結合されてよい。SIMDコプロセッサ161は、1つの実施形態による命令を含むオペレーションを実行可能である。処理コア170は、1つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、処理コア170を含むデータ処理システム160の全て又は一部の製造を容易にするのに適している場合がある。
1つの実施形態では、SIMDコプロセッサ161は、実行ユニット162及びレジスタファイルのセット164を含む。メインプロセッサ166の1つの実施形態は、実行ユニット162が実行するための1つの実施形態による命令を含む命令セット163の命令を認識するデコーダ165を含む。代替の実施形態では、SIMDコプロセッサ161は、命令セット163の命令をデコードするデコーダ165Bの少なくとも一部も含む。処理コア170は、本発明の実施形態を理解するのに必須ではない追加の回路(不図示)も含む。
演算の際に、メインプロセッサ166は、キャッシュメモリ167及び入出力システム168とのやり取りを含む一般的なタイプのデータ処理操作を制御する一連のデータ処理命令を実行する。SIMDコプロセッサ命令は、一連のデータ処理命令内に組み込まれている。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を、付属のSIMDコプロセッサ161が実行すべきタイプのものであると認識する。したがって、メインプロセッサ166は、これらのSIMDコプロセッサ命令(又は、SIMDコプロセッサ命令を表す制御信号)をコプロセッサバス171上に発行し、そこからSIMDコプロセッサ命令が任意の付属のSIMDコプロセッサにより受信される。この場合、SIMDコプロセッサ161は、SIMDコプロセッサ161を対象とした、あらゆる受信済みのSIMDコプロセッサ命令を受け付けて実行する。
データは、SIMDコプロセッサ命令による処理のために、無線インタフェース169を介して受信されてよい。1つの例では、音声通信がデジタル信号の形態で受信されてよく、デジタル信号は、音声通信を表すデジタルオーディオサンプルを再生成するために、SIMDコプロセッサ命令により処理されてよい。別の例では、圧縮されたオーディオ及び/又はビデオが、デジタルビットストリームの形態で受信されてよく、デジタルビットストリームは、オーディオサンプル及び/又は動画フレームを再生成するために、SIMDコプロセッサ命令により処理されてよい。処理コア170の1つの実施形態では、メインプロセッサ166及びSIMDコプロセッサ161は、実行ユニット162、レジスタファイル164のセット、1つの実施形態による命令を含む命令セット163の命令を認識するデコーダ165を含む単一の処理コア170に統合される。
図2は、本発明の1つの実施形態による命令を実行するロジック回路を含むプロセッサ200に関するマイクロアーキテクチャのブロック図である。いくつかの実施形態では、1つの実施形態による命令が、バイト、ワード、ダブルワード、クワッドワードなどのサイズ、並びに単精度及び倍精度の整数及び浮動小数点データタイプなどのデータタイプを有するデータ要素を処理するために実装され得る。1つの実施形態では、インオーダフロントエンド201は、実行される命令をフェッチして、プロセッサパイプラインにおいて後で用いられるよう当該命令を準備するプロセッサ200の一部である。フロントエンド201は、いくつかのユニットを含むことができる。1つの実施形態では、命令プリフェッチャ226は、メモリから命令をフェッチし、当該命令を命令デコーダ228に提供し、次に命令デコーダは当該命令をデコード又は解釈する。例えば、1つの実施形態では、デコーダは、受信した命令を機械が実行できる「マイクロ命令」又は「マイクロオペレーション」と呼ばれる(マイクロop又はuopとも呼ばれる)1つ又は複数のオペレーションにデコードする。他の実施形態では、デコーダは、1つの実施形態によるオペレーションを実行するために、命令をマイクロアーキテクチャにより用いられるオペコード並びに対応するデータ及び制御フィールドにパースする。1つの実施形態では、トレースキャッシュ230はデコードされたuopを取得し、実行のためにそれらをプログラム順の並びに整理するか、uopキュー234においてトレースする。トレースキャッシュ230が複雑な命令に遭遇すると、マイクロコードROM232は、オペレーションを完了するのに必要なuopを提供する。
いくつかの命令は単一のマイクロopに変換され、他の命令は全オペレーションを完了するのにいくつかのマイクロopを必要とする。1つの実施形態では、命令を完了するのに4つより多くのマイクロopを必要とする場合、デコーダ228はマイクロコードROM232にアクセスして命令を実行する。1つの実施形態では、命令は、命令デコーダ228で処理するために、少数のマイクロopにデコードされ得る。別の実施形態では、オペレーションを実現するのに多数のマイクロopが必要となる場合、命令はマイクロコードROM232の中に格納され得る。トレースキャッシュ230とは、1つの実施形態による1つ又は複数の命令を完了するマイクロコードシーケンスをマイクロコードROM232から読み出すための正しいマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ(PLA)を指す。マイクロコードROM232が、命令用のマイクロopを順番に並べ終えた後に、機械のフロントエンド201は、トレースキャッシュ230からマイクロopをフェッチすることを再開する。
アウトオブオーダ実行エンジン203は、命令が実行のために準備される場所である。アウトオブオーダ実行ロジックは複数のバッファを有し、実行のために命令がパイプラインを下り、スケジューリングされるときに性能を最適化するよう、命令のフローを滑らかにし並べ替える。アロケータロジックは、各uopが実行するために必要な機械バッファ及びリソースを割り当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリ上にリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ202、低速/汎用浮動小数点スケジューラ204、及び簡易浮動小数点スケジューラ206といった命令スケジューラの前段にある、1つはメモリ演算用、もう1つは非メモリ演算用となる2つのuopキューの一方に、uopごとのエントリを割り当てる。uopスケジューラ202、204、206は、これらのスケジューラが依存する入力レジスタのオペランドソースの準備状況と、uopがそのオペレーションを完了するのに必要な実行リソースの可用性とに基づいて、uopがいつ実行の準備ができるかを決定する。1つの実施形態の高速スケジューラ202は、メインクロックサイクルの各半周期においてスケジューリングすることができ、その他のスケジューラは、メインプロセッサのクロックサイクルごとに一度だけスケジューリングすることができる。スケジューラは、実行のためにuopをスケジューリングするよう、ディスパッチポートを調整する。
レジスタファイル208、210は、スケジューラ202、204、206と、実行ブロック211内の実行ユニット212、214、216、218、220、222、224との間に位置する。別個のレジスタファイル208、210がそれぞれ、整数演算用及び浮動小数点演算用に存在する。1つの実施形態の各レジスタファイル208、210には、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、新たに依存するuopにバイパス又は転送することができるバイパスネットワークも含まれる。整数レジスタファイル208及び浮動小数点レジスタファイル210は、他方とデータを通信することもできる。1つの実施形態では、整数レジスタファイル208は2つの別個のレジスタファイルに分割され、一方のレジスタファイルはデータの下位32ビット用、もう一方のレジスタファイルがデータの上位32ビット用である。1つの実施形態の浮動小数点レジスタファイル210が128ビット幅のエントリを有するのは、通常、浮動小数点命令が64ビットから128ビットまでの幅のオペランドを有するからである。
実行ブロック211は、実行ユニット212、214、216、218、220、222、224を含み、ここで命令が実際に実行される。この部分には、マイクロ命令が実行に必要とする、整数データオペランド値及び浮動小数点データオペランド値を格納するレジスタファイル208、210が含まれる。1つの実施形態のプロセッサ200は複数の実行ユニット、すなわち、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224から構成される。1つの実施形態では、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算、及びSSE演算、又は他の演算を実行する。1つの実施形態の浮動小数点ALU222は、除算マイクロop、平方根マイクロop、及び剰余マイクロopを実行する64ビット×64ビットの浮動小数点除算器を含む。本発明の実施形態では、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。1つの実施形態では、ALU演算は、高速ALU実行ユニット216、218を使う。1つの実施形態の高速ALU216、218は、クロックサイクル半分の実効レイテンシで高速演算を実行することができる。1つの実施形態では、大部分の複雑な整数演算は低速ALU220を使うが、それは、低速ALU220が、乗算器、シフト、フラグロジック、及び分岐処理など、長レイテンシタイプの演算用の整数実行ハードウェアを含むからである。メモリロード/ストア演算は、AGU212、214により実行される。1つの実施形態では、整数ALU216、218、220は、64ビットデータオペランドで整数演算を実行するという状況で説明される。代替の実施形態では、ALU216、218、220は、16ビット、32ビット、128ビット、256ビットなどを含む様々なデータビットをサポートするよう実装され得る。同様に、浮動小数点ユニット222、224は、様々な幅のビットを有する様々なオペランドをサポートするよう実装され得る。1つの実施形態では、浮動小数点ユニット222、224は、128ビット幅のパックドデータオペランドをSIMD命令及びマルチメディア命令と共に処理し得る。
1つの実施形態では、uopスケジューラ202、204、206は、親ロードが実行を終了する前に、依存演算をディスパッチする。uopは、プロセッサ200において投機的にスケジューリングされ実行されるので、プロセッサ200はメモリミスを処理するロジックも含む。データロードがデータキャッシュで失敗した場合、一時的に不正確なデータのままスケジューラを離れたインフライトの依存演算がパイプラインに存在する可能性がある。やり直しメカニズムが、不正確なデータを用いる命令を追跡して再実行する。依存演算だけがやり直される必要があり、独立演算は完了することが可能である。
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサのストレージ位置を指すことができる。換言すれば、レジスタは、(プログラマの視点で)プロセッサの外側から使用可能なレジスタであってよい。しかし、実施形態のレジスタは、特定のタイプの回路に意味が限定されるべきではない。むしろ、実施形態のレジスタはデータを格納し提供すること、及び本明細書で説明される機能を実行することが可能である。本明細書で説明されるレジスタは、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどの任意の数の異なる技術を用いて、プロセッサ内の回路により実装され得る。1つの実施形態では、整数レジスタが32ビット整数データを格納する。1つの実施形態のレジスタファイルはまた、パックドデータ用の8つのマルチメディアSIMDレジスタを含む。以下の議論では、レジスタは、Intel Corporation(カリフォルニア州、サンタクララ)のMMX技術を用いて可能となるマイクロプロセッサの64ビット幅のMMX(商標)レジスタ(いくつかの例では、「mm」レジスタとも呼ばれる)など、パックドデータを保持するよう設計されたデータレジスタであると理解される。これらのMMXレジスタは、整数及び浮動小数点の両方の形態で利用可能であり、SIMD命令及びSSE命令に付随するパックドデータ要素を用いて動作し得る。同様に、SSE2、SSE3、SSE4、又はそれ以降(「SSEx」と総称して呼ばれる)の技術に関する128ビット幅のXMMレジスタも、そのようなパックドデータオペランドを保持するのに用いられ得る。1つの実施形態では、パックドデータ及び整数データを格納するときに、レジスタは、その2つのデータタイプを区別する必要はない。1つの実施形態では、整数及び浮動小数点は、同じレジスタファイルに含まれているか、異なるレジスタファイルに含まれているかのいずれかである。さらに、1つの実施形態では、浮動小数点データ及び整数データは、異なるレジスタに格納されても、同じレジスタに格納されてもよい。
以下の図の例では、複数のデータオペランドが説明される。図3Aは、本発明の1つの実施形態によるマルチメディアレジスタにおいて、様々なパックドデータタイプの表現を示す。図3Aは、128ビット幅オペランド用のパックドバイト310、パックドワード320、及びパックドダブルワード(dword)330のデータタイプを示す。この例のパックドバイトフォーマット310は128ビット長であり、16個のパックドバイトデータ要素を含む。バイトは、ここでは8ビットのデータと定義される。バイトデータ要素ごとの情報は、バイト0ではビット7〜ビット0に、バイト1ではビット15〜ビット8に、バイト2ではビット23〜ビット16に、そして最後にバイト15ではビット120〜ビット127に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加する。また、16個のデータ要素にアクセスして、今では、1つの演算が16個のデータ要素に対して並列に実行され得る。
一般に、データ要素とは、単一のレジスタ又はメモリ位置に同じ長さの他のデータ要素と共に格納される個々のデータである。SSEx技術に関するパックドデータシーケンスでは、XMMレジスタに格納されるデータ要素の数は、128ビットを個々のデータ要素のビット長で除算したものである。同様に、MMX及びSSE技術に関するパックドデータシーケンスでは、MMXレジスタに格納されるデータ要素の数は、64ビットを個々のデータ要素のビット長で除算したものである。図3Aに示されるデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅、256ビット幅、512ビット幅、又は他のサイズのオペランドでも動作し得る。この例のパックドワードフォーマット320は128ビット長であり、8個のパックドワードデータ要素を含む。各パックドワードは16ビットの情報を含む。図3Aのパックドダブルワードフォーマット330は128ビット長であり、4個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は32ビットの情報を含む。パックドクワッドワードは128ビット長であり、2個のパックドクワッドワードデータ要素を含む。
図3Bは、代替のレジスタ内のデータストレージフォーマットを示す。各パックドデータは、1つより多くの独立データ要素を含み得る。3つのパックドデータフォーマットである、パックドハーフ341、パックドシングル342、及びパックドダブル343が示される。パックドハーフ341、パックドシングル342、及びパックドダブル343の1つの実施形態には、固定小数点のデータ要素が含まれる。代替の実施形態では、パックドハーフ341、パックドシングル342、及びパックドダブル343のうち1つ又は複数は、浮動小数点のデータ要素を含むことができる。パックドハーフ341の1つの代替の実施形態は128ビット長であり、8個の16ビットデータ要素を含む。パックドシングル342の1つの実施形態は128ビット長であり、4個の32ビットデータ要素を含む。パックドダブル343の1つの実施形態は128ビット長であり、2個の64ビットデータ要素を含む。そのようなパックドデータフォーマットはさらに、他のレジスタ長、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビット、又はそれより多くに拡張されてもよいことが理解されよう。
図3Cは、本発明の1つの実施形態によるマルチメディアレジスタにおいて、様々な符号付き及び符号なしのパックドデータタイプの表現を示す。符号なしパックドバイト表現344が、SIMDレジスタにおける符号なしパックドバイトのストレージを示す。バイトデータ要素ごとの情報は、バイト0ではビット7〜ビット0に、バイト1ではビット15〜ビット8に、バイト2ではビット23〜ビット16になど、そして最後にバイト15ではビット120〜ビット127に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加し得る。また、16個のデータ要素にアクセスして、今では、1つの演算が16個のデータ要素に対して並列方式で実行され得る。符号付きパックドバイト表現345が、符号付きパックドバイトのストレージを示す。各バイトデータ要素の8番目のビットは符号標識であることに留意されたい。符号なしパックドワード表現346は、ワード7〜ワード0がどのようにSIMDレジスタに格納されるかを示す。符号付きパックドワード表現347は、符号なしパックドワードレジスタ内表現346に類似している。各ワードデータ要素の16番目のビットは符号標識であることに留意されたい。符号なしパックドダブルワード表現348は、ダブルワードデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードレジスタ内表現348に類似している。必要な符号ビットは、各ダブルワードデータ要素の32番目のビットであることに留意されたい。
図3Dは、32ビット又はそれより多くのビットを有するオペレーションエンコーディング(オペコード)フォーマット360と、レジスタ/メモリオペランドのアドレス指定モードに関する1つの実施形態を表現したものであり、これらは、Intel Corporation(カリフォルニア州、サンタクララ)のワールドワイドウェブ(www)intel.com/products/processor/manuals/から入手可能な、「Intel(登録商標)64及びIA−32 Intel(登録商標)アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル(2A及び2Bの合体版):命令セットリファレンスA−Z」に説明されるオペコードフォーマットのタイプに対応する。1つの実施形態では、命令はフィールド361及び362のうち1つ又は複数によってエンコードされてよい。1つの命令当たり2つまでのオペランド位置が識別されてよく、それらには2つまでのソースオペランド識別子364及び365が含まれる。1つの実施形態では、デスティネーションオペランド識別子366はソースオペランド識別子364と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子366はソースオペランド識別子365と同じであるが、他の実施形態ではこれらは異なる。1つの実施形態では、ソースオペランド識別子364及び365により識別されるソースオペランドのうち1つが、命令の結果で上書きされるが、他の実施形態では、識別子364はソースレジスタ要素に対応し、識別子365はデスティネーションレジスタ要素に対応する。1つの実施形態では、オペランド識別子364及び365は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。
図3Eは、別の代替のオペレーションエンコーディング(オペコード)フォーマット370の表現であり、40ビット又はそれより多くのビットを有する。オペコードフォーマット370はオペコードフォーマット360に対応し、オプションのプリフィックスバイト378を有する。1つの実施形態による命令は、フィールド378、371、及び372のうち1つ又は複数によってエンコードされてよい。1つの命令当たり2つまでのオペランド位置が、ソースオペランド識別子374及び375、並びにプリフィックスバイト378によって識別されてよい。1つの実施形態では、プリフィックスバイト378は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。1つの実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子374と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子375と同じであるが、他の実施形態ではこれらは異なる。1つの実施形態では、命令は、オペランド識別子374及び375により識別されるオペランドのうち1つ又は複数を処理し、オペランド識別子374及び375により識別される1つ又は複数のオペランドは命令の結果によって上書きされるが、他の実施形態では、識別子374及び375により識別されたオペランドは、別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット360及び370は、MODフィールド363及び373、並びにオプションのスケール・インデックス・ベース・バイト及び変位バイトにより部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
次に図3Fを参照すると、いくつかの代替の実施形態では、64ビット(又は128ビット、又は256ビット、又は512ビット、又はそれより多くのビット)の単一命令複数データ(SIMD)算術演算が、コプロセッサデータ処理(CDP)命令によって実行されてよい。オペレーションエンコーディング(オペコード)フォーマット380は、CDPオペコードフィールド382及び389を有するそのようなCDP命令の1つを表す。代替の実施形態では、そのタイプのCDP命令演算は、フィールド383、384、387、及び388のうち1つ又は複数によってエンコードされてよい。1つの命令当たり3つまでのオペランド位置が識別されてよく、それらには2つまでのソースオペランド識別子385及び390、並びに1つのデスティネーションオペランド識別子386が含まれる。コプロセッサの1つの実施形態は、8ビット値、16ビット値、32ビット値、及び64ビット値を処理することができる。1つの実施形態では、命令は整数データ要素に対して実行される。いくつかの実施形態では、命令は、条件フィールド381を用いて、条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド383によりエンコードされてよい。いくつかの実施形態では、ゼロ(Z)、ネガティブ(N)、キャリー(C)、及びオーバーフロー(V)の検出が、SIMDフィールド上で行われ得る。いくつかの命令では、そのタイプのサチュレーションは、フィールド384によりエンコードされてよい。
次に参照する図3Gは、別の実施形態によるアトミックな範囲演算を提供する、別の代替のオペレーションエンコーディング(オペコード)フォーマット397の表現であり、Intel Corp.(カリフォルニア州、サンタクララ)のワールドワイドウェブ(www)intel.com/products/processor/manuals/から入手可能な、「Intel(登録商標)アドバンスト・ベクトル・エクステンション・プログラミング・リファレンス」に説明されるオペコードフォーマットのタイプに対応する。
最初のx86命令セットは、様々なフォーマットのアドレスシラブル、及び第1の「オペコード」バイトから存在が知られていた追加のバイトに含まれる即値オペランドを有する、1バイトのオペコードを規定した。さらに、特定のバイト値が存在し、そのバイト値はオペコードに対する修飾子として確保された(修飾子は、命令の前に配置する必要があったので、プリフィックスと呼ばれる)。元のパレットの256個のオペコードバイト(これらの特殊なプリフィックス値を含む)が使い尽くされた場合、新たなセットの256個のオペコードに逃れる手段として、単一のバイトが充てられた。ベクトル命令(例えば、SIMD)が追加されたとき、より多くのオペコードの必要性が生まれ、プリフィックスを用いて拡張した場合でさえ、「2バイト」のオペコードマップも不十分であった。このため、2バイトに加えてオプションのプリフィックスを識別子として用いる追加のマップに、新たな命令が追加された。
さらに、64ビットモードの追加のレジスタを助けるために、追加のプリフィックス(「REX」と呼ばれる)が、プリフィックスとオペコード(及び、オペコードの決定に必要なあらゆるエスケープバイト)との間に用いられてもよい。1つの実施形態では、REXは、64ビットモードの追加のレジスタを用いることを示す4つの「ペイロード」ビットを有することができる。他の実施形態では、「ペイロード」ビットは、4つより少ない、又は4つより多いビットを有してもよい。少なくとも1つの命令セットの一般的なフォーマット(概ね、フォーマット360及び/又はフォーマット370に対応する)が、以下のフォーマットによって一般的に示される。つまり、[prefixes] [rex] escape [escape2] opcode modrm(など)である。
オペコードフォーマット397はオペコードフォーマット370に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わるオプションのVEXプリフィックスバイト391(1つの実施形態では、16進のC4から始まる)を有する。例えば、下記のものは、命令をエンコードする2つのフィールドを用いる実施形態を示し、これは、第2のエスケープコードが元の命令に存在する場合、又はREXフィールド内の追加のビット(例えば、XBフィールド及びWフィールド)を用いる必要がある場合に用いられてよい。下記のものが示す実施形態では、レガシのエスケープが新たなエスケープ値で表され、レガシのプリフィックスが「ペイロード」バイトの一部として十分に圧縮され、レガシのプリフィックスが再利用されて今後の拡張に利用可能であり、第2のエスケープコードは「マップ」フィールドに圧縮されて、今後のマップ又は特徴空間が利用可能であり、新たな機能が追加される(例えば、ベクトル長の拡大、追加のソースレジスタ指定子)。
1つの実施形態による命令は、フィールド391及び392のうち1つ又は複数によりエンコードされてよい。1つの命令当たり4つまでのオペランド位置が、ソースオペランド識別子374及び375と組み合わせて、またオプションのスケール・インデックス・ベース(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395と組み合わせて、フィールド391により識別されてよい。1つの実施形態では、VEXプリフィックスバイト391が、32ビット又は64ビットのソースオペランド及びデスティネーションオペランド、及び/又は、128ビット又は256ビットのSIMDレジスタ又はメモリオペランドを識別するのに用いられてよい。1つの実施形態では、オペコードフォーマット397により提供される機能は、オペコードフォーマット370と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット370及び397は、MODフィールド373、並びにオプションの(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395により部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
次に参照する図3Hは、別の実施形態によるアトミックな範囲演算を提供する、別の代替のオペレーションエンコーディング(オペコード)フォーマット398の表現である。オペコードフォーマット398は、オペコードフォーマット370及び397に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わり、追加の機能を提供する、オプションのEVEXプリフィックスバイト396(1つの実施形態では、16進の62から始まる)を有する。1つの実施形態による命令は、フィールド396及び392のうち1つ又は複数によりエンコードされてよい。1つの命令当たり4つまでのオペランド位置及び1つのマスクが、ソースオペランド識別子374及び375と組み合わせて、またオプションのスケール・インデックス・ベース(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395と組み合わせて、フィールド396により識別されてよい。1つの実施形態では、EVEXプリフィックスバイト396が、32ビット又は64ビットのソースオペランド及びデスティネーションオペランド、及び/又は、128ビット、256ビット、又は512ビットのSIMDレジスタ又はメモリオペランドを識別するのに用いられてよい。1つの実施形態では、オペコードフォーマット398により提供される機能は、オペコードフォーマット370又は397と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット398は、MODフィールド373、並びにオプションの(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395により部分的に指定される、マスクを用いた、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。少なくとも1つの命令セットの一般的なフォーマット(概ね、フォーマット360及び/又はフォーマット370に対応する)が、以下のフォーマットによって一般的に示される。つまり、evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]である。
1つの実施形態では、EVEXフォーマット398に従ってエンコードされる命令は、例えば、ユーザ設定可能なマスクレジスタ、又は追加のオペランド、あるいは128ビット、256ビット、又は512ビットのベクトルレジスタ、又は選択対象となるさらに大きいレジスタの中から選択したものなど、追加の新たな機能を用いて、アトミックな範囲演算を提供するのに用いられ得る追加の「ペイロード」ビットを有することができる。例えば、VEXフォーマット397は、マスクのない命令に用いられてよく、EVEXフォーマット398は、明確なユーザ設定可能なマスクを有する命令に用いられてよい。さらに、VEXフォーマット397は、128ビット又は256ビットのベクトルレジスタを用いる命令に用いられてよく、EVEXフォーマット398は、128ビット、256ビット、512ビット、又はより大きいビット(又はより小さいビット)のベクトルレジスタを用いる命令に用いられてよい。
アトミックな範囲演算を提供する例示的な命令又はコマンドが、以下の例によって示される。
いくつかの実施形態における上記の例示のアトミックな範囲命令では、範囲は、NEXT及びENDという一対のインデックスをメモリ内に含むことができる。いくつかの実施形態では、範囲は、一対の64ビットインデックスをメモリ内に含むことができる。いくつかの代替の実施形態では、範囲は、一対の32ビット(又は16ビット)インデックスをメモリ内に含むことができる。例示の実施形態は、アトミックにNEXTを増分する命令(例えば、INC NEXT)、アトミックにNEXTに加算する命令(例えば、ADD NEXT)、アトミックにENDを減分する命令(例えば、DEC END)、及び/又はアトミックにENDから減算する命令(例えば、SUB END)、並びに範囲をキャッシュメモリにプリフェッチする命令を含むことができる。
例えば、2つの整数であるNEXT及びENDにより、メモリに指定される範囲[NEXT,END)には、NEXTからEND−1までのインデックスが含まれる。NEXTがEND以上である場合、範囲[NEXT,END)は空である。範囲[NEXT,END)のサイズは、ENDがNEXTより大きい場合、END−NEXTに等しい。1以上のサイズを有する範囲が、アトミックにNEXTを増分する命令(例えば、INC NEXT)、又はアトミックにENDを減分する命令(例えば、DEC END)を実行するのに十分である。範囲のサイズがX以上であれば、アトミックにNEXTにXを加算する命令(例えば、ADD NEXT)、又はアトミックにENDからXを減算する命令(例えば、SUB END)を実行するのに十分である。
SPMD処理は、タスクを分割し、機能の複数のインスタンス(例えば、ベジェ曲線、ベジェサーフェス、データベース検索/更新など)を呼び出す、又は複数のプロセッサ(又は論理プロセッサ)上でループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、上記の例示のアトミックな範囲命令を用いることができることが理解されよう。これらの複数のプロセッサ(例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど)が一般的なキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期(例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信)によって、協同するSPMDプロセッサ(又は論理プロセッサ)の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
図4Aは、本発明の少なくとも1つの実施形態による、インオーダパイプライン、及びレジスタリネーミングステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図4Bは、本発明の少なくとも1つの実施形態によるプロセッサに含まれる、インオーダアーキテクチャコア、及びレジスタリネーミングロジック、アウトオブオーダ発行/実行ロジックを示すブロック図である。図4Aの実線枠はインオーダパイプラインを示し、破線枠はレジスタリネーミング、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4Bの実線枠はインオーダアーキテクチャロジックを示し、破線枠はレジスタリネーミングロジック及びアウトオブオーダ発行/実行ロジックを示す。
図4Aにおいて、プロセッサパイプライン400には、フェッチステージ402、レングスデコードステージ404、デコードステージ406、割り当てステージ408、リネーミングステージ410、スケジューリング(ディスパッチ又は発行としても知られる)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、及びコミットステージ424が含まれる。
図4Bにおいて、矢印は、2つ又はそれより多くのユニットの間の結合を示し、矢印の方向は、これらのユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を含むプロセッサコア490を示し、実行エンジンユニット450及びフロントエンドユニット430は両方ともメモリユニット470に結合される。
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、あるいはハイブリッド又は代替のコアタイプであってよい。さらに別のオプションとして、コア490は、例えば、ネットワークコア又は通信コア、圧縮エンジン、グラフィックスコアなどの専用コアであってもよい。
フロントエンドユニット430には、命令キャッシュユニット434に結合された分岐予測ユニット432が含まれ、命令キャッシュユニット434は命令トランスレーションルックアサイドバッファ(TLB)436に結合され、TLB436は命令フェッチユニット438に結合され、命令フェッチユニット438はデコードユニット440に結合される。デコードユニット又はデコーダは命令をデコードし、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができ、これらは元の命令からデコードされる、あるいは別の方法で元の命令を反映する、又は元の命令から派生する。デコーダは、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれる。命令キャッシュユニット434はさらに、メモリユニット470内のレベル2(L2)キャッシュユニット476に結合される。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合される。
実行エンジンユニット450には、リタイアメントユニット454と、1つ又は複数のスケジューラユニット456のセットとに結合された、リネーム/アロケータユニット452が含まれる。スケジューラユニット456は任意の数の異なるスケジューラを表し、リザベーションステーション、中央命令ウィンドウなどを含む。スケジューラユニット456は、物理レジスタファイルユニット458に結合される。それぞれの物理レジスタファイルユニット458は1つ又は複数の物理レジスタファイルを表し、その異なる複数の物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点などの1つ又は複数の異なるデータタイプ、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などを格納する。物理レジスタファイルユニット458は、リタイアメントユニット454が重ねられており、レジスタリネーミング及びアウトオブオーダ実行が(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及びレジスタのプールを用いるなどして)実装され得る様々な方法を示す。概して、アーキテクチャレジスタは、プロセッサの外側から、又はプログラマの視点から可視である。レジスタは、いかなる既知の特定のタイプの回路にも限定されない。本明細書で説明されるようなデータを格納し提供できる限りにおいて、様々な異なるタイプのレジスタが適している。好適なレジスタの例には、限定されないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどが含まれる。リタイアメントユニット454及び物理レジスタファイルユニット458は、実行クラスタ460に結合される。実行クラスタ460には、1つ又は複数の実行ユニット462のセット及び1つ又は複数のメモリアクセスユニット464のセットが含まれる。実行ユニット462は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行することができる。いくつかの実施形態は、特定の機能又は機能のセットに専用の多くの実行ユニットを含むことができるが、他の実施形態は、1つの実行ユニットだけ、又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット456、物理レジスタファイルユニット458、及び実行クラスタ460は、場合によっては複数であるとして示されており、それは、特定の実施形態が特定のタイプのデータ/演算用に別個のパイプラインを作成するからである(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインであり、それぞれ独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタだけがメモリアクセスユニット464を有する特定の実施形態が実装される)。別個のパイプラインが用いられる場合、これらのパイプラインのうち1つ又は複数がアウトオブオーダ発行/実行であってよく、その他がインオーダであってよいことも理解されたい。
メモリアクセスユニット464のセットはメモリユニット470に結合され、メモリユニット470には、レベル2(L2)キャッシュユニット476に結合されたデータキャッシュユニット474に結合されたデータTLBユニット472が含まれる。例示的な1つの実施形態において、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含むことができ、それぞれがメモリユニット470内のデータTLBユニット472に結合される。L2キャッシュユニット476は、1つ又は複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアのアーキテクチャは、以下のようにパイプライン400を実装することができる。1)命令フェッチ438はフェッチステージ402及びレングスデコードステージ404を実行する。2)デコードユニット440はデコードステージ406を実行する。3)リネーム/アロケータユニット452は割り当てステージ408及びリネーミングステージ410を実行する。4)スケジューラユニット456はスケジューリングステージ412を実行する。5)物理レジスタファイルユニット458及びメモリユニット470はレジスタ読み出し/メモリ読み出しステージ414を実行し、実行クラスタ460は実行ステージ416を実行する。6)メモリユニット470及び物理レジスタファイルユニット458はライトバック/メモリ書き込みステージ418を実行する。7)様々なユニットが例外処理ステージ422に関与することができる。8)リタイアメントユニット454及び物理レジスタファイルユニット458はコミットステージ424を実行する。
コア490は、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加された、いくつかの拡張を有する)、MIPS Technologies(カリフォルニア州、サニーベール)のMIPS命令セット、ARM Holdings(カリフォルニア州、サニーベール)のARM命令セット(NEONなどのオプションの追加拡張を有する))をサポートすることができる。
コアはマルチスレッディング(2つ又はそれより多くの並列セットの演算又はスレッドを実行すること)をサポートすることができ、タイムスライスマルチスレッディング、同時マルチスレッディング(この場合、物理的コアが同時にマルチスレッディングするスレッドごとに、単一の物理的コアが論理コアを提供する)、又はこれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディングテクノロジに見られるような、タイムスライスフェッチ及びデコード、並びにその後の同時マルチスレッディング)を含む様々な方法でマルチスレッディングを行うことができることを理解されたい。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。示されたプロセッサの実施形態は、別個の命令キャッシュユニット434及びデータキャッシュユニット474、並びに共有のL2キャッシュユニット476も含むが、代替の実施形態は、命令及びデータの両方に対して、例えば、レベル1(L1)内部キャッシュなどの単一の内部キャッシュ、又は複数レベルの内部キャッシュなどを有してよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコア及び/又はプロセッサの外部にあってもよい。
図5は、本発明の実施形態による、統合メモリコントローラ及び統合グラフィックスを有するシングルコアプロセッサ及びマルチコアプロセッサ500のブロック図である。図5の実線枠は、シングルコア502A、システムエージェント510、1つ又は複数のバスコントローラユニット516のセットを有するプロセッサ500を示し、オプション追加の破線枠は、複数のコア502A〜N、システムエージェントユニット510内の1つ又は複数の統合メモリコントローラユニット514のセット、統合グラフィックスロジック508を有する代替のプロセッサ500を示す。
メモリ階層には、コア内の1つ又は複数のレベルのキャッシュ、共有キャッシュユニット506のセットあるいは1つ又は複数の共有キャッシュユニット506、及び統合メモリコントローラユニット514のセットに結合された外部メモリ(不図示)が含まれる。共有キャッシュユニット506のセットには、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなどの1つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせが含まれてよい。1つの実施形態では、リングベースの相互接続ユニット512が、統合グラフィックスロジック508、共有キャッシュユニット506のセット、システムエージェントユニット510を相互接続するが、代替の実施形態は、そのようなユニットの相互接続のために任意の数のよく知られた技術を用いてよい。
いくつかの実施形態では、コア502A〜Nのうち1つ又は複数は、マルチスレッディングが可能である。システムエージェント510には、コア502A〜Nを調整し動作させるそれらのコンポーネントが含まれる。システムエージェントユニット510には、例えば、出力制御ユニット(PCU)及びディスプレイユニットが含まれてよい。PCUは、コア502A〜N及び統合グラフィックスロジック508の電力状態を管理するのに必要なロジック及びコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、外部接続された1つ又は複数のディスプレイを駆動するためのものである。
コア502A〜Nは、アーキテクチャ及び/又は命令セットに関して、同種であっても異種であってもよい。例えば、コア502A〜Nのうちいくつかはインオーダ型であってよく、他のものはアウトオブオーダ型である。別の例として、コア502A〜Nのうち2つ又はそれより多くは同じ命令セットを実行することができてよく、他のものは当該命令セットのサブセットだけ又は異なる命令セットを実行することができてよい。
プロセッサは、Core (商標)i3、i5、i7、2 Duo、及びQuad、Xeon(商標)、Itanium(商標)、XScale(商標)、又はStrongARM(商標)プロセッサなどの汎用プロセッサであってよく、これらはIntel Corporation(カリフォルニア州、サンタクララ)から入手可能である。あるいは、プロセッサは、ARM Holdings,Ltd、MIPSなどの別の会社のものであってもよい。プロセッサは、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組込みプロセッサなどの専用プロセッサであってもよい。プロセッサは、1つ又は複数のチップに実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、又はNMOSなどの多数のプロセス技術のうちいずれかを用いる1つ又は複数の基板の一部であってよく、及び/又は当該基板上に実装されてよい。
図6〜図8は、プロセッサ500を含むのに適した例示的なシステムであり、図9は、複数のコア502のうち1つ又は複数を含むことができる例示的なシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための、当技術分野で知られた他のシステム設計及びシステム構成も好適である。一般に、本明細書に開示されるプロセッサ及び/又は他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスが、概ね好適である。
ここで図6を参照すると、本発明の1つの実施形態によるシステム600のブロック図が示されている。システム600は、1つ又は複数のプロセッサ610、615を含むことができ、これらはグラフィックスメモリコントローラハブ(GMCH)620に結合される。オプション的な性質の追加のプロセッサ615は、図6では破線で示されている。
各プロセッサ610、615は、プロセッサ500の何らかのバージョンであってよい。しかし、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ610、615の中に存在する可能性は低いことに留意されたい。図6は、GMCH620がメモリ640に結合されてよいことを示し、メモリ640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)であってよい。DRAMは、少なくとも1つの実施形態では、不揮発性キャッシュと関連付けられてよい。
GMCH620はチップセットであっても、チップセットの一部であってもよい。GMCH620は、プロセッサ610、615と通信することができ、プロセッサ610、615とメモリ640との間のやり取りを制御することができる。GMCH620は、プロセッサ610、615とシステム600の他の要素との間のアクセラレーテッドバスインタフェースとして動作することもできる。少なくとも1つの実施形態では、GMCH620は、フロントサイドバス(FSB)695などのマルチドロップバスを介して、プロセッサ610、615と通信する。
さらに、GMCH620はディスプレイ645(フラットパネルディスプレイなど)に結合される。GMCH620は、統合グラフィックスアクセラレータを含むことができる。GMCH620はさらに、入力/出力(I/O)コントローラハブ(ICH)650に結合され、ICH650は、様々な周辺デバイスをシステム600に結合するのに用いられてよい。例えば、図6の実施形態には、外部グラフィックスデバイス660が示されており、これは、別の周辺デバイス670と共にICH650に結合された別個のグラフィックスデバイスであってよい。
あるいは、追加のプロセッサ又は異なるプロセッサもシステム600に存在してよい。例えば、追加のプロセッサ615には、プロセッサ610と同じ追加のプロセッサ、プロセッサ610に対して異種又は非対称の追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータ、又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又はその他のプロセッサが含まれてよい。物理リソース610と615との間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱特性、電力消費特性などを含む様々な価値基準に関して、様々な差異が存在し得る。これらの差異は、プロセッサ610と615との間の非対称性及び異種性として、効果的に現れ得る。少なくとも1つの実施形態では、様々なプロセッサ610、615は同じダイパッケージの中に存在することができる。
ここで図7を参照すると、本発明のある実施形態による第2のシステム700のブロック図が示されている。図7に示されるように、マルチプロセッサシステム700はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して結合された第1のプロセッサ770及び第2のプロセッサ780を含む。プロセッサ770及び780のそれぞれは、プロセッサ610及び615のうち1つ又は複数と同じように、プロセッサ500の何らかのバージョンであってよい。
2つのプロセッサ770、780だけで示されているが、本発明の範囲はそのように限定されてはいないことを理解されたい。他の実施形態では、1つ又は複数の追加のプロセッサが所与のプロセッサ内に存在することができる。
プロセッサ770及び780はそれぞれ、統合メモリコントローラユニット772及び782を含んで示されている。プロセッサ770は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース776及び778も含み、同様に第2のプロセッサ780はP−Pインタフェース786及び788を含む。プロセッサ770、780は、ポイントツーポイント(P−P)インタフェース750を介し、P−Pインタフェース回路778、788を用いて、情報を交換することができる。図7に示されるように、IMC772及び782はプロセッサをそれぞれのメモリ、すなわちメモリ732及びメモリ734に結合し、これらのメモリはそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ770、780はそれぞれ、個々のP−Pインタフェース752、754を介し、ポイントツーポイントインタフェース回路776、794、786、798を用いて、チップセット790と情報を交換することができる。チップセット790は、高性能グラフィックスインタフェース739を介し、高性能グラフィックス回路738と情報を交換することもできる。
共有キャッシュ(不図示)がどちらかのプロセッサに含まれても、両方のプロセッサの外側にあってもよいが、P−P相互接続を介してプロセッサに接続されており、その結果、プロセッサが低電力モードに置かれた場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
チップセット790は、インタフェース796を介して第1のバス716に結合されてよい。1つの実施形態では、第1のバス716は、ペリフェラルコンポーネントインターコネクト(PCI)バス、あるいはPCIエクスプレスバス又は別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
図7に示されるように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に結合するバスブリッジ718と共に、第1のバス716に結合されてよい。1つの実施形態では、第2のバス720はローピンカウント(LPC)バスであってよい。1つの実施形態では、様々なデバイスが第2のバス720に結合されてよく、それらのデバイスには、例えば、キーボード及び/又はマウス722、通信デバイス727、並びに命令/コード及びデータ730を含むことができるディスクドライブ又は他の大容量ストレージデバイスなどのストレージユニット728が含まれる。さらに、オーディオI/O724が第2のバス720に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、システムは、図7のポイントツーポイントアーキテクチャの代わりに、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
ここで図8を参照すると、本発明のある実施形態による第3のシステム800のブロック図が示されている。図7及び図8の同様の要素は同様の参照符号を有しており、図7の特定の態様が図8から省略されているのは、図8の他の態様を不明瞭にしないためである。
図8は、プロセッサ870、880がそれぞれ、統合メモリ及びI/O制御ロジック(「CL」)872及び882を含み得ることを示す。少なくとも1つの実施形態では、CL872、882は、図5及び図7に関して上述されたような統合メモリコントローラユニットを含むことができる。さらに、CL872、882はI/O制御ロジックも含むことができる。図8は、メモリ832、834だけがCL872、882に結合されるのではなく、I/Oデバイス814も制御ロジック872、882に結合されることを示している。レガシI/Oデバイス815がチップセット890に結合される。
ここで図9を参照すると、本発明のある実施形態によるSoC900のブロック図が示されている。図5の類似の要素は、同様の参照符号を有する。また、破線枠は、より高度なSoCに関するオプション機能である。図9では、相互接続ユニット902が、1つ又は複数のコア502A〜Nのセット及び共有キャッシュユニット506を含むアプリケーションプロセッサ910と、システムエージェントユニット510と、バスコントローラユニット516と、統合メモリコントローラユニット514と、統合グラフィックスロジック508を含むことができる1つ又は複数のメディアプロセッサ920のセットと、スチルカメラ機能及び/又はビデオカメラ機能を提供するためのイメージプロセッサ924と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926と、ビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928と、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット940とに結合される。
図10は、中央処理装置(CPU)及びグラフィックス処理ユニット(GPU)を含むプロセッサを示し、これらは、1つの実施形態による少なくとも1つの命令を実行することができる。1つの実施形態では、少なくとも1つの実施形態によるオペレーションを実行する命令が、CPUにより実行され得る。別の実施形態では、命令はGPUにより実行され得る。さらに別の実施形態では、命令は、GPU及びCPUにより実行されるオペレーションの組み合わせによって実行されてよい。例えば、1つの実施形態では、1つの実施形態による命令が、GPU上で実行されるために受信されデコードされてよい。しかし、デコードされた命令内の1つ又は複数のオペレーションはCPUにより実行されてよく、その結果は、命令の最終リタイアメントのためにGPUに返されてよい。逆に、いくつかの実施形態では、CPUは一次プロセッサとして動作してよく、GPUはコプロセッサとして動作してよい。
いくつかの実施形態では、高度に並列化されたスループットの高いプロセッサから恩恵を受ける命令はGPUにより実行されてよく、深くパイプライン化されたアーキテクチャから恩恵を受けるプロセッサの性能から恩恵を受ける命令はCPUにより実行されてよい。例えば、グラフィックス、科学アプリケーション、財務アプリケーション、及び他の並列ワークロードは、GPUの性能から恩恵を受けてよく、それに応じて実行されてよいが、オペレーティングシステムのカーネル又はアプリケーションコードなどのよりシーケンシャルなアプリケーションは、CPUにより好適であってよい。
図10において、プロセッサ1000には、CPU1005、GPU1010、イメージプロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、ディスプレイデバイス1040、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、デュアルデータレート(DDR)コントローラ1060、セキュリティエンジン1065、及びI2S/I2C(Integrated Interchip Sound/Inter−Integrated Circuit)インタフェース1070が含まれる。他のロジック及び回路が図10のプロセッサに含まれてよく、それらには、より多くのCPU又はGPU、及び他のペリフェラルインタフェースコントローラが含まれる。
少なくとも1つの実施形態の1つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的なデータによって実装されてよく、そのデータは、機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体(「テープ」)に格納され、実際にロジック又はプロセッサを作る製造機械に読み込むために、様々な顧客又は製造施設に供給されてよい。例えば、ARM Holdings,Ltd.が開発したCortex(商標)ファミリのプロセッサなどのIPコア、及び中国科学院の計算技術研究所(ICT)が開発した龍芯(Loongson)のIPコアが、Texas Instruments、Qualcomm、Apple、又はSamsungなどの様々な顧客又はライセンス先に販売又はライセンス供与されてよく、これらの顧客又はライセンス先によって製造されたプロセッサに実装されてよい。
図11は、1つの実施形態によるIPコアの開発を説明するブロック図を示す。ストレージ1130には、シミュレーションソフトウェア1120、及び/又は、ハードウェア又はソフトウェアモデル1110が含まれる。1つの実施形態では、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続1150(例えば、インターネット)、又は無線接続1160を介してストレージ1130に提供され得る。シミュレーションツール及びモデルにより生成されるIPコア情報は次に、少なくとも1つの実施形態による少なくとも1つの命令を実行するIPコアがサードパーティにより製造され得る製造施設に送信され得る。
いくつかの実施形態では、1つ又は複数の命令は、第1のタイプ又はアーキテクチャ(例えば、x86)に対応し、異なるタイプ又はアーキテクチャのプロセッサ(例えば、ARM)上で変換又はエミュレートされてよい。したがって、1つの実施形態によれば、命令は、ARM、x86、MIPS、GPU、あるいは他のプロセッサタイプ又はアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行されてよい。
図12は、1つの実施形態に従って、第1のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。図12において、プログラム1205は、1つの実施形態による命令として、同じ機能又は実質的に同じ機能を実行することができるいくつかの命令を含む。しかし、プログラム1205の命令は、プロセッサ1215と異なる又は非互換であるタイプ及び/又はフォーマットのものであってよく、このことは、プログラム1205内のタイプの命令を、プロセッサ1215がネイティブに実行できなくてもよいことを意味する。しかし、エミュレーションロジック1210を用いて、プログラム1205の命令は、プロセッサ1215がネイティブに実行できる命令に変換される。1つの実施形態では、エミュレーションロジックはハードウェアで具現化される。別の実施形態では、エミュレーションロジックは、プログラム1205の命令タイプをプロセッサ1215がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態では、エミュレーションロジックは、固定機能のハードウェア又はプログラマブルなハードウェアと、有形の機械可読媒体に格納されたプログラムとの組み合わせである。1つの実施形態では、プロセッサはエミュレーションロジックを含み、他の実施形態では、エミュレーションロジックはプロセッサの外側に存在して、サードパーティにより提供される。1つの実施形態では、プロセッサは、プロセッサに含まれる又はプロセッサに関連付けられるマイクロコード又はファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体で具現化されたエミュレーションロジックを読み込むことができる。
図13は、本発明の実施形態による、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図13は、高水準言語1302のプログラムがx86コンパイラ1304を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載するプロセッサ1316がネイティブに実行できるx86バイナリコード1306を生成できることを示す。少なくとも1つのx86命令セットコアを搭載するプロセッサ1316は、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ結果を実現するために、(1)Intel(登録商標)x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサ上で動作させることを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1304は、追加のリンケージ処理があってもなくても、少なくとも1つのx86命令セットコアを搭載するプロセッサ1316上で実行され得るx86バイナリコード1306(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図13は、高水準言語1302のプログラムが、別の命令セットコンパイラ1308を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載しないプロセッサ1314(例えば、MIPS Technologies(カリフォルニア州、サニーベール)のMIPS命令セットを実行するコア、及び/又は、ARM Holdings(カリフォルニア州、サニーベール)のARM命令セットを実行するコアを搭載したプロセッサ)がネイティブに実行できる別の命令セットバイナリコード1310を生成できることを示す。命令変換器1312は、x86バイナリコード1306を、x86命令セットコアを搭載しないプロセッサ1314がネイティブに実行できるコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード1310と同じである可能性は低い。なぜなら、これが実現できる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器1312は、エミュレーション、シミュレーション、又はその他の処理を通じて、x86命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがx86バイナリコード1306を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
マルチプロセッシングでは、SPMD処理を利用するプロセッサ又は論理プロセッサは、タスクを分割し、機能の複数のインスタンス(例えば、ベジェ曲線、ベジェサーフェス、データベース検索/更新など)を呼び出す、又は複数のプロセッサ(又は論理プロセッサ)上でループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、アトミックな範囲演算を用いることができることが理解されよう。アトミックな範囲演算の実施形態には、アトミックにNEXTを増分する命令、アトミックにNEXTにXを加算する命令、アトミックにENDを減分する命令、及び/又はアトミックにENDからXを減算する命令が含まれてよい。複数のプロセッサ(例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど)が一般的なメモリ及び/又はキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期(例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信)によって、協同するSPMDプロセッサ(又は論理プロセッサ)の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
いくつかの実施形態では、範囲は、NEXT及びENDという一対の64ビットインデックスをメモリ内に含むことができる。いくつかの代替の実施形態では、範囲は、NEXT及びENDという一対の32ビット(又は16ビット)インデックスをメモリ内に含むことができる。例えば、範囲[NEXT,END)は、NEXTからEND−1までのインデックスを含むよう定義される。次に、範囲[NEXT,END)のサイズは、ENDがNEXTより大きい場合、END−NEXTに等しい。NEXTがEND以上である場合、範囲[NEXT,END)は空である。1以上のサイズを有する範囲が、アトミックにNEXTを増分する命令(INC NEXT)、又はアトミックにENDを減分する命令(DEC END)を実行するのに十分である。範囲のサイズがX以上であれば、アトミックにNEXTにXを加算する命令(ADD NEXT)、又はアトミックにENDからXを減算する命令(SUB END)を実行するのに十分である。
図14は、アトミックな範囲演算を提供する命令を用いるための、プロセッサ装置のINC NEXTロジック1401に関する実施形態を示す。範囲インデックスである1420及び1430のセット1410が、メモリ及び/又はキャッシュメモリに格納されている。INC NEXT命令に応答して、範囲インデックス1420及び1430のセット1410のアドレスを指定して、範囲インデックス1420及び1430のセット1410へのアクセスがロックされる。範囲インデックス1420及び1430のセット1410は、範囲サイズを決定するために、(例えば、メモリ又はキャッシュメモリから)読み込まれる。コンパレータ1440は、範囲サイズが、INC NEXT命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ1440の結果は、コンパレータ1440の結果が1である場合に、INC NEXT命令に従って範囲変更を行う加算器1450により、NEXTインデックス1420に加算される。次に、範囲インデックス1425及び1430のセット1410のうち、1つ又は複数の変更された範囲インデックスは、メモリ及び/又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のENDインデックス(又は未変更のNEXTインデックス)は、メモリ及び/又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット1410の両方のインデックスが読み込まれ、それらのインデックスがINC NEXT命令により変更されているかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがINC NEXT命令に従って範囲変更を行うのに不十分である場合、エラー信号1460をセットするために、コンパレータ1440の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号1460は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号1460は、プロセッサのレジスタ(例えば、条件コードレジスタ又はフラグレジスタ)に保存されてよい。INC NEXT命令の完了に応答して、範囲インデックス1425及び1430のセット1410へのアクセスはロック解除される。したがって、そのようなアトミックな範囲変更命令の読み出し、条件変更、書き込みオペレーションは、システムの全ての観察者には、瞬時に行われているように見える。
図15は、アトミックな範囲演算を提供する命令を用いるための、プロセッサ装置のADD NEXTロジック1501に関する代替の実施形態を示す。範囲インデックスである1520及び1530のセット1510が、メモリ及び/又はキャッシュメモリに格納されている。ADD NEXT命令に応答して、範囲インデックス1520及び1530のセット1510のアドレスを指定して、範囲インデックス1520及び1530のセット1510へのアクセスがロックされる。範囲インデックス1520及び1530のセット1510は、範囲サイズを決定するために、(例えば、メモリ又はキャッシュメモリから)読み込まれる。オペランドXは、加算器1550によりNEXTインデックス1520に加算される。コンパレータ1540は、範囲サイズが、ADD NEXT命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ1540の結果は、コンパレータ1540の結果が1である場合に、ADD NEXT命令に従って範囲変更を行う加算器1550の結果を、マルチプレクサ1555を通して選択するのに用いられる。次に、範囲インデックス1525及び1530のセット1510のうち、1つ又は複数の変更された範囲インデックスは、メモリ及び/又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のENDインデックス(又は未変更のNEXTインデックス)は、メモリ及び/又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット1510の両方のインデックスが読み込まれ、それらのインデックスがADD NEXT命令により変更されているかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがADD NEXT命令に従って範囲変更を行うのに不十分である場合、エラー信号1560をセットするために、コンパレータ1540の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号1560は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号1560は、プロセッサのレジスタ(例えば、条件コードレジスタ又はフラグレジスタ)に保存されてよい。ADD NEXT命令の完了に応答して、範囲インデックス1525及び1530のセット1510へのアクセスはロック解除される。
図16は、アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置のDEC ENDロジック1601に関する別の代替の実施形態を示す。範囲インデックスである1620及び1630のセット1610が、メモリ及び/又はキャッシュメモリに格納されている。DEC END命令に応答して、範囲インデックス1620及び1630のセット1610のアドレスを指定して、範囲インデックス1620及び1630のセット1610へのアクセスがロックされる。範囲インデックス1620及び1630のセット1610は、範囲サイズを決定するために、(例えば、メモリ又はキャッシュメモリから)読み込まれる。コンパレータ1640は、範囲サイズが、DEC END命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ1640の結果は、コンパレータ1640の結果が1である場合に、DEC END命令に従って範囲変更を行う減算器1650により、ENDインデックス1630から減算される。次に、範囲インデックス1620及び1635のセット1610のうち、1つ又は複数の変更された範囲インデックスは、メモリ及び/又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のNEXTインデックス(又は未変更のENDインデックス)は、メモリ及び/又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット1610の両方のインデックスが読み込まれ、それらのインデックスがSUB END命令により変更されているかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがDEC END命令に従って範囲変更を行うのに不十分である場合、エラー信号1660をセットするために、コンパレータ1640の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号1660は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号1660は、プロセッサのレジスタ(例えば、条件コードレジスタ又はフラグレジスタ)に保存されてよい。DEC END命令の完了に応答して、範囲インデックス1620及び1635のセット1610へのアクセスはロック解除される。
図17は、アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置のSUB ENDロジック1701に関する別の代替の実施形態を示す。範囲インデックスである1720及び1730のセット1710が、メモリ及び/又はキャッシュメモリに格納されている。SUB END命令に応答して、範囲インデックス1720及び1730のセット1710のアドレスを指定して、範囲インデックス1720及び1730のセット1710へのアクセスがロックされる。範囲インデックス1720及び1730のセット1710は、範囲サイズを決定するために、(例えば、メモリ又はキャッシュメモリから)読み込まれる。オペランドXは、減算器1750によりENDインデックス1730から減算される。コンパレータ1740は、範囲サイズが、SUB END命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ1740の結果は、コンパレータ1740の結果が1である場合に、SUB END命令に従って範囲変更を行う減算器1750の結果を、マルチプレクサ1755を通して選択するのに用いられる。次に、範囲インデックス1720及び1735のセット1710のうち、1つ又は複数の変更された範囲インデックスは、メモリ及び/又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のNEXTインデックス(又は未変更のENDインデックス)は、メモリ及び/又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット1710の両方のインデックスが読み込まれ、それらのインデックスがSUB END命令により変更されているかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがSUB END命令に従って範囲変更を行うのに不十分である場合、エラー信号1760をセットするために、コンパレータ1740の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号1760は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号1760は、プロセッサのレジスタ(例えば、条件コードレジスタ又はフラグレジスタ)に保存されてよい。SUB END命令の完了に応答して、範囲インデックス1720及び1735のセット1710へのアクセスはロック解除される。
したがって、そのようなアトミックな範囲変更命令の読み出し、条件変更、書き込みオペレーションは、システムの全ての観察者には、瞬時に行われているように見える。複数のプロセッサ(例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど)が一般的なメモリ及び/又はキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期(例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信)によって、協同するSPMDプロセッサ(又は論理プロセッサ)の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
図18Aは、アトミックな範囲演算を提供する命令を実行するプロセス1801に関する、1つの実施形態のフロー図を示す。プロセス1801及び本明細書に開示される他のプロセスは、専用ハードウェア、あるいは汎用機械又は専用機械又は両方の組み合わせにより実行可能なソフトウェア又はファームウェアの演算コードを含むことができる処理ブロックにより実行される。
プロセス1801の処理ブロック1810では、アトミックにNEXTを増分する命令(INC NEXT)がデコードされる。INC NEXT命令の実施形態は、メモリ及び/又はキャッシュメモリ内のNEXT及びEND(例えば、1420及び1430)という範囲インデックスのセットのアドレスを指定することができる。処理ブロック1820では、NEXT及びENDという範囲インデックスのセットへのアクセスが、INC NEXT命令に応答してロックされる。処理ブロック1830では、範囲サイズを決定するために、NEXT及びENDという範囲インデックスのセットが(例えば、メモリ又はキャッシュメモリから)読み込まれる。処理ブロック1835では、NEXT及びENDという範囲インデックスのセットにより表される範囲が空であるかどうかが判定される。空である場合、処理ブロック1880において、エラー信号フラグがセットされ、NEXT及びENDという範囲インデックスの値はINC NEXT命令により変更されず、処理ブロック1890において、NEXT及びENDという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ(例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ)に保存されてよい。
そうではなく、処理ブロック1835において、NEXT及びENDという範囲インデックスのセットにより表される範囲が空ではないと判定された場合、範囲サイズはINC NEXT命令に従って範囲変更を行うのに十分であり、処理は処理ブロック1840に進む。処理ブロック1840では、範囲インデックスのNEXTが増分される。処理ブロック1850では、エラー信号フラグがクリアされる。処理ブロック1860では、範囲インデックスのNEXTが、メモリ及び/又はキャッシュメモリに戻され格納される。いくつかの実施形態では、未変更の範囲インデックスであるENDは、メモリ及び/又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック1870において、未変更の範囲インデックスであるENDも、メモリ及び/又はキャッシュメモリに戻され格納されてよい。プロセス1801のいくつかの代替の実施形態では、NEXT及びENDという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがINC NEXT命令により変更されたかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納されてよい。処理ブロック1890では、NEXT及びENDという範囲インデックスのセットへのアクセスが、INC NEXT命令の完了に応答してロック解除される。こうして、プロセス1801の実施形態を通して示されるように、アトミックな命令のINC NEXTが実現される。
特定の順序で実行されるとして示される処理ブロックは、プロセス1801のいくつかの代替の実施形態、及び本明細書に開示される他のプロセスにおいて、可能であれば、別の順序で、又は同時に、又は互いに並列して実行されてもよいことが理解されよう。
図18Bは、アトミックな範囲演算を提供する命令を実行するプロセス1802の代替の実施形態に関するフロー図を示す。プロセス1802の処理ブロック1812では、アトミックにNEXTにXを加算する命令(ADD NEXT)がデコードされる。ADD NEXT命令の実施形態は、メモリ及び/又はキャッシュメモリ内のNEXT及びEND(例えば、1520及び1530)という範囲インデックスのセットのアドレス、並びにソースオペランドXのアドレスを指定することができる。処理ブロック1820では、NEXT及びENDという範囲インデックスのセットへのアクセスが、ADD NEXT命令に応答してロックされる。処理ブロック1830では、範囲サイズを決定するために、NEXT及びENDという範囲インデックスのセットが(例えば、メモリ又はキャッシュメモリから)読み込まれる。処理ブロック1837では、NEXT及びENDという範囲インデックスのセットにより表される範囲が、Xより小さいかどうかが判定される。Xより小さい場合、処理ブロック1880において、エラー信号フラグがセットされ、NEXT及びENDという範囲インデックスの値はADD NEXT命令により変更されず、処理ブロック1890において、NEXT及びENDという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ(例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ)に保存されてよい。いくつかの代替の実施形態では、エラー信号フラグはオプションとして、何らかの他の位置(例えば、スタック)に保存されてよい。
そうではなく、処理ブロック1837において、NEXT及びENDという範囲インデックスのセットにより表される範囲がXより小さいサイズではないと判定された場合、範囲サイズはADD NEXT命令に従って範囲変更を行うのに十分であり、処理は処理ブロック1842に進む。処理ブロック1842において、値Xが範囲インデックスのNEXTに加算される。処理ブロック1850では、エラー信号フラグがクリアされる。処理ブロック1860では、範囲インデックスのNEXTが、メモリ及び/又はキャッシュメモリに戻され格納される。いくつかの実施形態では、未変更の範囲インデックスであるENDは、メモリ及び/又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック1870において、未変更の範囲インデックスであるENDも、メモリ及び/又はキャッシュメモリに戻され格納されてよい。プロセス1802のいくつかの代替の実施形態では、NEXT及びENDという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがADD NEXT命令により変更されたかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納されてよい。処理ブロック1890では、NEXT及びENDという範囲インデックスのセットへのアクセスが、ADD NEXT命令の完了に応答してロック解除される。こうして、プロセス1802の実施形態を通して示されるように、アトミックな命令のADD NEXTが実現される。
特定の順序で実行されるように示される処理ブロックは、プロセス1802及び開示される本明細書の他のプロセスに関するいくつかの代替の実施形態において、可能であれば、別の順序で、又は同時に、又は互いに並列に実行されてもよいことが理解されよう。
図19Aは、アトミックな範囲演算を提供する命令を実行するプロセス1901の別の代替の実施形態に関するフロー図を示す。プロセス1901の処理ブロック1910では、アトミックにENDを減分する命令(DEC END)がデコードされる。DEC END命令の実施形態は、メモリ及び/又はキャッシュメモリ内のNEXT及びEND(例えば、1620及び1630)という範囲インデックスのセットのアドレスを指定することができる。処理ブロック1920では、NEXT及びENDという範囲インデックスのセットへのアクセスが、DEC END命令に応答してロックされる。処理ブロック1930では、範囲サイズを決定するために、NEXT及びENDという範囲インデックスのセットが(例えば、メモリ又はキャッシュメモリから)読み込まれる。処理ブロック1935では、NEXT及びENDという範囲インデックスのセットにより表される範囲が空であるかどうかが判定される。空である場合、処理ブロック1980において、エラー信号フラグがセットされ、NEXT及びENDという範囲インデックスの値はDEC END命令により変更されず、処理ブロック1990において、NEXT及びENDという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ(例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ)に保存されてよい。
そうではなく、処理ブロック1935において、NEXT及びENDという範囲インデックスのセットにより表される範囲が空ではないと判定された場合、範囲サイズはDEC END命令に従って範囲変更を行うのに十分であり、処理は処理ブロック1940に進む。処理ブロック1940では、範囲インデックスのNEXTが増分される。処理ブロック1950では、エラー信号フラグがクリアされる。いくつかの実施形態では、未変更の範囲インデックスであるNEXTは、メモリ及び/又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック1960において、未変更の範囲インデックスであるNEXTも、メモリ及び/又はキャッシュメモリに戻され格納されてよい。処理ブロック1970では、範囲インデックスのENDが、メモリ及び/又はキャッシュメモリに戻され格納される。プロセス1901のいくつかの代替の実施形態では、NEXT及びENDという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがDEC END命令により変更されたかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納されてよい。処理ブロック1990では、NEXT及びENDという範囲インデックスのセットへのアクセスが、DEC END命令の完了に応答してロック解除される。こうして、プロセス1901の実施形態を通して示されるように、アトミックな命令のDEC ENDが実現される。
特定の順序で実行されるとして示される処理ブロックは、プロセス1901のいくつかの代替の実施形態、及び本明細書に開示される他のプロセスにおいて、可能であれば、別の順序で、又は同時に、又は互いに並列して実行されてもよいことが理解されよう。
図19Bは、アトミックな範囲演算を提供する命令を実行するプロセス1902の別の代替の実施形態に関するフロー図を示す。プロセス1902の処理ブロック1912では、アトミックにENDからXを減算する命令(SUB END)がデコードされる。SUB END命令の実施形態は、メモリ及び/又はキャッシュメモリ内のNEXT及びEND(例えば、1720及び1730)という範囲インデックスのセットのアドレス、並びにソースオペランドXのアドレスを指定することができる。処理ブロック1920では、NEXT及びENDという範囲インデックスのセットへのアクセスが、SUB END命令に応答してロックされる。処理ブロック1930では、範囲サイズを決定するために、NEXT及びENDという範囲インデックスのセットが(例えば、メモリ又はキャッシュメモリから)読み込まれる。処理ブロック1937では、NEXT及びENDという範囲インデックスのセットにより表される範囲が、Xより小さいかどうかが判定される。Xより小さい場合、処理ブロック1980において、エラー信号フラグがセットされ、NEXT及びENDという範囲インデックスの値はSUB END命令により変更されず、処理ブロック1990において、NEXT及びENDという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ(例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ)に保存されてよい。いくつかの代替の実施形態では、エラー信号フラグはオプションとして、何らかの他の位置(例えば、スタック)に保存されてよい。
そうではなく、処理ブロック1937において、NEXT及びENDという範囲インデックスのセットにより表される範囲がXより小さいサイズではないと判定された場合、範囲サイズはSUB END命令に従って範囲変更を行うのに十分であり、処理は処理ブロック1942に進む。処理ブロック1942において、値Xが範囲インデックスのENDから減算される。処理ブロック1950では、エラー信号フラグがクリアされる。いくつかの実施形態では、未変更の範囲インデックスであるNEXTは、メモリ及び/又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック1960において、未変更の範囲インデックスであるNEXTも、メモリ及び/又はキャッシュメモリに戻され格納されてよい。処理ブロック1970では、範囲インデックスのENDが、メモリ及び/又はキャッシュメモリに戻され格納される。プロセス1902のいくつかの代替の実施形態では、NEXT及びENDという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがSUB END命令により変更されたかにかかわらず、メモリ及び/又はキャッシュメモリに戻され格納されてよい。処理ブロック1990では、NEXT及びENDという範囲インデックスのセットへのアクセスが、SUB END命令の完了に応答してロック解除される。こうして、プロセス1902の実施形態を通して示されるように、アトミックな命令のSUB ENDが実現される。
特定の順序で実行されるとして示される処理ブロックは、プロセス1902のいくつかの代替の実施形態、及び本明細書に開示される他のプロセスにおいて、可能であれば、別の順序で、又は同時に、又は互いに並列して実行されてもよいことが理解される。
SPMD処理を利用するプロセッサは、タスクを分割し、機能の複数のインスタンスを呼び出す、又は一般的なメモリ及び/又はキャッシュメモリへのアクセスを共有する複数のプロセッサ(又は論理プロセッサ)上で、ループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、アトミックな範囲演算を用いることができる。アトミックな範囲演算を用いることによる同期(例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信)によって、協同するSPMDプロセッサ(又は論理プロセッサ)の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされることが理解されよう。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性メモリ及び不揮発性メモリ及び/又はストレージエレメントを含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
プログラムコードは、本明細書に説明される機能を実行して出力情報を生成する入力命令に適用されてよい。出力情報は、1つ又は複数の出力デバイスに、既知の方式で適用されてよい。この応用の目的のために、処理システムには、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有するあらゆるシステムが含まれる。
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語、又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語又は機械語で実施されてもよい。実際に、本明細書に説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されてはいない。いかなる場合にも、言語は、コンパイラ型言語又はインタープリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的な命令によって実装されてよく、その命令は機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、実際にロジック又はプロセッサを作る製造機械に読み込むために、様々な顧客又は製造施設に供給されてよい。
そのような機械可読記憶媒体には、機械又は装置により製造又は形成される非一時的な有形の構成の物品が含まれてよく、そのような物品には、ハードディスクや、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び光磁気ディスクを含むその他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)などの半導体デバイス、磁気カード又は光カード、あるいは電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体が、限定されることなく含まれる。
したがって、本発明の実施形態には、命令を含む又はハードウェア記述言語(HDL)などの設計データを含む非一時な有形の機械可読媒体も含まれ、HDLは、本明細書で説明される構造、回路、装置、プロセッサ、及び/又はシステム機能を定義する。そのような実施形態は、プログラム製品とも呼ばれる場合がある。
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するのに、命令変換器が用いられてよい。例えば、命令変換器は、命令をコアにより処理される1つ又は複数の他の命令に、変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、変形、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサに搭載されても、プロセッサの外部にあっても、又は一部がプロセッサに搭載され一部がプロセッサの外部にあってもよい。
こうして、少なくとも1つの実施形態による1つ又は複数の命令を実行する技術が開示される。特定の例示的な実施形態が説明され、添付図面に示されたが、そのような実施形態は、広範な発明の単に例示であって広範な発明に限定を加えるものではないこと、本開示を検討すると、当業者には様々な他の変更が見出され得るので、示され説明された特定の解釈及び構成に本発明は限定されないことを理解されたい。このような、成長が速く、さらなる進歩が容易に予見できない技術領域では、開示された実施形態は、技術的進歩を可能にすることで容易になるような構成及び詳細において、本開示の原理又は添付の特許請求の範囲から逸脱することなく、容易に変更可能であり得る。