(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
第１の複数のデータフィールドを含む第１のレジスタであって、該第１のレジスタ内の該第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素用の開始アドレスからのストライド長の倍数に対応し、該第１のレジスタ内の該第１の複数のデータフィールドのそれぞれについて、第１の値は、前記対応するデータ要素が前記メモリからまだロードされていないことを示し、第２の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示す、第１のレジスタと、
前記第１のレジスタと、前記第１の複数のデータフィールドのうちの１つ又は複数に対応する一組のロード演算とを指定するとともに、単項、２項または３項である第２の単一命令複数データ（ＳＩＭＤ）演算を指定する第１の命令をデコードするデコードステージと、
１つ又は複数の実行ユニットであって、デコードされた前記第１の命令に応答して、
前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれの値を読み出し、
前記第１の値を有する前記第１のレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリからロードし、前記対応するデータ要素を、第２の複数のデータフィールドを有するとともに該第２の複数のデータフィールドの一部分が前記ロードされたデータ要素をストアする第２のレジスタ内にストアし、
前記第１のレジスタ内の対応する前記データフィールドの前記値を前記第１の値から前記第２の値に変更し、
前記第２の複数のデータフィールドの前記一部分にストアされた前記データ要素を用いて前記第２のＳＩＭＤ演算を実行し、対応する結果のデータ要素を生成する、
１つ又は複数の実行ユニットと、
を備える、プロセッサ。
【請求項２】
前記第１の値は１である、請求項１に記載のプロセッサ。
【請求項３】
前記第２の値は０である、請求項１または２に記載のプロセッサ。
【請求項４】
前記１つ又は複数の実行ユニットは、前記デコードされた第１の命令に応答して、前記第１のレジスタ内の前記第１の複数のデータフィールドを複製する、請求項１から３の何れか１項に記載のプロセッサ。
【請求項５】
前記１つ又は複数の実行ユニットは、前記デコードされた第１の命令に応答して、前記第１のレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該第１のレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する、請求項４に記載のプロセッサ。
【請求項６】
前記１つ又は複数の実行ユニットは、障害時、又は前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれが前記第２の値を有した後に、前記第１のレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する、請求項５に記載のプロセッサ。
【請求項７】
前記第２のＳＩＭＤ演算は単項である、請求項１から６の何れか１項に記載のプロセッサ。
【請求項８】
前記第２のＳＩＭＤ演算は２項である、請求項１から６の何れか１項に記載のプロセッサ。
【請求項９】
前記第２のレジスタ内にストアされる前記データ要素は、３２ビットデータ要素である、請求項１から８の何れか１項に記載のプロセッサ。
【請求項１０】
前記第２のレジスタ内にストアされる前記データ要素は、６４ビットデータ要素である、請求項１から８の何れか１項に記載のプロセッサ。
【請求項１１】
前記第２のレジスタは、５１２ビットベクトルレジスタである、請求項１から１０の何れか１項に記載のプロセッサ。
【請求項１２】
コンピューターに、
第１のレジスタ内の第１の複数のデータフィールドの各データフィールドの値を読み出す手順であって、前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応し、前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれについて、第１の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第２の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示す手順と、
前記第１の値を有する前記第１のレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリからロードする手順であって、前記対応するデータ要素を、第２の複数のデータフィールドを有するとともに該第２の複数のデータフィールドの一部分がロードされた前記対応するデータ要素をストアする第２のレジスタ内にストアし、前記第１のレジスタ内の対応する前記データフィールドの値を前記第１の値から前記第２の値に変更する手順と、
次に、前記第２の複数のデータフィールドの前記一部分にストアされた前記データ要素を用いて、単項、２項または３項である第２の単一命令複数データ（ＳＩＭＤ）演算を実行する手順であって、対応する結果のデータ要素を生成する手順と、
を実行させるためのプログラム。
【請求項１３】
前記第１のレジスタ内の前記第１の複数のデータフィールドを複製する手順、
を前記コンピューターに更に行わせる、請求項１２に記載のプログラム。
【請求項１４】
前記第１のレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該第１のレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する手順、
を前記コンピューターに更に行わせる、請求項１２または１３に記載のプログラム。
【請求項１５】
障害時、又は前記第１のレジスタ内の前記第１の複数のデータフィールドの各データフィールドが前記第２の値を有した後に、前記第１のレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する手順、
を前記コンピューターに更に行わせる、請求項１４に記載のプログラム。
【請求項１６】
前記第２のＳＩＭＤ演算は単項である、請求項１２から１５の何れか１項に記載のプログラム。
【請求項１７】
前記第２のＳＩＭＤ演算は２項である、請求項１２から１５の何れか１項に記載のプログラム。
【請求項１８】
前記第２のレジスタ内にストアされる前記データ要素は、３２ビットデータ要素である、請求項１２から１７の何れか１項に記載のプログラム。
【請求項１９】
前記第２のレジスタ内にストアされる前記データ要素は、６４ビットデータ要素である、請求項１２から１７の何れか１項に記載のプログラム。
【請求項２０】
前記第２のレジスタは、５１２ビットベクトルレジスタである、請求項１２から１９の何れか１項に記載のプログラム。
【請求項２１】
プロセッサであって、
一組のロード演算、及び、単項、２項または３項である第２の単一命令複数データ（ＳＩＭＤ）演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する第１のＳＩＭＤ命令をデコードするデコードステージと、
１つ又は複数の実行ユニットであって、デコードされた前記第１のＳＩＭＤ命令に応答して、
マスクレジスタ内の第１の複数のデータフィールドの各データフィールドの値を読み出し、前記マスクレジスタ内の前記第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の前記メモリアドレスからの前記ストライド長の倍数に対応し、前記マスクレジスタ内の前記第１の複数のデータフィールドのそれぞれについて、第１の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第２の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示し、
前記第１の値を有する前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリから前記デスティネーションレジスタ内の対応するデータフィールドにロードし、前記マスクレジスタ内の前記各データフィールドの値を前記第１の値から前記第２の値に変更し、
前記デスティネーションレジスタにロードされた前記データ要素と、前記オペランドレジスタ内の対応するデータ要素とを用いて前記第２のＳＩＭＤ演算を実行して、対応する結果のデータ要素を生成する１つ又は複数の実行ユニットと、
を備える、プロセッサ。
【請求項２２】
前記１つ又は複数の実行ユニットは、前記デコードされた第１のＳＩＭＤ命令に応答して、前記マスクレジスタ内の前記第１の複数のデータフィールドを複製する、請求項２１に記載のプロセッサ。
【請求項２３】
前記１つ又は複数の実行ユニットは、前記デコードされた第１のＳＩＭＤ命令に応答して、前記マスクレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該マスクレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する、請求項２２に記載のプロセッサ。
【請求項２４】
前記１つ又は複数の実行ユニットは、障害時、又は前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドが前記第２の値を有した後に、前記マスクレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する、請求項２３に記載のプロセッサ。
【請求項２５】
前記デスティネーションレジスタ内にロードされる前記データ要素は、３２ビットデータ要素である、請求項２１から２４の何れか１項に記載のプロセッサ。
【請求項２６】
前記デスティネーションレジスタ内にロードされる前記データ要素は、６４ビットデータ要素である、請求項２１から２４の何れか１項に記載のプロセッサ。
【請求項２７】
前記デスティネーションレジスタは、５１２ビットベクトルレジスタである、請求項２１から２６の何れか１項に記載のプロセッサ。
【請求項２８】
処理システムであって、
メモリと、
複数のプロセッサと
を備え、前記複数のプロセッサのそれぞれは、
一組のロード演算、及び、単項、２項または３項である第２の単一命令複数データ（ＳＩＭＤ）演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する第１のＳＩＭＤ命令をデコードするデコードステージと、
１つ又は複数の実行ユニットであって、デコードされた前記第１のＳＩＭＤ命令に応答して、
マスクレジスタ内の第１の複数のデータフィールドの各データフィールドの値を読み出し、前記マスクレジスタ内の前記第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の前記メモリアドレスからの前記ストライド長の倍数に対応し、前記マスクレジスタ内の各データフィールドについて、第１の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第２の値は、前記対応するデータ要素をロードする必要がないか、又は前記メモリから既にロードされていることを示し、
前記第１の値を有する前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリから前記デスティネーションレジスタ内の対応するデータフィールドにロードし、前記マスクレジスタ内の前記データフィールドの値を前記第１の値から前記第２の値に変更し、
前記デスティネーションレジスタにロードされた前記データ要素と、前記オペランドレジスタ内の対応するデータ要素とを用いて前記第２のＳＩＭＤ演算を実行して、対応する結果のデータ要素を生成する
１つ又は複数の実行ユニットと、
を備える処理システム。
【請求項２９】
前記１つ又は複数の実行ユニットは更に、前記第１のＳＩＭＤ命令に応答して、
前記マスクレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該マスクレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する、
請求項２８に記載の処理システム。
【請求項３０】
前記１つ又は複数の実行ユニットは更に、前記第１のＳＩＭＤ命令に応答して、
障害時、又は前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドが前記第２の値を有した後に、前記マスクレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する、
請求項２９に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、処理ロジック、マイクロプロセッサ、及びプロセッサ又は他の処理ロジックによって実行されると、論理演算、数学演算、又は他の関数演算を実行する関連付けられた命令セットアーキテクチャの分野に関する。特に、本開示は、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令及びロジックに関する。
【背景技術】
【０００２】
現代のプロセッサは、多くの場合、計算集約的ではあるが、例えば、単一命令複数データ（ＳＩＭＤ）ベクトルレジスタ等の様々なデータ記憶デバイスを用いた効率的な実装を通じて利用することができる高レベルのデータ並列性を与える演算を提供する命令を備えている。
【０００３】
アプリケーション又はソフトウェアコードをベクトル化することは、例えば、幅広の、すなわち大きな幅のベクトルアーキテクチャ等の特定のシステム又は命令セットアーキテクチャ上でそのアプリケーションをコンパイル、インストール、及び／又は実行することを含むことができる。幾つかのアプリケーションでは、例えば、ベクトル幅が増加すると（例えば、３次元（３Ｄ）画像レンダリング等の演算の場合）、メモリアクセスが、複雑、非一貫的、又は不連続となる場合がある。ベクトル化プロセスに用いられるメモリは、不連続な又は隣接しないメモリロケーションにストアされる場合がある。複数のアーキテクチャが、命令スループットを最小にするとともに、任意の算術演算を実行する前にレジスタ内にデータを配列するのに必要とされるクロックサイクル数を大幅に増加させる余分な命令を必要とする場合がある。
【０００４】
より幅広のベクトルへのメモリアクセス及びより幅広のベクトルからのデータの配列を改良するためのメカニズムは、他の非ローカル及び／又は不連続なメモリロケーションからのデータに対してローカルな連続したメモリアクセスを生成するための収集演算（gathering operation）及び散乱演算（scattering operation）を実装することを含むことができる。収集演算（gather operations）は、記憶デバイス内の一組の不連続又はランダムなメモリロケーションからデータを集め、これらの異種のデータを結合してパックド構造体にすることができる。散乱演算（scatter operations）は、パックド構造体内の要素を一組の不連続又はランダムなメモリロケーションに分散させることができる。他のメカニズムは、通常のストライドを用いてロード及びストアを行い、記憶デバイス内の一組の不連続なメモリロケーションからデータを集め、それらのデータを結合してパックド構造体にすること、又はパックド構造体内の要素を記憶デバイス内の一組の不連続なメモリロケーションに分散させることを含むことができる。これらのメモリロケーションのうちの幾つかは、キャッシュされない場合があるか、又は物理メモリからページアウトされている場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
これらの演算がページフォールト又は他の或る理由によって割り込みを受けた場合、幾つかのアーキテクチャでは、機械の状態が保存されない場合があり、これによって、演算が割り込みを受けた箇所で再開するのではなく、演算全体を繰り返すことが必要となる。繰り返されるいずれかの演算に関して、複数のメモリアクセスが必要とされる場合があるので、完了するには多くのクロックサイクルが必要とされる場合があり、そのために、後続のいずれの従属算術演算も必然的に待機しなければならない。そのような遅延は、ボトルネックを表し、このボトルネックは、例えば、幅広の、すなわち大きな幅のベクトルアーキテクチャから当該ボトルネックがない場合には予想される性能の利点を制限するおそれがある。
【０００６】
これまで、そのような性能を制限する問題及びボトルネックに対する可能性のある解決策は、十分に探求されてこなかった。
【０００７】
本発明は、添付図面の図に限定ではなく例として示されている。
【図面の簡単な説明】
【０００８】
【図１Ａ】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するシステムの１つの実施形態のブロック図である。
【図１Ｂ】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するシステムの別の実施形態のブロック図である。
【図１Ｃ】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するシステムの別の実施形態のブロック図である。
【図２】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するプロセッサの１つの実施形態のブロック図である。
【図３Ａ】１つの実施形態によるパックドデータタイプを示す図である。
【図３Ｂ】１つの実施形態によるパックドデータタイプを示す図である。
【図３Ｃ】１つの実施形態によるパックドデータタイプを示す図である。
【図３Ｄ】１つの実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令エンコーディングを示す図である。
【図３Ｅ】別の実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令エンコーディングを示す図である。
【図３Ｆ】別の実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令エンコーディングを示す図である。
【図３Ｇ】別の実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令エンコーディングを示す図である。
【図３Ｈ】別の実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令エンコーディングを示す図である。
【図４Ａ】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するプロセッサマイクロアーキテクチャの１つの実施形態の要素を示す図である。
【図４Ｂ】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するプロセッサマイクロアーキテクチャの別の実施形態の要素を示す図である。
【図５】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するプロセッサの１つの実施形態のブロック図である。
【図６】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するコンピューターシステムの１つの実施形態のブロック図である。
【図７】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するコンピューターシステムの別の実施形態のブロック図である。
【図８】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するコンピューターシステムの別の実施形態のブロック図である。
【図９】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するシステムオンチップの１つの実施形態のブロック図である。
【図１０】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行するプロセッサの一実施形態のブロック図である。
【図１１】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するＩＰコア開発システムの１つの実施形態のブロック図である。
【図１２】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するアーキテクチャエミュレーションシステムの１つの実施形態を示す図である。
【図１３】ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を変換するシステムの１つの実施形態を示す図である。
【図１４】ストライド機能を有するベクトルロード演算を提供するプロセスの１つの実施形態の流れ図である。
【図１５】ストライド機能を有するベクトルロード演算を提供するプロセスの別の実施形態の流れ図である。
【図１６】ストライド機能を有するベクトルストア演算を提供するプロセスの１つの実施形態の流れ図である。
【図１７】ストライド機能を有するベクトルストア演算を提供するプロセスの別の実施形態の流れ図である。
【発明を実施するための形態】
【０００９】
以下の説明は、プロセッサ、コンピューターシステム、又は他の処理装置内において又はこれらに関連して、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令及び処理ロジックを開示する。
【００１０】
幾つかの実施形態では、ロード、第２の演算、デスティネーションレジスタ、オペランドレジスタ、メモリアドレス、及びストライド長の組を指定する命令に応答して、実行ユニットは、マスクレジスタ内の値を読み出す。マスクレジスタ内のフィールドは、メモリ内のデータ要素へのメモリアドレスからのストライド長の倍数に対応する。第１のマスク値は、要素がメモリからロードされていないことを示し、第２の値は、要素をロードする必要がないか又は要素が既にロードされていることを示す。各データ要素が第１の値を有する場合、そのデータ要素は、メモリから対応するデスティネーションレジスタのロケーション内にロードされ、マスクレジスタ内の対応する値は、第２の値に変更される。障害時、又は全てのマスクレジスタフィールドが第２の値を有するとき、デスティネーションレジスタ及びオペランドレジスタ内の対応するデータを用いて第２の演算を実行し、結果を生成することができる。幾つかの代替の実施形態では、例えば、第１の演算に続くストア、デスティネーションレジスタ、オペランドレジスタ、メモリアドレス、及びストライド長の組を指定する命令に応答して、実行ユニットは、マスクレジスタを用いて又は用いることなく第１の演算を実行することができ、マスク値は、結果として得られた要素がメモリにストアされていないかどうか、又はその要素をメモリにストアする必要がないこと若しくはその要素がメモリに既にストアされていることを示すのに用いることができる。
【００１１】
以下の説明では、本発明の実施形態のより完全な理解を提供するために、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化（enablement）メカニズム等の多数の具体的な詳細が述べられる。しかしながら、本発明は、そのような具体的な詳細がなくても実施することができることが当業者によって認識されるであろう。加えて、幾つかのよく知られた構造、回路等は、本発明の実施形態を不必要に分かりにくくしないようにするために詳細には示されていない。
【００１２】
以下の実施形態は、プロセッサに関して説明されるが、他の実施形態は、他のタイプの集積回路及びロジックデバイスに適用可能である。本発明の実施形態の同様の技法及び教示内容は、より高いパイプラインスループット及び改善された性能から利益を受けることができる他のタイプの回路又は半導体デバイスに適用することができる。本発明の実施形態の教示内容は、データ操作を実行する任意のプロセッサ又は機械に適用可能である。しかしながら、本発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、又は１６ビットのデータ演算を実行するプロセッサ又は機械に限定されるものではなく、データの操作又は管理が実行される任意のプロセッサ及び機械に適用することができる。加えて、以下の説明は例を提供し、添付図面は、例示の目的で様々な例を示している。しかしながら、これらの例は、本発明の実施形態の全ての可能な実施態様を網羅的に列挙したものを提供するものではなく、単に本発明の実施形態の例を提供することを意図したものにすぎないので、限定する意味に解釈されるべきではない。
【００１３】
以下の例は、実行ユニット及びロジック回路に関する命令のハンドリング及び配信を説明しているが、本発明の他の実施形態は、機械によって実行されると、当該機械に、本発明の少なくとも１つの実施形態と一致した機能を実行させる機械可読有形媒体上にストアされたデータ又は命令として達成することができる。１つの実施形態では、本発明の実施形態に関連付けられた機能が、機械実行可能命令に具現化される。これらの命令は、命令を用いてプログラムされた汎用プロセッサ又は専用プロセッサに本発明のステップを実行させるのに用いることができる。本発明の実施形態は、本発明の実施形態による１つ又は複数の演算を実行するようにコンピューター（又は他の電子デバイス）をプログラムするのに用いることができる命令をストアしている機械又はコンピューター可読媒体を含むことができるコンピュータープログラム製品又はソフトウェアとして提供することができる。代替的に、本発明の実施形態のステップは、ステップを実行するための固定機能ロジックを含む特定のハードウェア構成要素によって、又はプログラムされたコンピューター構成要素及び固定機能ハードウェア構成要素の任意の組み合わせによって実行することができる。
【００１４】
本発明の実施形態を実行するようにロジックをプログラムするのに用いられる命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリ、又は他の記憶装置等の、システムのメモリ内にストアすることができる。さらに、命令は、ネットワークを介して又は他のコンピューター可読媒体によって配布することもできる。したがって、機械可読媒体は、機械（例えば、コンピューター）によって可読な形態で情報をストア又は伝送するための任意のメカニズムを含むことができ、これらに限定されないが、フロッピー（登録商標）ディスケット、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、及び光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、磁気カード若しくは光カード、フラッシュメモリ、又は電気、光、音響、若しくは他の形態の伝播信号（例えば、搬送波、赤外信号、デジタル信号等）を介したインターネットによる情報の伝送に用いられる有形の機械可読記憶装置を含む。したがって、コンピューター可読媒体は、機械（例えば、コンピューター）によって可読な形態で電子的な命令又は情報をストア又は伝送するのに好適な任意のタイプの有形の機械可読媒体を含む。
【００１５】
設計は、創出からシミュレーション、製造に至る様々なステージを通る場合がある。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションにおいて役立つように、ハードウェアは、ハードウェア記述言語又は別の機能記述言語を用いて表すことができる。加えて、ロジック及び／又はトランジスタゲートを有する回路レベルモデルを設計プロセスの或るステージにおいて作成することができる。さらに、或るステージにおけるほとんどの設計は、ハードウェアモデルにおける様々なデバイスの物理的配置を表すデータのレベルに達している。従来の半導体製造技法が用いられる場合、ハードウェアモデルを表すデータは、集積回路を作製するのに用いられるマスク用の種々のマスク層上の様々な特徴部の有無を指定するデータとすることができる。設計のいずれの表現においても、データは、任意の形態の機械可読媒体にストアすることができる。メモリ、又はディスク等の磁気記憶装置若しくは光記憶装置は、そのような情報を伝送するために変調又は別の方法で生成された光波又は電波を介して伝送される情報をストアする機械可読媒体とすることができる。コード又は設計を示すか又は搬送する電気搬送波が伝送されるとき、この電気信号のコピー、バッファリング、又は再送が実行される範囲において、新たなコピーが作成される。このように、通信プロバイダー又はネットワークプロバイダーは、本発明の実施形態の技法を具現化する、搬送波内にエンコーディングされた情報等のアーティクルを少なくとも一時的に有形の機械可読媒体上にストアすることができる。
【００１６】
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理及び実行するのに用いられる。命令には、即座に完了するものもあれば、完了するのに複数のクロックサイクルを要する可能性があるものもあるので、全ての命令が等しく作成されるとは限らない。命令のスループットが高速であるほど、プロセッサの全体的な性能はより良好となる。したがって、多くの命令が可能な限り高速に実行されるようにすることが有利である。しかしながら、或る特定の命令は、複雑さがより大きく、実行時間及びプロセッサリソースの観点でより多くを要する。例えば、浮動小数点命令、ロード／ストア演算、データムーブ等がある。
【００１７】
より多くのコンピューターシステムがインターネット、テキスト、及びマルチメディアアプリケーションにおいて用いられるにつれて、追加のプロセッササポートが徐々に導入されてきた。１つの実施形態では、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外ハンドリング、並びに外部の入力及び出力（Ｉ／Ｏ）を含む１つ又は複数のコンピューターアーキテクチャに関連付けることができる。
【００１８】
１つの実施形態では、命令セットアーキテクチャ（ＩＳＡ）は、１つ又は複数の命令セットを実装するのに用いられるプロセッサロジック及び回路を備える１つ又は複数のマイクロアーキテクチャによって実装することができる。したがって、異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットの少なくとも一部を共有することができる。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、及びカリフォルニア州サニーベールのAdvanced Micro Devices社からのプロセッサは、ｘ８６命令セット（より新しいバージョンとともに追加された幾つかの拡張を有する）のほぼ同一のバージョンを実装するが、異なる内部設計を有する。同様に、ARM Holdings社、MIPS社、又はそれらのライセンシー若しくは採用者等の他のプロセッサ開発会社によって設計されたプロセッサも、共通の命令セットの少なくとも一部を共有することができるが、異なるプロセッサ設計を備える場合がある。例えば、ＩＳＡの同じレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネーミングメカニズム（例えば、レジスタエイリアステーブル（ＲＡＴ）、リオーダーバッファー（ＲＯＢ）及びリタイアメントレジスタファイルの使用）を用いた１つ又は複数の動的にアロケートされる物理レジスタを含む新しい技法又はよく知られた技法を用いて異なるマイクロアーキテクチャにおいて異なる方法で実装される場合がある。１つの実施形態では、レジスタは、ソフトウェアプログラマーによってアドレス指定可能な場合もあるし、可能でない場合もある１つ若しくは複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含むことができる。
【００１９】
１つの実施形態では、命令は、１つ又は複数の命令フォーマットを含むことができる。１つの実施形態では、命令フォーマットは、特に、実行される演算と、その演算が実行される対象のオペランド（複数の場合もある）とを指定する様々なフィールド（ビット数、ビットのロケーション等）を示すことができる。幾つかの命令フォーマットは、命令テンプレート（又はサブフォーマット）によって更に分割して定義される場合がある。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義される場合があり、及び／又は異なって解釈される所与のフィールドを有するように定義される場合がある。１つの実施形態では、命令は、命令フォーマットを用いて（定義される場合、その命令フォーマットの命令テンプレートのうちの所与の１つに）表され、演算と、その演算が行われる対象のオペランドとを指定又は指示する。
【００２０】
科学アプリケーション、金融アプリケーション、自動ベクトル化汎用アプリケーション、ＲＭＳ（認識、マイニング、及び合成）アプリケーション、並びにビジュアルアプリケーション及びマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、ビデオ圧縮／伸長、音声認識アルゴリズム、及びオーディオ操作）は、多数のデータ項目に対して同じ演算を実行することが必要な場合がある。１つの実施形態では、単一命令複数データ（ＳＩＭＤ）は、プロセッサに、複数のデータ要素に対して演算を実行させるタイプの命令を指す。ＳＩＭＤ技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割することができるプロセッサにおいて用いることができる。分割されたデータ要素のそれぞれは、別々の値を表す。例えば、１つの実施形態では、６４ビットレジスタ内のビットを、４つの別々の１６ビットデータ要素を含むソースオペランドとして編成することができる。これらの１６ビットデータ要素のそれぞれは、別々の１６ビット値を表す。このタイプのデータは、「パックド」データタイプ又は「ベクトル」データタイプと呼ばれる場合があり、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。１つの実施形態では、パックドデータ項目又はベクトルは、単一のレジスタ内にストアされる一続きのパックドデータ要素とすることができ、パックドデータオペランド又はベクトルオペランドは、ＳＩＭＤ命令（又は「パックドデータ命令」若しくは「ベクトル命令」）のソースオペランド又はデスティネーションオペランドとすることができる。１つの実施形態では、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して実行されて、同じ又は異なる数のデータ要素を有するとともに同じ又は異なるデータ要素順序にある同じ又は異なるサイズのデスティネーションベクトルオペランド（結果ベクトルオペランドとも呼ばれる）を生成する単一のベクトル演算を指定する。
【００２１】
ｘ８６命令、ＭＭＸ（商標）命令、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、ＳＳＥ３命令、ＳＳＥ４．１命令、及びＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサと、ベクトル浮動小数点（ＶＦＰ）命令及び／又はＮＥＯＮ命令を含む命令セットを有するＡＲＭ  Ｃｏｒｔｅｘ（登録商標）ファミリーのプロセッサ等のＡＲＭプロセッサと、中国科学アカデミーのコンピューティング技術協会（ＩＣＴ）によって開発されたＬｏｏｎｇｓｏｎファミリーのプロセッサ等のＭＩＰＳプロセッサによって用いられるようなＳＩＭＤ技術は、アプリケーション性能の大幅な改善を可能にした（Ｃｏｒｅ（商標）及びＭＭＸ（商標）は、カリフォルニア州サンタクララのIntel Corporation社の登録商標又は商標である）。
【００２２】
１つの実施形態では、デスティネーションレジスタ／データ及びソースレジスタ／データは、対応するデータ又は演算のソース及びデスティネーションを表す一般的な用語である。幾つかの実施形態では、これらのレジスタ／データは、描写するもの以外の名称又は機能を有するレジスタ、メモリ、又は他の記憶エリアによって実施することができる。例えば、１つの実施形態では、「ＤＥＳＴ１」は、一時的な記憶レジスタ又は他の記憶エリアとすることができるのに対して、「ＳＲＣ１」及び「ＳＲＣ２」は、第１のソース記憶レジスタ及び第２のソース記憶レジスタ又は他の記憶エリアとすることができ、他のものについても同様である。他の実施形態では、ＳＲＣ記憶エリア及びＤＥＳＴ記憶エリアのうちの２つ以上のものは、同じ記憶エリア（例えば、ＳＩＭＤレジスタ）内の異なるデータ記憶要素に対応することができる。１つの実施形態では、ソースレジスタのうちの１つは、例えば、第１のソースデータ及び第２のソースデータに対して実行される演算の結果を、デスティネーションレジスタとしての機能を果たす、これらの２つのソースレジスタうちの一方にライトバックすることによって、デスティネーションレジスタとしても機能することができる。
【００２３】
図１Ａは、本発明の１つの実施形態による、命令を実行する実行ユニットを備えるプロセッサを用いて形成された一例示のコンピューターシステムのブロック図である。システム１００は、本明細書で説明する実施形態におけるように、本発明による、ロジックを備える実行ユニットを用いて、データを処理するためのアルゴリズムを実行するプロセッサ１０２等の構成要素を備える。システム１００は、カリフォルニア州サンタクララのIntel Corporation社から入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩマイクロプロセッサ、ＰＥＮＴＩＵＭ（登録商標）４マイクロプロセッサ、Ｘｅｏｎ（商標）マイクロプロセッサ、Ｉｔａｎｉｕｍ（登録商標）マイクロプロセッサ、ＸＳｃａｌｅ（商標）マイクロプロセッサ、及び／又はＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサに基づく処理システムを表すが、他のシステム（他のマイクロプロセッサを有するＰＣ、エンジニアリングワークステーション、セットトップボックス等を含む）も用いることができる。１つの実施形態では、サンプルシステム１００は、ワシントン州レドモンドのMicrosoft社から入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムの或るバージョンを実行することができるが、他のオペレーティングシステム（例えば、ＵＮＩＸ（登録商標）及びＬｉｎｕｘ（登録商標））、組み込みソフトウェア、及び／又はグラフィカルユーザーインターフェースも用いることができる。したがって、本発明の実施形態は、ハードウェア回路部及びソフトウェアのどの特定の組み合わせにも限定されるものではない。
【００２４】
実施形態は、コンピューターシステムに限定されるものではない。本発明の代替の実施形態は、ハンドヘルドデバイス及び組み込みアプリケーション等の他のデバイスにおいて用いることができる。ハンドヘルドデバイスの幾つかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）、及びハンドヘルドＰＣが含まれる。組み込みアプリケーションは、マイクロコントローラー、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピューター（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、又は少なくとも１つの実施形態による１つ若しくは複数の命令を実行することができる他の任意のシステムを含むことができる。
【００２５】
図１Ａは、本発明の１つの実施形態による少なくとも１つの命令を実行するアルゴリズを実行する１つ又は複数の実行ユニット１０８を備えるプロセッサ１０２を用いて形成されたコンピューターシステム１００のブロック図である。１つの実施形態は、単一プロセッサのデスクトップシステム又はサーバーシステムに関して説明することができるが、代替の実施形態をマルチプロセッサシステムに含めることができる。システム１００は、「ハブ」システムアーキテクチャの一例である。コンピューターシステム１００は、データ信号を処理するプロセッサ１０２を備える。プロセッサ１０２は、複合命令セットコンピューター（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は例えばデジタル信号プロセッサ等の他の任意のプロセッサデバイスとすることができる。プロセッサ１０２は、プロセッサ１０２とシステム１００内の他の構成要素との間でデータ信号を伝送することができるプロセッサバス１１０に結合される。システム１００の要素は、当該技術に精通している者によく知られているそれらの要素の通常の機能を実行する。
【００２６】
１つの実施形態では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を備える。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。代替的に、別の実施形態では、キャッシュメモリは、プロセッサ１０２の外部に存在することができる。他の実施形態は、特定の実施態様及びニーズに応じて内部キャッシュ及び外部キャッシュの双方の組み合わせも備えることができる。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインターレジスタを含む様々なレジスタに異なるタイプのデータをストアすることができる。
【００２７】
整数演算及び浮動小数点演算を実行するロジックを備える実行ユニット１０８も、プロセッサ１０２に存在する。プロセッサ１０２は、或る特定のマクロ命令用のマイクロコード（μコード）をストアするマイクロコードＲＯＭも備える。１つの実施形態について、実行ユニット１０８は、パックド命令セット１０９をハンドリングするロジックを備える。パックド命令セット１０９を、それらの命令を実行する関連回路部とともに汎用プロセッサ１０２の命令セットに含めることによって、多くのマルチメディアアプリケーションによって用いられる演算は、汎用プロセッサ１０２内のパックドデータを用いて実行することができる。したがって、パックドデータに対して演算を実行するためにプロセッサのデータバスの全幅を用いることによって、多くのマルチメディアアプリケーションを高速化することができるとともに、より効率的に実行することができる。これによって、１つのデータ要素に対して一時に１つ又は複数の演算を実行するためにプロセッサのデータバスにわたってより小さなデータの単位を転送する必要がなくなる。
【００２８】
実行ユニット１０８の代替の実施形態は、マイクロコントローラー、組み込みプロセッサ、グラフィックスデバイス、ＤＳＰ、及び他のタイプのロジック回路において用いことができる。システム１００はメモリ１２０を備える。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、又は他のメモリデバイスとすることができる。メモリ１２０は、プロセッサ１０２が実行することができる命令及び／又はデータ信号によって表されるデータをストアすることができる。
【００２９】
システムロジックチップ１１６は、プロセッサバス１１０及びメモリ１２０に結合されている。図示した実施形態におけるシステムロジックチップ１１６は、メモリコントローラーハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６に通信することができる。ＭＣＨ１１６は、命令及びデータのストア、並びにグラフィックスコマンド、グラフィックスデータ、及びグラフィックステクスチャのストアのためのメモリ１２０への高帯域幅メモリパス１１８を提供する。ＭＣＨ１１６は、システム１００内のプロセッサ１０２、メモリ１２０、及び他の構成要素の間でデータ信号を誘導するとともに、プロセッサバス１１０、メモリ１２０、及びシステムＩ／Ｏ１２２の間でデータ信号をブリッジするためのものである。幾つかの実施形態では、システムロジックチップ１１６は、グラフィックスコントローラー１１２に結合するためのグラフィックスポートを提供することができる。ＭＣＨ１１６は、メモリインターフェース１１８を通じてメモリ１２０に結合されている。グラフィックスカード１１２は、アクセラレーテッドグラフィックスポート（ＡＧＰ）相互接続１１４を通じてＭＣＨ１１６に結合されている。
【００３０】
システム１００は、独自のハブインターフェースバス１２２を用いて、ＭＣＨ１１６をＩ／Ｏコントローラーハブ（ＩＣＨ）１３０に結合する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して幾つかのＩ／Ｏデバイスに直接接続を提供する。このローカルＩ／Ｏバスは、周辺装置をメモリ１２０、チップセット、及びプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。幾つかの例は、オーディオコントローラー、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信機１２６、データ記憶装置１２４、ユーザー入力インターフェース及びキーボードインターフェースを含むレガシーＩ／Ｏコントローラー、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、並びにネットワークコントローラー１３４である。データ記憶デバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、又は他のマスストレージデバイスを含むことができる。
【００３１】
システムの別の実施形態では、１つの実施形態による命令は、システムオンチップとともに用いることができる。システムオンチップの１つの実施形態は、プロセッサ及びメモリから構成される。１つのそのようなシステム用のメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステム構成要素と同じダイ上に配置することができる。加えて、メモリコントローラー又はグラフィックスコントローラー等の他のロジックブロックも、システムオンチップ上に配置することができる。
【００３２】
図１Ｂは、本発明の１つの実施形態の原理を実施するデータ処理システム１４０を示している。本明細書において説明する実施形態は、本発明の実施形態の範囲から逸脱することなく代替の処理システムとともに用いることができることが当業者によって容易に認識されるであろう。
【００３３】
コンピューターシステム１４０は、１つの実施形態による少なくとも１つの命令を実行することができる処理コア１５９を備える。１つの実施形態では、処理コア１５９は、任意のタイプのアーキテクチャの処理ユニットを表す。この任意のタイプのアーキテクチャには、ＣＩＳＣタイプ、ＲＩＳＣタイプ、又はＶＬＩＷタイプのアーキテクチャが含まれるが、これらに限定されるものではない。処理コア１５９は、１つ又は複数のプロセス技術における製造に好適な場合もあり、機械可読媒体上で十分詳細に表現されることによって上記製造を容易にするのに好適な場合もある。
【００３４】
処理コア１５９は、実行ユニット１４２、一組のレジスタファイル（複数の場合もある）１４５、及びデコーダー１４４を備える。処理コア１５９は、本発明の実施形態の理解には必要でない追加の回路部（図示せず）も備える。実行ユニット１４２は、処理コア１５９によって受信された命令を実行するのに用いられる。実行ユニット１４２は、通常のプロセッサ命令を実行することに加えて、パックドデータフォーマットに対して演算を実行するためのパックド命令セット１４３内の命令を実行することができる。パックド命令セット１４３は、本発明の実施形態を実行するための命令と、他のパックド命令とを含む。実行ユニット１４２は、内部バスによってレジスタファイル１４５に結合されている。レジスタファイル１４５は、データを含む情報をストアするための処理コア１５９上の記憶エリアを表す。前述したように、パックドデータをストアするのに用いられる記憶エリアは重要ではないことが理解される。実行ユニット１４２は、デコーダー１４４に結合されている。デコーダー１４４は、処理コア１５９によって受信された命令を制御信号及び／又はマイクロコードエントリーポイントにデコードするのに用いられる。これらの制御信号及び／又はマイクロコードエントリーポイントに応答して、実行ユニット１４２は適切な演算を実行する。１つの実施形態では、デコーダーは、命令の演算コードを解釈するのに用いられる。この演算コードは、命令内に示された対応するデータに対してどのような演算を実行すべきかを示す。
【００３５】
処理コア１５９は、様々な他のシステムデバイスと通信するためのバス１４１と結合されている。これらの様々な他のシステムデバイスは、例えば、同期式ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御部１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）制御部１４７、バーストフラッシュメモリインターフェース１４８、パーソナルコンピューターメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御部１４９、液晶ディスプレイ（ＬＣＤ）制御部１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラー１５１、及び代替のバスマスターインターフェース１５２を含むことができるが、これらに限定されるものではない。１つの実施形態では、データ処理システム１４０は、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４も備えることができる。そのようなＩ／Ｏデバイスは、例えば、ユニバーサル非同期受信機／送信機（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、及びＩ／Ｏ拡張インターフェース１５８を含むことができるが、これらに限定されるものではない。
【００３６】
データ処理システム１４０の１つの実施形態は、移動通信、ネットワーク通信及び／又は無線通信と、テキスト文字列比較演算を含むＳＩＭＤ演算を実行することができる処理コア１５９とを提供する。処理コア１５９は、様々なオーディオアルゴリズム、ビデオアルゴリズム、画像化アルゴリズム、及び通信アルゴリズムを用いてプログラムすることができる。これらのアルゴリズムには、ウォルシュアダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、及びそれらのそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコード動き推定又はビデオデコード動き補償等の圧縮／伸長技法と、パルス符号変調（ＰＣＭ）等の変調／復調（ＭＯＤＥＭ）機能とが含まれる。
【００３７】
図１Ｃは、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を実行することができるデータ処理システムの別の代替の実施形態を示している。１つの代替の実施形態によれば、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、及び入力／出力システム１６８を備えることができる。入力／出力システム１６８は、任意選択で無線インターフェース１６９に結合することができる。ＳＩＭＤコプロセッサ１６１は、１つの実施形態による命令を含む演算を実行することができる。処理コア１７０は、１つ又は複数のプロセス技術における製造に好適な場合があり、機械可読媒体上で十分詳細に表現されることによって、処理コア１７０を備えるデータ処理システム１６０の全て又は一部の製造を容易にするのに好適な場合がある。
【００３８】
１つの実施形態について、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２及び一組のレジスタファイル（複数の場合もある）１６４を備える。メインプロセッサ１６６の１つの実施形態は、実行ユニット１６２による実行のために１つの実施形態による命令を含む命令セット１６３の命令を認識するデコーダー１６５を備える。代替の実施形態について、ＳＩＭＤコプロセッサ１６１は、命令セット１６３の命令をデコードするデコーダーの少なくとも一部１６５Ｂも備える。処理コア１７０は、本発明の実施形態の理解に必要でない追加の回路部（図示せず）も備える。
【００３９】
動作中、メインプロセッサ１６６は、キャッシュメモリ１６７及び入力／出力システム１６８とのインタラクションを含む一般的なタイプのデータ処理演算を制御するデータ処理命令のストリームを実行する。このデータ処理命令のストリーム内には、ＳＩＭＤコプロセッサ命令が組み込まれている。メインプロセッサ１６６のデコーダー１６５は、これらのＳＩＭＤコプロセッサ命令を、アタッチされたＳＩＭＤコプロセッサ１６１によって実行されるべきタイプであるとして認識する。したがって、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（又はＳＩＭＤコプロセッサ命令を表す制御信号）をコプロセッサバス１７１上に発行する。このコプロセッサバスから、これらのＳＩＭＤコプロセッサ命令は、任意のアタッチされたＳＩＭＤコプロセッサによって受信される。この場合、ＳＩＭＤコプロセッサ１６１は、当該ＳＩＭＤコプロセッサ用の任意の受信されたＳＩＭＤコプロセッサ命令を受け取って実行する。
【００４０】
データは、ＳＩＭＤコプロセッサ命令による処理のために、無線インターフェース１６９を介して受信することができる。１つの例として、音声通信をデジタル信号の形で受信することができ、このデジタル信号は、ＳＩＭＤコプロセッサ命令によって処理されて、音声通信を表すデジタルオーディオサンプルを再生成することができる。別の例として、圧縮されたオーディオ及び／又はビデオを、デジタルビットストリームの形で受信することができ、このデジタルビットストリームは、ＳＩＭＤコプロセッサ命令によって処理されて、デジタルオーディオサンプル及び／又は動画ビデオフレームを再生成することができる。処理コア１７０の１つの実施形態について、メインプロセッサ１６６及びＳＩＭＤコプロセッサ１６１は、実行ユニット１６２と、一組のレジスタファイル（複数の場合もある）１６４と、１つの実施形態による命令を含む命令セット１６３の命令を認識するデコーダー１６５とを備える単一の処理コア１７０内に統合される。
【００４１】
図２は、本発明の１つの実施形態による命令を実行するロジック回路を備えるプロセッサ２００のマイクロアーキテクチャのブロック図である。幾つかの実施形態では、１つの実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズと、単精度及び倍精度の整数及び浮動小数点のデータタイプ等のデータタイプとを有するデータ要素に対して演算するように実施することができる。１つの実施形態では、インオーダーフロントエンド２０１は、実行される命令をフェッチし、それらの命令をプロセッサパイプラインにおいて後に用いられるように準備するプロセッサ２００の部分である。このフロントエンド２０１は、幾つかのユニットを備えることができる。１つの実施形態では、命令プリフェッチャー２２６がメモリから命令をフェッチし、これらの命令を命令デコーダー２２８に供給し、次に、この命令デコーダーが、これらの命令をデコード又は解釈する。例えば、１つの実施形態では、デコーダーは、受信された命令を、機械が実行することができる「マイクロ命令」又は「マイクロ演算」（マイクロｏｐ又はμｏｐとも呼ばれる）と呼ばれる１つ又は複数の演算にデコードする。他の実施形態では、デコーダーは、命令を演算コード及び対応するデータと、１つの実施形態による演算を実行するマイクロアーキテクチャによって用いられる制御フィールドとにパース（ｐａｒｓｅ）する。１つの実施形態では、トレースキャッシュ２３０は、デコードされたμｏｐを取り出し、それらを実行のためにμｏｐキュー２３４内のプログラム順序付きシーケンス又はトレースにアセンブルする。トレースキャッシュ２３０が複合命令に遭遇すると、マイクロコードＲＯＭ２３２は、演算を完了するのに必要とされるμｏｐを提供する。
【００４２】
命令の中には、単一のマイクロｏｐに変換されるものもあれば、全演算を完了するのに数個のマイクロｏｐを必要とするものもある。１つの実施形態では、命令を完了するのに５つ以上のマイクロｏｐが必要とされる場合、デコーダー２２８は、マイクロコードＲＯＭ２３２にアクセスして命令を行う。１つの実施形態について、命令は、命令デコーダー２２８における処理のために少数のマイクロｏｐにデコードすることができる。別の実施形態では、複数のマイクロｏｐが演算を達成するのに必要とされる場合、命令をマイクロコードＲＯＭ２３２内にストアすることができる。トレースキャッシュ２３０は、エントリーポイントプログラマブルロジックアレイ（ＰＬＡ）を参照して、１つの実施形態による１つ又は複数の命令を完了するマイクロコードシーケンスをマイクロコードＲＯＭ２３２から読み出すための正しいマイクロ命令ポインターを決定する。マイクロコードＲＯＭ２３２が、命令用のマイクロｏｐのシーケンス化を終了した後、機械のフロントエンド２０１は、トレースキャッシュ２３０からのマイクロｏｐのフェッチを再開する。
【００４３】
アウトオブオーダー実行エンジン２０３は、命令が実行用に準備される箇所である。アウトオブオーダー実行ロジックは、命令が実行のためにパイプラインを進んでスケジューリングされるとき、命令の流れの円滑化及びリオーダ―を行って性能を最適化する複数のバッファーを有する。アロケーターロジックは、各μｏｐが実行に必要とする機械バッファー及びリソースをアロケートする。レジスタリネーミングロジックは、ロジックレジスタをリネームしてレジスタファイル内のエントリー上に置く。アロケーターは、命令スケジューラの前に、メモリ演算用に１つと非メモリ演算用に１つとの２つのμｏｐキューのうちの一方に各μｏｐのエントリーもアロケートする。上記命令スケジューラは、メモリスケジューラ、高速スケジューラ２０２、低速／一般浮動小数点スケジューラ２０４、及び単純浮動小数点スケジューラ２０６である。μｏｐスケジューラ２０２、２０４、２０６は、μｏｐが実行の準備がいつできるのかを、それらの従属する入力レジスタオペランドソースの準備ができていることと、μｏｐがそれらの演算を完了する必要がある実行リソースが利用可能であることとに基づいて判断する。１つの実施形態の高速スケジューラ２０２は、メインクロックサイクルの各２分の１においてスケジューリングすることができる一方、他のスケジューラは、メインプロセッサクロックサイクルごとに１回のみスケジューリングすることができる。これらのスケジューラは、μｏｐを実行のためにスケジューリングするディスパッチポートをアービトレートする。
【００４４】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間に位置している。それぞれ整数演算用及び浮動小数点演算用の別々のレジスタファイル２０８、２１０が存在する。１つの実施形態の各レジスタファイル２０８、２１０は、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を従属する新たなμｏｐにバイパス又は転送することができるバイパスネットワークも備える。整数レジスタファイル２０８及び浮動小数点レジスタファイル２１０は、互いとのデータの通信も行うことができる。１つの実施形態について、整数レジスタファイル２０８は、下位３２ビットのデータ用の１つのレジスタファイルと、上位３２ビットのデータ用の第２のレジスタファイルとの２つの別々のレジスタファイルに分割される。１つの実施形態の浮動小数点レジスタファイル２１０は、１２８ビット幅エントリーを有する。なぜならば、浮動小数点命令は、通常、幅が６４ビット〜１２８ビットのオペランドを有するからである。
【００４５】
実行ブロック２１１は、命令が実際に実行される実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、マイクロ命令が実行に必要とする整数データオペランド値及び浮動小数点データオペランド値をストアするレジスタファイル２０８、２１０を備える。１つの実施形態のプロセッサ２００は、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点ムーブユニット２２４の複数の実行ユニットから構成される。１つの実施形態について、浮動小数点実行ブロック２２２、２２４は、浮動小数点演算、ＭＭＸ演算、ＳＩＭＤ演算、ＳＳＥ演算、又は他の演算を実行する。１つの実施形態の浮動小数点ＡＬＵ２２２は、除算マイクロｏｐ、平方根マイクロｏｐ、及び剰余マイクロｏｐを実行する６４ビット対６４ビットの浮動小数点除算器を備える。本発明の実施形態について、浮動小数点値を伴う命令は、浮動小数点ハードウェアを用いてハンドリングすることができる。１つの実施形態では、ＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８に進む。１つの実施形態の高速ＡＬＵ２１６、２１８は、クロックサイクルの２分の１の実効レイテンシーを有する高速演算を実行することができる。１つの実施形態について、ほとんどの複雑な整数演算は、低速ＡＬＵ２２０に進む。なぜならば、低速ＡＬＵ２２０は、乗算器、シフト、フラグロジック、及び分岐処理等の長いレイテンシータイプの演算用の整数実行ハードウェアを備えるからである。メモリロード／ストア演算は、ＡＧＵ２１２、２１４によって実行される。１つの実施形態について、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドに対する整数演算の実行に関して説明される。代替の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６ビット、３２ビット、１２８ビット、２５６ビット等を含む様々なデータビットをサポートするように実装することができる。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有するオペランドの範囲をサポートするように実装することができる。１つの実施形態について、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ命令及びマルチメディア命令とともに１２８ビット幅のパックドデータオペランドに対して演算を行うことができる。
【００４６】
１つの実施形態では、μｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に従属演算をディスパッチする。μｏｐは、推測でスケジューリングされてプロセッサ２００において実行されるので、プロセッサ２００は、メモリミスをハンドリングするロジックも備える。データロードがデータキャッシュにおいて失敗した場合、一時的に正しくないデータをスケジューラに残した従属演算がパイプラインにおいてインフライトである可能性がある。リプレイメカニズムが、正しくないデータを用いる命令を追跡して再実行する。従属演算のみをリプレイする必要があり、独立演算は完了することが可能である。プロセッサの１つの実施形態のスケジューラ及びリプレイメカニズムは、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を捕捉するようにも設計される。
【００４７】
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサ記憶ロケーションを指すことができる。換言すれば、レジスタは、（プログラマーからの視点から）プロセッサの外部から使用可能なものとすることができる。しかしながら、一実施形態のレジスタは、意味が特定のタイプの回路に限定されるべきではない。逆に、一実施形態のレジスタは、データをストア及び提供することができるとともに、本明細書において説明する機能を実行することができる。本明細書において説明するレジスタは、専用の物理レジスタ、レジスタリネーミングを用いた動的にアロケートされた物理レジスタ、専用の物理レジスタ及び動的にアロケートされた物理レジスタの組み合わせ等の任意の数の異なる技法を用いてプロセッサ内の回路部によって実装することができる。１つの実施形態では、整数レジスタは、３２ビット整数データをストアする。１つの実施形態のレジスタファイルは、パックドデータ用の８つのマルチメディアＳＩＭＤレジスタも含む。以下の議論のために、レジスタは、カリフォルニア州サンタクララのIntel Corporation社からのＭＭＸ技術を用いて可能にされるマイクロプロセッサ内の６４ビット幅ＭＭＸ（商標）レジスタ（場合によっては、「ｍｍ」レジスタとも呼ばれる）等の、パックドデータを保持するように設計されたデータレジスタであると理解される。整数及び浮動小数点の双方の形で利用可能なこれらのＭＭＸレジスタは、ＳＩＭＤ命令及びＳＳＥ命令に付随するパックドデータ要素を用いて動作することができる。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、又はこれ以降の技術（「ＳＳＥｘ」と総称される）に関係した１２８ビット幅ＸＭＭレジスタも、そのようなパックドデータオペランドを保持するのに用いることができる。１つの実施形態では、パックドデータ及び整数データをストアする際に、レジスタは、２つのデータタイプを区別する必要はない。１つの実施形態では、整数及び浮動小数点は、同じレジスタファイル又は異なるレジスタファイルのいずれかに含まれる。さらに、１つの実施形態では、浮動小数点データ及び整数データは、異なるレジスタ又は同じレジスタにストアすることができる。
【００４８】
次の図の例では、複数のデータオペランドが説明される。図３Ａは、本発明の１つの実施形態によるマルチメディアレジスタ内の様々なパックドデータタイプ表現を示している。図３Ａは、パックドバイト３１０、パックドワード３２０、及び１２８ビット幅オペランド用のパックドダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示している。この例のパックドバイトフォーマット３１０は、１２８ビット長であり、１６個のパックドバイトデータ要素を含む。バイトは、ここでは、データの８ビットとして定義されている。各バイトデータ要素の情報は、バイト０用のビット７〜ビット０、バイト１用のビット１５〜ビット８、バイト２用のビット２３〜ビット１６、及び最後にバイト１５用のビット１２０〜ビット１２７にストアされる。したがって、利用可能な全てのビットがレジスタ内で用いられる。この記憶配置は、プロセッサの記憶効率を高める。その上、１６個のデータ要素がアクセスされる場合、１つの演算を１６個のデータ要素に対して並列に実行することができる。
【００４９】
一般に、データ要素は、同じ長さの他のデータ要素とともに単一のレジスタ又はメモリロケーションにストアされる個々のデータ片である。ＳＳＥｘ技術に関係したパックドデータシーケンスでは、ＸＭＭレジスタにストアされるデータ要素の数は、１２８ビットを個々のデータ要素のビット長によって除算したものである。同様に、ＭＭＸ及びＳＳＥ技術に関係したパックドデータシーケンスでは、ＭＭＸレジスタにストアされるデータ要素の数は、６４ビットを個々のデータ要素のビット長によって除算したものである。図３Ａに示すデータタイプは、１２８ビット長であるが、本発明の実施形態は、６４ビット幅、２５６ビット幅、５１２ビット幅、又は他のサイズのオペランドを用いて演算することもできる。この例のパックドワードフォーマット３２０は、１２８ビット長であり、８つのパックドワードデータ要素を含む。各パックドワードは、１６ビットの情報を含む。図３Ａのパックドダブルワードフォーマット３３０は、１２８ビット長であり、４つのパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は、３２ビットの情報を含む。パックドクワッドワードは、１２８ビット長であり、２つのパックドクワッドワードデータ要素を含む。
【００５０】
図３Ｂは、代替のレジスタ内データ記憶フォーマットを示している。各パックドデータは、２つ以上の独立データ要素を含むことができる。パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３の３つのパックドデータフォーマットが示されている。パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３の１つの実施形態は、固定小数点データ要素を含む。代替の実施形態について、パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３のうちの１つ又は複数は、浮動小数点データ要素を含むことができる。パックドハーフ３４１の１つの代替の実施形態は、８つの１６ビットデータ要素を含む１２８ビット長である。パックドシングル３４２の１つの実施形態は、１２８ビット長であり、４つの３２ビットデータ要素を含む。パックドダブル３４３の１つの実施形態は、１２８ビット長であり、２つの６４ビットデータ要素を含む。そのようなパックドデータフォーマットは、他のレジスタ長、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビット、又はそれよりも長いビットに更に拡張することができることが認識されるであろう。
【００５１】
図３Ｃは、本発明の１つの実施形態によるマルチメディアレジスタにおける様々な符号付きパックドデータタイプ及び符号なしパックドデータタイプ表現を示している。符号なしパックドバイト表現３４４は、ＳＩＭＤレジスタ内で記憶している符号なしパックドバイトを示している。各バイトデータ要素の情報は、バイト０用のビット７〜ビット０、バイト１用のビット１５〜ビット８、バイト２用のビット２３〜ビット１６等、及び最後にバイト１５用のビット１２０〜ビット１２７にストアされる。したがって、利用可能な全てのビットがレジスタ内で用いられる。この記憶配置は、プロセッサの記憶効率を高める。その上、１６個のデータ要素がアクセスされる場合、１つの演算を１６個のデータ要素に対して並列形式で実行することができる。符号付きパックドバイト表現３４５は、記憶している符号付きパックドバイトを示している。各バイトのデータ要素の第８ビットが符号指示子であることに留意されたい。符号なしパックドワード表現３４６は、ワード７〜ワード０がＳＩＭＤレジスタにどのようにストアされているのかを示している。符号付きパックドワード表現３４７は、符号なしパックドワードレジスタ内表現３４６と類似している。各ワードのデータ要素の第１６ビットが符号指示子であることに留意されたい。符号なしパックドダブルワード表現３４８は、ダブルワードデータ要素がどのようにストアされているのかを示している。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードレジスタ内表現３４８と類似している。必要な符号ビットは、各ダブルワードデータ要素の第３２ビットであることに留意されたい。
【００５２】
図３Ｄは、３２ビット以上と、ワールドワイドウェブ（ｗｗｗ）のintel.com/products/processor/manuals/においてカリフォルニア州サンタクララのIntel Corporation社から入手可能な「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）及び変位バイトによって部分的に指定された、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリのアドレス指定が可能になる。
【００５４】
次に図３Ｆを参照すると、幾つかの代替の実施形態では、６４ビット（又は１２８ビット、若しくは２５６ビット、若しくは５１２ビット、若しくはそれよりも多くのビット）の単一命令複数データ（ＳＩＭＤ）算術演算を、コプロセッサデータ処理（ＣＤＰ）命令を通じて実行することができる。演算エンコーディング（演算コード）フォーマット３８０は、ＣＤＰ演算コードフィールド３８２及び３８９を有する１つのそのようなＣＤＰ命令を示している。このタイプのＣＤＰ命令、代替の実施形態の場合ＣＤＰ演算は、フィールド３８３、３８４、３８７、及び３８８のうちの１つ又は複数によってエンコーディングすることができる。最大で２つのソースオペランド識別子３８５及び３９０並びに１つのデスティネーションオペランド識別子３８６を含む、命令当たり最大で３つのオペランドロケーションを識別することができる。コプロセッサの１つの実施形態は、８ビット値、１６ビット値、３２ビット値、及び６４ビット値に対して演算することができる。１つの実施形態について、命令は、整数データ要素に対して実行される。幾つかの実施形態では、命令は、条件フィールド３８１を用いて条件付きで実行することができる。幾つかの実施形態について、ソースデータサイズをフィールド３８３によってエンコーディングすることができる。幾つかの実施形態では、ゼロ（Ｚ）、負（Ｎ）、キャリー（Ｃ）、及びオーバーフロー（Ｖ）の検出をＳＩＭＤフィールド上で行うことができる。幾つかの命令については、飽和のタイプをフィールド３８４によってエンコーディングすることができる。
【００５５】
次に図３Ｇを参照すると、ワールドワイドウェブ（ｗｗｗ）のintel.com/products/processor/manuals/においてカリフォルニア州サンタクララのIntel Corporation社から入手可能な「Intel(R) Advanced Vector Extensions Programming Reference」に記載されているタイプの演算コードフォーマットと一致する別の実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する別の代替の演算エンコーディング（演算コード）フォーマット３９７の図が示されている。
【００５６】
オリジナルのｘ８６命令セットは、その存在が最初の「演算コード」バイトから判明している付加バイトに含まれるアドレスシラブル及び即値オペランドの様々なフォーマットを有する１バイト演算コードを提供していた。加えて、演算コードに対する変更子（命令の前に配置しなければならないので、プレフィックスと呼ばれる）として保存される或る特定のバイト値が存在していた。２５６個の演算コードバイト（これらの特殊なプレフィックス値を含む）のオリジナルのパレットが使い尽くされると、単一のバイトが新たな一組の２５６個の演算コードへのエスケープとして専用化される。ベクトル命令（例えば、ＳＩＭＤ）が追加されたので、より多くの演算コードの必要性が生じ、「２バイト」演算コードマップも、プレフィックスを用いることによって拡張されても不十分となった。このため、２バイトに、オプションのプレフィックスを識別子として加えたものを用いる新たな命令が付加マップに追加された。
【００５７】
加えて、６４ビットモードで追加のレジスタの使用を容易にするために、プレフィックスと演算コード（及び演算コードを決定するのに必要な任意のエスケープバイト）との間に追加のプレフィックス（「ＲＥＸ」と呼ばれる）を用いることができる。１つの実施形態では、ＲＥＸは、６４ビットモードでの追加のレジスタの使用を示す４つの「ペイロード」ビットを有することができる。他の実施形態では、ＲＥＸは、４ビットよりも少ないビット又は４ビットよりも多くのビットを有することができる。少なくとも１つの命令セットの一般的なフォーマット（一般にフォーマット３６０及び／又はフォーマット３７０と一致する）は、一般的に以下によって示される。
［プレフィックス］［ｒｅｘ］エスケープ［エスケープ２］演算コード  ｍｏｄｒｍ（等）
【００５８】
演算コードフォーマット３９７は、演算コードフォーマット３７０と一致し、ほとんどの他の一般に用いられるレガシー命令プレフィックスバイト及びエスケープコードの代わりに用いられるオプションのＶＥＸプレフィックスバイト３９１（１つの実施形態ではＣ４ｈｅｘから開始する）を含む。例えば、以下は、２つのフィールドを用いて命令をエンコーディングする一実施形態を示している。これは、第２のエスケープコードがオリジナルの命令に存在するとき、又はＲＥＸフィールド内のエキストラビット（例えば、ＸＢフィールド及びＷフィールド）を用いる必要があるときに用いることができる。以下に示す実施形態では、レガシーエスケープが新たなエスケープ値によって表され、レガシープレフィックスが「ペイロード」バイトの一部として十分に圧縮され、レガシープレフィックスが再利用され、今後の拡張用に利用可能であり、第２のエスケープコードが、今後のマップ又は特徴空間が利用可能である「マップ」フィールドに圧縮され、新たな特徴（例えば、増大されたベクトル長及び追加のソースレジスタ指定子）が追加される。
【数１】
0005933011.tif 000002
【００５９】
１つの実施形態による命令は、フィールド３９１及び３９２のうちの１つ又は複数によってエンコーディングすることができる。フィールド３９１をソースオペランド識別子３７４及び３７５と組み合わせるとともに、オプションのスケールインデックスベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５と組み合わせることによって、命令当たり最大で４つのオペランドロケーションを識別することができる。１つの実施形態について、ＶＥＸプレフィックスバイト３９１は、３２ビット若しくは６４ビットのソースオペランド及びデスティネーションオペランド及び／又は１２８ビット若しくは２５６ビットのＳＩＭＤレジスタオペランド若しくはメモリオペランドを識別するのに用いることができる。１つの実施形態について、演算コードフォーマット３９７によって提供される機能は、演算コードフォーマット３７０と冗長である場合があるのに対して、他の実施形態では、それらは異なる。演算コードフォーマット３７０及び３９７によって、ＭＯＤフィールド３７３、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５によって部分的に指定された、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリのアドレス指定が可能になる。
【００６０】
次に図３Ｈを参照すると、別の実施形態によるストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する別の代替の演算エンコーディング（演算コード）フォーマット３９８が示されている。演算コードフォーマット３９８は、演算コードフォーマット３７０及び３９７と一致し、ほとんどの他の一般に用いられるレガシー命令プレフィックスバイト及びエスケープコードの代わりに用いられて追加の機能を提供するオプションのＥＶＥＸプレフィックスバイト３９６（１つの実施形態では６２ｈｅｘから開始する）を含む。１つの実施形態による命令は、フィールド３９６及び３９２のうちの１つ又は複数によってエンコーディングすることができる。フィールド３９６をソースオペランド識別子３７４及び３７５と組み合わせるとともに、オプションのスケールインデックスベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５と組み合わせることによって、命令当たり最大で４つのオペランドロケーション及びマスクを識別することができる。１つの実施形態について、ＥＶＥＸプレフィックスバイト３９６は、３２ビット若しくは６４ビットのソースオペランド及びデスティネーションオペランド及び／又は１２８ビット、２５６ビット、若しくは５１２ビットのＳＩＭＤレジスタオペランド若しくはメモリオペランドを識別するのに用いることができる。１つの実施形態について、演算コードフォーマット３９８によって提供される機能は、演算コードフォーマット３７０又は３９７と冗長である場合があるのに対して、他の実施形態では、それらは異なる。演算コードフォーマット３９８によって、ＭＯＤフィールド３７３、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５によって部分的に指定された、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリの、マスクを用いたアドレス指定が可能になる。少なくとも１つの命令セットの一般的なフォーマット（一般にフォーマット３６０及び／又はフォーマット３７０と一致する）は、一般的に以下によって示される。
ｅｖｅｘｌ  ＲＸＢｍｍｍｍｍ  ＷｖｗＬｐｐ  ｅｖｅｘ４  演算コード  ｍｏｄｒｍ［ｓｉｂ］［ｄｉｓｐ］［ｉｍｍ］
【００６１】
１つの実施形態について、ＥＶＥＸフォーマット３９８に従ってエンコーディングされる命令は、例えば、ユーザー構成可能マスクレジスタ、又は追加のオペランド、又は１２８ビットベクトルレジスタ、２５６ビットベクトルレジスタ、若しくは５１２ビットベクトルレジスタ、若しくはより多くのレジスタの中から選択したもの等、追加の新たな特徴とともに、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するのに用いることができる追加の「ペイロード」ビットを有することができる。
【００６２】
例えば、暗黙的なマスクとともに、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するのにＶＥＸフォーマット３９７を用いることができる場合、又は追加の演算がタイプ変換等の単項である場合、追加の演算が、追加のオペランドを必要とする加算又は乗算等の２項である場合、ＥＶＥＸフォーマット３９８は、明示的なユーザー構成可能マスクとともに、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するのに用いることができる。追加の演算が３項である場合、ＥＶＥＸフォーマット３９８の幾つかの実施形態は、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算と、暗黙的な完了マスクとを提供するのに用いることもできる。加えて、ＶＥＸフォーマット３９７が、１２８ビット又は２５６ビットのベクトルレジスタ上でストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するのに用いることができる場合、ＥＶＥＸフォーマット３９８は、１２８ビット、２５６ビット、５１２ビット、又はそれよりも大きな（又はそれよりも小さな）ベクトルレジスタ上でストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供するのに用いることができる。したがって、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令は、追加の演算用の命令と、繰り返されるストライドを用いたデータのロード又はストア等のメモリ演算用の命令との間の従属関係をなくすことができる。
【００６３】
ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する例示の命令を、以下の例によって示す。
【００６４】
【表１】
0005933011.tif 000003
【００６５】
図４Ａは、本発明の少なくとも１つの実施形態によるインオーダーパイプライン及びレジスタリネーミングステージアウトオブオーダー発行／実行パイプラインを示すブロック図である。図４Ｂは、本発明の少なくとも１つの実施形態によるプロセッサに含まれるインオーダーアーキテクチャコア及びレジスタリネーミングロジックアウトオブオーダー発行／実行ロジックを示すブロック図である。図４Ａ内の実線のボックスは、インオーダーパイプラインを示す一方、破線のボックスは、レジスタリネーミングアウトオブオーダー発行／実行パイプラインを示す。同様に、図４Ｂ内の実線のボックスは、インオーダーアーキテクチャロジックを示す一方、破線のボックスは、レジスタリネーミングロジック及びアウトオブオーダー発行／実行ロジックを示す。
【００６６】
図４Ａにおいて、プロセッサパイプライン４００は、フェッチステージ４０２、レングスデコードステージ４０４、デコードステージ４０６、アロケーションステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチ又は発行としても知られている）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外ハンドリングステージ４２２、及びコミットステージ４２４を備える。
【００６７】
図４Ｂにおいて、矢印は、２つ以上のユニット間の結合を示し、矢印の方向は、それらのユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に結合されたフロントエンドユニット４３０を備えるプロセッサコア４９０を示し、これらのフロントエンドユニット４３０及び実行エンジンユニット４５０の双方は、メモリユニット４７０に結合されている。
【００６８】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッド若しくは代替のコアタイプとすることができる。更に別の選択肢として、コア４９０は、例えば、ネットワークコア若しくは通信コア、圧縮エンジン、グラフィックスコア等の専用コアとすることができる。
【００６９】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に結合された分岐予測ユニット４３２を備える。この命令キャッシュユニット４３４は、命令変換ルックアサイドバッファー（ＴＬＢ）４３６に結合されている。このＴＬＢ４３６は、命令フェッチユニット４３８に結合されている。この命令フェッチユニット４３８は、デコードユニット４４０に結合されている。デコードユニット、すなわちデコーダーは、命令をデコードし、出力として１つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を生成することができる。これらは、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映しているか、又はオリジナルの命令から導出される。デコーダーは、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）等が含まれるが、これらに限定されるものではない。命令キャッシュユニット４３４は、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に更に結合されている。デコードユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケーターユニット４５２に結合されている。
【００７０】
実行エンジンユニット４５０は、リタイアメントユニット４５４に結合されたリネーム／アロケーターユニット４５２と、一組の１つ又は複数のスケジューラユニット４５６を備える。スケジューラユニット（複数の場合もある）４５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット（複数の場合もある）４５６は、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８に結合されている。物理レジスタファイル（複数の場合もある）ユニット４５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等の１つ又は複数の異なるデータタイプ、ステータス（例えば、実行される次の命令のアドレスである命令ポインター）等をストアする。レジスタリネーミング及びアウトオブオーダー実行を（例えば、リオーダ―バッファー（複数の場合もある）及びリタイアメントレジスタファイル（複数の場合もある）を用いるか、フューチャーファイル（複数の場合もある）、履歴バッファー（複数の場合もある）、及びリタイアメントレジスタファイル（複数の場合もある）を用いるか、レジスタマップ及びレジスタのプールを用いる等して）実施することができる様々な方法を示すために、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８は、リタイアメントユニット４５４によってオーバーラップされている。一般に、アーキテクチャレジスタは、プロセッサの外部又はプログラマーの視点から可視である。レジスタは、任意の既知の特定のタイプの回路に限定されるものではない。様々な異なるタイプのレジスタは、本明細書において説明するようなデータをストア及び提供することができる限り、好適である。好適なレジスタの例には、専用の物理レジスタ、レジスタリネーミングを用いて動的にアロケートされる物理レジスタ、専用の物理レジスタ及び動的にアロケートされる物理レジスタの組み合わせ等が含まれるが、これらに限定されるものではない。リタイアメントユニット４５４及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８は、実行クラスター（複数の場合もある）４６０に結合されている。実行クラスター（複数の場合もある）４６０は、一組の１つ又は複数の実行ユニット４６２及び一組の１つ又は複数のメモリアクセスユニット４６４を備える。実行ユニット４６２は、様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して様々な演算（例えば、シフト、加算、減算、乗算）を実行することができる。実施形態の中には、特定の機能又は機能のセットに専用の複数の実行ユニットを備えることができるものもあれば、全ての機能を全て実行する１つのみの実行ユニット又は複数の実行ユニットを備えることができるものもある。スケジューラユニット（複数の場合もある）４５６、物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８、及び実行クラスター（複数の場合もある）４６０は、場合によっては複数のものとして示される。なぜならば、或る特定の実施形態は、或る特定のタイプのデータ／演算用に別々のパイプライン（例えば、スカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はそれぞれがそれ自身のスケジューラユニット、物理レジスタファイル（複数の場合もある）ユニット、及び／又は実行クラスターを有するメモリアクセスパイプライン、並びに別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット（複数の場合もある）４６４を有する或る特定の実施形態が実施される）を作製するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの１つ又は複数は、アウトオブオーダー発行／実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
【００７１】
一組のメモリアクセスユニット４６４は、メモリユニット４７０に結合されている。このメモリユニット４７０は、レベル２（Ｌ２）キャッシュユニット４７６に結合されたデータキャッシュユニット４７４に結合されたデータＴＬＢユニット４７２を備える。１つの例示の実施形態では、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを備えることができ、これらのそれぞれは、メモリユニット４７０内のデータＴＬＢユニット４７２に結合されている。Ｌ２キャッシュユニット４７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【００７２】
例として、例示のレジスタリネーミングアウトオブオーダー発行／実行コアアーキテクチャは、次のようにパイプライン４００を実施することができる。１）命令フェッチ４３８が、フェッチステージ４０２及びレングスデコードステージ４０４を実行し、２）デコードユニット４４０がデコードステージ４０６を実行し、３）リネーム／アロケーターユニット４５２がアロケーションステージ４０８及びリネーミングステージ４１０を実行し、４）スケジューラユニット（複数の場合もある）４５６がスケジュールステージ４１２を実行し、５）物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８及びメモリユニット４７０がレジスタ読み出し／メモリ読み出しステージ４１４を実行し、実行クラスター４６０が実行ステージ４１６を実行し、６）メモリユニット４７０及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８がライトバック／メモリ書き込みステージ４１８を実行し、７）様々なユニットが例外ハンドリングステージ４２２に関与することができ、８）リタイアメントユニット４５４及び物理レジスタファイル（複数の場合もある）ユニット（複数の場合もある）４５８がコミットステージ４２４を実行する。
【００７３】
コア４９０は、１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンとともに追加された幾つかの拡張を有する）、カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セット、カリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加拡張を有する）をサポートすることができる。
【００７４】
コアは、マルチスレッディング（並列の２以上の組の演算又はスレッドを実行する）をサポートすることができ、タイムスライスされたマルチスレッディング、同時のマルチスレッディング（単一の物理コアが、当該物理コアが同時にマルチスレッディングしているスレッドのそれぞれについて論理コアを提供する）、又はそれらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）ハイパースレッディング技術におけるようなタイムスライスされたフェッチ及びデコード並びにその後の同時のマルチスレッディング）を含む様々な方法でそうすることができることが理解されるべきである。
【００７５】
レジスタリネーミングは、アウトオブオーダー実行に関して説明されるが、レジスタリネーミングは、インオーダーアーキテクチャにおいて用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット４３４／データキャッシュユニット４７４及び共有されたＬ２キャッシュユニット４７６も備えるが、代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、又は複数レベルの内部キャッシュ等の、命令及びデータの双方の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、コア及び／又はプロセッサの外部にある内部キャッシュ及び外部キャッシュの組み合わせを備えることができる。代替的に、キャッシュの全てを、コア及び／又はプロセッサの外部にすることができる。
【００７６】
図５は、本発明の実施形態による、統合メモリコントローラー及びグラフィックスを有するシングルコアプロセッサ及びマルチコアプロセッサ５００のブロック図である。図５における実線のボックスは、シングルコア５０２Ａ、システムエージェント５１０、一組の１つ又は複数のバスコントローラーユニット５１６を有するプロセッサ５００を示している一方、破線のボックスのオプションの追加は、複数のコア５０２Ａ〜５０２Ｎ、システムエージェントユニット５１０内の一組の１つ又は複数の統合メモリコントローラーユニット（複数の場合もある）５１４、及び統合グラフィックスロジック５０８を有する代替のプロセッサ５００を示している。
【００７７】
メモリ階層構造は、一組の統合メモリコントローラーユニット５１４に結合された、コア内の１つ又は複数のレベルのキャッシュと、一組の１つ若しくは複数の共有キャッシュユニット５０６、及び外部メモリ（図示せず）とを含む。この一組の共有キャッシュユニット５０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュ等の１つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はそれらの組み合わせを含むことができる。１つの実施形態では、リングベースの相互接続ユニット５１２が、統合グラフィックスロジック５０８、一組の共有キャッシュユニット５０６、及びシステムエージェントユニット５１０を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。
【００７８】
幾つかの実施形態では、コア５０２Ａ〜５０２Ｎのうちの１つ又は複数は、マルチスレッディングすることができる。システムエージェント５１０は、コア５０２Ａ〜５０２Ｎを協調及び動作させる構成要素を備える。システムエージェントユニット５１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを備えることができる。ＰＣＵは、コア５０２Ａ〜５０２Ｎ及び統合グラフィックスロジック５０８の電力状態を調整するのに必要とされるロジック及び構成要素とすることもできるし、それらを備えることもできる。ディスプレイユニットは、１つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
【００７９】
コア５０２Ａ〜５０２Ｎは、アーキテクチャ及び／又は命令セットに関して、同種とすることもできるし、異種とすることもできる。例えば、コア５０２Ａ〜５０２Ｎのうちの幾つかはインオーダーとすることができ、他のものはアウトオブオーダーである。別の例として、コア５０２Ａ〜５０２Ｎのうちの２つ以上は、同じ命令セットを実行することができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行することができる。
【００８０】
プロセッサは、カリフォルニア州サンタクララのIntel Corporation社から入手可能なＣｏｒｅ（商標）ｉ３プロセッサ、ｉ５プロセッサ、ｉ７プロセッサ、２Ｄｕｏプロセッサ及びＱｕａｄプロセッサ、Ｘｅｏｎ（商標）プロセッサ、Ｉｔａｎｉｕｍ（商標）プロセッサ、ＸＳｃａｌｅ（商標）プロセッサ、又はＳｔｒｏｎｇＡＲＭ（商標）プロセッサ等の汎用プロセッサとすることができる。代替的に、プロセッサは、ARM Holdings社、MIPS社等の別の会社からのものとすることができる。プロセッサは、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ等の専用プロセッサとすることができる。プロセッサは、１つ又は複数のチップ上に実装することができる。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳ等の複数のプロセス技術のうちの任意のものを用いた１つ又は複数の基板のうちの一部とすることができ、及び／又はそれらの１つ又は複数の基板上に実装することができる。
【００８１】
図６〜図８は、プロセッサ５００を備えるのに好適な例示のシステムである一方、図９は、コア５０２のうちの１つ又は複数を備えることができる一例示のシステムオンチップ（ＳｏＣ）である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスの技術分野において知られている他のシステム設計及び構成も好適である。一般的に、本明細書において開示するようなプロセッサ及び／又は他の実行ロジックを組み込むことができる膨大な様々のシステム又は電子デバイスが一般に好適である。
【００８２】
次に図６を参照すると、本発明の１つの実施形態によるシステム６００のブロック図が示されている。システム６００は、グラフィックスメモリコントローラーハブ（ＧＭＣＨ）６２０に結合された１つ又は複数のプロセッサ６１０、６１５を備えることができる。追加のプロセッサ６１５の性質がオプションであることは、図６に破線で示されている。
【００８３】
各プロセッサ６１０、６１５は、プロセッサ５００の或るバージョンとすることができる。しかしながら、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ６１０、６１５に存在する可能性が低いことに留意すべきである。図６は、ＧＭＣＨ６２０が、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）とすることができるメモリ６４０に結合することができることを示している。ＤＲＡＭは、少なくとも１つの実施形態については、不揮発性キャッシュに関連付けることができる。
【００８４】
ＧＭＣＨ６２０は、チップセット、又はチップセットの一部とすることができる。ＧＭＣＨ６２０は、プロセッサ（複数の場合もある）６１０、６１５と通信することができ、プロセッサ（複数の場合もある）６１０、６１５とメモリ６４０との間のインタラクションを制御することができる。ＧＭＣＨ６２０は、プロセッサ（複数の場合もある）６１０、６１５とシステム６００の他の要素との間の高速バスインターフェースとしても機能することができる。少なくとも１つの実施形態について、ＧＭＣＨ６２０は、フロントサイドバス（ＦＳＢ）６９５等のマルチドロップバスを介してプロセッサ（複数の場合もある）６１０、６１５と通信する。
【００８５】
さらに、ＧＭＣＨ６２０は、ディスプレイ６４５（フラットパネルディスプレイ等）に結合されている。ＧＭＣＨ６２０は、統合グラフィックスアクセラレーターを備えることができる。ＧＭＣＨ６２０は、様々な周辺デバイスをシステム６００に結合するのに用いることができる入力／出力（Ｉ／Ｏ）コントローラーハブ（ＩＣＨ）６５０に更に結合されている。例えば、図６の実施形態には、外部のグラフィックスデバイス６６０が示される。この外部のグラフィックスデバイスは、別の周辺デバイス６７０とともにＩＣＨ６５０に結合される別個のグラフィックスデバイスとすることができる。
【００８６】
代替的に、追加の又は異なるプロセッサも、システム６００に存在することができる。例えば、追加のプロセッサ（複数の場合もある）６１５は、プロセッサ６１０と同じ追加のプロセッサ（複数の場合もある）、プロセッサ６１０とは異種又は非対称的である追加のプロセッサ（複数の場合もある）、アクセラレーター（例えば、グラフィックスアクセラレーター又はデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサを含むことができる。物理リソース６１０、６１５間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性等を含む、或る範囲の利点というメトリックから、様々な相違が存在する可能性がある。これらの相違は、プロセッサ６１０、６１５間の非対称性及び異種性として効果的に表すことができる。少なくとも１つの実施形態について、様々なプロセッサ６１０、６１５は、同じダイパッケージに存在することができる。
【００８７】
次に図７を参照すると、本発明の一実施形態による第２のシステム７００のブロック図が示されている。図７に示すように、マルチプロセッサシステム７００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続７５０を介して結合された第１のプロセッサ７７０及び第２のプロセッサ７８０を備える。プロセッサ７７０及び７８０のそれぞれは、プロセッサ６１０、６１５のうちの１つ又は複数としてプロセッサ５００の或るバージョンとすることができる。
【００８８】
２つのプロセッサ７７０、７８０のみを有するものが示されているが、本発明の範囲はそのように限定されるものではないことが理解されるべきである。他の実施形態では、１つ又は複数の追加のプロセッサが、所与のプロセッサに存在することができる。
【００８９】
統合メモリコントローラーユニット７７２及び７８２をそれぞれ備えるプロセッサ７７０及び７８０が示されている。プロセッサ７７０は、そのバスコントローラーユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インターフェース７７６及び７７８も備える。同様に、第２のプロセッサ７８０は、Ｐ−Ｐインターフェース７８６及び７８８を備える。プロセッサ７７０、７８０は、Ｐ−Ｐインターフェース回路７７８、７８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース７５０を介して情報を交換することができる。図７に示すように、ＩＭＣ７７２及び７８２は、プロセッサをそれぞれのメモリ、すなわち、メモリ７３２及びメモリ７３４に結合する。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部とすることができる。
【００９０】
プロセッサ７７０、７８０はそれぞれ、ポイントツーポイントインターフェース回路７７６、７９４、７８６、７９８を用いて、個々のＰ−Ｐインターフェース７５２、７５４を介してチップセット７９０と情報を交換することができる。チップセット７９０は、高性能グラフィックスインターフェース７３９を介して高性能グラフィックス回路７３８と情報を交換することもできる。
【００９１】
プロセッサが低電力モードになる場合に、いずれか又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュにストアすることができるように、いずれかのプロセッサ内に、又は、双方のプロセッサの外部にあるがＰ−Ｐインターコネクトを介して両プロセッサに接続されるものとして、共有キャッシュ（図示せず）を備えることができる。
【００９２】
チップセット７９０は、インターフェース７９６を介して第１のバス７１６に結合することができる。１つの実施形態では、第１のバス７１６は、ペリフェラルコンポーネントインターコネクト（ＰＣI）バス、又はＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスとすることができるが、本発明の範囲はそのように限定されるものではない。
【００９３】
図７に示すように、第１のバス７１６を第２のバス７２０に結合するバスブリッジ７１８とともに、様々なＩ／Ｏデバイス７１４を第１のバス７１６に結合することができる。１つの実施形態では、第２のバス７２０は、ローピンカウント（ＬＰＣ）バスとすることができる。例えば、キーボード及び／又はマウス７２２、通信デバイス７２７、並びに１つの実施形態では命令／コード及びデータ７３０を含むことができるディスクドライブ又は他のマスストレージデバイス等の記憶ユニット７２８を含む様々なデバイスを第２のバス７２０に結合することができる。さらに、オーディオＩ／Ｏ７２４を第２のバス７２０に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
【００９４】
次に図８を参照すると、本発明の一実施形態による第３のシステム８００のブロック図が示されている。図７及び図８における同様の要素は、同様の参照符号を有し、図７の幾つかの態様は、図８の他の態様を分かりにくくすることを回避するために、図８から省かれている。
【００９５】
図８は、プロセッサ８７０、８８０がそれぞれ統合メモリＩ／Ｏ制御ロジック（「ＣＬ」）８７２及び８８２を備えることができることを示している。少なくとも１つの実施形態について、ＣＬ８７２、８８２は、図５及び図７に関して上述したような統合メモリコントローラーユニットを備えることができる。加えて、ＣＬ８７２、８８２は、Ｉ／Ｏ制御ロジックも備えることができる。図８は、ＣＬ８７２、８８２に結合されているのはメモリ８３２、８３４だけでなく、Ｉ／Ｏデバイス８１４も制御ロジック８７２、８８２に結合されていることを示している。レガシーＩ／Ｏデバイス８１５は、チップセット８９０に結合されている。
【００９６】
次に図９を参照すると、本発明の一実施形態によるＳｏＣ９００のブロック図が示されている。図５における同様の要素は、同様の参照符号を有する。また、破線のボックスは、更に高度化したＳｏＣ上のオプションの特徴部である。図９において、相互接続ユニット（複数の場合もある）９０２は、一組の１つ又は複数のコア５０２Ａ〜５０２Ｎ及び共有キャッシュユニット（複数の場合もある）５０６を備えるアプリケーションプロセッサ９１０と、システムエージェントユニット５１０と、バスコントローラーユニット（複数の場合もある）５１６と、統合メモリコントローラーユニット（複数の場合もある）５１４と、一組の１つ又は複数のメディアプロセッサ９２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット９４０とに結合されている。上記メディアプロセッサは、統合グラフィックスロジック５０８と、スチルカメラ機能及び／又はビデオカメラ機能を提供するための画像プロセッサ９２４と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６と、ビデオエンコード／デコードアクセラレーションを提供するためのビデオプロセッサ９２８とを備えることができる。
【００９７】
図１０は、１つの実施形態による少なくとも１つの命令を実行することができる中央処理ユニット（ＣＰＵ）とグラフィックス処理ユニット（ＧＰＵ）とを含むプロセッサを示している。１つの実施形態では、少なくとも１つの実施形態による演算を実行する命令は、ＣＰＵが実行することができる。別の実施形態では、この命令は、ＧＰＵが実行することができる。更に別の実施形態では、この命令は、ＧＰＵ及びＣＰＵによって実行される演算を組み合わせることによって実行することができる。例えば、１つの実施形態では、１つの実施形態による命令を、ＧＰＵ上で実行するために受信してデコードすることができる。一方、デコードされた命令内の１つ又は複数の演算は、ＣＰＵが実行することができ、その結果を、その命令の最終的なリタイアメントのためにＧＰＵに返すことができる。逆に、幾つかの実施形態では、ＣＰＵが主プロセッサとして動作することができ、ＧＰＵがコプロセッサとして動作することができる。
【００９８】
幾つかの実施形態では、高並列スループットプロセッサから利益を受ける命令は、ＧＰＵが実行することができる一方、深くパイプライン化されたアーキテクチャから利益を受けるプロセッサの性能から利益を受ける命令は、ＣＰＵが実行することができる。例えば、グラフィックス、科学アプリケーション、金融アプリケーション、及び他の並列作業負荷は、ＧＰＵの性能から利益を受けることができ、それに応じて実行することができるのに対して、オペレーティングシステムのカーネル又はアプリケーションコード等のより逐次的なアプリケーションは、ＣＰＵにより良く適合することができる。
【００９９】
図１０において、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、画像プロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラー１０２５、ＵＡＲＴコントローラー１０３０、ＳＰＩ／ＳＤＩＯコントローラー１０３５、ディスプレイデバイス１０４０、高精細マルチメディアインターフェース（ＨＤＭＩ（登録商標））コントローラー１０４５、ＭＩＰＩコントローラー１０５０、フラッシュメモリコントローラー１０５５、デュアルデータレート（ＤＤＲ）コントローラー１０６０、セキュリティエンジン１０６５、及びＩ２Ｓ／Ｉ２Ｃ（統合チップ間サウンド／集積回路間）インターフェース１０７０を備える。より多くのＣＰＵ又はＧＰＵ及び他の周辺インターフェースコントローラーを含めて、他のロジック及び回路を図１０のプロセッサに含めることができる。
【０１００】
少なくとも１つの実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表データによって実施することができる。この代表データは、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させる。「ＩＰコア」として知られているそのような表現は、有形の機械可読媒体（「テープ」）上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。例えば、ARM Holdings社によって開発されたＣｏｒｔｅｘ（商標）ファミリーのプロセッサ及び中国科学アカデミーのコンピューティング技術協会（ＩＣＴ）によって開発されたＬｏｏｎｇｓｏｎ  ＩＰコア等のＩＰコアは、Texas Instruments社、Qualcomm社、Apple社、又はSamsung社等の様々な顧客又はライセンシーに対して、ライセンス供与又は販売することができ、これらの顧客又はライセンシーが作製するプロセッサに実装することができる。
【０１０１】
図１１は、１つの実施形態によるＩＰコアの開発を示すブロック図を示している。記憶装置１１３０は、シミュレーションソフトウェア１１２０及び／又はハードウェア若しくはソフトウェアモデル１１１０を含む。１つの実施形態では、ＩＰコア設計を表すデータは、メモリ１１４０（例えば、ハードディスク）、有線接続（例えば、インターネット）１１５０、又は無線接続１１６０を介して記憶装置１１３０に提供することができる。シミュレーションツール及びモデルによって生成されたＩＰコア情報は、その後、製造設備に送信することができ、この製造設備において、サードパーティが、少なくとも１つの実施形態による少なくとも１つの命令を実行するようにＩＰコアを製造することができる。
【０１０２】
幾つかの実施形態では、１つ又は複数の命令は、第１のタイプ又はアーキテクチャ（例えば、ｘ８６）に対応することができ、異なるタイプ又はアーキテクチャ（例えば、ＡＲＭ）のプロセッサ上で変換又はエミュレートすることができる。したがって、１つの実施形態による命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、又は他のプロセッサタイプ若しくはアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行することができる。
【０１０３】
図１２は、１つの実施形態による、第１のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるのかを示している。図１２において、プログラム１２０５は、１つの実施形態による命令と同じ又は実質的に同じ機能を実行することができる幾つかの命令を含む。しかしながら、プログラム１２０５の命令は、プロセッサ１２１５と異なるか又は互換性のないタイプ及び／又はフォーマットである場合があり、このことは、プログラム１２０５内のタイプの命令がプロセッサ１２１５によってネイティブに実行することができない場合があることを意味する。しかしながら、エミュレーションロジック１２１０の援助によって、プログラム１２０５の命令は、プロセッサ１２１５がネイティブに実行することができる命令に変換される。１つの実施形態では、エミュレーションロジックは、ハードウェアに具現化される。別の実施形態では、エミュレーションロジックは、プログラム１２０５内のタイプの命令をプロセッサ１２１５がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に具現化される。他の実施形態では、エミュレーションロジックは、固定機能又はプログラマブルハードウェアと、有形の機械可読媒体上にストアされたプログラムとの組み合わせである。１つの実施形態では、プロセッサがエミュレーションロジックを含むのに対して、他の実施形態では、エミュレーションロジックは、プロセッサの外部に存在し、サードパーティによって提供される。１つの実施形態では、プロセッサは、当該プロセッサ内に含まれるか又は当該プロセッサに関連付けられたマイクロコード又はファームウェアを実行することによって、ソフトウェアを含む有形の機械可読媒体に具現化されたエミュレーションロジックをロードすることができる。
【０１０４】
図１３は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組み合わせで実施することができる。図１３は、高級言語１３０２によるプログラムを、ｘ８６コンパイラー１３０４を用いてコンパイルしてｘ８６バイナリコード１３０６を生成することができることを示している。このｘ８６バイナリコード１３０６は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１３１６がネイティブに実行することができるものである。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラー１３０４は、追加のリンク処理の有無を問わず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１３１６上で実行することができるｘ８６バイナリコード１３０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラーを表している。同様に、図１３は、高級言語１３０２によるプログラムを、代替の命令セットコンパイラー１３０８を用いてコンパイルして代替の命令セットバイナリコード１３１０を生成することができることを示している。この代替の命令セットバイナリコードは、少なくとも１つのｘ８６命令セットコアを有しないプロセッサ１３１４（例えば、カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セットを実行するコアを有するプロセッサ及び／又はカリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セットを実行するコアを有するプロセッサ）がネイティブに実行することができるものである。命令変換器１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコアを有しないプロセッサ１３１４がネイティブに実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリコード１３１０と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器１３１２は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、ｘ８６命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１３０６を実行することを可能にするソフトウェア、ファー��ウェア、ハードウェア、又はそれらの組み合わせを表している。
【０１０５】
図１４は、ストライド機能を有するベクトルロード演算を提供するプロセス１４０１の１つの実施形態の流れ図を示している。プロセス１４０１及び本明細書において開示する他のプロセスは、専用のハードウェア、又は汎用機械若しくは専用機械若しくは双方の組み合わせによって実行可能なソフトウェア若しくはファームウェアの演算コードを含むことができる処理ブロックによって実行される。
【０１０６】
プロセス１４０１の処理ブロック１４０９において、第２の演算が実行されるときに用いられるマスクから、複製がオプションとして作成される。次に、処理は、処理ブロック１４１０に進み、この処理ブロック１４１０において、次の値が、マスクレジスタ内の複数のマスクフィールドの各フィールドから読み出される。プロセス１４０１は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することが好ましい場合があることが認識されるであろう。マスクレジスタ内の複数のマスクフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応することができ、マスクレジスタ内の各フィールドについて、１つの値は、対応する要素がメモリからロードされていないことを示し、第２の値は、対応するデータ要素をロードする必要がないか、又はメモリから既にロードされていることを示す。１つの実施形態では、マスクレジスタは、アーキテクチャ的に可視であるレジスタである。別の実施形態では、マスクレジスタは、例えば、全てのフィールドが、対応する要素がメモリからロードされていないことを初期値として示す暗黙的なものとすることができる。処理ブロック１４２０において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック１４３０において、マスクレジスタのフィールドが、対応する要素がメモリからロードされていないことを示す第１の値と比較される。このフィールドが第１の値に等しくない場合、処理は、処理ブロック１４６０に進み、ロード演算が、完了するまで反復される。上記フィールドが第１の値に等しい場合、処理ブロック１４４０において、対応するデータ要素がメモリからロードされ、複数のデータフィールドを有するベクトルレジスタ内にストアされる。これらの複数のデータフィールドの一部分は、ロードされたデータ要素をストアするためのものである。処理ブロック１４４０の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック１４５０において、対応するデータ要素がメモリから既にロードされていることを示す第２の値に変更される。
【０１０７】
１つの代替の実施形態では、処理ブロック１４０９の複製マスクは、マスクレジスタ内の対応するフィールドが処理ブロック１４５０において第２の値に変更されるときに、第２の演算によって用いられる第１の値に、複製マスクレジスタ内のフィールドを設定することによって構築することができることが認識されるであろう。このように、部分的に複製されたマスクに基づく第２の演算の完了を可能にするとともに、メモリ障害後に新たなマスクを用いてストライド命令を有するロード演算を再開することを行って、ストライド命令を有するロード演算の実行を依然として必要とする要素のみを追跡することができる。
【０１０８】
処理ブロック１４６０において、ロード演算が終了した（すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第２の値を有するか、又は障害が発生した）か否かの判断が行われる。終了していない場合、処理は、処理ブロック１４１０における開始を再度反復する。終了した場合、処理は、処理ブロック１４７０に進み、この処理ブロック１４７０において、第２の演算が実行される。１つの実施形態では、第２の演算は、オプションの処理ブロック１４０９からの複製マスクを用いて実行することができる。別の実施形態では、第２の演算は、マスクを用いることなく実行することができる。次に、処理ブロック１４８０において、ストライド命令を有するＳＩＭＤロード演算の結果が、ベクトルレジスタにストアされる。
【０１０９】
図１５は、ストライド機能を有するベクトルロード演算を提供するプロセス１５０１の別の実施形態の流れ図を示している。プロセス１５０１の処理ブロック１５０５において、ストライド命令を有するロード演算がデコードされる。処理は、処理ブロック１５０９に進み、この処理ブロック１５０９において、第２の演算が実行されるときに用いられるマスクから、複製がオプションとして作成される。次に、処理は、処理ブロック１５１０に進み、この処理ブロック１５１０において、次の値が、マスクレジスタ内の複数のマスクフィールドの各フィールドから読み出される。ここでも、プロセス１５０１は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することができる。処理ブロック１５２０において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック１５３０において、マスクレジスタの次のフィールドが、対応する要素がメモリから収集されていないことを示す第１の値と比較される。このフィールドが第１の値と等しくない場合、処理は、処理ブロック１５６０に進み、ロード演算が、完了するまで反復される。このフィールドが第１の値と等しい場合、処理ブロック１５４０において、対応するデータ要素がメモリからロードされ、複数のデータフィールドを有するベクトルデスティネーションレジスタ内にストアされる。これらの複数のデータフィールドの一部分は、ロードされたデータ要素をストアするためのものである。処理ブロック１５４０の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック１５５０において、対応するデータ要素がメモリから既に収集されていることを示す第２の値に変更される。
【０１１０】
ここでも、代替の実施形態では、処理ブロック１５０９の複製マスクは、マスクレジスタ内の対応するフィールドが処理ブロック１５５０において第２の値に変更されるときに、第２の演算によって用いられる第１の値に、複製マスクレジスタ内のフィールドを設定することによって構築することができることが認識されるであろう。このように、部分的に複製されたマスクに基づく第２の演算の完了を可能にするとともに、メモリ障害後に新たなマスクを用いて収集演算命令（gather-op）を再開して、収集演算命令の実行を依然として必要とする要素のみを追跡することができる。
【０１１１】
処理ブロック１５６０において、収集演算が終了した（すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第２の値を有するか、又は障害が発生した）か否かの判断が行われる。終了していない場合、処理は、処理ブロック１５１０における開始を再度反復する。終了した場合、処理は、処理ブロック１５６５に進み、この処理ブロック１５６５において、第２の演算がデスティネーションレジスタからの要素と、第２のオペランドレジスタからの要素とに対して実行される。１つの実施形態では、第２の演算は、オプションの処理ブロック１５０９からの複製マスクを用いて実行することができる。別の実施形態では、第２の演算は、マスクを用いることなく実行することができる。次に、処理ブロック１５８０において、ＳＩＭＤ収集演算命令の結果が、ベクトルデスティネーションレジスタにストアされる。
【０１１２】
収集演算と第２の演算との間の従属関係は、ハードウェアによって、特に、アウトオブオーダーマイクロアーキテクチャにおいて、効率的にハンドリングすることができ、それによって、更なるコンパイラー最適化及び改善された命令スループットが可能になることが認識されるであろう。
【０１１３】
図１６は、ストライド機能を有するベクトルストア演算を提供するプロセス１６０１の１つの実施形態の流れ図を示している。プロセス１６０１の処理ブロック１６１０において、第１の演算が、第１のオペランドレジスタからの要素と、第２のオペランドレジスタからの対応する要素とに対して実行され、結果が一時レジスタ内にストアされる。処理ブロック１６２０において、マスクレジスタの第１の値／第２の値が反転（又はフリップ）されて、複製マスクが作成される。次に、処理は、処理ブロック１６３０に進み、この処理ブロック１６３０において、次の値が、マスクレジスタ内の複数のマスクフィールドのうちの或るフィールドから読み出される。プロセス１６０１は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することが好ましい場合があることが認識されるであろう。マスクレジスタ内の複数のマスクフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応することができ、マスクレジスタ内の各フィールドについて、１つの値は、対応する要素がメモリにストアされていないことを示し、第２の値は、対応するデータ要素をストアする必要がないか、又はメモリに既にストアされていることを示す。１つの実施形態では、マスクレジスタは、アーキテクチャ的に可視であるレジスタである。別の実施形態では、マスクレジスタは、例えば、全てのフィールドが、対応する要素がメモリにストアされていないことを初期値として示す暗黙的なものとすることができる。処理ブロック１６４０において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック１６５０において、マスクレジスタのフィールドが、一時レジスタの対応する要素がメモリにストアされていないことを示す第１の値と比較される。このフィールドが第１の値に等しくない場合、処理は、処理ブロック１６８０に進み、ストア演算が、終了するまで反復される。上記フィールドが第１の値に等しい場合、処理ブロック１６６０において、対応するデータ要素が一時レジスタからメモリにストアされる。処理ブロック１６６０の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック１６７０において、対応するデータ要素がメモリに既にストアされていることを示す第２の値に変更され、複製マスクレジスタ内の対応するフィールドが第１の値に変更される。
【０１１４】
処理ブロック１６８０において、ストア演算が終了した（すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第２の値を有するか、又は障害が発生した）か否かの判断が行われる。終了していない場合、処理は、処理ブロック１６３０における開始を再度反復する。終了した場合、処理は、処理ブロック１６９０に進み、この処理ブロック１６９０において、ストライド命令を有するＳＩＭＤロード演算の結果が、複製されたマスクを用いて、一時レジスタからベクトルデスティネーションレジスタ内にストアされる。このように、部分的に複製されたマスクに基づく第１の演算の完了を可能にするとともに、メモリ障害後に新たなマスクを用いてストライド命令を有するストア演算を再開することを行って、ストライド命令を有するストア演算の実行を依然として必要とする要素のみを追跡することができる。
【０１１５】
図１７は、ストライド機能を有するベクトルストア演算を提供するプロセス１７０１の別の実施形態の流れ図を示している。プロセス１７０１の処理ブロック１７０５において、ストライド命令を有するストア演算がデコードされる。処理は、処理ブロック１７３０に進み、この処理ブロック１７３０において、次の値が、マスクレジスタ内の複数のマスクフィールドの或るフィールドから読み出される。プロセス１７０１は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することが好ましい場合があることに想到するであろう。
【０１１６】
１つの実施形態では、マスクレジスタは、アーキテクチャ的に可視であるレジスタである。別の実施形態では、マスクレジスタは、例えば、全てのフィールドが、対応する要素がメモリにストアされていないことを初期値として示す暗黙的なものとすることができる。処理ブロック１７４０において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック１７５０において、マスクレジスタのフィールドが、対応する要素がメモリにストアされていないことを示す第１の値と比較される。このフィールドが第１の値に等しくない場合、処理は、処理ブロック１７８０に進み、ストア演算が、終了するまで反復される。上記フィールドが第１の値に等しい場合、処理ブロック１７１０において、第１の演算が、第１のオペランド／デスティネーションレジスタからの対応する要素と、第２のオペランドレジスタからの対応する要素とに対して実行される。処理ブロック１７６０において、対応する結果のデータ要素がメモリにストアされる。処理ブロック１７６０の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック１７７０において、対応するデータ要素がメモリに既にストアされていることを示す第２の値に変更される。
【０１１７】
処理ブロック１７８０において、散乱演算が終了した（すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第２の値を有するか、又は障害が発生した）か否かの判断が行われる。終了していない場合、処理は、処理ブロック１７３０における開始を再度反復する。終了した場合、処理は、処理ブロック１７９０に進み、この処理ブロック１７９０において、ストライド命令を有するＳＩＭＤストア演算の結果が、ベクトルデスティネーションレジスタ内にストアされる。
【０１１８】
本発明の実施形態は、ロード演算又はストア演算と別の演算との間の従属関係を、ハードウェアによって、特に、アウトオブオーダーマイクロアーキテクチャにおいて、効率的にハンドリングすることができ、それによって、更なるコンパイラー最適化及び改善された命令スループットが可能になる、ストライド機能を有するベクトルロード演算及び／又はベクトルストア演算を提供する命令を含む。
【０１１９】
本明細書において開示したメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組み合わせで実施することができる。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性メモリ及び不揮発性メモリ及び／又は記憶要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
【０１２０】
プログラムコードは、入力命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、１つ又は複数の出力デバイスに既知の方法で適用することができる。この用途のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラー、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０１２１】
プログラムコードは、処理システムと通信するように高級手続型プログラム言語又はオブジェクト指向型言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
【０１２２】
少なくとも１つの実施形態の１つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表的な命令によって実施することができる。「ＩＰコア」として知られているそのような表現は、有形の機械可読媒体上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
【０１２３】
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、再書込み可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、磁気カード若しくは光カード、又は電子命令をストアするのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
【０１２４】
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び／又はシステムの特徴を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【０１２５】
場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される１つ又は複数の他の命令に変換（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
【０１２６】
上記のように、少なくとも１つの実施形態による１つ又は複数の命令を実行するための技法が開示されている。或る特定の例示の実施形態が、説明され、添付図面に示されているが、そのような実施形態は、広範な本発明の単なる例示にすぎず、広範な本発明を制限するものではないこと、及び、本発明は、図示及び説明された特定の構造及び構成に限定されるものではないことが理解されるべきである。なぜならば、この開示を検討すると、他の様々な変更が当業者には思い浮かべることができるからである。このような技術の分野では、成長が速く、更なる進歩が容易に予見されない場合、開示された実施形態は、本開示の原理又は添付の特許請求の範囲の範囲から逸脱することなく技術的進歩を可能にすることによって容易にされるように、構成及び細部が容易に変更可能な場合がある。本明細書によれば、以下の各項目に記載の事項もまた開示される。
［項目１］
プロセッサであって、
第１の複数のデータフィールドを含む第１のレジスタであって、該第１のレジスタ内の該第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素用の開始アドレスからのストライド長の倍数に対応し、該第１のレジスタ内の該第１の複数のデータフィールドのそれぞれについて、第１の値は、前記対応するデータ要素が前記メモリからまだロードされていないことを示し、第２の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示す、第１のレジスタと、
前記第１のレジスタと、前記第１の複数のデータフィールドのうちの１つ又は複数に対応する一組のロード演算とを指定するとともに、第２の単一命令複数データ（ＳＩＭＤ）演算を指定する第１の命令をデコードするデコードステージと、
１つ又は複数の実行ユニットであって、デコードされた前記第１の命令に応答して、
前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれの値を読み出し、
前記第１の値を有する前記第１のレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリからロードし、前記対応するデータ要素を、第２の複数のデータフィールドを有するとともに該第２の複数のデータフィールドの一部分が前記ロードされたデータ要素をストアする第２のレジスタ内にストアし、
前記第１のレジスタ内の対応する前記データフィールドの前記値を前記第１の値から前記第２の値に変更し、
前記第２の複数のデータフィールドの前記一部分にストアされた前記データ要素を用いて前記第２のＳＩＭＤ演算を実行し、対応する結果のデータ要素を生成する、
１つ又は複数の実行ユニットと、
を備える、プロセッサ。
［項目２］
前記第１の値は１である、項目１に記載のプロセッサ。
［項目３］
前記第２の値は０である、項目１または２に記載のプロセッサ。
［項目４］
前記１つ又は複数の実行ユニットは、前記デコードされた第１の命令に応答して、前記第１のレジスタ内の前記第１の複数のデータフィールドを複製する、項目１から３の何れか１項に記載のプロセッサ。
［項目５］
前記１つ又は複数の実行ユニットは、前記デコードされた第１の命令に応答して、前記第１のレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該第１のレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する、項目４に記載のプロセッサ。
［項目６］
前記１つ又は複数の実行ユニットは、障害時、又は前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれが前記第２の値を有した後に、前記第１のレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する、項目５に記載のプロセッサ。
［項目７］
前記第２のＳＩＭＤ演算は単項である、項目１から６の何れか１項に記載のプロセッサ。
［項目８］
前記第２のＳＩＭＤ演算は２項である、項目１から６の何れか１項に記載のプロセッサ。
［項目９］
前記第２のレジスタ内にストアされる前記データ要素は、３２ビットデータ要素である、項目１から８の何れか１項に記載のプロセッサ。
［項目１０］
前記第２のレジスタ内にストアされる前記データ要素は、６４ビットデータ要素である、項目１から８の何れか１項に記載のプロセッサ。
［項目１１］
前記第２のレジスタは、５１２ビットベクトルレジスタである、項目１から１０の何れか１項に記載のプロセッサ。
［項目１２］
コンピューターに、
第１のレジスタ内の第１の複数のデータフィールドの各データフィールドの値を読み出す手順であって、前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応し、前記第１のレジスタ内の前記第１の複数のデータフィールドのそれぞれについて、第１の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第２の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示す手順と、
前記第１の値を有する前記第１のレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリからロードする手順であって、前記対応するデータ要素を、第２の複数のデータフィールドを有するとともに該第２の複数のデータフィールドの一部分がロードされた前記対応するデータ要素をストアする第２のレジスタ内にストアし、前記第１のレジスタ内の対応する前記データフィールドの値を前記第１の値から前記第２の値に変更する手順と、
次に、前記第２の複数のデータフィールドの前記一部分にストアされた前記データ要素を用いて第２の単一命令複数データ（ＳＩＭＤ）演算を実行する手順であって、対応する結果のデータ要素を生成する手順と、
を実行させるためのプログラム。
［項目１３］
前記第１のレジスタ内の前記第１の複数のデータフィールドを複製する手順、
を前記コンピューターに更に行わせる、項目１２に記載のプログラム。
［項目１４］
前記第１のレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該第１のレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する手順、
を前記コンピューターに更に行わせる、項目１２または１３に記載のプログラム。
［項目１５］
障害時、又は前記第１のレジスタ内の前記第１の複数のデータフィールドの各データフィールドが前記第２の値を有した後に、前記第１のレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する手順、
を前記コンピューターに更に行わせる、項目１４に記載のプログラム。
［項目１６］
前記第２のＳＩＭＤ演算は単項である、項目１２から１５の何れか１項に記載のプログラム。
［項目１７］
前記第２のＳＩＭＤ演算は２項である、項目１２から１５の何れか１項に記載のプログラム。
［項目１８］
前記第２のレジスタ内にストアされる前記データ要素は、３２ビットデータ要素である、項目１２から１７の何れか１項に記載のプログラム。
［項目１９］
前記第２のレジスタ内にストアされる前記データ要素は、６４ビットデータ要素である、項目１２から１７の何れか１項に記載のプログラム。
［項目２０］
前記第２のレジスタは、５１２ビットベクトルレジスタである、項目１２から１９の何れか１項に記載のプログラム。
［項目２１］
プロセッサであって、
一組のロード演算及び第２の単一命令複数データ（ＳＩＭＤ）演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する第１のＳＩＭＤ命令をデコードするデコードステージと、
１つ又は複数の実行ユニットであって、デコードされた前記第１のＳＩＭＤ命令に応答して、
マスクレジスタ内の第１の複数のデータフィールドの各データフィールドの値を読み出し、前記マスクレジスタ内の前記第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の前記メモリアドレスからの前記ストライド長の倍数に対応し、前記マスクレジスタ内の前記第１の複数のデータフィールドのそれぞれについて、第１の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第２の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示し、
前記第１の値を有する前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリから前記デスティネーションレジスタ内の対応するデータフィールドにロードし、前記マスクレジスタ内の前記各データフィールドの値を前記第１の値から前記第２の値に変更し、
前記デスティネーションレジスタにロードされた前記データ要素と、前記オペランドレジスタ内の対応するデータ要素とを用いて前記第２のＳＩＭＤ演算を実行して、対応する結果のデータ要素を生成する１つ又は複数の実行ユニットと、
を備える、プロセッサ。
［項目２２］
前記１つ又は複数の実行ユニットは、前記デコードされた第１のＳＩＭＤ命令に応答して、前記マスクレジスタ内の前記第１の複数のデータフィールドを複製する、項目２１に記載のプロセッサ。
［項目２３］
前記１つ又は複数の実行ユニットは、前記デコードされた第１のＳＩＭＤ命令に応答して、前記マスクレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該マスクレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する、項目２２に記載のプロセッサ。
［項目２４］
前記１つ又は複数の実行ユニットは、障害時、又は前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドが前記第２の値を有した後に、前記マスクレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する、項目２３に記載のプロセッサ。
［項目２５］
前記デスティネーションレジスタ内にロードされる前記データ要素は、３２ビットデータ要素である、項目２１から２４の何れか１項に記載のプロセッサ。
［項目２６］
前記デスティネーションレジスタ内にロードされる前記データ要素は、６４ビットデータ要素である、項目２１から２４の何れか１項に記載のプロセッサ。
［項目２７］
前記デスティネーションレジスタは、５１２ビットベクトルレジスタである、項目２１から２６の何れか１項に記載のプロセッサ。
［項目２８］
処理システムであって、
メモリと、
複数のプロセッサと
を備え、前記複数のプロセッサのそれぞれは、
一組のロード演算及び第２の単一命令複数データ（ＳＩＭＤ）演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する第１のＳＩＭＤ命令をデコードするデコードステージと、
１つ又は複数の実行ユニットであって、デコードされた前記第１のＳＩＭＤ命令に応答して、
マスクレジスタ内の第１の複数のデータフィールドの各データフィールドの値を読み出し、前記マスクレジスタ内の前記第１の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の前記メモリアドレスからの前記ストライド長の倍数に対応し、前記マスクレジスタ内の各データフィールドについて、第１の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第２の値は、前記対応するデータ要素をロードする必要がないか、又は前記メモリから既にロードされていることを示し、
前記第１の値を有する前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリから前記デスティネーションレジスタ内の対応するデータフィールドにロードし、前記マスクレジスタ内の前記データフィールドの値を前記第１の値から前記第２の値に変更し、
前記デスティネーションレジスタにロードされた前記データ要素と、前記オペランドレジスタ内の対応するデータ要素とを用いて前記第２のＳＩＭＤ演算を実行して、対応する結果のデータ要素を生成する
１つ又は複数の実行ユニットと、
を備える処理システム。
［項目２９］
前記１つ又は複数の実行ユニットは更に、前記第１のＳＩＭＤ命令に応答して、
前記マスクレジスタ内の前記第１の値を有する前記第１の複数のデータフィールドのそれぞれを、該マスクレジスタ内の当該データフィールドの前記値が前記第１の値から前記第２の値に変更されたときに複製する、
項目２８に記載の処理システム。
［項目３０］
前記１つ又は複数の実行ユニットは更に、前記第１のＳＩＭＤ命令に応答して、
障害時、又は前記マスクレジスタ内の前記第１の複数のデータフィールドの各データフィールドが前記第２の値を有した後に、前記マスクレジスタからの複製された前記第１の複数のデータフィールドを用いて、前記第２のＳＩＭＤ演算を実行する、
項目２９に記載の処理システム。
【図１Ａ】
0005933011.tif 000004
【図１Ｂ】
0005933011.tif 000005
【図１Ｃ】
0005933011.tif 000006
【図２】
0005933011.tif 000007
【図３Ａ】
0005933011.tif 000008
【図３Ｂ】
0005933011.tif 000009
【図３Ｃ】
0005933011.tif 000010
【図３Ｄ】
0005933011.tif 000011
【図３Ｅ】
0005933011.tif 000012
【図３Ｆ】
0005933011.tif 000013
【図３Ｇ】
0005933011.tif 000014
【図３Ｈ】
0005933011.tif 000015
【図４Ａ】
0005933011.tif 000016
【図４Ｂ】
0005933011.tif 000017
【図５】
0005933011.tif 000018
【図６】
0005933011.tif 000019
【図７】
0005933011.tif 000020
【図８】
0005933011.tif 000021
【図９】
0005933011.tif 000022
【図１０】
0005933011.tif 000023
【図１１】
0005933011.tif 000024
【図１２】
0005933011.tif 000025
【図１３】
0005933011.tif 000026
【図１４】
0005933011.tif 000027
【図１５】
0005933011.tif 000028
【図１６】
0005933011.tif 000029
【図１７】
0005933011.tif 000030