"コンピュータプロセッサでギャザーストライド命令を実行する方法であって、デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を含む前記ギャザーストライド命令をフェッチする段階と、フェッチされた前記ギャザーストライド命令をデコードする段階と、フェッチされた前記ギャザーストライド命令を実行して、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからストライドされたデータ要素を前記デスティネーションレジスタに格納する段階とを備える方法。前記実行する段階は、前記ベース値を利用して決定される、前記メモリ内の第1のデータ要素のアドレスを生成する段階と前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの第1のマスクビット値が、前記メモリ内の第1のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階とを含み、前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの前記第1のマスクビット値が、前記第1のデータ要素が格納されるべきであることを示していない場合、前記データ要素を、前記デスティネーションレジスタの前記対応する位置に、変更せずに放置して、前記メモリ内の第1のデータ要素に対応している、前記書き込みマスクの前記第1のマスクビット値が、前記第1のデータ要素が格納されるべきであることを示している場合、前記第1のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第1のマスクビットをクリアして、格納に成功したことを示す、請求項1に記載の方法。前記第1のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記デスティネーションレジスタの前記第1のデータ要素は、前記デスティネーションレジスタの最下位データ要素である、請求項2に記載の方法。前記実行する段階は、前記メモリ内の第1のデータ要素に対するフォルトがあると判断する段階と、前記実行する段階を中断する段階とをさらに含む、請求項2または3に記載の方法。前記実行する段階は、前記スケール値、ベース値、およびストライド値を利用して決定される、前記メモリ内の第2のデータ要素のアドレスを生成する段階と、前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの第2のマスクビット値が、前記メモリ内の第2のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階とをさらに含み、前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの前記第2のマスクビット値が、前記第2のデータ要素が格納されるべきであることを示していない場合、前記第2のデータ要素を、前記デスティネーションレジスタの前記対応する位置に、変更せずに放置して、前記メモリ内の第2のデータ要素に対応している、前記書き込みマスクの前記第2のマスクビット値が、前記第2のデータ要素が格納されるべきであることを示している場合、前記第2のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第2のマスクビットをクリアして、格納に成功したことを示し、前記第2のデータ要素は、前記第1のデータ要素からデータ要素X個分、離れており、Xは前記ストライド値である、請求項2から4のいずれか一項に記載の方法。前記デスティネーションレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクは、専用の16ビットレジスタである、請求項1から5のいずれか一項に記載の方法。前記デスティネーションレジスタの前記データ要素のサイズは64ビットであり、前記書き込みマスクは16ビットレジスタであり、前記書き込みマスクの最下位8ビットが、前記メモリのどのデータ要素を前記デスティネーションレジスタに格納すべきかを決定している、請求項1から5のいずれか一項に記載の方法。前記デスティネーションレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、請求項1から5のいずれか一項に記載の方法。前記デスティネーションレジスタ内に格納される、前記メモリ内のデータ要素はすべて、前記デスティネーションレジスタに格納される前にアップコンバージョンされる、請求項1から8のいずれか一項に記載の方法。コンピュータプロセッサでスキャッタストライド命令を実行する方法であって、ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を含む前記スキャッタストライド命令をフェッチする段階と、前記スキャッタストライド命令をデコードする段階と、前記スキャッタストライド命令を実行して、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、前記ソースレジスタからのデータ要素を前記メモリのストライドされた位置に格納する段階とを備える方法。前記実行する段階は、前記ベース値を利用して決定される、前記メモリ内の第1の位置のアドレスを生成する段階と、前記書き込みマスクの第1のマスクビット値が、前記ソースレジスタの第1のデータ要素が、前記メモリの、前記第1の位置について生成された前記アドレスに格納されるべきであることを示しているかを判断する段階とを含み、前記書き込みマスクの第1のマスクビット値が、前記ソースレジスタの第1のデータ要素が、前記メモリの、前記第1の位置について生成された前記アドレスに格納されるべきであることを示していない場合、前記データ要素を、前記メモリの、前記第1の位置について生成された前記アドレスに、変更せずに放置して、前記書き込みマスクの第1のマスクビット値が、前記ソースレジスタの第1のデータ要素が、前記メモリの、前記第1の位置について生成された前記アドレスに格納されるべきであることを示している場合、前記ソースレジスタの前記第1のデータ要素を、前記メモリの、前記第1の位置について生成された前記アドレスに格納して、前記第1のマスクビットをクリアして、格納に成功したことを示す、請求項10に記載の方法。前記第1のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記第1のデータ要素は、前記ソースレジスタの最下位データ要素である、請求項11に記載の方法。前記実行する段階は、前記スケール値、ベース値、およびストライド値を利用して決定され、前記第1の位置から、X個のデータ要素分離れた、前記メモリ内の第2の位置のアドレスを生成する段階と、前記書き込みマスクの第2のマスクビット値が、前記ソースレジスタの第2のデータ要素が、前記メモリの、前記第2の位置について生成された前記アドレスに格納されるべきであることを示しているかを判断する段階とを含み、前記書き込みマスクの第2のマスクビット値が、前記ソースレジスタの第2のデータ要素が、前記メモリの、前記第2の位置について生成された前記アドレスに格納されるべきであることを示していない場合、前記データ要素を、前記メモリの、前記第2の位置について生成された前記アドレスに、変更せずに放置して、前記書き込みマスクの第2のマスクビット値が、前記ソースレジスタの第2のデータ要素が、前記メモリの、前記第2の位置について生成された前記アドレスに格納されるべきであることを示している場合、前記ソースレジスタの前記第2のデータ要素を、前記メモリの、前記第2の位置について生成された前記アドレスに格納して、前記第2のマスクビットをクリアして、格納に成功したことを示し、Xは、前記ストライド値である、請求項11または12に記載の方法。前記ソースレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクは、専用の16ビットレジスタである、請求項10から13のいずれか一項に記載の方法。前記ソースレジスタの前記データ要素のサイズは64ビットであり、前記書き込みマスクは16ビットレジスタであり、前記書き込みマスクの最下位8ビットが、前記ソースレジスタのどのデータ要素を前記メモリに格納すべきかを決定している、請求項10から13のいずれか一項に記載の方法。前記ソースレジスタの前記データ要素のサイズは32ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、請求項10から13のいずれか一項に記載の方法。ハードウェアデコーダと、実行ロジックとを備える装置であって、前記ハードウェアデコーダは、デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を含むギャザーストライド命令と、ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を含むスキャッタストライド命令とをデコードして、前記実行ロジックは、デコードされた前記ギャザーストライド命令および前記スキャッタストライド命令を実行して、デコードされた前記ギャザーストライド命令の実行により、前記ギャザーストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからのストライドされたデータ要素が前記デスティネーションレジスタに格納され、デコードされた前記スキャッタストライド命令の実行により、前記スキャッタストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、データ要素が前記メモリのストライドされた位置に格納される、装置。前記実行ロジックは、ベクトル実行ロジックを含む、請求項17に記載の装置。前記ギャザーストライド命令および前記スキャッタストライド命令の少なくとも一方の前記書き込みマスクは、専用の16ビットレジスタである、請求項17に記載の装置。前記ギャザーストライド命令の前記ソースレジスタは、512ビットのベクトルレジスタである、請求項17に記載の装置。以下の記載では、複数の詳細を述べる。しかし、本発明の実施形態はこれら具体的な詳細がなくとも実施可能である点を理解されたい。他の例では、公知の回路、構造、および技術は詳細に示さず、本記載の理解をあいまいにしないようにしている場合もある。本明細書全体において、一実施形態又は1つの実施形態という言い回しは、その実施形態で記載される特定の特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれていることを示す。したがって一実施形態又は1つの実施形態という言い回しが本明細書の随所にみられても、これらは必ずしも全てが同じ実施形態のことを意味しているわけではない。さらに、特定の特徴、構造、又は特性は、それらが述べられた具体的な実施形態以外の適切な形態で実施することもでき、本願の請求項の範囲には、これらすべての形態が含まれることとする。高いパフォーマンスの計算/スループットコンピューティングアプリケーションにおいては、非常によく利用される連続していないメモリ参照パターンがストライドメモリパターンである。ストライドメモリパターンは、各要素が、前のものからe19tという同じ一定の量、離れているストライドと称されている、まばらなメモリ位置のセットのことである。このメモリパターンは、多次元のCまたは他のハイレベルプログラミング言語アレイの対角線または列にアクセスする際によく見られる。ストライドパターンの一例は、A、A3、A6、A9、A12、...であり、ここではAはベースアドレスでありストライドが3である。ストライドメモリパターンを取り扱うギャザーおよびスキャッタの問題は、要素が無作為にスキャッタしていることを想定して設計されているので、ストライドが本来提供する情報を活用することができない点である高いレベルの予測性によって、より高いパフォーマンスの実装が可能となる。さらに、プログラマーおよびコンパイラたちは、既知のストライドを、ギャザー/スキャッタが入力として利用するメモリインデックスのベクトルに変換する際にオーバヘッドを生じてしまう、という点である。以下に、ストライドを活用することができるいくつかのギャザーおよびスキャッタ命令の実施形態、および、これらの命令を実行するために利用可能なシステム、アーキテクチャ、命令セット等の実施形態を示す。<ギャザーストライド>第1の種類の命令は、ギャザーストライド命令である。この命令をプロセッサで実行すると、メモリのデータ要素が条件付きでデスティネーションレジスタにロードされる。たとえば、一部の実施形態では、16個までの32ビットまたは8つの64ビットの浮動小数点データ要素が条件付きでデスティネーションたとえばXMM、YMM,またはZMMレジスタにパッキングされる。ロードされるデータ要素は、あるタイプのSIBスケール、インデックス、およびベースの指定によって特定される。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位displacementを含んでいる。もちろん、ベースアドレスおよび/またはストライドの即値等を含む命令等の他の実装例を利用することもできる。ギャザーストライド命令も書き込みマスクを含む。専用マスクレジスタたとえば後述するk書き込みマスクを利用する一部の実施形態では、対応する書き込みマスクビットがそうすべきと示しているときたとえば一部の実施形態ではビットが1の場合に、メモリデータ要素がロードされる。他の実施形態では、データ要素の書き込みマスクビットは、書き込みマスクレジスタたとえばXMMまたはYMMレジスタからの対応する要素の符号ビットである。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。データ要素の対応する書き込みマスクビットが設定されていない場合には、デスティネーションレジスタXMM、YMM、またはZMMレジスタの対応するデータ要素を変更せずにおく。通常は、ギャザーストライド命令の実行によって、例外的事例を除いて、書き込みマスクレジスタ全体がゼロに設定される。しかし、一部の実施形態では、命令が、少なくとも1つの要素が既にギャザーされている場合つまり、書き込みマスクビットが設定されている最下位のもの以外の要素によって例外がトリガされると、例外により命令が中断される。こうなると、デスティネーションレジスタおよび書き込みマスクレジスタが、部分的に更新されるギャザーされている要素は、デスティネーションレジスタに配置され、マスクビットをゼロに設定される。既にギャザーされている要素からトラップまたは割り込みがペンディングである場合、これらは例外の代わりに配信され、EFLAGS再開フラグまたはこの均等物が1に設定され、命令ブレークポイントは、命令が継続されても再度トリガされない。128ビットサイズのベクトルの一部の実施形態では、命令は、4つの単精度浮動小数点値または2つの倍精度浮動小数点値までギャザーされる。256ビットサイズのベクトルの一部の実施形態では、命令は、8つの単精度浮動小数点値または4つの倍精度浮動小数点値までギャザーされる。512ビットサイズのベクトルの一部の実施形態では、命令は、16個の単精度浮動小数点値または8個の倍精度浮動小数点値までギャザーされる。一部の実施形態では、マスクおよびデスティネーションレジスタが同じ場合、この命令はGPフォルトを配信する。通常、データ要素値は、任意の順序でメモリから読み出される。しかし、フォルトは右から左の順に配信される。つまり、フォルトが要素によりトリガされて配信されると、デスティネーションXMM,YMM,またはZMMのLSB付近のすべての要素が完了するフォルトではないnonfaulting。MSB付近の個々の要素は、完了してもしなくてもよい。任意の要素が複数のフォルトをトリガすると、これらは従来の順序で配信される。この命令はいずれの実装も繰り返すことができる、つまり、同じ入力値およびアーキテクチャ状態である場合には、フォルトになったものの左の同じ要素セットをギャザーする。この命令の形式の例が、VGATHERSTRzmm1k1basescalestridedisplacementであり、ここでzmmlがデスティネーションベクトルレジスタオペランドたとえば128-、256-、512ビットレジスタ等であり、klは、書き込みマスクオペランドでありたとえば16ビットのレジスタであり、この例に関しては後述する、ベース、スケール、ストライド、および変位を利用して、メモリの第1のデータ要素のメモリソースアドレスと、後続するメモリデータエレンメントのストライド値とを生成して、デスティネーションレジスタに条件付きでパッキングする。一部の実施形態では、書き込みマスクは、異なるサイズたとえば8ビット、32ビットであってもよい。加えて、一部の実施形態では、書き込みマスクのすべてのビットが、命令により利用されなくてもよいが、この点は後述する。VGATHERSTRは、命令のオペコードである。通常、各オペランドは命令によって明示的に定義されている。データ要素のサイズは、ここで記載するW等のデータ粒度ビットの情報を利用する等によって、命令のプレフィックス部分で定義されている。殆どの実施形態では、データ粒度ビットは、データ要素が32ビットまたは64ビットであることを示す。データ要素が32ビットのサイズであり、ソースが512ビットのサイズである場合には、16個のデータ要素が1つのソースについて存在する。以下は、この命令に利用可能なアドレス指定への近道である。通常のIntelArchitecturex86メモリオペランドでは、たとえばraxrsi236であり、ここでRAXがベースBASEであり、RSIがINDEXであり、2がスケールSSであり、36が変位であり、括弧はメモリオペランドの内容である。したがって、このアドレスにおけるデータは、dataMEMCONTENTSである。通常のギャザーでは、raxzmm2236であり、RAXがベースBASEであり、Zmm2がINDEXのvectorであり、2がscaleSSであり、36が変位であり、括弧は、メモリオペランドの内容を示す。したがって、データのベクトルは、dataiMEMCONTENTSである。ギャザーストライドでは、一部の実施形態で、アドレス指定がここでも、raxrsi236であり、ここでRAXがBASEであり、RSIがストライドSTRIDEであり、2がscaleSSであり、36が変位であり、括弧はメモリオペランドの内容である。ここで、データのベクトルが、dataiMEMCONTENTSである。他のストライド命令が、同様のアドレス指定モデルを示している。ギャザーストライド命令の実行例を図1に示す。この例では、ソースは、RAXレジスタにみられるアドレスに、初期アドレス指定されているメモリであるこれは、メモリアドレス指定の簡略化された図であり、変位等を、アドレスを生成するために利用することができる。もちろん、メモリアドレスは、他のレジスタに格納されていても、上述した命令の即値として発見されてもよい。この例の書き込みマスクは、ビットの値が4DB4のhe20ecimalの値に対応している16ビットの書き込みマスクである。1の値の書き込みマスクの各ビット位置において、メモリソースからのデータ要素が、デスティネーションレジスタの対応する位置に格納される。書き込みマスクの第1の位置たとえばkl0は0であり、対応するデスティネーションデータ要素位置たとえばデスティネーションレジスタの第1のデータ要素が、そこには、ソースメモリからのデータ要素が格納されていないことを示す。この場合、RAXアドレスに関連しているデータ要素は格納されない。書き込みマスクの次のビットも0であり、これは、メモリからの次のストライドされたデータ要素も、デスティネーションレジスタに格納されるべきではないことを示している。この例では、ストライド値が3であり、この後続するストライドされたデータ要素は、第1のデータ要素から離れている第3のデータ要素である。書き込みマスクの第1の1の値は、第3のビット位置にあるたとえばkl2。これは、メモリの前のストライドされたデータ要素に後続するストライドされたデータ要素が、デスティネーションレジスタの対応するデータ要素の位置に格納されるべきことを示す。この後続するストライドされたデータ要素は、前のストライドされたデータ要素から3つ離れており、第1のデータ要素からは6つ離れている。残りの書き込みマスクビット位置も、メモリソースのどの追加的データ要素がデスティネーションレジスタに格納されるかを判断するために利用されるこの例では、全部で8つのデータ要素が格納されるが、書き込みマスクビットに応じて、数はこれより多くても少なくてもよい。加えて、メモリソースからのデータ要素は、デスティネーションのデータ要素のサイズが、たとえば、デスティネーションに格納される前に16ビットの浮動小数点値から32ビットの浮動小数点値になるようアップコンバージョンされてよい。アップコンバージョンおよびこれらを命令フォーマットにエンコードする方法の例は、上述した通りである。加えて、一部の実施形態では、メモリオペランドのストライドされたデータ要素が、デスティネーションに格納する前にレジスタに格納される。ギャザーストライド命令の実行の別の例を図2に示す。この例は、前の例に類似しているが、データ要素のサイズが異なっているたとえば、データ要素の数が32ビットではなくて64ビットである。このサイズの変更によって、マスクで利用されるビット数も変化する本例では8である。一部の実施形態では、マスクの下位のほうの8ビットが利用される最下位8ビット。他の実施形態では、マスクの上位のほうの8ビットが利用される最上位8ビット。他の実施形態では、マスクの1つおきのビットを利用するつまり、偶数のビットまたは奇数のビット。ギャザーストライド命令の実行の別の例が図3に示されている。この例は、前の例に類似しているが、マスクが16ビットではない点が異なる。本例では、書き込みマスクレジスタがベクトルレジスタたとえばXMMまたはMMレジスタである。本例では、条件付きで格納される各データ要素の書き込みマスクビットが、書き込みマスクの対応するデータエレンメントの符号ビットである。図4は、プロセッサのギャザーストライド命令の利用の一実施形態を示す。デスティネーションオペランド、ソースアドレスオペランドベース、変位、インデックス、および/またはスケールおよび書き込みマスクを有するギャザーストライド命令をフェッチする401。オペランドのサイズの例は前述したとおりである。403で、ギャザーストライド命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈するたとえば、アップコンバージョンまたはその他のデータ変換が必要か、どのレジスタに書き込み、またはどのレジスタから取得すべきか、および、ソースメモリアドレスはどれか、等。405で、ソースオペランド値を取得する/読み取る。ほとんどの実施形態では、メモリソース位置アドレスおよび後続するストライドアドレスに関するデータ要素がこの時点で読み出されるたとえばキャッシュライン全体を読み出す。加えて、これらは、デスティネーション以外のベクトルレジスタに一時的に格納されてよい。しかしソースからのデータ要素は一回につき1つだけ取得することができる。実行すべきデータ要素変換がある場合たとえばアップコンバージョン、407で実行する。たとえばメモリから16ビットデータ要素を、32ビットのデータ要素にアップコンバージョンしてよい。ギャザーストライド命令または、マイクロオペレーション等の命令を含むオペレーションが、409で実行リソースにより実行される。この実行によって、アドレスメモリのストライドされたデータ要素が、書き込みマスクの対応するビットに基づいて、条件付きで、デスティネーションレジスタに格納される。この格納の例は前述したとおりである。図5は、ギャザーストライド命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション401-407のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。たとえば、フェッチおよびデコードは示されておらず、オペランドソースおよび書き込みマスクの取得も示されていない。501で、マスクとデスティネーションとが同じレジスタかの判断を行う。同じであれば、フォルトを生成して、命令の実行を中断する。同じでなければ、メモリの第1のデータ要素のアドレスを、ソースオペランドのアドレスデータから生成する503。たとえばベースおよび変位が、アドレスを生成するために利用される。ここでも、これは前に実行されていてもよい。この時点で、データ要素が前に取得されていなければ、取得される。一部の実施形態では、ストライドデータ要素の全てではなくてもいくつかが取得される。504で、第1のデータ要素にフォルトがあるかを判断する。フォルトがある場合、命令の実行を中断する。フォルトがない場合には、メモリの第1のデータ要素に対応している書き込みマスクビット値を、デスティネーションレジスタの対応する位置に格納すべきかを判断する505。前の例を振り返ると、この判断は、図1の書き込みマスクの最下位の値等の書き込みマスクの最下位位置を参照して、メモリデータ要素をデスティネーションの第1のデータ要素位置に格納すべきかを判断することで行われる。書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示していない場合には、デスティネーションの第1の位置のデータ要素をそのままにしておく507。通常、これは、書き込みマスクの0の値で示されるが、反対のルールoppositeconventionを適用することもできる。書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示している場合には、デスティネーションの第1の位置のデータ要素をこの位置に格納する509。通常、これは、書き込みマスクの1の値で示されるが、反対のルールを適用することもできる。データ変換アップコンバージョン等が必要な場合には、前に行われていない場合はこのときに行うことができる。511で、第1の書き込みマスクビットをクリアして、書き込みの成功を示す。条件付きでデスティネーションレジスタに格納する、後続するストライドされたデータ要素のアドレスを513で生成する。前の例で詳述したように、このデータ要素は、メモリの前のデータ要素からx個のデータ要素分離れており、ここでxは、命令に含まれるストライド値である。ここでも、この処理は前に実行されていてもよい。データ要素は、前に取得されていなければ、このときに取得される。この後続するストライドされたデータ要素にフォルトがあるかの判断を515で行う。フォルトがある場合には、命令の実行を中断する。フォルトがない場合には、メモリの後続するストライドされたデータ要素に対応する書き込みマスクビット値が、デスティネーションレジスタの対応する位置に格納すべきかを判断する517。前の例を振り返ると、この判断は、図1の書き込みマスクの2番目に最下位の値等の書き込みマスクの次の位置を参照して、メモリデータ要素をデスティネーションの第2のデータ要素位置に格納すべきかを判断することで行われている。書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示していない場合には、デスティネーションの該当位置のデータ要素をそのままにしておく523。通常、これは、書き込みマスクの0の値で示されるが、反対のルールoppositeconventionを適用することもできる。書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示している場合には、デスティネーションの第1の位置のデータ要素をこの位置に格納する519。通常、これは、書き込みマスクの1の値で示されるが、反対のルールを適用することもできる。データ変換アップコンバージョン等が必要な場合には、前に行われていない場合はこのときに行うことができる。書き込みマスク評価ビットを521でクリアして、書き込みの成功を示す。評価された書き込みマスク位置が書き込みマスクの最後か、デスティネーションのデータ要素位置の全てが満たされているかの判断を525で行う。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、別の書き込みマスクビットを評価する。この図および上述した記載は、それぞれの第1の位置を最下位の位置と想定しているが、一部の実施形態では、第1の位置が最上位の位置である。一部の実施形態では、フォルトの決定を行わない。<スキャッタストライド>第2の種類の命令は、スキャッタストライド命令である。一部の実施形態では、この命令をプロセッサで実行すると、ソースレジスタたとえばXMM,YMM,またはZMMからデータ要素が、書き込みマスクの値に基づいて、デスティネーションメモリ位置に条件付きで格納される。たとえば一部の実施形態では、16個までの32ビットまたは8つの64ビットの浮動小数点データ要素が条件付きでデスティネーションに格納される。通常は、デスティネーションメモリ位置は、SIB情報上述したで特定される。対応するマスクビットがそう指定している場合には、データ要素を格納する。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位displacementを含んでいる。もちろん、ベースアドレスおよび/またはストライドの即値等を含む命令等の他の実装例を利用することもできる。スキャッタストライド命令も書き込みマスクを含む。専用マスクレジスタたとえば後述するk書き込みマスクを利用する一部の実施形態では、対応する書き込みマスクビットがそうすべきと示しているときたとえば一部の実施形態ではビットが1の場合に、メモリデータ要素がロードされる。他の実施形態では、メモリデータ要素の書き込みマスクビットは、書き込みマスクレジスタたとえばXMMまたはYMMレジスタからの対応する要素の符号ビットである。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。データ要素の対応する書き込みマスクビットが設定されていない場合には、メモリの対応するデータ要素を変更せずにおく。通常は、スキャッタストライド命令によって、例外的事例がトリガされた場合を除いて、本スキャッタストライド命令に関する書き込みマスクレジスタ全体がゼロに設定される。加えて、少なくとも1つのデータ要素が既にスキャッタされている場合、この命令の実行は、例外により中断されるギャザーストライド命令について上述した通りである。こうなると、デスティネーションメモリおよびマスクレジスタが、部分的に更新される。128ビットサイズのベクトルの一部の実施形態では、命令は、4つの単精度浮動小数点値または2つの倍精度浮動小数点値までスキャッタされる。256ビットサイズのベクトルの一部の実施形態では、命令は、8つの単精度浮動小数点値または4つの倍精度浮動小数点値までスキャッタされる。512ビットサイズの一部の実施形態では、命令は、16個の32ビットまたは8つの64ビットの浮動小数点値までスキャッタされる。一部の実施形態では、重複しているデスティネーション位置に対する書き込みのみが、互いに対して順序を付けられることが保証されているソースレジスタの最下位から最上位へ。任意の2つの異なる要素の2つの位置が同じである場合、これら要素は重複している。重複していない書き込みは任意の順序で行われてよい。一部の実施形態では、2以上のデスティネーション位置が完全に重複している場合、前の書き込みのほうを省略する。加えて一部の実施形態では、データ要素は任意の順序でスキャッタさせることができるが重複がない場合、フォルトは右から左の順に配信される上述したギャザーストライド命令と同様である。この命令のフォーマットの例は、VSCATTERSTRbasescalestridedisplacementk1ZMM1であり、ここでZMM1は、ソースベクトルレジスタオペランド128256512ビットのレジスタであり、k1が書き込みマスクオペランドであり後で詳述する16ビットのレジスタ例、ベース、スケール、ストライド、および変位が、メモリデスティネーションアドレスおよびストライド値を、メモリの後続するデータ要素に提供して、デスティネーションレジスタに条件付きでパッキングさせる。一部の実施形態では、書き込みマスクが異なるサイズ8ビット、32ビット等である場合もある。加えて一実施形態では、書き込みマスクビットの全てのビットが命令によって利用されない場合もある後述する。VSCATTERSTRは、命令のオペコードである。通常、各オペランドは明示的に命令で定義されている。データ要素のサイズは、ここで記載するW等のデータ粒度ビットの情報を利用して、命令のプレフィックス部分で定義されている。一部の実施形態では、データ粒度ビットは、データ要素が32ビットまたは64ビットであることを示す。データ要素が32ビットのサイズであり、ソースが512ビットのサイズである場合には、16個のデータ要素が1つのソースについて存在する。この命令は通常、この例では、書き込みマスクレジスタklに設定されている対応するビットをもつ要素のみが、デスティネーションメモリ位置で修正されるように、書き込みマスクされる。対応するビットが書き込みマスクレジスタでクリアされているデスティネーションメモリ位置のデータ要素は、自身の前の値を保持している。スキャッタストライド命令の実行の例が図6に示されている。ソースは、XMM、YMM,またはZMM等のレジスタである。この例では、デスティネーションは、RAXレジスタに見つかるアドレスで初期アドレス指定されているメモリであるこれは、メモリアドレス指定の簡略化された図であり、変位等を利用してアドレスが生成されてよい。もちろん、メモリアドレスは他のレジスタに格納され、命令の即値として発見されてもよい上述した通りである。この例の書き込みマスクは、ビットの値が4DB4のhe20ecimalの値に対応している16ビットの書き込みマスクである。1の値の書き込みマスクの各ビット位置において、レジスタソースからの対応するデータ要素が、デスティネーションメモリの対応するストライド位置に格納される。書き込みマスクの第1の位置たとえばkl0は0であり、対応するソースデータ要素位置たとえばソースレジスタの第1のデータ要素が、RAXメモリ位置には書き込めないことを示す。書き込みマスクの次のビットも0であり、これは、ソースレジスタからの次のデータ要素も、RAXメモリ位置からストライドされたメモリ位置に格納されないことを示している。この例では、ストライド値が3であるので、RAXメモリ位置から3つのデータ要素離れたデータ要素が上書きできない。書き込みマスクの第1の1の値は、第3のビット位置にあるたとえばkl2。これは、ソースレジスタの第3のデータ要素がデスティネーションメモリに格納されるべきことを示す。このデータ要素は、ストライドされたデータ要素から3つストライド離れた位置であって、第1のデータ要素から6つ離れた位置に格納されている。残りの書き込みマスクビット位置も、ソースレジスタのどの追加的データ要素がデスティネーションメモリに格納されるかを判断するために利用されるこの例では、全部で8つのデータ要素が格納されるが、書き込みマスクに応じて、数はこれより多くても少なくてもよい。加えて、レジスタソースからのデータ要素は、デスティネーションのデータ要素のサイズが、たとえば、デスティネーションに格納される前に32ビットの浮動小数点値から16ビットの浮動小数点値になるように、ダウンコンバージョンされてよい。ダウンコンバージョンおよびこれらを命令フォーマットにエンコードする方法の例は、上述した通りである。スキャッタストライド命令の実行の別の例が図7に示されている。この例は、前の例に類似しているが、データ要素のサイズが異なっているたとえば、データ要素の数が32ビットではなくて64ビットである。このサイズの変更によって、マスクで利用されるビット数も変化する本例では8である。一部の実施形態では、マスクの下位のほうの8ビットが利用される最下位8ビット。他の実施形態では、マスクの上位のほうの8ビットが利用される最上位8ビット。他の実施形態では、マスクの1つおきのビットを利用するつまり、偶数のビットまたは奇数のビット。スキャッタストライド命令の実行のまた別の例が図8に示されている。この例は、前の例に類似しているが、マスクが16ビットではない点が異なる。本例では、書き込みマスクレジスタがベクトルレジスタたとえばXMMまたはMMレジスタである。本例では、条件付きで格納される各データ要素の書き込みマスクビットが、書き込みマスクの対応するデータエレンメントの符号ビットである。図9は、プロセッサでスキャッタストライド命令を実行する一実施形態を示す。901で、デスティネーションアドレスオペランドベース、変位、インデックス、および/またはスケール、書き込みマスク、およびソースレジスタオペランドをもつスキャッタストライド命令をフェッチする。ソースレジスタのサイズの例は前に詳述した通りである。903で、スキャッタストライド命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈するたとえば、アップコンバージョンまたはその他のデータ変換が必要か、どのレジスタに書き込み、またはどのレジスタから取得すべきか、および、メモリアドレスはどれか、等。905で、ソースオペランドの値を取得する/読み取る。実行すべきデータ要素変換がある場合たとえばダウンコンバージョン、907で実行する。たとえばソースから32ビットデータ要素を、16ビットのデータ要素にダウンコンバージョンしてよい。スキャッタストライド命令または、マイクロオペレーション等の命令を含むオペレーションが、909で実行リソースにより実行される。この実行によって、ソースXMM、YMM、またはZMMレジスタからのデータエレンメントが、書き込みマスクの値に基づいて、最下位から最上位へと、重複しているストライドデスティネーションメモリ位置に、条件付きで格納される。図10は、スキャッタストライド命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション901-907のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。たとえば、フェッチおよびデコードは示されておらず、オペランドソースおよび書き込みマスクの取得も示されていない。1001で、潜在的に書き込まれる可能性のある第1のメモリ位置を、命令のアドレスデータから生成する。ここでも、これは前に実行していてもよい。1002で、このアドレスにフォルトがあるかを判断する。フォルトがある場合には実行を中断する。フォルトがない場合には、1003で、第1の書き込みマスクビットの値が、ソースレジスタの第1のデータ要素が、生成されたアドレスに格納されるべきかを判断する。前の例を参照すると、この決定は、図6の書き込みマスクの最下位の値等の書き込みマスクの最下位の位置を参照して、第1のレジスタデータ要素を生成されたアドレスに格納すべきかを判断することで行われる。書き込みマスクビットが、レジスタデータ要素を、生成されたアドレスに格納すべきであると示していない場合には、メモリのデータ要素をそのままにしておく1005。通常、これは、書き込みマスクの0の値で示されるが、反対のルールoppositeconventionを適用することもできる。書き込みマスクビットが、レジスタデータ要素を、生成されたアドレスに格納すべきであると示している場合には、ソースの第1の位置のデータ要素をこの位置に格納する1007。通常、これは、書き込みマスクの1の値で示されるが、反対のルールを適用することもできる。データ変換ダウンコンバージョン等が必要な場合には、前に行われていない場合はこのときに行うことができる。1009で、書き込みマスクビットをクリアして、書き込みの成功を示す。1011で、データ要素が条件付きで上書きされてよい後続するストライドメモリアドレスを生成する。前の例で詳述したように、このアドレスは、メモリの前のデータ要素からx個のデータ要素分離れており、ここでxは、命令に含まれるストライド値である。この後続するストライドされたデータ要素にフォルトがあるかの判断を1013で行う。フォルトがある場合には、命令の実行を中断する。フォルトがない場合には、1015で、後続する書き込みマスクビットの値が、ソースレジスタの後続するデータ要素が、生成されたストライドアドレスに格納されるべきであるかを示しているか判断してよい。前の例を振り返ると、この判断は、図6の書き込みマスクの2番目に最下位の値等の書き込みマスクの次の位置を参照して、対応するデータ要素を、生成されたアドレスに格納すべきかを判断することで行われている。書き込みマスクビットが、ソースデータ要素をメモリ位置に格納すべきであると示していない場合には、そのアドレスのデータ要素をそのままにしておく1021。通常、これは、書き込みマスクの0の値で示されるが、反対のルールoppositeconventionを適用することもできる。書き込みマスクビットが、ソースデータ要素を、生成されたストライドアドレスに格納すべきであると示している場合には、そのアドレスのデータ要素を、ソースデータ要素で上書きする1017。通常、これは、書き込みマスクの1の値で示されるが、反対のルールを適用することもできる。データ変換ダウンコンバージョン等が必要な場合には、前に行われていない場合はこのときに行うことができる。書き込みマスクビットを1019でクリアして、書き込みの成功を示す。評価された書き込みマスク位置が書き込みマスクの最後か、またはデスティネーションのデータ要素位置の全てが満たされているかの判断を1023で行う。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、ストライドアドレスに格納する候補の別のデータ要素を評価する。この図および上述した記載は、それぞれの第1の位置を最下位の位置と想定しているが、一部の実施形態では、第1の位置が最上位の位置である。加えて、一部の実施形態では、フォルトの決定を行わない。<ギャザーストライドプリフェッチ>第3の種類の命令は、ギャザーストライドプリフェッチ命令である。この命令のプロセッサによる実行によって、メモリシステムまたはキャッシュから条件付きでストライドデータがプリフェッチされて、命令の書き込みマスクに従って命令で示唆されているhintat命令によってキャッシュのレベルに入れられる。プリフェッチされたデータは、後続する命令によって読み出されてよい。上述したギャザーストライド命令とは異なり、デスティネーションレジスタがなく、書き込みマスクが修正されないこの命令は、プロセッサの任意のアーキテクチャ状態を修正するものではない。データ要素は、キャッシュライン等のメモリチャンク全体の部分としてプリフェッチされてよい。プリフェッチされるデータ要素は、1種類のSIBスケール、インデックス、およびベースの指定によって特定される前述した。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位displacementを含んでいる。もちろん、ベースアドレスおよび/またはストライドの即値等を含む命令等の他の実装例を利用することもできる。ギャザーストライドプリフェッチ命令も書き込みマスクを含む。専用マスクレジスタたとえば後述するk書き込みマスクを利用する一部の実施形態では、メモリデータ要素に対応する書き込みマスクビットがそうすべきと示しているときたとえば一部の実施形態ではビットが1の場合に、当該メモリデータ要素がプリフェッチされる。他の実施形態では、データ要素の書き込みマスクビットは、書き込みマスクレジスからの対応する要素の符号ビットであるたとえばXMMまたはYMMレジスタ。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。加えて、上述したギャザーストライドの実施形態とは異なり、通常は、ギャザーストライドプリフェッチ命令は、例外的に停止されず、ページフォルトを配信しない。この命令の形式の例が、VGATHERSTRPREbasescalestridedisplacementk1hintであり、ここでk1が書き込みマスクオペランドであり後で詳述する16ビットのレジスタ例、ベース、スケール、ストライド、および変位が、メモリソースアドレスおよびストライド値を、メモリの後続するデータ要素に提供して、デスティネーションレジスタに条件付きでプリフェッチさせる。示唆hintにより、条件付きでプリフェッチするキャッシュレベルを提供する。一部の実施形態では、書き込みマスクも異なるサイズ8ビット、32ビット等であってよい。加えて一部の実施形態では、後述するように、書き込みマスクの全てのビットを命令が利用しない場合もある。VGATHERSTRPREは、命令のオペコードである。通常、各オペランドは明示的に命令で定義されている。この命令は通常、この例では、書き込みマスクレジスタklに設定されている対応するビットをもつメモリ位置のみが、プレフェッチされるように、書き込みマスクされる。ギャザーストライドプリフェッチ命令の実行の一例が図11に示されている。この例では、メモリは、RAXレジスタにみられるアドレスに、初期アドレス指定されているこれは、メモリアドレス指定の簡略化された図であり、変位等を、アドレスを生成するために利用することができる。もちろん、メモリアドレスは、他のレジスタに格納されていても、上述した命令の即値として発見されてもよい。この例の書き込みマスクは、ビットの値が4DB4のhe20ecimalの値に対応している16ビットの書き込みマスクである。1の値の書き込みマスクの各ビット位置において、メモリソースからのデータ要素がプリフェッチされ、これには、キャッシュまたはメモリのライン全体のプリフェッチが含まれてよい。書き込みマスクの第1の位置はたとえばkl0であり、対応するデスティネーションデータ要素位置たとえばデスティネーションレジスタの第1のデータ要素が、そこには、ソースメモリからのデータ要素が格納されていないことを示す。この場合、RAXアドレスに関連しているデータ要素は格納されない。書き込みマスクの次のビットも0であり、これは、メモリ内の後続するストライドされたデータ要素も、プリフェッチされるべきではないことを示している。この例では、ストライド値が3であり、この後続するデータ要素は、第1のデータ要素から離れている第3のデータ要素である。書き込みマスクの第1の1の値は、第3のビット位置にあるたとえばkl2。これは、メモリの前のストライドされたデータ要素に後続するストライドされたデータ要素がプリフェッチされるべきことを示す。この後続するストライドされたデータ要素は、前のストライドされたデータ要素から3つ離れており、第1のデータ要素からは6つ離れている。残りの書き込みマスクビット位置も、メモリソースのどの追加的データ要素をプリフェッチするかを判断するために利用される。図12は、プロセッサでギャザーストライドプリフェッチ命令を利用する一実施形態を示す。アドレスオペランドベース、変位、インデックス、および/またはスケール、書き込みマスク、および示唆hintを有するギャザーストライドプリフェッチ命令をフェッチする1201。1203で、ギャザーストライドプリフェッチ命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈してよいたとえば、どのキャッシュレベルをプリフェッチするか、ソースからのメモリアドレスはどれか、等。1205で、ソースオペランド値を取得する/読み取る。ほとんどの実施形態では、メモリソース位置アドレスに関するデータ要素および後続するストライドアドレスに関するデータ要素およびそれに関するデータ要素がこの時点で読み出されるたとえばキャッシュライン全体を読み出す。しかしソースからのデータ要素は一回につき1つだけ取得することができる破線に示されている通りである。ギャザーストライドプリフェッチ命令または、マイクロオペレーション等の命令を含むオペレーションが、1207で実行リソースにより実行される。この実行によって、プロセッサは、メモリシステムまたはキャッシュからストライドされたデータ要素をプリフェッチして、命令の書き込みマスクに従って命令で示唆されているhintatキャッシュのレベルに入れられる。図13は、ギャザーストライドプリフェッチ命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション1201―1205のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。1301で、条件付きでプリフェッチされるメモリの第1のデータ要素のアドレスが、ソースオペランドのアドレスデータから生成される。ここでも、これは前に実行されていてもよい。1303で、メモリの第1のデータ要素に対応している書き込みマスクビット値が、プリフェッチされるべきであると示しているかどうかの判断を行う。前の例を振り返ると、この判断は、図11の書き込みマスクの最下位の値等の書き込みマスクの最下位の位置を参照して、メモリデータ要素をプリフェッチすべきかを判断することで行われている。書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示していない場合には、なにもプリフェッチされない1305。通常は、書き込みマスクの0の値で示されるが、反対のルールoppositeconventionを適用することもできる。書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示している場合には、データ要素をプリフェッチする1307。通常は、書き込みマスクの1の値で示されるが、反対のルールoppositeconventionを適用することもできる。前述したように、これは、他のデータ要素を含むキャッシュラインまたはメモリ位置全体をフェッチすることを意味していてよい。条件付きでプリフェッチされる、後続するストライドされたデータ要素のアドレスを1309で生成する。前の例で詳述したように、このデータ要素は、メモリの前のデータ要素からx個のデータ要素分離れており、ここでxは、命令に含まれるストライド値である。1311で、メモリ内の後続するストライドされたデータ要素に対応している書き込みマスクビット値が、プリフェッチされるべきであると示しているかどうかの判断を行う。前の例を振り返ると、この判断は、図11の書き込みマスクの2番目に最下位の値等の書き込みマスクの次の位置を参照して、メモリデータ要素をプリフェッチすべきかを判断することで行われている。書き込みマスクビットが、メモリデータ要素をプリフェッチすべきであると示していない場合には、なにもプリフェッチされない1313。通常は、書き込みマスクの0の値で示されるが、反対のルールoppositeconventionを適用することもできる。書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示している場合には、データ要素をプリフェッチする1315。通常は、書き込みマスクの1の値で示されるが、反対のルールoppositeconventionを適用することもできる。評価された書き込みマスクの位置が、書き込みマスクの最後かを判断する1317。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、別のストライドされたデータ要素を評価する。この図および上述した記載は、それぞれの第1の位置を最下位の位置と想定しているが、一部の実施形態では、第1の位置が最上位の位置である。<スキャッタストライドプリフェッチ>第4の種類の命令は、スキャッタストライドプリフェッチ命令である。この命令のプロセッサによる実行によって、メモリシステムまたはキャッシュからストライドデータがプリフェッチされて、命令の書き込みマスクに従って命令で示唆されているhintat命令によってキャッシュのレベルに入れられる。この命令と、ギャザーストライドプリフェッチとの違いは、プリフェッチされるデータが、後で書き込まれるが、読み出されないことである。上記にて詳述した命令の実施形態は、下記に詳述する汎用のベクトルフレンドリーな命令フォーマットで実施することも可能である。他の実施形態において、そのような形式は用いられず、他の命令フォーマットが用いられる。しかし、書き込みマスクレジスタ、様々なデータ変換スウィズル、ブロードキャストなど、アドレシングなどに関する以下の説明は一般的に、上述した命令の実施形態の説明に関して適用可能である。加えて、例示的なシステム、アーキテクチャ、およびパイプラインについて以下で詳述する。上述した命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプラインで実行することが出来るが、それら詳述されるものに限定されない。ベクトルフレンドリーな命令フォーマットは、ベクトル命令に適した命令フォーマット例えば、ベクトル演算に特定のいくつかのフィールドがあるである。ベクトルフレンドリーな命令フォーマットによってベクトル演算およびスカラ演算の両方がサポートされる実施形態を説明するが、代替的な実施形態においては、ベクトルフレンドリーな命令フォーマットのベクトル演算のみが用いられる。<例示的な汎用のベクトルフレンドリーな命令フォーマット-図14Aおよび図14B>図14Aおよび図14Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、その命令テンプレートを示すブロック図である。図14Aは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、そのクラスAの命令テンプレートを示すブロック図である。図14Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、そのクラスB命令テンプレートを示すブロック図である。詳細には、汎用のベクトルフレンドリーな命令フォーマット1400には、それぞれが非メモリアクセス1405命令テンプレートおよびメモリアクセス1420命令テンプレートを含む、クラスAおよびクラスB命令テンプレートが定義されている。ベクトルフレンドリーな命令フォーマットという表現において汎用という用語は、命令フォーマットが何ら特定の命令セットに関連付けられていないことを意味する。ベクトルフレンドリーな命令フォーマットの命令が、レジスタ非メモリアクセス1405命令テンプレートおよびレジスタ/メモリメモリアクセス1420命令テンプレートのうちいずれかをソースとするベクトルに対して動作する実施形態を説明するが、本願発明の代替的な実施形態においては、これらのうちいずれか一方だけをサポートしてもよい。また、ベクトル命令フォーマットのロード命令および格納命令がある本願発明の実施形態を説明するが、代替的な実施形態においては、代わりに、或いは、加えて、レジスタへ、またはレジスタからベクトル例えば、メモリからレジスタへ、レジスタからメモリへ、レジスタ間で、などを移動させる異なる命令フォーマットの命令が用いられる。さらに、2つのクラスの命令テンプレートをサポートする本願発明の実施形態を説明するが、代替的な実施形態においては、これらのうち一方のみ、または3つ以上がサポートされる。ベクトルフレンドリーな命令フォーマットが、32ビット4バイト、または、64ビット8バイトのデータ要素幅またはサイズを有する64バイトベクトルオペランドの長さまたはサイズよって、64バイトのベクトルは、16倍長語サイズの要素、および8クワッド語サイズの要素のいずれかからなる、16ビット2バイト、または、8ビット1バイトのデータ要素幅またはサイズを有する64バイトベクトルオペランドの長さまたはサイズ、32ビット4バイト、64ビット8バイト、16ビット2バイト、または、8ビット1バイトのデータ要素幅またはサイズを有する32バイトベクトルオペランドの長さまたはサイズ、並びに、32ビット4バイト、64ビット8バイト、16ビット2バイト、または、8ビット1バイトのデータ要素幅またはサイズを有する16バイトベクトルオペランドの長さまたはサイズをサポートする実施形態について説明するが、代替的な実施形態においては、より大きな、より小さな、または異なるデータ要素幅例えば、128ビット16バイトデータ要素幅を有するより大きな、より小さな、および/または異なるベクトルオペランドサイズ例えば1456バイトのベクトルオペランドがサポートされてもよい。図14AのクラスAの命令テンプレートは、1非メモリアクセス1405命令テンプレート内に、非メモリアクセス完全丸め制御タイプ演算1410命令テンプレート、および非メモリアクセスデータ変換タイプ演算1415命令テンプレート、並びに2メモリアクセス1420命令テンプレート内に、メモリアクセス一時的1425命令テンプレート、およびメモリアクセス非一時的1430命令テンプレートを含む。図14BのクラスB命令テンプレートは、1非メモリアクセス1405命令テンプレート内に、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算1412命令テンプレート、および非メモリアクセス書き込みマスク制御vsizeタイプ演算1417命令テンプレート、並びに、2メモリアクセス1420命令テンプレート内に、メモリアクセス書き込みマスク制御1427命令テンプレートを含む。<形式>汎用のベクトルフレンドリーな命令フォーマット1400は、図14Aおよび図14Bに示される順序で、以下に列挙するフィールドを含む。形式フィールド1440-このフィールド内の特定値命令フォーマット識別値は一意的に、ベクトルフレンドリーな命令フォーマットを識別し、よって、命令ストリーム内のベクトルフレンドリーな命令フォーマットの命令の発生を識別する。よって、形式フィールド1440の内容は、第1命令フォーマットの命令の発生を他の命令フォーマットの命令の発生と区別し、これにより、ベクトルフレンドリーな命令フォーマットを他の命令フォーマットの命令セットへ導入することが可能となる。このため、このフィールドは、汎用のベクトルフレンドリーな命令フォーマットのみを有する命令には必要でないので任意的なものである。ベース演算フィールド1442-この内容は、複数の異なるベース演算を区別する。本明細書で以下に説明するように、ベース演算フィールド1442は、オペコードフィールドを含み、および/または、その一部であってもよい。レジスタインデックスフィールド1444-この内容は、直接的またはアドレス生成を介して、レジスタまたはメモリなどの、ソースおよびデスティネーションオペランドの位置を特定する。これらには、PxQ例えば32x1612レジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態において、Nは最大3つのソースおよび1つのデスティネーションレジスタであるが、代替的な実施形態においては、より多く、またはより少ないソースおよびデスティネーションレジスタをサポートしてもよい例えば最大2つのソースをサポートしてもよく、これらソースのうち1つはデスティネーションとしても動作する。例えば最大3つのソースをサポートしてもよく、これらソースのうち1つはデスティネーションとしても動作する。例えば最大2つのソースおよび1つのデスティネーションをサポートしてもよい。一実施形態においてはP=32であるが、代替的な実施形態においては、より多く、またはより少ないレジスタ例えば16のをサポートしてもよい。一実施形態においてはQ=1612ビットであるが、代替的な実施形態においては、より多く、またはより少ないビット例えば128、1024のをサポートしてもよい。修飾子フィールド1446-この内容は、メモリアクセスを特定する汎用ベクトル命令フォーマットの命令の発生を、メモリアクセスを特定しない命令フォーマットの命令の発生と区別する。つまり、非メモリアクセス1405命令テンプレートとメモリアクセス1420命令テンプレートとを区別する。メモリアクセス動作は、メモリ階層から読み出す、および/または、メモリ階層へ書き込む場合によっては、レジスタ内の値を用いて、ソース、および/またはデスティネーションアドレスを特定する。他方、メモリアクセス動作はこれらを特定しない例えば、ソースおよびデスティネーションがレジスタである。一実施形態においては、このフィールドはメモリアドレス計算を実行する3つの異なる方法からの選択も行うが、代替的な実施形態においては、メモリアドレス計算を実行するより多くの、より少ない、または複数の異なる方法をサポートする。オーグメンテーション演算フィールド1450-この内容は、ベース演算に加えて、様々な複数の異なる演算のうち何れを実行するかを区別する。このフィールドはコンテキスト特有のものである。本願発明の一実施形態において、このフィールドは、クラスフィールド1468、アルファフィールド1452、および、ベータフィールド1454に分けられる。オーグメンテーション演算フィールドは、複数の演算からなる共通のグループを、2、3、または4つの命令ではなく1つの命令で実行することを可能とする。以下に示すのは、必要な命令の数を減らすべくオーグメンテーションフィールド1450を用いる命令用いられる用語の意味は、本明細書において以下により詳細に説明するのいくつかの例である。ここで、[rax]はアドレス生成に用いられるベースポインタであり、{}は、データ操作フィールド本明細書で以下により詳細に説明するで特定される変換演算を示す。スケールフィールド1460-この内容は、メモリアドレスの生成のための例えば、2スケールインデックスベースを用いるアドレス生成のためのインデックスフィールドの内容のスケーリングを可能とする。変位フィールド1462A-この内容は、メモリアドレスの生成例えば、2スケールインデックスベース変位を用いるアドレス生成の一部として用いられる。変位係数フィールド1462Bいずれか一方のみが用いられるので、変位フィールド1462Aは変位係数フィールド1462Bの直接上に配置されている-この内容は、アドレス生成の一部として用いられる。このフィールドは、メモリアクセスNのサイズでスケーリングされる変位係数を特定する。ここでNは、メモリアクセス例えば、2スケールインデックスベーススケーリングされた変位を用いるアドレス生成のためののバイト数である。冗長下位ビットは無視され、よって、有効アドレスを計算するのに用いられる最終的な変位を生成すべく変位係数フィールドの内容がメモリオペランドの合計サイズNで乗算される。Nの値は、本明細書で以下に説明するようにフルオペコードフィールド1474本明細書で以下に説明するおよびデータ操作フィールド1454Cに基づいて実行時にプロセッサハードウェアによって求められる。変位フィールド1462Aおよび変位係数フィールド1462Bは非メモリアクセス1405命令テンプレートには用いられない、並びに/或いは、異なる実施形態においては、いずれか一方が用いられる、または両方とも用いられないので、任意的なものである。データ要素幅フィールド1464-この内容は、複数のデータ要素幅のうち何れを用いるかを区別するいくつかの実施形態においては全ての命令に関して。他の実施形態においては、命令のうちいくつかに関して。1つだけのデータ要素幅がサポートされる場合、および/または、オペコードのいくつかの態様を用いて複数のデータ要素幅がサポートされる場合には必要ではないので、このフィールドは任意的なものである。書き込みマスクフィールド1470-この内容は、データ要素の位置毎に、デスティネーションベクトルオペランドのデータ要素の位置に、ベース演算およびオーグメンテーション演算の結果を反映させるかどうかを制御する。クラスA命令テンプレートはマージング-書き込みマスキングをサポートし、クラスB命令テンプレートは、マージング-書き込みマスキング、およびゼロ化-書き込みマスキングの両方をサポートする。マージングの際、ベクトルマスクにより、デスティネーションの複数の要素からなる何れのセットも、ベース演算およびオーグメンテーション演算によって特定されるいかなる演算の実行の間であっても、更新から保護をすることが可能となる。他の一実施形態において、対応するマスクビットが有する0を有するデスティネーションの各要素の古い値が維持される。対照的に、ベクトルマスクをゼロ化する際、ベース演算およびオーグメンテーション演算によって特定されるいかなる演算の実行の間であっても、デスティネーションの複数の要素からなる何れのセットもゼロにされる。一実施形態において、対応するマスクビットが0の値を有するデスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長さつまり、最初から最後までの、修飾されている要素のスパンを制御する能力である。しかし、修飾される要素が連続している必要はない。よって、書き込みマスクフィールド1470は、ロード、格納、算術、ロジカルなどを含む部分的なベクトル演算を可能とする。また、このマスキングをフォルトの抑制に用いることも出来るつまり、フォルトを引き起こし得る/引き起こす何らかの演算の結果の受信を避けるべくデスティネーションのデータ要素の位置をマスキングすることにより。例えば、メモリのベクトルがページの境界をクロスし、2番目のページではなく最初のページがページフォルトを引き起こすことを想定すると、最初のページにあるベクトルの全てのデータ要素が書き込みマスクによりマスキングされた場合、ページフォルトを無視することが出来る。さらに、書き込みマスクは、特定のタイプの条件ステートメントを含むベクトル化ループを可能とする。書き込みマスクフィールド1470の内容が、用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうちの1つを選択するよって、書き込みマスクフィールド1470の内容が、実行されるマスキングを間接的に識別する本願発明の実施形態を説明したが、代替的な実施形態においては、代替的または追加的に、書き込みマスクフィールド1470の内容が、実行されるマスキングを直接的に特定することを可能とする。さらに、1レジスタリネームパイプライン段階においてデスティネーションは黙示的なソースではないので、デスティネーションオペランドがソースでもない命令ノンターナリ命令とも呼ばれるに対してレジスタリネーミングが用いられる演算の結果でない何れかデータ要素何れのマスキングされたデータ要素もゼロにされるので、現在のデスティネーションレジスタからのデータ要素の何れもリネームされたデスティネーションレジスタにコピーされる必要がなく、或いは、何らかの方法で演算を実行される必要がない場合、および、2ゼロが書き込まれているので、書き戻し段階の間、ゼロ化により性能の向上が可能となる。即値フィールド1472-この内容は即値の特定を可能とする。即値をサポートしない汎用のベクトルフレンドリーな形式の実施では存在せず、即値を用いない命令では存在しないので、このフィールドは任意的なものである。<命令テンプレートクラス選択>クラスフィールド1468-この内容は複数の異なるクラスの命令を区別する。図14Aおよび図14Bを参照すると、このフィールドの内容は、クラスAの命令およびクラスBの命令のうちから選択する。図14Aおよび図14Bにおいて、角が丸められた正方形は、特定値がフィールド内に存在することを示すのに用いられている例えば、図14AのクラスA1468A、および図14BのクラスB1468B。<クラスAの非メモリアクセス命令テンプレート>クラスAの非メモリアクセス1405命令テンプレートの場合、アルファフィールド1452は、含まれる内容が複数の異なるオーグメンテーション演算タイプのうち何れが実行されるかを区別する例えば、丸め1452A.1およびデータ変換1452A.2がそれぞれ、非メモリアクセス丸めタイプ演算1410および非メモリアクセスデータ変換タイプ演算1415命令テンプレートに関して特定されるRSフィールド1452Aとして解釈され、ベータフィールド1454は、特定されたタイプの演算のうち何れが実行されるかを区別する。図14Aおよび図14Bにおいて、角が丸められたブロックは、特定値が存在することを示すのに用いられている例えば、修飾子フィールド1446の非メモリアクセス1446A、アルファフィールド1452/rsフィールド1452Aの丸め1452A.1およびデータ変換1452A.2。非メモリアクセス1405命令テンプレートにおいて、スケールフィールド1460、変位フィールド1462A、および変位スケールフィールド1462Bは存在しない。<非メモリアクセス命令テンプレート-完全丸め制御タイプ演算>非メモリアクセス完全丸め制御タイプ演算1410命令テンプレートにおいて、ベータフィールド1454は、含まれる内容が静的な丸めを提供する丸め制御フィールド1454Aとして解釈される。本願発明の説明される実施形態においては、丸め制御フィールド1454Aは全浮動小数点例外抑制SAEフィールド1456、および、丸め演算制御フィールド1458を含むが、代替的な実施形態においては、これらのコンセプトの両方を同じフィールドにエンコードする、または、これらのコンセプト/フィールドのうち一方、または他方のみを有する例えば、丸め演算制御フィールド1458のみを有する。SAEフィールド1456-この内容は、例外イベント報告を無効化するかどうかを区別する。抑制が有効であることをSAEフィールド1456の内容が示す場合、任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない。丸め演算制御フィールド1458-この内容は、複数の丸め演算例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸めからなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド1458は、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド1450の内容は、レジスタ値よりも優位であるそのような制御レジスタに対し格納-変更-復元を実行する必要なく丸めモードを選択出来るということは有利である。<非メモリアクセス命令テンプレート-データ変換タイプ演算>非メモリアクセスデータ変換タイプ演算1415命令テンプレートにおいて、ベータフィールド1454は、複数のデータ変換例えば、データ変換、スウィズル、ブロードキャストのうち何れが実行されるかを含まれる内容が区別するデータ変換フィールド1454Bとして解釈される。<クラスAのメモリアクセス命令テンプレート>クラスAのメモリアクセス1420命令テンプレートの場合、アルファフィールド1452に含まれている内容は、エビクション示唆hintのうちいずれが用いられるかを区別する図14Aにおいて、一時的1452B.1および非一時的1452B.2がそれぞれ、メモリアクセス一時的1425命令テンプレートおよびメモリアクセス非一時的1430命令テンプレートに関して特定されるエビクション示唆hintフィールド1452Bとして解釈され、ベータフィールド1454は、含まれる内容が複数のデータ操作演算プリミティブとしても知られるのうちいずれが実行されるか例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョンを区別するデータ操作フィールド1454Cとして解釈される。メモリアクセス1420命令テンプレートは、スケールフィールド1460を含み、場合によっては、変位フィールド1462Aまたは変位スケールフィールド1462Bを含む。ベクトルメモリ命令は、変換のサポートと共に、メモリからのベクトルロード、およびメモリへのベクトル格納を実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素の点で、書き込みマスクとして選択されたベクトルマスクの内容によって指示されて実際に転送される要素と共に、メモリから、またはメモリへデータを転送する。図14Aにおいて、角が丸められた正方形は、フィールド内に特定値が存在することを示すのに用いられている例えば、修飾子フィールド1446のメモリアクセス1446B、アルファフィールド1452/エビクション示唆hintフィールド1452Bの一時的1452B.1、および非一時的1452B.2。<メモリアクセス命令テンプレート-一時的>一時的データは、キャッシュするのが有利である程度に直ぐに再度用いられる可能性が高いデータである。しかし、これは示唆hintであり、複数の異なるプロセッサが、示唆hintを全く無視するなど複数の異なるやり方で実行し得る。<メモリアクセス命令テンプレート-非一時的>非一時的データは、第1レベルキャッシュでキャッシュするのが有利ではない程度に直ぐには再度用いられる可能性が低く、エビクションの高い優先度を与えられるべきデータである。しかし、これは示唆hintであり、複数の異なるプロセッサが、示唆hintを全く無視するなど複数の異なるやり方で実行し得る。<クラスB命令テンプレート>クラスB命令テンプレートの場合、アルファフィールド1452は、書き込みマスクフィールド1470により制御される書き込みマスキングがマージングであるかゼロ化であるかを含まれる内容が区別する書き込みマスク制御Zフィールド1452Cとして解釈される。<クラスBの非メモリアクセス命令テンプレート>クラスBの非メモリアクセス1405命令テンプレートの場合、ベータフィールド1454の一部は、含まれる内容が複数の異なるオーグメンテーション演算タイプのうちいずれが実行されるのかを区別する例えば、丸め1457A.1およびベクトル長さVSIZE1457A.2がそれぞれ、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算1412命令テンプレート、および非メモリアクセス書き込みマスク制御VSIZEタイプ演算1417命令テンプレートに関して特定されるRLフィールド1457Aとして解釈され、ベータフィールド1454の残りは、特定されたタイプの演算のうちいずれが実行されるのかを区別する。図14Aおよび14Bにおいて、角が丸められたブロックは、特定値例えば、修飾子フィールド1446の非メモリアクセス1446A、RLフィールド1457Aの丸め1457A.1およびVSIZE1457A.2が存在することを示すのに用いられている。非メモリアクセス1405命令テンプレートにおいて、スケールフィールド1460、変位フィールド1462A、および、変位スケールフィールド1462Bは存在しない。<非メモリアクセス命令テンプレート-書き込みマスク制御部分的丸め制御タイプ演算>非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算1410命令テンプレートにおいて、ベータフィールド1454の残りは、丸め演算フィールド1459Aとして解釈され、例外イベント報告が無効化される任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない。丸め演算制御フィールド1459A-丸め演算制御フィールド1458とちょうど同じようにこの内容は、複数の丸め演算例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸めからなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド1459Aは、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド1450の内容は、レジスタ値よりも優位であるそのような制御レジスタに対し格納-変更-復元を実行する必要なく丸めモードを選択出来るということは有利である。<非メモリアクセス命令テンプレート-書き込みマスク制御VSIZEタイプ演算>非メモリアクセス書き込みマスク制御VSIZEタイプ演算1417命令テンプレートにおいて、ベータフィールド1454の残りは、複数のデータベクトル長さ例えば、128、1456、または1612バイトのうち何れで実行されるかを含まれる内容が区別するベクトル長さフィールド1459Bとして解釈される。<クラスBのメモリアクセス命令テンプレートクラスAのメモリアクセス1420命令テンプレートの場合、ベータフィールド1454の一部は、ブロードキャストタイプデータ操作が実行されるかどうかを含まれる内容が区別するブロードキャストフィールド1457Bとして解釈され、ベータフィールド1454の残りは、ベクトル長さフィールド1459Bとして解釈される。メモリアクセス1420命令テンプレートは、スケールフィールド1460を含み、場合によっては、変位フィールド1462Aまたは変位スケールフィールド1462Bを含む。<フィールドについての追加の説明>汎用のベクトルフレンドリーな命令フォーマット1400に関し、フルオペコードフィールド1474は、形式フィールド1440、ベース演算フィールド1442、およびデータ要素幅フィールド1464を含むものとして示した。フルオペコードフィールド1474がこれらのフィールド全てを含む一実施形態を示したが、これらのフィールド全てをサポートしない実施形態においては、フルオペコードフィールド1474はこれらのフィールドの全ては含まない。フルオペコードフィールド1474は演算コードを提供する。オーグメンテーション演算フィールド1450、データ要素幅フィールド1464、および書き込みマスクフィールド1470は、汎用のベクトルフレンドリーな命令フォーマットで、命令毎にこれらの特徴全てを特定することを可能とする。書き込マスクフィールドおよびデータ要素幅フィールドを組み合わせると、複数の異なるデータ要素幅に基づいたマスクの適用を可能とするタイプ化された命令が生成される。当該命令フォーマットは、他のフィールドの内容に基づいて異なる目的のために異なるフィールドを再利用するので、必要なビット数が比較的少なくて済む。例えば、一つの見方としては、修飾子フィールドの内容が、図14Aおよび図14Bの非メモリアクセス1405命令テンプレートと、図14Aおよび図14Bのメモリアクセス14250命令テンプレートとの間で選択と行い、クラスフィールド1468の内容が、それら非メモリアクセス1405命令テンプレートのうち、図14Aの命令テンプレート1410/1415、および、図14Bの命令テンプレート1412/1417から選択を行い、クラスフィールド1468の内容が、それらメモリアクセス1420命令テンプレートのうち、図14Aの命令テンプレート1425/1430、および、図14Bの命令テンプレート1427から選択を行う。他の見方では、クラスフィールド1468の内容が、図14Aおよび図14BのうちそれぞれのクラスAおよびクラスB命令テンプレートから選択を行い、修飾子フィールドの内容が、それらクラスAの命令テンプレートのうち、図14Aの命令テンプレート1405、1420から選択を行い、修飾子フィールドの内容が、それらクラスB命令テンプレートのうち、図14Bの命令テンプレート1405、1420から選択を行う。クラスフィールドの内容がクラスAの命令テンプレートを示す場合、修飾子フィールド1446の内容が、アルファフィールド1452RSフィールド1452AおよびEHフィールド1452Bの解釈を選択する。同様に、修飾子フィールド1446およびクラスフィールド1468の内容が、アルファフィールドがRSフィールド1452A、EHフィールド1452B、または書き込みマスク制御Zフィールド1452Cとして解釈されるかの選択を行う。クラスフィールドおよび修飾子フィールドがクラスAの非メモリアクセス動作を示す場合、オーグメンテーションフィールドのベータフィールドの解釈は、RSフィールドの内容に基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスBの非メモリアクセス動作を示す場合には、ベータフィールドの解釈は、RLフィールドの内容に依存する。クラスフィールドおよび修飾子フィールドがクラスAのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドの解釈は、ベース演算フィールドの内容に基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスBのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドのブロードキャストフィールド1457Bの解釈は、ベース演算フィールドの内容に基づいて変化する。よって、ベース演算フィールド、修飾子フィールド、および、オーグメンテーション演算フィールドの組み合わせにより、さらに幅広いタイプのオーグメンテーション演算を特定することが可能となる。複数の異なる状況において、クラスAおよびクラスBに関し様々な命令テンプレートを用いるのが有益である。クラスAは、性能上の理由によりゼロ化-書き込みマスキング、または、より短いベクトル長さが所望される場合に有用である。例えば、ゼロ化により、人工的にデスティネーションとマージングを行う必要がなくリネームが用いられる場合に偽の依存性を避けることが可能となる。他の例として、ベクトル長さの制御は、ベクトルマスクを用いてより短いベクトルサイズをエミュレートする際に格納-ロード転送に関する課題を緩和する。クラスBは、1浮動小数点の例外を可能としつまり、SAEフィールドの内容がNoを示す、同時に丸めモード制御を用いる場合、2アップコンバージョン、スウィズル、スワップ、および/または、ダウンコンバージョンを用いることが出来る場合、並びに、3グラフィックデータタイプで動作することが所望される場合に有用である。例えば、アップコンバージョン、スウィズル、スワップ、ダウンコンバージョン、およびグラフィックデータタイプは、異なる形式のソースを処理する際に必要となる命令の数を減らす。他の例としては、例外を可能とする性能により、指示される丸めモードでIEEEの規格に完全に準拠することが可能となる。<例示的な特定のベクトルフレンドリーな命令フォーマット>図15A、図15B、および図15Cは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令フォーマットを示すブロック図である。図15A、図15B、および図15Cは、フィールドの場所、サイズ、解釈、および順序、並びに、これらのフィールドのうちいくつかの値を特定するという意味で特定的である、特定のベクトルフレンドリーな命令フォーマット1500を示す。特定のベクトルフレンドリーな命令フォーマット1500を用いて、x86命令の拡張を行ってもよく、よって、フィールのうちいくつかは、既存のx86命令のセット、およびその拡張例えばAVXに用いられるものと同様、または同じである。この形式は、拡張された既存のx86命令のセットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MODR/Mフィールド、SIBフィールド、変位フィールド、および、即値フィールドに対応したままである。図15A、図15B、および図15Cからのフィールドがマッピングされる図14Aおよび図14Bのフィールドが示されている。なお、本願発明の実施形態は、例示を目的とし、汎用のベクトルフレンドリーな命令フォーマット1400の文脈で特定のベクトルフレンドリーな命令フォーマット1500に関して説明するが、本願発明は、特に記される場合を除き、特定のベクトルフレンドリーな命令フォーマット1500に限定されない。例えば、特定のベクトルフレンドリーな命令フォーマット1500は特定のサイズのフィールドを有するものとして示されているが、汎用のベクトルフレンドリーな命令フォーマット1400に関しては様々なフィールドが様々なサイズを有し得る。特定の例として、データ要素幅フィールド1464は特定のベクトルフレンドリーな命令フォーマット1500において1ビットのフィールドとして示されているが、本願発明はそのように限定されないつまり、汎用のベクトルフレンドリーな命令フォーマット1400のデータ要素幅フィールド1464は他のサイズを有し得る。<形式-図15A、図15B、および図15C>汎用のベクトルフレンドリーな命令フォーマット1400は、図15A、図15B、および図15Cで示される順序で以下に列挙するフィールドを含む。EVEXPrefixBytes0-3EVEXPrefix1002-4バイト形式でエンコードされている。形式フィールド1440EVEXByte0,bits[7:0]-第1バイトEVEXByte0は、形式フィールド1440であり、0x62本願発明の一実施形態において、ベクトルフレンドリーな命令フォーマットを区別するのに用いられる一意の値を含む。第2~4バイトEVEXBytes1-3は特定の機能を提供する複数のビットフィールドを含む。REXフィールド1505EVEXByte1,bits[7-5]-EVEX.RbitfieldEVEXByte1,bit[7]-R,EVEX.XbitfieldEVEXbyte1,bit[6]-X、および1457BEXbyte1,bit[5]-Bからなる。EVEX.R,EVEX.XおよびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同様の機能を提供し、1の補数形式を用いてエンコードされる。つまり、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。当分野で公知のように命令の他のフィールドは、レジスタインデックスの下位3ビットrrr、xxx、およびbbbをエンコードするので、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより、Rrrr、Xxxx、およびBbbbが形成され得る。REXフィールド1510-このフィールドは、REXフィールド1510の最初の部分であり、拡張された32レジスタセットの上位16および下位16のうちいずれかをエンコードするのに用いられるEVEX.RビットフィールドEVEXByte1,bit[4]-Rである。本願発明の一実施形態において、以下に示す他のビットと共にこのビットは、リアルオペコードバイトが62であるBOUND命令と周知のx8632ビットモードで区別すべくビット反転形式で格納されるが、MODフィールドの11の値をMODR/Mフィールド以下に説明するで受け入れない。代替的な実施形態においては、このビット、および以下に示された他のビットは反転形式で格納されない。1の値を用いて下位16のレジスタをエンコードする。言い換えると、EVEX.R、EVEX.R、および他のフィールドからの他のRRRを組み合わせて、RRrrrが形成される。オペコードマップフィールド1015EVEXbyte1,bits[3:0]-mmmm-この内容は、示唆された先頭のオペコードバイト0F、0F38、または、0F3をエンコードする。データ要素幅フィールド1464EVEXbyte2,bit[7]-W-EVEX.Wと表記される。EVEX.Wは、データタイプの粒度サイズを定義するのに用いられる32ビットのデータ要素、または64ビットのデータ要素。EVEX.vvvv1520EVEXByte2,bits[6:3]-vvvv-EVEX.vvvvの役割には、以下のものが含まれ得る。1EVEX.vvvvは、反転された1の補数形式で特定される第1ソースレジスタオペランドをエンコードし、2以上のソースオペランドの命令に有効である、2EVEX.vvvvは、特定のベクトルシフトに関し、1の補数形式で特定されるデスティネーションレジスタオペランドをエンコードする、3EVEX.vvvvは、何れのオペランドもエンコードせず、当該フィールドは残しておかれ、1111bを含む。よって、EVEX.vvvvフィールド1520は、反転された1の補数形式で格納される第1ソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドが、指定子のサイズを32レジスタに拡張するのに用いられる。EVEX.U1468クラスフィールドEVEXbyte2,bit[2]-U-EVEX.U=0の場合、クラスA、またはEVEX.U0を示し、EVEX.U=1の場合、クラスB、またはEVEX.U1を示す。プレフィックスエンコードフィールド1525EVEXbyte2,bits[1:0]-pp-ベース演算フィールドに追加のビットを提供する。EVEXプレフィックス形式のレガシーSSE命令のサポートを提供するのに加え、このフィールドは、SIMDプレフィックスをコンパクト化するのに有用であるSIMDプレフィックスを表現するのに1バイトを必要とせず、EVEXPrefixは2ビットのみ必要とする。一実施形態において、レガシー形式、およびEVEXプレフィックス形式の両方のSIMDプレフィックス66H、F2H、F3Hを用いるレガシーSSE命令をサポートするべく、これらのレガシーSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドにエンコードされ、実行時には、デコーダのPLAに提供される前に、レガシーSIMDプレフィックスに拡張されるつまり、PLAは修正を加えることなくこれらのレガシー命令のレガシー形式およびEVEX形式を実行することが出来る。より新しい命令はEVEXプレフィックスエンコードフィールドの内容を直接的にオペコード拡張として用いることが出来るが、特定の実施形態においては、一貫性を保つべく同様のやり方で拡張が行われるが、これらのレガシーSIMDプレフィックスによる異なる意味の特定を可能とする。代替的な実施形態において、2ビットのSIMDプレフィックスエンコードをサポートするようPLAを再設計し、よって、拡張が必要とされない。アルファフィールド1452EVEXbyte3,bit[7]-EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.writemaskcontrolおよびEVEX.Nとしても知られる。αを用いても示される-上述したように、このフィールドは内容特有のものである。追加の説明は本明細書において以下に示す。ベータフィールド1454EVEXbyte3,bits[6:4]-SSS。EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββを用いても示される-上述したように、このフィールドは内容特有のものである。追加の説明は本明細書において以下に示す。REXフィールド1510-このフィールドはREXフィールドの残りであり、拡張された32レジスタセットの上位16および下位16のうちいずれかをエンコードするのに用いられ得るEVEX.VビットフィールドEVEXByte3,bit[3]-Vである。このビットはビット反転形式で格納される。下位16のレジスタをエンコードするのに1の値が用いられる。言い換えると、EVEX.VとEVEX.vvvvとを組み合わせてVVVVVが形成される。書き込みマスクフィールド1470EVEXbyte3,bits[2:0]-kkk-この内容は、上述したように書き込みマスクレジスタのレジスタのインデックスを特定する。本願発明の一実施形態において、特定値EVEX.kkk=000は特定の命令に対し書き込みマスクが用いられないことを示唆する特別な挙動を示すこのことは、全ての1にハードワイヤされた、またはマスキングハードウェアをバイパスするハードウェアにハードワイヤされた書き込みマスクを用いることを含む様々なやり方で実装することが出来る。リアルオペコードフィールド1030Byte4このフィールドは、オペコードバイトとしても知られる。オペコードの一部はこのフィールドで特定される。MODR/Mフィールド1040Byte5修飾子フィールド1446MODR/M.MOD,bits[7-6]-MODフィールド1542-上述したように、MODフィールド1542の内容は、メモリアクセス動作と非メモリアクセス動作とを区別する。このフィールドは本明細書において以下にさらに説明する。MODR/M.regフィールド1044,bits[5-3]-ModR/M.regフィールドの役割は、2つの状況に要約することが出来る。ModR/M.regが、デスティネーションレジスタオペランド、およびソースレジスタオペランドのうちいずれかをエンコードする。または、ModR/M.regが、オペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられない。MODR/M.r/mフィールド1046,bits[2-0]-ModR/M.r/mフィールドの役割には以下のものが含まれ得る。ModR/M.r/mが、メモリアドレスを参照する命令オペランドをエンコードする。または、ModR/M.r/mが、デスティネーションレジスタオペランド、およびソースレジスタオペランドのいずれかをエンコードする。スケール、インデックス、ベースSIBバイトByte6スケールフィールド1460SIB.SS,bits[7-6]-上述したように、スケールフィールド1460の内容は、メモリアドレスの生成に用いられる。このフィールドは本明細書において以下にさらに説明する。SIB.xxx1554bits[5-3]、および、SIB.bbb1056bits[2-0]-これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して上記にて参照した。変位バイトByte7、または、Bytes7-10変位フィールド1462ABytes7-10-MODフィールド1542が10を含む場合、バイト7-10は変位フィールド1462Aであり、レガシー32ビットの変位disp32と同じく動作し、バイト粒度で動作する。変位係数フィールド1462BByte7-MODフィールド1542が01を含む場合、バイト7は変位係数フィールド1462Bである。このフィールドの場所は、バイト粒度で動作するレガシーx86命令セットの8ビット変位disp8の場所と同じである。disp8は符号が拡張されているので、-128~127バイトのオフセットのみに対応出来る。64バイトのキャッシュに関しては、disp8は、-128、-64、0、および64の4つの実際に有用な値にのみ設定され得る8ビットを用いる。さらに大きな範囲が必要とされることが多いので、disp32が用いられる。しかし、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド1462Bはdisp8の再解釈である。変位係数フィールド1462Bを用いる場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズNを乗算して決定される。このタイプの変位は、disp8Nと示される。これにより、平均の命令長さが短くなる変位に関して1つのバイトがより大きな範囲に対して用いられる。そのような圧縮された変位は、有効な変位はメモリアクセスの粒度の倍数であり、よって、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという仮定に基づいている。言い換えると、変位係数フィールド1462Bはレガシーx86命令セットの8ビット変位に置き換わる。よって、変位係数フィールド1462Bは、x86命令セットの8ビット変位と同じやり方でエンコードされつまり、ModRM/SIBのエンコードルールには変更がない、disp8がdisp8Nにオーバーロードされるoverloaded点だけが異なる。言い換えると、エンコードルールまたはエンコード長さには変化がないが、バイトごとのアドレスオフセットを得るには、メモリオペランドのサイズで変位をスケーリングする必要があるハードウェアによる変位値の解釈にのみ変化がある。<即値>即値フィールド1472は上述したように動作する。<例示的なレジスタアーキテクチャ-図16>図16は、本願発明の一実施形態に係るレジスタアーキテクチャ1600のブロック図である。レジスタアーキテクチャのレジスタファイルおよびレジスタを以下に列挙する。<ベクトルレジスタファイル1610>示される実施形態において、1112ビットの幅を有する32個のベクトルレジスタがある。これらのレジスタをzmm0~zmm31と呼ぶ。最初の16個のレジスタの下位956ビットは、レジスタymm0~16にオーバーレイされてoverlaidいる。最初の16zmmレジスタの下位128ビットymmレジスタの下位128ビットは、レジスタxmm0~15にオーバーレイされている。特定のベクトルフレンドリーな命令フォーマット1500は以下の表に示すようにこれらオーバーレイされたレジスタファイルに対して動作する。言い換えると、ベクトル長さフィールド1459Bは、最大長さおよび1以上の他のより短い長さのうちから選択を行う。ここでそのようなより短い長さのそれぞれは先行する長さの半分である。ベクトル長さフィールド1459Bを有さない命令テンプレートは、最大ベクトル長さで動作する。さらに、一実施形態において、特定のベクトルフレンドリーな命令フォーマット1500のクラスB命令テンプレートは、パックされた、またはスカラの単/倍精度浮動小数点データ、およびパックされた、またはスカラの整数データに対し動作する。スカラ演算は、zmm/ymm/xmmレジスタの下位のデータ要素の位置に対して行われる演算である。上位のデータ要素の位置は命令の前の位置と同じままである、または実施形態によってはゼロにされる。書き込みマスクレジスタ1515-示される実施形態において、それぞれサイズが64ビットである8個の書き込みマスクレジスタk0~k7がある。上述したように、本願発明の一実施形態において、ベクトルマスクレジスタk0は書き込みマスクとして用いることが出来ない。エンコードの際には、このフィールドは通常k0が書き込みマスクに用いられることを示し、0xFFFFのハードワイヤされた書き込みマスクを選択し、効果的に当該命令の書き込みマスクを無効化する。マルチメディア拡張制御ステータスレジスタMXCSR1620-示される実施形態において、この32ビットレジスタは浮動小数点演算に用いられるステータスおよび制御ビットを提供する。汎用レジスタ1625-示される実施形態において、メモリオペランドに対応する既存のx86アドレシングモードと用いられる16個の64ビット汎用レジスタがある。これらのレジスタはRAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、および、R8~R15で示される。拡張フラグEFLAGSレジスタ1630-示される実施形態において、この32ビットのレジスタは、多くの命令の結果を記録するのに用いられる。浮動小数点制御ワードFCWレジスタ1635、および、浮動小数点ステータスワードFSWレジスタ1640-示される実施形態において、これらのレジスタは、FCWの場合に丸めモード、例外マスク、およびフラグを設定し、FSWの場合に例外の記録をつけるべく、x87命令セット拡張によって用いられる。MMXパックド整数フラットレジスタファイル1650がエイリアスされるスカラ浮動小数点スタックレジスタファイルx87スタック1645-示される実施形態において、x87スタックは、x87命令セット拡張を用いる32/64/80ビット浮動小数点データに対するスカラ浮動小数点演算を実行するのに用いられる8個の要素のスタックであり、MMXレジスタは、64ビットのパックされた整数データに対する演算を実行し、MMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のオペランドを保持するのに用いられる。セグメントレジスタ1655-示される実施形態において、セグメント化されたアドレス生成に用いられるデータを格納するのに用いられる6個の16ビットレジスタがある。RIPレジスタ1665-示される実施形態において、この64ビットレジスタは、命令ポインタを格納する。本願発明の代替的な実施形態においては、より広い、またはより狭いレジスタが用いられる。加えて、本願発明の代替的な実施形態においては、より多くの、より少ない、または異なるレジスタファイルおよびレジスタが用いられる。<例示的なインオーダープロセッサアーキテクチャ-図17Aおよび図17B>図17Aおよび図17Bは、例示的なインオーダープロセッサアーキテクチャのブロック図を示す。これらの例示的な実施形態は、ワイドベクトルプロセッサVPUで補強されたインオーダーCPUコアの複数のインスタンシエイションに基づいて設計されている。コアはe19tアプリケーションに応じて、何らかの所定の関数ロジック、メモリI/Oインタフェース、および、他の必要なI/Oロジックと高帯域幅インターコネクトネットワークを介して通信を行う。例えば、スタンドアローンGPUとしての本実施形態の実施は、典型的にはPCIeバスを含む。図17Aは、本願発明の実施形態に係る、シングルCPUコア、当該シングルCPUコアのオンダイインターコネクトネットワーク1702との接続、およびレベル2L2キャッシュ1704のローカルサブセットを示すブロック図である。命令デコーダ1700は、特定のベクトル命令フォーマット1000を含む拡張を有するx86命令セットをサポートする。本願発明の一実施形態においては、設計を単純にするべくスカラユニット1708およびベクトルユニット1710は別個のレジスタセットを用いそれぞれ、スカラレジスタ1712、およびベクトルレジスタ1714、これらの間で転送されるデータはメモリへ書き込まれ、レベル1L1キャッシュ1706から読み出されるが、本願発明の代替的な実施形態においては、異なるアプローチが用いられる例えば、1つのレジスタセットが用いられる、または、書き込みおよび読み出しが行われることなく2つのレジスタファイル間でデータの転送を可能とする通信パスが含まれる。L1キャッシュ1706は、メモリのスカラユニットおよびベクトルユニットへのキャッシュのための低いレイテンシアクセスを可能とする。ベクトルフレンドリーな命令フォーマットのロードオペランド命令と併せて、このことは、拡張されたレジスタファイルと幾分同じようにL1キャッシュ1706を扱えることを意味する。このことにより、多くのアルゴリズム、特にエビクション示唆hintフィールド1452Bのアルゴリズムに関して性能を向上させられる。L2キャッシュ1704のローカルサブセットは、CPUコア毎に1つの、別個のローカルサブセットへ分割されるグローバルなL2キャッシュの一部である。各CPUは、L2キャッシュ1704の自身のローカルサブセットへの直接的なアクセスパスを有する。CPUコアによって読み出されたデータは、そのL2キャッシュサブセット1704に格納され、それぞれ自身のローカルL2キャッシュサブセットにアクセスする他のCPUと並行して迅速にアクセスすることが出来る。CPUコアによって書き込まれたデータは、自身のL2キャッシュサブセット1704に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークによって、共有されるデータの一貫性が確保される。図17Bは、本願発明の実施形態に係る、図17AのCPUコアの一部を示す分解図である。図17BはL1キャッシュ1704のL1データキャッシュ1706A部分、並びに、ベクトルユニット1710およびベクトルレジスタ1714の詳細を示す。詳細には、ベクトルユニット1710は整数、単精度浮動小数点、および倍精度浮動小数点命令を実行する16ワイドベクトル処理ユニットVPU16ワイドALU1728を参照である。VPUは、スウィズルユニット1720のレジスタインプットのスウィズリング、数値変換ユニット1722A、1722Bの数値変換、およびメモリインプットの複製ユニット1724の複製をサポートする。書き込みマスクレジスタ1726により、結果として生じるベクトル書き込みの予測が可能となる。レジスタデータは、例えば行列の乗算をサポートするなど、様々なやり方でスウィズリング出来る。メモリからのデータは、複数のVPUレーンに対して複製出来る。このことはグラフィックおよび非グラフィック両方の並列データ処理に共通の演算であり、キャッシュの効率性をはるかに向上させる。リングネットワークは、CPUコア、L2キャッシュ、および他のロジックグロックなどのエージェントが互いにチップ内で通信を行えるよう双方向性である。各リングデータパスは、一方向あたり1112ビット幅である。<例示的なアウトオブオーダーアーキテクチャ-図18>図18は、本願発明の実施形態に係る例示的なアウトオブオーダーアーキテクチャを示すブロック図である。詳細には、図18は、ベクトルフレンドリーな命令フォーマットおよびその実行に対応するよう修正された周知の例示的なアウトオブオーダーアーキテクチャを示す。図18において、矢印は2以上のユニットの結合を示し、矢印の方向はそれらユニット間のデータフローの方向を示す。図18は、実行エンジンユニット1810およびメモリユニット1815に結合されたフロントエンドユニット1805を含む。実行エンジンユニット1810はさらに、メモリユニット1815に結合されている。フロントエンドユニット1805は、レベル2L2分岐予測ユニット1822に結合されたレベル1L1分岐予測ユニット1820を含む。L1およびL2分岐予測ユニット1820、1822は、L1命令キャッシュユニット1824に結合されている。L1命令キャッシュユニット1824は、命令トランスレーションルックアサイドバッファTLB1826に結合され、命令トランスレーションルックアサイドバッファTLB1826はさらに、命令フェッチ/プリデコードユニット1828に結合されている。命令フェッチ/プリデコードユニット1828は、命令キューユニット1830に結合され、命令キューユニット1830はさらにデコードユニット1832に結合されている。デコードユニット1832は、1個の複雑なデコーダユニット1834、および3個の単純なデコーダユニット1836、1838、1840を備える。デコードユニット1832は、マイクロコードROMユニット1842を含む。デコードユニット1832は、デコード段階について述べたセクションで上述したように動作してもよい。L1命令キャッシュユニット1824はさらに、メモリユニット1815内のL2キャッシュユニット1848に結合されている。命令TLBユニット1826はさらに、メモリユニット1815内の第2レベルTLBユニット1846に結合されている。デコードユニット1832、マイクロコードROMユニット1842、およびループストリーム検出ユニット1844はそれぞれ、実行エンジンユニット1810内のリネーム/アロケータユニット1856に結合されている。実行エンジンユニット1810は、リネーム/アロケータユニット1856を含み、リネーム/アロケータユニット1856は、リタイヤユニット1874および統合スケジューラユニット1858に結合されている。リタイヤユニット1874はさらに、実行ユニット1860に結合され、リオーダバッファユニット1878を含む。統合スケジューラユニット1858はさらに、物理レジスタファイルユニット1876に結合され、物理レジスタファイルユニット1876は実行ユニット1860に結合されている。物理レジスタファイルユニット1876は、ベクトルレジスタユニット1877A、書き込みマスクレジスタユニット1877B、および、スカラレジスタユニット1877Cを備える。これらのレジスタユニットは、ベクトルレジスタ1610、ベクトルマスクレジスタ1515、および、汎用レジスタ1625を提供してもよく、物理レジスタファイルユニット1876は、示されていない追加のレジスタファイルを含んでもよい例えば、MMXパックド整数フラットレジスタファイル1650に対しエイリアスされたスカラ浮動小数点スタックレジスタファイル1645。実行ユニット1860は3個のミックスされたスカラおよびベクトルユニット1862、1864、1872、ロードユニット1866、格納アドレスユニット1868、および、格納データユニット1870を含む。ロードユニット1866、格納アドレスユニット1868、および、格納データユニット1870はそれぞれさらに、メモリユニット1815内のデータTLBユニット1852に結合されている。メモリユニット1815は、第2レベルTLBユニット1846を含み、第2レベルTLBユニット1846は、データTLBユニット1852に結合されている。データTLBユニット1852はL1データキャッシュユニット1854に結合されている。L1データキャッシュユニット1854はさらに、L2キャッシュユニット1848に結合されている。いくつかの実施形態において、L2キャッシュユニット1848はさらに、メモリユニット1815内、および/または外のL3およびさらに高いレベルのキャッシュユニット1850に結合されている。例として、例示的なアウトオブオーダーアーキテクチャは、次のように処理パイプラインを実施する。1命令フェッチ/プリデコードユニット1828がフェッチおよび長さデコード段階を実行する、2デコードユニット1832がデコード段階を実行する、3リネーム/アロケータユニット1856がアロケーションおよびリネーム段階を実行する、4統合スケジューラユニット1858がスケジューリング段階を実行する、5物理レジスタファイルユニット1876、リオーダバッファユニット1878、およびメモリユニット1815がレジスタ読み出し/メモリ読み出し段階を実行し、実行ユニット1860が実行/データ変換段階を実行する、6メモリユニット1815およびリオーダバッファユニット1878が、書き戻し/メモリ書き込み段階を実行する、7リタイヤユニット1874がROB読み出し段階を実行する、8様々なユニットが例外取り扱い段階14164に関わってもよい、9リタイヤユニット1874および物理レジスタファイルユニット1876がコミット段階を実行する。<例示的なシングルコアおよびマルチコアプロセッサ>図23は、本願発明の実施形態に係る、集積メモリコントローラおよび集積グラフィックを備えたシングルコアプロセッサおよびマルチコアプロセッサ2300を示すブロック図である。図23において、実線の四角はシングルコア2302A、システムエージェント2310、および1以上のバスコントローラユニット2316からなるセットを含むプロセッサ2300を示し、破線の四角は、複数のコア2302A~N、システムエージェントユニット2310内の1以上の集積メモリコントローラユニット2314からなるセット、および集積グラフィックロジック2308を含む代替的なプロセッサ2300を任意的な追加として示す。メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット2306からなるセット、複数の集積メモリコントローラユニット2314からなるセットに結合された外部メモリ図示せずを含む。複数の共有キャッシュユニット2306からなるセットは、レベル2L2、レベル3L3、レベル4L4、または他のレベルのキャッシュなど1以上の中間レベルのキャッシュ、最後のレベルのキャッシュLLC、および/またはこれらの組み合わせを含んでよい。一実施形態においては、リングベースのインターコネクトユニット2312が集積グラフィックロジック2308、複数の共有キャッシュユニット2306からなるセット、および、システムエージェントユニット2310を相互接続するが、代替的な実施形態においては、そのようなユニットを相互接続する周知の技術をいくつか用いてもよい。いくつかの実施形態において、1以上のコア2302A~Nは、マルチスレッドに対応可能である。システムエージェント2310は、コア2302A~Nの調整を行い動作させるコンポーネントを含む。システムエージェントユニット2310は、例えば、電力制御ユニットPCU、およびディスプレイユニットを含む。PCUは、コア2302A~Nおよび集積グラフィックロジック2308の電力状況を制御するのに必要なロジックおよびコンポイーネントであるか、それらを含んでもよい。ディスプレイユニットが1以上の外部接続されたディスプレイを駆動する。コア2302A~Nは、アーキテクチャ、および/または命令セットに関して、同質、または異質のものであってもよい。例えば、コア2302A~Nのうちいくつかはインオーダー例えば、図17Aおよび図17Bで示すようなであり、他のコアは、アウトオブオーダー例えば、図23に示すようなであってもよい。他の例として、コア2302A~Nのうち2以上は、同じ命令セットを実行可能であり、他のコアは、その命令セットのサブセットのみ、または異なる命令セットを実行可能である。少なくとも1つのコアが、本明細書で説明するベクトルフレンドリーな命令フォーマットを実行可能である。プロセッサは、米国カリフォルニア州サンタクララのIntelCorporationにより販売されるCore登録商標i3、i5、i7、2Duo、およびQuad、Xeon登録商標、またはItanium登録商標プロセッサなどの汎用プロセッサであってよい。代替的に、プロセッサは他の企業が販売するものであってもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、埋め込み型プロセッサなどの特定用途プロセッサであってもよい。プロセッサは1以上のチップ上で実装されてもよい。プロセッサ2300は、BiCMOS、CMOS、またはNMOSなどの処理技術をいくつか用い、1以上の基板の一部である、および/または、それら基板上で実装されてもよい。<例示的なコンピュータシステムおよびプロセッサ-図19~22>図19~22は、プロセッサ2300を含めるのに適した例示的なシステムを示す。図17Aおよび図17Bは、1以上のコア2302を含みうる例示的なシステムオンチップSoCを示す。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサDSP、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関する当分野で公知の他のシステム設計および構成も適している。一般的に、本明細書で開示されるプロセッサ、および/または他の実行ロジックを組み込むことが可能な非常に幅広い種類のシステムまたは電子デバイスが適している。図19は、本願発明の一実施形態に係るシステム1900を示すブロック図である。システム1900は、1以上のプロセッサ1910、1915を含み、1以上のプロセッサ1910、1915はグラフィックメモリコントローラハブGMCH1920に結合されている。追加のプロセッサ1915は任意で用いられるので、図19において破線で示されている。各プロセッサ1910、1915はプロセッサ2300の何らかのバージョンであってよい。しかし、集積グラフィックロジックおよび集積メモリ制御ユニットがプロセッサ1910、1915内に存在するということは考えられにくい。図19は、GMCH1920が、例えばダイナミックランダムアクセスメモリDRAMであってよいメモリ1940に結合されていてよいことを示す。DRAMは、少なくとも一実施形態において、非揮発性キャッシュに関連付けられている。GMCH1920は、チップセットである、またはチップセット一部である。GMCH1920はプロセッサ1910、1915と通信を行い、プロセッサ1910、1915とメモリ1940との間の相互作用を制御してもよい。またGMCH1920は、プロセッサ1910、1915と、システム1900の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態において、GMCH1920は、フロントサイドバスFSB1995などのマルチドロップバスを介してプロセッサ1910、1915と通信を行う。さらに、GMCH1920は、ディスプレイ1945フラットパネルディスプレイなどに結合されている。GMCH1920は、集積グラフィックアクセラレータを含んでもよい。GMCH1920はさらに、様々な周辺デバイスをシステム1900に結合するのに用いられ得る、入力/出力I/OコントローラハブICH1950に結合されている。図19の実施形態においては、他の周辺デバイス1970と併せて、ICH1950に結合されている独立したグラフィックデバイスであってよい外部グラフィックデバイス1960が例として示されている。代替的に、追加的な、または異なるプロセッサもシステム1900に存在してもよい。例えば、追加のプロセッサ1915には、プロセッサ1910と同じ追加のプロセッサ、プロセッサ1910と異質の、または対称的な追加のプロセッサ、アクセラレータ例えば、グラフィックアクセラレータ、またはデジタル信号処理DSPユニットなど、フィールドプログラマブルゲートアレイ、または他の何らかのプロセッサが含まれてよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などの面で、物理リソース1910、1915毎に様々な利点がある。これらの利点の差は、処理要素1910、1915間の対称性または異質性を利用し有効に活用される。少なくとも一実施形態において、様々な処理要素1910、1915が同じダイパッケージに存在してもよい。図20は、本願発明の実施形態に係る第2システム2000を示すブロック図である。図20に示すようにマルチプロセッサシステム2000は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト2050で結合された第1プロセッサ2070および第2プロセッサ2080を含む。図20に示すように各プロセッサ2070、2080はプロセッサ2300の何らかのバージョンであってよい。代替的に、1以上のプロセッサ2070、2080は、アクセラレータまたはフィールドプログラマブルゲートアレイなど、プロセッサ以外の要素であってよい。2つのプロセッサ2070、2080のみが示されているが、本願発明の態様はこのことに限定されない。他の実施形態において、1以上の追加的な処理要素が任意のプロセッサに存在してもよい。プロセッサ2070はさらに、集積メモリコントローラハブIMC2072、およびポイントツーポイントP-P2076、2078を含んでもよい。同様に、第2プロセッサ2080は、IMC2082およびP-Pインタフェース2086、2088を含んでもよい。プロセッサ2070、2080は、PtPインタフェース回路2078、2088を用いてポイントツーポイントPtPインタフェース2050を介してデータを交換してもよい。図20に示すようにIMC2072、2082は各プロセッサを、対応するメモリ、つまり各プロセッサにローカルに取り付けられた主メモリの一部であってもよいメモリ2042およびメモリ2044に結合する。プロセッサ2070、2080はそれぞれ、ポイントツーポイントインタフェース回路2076、2094、2086、2098を用いて個々のP-Pインタフェース2052、2054を介しチップセット2090とデータを交換してもよい。またチップセット2090は、高性能グラフィックインタフェース2039を介して高性能グラフィック回路2038とデータを交換してもよい。プロセッサが低電力モードにされた場合、いずれか、または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されるように、共有キャッシュ図示せずは、両プロセッサ外でいずれかのプロセッサに含まれ、かつ、P-Pインターコネクトを介しプロセッサと接続されていてもよい。チップセット2090は、インタフェース2096を介して第1バス2016に結合されていてもよい。一実施形態において、第1バス2016は、PeripheralComponentInterconnectPCIバス、或いは、PCIExpressバスまたは他の第3世代I/Oインターコネクトバスなどのバスであってもよい。ただし、本願発明の態様はこのことに限定されない。図20に示すように、第1バス2016を第2バス2020へ結合するバスブリッジ2018と併せて、様々なI/Oデバイス2014が第1バス2016に結合されていてもよい。一実施形態において、第2バス2020はlowpincountLPCバスであってもよい。一実施形態において、キーボード/マウス2022、通信デバイス2026、並びに、ディスクドライブまたは、コード2030を含んでよい他の大容量記憶装置などのデータ格納ユニット2028など様々なデバイスが第2バス2020に結合されていてもよい。さらに、オーディオI/O2024が第2バス2020に結合されていてもよい。なお他のアーキテクチャを用いることも可能である。例えば、図20のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してもよい。図21は、本願発明の実施形態に係る第3システム2100を示すブロック図である。図20および図21において同様の要素は、同様の参照符号が付されており、図20の特定の態様は、図21の他の態様を曖昧にすることを避けるべく図21において省略されている。図21は、処理要素2070、2080がそれぞれ集積メモリ-I/O制御ロジックCL2072、2082を含んでよいことを示す。少なくとも一実施形態において、CL2072、2082は図19および図20に関連して上述したようなメモリコントローラハブロジックIMCを含んでもよい。加えて、CL2072、2082はI/O制御ロジックも含んでよい。図21は、メモリ2042、2044のみがCL2072、2082に結合されているのではなく、I/Oデバイス2114も制御ロジック2072、2082に結合されていることを示す。レガシーI/Oデバイス2115がチップセット2090に結合されている。図22は、本願発明の実施形態に係るSoC2200のブロック図を示す。同様の要素には同様の参照符号が付されている。また破線の四角はより高度なSoCの、任意で用いられる特徴を示す。図22において、インターコネクトユニット2202は、1以上のコア2302A~Nからなるセットおよび共有キャッシュユニット2306を含むアプリケーションプロセッサ2210と、システムエージェントユニット2310と、バスコントローラユニット2321と、集積メモリコントローラユニット2314と、集積グラフィックロジック2308、スチールカメラ、および/またはビデオカメラ機能を提供するイメージプロセッサ2224、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ2226、および、ビデオエンコード/デコードアクセラレーションを提供するビデオプロセッサ2228を含みうる1以上のメディアプロセッサ2220からなるセットと、スタティックランダムアクセスメモリSRAMユニット2230と、ダイレクトメモリメモリアクセスDMAユニット2232と、1以上の外部ディスプレイに結合されるディスプレイユニット2240とに結合されている。本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにより実施されてもよい。本願発明の実施形態は、少なくとも1つのプロセッサ、記憶システム揮発性、および非揮発性のメモリ、および/または記憶要素を含む、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。プログラムコードは、本明細書で開示される機能を実行し、出力情報を生成する入力データに適用されてもよい。出力情報は、公知の方式で、1以上の出力デバイスに適用されてもよい。この適用の目的において、処理システムは、例えば、デジタル信号プロセッサDSP、マイクロコントローラ、特定用途集積回路ASIC、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。プログラムコードは、処理システムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語または機械言語で実施されてもよい。事実、本明細書で開示されるメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってもよい。少なくとも1つの実施形態の1以上の態様は、機械によって読み出されると当該機械に本明細書で開示される技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された表現命令によって実施されてもよい。IPコアとし知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードされるべく様々な顧客または製造施設に提供されてもよい。そのような機械可読媒体には、これらに限定されるわけではないが、機械またはデバイスによって製造または形成される、ハードディスク、フロッピー登録商標ディスク、光学式ディスクコンパクトディスク読み取り専用メモリCD-ROM、コンパクトディスクリライタブルCD-RW、および光磁気ディスクなどを含む他の何らかのタイプのディスク、リードオンリーメモリROMなどの半導体デバイス、ダイナミックランダムアクセスメモリDRAMなどのランダムアクセスメモリRAM、スタティックランダムアクセスメモリSRAM、消去可能プログラム可能リードオンリーメモリEPROM、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリEEPROM、磁気または光学式カード、または、電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む物品の非一時的な有形構造を含みうる。したがって、本願発明の実施形態は、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステム特徴を定めるベクトルフレンドリーな命令フォーマットの命令を保持する、またはHardwareDescriptionLanguageHDLなどの設計データを保持する非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。場合によっては、命令コンバータを用いて、ソース命令セットからターゲット命令セットへ命令が変換される。例えば、命令コンバータは、命令をコアによって処理される1以上の他の命令にトランスレートするスタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて、モーフィングする、エミュレートする、または変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実施されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上で一部がプロセッサ外であってもよい。図24は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実施されてもよい。図24は、少なくとも1つのx86命令セットコアを備えるプロセッサ2416によりネイティブに実行され得るx86バイナリコード2406を生成するべくx86コンパイラ2404を用いてコンパイルされている高水準言語2402のプログラムを示すコンパイルされた命令のうちいくつかがベクトルフレンドリーな命令フォーマットであるものと想定されている。少なくとも1つのx86命令セットコアを備えるプロセッサ2416は、1Intelx86命令セットコアの命令の実質的な部分、または、2少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ結果を得るべく、少なくとも1つのx86命令セットコアを備えるIntelプロセッサで実行されることを目的とするアプリケーションのオブジェクトコードバージョンまたは他のソフトウェアに適合して実行する、または処理することにより、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ機能を実行出来るプロセッサを表す。x86コンパイラ2404は、少なくとも1つのx86命令セットコアを備えるプロセッサ2416で追加のリンケージ処理あり、またはなしで実行され得るx86バイナリコード2406例えばオブジェクトコードを生成するべく動作可能なコンパイラを表す。同様に、図24は、少なくとも1つのx86命令セットコアを備えないプロセッサ2414例えば、米国カリフォルニア州サニーベールのMIPSTechnologiesのMIPS命令セットを実行するコアを備えるプロセッサ、および/または米国カリフォルニア州サニーベールのARMHoldingsのARM命令セットを実行するコアを備えるプロセッサなどによってネイティブに実行され得る代替的な命令セットバイナリコード2410を生成するべく、代替的な命令セットコンパイラ2408を用いてコンパイルされ得る高水準言語2402のプログラムを示す。命令コンバータ2412を用いて、x86命令セットコアを備えないプロセッサ2414によってネイティブに実行され得るコードへx86バイナリコード2406を変換する。この変換されたコードが、代替的な命令セットバイナリコード2410と同じであることは考えられにくい。なぜなら、このことに対応可能な命令コンバータは作成しにくいからである。しかし、変換されたコードは、一般的な動作を実行し、代替的な命令セットからの命令によって構成されているであろう。よって、命令コンバータ2412は、エミュレーション、シミュレーション、または他の何らかの処理により、プロセッサ、或いは、x86命令セットプロセッサまたはコアを有さない他の電子デバイスがx86バイナリコード2406を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。本明細書で開示されるベクトルフレンドリーな命令フォーマットの命令の特定の演算は、ハードウェアコンポーネントで実行されてもよく、当該命令をプログラムされた回路または他のハードウェアコンポーネントによるそれらの演算の実行を引き起こす、または少なくともそのような結果をもたらすのに用いられる機械可読命令として実施され得る。回路には、ほんの数例を上げると、汎用プロセッサ、特定用途プロセッサ、またはロジック回路が含まれる。また演算は、場合によっては、ハードウェアとソフトウェアとの組み合わせによって実施されてもよい。実行ロジック、および/またはプロセッサは、命令によって特定される結果オペランドを格納するよう指示する機械命令、または当該機械命令から抽出された1以上の制御信号に応答する特定的な、または特定の回路または他のロジックを含んでもよい。例えば、本明細書で開示される命令の実施形態は、図14A~図22の1以上のシステムで実行されてもよく、ベクトルフレンドリーな命令フォーマットの命令の実施形態は、システムによって実行されるプログラムコードに格納されてもよい。加えて、これら図面の処理要素は、本明細書で詳述されたパイプライン、および/またはアーキテクチャ例えば、インオーダーアーキテクチャ、およびアウトオブオーダーアーキテクチャのうち1つを用いてもよい。例えば、インオーダーアーキテクチャのデコードユニットは、命令をデコードし、デコードされた命令をベクトルユニットまたはスカラユニットに渡すなどしてもよい。上記の説明は、本願発明の好ましい実施形態を示すことを目的として提供された。上記の説明から、成長が早くさらなる進歩の予測が容易ではない当技術分野において特に、本願発明は構造に関して、また詳細部分において、当業者によって本願発明の原理から逸脱することなく、添付の請求項およびそれらの同等物の範囲内で本願発明に修正が加えられ得ることは明らかである。例えば、方法の1以上の動作は組み合わせられ得る、またはさらに分割され得る。<代替的な実施形態>ベクトルフレンドリーな命令フォーマットがネイティブに実行される実施形態を説明してきたが、代替的な実施形態においては、異なる命令セットを実行する例えば、米国カリフォルニア州サニーベールのMIPSTechnologiesのMIPS命令セットを実行するプロセッサ、米国カリフォルニア州サニーベールのARMHoldingsのARM命令セットを実行するプロセッサなどのプロセッサ上で実行されるエミュレーションレイヤーを介してベクトルフレンドリーな命令フォーマットを実行してもよい。また、図中のフロー図は本願発明の特定の実施形態によって実行される動作の特定の順序を示すが、そのような順序は例示であることが理解されるべきである例えば、代替的な実施形態においては、それらの動作を異なる順序で実行する、特定の動作を組み合わせる、または特定の動作を同時に行うなど。以上の説明において、説明を目的とし、本願発明の実施形態をよりよく理解いただけるように様々な特定の詳細を示してきた。しかし当業者であれば、それら特定の詳細のいくつかを用いずとも1以上の他の実施形態が実施可能であることを理解されよう。説明された特定の実施形態は、本願発明を限定するのではなく、本願発明の実施形態を例示するべく示されている。本願発明の態様は上記された特定の例によっては定められず、以下の請求項によってのみ定められる。"