【文献】
後藤弘茂,2006年のCPU 第71回 インテルはCISCのアプローチをアーキテクチャに持ち込む,ASCII,日本,株式会社アスキー,2006年 5月 1日,Vol:30,No:5,Pages:114〜119
【文献】
大原雄介,Intel & AMD が語らない深部をベンチで暴く 最新CPU内部解析,日経 Win PC,日本,日経BP社,2009年 9月 1日,第15巻,第14号,Pages:108〜121
(58)【調査した分野】(Int.Cl.,DB名)
実行のための第1の命令と分岐ターゲットを特定する第2の命令とをデコードするプロセッサパイプラインのデコードステージであって、前記第1の命令は第1のオペランドソースのデータと、第2のオペランドソースのデータと、第3のオペランドソースのデータと、演算イディオムタイプとを特定するデコードステージと、
前記デコードされた第1の命令に応じて、
前記第1および第2のオペランドソースからのデータ間において前記特定された演算イディオムタイプに基づく第1の論理演算を実行し、
前記第3のオペランドソースからのデータと前記第1の論理演算の結果との間において第2の論理演算を実行して条件フラグを条件付きで設定する1つ以上の実行ユニットと、
前記デコードステージと接続され、前記条件フラグに基づいて前記分岐ターゲットに対して条件付き分岐を実行するべく、単一の融合されたマイクロ操作として実行するために、前記第1の命令を前記第2の命令と融合するための処理を行うプロセッサパイプラインの融合ステージと、
を含むプロセッサ。
前記1つ以上の実行ユニットは、前記単一の融合されたマイクロ操作に応じて、前記第1の論理演算を実行し、前記第3のオペランドソースのデータに対して前記第1の論理演算の前記結果をテストして、条件付きでゼロフラグを設定し、前記ゼロフラグが設定されると条件付きで分岐する、請求項1に記載のプロセッサ。
前記特定された演算イディオムタイプに基づいて、前記第1のオペランドソースのデータおよび前記第2のオペランドソースのデータからのデータ間に論理積が実行される請求項1から5のいずれか1項に記載のプロセッサ。
前記特定された演算イディオムタイプに基づいて、前記第1のオペランドソースのデータおよび前記第2のオペランドソースのデータからのデータ間において論理和が実行される請求項1から5のいずれか1項に記載のプロセッサ。
前記特定された演算イディオムタイプに基づいて、前記第1のソースデータオペランドおよび前記第2のソースデータオペランドからのデータ間に論理積が実行される請求項8から11のいずれか1項に記載の方法。
前記特定された演算イディオムタイプに基づいて、前記第1のソースデータオペランドおよび前記第2のソースデータオペランドからのデータ間において論理和が実行される請求項8から11のいずれか1項に記載の方法。
前記1つ以上の実行ユニットは、前記単一の融合されたマイクロ操作に応じて、前記第1の論理演算を実行し、前記第3のオペランドソースのデータに対して前記第1の論理演算の前記結果をテストして、条件付きでゼロフラグを設定し、前記ゼロフラグが設定されると条件付きで分岐する、請求項16に記載の処理システム。
前記第1の命令に基づいて、前記第1のオペランドソースのデータおよび前記第2のオペランドソースのデータからのデータ間において論理積が実行される請求項14から18のいずれか1項に記載の処理システム。
前記第1の命令に基づいて、前記第1のオペランドソースのデータおよび前記第2のオペランドソースのデータからのデータ間において論理和が実行される、請求項14から18のいずれか1項に記載の処理システム。
【発明を実施するための形態】
【0008】
以下の説明は、プロセッサ、コンピュータシステム、またはその他の処理装置内において、またはそれと関連して複数のテストソースに対して論理和テストおよび論理積テスト機能を提供する融合可能な命令および論理を開示するものである。
【0009】
Webブラウザは、動的かつ弱く型付けされる場合のある、JavaScript(登録商標)、JScriptまたはECMAスクリプトなどの1つ以上のインタプリタ形式のコンピュータプログラミング言語に対するサポートを含んでもよく、オブジェクト指向の命令的かつ機能的なプログラミングスタイルをサポートしてもよい。そのようなインタプリタ形式のコンピュータプログラミング言語には、動的にインタプリタ形式の言語を機械命令シーケンスにコンパイルする実行時(JIT)コンパイラの形態によるブラウザサポートがあってもよい。JITコンパイラは、処理の高速化のために記憶されている値を最適化してもよいが、その場合は実行時にそのような最適化に対してオブジェクトのタイプを動的にテストする必要がある場合がある。例えば、JITコンパイラは、マシンワードの1つ以上のビットを用いて、値が、より汎用的な浮動小数点値または文字列ではなく、最適化された整数であることを識別および/または指定してもよい。それらの1つ以上のビットの存在は、当該値にアクセスする前の実行時において動的に確認できる。そのような動的なタイプテストは、頻繁に実行されるタイプテストの命令シーケンスのイディオムの形でさらなる処理オーバーヘッドを発生させ、それによって消費エネルギーが増加することとなり、そのようなコンパイラ最適化の処理能力の利点を制限してしまう。
【0010】
上記の頻繁に実行されるタイプテストの命令シーケンスのイディオムは、2つのソースデータオペランド(例えばいずれかのソースのビットが1であるかをテストする際は論理和、いずれかのソースのビットが0であるかをテストする際は論理積)を組み合わせる論理演算と、比較またはテスト命令(例えばマスクに対して上記論理演算の結果をテストする命令)と、条件付き分岐(例えばゼロフラグがTESTによって設定されたか否かによる、よりゆっくりとしたジェネリックなコードシーケンスへの飛越しを行うJZ/JNZ)とを含んでもよい。プロセッサのデコード論理は、比較命令またはテスト命令(例えばTEST)を条件付き分岐命令(例えばJZ)と組み合わせる際にマクロ融合を利用してもよい。
【0011】
融合可能な命令および論理の実施形態は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供できる。いくつかの実施形態は、実行のためのテスト命令をデコードするプロセッサデコードステージを含み、前記命令は、第1、第2、第3のソースデータオペランドおよび演算タイプを特定する。実行ユニットは、デコードされたテスト命令に応じて、第1および第2のソースデータオペランドからのデータ間において前記特定された演算タイプに基づく1つの論理演算(例えば論理和)を実行し、第3のソースデータオペランドおよび第1の論理演算の結果からのデータ間において第2の論理演算(例えば論理積)を実行して条件フラグを設定する。いくつかの実施形態は、1つの論理的な命令(例えば論理和)を従来技術のテスト命令と融合することによって、上記テスト命令を動的に作成する。他の実施形態は、動的にテスト命令を作成するがJITコンパイラを介する。いくつかの実施形態は、さらに後続の条件付き分岐命令(例えばJZ)とテスト命令を融合し、どのように条件フラグが設定されるかに基づいて分岐を実行する。したがって、頻繁に実行されるタイプテストの命令シーケンスのイディオムは、単一の命令に融合可能でもよく、その結果、実行時のプロセッサ内に存在するのは、1つのマイクロ操作シーケンスとなる。
【0012】
複数のテストソースに対して論理和テストおよび/または論理積テスト機能を提供する融合可能な命令および論理によって、JITコンパイラによって作成されるタイプテスト命令イディオムを頻繁に実行することに関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【0013】
以下の説明では、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベントイネーブルメントメカニズム等の多くの特定詳細は、本発明の実施形態をよりよく理解するためのものである。しかし、発明はそのような特定詳細なしでも実施できるということは当業者には理解できよう。又、本発明の実施形態を不必要にわかりにくくするのを避けるために、いくつかの公知の構造、回路などは示されていない。
【0014】
以下の実施形態はプロセッサに関して記載されるが、他の種類の集積回路および論理デバイスには他の実施形態を適用可能である。本発明の実施形態と同様の技術および教示は、パイプラインスループットおよび処理能力を上げることで利益がある他の種類の回路または半導体素子にも容易に適用できる。本発明の実施形態の教示は、データ操作を行う任意のプロセッサまたは機械に適用可能である。しかし本発明は、512ビット、256ビット、128ビット、64ビット、32ビット、または16ビットのデータ演算を行うプロセッサまたは機械に限定されず、データの操作または管理が実行されるいずれのプロセッサおよび機械にも適用可能である。さらに、例示を目的として、以下に実施例を記載し、添付図面は様々な実施例を図示する。しかしながら、それらの実施例は、広い範囲に及ぶ本発明の実施形態のすべての可能な実現を述べることを意図するものではなく、本発明の実施形態の例を提供することを意図しているに過ぎず、そのような例が限定的に理解されるべきではない。
【0015】
以下の例は、実行部および論理回路のコンテキストで命令処理および配信を記載しているが、本発明の他の実施形態は、機械によって実行されると、本発明の少なくとも1つの実施形態と一致した機能を実行する、機械可読有形媒体に格納されたデータおよび/又は命令により実行可能である。一実施形態において、本発明の実施形態と関連する機能は、機械実行可能命令に具現化される。命令を利用して、命令をプログラミングされた汎用プロセッサまたは専用プロセッサに、本発明の各工程を実行させることができる。本発明の実施形態は、コンピュータ(その他の電子デバイス)に本発明の実施形態による1つ以上の演算を実行させるようプログラミングするのに利用できる命令を格納する機械またはコンピュータ可読媒体を含みうるコンピュータプログラムプロダクトまたはソフトウェアとして提供可能である。もしくは、本発明の実施形態の各工程を、各工程を実行する固定機能の論理を含む特定用途のハードウェアコンポーネントにより、または、プログラミングされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせにより実行することもできる。
【0016】
本発明の実施形態を実行する論理をプログラミングするために使用される命令は、DRAM,キャッシュ、フラッシュメモリ、またはその他のストレージなど、システムのメモリ内に格納可能である。さらに、命令は、ネットワーク経由または他のコンピュータ可読媒体により配信可能である。したがって、機械可読媒体は、機械(例えばコンピュータ)が可読な形式で情報を格納または送信する任意のメカニズムを含んでよく、これらに限定はされないが、フロッピー(登録商標)(登録商標)ディスク、光ディスク、コンパクトディスク(CD)、CD−ROM、および磁気光ディスク、読取専用メモリ(CD−ROM)、ランダムアクセスメモリ(RAM)、消去可能書き込み可能ROM(EPROM)、電気的消去可能書き込み可能ROM(EEPROM)、磁気または光カード、フラッシュメモリ、または電気、光、音響、その他の形態の伝播信号(例えば搬送波、赤外線信号、デジタル信号等)によるインターネット経由の情報送信に使用される有形の機械可読ストレージなどを含んでもよい。従って、コンピュータ可読媒体は、機械(例えばコンピュータ)が可読な形式で電子命令または情報を格納または送信するのに適した任意の種類の有形の機械可読媒体を含む。
【0017】
設計は、作成からシミュレーション、さらには製造までの様々な段階を経て行うことができる。設計を表すデータは、複数の方法で設計を表していてよい。まず、シミュレーションにおいて有効なように、ハードウェアを、ハードウェア記述言語などの機能記述言語で表すことができる。さらに、論理および/またはトランジスタゲートを有する回路レベルモデルを、設計プロセスの幾つかの段階で製造することができる。さらに、大部分の設計では、ある段階において、ハードウェアモデルの様々な装置の物理的位置を表すデータレベルに到達する。従来の半導体製造技術を利用する場合には、ハードウェアモデルを表すデータは、集積回路の製造に利用されるマスク用の様々なマスク層上の様々な特徴の存在または不在を特定するデータであってよい。設計のいずれの表現においても、データは、いずれかの形態の機械可読媒体に格納されてよい。メモリまたはディスク等の磁気又は光ストレージは、情報を送信するように変調または生成される光波または電波を介して送信される情報を格納する機械可読媒体である。コードまたは設計を示す、または搬送する電気搬送波が送信されると、電気信号のコピー、バッファリング、または再送信の範囲において新たなコピーが生成される。従って、通信プロバイダまたはネットワークプロバイダは、本発明の実施形態の技術を具現化している、搬送波にエンコードされた情報などの物品を少なくとも一時的に有形の機械可読媒体に格納してもよい。
【0018】
現代のプロセッサでは、複数の異なる実行部を利用して、様々なコードおよび命令を処理および実行している。完了まで時間がかからないものもあれば、莫大な数のクロックサイクルを要するものもあり、全ての命令を同じように製造するわけではない。命令のスループットが速いと、プロセッサの全体の処理能力は良くなる。従って、多くの命令がより高速に実行されることは有益である。しかし、複雑度が高く、実行時間およびプロセッサリソースをより多く必要とする命令も存在する。例を挙げると、浮動小数点命令、ロード/格納処理、データ移動などである。
【0019】
インターネットやテキスト、マルチメディアアプリケーションで利用されるコンピュータシステム数が増えるにつれて、さらなるプロセッササポートを導入することが増えてきた。一実施形態において、一つの命令セットはデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割込みおよび例外処理、外部入出力(I/O)を含む1つ以上のコンピュータアーキテクチャと関連付けられてもよい。
【0020】
一実施形態において、命令セットアーキテクチャ(ISA)は、1つ以上の命令セットを実行するために使用されるプロセッサ論理および回路を含む1つ以上のマイクロアーキテクチャによって実現されてもよい。したがって、各プロセッサが異なるマイクロアーキテクチャを有しても、共通の命令セットの少なくとも一部を共有できる。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(商標)プロセッサ、およびカリフォルニア州SunnyvaleのAdvanced Micro Devices, Inc.のプロセッサは、x86命令セットのほぼ同一のバージョンを実現している(新しいバージョンではいくつかの拡張機能が追加されている)が、異なる内部設計を有する。同様に、ARM Holdings、 Ltd.などの他のプロセッサ開発会社によって設計されたプロセッサ、MIPS、またはそれらの実施権者または採用者は、共通の命令セットの少なくとも一部を共有してもよいが、異なるプロセッサ設計を含む場合がある。例えば、ISAの同一のレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネーム機構(例えば、Register Alias Table (RAT))を使用した1つ以上の動的に割り当てられた物理レジスタ、リオーダーバッファ(ROB)およびリタイアメントレジスタファイルを含む、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実現されてもよい。一実施形態において、レジスタは、ソフトウェアプログラマによってアドレスが可能または不可能な1つ以上のレジスタ、レジスタアーキテクチャ、レジスタファイルなどのレジスタセットを含んでもよい。
【0021】
一実施形態において、命令は1つ以上の命令フォーマットを含んでもよい。一実施形態において、命令フォーマットは、とくに実行される演算およびその演算の対応となるオペランドを特定するための様々なフィールド(ビット数、ビットの位置等)を示すことができる。命令フォーマットの中には、命令テンプレート(またはサブフォーマット)によって定義されるようにさらに分割されてもよい。例えば、所与の命令フォーマットの命令テンプレートを、命令フォーマットのフィールドの様々なサブセットを有するように定義されてもよく、および/または所与のフィールドが異なるインタプリタ形式を有するように定義されてもよい。一実施形態において、命令は命令フォーマットを用いて表現され(定義されている場合は、その命令フォーマットの命令テンプレートのうちの所与の1つにおいて表現される)、演算およびその演算対象となるオペランドを特定する、または表わす。
【0022】
科学的用途、経済的用途、自動ベクトル化された汎用的用途、RMS(recognition、mining、およびsynthesis:認識、マイニング、合成)用途、および視覚的かつマルチメディアの用途(例えば、2D/3Dグラフィックス、画像処理、映像圧縮/展開、音声認識アルゴリズムおよび音声操作)は、膨大な数のデータ項目に対して同じ演算を実行しなければならない場合がある。一実施形態において、Single Instruction Multiple Data(SIMD)は、プロセッサに、複数のデータエレメントに対して演算を実行させる命令のタイプを指す。SIMD技術はプロセッサにおいて使用可能で、レジスタ内のビットを、固定サイズまたは可変サイズの個別の値を表わすデータエレメントに論理的に分割する。例えば、一実施形態において、64ビットのレジスタ内のビットは、それぞれが個別の16ビット値を表わす個別の4つの16ビットデータエレメントを含むソースオペランドとして構成される。このタイプのデータは、「packed(パック)」データタイプまたは「vector(ベクトル)」データタイプと呼ばれる場合があり、このデータタイプのオペランドは、パックデータオペランドまたはベクトルオペランドと呼ばれる。一実施形態において、パックデータ項目またはベクトルは、単一のレジスタ内に格納されるパックデータエレメントのシーケンスでもよく、パックデータオペランドまたはベクトルオペランドは、SIMD命令(または「パックデータ命令」または「ベクトル命令」のソースまたはデスティネーションオペランドでもよい。一実施形態において、SIMD命令は、同一または異なるサイズ、同一または異なる数のデータエレメント、同一または異なるデータエレメントの順序を有するデスティネーションベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を作成するために、2つのソースベクトルオペランドに対して実行される単一のベクトル演算を指定する。
【0023】
x86、MMX(登録商標)、Streaming SIMD Extensions(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2の命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサ、ベクトル浮動小数点(VFP)および/またはNEON命令を含む命令セットを有するプロセッサのARM Cortex(登録商標)ファミリなどのARMプロセッサ、およびChinese Academy of SciencesのInstitute of Computing Technology(ICT)が開発したプロセッサのLoongsonファミリなどのMIPSプロセッサなどによって使用されるSIMD技術は、アプリケーションの処理能力を大幅な改良を実現してきた(Core(商標)およびMMX(商標)は、カリフォルニア州サンタクララのインテル社の登録商標または商標である)。
【0024】
一実施形態において、デスティネーションおよびソースレジスタおよび/またはデータは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語である。いくつかの実施形態において、それらは図示されているものと異なる名称または機能を有するレジスタ、メモリ、またはその他の記憶領域によって実現されてもよい。例えば、一実施形態において、「DEST1」は一時的なストレージレジスタまたはその他の記憶領域でもよく、一方「SRC1」および「SRC2」は第1のおよび第2のソースストレージレジスタまたはその他の記憶領域などでもよい。別の実施形態において、SRCおよびDEST記憶領域の2つ以上は、同じ記憶領域(例えば、SIMDレジスタ)内の異なるデータストレージ要素に対応してもよい。一実施形態において、さらに、ソースレジスタのうちの1つは、例えば、第1および第2のソースデータに対して実行された演算の結果を、デスティネーションレジスタの役割を果たす2つのソースレジスタのうちの1つに対して書き戻すことによってデスティネーションレジスタの役割を果たすことができる。
【0025】
図1Aは、本発明の一実施形態における1つの命令を実行する実行部を含むプロセッサで形成されるコンピュータシステムのブロック図である。システム100は、例えばここに記載する実施形態におけるような、本発明における処理データのアルゴリズムを実行する論理を含む実行部を利用するプロセッサ102等のコンポーネントを含む。システム100は、カリフォルニア州サンタクララのIntel Corporationから入手可能なPENTIUM(登録商標)(登録商標)III、PENTIUM(登録商標)(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)、および/または、StrongARM(商標)マイクロプロセッサを表しているが、他のシステム(他のマイクロプロセッサ、工学ワークステーション、セットトップボックス等を有するPCを含む)を利用することもできる。一実施形態では、サンプルシステム100は、ワイントン州のRedmondのMicrosoft Corporationから入手可能なWINDOWS(登録商標)(商標)オペレーティングシステムの一バージョンを実行することができるが、他のオペレーティングシステム(例えばUNIX(登録商標)、Linux(登録商標))、埋め込みソフトウェア、および/またはグラフィックユーザインタフェースを利用することもできる。従って本発明の実施形態は、ハードウェア回路およびソフトウェアの特定の組み合わせに限定されない。
【0026】
実施形態はコンピュータシステムに限定されない。ハンドヘルドデバイスおよび埋め込みアプリケーションといった他のデバイスには本発明の別の実施形態を利用することができる。ハンドヘルドデバイスの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)およびハンドヘルドPCが含まれる。埋め込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも一実施形態における1つ以上の命令を実行できる任意の他のシステムを含むことができる。
【0027】
図1Aは、本発明の一実施形態において、少なくとも1つの命令を実行するアルゴリズムを実行する1つ以上の実行部108を含むプロセッサ102で構成されるコンピュータシステム100のブロック図である。一実施形態は、単一のプロセッサデスクトップまたはサーバシステムを想定した説明がなされるが、マルチプロセッサシステムを想定する別の実施形態を含むこともできる。システム100は、ハブシステムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピュータ(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス(例えばデジタル信号プロセッサ)であってよい。プロセッサ102は、プロセッサ102とシステム100の他のコンポーネントとの間でデータ信号を送信することのできるプロセッサバス110に連結されている。システム100のエレメントは、当業者には公知である自身の通常の機能を実行する。
【0028】
一実施形態では、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャによっては、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。また別の実施形態では、キャッシュメモリがプロセッサ102の外部に常駐していてもよい。また他の実施形態として、実装例および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせを含んでもよい。レジスタファイル106は、整数レジスタ、浮動少数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ等の様々なレジスタに様々な種類のデータを格納することができる。
【0029】
実行ユニット108は、整数および浮動少数点演算を実行する論理を含み、これもプロセッサ102内に常駐している。プロセッサ102はさらに、一定のマクロ命令のマイクロコードを格納するマイクロコード(uコード)ROMを含む。1つの実施形態では、実行ユニット108は、パック命令セット109を処理する論理を含む。パック命令セット109を汎用プロセッサ102の命令セットに含め、さらに、命令を実行する関連回路も含めることで、多くのマルチメディアアプリケーションが利用する処理を、汎用プロセッサ102のパックデータを利用して行うことができる。従って多くのマルチメディアアプリケーションは、パックデータを処理するためにプロセッサのデータバス全幅を利用することで、加速化してより効率的に実行することができる。これにより、1つ以上の処理を一度に1つのデータエレメントに対して行う際に、プロセッサのデータバスに各小片のデータを転送する必要がなくなる。
【0030】
さらにマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、DSP、その他のタイプの論理回路では、実行部108の別の実施形態を利用することもできる。システム100はメモリ120を含む。メモリ120は、DRAMデバイス、SRAMデバイス、フラッシュメモリデバイス、その他のメモリデバイスであってよい。メモリ120は、プロセッサ102が実行可能なデータ信号により表される命令および/またはデータを格納することができる。
【0031】
プロセッサバス110およびメモリ120には、システム論理チップ116が連結される。例示されている実施形態におけるシステム論理チップ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に連結される。
【0032】
システム100は、MCH116をI/Oコントローラハブ(ICH)130に連結するために専用ハブインタフェースバス122を利用する。ICH130は、一部のI/OデバイスへのローカルI/Oバスを介した直接接続を提供する。ローカルI/Oバスは、周辺機器をメモリ120、チップセット、およびプロセッサ102に接続するための高速I/Oバスである。数例には、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線トランシーバ126、データストレージ124、ユーザ入力およびキーボードインタフェームを含むレガシーI/Oコントローラ、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、およびネットワークコントローラ134が含まれる。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、その他の大容量格納デバイスを含んでよい。
【0033】
システムの別の実施形態では、一実施形態による命令をシステムオンチップとともに利用することができる。システムオンチップの一実施形態には、プロセッサおよびメモリからなるものがある。このようなシステム用のメモリの一例はフラッシュメモリである。フラッシュメモリは、プロセッサおよびその他のシステムコンポーネントと同じダイに配置されてよい。加えて、他の論理ブロック(例えばメモリコントローラまたはグラフィックコントローラ等)を、システムオンチップに配置することもできる。
【0034】
図1Bは、本発明の一実施形態の原理を実装するデータ処理システム140を示す。当業者であればここに記載する実施形態を、本発明の範囲を逸脱することなく別の処理システムに応用することもできることを理解する。
【0035】
コンピュータシステム140は、一実施形態による少なくとも1つの命令を実行する機能を有する処理コア159を含む。一実施形態では、処理コア159は、任意の種類のアーキテクチャの処理ユニットを表す(これらに限られないが、CISC、RISC,またはVLIWアーキテクチャ等)。処理コア159は、1つ以上のプロセス技術での製造に適したものであってもよいし、十分な詳細を機械可読媒体に表すことにより、この製造を促すのに適したものであってもよい。
【0036】
処理コア159は、実行部142、レジスタファイルセット145、およびデコーダ144を含む。処理コア159は、さらに、本発明の実施形態の理解には不要な回路(不図示)も含んでいる。実行部142は、処理コア159が受信する命令を実行するのに利用される。通常のプロセッサ命令を実行することに加えて、実行部142は、パック命令セット143の命令を実行して、パックデータフォーマットに演算を行うことができる。パック命令セット143は、本発明の実施形態を実行する命令を含み、さらには他のパック命令を含むこともできる。実行部142は、内部バスによりレジスタファイル145に連結される。レジスタファイル145は、データを含む情報を格納する処理コア159上の格納領域を表す。前述したように、パックデータを格納するために利用する格納領域は必須ではない。実行部142はデコーダ144に連結される。デコーダ144は、処理コア159が受信した命令を、制御信号および/またはマイクロコードエントリポイントにデコードするために利用される。これらの制御信号および/またはマイクロコードエントリポイントに呼応して、実行部142は適切な処理を行う。一実施形態では、デコーダは命令のオペコードを解釈するために使用されており、その命令は、命令内において示された対応するデータに対してどんな処理がなされるべきか示している。
【0037】
処理コア159は、様々な他のシステムデバイスと通信するバス141に連結されており、これには、これらに限定はされないが、SDRAMコントロール146、SRAMコントロール147、バーストフラッシュメモリインタフェース148、PCMCIA(personal computer memory card international association)/コンパクトフラッシュ(登録商標)(CF)カードコントロール149、液晶ディスプレイ(LCD)コントロール150、直接メモリアクセス(DMA)コントローラ151、代用バスマスターインタフェース152が含まれる。一実施形態では、データ処理システム140はさらに、I/Oバス153経由で様々なI/Oデバイスと通信するI/Oブリッジ154を含んでよい。このI/Oデバイスは、これらに限定はされないが、UART(universal asynchronous receiver/transmitter)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、およびI/O拡張インタフェース158をさらに含んでよい。
【0038】
データ処理システム140の一実施形態は、モバイル、ネットワークおよび/または無線通信を提供し、文字列比較演算を含むSIMD演算を実行する機能を有する処理コア159を提供する。処理コア159は、様々な音声、ビデオ、画像および通信アルゴリズム(例えば、ウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、およびそれらのそれぞれの逆変換などの離散変換、色空間変換等の圧縮/伸張技術、ビデオ符号化動き推定またはビデオ復号動き補償、およびパルス符号変調(PCM)等の変復調(MODEM)機能)でプログラミングされてよい。
【0039】
図1Cは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を実行可能なデータ処理システムのまた別の実施形態を示す。別の実施形態において、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、および入出力システム168を含んでよい。入出力システム168は、必須ではないが、無線インタフェース169に連結されてもよい。SIMDコプロセッサ161は、一実施形態による命令を含む動作を行うことができる。処理コア170は、1つ以上のプロセス技術での製造に適したものであってもよいし、十分な詳細を機械可読媒体に表すことにより、処理コア170を含むデータ処理システム160の全てまたは一部の製造を促すのに適したものであってもよい。
【0040】
一実施形態では、SIMDコプロセッサ161は、実行部162とレジスタファイルセット164とを含む。メインプロセッサ166の一実施形態は、実行部162によって実行される一実施形態による命令を含む命令セット163の中の命令を認識するデコーダ165を含む。別の実施形態では、SIMDコプロセッサ161はさらに、命令セット163内の命令をデコードするデコーダ165Bの少なくとも一部を含む。処理コア170はさらに、本発明の理解には不要な回路(不図示)も含んでいる。
【0041】
動作において、メインプロセッサ166は、キャッシュメモリ167および入出力システム168との相互作用を含む一般的な種類のデータ処理を制御するデータ処理命令ストリームを実行する。データ処理命令ストリームにはSIMDコプロセッサ命令が埋め込まれている。メインプロセッサ166のデコーダ165は、これらSIMDコプロセッサ命令を、接続されているSIMDコプロセッサ161が実行すべき種類のものである認識する。従ってメインプロセッサ166は、コプロセッサバス171上にこれらのSIMDコプロセッサ命令(またはSIMDコプロセッサ命令を表す制御信号)を発行して、ここから任意の接続されているSIMDコプロセッサがこれら命令を受け取る。この場合、SIMDコプロセッサ161は、これをデスティネーションとする全ての受信されたSIMDコプロセッサ命令を受け付けて実行する。
【0042】
データは無線インタフェース169経由で受信され、SIMDコプロセッサ命令による処理に備えさせられる。一例としては、音声通信は、デジタル信号の形式で受け取られてよく、SIMDコプロセッサ命令の処理を受けて、音声通信を表すデジタルオーディオサンプルが再生される。別の例では、圧縮された音声および/またはビデオがデジタルビットストリームの形式で受信されてよく、これがSIMDコプロセッサ命令により処理されることで、デジタルオーディオサンプルおよび/または動きビデオフレームが再生されてよい。処理コア170の一実施形態では、メインプロセッサ166およびSIMDコプロセッサ161は、実行部162、レジスタファイルセット164、および一実施形態による命令を含む命令セット163の命令を認識するデコーダ165を含む単一の処理コア170に統合される。
【0043】
図2は、本発明の一実施形態による命令を実行する論理回路を含むプロセッサ200のマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、単精度整数データタイプ、倍精度整数データタイプ、浮動小数点データタイプなどのデータタイプと同様に、バイト、ワード、ダブルワード、クワドワード等のサイズを有するデータエレメント上に動作するように実装してもよい。一実施形態では、正常のフロントエンド201は、実行する命令をフェッチしてきて、プロセッサパイプラインでの利用に備えさせるプロセッサ200の一部である。フロントエンド201は、幾つかのユニットを含んでよい。一実施形態では、命令プリフェッチャ226が、メモリから命令をフェッチして、命令デコーダ228に供給して、命令デコーダ228がこれらをデコード又は解釈する。機械が実行できるマイクロ命令またはマイクロオペレーション(マイクロオプまたはuオプと称されることもある)と称される1以上の操作に、デコーダは受け取った命令をデコードする。他の実施形態では、デコーダは命令を、オペコードと対応するデータと、一実施形態による操作を行うマイクロアーキテクチャによって使用される制御フィールドにパースする。一実施形態では、トレースキャッシュ230は、デコードされたuオプをとり、これらを、uオプキュー234のプログラムが命ずるシーケンスまたはトレースに、実行用にアセンブルする。トレースキャッシュ230が複合マイクロ命令を発見すると、マイクロコードROM232は、演算を完了させるのに必要なuオプを提供する。
【0044】
いくつかの命令が、単一のマイクロオプに変換され、その他の命令は、演算全体を完了させるのに幾つかのマイクロオプを必要とする。一実施形態では、4つを超える数のマイクロオプが命令の完了に必要な場合、デコーダ228はマイクロコードROM232にアクセスして、その命令を実行する。一実施形態では、命令を少数のマイクロオプにデコードして、命令デコーダ228での処理に備えさせる。別の実施形態では、処理を実行するのに幾つかの数のマイクロオプが必要な場合に、命令をマイクロコードROM232内に格納することができる。トレースキャッシュ230は、エントリポイントのプログラマブル論理アレイ(PLA)を参照して、マイクロコードROM232から一実施形態による1つ以上の命令を完了させるマイクロコードシーケンスを読み出す正確なマイクロ命令ポインタを決定する。マイクロコードROM232が命令のマイクロオプの順序付けを終了すると、マシンのフロントエンド201が、トレースキャッシュ230からのマイクロオプのフェッチを再開する。
【0045】
アウトオブオーダー実行エンジン203では、命令を実行に備えさせる。アウトオブオーダー実行論理は、命令のフローの平滑化および順序のつけ直しを行い、パイプラインを流れるときの性能を最適化して、実行に備えさせるためにいくつかのバッファを持つ。アロケータ論理は、各uオプが実行する際に必要とするマシンバッファおよびリソースを割り当てる。レジスタのリネーム論理は、論理レジスタをレジスタファイルのエントリへとリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ202、遅い/汎用の浮動少数点スケジューラ204、および簡易浮動少数点スケジューラ206の前に、各uオプのエントリを2つのuオプキューのどちらかに対して、1つをメモリ処理に、1つを非メモリ処理に、という具合に割り当てる。uオプスケジューラ202、204、206は、従属入力レジスタオペランドソースが準備できているか、および、uオプが処理を完了するために必要な実行リソースの利用可能性に基づいて、uオプが準備できているかを判断する。本実施形態の高速スケジューラ202は、メインクロックサイクルの各半分にスケジュールを行うが、他のスケジューラは、各メインプロセッサのクロックサイクルごとに一度しかスケジュールを行うことができない。スケジューラは、実行するuオプをスケジュールするべく発送ポート間を調整する。
【0046】
レジスタファイル208、210は、スケジューラ202、204、206、および、実行部212、214、216、218、220、222、224の間に存在している(実行ブロック211)。整数および浮動少数点演算のためにそれぞれ別個のレジスタファイル208、210が存在している。本実施形態の各レジスタファイル208、210は、さらに、今完成したばかりで、まだレジスタファイルに書き込まれていない結果を、新たな依存uオプにバイパスまたは転送することのできるバイパスネットワークを含む。整数レジスタファイル208および浮動少数点レジスタファイル210は、さらに互いにデータを通信する機能を有する。一実施形態では、整数レジスタファイル208は、2つの別個のレジスタファイル(一方のレジスタファイルが、下位32ビットのデータ用であり、他方のレジスタファイルが、上位32ビットのデータ用である)に分割される。浮動少数点命令は通常64ビット幅から128ビット幅であるので、一実施形態の浮動少数点レジスタファイル210は、128ビット幅のエントリを有する。
【0047】
実行ブロック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は、マイクロオプの除算、平方根、および余りを求める、64ビット×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ビット幅のパックデータオペランドに演算を行うことができる。
【0048】
一実施形態において、親ロードが実行を終了する前に、uオプスケジューラ202、204、206は依存演算をディスパッチする。uオプが推論的にスケジューリングがなされ、プロセッサ200において実行されるため、プロセッサ200も同様にメモリミスを処理する論理を含む。データキャッシュにおいてデータロードのミスが発生した場合は、スケジューラに対して一時的に不正確なデータを残す依存演算がパイプラインに存在することがある。再生メカニズムは、不正確なデータを使用した命令を追跡して再実行する。依存演算のみが再生を必要としており、独立演算は完了できる。プロセッサの一実施形態のスケジューラおよび再生メカニズムは、さらに、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令をキャッチするように設計されている。
【0049】
「レジスタ」という用語は、ここでは、オペランドを特定する命令の一部として利用されるオンボードのプロセッサ格納位置を示すために利用される。つまり、ここで利用されるレジスタは、プロセッサ外から見ることができるもののことである(例えばプログラマから見えるもののことである)。しかし、一実施形態のレジスタの意味は、特定の種類の回路に限定されない。一実施形態におけるレジスタは、データの格納および提供が可能であり、且つ、ここで記載する機能を行うことができる、ということのみを要件としている。ここで記載するレジスタは、任意の数の様々な技術を利用してプロセッサ内の回路により実装可能である(例えば、専用物理レジスタ、レジスタリネーミング機能を利用して動的に割り当てられた物理レジスタ、専用レジスタと動的に割り当てられた物理レジスタの組み合わせ等)。一実施形態では、整数レジスタは32ビットの整数データを格納する。一実施形態のレジスタファイルはさらに、8個のマルチメディアSIMDレジスタを、パックデータ用に含む。以下の説明では、レジスタは、カリフォルニア州サンタクララのIntel Corporationから入手可能なMMX(商標)技術で可能となるマイクロプロセッサ内の64ビット幅のMMX(商標)レジスタ(「mm」レジスタと称される場合もある)等の、パックデータを保持するよう設計されるデータレジスタとして理解される。これらMMXレジスタは、整数および浮動少数点の形態で利用することができ、SIMDおよびSSE命令に付随するパックデータエレメントで処理することができる。同様に、SSE2、SSE3、SSE4、またはこれらを超える(一般的に「SSEx」と称される)技術に関する128ビット幅のXMMレジスタも、これらパックデータオペランドを保持するために利用することができる。本実施形態では、パックデータおよび整数データを格納する際に、レジスタは、2つのデータタイプを区別する必要がない。一実施形態では、整数及び浮動小数点は同じレジスタファイルに含まれていてもよいし、違うレジスタファイルに含まれていてもよい。さらに、一実施形態では、浮動小数点及び整数データが違うレジスタに格納されていてもよいし、同じレジスタに格納されていてもよい。
【0050】
以下の図の例では、複数のデータオペランドが記載されている。
図3Aは、本発明の一実施形態におけるマルチメディアレジスタにおける様々なタイプのパックデータの表現を示す。
図3Aは、128ビット幅のオペランドについて、パックバイト310、パックワード320、および、パックダブルワード(dword)330のデータタイプを示す。この例のパックバイトのフォーマット310は、128ビットの長さを有し、16個のパックバイトのデータエレメントを含む。1バイトは、8ビットのデータとして定義されている。各バイトデータエレメントの情報は、ビット7からビット0までをバイト0として、ビット15からビット8までをバイト1として、ビット23からビット16までをバイト2として、最後にビット120からビット127までをバイト15として、といった具合に格納される。このようにして全ての利用可能なビットをレジスタで利用することができる。この格納構成によって、プロセッサの格納効率が上がる。また、16個のデータエレメントにアクセスするとき、1つの処理を16個のデータエレメントに対して並列に実行することもできる。
【0051】
一般的に、1データエレメントは、同じ長さの他のデータエレメントとともに単一のレジスタまたはメモリ位置に格納されている個々のデータのことである。SSEx技術に関するパックデータシーケンスでは、XMMレジスタに格納されているデータエレメント数は、128ビットを個々のデータエレメントのビット長で除算した値である。同様に、MMXおよびSSE技術に関するパックデータシーケンスでは、MMXレジスタに格納されているデータエレメントの数は、64ビットを個々のデータエレメントのビット長で除算した値である。
図3Aに示されているデータのタイプは128ビット長であるが、本発明の実施形態は、64ビット幅であっても、256ビット幅であっても、512ビット幅であっても、他のサイズのオペランドであっても処理することができる。この例のパックワードフォーマット320は128ビット長であり、8つのパックワードデータエレメントを含む。各パックワードは、16ビットの情報を含む。
図3Aのパックダブルワードフォーマット330は、128ビット長であり、4つのパックダブルワードデータエレメントを含む。各パックダブルワードデータエレメントは、32ビットの情報を含む。パッククワドワードは128ビット長であり、2つのパッククワドワードのデータエレメントを含む。
【0052】
図3Bは、別のレジスタ内のデータ格納フォーマットを示す。各パックデータは、1を超える数の独立データエレメントを含んでよい。パックハーフ341、パックシングル342、およびパックダブル343という、3つのパックデータフォーマットが記載されている。パックハーフ341、パックシングル342、およびパックダブル343の一実施形態は、固定少数点データエレメントを含む。別の実施形態では、パックハーフ341、パックシングル342、およびパックダブル343の1以上が、浮動少数点データエレメントを含む。パックハーフ341の別の実施形態は、16ビットのデータエレメントを8つ含む128ビット長である。パックシングル342の一実施形態は、128ビット長であり、32ビットのデータエレメントを4つ含む。パックダブル343の一実施形態は、128ビット長であり、64ビットのデータエレメントを2つ含む。これらパックデータフォーマットは、さらに、他のレジスタ長(例えば96ビット、160ビット、192ビット、224ビット、256ビット、あるいは512ビット以上のビット)に拡張することもできる。
【0053】
図3Cは、本発明の一実施形態におけるマルチメディアレジスタの、様々な符号付き、および、符号なしのタイプのパックデータ表現を示す。符号なしパックバイト表現344は、SIMDレジスタに符号なしパックバイトが格納されていることを示している。各バイトデータエレメントの情報は、ビット7からビット0までをバイト0として、ビット15からビット8までをバイト1として、ビット23からビット16までをバイト2として、最後に、ビット120からビット127までをバイト15として、といった具合に格納される。このようにすることで、全ての利用可能なビットをレジスタで利用することができる。この格納構成によって、プロセッサの格納効率が上がる。さらにこの構成では、16個のデータエレメントにアクセスするとき、1つの処理を16個のデータエレメントに対して並列に実行することもできる。符号付きパックデータ表現345は、符号付パックバイトの格納状態を示している。各バイトデータエレメントの8つ目のビットは、符号インジケータである。符号なしパックワード表現346は、ワード7からワード0までがどのようにSIMDレジスタに格納されているかを示している。符号付きパックワード表現347は、符号なしパックワードのレジスタ内の表現346に類似している。各ワードデータエレメントの16個目のビットは、符号インジケータである。符号なしパックダブルワード表現348は、ダブルワードデータエレメントがどのように格納されているかを示している。符号付きパックダブルワード表現349は、符号なしパックダブルワードのレジスタ内の表現348に類似している。必要な符号ビットは、各ダブルワードデータエレメントの32個目のビットである。
【0054】
図3Dは、演算符号(オペコード)フォーマット360の一実施形態を示しており、32以上のビットを有し、レジスタ/メモリオペランドアドレスモードが「Intel(登録商標)64 and IA−32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B:Instruction Set Reference A−Z」に記載されているオペコードフォーマットの種類に対応しており、この文献は、カリフォルニア州のサンタクララのIntel Corporationが発行しており、www.intel.com/products/processor/manuals/から入手可能である。一実施形態では、命令は、フィールド361および362の1以上で符号化されてよい。各命令について、2つまでのオペランド位置(2つのソースオペランド識別子364および365までを含む)を特定する。一実施形態では、デスティネーションオペランド識別子366は、ソースオペランド識別子364と等しいが、他の実施形態では異なっていてもよい。別の実施形態では、デスティネーションオペランド識別子366は、ソースオペランド識別子365と等しいが、他の実施形態では異なっていてもよい。一実施形態では、ソースオペランド識別子364および365が特定するソースオペランドのいずれかを、命令の結果で上書きし、他の実施形態では、識別子364がソースレジスタエレメントに対応しており、識別子365がデスティネーションレジスタエレメントに対応している。一実施形態では、オペランド識別子364および365を利用して、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを特定する。
【0055】
図3Eは、40以上のビットを有する別の演算符号(オペコード)フォーマット370を示す。オペコードフォーマット370は、オペコードフォーマット360に対応しており、オプションのプレフィックスバイト378を含む。一実施形態による命令は、フィールド378、371、および372の1以上で符号化されてよい。ソースオペランド識別子374および375により、および、プレフィックスバイト378により、各命令についてオペランド位置を2つまで特定することができる。一実施形態では、プレフィックスバイト378を利用して、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを特定する。一実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子374と等しいが、他の実施形態では異なっていてもよい。別の実施形態では、デスティネーションオペランド識別子376は、ソースオペランド識別子375と等しいが、他の実施形態では異なっていてもよい。一実施形態では、命令はオペランド識別子374および375が特定するオペランドの1つ以上に対して動作し、オペランド識別子374および375が特定する1つ以上のオペランドを、命令の結果で上書きするが、他の実施形態では、識別子374および375が特定するオペランドは、別のレジスタの別のデータエレメントに書き込まれる。オペコードフォーマット360および370は、レジスタからレジスタへ、メモリからレジスタへ、メモリによりレジスタへ、レジスタによりレジスタへ、即値よりレジスタへ、レジスタから、MODフィールド363および373により部分的に、およびオプションとしてスケールインデックスベースおよび変位バイトにより特定されるメモリアドレスへ、といった書き込みを許可する。
【0056】
次に
図3Fを参照すると、一部の別の実施形態では、64ビット(又は128ビット、256ビット、又は512ビット以上)の単一命令多重データ(SIMD)算術演算を、コプロセッサデータ処理(CDP)命令により行ってよい。演算符号(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有するこのようなCDP命令を示す。代替の実施形態において、この種類のCDP命令操作は、フィールド383、384、387、および388の1つ以上により符号化されてよい。各命令について、2つまでのソースオペランド識別子385および390、並びに、1つのデスティネーションオペランド識別子386を含む、3つまでのオペランド位置を特定する。コプロセッサの一実施形態は、8、16、32、および64ビットの値に演算を行うことができる。一実施形態では、命令を、整数データエレメントに行う。いくつかの実施形態では、命令は、条件フィールド381を利用して条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズはフィールド383により符号化されてよい。いくつかの実施形態では、ゼロ(Z)、負(N)、繰上げ(carry)(C)、およびオーバフロー(V)検知をSIMDフィールドに対して行う。一部の命令では、飽和のタイプをフィールド384で符号化することもできる。
【0057】
次に
図3Gを参照すると、別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する他の代替の演算符号(オペコード)フォーマット397を示し、Intel(登録商標)Advanced Vector Extensions Programming Reference」に記載されているオペコードフォーマットの種類に対応しており、この文献は、カリフォルニア州のサンタクララのIntel Corporationが発行しており、www.intel.com/products/processor/manuals/から入手可能である。
【0058】
元のx86命令セットは1バイトのオペコードに対して設けられ、追加のバイトにはアドレスシラブルおよび即値オペランドの様々なフォーマットが含まれ、その存在は最初の「オペコード」バイトからわかる。さらに、オペコードに対する修飾子として確保された特定のバイト値があった(これは命令の前に配置される必要があったため、「接頭辞」と呼ばれる)。256オペコードバイトの元のパレット(それらの専用の接頭辞値を含む)を使い果たすと、単一のバイトは256オペコードの新規のセットに対するエスケープ専用となった。ベクトル命令(例えばSIMD)が追加されると、より多くのオペコードが必要となり、接頭辞の使用によって拡張された場合でも、「2バイト」のオペコードマップは不十分となった。そのため、2バイトに任意の接頭辞を識別子として追加したものを使用する新規命令が追加のマップに追加された。
【0059】
さらに、64ビットモードの追加のレジスタを促進するために、接頭辞とオペコード(とオペコードを決定するために必要な任意のエスケープバイト)の間に追加の接頭辞(「REXと呼ぶ)を使用してもよい。一実施形態において、REXは64ビットモードの追加のレジスタの使用を示す4「ペイロード」ビットを有してもよい。他の実施形態において、4ビットよりも少なくても多くてもよい。少なくとも1つ命令セットの一般的なフォーマット(フォーマット360および/またはフォーマット370に対応)を以下に汎用的に示す。
[prefixes] [rex] escape [escape2] opcode modrm(等)
【0060】
オペコードフォーマット397はオペコードフォーマット370と同一であり、他の共通で使用されたレガシー命令接頭辞バイトおよびエスケープコードの大部分を置き換えるための任意のVEX接頭辞バイト391(一実施形態において16進法のC4で始まる)を含む。例えば、以下は2つのフィールドを使用して命令をエンコードする実施形態を示す。これは、第2のエスケープ符号が元の命令中に存在する場合、またはREXフィールド(例えばXBおよびWフィールド)内の余分なビットの使用が必要となった場合に使用されてもよい。以下に示す実施形態において、レガシーエスケープは新たなエスケープ値によって表わされ、レガシー接頭辞は「ペイロード」バイトの一部として全体的に圧縮され、レガシー接頭辞はリクレイムされ以後の拡張の際に利用可能となり、第2のエスケープ符号は「マップフィールド内において圧縮され、機能マップまたは特徴空間が利用可能となり、新たな特徴(例えば、増加したベクトルの長さおよび追加のソースレジスタ修飾子)が追加される。
【数1】
【0061】
一実施形態による命令は、フィールド391および392の1つ以上によってエンコードされてもよい。ソースオペランド識別子374および375との組み合わせ、および任意のscale−index−base(SIB)識別子393、任意の置換識別子394、および任意の即値バイト395との組み合わせにおいて、フィールド391によって命令毎に4つのオペランド位置まで識別可能である。一実施形態において、VEX接頭辞バイト391は、32ビットまたは64ビットのソースおよびデスティネーションオペランドおよび/または128ビットまたは256ビットのSIMDレジスタまたはメモリオペランドを識別するために使用されてもよい。一実施形態において、オペコードフォーマット397によって提供される機能は、オペコードフォーマット370と重複する場合があるが、別の実施形態においてそれらは異なる。オペコードフォーマット370および397によって、レジスタからレジスタへ、メモリからレジスタへ、レジスタをメモリに、レジスタをレジスタに、レジスタを即値に、レジスタからMODフィールド373によって部分的に特定されたメモリアドレスへ、および任意の(SIB)識別子393、任意の置換識別子394、および任意の即値バイト395にすることが可能となる。
【0062】
次に
図3Hを参照すると、別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する他の代替の演算符号(オペコード)フォーマット398を示す。オペコードフォーマット398はオペコードフォーマット370および397と同一であり、他の共通で使用されたレガシー命令接頭辞バイトおよびエスケープコードの大部分を置き換えて追加の機能を提供するための任意のEVEX接頭辞バイト396(一実施形態において16進法の62で始まる)を含む。一実施形態による命令は、フィールド396および392の1つ以上によってエンコードされてもよい。ソースオペランド識別子374および375との組み合わせ、および任意のscale−index−base(SIB)識別子393、任意の置換識別子394、および任意の即値バイト395との組み合わせにおいて、フィールド396によって命令毎に4つまでのオペランド位置とマスクとが識別可能である。一実施形態において、EVEX接頭辞バイト396は、32ビットまたは64ビットのソースおよびデスティネーションオペランドおよび/または128ビット、256ビットまたは512ビットのSIMDレジスタまたはメモリオペランドを識別するために使用されてもよい。一実施形態において、オペコードフォーマット398によって提供される機能はオペコードフォーマット370または397と重複する場合があるが、別の実施形態においてそれらは異なる。オペコードフォーマット398によって、レジスタからレジスタへ、メモリからレジスタへ、レジスタをメモリに、レジスタをレジスタに、レジスタを即値に、レジスタからマスクとともにMODフィールド373によって部分的に特定されたメモリアドレスへ、および任意の(SIB)識別子393、任意の置換識別子394、および任意の即値バイト395にすることが可能となる。少なくとも1つ命令セットの一般的なフォーマット(フォーマット360および/またはフォーマット370に対応)を以下に汎用的に示す。
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]
【0063】
一実施形態において、EVEXフォーマット398によってエンコードされた命令は、例えば、ユーザが構成可能なマスクレジスタ、または追加のオペランド、または128ビット、256ビットまたは512ビットのベクトルレジスタから選択されたもの、または数の増えた選択対象のレジスタなど、追加の新規特徴とともに複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用可能な追加の「ペイロード」ビットを有してもよい。
【0064】
例えば、implicit maskとともに複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するためにVEXフォーマット397が使用可能な場合、EVEXフォーマット398はexplicitユーザが構成可能なマスクとともに複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用されてもよい。さらに、VEXフォーマット397が128ビットまたは256ビットのベクトルレジスタ上の複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用可能な場合、EVEXフォーマット398は、128ビット、256ビット、512ビット以上(または未満)のベクトルレジスタ上の複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用可能である。
【0065】
複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するための融合可能な命令例を以下の例によって示す。
【0067】
上記の例にあるように、複数のテストソースに対して論理和テストおよび/または論理積テスト機能を提供する融合可能な命令および論理を使用することによって、例えば動的かつ弱く型付けされる場合のある、JavaScript(登録商標)、JScriptまたはECMAスクリプトなどの1つ以上のインタプリタ形式のコンピュータプログラミング言語に対するサポートしオブジェクト指向の命令的かつ機能的なプログラミングスタイルをサポートしてもよいJITコンパイラによって作成されるタイプテスト命令イディオムを頻繁に実行することに関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【0068】
図4Aは、本発明の少なくとも1つの実施形態によるインオーダーパイプラインおよびレジスタリネームステージ、アウトオブオーダー問題/実行パイプラインを図示するブロック図である。
図4Bは、本発明の少なくとも1つの実施形態によるプロセッサに含まれるインオーダーアーキテクチャコアおよびレジスタリネーム論理、アウトオブオーダー問題/実行論理を図示するブロック図である。
図4Aの実線の四角は、インオーダーパイプラインを示し、点線の四角はレジスタリネーム、アウトオブオーダー問題/実行パイプラインを示す。同様に、
図4Bの実線の四角は、インオーダーアーキテクチャ論理を示し、点線の四角はレジスタリネーム論理およびアウトオブオーダー問題/実行論理を示す。
【0069】
図4Aにおいて、プロセッサパイプライン400は、フェッチステージ402、長デコードステージ404、デコードステージ406、割付けステージ408、リネームステージ410、スケジューリング(ディスパッチまたは発行として知られる)ステージ412、レジスタ読込/メモリ読込ステージ414、実行ステージ416、ライトバック/メモリライトステージ418、例外処理ステージ422、およびコミットステージ424を含む。
【0070】
図4Bにおいて、矢印は2つ以上のユニット間の接続を示し、矢印の方向は、それらのユニット間のデータフローの方向を示す。
図4Bは、実行エンジン部450に接続されたフロントエンド部430を含むプロセッサコア490を示す。この場合、フロントエンド部430および実行エンジン部450はともにメモリ部470に接続される。
【0071】
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、または混合または代替のコアタイプでもよい。さらに別の選択肢として、コア490は例えばネットワークまたは通信コア、圧縮エンジン、グラフィックスコアなどの特殊用途のコアでもよい。
【0072】
フロントエンド部430は、命令キャッシュ部434に接続された分岐プレディクション部432を含む。命令キャッシュ部434は命令トランスレーションルックアサイドバッファ(TLB)436に接続され、命令トランスレーションルックアサイドバッファ(TLB)436は命令フェッチ部438に接続され、命令フェッチ部438はデコード部440に接続される。デコード部またはデコーダは命令をデコードし、出力として1つ以上のマイクロ操作、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を作成する。これらは元の命令からデコードされる、または元の命令を反映する、もしくは元の命令から導出される。デコーダは、様々な異なる機構を使用して実現されてもよい。適した機構の例は、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA)、マイクロコード読込専用メモリ(ROM)等を含むが、それに限らない。命令キャッシュ部434は、さらに、メモリ部470のレベル2(L2)キャッシュ部476に接続される。デコード部440は、実行エンジン部450のリネーム/アロケータ部452に接続される。
【0073】
実行エンジン部450は、リタイアメント部454に接続されたリネーム/アロケータ部452と、1つ以上のスケジューラ部456の組とを含む。スケジューラ部456は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表すものである。スケジューラ部456は、物理レジスタファイル部458に接続される。物理レジスタファイル部458のそれぞれは1つ以上の物理レジスタファイルを表し、それぞれは、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス(例えば次に実行される命令のアドレスである命令ポインタ)等の1つ以上の異なるデータタイプを格納する。物理レジスタファイル部458は、レジスタリネーミングおよびアウトオブオーダー実行が実行される様々な方法(例えば、リオーダーバッファおよびリタイアメントレジスタファイルを使用、フューチャファイル、ヒストリバッファ、およびリタイアメントレジスタファイルを使用、レジスタマップおよびレジスタのプールを使用等)を図示するためにリタイアメント部454と重なっている。一般に、アーキテクチャ上のレジスタはプロセッサの外部またはプログラマの観点から可視である。そのようなレジスタは、既知の特定の種類の回路に限定されない。本明細書で説明するようにデータ格納および提供が可能な限り、様々な異なる種類のレジスタが適する。適したレジスタの例は、専用物理レジスタ、レジスタリネーミングを使用する動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等を含むが、それに限定されない。リタイアメント部454および物理レジスタファイル部458は、実行クラスタ460に接続される。実行クラスタ460は、1つ以上の実行部462の組と、1つ以上のメモリアクセス部464の組を含む。実行部462は、様々な種類のデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等)に対して様々な演算(例えば、シフト、加算、減算、乗算)を実行してもよい。いくつかの実施形態は特定の機能または機能の組に専用の実行ユニットを多数含んでもよいが、他の実施形態は全機能をすべてが実行する1つの実行ユニットまたは複数の実行ユニットを含んでもよい。特定の実施形態は特定の種類のデータ/演算に対して個別のパイプラインを作成するため、スケジューラ部456、物理レジスタファイル部458、および実行クラスタ460は複数の可能性があるように示されている(例えば、それぞれがそれ自体のスケジューラ部、物理レジスタファイル部および/または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン。個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセス部464を有する特定の実施形態が実現される)。なお、個別のパイプラインが使用される場合、そのようなパイプラインの1つ以上はアウトオブオーダー問題/実行でもよく、残りはインオーダーでもよい。
【0074】
メモリアクセス部464の組は、メモリ部470に接続される。メモリ部470は、データキャッシュ部474に接続されるデータTLB部472を含み、データキャッシュ部474はレベル2(L2)キャッシュ部476に接続される。一実施例において、メモリアクセス部464はロード部、アドレス記憶部、データ記憶部を含んでもよく、それぞれはメモリ部470のデータTLB部472に接続される。L2キャッシュ部476は、1つ以上の他のレベルのキャッシュに接続され、最終的に主メモリに接続される。
【0075】
例として、レジスタリネーミング、アウトオブオーダー問題/実行コアアーキテクチャの一例は、以下のパイプライン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を実行する。
【0076】
コア490は、1つ以上の命令セットに対応してもよい(例えば、x86命令セット(新しいバージョンではいくつかの拡張版が追加された)、カリフォルニア州SunnyvaleのMIPS TechnologiesのMIPS命令セット、カリフォルニア州SunnyvaleのARM HoldingsのARM命令セット(NEONなど、オプション追加の拡張版がある)など)。
【0077】
なお、コアはマルチスレッディング(演算またはスレッドの2つ以上の並列組の実行)をサポートしてもよく、時間切りマルチスレッディング、同時マルチスレッディング(単一の物理コアは、物理コアが同時マルチスレッディングを実行するスレッドのそれぞれに対して論理コアを設ける)、またはその組み合わせ(例えば、IntelR(登録商標)Hyperthreading技術でも見られる、時間切りフェッチおよびデコード後に同時マルチスレッディングなど)を含む様々な方法で実行されてもよい。
【0078】
なお、レジスタリネームはアウトオブオーダー実行のコンテキストで説明されているが、レジスタリネームはインオーダーアーキテクチャにおいて使用されてもよい。プロセッサの実施例は、さらに、個別の命令およびデータキャッシュ部434/474および共有L2キャッシュ部476を含むが、代替実施形態は、例えば、レベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方に対して単一の内部キャッシュを有してもよい。いくつかの実施形態において、本システムは内部キャッシュと、コアおよび/またはプロセッサの外部のキャッシュとの組み合わせを含んでもよい。もしくは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
【0079】
図5は、本発明の実施形態による、単一コアプロセッサおよびマルチコアプロセッサ500のブロック図で、メモリコントローラおよびグラフィックスが一体となっている。
図5の実線の四角は単一コア502Aを有するプロセッサ500、システムエージェント510、1つ以上のバスコントローラ部516の組を示し、任意で追加され点線の四角は、複数のコア502A〜Nを有する代替のプロセッサ500、システムエージェント部510内の1つ以上の統合メモリコントローラ部514の組、および統合グラフィックス論理508を表わす。
【0080】
メモリ階層は、コア内に1つ以上のレベルのキャッシュと、1つ以上の共有キャッシュ部506の組と、統合メモリコントローラ部514の組に接続された外部メモリ(不図示)とを含む。共有キャッシュ部506の組は、レベル2(L2)、レベル3(L3)、レベル4(L4)、またはその他のレベルのキャッシュなどの1つ以上の中間レベルキャッシュと、ラストレベルキャッシュ(LLC)と、および/またはその組み合わせとを含んでもよい。一実施形態において、環状相互接続部512は、統合グラフィックス論理508と、共有キャッシュ部506の組と、システムエージェント部510と相互接続するが、代替の実施形態はそのような処理部の相互接続に対して任意の数の周知技術を使用してもよい。
【0081】
いくつかの実施形態において、コア502A〜Nの1つ以上は、マルチスレッディングを実行可能である。システムエージェント510は、コア502A〜Nを調整して動作させるコンポーネントを含む。システムエージェント部510は、例えば出力調整装置(PCU)および表示部を含んでもよい。PCUは、コア502A〜Nおよび統合グラフィックス論理508の出力状態を調整するために必要な論理およびコンポーネントでもよく、またはそれらを含んでもよい。表示部は、1つ以上の外部接続ディスプレイを駆動するためのものである。
【0082】
コア502A〜Nはアーキテクチャおよび/または命令セットにおいて同種でも異種でもよい。例えば、コア502A〜Nのいくつかはインオーダーでもよく、残りはアウトオブオーダーでもよい。別の例として、コア502A〜Nの2つ以上は同じ命令セットを実行可能でもよく、残りは命令セットまたは異なる命令セットのサブセットのみを実行可能でもよい。
【0083】
プロセッサは、カリフォルニア州サンタクララのインテル社から入手可能なCore(商標)i3、i5、i7、2 DuoおよびQuad、Xeon(商標)、Itanium(商標)、XScale(商標)またはStrongARM(商標)プロセッサなどの汎用プロセッサでもよい。もしくは、ARM Holdings,Ltd、 MIPSなどの他社から入手可能なプロセッサでもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、埋込型プロセッサなどの特殊用途のプロセッサでもよい。プロセッサは、1つ以上のチップ上に実装されてもよい。プロセッサ500は例えば、BiCMOS、CMOS、またはNMOSなどの任意の数の処理技術を使用して1つ以上の基板の一部でもよく、および/または1つ以上の基板上に実装されてもよい。
【0084】
図6〜8は、プロセッサ500を備えるのに適したシステム例である。
図9はコア502の1つ以上を備えてもよいシステムオンチップ(SoC)例である。ノート型PC、デスクトップPC、ハンドヘルドPC、携帯用情報端末(PDA)、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、埋込型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックス装置、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤー、ハンドヘルド機器、その他の様々な電子装置に対する当業界において既知の他のシステム設計および構成も適している。一般に、本明細書で開示されているようなプロセッサおよび/または他の実行論理を取り入れることが可能な多種多様なシステムまたは電子装置が通常適している。
【0085】
図6は、本発明の一実施形態によるシステム600のブロック図である。システム600は、グラフィックスメモリコントローラハブ(GMCH)620と接続される1つ以上のプロセッサ610、615を含んでもよい。追加のプロセッサ615の任意の特性を
図6に点線で示す。
【0086】
各プロセッサ610、615は、プロセッサ500のいずれかのバージョンでもよい。ただし、統合グラフィックス論理および統合メモリ制御部はプロセッサ610、615に存在することはない。
図6は、GMCH620が、例えば、ダイナミックランダムアクセスメモリ(DRAM)でもよいメモリ640に接続されることが可能であることを示す。DRAMは、少なくとも1つの実施形態において、不揮発性キャッシュと関連付けられてもよい。
【0087】
GMCH620は、チップセット、またはチップセットの一部でもよい。GMCH620はプロセッサ610、615と通信して、プロセッサ610、615およびメモリ640とのインタラクションを制御してもよい。また、GMCH620は、システム600のプロセッサ610、615および他のエレメント間での高速バスインタフェースの役割を果たしてもよい。少なくとも一実施形態において、GMCH620は、フロントサイドバス(FSB)695などのマルチドロップバスを介してプロセッサ610、615と通信を行う。
【0088】
さらに、GMCH620はディスプレイ645(フラットパネルディスプレイなど)に接続される。GMCH620は、統合グラフィックスアクセラレータを含んでもよい。GMCH620は、さらに、入出力(I/O)コントローラハブ(ICH)650に接続されてもよい。入出力(I/O)コントローラハブ(ICH)650を使用して様々な周辺装置をシステム600に接続してもよい。外部グラフィックス装置660を
図6の実施形態に例示的に示す。外部グラフィックス装置660は、他の周辺装置670とともにICH650に接続される外付けグラフィックス装置でもよい。
【0089】
もしくは、追加のプロセッサまたは異なるプロセッサも同様にシステム600に存在してもよい。例えば、追加のプロセッサ615は、プロセッサ610と同じ追加のプロセッサ、プロセッサ610と異種または非対称の追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)部など)、フィールドプログラマブルゲートアレイ、または他のいずれかのプロセッサを含んでもよい。アーキテクチャ、マイクロアーキテクチャ、熱特性、消費電力特性などを含む利点の尺度範囲において、物理リソース610、615間には大幅な違いがあってもよい。そのような違いは、プロセッサ610、615間において非対称および異種であることを事実上明らかする場合がある。少なくとも一実施形態において、様々なプロセッサ610、615は同一のダイパッケージに常駐してもよい。
【0090】
図7は、本発明の一実施形態による第2のシステム700のブロック図を示す。
図7に示すように、マルチプロセッサシステム700は二点間相互接続システムであり、二点間相互接続750を介して接続される第1のプロセッサ770および第2のプロセッサ780を含む。プロセッサ770および780のそれぞれは、プロセッサ610、615の1つ以上のとしてプロセッサ500のいずれかのバージョンでもよい。
【0091】
2つのプロセッサ770、780のみを示すが、本発明の範囲はそれに限定されないことを理解されたい。他の実施形態において、1つ以上の追加のプロセッサは所与のプロセッサ内に存在してもよい。
【0092】
図示したプロセッサ770および780は、統合メモリコントローラ部772および782をそれぞれ含む。プロセッサ770は、さらに、二点間インタフェース776および778をバスコントローラ部の一部として含む。同様に、第2のプロセッサ780は二点間インタフェース786および788を含む。プロセッサ770、780は、二点間インタフェース回路778、788を使用して二点間インタフェース750を介して情報を交換してもよい。
図7に示すように、IMC772および782は各プロセッサをそれぞれのメモリ、すなわちメモリ732およびメモリ734に接続する。メモリ732およびメモリ734は、それぞれのプロセッサにローカルで取り付けられた主メモリの一部でもよい。
【0093】
プロセッサ770、780は、二点間インタフェース回路776、794、786、798を使用して、個々の二点間インタフェース752、754を介してチップセット790と情報を交換してもよい。チップセット790は、さらに、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738と情報を交換してもよい。
【0094】
共有キャッシュ(不図示)は、プロセッサが低電力モードにされると、プロセッサのローカルキャッシュ情報が共有キャッシュに格納されるようにするために、いずれかのプロセッサ内または二点間相互接続を介して各プロセッサと接続されながら両プロセッサの外部に含まれてもよい。
【0095】
チップセット790は、インタフェース796を介して第1のバス716に対して接続されてもよい。一実施形態において、第1のバス716は周辺構成要素相互接続(PCI)バスでもよく、またはPCI Express busなどのバスまたは他の第三世代の入出力相互接続バスでもよい。ただし、本発明の範囲はそれに限定されない。
【0096】
図7に示すように、様々な入出力装置714は、第1のバス716を第2のバス720に対して接続するバスブリッジ718とともに第1のバス716に対して接続されてもよい。一実施形態において、第2のバス720は、low pin count(LPC)バスでもよい。一実施形態において、例えば、キーボードおよび/またはマウス722、通信装置727、さらに命令/コードおよびデータ730を含むことが可能なディスクドライブや他の大容量記憶装置などの記憶部728を含む様々な装置が、第2のバス720に対して接続されてもよい。さらに、音声入出力724が、第2のバス720に接続されてもよい。なお、その他のアーキテクチャも可能である。
図7の二点間アーキテクチャの代わりに、例えば、システムがマルチドロップバスまたは他の同様のアーキテクチャを実現してもよい。
【0097】
図8は、本発明の一実施形態による第3のシステム800のブロック図を示す。
図7および
図8に示す同様のものには同様の参照番号を付し、
図8の他の態様を曖昧にすることを避けるため、
図7の特定の態様を
図8にて省略した。
【0098】
図8は、プロセッサ870、880がそれぞれ統合メモリおよび入出力制御論理(「CL」)872および882を含むことができることを図示する。少なくとも一実施形態において、CL872、882は、
図5および7と関連して上述したような統合メモリコントローラ部を含んでもよい。さらに、CL872、882は、入出力制御論理も含んでもよい。
図8は、メモリ832、834がCL872、882に対して接続されるだけでなく、入出力装置814も制御論理872、882に対して接続されることを示す。レガシー入出力装置815は、チップセット890に対して接続される。
【0099】
図9は、本発明の一実施形態によるSoC900のブロック図を示す。
図5と同様の要素には同様の参照番号を付す。また、点線の四角は先端SoCに関する任意の特徴である。
図9において、相互接続部902は、1つ以上のコア502A〜Nおよび共有キャッシュ部506の組を含むアプリケーションプロセッサ910と、システムエージェント部510と、バスコントローラ部516と、統合メモリコントローラ部514と、統合グラフィックス論理508、静止画および/または動画カメラ機能を提供する画像処理プロセッサ924、ハードウェアオーディオアクセラレーションを提供する音声プロセッサ926、ビデオエンコード/デコードアクセラレーションを提供する映像プロセッサ928を含んでもよい1つ以上のメディアプロセッサ920の組と、スタティックランダムアクセスメモリ(SRAM)部930と、ダイレクトメモリアクセス(DMA)部932と、1つ以上の外部ディスプレイに対して接続するための表示部940とに対して接続される。
【0100】
図10は、一実施形態による少なくとも1つ命令を実行する中央演算ユニット(CPU)およびグラフィックス演算ユニット(GPU)を含むプロセッサを図示する。一実施形態において少なくとも1つの実施形態による演算を実行する命令は、CPUによって実行されてもよい。別の実施形態において、そのような命令はGPUによって実行されてもよい。さらに別の実施形態において、そのような命令は、GPUおよびCPUによって実行された演算の組み合わせによって実行されてもよい。例えば、一実施形態において、一実施形態による命令は、GPU上で受信およびデコードされて、実行されてもよい。ただし、デコードされた命令内の1つ以上の演算はCPUによって実行されてもよく、その結果は、該命令の最終的なリタイアメントのためにGPUに対して返されてもよい。逆に、いくつかの実施形態において、CPUは主プロセッサとして動作し、GPUは補助プロセッサとして動作してもよい。
【0101】
いくつかの実施形態において、高並列スループットプロセッサの利点を利用する命令はGPUによって実行されてもよく、深くパイプライン化されたアーキテクチャの利点を利用するプロセッサの処理能力の利点を利用する命令はCPUによって実行されてもよい。例えば、グラフィックス、科学的アプリケーション、経済的アプリケーション、その他の並列ワークロードはGPUの処理能力の利点を利用して適宜実行されてもよく、オペレーティングシステムカーネルまたはアプリケーションコードなどの逐次的アプリケーションはCPUにより適している場合がある。
【0102】
図10において、プロセッサ1000は、CPU1005と、GPU1010と、画像処理プロセッサ1015と、映像プロセッサ1020と、USBコントローラ1025と、UARTコントローラ1030と、SPI/SDIOコントローラ1035と、表示装置1040と、高精細マルチメディアインタフェース(HDMI(登録商標))コントローラ1045と、MIPIコントローラ1050と、フラッシュメモリコントローラ1055と、デュアルデータレート(DDR)コントローラ1060と、セキュリティエンジン1065と、I
2S/I
2C(Integrated Interchip Sound/Inter−Integrated Circuit)インタフェース1070とを含む。より多くのCPUまたはGPUおよびその他の周辺インタフェースコントローラを含む他の論理および回路が
図10のプロセッサに含まれてもよい。
【0103】
少なくとも1つの実施形態の1つ以上の態様は、機械可読媒体上に記憶されプロセッサ内の様々な論理を表現する代表データによって実現されてもよく、機械によって読み込まれると、本明細書に記載の技術を実行する論理を機械に作成させる。そのような「IPコア」として知られる表現は有形の機械可読媒体(テープ)に記憶され、様々な顧客または製造設備に供給され、論理またはプロセッサを実際に作成する製造機械に対してロードされてもよい。例えば、ARM Holdings,Ltd.によって開発されたプロセッサのCortex(商標)ファミリ、Chinese Academy of SciencesのInstitute of Computing Technology (ICT)によって開発されたLoongson IPコアなどのIPコアは、権利化されてTexas Instruments、Qualcomm、Apple、またはSamsungなどの様々な顧客および実施権者に対して販売され、そのような顧客または実施権者によって製造されたプロセッサにおいて実現されてもよい。
【0104】
図11は、一実施形態によるIPコアの開発を図示するブロック図である。ストレージ1130は、シミュレーションソフトウェア1120および/またはハードウェアまたはソフトウェアモデル1110を含む。一実施形態において、IPコア設計を表わすデータを、メモリ1140(例えば、ハードディスク)、有線接続(例えばインターネット)1150または無線接続1160を介してストレージ1130に対して提供してもよい。シミュレーションツールおよびモデルによって作成されたIPコア情報は、製造設備に送られて、少なくとも1つの実施形態による少なくとも1つの命令を実行するように第三者によって製造されてもよい。
【0105】
いくつかの実施形態において1つ以上の命令は第1のタイプまたはアーキテクチャ(例えば、x86)に対応し、異なるタイプまたはアーキテクチャ(例えば、ARM)のプロセッサ上で翻訳またはエミュレートされてもよい。したがって、一実施形態による命令は、ARM、x86、MIPS、GPU、またはその他のプロセッサタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサタイプ上で実行されてもよい。
【0106】
図12は、一実施形態による第1のタイプの命令を異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。
図12において、プログラム1205は、一実施形態による命令と同一またはほぼ同一の機能を実行できるいくつかの命令を含む。ただし、プログラム1205の命令は、プロセッサ1215とは異なる、または互換性のないタイプおよび/またはフォーマットでもよい。すなわち、プログラム1205のタイプの命令は、プロセッサ1215によってネイティブで実行可能でなくてもよい。ただし、エミュレーション論理1210を使用して、プログラム1205の命令は、プロセッサ1215によってネイティブで実行可能な命令に翻訳される。一実施形態において、このエミュレーション論理はハードウェアで具現化される。別の実施形態において、このエミュレーション論理は、プログラム1205のタイプの命令をプロセッサ1215によってネイティブで実行可能なタイプに翻訳するソフトウェアを含む有形の機械可読媒体において具現化される。他の実施形態において、エミュレーション論理は、固定機能またはプログラミング可能なハードウェアと有形の機械可読媒体に記憶されたプログラムとの組み合わせである。一実施形態においてプロセッサはエミュレーション論理を含み、一方他の実施形態においてエミュレーション論理はプロセッサの外部に存在し、第三者によって提供される。一実施形態において、プロセッサは、プロセッサに含まれるまたはプロセッサと関連付けられたマイクロコードまたはファームウェアを実行することによって、ソフトウェアを含む有形の機械可読媒体において具現化されたエミュレーション論理をロードできる。
【0107】
図13は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を比較するブロック図である。図示した実施形態において、命令コンバータはソフトウェア命令コンバータである。ただし、代替として、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはその様々な組み合わせにおいて実現されてもよい。
図13は、上位言語1302のプログラムがx86コンパイラ1304を使用してコンパイルされて少なくとも1つのx86命令セットコア1316を有するプロセッサによってネイティブで実行可能なx86バイナリコード1306を作成できることを示す。少なくとも1つのx86命令セットコア1316を有するプロセッサは、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサとほぼ同じ結果を得られるように、(1)インテル社製x86命令セットコアの大部分の命令セットまたは(2)少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上での動作を目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換性のある状態を保って実行もしくは処理することによって少なくとも1つのx86命令セットコアを有するインテル社製プロセッサとほぼ同じ機能を実行できる任意のプロセッサを表わす。x86コンパイラ1304は、追加の連携処理を施して、もしくは施さずに、少なくとも1つのx86命令セットコア1316を有するプロセッサ上で実行することが可能なx86バイナリコード1306(例えばオブジェクトコードなど)を作成するように動作可能なコンパイラを表わす。同様に、
図13は、上位言語1302のプログラムが代替の命令セットコンパイラ1308を使用してコンパイルされて、少なくとも1つのx86命令セットコア1314(例えば、カリフォルニア州SunnyvaleのMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州SunnyvaleのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)を有さないプロセッサによってネイティブで実行可能な代替の命令セットバイナリコード1310を作成する。命令コンバータ1312は、x86バイナリコード1306をx86命令セットコア1314を有さないプロセッサによってネイティブで実行可能なコードに変換するために使用される。この変換されたコードは代替の命令セットバイナリコード1310と同じには簡単にはならない。これをできる命令コンバータは作成が難しいためである。ただし、変換されたコードは通常の演算を実現し、代替の命令セットからの命令からなることが可能である。したがって、命令コンバータ1312はエミュレーション、シミュレーションまたはその他の方法によって、ソフトウェア、ファームウェア、ハードウェア、またはその組み合わせを表わし、x86命令セットプロセッサまたはコアを有さないプロセッサまたはその他の電子装置がx86バイナリコード1306を実行できるようにする。
【0108】
図14は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合するプロセッサマイクロアーキテクチャの一代替実施形態の要素を示す。プロセッサマイクロアーキテクチャ1400の実施形態は、パイプライン400の一部またはコア490の一部(例えばフロントエンド部430および実行エンジン部450)でもよく、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を実行する。装置1400の実施形態はデコードステージ(例えばデコード406)またはデコーダ(例えばデコード部440)と接続可能で、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令、すなわち第1のソースデータオペランドと、第2のソースデータオペランドと、第3のソースデータオペランドと、演算タイプとを指定する命令をデコードしてもよい。デコードされた命令に応答して、1つ以上の実行ユニット(例えば実行部462および/または実行部464)は、第1および第2のソースデータオペランドからのデータ間に指定された演算タイプ(例えばビット単位の論理和またはビット単位の論理積)にしたがって第1の論理演算を実行し、第3のソースデータオペランドおよび第1の論理演算の結果からのデータ間に第2の論理演算(例えばテスト演算、または非破壊のビット単位の論理積)を実行して、条件フラグを設定する。
【0109】
例えば、プロセッサパイプライン1400の実施形態は、フェッチステージ1402と、命令キューステージ1403と、長デコードステージ1404と、マクロ命令融合ステージ1405と、デコードステージ1406と、micro−op記憶ステージ1407と、micro−op融合ステージ1411と、スケジューリング(ディスパッチまたは問題として知られる)ステージ1412と、実行ステージ1416と、ライトバック/メモリライトステージ1418とを含む。プロセッサパイプライン1400の実施形態は、さらに、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令の融合に関して、プロセッサパイプライン1400の機能上の態様を理解するためには不要のその他のパイプラインステージ(不図示)を含んでもよい。
【0110】
プロセッサパイプライン1400のいくつかの実施形態において、デコードステージ1406が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する第1の命令をデコードすると、それは第1の命令を、マクロ命令融合ステージ1405が命令キューステージ1403からの第1の命令と融合可能であると判別された分岐命令と融合し、プロセッサパイプライン1400で実行するためにmicro−op記憶ステージ1407に記憶される単一の融合されたマイクロ操作を作成する。
【0111】
プロセッサパイプライン1400のいくつかの代替実施形態において、フェッチステージ1402は複数の命令をフェッチしてもよい。そのような命令には、第1のデスティネーションオペランドを特定する第1の論理命令(例えばビット単位の論理和、またはビット単位の論理積命令)と、第2のソースオペランドを特定する第2の命令(例えばビット単位の論理積、または非破壊テスト命令)と、分岐条件を特定する第3の命令(例えばjump−zeroすなわちJZ、jump−not−zeroすなわちJNZ、またはその他のjump−condition−codeすなわちJCC命令)とが含まれる。フェッチステージ1402は命令キューステージ1403に対して命令を格納する。この場合、長デコードステージ1404およびマクロ命令融合ステージ1405のプレデコード論理が命令境界を決定し、デコードステージ1406におけるデコードのために融合可能な命令を識別する。デコードステージ1406は、命令の一部を単一のマイクロ操作に対して融合してもよい。第1のデスティネーションオペランドおよび第2のソースオペランドが同じ(例えば単一のレジスタ)場合、かつ分岐条件が第2の命令に依存している場合(例えば第2の命令が、分岐条件として第3の命令によって使用された条件コードを修正する最終命令の場合)、その一部には第1および第2の命令の両方が含まれる。いくつかの実施形態において、その融合された一部は、第1、第2、第3の命令を含んでもよい(例えば第1のデスティネーションオペランドおよび第2のソースオペランドは同じ場合、第2および第3の命令は連続しており、第2の命令はテスト命令である)。いくつかの代替実施形態において、その融合された一部は、第1および第2の命令のみを含んでもよい。その場合、デコードステージ1406は、第1および第2の命令を、複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一のマイクロ操作にデコードして、プロセッサパイプライン1400における実行のためにmicro−op記憶ステージ1407に記憶する。
【0112】
プロセッサパイプライン1400のいくつかの代替実施形態において、micro−op記憶ステージ1407は、さらに、micro−op融合ステージ1411と接続されて、分岐条件が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一の第1のマイクロ操作に依存している場合、第3の命令のための第2のマイクロ操作を単一の第1のマイクロ操作と融合してもよい。そのような実施形態において、スケジューリングステージ1412は1つの融合されたマイクロ操作のみを受信して、実行ステージ1416へ発行し、その後ライトバック/メモリライトステージ1418へ発行してもよく、その1つの融合されたマイクロ操作は、複数のテストソースに対する論理和テストまたは論理積テスト機能を提供し、結果に応じて分岐する。
【0113】
いくつかの頻繁に実行されるタイプテストの命令シーケンスのイディオムは、2つのソースデータオペランドを組み合わせる論理演算(例えばいずれかのソースのビットが1かのテスト時は論理和、いずれかのソースのビットがゼロかのテスト時は論理積)と、比較またはテスト命令(例えばマスクに対して上記論理演算の結果をTEST)と、条件付き分岐(例えばゼロフラグがTESTによって設定されたか否かのよりゆっくりとした汎用コードシーケンスへ飛越しするJZ/JNZ)とを含んでもよい。プロセッサデコード論理は、比較命令またはテスト命令(例えばTEST)を条件付き分岐命令(例えばJZ)と組み合わせる際にマクロ融合を利用してもよい。
【0114】
いくつかの実施形態は、さらに、1つの論理命令(例えば論理和)を先行技術のテスト命令と融合することによって動的にテスト命令を作成してもよい。他の実施形態は、動的だがJITコンパイラを用いてテスト命令を作成する。いくつかの実施形態は、さらに、テスト命令を後続の条件付き分岐命令(例えばJZ)と融合して、どのように条件フラグが設定されているかに応じて分岐を実行してもよい。したがって、頻繁に実行されるタイプテストの命令シーケンスのイディオムは単一の命令になるように融合可能でもよく、その結果、実行時には1つのマイクロ操作シーケンスがプロセッサ内に存在する。
【0115】
複数のテストソースに対する論理和テストおよび/または論理積テスト機能を提供するための融合可能な命令および論理は、JITコンパイラによって作成される頻繁に実行されるタイプテストの命令イディオムと関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【0116】
図15Aは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するための融合命令構造1501の一実施形態に対するフロー図を示す。第1のデスティネーションオペランドであるTEMPを特定する第1の論理命令(例えばビット単位の論理和命令、またはビット単位の論理積命令)と、第2のソースオペランドであるTESTを特定する第2の命令(例えば非破壊TEST命令)が命令キューIQ1510に記憶される(例えばフェッチステージ1402による)。分岐条件を特定する第3の命令1514(例えばjump−condition−code(JCC)命令)も同様にIQ1510(例えば命令キューステージ1403)に記憶される。(例えば長デコードステージ1404およびマクロ命令融合ステージ1405の)プレデコード論理は命令境界を決定し、(例えばデコードステージ1406における)デコードのために融合可能な命令1512を識別する。(例えばデコードステージ1406における)デコード時、命令(例えば命令1512)の一部は単一のマイクロ操作1522に融合されてもよい。第1のデスティネーションオペランドおよび前記第2のソースオペランドが同じ(例えば単一のレジスタTEMP)場合、かつ分岐条件コード(CC)が第2の命令に依存している場合(例えば第2の命令が、分岐条件として第3の命令によって使用されたCCを修正する最終命令の場合)、その一部は第1および第2の命令1512の両方を含む。いくつかの代替実施形態において、融合された一部は第1および第2の命令1512のみを含んでもよい。その場合、プロセッサは第1および第2の命令1512を複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一のマイクロ操作1522にデコードして、micro−opストレージ1520に記憶する(例えばプロセッサパイプライン1400における実行のためにmicro−op記憶ステージ1407に記憶する)。いくつかの実施形態において、分岐条件が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する.単一の第1のマイクロ操作1522に依存している場合、micro−opストレージ1520は、さらに、(例えばmicro−op融合ステージ1411において)前記第3の命令1514に対する第2のマイクロ操作1524を単一の第1のマイクロ操作1522と融合するためのmicro−op融合論理に対して接続されてもよい。そのような一実施形態において、1つの融合されたマイクロ操作1526が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供し結果的なCCに基づいて分岐する1つの融合されたマイクロ操作1526がmicro−opストレージ1520に再度記憶されてもよい(例えばプロセッサパイプライン1400における実行のため)。いくつかの実施形態において、その融合された一部は、第1、第2、第3の命令を含んでもよい(例えば第1のデスティネーションオペランドおよび第2のソースオペランドは同じ場合、第2および第3の命令は連続しており、第2または中間命令はテスト命令である)。
【0117】
図15Bは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供し結果的なCCに応じて分岐する融合命令構造1502の代替の実施形態のフロー図を示す。第1のデスティネーションオペランドであるTEMPを特定する第1の論理命令(例えばビット単位の論理和命令、またはビット単位の論理積命令)と、第2のソースオペランドであるTESTを特定する第2の命令(例えば非破壊TEST命令)と、分岐条件を特定する第3の命令(例えばjump−condition−code(JCC)命令)とは、IQ1510に記憶される(例えば命令キューステージ1403においてフェッチステージ1402による)。(例えば長デコードステージ1404およびマクロ命令融合ステージ1405の)プレデコード論理は命令境界を決定し、(例えばデコードステージ1406における)デコードのために融合可能な命令1516を識別する。(例えばデコードステージ1406における)デコード時、命令(例えば命令1516)の一部は単一のマイクロ操作1526に融合されてもよい。第1のデスティネーションオペランドおよび前記第2のソースオペランドが同じ(例えばTEMP)で、第2の(例えばTEST)および第3の(例えばJCC)命令が連続しており、第2または中間命令が(例えばプロセッサパイプライン1400における)実行の結果として分岐CCを修正するTESTなどの命令である場合、その一部は第1、第2、第3の命令1516を含む。
【0118】
いくつかの実施形態において、プロセッサ命令セットアーキテクチャ(ISA)は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために代替のタイプのマクロ命令であるTEST2を提供してもよい。そのような実施形態において、単一のマイクロ操作に融合可能と思われる命令の一部を識別するタスクは簡略化されてもよい。
【0119】
図15Cは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供し結果的なCCに応じて分岐する融合命令構造1503の他の代替の実施形態のフロー図を示す。第1のソースデータオペランドと、第2のソースデータオペランドと、第3のソースデータオペランドと、演算タイプと(例えば論理和テストまたは論理積テスト命令)を特定する第1の命令TEST2と、分岐条件を特定する第2の分岐命令(例えばjump−condition−code(JCC)命令)とは、IQ1511に記憶される(例えばフェッチステージ1402において命令キューステージ1403による)。デコードステージ(例えばデコードステージ1406)が第1の命令をデコードする場合、複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一の融合されたマイクロ操作1526として実行するために第1の命令を分岐命令と融合し、結果的なCCに応じて分岐し、(例えばプロセッサパイプライン1400における実行のためにmicro−op記憶ステージ1407において)単一の融合されたマイクロ操作1526はmicro−opストレージ1520に記憶される。
【0120】
したがって、融合可能な命令および論理の実施形態は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供してもよい。いくつかの実施形態において、プロセッサデコードステージ1406は実行のために新規テスト命令(例えば論理和テストまたは論理積テスト)をデコードしてもよい。この場合の命令は第1、第2、第3のソースデータオペランドおよび演算タイプ(例えば論理和テストまたは論理積テスト)を特定する。そのデコードされたテスト命令に応じて、実行ユニット(例えば実行部462および/または実行部464)は、第1および第2のソースデータオペランドからのデータ間において特定された演算タイプに基づく論理演算(例えば論理和)を実行してもよく、さらに第3のソースデータオペランドと第1の論理演算の結果とからのデータ間において第2の論理演算(例えば論理積)を実行して条件フラグを設定してもよい。いくつかの代替の実施形態において、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するための処理は専用のハードウェアによって実行されてもよい。いくつかの他の代替の実施形態において、そのような処理は、汎用機械または特殊用途の機械または何らかの組み合わせによって実行可能なソフトウェアまたはファームウェア演算コードによって実行されてもよい。
【0121】
図16Aは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理1601の一実施形態のフロー図を示す。上述したように、本明細書において開示される処理1601およびその他の方法は、汎用機械または特殊用途の機械または両者の組み合わせによって実行可能な専用のハードウェアまたはソフトウェアまたはファームウェア演算コードを含んでもよい処理ブロックによって実行される。
【0122】
処理1601の処理ブロック1610において、第1のデスティネーションオペランドを特定する第1の命令がフェッチされる。処理ブロック1620において、第2のソースオペランドを特定する第2の命令がフェッチされる。処理ブロック1630において、第1および第2のオペランドが同一であるかが決定される。同一でない場合、処理は処理ブロック1610に進む。同一の場合は処理ブロック1640に進み、第1および第2の命令は単一のmicro−opまたはマイクロ操作に融合される。処理ブロック1650において、第2の命令に依存する分岐条件を特定する第3の命令がフェッチされる。その後処理ブロック1660において、第3の命令も単一のmicro−opまたはマイクロ操作に融合される。
【0123】
図16Bは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理1602の代替の実施形態のフロー図を示す。処理1602の処理ブロック1610において、第1のデスティネーションオペランドを特定する第1の命令がフェッチされる。処理ブロック1620において、第2のソースオペランドを特定する第2の命令がフェッチされる。処理ブロック1650において、第2の命令に依存する分岐条件を特定する第3の命令がフェッチされる。その後処理ブロック1670において、フェッチされた命令の一部が融合される。この場合の一部は、前記第1のデスティネーションオペランドおよび前記第2のソースオペランドが同一で、分岐条件が第2の命令に依存している場合、第1および第2の命令の両方を含む。
【0124】
図16Cは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理1603の別の代替の実施形態のフロー図を示す。処理1603の処理ブロック1645において、2つのオペランドをテストする第1の命令がフェッチされる。この第1の命令は、第1のソースオペランド、第2のソースオペランド、第3のソースオペランド、および演算タイプを特定する。処理ブロック1655において、分岐条件フラグを特定する第2の命令がフェッチされる。この場合の分岐条件フラグは第1の命令に依存する。その後処理ブロック1665において、フェッチされた各命令の一部が融合される。この場合の一部は、例えば、分岐条件フラグが第1の命令に依存している場合、第1および第2の命令の両方を含む。
【0125】
図16Dは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理1604の別の代替の実施形態のフロー図を示す。処理1604の処理ブロック1647において、第1の命令は実行のためにデコードされる。この場合の第1の命令は、第1のオペランドソースのデータと、第2のオペランドソースのデータと、第3のオペランドソースのデータと、演算タイプとを特定する。処理ブロック1649において、第1のmicro−opまたはマイクロ操作は第1の命令のために記憶される。処理ブロック1657において、第2の命令は実行のためにデコードされる。この場合の第2の命令は分岐条件を特定する。処理ブロック1659において、第2のmicro−opまたはマイクロ操作は第2の命令のために記憶される。処理ブロック1667において、分岐条件が第1の命令に依存する場合、第1および第2のmicro−opは単一のmicro−opに融合される。
【0126】
いくつかの実施形態は、動的だがJITコンパイラを用いて新規テスト命令(例えば論理和テストまたは論理積テスト命令)を作成してもよい。そのような実施形態は、さらに、テスト命令を後続の条件付き分岐命令(例えばJZ)と融合して、条件フラグがどのように設定されているかに応じて分岐を実行してもよい。したがって、頻繁に実行されるタイプテストの命令シーケンスのイディオムは、単一の命令になるように融合可能でもよく、その結果、実行時には1つのマイクロ操作シーケンスがプロセッサパイプライン内に存在する。
【0127】
図17は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を実行する処理1701の一実施形態のフロー図を示す。処理1701の処理ブロック1710において、第1の命令は実行のためにデコードされる。この場合の第1の命令は、第1のオペランドソースのデータと、第2のオペランドソースのデータと、第3のオペランドソースのデータと、演算タイプとを特定する。処理ブロック1720において、1つ以上の実行ユニットは、デコードされた第1の命令に応じて、第1および第2のソースオペランドからのデータ間に特定された演算タイプに基づく第1の論理演算を実行する。処理ブロック1730において、第3のソースオペランドと、条件フラグを条件付きで設定するための第1の論理演算の結果とからのデータ間に第2の演算が実行される。処理ブロック1740において、条件フラグが設定されると、プログラムフローが条件付きで分岐する。いくつかの実施形態において、処理ブロック1720〜1740は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する単一の融合されたmicro−opまたはマイクロ操作に応じて実行され、結果的なCCに基づいて分岐してもよい。
【0128】
頻繁に実行されるタイプテストの命令シーケンスのイディオムは、2つのソースデータオペランド(例えばいずれかのソースのビットが1であるかをテストする際は論理和、いずれかのソースのビットが0であるかをテストする際は論理積)を組み合わせる論理演算と、比較またはテスト命令(例えばマスクに対して上記論理演算の結果をテストする命令)と、条件付き分岐(例えばゼロフラグがTESTによって設定されたか否かによる、よりゆっくりとしたジェネリックなコードシーケンスへの飛越しを行うJZ/JNZ)とを含んでもよい。プロセッサのデコード論理は、比較命令またはテスト命令(例えばTEST)を条件付き分岐命令(例えばJZ)と組み合わせる際にマクロ融合を利用してもよい。
【0129】
複数のテストソースに対する論理和テストおよび/または論理積テスト機能を提供する融合可能な命令および論理によって、JITコンパイラによって作成されるタイプテスト命令イディオムを頻繁に実行することに関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【0130】
本明細書において開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア的に実現されてもよく、またはそのような実現手段の組み合わせによって実現されてもよい。本発明の実施形態は、少なくとも1つプロセッサと、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ素子を含む)と、少なくとも1つ入力装置と、少なくとも1つ出力装置とを含むプログラミング可能なシステム上において実行されるコンピュータプログラムまたはプログラムコードとして実現されてもよい。
【0131】
プログラムコードは、本明細書に記載した機能を実行するために入力命令に対して適用され、出力情報を作成する。出力情報は、既知の方法で1つ以上の出力装置に対して適用される。この適用の目的のため、処理システムは、例えばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途用集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【0132】
上記プログラムコードは、処理システムとの通信のために上位プロシージャ言語またはオブジェク指向プログラミング言語で実現されてもよい。また、プログラムコードは必要に応じてアセンブリ言語または機械言語で実現されてもよい。実際に、本明細書において記載された各機構は任意の特定のプログラミング言語に範囲が限定されるものではない。いずれの場合にせよ、言語はコンパイラ形式言語またはインタプリタ形式の言語でよい。
【0133】
少なくとも1つの実施形態の1つ以上の態様は、機械可読媒体に記憶されプロセッサ内の様々な論理を表現する代表命令によって実現されてもよく、機械によって読み込まれると、その機械に本明細書に記載の技術を実行する論理を作成させる。そのような「IPコア」として知られる表現は、有形の機械可読媒体に記憶され、様々な顧客または製造設備に供給され、論理またはプロセッサを実際に作成する製造機械に対してロードされてもよい。
【0134】
そのような機械可読記憶媒体は、機械または装置によって製造または形成される物の非一時的な有形の構成を含んでもよく、これらに限定されないが、ハードディスクなどの記憶媒体や、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読取専用メモリ(CD−ROM)、書き換え可能なコンパクトディスク(CD−RW)、光磁気ディスクなどの他の種類のディスク、読取専用メモリ(ROM)などの半導体装置、動的ランダムアクセスメモリ(DRAM)スタティックランダムアクセスメモリ(SRAM)、消去可能読取専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、磁気または光カードなどのランダムアクセスメモリ(RAM)、またはその他の電子命令の格納に適した種類の媒体を含んでもよい。
【0135】
したがって、本発明の実施形態は、さらに、本明細書に記載の構造、回路、装置、プロセッサおよび/またはシステム特性を定義するハードウェア記述言語(HDL)などの命令をまたは設計データを含む非一時的な有形の機械可読媒体を含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【0136】
いくつかの場合において、命令コンバータを使用して、ソース命令セットからターゲット命令セットへ命令を変換してもよい。例えば、命令コンバータは、命令をコアによって処理される1つ以上の他の命令に翻訳(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用)、モーフィング、エミュレート、もしくは変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはその組み合わせにおいて実現されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または部分的にプロセッサ上および部分的にプロセッサ外としてもよい。
【0137】
このように、少なくとも1つの実施形態による1つ以上の命令を実行する技術が開示された。特定の実施例が説明され添付図面に示されているが、これらの実施形態はあくまで例示を意図しており、広い範囲に及ぶ発明を制約する意図はなく、本発明が図示されたり説明されたりしている特定の構成および配置に限定されない点に留意されたい。本開示を読んだ当業者であれば、様々な他の変形例を想到する。当技術分野は成長著しく、将来の進歩を見通すことが難しいので、開示されている実施形態は、本開示の原理または添付請求項の範囲から逸脱しなければ、技術的進歩により、構成および詳細において容易に変更可能であることを理解されたい。
本実施形態の例を下記の各項目として示す。
[項目1]
実行のための第1の命令をデコードするデコードステージであって、前記第1の命令は第1のオペランドソースのデータと、第2のオペランドソースのデータと、第3のオペランドソースのデータと、演算タイプとを特定するデコードステージと、
前記デコードされた第1の命令に応じて、
前記第1および第2のオペランドソースからのデータ間において前記特定された演算タイプに基づく第1の論理演算を実行し、
前記第3のオペランドソースからのデータと前記第1の論理演算の結果との間において第2の論理演算を実行して条件フラグを条件付きで設定する1つ以上の実行ユニットと、
を含むプロセッサ。
[項目2]
前記第2の論理演算は論理積演算を含み、条件付きでゼロフラグを設定する、項目1に記載のプロセッサ。
[項目3]
前記特定された演算タイプに基づいて、前記第1および第2のオペランドソースのデータからのデータ間において論理積が実行される、項目2に記載のプロセッサ。
[項目4]
前記特定された演算タイプに基づいて、前記第1および第2のオペランドソースのデータからのデータ間において論理和が実行される、項目2に記載のプロセッサ。
[項目5]
前記デコードステージが前記第1の命令をデコードすると、単一の融合されたマイクロ操作として実行するために、前記第1の命令を分岐命令と融合する、項目1から4の何れか1項に記載のプロセッサ。
[項目6]
前記単一の融合されたマイクロ操作に応じて、前記1つ以上の実行ユニットは、前記第1の論理演算を実行し、前記第3のソースデータオペランドに対して前記第1の論理演算の結果をテストして、ゼロフラグを条件付きで設定し、前記ゼロフラグが設定されると、条件付きで分岐する、項目5に記載のプロセッサ。
[項目7]
第1のソースデータオペランドと、第2のソースデータオペランドと、第3のソースデータオペランドとを特定する第1の命令と、分岐ターゲットを特定する第2の命令とをデコードするデコードステージであって、前記デコードステージは、単一の融合されたマイクロ操作として実行するために、前記第1の命令を前記第2の命令と融合するデコードステージと、
前記単一の融合されたマイクロ操作に応じて、前記第1のソースデータオペランドおよび前記第2のソースデータオペランドからのデータ間において第1の論理演算を実行し、前記第3のソースデータオペランドからのデータと前記第1の論理演算の結果との間において第2の論理演算を実行して条件フラグを設定し、前記条件フラグが設定されると、前記分岐ターゲットに対して条件付き分岐を実行する1つ以上の実行ユニットと、
を含むプロセッサ。
[項目8]
前記第2の論理演算は論理テスト演算を含み、条件付きでゼロフラグを設定する項目7に記載のプロセッサ。
[項目9]
前記第1の命令に基づいて、前記第1のソースデータオペランドおよび前記第2のソースデータオペランドからのデータ間に論理積が実行される項目8に記載のプロセッサ。
[項目10]
前記第1の命令に基づいて、前記第1のソース/デスティネーションデータオペランドおよび前記第2のソースデータオペランドからのデータ間において論理和が実行される項目8に記載のプロセッサ。
[項目11]
実行するために第1の命令をデコードし、前記第1の命令は第1のソースデータオペランドと、第2のソースデータオペランドと、第3のソースデータオペランドと、演算タイプとを特定し、
前記デコードされた第1の命令に応じて、
前記第1および第2のソースデータオペランドからのデータ間において前記特定された演算タイプに基づく第1の論理演算を実行し、
前記第3のソースデータオペランドからのデータと前記第1の論理演算の結果との間において第2の論理演算を実行して条件フラグを設定する、
ことを含む方法。
[項目12]
前記第2の論理演算の実行は、論理積演算を実行し、条件付きでゼロフラグを設定することを含む、項目11に記載の方法。
[項目13]
前記特定された演算タイプに基づいて、前記第1および第2のソースデータオペランドからのデータ間において論理積が実行される、項目12に記載の方法。
[項目14]
前記特定された演算タイプに基づいて、前記第1および第2のソースデータオペランドからのデータ間において論理和が実行される、項目12に記載の方法。
[項目15]
単一の融合されたマイクロ操作として実行するために、前記第1の命令を分岐命令と融合することをさらに含む、項目11から14の何れか1項に記載の方法。
[項目16]
前記単一の融合されたマイクロ操作に応じて、
前記第1の論理演算を実行し、
前記第3のソースデータオペランドに対して前記第1の論理演算の結果をテストして、ゼロフラグを条件付きで設定し、
前記ゼロフラグが設定されると、条件付きで分岐させることを含む、
項目15に記載の方法。
[項目17]
メモリと、
第1のプロセッサコアおよび第2のプロセッサコアを含む複数のプロセッサとを含み、各プロセッサは、
実行のための第1の命令をデコードするデコードステージであって、前記第1の命令は第1のオペランドソースのデータと、第2のオペランドソースのデータと、第3のオペランドソースのデータと、演算タイプとを特定するデコードステージと、
前記デコードされた第1の命令に応じて、
前記第1および第2のオペランドソースからのデータ間において前記特定された演算タイプに基づく第1の論理演算を実行し、
前記第3のオペランドソースと前記第1の論理演算の結果からのデータ間において第2の論理演算を実行して条件フラグを条件付きで設定する1つ以上の実行ユニットと、
を含む処理システム。
[項目18]
前記第2の論理演算の実行は、論理テスト演算を含み、条件付きでゼロフラグを設定する、項目17に記載の処理システム。
[項目19]
前記第1の命令に基づいて、前記第1のソース/デスティネーションデータオペランドおよび前記第2のソースデータオペランドからのデータ間において論理積が実行される項目18に記載の処理システム。
[項目20]
前記第1の命令に基づいて、前記第1のソース/デスティネーションデータオペランドおよび前記第2のソースデータオペランドからのデータ間において論理和が実行される、項目18に記載の処理システム。