以下、計算処理用のベクトルフォーマットのための命令および処理ロジックについて説明する。一実施形態において、このようなフォーマットは表形式フォーマットを含んでよい。別の実施形態において、このような計算は有限差分計算を含んでよい。例えば、当該計算としては、微分方程式の計算または推定、多次元の等方性関数または異方性関数が含まれてよい。しかしながら、当業者によれば、実施形態はこのような具体的詳細がなくても実施可能であることを理解されたい。また、本開示の実施形態を不必要に不明瞭にするのを回避すべく、いくつかの周知の構造、回路等は詳しく図示されていない。
以下の実施形態はプロセッサに関して記載されているが、他の実施形態が他のタイプの集積回路およびロジックデバイスに適用可能である。本開示の実施形態と類似の技術および教示が他のタイプの回路または半導体デバイスに適用されてよく、当該回路または半導体デバイスは、より高いパイプラインスループットおよび性能向上から利益を享受してよい。本開示の実施形態に係る教示は、データ操作を行う任意のプロセッサまたは機械に適用可能である。しかしながら、実施形態は、512ビット、256ビット、128ビット、64ビット、32ビットまたは16ビットのデータ操作を実行するプロセッサまたは機械に限定されず、データ操作またはデータ管理が実行可能な任意のプロセッサおよび機械に適用されてよい。また、以下の詳細な説明は例示を提供しており、添付図面は例示目的で様々な例を示している。しかしながら、これらの例示は、本開示の実施形態の考え得るすべての実装を網羅的に列挙するのではなく、本開示の例示的な実施形態を提供することを目的とするにすぎず、限定的な意味に解釈されるべきではない。
以下の例示は、実行ユニットおよびロジック回路の文脈において、命令の処理および配信について記載しているものの、本開示の他の実施形態は、有形の機械可読媒体上に格納されたデータまたは命令によって実現されてよい。当該データまたは命令は機械による実行時に、機械に、本開示の少なくとも1つの実施形態に整合する複数の機能を実行させる。一実施形態において、本開示の実施形態に関連付けられた機能は、機械により実行可能な命令に具現化される。当該命令を使用して、当該命令でプログラム可能な汎用プロセッサまたは特定用途向けプロセッサに、本開示の複数の段階を実行させてよい。本開示の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供されてよく、当該コンピュータプログラム製品またはソフトウェアは、自身に格納された命令を有する機械またはコンピュータ可読媒体を含んでよく、当該命令を使用して、本開示の実施形態による1または複数の演算を実行するようにコンピュータ(または他の電子デバイス)をプログラムしてよい。さらに、本開示の実施形態の複数の段階は、当該段階を実行するための固定機能ロジックを含む特別なハードウェアコンポーネント、またはプログラムされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせによって実行されてよい。
本開示の実施形態を実行するためのロジックをプログラムするために使用される命令は、DRAM、キャッシュ、フラッシュメモリまたは他のストレージ等のシステム内のメモリに格納されてよい。さらに、命令はネットワークを介してまたは他のコンピュータ可読媒体を通して配信されてよい。故に、機械可読媒体としては、特に限定されないが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリメモリ(CD‐ROM)、および光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気若しくは光カード、フラッシュメモリ、または電気、光、音波または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネット経由での情報送信に使用される有形の機械可読ストレージ等、機械(例えばコンピュータ)によって読み取り可能な形態で情報を格納または送信するための任意のメカニズムが含まれてよい。従って、コンピュータ可読媒体としては、機械(例えばコンピュータ)によって読み取り可能な形態で電子的命令または情報を格納または送信するために好適な任意のタイプの有形の機械可読媒体が含まれてよい。
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表わすデータは、多数の方法で設計を表わしてよい。まず、シミュレーションで有用であるように、ハードウェアはハードウェア記述言語または別の機能記述言語を使用して表わされてよい。また、ロジックおよび/またはトランジスタゲートを用いる回路レベルモデルが、設計プロセスのどこかのステージで生成されてよい。さらに、設計はどこかのステージにおいて、ハードウェアモデルの様々なデバイスの物理的配置を表わすデータレベルに到達してよい。いくつかの半導体製造技術が使用される場合、ハードウェアモデルを表わすデータは、集積回路の生成に使用されるマスクのための異なるマスク層における様々な特徴部の存在または不存在を指定するデータであってよい。設計のあらゆる表現において、データは任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスク等の磁気若しくは光ストレージは、このような情報を送信するために変調または変調以外の方法で生成された光波または電波を介して送信される情報を格納する機械可読媒体であってよい。コードまたは設計を示すまたは搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信が実行される限度において、新しいコピーが作成されてよい。故に、通信プロバイダまたはネットワークプロバイダは、搬送波にエンコードされた情報等の項目を有形の機械可読媒体上に少なくとも一時的に格納し、本開示の実施形態の技術を具現化してよい。
現在のプロセッサの中で、多数の異なる実行ユニットを使用し、様々なコードおよび命令が処理および実行されてよい。いくつかの命令はより迅速に終了してよい一方、他の命令は完了までに複数のクロックサイクルを必要としてよい。命令のスループットがより高速なほど、プロセッサの性能全体はより良好になる。故に、多数の命令を可能な限り高速で実行させると有利になろう。しかしながら、浮動小数点命令、ロード/ストア操作、データ移動等のより複雑で、実行時間およびプロセッサリソースの観点からより多くのものを要求するような特定の命令が存在し得る。
より多くのコンピュータシステムがインターネット、テキストおよびマルチメディアアプリケーションで使用されるにつれ、追加のプロセッササポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理および例外処理、並びに外部入力および出力(I/O)を含む1または複数のコンピュータアーキテクチャに関連付けられてよい。
一実施形態において、命令セットアーキテクチャ(ISA)は、1または複数のマイクロアーキテクチャによって実装されてよく、当該マイクロアーキテクチャは1または複数の命令セットを実装するために使用されるプロセッサロジックおよび回路を含んでよい。従って、異なるマイクロアーキテクチャを備えるプロセッサは、共通の命令セットの少なくとも一部を共有してよい。例えば、インテル(登録商標)Pentium(登録商標)4プロセッサ、インテル(登録商標)Core(商標)プロセッサ、およびカリフォルニア州サニーベールのアドバンストマイクロデバイス社のプロセッサは、異なる内部設計を有するもののx86命令セット(より新しいバージョンに追加されたいくつかの拡張機能を持つ)のバージョンとほぼ同一のものを実装する。同様に、ARM Holdings、MIPS、またはそれらのライセンシ若しくは採用者等の他のプロセッサの開発企業によって設計されたプロセッサは、共通の命令セットの少なくとも一部を共有してよいが、異なるプロセッサ設計を含んでよい。例えば、ISAの同一レジスタアーキテクチャは、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実装されてよく、このようなものとしては専用物理レジスタ、レジスタリネーミングメカニズム(例えばレジスタエイリアステーブル(RATの使用)、リオーダバッファ(ROB)およびリタイアメントレジスタファイルを使用して動的に割り当てられた1または複数の物理レジスタが含まれる。一実施形態において、レジスタは、1または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによってアドレス指定可能であってもなくてもよい他のレジスタセットを含んでよい。
命令は、1または複数の命令フォーマットを含んでよい。一実施形態において、命令フォーマットは、実行されるべき演算およびその演算が実行されるオペランドをとりわけ指定するための様々なフィールド(ビット数、ビットの場所等)を示してよい。さらなる実施形態において、いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)によってさらに定義されてよい。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく、および/または、異なって解釈される特定のフィールドを有するように定義されてよい。一実施形態において、命令は命令フォーマット(および、定義されている場合は、その命令フォーマットの複数の命令テンプレートのうちの特定の1つにおいて)を使用して表わされてよく、命令は演算およびその演算が行われるオペランドを指定または示す。
科学的アプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、RMS(Recognition(認識)、mining(マイニング)、およびsynthesis(合成))アプリケーション、並びにビジュアルおよびマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、ビデオ圧縮/圧縮解除、音声認識アルゴリズムおよびオーディオ操作)は、多数のデータアイテム上に同一の演算が実行されることを要求してよい。一実施形態において、単一命令複数データ(SIMD)とは、プロセッサに、複数のデータ要素への演算を実行させるタイプの命令を指す。SIMD技術は、レジスタ内のビットを複数の固定サイズまたは可変サイズのデータ要素に論理的に分割可能なプロセッサにおいて使用されてよく、データ要素の各々は別箇の値を表わす。例えば、一実施形態において、64ビットレジスタ内のビットは、4つの別箇の16ビットデータ要素を含むソースオペランドとして編成されてよく、当該データ要素の各々は別箇の16ビット値を表わす。このタイプのデータは、「パックされた」データタイプまたは「ベクトル」データタイプと称されてよく、このデータタイプのオペランドは、パックされたデータオペランドまたはベクトルオペランドと称されてよい。一実施形態において、パックされたデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックされたデータ要素のシーケンスであってよく、パックされたデータオペランドまたはベクトルオペランドは、SIMD命令(または「パックされたデータ命令または「ベクトル命令」)のソースまたはデスティネーションオペランドであってよい。一実施形態において、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(商標)は、カリフォルニア州サンタクララのインテルコーポレーションの登録商標または商標である)。
一実施形態において、デスティネーションおよびソースのレジスタ/データとは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語であってよい。いくつかの実施形態において、それらはレジスタ、メモリ、または本明細書に記載されたものではない他の名前または機能を有する他のストレージ領域によって実装されてよい。例えば、一実施形態において、「DEST1」が一時的なストレージレジスタまたは他のストレージ領域であってよい一方で、「SRC1」および「SRC2」は、第1のソースストレージレジスタおよび第2のソースストレージレジスタまたは他のストレージ領域等であってよい、などである。他の実施形態において、SRCおよびDESTストレージ領域のうちの2または2より多いものが、同一のストレージ領域(例えばSIMDレジスタ)内の複数の異なるデータストレージ要素に対応してよい。一実施形態において、複数のソースレジスタのうちの1つは、例えば、第1のソースデータおよび第2のソースデータで行われた演算結果をデスティネーションレジスタとして機能する2つのソースレジスタのうちの1つにライトバックすることによって、デスティネーションレジスタとして動作してもよい。
図1Aは、本開示の実施形態によるプロセッサと共に形成された例示的なコンピュータシステムのブロック図であり、プロセッサは命令を実行するための実行ユニットを含んでよい。システム100は、本明細書に記載の実施形態等、本開示による、処理データに対するアルゴリズムを実行するためのロジックを含む実行ユニットを採用するプロセッサ102等のコンポーネントを含んでよい。システム100は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)および/またはStrongARM(商標)マイクロプロセッサに基づく処理システムの典型的なものであってよいが、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するPCを含む)も使用されてよい。一実施形態において、サンプルシステム100は、ワシントン州レドモンドのマイクロソフト社から入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行してよいが、他のオペレーティングシステム(例えばUNIX(登録商標)およびLinux(登録商標))、埋め込みソフトウェアおよび/またはグラフィックユーザインタフェースも使用されてよい。故に、本開示の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
実施形態はコンピュータシステムに限定されない。本開示の実施形態は、ハンドヘルドデバイスおよび埋め込みアプリケーション等の他のデバイスにおいて使用されてよい。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント(PDA)およびハンドヘルドPCが含まれる。埋め込みアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも1つの実施形態に係る1または複数の命令を実行し得る任意の他のシステムが含まれてよい。
コンピュータシステム100は、本開示の一実施形態による少なくとも1つの命令を実行するためのアルゴリズムを実行する1または複数の実行ユニット108を含み得るプロセッサ102を含んでよい。一実施形態は、単一プロセッサのデスクトップまたはサーバシステムの文脈で記載され得るが、他の実施形態がマルチプロセッサシステム内に含まれてよい。システム100は、「ハブ」システムアーキテクチャの一例であってよい。システム100は、データ信号を処理するためのプロセッサ102を含んでよい。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、または、例えばデジタル信号プロセッサ等の任意の他のプロセッサデバイスを含んでよい。一実施形態において、プロセッサ102はプロセッサバス110に連結されてよく、プロセッサバス110は、プロセッサ102とシステム100内の他のコンポーネントとの間でデータ信号を送信してよい。システム100の複数の要素は、当該技術分野に習熟した者にとって周知である従来の機能を実行してよい。
一実施形態において、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含んでよい。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。別の実施形態において、キャッシュメモリは、プロセッサ102の外部に存在してよい。他の実施形態はまた、特定の実装およびニーズに応じて、内部および外部の両方のキャッシュの組み合わせを含んでよい。レジスタファイル106は、異なるタイプのデータを整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタに格納してよい。
整数演算および浮動小数点演算を実行するためのロジックを含む実行ユニット108も、プロセッサ102内に存在する。プロセッサ102はまた、特定のマクロ命令のためのマイクロコードを格納するマイクロコード(μコード)ROMを含んでよい。一実施形態において、実行ユニット108は、パックされた命令セット109を処理するためのロジックを含んでよい。命令を実行するための関連回路と共に、汎用プロセッサ102の命令セット内にパックされた命令セット109を含めることによって、多くのマルチメディアアプリケーションによって使用される演算が、汎用プロセッサ102内のパックされたデータを使用して実行されてよい。故に、多くのマルチメディアアプリケーションはパックされたデータに演算を実行するために、プロセッサのデータバスの全幅を使用することによって、加速化され、より効率的に実行されてよい。これにより、1データ要素に1または複数の演算を一度に実行すべく、データのより小さな単位をプロセッサのデータバスにわたり転送する必要性をなくしてよい。
実行ユニット108の実施形態はマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、DSP、および他のタイプのロジック回路内で使用されてもよい。システム100は、メモリ120を含んでよい。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスとして実装されてよい。メモリ120は、プロセッサ102によって実行可能な、データ信号によって表現される命令および/またはデータを格納してよい。
システムロジックチップ116は、プロセッサバス110およびメモリ120に連結されてよい。システムロジックチップ116は、メモリコントローラハブ(MCH)を含んでよい。プロセッサ102は、MCH116とプロセッサバス110を介して通信してよい。MCH116は、命令およびデータの格納およびグラフィックコマンド、データおよびテクスチャの格納のためにメモリ120への高帯域幅メモリパス118を提供してよい。MCH116は、システム100内のプロセッサ102、メモリ120、および他のコンポーネント間にわたり、データ信号を送信してよく、データ信号をプロセッサバス110、メモリ120、およびシステムI/O122間にわたり橋渡ししてよい。いくつかの実施形態において、システムロジックチップ116は、グラフィックコントローラ112に連結するためのグラフィックポートを提供してよい。MCH116は、メモリインタフェース118を介してメモリ120に連結されてよい。グラフィックカード112が、アクセラレーテッドグラフィックポート(AGP)相互接続114を介してMCH116に連結されてよい。
システム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デバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含んでよい。
システムの別の実施形態について、一実施形態による命令はシステムオンチップと共に使用されてよい。システムオンチップの一実施形態は、プロセッサおよびメモリで構成される。このような1システムのためのメモリとしてはフラッシュメモリが含まれてよい。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同一ダイ上に配置されてよい。また、メモリコントローラまたはグラフィックコントローラ等の他のロジックブロックもシステムオンチップ上に配置されてよい。
図1Bは、本開示の実施形態に係る原理を実装するデータ処理システム140を示す。本明細書に記載の実施形態は、本開示の実施形態の範囲から逸脱することなく、代替の処理システムと共に動作し得ることを当業者は容易に理解するであろう。
コンピュータシステム140は、一実施形態による少なくとも1つの命令を実行するための処理コア159を備える。一実施形態において、処理コア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は適切な演算を実行する。一実施形態において、デコーダは命令のオペコードを解釈してよく、当該オペコードは、命令内で指定される該当データに対しどのような演算を実行すべきかを示すであろう。
処理コア159は、様々な他のシステムデバイスとの通信のためにバス141に連結されてよく、当該システムデバイスとしては特に限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)コントロール146、スタティックランダムアクセスメモリ(SRAM)コントロール147、バーストフラッシュメモリインタフェース148、PCメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カードコントロール149、液晶ディスプレイ(LCD)コントロール150、ダイレクトメモリアクセス(DMA)コントローラ151、および代替のバスマスタインタフェース152が含まれてよい。一実施形態において、データ処理システム140はまたI/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154を含んでよい。このようなI/Oデバイスとしては特に限定されないが、例えば、汎用非同期送受信回路(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157およびI/O拡張インタフェース158が含まれてよい。
データ処理システム140の一実施形態は、モバイル、ネットワークおよび/または無線通信、並びに文字列比較演算を含むSIMD演算を実行可能な処理コア159を提供する。処理コア159は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージ処理アルゴリズムおよび通信アルゴリズムでプログラムされてよく、当該アルゴリズムにはウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、およびそれらそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコードモーション推定またはビデオデコードモーション補償等の圧縮/圧縮解除技法と、パルス符号変調(PCM)等の変調/復調(MODEM)機能とが含まれる。
図1Cは、SIMD文字列比較演算を実行するデータ処理システムの他の実施形態を示す。一実施形態において、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、および入/出力システム168を含んでよい。随意で、入/出力システム168は、無線インタフェース169に連結されてよい。SIMDコプロセッサ161は、一実施形態による命令を含む演算を実行してよい。一実施形態において、処理コア170は1または複数の処理技術における製造に好適であってよく、また機械可読媒体上で十分詳細に表現されることによって、処理コア170を含むデータ処理システム160のうちの全部または一部の製造を容易にするために好適であってよい。
一実施形態において、SIMDコプロセッサ161は実行ユニット162およびレジスタファイルのセット164を備える。メインプロセッサ165の一実施形態は、実行ユニット162による実行のための一実施形態による命令を含む命令セット163のうちの命令を認識するためのデコーダ165を備える。他の実施形態において、SIMDコプロセッサ161はまた、命令セット163のうちの命令をデコードするためのデコーダ165のうちの少なくとも一部を備える。処理コア170はまた、本開示の実施形態の理解には不要であるかもしれない追加の回路(不図示)を含んでよい。
演算時、メインプロセッサ166は、キャッシュメモリ167および入/出力システム168とのやり取りを含む一般的なタイプのデータ処理操作を制御するデータ処理命令ストリームを実行する。SIMDコプロセッサ命令がデータ処理命令ストリーム内に埋め込まれてよい。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を付属のSIMDコプロセッサ161によって実行される必要があるタイプのものであると認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(または、SIMDコプロセッサ命令を表わす制御信号)をコプロセッサバス166に対し発行する。コプロセッサバス166からのこれらの命令は、任意の付属のSIMDコプロセッサによって受信されてよい。この場合、SIMDコプロセッサ161は、自身を宛先とするあらゆる受信されたSIMDコプロセッサ命令を受け付けおよび実行してよい。
データは、SIMDコプロセッサ命令による処理のために、無線インタフェース169を介して受信されてよい。一例として、音声通信がデジタル信号の形態で受信されてよく、当該デジタル信号はSIMDコプロセッサ命令によって処理され、当該音声通信を表わすデジタルオーディオサンプルを再生成してよい。別の例として、圧縮されたオーディオおよび/またはビデオがデジタルビットストリームの形態で受信されてよく、当該デジタルビットストリームはSIMDコプロセッサ命令によって処理され、デジタルオーディオサンプルおよび/またはモーションビデオフレームを再生成してよい。処理コア170の一実施形態において、メインプロセッサ166およびSIMDコプロセッサ161は、単一の処理コア170に統合されてよく、当該単一の処理コア170は実行ユニット162、レジスタファイルのセット164および一実施形態による命令を含む命令セット163のうちの命令を認識するためのデコーダ165を備える。
図2は、本開示の実施形態による命令を実行するためのロジック回路を含んでよいプロセッサ200のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズに加え、単精度整数データタイプおよび倍精度整数データタイプおよび単精度浮動小数点データタイプおよび倍精度浮動小数点データタイプのようなデータタイプを有するデータ要素に演算を行うように実装されてよい。一実施形態において、インオーダフロントエンド201が、実行されるべき命令をフェッチ可能なプロセッサ200の一部を実装してよく、当該命令をプロセッサパイプラインにおいて後で使用されるように準備する。フロントエンド201はいくつかのユニットを含んでよい。一実施形態において、命令プリフェッチャ226は、メモリから命令をフェッチし、当該命令を命令デコーダ228にフィードすると、命令デコーダ228が今度は当該命令をデコードまたは解釈する。例えば、一実施形態において、デコーダは、受信された命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」(マイクロopまたはμopとも称される)と称される1または複数の演算にデコードする。他の実施形態において、デコーダは命令を、オペコード並びに対応するデータおよび制御フィールドに解析する。オペコード並びに対応するデータおよび制御フィールドは、マイクロアーキテクチャによって使用され、一実施形態による演算を実行してよい。一実施形態において、トレースキャッシュ230は、実行のために、デコードされたμopをプログラムにより順序付けられたシーケンスまたはμopキュー234内のトレースに組み立ててよい。トレースキャッシュ230が複雑な命令に遭遇する場合、マイクロコードROM232は演算の完了に必要なμopを提供する。
いくつかの命令が単一のマイクロopに変換されてよい一方、他の命令は完全な演算を完了させるためのいくつかのマイクロopを必要とする。一実施形態において、命令の完了に4つより多いマイクロopが必要な場合、デコーダ228はマイクロコードROM232にアクセスし、命令を実行してよい。一実施形態において、命令は、命令デコーダ228で処理するための少数のマイクロopにデコードされてよい。別の実施形態において、演算を遂行するために多数のマイクロopが必要な場合、命令はマイクロコードROM232内に格納されてよい。トレースキャッシュ230とは、一実施形態によるマイクロコードROM232からの1または複数の命令を完了すべく、マイクロコードシーケンスを読み取るための正しいマイクロ命令ポインタを判断するためのエントリポイントプログラマブルロジックアレイ(PLA)を指す。マイクロコードROM232が命令のためのマイクロopのシーケンス処理を完了した後、機械のフロントエンド201は、トレースキャッシュ230からのマイクロopのフェッチを再開してよい。
アウトオブオーダ実行エンジン203は、命令を実行のために準備してよい。アウトオブオーダ実行ロジックは、命令フローがパイプラインに行き、実行のためにスケジュールされる際、性能を最適化するために、命令フローを円滑化し、並べ替えるための複数のバッファを有する。アロケータロジックは、各μopが実行のために必要とする機械のバッファおよびリソースを割り当てる。レジスタリネーミングロジックはロジックレジスタをレジスタファイル内のエントリにリネーム(名前変更)する。アロケータはまた、命令スケジューラの前にある2つのμopキューのうちの一方にある各μopのためにエントリを割り当てる。当該μopキューのうちの1つはメモリ操作用、もう1つは非メモリ操作用のものであり、当該命令スケジューラはメモリスケジューラ、高速スケジューラ202、低速/全般浮動小数点スケジューラ204、および簡易浮動小数点スケジューラ206で構成される。μopスケジューラ202、204、206は、それらの従属入力レジスタオペランドソースの準備状態およびμopがそれらの演算の完了に必要とする実行リソースの利用可能性に基づいて、μopが、いつ実行準備が整うかを判断する。一実施形態の高速スケジューラ202は、メインクロックサイクルの各半分においてスケジューリングしてよい一方、他のスケジューラはメインプロセッサクロックサイクルごとに一回のみスケジューリングしてよい。スケジューラは、μopの実行をスケジューリングするためのディスパッチポートを調整する。
レジスタファイル208、210は、スケジューラ202、204、206および実行ブロック211内の実行ユニット212、214、216、218、220、222、224間に配置されてよい。レジスタファイル208、210の各々は、整数演算および浮動小数点演算をそれぞれ実行する。各レジスタファイル208、210は、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を、新しい従属μopにバイパスまたは転送し得るバイパスネットワークを含んでよい。整数レジスタファイル208および浮動小数点レジスタファイル210は、それら同士でデータを通信してよい。一実施形態において、整数レジスタファイル208は2つの別個のレジスタファイルに分割されてよく、1つのレジスタファイルは低次の32ビットデータ用、第2のレジスタファイルは高次の32ビットデータ用である。浮動小数点レジスタファイル210は、128ビット幅エントリを含んでよい。というのは、浮動小数点命令は通常、64〜128ビット幅のオペランドを有するからである。
実行ブロック211は、実行ユニット212、214、216、218、220、222、224を含んでよい。実行ユニット212、214、216、218、220、222、224は命令を実行してよい。実行ブロック211は、マイクロ命令が実行に必要とする整数データオペラント値および浮動小数点データオペランド値を格納するレジスタファイル208、210を含んでよい。一実施形態において、プロセッサ200は多数の実行ユニット、すなわちアドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224を備えてよい。別の実施形態において、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算およびSSE演算または他の演算を実行してよい。さらなる別の実施形態において、浮動小数点ALU222は、マイクロopの除算、平方根および剰余を実行するための64ビット単位の浮動小数点除算器を含んでよい。様々な実施形態において、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。一実施形態において、ALU演算が高速ALU実行ユニット216、218に渡されてよい。高速ALU216、218は、高速演算をクロックサイクルの半分の有効なレイテンシで実行してよい。一実施形態において、複素整数演算の大半は低速ALU220に移動される。というのは、低速ALU220は、乗算、シフト、フラグロジック、および分岐処理等の長レイテンシタイプの演算のための整数実行ハードウェアを含んでよいからである。メモリロード/ストア操作は、AGU212、214によって実行されてよい。一実施形態において、整数ALU216、218、220は、64ビットデータオペランドに整数演算を実行してよい。他の実施形態において、ALU216、218、220は、16、32、128、256等の様々なデータビットサイズをサポートするように実装されてよい。同様に、浮動小数点ユニット222、224は、様々なビット幅を有するオペランドの範囲をサポートするように実装されてよい。一実施形態において、浮動小数点ユニット222、224は、SIMD命令およびマルチメディア命令と連携して、128ビット幅のパックされたデータオペランドに演算を行ってよい。
一実施形態において、μopスケジューラ202、204、206は、親ロードが実行を終了する前に、従属する演算をディスパッチする。μopはプロセッサ200内で予測的にスケジュールされ、実行されてよく、プロセッサ200はまたメモリミスを処理するためのロジックを含んでよい。データロードがデータキャッシュ内で失敗する場合、従属する演算がパイプライン内にインフライトで存在する可能性があり、これにより、スケジューラは一時的に誤ったデータが残された状態になっている。再生メカニズムは、誤ったデータを使用する命令を追跡および再実行する。従属する演算のみが再生の必要がある可能性があり、独立した演算は完了を許可されてよい。プロセッサの一実施形態に係るスケジューラおよび再生メカニズムは、文字列比較演算のための命令シーケンスをキャッチするように設計されてもよい。
「レジスタ」という用語は、オペランドを識別するための命令の一部として使用され得るオンボードプロセッサのストレージ場所を指してよい。換言すると、レジスタとは、プロセッサの外部(プログラマの視点から)から使用可能であってよいレジスタであってよい。しかしながら、いくつかの実施形態において、レジスタは特定のタイプの回路に限定されなくてよい。レジスタは、データの格納、データの供給を行ってよく、また本明細書に記載の機能を実行してよい。本明細書に記載のレジスタは、プロセッサ内の回路によって、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等、任意の数の異なる技術を使用して実装されてよい。一実施形態において、整数レジスタは32ビットの整数データを格納する。一実施形態のレジスタファイルはまた、パックされたデータのための8個のマルチメディアSIMDレジスタを含む。後述の通り、レジスタはパックされたデータを保持するように設計されたデータレジスタであると理解されてよく、当該データレジスタとしては、カリフォルニア州サンタクララのインテルコーポレーションのMMX技術で有効にされるマイクロプロセッサ内の64ビット幅MMX(商標)レジスタ(いくつかの例において「mm」レジスタとも称される)といったものが挙げられる。整数および浮動小数点の両方の形態で利用可能なこれらのMMXレジスタは、SIMD命令およびSSE命令に伴うパックされたデータ要素と共に動作してよい。同様に、SSE2、SSE3、SSE4、またはそれ以降(概して「SSEx」と称される)に関する128ビット幅XMMレジスタ技術は、このようなパックされたデータオペランドを保持してよい。一実施形態において、パックされたデータおよび整数データを格納する際、レジスタは当該2つのデータタイプ間を区別する必要はない。一実施形態において、整数および浮動小数点は同一のレジスタファイル内または異なるレジスタファイル内に含まれてよい。さらに、一実施形態において、浮動小数点および整数データは異なるレジスタ内または同一のレジスタ内に格納されてよい。
以下の図中の例示において、多数のデータオペランドについて説明される可能性がある。図3Aは、本開示の実施形態による、マルチメディアレジスタ内の様々なパックされたデータタイプを表わしたものを示す。図3Aは、128ビット幅オペランドのパックされたバイト310、パックされたワード320、およびパックされたダブルワード(dword)330のデータタイプを示す。この例のパックされたバイトフォーマット310は128ビット長であってよく、16個のパックされたバイトデータ要素を含む。1バイトは、例えば、8ビットのデータとして定義されてよい。各バイトデータ要素の情報は、0ビットから7ビットまではバイト0、8ビットから15ビットまではバイト1、16ビットから23ビットまではバイト2、および最終の120ビットから127ビットまではバイト15内に格納されてよい。故に、すべての利用可能なビットがレジスタ内で使用されてよい。このストレージ構成によって、プロセッサのストレージ効率が向上する。なお、16個のデータ要素にアクセスされるので、16個のデータ要素に対し1つの操作が並列に実行されてよい。
概して、一データ要素は、同一の長さを持つ他のデータ要素と共に、単一のレジスタまたはメモリ場所に格納される個々のデータを含んでよい。SSEx技術に関するパックされたデータシーケンスにおいては、XMMレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された128ビットであってよい。同様に、MMXおよびSSE技術に関するパックされたデータシーケンスにおいては、MMXレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された64ビットであってよい。図3Aに示すデータタイプは128ビット長であるが、本開示の実施形態は、64ビット幅のオペランドまたは他のサイズのオペランドと共に動作してもよい。この例のパックされたワードフォーマット320は128ビット長であってよく、8個のパックされたワードデータ要素を含む。各パックされたワードは、16ビットの情報を含む。図3Aのパックされたダブルワードフォーマット330は128ビット長であってよく、4個のパックされたダブルワードデータ要素を含む。各パックされたダブルワードデータ要素は、32ビットの情報を含む。パックされたクワッドワードは128ビット長であってよく、2個のパックされたクワッドワードデータ要素を含む。
図3Bは、本開示の実施形態による考え得るレジスタ内データストレージフォーマットを示す。各パックされたデータは、1より多い独立データ要素を含んでよい。パックされたハーフ341、パックされたシングル342およびパックされたダブル343の3つのパックされたデータフォーマットが図示されている。パックされたハーフ341、パックされたシングル342およびパックされたダブル343の一実施形態は、固定小数点データ要素を含む。別の実施形態については、パックされたハーフ341、パックされたシングル342およびパックされたダブル343のうちの1または複数は、浮動小数点データ要素を含んでよい。パックされたハーフ341の一実施形態は、8個の16ビットデータ要素を含む128ビット長であってよい。パックされたシングル342の一実施形態は128ビット長であってよく、4個の32ビットデータ要素を含む。パックされたダブル343の一実施形態は128ビット長であってよく、2個の64ビットデータ要素を含む。このようなパックされたデータフォーマットは、例えば、96ビット、160ビット、192ビット、224ビット、256ビットまたはそれ以上といった他のレジスタ長にさらに拡張されてよいことを理解されたい。
図3Cは、本開示の実施形態による、マルチメディアレジスタ内の様々な符号付きおよび符号なしのパックされたデータタイプを表わしたものを示す。符号なしのパックされたバイト表現344は、SIMDレジスタ内の符号なしのパックされたバイトの格納状態を示す。各バイトデータ要素の情報は、0ビットから7ビットまではバイト0、8ビットから15ビットまではバイト1、16ビットから23ビットまではバイト2、および最終の120ビットから127ビットまではバイト15内に格納されてよい。故に、すべての利用可能なビットがレジスタ内で使用されてよい。このストレージ構成によって、プロセッサのストレージ効率が向上されてよい。なお、16個のデータ要素にアクセスされるので、16個のデータ要素に対し1つの操作が並列に実行されてよい。符号付きのパックされたバイト表現345は、符号付きのパックされたバイトの格納状態を示す。各バイトデータ要素の第8番目のビットは、符号インジケータであってよいことに留意されたい。符号なしのパックされたワード表現346は、ワード0からワード7がSIMDレジスタ内にどのように格納され得るかを示す。符号付きのパックされたワード表現347は、符号なしのパックされたワードのレジスタ内表現346と類似してよい。各ワードデータ要素の第16番目のビットが符号インジケータであってよいことに留意されたい。符号なしのパックされたダブルワード表現348は、ダブルワードデータ要素の格納方法を示す。符号付きパックされたダブルワード表現349は、符号なしのパックされたダブルワードのレジスタ内表現348と類似してよい。必要な符号ビットは、各ダブルワードデータ要素の第32番目のビットであってよいことに留意されたい。
図3Dは、演算エンコーディング(オペコード)の一実施形態を示す。さらに、フォーマット360は、カリフォルニア州サンタクララのインテルコーポレーションのworld wide web(www)(intel.com/design/litcentr)から入手可能な「IA‐32インテルアーキテクチャソフトウェア開発者のマニュアル第2巻:命令セットリファレンス」に記載のタイプのオペコードフォーマットと一致するレジスタ/メモリオペランドアドレス指定モードを含んでよい。一実施形態において、命令はフィールド361および362のうちの1または複数によってエンコードされてよい。1命令ごとに、最大2つのソースオペランド識別子364および365を含む、最大2つのオペランド位置が識別されてよい。一実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同一であってよい一方、他の実施形態においては、それらは異なってよい。別の実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同一であってよい一方、他の実施形態においては、それらは異なってよい。一実施形態において、ソースオペランド識別子364および365によって識別される複数のソースオペランドのうちの1つは、文字列比較演算の結果によって上書きされてよい一方、他の実施形態においては、識別子364はソースレジスタ要素に対応し、識別子365はデスティネーションレジスタ要素に対応する。一実施形態において、オペランド識別子364および365は、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。
図3Eは、本開示の実施形態による、40または40より多くのビットを有する別の考え得る演算エンコーディング(オペコード)フォーマット370を示す。オペコードフォーマット370は、オペコードフォーマット360と対応し、オプションのプレフィックスバイト378を含む。一実施形態による命令は、フィールド378、371および372のうちの1または複数によってエンコードされてよい。1命令ごとに最大2つのオペランド位置が、ソースオペランド識別子374および375並びにプレフィックスバイト378によって識別されてよい。一実施形態において、プレフィックスバイト378が使用され、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。一実施形態において、デスティネーションオペランド識別子376はソースオペランド識別子374と同一であってよい一方、他の実施形態においては、それらは異なってよい。別の実施形態において、デスティネーションオペランド識別子376は、ソースオペランド識別子375と同一であってよい一方、他の実施形態においては、それらは異なってよい。一実施形態において、命令はオペランド識別子374および375によって識別されるオペランドのうちの1または複数に対し演算を行い、オペランド識別子374および375によって識別される1または複数のオペランドは命令の結果で上書きされてよい一方、他の実施形態においては、識別子374および375によって識別されるオペランドは別のレジスタ内の別のデータ要素に書き込まれてよい。オペコードフォーマット360および370は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、MODフィールド363および373によって並びにオプションのスケールインデックスベースおよび変位バイトによって部分的に指定されることを可能にする。
図3Fは、本開示の実施形態による、さらなる別の考え得る演算エンコーディング(オペコード)フォーマットを示す。64ビットの単一命令複数データ(SIMD)算術演算は、コプロセッサデータ処理(CDP)命令を介して実行されてよい。演算エンコーディング(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有する1つのそのようなCDP命令を表示する。別の実施形態における、当該タイプのCDP命令演算は、フィールド383、384、387および388のうちの1または複数によってエンコードされてよい。1命令ごとに、最大2つのソースオペランド識別子385および390並びに1つのデスティネーションオペランド識別子386を含む、最大3つのオペランド位置が識別されてよい。コプロセッサの一実施形態は、8ビット、16ビット、32ビット、および64ビットの値に演算を行ってよい。一実施形態において、命令は整数データ要素に対し実行されてよい。いくつかの実施形態においては、命令は条件フィールド381を使用して条件的に実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド383によってエンコードされてよい。いくつかの実施形態において、ゼロ(Z)、負(N)、キャリー(C)およびオーバーフロー(V)検出がSIMDフィールドでなされてよい。いくつかの命令については、飽和タイプがフィールド384によってエンコードされてよい。
図4Aは、本開示の実施形態による、インオーダパイプラインおよびレジスタリネーミングステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図4Bは、本開示の実施形態による、プロセッサ内に含まれるべきインオーダアーキテクチャコアおよびレジスタリネーミングロジック、アウトオブオーダ発行/実行ロジックを示すブロック図である。図4A中の実線ボックスはインオーダパイプラインを示す一方、破線ボックスはレジスタリネーミング、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4B中の実線ボックスはインオーダアーキテクチャロジックを示す一方、破線ボックスはレジスタリネーミングロジックおよびアウトオブオーダ発行/実行ロジックを示す。
図4A中、プロセッサパイプライン400はフェッチステージ402、長さデコードステージ404、デコードステージ406、割り当てステージ408、リネーミングステージ410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ412、レジスタ読み取り/メモリ読み取りステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、およびコミットステージ424を含んでよい。
図4B中、矢印は2または2より多いユニット間の連結を示し、矢印の方向はそれらのユニット間のデータフロー方向を示す。図4Bは、実行エンジンユニット450に連結されたフロントエンドユニット430を含むプロセッサコア490を示し、これら両方はメモリユニット470に連結されてよい。
コア490は縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッド若しくは代替的なコアタイプであってよい。一実施形態において、コア490は、例えば、ネットワークコアまたは通信コア、圧縮エンジンコア、グラフィックコア等の特定用途のコアであってよい。
フロントエンドユニット430は、命令キャッシュユニット434に連結された分岐予測ユニット432を含んでよい。命令キャッシュユニット434は、命令変換ルックアサイドバッファ(TLB)436に連結されてよい。TLB436は命令フェッチユニット438に連結されてよく、命令フェッチユニット438はデコードユニット440に連結される。デコードユニット440は命令をデコードしてよく、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよく、これらは元の命令からデコードされてよく、あるいは元の命令を反映してよく、あるいは元の命令から導かれてよい。デコーダは、様々な異なるメカニズムを使用して実装されてよい。好適なメカニズムの例としては特に限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が含まれる。一実施形態において、命令キャッシュユニット434はさらにメモリユニット470内のレベル2(L2)キャッシュユニット476に連結されてよい。デコードユニット440は、実行エンジンユニット450内のリネーミング/アロケータユニット452に連結されてよい。
実行エンジンユニット450は、リタイアメントユニット454に連結されたリネーミング/アロケータユニット452および1または複数のスケジューラユニット456のセットを含んでよい。スケジューラユニット456は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表わす。スケジューラユニット456は物理レジスタファイルユニット458に連結されてよい。複数の物理レジスタファイルユニット458の各々は1または複数の物理レジスタファイルを表わしており、それぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等の1または複数の異なるデータタイプを格納する。物理レジスタファイルユニット458にリタイアメントユニット454を重複させ、レジスタリネーミングおよびアウトオブオーダ実行を実装可能な様々な方法を示してよい(例えば、1または複数のリオーダバッファおよび1または複数のリタイアメントレジスタファイルを使用して、1または複数の将来のファイル、1または複数の履歴バッファおよび1または複数のリタイアメントレジスタファイルを使用して、レジスタマップおよびレジスタプールを使用して等)。概して、アーキテクチャレジスタは、プロセッサの外部から、またはプログラマの視点から可視であってよい。レジスタは、任意の既知の特定のタイプの回路に限定されなくてよい。様々な異なるタイプのレジスタが、それらが本明細書に記載のデータを格納し、提供する限り、好適であってよい。好適なレジスタの例としては特に限定されないが、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等が含まれる。リタイアメントユニット454および物理レジスタファイルユニット458は、実行クラスタ460に連結されてよい。実行クラスタ460は、1または複数の実行ユニット162のセット、1または複数のメモリアクセスユニット464のセットを含んでよい。実行ユニット462は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点)に行ってよい。いくつかの実施形態は、特定の関数または複数の関数セットに専用の多数の実行ユニットを含んでよく、他の実施形態は、1つのみの実行ユニットまたは、それらすべてが全関数を実行する複数の実行ユニットを含んでよい。スケジューラユニット456、物理レジスタファイルユニット458、実行クラスタ460は可能性として複数形で図示されているのは、特定の実施形態が特定タイプのデータ/演算のために別個の複数のパイプライン(例えば、スカラ整数のパイプライン、スカラ浮動小数点/パックされた整数/パックされた浮動小数点/ベクトル整数/ベクトル浮動小数点のパイプラインおよび/またはメモリアクセスパイプライン。これらの各々は独自のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する特定の実施形態が実装されてよい)を形成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
メモリアクセスユニット464のセットがメモリユニット470に連結されてよく、当該メモリユニット470はレベル2(L2)キャッシュユニット476に連結されたデータキャッシュユニット474に連結されたデータTLBユニット472を含んでよい。一例示的な実施形態において、メモリアクセスユニット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または2より多い並列セットの実行)をサポートしてよいことを理解されたい。マルチスレッディングサポートは、特に限定されないが、例えば、時分割マルチスレッディング、同時マルチスレッディング(この場合、単一の物理コアは、物理コアが同時にマルチスレッディングをする複数のスレッドの各々に対する論理コアを提供する)、またはこれらの組み合わせを含むことによって行われてよい。このような組み合わせとしては、特に限定されないが、例えば、時分割フェッチおよび時分割デコード並びにインテル(登録商標)ハイパースレッド技術等のそれら以降の同時マルチスレッディングが含まれてよい。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明される可能性があるが、レジスタリネーミングはインオーダアーキテクチャにおいて使用されてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令キャッシュユニット434/データキャッシュユニット474および共有L2キャッシュユニット476を含んでもよく、他の実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等、命令およびデータの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュおよび外部キャッシュの組み合わせを含んでよく、外部キャッシュはコアおよび/またはプロセッサの外部に存在してよい。他の実施形態において、すべてのキャッシュは、コアおよび/またはプロセッサの外部に存在してよい。
図5Aは、本開示の実施形態によるプロセッサ500のブロック図である。一実施形態において、プロセッサ500は、マルチコアプロセッサを含んでよい。プロセッサ500は、1または複数のコア502に通信可能に連結されたシステムエージェント510を含んでよい。さらに、コア502およびシステムエージェント510は1または複数のキャッシュ506に通信可能に連結されてよい。コア502、システムエージェント510およびキャッシュ506は、1または複数のメモリ制御ユニット552を介して通信可能に連結されてよい。さらに、コア502、システムエージェント510およびキャッシュ506は、メモリ制御ユニット552を介してグラフィックモジュール560に通信可能に連結されてよい。
プロセッサ500は、複数のコア502、システムエージェント510、および複数のキャッシュ506およびグラフィックモジュール560を相互接続するための任意の好適なメカニズムを含んでよい。一実施形態において、プロセッサ500は、複数のコア502、システムエージェント510、および複数のキャッシュ506、およびグラフィックモジュール560を相互接続するためのリングベースの相互接続ユニット508を含んでよい。他の実施形態において、プロセッサ500は、このような複数のユニットを相互接続するための任意の数の周知技術を含んでよい。リングベースの相互接続ユニット508はメモリ制御ユニット552を利用して、相互接続を容易化してよい。
プロセッサ500は、複数のコア内の1または複数のレベルのキャッシュ、キャッシュ506等の1または複数の共有キャッシュユニット、または統合メモリコントローラユニット552のセットに連結された外部メモリ(不図示)を含むメモリ階層を含んでよい。キャッシュ506は任意の好適なキャッシュを含んでよい。一実施形態において、キャッシュ506は、レベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。
様々な実施形態において、コア502の1または複数は、マルチスレッディングを実行してよい。システムエージェント510は、コア502を調整し、コアを操作するためのコンポーネントを含んでよい。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)を含んでよい。PCUは、コア502の電力状態を調整するために必要なロジックおよびコンポーネントであってよく、または当該ロジックおよび当該コンポーネントを含んでよい。システムエージェント510は、1または複数の外部接続されたディスプレイまたはグラフィックモジュール560を駆動するためのディスプレイエンジン512を含んでよい。システムエージェント510は、グラフィックのための通信バスのためのインタフェース1214を含んでよい。一実施形態において、インタフェース1214は、PCIエクスプレス(PCIe)によって実装されてよい。さらなる実施形態において、インタフェース1214はPCIエクスプレスグラフィック(PEG)によって実装されてよい。システムエージェント510は、ダイレクトメディアインタフェース(DMI)516を含んでよい。DMI 516は、マザーボード上またはコンピュータシステムの他の部分にある異なるブリッジ間にリンクを提供してよい。システムエージェント510は、コンピューティングシステムの他の要素にPCIeリンクを提供するためのPCIeブリッジ1218を含んでよい。PCIeブリッジ1218は、メモリコントローラ1220およびコヒーレンシロジック1222を使用して実装されてよい。
コア502は任意の好適な態様で実装されてよい。コア502は、アーキテクチャおよび/または命令セットの観点から、同種または異種であってよい。一実施形態において、コア502のうちのいくつかはインオーダであってよい一方、他のものはアウトオブオーダであってよい。別の実施形態において、コア502のうちの2または2より多いものは同一の命令セットを実行してよい一方、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行してよい。
プロセッサ500は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能であり得るCore(商標)i3、i5、i7、2DuoおよびQuad、Xeon(商標)、Itanium(商標)、XScale(商標)またはStrongARM(商標)プロセッサ等の汎用プロセッサを含んでよい。プロセッサ500は、ARM Holdings社、MIPS等の別の会社から供給されてもよい。プロセッサ500は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンプロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ等の特定用途向けプロセッサであってよい。プロセッサ500は、1または複数のチップ上に実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、またはNMOS等の多数のプロセス技術のうちの任意のものを使用する1または複数の基板での一部であってよく、および/または当該基板上に実装されてよい。
一実施形態において、キャッシュ506のうちの特定の1つがコア502のうちの複数のものによって共有されてよい。別の実施形態において、キャッシュ506のうちの特定の1つがコア502のうちの1つに専用とされてよい。キャッシュ506のコア502への割り当ては、キャッシュコントローラまたは他の好適なメカニズムによって処理されてよい。キャッシュ506のうちの特定の1つは、特定のキャッシュ506の時分割を実装することによって、2または2より多いコア502によって共有されてよい。
グラフィックモジュール560は統合グラフィック処理サブシステムを実装してよい。一実施形態において、グラフィックモジュール560は、グラフィックプロセッサを含んでよい。さらに、グラフィックモジュール560はメディアエンジン565を含んでよい。メディアエンジン565は、メディアエンコーディングおよびビデオデコーディングを提供してよい。
図5Bは、本開示の実施形態によるコア502の例示的な実装のブロック図である。コア502は、アウトオブオーダエンジン580に通信可能に連結されたフロントエンド570を含んでよい。コア502は、キャッシュ階層503を介してプロセッサ500の他の部分に通信可能に連結されてよい。
フロントエンド570は、上記の通りフロントエンド201によって完全にまたは部分的にといったように、任意の好適な態様で実装されてよい。一実施形態において、フロントエンド570は、キャッシュ階層503を介してプロセッサ500の他の部分と通信してよい。さらなる実施形態において、フロントエンド570は、プロセッサ500の部分から命令をフェッチしてよく、当該命令がアウトオブオーダ実行エンジン580に渡される際、プロセッサパイプラインで後から使用されるように準備してよい。
アウトオブオーダ実行エンジン580は、上記の通りアウトオブオーダ実行エンジン203によって完全にまたは部分的にといったように、任意の好適な態様で実装されてよい。アウトオブオーダ実行エンジン580は、フロントエンド570から受信された命令を実行のために準備してよい。アウトオブオーダ実行エンジン580は、割り当てモジュール1282を含んでよい。一実施形態において、割り当てモジュール1282は、特定の命令を実行するために、プロセッサ500のリソース、またはレジスタ若しくはバッファ等の他のリソースを割り当ててよい。割り当てモジュール1282は、メモリスケジューラ、高速スケジューラまたは浮動小数点スケジューラ等のスケジューラ内で割り当てを行ってよい。このようなスケジューラは、図5B中のリソーススケジューラ584によって表わされてよい。割り当てモジュール1282は、図2に関し記載の割り当てロジックによって完全にまたは部分的に実装されてよい。リソーススケジューラ584は、特定のリソースソースの準備状態および命令を実行するために必要とされる実行リソースの利用可能性に基づいて、命令が、いつ実行準備が整うかを判断してよい。リソーススケジューラ584は、例えば、上記の通りスケジューラ202、204、206によって実装されてよい。リソーススケジューラ584は、1または複数のリソースに対する命令の実行をスケジュールしてよい。一実施形態において、このようなリソースはコア502の内部に存在してよく、例えばリソース586として図示されてよい。別の実施形態において、このようなリソースはコア502の外部に存在してよく、例えばキャッシュ階層503によってアクセス可能であってよい。リソースは、例えば、メモリ、キャッシュ、レジスタファイルまたはレジスタを含んでよい。コア502の内部に存在するリソースは、図5B中のリソース586によって表されてよい。必要に応じて、リソース586に書き込まれた値またはリソース586から読み取られた値は、例えばキャッシュ階層503を介してプロセッサ500の他の部分と調整されてよい。命令がリソースに割り当てられると、それらはリオーダバッファ588に置かれてよい。リオーダバッファ588は、命令が実行されるとき命令を追跡してよく、プロセッサ500の任意の好適な基準に基づいてそれらの実行を選択的に並べ替えてよい。一実施形態において、リオーダバッファ588は独立して実行可能な命令または一連の命令を識別してよい。このような命令または一連の命令は、他のこのような命令と並列に実行されてよい。コア502内の並列実行は、任意の好適な数の別個の実行ブロックまたは仮想プロセッサによって実行されてよい。一実施形態において、メモリ、レジスタ、およびキャッシュ等の共有リソースは、特定のコア502内の複数の仮想プロセッサにアクセス可能であってよい。他の実施形態において、共有リソースは、プロセッサ500内の複数の処理エンティティにアクセス可能であってよい。
キャッシュ階層503は、任意の好適な態様で実装されてよい。例えば、キャッシュ階層503は、キャッシュ572、574等の1または複数の下位レベルのキャッシュまたは中位レベルのキャッシュを含んでよい。一実施形態において、キャッシュ階層503は、キャッシュ572、574に通信可能に連結されたLLC595を含んでよい。別の実施形態において、LLC595は、プロセッサ500のすべての処理エンティティにアクセス可能なモジュール590内に実装されてよい。さらなる実施形態において、モジュール590は、インテル社のプロセッサのアンコアモジュールで実装されてよい。モジュール590は、コア502の実行のために必要なプロセッサ500の部分またはサブシステムを含んでよいが、コア502内に実装されなくてもよい。LLC595に加え、モジュール590は、例えば、ハードウェアインタフェース、メモリコヒーレンシコーディネータ、インタープロセッサ相互接続、命令パイプライン、またはメモリコントローラを含んでよい。プロセッサ500に利用可能なRAM599へのアクセスは、モジュール590、より具体的にはLLC595を介してなされてよい。さらに、コア502の他のインスタンスは、モジュール590に同様にアクセスしてよい。コア502の当該他のインスタンスの調整は、モジュール590を介して部分的に容易化されてよい。
図6〜8は、プロセッサ500を含めるために好適な例示的なシステムを示してよい一方で、図9は、コア502の1または複数を含み得る例示的なシステムオンチップ(SoC)を示してよい。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および実装も好適であってよい。一般的に、本明細書に開示のプロセッサおよび/または他の実行ロジックを組み込む非常に多種多様なシステムまたは電子デバイスが概して好適であってよい。
図6は、本開示の実施形態による、システム600のブロック図を示す。システム600は、1または複数のプロセッサ610、615を含んでよく、当該1または複数のプロセッサ610、615は、グラフィックメモリコントローラハブ(GMCH)620に連結されてよい。図6中、追加のプロセッサ615のオプションとしての性質は、破線で示されている。
各プロセッサ610、615はプロセッサ500の何らかのバージョンであってよい。しかしながら、統合グラフィックロジックおよび統合メモリ制御ユニットは、プロセッサ610、615内に存在しなくてもよいことに留意されたい。図6は、GMCH620はメモリ640に連結されてよく、メモリ640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)であってよいことを示す。少なくとも1つの実施形態で、DRAMは不揮発性キャッシュに関連付けられてよい。
GMCH620は、チップセットまたはチップセットの一部であってよい。GMCH620はプロセッサ610、615と通信し、プロセッサ610、615とメモリ640との間のやり取りを制御してよい。また、GMCH620は、プロセッサ610、615と、システム600の他の要素と、の間の加速バスインタフェースとして動作してもよい。一実施形態において、GMCH620は、プロセッサ610、615とフロントサイドバス(FSB)695等のマルチドロップバスを介して通信する。
さらに、GMCH620はディスプレイ645(フラットパネルディスプレイ等)に連結されてよい。一実施形態において、GMCH620は統合グラフィックアクセラレータを含んでよい。さらにGMCH620は、入/出力(I/O)コントローラハブ(ICH)650に連結されてよく、当該入/出力(I/O)コントローラハブ(ICH)650は、様々な周辺デバイスをシステム600に連結するために使用されてよい。外部グラフィックデバイス660は、別の周辺デバイス670と共にICH650に連結された個別のグラフィックデバイスを含んでよい。
また他の実施形態においては、追加のまたは異なるプロセッサがシステム600内に存在してもよい。例えば、追加のプロセッサ610、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の何らかのバージョンであってよい。
図7は2つのプロセッサ770、780を図示する可能性があるものの、本開示の範囲はそのようには限定されないことを理解されたい。他の実施形態においては、1または複数の追加のプロセッサが特定のプロセッサ内に存在してよい。
プロセッサ770および780は、統合メモリコントローラユニット772および782をそれぞれ含むものとして図示されている。プロセッサ770はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース776および778を含んでよく、同様に第2のプロセッサ780はP−Pインタフェース786および788を含んでよい。プロセッサ770、780は、P−Pインタフェース回路778、788を使用してポイントツーポイント(P−P)インタフェース750を介して情報を交換してよい。図7に図示の通り、IMC 772および782は当該プロセッサをそれぞれのメモリ、すなわちメモリ732とメモリ734とに連結してよく、当該メモリは一実施形態において、それぞれのプロセッサに局所的に取り付けられたメインメモリの一部であってよい。
プロセッサ770、780はそれぞれ、ポイントツーポイントインタフェース回路776、794、786、798を使用して、個々のP−Pインタフェース752、754を介してチップセット790と情報を交換してよい。一実施形態において、チップセット790はまた、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738と情報を交換してもよい。
共有キャッシュ(不図示)がいずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、共有キャッシュはさらに当該プロセッサとP−P相互接続を介して接続されていてよく、その結果、プロセッサが低電力モードの場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るようになる。
チップセット790はインタフェース796を介して第1のバス716に連結されてよい。一実施形態において、第1のバス716はペリフェラルコンポーネントインターコネクト(PCI)バスであってよく、またはPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスであってよいが、本開示の範囲はそのようには限定されない。
図7に図示の通り、様々なI/Oデバイス714が、バスブリッジ718と共に第1のバス716に連結されてよく、当該バスブリッジ718は第1のバス716を第2のバス720に連結する。一実施形態において、第2のバス720はローピンカウント(LPC)バスであってよい。一実施形態において、様々なデバイスが第2のバス720に連結されてよく、これらとしては、例えば、キーボードおよび/またはマウス722、通信デバイス727、並びに命令/コードおよびデータ730を含み得るディスクドライブ若しくは他の大容量ストレージデバイス等のストレージユニット728が含まれる。さらに、オーディオI/O724が第2のバス720に連結されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図7のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
図8は、本開示の実施形態による第3のシステム800のブロック図を示す。図7および図8中で同様の要素は同様の参照符号が付されており、図8の他の態様を不明瞭にするのを回避すべく、図7の特定の態様は図8で省略されている。
図8は、プロセッサ870、880が統合メモリおよびI/O制御ロジック(CL)872、882をそれぞれ含んでよいことを示す。少なくとも1つの実施形態について、CL 872、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上でのオプションの機能を表わしてよい。相互接続ユニット902は、アプリケーションプロセッサ910、システムエージェントユニット910、バスコントローラユニット916、統合メモリコントローラユニット914、メディアプロセッサのセットまたは1または複数のメディアプロセッサ920、スタティックランダムアクセスメモリ(SRAM)ユニット930、ダイレクトメモリアクセス(DMA)ユニット932、および1または複数の外部ディスプレイに連結するためのディスプレイユニット940に連結されてよい。ここで、当該アプリケーションプロセッサ910は1または複数のコア902A〜Nのセットおよび共有キャッシュユニット906を含んでよい。当該メディアプロセッサのセットまたは1または複数のメディアプロセッサ920は統合グラフィックロジック908、静止および/またはビデオカメラ機能を提供するためのイメージプロセッサ924、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926、およびビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928を含んでよい。
図10は、中央処理装置(CPU)およびグラフィック処理ユニット(GPU)を含むプロセッサを示し、これらは本開示の実施形態による少なくとも1つの命令を実行してよい。一実施形態において、少なくとも1つの実施形態による演算を実行するための命令は、CPUによって実行され得る。別の実施形態においては、命令はGPUによって実行され得る。さらなる別の実施形態においては、命令はGPUおよびCPUによって実行される演算ンの組み合わせを通して実行されてよい。例えば、一実施形態においては、一実施形態による命令は、GPUでの実行のために受信およびデコードされてよい。しかしながら、デコードされた命令内の1または複数の演算はCPUによって実行されてよく、命令の最終的なリタイアのために結果がGPUに返される。逆に、いくつかの実施形態においては、CPUがプライマリプロセッサとして、GPUがコプロセッサとして動作してよい。
いくつかの実施形態においては、高度に並列化されたスループットの高いプロセッサから利益享受する命令はGPUによって実行されてよい一方で、深くパイプライン化されたアーキテクチャから利益享受するプロセッサの性能から利益享受する命令はCPUによって実行されてよい。例えば、グラフィック、科学アプリケーション、金融アプリケーションおよび他の並列ワークロードは、GPUの性能から利益享受してよく、そのように実行可能であるのに対して、オペレーティングシステムのカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、CPUにより好適であってよい。
図10中、プロセッサ1000は、CPU1005、GPU1010、イメージプロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、ディスプレイデバイス1040、メモリインタフェースコントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、デュアルデータレート(DDR)コントローラ1060、セキュリティエンジン1065、およびI2S/I2Cコントローラ1070を含む。図10中のプロセッサ内に、より多くのCPUまたはGPUおよび他の周辺インタフェースコントローラを含む、他のロジックおよび回路が含まれてもよい。
少なくとも1つの実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内の様々なロジックを表わす典型的データによって実装されてよく、当該データは機械による読み取り時に、機械に対し本明細書に記載の技術を実行するためのロジックを生成させる。このような「IPコア」として知られる典型的なものが有形の機械可読媒体(「テープ」)上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。例えば、ARM Holdingsによって開発されたCortex(商標)プロセッサファミリおよび中国科学院のコンピューティング技術協会(ICT)により開発された龍芯(Loongson)IPコア等のIPコアが、テキサスインスツルメンツ、クアルコム、アップルまたはサムスン等の様々な顧客またはライセンシにライセンスまたは販売されてよく、またこれらの顧客またはライセンシによって生産されるプロセッサに実装されてよい。
図11は、本開示の実施形態によるIPコアの開発を示すブロック図を示す。ストレージ1130は、シミュレーションソフトウェア1120および/またはハードウェア若しくはソフトウェアモデル1110を含んでよい。一実施形態において、IPコア設計を表わすデータがメモリ1140(例えばハードディスク)、有線接続(例えばインターネット)1150または無線接続1160を介してストレージ1130に提供されてよい。次に、シミュレーションツールおよびモデルによって生成されるIPコア情報が製造施設に転送されてよく、製造施設において、少なくとも一実施形態による少なくとも1つの命令を実行するためのIPコア情報がサードパーティによって製造されてよい。
いくつかの実施形態において、1または複数の命令は第1のタイプまたはアーキテクチャ(例えばx86)に対応してよく、1または複数の命令は異なるタイプまたはアーキテクチャ(例えばARM)のプロセッサで変換またはエミュレートされてよい。従って、一実施形態による命令は、ARM、x86、MIPS、GPUを含む任意のプロセッサ若しくはプロセッサタイプまたは他のプロセッサタイプ若しくはアーキテクチャで実行されてよい。
図12は、本開示の実施形態による第1のタイプの命令が異なるタイプのプロセッサによってエミュレートされ得る方法を示す。図12中、プログラム1205は、一実施形態による命令と同一または実質的に同一の機能を実行してよいいくつかの命令を含む。しかしながら、プログラム1205の命令はプロセッサ1215と異なるまたはプロセッサ1215と互換性のないタイプおよび/またはフォーマットであってよく、つまりプログラム1205内の命令タイプはプロセッサ1215によってネイティブに実行可能でなくてよいことを意味する。しかしながら、エミュレーションロジック1210の補助を用いて、プログラム1205の命令は、プロセッサ1215によってネイティブに実行可能な命令に変換されてよい。一実施形態において、エミュレーションロジックはハードウェアで具現化されてよい。別の実施形態においては、エミュレーションロジックは、プログラム1205内の命令タイプを、プロセッサ1215でネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化されてよい。他の実施形態においては、エミュレーションロジックは、固定機能のハードウェアまたはプログラム可能なハードウェアと、有形の機械可読媒体上に格納されたプログラムとの組み合わせであってよい。一実施形態において、プロセッサはエミュレーションロジックを含む一方で、他の実施形態においては、エミュレーションロジックはプロセッサの外部に存在し、サードパーティによって供給されてよい。一実施形態において、プロセッサは、プロセッサ内に含まれる、またはプロセッサに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを有する有形の機械可読媒体に具現化されたエミュレーションロジックをロードしてよい。
図13は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるものの、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。図13は、高水準言語1302のプログラムが、x86バイナリコード1306を生成するx86コンパイラ1304を使用してコンパイルされ得ることを示しており、当該x86バイナリコード1306は、少なくとも1つのx86命令セットコアを持つプロセッサ1316によってネイティブに実行されてよい。少なくとも1つのx86命令セットコアを持つプロセッサ1316は、少なくとも1つのx86命令セットコアを持つインテルのプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも1つのx86命令セットコアを持つインテルのプロセッサと実質的に同一の結果を得るべく、(1)インテルx86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを持つインテルのプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換性のある状態で実行またはそれ以外の方法で処理することによってである。x86コンパイラ1304は、x86バイナリコード1306(例えばオブジェクトコード)を生成するよう動作可能なコンパイラを表わし、当該x86バイナリコード1306は、追加のリンク処理と共に、または追加のリンク処理なく、少なくとも1つのx86命令セットコアを持つプロセッサ1316上で実行可能である。同様に、図13は、高水準言語1302のプログラムが、代替の命令セットバイナリコード1310を生成する代替の命令セットコンパイラ1308を使用してコンパイルされ得ることを示しており、当該代替の命令セットバイナリコード1310は、少なくとも1つのx86命令セットコアを持たないプロセッサ1314(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。
命令コンバータ1312は、x86バイナリコード1306を代替的な命令セットバイナリコード1311に変換するために使用され、当該代替的な命令セットバイナリコード1311は、x86命令セットコアを持たないプロセッサ1314によってネイティブに実行されてよい。この変換されたコードは、代替的な命令セットコンパイラ1308からもたらされる代替的な命令セットバイナリコード1310と同一であっても、なくてもよい。しかしながら、変換されたコードは同一の全般的な演算を実現し、代替的な命令セットの命令で構成されるであろう。故に、命令コンバータ1312は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード1306を実行できるようにする。
図14は、本開示の実施形態によるプロセッサの命令セットアーキテクチャ1400のブロック図である。命令セットアーキテクチャ1400は、任意の好適な数または種類のコンポーネントを含んでよい。
例えば、命令セットアーキテクチャ1400は、1または複数のコア1406、1407およびグラフィック処理装置1415等の処理エンティティを含んでよい。コア1406、1407は、バスまたはキャッシュ等の任意の好適なメカニズムを介して命令セットアーキテクチャ1400の残りの部分に通信可能に連結されてよい。一実施形態において、コア1406、1407は、バスインタフェースユニット1409およびL2キャッシュ1410を含み得るL2キャッシュ制御1408を介して通信可能に連結されてよい。コア1406、1407およびグラフィック処理装置1415は、相互接続1410を介して、互いにおよび命令セットアーキテクチャ1400の残りの部分に通信可能に連結されてよい。一実施形態において、グラフィック処理装置1415はビデオコード1420を使用し、特定のビデオ信号が出力のために、エンコードおよびデコードされる方法を定義してよい。
また、命令セットアーキテクチャ1400は、任意の数または種類のインタフェース、コントローラ、または電子デバイス若しくはシステムの他の部分とやり取りする若しくはそれと通信するための他のメカニズムを含んでもよい。このようなメカニズムは、例えば、周辺機器、通信デバイス、他のプロセッサ、またはメモリとのやり取りを容易にしてよい。図14の例において、命令セットアーキテクチャ1400は、液晶ディスプレイ(LCD)ビデオインタフェース1425、加入者インタフェースモジュール(SIM)インタフェース1430、ブートROMインタフェース1435、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)コントローラ1440、フラッシュコントローラ1445、およびシリアル周辺インタフェース(SPI)マスタユニット1450を含んでよい。LCDビデオインタフェース1425は、例えば、GPU1415からのビデオ信号の出力を、例えば、mobile industry processor interface(MIPI)1490または高精細度マルチメディアインタフェース(HDMI(登録商標))1495を介して、ディスプレイに提供してよい。このようなディスプレイとしては、例えばLCDが含まれてよい。SIMインタフェース1430は、SIMカードまたはデバイスへの、または、SIMカードまたはデバイスからのアクセスを提供してよい。SDRAMコントローラ1440は、SDRAMチップまたはモジュール等のメモリへの、または、当該メモリからのアクセスを提供してよい。フラッシュコントローラ1445は、フラッシュメモリまたはRAMの他のインスタンス等のメモリへの、または当該メモリからのアクセスを提供してよい。SPIマスタユニット1450は、Bluetooth(登録商標)モジュール1470、高速3Gモデム1475、全地球測位システムモジュール1480、または802.11等の通信規格を実装する無線モジュール1485等の通信モジュールへの、または、当該通信モジュールからのアクセスを提供してよい。
図15は、本開示の実施形態による、プロセッサの命令セットアーキテクチャ1500のより詳細なブロック図である。命令アーキテクチャ1500は命令セットアーキテクチャ1400の1または複数の態様を実装してよい。さらに、命令セットアーキテクチャ1500はプロセッサ内の命令を実行するためのモジュールおよびメカニズムを示してよい。
命令アーキテクチャ1500は、1または複数の実行エンティティ1565に通信可能に連結されたメモリシステム1540を含んでよい。さらに、命令アーキテクチャ1500は、実行エンティティ1565およびメモリシステム1540に通信可能に連結されたユニット1510のようなキャッシュおよびバスインタフェースユニットを含んでよい。一実施形態において、命令の実行エンティティ1564へのロードは、実行の1または複数のステージによって行われてよい。このようなステージとしては、例えば、命令プリフェッチステージ1530、デュアル命令デコードステージ1550、レジスタリネームステージ155、発行ステージ1560、およびライトバックステージ1570を含んでよい。
別の実施形態において、メモリシステム1540はリタイアメントポインタ1582を含んでよい。リタイアメントポインタ1582は、最後にリタイアされた命令のプログラム順序(PO)を識別する値を格納してよい。リタイアメントポインタ1582は、例えば、リタイアメントユニット454によって設定されてよい。命令がまだリタイアされていない場合、リタイアメントポインタ1582はヌル値を含んでよい。
実行エンティティ1565は、任意の好適な数および種類のメカニズムを含んでよく、当該メカニズムによって、プロセッサは命令を実行してよい。図15の例において、実行エンティティ1565は、ALU/乗算ユニット(MUL)1566、ALU1567、および浮動小数点ユニット(FPU)1568を含んでよい。一実施形態において、このようなエンティティは、特定のアドレス1569内に含まれる情報を活用してよい。実行エンティティ1565はステージ1530、1550、1555、1560、1570と組み合わせて、実行ユニットを集約的に形成してよい。
ユニット1510は、任意の好適な態様で実装されてよい。一実施形態において、ユニット1510はキャッシュ制御を実行してよい。故に、このような実施形態において、ユニット1510はキャッシュ1525を含んでよい。さらなる実施形態においては、キャッシュ1525は、ゼロ、128k、256k、512k、1Mまたは2Mバイトのメモリ等の任意の好適なサイズを持つL2統一キャッシュとして実装されてよい。別のさらなる実施形態において、キャッシュ1525はエラー訂正コードメモリに実装されてよい。別の実施形態において、ユニット1510はプロセッサまたは電子デバイスの他の部分とのバスインタフェースを実行してよい。故に、このような実施形態においては、ユニット1510は相互接続を経由して、イントラプロセッサバス、インタープロセッサバス、または他の通信バス、ポート、またはラインと通信するためのバスインタフェースユニット1520を含んでよい。バスインタフェースユニット1520は、例えば、実行エンティティ1565と命令アーキテクチャ1500の外部にあるシステムの部分との間のデータ転送のためのメモリおよび入/出力アドレスの生成を行うべく、インタフェースを提供してよい。
その機能をさらに容易化するために、バスインタフェースユニット1520は、割り込みおよびプロセッサまたは電子デバイスの他の部分との他の通信を生成するための割り込み制御および分散ユニット1511を含んでよい。一実施形態において、バスインタフェースユニット1520は、複数の処理コアのためのキャッシュアクセスおよびコヒーレンシを処理するスヌープ制御ユニット1512を含んでよい。さらなる実施形態においては、このような機能を提供すべく、スヌープ制御ユニット1512は、異なるキャッシュ間での情報交換を処理するキャッシュ対キャッシュ転送ユニットを含んでよい。別のさらなる実施形態においては、スヌープ制御ユニット1512は、ユニット1510等のキャッシュコントローラがこのようなモニタリングを直接実行する必要がないように、他のキャッシュ(不図示)のコヒーレンシをモニタリングする1または複数のフィルタ1514を含んでよい。ユニット1510は、命令アーキテクチャ1500のアクションを同期するための任意の好適な数のタイマ1515を含んでよい。また、ユニット1510は、ACポート1516を含んでよい。
メモリシステム1540は、命令アーキテクチャ1500の処理ニーズのための情報を格納するための任意の好適な数および種類のメカニズムを含んでよい。一実施形態において、メモリシステム1504は、メモリまたはレジスタに書き込まれる、またはメモリまたはレジスタからリードバックされるバッファ等の情報を格納するためのロードストアユニット1530を含んでよい。別の実施形態において、メモリシステム1504は、物理アドレスおよび仮想アドレス間のアドレス値のルックアップを提供するトランスレーションルックアサイドバッファ(TLB)1545を含んでよい。さらなる別の実施形態において、バスインタフェースユニット1520は、仮想メモリへのアクセスを容易にするためのメモリ管理ユニット(MMU)1544を含んでよい。さらなる別の実施形態において、メモリシステム1504は、レイテンシを低減すべく、命令が実際に実行される必要がある前に、メモリに対しこのような命令を要求するためのプリフェッチャ1543を含んでよい。
命令を実行するための命令アーキテクチャ1500の演算は、異なるステージを介して実行されてよい。例えば、ユニット1510を使用して、命令プリフェッチステージ1530は、プリフェッチャ1543を介して命令にアクセスしてよい。取得された命令は、命令キャッシュ1532に格納されてよい。プリフェッチステージ1530は、高速ループモードのためのオプション1531を有効にしてよく、この場合、特定のキャッシュに収まるだけ十分小さいループを形成する一連の命令が実行される。一実施形態において、このような実行は、例えば、命令キャッシュ1532からの追加の命令にアクセスする必要なく実行されてよい。どの命令をプリフェッチするかという判断は、例えば、分岐予測ユニット1535によってなされてよく、当該分岐予測ユニット1535は、グローバル履歴1536の実行指標、ターゲットアドレス1537の指標、または戻りスタック1538の内容にアクセスして、次にコードのどの分岐1557が実行されるかを判断してよい。このような分岐は、場合によっては結果としてプリフェッチされてよい。分岐1557は、後述の通り、演算の他のステージを介して生成されてよい。命令プリフェッチステージ1530は命令に加え、将来の命令に関する予測をデュアル命令デコードステージに提供してよい。
デュアル命令デコードステージ1550は、受信された命令を実行可能なマイクロコードベースの命令に変換してよい。デュアル命令デコードステージ1550は、1クロックサイクルごとに2つの命令を同時にデコードしてよい。さらに、デュアル命令デコードステージ1550は、その結果をレジスタリネームステージ1555に渡してよい。また、デュアル命令デコードステージ1550は、そのデコーディングおよびマイクロコードの最終的な実行からもたらされるあらゆる分岐を判断してよい。当該結果は、分岐1557に入力されてよい。
レジスタリネームステージ1555は、仮想レジスタまたは他のリソースへの参照を、物理レジスタまたはリソースへの参照に変換してよい。レジスタリネームステージ1555は、このようなマッピングの指標をレジスタプール1556に含んでよい。レジスタリネームステージ1555は、受信される命令を変更し、その結果を発行ステージ1560に送信してよい。
発行ステージ1560は、実行エンティティ1565にコマンドを発行またはディスパッチしてよい。このような発行は、アウトオブオーダ方式で行われてよい。一実施形態において、複数の命令が実行前に発行ステージ1560に保持されてよい。発行ステージ1560は、このような複数のコマンドを保持するための命令キュー1561を含んでよい。命令は、特定の命令の実行のためのリソースの利用可能性または適合性等の任意の許容可能な基準に基づいて、発行ステージ1560によって、特定の処理エンティティ1565に発行されてよい。一実施形態において、発行ステージ1560は、受信された第1の命令が実行される第1の命令でなくてもよいように、命令キュー1561内で命令を並べ替えてよい。命令キュー1561の順序に基づいて、追加の分岐情報が分岐1557に提供されてよい。発行ステージ1560は、命令を実行エンティティ1565に実行のために渡してよい。
実行時、ライトバックステージ1570は、特定のコマンドの完了を通信すべく、データをレジスタ、キュー、または命令セットアーキテクチャ1500の他の構造に書き込んでよい。発行ステージ1560内に配置される命令の順序に応じて、ライトバックステージ1570の操作が、追加の命令が実行されることを可能にしてよい。命令セットアーキテクチャ1500の性能は、トレースユニット1575によってモニタリングまたはデバッグされてよい。
図16は、本開示の実施形態によるプロセッサの命令セットアーキテクチャのための実行パイプライン1600のブロック図である。実行パイプライン1600は、例えば、図15の命令アーキテクチャ1500の操作を示してよい。
実行パイプライン1600は、段階または操作の任意の好適な組み合わせを含んでよい。1605において、次に実行されるべき分岐の予測がなされてよい。一実施形態において、このような予測は、命令の前の実行およびこれらの結果に基づいてよい。1610において、実行の予測された分岐に対応する命令が命令キャッシュにロードされてよい。1615において、命令キャッシュ内の1または複数のこのような命令が実行のためにフェッチされてよい。1620において、フェッチ済みの命令が、マイクロコードまたはより具体的な機械言語にデコードされてよい。一実施形態において、複数の命令が同時にデコードされてよい。1625において、デコードされた命令内のレジスタまたは他のリソースへの参照が再割り当てされてよい。例えば、仮想レジスタへの参照が、対応する物理レジスタへの参照と置換されてよい。1630において、命令は実行のためにキューにディスパッチされてよい。1640において、命令は実行されてよい。このような実行は任意の好適な態様で実行されてよい。1650において、命令は好適な実行エンティティに発行されてよい。命令が実行される態様は、命令を実行する特定のエンティティに依存してよい。例えば、1655で、ALUは算術機能を実行してよい。ALUは、その演算のために単一のクロックサイクルおよび2つのシフタを利用してよい。一実施形態において、2つのALUが用いられてよく、故に、1655において2つの命令が実行されてよい。1660において、もたらされる分岐の判断がなされてよい。プログラムカウンタが使用され、分岐がなされるデスティネーションを指定してよい。1660は、単一のクロックサイクル内で実行されてよい。1665において、浮動小数点演算が1または複数のFPUによって行われてよい。浮動小数点演算は、2から10サイクル等、実行すべき複数のクロックサイクルを必要としてよい。1670において、乗算演算および除算演算が行われてよい。このような演算は4つのクロックサイクルで行われてよい。1675において、レジスタまたはパイプライン1600の他の部分へのロードおよびスト操作が行われてよい。当該操作は、アドレスのロードおよびストアを含んでよい。このような操作は4つのクロックサイクルで行われてよい。1680において、1655〜1675の演算結果によって要求される通り、ライトバック操作が行われてよい。
図17は、本開示の実施形態によるプロセッサ1710を利用するための電子デバイス1700のブロック図である。電子デバイス1700としては、例えば、ノートブック、ウルトラブック、コンピュータ、タワーサーバ、ラックサーバ、ブレードサーバ、ラップトップ、デスクトップ、タブレット、モバイルデバイス、電話、埋め込みコンピュータ、または任意の他の好適な電子デバイスが含まれてよい。
電子デバイス1700は、任意の好適な数または種類のコンポーネント、周辺機器、モジュール、またはデバイスに通信可能に連結されたプロセッサ1710を含んでよい。このような連結は、任意の好適な種類のバスまたはインタフェースによって実現されてよく、このようなものとしては、I2Cバス、システムマネージメントバス(SMBus)、ローピンカウント(LPC)バス、SPI、高解像度オーディオ(HDA)バス、シリアルアドバンステクノロジアタッチメント(SATA)バス、USBバス(バージョン1、2、3)、または汎用非同期送受信回路(UART)バス等が挙げられる。
このようなコンポーネントとしては、例えば、ディスプレイ1724、タッチスクリーン1725、タッチパッド1730、近距離通信(NFC)ユニット1745、センサハブ1740、熱センサ1746、エクスプレスチップセット(EC)1735、トラステッドプラットフォームモジュール(TPM)1738、BIOS/ファームウェア/フラッシュメモリ1722、デジタル信号プロセッサ1760、ソリッドステートディスク(SSD)またはハードディスクドライブ(HDD)等のドライブ1720、無線ローカルエリアネットワーク(WLAN)ユニット1750、Bluetooth(登録商標)ユニット1752、無線ワイドエリアネットワーク(WWWAN)ユニット1756、全地球測位システム(GPS)、USB3.0カメラ等のカメラ1754、または、例えばLPDDR3規格で実装された低消費電力ダブルデータレート(LPDDR)メモリユニット1715が含まれてよい。これらのコンポーネントはそれぞれ、任意の好適な態様で実装されてよい。
さらに、様々な実施形態において、他のコンポーネントは上記のコンポーネントを介してプロセッサ1710に通信可能に連結されてよい。例えば、加速度計1741、周辺光センサ(ALS)1742、コンパス1743、およびジャイロスコープ1744が、センサハブ1740に通信可能に連結されてよい。熱センサ1739、ファン1737、キーボード1746およびタッチパッド1730がEC1735に通信可能に連結されてよい。スピーカ1763、ヘッドフォン1764およびマイクロフォン1765がオーディオユニット1764に通信可能に連結されてよく、当該オーディオユニット1764は次にDSP1760に通信可能に連結されてよい。オーディオユニット1764は、例えば、オーディオコーデックおよびクラスD増幅器を含んでよい。SIMカード1757が、WWANユニット1756に通信可能に連結されてよい。WLANユニット1750およびBluetooth(登録商標)ユニット1752等のコンポーネントに加え、WWANユニット1756が次世代フォームファクタ(NGFF)で実装されてよい。
本開示の実施形態は、計算処理用のベクトルフォーマットのための命令およびロジックを使用する。一実施形態において、このような計算は有限差分計算を含んでよい。例えば、このような計算としては、多次元の微分方程式の計算または推定、等方性計算または異方性計算が含まれてよい。別の実施形態において、このようなベクトルフォーマットは、表形式ベクトルフォーマットを含んでよい。さらなる別の実施形態において、計算は、複数の重複するデータポイントからの入力を要求する計算を含んでよく、当該データポイントは複数の次元において互いに隣接する。図18は、本開示の実施形態による計算処理用のベクトルフォーマットのためのシステム1800の一例示的な実施形態のブロック図である。計算は、例えば、プロセッサ1804によって処理されてよい。システム1800は、本明細書に記載の機能を実行するための任意の好適な数および種類の要素を含んでよい。さらに、システム1800の特定の要素が特定の機能を実行するように本明細書に記載される可能性があるものの、システム1800の任意の好適な部分が本明細書に記載の機能を実行してよい。
一実施形態において、計算処理用のベクトルフォーマットが、プロセッサ1804によって受信された命令に適用されてよい。プロセッサ1804によって受信された命令は、命令ストリーム1802内の命令を含んでよく、当該命令ストリーム1802は、コンパイラ、トランスレータ、または他の好適なソースによって生成されてよい。命令ストリーム1804は、有限差分(FD)の計算、またはn次元の等方性、異方性若しくは微分方程式の関数等の関数のためのコマンドを含んでよい。命令ストリーム1804は、特定のデータポイントに対し、複数のデータポイントからの入力を要求する関数のためのコマンドを含んでよく、当該データポイントは線形的に且つ複数の次元において互いに隣接する。様々な実施形態において、「複数の次元」とは、物理的な現実またはソースデータによって表わされる問題空間の領域を表わしてよい。複数の領域がプロセッサ1804内で操作および処理される場合、コンピュータの演算を実行すべく、当該複数の領域は必要に応じて実データ構造に平坦化されてよい。当該コマンドは、FD関数1803として言及されてよい。このような実施形態において、プロセッサ1804は、ベクトルフォーマット演算を追加することによって、FD関数1803をデコーディング、解釈、またはそれ以外の方法で実行することによって、FD関数1803の実行を行ってよい。このようなベクトルフォーマット演算は、プロセッサ1804の任意の好適な部分によって行われてよく、そのようなものとして、フロントエンド1806、デコーダ1808、またはダイナミックバイナリトランスレータ1810、またはJITコンパイラ若しくはトランスレータ、オプティマイザ、または特殊コプロセッサ若しくは実行ユニット等の図示されない他の要素によるものが挙げられる。別の実施形態においては、計算処理用のベクトルフォーマットは、命令がプロセッサ1804に到達する前にFD関数1803に適用されてよい。ベクトルフォーマットは、コンパイラ、トランスレータ、オプティマイザ、または他の好適なエンティティによって適用済みであってよい。
プロセッサ1802は、FD関数1803、そのベクトルフォーマット演算に加え、他の命令の処理を実行してよい。プロセッサ1804は、任意のプロセッサコア、論理プロセッサ、プロセッサ、または図1〜図17に示すような他の処理エンティティによって部分的に実装されてよい。様々な実施形態において、プロセッサ1804は、キャッシュ、メモリまたは他のソースから命令をフェッチするフェッチユニットを含むフロントエンド1806および命令をデコードするデコーダ1808を含んでよい。また、プロセッサ1804は命令のタイミング、命令の順序、および命令のコア1814または実行ユニット1820への割り当てを判断するためのスケジューラを含んでよい。また、プロセッサ1804は、命令を実行するための多くのタイプおよび種類の実行ユニット1820またはコア1814を含んでもよい。このような実行ユニットとしては、例えば、分岐実行ユニット、整数算術実行ユニット(例えばALU)、浮動小数点算術実行ユニット(例えばFPU)およびメモリアクセス実行ユニットが含まれてよい。さらに、プロセッサ1804は、成功した実行結果を例えばレジスタ、キャッシュ、またはメモリ1818にコミットするリタイアメントユニット1816を含んでよい。プロセッサ1804は、エイリアスリソースを予約するための割り当てユニット等、図示されていない任意の他の好適なコンポーネントを含んでよい。様々な実施形態において、プロセッサ1804は、プロセッサ1802のダイ内の不揮発性機械可読媒体(リードオンリメモリ等)上に格納されたマイクロオペレーションを利用して実行するマイクロコードを利用して、実行ユニット1820に対し、命令のうちの所望の演算を実行させてよい。
上記の通り、FD関数1803は、命令ストリーム1802内のFD関数1803を実装するために、またはプロセッサ1804でのFD関数1803の解釈、デコーディング、あるいは評価の結果として、ベクトルフォーマット演算を含んでよい。任意の好適なベクトルフォーマット演算、読み取り若しくは他の命令が命令ストリーム1802に追加されてよく、または、FD関数1803がプロセッサ1804で実行されるとき、任意の好適なベクトルフォーマット演算、読み取り若しくは他の命令がデコードされ且つFD関数1803に追加されてよい。特定のFD関数1803およびその特定のパラメータの実行を行うために、フォーマット演算、読み取りまたは他の命令に関する特定の選択および順序付けがなされてよい。一実施形態において、このようなフォーマット演算は、データを表形式ベクトルに読み込むための関数を含んでよい。別の実施形態において、このようなフォーマット演算は、特定のFD関数1803およびそのパラメータのニーズに従い実行するための表形式ベクトルをアラインメントするための関数を含んでよい。さらなる別の実施形態において、このようなフォーマット演算は、特定のFD関数1803およびそのパラメータのニーズに従い実行するための表形式ベクトルを転置するための関数を含んでよい。
一実施形態において、FD関数1803がプロセッサ1804に到達するとき、FD関数1803はその実行を具体的に行うためのこのようなフォーマット演算を含んでいなくてもよい。別の実施形態において、FD関数1803はコンパイル済みであってよく、命令ストリーム1802内に配置される前にこのようなフォーマット演算がFD関数1803に追加済みであってよい。
上記の通り、FD関数1803に係る関数は、例えば、n次元のFD、等方性、異方性、または微分方程式の近似関数を含んでよい。FD関数は、微分方程式の解のための数値スキームを含んでよい。別の実施形態において、一点の計算のために、複数の次元で互いに隣接するデータポイントからの入力を要求する関数が使用されてよい。これらの関数のうちの任意のものがデータの大きなセットのシミュレーションで使用されてよい。このような関数は、例えば、エネルギー探査で地層をシミュレーションするための高性能コンピューティング計算または任意の他の好適な適用において使用されてよい。これらの関数の実装は、非常に大量の浮動小数点計算および高いメモリ帯域幅を要求してよい。FD関数は、データを表わす、大きなメモリ空間にわたる数値ステンシルの適用を要求してよい。このようなデータはリアルワールドデータを含んでよい。故に、FD関数での一点の計算は、各次元の複数のデータへのアクセスを要求してよい。FD関数1803の各次元のために、FD関数は、一点におけるその結果を計算するために必要な入力値の範囲を含んでよい。このような範囲は、連続でなくてよい。例えば、16次の2次元ステンシルは、単一のタイムステップで新しい各値を計算するために、33個の入力値を要求してよい。FDベース問題全体の解は、計算されるべき数十億もの点を要求してよい。プロセッサ1804でのSIMDベクトル化は、複数の点が並列に計算されることを可能にしてよい。しかしながら、以下に示す通り、SIMDベクトル化は、読み取られる必要のあるデータを低減せず、単独ではFD関数の実行を行うためになされる必要のある読み取り量にも同様に影響しない可能性がある。様々な実施形態において、FD関数1803に適用されるベクトルフォーマットは、FD関数1803による実行のためのデータの収集に必要な読み取りの数を低減してよい。
図18は、3次元ソースデータ1822の一例を示す。このようなデータ1822は、メモリまたはプロセッサ1804によってアクセス可能な別の場所を含む任意の好適な場所に存在してよい。データ1822は大きすぎて、完全に読み取られプロセッサ1804のキャッシュ内に格納できない可能性がある。FD関数1803は、目的の関数の結果を判断するためにデータ1822を処理してよい。上記の通り、特定の場所(x0、y0、z0)におけるFD関数1803の計算は、ソースデータ1822の範囲(連続的またはそれ以外)に属するx次元、y次元およびz次元の各々からの入力を必要とし得る。このような入力を取得すべく、(A)において、このような各値がソースデータ1822から読み取られる必要がある。(B)において、このような値は、FD関数1803の合成値を計算するために使用されてよい。一実施形態において、FD関数1803の複数の値が、SIMDベクトル化演算を使用して並列に計算されてよい。
図19は、本開示の実施形態による例示的なFD関数の一例の図である。ステンシル1902は、例示的なFD関数を表現するものであり、当該FD関数は特定の点1903について、x方向の次の4つの値および前の4つの値、y方向の次の4つの値および前の4つの値、およびz方向の次の4つの値および前の4つの値の判断を要求する。FD関数の特定の点1803を計算するために必要な値のマップは、マスクまたはステンシルと称されてよい。また、等方性関数のための例示的な式1904が図19に指定されている。
図20、図20‐1、図20‐2および図20−3は、本開示の実施形態による、FD関数の例示的な演算の図である。グラフ2002は、FD関数1803の実行がなされてよい一点(5,5)を示す。当該一点は、FD関数1803による計算がなされるべき数百万を超える点のうちの唯一のものであってよい。
グラフ2004は、2次元の8次等方性FD関数を計算すべく読み取られる必要のある値を示すステンシル2006を示す。3次元関数、またはより高次(16次等)の関数には、より大きなステンシルが必要であろう。図20で検討する2次元の8次等方性FD関数については、ソースデータ内の特定の点、特定の点より上の4つの値、特定の点より下の4つの値、特定の点より右の4つの値および特定の点より左の4つの値が、FD関数の結果を見つけるために考慮されてよい。
ステンシル2006のこれらの値を読み取るべく、(A)では、個々のデータポイントの読み取り2003がなされてよく、FD関数の(5,5)の計算に必要な複数の値を判断するために、合計17個の読み取りが要求される。(B)でSIMDベクトル読み取り2005を使用し、一度に2個以上の値が、値のベクトルに読み込まれてよい。このようなSIMDベクトルは、プロセッサ1804のアーキテクチャおよび機能によって定義されてよい。例えば、16の長さのSIMDベクトル読み取りが利用可能であってよく、各々はx方向の連続的なインデックスを持つ。読み取られた値は指定された場所に対応してよく、それに加え、指定された場所の後に15個の値が当該ベクトルの方向に続く。SIMDベクトル読み取り2005を使用し、ソースデータ内のステンシル2006に対応する値が11個のベクトル読み取りで読み取られてよい。例示的なFD関数が3次元の場合、当該ページから突出する(z方向)値に対しさらに4個の読み取りがなされ、また当該ページに入り込む方向にさらなる4個の読み取りがなされるであろう。さらに、ベクトルの並列での同時実行が容易になるように、これらの読み取りにより、さらに多くのデータが収集されてよい。このような最初の9個の読み取りがグラフ2006内に示されており、グラフ2008に第10番目の読み取りが示され、グラフ2010に第11番目の読み取りが示されている。16次等方性2‐D FD関数については、33個の入力データ値が必要であってよい。SIMDベクトル読み取り2005の19個の異なる実行が使用され、このようなデータを入力してよい。ベクトル化が単一方向になされるとき、効率性が当該ベクトル化の方向(グラフ2006、2008、2010の例におけるx方向)に得られてよいが、他の方向に複数の読み取りがなされる必要がある。
SIMDベクトル読み取り2005は、並列での考えられ得る16個の値の読み取りを含んでよいものの、SIMDベクトル読み取り2005は、一度に16個の値の任意の考え得るセットを読み取り可能でなくてよい。SIMDベクトル読み取り2005は、単一のキャッシュライン内でアラインメントされた並列な16個の要素を読み取り可能であってよい。グラフ2006の例において、1つのアラインメントは、列5にあってよい一方、次のアラインメントは、列21にあってよい。SIMDベクトル読み取り2005は、このような範囲を1チャンクで読み取ってよい。従って、ここでグラフ2006の左「アーム」の読み取りは、プロセッサによって実際に用いられる完全なアラインメントを図示してよい。このような読み取りは実際、マイナス11列でなされ、列4へと進む。その結果、ステンシルを十分カバーするために19個の異なる読み取りが必要であってよい。
一実施形態において、ベクトルフォーマットは、FD関数の実行のためのデータの読み取りに適用されてよく、その結果、データは2次元または3次元等、1次元より多い次元でベクトル化される。このようなフォーマットは、(C)に図示されるような表形式ベクトル読み取り2011フォーマットを含んでよい。別の実施形態において、ベクトルフォーマットは1次元より多い次元に適用されてよく、その結果、データは1次元より多い次元で読み取られる。
表形式ベクトル読み取り2011フォーマットがソースデータおよびステンシル2006に任意の好適な態様で適用されてよい。一実施形態において、表形式ベクトル読み取り2011は特定の点に適用されてよく、その場合x方向の次の4個の値およびy方向の次の4個の値が読み取られてよい。表形式ベクトル読み取り2011のサイズは、プロセッサ1804のSIMDベクトル読み取り2005の利用可能なサイズに関連してよい。例えば、表形式ベクトル読み取り2011は16個の値であってよい。64個の値のベクトル読み取りがサポートされる場合、表形式ベクトル読み取り2011は8×8の2次元読み取りを含んでよい。非完全平方(例えば32個の値)ベクトル読み取りがサポートされる場合、表形式ベクトル読み取り2011は、例えば、8×4の2次元読み取りによって実装されてよい。表形式ベクトル読み取り2011の任意の好適なレイアウトが使用されてよい。例えば、図20に図示する4×4のレイアウトの代わりに、2×8のレイアウトが使用されてよい。別の例において、16個の要素のSIMDが使用され、3次元読み取りでの4×2×2の部分空間を表わしてよい。ソースデータに適用するために選択されるレイアウトは、FD関数の実行に必要なソースデータの形状に依存してよい。
別の実施形態において、表形式ベクトル読み取り2011の次元を考慮し、ステンシル2006のすべての値を完全に読み取りつつ、読み取りの数を最小化すべく、表形式ベクトル読み取り2011が、ステンシル2006(または当該FD関数のための任意の他のステンシル)内の点に適用されてよい。ベクトル読み取りの適用方法は、例えば、FD関数1803のデコーディングおよび変換の際にプロセッサ1804により判断されてよく、またはFD関数1803と共に含まれてよい。
例えば、グラフ2012は例示的なFD関数を表わすステンシル2006への表形式ベクトル読み取り2011の適用を示す。FD関数のための命令はプロセッサ1804によって受信されてよく、プロセッサ1804はFD関数の計算を実行すべく、ステンシル2006の値が読み取られる必要があるかを判断してよい。さらに、プロセッサ1804は、ステンシル2006の値を効率的に読み取るべく、表形式ベクトル読み取り2011の5つのインスタンスが作成されるかを判断してよい。グラフ2012に図示される読み取りを生成すべく、5つのインスタンスにおける表形式ベクトル読み取り2011のパラメータが選択されてよい。例えば、(5,6)に対するFD関数の結果を計算するために、表形式ベクトル読み取り2011がソースデータ内の(5,2)、(1,6)、(5,6)、(5,10)および(9,6)の各々でなされてよい。ベクトル読み取りの特定の数は、選択された特定の点、FD関数、FD関数の次数、FD関数の次元の数に依存してよい。このような読み取りが行われてよい場所とFD関数のこのようなバリエーションとの間の関係性のマッピングが格納されてよく、その結果、特定のFD関数について、当該特定のFD関数の読み取りを実装すべく、表形式ベクトル読み取り2011の特定の数および場所が指定されてよい。さらに、このようなマッピングは、表形式ベクトル読み取り2011の様々な利用可能なレイアウトを指定してよい。
故に、図20−1の例において、8次の2D FD関数およびそのステンシル2006について、すべての値を読み取るためには、5個の読み取りが必要とされてよい。3次元関数については、ページから突出するz方向の値には追加の4個の読み取りにおよびページに入り込むz方向の値には追加の4個の読み取りが必要とされるであろう。16次の2D FD関数の場合、表形式ベクトル読み取り2011の数は9個であってよい。従って、様々な実施形態において、線形ベクトルから表形式ベクトルまでのベクトル読み取りのフォーマットは、FD関数1803を計算するために必要なソースデータの読み取りの数を低減してよい。
図21および図21−1は、本開示の実施形態による異方性関数2102の例示的な演算の図である。異方性関数2102が図22中の一例として使用されるものの、任意の好適な異方性関数が使用されてよい。異方性関数2102は、2次元の異方性関数であってよい。
グラフ2104は、異方性関数2102の実行がなされてよい一点(5,5)を示す。当該一点は、異方性関数2102による計算がなされるべき数百万を超える点のうちの唯一のものであってよい。グラフ2104は、異方性関数2102を使用して特定の点の値を計算すべく読み取られる必要のある値を示すステンシル2106を示す。3次元関数、またはより高次(16次等)の関数には、より大きなステンシルが必要であろう。図21で検討する2次元の8次等方性関数については、ソースデータ内の特定の点、特定の点より上の4つの値、特定の点より下の4つの値、特定の点より右の4つの値および特定の点より左の4つの値が、その特定の点のための異方性関数2102の結果を見つけるために考慮されてよい。また、対角線上の右上にある4個の値、対角線上の左上にある4個の値、対角線上の右下にある4個の値、対角線上の左下にある4個の値が、特定の点に対する異方性関数2102の結果を見つけるために考慮されてよい。
ステンシル2106のこれらの値を読み取るべく、線形的SIMDベクトル読み取り(図20−1の1×16のSIMDベクトル読み取り2005等)が使用され、計算をするために値が読み取られる場合、合計27個の読み取りがなされる必要があってよい。この合計には、図20に図示のものと同じものに加え、4つの対角線領域の各4個が含まれてよい。
一実施形態において、ベクトルフォーマットが異方性関数2102の実行のためのデータの読み取りに適用されてよく、その結果、データは2次元または3次元等、1次元より多い次元でベクトル化される。このようなフォーマットは、図20‐3に図示されるような表形式ベクトル読み取り2011フォーマットを含んでよい。別の実施形態において、ベクトルフォーマットが1次元より多い次元に適用されてよく、その結果、データは1次元より多い次元で読み取られる。
表形式ベクトル読み取り2011フォーマットがソースデータおよびステンシル2106に任意の好適な態様で適用されてよい。ステンシル2206のすべての値を完全に読み取りつつ、読み取りの数を最小化するために、表形式ベクトル読み取り2011がステンシル2106内の点に適用されてよい。ベクトル読み取りの適用方法は、例えば、異方性関数2102のデコーディングおよび変換の際にプロセッサ1804により判断されてよく、または異方性関数2102Fと共に含まれてよい。
例えば、グラフ2108は異方性関数2102を表わすステンシル2106への表形式ベクトル読み取り2011の適用を示す。一実施形態において、表形式ベクトル読み取り2011は、グラフ2108に図示の通り、点(1,2)、(5,2)、(9,2)、(1,6)、(5,6)、(9,10)、(1,10)、(5,10)および(9,10)に適用されてよい。従って、9個の読み取りがなされてよい。3次元関数については、ページから突出するz方向の値には追加の4個の読み取りにおよびページに入り込むz方向の値には追加の4個の読み取りが必要とされるであろう。16次数の2D FD関数の場合、表形式ベクトル読み取り2011の数は9個であってよい。従って、様々な実施形態において、線形ベクトルから表形式ベクトルまでのベクトル読み取りのフォーマットは、FD関数1803を計算するために必要なソースデータの読み取りの数を低減してよい。
図22、図22−1および図22−2は、本開示の実施形態による、表形式ベクトル読み取りに基づいて、計算を行うシステム1800の例示的な演算の図である。FD関数1803の計算の実行は、SIMDベクトル化を使用して並列に実行されてよい。図22中のベクトルデータは、例えば、ベクトルレジスタ内に格納されてよい。図20に示す読み取りに使用される同一の表形式ベクトルレイアウトを使用して、計算を行うことによって、計算の並列化がなされてよい。故に、図22のベクトル計算を使用して並列に行われる計算の数は、図20の表形式ベクトル読み取り演算のサイズと同一であってよい。さらに、ベクトル計算を使用して並列に行われる計算の数は、表形式ベクトルの結果を格納するレジスタと同一サイズであってよく、表形式ベクトルの結果は表形式ベクトル読み取り演算の結果を格納する。
しかしながら、データの読み取りに使用される表形式ベクトルレイアウトを使用する特定の点を考慮すると、2つの異なる表形式ベクトル読み取り中に取得されるデータへのアクセスが要求されてよい。ベクトル計算が単一の表形式ベクトル読み取りのデータを格納するレジスタと同一サイズの場合、ベクトル計算は両方の表形式ベクトル読み取りのすべてを読み取り可能でなくてよい。いくつかの実施形態において、複数のベクトルからの情報を正しく収集するために、フォーマット命令が適用されてよく、その結果、表形式ベクトルレイアウト2206により計算がなされてよい。レイアウト2206は、図20に示す表形式ベクトル読み取りのレイアウトに対応してよい。
例えば、グラフ2202は、表形式ベクトル読み取りから生成された第1のベクトル(ベクトル1)データおよび第2のベクトル(ベクトル2)データから受信されたデータを示してよい。グラフ2204、例えば、場所(5,5)にベクトル全体の計算を行うべく、ベクトル1およびベクトル2の両方のデータにアクセスされる必要があってよく、当該場所は、ステンシル2206の中央の点からy方向に移動された1つの場所である。従って、場所(5,5)にベクトル全体の計算が行われてよいように、データはフォーマットされる必要があってよい。特に、このような計算には追加の情報が要求されてよい。
一実施形態において、複数の表形式ベクトルからの情報にアクセスすべく、特殊なベクトル読み取り関数が使用されてよい。図22の例において、このような関数はVALIGNという名称で表されてよい。一実施形態において、VALIGNは、単一の命令として実装されてよい。VALIGNは、2つのベクトルからの2つの部分が結合される必要があることを指定する任意の好適なパラメータを使用してよい。例えば、VALIGNは、第1のベクトル、および第1のベクトルから取得される必要のある要素、第2のベクトル、および第2のベクトルから取得される必要のある要素を指定するパラメータを含んでよい。VALIGNは、他の好適なパラメータスキームで実装されてよい。グラフ2204の例において、VALIGNは、ベクトル1の最後の4個の要素(マイナス4と指定)がベクトル2の最初の12個の要素(12と指定)に追加されるべきであることを指定するために呼び出されてよい。すなわち、VALIGN(ベクトル1,−4,ベクトル2,12)となる。別の例において、マイナスの値が示唆されてよい。別の例において、ベクトル1とベクトル2との間の関係性が推測されてよく、ベクトル1の最後の値がいくつ使用されることになるかを示す単一の数のみが渡されてよい。残りの値は、ベクトル2の第1の部分からのものであると想定されてよい。
グラフ2204の例において、レイアウト2206が(5,3)(1つ上の位置)にシフトされるための追加の計算を完了するには、VALIGN(ベクトル1,−8,ベクトル2,8)を使用してVALIGNを呼び出し、ベクトル1の最後の8個の値がベクトル2の最初の8個の値と結合されるようにしてよい。代わりに、レイアウト2206が(5,2)(もう1つ上の位置)に配置されるための追加の計算については、VALIGN(ベクトル1、−12,ベクトル2,4)を使用してVALIGNを呼び出し、ベクトル1の最後の12個の値がベクトル2の最初の4個の値と結合されるようにしてよい。しかしながら、代わりに、レイアウト2206が(5,1)(もう1つ上の位置)に配置されるための追加の計算には、レイアウト2206はベクトル1データをターゲットに完了されてよい。このような場合、VALIGNの使用は必要なくてよく、ベクトル1データは単に読み取られたまま通りに使用されてよい。
一実施形態において、ベクトル2より下のベクトルでの計算については、同一の手順をVALIGNの異なるパラメータを使用して繰り返して、このようなベクトルの要素をベクトル2と結合させてよい。合計で6個のVALIGN呼び出しを使用して、レイアウト2206によってy方向に適用する表形式ベクトルデータのすべての計算が行われてよい。6個のVALIGN呼び出しは、グラフ2202の「トップ」「アーム」およびミドルベクトルの合成のための3個、および「ボトム」アームおよびミドルベクトルの合成のための3個を含んでよい。ベクトル1のトップにあるアーム全体へのアクセスは、VALIGN呼び出しを要求しなくてよい。ベクトル2のミドル全体へのアクセスは、VALIGN呼び出しを要求しなくてよい。別のベクトルに対応する「ボトム」アーム全体へのアクセスは、VALIGN呼び出しを要求しなくてよい。16次ステンシルにおいては、2つの追加の入力ベクトルおよびさらなる6個のVALIGN呼び出しが必要であってよい。
特定のレイアウトが読み取られると、16の結果が、表形式でのSIMDベクトル計算を使用して並列で計算されてよい。
グラフ2210は、「左」アームのベクトル3およびベクトル2の、表形式ベクトルの結果データを示す。y方向に行われた上記の計算と同様の計算をx方向に行うために、レイアウト2206はベクトル2からx方向に左にシフトされ、そこでの成分が計算されてよい。ベクトル3およびベクトル2の両方のデータにアクセスすべく、VALIGNは上記と同様の態様で使用されてよい。一実施形態において、レイアウト2206が表形式ベクトル読み取り2011のフォーマットに示される値を示すと仮定し、表形式ベクトル計算およびVALIGNが行われてよい。別の実施形態において、x方向にレイアウト2206の場所をシフトするための計算は、まずレイアウト2206の内容を入れ替えまたは転置することによってなされてよく、その結果、計算およびVALIGN演算は、あたかもそれらがy方向の視点からなされたかのように、なされる。従って、ベクトル3およびベクトル2は転置または入れ替えられてよい。別の実施形態において、次にVALIGN演算はベクトル3およびベクトル2の要素を結合するために適用されてよく、それに対し、計算がなされてよい。メモリに書き込まれる前に、最終的な結果が入れ替えられる必要がある。転置演算が演算2212に図示されてよい。
ベクトル3およびベクトル2が転置された後、VALIGN呼び出しがなされて、ベクトル3の最後の4個の要素とベクトル2の最初の12個の要素を結合し、ベクトル3の最後の8個の要素とベクトル2の最初の8個の要素を結合し、ベクトル3の最後の12個の要素とベクトル2の最初の4個の要素を結合してよい。VALIGNは、左アームにアクセスするために必要でなくてよい。処理は「右」アームに、そこでの表形式ベクトルの転置も含め、繰り返されてよい。各レイアウトのデータの組み立てにおいて、SIMD表形式ベクトル計算が行われてよい。
8次ステンシルでは、複数のアームと中央の合成をカバーするための合計6個のVALIGN呼び出しに加え、3個の転置演算(1つはx方向の各表形式ベクトル)が必要であってよい。16次のステンシルについては、さらなる2個の転置およびさらなる6個のVALIGN呼び出しに加え、2つの追加の入力ベクトルが必要であってよい。
図23は、本開示の実施形態による、計算処理用のベクトルフォーマットを適用するための方法2300に係る例示的な一実施形態のフローチャートである。方法2300は、例えば、プロセッサ1804によって実行される演算を示してよい。方法2300のいくつか部分は命令ストリーム1802の作成によって行われてよく、例えば、ライブラリ、コンパイラ、またはインタプリタによって行われる。方法2300は任意の好適なポイントで開始してよく、任意の好適な順序で実行されてよい。一実施形態において、方法2300は2305で開始してよい。
2305において、命令がプロセッサ1804で実行されるべくフェッチされてよい。このような命令は、FD命令の形式を含んでよい。2310において、命令がデコードされてよい。特定のタイプのFD命令およびそのパラメータが判断されてよい。
一実施形態において、2315において、表形式ベクトルフォーマットがFD命令に適用されるかが判断されてよい。FD命令、その次数、その次元、または他の識別態様に基づいて、入力データの特定の形状が使用され、FD命令の特定のデータポイントを計算してよい。入力データの形状に基づいて、表形式ベクトルの形式およびサポートする命令が選択されてよい。
2320で、一実施形態において、FD命令の計算における特定の点のための入力データの形状を反映する入力のステンシルが判断されてよい。形状は2次元または3次元であってよい。
2325において、表形式ベクトル読み取り命令が、FD命令をサポートするコードに挿入されてよい。一実施形態において、入力のステンシルが表形式ベクトル読み取り命令の範囲によってカバーされるように、表形式ベクトル読み取り命令は当該ステンシルにマッピングされてよい。別の実施形態において、表形式ベクトル読み取りの数が最小化されてよい。表形式ベクトル読み取りの特定の数およびそれらのパラメータ(ステンシルの各部によるそれぞれのカバー範囲を反映)は、ステンシルおよびFD命令自体に依存してよい。
2330において、計算命令が、得られる表形式ベクトルの各要素のために挿入されてよい。このような計算命令は、表形式ベクトルの実行であってよい。一実施形態において、2335において、特定のベクトル計算をサポートするアラインメント命令および転置命令が必要に応じて挿入されてよい。単一のレジスタまたは表形式ベクトルのデータを使用してなされるベクトル計算(読み取り命令の実行からの結果)は、アラインメントを要求しなくてよい。しかしながら、複数のこのようなレジスタまたは表形式ベクトルのデータを使用してなされるベクトル計算は、複数のこのようなベクトルの要素を結合するためのアラインメントを要求してよい。アラインメント命令の具体的な使用は、読み取り命令からもたらされるデータの形状により行われてよい。さらに、追加の方向(x方向またはz方向等)のベクトル計算を行うために、転置命令が挿入されてよい。転置命令は、元の方向で行われた計算と同一の態様で、計算がこれらの方向で進められることを可能にしてよい。転置命令の具体的な使用は、読み取り命令からもたらされるデータの形状により行われてよい。
2340で、一実施形態において、命令はディスパッチされ、実行されてよい。一実施形態において、表形式ベクトル読み取りは、上記の通り実行されてよい。2345において、アラインメントが必要に応じてなされてよく、ベクトル計算がなされてよい。出力データがメモリ、キャッシュ、レジスタ、または他の好適な場所に戻されてよい。2350において、必要に応じて、他の方向に対し、転置およびアラインメントがなされてよい。ベクトル計算が実行されてよい。出力データが戻されてよい。2350は、複数の方向に対し実行されてよい。
2355において、FD命令の実行において、追加のデータポイントが計算されるべきかが判断されてよい。はいの場合、方法2300は2320に戻ってよい。いいえの場合、方法2300は2360に進んでよい。
2360において、コミットされていない、または書き込まれていないデータがキャッシュ、メモリ、レジスタ、または他の場所に発行されてよい。2365において、命令はリタイアされてよい。随意で方法2300を繰り返してもよいし、または必要に応じて終了してもよい。
方法2300は、任意の好適な基準によって開始されてよい。さらに、方法2300は特定の要素の演算について説明するものの、方法2300は複数の要素の任意の好適な組み合わせまたは任意の好適なタイプの要素によって実行されてよい。例えば、方法2300は図1〜図22に示す要素によって、または方法2300を実装するように動作可能な任意の他のシステムによって実装されてよい。このように、方法2300の好ましい初期化ポイントおよび方法2300を備える複数の要素の順序は、選択された実装によって異なってよい。いくつかの実施形態においては、随意でいくつかの要素は省略、再編成、反復または組み合わされてよい。
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの実装アプローチの組み合わせで実装されてよい。本開示の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイスおよび少なくとも1つの出力デバイスを備えたプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
プログラムコードは、本明細書に記載の関数を実行し、出力情報を生成するための入力命令に適用されてよい。出力情報は、既知の方法で、1または複数の出力デバイスに適用されてよい。本願の意図する処理システムには、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムが含まれてよい。
プログラムコードは、処理システムと通信するために、高水準の手順型言語またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは特定のプログラミング言語には一切範囲限定されない。いずれの場合においても、言語はコンパイル型言語または解釈型言語であってよい。
少なくとも1つの実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。このような「IPコア」として知られる典型的なものが、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。
このような機械可読ストレージ媒体としては特に限定されないが、機械またはデバイスによって製造または形成される複数の物品から成る非一時的な有形の構成が含まれてよく、それらとしては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、コンパクトディスクリライタブル(CD‐RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)等の半導体デバイス、磁気カード若しくは光カードといった記憶媒体、または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
従って、また、本開示の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体を含んでよい。また、このような実施形態はプログラム製品としても称されてよい。
いくつかの場合において、命令コンバータを使用し、命令をソース命令セットからターゲット命令セットへ変換されてよい。例えば、命令コンバータは、ある命令を、コアによって処理されるべき1または複数の他の命令へと、トランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレーション、またはそれら以外の方法による変換を行ってよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
故に、少なくとも1つの実施形態による1または複数の命令を実行するための技術が開示されている。具体的な例示的実施形態が記載され、添付図面に図示されているものの、このような実施形態は専ら例示にすぎず、他の実施形態に対し限定となるものではなく、本開示に接する当業者には様々な他の変形例が想起され得るので、このような実施形態は図示および記載された具体的な構造および構成に限定されないことを理解されたい。本技術分野等、成長が速く、さらなる進歩が容易に予測できない技術分野においては、当該開示の実施形態は、技術の進展を可能にすることで容易となるように、本開示の原理または添付の特許請求の範囲から逸脱することなく構成および詳細において容易に変更可能である。