(57)【要約】      （修正有）【課題】命令および論理が、条件付きループのベクトル化を提供する。【解決手段】ベクトル拡張命令は、ｎ個の連続したベクトルエレメントを保持するために、ソースベクトルを特定するパラメータ、条件付きマスクレジスタを特定するパラメータ、および、デスティネーションレジスタを特定するためのデスティネーションパラメータを有し、複数のｎ個の連続したベクトルエレメントのそれぞれは、ｍバイトの同じ可変パーティションサイズを有している。プロセッサ命令に呼応して、データがソースベクトルの連続したベクトルエレメントからコピーされ、特定されたデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、ｎは、実行されるプロセッサ命令に呼応して変化する。【選択図】図１４Ａ
2014130580.tif 000002
【特許請求の範囲】
【請求項１】
条件付きループをベクトル化するコンピュータ実装される方法であって、
ｎ個のカウント値にカウントベクトルのエレメントを設定する段階と、
決定ベクトルを取得する段階と、
前記決定ベクトルに従ってベクトルマスクを生成する段階と、
マスクレジスタに前記ベクトルマスクを格納する段階と、
複数のｎ個の連続したベクトルエレメントを保持するために、ソースベクトルとして前記カウントベクトルを特定するためのソースパラメータと、前記マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつプロセッサ命令を受信する段階と、
前記プロセッサ命令の受信に呼応して、前記ソースベクトルのデータを、特定された前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、特定された前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする段階と
を備え、
前記複数のｎ個の連続したベクトルエレメントのそれぞれは、ｍバイトの同じ可変パーティションサイズを有し、
ｎは、受信される前記プロセッサ命令に応じて変化する、方法。
【請求項２】
前記ソースパラメータは、前記カウントベクトルをソースベクトルレジスタとして特定する、請求項１に記載の方法。
【請求項３】
前記デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、請求項２に記載の方法。
【請求項４】
前記データは、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、前記デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、請求項３に記載の方法。
【請求項５】
前記データは、前記デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項２に記載の方法。
【請求項６】
前記デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、請求項５に記載の方法。
【請求項７】
前記ソースパラメータは、メモリ内に配置されているソースベクトル部分として前記カウントベクトルを特定する、請求項１に記載の方法。
【請求項８】
プロセッサに、
ｎ個のカウント値にカウントベクトルのエレメントを設定する手順と、
決定ベクトルを取得する手順と、
前記決定ベクトルに従ってベクトルマスクを生成する手順と、
マスクレジスタに前記ベクトルマスクを格納する手順と、
複数のｎ個の連続したベクトルエレメントを保持するために、ソースベクトルとして前記カウントベクトルを特定するためのソースパラメータと、前記マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつ単一命令複数データ拡張命令（ＳＩＭＤ拡張命令）の実行に呼応して、
前記ソースベクトルのデータを、特定された前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、特定された前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする手順と
を実行させ、
前記複数のｎ個の連続したベクトルエレメントのそれぞれは、ｍバイトの同じ可変パーティションサイズを有し、
ｎは、実行される前記ＳＩＭＤ拡張命令に応じて変化する、プログラム。
【請求項９】
前記ソースパラメータは、前記カウントベクトルをソースベクトルレジスタとして特定する、請求項８に記載のプログラム。
【請求項１０】
前記デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、請求項９に記載のプログラム。
【請求項１１】
前記データは、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、前記デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、請求項１０に記載のプログラム。
【請求項１２】
前記データは、前記デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項９に記載のプログラム。
【請求項１３】
前記デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、請求項１２に記載のプログラム。
【請求項１４】
前記ソースパラメータは、メモリ内に配置されているソースベクトル部分として前記カウントベクトルを特定する、請求項８に記載のプログラム。
【請求項１５】
実行される前記ＳＩＭＤ拡張命令が、３２ビットの整数を拡張する場合、ｎは、４、８、および１６からなる群から選択された値である、請求項８から１４のいずれか一項に記載のプログラム。
【請求項１６】
実行される前記ＳＩＭＤ拡張命令が、６４ビットの整数を拡張する場合、ｎは、２、４、および８からなる群から選択された値である、請求項８から１４のいずれか一項に記載のプログラム。
【請求項１７】
第１の複数のｎ個のデータフィールドを有するソースベクトルであって、前記ソースベクトルの前記第１の複数のｎ個のデータフィールドのそれぞれは、ｍバイトの同じ可変のパーティションサイズをもつエレメントを格納する、前記ソースベクトルと、
前記第１の複数のｎ個のデータフィールドに対応している第２の複数のデータフィールドを有するデスティネーションベクトルであって、前記デスティネーションベクトルの前記第２の複数のデータフィールドのそれぞれは、ベクトル条件付きマスクのマスク値に対応している、前記デスティネーションベクトルと、
ベクトル拡張オペレーションとデータパーティションサイズとを特定するプロセッサ命令をデコードするデコードステージと、
１以上の実行ユニットと
を備えるプロセッサであって、
前記１以上の実行ユニットは、デコードされた前記プロセッサ命令に呼応して、
前記ソースベクトルのデータを、前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーし、ｎは、受信される前記プロセッサ命令に応じて変化する、プロセッサ。
【請求項１８】
前記ソースベクトルはベクトルレジスタである、請求項１７に記載のプロセッサ。
【請求項１９】
前記デスティネーションベクトルは別のベクトルレジスタである、請求項１８に記載のプロセッサ。
【請求項２０】
デコードされた前記プロセッサ命令に呼応して、前記デスティネーションベクトルのマスキングされているベクトルエレメントがゼロの値に設定される、請求項１９に記載のプロセッサ。
【請求項２１】
前記データは、前記デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項１８に記載のプロセッサ。
【請求項２２】
前記デスティネーションベクトルは、メモリ内に配置されているベクトル部分である、請求項２１に記載のプロセッサ。
【請求項２３】
前記ソースベクトルは、メモリ内に配置されているベクトル部分である、請求項２１に記載のプロセッサ。
【請求項２４】
前記プロセッサ命令が、ベクトル拡張オペレーションと４バイトのダブルワードのデータパーティションサイズとを特定している場合、ｎは、４、８、および１６からなる群から選択された値である、請求項１７から２３のいずれか一項に記載のプロセッサ。
【請求項２５】
前記プロセッサ命令が、ベクトル拡張オペレーションと８バイトのクワッドワードのデータパーティションサイズとを特定している場合、ｎは、２、４、および８からなる群から選択された値である、請求項１７から２３のいずれか一項に記載のプロセッサ。
【請求項２６】
メモリと、
第１のプロセッサコアと第２のプロセッサコアとを有する複数のプロセッサと
を備える処理システムであって、
前記複数のプロセッサのそれぞれは、
第１の複数のｎ個のデータフィールドを有するソースベクトルと、
前記第１の複数のデータフィールドに対応する第２の複数のデータフィールドを有するデスティネーションベクトルと、
ベクトル拡張オペレーションとデータパーティションサイズとを特定するプロセッサ命令をデコードするデコードステージと、
１以上の実行ユニットと
を備え、
前記ソースベクトルの前記第１の複数のｎ個のデータフィールドのそれぞれは、ｍバイトの同じ可変パーティションサイズを有するエレメントを格納し、
前記デスティネーションベクトルの前記第２の複数のデータフィールドのそれぞれは、ベクトル条件付きマスクのマスク値に対応しており、
前記１以上の実行ユニットは、デコードされた前記プロセッサ命令に呼応して、
前記ソースベクトルのデータを、前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーし、
ｎは、受信される前記プロセッサ命令に応じて変化する、処理システム。
【請求項２７】
前記ソースベクトルは、前記メモリ内に配置されているベクトル部分である、請求項２６に記載の処理システム。
【請求項２８】
前記プロセッサ命令が、ベクトル拡張オペレーションと４バイトのダブルワードのデータパーティションサイズとを特定している場合、ｎは、４、８、および１６からなる群から選択された値である、請求項２６または２７に記載の処理システム。
【請求項２９】
前記プロセッサ命令が、ベクトル拡張オペレーションと８バイトのクワッドワードのデータパーティションサイズとを特定している場合、ｎは、２、４、および８からなる群から選択された値である、請求項２６または２７に記載の処理システム。
【請求項３０】
複数のｎ個の連続するベクトルエレメントとｎ個の関連する条件付きマスクエレメントとをそれぞれ保持する対象ベクトルとマスクレジスタとを特定する対象引数とマスク引数、および、ソースベクトルを特定するソース引数を有するＳＩＭＤ拡張命令を備え、
実行可能な前記ＳＩＭＤ拡張命令は、プロセッサに、前記ソースベクトルの連続するベクトルエレメントのデータを、前記対象ベクトルのマスキングされていないベクトルエレメントにコピーして、前記対象ベクトルのマスキングされているベクトルエレメントを予め定められた値に設定する手順を実行させ、
ｎは、実行される前記ＳＩＭＤ拡張命令に応じて変化する、プログラム。
【請求項３１】
前記予め定められた値はゼロである、請求項３０に記載のプログラム。
【請求項３２】
前記ソース引数は、ソースベクトルレジスタを特定する、請求項３０または３１に記載のプログラム。
【請求項３３】
前記ソース引数は、メモリ内のソースベクトル位置を特定する、請求項３０または３１に記載のプログラム。
【請求項３４】
実行される前記ＳＩＭＤ拡張命令が３２ビットの整数を拡張する場合、ｎは、４、８、および１６からなる群から選択された値である、請求項３０から３３のいずれか一項に記載のプログラム。
【請求項３５】
実行される前記ＳＩＭＤ拡張命令が６４ビットの整数を拡張する場合、ｎは、２、４、および８からなる群から選択された値である、請求項３０から３３のいずれか一項に記載のプログラム。
【請求項３６】
複数のｎ個の連続するベクトルエレメントとｎ個の関連する条件付きマスクエレメントとをそれぞれ保持する対象ベクトルとマスクレジスタとを特定する対象引数とマスク引数、および、ソースベクトルを特定するソース引数を有するＳＩＭＤ拡張命令を備え、
実行可能な前記ＳＩＭＤ拡張命令は、プロセッサに、前記ソースベクトルの連続するベクトルエレメントのデータを、前記対象ベクトルのマスキングされていないベクトルエレメントにコピーする手順を実行させ、
ｎは、実行される前記ＳＩＭＤ拡張命令に応じて変化する、プログラム。
【請求項３７】
前記ソース引数は、ソースベクトルレジスタを特定する、請求項３６に記載のプログラム。
【請求項３８】
前記対象引数は、対象ベクトルレジスタを特定する、請求項３７に記載のプログラム。
【請求項３９】
実行可能な前記ＳＩＭＤ拡張命令は、プロセッサに、さらに、前記対象ベクトルのマスキングされているベクトルエレメントをゼロの値に設定する手順を実行させる、請求項３８に記載のプログラム。
【請求項４０】
前記データは、前記対象ベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、前記対象ベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項３７から３９のいずれか一項に記載のプログラム。
【請求項４１】
前記対象引数は、メモリ内の対象ベクトル位置を特定する、請求項４０に記載のプログラム。
【請求項４２】
前記ソース引数は、メモリ内のソースベクトル位置を特定する、請求項３６に記載のプログラム。
【請求項４３】
複数のｎ個の連続したベクトルエレメントを保持するために、ソースベクトルを特定するためのソースパラメータと、条件マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつプロセッサ命令を受信する段階と、
前記プロセッサ命令の受信に呼応して、データを、特定された前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、特定された前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする段階と
を備え、
前記複数のｎ個の連続したベクトルエレメントのそれぞれは、ｍバイトの同じ可変パーティションサイズを有し、
ｎは、受信される前記プロセッサ命令に応じて変化する、コンピュータ実装される方法。
【請求項４４】
前記ソースパラメータは、ソースベクトルレジスタを特定する、請求項４３に記載の方法。
【請求項４５】
前記デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、請求項４４に記載の方法。
【請求項４６】
前記データは、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、前記デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、請求項４５に記載の方法。
【請求項４７】
前記データは、前記デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項４４から４６のいずれか一項に記載の方法。
【請求項４８】
前記デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、請求項４７に記載の方法。
【請求項４９】
前記ソースパラメータは、メモリ内に配置されているソースベクトル部分を特定する、請求項４３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサその他の処理論理に実行されると、論理的、数学的、その他の関数演算を実行する処理論理、マイクロプロセッサ、及び、関連する命令セットアーキテクチャ分野に関する。特に、本開示は、条件付きループのためのＳＩＭＤベクトル化機能を提供する命令及び論理に関する。
【背景技術】
【０００２】
現代のプロセッサは、計算集約型ではあるが、様々なデータ記憶デバイス（たとえば、単一命令複数データ（ＳＩＭＤ）ベクトルレジスタ）を利用した効率的な実装によって実現可能な、ハイレベルなデータの並列処理を提供する演算を提供する命令を含んでいる場合が多い。ＳＩＭＤを実行する際には、１つの命令が複数のデータエレメントに同時に実行される。これは、通常、レジスタおよび算術論理演算ユニット（ＡＬＵ）といった様々なリソースの幅を拡張して、これらリソースがそれぞれ複数のデータエレメントを保持または複数のデータエレメントに演算を行うことができるようにすることで実装される。
【０００３】
ベクトルのＳＩＭＤ処理をサポートするために、中央処理装置（ＣＰＵ）は並列ハードウェアを提供する。ベクトルは、複数の連続したデータエレメントを保持するデータ構造である。サイズがＬのベクトルレジスタは、サイズがＭのＮ個のベクトルエレメントを含むことができる（Ｎ＝Ｌ／Ｍ）。たとえば６４バイトのベクトルレジスタは、（ａ）各エレメントが１バイトを占有しているデータアイテムを保持する、６４個のベクトルエレメント、（ｂ）それぞれが２バイト（または１つの「ワード」）を占有するデータアイテムを保持する、３２個のベクトルエレメント、（ｃ）それぞれが４バイト（または１つの「ダブルワード」）を占有するデータアイテムを保持する、１６個のベクトルエレメント、または、（ｄ）それぞれが８バイト（または１つの「クワッドワード」）を占有するデータアイテムを保持する８個のベクトルエレメントに切り分けることができる。
【０００４】
複数のアプリケーションが、大量のデータレベルの並列処理を有しているので、ＳＩＭＤをサポートすると有利だろう。ＳＩＭＤを効率的に維持するために、一部のアーキテクチャは、ＳＩＭＤ算術演算だけでなく、ＳＩＭＤメモリ読み書き、さらには、ＳＩＭＤシャッフルおよび置換を可能としている。しかし、アプリケーションのなかには、一群の離れた位置に演算を行うためにかなり時間がかかるものがある。さらに、連続した、および／または、条件付き演算を実行する場合があり、この場合のアプリケーションは、ＳＩＭＤ演算を行っても利点が少ない。
【０００５】
たとえば、ＰＡＲＳＥＣ（Princeton Application Repository for Shared-Memory Computers）は、マルチスレッドプログラムからなるベンチマークスイートである。このスイートは、現れる作業負荷に焦点を当てて、チップマルチプロセッサの次世代共有メモリプログラムを代表するよう設計されている。ＰＡＲＳＥＣプログラムの１つである、ストリームクラスタ（streamcluster）は、所定の数のメジアンを見つけて、各点をその直近の中央に割り当てることができるようにすることで、オンラインクラスタリング問題を解決している。プログラムの殆どの時間は、新たな中央を開くことで得られる利得を評価することに当てられる。並列利得計算を、ｐｇａｉｎという関数に実装しており、これは以下のループを有する。
【数１】
2014130580.tif 000003
【０００６】
上述したループの例は、メモリアレイに実行される条件付き演算を示しており、ここでベクトル化は難しいので、ＳＩＭＤ演算を可能とするプロセッサアーキテクチャを利用しても得られる利点は少ないと思われる。
【０００７】
今日まで、これらパフォーマンスを制限する問題及びボトルネックを解決する可能性のある解決法は見つけられていない。
【０００８】
本発明は、添付図面によって制限ではなく、例示として図示される。
【図面の簡単な説明】
【０００９】
【図１Ａ】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するシステムの一実施形態のブロック図である。
【図１Ｂ】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。
【図１Ｃ】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。
【図２】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図３Ａ】一実施形態におけるパッキングされたデータタイプを示す。
【図３Ｂ】一実施形態におけるパッキングされたデータタイプを示す。
【図３Ｃ】一実施形態におけるパッキングされたデータタイプを示す。
【図３Ｄ】一実施形態における条件付きループのためのＳＩＭＤベクトル化機能を提供する命令エンコードを示す。
【図３Ｅ】別の一実施形態における条件付きループのためのＳＩＭＤベクトル化機能を提供する命令エンコードを示す。
【図３Ｆ】別の一実施形態における条件付きループのためのＳＩＭＤベクトル化機能を提供する命令エンコードを示す。
【図３Ｇ】別の一実施形態における条件付きループのためのＳＩＭＤベクトル化機能を提供する命令エンコードを示す。
【図３Ｈ】別の一実施形態における条件付きループのためのＳＩＭＤベクトル化機能を提供する命令エンコードを示す。
【図４Ａ】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。
【図４Ｂ】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。
【図５】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図６】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するコンピュータシステムの一実施形態のブロック図である。
【図７】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。
【図８】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。
【図９】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するシステムオンチップの一実施形態のブロック図である。
【図１０】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図１１】条件付きループのためのＳＩＭＤベクトル化機能を提供するＩＰコア開発システムの一実施形態のブロック図である。
【図１２】条件付きループのためのＳＩＭＤベクトル化機能を提供するアーキテクチャエミュレーションシステムの一実施形態を示す。
【図１３】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を変換するシステムの一実施形態を示す。
【図１４Ａ】条件付きループのためのＳＩＭＤベクトル化機能を提供するために、命令を利用するプロセスの一実施形態のフロー図である。
【図１４Ｂ】条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を利用するプロセスの別の一実施形態のフロー図である。
【図１５Ａ】条件付きループのためのＳＩＭＤベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセスの一実施形態のフロー図である。
【図１５Ｂ】条件付きループのためのＳＩＭＤベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセスの一実施形態のフロー図である。
【図１６】条件付きループのためのＳＩＭＤベクトル化機能を提供するプロセスの一実施形態のフロー図を示す。
【図１７】条件付きループのためのＳＩＭＤベクトル化機能を提供するベクトル拡張命令を実行する装置の一実施形態を示す。
【図１８】条件付きループのためのＳＩＭＤベクトル化機能を提供するベクトル拡張命令を実行する装置の別の一実施形態を示す。
【発明を実施するための形態】
【００１０】
以下の記載では、条件付きループのためのＳＩＭＤベクトル化機能をプロセッサ、コンピュータシステム、その他の処理装置内で、またはこれらに関連して提供する命令及び処理論理を開示する。
【００１１】
本明細書で、ベクトルプロセッサの条件付きループのベクトル化を提供する命令および論理を開示する。ＳＩＭＤベクトル拡張命令は、複数のｎ個の連続したベクトルエレメントを保持するために、ソースベクトルを特定するソースパラメータ、条件付きマスクレジスタを特定するマスクパラメータ、および、デスティネーションベクトルを特定するためのデスティネーションパラメータを有する。複数のｎ個の連続したベクトルエレメントのそれぞれは、ｍバイトの同じ可変パーティションサイズを有する。プロセッサ命令に呼応して、データを特定されたデスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、特定されたデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーし、ｎは、実行されるプロセッサ命令に応じて変化する。一部の実施形態は、条件決定のカウントを格納する。別の実施形態では、たとえば対象アドレス、テーブルオフセット、または処理命令のインジケータ等の他のデータを格納してよい。
【００１２】
一部の実施形態は、カウントベクトルのエレメントをｎ個のカウント値（たとえば連続したカウント値）に設定してよい。メモリアレイの一部（たとえばｉｓ＿ｃｅｎｔｅｒ[ｉ：ｉ＋ｎ‐１]）にアクセスして、決定ベクトルを取得する。ＳＩＭＤベクトル比較オペレーションを次に利用して、決定ベクトルに従ってベクトル条件付きマスクを生成してよく、ベクトル条件付きマスクをマスクレジスタに格納してよい。ＳＩＭＤベクトル拡張命令を実行すると、プロセッサ命令の受信に呼応して、ソースベクトルのデータを、デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。ｎは、受信されるプロセッサ命令に応じて変化する（たとえば、ｍバイトの可変パーティションサイズは、アレイcenter_table[]の整数のサイズであってよい）。次に、デスティネーションベクトルのデータが、ＳＩＭＤマスキングされているベクトル書き込みオペレーションによってメモリに格納されてよい。したがって条件付きループのベクトル化は、本明細書で開示される命令および論理を利用して以下のように達成することができる。
【００１３】
関数ｐｇａｉｎからベクトル化されたループを実行する擬似コードの一例を以下に示す。
【数２】
2014130580.tif 000004
【００１４】
ベクトル拡張命令の一実施形態は、メモリのデスティネーションベクトルを特定してよく、（たとえばcenter_table[i:i+n-1]）、これにより、別のマスキングされたベクトル書き込み（たとえばマスクストア）オペレーションが必要なくなる点を理解されたい。さらに、条件付きループのベクトル化を、以下で詳述するように、本明細書で開示する命令および論理を利用して達成することができ、これによりパフォーマンスおよび命令のスループットが向上して、電力利用量およびエネルギー消費量が低減することを理解されたい。これらの技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等が含まれてよい。
【００１５】
以下の記載では、処理論理、処理タイプ、マイクロアーキテクチャ条件、イベント、イネーブルメカニズム等の数多くの具体的な詳細を述べて、本発明の実施形態の完全な理解を提供する。しかし、当業者であれば本発明を、これら具体的な詳細なしに実行可能であることを理解する。加えて、公知の構造、回路等は詳細に示すのを避けて、本発明の実施形態を不当にあいまいにしないようにしている場合もあることも理解されたい。
【００１６】
以下の記載は、プロセッサに関して記載されるが、他の実施形態は任意の他の種類の集積回路及び論理デバイスに利用可能である。本発明の実施形態の同様の技術及び教示は、パイプラインスループットを向上させ性能を高めることで利益を享受しうる他のタイプの回路または半導体デバイスにも応用可能である。本発明の実施形態の教示は、データ操作を実行するいずれのプロセッサまたは機械にも応用可能である。しかし本発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットのデータオペレーションを実行するプロセッサまたは機械に限定されず、データの操作及び管理を実行するいずれのプロセッサ及び機械に対しても応用することができる。加えて、以下の記載は例示を提供しており、添付図面は図示の目的から様々な例を提示する。しかし、これらの例は、単に本発明の実施形態の例を提供する意図をもつのであって、本発明の実施形態について可能性のあるすべての実施形態の網羅的なリストを提供する意図はないので、限定的にとらえられるべきではない。
【００１７】
以下の例は、実行ユニット及び論理回路のコンテキストから、命令処理及び配信について記載しているが、本発明の他の実施形態は、機械により実行されると、機械に本発明の少なくとも１つの実施形態に従った機能を実行させることができる、機械可読有形媒体に格納されているデータおよび／または命令によって実行されてもよい。一実施形態では、本発明の実施形態に関する機能は、機械実行可能な命令によって実現される。命令は、命令をプログラミングされた汎用または専用プロセッサに、本発明の各ステップを実行させる。本発明の実施形態は、コンピュータ（またはその他の電子デバイス）を、本発明の実施形態の１以上のオペレーションを実行させるようにプログラミングするために利用されてよい命令が格納された機械またはコンピュータ可読媒体を含んでよいコンピュータプログラムプロダクトまたはソフトウェアとして提供されてよい。または、本発明の実施形態の各ステップが、各ステージを実行するための固定関数(fixed-function)論理を含む具体的なハードウェアコンポーネントにより実行されてもよいし、プログラミングされたコンピュータコンポーネントと固定関数ハードウェアコンポーネントの任意の組み合わせにより実行されてもよい。
【００１８】
本発明の実施形態を実施するための論理をプログラミングするために利用される命令は、システムのメモリ（たとえばＤＲＡＭ、キャッシュ、フラッシュメモリ、その他のストレージ）に格納されてもよい。さらに命令は、他のコンピュータ可読媒体によってまたはネットワーク経由で配信されてよい。したがって、機械可読媒体は、機械（たとえばコンピュータ）が可読な形態の命令を格納または送信する任意のメカニズムを含んでよく、フロッピー（登録商標）ディスク、光ディスク、ＣＤ、ＣＤ−ＲＯＭ，光磁気ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カードまたは光カード、フラッシュメモリ、または有形の、機械可読記憶媒体（電気、光、音響その他の形態の伝播信号（たとえば搬送波、赤外線信号、デジタル信号等）によってインターネット経由で情報を送信するために利用される）に限定はされない。したがって、コンピュータ可読媒体は、機械が可読な形態で電子命令または情報を格納または送信するのに適した任意のタイプの有形の機械可読媒体を含む。
【００１９】
設計は、作成、シミュレーション、製造といった様々なステージを経ることができる。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションに適しているが、ハードウェアを、ハードウェア記述言語あるいは別の機能記述言語を利用して表すことができる。加えて、論理及び／またはトランジスタゲートを持つ回路レベルのモデルを設計プロセスのあるステージで生成することができる。さらに、殆どの設計は、あるステージで、ハードウェアモデルの様々なデバイスの物理的配置を表すレベルのデータに到達する。従来の半導体製造技術を利用するケースでは、ハードウェアモデルを表すデータは、集積回路を製造するために利用されるマスクのための様々なマスクレイヤの様々な特徴の存在または不在を示すデータであってよい。設計のいずれの表現においても、データは、機械可読媒体の任意の形態で格納されてもよい。ディスク等のメモリまたは磁気もしくは光ストレージは、情報の送信のために変調された、または生成された光波または電気波で送信される情報を格納するための機械可読媒体であってよい。コードまたは設計を搬送するまたは示す電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信に関しては、新たなコピーを作成する。したがって通信プロバイダまたはネットワークプロバイダは、少なくとも一時的に、本発明の実施形態の技術を利用して、搬送波に符号化された情報等の物品を有形の機械可読媒体に格納してよい。
【００２０】
現代のプロセッサでは、複数の異なる実行ユニットを利用して、様々なコード及び命令が処理、実行される。これら命令の全てが、同じように生成されているわけではない、というのも、これらのうち早く完了するものもあるが、完了させるために多数のクロックサイクルを必要とするものもあるからである。命令のスループットが速いほど、プロセッサの性能全体もよくなる。したがって、なるべく命令を高速で実行させるとよい。しかし、命令の中には、複雑性が高く、多くの実行時間及びプロセッサリソースが必要となるものもある。たとえば浮動小数点命令、ロード／格納演算、データの移動等がこれに相当する。
【００２１】
より多くのコンピュータシステムがインターネット、テキスト及びマルチメディアアプリケーションで利用されるようになるにつれ、さらなるプロセッサのサポートが導入されてきた。一実施形態では、命令セットは、１以上のコンピュータアーキテクチャ（たとえば、データタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込み及び例外の処理、外部入出力（Ｉ／Ｏ））と関連付けられてよい。
【００２２】
一実施形態では、命令セットアーキテクチャ（ＩＳＡ）は、１以上の命令セットを実装するために利用されるプロセッサ論理及び回路を含む１以上のマイクロアーキテクチャにより実装されてよい。したがい、異なるマイクロアーキテクチャをもつプロセッサは、共通の命令セットの少なくとも一部を共有してよい。たとえばＩｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサ、及び、カリフォルニア州のＳｙｎｎｙｖａｌｅのＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ社製のプロセッサなどが、ｘ８６命令セットに略等しいバージョンを実装している（新しいバージョンでは拡張部も加えられている）が、内部設計は異なっている。同様に、他の開発業者（たとえばＡＲＭ  Ｈｏｌｄｉｎｇｓ  ，ＬＴＤ．，ＭＩＰＳ）または彼らのライセンシーまたは採用会社（adopter）が、共通の命令セットの少なくとも一部ではあるが、プロセッサの設計は異ならせて、共有している、という事例がある。たとえばＩＳＡの同じレジスタアーキテクチャを、新たな、または公知の技術を利用して（たとえば、専用物理レジスタ、レジスタリネームメカニズム（たとえばＲｅｇｉｓｔｅｒ  Ａｌｉａｓ  Ｔａｂｌｅ（ＲＡＴ）、Ｒｅｏｒｄｅｒ  Ｂｕｆｆｅｒ（ＲＯＢ）、及び退避レジスタファイル）を利用する１以上の動的割り当てされた物理レジスタ）異なるマイクロアーキテクチャで異なる方法で実装することができる。一実施形態では、レジスタは１以上のレジスタ、レジスタアーキテクチャ、レジスタファイル、その他、ソフトウェアプログラムによりアクセス可能であってもなくてもよい他のレジスタセットを含んでよい。
【００２３】
一実施形態では、命令は、１以上の命令フォーマットを含んでよい。一実施形態では、命令フォーマットは、特に実行するオペレーション及びオペレーションを実行するオペランドを指定する様々なフィールド（ビット数、ビット位置等）を示すことができる。命令フォーマットの一部は、さらに、命令テンプレート（またはサブフォーマット）により破壊定義（broken defined）されてもよい。たとえば、ある命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されていてもよいし、及び／または、異なる割り込みを行われたフィールドを有するように定義されていてもよい。一実施形態では、命令は、命令フォーマットを利用して（さらに、定義されている場合には命令フォーマットの命令テンプレートの一定のフォーマットで）表され、オペレーション及びオペレーションが行われるオペランドを示したり、指定したりする。
【００２４】
科学的な、金融関係の、自動ベクトル化汎用ＲＭＳ（認識、マイニング、及び合成：recognition, mining, and synthesis）及び視覚的及びマルチメディアアプリケーション（たとえば２Ｄ／３Ｄグラフィック、画像処理、ビデオ圧縮／伸張、音声認識アルゴリズム及び音声操作）において、多数のデータアイテムに対して同じオペレーションが行われる必要があるだろう。一実施形態では、単一命令複数データ（ＳＩＭＤ）が、プロセッサに複数のデータエレメントにオペレーションを行わせるタイプの命令のことを指す。ＳＩＭＤ技術は、レジスタのビットを複数の固定サイズまたは可変サイズのデータエレメントに分割することができるプロセッサで利用することができる（各データエレメントは、別の値を表している）。たとえば一実施形態では、６４ビットレジスタのビットは、４つの別個の１６ビットのデータエレメント（これらそれぞれは、別々の１６ビットの値を表している）を含むソースオペランドとして組織化されていてよい。このタイプのデータは、「パッキングされた」データタイプまたは「ベクトル」データタイプと称されてよく、このタイプのデータのオペランドは、パッキングされたデータオペランドまたはベクトルオペランドと称される。一実施形態では、パッキングされたデータアイテムまたはベクトルは、１つのレジスタに格納されている一連のパッキングされたデータエレメントであり、パッキングされたデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令のソースまたはデスティネーションオペランド（または、「パッキングされたデータ命令」または「ベクトル命令」）であってよい。一実施形態では、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して実行すべき１つのベクトルオペレーションを指定して、同じまたは異なるサイズであり、同じまたは異なる数のデータエレメントであり、同じまたは異なるデータエレメントの順序を持つ、デスティネーションベクトルオペランドを生成する（結果ベクトルオペランドと称される場合もある）。
【００２５】
ｘ８６、ＭＭＸ（登録商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、及びＳＳＥ４．２命令を含む命令セットをもつＩｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）及び／またはＮＥＯＮ命令を含む命令セットをもつＡＲＭ  Ｃｏｒｔｅｘ（登録商標）プロセッサファミリー等のＡＲＭプロセッサ、及び、中国科学アカデミーのＩＣＴ（Institute of Computing Technology）が開発したＬｏｏｎｇｓｏｎプロセッサファミリー等のＭＩＰＳプロセッサ等によって利用されているものに代表されるＳＩＭＤ技術は、アプリケーション性能を顕著に向上させた（Ｃｏｒｅ（登録商標）及びＭＭＸ（登録商標）は、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標または商標である）。
【００２６】
一実施形態では、デスティネーション及びソースレジスタ／データは、対応するデータまたはオペレーションのソース及びデスティネーションを表す一般名称である。一部の実施形態では、これらは、レジスタ、メモリ、記述されるものと異なる命令または機能をもっているその他の格納領域で実装されてもよい。たとえば一実施形態では、「ＤＥＳＴ１」は、一時的な格納レジスタその他の格納領域であってよく、一方で、「ＳＲＣ１」「ＳＲＣ２」は、第１及び第２のソース格納レジスタ、その他の格納領域であってもよい、等である。他の実施形態では、ＳＲＣ及びＤＥＳＴ格納領域の２以上が、同じ格納領域（たとえばＳＩＭＤレジスタ）内の異なるデータ格納エレメントに対応していてよい。一実施形態では、ソースレジスタの１つが、たとえばあるデスティネーションレジスタにサービス提供している２つのソースレジスタのいずれかへの第１及び第２のソースデータに対してオペレーションを実行した結果を書き戻すことで、デスティネーションレジスタとして動作してもよい。
【００２７】
図１Ａは、本発明の一実施形態における、命令を実行するための実行ユニットを含むプロセッサで構成されるコンピュータシステムの一例のブロック図である。システム１００は、この実施形態で記載されている実施形態等の本発明におけるデータを処理するアルゴリズムを実行するための論理を含む実行ユニットを利用するコンポーネント（たとえばプロセッサ１０２）を含む。システム１００は、カリフォルニア州のサンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ，ＰＥＮＴＩＵＭ（登録商標）４、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、及び／またはＳｔｒｏｎｇ  ＡＲＭ（登録商標）マイクロプロセッサに基づくプロセッサシステムを表しているが、他のシステム（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を含む）を利用することもできる。一実施形態では、サンプルのシステム１００は、ワシントン州のＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムのあるバージョンを実行してよいが、他のオペレーティングシステム（ＵＮＩＸ（登録商標）及びＬｉｎｕｘ（登録商標））、エンベデッドソフトウェア、及び／または、グラフィックユーザインタフェースを利用してもよい。したがって本発明の実施形態は、ハードウェア回路及びソフトウェアの特定の組み合わせに限定はされない。
【００２８】
実施形態はコンピュータシステムに限定はされない。本発明の別の実施形態は、ハンドヘルドデバイス及びエンベデッドアプリケーション等の他のデバイスで利用することができる。ハンドヘルドデバイスの一部の例には、携帯電話器、インターネットプロトコルデバイス、デジタルカメラ、情報携帯端末（ＰＤＡ）、及びハンドヘルドＰＣが含まれる。エンベデッドアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または少なくとも１つの実施形態の１以上の命令を実行することができる１以上の他のシステムを含んでよい。
【００２９】
図１Ａは、本発明の一実施形態における少なくとも１つの命令を実行するアルゴリズムを実行する１以上の実行ユニット１０８を含むプロセッサ１０２で構成されたコンピュータシステム１００のブロック図である。一実施形態は、シングルプロセッサデスクトップまたはサーバシステムのコンテキストで記載されてよいが、別の実施形態は、マルチプロセッサシステムに含めることもできる。システム１００は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、ＣＩＳＣ（複合命令セットコンピュータ：complex instruction set computer）マイクロプロセッサ、ＲＩＳＣ（低減命令セット計算：reduced instruction set computing）マイクロプロセッサ、ＶＬＩＷ（超長命令語：Very Long Instruction Word）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス（たとえばデジタル信号プロセッサなど）を含む。プロセッサ１０２は、プロセッサ１０２とシステム１００の他のコンポーネントとの間でデータ信号を伝達することができるプロセッサバス１１０に連結されている。システム１００の各エレメントは、当業者であればよくわかっている銘々の従来の機能を果たす。
【００３０】
一実施形態では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャによって、プロセッサ１０２は、１つの内部キャッシュまたは複数レベルの内部キャッシュを有してよい。または、別の実施形態では、キャッシュメモリがプロセッサ１０２の外部に存在していてもよい。他の実施形態としてさらに、特定の実装及び需要に応じて、内部キャッシュ及び外部キャッシュ両方の組み合わせを含んでもよい。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに様々なタイプのデータを格納することができる。
【００３１】
整数及び浮動小数点演算を実行する論理を含む実行ユニット１０８も、プロセッサ１０２に存在している。プロセッサ１０２はさらに、一定のマクロ命令のためのマイクロコードを格納するマイクロコード（μコード）ＲＯＭを含んでいる。一実施形態では、実行ユニット１０８は、パッキング命令セット１０９を処理する論理を含む。パッキングされた命令セット１０９を、命令を実行する関連回路とともに、汎用プロセッサ１０２の命令セット内に含むことで、多くのマルチメディアアプリケーションが利用するオペレーションを、汎用プロセッサ１０２にパッキングされているデータを利用して実行することができる。したがって、パッキングされたデータのオペレーションを実行するためにプロセッサデータバスの全幅を利用することで、多くのマルチメディアアプリケーションを加速化してより効率的に実行することができる。これにより、１つのデータエレメントについて一度に１以上のオペレーションを実行するために、プロセッサのデータバスで、いくつも小さな単位のデータを送信する必要性がなくなる。
【００３２】
実行ユニット１０８の別の実施形態はマイクロコントローラ、エンベデッドプロセッサ、グラフィックデバイス、ＤＳＰ、その他のタイプの論理回路でも利用することができる。システム１００は、メモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、その他のメモリデバイスであってよい。メモリ１２０は、プロセッサ１０２によって実行可能なデータ信号により表される命令及び／またはデータを格納してよい。
【００３３】
システム論理チップ１１６は、プロセッサバス１１０及びメモリ１２０に連結されている。図示されている実施形態ではシステム論理チップ１１６はメモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信することができる。ＭＣＨ１１６は、命令及びデータの格納、及び、グラフィックコマンド、データ、テクスチャの格納のために、メモリ１２０に広帯域メモリ経路１１８を提供する。ＭＣＨ１１６は、データ信号をプロセッサ１０２、メモリ１２０、及びシステム１００の他のコンポーネントの間に方向づけ、データ信号をプロセッサバス１１０、メモリ１２０、及びシステムＩ／Ｏ１２２の間でブリッジする。一部の実施形態では、システム論理チップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供することができる。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に連結されている。グラフィックカード１１２は、アクセラレーテッドグラフィックポート（ＡＧＰ）インターコネクト１１４経由でＭＣＨ１１６に連結されている。
【００３４】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結するために、所有権をもつハブインタフェースバス１２２を利用する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して一部のＩ／Ｏデバイスに直接接続を提供する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセット、及びプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。いくつかの例に、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線トランシーバ１２６、データストレージ１２４、ユーザ入力及びキーボードインタフェースを含むレガシーＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、及びネットワークコントローラ１３４が含まれる。データ格納デバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、その他の大容量記憶デバイスを含んでよい。
【００３５】
システムの他の実施形態としては、一実施形態の命令をシステムオンチップ（a system on a chip）で利用することができる。システムオンチップの一実施形態は、プロセッサとメモリとを含む。あるシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及びその他のシステムコンポーネントと同じダイに位置させることができる。加えて、メモリコントローラまたはグラフィックコントローラ等の他の論理ブロックもシステムオンチップに配置してよい。
【００３６】
図１Ｂは、本発明の一実施形態の原理を実装するデータ処理システム１４０を示す。当業者であれば、ここに記載される実施形態を、本発明の実施形態の範囲を逸脱せずに別の処理システムで利用することも可能であることを理解するだろう。
【００３７】
コンピュータシステム１４０は、一実施形態における少なくとも１つの命令を実行することのできる処理コア１５９を含む。一実施形態では、処理コア１５９は、任意のタイプのアーキテクチャ（ＣＩＳＣ，ＲＩＳＣ，またはＶＬＩＷタイプのアーキテクチャが含まれるがこれらに限定はされない）の処理ユニットを表していてよい。処理コア１５９は、さらに、１以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、その製造に適したものであってよい。
【００３８】
処理コア１５９は、実行ユニット１４２、レジスタファイルセット１４５、及び、デコーダ１４４を含む。処理コア１５９はさらに、本発明の実施形態を理解するためには必要のないさらなる回路(不図示)を含む。実行ユニット１４２は、処理コア１５９が受信する命令を実行するために利用される。通常のプロセッサ命令の実行に加えて、実行ユニット１４２は、パッキングされたデータフォーマットにオペレーションを実行するために、パッキングされた命令セット１４３の命令を実行することができる。パッキングされた命令セット１４３は、本発明の実施形態及び他のパッキングされた命令を実行するための命令を含む。実行ユニット１４２は、内部バスによってレジスタファイル１４５に連結されている。レジスタファイル１４５は、情報（データを含む）を格納するための処理コア１５９上の格納領域を表す。前に述べたように、パッキングされたデータを格納するために利用される格納領域は重要ではない。実行ユニット１４２は、レジスタファイル１４４に連結されている。デコーダ１４４は、プロセッサコア１５９が受信する命令を、制御信号及び／またはマイクロコードエントリポイントにデコードするために利用される。これら制御信号及び／またはマイクロコードエントリポイントに呼応して、実行ユニット１４２は、適切なオペレーションを実行する。一実施形態では、デコーダは、命令のオペコードを解釈するために利用され、これは、どのオペレーションを、命令内に示されている対応するデータに行うべきかを示す。
【００３９】
処理コア１５９は、様々な他のシステムデバイスと通信するためにバス１４１に連結されており、様々な他のシステムデバイスには、これらに限定はされないが、シンクロノス・ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御１４６、ＳＲＡＭ制御１４７、バーストフラッシュメモリインタフェース１４８、ＰＣＭＣＩＡ（personal computer memory card international association）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御１４９、液晶ディスプレイ（ＬＣＤ）制御１５０、直接メモリアクセス（ＤＭＡ）コントローラ１５１、及び、別のバスマスターインタフェース１５２が含まれてよい。一実施形態では、データ処理システム１４０は、さらに、様々なＩ／ＯデバイスとＩ／Ｏバス１５３経由で通信するためのＩ／Ｏブリッジ１５４を含んでよい。これらＩ／Ｏデバイスには、これらに限定はされないが、ＵＡＲＴ（汎用非同期送受信回路：universal asynchronous receiver/transmitter）１５５、ＵＳＢ１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７及びＩ／Ｏ拡張インタフェース１５８を含んでよい。
【００４０】
データ処理システム１４０の一実施形態は、モバイル、ネットワーク及び／または無線型の通信を提供し、プロセッサコア１５９は、テキストストリング比較演算を含むＳＩＭＤ演算を実行することができる。処理コア１５９は、様々なオーディオ、ビデオ、撮像及び通信アルゴリズム（Ｗａｌｓｈ―Ｈａｄａｍａｒｄ変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）を含む離散変換、及びこれらそれぞれの逆変換、色空間変換、ビデオエンコードにおける動き推定（video encode motion estimation）またはビデオデコードにおける動き補償（video decode motion compensation）等の圧縮／伸張技術、及びパルス符号変調（ＰＣＭ）等の変調／復調（ＭＯＤＥＭ）機能を含む）でプログラミングされてよい。
【００４１】
図１Ｃは、条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を実行することのできるデータ処理システムの別の一実施形態を示す。１つの別の実施形態では、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、及び入出力システム１６８を含んでよい。入出力システム１６８は、無線インタフェース１６９に連結されていてもよい。ＳＩＭＤコプロセッサ１６１は、一実施形態における命令を含むオペレーションを実行することができる。処理コア１７０は、１以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、プロセッサコア１７０を含むデータ処理システム１６０の全てまたは一部を製造するために適したものであってよい。
【００４２】
一実施形態では、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２とレジスタファイルセット１６４とを含む。メインプロセッサ１６６の一実施形態は、実行ユニット１６２が実行する一実施形態における命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む。別の実施形態では、ＳＩＭＤコプロセッサ１６１は、さらに、命令セット１６３の命令をデコードするデコーダ１６５Ｂの少なくとも一部を含んでいる。処理コア１７０は、さらに、本発明の実施形態の理解には不要なさらなる回路（不図示）を含んでいる。
【００４３】
動作において、メインプロセッサ１６６は、キャッシュメモリ１６７及び入出力システム１６８との交信を含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令ストリームを実行する。データ処理命令ストリームには、ＳＩＭＤコプロセッサ命令が埋め込まれている。メインプロセッサ１６６のデコーダ１６５は、これらＳＩＭＤコプロセッサ命令を、取り付けられているＳＩＭＤコプロセッサ１６１が実行すべきタイプであると認識する。したがい、メインプロセッサ１６６は、これらＳＩＭＤコプロセッサ命令（または、ＳＩＭＤコプロセッサ命令を表す制御信号）をコプロセッサバス１７１に発行して、ここから、任意の取り付けられているＳＩＭＤコプロセッサによって受信される。このケースでは、ＳＩＭＤコプロセッサ１６１は、自身を宛先として受信されたＳＩＭＤコプロセッサ命令を受け付けて実行する。
【００４４】
データは、ＳＩＭＤコプロセッサ命令による処理を受けるために無線インタフェース１６９経由で受信される。一例では、音声通信が、デジタル信号の形態で受信されてよく、これは、ＳＩＭＤコプロセッサ命令による処理を受けて、音声通信を表すデジタルオーディオサンプルを再生する(regenerate)。別の例としては、圧縮されたオーディオ及び／またはビデオがデジタルビットストリームの形態で受信されてよく、これは、ＳＩＭＤコプロセッサ命令の処理を受けることで、デジタルオーディオサンプル及び／または動きビデオフレームを再生することができる。処理コア１７０の一実施形態では、メインプロセッサ１６６及びＳＩＭＤコプロセッサ１６１が、実行ユニット１６２、レジスタファイルセット１６４、及びデコーダ１６５を含む１つの処理コア１７０に統合されて、一実施形態における命令を含む命令セット１６３の命令を認識する。
【００４５】
図２は、本発明の一実施形態における命令を実行する論理回路を含むプロセッサ２００のマイクロアーキテクチャのブロック図である。一部の実施形態では、一実施形態における命令が、バイト、ワード、ダブルワード、クワッドワード等のサイズを有するデータエレンメントで動作するよう実装可能である。一実施形態では、インオーダフロントエンド２０１が、実行される命令をフェッチして、これらが後で、プロセッサパイプラインで利用されるように準備するプロセッサ２００の一部である。フロントエンド２０１は、いくつかのユニットを含んでよい。一実施形態では、命令プリフェッチャ２２６が、メモリから命令をフェッチして、命令デコーダ２２８に供給して、デコーダ２２８が、これらをデコードして解釈する。たとえば一実施形態では、デコーダは、受信した命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」と称される１以上のオペレーションにデコードする。他の実施形態では、デコーダは、命令を、マイクロアーキテクチャが利用するオペコード及び対応するデータ及び制御フィールドにパースして、一実施形態のオペレーションを実行する。一実施形態では、トレースキャッシュ２３０が、デコードされたμｏｐをとり、μｏｐキュー２３４に、プログラムが順序付けたシーケンスまたはトレースにアセンブルして、実行に備えさせる。トレースキャッシュ２３０が複合命令に遭遇すると、マイクロコードＲＯＭ２３２は、オペレーションを完了させるために必要なμｏｐを提供する。
【００４６】
一部の命令は１つのマイクロオペレーション（micro-op）に変換され、他の命令は、オペレーション全体を完了させるためにマイクロオペレーションをいくつか必要とする。一実施形態では、４を超える数のマイクロオペレーションが１つの命令を完了させるために必要な場合には、デコーダ２２８は、マイクロコードＲＯＭ２３２にアクセスして、命令を行う。一実施形態では、命令は、命令デコーダ２２８で処理されるための少数のマイクロオペレーションにデコードすることができる。別の実施形態では、あるオペレーションを達成するために複数のマイクロオペレーションが必要となる場合には、マイクロコードＲＯＭ２３２内に命令を格納する必要がある。トレースキャッシュ２３０は、マイクロコードＲＯＭ２３２から、一実施形態における１以上の命令を完了させるためにマイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを決定するエントリポイントのプログラマブル論理アレイ（ＰＬＡ）のことである。マイクロコードＲＯＭ２３２が、１つの命令のマイクロオペレーションの順序づけ（sequencing）を完了すると、機械のフロントエンド２０１は、トレースキャッシュ２３０からマイクロオペレーションのフェッチを再開する。
【００４７】
アウトオブオーダ実行エンジン２０３は、命令が実行のために準備されるところである。アウトオブオーダ実行論理は、パイプラインを流れ、実行のためにスケジューリングされる間に、性能を最適化するために命令フローを平滑化してリオーダするための複数のバッファを有している。アロケータ論理は、各μｏｐが実行するために必要とする機械バッファとリソースとを割り当てる。レジスタリネーム論理は、論理レジスタを、レジスタファイルのエントリにリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ２０２、遅い／一般的な浮動小数点スケジューラ２０４、及び単純な浮動小数点スケジューラ２０６の前にある、２つのμｏｐキュー（１つがメモリオペレーション用、１つが非メモリオペレーション用）の１つに各μｏｐのエントリを割り当てる。μｏｐスケジューラ２０２、２０４、２０６は、μｏｐが実行準備完了するときを、依存している入力レジスタオペランドソースの準備ができているか、及びμｏｐが自身のオペレーションを完了させるために必要とする実行リソースが利用可能か、に基づいて判断する。一実施形態の高速スケジューラ２０２は、主要なクロックサイクルの各半分でスケジューリングすることができ、他のスケジューラは、主要なプロセッサクロックサイクル１つについて一度だけスケジューリングすることができる。スケジューラは、実行のためにμｏｐをスケジュールするために、ディスパッチポートの問題を解決する。
【００４８】
実行ブロック２１１で、レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６、及び、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４の間にある。整数演算及び浮動小数点演算それぞれについて別個のレジスタファイル２０８、２１０が存在している。一実施形態の各レジスタファイル２０８、２１０は、新たな依存μｏｐへのレジスタファイルに書き込みがまだ行われていない、今完了したばかりの結果をバイパスしたり、転送したりするバイパスネットワークも含む。整数レジスタファイル２０８及び浮動小数点レジスタファイル２１０はさらに、互いにデータを通信することができる。一実施形態では、整数レジスタファイル２０８は、２つのレジスタファイルに分割され、１つのレジスタファイルがデータの下位３２ビット用であり、第２のレジスタファイルが、データの上位３２ビット用である。一実施形態の浮動小数点レジスタファイル２１０は、浮動小数点命令が通常６４から１２８ビット幅であるために、１２８ビット幅のエントリを有している。
【００４９】
実行ブロック２１１は、命令が実際に実行される実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、マイクロ命令が実行する必要のある整数及び浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０を含む。一実施形態のプロセッサ２００は、複数の実行ユニットを含む（つまり、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４）。一実施形態では、浮動小数点実行ブロック２２２、２２４が、浮動小数点ＭＭＸ、ＳＩＭＤ、及びＳＳＥ、またはその他のオペレーションを実行する。一実施形態の浮動小数点ＡＬＵ２２２は、除算、平方根、及び剰余のマイクロオペレーション（remainder micro-ops）を実行するための６４ビット×６４ビットの浮動小数点の除算器（divider）を含む。本発明の実施形態では、浮動小数点の値に関する命令は、浮動小数点ハードウェアで処理されてよい。一実施形態では、ＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８に進む。一実施形態の高速ＡＬＵ２１６、２１８は、１クロックサイクルの半分の有効レイテンシーで高速演算を実施することができる。一実施形態では、最も複雑な整数演算は低速ＡＬＵ２２０で処理されるが、これは低速ＡＬＵ２２０が、乗算器、シフト、フラグ論理、及び分岐処理といったレイテンシーの長いタイプの演算のための整数実行ハードウェアを含んでいるからである。メモリロード／ストア演算は、ＡＧＵ２１２、２１４が実行する。一実施形態では、整数ＡＬＵ２１６、２１８、２２０は、６４ビットのデータオペランドに整数演算を実行するコンテキストで説明される。別の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等を含む様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有するオペランドの範囲をサポートするよう実装されてよい。一実施形態では、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ及びマルチメディア命令との関連で、１２８ビット幅のパッキングされたデータオペランドに作用してよい。
【００５０】
一実施形態では、μｏｐスケジューラ２０２、２０４、２０６は、親のロードが実行完了する前に、依存する演算をディスパッチする。μｏｐはプロセッサ２００で投機的にスケジューリングされ実行されるので、プロセッサ２００は、メモリミスを処理する論理を含む。データロードがデータキャッシュでミスすると、一時的に不正確なデータでスケジューラを出た、依存しているオペレーションがパイプライン内にあることになる。リプレイメカニズムは、不正確なデータを利用する命令を追跡して実行する。依存しているオペレーションのみがリプレイされ、独立しているオペレーションは完了させられる。プロセッサの一実施形態のスケジューラ及びリプレイメカニズムは、さらに、条件付きループのためのＳＩＭＤベクトル化機能を提供する命令をキャッチするように設計されている。
【００５１】
「レジスタ」という用語は、オペランドを指定する命令の一部として利用されるオンボードのプロセッサ格納位置のことを指してよい。言い換えると、レジスタは、プロセッサの外部から（プログラマの観点から）利用可能なもののことであってよい。しかし一実施形態のレジスタの意味は、特定のタイプの回路に限定されるべきではない。一実施形態のレジスタは、データを格納、提供して、ここに記載する機能を実行することができる。ここに記載するレジスタは、任意の数の異なる技術（たとえば、専用物理レジスタ、レジスタリネームを利用して動的に割り当てられた物理レジスタ、専用及び動的に割り当てられた物理レジスタの組み合わせ）を利用してプロセッサ内の回路によって実装することができる。一実施形態では、整数レジスタは、３２ビットの整数データを格納する。一実施形態のレジスタファイルは、８つのマルチメディアＳＩＭＤレジスタをパッキングされたデータ用に含んでいる。後述する説明においては、レジスタは、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社製の、ＭＭＸ技術でイネーブルされたマイクロプロセッサの６４ビット幅のＭＭＸ（登録商標）レジスタ（一部の例では「ｍｍ」レジスタと称されることもある）等のパッキングされたデータを保持するよう設計されているデータレジスタとして理解される。これらＭＭＸレジスタは、整数及び浮動小数点形態両方で利用可能であり、ＳＩＭＤ及びＳＳＥ命令を伴うパッキングされたデータエレメントを利用して動作することができる。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはこれを超える（一般的に「ＳＳＥｘ」と称される）技術に関する１２８ビット幅のＸＭＭレジスタも、これらパッキングされたデータオペランドを保持するために利用することができる。一実施形態では、パッキングされたデータ及び整数データを格納するときに、レジスタは、２つのデータのタイプを区別する必要がない。一実施形態では、整数及び浮動小数点が、同じレジスタファイルまたは別のレジスタファイルに含まれる。さらに一実施形態では、浮動小数点及び整数データが、異なるレジスタに格納されても同じレジスタに格納されてもよい。
【００５２】
以下の図面の例では、複数のデータオペランドを説明する。図３Ａは、本発明の一実施形態におけるマルチメディアレジスタの様々なパッキングされているデータタイプの表現を示す。図３Ａは、１２８ビット幅のオペランドについて、パッキングされたバイト３１０、パッキングされたワード３２０、及びパッキングされたダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパッキングされたバイトフォーマット３１０は、１２８ビット長であり、１６個のパッキングされたバイトデータエレメントを含む。１バイトは、ここでは８ビットのデータと定義される。各バイトデータエレメントの情報を、バイト０についてビット７からビット０に格納して、バイト１についてビット１５からビット８に格納して、バイト２についてビット２３からビット１６に格納して、終に、バイト１５についてビット１２０からビット１２７に格納する。したがい、全ての利用可能なビットがレジスタで利用される。この格納配置は、プロセッサの格納効率を向上させる。また、１６個のデータエレメントにアクセスする場合、１つのオペレーションを１６個のデータエレメントに並列実行することができる。
【００５３】
一般的には、データエレメントは、同じ長さの他のデータエレメントとともに、１つのレジスタまたはメモリ位置に格納された個々のデータである。ＳＳＥｘ技術に関するパッキングされたデータシーケンスでは、ＸＭＭレジスタに格納されているデータエレメント数は、１２８ビットを、個々のデータエレメントのビット長で除算して得られる。同様に、ＭＭＸ及びＳＳＥ技術に関するパッキングされたデータシーケンスでは、ＭＭＸレジスタに格納されているデータエレメント数は、６４ビットを、個々のデータエレメントのビット長で除算して得られる。図３Ａに示すデータタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅でも、１２８ビット幅でも、５１２ビット幅でも、その他のサイズのオペランドであっても動作可能である。この例のパッキングされたワードフォーマット３２０は、１２８ビット長であり、８つのパッキングされたワードデータエレメントを含んでいる。各パッキングされたワードは、１６ビットの情報を含んでいる。図３Ａのパッキングされたダブルワードフォーマット３３０は、１２８ビット長であり、４つのパッキングされたダブルワードのデータエレメントを含んでいる。各パッキングされたダブルワードは、３２ビットの情報を含んでいる。パッキングされたクワッドワードは１２８ビット長であり、２つのパッキングされたクワッドワードデータエレメントを含んでいる。
【００５４】
図３Ｂは、別のレジスタ内の（in-register）データ格納フォーマットを示している。各パッキングされたデータは、１を超える数の独立したデータエレメントを含むことができる。３つのパッキングされたデータフォーマットが図示されている（つまりパッキングされたハーフ３４１、パッキングされたシングル３４２、及びパッキングされたダブル３４３）。パッキングされたハーフ３４１、パッキングされたシングル３４２、及びパッキングされたダブル３４３の一実施形態は、固定小数点（fixed-point）のデータエレメントを含んでいる。別の実施形態では、パッキングされたハーフ３４１、パッキングされたシングル３４２、及びパッキングされたダブル３４３の１以上が、浮動小数点のデータエレメントを含んでいてよい。パッキングされたハーフ３４１の別の実施形態は、１２８ビット長であり、８つの１６ビットのデータエレメントを含む。パッキングされたシングル３４２の一実施形態は、１２８ビット長であり、４つの３２ビットのデータエレメントを含む。パッキングされたダブル３４３の一実施形態は、１２８ビット長であり、２つの６４ビットのデータエレメントを含む。パッキングされたデータフォーマットは、さらに、他のレジスタ長に拡張することもできる点を理解されたい（たとえば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビットまたはそれ以上）。
【００５５】
図３Ｃは、本発明の一実施形態のマルチメディアレジスタの様々な符号付き及び符号なしのパッキングされたデータタイプの表現を示す。符号なしのパッキングされたバイト表現３４４は、ＳＩＭＤレジスタの符号なしのパッキングされたバイトの格納例を示す。各バイトデータエレメントの情報が、バイト０のビット７からビット０、バイト１のビット１５からビット８、バイト２のビット２３からビット１６、そして最後に、バイト１５の１２０ビットから１２７ビットに格納されている。したがってすべての利用可能なビットがレジスタで利用されている。この格納配置は、プロセッサの格納効率を高めることができる。また、１６個のデータエレメントにアクセスすることを考えたとき、１つのオペレーションを、１６個のデータエレメントに並列に実行することができる。符号付きのパッキングされているバイト表現３４５は、符号付きのパッキングされたバイトの格納を示している。各バイトデータエレメントの８つめのビットが符号インジケータである。符号なしのパッキングされているワードの表現３４６は、ワード７からワード０がＳＩＭＤレジスタにどのように格納されるかを示している。符号付きのパッキングされているワードの表現３４７は、符号なしのパッキングされているワードのレジスタ内表現３４６に類似している。各ワードデータエレメントの１６個目のビットは符号インジケータである。符号なしのパッキングされているダブルワード表現３４８は、ダブルワードデータエレメントをどのように格納するかを示している。符号付きのパッキングされたダブルワード表現３４９は、符号なしのパッキングされているダブルワードのレジスタ内の表現３４８に類似している。必要な符号ビットは、各ダブルワードデータエレメントの３２ビットである。
【００５６】
図３Ｄは、３２以上のビットを持ち、ワールドワイドウェブｗｗｗのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社から利用可能な、"Intel(R)64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z"に記載されているタイプのオペコードフォーマットに対応するレジスタ／メモリオペランドアドレスモードを持つ、オペレーションエンコード（オペコード）フォーマット３６０の一実施形態を示す。一実施形態では、命令が１以上のフィールド３６１及び３６２でエンコードされてよい。１つの命令について２までのオペランド位置を指定することができる（最大で２つのソースオペランド識別子３６４及び３６５を含む）。一実施形態では、デスティネーションオペランド識別子３６６が、ソースオペランド識別子３６４と等しく、他の実施形態ではこれらが異なっている。別の実施形態では、デスティネーションオペランド識別子３６６が、ソースオペランド識別子３６５と等しく、他の実施形態ではこれらが異なっている。一実施形態では、ソースオペランド識別子３６４及び３６５が指定するソースオペランドの１つが、命令の結果、上書きされ、他の実施形態では、識別子３６４が、ソースレジスタエレメントに対応しており、識別子３６５が、デスティネーションレジスタエレメントに対応している。一実施形態では、オペランド識別子３６４及び３６５が、３２ビットまたは６４ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。
【００５７】
図３Ｅは、４０以上のビットを有する別のオペレーションエンコード(オペコード)フォーマットを示す。オペコードフォーマット３７０は、オペコードフォーマット３６０に対応しており、随意でプレフィックスバイト３７８を含んでいる。一実施形態の命令は、フィールド３７８、３７１、及び３７２の１以上によってエンコードされてよい。一実施形態では、ソースオペランド識別子３７４、３７５、及び、プレフィックスバイト３７８により、１つの命令につき最大２つまでのオペランド位置が特定されてよい。一実施形態では、プレフィックスバイト３７８が、３２ビットまたは６４ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。一実施形態では、デスティネーションオペランド識別子３７６が、ソースオペランド識別子３７４と同じであり、他の実施形態では、これらが異なっている。別の実施形態では、デスティネーションオペランド識別子３７６が、ソースオペランド識別子３７５と同じであり、他の実施形態では、これらが異なっている。一実施形態では、命令は、オペランド識別子３７４及び３７５が特定するオペランドの１以上に作用して、オペランド識別子３７４及び３７５が特定する１以上のオペランドが、命令の結果、上書きされて、他の実施形態では、識別子３７４及び３７５が特定するオペランドが、別のレジスタの別のデータエレメントに書きこまれる。オペコードフォーマット３６０及び３７０は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定を、一部にＭＯＤフィールド３６３及び３７３によって指定して、随意でスケール−インデックス−ベース及び変位バイト（scale-index-base and displacement bytes）で指定する。
【００５８】
図３Ｆを見ると、一部の他の実施形態では、６４ビット（または１２８ビット、または２５６ビット、または、５１２ビット以上）のＳＩＭＤ算術演算をコプロセッサデータ処理（ＣＤＰ）命令により実行されてよい。オペレーションエンコード（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２及び３８９を有する１つのＣＤＰ命令を示している。別の実施形態において、このタイプのＣＤＰ命令では、オペレーションが１以上のフィールド３８３、３８４、３８７、及び３８８でエンコードされてよい。１つの命令について３つまでのオペランド位置を特定することができる（２つまでのソースオペランド識別子３８５及び３９０及び１つのデスティネーションオペランド識別子３８６を含む）。コプロセッサの一実施形態は、８、１６、３２、及び６４ビットの値に動作することができる。一実施形態では、命令を整数データエレメントに実行する。一部の実施形態では、命令が、条件フィールド３８１を利用して、条件付きで実行されてよい。一部の実施形態では、ソースデータサイズを、フィールド３８３によってエンコードしてよい。一部の実施形態では、ＳＩＭＤフィールドに、ゼロ（Ｚ）、負（Ｎ）、繰り上げ（Ｃ）、及び、オーバフロー（Ｖ）の検出を行ってよい。一部の命令について、この種類の飽和をフィールド３８４によってエンコードしてよい。
【００５９】
次に図３Ｇを参照すると、図３Ｇは、ワールドワイドウェブｗｗｗのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社から利用可能な、"Intel(R) Advanced Vector Extensions Programming Reference"に記載されているタイプのオペコードフォーマットに対応する、別の実施形態の条件付きループのためのＳＩＭＤベクトル化機能を提供する別のオペレーションエンコード（オペコード）フォーマット３９７を示している。
【００６０】
元のｘ８６命令セットは、存在が第１の「オペコード」バイトから分かっている、さらなるバイトに含まれているアドレスシラブル及び即値オペランドの様々なフォーマットをもつ１バイトのオペコードのために提供されたものである。加えて、オペコードに対する修飾子としてリザーブされていた一定のバイト値が存在している（命令の前に配置される必要があったことから、プレフィックスと称される）。２５６オペコードバイトの元のパレット（これら特別なプレフィックス値を含む）が枯渇すると、１バイトが新たなセットの２５６オペコードへのエスケープ（escape）として専用となった。ベクトル命令（たとえばＳＩＭＤ）が追加されると、より多くのオペコードに対する要求ができて、プレフィックスを利用して拡張しても、「２つのバイト」のオペコードマップも不十分となった。この目的のために、２バイトに、随意でプレフィックスを識別子として追加した追加マップに、新たな命令を追加した。
【００６１】
加えて、６４ビットモードのさらなるレジスタを促進するために、プレフィックスとオペコードとの間に（及び、オペコードを決定するために必要な任意のエスケープバイトとの間に）さらなるプレフィックスを利用することができる（「ＲＥＸ」と称する）。一実施形態では、ＲＥＸは４つの「ペイロード」ビットを有し、６４ビットモードのさらなるレジスタの利用を示す。他の実施形態では、４ビットより少ないまたは多い数であってよい。少なくとも１つの命令セットの一般的なフォーマット（これはフォーマット３６０及び／またはフォーマット３７０に概して対応している）が、以下のように大まかに示されている。  [prefixes] [rex] escape [escape2] opcode modrm (etc.)
オペコードフォーマット３９７は、オペコードフォーマット３７０に対応しており、随意でＶＥＸプレフィックスバイト３９１を含み（これは一実施形態ではＣ４ｈｅｘから始まる）、他の殆どの共通利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換える。たとえば以下の例では、１つの命令をエンコードするために２つのフィールドを利用する一実施形態が示されており、第２のエスケープコードが元の命令に存在している場合、または、ＲＥＸフィールドの剰余ビット（たとえばＸＢ及びＷフィールド）を利用する必要がある場合に利用可能である。後述する実施形態では、レガシーエスケープは、新たなエスケープ値で表され、レガシープレフィックスは、「ペイロード」バイトの一部として完全に圧縮され、レガシープレフィックスは、将来拡張する必要が出たときには取戻し（reclaimed）、利用することができ、第２のエスケープコードは「マップ」フィールドで圧縮され、将来のマッピングまたはフィーチャのスペースが利用可能となった場合、新たなフィーチャを追加する（たとえば、ベクトル長を増加して、さらなるソースレジスタ指定子を利用する）。
【数３】
2014130580.tif 000005
【００６２】
一実施形態の一命令は、１以上のフィールド３９１及び３９２でエンコードされてよい。１つの命令について４つまでのオペランド位置を、ソースオペランド識別子３７４及び３７５の組み合わせ、及び、随意でスケール−インデックス−ベース（ＳＩＢ：scale-index-base）識別子３９３、随意の変位識別子３９４、及び随意の即値バイト３９５の組み合わせで、フィールド３９１によって特定してよい。一実施形態では、ＶＥＸプレフィックスバイト３９１を利用して、３２ビットまたは６４ビットのソース及びデスティネーションオペランド及び／または１２８ビットまたは２５６ビットのＳＩＭＤレジスタまたはメモリオペランドを特定することができる。一実施形態では、オペコードフォーマット３９７が提供する機能が、オペコードフォーマット３７０と重複しており、他の実施形態では、これらが異なっている。オペコードフォーマット３７０及び３９７は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にＭＯＤフィールド３７３及び随意で（ＳＩＢ）識別子３９３、随意で変位識別子３９４、及び随意で即値バイト３９５により指定される。
【００６３】
次に、図３Ｈを参照すると、別の実施形態の条件付きループのためのＳＩＭＤベクトル化機能を提供するための、別のオペレーションエンコード（オペコード）フォーマット３９８を示す。オペコードフォーマット３９８は、オペコードフォーマット３７０及び３９７に対応し、随意でＥＶＥＸプリフィックスバイト３９６を含み（一実施形態では６２ｈｅｘから始まる）、殆どの他の共通に利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換え、さらなる機能を提供する。一実施形態の命令は、１以上のフィールド３９６及び３９２によりエンコードされてよい。命令１つについて４までのオペランド位置とマスクとを、フィールド３９６で、ソースオペランド識別子３７４及び３７５の組み合わせ並びに随意でスケール−インデックス−ベース（ＳＩＢ：scale-index-base）識別子３９３の組み合わせ、随意の変位識別子３９４及び随意の即値バイト３９５で、特定してよい。一実施形態では、ＥＶＥＸプリフィックスバイト３９６を利用して、３２ビットまたは６４ビットのソース及びデスティネーションオペランド、及び／または、１２８ビット、２５６ビット、または５１２ビットのＳＩＭＤレジスタまたはメモリオペランドを特定してよい。一実施形態では、オペコードフォーマット３９８が提供する機能は、オペコードフォーマット３７０または３９７と重複しており、他の実施形態ではこれらが異なっている。オペコードフォーマット３９８は、マスクで、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にＭＯＤフィールド３７３及び随意で（ＳＩＢ）識別子３９３、随意で変位識別子３９４、及び随意で即値バイト３９５により指定される。少なくとも１つの命令セット（一般的にはフォーマット３６０及び／または３７０に対応している）の汎用フォーマットは、以下で概略する。
【００６４】
＜evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]＞
一実施形態では、ＥＶＥＸフォーマット３９８によりエンコードされた命令は、追加の「ペイロード」ビットを有してよいが、この追加の「ペイロード」は、条件付きループのためのＳＩＭＤベクトル化機能に、たとえばユーザ設定可能なマスクレジスタ、追加のオペランド、または、１２８ビット、２５６ビット、または５１２ビットのベクトルレジスタまたはこれ以上のレジスタを選択肢、などの追加の新たな特徴を提供するために利用することができる。
【００６５】
たとえば、ＶＥＸフォーマット３９７が、条件付きループのためのＳＩＭＤベクトル化機能に黙示的なマスクを提供するために利用されてよい場合、ＥＶＥＸフォーマット３９８は、条件付きループのためのＳＩＭＤベクトル化機能に、明示的なユーザ設定可能マスクを与えるために利用されてよい。加えて、ＶＥＸフォーマット３９７が、ベクトル圧縮およびローテート機能を１２８ビットまたは２５６ビットのベクトルレジスタに提供するために利用されてよい場合、ＥＶＥＸフォーマット３９８は、条件付きループのためのＳＩＭＤベクトル化機能を１２８ビット、２５６ビット、５１２ビットまたはこれより大きな（または小さな）ベクトルレジスタに提供するために利用されてよい。
【００６６】
条件付きループのためのＳＩＭＤベクトル機能を提供するための命令の例を、以下に例示する。
【表１】
2014130580.tif 000006
【００６７】
条件付きループのベクトル化は、上述した命令に示したように、ＳＩＭＤベクトル拡張命令を利用することで達成することができ、これにより、パフォーマンスおよび命令のスループットを向上させることができ、電力使用量およびエネルギー消費量を低減させることができる。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等の、一部をさもなくば簡単にはベクトル化できないものが含まれる。
【００６８】
図４Ａは、本発明の少なくとも１つの実施形態における、インオーダパイプライン及びレジスタリネームステージ、アウトオブオーダ発行／実行論理を示すブロック図である。図４Ｂは、本発明の少なくとも１つの実施形態におけるプロセッサに含まれるべき、インオーダアーキテクチャコアおよびレジスタリネーム論理、アウトオブオーダ発行論理を示すブロック図である。図４Ａの実線のボックスは、インオーダパイプラインを示し、破線のボックスは、レジスタのリネーム、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂの実線のボックスは、インオーダアーキテクチャ論理を示し、破線のボックスは、レジスタリネーム論理及びアウトオブオーダ発行／実行論理を示す。
【００６９】
図４Ａでは、プロセッサパイプライン４００が、フェッチステージ４０２、長さデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネームステージ４１０、スケジュール（ディスパッチまたは発行としても知られている）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、書き戻し／メモリ書き込みステージ４１８、例外処理ステージ４２２、及びコミットステージ４２４を含む。
【００７０】
図４Ｂでは、矢印が、２以上のユニットの間の連結を示し、矢印の方向が、これらユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に連結されているフロントエンドユニット４３０を含むプロセッサコア４９０を示しており、４３０も４５０もメモリユニット４７０に連結されている。
【００７１】
コア４９０は、ＲＩＳＣコア、ＣＩＳＣコア、ＶＬＩＷコア、または、コアのハイブリッドもしくは別のタイプのコアであってよい。また別の選択肢として、コア４９０は、専用コア（たとえばネットワークまたは通信コア、圧縮エンジン、グラフィックスコア等）であってよい。
【００７２】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に連結されている分岐予測ユニット４３２を含み、これは命令変換ルックアサイドバッファ（ＴＬＢ）４３６に連結されており、これがまた命令フェッチユニット４３８に連結されており、これがまたデコードユニット４４０に連結されている。デコードユニットまたはデコーダは、命令をデコードして、１以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成してよい（これらは、元の命令からデコードされたり、元の命令を反映していたり、元の命令から導出されていたりする）。デコーダは、様々な異なるメカニズムを利用して実装されてよい。適切なメカニズムの例には、これらに限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）等が含まれる。命令キャッシュユニット４３４は、さらに、メモリユニット４７０のレベル２（Ｌ２）キャッシュユニット４７６に連結されている。デコードユニット４４０は、実行エンジンユニット４５０のリネーム／アロケータユニット４５２に連結されている。
【００７３】
実行エンジンユニット４５０は、１以上のスケジューラユニット４５６及び退避ユニット４５４に連結されているリネーム／アロケータユニット４５２を含む。スケジューラユニット４５６は、任意の数の異なるスケジューラを表しており、これには、予約ステーション、中央命令ウィンドウ等が含まれる。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に連結されている。物理レジスタファイルユニット４５８はそれぞれ、１以上の物理レジスタファイルを表しており、これらはそれぞれが、１以上の異なるデータタイプ（たとえばスカラー整数、スカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等）、ステータス（たとえば、次に実行する命令のアドレスである命令ポインタ）などを格納する。退避ユニット４５４が物理レジスタファイルユニット４５８に重複しており、レジスタリネーム及びアウトオブオーダ実行を実装することができる様々な方法（たとえば、リオーダバッファ及び退避レジスタファイルを利用して、将来のファイル、履歴バッファ、及び退避レジスタファイルを利用して、レジスタマップ及びレジスタのプールを利用して、など）を示している。概して、アーキテクチャレジスタは、プロセッサの外から、またはプログラマから見ることができる。レジスタは、具体的な回路のタイプに限定されない。ここで記載するデータを格納及び提供可能であれば、様々な異なるタイプのレジスタが利用可能である。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタリネームを利用する、動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタとの組み合わせなどが含まれる。退避ユニット４５４及び物理レジスタファイルユニット４５８は、実行クラスタ４６０に連結されている。実行クラスタ４６０は、１以上の実行ユニット４６２及び１以上のメモリアクセスユニット４６４を含む。実行ユニット４６２は、様々な演算（たとえばシフト、追加、減算、乗算等）を、様々なタイプのデータ（たとえばスカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等）に行うことができる。一部の実施形態は、具体的な関数または関数群に専用の複数の実行ユニットを含んでいるが、他の実施形態は、１つの実行ユニットだけを含んだり、全てが全ての関数を実行するまたは複数の実行ユニットを含んだりしてもよい。スケジューラ４５６、物理レジスタファイルユニット４５８、及び実行クラスタ４６０は、一定の実施形態では一定のタイプのデータ／オペレーションについて別々のパイプラインを生成するために（たとえばスカラー整数パイプライン、スカラー浮動小数点／パッキングされた整数／パッキングされた浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／または、それぞれが銘々のスケジューラユニット、物理レジスタファイルユニット、及び／実行クラスタを有するメモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する一定の実施形態を実装する）、複数形で示されている。別個のパイプラインを利用する場合には、これらのパイプラインの１以上がアウトオブオーダ発行／実行であり、残りがインオーダであってよい。
【００７４】
メモリアクセスユニット４６４群は、メモリユニット４７０に連結されており、これが、レベル２（Ｌ２）キャッシュユニット４７６に連結されているデータキャッシュユニット４７４に連結されているデータＴＬＢユニット４７２を含む。一実施形態では、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含み、これらそれぞれが、メモリユニット４７０のデータＴＬＢユニット４７２に連結されている。Ｌ２キャッシュユニット４７６は、１以上の他のレベルのキャッシュに連結されており、最終的にはメインメモリに連結されている。
【００７５】
例であるが、例に挙げているレジスタリネーム、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにしてパイプライン４００を実装してよい。１）命令フェッチ４３８が、フェッチ及び長さデコードステージ４０２及び４０４を実行し、２）デコードユニット４４０が、デコードステージ４０６を実行し、３）リネーム／アロケータユニット４５２が、割り当てステージ４０８及びリネームステージ４１０を実行し、４）スケジューラユニット４５６が、スケジュールステージ４１２を実行し、５）物理レジスタファイルユニット４５８及びメモリユニット４７０が、レジスタ読み出し／メモリ読み出しステージ４１４を実行し、実行クラスタ４６０が、書き戻し／メモリ書き込みステージ４１８を実行し、７）様々なユニットが例外処理ステージ４２２に関与し、８)退避ユニット４５４及び物理レジスタファイルユニット４５８が、コミットステージ４２４を実行する。
【００７６】
コア４９０は、１以上の命令セット（たとえばｘ８６命令セット（新たなバージョンを追加された一部の拡張部を含む））、カリフォルニア州ＳｙｎｎｙｖａｌｅのＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社のＭＩＰＳ命令セット、カリフォルニア州ＳｙｎｎｙｖａｌｅのＡＲＭ  Ｈｏｌｄｉｎｇｓ社のＡＲＭ命令セット（随意でＮＥＯＮ等の追加の拡張部を含む）をサポートしていてよい。
【００７７】
コアはマルチスレッド（２以上の並列のオペレーションまたはスレッドのセット）をサポートしていてよく、タイムスライスマルチスレッド、同時マルチスレッド（１つの物理コアが、物理コアが同時にマルチスレッド処理している各スレッドに論理コアを提供する）、またはこれらの組み合わせを含んでよい（たとえば、Ｉｎｔｅｌ（登録商標）Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ技術のような、タイムスライスフェッチ及びデコード、並びにこの後に同時マルチスレッド）様々な方法で行われてよい。
【００７８】
レジスタリネームは、アウトオブオーダ実行のコンテキストで説明されるが、レジスタリネームは、インオーダアーキテクチャで利用することもできる点を理解されたい。図示したプロセッサの実施形態はさらに、別の命令及びデータキャッシュユニット４３４／４７４及び共有Ｌ２キャッシュユニット４７６を含むが、別の実施形態では、命令及びデータ両方について１つの内部キャッシュが含まれてよい（たとえばレベル１（Ｌ１）内部キャッシュまたはマルチレベルの内部キャッシュ）。一部の実施形態では、システムは、内部キャッシュと、コア及び／またはプロセッサの外部の外部キャッシュとの組み合わせを含んでよい。または、キャッシュ全てがコア及び／またはプロセッサの外部にあってもよい。
【００７９】
図５は、本発明の実施形態の、統合されたメモリコントローラ及びグラフィックスをもつシングルコアプロセッサ及びマルチコアプロセッサ５００を示す。図５の実線のボックスは、シングルコア５０２Ａ、システムエージェント５１０、１以上のバスコントローラユニット５１６を持つプロセッサ５００を示しており、随意に追加されている破線のボックスは、複数のコア５０２Ａ−Ｎ、システムエージェントユニット５１０に統合された１以上のメモリコントローラユニット５１４、及び統合されたグラフィックス論理５０８を持つ別のプロセッサ５００を示す。
【００８０】
メモリ階層は、コア内の１以上のレベルのキャッシュ、１以上の共有キャッシュユニット５０６、統合されたメモリコントローラユニット５１４に連結されている外部メモリ（不図示）を含む。共有キャッシュユニット群５０６は、１以上の中間レベルキャッシュ（たとえばレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４））、またはその他のレベルのキャッシュ、最終レベルのキャッシュ（ＬＬＣ）、及び／またはこれらの組み合わせを含んでよい。一実施形態では、リングベースのインターコネクトユニット５１２が、統合されたグラフィックス論理５０８、共有キャッシュユニット群５０６、及びシステムエージェントユニット５１０を相互接続するが、別の実施形態では、これらユニットを相互接続するために任意の数の公知の技術を利用してもよい。
【００８１】
一部の実施形態では、コア５０２Ａ−Ｎの１以上はマルチスレッド処理を行うことができる。システムエージェント５１０は、コア５０２Ａ−Ｎを調整して動作させるコンポーネントを含む。システムエージェントユニット５１０は、たとえば電力制御ユニット（ＰＣＵ）及び表示ユニットを含んでよい。ＰＣＵは、コア５０２Ａ−Ｎ及び統合されたグラフィック論理５０８の電力状態を調整するために必要な論理及びコンポーネントであってよい、またはこれらを含んでよい。表示ユニットは、１以上の外部接続されたディスプレイを駆動するためのものである。
【００８２】
コア５０２Ａ−Ｎは、アーキテクチャ及び／または命令セットの観点から同質または異質であってよい。たとえばコア５０２Ａ−Ｎの一部が、インオーダであり、他がアウトオブオーダであってよい。別の例として、コア５０２Ａ−Ｎの２以上が、同じ命令セットを実行可能であってよく、他が、その命令セットのサブセットまたは異なる命令セットを実行可能であってよい。
【００８３】
プロセッサは、汎用プロセッサ（たとえばコア（登録商標）ｉ３、ｉ５、ｉ７、２Ｄｕｏ、Ｑｕａｄ、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、またはＳｔｒｏｎｇＡＲＭ（登録商標）プロセッサ等）であってよく、これらはカリフォルニア州のサンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社から利用可能であってよい。またはプロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ、ＭＩＰＳ社等の別の会社から入手可能であってもよい。プロセッサは、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ等の専用プロセッサであってよい。プロセッサは、１以上のチップ上に実装されてよい。プロセッサ５００は、複数の処理技術（たとえばＢｉＣＭＯＳ、ＣＭＯＳ，またはＮＭＯＳ）のいずれかを利用する、１以上の基板上の一部であっても、及び／または、１以上の基板上に実装されていてもよい。
【００８４】
図６から図８は、プロセッサ５００を含むのに適したシステム例であり、図９は、コア５０２の１以上を含んでよいチップ（ＳｏＣ）の上のシステムの例である。当技術分野で知られている、ラップトップ、デスクトップ、ハンドヘルドＰＣ、情報携帯端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、可搬型メディアプレーヤ、ハンドヘルドデバイス、及びその他の様々な電子デバイスで知られている他のシステム設計及び構成もまた適している。一般的には、ここで開示したプロセッサ及び／または他の実行論理を含むことのできる莫大な数の様々なシステム及び電子デバイスが適している。
【００８５】
図６を参照すると、本発明の一実施形態におけるシステム６００のブロック図が示されている。システム６００は、１以上のプロセッサ６１０、６１５を含み、これらが、グラフィックスメモリコントローラハブ（ＧＭＣＨ）６２０に連結されている。さらなるプロセッサ６１５が性質的に必須ではないということは、図６の破線に示されている。
【００８６】
各プロセッサ６１０、６１５は、プロセッサ５００のあるバージョンである。しかし、統合されたグラフィック論理及び統合されたメモリ制御ユニットがプロセッサ６１０、６１５に存在していてよい。図６は、ＧＭＣＨ６２０が、たとえばＤＲＡＭであってよいメモリ６４０に連結されていてよいことを示している。ＤＲＡＭは、少なくとも１つの実施形態では、不揮発性キャッシュに関連付けられていてよい。
【００８７】
ＧＭＣＨ６２０は、チップセット、またはチップセットの一部であってよい。ＧＭＣＨ６２０は、プロセッサ６１０、６１５と通信してよく、プロセッサ６１０、６１５、及びメモリ６４０の間の交信を制御してよい。ＧＭＣＨ６２０は、さらに、プロセッサ６１０、６１５とシステム６００の他のエレメントとの間のアクセラレーテッドバスインタフェースとして機能してよい。少なくとも１つの実施形態では、ＧＭＣＨ６２０が、マルチドロップバス（たとえばフロントサイドバス（ＦＳＢ）６９５）を介してプロセッサ６１０、６１５と通信する。
【００８８】
さらにＧＭＣＨ６２０は、ディスプレイ６４５（たとえばフラットパネルディスプレイ）に連結されている。ＧＭＣＨ６２０は、統合されたグラフィックスアクセラレータを含んでよい。ＧＭＣＨ６２０は、さらに、入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に連結されており、これは、システム６００に様々な周辺デバイスを連結するために利用されてよい。図６の実施形態には、外部グラフィックスデバイス６６０が例示されており、これは、ＩＣＨ６５０に、別の周辺デバイス６７０とともに連結されている別個のグラフィックスデバイスであってよい。
【００８９】
または、追加のまたは別のプロセッサが、システム６００に存在してもよい。たとえば追加のプロセッサ６１５は、プロセッサ６１０と同じ追加のプロセッサ、プロセッサ６１０とは異質の、または非対称の追加のプロセッサ、アクセラレータ（たとえばグラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性を含む様々な測定基準の利点において、物理リソース６１０、６１５の間には様々な差があってよい。これらの差により、プロセッサ６１０、６１５の間で非対称性及び異質性が生じる。少なくとも１つの実施形態では、様々なプロセッサ６１０、６１５が、同じダイパッケージに存在していてよい。
【００９０】
図７を参照すると、本発明の一実施形態の第２のシステム７００のブロック図が示されている。図７に示すように、マルチプロセッサシステム７００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト７５０を介して連結されている第１のプロセッサ７７０と第２のプロセッサ７８０を含む。プロセッサ７７０及び７８０のそれぞれは、プロセッサ６１０、６１５の１以上同様に、プロセッサ５００のあるバージョンであってよい。
【００９１】
２つのプロセッサ７７０、７８０のみが示されているが、本発明の範囲はこれに限定されない。他の実施形態では、１以上のさらなるプロセッサが１つのプロセッサ内に存在していてもよい。
【００９２】
プロセッサ７７０、７８０は、それぞれ統合されたメモリコントローラユニット７７２、７８２をそれぞれ含むものとして示されている。プロセッサ７７０は、さらに、バスコントローラユニットのポイントツーポイント（Ｐ−Ｐ）インタフェース７７６、７７８を含み、同様に、第２のプロセッサ７８０も、Ｐ−Ｐインタフェース７８６、７８８を含む。プロセッサ７７０、７８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介してＰ−Ｐインタフェース回路７７８、７８８を利用して情報を交換する。図７に示すように、ＩＭＣ７７２及び７８２は、プロセッサを、それぞれのメモリ（つまりメモリ７３２、メモリ７３４）に連結するが、これらメモリは、それぞれのプロセッサにローカルに取り付けられているメインメモリの一部であってよい。
【００９３】
プロセッサ７７０、７８０はそれぞれ、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を利用して個々にＰ−Ｐインタフェース７５２、７５４を介してチップセット７９０と情報を交換してよい。チップセット７９０は、さらに、高性能グラフィックスインタフェース７３９を介して高性能グラフィックス回路７３８と情報を交換してよい。
【００９４】
共有キャッシュ（不図示）は、いずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、且つ、Ｐ−Ｐインターコネクト経由でプロセッサと接続されており、いずれかのプロセッサまたは両方のプロセッサのローカルキャッシュ情報が、プロセッサが低電力モードにある場合には、共有キャッシュに格納されてよい。
【００９５】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に連結されてよい。一実施形態では、第１のバス７１６が、周辺コンポーネントインターコネクト（ＰＣＩ）バス、または、ＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第三世代Ｉ／Ｏインターコネクトバス等のバスであってよいが、本発明の範囲はこれに限定はされない。
【００９６】
図７に示すように、様々なＩ／Ｏデバイス７１４が、第１のバス７１６を第２のバス７２０に連結するバスブリッジ７１８とともに、第１のバス７１６に連結されていてよい。一実施形態では、第２のバス７２０が、低ピンカウント（ＬＰＣ）バスであってよい。一実施形態では、様々なデバイス（たとえば、キーボード及び／またはマウス７２２、通信デバイス７２７及び格納ユニット７２８（たとえば命令／コード及びデータ７３０を含みうるディスクドライブまたは他の大容量記憶デバイス））が第２のバス７２０に連結されていてよい。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に連結されていてよい。他のアーキテクチャも可能である。たとえば、図７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してよい。
【００９７】
図８を参照すると、本発明の一実施形態の第３のシステム８００のブロック図が示されている。図７及び図8のエレメントと同様のエレメントには、同様の参照番号が付されており、図８の他の側面を曖昧にしないために、図７の一定の側面を図８からは省いている。
【００９８】
図８は、プロセッサ８７０、８８０が、それぞれ統合されたメモリ及びＩ／Ｏ制御論理（「ＣＬ」）８７２、８８２を含んでよいことを示している。少なくとも１つの実施形態では、ＣＬ８７２、８８２は、図５及び図７を参照して上述したような統合されたメモリコントローラユニットを含んでよい。加えて、ＣＬ８７２、８８２は、さらにＩ／Ｏ制御論理を含んでよい。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に連結されていることを示しているばかりでなく、Ｉ／Ｏデバイス８１４も制御論理８７２、８８２に連結されていることも示している。レガシーＩ／Ｏデバイス８１５がチップセット８９０に連結されている。
【００９９】
図９を参照すると、本発明の一実施形態のＳｏＣ９００のブロック図が示されている。図５と同様のエレメントは、同様の参照番号を付されている。さらに、破線のボックスはより高度なＳｏＣの随意の特徴を示す。図９では、インターコネクトユニット９０２が、１以上のコア５０２Ａ−Ｎ及び共有キャッシュユニット５０６を含むアプリケーションプロセッサ９１０、システムエージェントユニット５１０、バスコントローラユニット５１６、統合されたメモリコントローラユニット５１４、統合されたグラフィックス論理５０８を含んでよい１以上のメディアプロセッサ９２０、静止画及び／または動画カメラ機能を提供する画像プロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ９２６、ビデオエンコード／デコードアクセラレーションを提供するビデオプロセッサ９２８、ＳＲＡＭユニット９３０、ＤＭＡ（直接メモリアクセス）ユニット９３２、及び、１以上の外部ディスプレイを連結させる表示ユニット９４０に連結されている。
【０１００】
図１０は、中央処理装置（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）を含むプロセッサを示しており、このプロセッサは、一実施形態による少なくとも１つの命令を実行してよい。一実施形態では、少なくとも１つの実施形態による演算を実行する命令がＣＰＵにより実行されてよい。別の実施形態では、命令はＧＰＵにより実行されてよい。また別の実施形態では、命令は、ＧＰＵとＣＰＵとによる演算の組み合わせによって実行されてもよい。一実施形態では、一実施形態の命令がＧＰＵで受信され、実行のためにデコードされてよい。しかし、デコードされた命令内の１以上の演算がＣＰＵにより実行されて、結果がＧＰＵに戻されて、命令の最終的な退避が行われてもよい。逆に一部の実施形態では、ＣＰＵが一次プロセッサとして機能して、ＧＰＵがコプロセッサとして機能してもよい。
【０１０１】
一部の実施形態では、高度な並列性及びスループットをもつプロセッサで実行されるほうが利点がある命令がＧＰＵにより実行され、深いパイプラインのアーキテクチャとすることで利点があるプロセッサの性能から利点が得られる命令が、ＣＰＵにより実行される。たとえばグラフィックス、科学的な用途、金融の用途、その他の並列ワークロードは、ＧＰＵの性能からの利点のほうが大きいので、ＧＰＵで実行されてよく、オペレーティングシステムのカーネルまたはアプリケーションコード等のより連続したアプリケーションは、ＣＰＵでの実行に適している。
【０１０２】
図１０では、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、画像プロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、表示デバイス１０４０、高精細マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、ＤＤＲ（dual data rate）コントローラ１０６０、セキュリティエンジン１０６５、Ｉ２Ｓ／Ｉ２Ｃ（Integrated Interchip Sound/Inter-Integrated Circuit）インタフェース１０７０を含む。他の論理及び回路（より多くのＣＰＵまたはＧＰＵ及び他の周辺インタフェースコントローラ）が図１０のプロセッサに含まれてもよい。
【０１０３】
少なくとも１つの実施形態の１以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表データにより実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「ＩＰコア」として知られており、有形の機械可読媒体（「テープ」）に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。たとえばＩＰコア（一例は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄが開発したＣｏｒｔｅｘ（登録商標）ファミリーのプロセッサ、及び、中国科学アカデミーのＩＣＴ（Institute of Computing Technology）が開発したＬｏｏｎｇｓｏｎ  ＩＰコア）が、Ｔｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓ，  Ｑｕａｌｃｏｍｍ，Ａｐｐｌｅ、またはＳａｍｓｕｎｇ等の様々な顧客またはライセンシーにライセンス供与または販売され、これら顧客またはライセンシーにより製造されるプロセッサに実装されてよい。
【０１０４】
図１１は、一実施形態のＩＰコアの開発を示すブロック図である。格納媒体１１３０は、シミュレーションソフトウェア１１２０及び／またはハードウェアまたはソフトウェアモデル１１１０を含む。一実施形態では、ＩＰコア設計を表すデータは、メモリ１１４０（たとえばハードディスク）、有線接続（たとえばインターネット）１１５０、または無線接続１１６０を介して、格納媒体１１３０に提供されてよい。シミュレーションツール及びモデルが生成するＩＰコア情報は、製造施設に送られてよく、そこで、第三者が少なくとも１つの実施形態の少なくとも１つの命令を実行するように製造されてよい。
【０１０５】
一部の実施形態では、１以上の命令が、第１のタイプまたはアーキテクチャ（たとえばｘ８６）に対応していてよく、異なるタイプまたはアーキテクチャ（たとえばＡＲＭ）のプロセッサで変換、エミュレーションされてよい。したがって、一実施形態の命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、その他のプロセッサのタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサのタイプで実行することができる。
【０１０６】
図１２は、第１のタイプの命令が、一実施形態の異なるタイプのプロセッサによりエミュレーションされる様子を示す。図１２では、プログラム１２０５が、一実施形態の命令と同じまたは実質的に同じ機能を実行することができるいくつかの命令を含んでいる。しかしプログラム１２０５の命令は、プロセッサ１２１５と異なる、またはプロセッサ１２１５に互換性を有さないタイプ及び／またはフォーマットであってよく、これは、プログラム１２０５の命令のタイプが、プロセッサ１２１５によりネーティブに実行できない可能性があることを示している。しかしエミュレーション論理１２１０の助けを受けて、プログラム１２０５の命令を、プロセッサ１２１５がネーティブに実行可能な命令に変換することができる。一実施形態では、エミュレーション論理は、ハードウェアに実装されていてよい。別の実施形態では、エミュレーション論理は、プログラム１２０５の命令のタイプを、プロセッサ１２１５がネーティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に実装されてよい。他の実施形態では、エミュレーション論理は、有形の機械可読媒体に格納されている固定関数（fixed function）またはプログラム可能ハードウェアの組み合わせである。一実施形態では、プロセッサがエミュレーション論理を含み、他の実施形態では、エミュレーション論理は、プロセッサの外部に存在しており、第三者が提供するものであってもよい。一実施形態では、プロセッサは、プロセッサに含まれる、または、プロセッサに関連付けられているマイクロコードまたはファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体に実装されているエミュレーション論理を搭載可能である。
【０１０７】
図１３は、本発明の実施形態において、ソフトウェア命令変換器を利用して、ソース命令セットのバイナリ命令を、対象命令セットのバイナリ命令に変換する例を示すブロック図である。この実施形態では、命令変換器は、ソフトウェア命令変換器だが、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図１３は、ハイレベル言語１３０２のプログラムが、ｘ８６コンピあら１３０４によりコンパイルされて、少なくともｘ８６命令セットコア１３１６をもつプロセッサでネーティブに実行することができるｘ８６バイナリコード１３０６を生成する。少なくとも１つのｘ８６命令セットコア１３１６を持つプロセッサは、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的な部分、または（２）少なくともｘ８６命令セットコアをもつＩｎｔｅｌプロセッサで実行することを目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換的に実行または処理することで、少なくとも１つのｘ８６命令セットコアをもつＩｎｔｅｌプロセッサと実質的に同じ機能を果たし、少なくともｘ８６命令セットコアをもつＩｎｔｅｌプロセッサと実質的に同じ結果を達成する任意のプロセッサのことを表している。ｘ８６コンパイラ１３０４は、さらなるリンク処理を行っても行わなくても、少なくとも１つのｘ８６命令セットコア１３１６をもつプロセッサで実行可能なｘ８６バイナリコード１３０６（たとえばオブジェクトコード）を生成することができるコンパイラのことを表す。同様に、図１３は、ハイレベル言語１３０２のプログラムが、別の命令セットコンパイラ１３０８を利用してコンパイルされて、少なくとも１つのｘ８６命令セットコア１３１４がないプロセッサ（たとえば、カリフォルニア州ＳｕｎｎｙｖａｌｅのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、及び／または、カリフォルニア州ＳｕｎｎｙｖａｌｅのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するＭＩＰＳ命令セットを実行するコアをもつプロセッサ）によりネーティブに実行することができる別の命令セットバイナリコード１３１０を生成してよい。命令変換器１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコア１３１４のないプロセッサによりネーティブに実行可能なコードに変換するために利用される。この変換されたコードは、これが可能な命令変換器は作成が難しいので、別の命令セットバイナリコード１３１０と同じである可能性が少ないが、変換されたコードは、汎用的なオペレーションを遂行し、別の命令セットの命令から構成されるだろう。したがい、命令変換器１３１２は、エミュレーション、シミュレーション、またはその他のプロセスによって、ｘ８６命令セットプロセッサまたはコアのないプロセッサまたはその他の電子デバイスにｘ８６バイナリコード１３０６を実行させるソフトウェア、ファームウェア、ハードウェア、またはこれらの命令を表す。
【０１０８】
図１４Ａは、条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を利用する一実施形態のプロセス１４０１のフロー図である。ここで開示するプロセス１４０１およびその他のプロセスは、または汎用マシンまたは専用マシンまたはこれら両方の組み合わせが実行可能な専用ハードウェアまたはソフトウェアまたはファームウェアオペレーションコードを含んでよいブロックを処理することで実行される。
【０１０９】
プロセス１４０１の処理ブロック１４１０では、カウントベクトルのエレメントをｎ個のカウント値（たとえば０，１，２，…，ｎ−１）に設定する。処理ブロック１４１５では、値がＩｓ＿Ｃｅｎｔｅｒ[ｉ：ｉ＋ｎ‐１]アレイからロードされ、決定ベクトルＣｎｔｒＴｂｌ（たとえばｔｉ、ｔｉ＋１、ｔｉ＋２、…、ｔｉ＋ｎ‐１）を得ることができる。処理ブロック１４２０では、ベクトルパッキングされた等しくないものを比較する命令（vector packed compare not-equal）（ＶＰＣＭＰＮＥＱ）命令を利用して決定ベクトルの値をゼロと比較して、決定ベクトルに従ってベクトルマスクを生成して、ベクトルマスクをマスクレジスタに格納する。処理ブロック１４２５では、カウントベクトルをソースベクトルとして指定するために、ソースパラメータをもつＳＩＭＤベクトル拡張命令（ＶＥＸＰＡＮＤ）の実行に呼応して、マスクレジスタを特定するマスクパラメータ、および、デスティネーションベクトルＣｎｔｒＴｂｌを特定するためのデスティネーションパラメータが、実行されたＳＩＭＤベクトル拡張命令に呼応して、それぞれがｍバイトの同じ可変パーティションサイズであるｎ個の連続したベクトルエレメントを保持するために、カウントベクトルからのデータをＣｎｔｒＴｂｌデスティネーションベクトルのマスキングされたベクトルエレメントにコピーすることなく、カウントベクトルの連続したベクトルエレメントからのデータを、ＣｎｔｒＴｂｌデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。そして処理ブロック１４３０で、ＣｎｔｒＴｂｌデスティネーションベクトルのエレメントを、メモリアレイＣｅｎｔｅｒ＿Ｔａｂｌｅ[ｉ：ｉ＋ｎ‐１]に、ベクトル化された条件付きループのこの繰り返しの結果として、格納する。処理ブロック１４３５で、ｎをループインデックスｉに追加して、処理ブロック１４４０で、処理が完了しているか否かを判断する。完了していれば、処理が処理ブロック１４９０で終了する。終了していなければ、処理は処理ブロック１４４５に進み、マスキングされていないエレメントに格納するカウント数ＮｕｍＣｏｕｎｔｓを、ポピュレート（population）カウント命令（ＰＯＰＣＮＴ）によってベクトルマスクから計算する。そして処理ブロック１４５０で、カウント数をベクトルＶＮｕｍＣｏｕｎｔｓにブロードキャストして、処理ブロック１４５５で、ベクトルパッキング追加命令（ＶＰＡＤＤ）を利用して、カウントベクトルのエレメントそれぞれに追加する。そして処理は、処理ブロック１４１５から繰り返される。
【０１１０】
図１４Ｂは、条件付きループのためのＳＩＭＤベクトル化機能を提供する命令を利用する別の一実施形態のプロセス１４０２のフロー図である。プロセス１４０２の処理ブロック１４１０では、カウントベクトルのエレメントをｎ個のカウント値（たとえば０，１，２，…，ｎ−１）に設定する。処理ブロック１４１５では、値がＩｓ＿Ｃｅｎｔｅｒ[ｉ：ｉ＋ｎ‐１]アレイからロードされ、決定ベクトルＣｎｔｒＴｂｌ（たとえばｔｉ、ｔｉ＋１、ｔｉ＋２、…、ｔｉ＋ｎ‐１）が得られる。処理ブロック１４２０では、ベクトルパッキングされた等しくないものを比較する命令（ＶＰＣＭＰＮＥＱ）命令を利用して決定ベクトルの値をゼロと比較して、決定ベクトルに従ってベクトルマスクを生成して、ベクトルマスクをマスクレジスタに格納する。処理ブロック１４２６では、カウントベクトルをソースベクトルとして指定するために、ソースパラメータをもつＳＩＭＤベクトル拡張命令（ＶＥＸＰＡＮＤ）の実行に呼応して、マスクレジスタを特定するマスクパラメータ、および、メモリアレイのデスティネーションベクトルの部分Ｃｅｎｔｅｒ＿Ｔａｂｌｅ[ｉ：ｉ＋ｎ‐１]を特定するためのデスティネーションパラメータが、実行されたＳＩＭＤベクトル拡張命令に呼応してｎ個の連続したベクトルエレメントを保持するために、カウントベクトルからのデータをＣｅｎｔｅｒ＿Ｔａｂｌｅデスティネーションベクトルのマスキングされたベクトルエレメントにコピーすることなく、Ｃｅｎｔｅｒ＿Ｔａｂｌｅデスティネーションベクトルのマスキングされていないベクトルエレメントに、カウンタベクトルの連続したベクトルエレメントからのデータが、ベクトル化された条件付きループのこの繰り返しの結果として、コピーされる。処理ブロック１４３５で、ｎをループインデックスｉに追加して、処理ブロック１４４０で、処理が完了しているか否かを判断する。完了していれば、処理が処理ブロック１４９０で終了する。終了していなければ、処理は処理ブロック１４４５に進み、マスキングされていないエレメントに格納するカウント数ＮｕｍＣｏｕｎｔｓを、ポピュレート（population）カウント命令（ＰＯＰＣＮＴ）によってベクトルマスクから計算する。そして処理ブロック１４５０で、カウント数をベクトルＶＮｕｍＣｏｕｎｔｓにブロードキャストして、処理ブロック１４５５で、ベクトルパッキング追加命令（ＶＰＡＤＤ）を利用して、カウントベクトルのエレメントそれぞれに追加する。そして処理は、処理ブロック１４１５から繰り返される。メモリのデスティネーションベクトルを特定するベクトル拡張命令の実施形態では、別個のマスキングされているベクトル書き込み演算の必要性がなく、条件付きループのベクトル化が、示されている命令および論理の利用によって達成され、パフォーマンスおよび命令のスループットが向上して、エネルギー消費量が低減する。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる（他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等）。
【０１１１】
図１５Ａは、条件付きループのためのＳＩＭＤベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセスの一実施形態のフロー図である。プロセス１５０２の処理ブロック１５１０で、ＳＩＭＤベクトル拡張命令を受信する。ＳＩＭＤベクトル拡張命令の実施形態は、ソースベクトルを特定するソース引数と、デスティネーションベクトルを特定するマスク引数とデスティネーション引数と、複数のｎ個の連続したベクトルエレメントおよびｎ個の関連する条件付きマスクエレメントをそれぞれ保持するマスクレジスタとを含んでよく、ｎは、ＳＩＭＤベクトル拡張命令に応じて変化させる。処理ブロック１５２０で、次のマスクフィールドをマスクレジスタから読み出して、次の条件付きマスクエレメントを処理ブロック１５３０でチェックして、これが第１の値（たとえば１またはゼロではない値）であるかを判断する。判断結果が肯定的であれば、処理は処理ブロック１５４０に進み、ソースベクトルの次の連続するベクトルエレメントからのデータを、現在のマスクフィールドに対応するデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。他方で、次の条件付きマスクエレメントが第１の値ではない（たとえばゼロであるような）場合には、処理は処理ブロック１５５０に進み、デスティネーションベクトルの次のベクトルエレメント（マスキングされている）には行わない。そして処理は処理ブロック１５６０に進み、処理が終了したかを判断し、終了した場合には、処理が処理ブロック１５９０で終了する。終了していない場合には、処理は処理ブロック１５２０から繰り返される。
【０１１２】
図１５Ｂは、条件付きループのためのＳＩＭＤベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセス１５０２の一実施形態のフロー図である。プロセス１５０２の処理ブロック１５１０で、ＳＩＭＤベクトル拡張命令を受信する。ＳＩＭＤベクトル拡張命令の実施形態は、ソースベクトルを特定するソース引数と、デスティネーションベクトルを特定するマスク引数とデスティネーション引数と、複数のｎ個の連続したベクトルエレメントおよびｎ個の関連する条件付きマスクエレメントをそれぞれ保持するマスクレジスタとを含んでよく、ここでも、ｎは、ＳＩＭＤベクトル拡張命令に応じて変化させる。処理ブロック１５２０で、次のマスクフィールドをマスクレジスタから読み出して、次の条件付きマスクエレメントを処理ブロック１５３０でチェックして、これが第１の値（たとえば１またはゼロではない値）であるかを判断する。判断結果が肯定的であれば、処理は処理ブロック１５４０に進み、ソースベクトルの次の連続するベクトルエレメントからのデータを、現在のマスクフィールドに対応するデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。他方で、次の条件付きマスクエレメントが第１の値ではない（たとえばゼロであるような）場合には、処理は処理ブロック１５５５に進み、所定の値（たとえばゼロ）を、現在のマスクフィールドに対応するデスティネーションベクトルのマスキングされているベクトルエレメントに書き込む。そして処理は処理ブロック１５６０に進み、処理が終了したかを判断し、終了した場合には、処理が処理ブロック１５９０で終了する。終了していない場合には、処理は処理ブロック１５２０から繰り返される。
【０１１３】
図１６は、条件付きループのためのＳＩＭＤベクトル化機能を提供するプロセスの一実施形態のフロー図を示す。プロセス１６０１の処理ブロック１６１０で、カウントのベクトルのエレメントをｎ個のカウント値（たとえば０、１、２、…、ｎ‐１）に初期化する。処理ブロック１６２０で、決定ベクトルをカウントテーブルについて、たとえばアレイＩｓ＿Ｃｅｎｔｅｒ[ｉ：ｉ＋ｎ‐１]から得る。処理ブロック１６３０で、決定ベクトルを予期値のベクトルに比較して、ベクトルマスクを生成してベクトルマスクをマスクレジスタに格納する。処理ブロック１６４０では、ＳＩＭＤベクトル拡張命令に呼応して（たとえば、ソースベクトルとしてカウントのベクトルを特定するためのソースパラメータと、マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトル部分を特定するためのデスティネーションパラメータとを有する）、カウントベクトル内の連続したベクトルエレメントのデータを拡張して、ベクトルマスクに従ってカウントテーブルデスティネーションベクトル部分のマスキングされていないベクトルエレメントに、カウントテーブルデスティネーションベクトルのマスキングされているベクトルエレメントにカウントベクトルからデータをコピーすることなく、コピーする。処理ブロック１６５０では、処理が完了しているか否かを判断する。完了していれば、処理が処理ブロック１６９０で終了する。終了していなければ、処理は処理ブロック１６６０に進み、肯定的な決定数をカウントして、処理ブロック１６７０で、カウントのベクトルの各エレメントに追加する。処理は次に、処理ブロック１６２０から繰り返される。
【０１１４】
条件付きループのベクトル化は、命令（たとえばＳＩＭＤベクトル拡張命令）とここで開示する論理との利用によって達成され、パフォーマンスおよび命令のスループットが向上して、エネルギー消費量が低減することがわかるだろう。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等が挙げられる。
【０１１５】
図１７は、条件付きループのためのＳＩＭＤベクトル化機能を提供するベクトル拡張命令を実行する装置１７０１の一実施形態を示す。装置１７０１の実施形態はさらに、ＳＩＭＤベクトル拡張機能を提供する命令を実行するパイプライン４００の一部であっても（たとえば実行ステージ４１６）、またはコア４９０の一部であっても（たとえば実行ユニット（１または複数）４６２）よい。装置１７０１の実施形態は、デコードステージ（たとえばデコード４０６）またはデコーダ（デコードユニット４４０）に連結されて、ＳＩＭＤベクトル拡張のための命令をデコードしてよく、こうすることで、条件付きループを効率的にベクトル化できる。デコードされた命令を受けると、１以上の実行ユニット（たとえば実行装置１７０１）の実施形態は、ソースベクトル１７１０のデータをデスティネーションベクトル１７６０のｎ個のベクトルエレメントのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトル１７１０のｎ個の連続したベクトルエレメントの一部のデータをデスティネーションベクトル１７６０のマスキングされていないベクトルエレメントにコピーして、ここでｎは、実行中のＳＩＭＤベクトル拡張命令に呼応して変化させる。
【０１１６】
たとえば装置１７０１の実施形態は、可変の複数のｎ個の可変サイズのデータフィールドを含み、可変の複数のｎ個の可変サイズのデータエレメントの値を格納するベクトルレジスタ（たとえば物理レジスタファイルユニット４５８）に連結されてよい。ＳＩＭＤベクトル拡張機能を提供する命令の実施形態は、メモリベクトルオペランドおよび／またはベクトルレジスタ（たとえば１７６０および／または１７１０）の各データフィールドについてＳＩＭＤベクトル拡張を実行するためのベクトル拡張演算およびデータフィールドサイズを特定して、ソースベクトル１７１０のデータをデスティネーションベクトル１７６０のマスキングされているベクトルエレメントにコピーすることなく、ソースベクトル１７１０のｎ個の連続したベクトルエレメントの一部のデータを宛先ベクトル１７６０のマスキングされたベクトルエレメントにコピーする。
【０１１７】
たとえば、ＳＩＭＤベクトル拡張機能を提供するための命令を実行するための装置１７０１の一実施形態が、ベクトルマスク１７２０の各データフィールドの値を読み出して、ソースベクトル１７１０の第１のサイズ（たとえば３２ビットまたは６４ビット）の連続したベクトルエレメントの最下位部分のデータをソースベクトル１７１０にコピーして、拡張マルチプレクサ論理（たとえばマスキングされていない拡張回路１７０３のマルチプレクサ論理１７３０−１７５０）を利用して拡張して、メモリベクトルオペランドまたはベクトルレジスタの一部の、デスティネーションベクトル１７６０のマスキングされていないベクトルエレメントに格納する。一実施形態では、デスティネーションベクトル１７６０のマスキングされているベクトルエレメントを、上書きしないものとして（たとえば、マスキングされている拡張回路１７７０のマルチプレクサ論理１７７０−１７７５によって制御論理１７７９により）選択したり、または、ゼロの値１７７８で上書きするものとして選択したりすることができる。ここで、ＳＩＭＤベクトル拡張命令の一部の実施形態は、メモリのデスティネーションベクトルを特定して、別個のマスキングされているベクトル書き込み（たとえばマスクストア）オペレーションをなくすこともできる。
【０１１８】
図１８は、条件付きループのためのＳＩＭＤベクトル化機能を提供するベクトル拡張命令を実行する装置の別の一実施形態を示す。装置１８０１は、実行エンジンユニット１８５０とメモリユニット１８７０とを含む。実行エンジンユニット１８５０は、１以上のスケジューラユニット１８５６のセットに連結されたリネーム／アロケータユニット１８５２を含む。スケジューラユニット１８５６は、任意の数のスケジューラを表しており、これには、リザベーションステーション、中央命令ウィンドウ等が含まれる。スケジューラユニット１８５６は、ベクトル物理レジスタ１８８４、マスク物理レジスタ１８８２、および、整数物理レジスタ１８８６を含む物理レジスタファイル（１または複数）に連結されている。物理レジスタファイルのそれぞれは、１以上の物理レジスタファイル（異なる物理レジスタファイルが、スカラー整数、スカラー浮動小数点、パッキングされた整数（packed integer）、パッキングされた浮動小数点（packed floating point）、ベクトル整数、ベクトル浮動小数点等を含む）、ステータス（たとえば、実行される次の命令のアドレスである命令ポインタ）等を格納する。
【０１１９】
装置１８０１の実行エンジンユニット１８５０は、ＳＩＭＤベクトル拡張命令からのインデックスセット１８３０とマスク物理レジスタ１８８２の対応するマスクエレメントのセット１８２０とを格納するためのインデックスアレイ１８８８を含む。一実施形態では、ワイドベクトル格納チャネル（たとえば１２８ビット、または２５６ビット、または５１２ビットまたはこれ以上）および６４ビットの整数スタックチャネルが、インデックス１８３０およびマスク１８２０エレメントのインデックスアレイ１８８８（たとえば１以上のマイクロオペレーションを利用して）への転送を促すために、再利用されてよい（repurposed）。実行エンジンユニット１８５０の一部の実施形態はさらに、格納データバッファ１８９９を含み、あるベクトル拡張オペレーションのためのＳＩＭＤベクトルレジスタ１８１０からのデータエレメント全てが、中間デスティネーションデータ１８６０に拡張され（装置１７０１に示すように）、一度に格納データバッファ１８９９の複数の個々のエレメント拡張位置に書き込まれてよい（一度のマイクロオペレーションを利用して）。格納データバッファ１８９９のこれら複数の個々の格納位置に格納されるデータエレメントは、次に、外部メモリにアクセスすることなく、より新しいロードオペレーションに転送されてよい。有限ステートマシン１８９２が、インデックスアレイ１８８８には動作可能に連結されており、インデックスセット１８３０および対応するマスク１８２０エレメントを利用してベクトル拡張オペレーションが促される。
【０１２０】
有限ステートマシン１８９２に呼応して、アドレス生成論理１８９４は、整数物理レジスタ１８８６が提供した少なくとも１つのベースアドレス１８４０と、第１の値を持つ少なくとも各対応するマスク１８２０についてのインデックスアレイ１８８８のインデックスセット１８３０のインデックス１８５０とから有効なアドレス１８０６を生成する。ストレージが格納データバッファ１８９９に割り当てられて、メモリアクセスユニット１８６４が対応するメモリ位置に格納するために生成された有効なアドレス１８０６に対応するデータ１８６０エレメントを保持する。生成される有効なアドレス１８０６に対応しているデータ１８６０エレメントが、バッファ格納データバッファ１８９９にコピーされる。メモリアクセスユニット１８６４は、アドレス生成論理１８９４に動作可能に連結されており、メモリユニット１８７０を介して、第１の値をもつ対応するマスク１８０７エレメントについてメモリ位置にアクセスするが、このメモリ位置は、有限ステートマシン１８９２に呼応して、データエレメント１８０９を格納するためにアドレス生成論理１８９４が生成する有効なアドレス１８０６に対応している。一実施形態では、格納データバッファ１８９９に格納されているデータ１８６０エレメントは、これらの有効なアドレス１８０６が、より新しいロード命令の有効なアドレスに対応している場合、連続した命令順序におけるより新しいロード命令を満足させるようにアクセスされる。有限ステートマシン１８９２は、次に、拡張したデータエレメント１８０９のメモリへの格納に成功すると、対応するマスク１８０２エレメントを、第１の値から第２の値に変更してよい。一部の実施形態では、ベクトル拡張オペレーションの完了は、マイクロオペレーションを実行することで成功することとしてよい。一部の実施形態では、有限ステートマシン１８９２の拡張されたデータ１８６０エレメントの対応する格納（たとえば失敗することなく）が完了すると、これらのマイクロオペレーションが再試行されてよい。
【０１２１】
一部の実施形態では、格納データバッファ１８９９に格納されているデータ１８６０エレメントが、最終的に、早い場合には（as early as）、生成された有効なアドレス１８０６に対応する格納データバッファ１８９９にストレージが割り当てられると、連続した命令順序で、より新たなロード命令を満たすために利用されてよい点を理解されたい。さらに、インデックスセット１８３０と、これに対応する、マスク物理レジスタ１８８２のマスク１８２０エレメントセットとをインデックスアレイ１８８８に送るよう数個のマイクロオペレーションのみをスケジュールして、ベクトル拡張オペレーションに呼応して、および／または、ベクトル拡張オペレーションをサポートするように、他の命令の実行と並列に、または同時に、データ１８６０を格納するように、これら数個のマイクロオペレーションを拡張することで、特にベクトル化された条件付きループについて命令スループットを向上させることができるので、パフォーマンスが上がり、電力使用量およびエネルギー消費量が低減する。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。このようなアプリケーションには、ほかにも、ネットワーク侵入検知、パターン認識、およびデータマイニング、その他の類似した種類のリアルタイム・オンラインクラスタリングアプリケーションなどがあるだろう。
【０１２２】
ここで説明するメカニズムは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの実装例の組み合わせで実装することができる。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性及び不揮発性メモリ及び／または記憶エレメントを含む）、少なくとも１つの入力デバイス、及び、少なとも１つの出力デバイスを含むプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１２３】
プログラムコードを入力命令に適用して、ここで記載する機能を実行して、出力情報を生成してよい。出力情報は、公知の方法で１以上の出力デバイスに適用してよい。本願においては、処理システムが、プロセッサ（たとえばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ）有する任意のシステムを含む。
【０１２４】
プログラムコードは、高レベルプロシージャまたはオブジェクト指向プログラミング言語に実装されて、処理システムと通信してよい。プログラムコードはさらに、望ましい場合にはアセンブリまたは機械言語で実装されてよい。実際、ここに記載するメカニズムは、特定のプログラミング言語に限定はされない。いずれにしても、言語はコンパイルされた言語、またはインタープリタ型言語であってよい。
【０１２５】
少なくとも１つの実施形態の１以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表命令により実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「ＩＰコア」として知られており、有形の機械可読媒体（「テープ」）に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。
【０１２６】
機械可読格納媒体は、限定ではないが、機械またはデバイスにより製造または構成される、非一時的、有形の構成の物品を含んでよい（これには、ハードディス等の記憶媒体、任意の他のタイプのディスクが含まれ、これらには、フロッピー（登録商標）ディスク、光学ディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ，及び光磁気ディスク、半導体デバイス（たとえばＲＯＭ、ＤＲＡＭ、ＳＲＡＭ等のＲＡＭ、ＥＰＲＯＭ、フラッシュメモリ、ＥＥＰＲＯＭ、磁気カードまたは光カード）、または任意の他のタイプの、電子命令を格納するのに適した媒体が含まれる。
【０１２７】
したがい、本発明の実施形態は、命令を含んだり、ここで記載する構造、回路、装置、プロセッサ、及び／またはシステムの特徴部を定義する設計データ（たとえばハードウェア記述言語（ＨＤＬ））を含んだりする非一時的、有形の機械可読媒体も含む。一部の実施形態は、プログラムプロダクトとも称される。
【０１２８】
場合によって、命令変換器は、命令を、ソース命令セットから対象命令セットに変換する。たとえば、命令変換器は、たとえば静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を利用する変換、変形（morph）、エミュレートすることもできるし、または、コアが処理する１以上の他の命令に命令を変換することもできる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令変換器は、プロセッサにあっても、プロセッサ外にあっても、一部がプロセッサにあって一部がプロセッサ外にあってもよい。
【０１２９】
少なくとも１つの実施形態による１以上の命令を実行する技術を開示してきた。一部の実施形態は、添付図面に示されているが、これら実施形態は広義の発明の例示であり、広義の発明を限定するものではない。また、本開示を読んだ当業者には様々な他の変形例が自明であることから、本発明は、示され説明される具体的な構成及び構造に限定はされない。成長が速く、将来の進歩を簡単に予測できない技術分野においては、開示する実施形態は、本開示の原理または添付請求項の範囲から逸脱せずに、構造及び詳細について容易に修正することができる。
【図１Ａ】
2014130580.tif 000007
【図１Ｂ】
2014130580.tif 000008
【図１Ｃ】
2014130580.tif 000009
【図２】
2014130580.tif 000010
【図３Ａ】
2014130580.tif 000011
【図３Ｂ】
2014130580.tif 000012
【図３Ｃ】
2014130580.tif 000013
【図３Ｄ】
2014130580.tif 000014
【図３Ｅ】
2014130580.tif 000015
【図３Ｆ】
2014130580.tif 000016
【図３Ｇ】
2014130580.tif 000017
【図３Ｈ】
2014130580.tif 000018
【図４Ａ】
2014130580.tif 000019
【図４Ｂ】
2014130580.tif 000020
【図５】
2014130580.tif 000021
【図６】
2014130580.tif 000022
【図７】
2014130580.tif 000023
【図８】
2014130580.tif 000024
【図９】
2014130580.tif 000025
【図１０】
2014130580.tif 000026
【図１１】
2014130580.tif 000027
【図１２】
2014130580.tif 000028
【図１３】
2014130580.tif 000029
【図１４Ａ】
2014130580.tif 000030
【図１４Ｂ】
2014130580.tif 000031
【図１５Ａ】
2014130580.tif 000032
【図１５Ｂ】
2014130580.tif 000033
【図１６】
2014130580.tif 000034
【図１７】
2014130580.tif 000035
【図１８】
2014130580.tif 000036
【外国語明細書】
2014130580000001.pdf