(57)【要約】  結果ベクトル内の複数の可変サイズ・パーティションの位置を定義するパーティション情報を指定するパーティション・レプリケート命令に応答して、命令デコーダ２０が、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、又は終わるソース・ベクトルのデータ要素のシーケンスのデータ値又は要素インデックスを備える、結果ベクトルを生成するように処理回路８０を制御する。この命令は、ベクトル長より小さいデータ構造の処理を加速するのに有用であり得る。
2020501270.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路と、
前記ベクトル処理操作を実行するように前記処理回路を制御するプログラム命令を復号する命令デコーダとを備える装置であって、
それぞれが結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つが前記結果ベクトルの隣接する複数のデータ要素を備える複数の可変サイズ・パーティションの、前記結果ベクトル内での位置を定義するパーティション情報を指定するパーティション・レプリケート命令に応答して、前記命令デコーダは、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、若しくは終わるソース・ベクトルのデータ要素のシーケンスのデータ値、又は前記選択されたデータ要素位置を示す要素インデックスで始まる、若しくは終わる要素インデックスのインクリメントするシーケンスを備える、前記結果ベクトルを生成するように前記処理回路を制御するように構成される、装置。
【請求項２】
前記パーティション情報は、前記結果ベクトル内のパーティションの始まり又は終わりを識別する少なくとも１つのマーカ・ビットを備えるパーティション・マスク情報を備える、請求項１に記載の装置。
【請求項３】
前記パーティション情報は、１パーティション当たりのデータ要素の数を示すパーティション・サイズ情報を備える、請求項１に記載の装置。
【請求項４】
前記パーティション・レプリケート命令の符号化は、第１のパーティション又は最後のパーティション以外のすべてのパーティションが同一の数のデータ要素を有するように制約する、請求項３に記載の装置。
【請求項５】
前記選択されたデータ要素位置は、前記パーティションのそれぞれに関して同一である、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記パーティション・レプリケート命令は、異なるパーティションに関する前記選択されたデータ要素位置として異なるデータ要素位置を識別する情報を指定する、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
前記パーティション・レプリケート命令は、いずれのデータ要素位置が前記選択されたデータ要素位置であるかを示す要素選択情報を指定する、請求項１から６までのいずれか一項に記載の装置。
【請求項８】
前記パーティション・レプリケート命令に応答して、前記命令デコーダは、単一のデータ要素を備える前記複数のパーティションのいずれかに関して、前記単一のデータ要素が、前記ソース・ベクトル内の前記選択されたデータ要素位置におけるデータ値、又は前記選択されたデータ要素位置を示す要素インデックスを備える、前記結果ベクトルを生成するように前記処理回路を制御するように構成される、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
前記パーティション・レプリケート命令は、前記複数のパーティションを備える前記結果ベクトルの活性部分を定義する活性部分情報を指定し、
要素レプリケート命令に応答して、前記命令デコーダは、前記活性部分の外の少なくとも１つのデータ要素が、所定の値、又は前記結果ベクトルを記憶するためのデスティネーション・レジスタの対応するデータ要素の値を有する、前記結果ベクトルを生成するように前記処理回路を制御するように構成される、請求項１から８までのいずれか一項に記載の装置。
【請求項１０】
前記パーティション・レプリケート命令は、前記パーティション情報と前記活性部分情報の両方を識別する単一の制御値を指定する、請求項９に記載の装置。
【請求項１１】
前記ソース・ベクトルを記憶するソース・レジスタを指定するソース変換形態の前記パーティション・レプリケート命令に応答して、前記命令デコーダは、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、又は終わる前記ソース・ベクトルのデータ要素の前記シーケンスの前記データ値を備える、前記結果ベクトルを生成するように前記処理回路を制御するように構成される、請求項１から１０までのいずれか一項に記載の装置。
【請求項１２】
ロード−レプリケート形態の前記パーティション・レプリケート命令に応答して、前記命令デコーダは、データ・ストアから前記ソース・ベクトルの少なくとも一部をロードするように、且つ複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、又は終わる前記ソース・ベクトルのデータ要素の前記シーケンスの前記データ値を備える、前記結果ベクトルを生成するように前記処理回路を制御するように構成される、請求項１から１１までのいずれか一項に記載の装置。
【請求項１３】
インデックス生成形態の前記パーティション・レプリケート命令に応答して、前記命令デコーダは、複数のデータ要素を有する各パーティションが、要素インデックスの前記インクリメントするシーケンスを備える、前記結果ベクトルを生成するように前記処理回路を制御するように構成される、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路を備える装置のためのデータ処理方法であって、
それぞれが結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つが前記結果ベクトルの複数のデータ要素を備える複数の可変サイズ・パーティションの、前記結果ベクトル内での位置を定義するパーティション情報を指定するパーティション・レプリケート命令を復号すること、及び
前記パーティション・レプリケート命令に応答して、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、若しくは終わるソース・ベクトルのデータ要素のシーケンスのデータ値、又は前記選択されたデータ要素位置を示す要素インデックスで始まる、若しくは終わる前記要素インデックスのインクリメントするシーケンスを備える、前記結果ベクトルを生成するように前記処理回路を制御すること
を備えるデータ処理方法。
【請求項１５】
請求項１から１３までのいずれか一項に記載の装置に対応する命令実行環境を提供するようにコンピュータを制御するための仮想マシン・プログラムを記憶するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。より詳細には、本技法は、ベクトル命令の処理に関する。
【背景技術】
【０００２】
一部のデータ処理システムは、命令のソース・オペランド又は結果値が、複数のデータ要素を備えるベクトルであるベクトル命令の処理をサポートする。単一の命令に応答していくつかの個別のデータ要素を処理することをサポートすることによって、コード密度を向上させることが可能であり、且つ命令をフェッチすること、及び復号することのオーバーヘッドを低減することが可能である。処理されるべきデータ値のアレイは、データ値をベクトル・オペランドのそれぞれの要素にロードすること、及び単一のベクトル命令を使用してデータ値を一度にいくつかの要素を処理することによって、より効率的に処理され得る。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくとも一部の例は、
複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路と、
ベクトル処理操作を実行するように処理回路を制御するプログラム命令を復号する命令デコーダとを備える装置であって、
それぞれが結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つが結果ベクトルの隣接する複数のデータ要素を備える複数の可変サイズ・パーティションの、結果ベクトル内での位置を定義するパーティション情報を指定するパーティション・レプリケート命令に応答して、命令デコーダは、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、若しくは終わるソース・ベクトルのデータ要素のシーケンスのデータ値、又は前記選択されたデータ要素位置を示す要素インデックスで始まる、若しくは終わる要素インデックスのインクリメントするシーケンスを備える、結果ベクトルを生成するように処理回路を制御するように構成される、装置を提供する。
【０００４】
少なくとも一部の例は、複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路を備える装置のためのデータ処理方法であって、
それぞれが結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つが結果ベクトルの隣接する複数のデータ要素を備える複数の可変サイズ・パーティションの、結果ベクトル内での位置を定義するパーティション情報を指定するパーティション・レプリケート命令を復号すること、及び
パーティション・レプリケート命令に応答して、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、若しくは終わるソース・ベクトルのデータ要素のシーケンスのデータ値、又は前記選択されたデータ要素位置を示す要素インデックスで始まる、若しくは終わる要素インデックスのインクリメントするシーケンスを備える、結果ベクトルを生成するように処理回路を制御すること
を備えるデータ処理方法を提供する。
【０００５】
少なくとも一部の例は、前述した装置に対応する命令実行環境を提供するようにコンピュータを制御するための仮想マシン・プログラムを記憶するコンピュータ可読記憶媒体を提供する。
【０００６】
本技法のさらなる態様、特徴、及び利点は、添付の図面と併せて読まれるべき、例の後段の説明から明白となろう。
【図面の簡単な説明】
【０００７】
【図１】ベクトル命令を処理することをサポートするデータ処理装置の例を概略で示す図である。
【図２】ベクトル処理の例を示す図である。
【図３】ソース変換形態のパーティション・レプリケート命令の第１の例を示す図である。
【図４】ソース変換形態のパーティション・レプリケート命令の第２の例を示す図である。
【図５】ソース変換形態のパーティション・レプリケート命令の第２の例を示す図である。
【図６】ソース変換形態のパーティション・レプリケート命令の第２の例を示す図である。
【図７】インデックス生成形態のパーティション・レプリケート命令の一例を示す図である。
【図８】インデックス生成形態のパーティション・レプリケート命令の一例を示す図である。
【図９】インデックス生成形態のパーティション・レプリケート命令の一例を示す図である。
【図１０】ロード−レプリケート形態のパーティション・レプリケート命令の例を示す図である。
【図１１】パーティション・レプリケート命令を処理する方法を示すフローチャートである。
【図１２】ソース変換形態の要素レプリケート命令の例を示す図である。
【図１３】ソース変換形態の要素レプリケート命令の例を示す図である。
【図１４】ソース変換形態の要素レプリケート命令の例を示す図である。
【図１５】ソース変換形態の要素レプリケート命令の例を示す図である。
【図１６】ソース変換形態の要素レプリケート命令の例を示す図である。
【図１７】ロード−レプリケート形態の要素レプリケート命令の例を示す図である。
【図１８】インデックス生成形態の要素レプリケート命令の例を示す図である。
【図１９】要素レプリケート命令を処理する方法を示すフローチャートである。
【図２０】フレーム内の様々なサイズのタイルに対して行列乗算を実行するための要素レプリケート命令を使用することの例を示す図である。
【図２１】フレーム内の様々なサイズのタイルに対して行列乗算を実行するための要素レプリケート命令を使用することの例を示す図である。
【図２２】フレーム内の様々なサイズのタイルに対して行列乗算を実行するための要素レプリケート命令を使用することの例を示す図である。
【図２３】パーティション・レプリケート命令が使用され得るＦＦＴ計算の例を示す図である。
【図２４】使用され得る仮想マシン実装形態を示す図である。
【発明を実施するための形態】
【０００８】
一部の特定の例が以下に説明される。本技法は、これらの例そのものに限定されないことが認識されよう。
【０００９】
データ処理装置が、複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路と、ベクトル処理操作を実行するように処理回路を制御するプログラム命令を復号する命令デコーダとを有することが可能である。多くの処理アプリケーションに関して、ベクトル処理は、ベクトル長（１つのベクトルにおけるデータ要素の数）に依存する係数でパフォーマンスを向上させることができる。しかし、本発明者らは、例えば、デジタル信号処理（ＤＰＳ）、ハイ・パフォーマンス・コンピューティング（ＨＰＣ）、及びＮｅｔｗｏｒｋｉｎｇアプリケーションにおいて、処理されているデータの大きさがパフォーマンスを制限する可能性があり、したがって、ベクトル長を増大させることが、対応するパフォーマンス高速化をもたらさない一部のアルゴリズムが存在することを認識した。そのようなアルゴリズムの例が、比較的小さい大きさ（例えば、２×２、３×３、４×４、３×２、その他）を有する行列の行列乗算を含むアルゴリズムであり得る。そのようなアルゴリズムに標準のベクトル命令を適用することは、ベクトルの多くのレーンが、操作されている小さいデータの大きさのため、埋められないままであり得るので、非効率なパフォーマンスにつながる可能性がある。
【００１０】
パーティション・レプリケート命令
命令デコーダは、結果ベクトル内の２つ以上の可変サイズ・パーティションの位置を定義するパーティション情報を指定するパーティション・レプリケート命令をサポートすることが可能である。パーティション・レプリケート命令に応答して、命令デコーダは、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、若しくは終わるソース・ベクトルの隣接するデータ要素のシーケンスのデータ値、又は前記選択されたデータ要素位置を示す要素インデックスで始まる、若しくは終わる要素インデックスのインクリメントするシーケンスを備える、結果ベクトルを生成するように処理回路を制御する。
【００１１】
したがって、その命令は、結果ベクトルのそれぞれのパーティションを、ソース・ベクトルにおける選択されたデータ要素位置で始まるデータ要素のシーケンスのデータ値で、又は、パーティションの位置が可変であり、その命令によって指定される場合、要素のシーケンスに関する対応する要素インデックスでポピュレートすることができる。この命令は、データ構造が、ベクトル長と比べて比較的小さい大きさを有する場合、アルゴリズムのベクトル化された処理を高速化するのを助けることができる。例えば、このことは、各パーティションが、所与の行又は列のいくつかのインスタンスが同一のベクトル内に詰められて、データ構造の対応する行又は列のデータ値又は要素インデックスで埋められることを可能にすることができる。
【００１２】
パーティションの位置を定義するパーティション情報を符号化するためのいくつかのオプションが存在する。一例において、パーティション情報は、結果ベクトル内のパーティションの始まり又は終わりをそれぞれが識別する１つ又は複数のマーカ・ビットを含むパーティション・マスク情報（レジスタの参照によって、又は直接の値として指定され得る）を備える。したがって、マスク内の様々なロケーションにおいてパーティション・マスク情報をマーカ・ビットと一緒に符号化することによって、パーティションの様々な数、位置、及びサイズが定義され得る。このことは、一様でない行又は列の長さを有するデータ構造の処理をサポートするために有用であり得る。
【００１３】
代替として、パーティション情報は、１パーティション当たりのデータ要素の数を示すパーティション・サイズ情報を備えることも可能である。例えば、パーティション・サイズ情報は、データ要素の数を示すスカラ値であり得る。一部の例において、パーティション・サイズ情報は、例えば、各パーティションにおける要素の数を示すスカラ値のアレイを指定することによって、各パーティションに関してデータ要素の数を別々に指定することも可能である。しかし、異なるサイズのパーティションが要求される場合、前述の例の場合と同様にマスクを使用してこれを符号化する方が、より効率的であり得る。
【００１４】
他の例において、パーティション・レプリケート命令の符号化は、第１のパーティション又は最後のパーティション以外のすべてのパーティションが同一の数のデータ要素を有するように制約してよい。例えば、パーティション・レプリケート命令は、各パーティションの所望されるサイズを指定する単一のスカラ値を指定してよい。パーティション・サイズ情報を定義するスカラ値は、直接の値として、又はレジスタの参照によって指定され得る。代替として、パーティション・レプリケート命令は、パーティション・サイズが、固定の参照ポイントに対する第１の、若しくは最後の活性ビットの位置によって、又はマスクの第１の活性ビットと最後の活性ビットの間のデータ要素の数によって識別され得る制御マスクを指定してよい。各パーティションに関して単一のパーティション・サイズを指定する符号化では、パーティションが定義されるべきベクトルの活性領域の長さが、パーティション・サイズの厳密な倍数である場合、すべてのパーティションは、同一のサイズを有し得る。しかし、活性領域におけるデータ要素の数が、パーティション・サイズの厳密な倍数ではない場合、第１のパーティション又は最後のパーティションは、そのパーティションが、その他のパーティションと比べて、より少ない要素を有するように切り詰められることが可能である（第１のパーティション又は最後のパーティションのサイズは、そのサイズが、パーティション・サイズ及びベクトル長、又は活性領域のサイズから暗示され得るので、命令において明示的に符号化されなくてよい）。各パーティション（第１のパーティション又は最後のパーティション以外の）が同一の数のデータ要素を有するように制約する命令は、命令セット・アーキテクチャにおいて、より少ない符号化スペースしか要求しないことが可能であり、すべての行又は列が同一の長さを有するデータ構造を使用する多くの一般的な処理アルゴリズム（例えば、正方行列又は長方行列の行列乗算）をサポートするのに十分であり得る。
【００１５】
要素レプリケート命令の一部の例に関して、命令の符号化は、各パーティションに関する選択されたデータ要素位置として様々なデータ要素位置を識別するための情報を含んでよい。例えば、命令は、所与のパーティションに関する選択されたデータ要素位置と次のパーティションに関する選択されたデータ要素位置の間の一般的なストライド差を識別するストライド・パラメータを指定することが可能である。
【００１６】
しかし、他の例に関して、選択されたデータ要素位置は、各パーティションに関して同一であってよい。したがって、事実上、パーティション・レプリケート命令は、データ値又は要素インデックスの所与のシーケンスが結果ベクトル内で数回、繰り返させ得る（一部の繰り返しは、パーティション情報が同一の結果ベクトル内で様々なサイズのパーティションを定義する場合、他の繰り返しと比べて、切り詰められてよいことに留意されたい）。データ値又は要素インデックスの所与のシーケンスを結果ベクトル内で複数回、繰り返すことができることは、行列、又は類似したデータ構造を処理するために非常に有用であり得る。例えば、行列乗算において、行列の同一の行に、いくつかの異なる列における値が掛けられる必要があることが可能であり、したがって、行列の所与の行を結果ベクトル内で複数回、レプリケートすることによって、行をそれぞれの列と組み合わせることの複数の反復が、命令のベクトル化されたループの単一の反復において扱われることが可能である。
【００１７】
一部の例において、パーティション・レプリケート命令は、各パーティションが、ベクトルの隣接しないデータ要素のシーケンスに対応するソース・ベクトル・データ値又は要素インデックスで埋められる事例をサポートしてよい。例えば、パーティション・レプリケート命令の一変形が、ストライド・パラメータによって定義される間隔で要素（例えば、ストライド２で要素０、２、４、６．．．、又はストライド３で要素０、３、６．．．のシーケンスといったような）を拾い上げることが可能である。
【００１８】
しかし、他の例において、各パーティションに割り当てられるシーケンスは、ソース・ベクトルの隣接する要素のシーケンス、又はそれらの隣接する要素に対応する要素インデックスのインクリメントするシーケンスであってよい。各パーティションが、要素の隣接するブロックのデータ値又は要素インデックスで埋められるように制限することは、命令符号化、及び命令を実行するためのハードウェアを簡略化することができ、例えば、行列の行に対応する要素を抽出し、且つそのことを数回、繰り返すことが望ましい可能性がある行列演算などの一般的に実行される演算操作をサポートするのに十分であり得る。
【００１９】
一部の例において、選択されたデータ要素位置は、パーティション・レプリケート命令の符号化において定義されている選択されたデータ要素位置を識別する情報なしに、ソース・ベクトル内の特定の位置にあるようにデフォルトで指定されてよい。例えば、デフォルトで、選択されたデータ要素位置は、最下位データ要素であることが可能である（選択されたデータ要素位置が、データ値又は要素インデックスが各パーティションに割り当てられるべきデータ要素のシーケンスの始まりを印付ける例において）。多くのベクトル処理アルゴリズムは、通常、最下位要素から始めてベクトルを埋めることが可能であり、したがって、そのような命令は、ほとんどの使用事例を依然としてサポートすることが可能であり、且つソース・ベクトル内の任意のロケーションで始まるシーケンスをサポートする命令と比べて、より少ない符号化スペースしか要求しないことが可能である。同様に、選択されたデータ要素位置が、データ要素のシーケンスの終わりを印付ける例に関して、選択されたデータ要素位置は、最上位データ要素位置であることが可能である。
【００２０】
しかし、他の例において、選択されたデータ要素位置は、可変であってよく、且つパーティション・レプリケート命令内に符号化された要素選択情報によって指定されてよい。パーティション位置情報は、様々な様態で、例えば、選択されたデータ要素位置が、マスクにおける第１の、若しくは最後の活性ビットの位置によって識別されて、マスク値を介して、又は選択されたデータ要素位置を指定するスカラ値によって符号化されることが可能である。パーティション・レプリケート命令が、ソース・ベクトルから、ソース・ベクトル内の任意の位置に対応するデータ要素のシーケンスを抽出すること（又は対応する要素インデックスを出力すること）を可能にすることによって、このことは、ベクトル内の要求されるロケーションに所望されるデータを置くのに、他の命令がソース・ベクトルを前もって操作する必要性を低減して、所与の処理結果を計算するのに必要とされる命令の総数を低減するのに役立つことが可能である。
【００２１】
パーティション・レプリケート命令の一部の例（例えば、パーティション情報が、マーカ・ビットが各パーティションの始まり／終わりを識別して、マスクを使用して定義される場合）に関して、命令は、少なくとも１つのパーティションが単一の要素を備える符号化をサポートしてよい。単一の要素を備えるパーティションが定義される場合、その要素は、ソース・ベクトル内の選択されたデータ要素位置に対応するデータ値又は要素インデックスでポピュレートされてよい。
【００２２】
一部の例において、パーティション情報は、結果ベクトル全体内のパーティションを定義してよく、すなわち、ベクトル全体が、活性部分と見なされてよい。
【００２３】
しかし、他の例において、パーティション・レプリケート命令は、パーティションを備える結果ベクトルの活性部分を定義する活性部分情報を指定してよい。そのような命令に関して、活性部分内の要素は、前述したとおり、データ要素のシーケンスに対応するデータ値又は要素インデックスで埋められるが、活性部分の外部の要素は、異なる値をとり得る。例えば、活性部分の外部の要素は、０などの所定の値に設定されてよく、又は結果ベクトルを記憶するのに使用されるデスティネーション・レジスタの対応するデータ要素の前の値を保持してよい。活性部分情報は、様々な様態で、例えば、活性部分内の要素に印を付ける一連の活性ビットを備えるマスク（又はプレディケート）値を使用して符号化され得る。代替として、活性部分は、活性ビットが活性部分の終わりに印を付けて、制御マスクを使用して、又は活性部分は、デフォルトで、ベクトルの最下位端で始まるものと想定されて、活性部分のサイズを指定するスカラ値を使用することによって定義されることも可能である。
【００２４】
場合によっては、共通の制御値が、パーティション情報（結果ベクトル内のパーティションのロケーションを定義する）、要素選択情報（各パーティションに割り当てられるべきシーケンスの始まり／終わりを定義する）、及び活性領域情報（パーティションが形成されるべき結果ベクトルの要素を定義する）のうちの２つ以上を指定する組み合わされた符号化を有してよい。例えば、活性部分情報及びパーティション情報が、各ビットが、結果ベクトルの所与のデータ要素に対応し、且つ活性値（１と０のうちの１つ）又は不活性値（１と０のうちの他方）に設定され得る、共通のビット・マスクを使用して符号化されることが可能である。ビット・マスクにおける最下位活性ビットの位置は、各パーティションのサイズを示し、ビット・マスクにおける最上位活性ビットの位置は、活性部分のサイズを示す。選択されたデータ要素位置は、ソース・ベクトルの最下位データ要素位置であるものと暗黙に想定されてよく、また、活性部分の始まりも、最下位データ要素位置で暗黙に始まってよい。また、パーティション・サイズは、指定されたサイズのパーティションが、活性領域の終わりに達するまで繰り返される（必要な場合、最終の繰り返しが切り詰められて）パーティションの繰り返しパターンを定義して、結果ベクトル内のパーティションの位置を暗黙に識別しもする。このタイプの命令は、一般的な使用事例をサポートしながら、単一の制御マスクにおけるパーティション・レプリケート命令の制御パラメータの比較的効率的な符号化を可能にして、さらなる制御レジスタを消費するのを必要とすることを回避する。
【００２５】
パーティション・レプリケート命令は、ハードウェアにおいて様々な様態で実装されてよい。場合によっては、ソース・ベクトルの任意に位置付けられたデータ要素を、結果ベクトル内の任意の位置にマップするための汎用の置換ユニットが既に提供されていることが可能であり、その場合、置換ユニットが、パーティション・レプリケート命令を実装するために再使用され得る。しかし、パーティション・レプリケート命令のために必要とされるソース−結果マッピングのセットは、汎用の置換ユニットによってサポートされるマッピングの制限されたサブセットであり得るので、他の例において、パーティション・レプリケート命令によって要求されるマッピングだけをサポートする何らかの特別のハードウェアが提供されることも可能であり、そのようにされることは、そのようなハードウェアが、ソース・ベクトルの所与の要素を結果ベクトルの所与の要素に結び付けるデータラインが、そのような要素マッピングがパーティション・レプリケート命令によって決して要求されることがない場合、省かれることを可能にし得るので、より効率的であり得る。したがって、処理回路は、前述した形態の結果ベクトルをもたらす任意の回路を使用してパーティション・レプリケート命令を処理してよいことが認識されよう。
【００２６】
いくつかの異なる形態のパーティション・レプリケート命令が提供され得る。ソース・ベクトルを記憶するソース・レジスタを指定するソース変換形態のパーティション・レプリケート命令に応答して、命令デコーダは、複数のデータ要素を有する各パーティションが、選択されたデータ要素位置で始まる、又は終わるソース・ベクトルのデータ要素のシーケンスのデータ値を備える、結果ベクトルを生成するように処理回路を制御してよい。したがって、この形態の命令は、ソース・ベクトルからデータ値の要求されるシーケンスを抽出し、それらのデータ値を、結果ベクトル内の関係のあるパーティションにマップする。
【００２７】
代替として、パーティション・レプリケート操作は、単一の命令においてロード操作と組み合わされることが可能である。この事例において、レジスタに記憶されるのではなく、ソース・ベクトルは、メモリなどのデータ・ストアに記憶されたデータ要素のセットに対応してよい。ロード−レプリケート形態のパーティション・レプリケート命令に応答して、命令デコーダは、データ・ストアからソース・ベクトルの少なくとも一部をロードするように、且つ繰り返しパターンが、ソース・ベクトルからのデータ要素のシーケンスのデータ値を備える、結果ベクトルを生成するように処理回路を制御してよい。このことは、ソース変換形態のパーティション・レプリケート命令と均等の結果をもたらし得るが、ソース・ベクトルを記憶するために別個のベクトル・レジスタを割り当てるのを必要とすることを回避し、このことが、レジスタ圧力を低減するのに役立ち得る。
【００２８】
別の例において、ソース・ベクトルの実際のデータ値を結果ベクトルのデータ要素にマップするのではなく、代わりに、インデックス生成形態のパーティション・レプリケート命令が、結果ベクトルの各パーティションを、選択されたデータ要素位置を示す要素インデックスで始まる、又は終わる要素インデックスのインクリメントするシーケンスでポピュレートしてよい。インデックス生成形態の命令からもたらされる結果ベクトルは、事実上、ソース・ベクトルからのデータ要素の、さらなる結果ベクトルに対するマッピングを制御するのに後続の命令によって次に使用され得る制御ベクトルと見なされてよい。例えば、後続の命令は、メモリからのデータ値を、結果ベクトルのそれぞれの要素にロードする収集ロード命令であることが可能であり、結果ベクトルの各要素に関するロードされるデータ値のアドレスを識別するのに使用されるアドレス・オフセットは、制御ベクトル内の対応する要素インデックスに基づいて決定される。代替として、後続の命令は、ベクトル内のいずれかの任意の位置からのデータ値が結果ベクトル内のいずれかのデータ要素位置にマップされることを可能にする汎用の置換命令であることも可能であり、前に実行されたインデックス生成形態のパーティション・レプリケート命令からもたらされる制御ベクトルが、ソース・ベクトルのいずれの要素が、結果の各要素にマップされるべきかを指定する。
【００２９】
ソース変換形態及びロード−レプリケート形態のパーティション・レプリケート命令は、ソース・ベクトルからのデータ値の選択されたシーケンスを結果ベクトル内のそれぞれのパーティションにマップする全体的な操作が単一の命令によって制御される、「融合された」命令と見なされ得る。このアプローチは、より高いパフォーマンスをもたらすことが可能であり、且つこの操作のために特別に設計されたより効率的な回路が使用されることを可能にし得る。
【００３０】
他方、インデックス生成命令は、インデックス生成命令の後に別の命令が続いて、ソース・ベクトルからのデータ値を結果ベクトルのパーティションにマップする全体的な操作が、別々の２つの命令に分割され得る、「融合されていない」命令と見なされ得る。このアプローチは、他のいかなる命令が既にサポートされているかに応じて、ときとして、マイクロアーキテクチャにおいて実装することがより簡単であり得る。例えば、特定の実装形態が、ソース・ベクトルのデータ要素の、結果ベクトルのいずれかのデータ要素位置に対するいずれかの任意のマッピングを可能にする汎用の置換命令を既にサポートしている場合、インデックス生成命令の機能を追加して、インデックス生成命令の結果が、汎用の置換命令を制御するための入力として使用され得るようにすることが、インデックス生成命令は、ソース変換形態又はロード−レプリケート形態のパーティション・レプリケート命令などの「融合された」命令をサポートする特注回路が提供されたとした場合と比べて、より少ない追加の回路しか要求しなくてよいので、より効率的であり得る。
【００３１】
一部の実装形態は、前述したソース変換形態、ロード−レプリケート形態、及びインデックス生成形態のパーティション・レプリケート命令のうちの１つだけをサポートしてよい。他の実装形態は、命令オペコード、又は命令符号化の別のパラメータが、いずれの形態が実行されるべきかを示して、これらの形態の命令のうちの複数をサポートしてよい。
【００３２】
要素レプリケート命令
命令デコーダは、結果ベクトル内の２つ以上の可変サイズ・セグメントの位置を定義するセグメント情報を指定する要素レプリケート命令を復号することをサポートしてよく、各パーティションは、結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つのパーティションは、結果ベクトルの複数のデータ要素を備える。要素レプリケート命令に応答して、命令デコーダは、それぞれ各セグメントにおいて、繰り返す値が、結果ベクトルのそのセグメント全体にわたって繰り返され、繰り返す値は、ソース・ベクトルの対応するセグメントの選択されたデータ要素位置におけるデータ値、又は前記選択されたデータ要素位置を示す要素インデックスを備える、結果ベクトルを生成するように処理回路を制御する。
【００３３】
したがって、要素レプリケート命令は、結果ベクトルにおける複数の可変サイズ・セグメントを定義し、各セグメントにおいて、１つの繰り返す値が、そのセグメントにおいて数回、繰り返される。繰り返す値は、各セグメントに関して異なることが可能であり、且つソース・ベクトルにおける対応するセグメントの選択されたデータ要素のデータ値、又はその選択されたデータ要素の要素インデックスであってよい。この命令は、データ構造が、ベクトル長より小さい大きさを有し、単一のデータ値に、行列の所与の行内、若しくは列内の値のそれぞれが掛けられることが、しばしば、要求され、したがって、その行／列構造に対応するパーティションを定義すること、及び異なるパーティションにおいて繰り返されるべき単一の値として異なる値を選択することによって、このことが、いくつかの行／列に関する乗算のいくつかの反復が、ベクトル化されたループの単一の反復において実行されることを許すことを可能にして、パフォーマンスを向上させるのに役立つ、行列乗算などのアルゴリズムに関して有用であり得る。また、要素レプリケート命令は、様々な他の種類の処理操作のために有用であることも可能である。
【００３４】
セグメント情報は、様々な様態で符号化されることが可能である（例えば、パーティション・レプリケート命令のパーティション情報に関して前述した技法のいずれかが、要素レプリケート命令のセグメント情報に関して対応する様態で使用されることも可能である）。例えば、結果ベクトル内の各セグメントの始まり又は終わりを識別するマーカ・ビットを備えるセグメント・マスク情報が使用されることも可能である。代替として、セグメント情報は、１セグメント当たりのデータ要素の数を示すセグメント・サイズ情報（例えば、制御マスク又はスカラ値）を指定することも可能である。一部の例は、同一の結果ベクトル内で様々なサイズのセグメントをサポートすることが可能である一方で、他のアプローチは、第１のセグメント、又は最後のセグメント以外のすべてのセグメントが同一の数のデータ要素を有するように制約することが可能である（第１のセグメント又は最後のセグメントは、セグメントで埋められた活性領域のサイズがセグメント・サイズの厳密な倍数ではない場合、異なるサイズを有してよい）。
【００３５】
また、要素レプリケート命令は、各セグメントに関して選択されたデータ要素位置を示す要素選択情報を指定してもよい（このことは、ソース・ベクトルのどの特定の要素又はどの特定の要素インデックスが、各セグメントにわたって繰り返されるかを定義する）。要素選択情報は、様々な様態で符号化されることが可能である。場合によっては、命令の符号化は、各セグメントに関して独立に要素選択情報を指定してよい（例えば、制御マスクが、各セグメントにおける選択された要素位置を識別する活性ビットを有してよい）。他の場合には、命令の符号化は、すべてのセグメントが同一の選択されたデータ要素位置を有するように制約してよい。例えば、要素選択情報は、各セグメントの第Ｎの要素が選択された要素であることを示すべく、値Ｎを指定するスカラ値であることも可能である。
【００３６】
一部の例において、要素レプリケート命令は、複数のセグメントを備える結果ベクトルの活性部分を示す活性部分情報を指定してよく、要素レプリケート命令に応答して、命令デコーダは、活性部分の外部の少なくとも１つのデータ要素が、所定の値、又は結果ベクトルを記憶するためのデスティネーション・レジスタの対応するデータ要素の値を有する、結果ベクトルを生成するように処理回路を制御してよい。このことは、結果ベクトルの残りの部分が、それらの部分が繰り返す要素で埋められないように「マスクされて閉ざされる」ことを可能にし、このことは、例えば、処理されているデータ構造が、ベクトル長がデータ構造の行又は列で完全に埋められることが可能でない大きさを有する場合、有用であり得る。
【００３７】
しかし、他の例は、結果ベクトル全体が、要素レプリケート命令に基づいて各セグメントにおいて繰り返す値で埋められる活性部分であると見なしてよい。この事例において、活性部分情報を指定する必要は全くない。
【００３８】
パーティション・レプリケート命令と類似した様態で、ソース変換形態、ロード−レプリケート形態、及びインデックス生成形態の要素レプリケート命令が提供されてよい。この場合も、いずれの特定の実装形態も、これらの形態の命令のうちの１つだけを実装すること、又は２つ以上を実装することを選択することが可能である。要素レプリケート命令を実装するのに使用される回路は、マイクロアーキテクチャ実装形態に応じて異なってよい（例えば、汎用の置換ユニットが使用されることが可能であり、又はより特別の回路が、要素レプリケート命令によって要求される要素マッピングのより限定されたサブセットをサポートするように設計されることが可能である）。したがって、一般に、復号された要素レプリケート命令に応答して、アーキテクチャ・レベルで定義された振舞いをもたらす任意の回路が使用されることが可能である。
【００３９】
パーティション・レプリケート命令及び要素レプリケート命令は、少なくとも１つのパーティションが、結果ベクトルの複数のデータ要素を備えて、２つ以上のパーティションが定義される符号化をサポートすることが可能であるが、パーティションの他の構成を有して、例えば、単一のパーティションだけを有して、又は単一のデータ要素をそれぞれが備えるいくつかのパーティションを有して結果ベクトルが定義されることを許す、これらの命令の有効な符号化も存在し得ることに留意されたい。このことは、同一の命令が、ソース・ベクトルの各要素を、活性領域内の結果ベクトルの対応する要素に直接にマップすること、又は結果ベクトル全体にわたってソース・ベクトルの同一のデータ要素を繰り返すことなどの、他のタイプの操作を実行するために使用されることを可能にし得る。そのようなさらなる符号化をサポートすることは、そのような操作を制御するためにＩＳＡにおいて他の命令を備えることを不要にして、符号化スペースのより効率的な使用を可能にし得る。それでも、パーティション・レプリケート命令及び要素レプリケート命令の符号化は、パーティション・レプリケート命令又は要素レプリケート命令を表すビット値の少なくとも１つのパターンが、結果ベクトルが、少なくとも１つのパーティションが複数のデータ要素を備えた、複数のパーティションを備えるべきことを示すようにしてよい。
【００４０】
一部の実装形態は、パーティション・レプリケート命令と要素レプリケート命令のうちの１つだけを実装してよい。例えば、後段の例において示されるとおり、パーティション・レプリケート命令は、要素レプリケート命令が提供されない場合でさえ、ＦＦＴアルゴリズムに有用であり得、要素レプリケート命令は、パーティション・レプリケート命令が提供されない場合でさえ、フレームごとの行列乗算に有用であり得る。
【００４１】
しかし、パーティション・レプリケート命令と要素レプリケート命令の両方をサポートする実装形態は、それらの実装形態が、比較的小さい大きさの行列を使用する行列乗算が、行列の複数の行がベクトル化されたループの単一の反復において扱われて、計算されることを可能にするので、特に有用である。
【００４２】
また、前述した命令は、仮想マシン内に実装されることも可能である。仮想マシンは、所与のアーキテクチャの処理ハードウェアを、そのハードウェアを自らが有さないシステム上でエミュレートするのに使用され得る。汎用のコンピュータが、パーティション・レプリケート命令又は要素レプリケート命令をサポートするハードウェアを有さない装置のものに対応する命令実行環境を提供するように仮想マシン・プログラムを実行してよく、したがって、これらの命令は、そのハードウェアが実際に提供されているかのように同一の結果をもたらすべく仮想マシン内で実行され得る。仮想マシン・コンピュータ・プログラムは、非一時的記録媒体上に記憶されてよい。
【００４３】
（例示的な実施例）
図１は、説明される実施例の技法が使用されてよいシステムのブロック図である。図１に示される例において、システムは、パイプライン・プロセッサの形態をとる。命令が、命令キャッシュ１５（通常、レベル２キャッシュ５０などのキャッシュのさらなる１つ又は複数のレベルを介してメモリ５５に結合される）からフェッチ回路１０によってフェッチされ、フェッチ回路１０から、命令は、命令によって要求される操作を実行するようにパイプライン・プロセッサ内の下流実行リソースを制御するための適切な制御信号を生成するために各命令を復号する復号回路２０に通される。復号された命令を形成する制御信号は、パイプライン・プロセッサ内の１つ又は複数の実行パイプライン３０、３５、４０、８０に発行されるように発行段回路２５に送られる。実行パイプライン３０、３５、４０、８０は、一緒になって処理回路を形成するものと見なされてよい。
【００４４】
発行段回路２５は、操作によって要求されるデータ値が記憶され得るレジスタ６０に対するアクセスを有する。特に、ベクトル演算のためのソース・オペランドは、ベクトル・レジスタ６５内に記憶されてよく、スカラ演算のためのソース・オペランドは、スカラ・レジスタ７５に記憶されてよい。さらに、１つ又は複数のプレディケート（マスク）が、いくつかのベクトル演算を実行するときに処理されるベクトル・オペランドのデータ要素のための制御情報として使用されるように、プレディケート・レジスタ７０に記憶されてよい。また、スカラ・レジスタのうちの１つ又は複数が、いくつかのベクトル演算の実行中に使用されるようにそのような制御情報を導き出すのに使用されるデータ値を記憶するのに使用されてもよい。
【００４５】
ソース・オペランド、及び任意の関連する制御情報は、パス４７経由で発行段回路に入るようにルーティングされることが可能であり、したがって、ソース・オペランド、及び任意の関連する制御情報は、復号された各命令を実施するように実行されるべき操作を識別する制御信号と一緒に、適切な実行ユニットにディスパッチされ得る。図１に示される様々な実行ユニット３０、３５、４０、８０は、ベクトル・オペランドに対して演算するためのベクトル処理ユニットであるものと想定されるが、装置によってサポートされる任意のスカラ演算を扱うのに所望される場合、別の実行ユニット（図示せず）が提供されることが可能である。
【００４６】
様々なベクトル演算を考慮して、算術演算は、例えば、算術演算又は論理演算が実行されることを可能にするために、要求されるソース・オペランド（及びプレディケートなどの制御情報）と一緒に算術論理ユニット（ＡＬＵ）３０に転送されてよく、結果値は、ベクトル・レジスタ・バンク６５の指定されたレジスタに記憶されるように、通常、デスティネーション・オペランドとして出力される。
【００４７】
ＡＬＵ３０に加えて、他の実行ユニット３５、例えば、復号された浮動小数点命令に応答して浮動小数点演算を実行するための浮動小数点ユニット（ＦＰＵ）、及びベクトル・オペランドに対していくつかの置換操作を実行するためのベクトル置換ユニット８０が提供されてよい。さらに、ロード／ストア・ユニット（ＬＳＵ）４０が、メモリ５５からデータ値を（データ・キャッシュ４５、及びレベル２キャッシュ５０などの介在するさらなるレベルのキャッシュを介して）レジスタ・セット６０内の指定されたレジスタにロードするためにロード操作を実行するため、及びそれらのレジスタからデータ値をメモリ５５に再び記憶するために記憶操作を実行するために使用される。
【００４８】
図１に示されるシステムは、命令のシーケンスがプログラム順序で実行されるイン・オーダ処理システムであってよく、又は、代替として、様々な命令が実行される順序が、パフォーマンスを向上させることを求める目的で並べ替えられることを許す、アウト・オブ・オーダ・システムであってよい。当業者によって理解されるとおり、アウト・オブ・オーダ・システムにおいて、さらなる構造（図１に明示されない）、例えば、命令によって指定されるアーキテクチャ・レジスタをレジスタ・バンク４５内の物理レジスタのプールからの物理レジスタにマップする（物理レジスタのプールは、通常、アーキテクチャ・レジスタの数と比べて、より大きい）レジスタ名前変更回路が提供されてよく、その結果、いくつかの障害が取り除かれることを可能にして、アウト・オブ・オーダ処理の使用をより円滑にする。さらに、並べ替えバッファが、アウト・オブ・オーダ実行を常に把握しているように、且つ様々な命令の実行の結果が順序通りにコミットされることを可能にするように、通常、提供されてよい。
【００４９】
説明される実施例において、図１の回路は、ベクトル・レジスタ６５に記憶されたベクトル・オペランドに対してベクトル演算を実行するように構成され、ベクトル・オペランドは、複数のデータ要素を備える。そのようなベクトル・オペランドに対して実行されるいくつかのベクトル演算（算術演算などの）に関して、要求される操作は、ベクトル・オペランド内の様々なデータ要素に並行に（又は反復して）適用されてよい。プレディケート情報（マスクとしても知られる）が、ベクトル内のいずれのデータ要素が、特定のベクトル演算に関して活性データ要素であるかを、したがって、操作が適用されるべきデータ要素であるかを識別するのに使用されてよい。
【００５０】
図２は、プレディケート・レジスタ７０のうちの１つに記憶されたプレディケート値Ｐｇの制御下で、対応するベクトル・レジスタ６０に記憶された２つのベクトル・オペランドＺａ、Ｚｂに対して実行されるベクトル演算の例を示す。この例において、各ベクトル・レーンに適用される独立した操作は、乗算演算であり、したがって、プレディケートＰｇにおける活性ビット（１に設定された）に対応する結果ベクトルＺｄの要素は、オペランドＺａ、Ｚｂの対応する位置における要素を乗算した結果に設定される。プレディケートＰｇの不活性ビット（０）に対応する結果ベクトルＺｄの要素は、０に設定されることが可能であり、又はデスティネーション・レジスタの対応する部分に関連付けられた前の値を保持してよい。そのようなプレディケーションは、より早期の命令が、ベクトルの要素がいくつかの基準を満たすかどうかに応じてプレディケート値Ｐｇを設定してよい条件付き操作をサポートするのに、且つ／又はベクトル・オペランドを完全に埋めるのに十分なデータが存在しない場合にベクトルのいくつかの上の方の要素に、ベクトル化されたループの最終の反復において不活性として印を付けるのに有用であり得る。
【００５１】
一部のマイクロアーキテクチャ実装形態において、ベクトルの要素のそれぞれに対して操作を並行に実行する処理論理が提供されてよい。しかし、他の実装形態は、ベクトル長全体より小さいデータ幅に対応する処理ハードウェアを提供してよく、この事例において、ベクトル命令は、より狭いハードウェアを複数回、通過して処理されてよく、各通過が、結果ベクトルの要素の対応するサブセットを生成する。一部の実装形態は、単一のデータ要素に対応する幅のハードウェアを使用して、結果の各要素を順次に生成することさえしてもよい。パフォーマンスは、より幅の広いベクトルを並行に処理できる実施例において最も高いが、ベクトルのいくつかの部分を順次に処理する実施例においてさえ、ベクトル化は、所与の量のデータを処理するのに要求される命令フェッチ、復号、及び発行帯域幅が低減されるため、純粋なスカラ命令と比べて、それでもパフォーマンスを向上させることができる。
【００５２】
図２は、各ベクトルが８つのデータ要素を含む例を示すが、これは、例に過ぎず、他の実装形態は、他の構成を使用してよく、又は可変の数若しくはサイズのデータ要素を有するベクトルに対するベクトル演算をサポートすることも可能である。命令セット・アーキテクチャは、様々なサイズのベクトル処理パス及びベクトル・レジスタを提供することが可能な或る範囲のマイクロアーキテクチャ実装形態で使用されるように設計されてよく、したがって、同一の命令が、様々なベクトル・サイズで動作する様々なプラットフォーム上で実行され得る。より短いベクトル長を使用する実装形態は、より長いベクトル長を使用する実装形態と比べて、ベクトル化されたループのより多くの反復を要求し得る（ベクトル化されたループは、ループにおける各反復が、メモリからのデータのチャンクをロードし、ロードされたベクトルの各要素を、何らかの定義された一連の処理操作に従って処理し、結果をメモリに再び記憶するベクトル命令を備えるループである）。
【００５３】
２×２、３×３、４×４、その他などの小さい大きさが関与する行列乗算は、ＨＰＣ領域、ＤＳＰ領域、及びＮｅｔｗｏｒｋｉｎｇ領域に含まれる様々なアルゴリズムにおいて一般的な使用事例であり得る。そのような行列乗算は、小さい大きさの正方行列乗算演算が、ビデオ処理アルゴリズム及び画像処理アルゴリズムにおいて一般的に使用されるとおり、ピクセル値などのより大きいフレーム・データに対して実行される、ブロック・ベースの変換操作の根幹でもある。小さい大きさを有する行列は、ベクトル長ではなく、入力データの大きさが、最適化のための制限要因を成す、ベクトル化に関して独特の問題をもたらす。したがって、ベクトル長を大きくすることがパフォーマンスを向上させることはなく、これらのアルゴリズムは、より大きいベクトル長につれて拡大され得ない。幅の広いベクトル長を有するベクトル実装形態が、この問題よって最も大きく影響される。後段の例は、この問題を示す。
【００５４】
Ｍに関していずれかの任意の値を有する、Ｍ×Ｍ行列乗算を考慮されたい。例えば、Ｍ＝３であり、
2020501270.tif 000003
ここで、ｃ０＝ａ０ｂ０＋ａ１ｂ３＋ａ２ｂ６、ｃ１＝ａ０ｂ１＋ａ１ｂ４＋ａ２ｂ７、ｃ２＝ａ０ｂ２＋ａ１ｂ５＋ａ２ｂ８、ｃ３＝ａ３ｂ０＋ａ４ｂ３＋ａ５ｂ６、ｃ４＝ａ３ｂ１＋ａ４ｂ４＋ａ５ｂ７、ｃ５＝ａ３ｂ２＋ａ４ｂ５＋ａ５ｂ８、ｃ６＝ａ６ｂ０＋ａ７ｂ３＋ａ８ｂ６、ｃ７＝ａ６ｂ１＋ａ７ｂ４＋ａ８ｂ７、ｃ８＝ａ６ｂ２＋ａ７ｂ５＋ａ８ｂ８である。
【００５５】
Ｍ×Ｍ行列乗算に関するいくらかのスカラ・コードの例が、以下のとおりである。
2020501270.tif 000004
スカラ・アプローチは、別個の各乗算が、別個の積和演算命令で、ループの別個の反復において実行されるので、遅い。
【００５６】
スカラ行列乗算をベクトル化するための１つのアプローチは、行／列全体（又はベクトル長が行／列長より小さい場合、行／列の一部）をベクトル・レジスタに読み取ること、及び出力値を生成すべく複数の要素を並行に処理することによってである。このアプローチは、各反復においてベクトル・レジスタを埋めるのに十分なデータが存在する限り、すなわち、ベクトル長の大きさより大きい大きさを有する行列に関して、ベクトル長につれてうまく拡大される。より大きいベクトル長に関して、より多くのデータがベクトル・レジスタに詰めることが可能であり、その結果、事実上、反復の数を低減し、且つパフォーマンスを向上させる。
【００５７】
しかし、ＤＳＰ、ＨＰＣ、及びＮｅｔｗｏｒｋｉｎｇにおける多くのアルゴリズムにおいて、行列演算は、小さい大きさに対して実行される。さらに、場合によっては、これらの大きさは、２の倍数ではない。また、多くの画像処理アルゴリズム及びビデオ処理アルゴリズムにおいて、操作は、より大きいフレームのデータに対して実行され、したがって、行列演算自体は、より小さい大きさに対してであるものの、操作は、フレーム・データ全体に及ぶべくブロックごとのパターンで繰り返される。可変ベクトル長（ＶＬ）を有する小さい大きさのＭ×Ｍ行列乗算を実装するための簡単なベクトル・アプローチが、以下の形態である。
2020501270.tif 000005
しかし、行列乗算をベクトル化するためのこのアプローチは、行列の大きさが、ベクトル長と比べて、より小さい場合、すなわち、ＶＬ／Ｍ＞＝２であり、ＶＬがベクトル長（１ベクトル当たりの要素の数）であり、且つＭが行列の幅である、Ｍ×Ｍ行列に関して、深刻なパフォーマンス上の欠点を有する。
【００５８】
幅の広いベクトル長を有するＳＩＭＤマシンに関して、小さい大きさの行列乗算をベクトル化するためのこのアプローチは、以下のことをもたらす。
−  小さい行／列の大きさに対して演算するために幅の広いベクトル・レジスタを使用することは、レーンのほとんどが使用されない、ベクトル・レジスタの部分的な使用をもたらす。このことは、多数のまばらに埋められたベクトル・レジスタを有する実装形態をもたらし、且つレーン使用率を大幅に低減する。
−  設計は、マシンがより大きいベクトル長を有するにつれて拡大されない。ベクトル・レジスタにおいて１つだけの行／列しか埋められないので、アルゴリズムは、ベクトル長とは無関係に同一のパフォーマンスをもたらす。
−  設計の最適化範囲は、行列の幅によって制限され、且つベクトル長とは独立である。
【００５９】
したがって、ベクトル・プロセッサが、より小さいデータの大きさに対して演算することを可能にするが、同時に、より大きいベクトル長の利点を利用する命令セット・アーキテクチャ・フィーチャを提供することが望ましい。後段の命令は、様々な大きさのデータが単一のベクトル・レジスタにおいて処理され得る、ベクトル・パーティション（又は「ベクトルのベクトル」）アプローチを可能にする。
【００６０】
後段において、プログラマが、ベクトル・レジスタの一部分を別のレジスタの中にレプリケートすることを可能にする、「パーティション・レプリケート命令」と呼ばれる命令の様々な例が説明される。任意のサイズのパーティションが、結果レジスタ内で定義されることが可能であり、且つソース・レジスタの選択される部分が、各パーティションにおいて繰り返されることが可能である。このことは、小さい大きさのデータを扱うアルゴリズムにおいて幅の広いベクトル長のマシンのためのベクトルのベクトル・アプローチを実装するのに役立ち、その結果、ベクトル長非依存の様態でベクトル長につれてパフォーマンスを拡大することを可能にする。それらの命令がどのように算術演算を高速化するのに役立ち得るかを示す例示的な使用事例が、後段で説明されるが、最初に、それらの命令自体のいくつかの変形について説明される。後段で説明される例において、説明を容易にするため、制御マスクにおける「活性ビット」は、１であるビットであるものと考えられ、不活性ビットは、０であるビットである。しかし、他の実装形態は、「０」のビットを活性ビットとして扱い、且つ「１」のビットを不活性として扱うことも可能であることが認識されよう。
【００６１】
図３は、結果ベクトルを記憶するためのデスティネーション・ベクトル・レジスタＺｄ、結果ベクトルの活性部分を識別するための制御マスク値を指定するプレディケート・レジスタＰｇ、ソース・ベクトルを記憶するためのソース・ベクトル・レジスタＺｓ、及び結果ベクトル内のいくつかのパーティションの構成を識別するパーティション情報とともに、各パーティションにマップされるべき隣接するデータ要素のシーケンスの始まりを印付けるソース・ベクトルの選択された要素の位置を識別する要素選択情報を提供するパーティション・マスク値を指定する第２のプレディケート・レジスタＰｓを指定する、ソース変換形態のパーティション・レプリケート命令の第１の例を示す。
【００６２】
この例において、活性部分は、制御マスクＰｇの活性ビットに対応する結果ベクトルの部分として識別される。パーティション・サイズは、第１の活性ビットと最後の活性ビットの間のＰｓの部分のサイズによって、又はすべてのビットが活性に設定されたＰｓの部分によって定義され得る（図３に示される２のパーティション・サイズを有する例の場合、両方のオプションは均等であるが、パーティション・サイズが３以上である場合、第１のアプローチでは、介在するビットは、任意の値をとってよいのに対して、第２のアプローチでは、第１の／最後の活性ビットの間の介在するビットもやはり活性である）。これらのパラメータは、結果ベクトル内のパーティションの構成を定義し、それぞれ指定されたサイズのいくつかのパーティションが、活性領域の終わりに達するまで繰り返される（活性領域のサイズがパーティション・サイズの厳密な倍数でない場合、最後の繰り返しは、切り詰められる）。例えば、図３において、活性領域は、結果ベクトルＺｄの下の方の５つのデータ要素を備え、パーティション・サイズは、２データ要素であり（Ｐｓにおける第１の活性ビットと最後の活性ビットは互いに隣り合っている）、したがって、最初の２つのパーティションは、それぞれ、２つのデータ要素を備え、且つ最終の切り詰められたパーティションは、単一のデータ要素を備える。結果ベクトルＺｄの残りの３つの要素は、ベクトルの不活性部分を形成する。
【００６３】
命令が実行されたとき、復号回路２０は、各パーティションが、選択された要素位置から始まるソース・ベクトルＺｓの要素のシーケンスのデータ値で埋められた結果ベクトルＺｄを生成するようにベクトル置換ユニット８０を制御する。図３の例において、選択された要素位置は、Ｚｓの要素５であり、したがって、結果ベクトルの各パーティションは、要素５におけるデータ値ｆから始まるデータ値のシーケンスで埋められる。したがって、２つのデータ要素を備えるパーティションは、データ値ｆ、ｇのシーケンスを備え、単一のデータ要素を備えるパーティションは、その要素が、選択されたデータ要素位置のデータ値ｆに設定される。
【００６４】
したがって、この命令は、ベクトル全体にわたってデータ値の同一のシーケンスの複数のインスタンスを繰り返すのに使用されることが可能であり、このことは、後段で説明されるとおり、ベクトル長と比べて、比較的小さい大きさの行列又は他のデータ構造を処理するのに役立ち得る。
【００６５】
図４は、この場合も、ソース・レジスタＺｓ及びデスティネーション・レジスタＺｄを指定するが、活性領域及びパーティション構成を定義するために単一のプレディケート・レジスタＰｇを指定する、パーティション・レプリケート命令の第２の例を示す。この例において、選択されたデータ要素位置（ソース・ベクトルから抽出されるべきデータ値のシーケンスの始まりを印付ける）は、デフォルトで要素０であるものと想定されて、暗黙である。この符号化では、プレディケート値Ｐｇにおける第１の活性ビットは、パーティション・サイズを示す（このサイズは、第１の活性ビットと最下位ビットの間のビットの数として符号化される）。プレディケート値の最後の活性ビットは、結果ベクトルＺｄの活性領域のサイズ（この場合も、最下位ビットとの関係で定義される）を示す。第１の活性ビットと最後の活性ビットの間のＰｇのビットは、それらのビットは結果に影響を及ぼさないので、それらのビットが任意の値をとることができることを示すべく「ｘ」で印が付けられる。
【００６６】
したがって、図４の例において、パーティション・サイズは、３であり（第１の活性ビットは、Ｐｇの最下位から３番目のビットにあるので）、且つ活性領域サイズは、７である（最後の活性ビットは、Ｐｇの最下位から７番目のビットにあるので）。したがって、結果Ｚｄは、３つのパーティションを有して構成され、最初の２つのパーティションは、それぞれ、３つの要素を備え、最後のパーティションは、このパーティションが活性領域に入るように切り詰められるので、単一の要素を備える。Ｚｄの最後の要素は、不活性である。したがって、命令が実行されたとき、Ｚｓの最下位データ要素位置から始まるデータ値ａ、ｂ、ｃのシーケンスが、下の方の２つのパーティションにマップされ、最後の切り詰められたパーティションは、データ値「ａ」を備える部分的シーケンスを備える。
【００６７】
図５は、図４に示されるのと同一の符号化技法を使用する第２の例を示す。図５に示されるとおり、プレディケート・レジスタＰｇに１つだけの活性ビットが存在する場合、パーティション・サイズと活性領域サイズは同一であり、命令は、デスティネーション・レジスタＺｄの活性領域を、単にＺｓの対応する要素でポピュレートし、Ｚｄの残りの要素は、不活性である。同一の符号化技法をやはり使用する図６に示されるとおり、ベクトル・レジスタ全体にわたって指定されたサイズのパーティションをレプリケートすべく、マスクＰｇの最上位ビットは、活性として印を付けられることが可能である。
【００６８】
結果ベクトルＺｄの不活性要素は、様々な様態で扱われ得る。例えば、活性領域の外部の不活性要素は、それぞれ、０などの、所定のデータ値で埋められることが可能である（「ゼロ化プレディケーション」）。代替として、デスティネーション・レジスタＺｄのそれらの不活性要素に記憶された前の値が保持されてよく、したがって、新たに割り当てられるパーティションは、Ｚｄの前の内容とマージされる（「マージング・プレディケーション」）。
【００６９】
また、パーティション・レプリケート命令の他のいくつかの変形も提供され得る。例えば、デスティネーション・レジスタ全体にわたってパーティションをレプリケートするようにプロセッサを制御する、制御マスクＰｇを指定しない、図３に示される命令のプレディケートなしの変形が提供されてよい。パーティション・サイズ及び選択されたデータ要素位置は、それでも、図３と同一の様態でＰｓを使用して符号化されることが可能であり、又は、代替として、図４に示されるアプローチが、パーティション・サイズを定義するために使用されることが可能である。
【００７０】
また、図３から図６は、命令が、ソース・ベクトル及び結果ベクトルに関してそれぞれ別々のレジスタ指定子を含む構築的符号化を示すが、他の例は、単一のレジスタが、ソース値と、結果ベクトルが書き込まれるべきロケーションの両方を指定する、破壊的符号化を使用してよい。この事例において、パーティション・レプリケート命令の結果は、ソース・オペランドの上に書かれる。
【００７１】
また、パーティション・サイズ、活性領域サイズ、及び選択されたデータ要素位置のいずれかがスカラ値を介して符号化され得る、これらの命令のスカラ変形が提供されることも可能である。例えば、
１．ＲＥＰ＿ＰＡＲＴＩＴＩＯＮ  Ｚｄ，Ｚｓ，Ｒｓ１，Ｒｓ２（構築的）、又は
ＲＥＰ＿ＰＡＲＴＩＴＩＯＮ  Ｚｄｓ，Ｒｓ１，Ｒｓ２（破壊的）、
ここで、Ｒｓ１は、パーティション・サイズを示し、Ｒｓ２は、活性領域のサイズを示す。この例において、図４の例の場合と同様に、活性領域は、デフォルトでベクトル・レーン０で始まるものと想定され、且つ選択されたデータ要素位置は、要素０として暗黙に定義される。本明細書において説明される「ベクトルのベクトル」アプローチを実装するために、Ｒｓ１＜Ｒｓ２であるものと見込まれる。しかし、命令は、Ｒｓ１＞Ｒｓ２である有効な符号化をサポートしてもよい。パーティション・サイズが、活性領域サイズより大きいものとして定義される場合、結果は、Ｒｓ２によって活性領域として印を付けられた領域における要素をソース・ベクトルから、結果ベクトルの対応する要素にコピーすることである（すなわち、より小さい活性領域サイズのために切り詰められた１つだけのパーティションが存在する）。
２．前の２つの例のプレディケートのない対応するバージョン：
ＲＥＰ＿ＰＡＲＴＩＴＩＯＮ  Ｚｄ，Ｚｓ，Ｒｓ１／／構築的
ＲＥＰ＿ＰＡＲＴＩＴＩＯＮ  Ｚｄｓ，Ｒｓ１／／破壊的
ここで、Ｒｓ１は、パーティション・サイズを指定し、この場合も、選択されるデータ要素位置は、暗黙に要素０である。Ｒｓ１がベクトル長未満である場合、結果は、Ｚｄが、Ｚｓの要素０から始まるデータ値のシーケンスでそれぞれが埋められる少なくとも２つのパーティションを備えることである。Ｒｓ１がベクトル長以上である場合、結果は、単にソース・ベクトルＺｓをデスティネーション・ベクトルＺｄに直接コピーすることである。
３．活性領域がベクトル全体であり、且つパーティション・サイズ及び選択されたデータ要素位置がスカラ値によって指定される、プレディケートのない変形：
ＲＥＰ＿ＰＡＲＴＩＴＩＯＮ  Ｚｄ，Ｚｓ，Ｒｓ１，Ｒｓ２（構築的）
ＲＥＰ＿ＰＡＲＴＩＴＩＯＮ  Ｚｄｓ，Ｒｓ１，Ｒｓ２（破壊的）
一例において、Ｒｓ１及びＲｓ２は、それぞれ、パーティション・サイズ及び選択されたデータ要素位置を直接に示すことも可能である。
【００７２】
代替として、Ｒｓ１及びＲｓ２は、それぞれ、Ｚｓから抽出されるべき要素のシーケンスの開始位置及び終了位置を示すことが可能であり、すなわち、パーティション・サイズは、Ｒｓ２−Ｒｓ１＋１に対応する。このことは、図３に示されるＰｓの符号化のスカラ均等物を提供し、且つデータ値のシーケンスが、デフォルトで最下位要素から始めてではなく、Ｚｓ内の任意のロケーションにおいて抽出されることを可能にする。例えば、Ｒｓ２＜Ｒｓ１である場合の符号化誤差は、命令をＮＯＰ（レジスタ状態に全く影響を有さない無演算命令）として扱うことによって対処され得ることに留意されたい。Ｒｓ１がベクトル長（ベクトルにおける要素の総数）より大きい場合、このこともまた、不定の結果を防止すべくＮＯＰとして対処されることが可能である。Ｒｓ２がベクトル長より大きい場合、このことは、Ｒｓ２が、ベクトルの最後の要素を示すように設定されたものと想定することによって対処されることが可能である（結果ベクトルＺｄは、この事例において、実行されているコードを書いたプログラマ／コンパイラによって意図されるベクトルの下の方の部分に関して算出されるべき正しい結果を表すので）。
【００７３】
前述した変形はすべて、ソース・レジスタＺｓ又はＺｄに記憶されたソース・ベクトルに対して演算し、且つソース・レジスタからのデータ値が、定義されたパーティション構成に応じて結果のデータ要素にマップされる結果ベクトルＺｄを生成する、ソース変換形態のパーティション・レプリケート命令の例である。これは、１つの命令が、ソース・ベクトルのいずれの要素が抽出されるべきかを決定すること、及びそれらの要素を、結果ベクトルＺｓにおける要求される位置に置換することの両方を行う、「融合された」操作と見なされ得る。
【００７４】
しかし、代替は、結果ベクトルを、ソース・ベクトルからの要求される要素の要素インデックスでポピュレートするが、データ値を実際にコピーすることはしない、図７から図９に示されるインデックス生成形態のパーティション・レプリケート命令を提供することである。後続の置換命令は、次に、ソース・ベクトルにおける要素インデックスによって示される要素の、さらなる結果ベクトルに対するマッピングを制御すべく、結果ベクトルの要素インデックスを使用することができる。代替として、ソース・ベクトルから読み取られたオフセットを使用して決定された隣り合わないアドレスからのデータ値をロードする、後続の収集タイプのロード命令が、メモリからデスティネーション・レジスタに要求されるデータ値をロードすることを制御すべく、インデックス生成形態のパーティション・レプリケート命令によって生成された結果をオフセットのベクトルとして使用することが可能である。このアプローチは、要求されるデータをベクトル・レジスタに詰める全体的な操作が、別々の２つの命令（インデックス生成パーティション・レプリケート命令、及び後続のロード命令若しくは置換命令）を使用して実行される、「分割された」操作又は「融合されない」操作と見なされ得る。このアプローチは、前述した単一の融合された命令と比べて、パフォーマンスの点でより遅い可能性があるが、このアプローチは、一部の実例においてマイクロアーキテクチャ・ハードウェア設計を単純化することが可能であり、例えば、このアプローチは、汎用の置換操作又は収集ロードを実装するためにハードウェアの再利用を可能にし得る。
【００７５】
図７は、インデックス生成形態のパーティション・レプリケート命令ＩＮＣＲＲ  Ｚｄｓｔ，Ｒｓ１，Ｒｓ２の第１の例を示し、ここで、Ｚｄｓｔは、結果ベクトルを記憶するためのデスティネーション・レジスタであり、Ｒｓ１及びＲｓ２は、それぞれ、リセット値及びストライドを指定するスカラ値である。この例は、プレディケートなしの命令であり、したがって、結果ベクトル全体が活性部分と見なされる。また、命令のパラメータが活性部分を識別するプレディケート付きのバージョンが提供されることも可能である。結果ベクトルは、Ｒｓ１が、各繰り返すパターンの第１の要素に書き込まれるべきインデックス値を指定するリセット値を定義し、Ｒｓ２が、繰り返しの周期（各パーティションにおける要素の数）を示すストライドを定義する、要素インデックスの繰り返すパターンのいくつかの繰り返しで埋められる。各繰り返し内で、第１の要素の後に続くインデックスは、前の要素インデックスを１だけインクリメントすることによって生成される。図７に示される例において、例えば、Ｒｓ１＝０であり、且つＲｓ２＝４であり、したがって、結果ベクトルは、ベクトルの終わりまで要素のシーケンス（３，２，１，０）のいくつかの繰り返しで埋められ、すなわち、結果は、［３，２，１，０，３，２，１，０］である。同様に、Ｒｓ１＝２であり、且つＲｓ２＝３である場合、結果ベクトルは、繰り返すシーケンス（４，３，２）の繰り返しで埋められて、［．．．，４，３，２，４，３，２］という形態の結果をもたらす。
【００７６】
したがって、ストライド・パラメータＲｓ２は、このパラメータＲｓ２が、各パーティションのサイズを制御するので、パーティション・サイズ情報と均等であると見なされることが可能であり、リセット・パラメータＲｓ１は、このパラメータＲｓ１が、要素インデックスの各インクリメントするシーケンスが始まる要素を制御するので、要素選択情報と均等であると見なされることが可能である。
【００７７】
図８は、命令が、結果ベクトルにおいて単一の繰り返しの近隣の要素に書き込まれる要素インデックス間の差を表すインクリメント値を指定する第３のスカラ値Ｒｓ３も指定すること以外は、図７と同様である別の例を示す。例えば、Ｒｓ１＝１であり、Ｒｓ２＝３であり、且つＲｓ３＝３である場合、繰り返すパターンは、（７，４，１）であり、したがって、結果ベクトルは、［．．．，７，４，１，７，４，１］というパターンで埋められる。図８は、インクリメント値がスカラ・レジスタにおいて指定される符号化を示すが、インクリメント値が命令符号化自体において直接の値として指定される代替の符号化を提供することも可能である。パーティション・レプリケート命令のこの変形は、ソース・ベクトルの隣接しない要素に対応する要素インデックスのインクリメントするシーケンスでそれぞれが埋められるパーティションを定義するために使用され得る。
【００７８】
インデックス生成形態の命令のパラメータが、結果ベクトルのいくつかの要素が、ベクトルの最上位要素位置のインデックスより大きいインデックスに設定されるように設定され得ることが可能である。例えば、図８の例において、Ｒｓ１＝２であり、Ｒｓ２＝５であり、Ｒｓ３＝２であり、且つベクトル長が８要素である場合、結果ベクトルは、［６，４，２，１０，８，６，４，２］であり、且つ第４の要素位置、及び第５の要素位置における要素インデックス８及び１０は、長さ８のベクトルに関する要素インデックスの有効な範囲の外にある。一部の実装形態において、範囲外の要素インデックスが生成されたとき、エラーが合図されることが可能であり、又は命令は、この事例においてＮＯＰとして扱われることが可能である。
【００７９】
しかし、場合によっては、「無効な」要素インデックスを定義することができることは、「有効な」要素インデックスの連続する繰り返しの間の「パディング」を実施するのに有用であり得る。後続の命令が、「範囲外の」要素インデックスを単に無視する（例えば、それらのレーンを、プレディケートによってマスクされて閉ざされたレーンと類似した様態で扱って）場合、結果は、有効なデータ要素の繰り返すパターンの繰り返しが、パディングの１つ又は複数のレーンによって分離されることであり、このことは、一部のアプリケーションに有用であり得る。例えば、ゼロ化プレディケーションでは、前述の［６，４，２，１０，８，６，４，２］という結果を生成するインデックス生成命令に続く後続の置換命令又はロード命令は、その場合、［Ｒ６，Ｒ４，Ｒ２，０，０，Ｒ６，Ｒ４，Ｒ２］という形態の結果値につながる。
【００８０】
代替として、同一のパーティション内の近隣の要素に書き込まれるインデックス間のインクリメントを示すのではなく、第３のスカラ・レジスタＲｓ３は、１つのパーティションに関する開始インデックスと次のパーティションに関する開始インデックスの間の差を識別することが可能である。この例において、第１のパーティションは、Ｒｓ１において始まるインデックスのシーケンスを備えてよく、次のパーティションは、Ｒｓ１＋Ｒｓ３において始まるインデックスのシーケンスを備えてよく、次のパーティションは、Ｒｓ１＋２＊Ｒｓ３において始まるインデックスのシーケンスを備えてよいといった具体である。例えば、Ｒｓ１＝２、Ｒｓ２＝３、及びＲｓ３＝５である符号化は、［．．．１３，１２｜９，８，７｜４，３，２］というインデックスでポピュレートされた結果ベクトルをもたらすことが可能であり、ここで、｜は、パーティション間の境界を表す。このことは、命令のこの変形がどのように、結果ベクトルに書き込まれるインデックスのシーケンスにおける「ジャンプ」をもたらすのに使用され得るかを示す。したがって、これは、各パーティションに関する選択された要素位置が各パーティションに関して異なり得る命令の例である。また、ロード−レプリケート形態又はソース変換形態の命令も、各パーティションに関するシーケンスの始まり／終わりとして使用すべく様々な要素位置を符号化するようにＲｓ３に類似したストライド・パラメータを指定することが可能である。
【００８１】
図９は、いずれの要素が、要素インデックスのインクリメントするシーケンスが各パーティションにおいて始まる選択された要素であるかを定義するスカラ・レジスタＲｓ１、及び活性ビットの位置が各パーティションの始まりを印付ける（代替として、活性ビットは、各パーティションの終わりを印付けることも可能である）制御マスクＰｓ１を指定する、インデックス生成形態のパーティション・レプリケート命令の別の変形を示す。このアプローチでは、同一の結果ベクトル内で様々なサイズのパーティションを定義することが可能であり、このことは、様々な長さの行を有するデータ構造（例えば、不規則なパターン、三角形パターン、又は幾何学格子パターン）を処理するのに有用であり得る。様々なパーティション長をサポートする汎用のマスクを使用するパーティション情報に関する類似した符号化が、ソース変換タイプ又はロード−レプリケート・タイプのパーティション・レプリケート命令のために使用されることも可能であることに留意されたい。
【００８２】
図１０は、ロード−レプリケート形態のパーティション・レプリケート命令を示す。一般に、ロード−レプリケート形態の命令は、基本アドレス＃［Ｒａ］を計算するのに使用される値を記憶する基本アドレス・レジスタＲａを指定する。基本アドレスにおいて始まるメモリ・アドレスに記憶されるデータのブロックは、データ値のシーケンスが抽出され、且つデスティネーション・レジスタＺｄｓｔの各パーティションにおいて繰り返されるべき「ソース・ベクトル」を事実上、表すものと見なされ得る。すなわち、同一の基本アドレス＃［Ｒａ］を指定する別個の隣接するベクトル・ロード命令が実行された場合、この実行は、基本アドレス＃［Ｒａ］、及びいくつかの後続のアドレスにおけるデータ値に対応する要素のシーケンスＡ０、Ａ１、Ａ２．．．を備えるベクトル・レジスタをもたらし、後続のソース変換形態の命令が、結果ベクトルのパーティションを、ソース・ベクトルから抽出された要素でポピュレートすべく前述したとおり実行されることが可能である。ロード−レプリケート形態のパーティション・レプリケート命令は、そのような別個のベクトル・ロード命令の必要性を、代わりにメモリ内の「ソース・ベクトル」に対して直接に操作して均等の結果をもたらすことによって回避する。
【００８３】
ロード−レプリケート形態は、パーティション・サイズ／位置、活性領域ロケーション、及び選択されたデータ要素位置を符号化するための前述した技法のいずれかを使用してよい。図１０の特定の例は、この例が、パーティションのサイズ、及び活性領域のサイズをそれぞれ定義するように２つのスカラ・レジスタＲｓ１、Ｒｓ２を指定し、且つデフォルトで、選択されたデータ要素位置と活性領域開始位置がともに、暗黙に最下位要素位置であるという点で、前述したソース変換命令のスカラ例のうちの第１の例に類似する。したがって、Ｒｓ１＝３である場合、ロード−レプリケート命令は、基本アドレス＃［Ｒａ］において始まるアドレスでメモリに記憶された「ソース・ベクトル」の最初の３つの要素Ａ０、Ａ１、Ａ２に対応するデータ値をロードするように、且つこれら３つのデータ値Ａ０、Ａ１、Ａ２を、ベクトルの活性領域内で複数回、繰り返すようにプロセッサを制御する。しかし、図１０は、一例に過ぎないこと、及びロード−レプリケート形態のパーティション・レプリケート命令の他の例は、前述したソース変換形態又はインデックス生成形態の命令のその他の例のいずれかによって使用されるパーティション符号化を反映してもよいことが認識されよう。
【００８４】
ロード−レプリケート形態のパーティション・レプリケート命令は、メモリに記憶されたソース・ベクトルからのいくつかの選択された要素をロードするだけでよい可能性があるが、実際には、一部のハードウェア実装形態は、それでも、メモリから構造全体Ａ０、Ａ１、Ａ２．．．（又は構造の下位部分）をバッファにロードし、次に、結果デスティネーション・レジスタに書き込まれるように要求される要素を拾い出すことが可能であることに留意されたい。したがって、命令は、いくらかのデータがメモリから読み取られることを、そうすることが、結果ベクトルを生成するのに実際には要求されない場合でさえ、もたらし得る。このアプローチは、場合によっては、選択された値を要求されたオフセットから読み出すより好都合であり得る。例えば、メモリ・システム・ハードウェアが、単一のトランザクションにおいてメモリから読み取られるデータのブロックに最小限のサイズを課すことが可能であり、したがって、そのブロックのいずれかの部分が要求される場合、このことが、そのブロック全体が読み取られることを要求する可能性がある。例えば、メモリが読み取られる最小限の粒度が、図１０の例における値Ａ０、Ａ１、Ａ２、Ａ３のブロックに対応する場合、要素Ａ０、Ａ１、Ａ２だけしか結果を生成するのに要求されないものの、ブロック全体Ａ０〜Ａ３が依然として読み取られ得るが、Ａ３は、プロセッサによって破棄される可能性がある。したがって、ロード−レプリケート命令が、要求されるデータ値だけをロードすることは不可欠ではなく、すなわち、他の値も、特定のメモリ・システムが動作する様態のアーチファクトとしてロードされてもよい。それでも、ベクトル・レジスタを消費する必要性を回避することによって、ロード−レプリケート命令は、レジスタ圧力を軽減することができ、このことは、パフォーマンスを向上させるのに役立ち得る。
【００８５】
前段で与えられる例において、各パーティションに割り当てられるデータ値又は要素インデックスのシーケンスは、選択されたデータ要素位置で始まる。例えば、選択されたデータ要素位置が、要素１である場合、サイズ２のパーティションは、要素１及び２のデータ値又は要素インデックスを備え、サイズ３のパーティションは、要素１から３のデータ値又は要素インデックスを備えるといった具合である。
【００８６】
しかし、他の例は、結果ベクトルの各パーティションを、選択されたデータ要素位置で終わるシーケンスでポピュレートすることが可能である。例えば、選択されたデータ要素位置が要素５である場合、サイズ３のパーティションは、要素３、４、５に対応するデータ値又は要素インデックスを備え、サイズ４のパーティションは、要素２、３、４、５に対応するデータ値又は要素インデックスを備えるといった具合である。このことは、他のタイプのデータ構造（例えば、上三角行列）の処理に対処するのに有用であり得る。
【００８７】
図１１は、パーティション・レプリケート命令を処理する方法を例示するフローチャートを示す。ステップ１００において、命令デコーダ２０が、キャッシュ１５からフェッチされた命令のキューにおける次の命令を復号する。ステップ１０２において、デコーダ２０が、次の命令がパーティション・レプリケート命令であるかどうかを判定する。パーティション・レプリケート命令ではない場合、ステップ１０４において、デコーダ２０が、出会った命令のタイプに適切な処理操作を実行するようにパイプラインの後続の段を制御するための制御信号を生成し、方法は、ステップ１００に戻る。
【００８８】
パーティション・レプリケート命令に出会った場合、ステップ１０６において、デコーダ２０が、いくつかの可変サイズ・パーティションの位置がその命令によって定義される結果ベクトルを生成するように処理パイプラインの後続の段を制御するための制御信号を生成する。複数のデータ要素を有する各パーティションが、ソース・ベクトルからのデータ値、又は選択されたデータ要素位置で始まる、若しくは終わる要素インデックスのシーケンスでポピュレートされる。
【００８９】
命令デコーダ２０によってサポートされる別のタイプの命令が、可変サイズのそれぞれが命令によって指定される、結果ベクトル内の複数のセグメントを識別する、要素レプリケート命令である。要素レプリケート命令に応答して、デコーダ２０が、それぞれの各セグメントにおいて、繰り返す値が結果ベクトルのそのセグメント全体にわたって繰り返され、繰り返す値は、ソース・ベクトルの対応するセグメントの選択されたデータ要素のデータ値、又は選択されたデータ要素の要素インデックスを備える、結果ベクトルを生成するように処理回路を制御する。この場合も、このことは、処理されているデータの大きさがベクトル長より小さい行列算術などの演算を高速化するのに有用であり得る。この命令のいくつかの例示的な使用事例が、後段で説明されるが、最初に、命令自体について説明する。
【００９０】
図１２は、結果ベクトルを記憶するためのデスティネーション・ベクトル・レジスタＺｄ、ソース・ベクトルを記憶するためのソース・ベクトル・レジスタＺｓ、及び２つのプレディケート・レジスタＰｇ、Ｐｓを指定する、要素レプリケート命令の第１の例を示す。
【００９１】
プレディケート・レジスタＰｇは、結果ベクトルにおける各セグメントのサイズ及び位置を識別するセグメント情報を提供する。この例において、セグメント情報は、活性ビット（この例において１）の位置が各セグメントの終わりを印付けるセグメント・マスクとして符号化される。したがって、この符号化は、同一のベクトル内で様々なサイズを有するセグメントをサポートする。図１２において、例えば、Ｐｇは、第１のセグメントが要素１において終わり、第２のセグメントが要素２において終わり（したがって、単一の要素だけを備え）、第３のセグメントが要素６において終わるように設定される。また、プレディケート・レジスタＰｇも、結果ベクトルの活性部分を識別する活性領域情報を提供する。この例において、活性領域は、結果ベクトルの要素０で始まり、プレディケートＰｇにおける最上位活性ビットに対応する要素（この例において要素６）で終わる。したがって、この例における結果ベクトルの要素７は、活性領域の外にある。この符号化では、セグメント・サイズ情報と活性領域情報の両方が、同一のレジスタにおいて符号化され得る。他の例において、マーカ・ビットは、パーティション・レプリケート命令に関して図９に示されるパーティション開始位置の符号化と類似した様態で、各セグメントの終わりではなく、始まりを表すことも可能であることが認識されよう。
【００９２】
第２のプレディケート・レジスタＰｓは、ソース・ベクトルＺｓのデータ要素のうちのいずれが、Ｐｇによって識別されたセグメントの各セグメント内の選択された要素であるかを示す要素選択情報を提供する。各セグメント内で、選択された要素は、Ｐｓにおける最下位活性ビットに対応する要素である。したがって、図１２の例において、第１のセグメントにおける選択された要素は、要素０であり、第２のセグメントにおける選択された要素は、要素２であり、第３のセグメントにおける選択された要素は、要素４である。最下位活性ビットを使用するのではなく、選択された要素は、所与のセグメント内の最上位活性ビットを使用して合図されることも可能であることが認識されよう。
【００９３】
要素レプリケート命令が実行されたとき、命令デコーダ２０は、各セグメントにおいて、対応するセグメントの選択された要素位置におけるソース・ベクトルＺｓのデータ値が、結果の対応するセグメント全体にわたって繰り返される結果Ｚｄを生成するように処理回路（例えば、ベクトル置換ユニット８０）を制御する。図１２に関して、例えば、このことは、Ｚｓの要素０に対応するデータ値「ａ」が、結果Ｚｄの要素０及び１において第１のセグメント全体にわたって繰り返されること、Ｚｓの要素２のデータ値「ｃ」がＺｄの要素２にマップされること、及びＺｓの要素４のデータ値「ｅ」が第３のセグメントにおいてＺｄの要素３から６のそれぞれにマップされることをもたらす。
【００９４】
結果の活性領域の外の要素は、図１２、及び図１３の「ゼロ化」例に示されるとおり、０に設定されることが可能であり、又は図１３の「マージング」例に示されるとおりデスティネーション・レジスタの対応する要素に記憶された前の値を保持することも可能である。Ｐｇがすべて真のプレディケート（すべて活性ビット）である場合、各要素は、その要素自らのセグメントであることに留意されたい。その事例において、Ｐｓの対応する値に応じて、入力は、出力にコピーされる（Ｐｓ［］＝１の場合）か、或いは出力は、命令がマージング・タイプであるか、又はゼロ化タイプであるかに基づいて、変わらないままである、又はゼロ化される（Ｐｓ［］＝０）。また、命令のこの変形は、プレディケート付きであるので、ＰｇがＡＬＬ＿ＦＡＬＳＥである場合、出力は、命令のタイプに応じてゼロ化される、又はマージされる。また、その命令は、図１４に示されるとおり、最上位ベクトル・レーンにＰｇにおいて活性であると印を付けることによって、ベクトル・レジスタ全体にわたって特定の要素をレプリケートすべく、すなわち、ベクトル領域全体を単一のセグメントと見なすべく使用されることも可能である。したがって、この符号化を使用することにより、この符号化が、複数のセグメントもサポートする要素レプリケート命令の有効な符号化であるので、ベクトル全体にわたる単一の要素のレプリケートを制御するために別個の命令が提供される必要性を回避することができる。
【００９５】
図１５に示されるとおり、Ｐｇが、セグメント・サイズだけを符号化し、活性領域は符号化せず、ベクトル・レジスタ全体が活性であると見なされる、命令のプレディケートなしの変形が提供されることも可能である。この事例において、最後のセグメントは、Ｐｇの最後の活性ビットの後の次の要素からベクトルの終わりまで延びる結果ベクトルの部分に対応する。例えば、図１５において、Ｐｇの最後の活性ビットは、要素４であり、したがって、結果ベクトルＺｄの最後のセグメントは、要素５から７を備え、結果のこれらの要素は、Ｐｓによって識別されるとおり、ソース・ベクトルＺｓの対応するセグメントの選択された要素５におけるデータ値「ｆ」と等しいように設定される。図１５の符号化では、Ｐｇがすべて偽（すべて不活性ビット）である場合、レジスタ全体が単一のパーティションと見なされ、したがって、図１６に示されるとおり、ソース・ベクトルＺｓの１つの選択された要素からの単一のデータ値（「ｅ」）が、結果ベクトルＺｄの要素のそれぞれにコピーされる（このことは、前述した図１４と同様である）ことに留意されたい。
【００９６】
命令の他の変形は、セグメント・サイズ情報、活性部分情報、及び要素選択情報を伝えるべくプレディケート値とスカラ値の様々な組合せを使用してよい。そのような変形のいくつかの例は、以下を含む。すなわち、
１．ＲＥＰ＿ＥＬＥＭＥＮＴＳ  Ｚｄ，Ｐｇ，Ｚｓ，Ｘｓ１
活性領域情報とセグメント・サイズ情報の両方が、図１２に示されるのと同一の様態で符号化されるが、要素選択情報は、スカラ・レジスタにおいて指定されるスカラ可変Ｘｓ１として、又は直接の値として符号化される、プレディケート付きの命令。この事例において、各セグメントに対する選択された要素の相対位置は、各セグメントにおいて同一であるように制約される（例えば、Ｘｓ１が、各セグメントにおける第Ｎの要素が選択された要素であることを示す値Ｎを指定する）。
２．ＲＥＰ＿ＥＬＥＭＥＮＴＳ  Ｚｄ，Ｚｓ，Ｘｓ１，Ｘｓ２，Ｘｓ３
ＲＥＰ＿ＥＬＥＭＥＮＴＳ  Ｚｄｓ，Ｘｓ１，Ｘｓ２，Ｘｓ３
活性領域情報、セグメント・サイズ情報、及び要素選択情報のそれぞれが、スカラ・レジスタに記憶されるスカラ変数として符号化される構築的変形及び破壊的変形。この事例において、各セグメントは、同一のサイズを有する（第１のセグメント及び最後のセグメントは、必要な場合、活性領域に入るように切り詰められ得るものの）。例えば、Ｘｓ１が、活性領域の終わりを印付ける要素位置を示し、Ｘｓ２が、各セグメントの長さを示し、Ｘｓ３が、ソース・ベクトルのいずれの要素が各セグメントにおける選択された要素であるかを示す（セグメントの始まりを基準にして）。構築的変形の場合、別々のソース・レジスタ及びデスティネーション・レジスタが定義され、したがって、ソース・ベクトルは、命令の実行の後、保持される。破壊的変形の場合、同一のレジスタが、ソース・レジスタとデスティネーション・レジスタの両方の役割をし、したがって、ソース・ベクトルの上に結果ベクトルが書かれる。一般に、命令のほとんどの使用に関してＸｓ１≧Ｘｓ２であり、且つＸｓ２≧Ｘｓ３であるものと見込まれる。パーティション・サイズＸｓ２が活性領域Ｘｓ１のサイズより大きい命令に出会った場合、その命令は、ＮＯＰとして扱われることが可能であり、又はゼロ化プレディケーション若しくはマージング・プレディケーションが、不活性領域に迷い込むセグメントの部分をマスクすべく適用されることが可能である。同様に、Ｘｓ３によって示される要素位置がセグメント・サイズより大きい事例は、ＮＯＰとして扱われることが可能であり、又は各セグメントがゼロ化プレディケーション若しくはマージング・プレディケーションによってマスクされることをもたらすことが可能である。ＮＯＰアプローチがとられるか、又はマスキング・アプローチがとられるかは、特定の実装形態に関して事前定義される（ハードコードされる）ことが可能であり、或いは命令のタイプに応じて変わることが可能である。
３．前述の例２に示される構築的プレディケート付きの変形は、符号化スペースの点でいくらかの費用を被り、このことは、破壊的変形を提供することによって回避され得る。代替として、構築的プレディケートなしの例が、別個の３つのスカラ・レジスタを符号化することを節約すべく提供されることが可能である。すなわち、
ＲＥＰ＿ＥＬＥＭＥＮＴＳ  Ｚｄ，Ｚｓ，Ｘｓ１，Ｘｓ２
この事例において、Ｘｓ１は、セグメント・サイズを示し、Ｘｓ２は、選択された要素位置を示し、且つ前述の図１５の例の場合と同様に結果ベクトル全体が、活性部分として扱われる。
同様に、プレディケートなしの破壊的符号化が提供されることも可能である。すなわち、
ＲＥＰ＿ＥＬＥＭＥＮＴＳ  Ｚｄｓ，Ｘｓ１，Ｘｓ２
スカラ形態の命令に関して、ベクトル長、又は活性部分のサイズが、セグメント・サイズの厳密な倍数ではない場合、最後のセグメントは、切り詰められる（例えば、ベクトル長が８である場合、ベクトル全体が活性であると見なされ、セグメント・サイズが３である場合、結果ベクトルは、それぞれ、サイズ３、３、２の３つのセグメントを備える）。代替として、第１のセグメントが、最後のセグメントの代わりに切り詰められることも可能である。
【００９７】
前記例は、ベクトル・レジスタ６０に記憶されたソース・ベクトルから選択された要素のデータ値を抽出し、且つそれらのデータ値を結果ベクトルの対応するセグメント内で繰り返す、ソース変換形態の要素レプリケート命令である。
【００９８】
しかし、図１７に示されるとおり、図１０に関した前述したロード−レプリケート形態のパーティション・レプリケート命令と類似した様態で、組み合わされたロード−レプリケート形態の要素レプリケート命令が提供されることも可能である。この事例において、要素が抽出される「ソース・ベクトル」は、レジスタにではなく、メモリに記憶される（メモリにおけるソース・ベクトルの基本アドレス＃［Ｒａ］は、基本レジスタＺａにおける値に基づいて決定される）が、それ以外で、セグメント・サイズ情報、活性部分情報、及び要素選択情報が符号化される様態は、ソース変換要素レプリケート命令に関して前述した変形のいずれかと同一であり得る。図１７の例は、前述したプレディケートなしのスカラ変形３を反映する。事実上、Ｒｓ１は、セグメント・サイズに対応する一定のストライドを定義し、Ｒｓ２は、セグメント内の要素位置を定義する。図１７は、Ｒｓ１＝４であり、且つＲｓ２＝３である例を示し、したがって、セグメントは、それぞれ、４つの要素を備え、且つ各セグメントの第３の要素は、デスティネーション・レジスタＺｄの対応するセグメント全体にわたってレプリケートされる。その他の変形に対応するロード−レプリケート要素レプリケート命令の類似した例が提供され得ることが認識されよう。例えば、ストライド及びセグメント長に関して異なる値が、ロード操作の一環として、要求されるアライメントまでパーティションをパディングするのに役立つように指定されることが可能であり、又はプレディケーションが、前述したとおり活性領域を定義することによって提供されることが可能である。
【００９９】
図１８に示されるとおり、結果ベクトルの対応するセグメント全体にわたってソース・ベクトルの選択された要素の要素インデックスを、その要素のデータ値をレプリケートするのではなく、レプリケートするようにパイプラインをトリガする、前述の図７及び図８と類似した、インデックス生成形態の要素レプリケート命令が提供されることも可能である。例えば、インデックス生成要素レプリケート命令が、デスティネーション・レジスタＺｄｓｔ及び２つのスカラ値Ｒｓ１、Ｒｓ２を指定してよく、ここで、Ｒｓ１は、各セグメントのサイズ（且つセグメント間の境界において要素インデックスがインクリメントされる量も）を定義し、Ｒｓ２は、結果ベクトルの第１の要素の開始値を定義する。例えば、図１８において、Ｒｓ１＝４であり、且つＲｓ２＝３である場合、結果の最初の４つの要素は、インデックス３を備え、次の４つの要素は、インデックス７を備えるといった具合である。このことは、ロード−レプリケート事例に関する図１７の場合と実質的に同一の例であることに留意されたい。したがって、ロード・オフセット、又は置換によって選択されるべき要素としてインデックス・ベクトルＺｄを使用して後続の収集ロード命令又は置換命令を実行することは、図１７に示されるのと均等の結果をもたらす。
【０１００】
図１９は、要素レプリケート命令を処理する方法を例示するフローチャートを示す。ステップ１２０において、命令デコーダ２０が、キャッシュ１５からフェッチされた命令のキューにおける次の命令を復号する。ステップ１２２において、デコーダ２０が、次の命令がパーティション・レプリケート命令であるかどうかを判定する。パーティション・レプリケート命令ではない場合、ステップ１２４において、デコーダ２０が、出会った命令のタイプに適切な処理操作を実行するようにパイプラインの後続の段を制御するための制御信号を生成し、方法は、ステップ１２０に戻る。
【０１０１】
要素レプリケート命令に出会ったとき、ステップ１２６において、デコーダ２０は、各可変サイズ・セグメントにおいて、繰り返す値がセグメント全体にわたって繰り返される結果ベクトルを生成するように処理パイプラインを制御する。セグメントは、様々なサイズのものであることが可能であり、又はすべて同一のサイズであることも可能であり、各セグメントのサイズ／位置は、命令内に符号化される。プレディケート付きの命令の場合、セグメントは、結果ベクトルの活性部分内でのみ定義され得るのに対して、プレディケートなしの命令の場合、セグメントは、ベクトル全体を埋めてよい。所与のセグメントに関する繰り返す値は、ソース・ベクトルの対応するセグメントの選択された要素のデータ値であるか、又は選択されたデータ要素の要素インデックスである。いずれの要素が選択されたデータ要素であるかは、命令内で符号化され、各セグメントにおいて同一の相対位置であることが可能であり、又はセグメントごとに異なることが可能である。
【０１０２】
パーティション・レプリケート命令及び要素レプリケート命令のいくつかの、達成された例示的な使用事例が次に説明される。これらは、これらの命令に関する使用事例を限定するものではなく、これらの命令がパフォーマンスを向上させるのに役立ち得るいくつかの例を示すに過ぎないことが認識されよう。これらの例は、汎用形態のパーティション・レプリケート命令又は要素レプリケート命令を示すが、これらの命令は、前述した変形のいずれかにより実装されることも可能であることが認識されよう。
【０１０３】
大きさＭ×Ｍの行列乗算
Ｎ行が単一のベクトル・レジスタの中に詰められ得る、大きさＭ×Ｍの行列乗算が、以下のとおりコードを使用して実装されることが可能である。この例は、マスク（いくつかの活性要素）が整数として表現される（ＶｅｃＲｅｐＥｌｅｍｅｎｔＳ及びＶｅｃＲｅｐＰａｒｔｉｔｉｏｎＳにおけるマスク・パラメータを参照されたい）スカラ形態のレプリケート命令を使用することに留意されたい。しかし、他の例は、マスクが、スカラ整数レジスタの代わりに、プレディケート・レジスタにおいて表現されるプレディケート形態の命令を使用することが可能である。この事例において、境界条件検査は、その検査が、ループ反復の一環としてプレディケート・マスクを生成するときに対処されるので、要求されない（同じことが、後段の他の例に当てはまる）。
／＊  Ｍ  正方行列の大きさ
＊  Ｎ  単一のベクトル・レジスタの中に詰められ得る行の数
＊／
2020501270.tif 000006
／／境界条件について検査する。
2020501270.tif 000007
以下の達成された例は、ベクトル長＝８である３×３行列乗算の脈絡において、このコードがどのように機能するかを示す（すなわち、Ｍ＝３であり、Ｎ＝２であり、行列の２行が、第１の反復において１つのベクトル内に詰められ、最後の行が第２の反復において詰められる）。
2020501270.tif 000008
ループにおいて値を代入して、
2020501270.tif 000009
／／この反復のそれぞれにおけるｖ０の累算が以下をもたらす。
2020501270.tif 000010
2020501270.tif 000011
／／この反復のそれぞれにおけるｖ０の累算が以下をもたらす。
2020501270.tif 000012
【０１０４】
したがって、外側ループの第１の反復（ｉ＝０）において、要素レプリケート命令及びパーティション・レプリケート命令の使用は、結果行列の２つの行ｃ０〜ｃ２及びｃ３〜ｃ５が、前段で説明される比較例の場合のように別々の反復を必要とするのではなく、外側ループの１反復において計算されることを可能にすることを我々は理解することができる。パーティション・レプリケート命令は、行列ｂの１つの行からの値を結果ベクトル内で複数回、レプリケートする。要素レプリケート命令は、長さＭ（行列行サイズに対応する）のセグメントを定義し、且つ各セグメントにおいて、行列ｂの対応する行における値のそれぞれが掛けられるべき行列ａの単一の要素をレプリケートする。３つの反復にわたって、ベクトル処理の所与のレーンは、３つの乗算（例えば、第１のレーンに関してａ０．ｂ０、ａ１．ｂ３、ａ２．ｂ６）を実行させ、それぞれの乗算は、行列ａの行方向に沿って、且つ行列ｂの列方向に沿って進んで要素を選択して、行列ｃに関する正しい値をもたらす。外側ループの第２の反復（ｉ＝６）において、行列ｃの残りの行が計算される。この例において、行列は、正方行列（Ｍ×Ｍ）であるが、要素レプリケート命令及びパーティション・レプリケート命令は、行の長さと列の長さが異なる行列の乗算を計算するのにも使用され得ることが認識されよう。
【０１０５】
この例は、ソース変換形態のパーティション・レプリケート命令及び要素レプリケート命令を使用するが、代替のループは、ロード−レプリケート形態の命令を代わりに使用することも可能であり、したがって、ＶｅｃＬｏａｄ（）命令の必要性も存在せず、又は代替として、インデックス生成形態の命令が使用されて、その後に後続のベクトル・ロード命令若しくはベクトル置換命令が続くことが可能である。
【０１０６】
行列乗算によるフレーム
パーティション・レプリケート命令及び要素レプリケート命令は、データ値のフレーム内の各ブロックにより小さい行列が掛けられる演算のために使用されることも可能である。例えば、小さい大きさのＭ×Ｍ行列乗算が、カーネル行列［ｚ］とデータのフレーム全体［ａ］の各Ｍ×Ｍブロックの間で実行される必要がある可能性がある。
2020501270.tif 000013
これは、フレームが入力データ（例えば、ＲＧＢ画像若しくはグレー・スケール画像から導き出される）を形成し、且つカーネルが変換行列を形成する画像／ビデオ処理における一般的な使用事例である。これは、入力フレーム・データの各サブブロックにカーネル行列が掛けられて、出力フレーム・データが生成されるブロック・ベースの演算である。従来のベクトル・アプローチは、各サブブロックに対してストライド型の行列乗算を実行し、且つフレーム・データの幅と高さに関してループを実行することである。
2020501270.tif 000014
ここで、ｍａｔｒｉｘＭｕｌｔｉｐｌｉｃａｔｉｏｎ（）は、１３ページに前述した従来のアプローチの場合と同様にベクトル化され、各Ｍ×Ｍブロック行列乗算の結果を計算する。ブロックごとに行列乗算を実行する代わりに、パーティション・レプリケート命令及び要素レプリケータ命令を使用して、前述のアルゴリズムは、複数のＭ×Ｍブロックに対応するデータを一緒に詰めること、及び複数のブロックを並行に処理することによってフレーム内の完全な行に対して演算を行うように変換され得る。このアプローチを使用する参照実装形態は、以下のとおりである。
2020501270.tif 000015
2020501270.tif 000016
達成された例は、以下のとおりである（Ｍ＝３）。
2020501270.tif 000017
2020501270.tif 000018
【０１０７】
したがって、Ｉ＝０反復は、異なる２つのＭ×Ｍ行列乗算の第１の行を計算する（１つの乗算に関して行ｃ０〜ｃ２を計算し、次の乗算に関して行ｃ３〜ｃ５を計算して）。同様にＩ＝１反復は、これら２つのＭ×Ｍ行列結果の各結果の第２の行を計算し、且つ残りの行、及びフレームの後続の部分に関して以下同様である。このことは、フレーム全体の処理にわたって命令カウントの大幅な低減をもたらすことができ、パフォーマンス上の利益は、ベクトル長、及び１つのレジスタ内に詰められ得るＭ×Ｍ行列行の数に応じて拡大縮小する。
【０１０８】
フレームごとの行列乗算
さらなる例示的な使用事例が、図２０〜図２２に示される。この例は、要素レプリケート命令を使用するが、パーティション・レプリケート命令は使用しない。図２０に示されるとおり、フレームは、複数のタイルに分割されることが可能であり、これらのタイルは、異なるサイズであってよい。例えば、図２０におけるフレームの各セクションは、２×２サイズ又は４×４サイズのタイルを表す。これらのタイルに、他方のフレームにおける対応するタイルが掛けられて、結果のフレームが生成される。そのようなタイル・ベースのアプローチは、多くのビデオ処理アルゴリズムに有用である。幅の広いベクトル・レジスタを有するベクトル処理エンジンを想定すると、様々なサイズの複数のタイルが、ベクトル・ループの単一の反復において処理されることが可能である。図２０〜図２２は、ベクトル長ＶＬ＝６であるベクトル・エンジンが行列乗算を実行するのに使用される例を考慮する。この例に示されるとおり、異なるサイズ（２×２及び４×４）の隣接する２つのタイルの乗算が、同一の反復において行われる。反復１及び２が、上の方の２×２タイルｔ０〜ｔ３を計算し、反復３及び４が、下の方の２×２タイルｗ０〜ｗ３を計算する（ベクトル・レジスタｖ１〜ｖ８のいくつかの適切な部分からマスクすべく、示されていないプレディケート演算が使用される）一方で、４つすべての演算が、４×４タイルｕ０〜ｕ１５の部分を計算することに留意されたい。要素レプリケート操作を使用して、各ベクトル命令が単一の２×２タイル又は４×４タイルに対してしか演算を行うことができない場合と比べて、より少ない命令で演算が行われることが可能である。
【０１０９】
Ｎ次元データ構造の処理
前述の例は、２次元格子構造の処理を扱うためのパーティション・レプリケート命令及び要素レプリケート命令の使用について説明する。しかし、それらの例は、３次元構造又はＮ次元構造を扱うために使用されることも可能である。
【０１１０】
様々な行サイズを有する格子の処理
同一のレジスタ内で様々なパーティション・サイズをサポートする命令変形（パーティション・レプリケート命令に関して図９、又は要素レプリケート命令に関して図１２などの）が、以下を含む他の非長方格子パターンの処理をサポートするのに有用であり得る。
−  不規則な格子パターン（各行における行の長さがマスクによって指定された）。これは、疎行列に関して有用であり、ループする間、ネストされる。
−  各行が１、２、３、４、．．．Ｎの長さである（又は各行が、長さＮ、Ｎ−１、Ｎ−２、．．．１である）三角格子パターン、三角行列に関して有用であり、且つネストされる場合、ループは、依存するループ限度を有する。
−  １、２、４、８、．．．などの幾何学シーケンスにつれて拡大縮小する長さの行を有する幾何学格子パターン。これは、高速フーリエ変換（ＦＦＴ）アルゴリズム又は離散ウェーブレット変換（ＤＷＴ）アルゴリズムに関して特に有用である。
【０１１１】
ＦＦＴ
図２３に示されるとおり、パーティション・レプリケート命令は、所与の段に関してＦＦＴアルゴリズムのためのひねり係数をレプリケートするのに使用されることも可能である。所与の段におけるひねり係数の数が、ベクトル長未満である場合、ひねり係数は、いくつかのパーティションにおいてレプリケートされることが可能であり、並行に処理されることが可能である。例えば、図２３において、８要素ベクトルと考慮すると、段２において、我々は、ひねり係数を以下のとおりレプリケートすることができる。
［Ｗ０，Ｗ２，−，−，−，−，−，−］−＞［Ｗ０，Ｗ２，Ｗ０，Ｗ２，Ｗ０，Ｗ２，Ｗ０，Ｗ２］
【０１１２】
したがって、これは、パーティション・レプリケート命令が要素レプリケート命令とは別個に使用され得る使用事例の例である。
【０１１３】
図２４は、使用され得る仮想マシン実装形態を示す。前述した実施例は、関係する技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法として本発明を実施するが、ハードウェア・デバイスのいわゆる仮想マシン実装形態を提供することも可能である。これらの仮想マシン実装形態は、仮想マシン・プログラム５１０をサポートするホスト・オペレーティング・システム５２０を実行するホスト・プロセッサ５３０上で実行される。通常、大きい強力なプロセッサが、それなりの速度で実行される仮想マシン実装形態を提供するのに要求されるが、そのようなアプローチは、互換性又は再利用の理由で別のプロセッサに固有のコードを実行することが所望される場合などの、いくつかの状況において正当化され得る。仮想マシン・プログラム５１０は、仮想マシン・プログラム５１０によってモデル化されているデバイスである現実のハードウェアによって提供されるアプリケーション・プログラミング・インターフェースと同一である、アプリケーション・プログラム５００に対するアプリケーション・プログラミング・インターフェースを提供する。このため、前述したメモリ・アクセスの制御を含む、プログラム命令は、それらの命令の、仮想マシン・ハードウェアとの対話をモデル化するように仮想マシン・プログラム５１０を使用してアプリケーション・プログラム５００内から実行されてよい。
【０１１４】
他の例示的な構成が、以下の条項において示される。すなわち、
（１）複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路と、
ベクトル処理操作を実行するように処理回路を制御するプログラム命令を復号する命令デコーダとを備える装置であって、
それぞれが結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つが結果ベクトルの隣接する複数の要素を備える複数の可変サイズ・セグメントの、結果ベクトル内での位置を定義するセグメント情報を指定する要素レプリケート命令に応答して、命令デコーダは、それぞれの各セグメントにおいて、ソース・ベクトルの対応するセグメントの選択されたデータ要素位置におけるデータ値、又は前記選択されたデータ要素位置を示す要素インデックスを備える繰り返す値が結果ベクトルのそのセグメント全体にわたって繰り返される、結果ベクトルを生成するように処理回路を制御するように構成される、装置。
（２）セグメント情報は、結果ベクトル内のセグメントの始まり又は終わりを識別する少なくとも１つのマーカ・ビットを備えるセグメント・マスク情報を備える、条項（１）に記載の装置。
（３）セグメント情報は、１セグメント当たりのデータ要素の数を示すセグメント・サイズ情報を備える、条項（１）に記載の装置。
（４）要素レプリケート命令の符号化は、第１のセグメント又は最後のセグメント以外のすべてのセグメントが同一の数のデータ要素を有するように制約する、条項（３）に記載の装置。
（５）要素レプリケート命令は、各セグメントに関して選択されたデータ要素位置を示す要素選択情報を指定する、条項（１）から（４）までのいずれか一項に記載の装置。
（６）要素選択情報は、選択されたデータ要素位置が各セグメントに関して同一であるように制約する符号化を有する、条項（５）に記載の装置。
（７）要素選択情報は、選択されたデータ要素位置を、複数のセグメントのそれぞれに関して別々に識別する符号化を有する、条項（５）に記載の装置。
（８）要素レプリケート命令は、複数のセグメントを備える結果ベクトルの活性部分を示す活性部分情報を指定し、
要素レプリケート命令に応答して、命令デコーダは、活性部分の外の少なくとも１つのデータ要素が所定の値、又は結果ベクトルを記憶するためのデスティネーション・レジスタの対応するデータ要素の値を有する結果ベクトルを生成するように処理回路を制御するように構成される、条項（１）から（７）までのいずれか一項に記載の装置。
（９）ソース・ベクトルを記憶するソース・レジスタを指定するソース変換形態の要素レプリケート命令に応答して、命令デコーダは、それぞれの各セグメントにおいて、繰り返す値が、ソース・ベクトルの対応するセグメントの選択されたデータ要素位置におけるデータ値を備える、結果ベクトルを生成するように処理回路を制御するように構成される、条項（１）から（８）までのいずれか一項に記載の装置。
（１０）ロード−レプリケート形態の要素レプリケート命令に応答して、命令デコーダは、データ・ストアからソース・ベクトルの少なくとも一部をロードするように、且つそれぞれの各セグメントにおいて、繰り返す値が、ソース・ベクトルの対応するセグメントの選択されたデータ要素位置のデータ値を備える、結果ベクトルを生成するように処理回路を制御するように構成される、条項（１）から（９）までのいずれか一項に記載の装置。
（１１）インデックス生成形態の要素レプリケート命令に応答して、命令デコーダは、それぞれの各セグメントにおいて、繰り返す値が、前記選択されたデータ要素位置を示す要素インデックスを備える、結果ベクトルを生成するように処理回路を制御するように構成される、条項（１）から（１０）までのいずれか一項に記載の装置。
（１２）複数のデータ要素を備えるベクトルに対してベクトル処理操作を実行する処理回路を備える装置のためのデータ処理方法であって、
それぞれが結果ベクトルの少なくとも１つのデータ要素を備え、且つ少なくとも１つが結果ベクトルの隣接する複数の要素を備える複数の可変サイズ・セグメントの、結果ベクトル内での位置を定義するセグメント情報を指定する要素レプリケート命令を復号すること、及び
要素レプリケート命令に応答して、それぞれの各セグメントにおいて、ソース・ベクトルの対応するセグメントの選択されたデータ要素位置におけるデータ値、又は前記選択されたデータ要素位置を示す要素インデックスを備える繰り返す値が結果ベクトルのそのセグメント全体にわたって繰り返される、結果ベクトルを生成することを備える方法。
（１３）条項（１）から（１１）までのいずれか一項に記載の装置に対応する命令実行環境を提供するようにコンピュータを制御するための仮想マシン・プログラムを記憶するコンピュータ可読記憶媒体。
【０１１５】
本出願において、「ように構成される」という語は、装置の要素が、定義される操作を実行することができる構成を有することを意味するように使用される。この脈絡において、「構成」とは、ハードウェア又はソフトウェアの相互接続の配置又は様態を意味する。例えば、装置は、定義される操作をもたらす専用のハードウェアを有してよく、又はプロセッサ若しくは他の処理デバイスが、その機能を実行するようにプログラミングされてよい。「ように構成される」は、装置要素が、定義される操作をもたらすためにいずれかの様態で変更される必要があることを暗示するわけではない。
【０１１６】
本発明の例示的な実施例が、添付の図面を参照して本明細書において詳細に説明されてきたが、本発明は、それらの実施例そのものに限定されないこと、及び添付の特許請求の範囲によって規定される本発明の範囲及び趣旨を逸脱することなく、当業者によってそれらの実施例に様々な変更及び変形が実施され得ることを理解されたい。
【図１】
2020501270.tif 000019
【図２】
2020501270.tif 000020
【図３】
2020501270.tif 000021
【図４】
2020501270.tif 000022
【図５】
2020501270.tif 000023
【図６】
2020501270.tif 000024
【図７】
2020501270.tif 000025
【図８】
2020501270.tif 000026
【図９】
2020501270.tif 000027
【図１０】
2020501270.tif 000028
【図１１】
2020501270.tif 000029
【図１２】
2020501270.tif 000030
【図１３】
2020501270.tif 000031
【図１４】
2020501270.tif 000032
【図１５】
2020501270.tif 000033
【図１６】
2020501270.tif 000034
【図１７】
2020501270.tif 000035
【図１８】
2020501270.tif 000036
【図１９】
2020501270.tif 000037
【図２０】
2020501270.tif 000038
【図２１】
2020501270.tif 000039
【図２２】
2020501270.tif 000040
【図２３】
2020501270.tif 000041
【図２４】
2020501270.tif 000042
【国際調査報告】
2020501270.tif 000043
2020501270.tif 000044