(57)【要約】  ベクトル処理演算を実施するための装置及び方法が提供される。特に、装置はベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施するための、命令復号器とを有する。命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように処理回路を制御する。特に、処理回路は、複数の要素のうちの第１の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成するように構成されている。ベクトル生成命令は様々な状況で有用であり得、特定の使用例はメモリ内で循環アドレッシングモードを実装するためのものであり、ベクトル生成命令を関連付けられたベクトルメモリアクセス命令に連結することができる。そのような手法はそのような循環アドレッシングをサポートするためにメモリアクセスパス内にさらなるロジックを用意する必要性を除去することができる。
2020502669.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル処理演算を実施する処理回路と、
ベクトル命令を復号し、前記ベクトル命令によって指定される前記ベクトル処理演算を実施するように前記処理回路を制御するための命令復号器と
を備え、
前記命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように前記処理回路を制御し、前記処理回路は、前記複数の要素のうちの第１の要素が前記スカラ開始値に依存し、それぞれの値が前記ラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように構成されている、装置。
【請求項２】
前記ベクトル生成命令が、前記スカラ開始値を提供する第１のスカラレジスタを指定する、請求項１に記載の装置。
【請求項３】
前記ラップ制御情報が、即値及びレジスタのうち１つを参照して前記ベクトル生成命令内で特定される、請求項１又は２に記載の装置。
【請求項４】
前記処理回路が、前記ラップ制御情報を使用して第１の境界を決定するように構成され、第２の境界は予め定められる、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
前記ラップ制御情報が、前記第１の境界を決定するために使用されるサイズ指標を提供し、前記第２の境界がゼロ値である、請求項４に記載の装置。
【請求項６】
前記ベクトル生成命令が、前記規則的に進行するシーケンス内で隣接する要素の値同士の差異を決定するために使用される調整量を特定する、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
前記ベクトル生成命令が、
−  前記ラップ制御情報から決定されるバッファサイズが前記調整量の倍数であるという条件、
−  前記スカラ開始値が前記調整量の倍数であるという条件、
−  前記バッファサイズが前記ベクトル内の要素の数を前記調整量で乗算することにより決定されるサイズ値を超えるという条件
のうち少なくとも１つを満たすように制約される、請求項６に記載の装置。
【請求項８】
前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に増加するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御される、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御される、請求項１から７までのいずれか一項に記載の装置。
【請求項１０】
前記復号器回路が、ベクトルメモリアクセス命令に応答して、メモリ内で、複数のアドレス要素を含む入力アドレスベクトルオペランドによって決定されるアドレスにおいて複数のデータ値にアクセスするように前記処理回路を制御し、
前記装置が、前記ベクトル生成命令及び関連付けられたベクトルメモリアクセス命令の両方を含む命令のシーケンスを実行するように構成され、前記関連付けられたベクトルメモリアクセス命令が、前記ベクトル生成命令によって生成された前記ベクトルを、前記入力アドレスベクトルオペランドとして特定し、前記複数のデータ値が前記メモリ内の循環バッファ内でアクセスされるようにする、
請求項１から９までのいずれか一項に記載の装置。
【請求項１１】
前記関連付けられたベクトルメモリアクセス命令が、前記循環バッファの開始アドレスを与える基底アドレスを特定し、前記入力アドレスベクトルオペランドが、アクセスされることになる各アドレスを特定するために、前記複数のアドレス要素として、前記基底アドレスと結合されるアドレスオフセットのベクトルを指定する、請求項１０に記載の装置。
【請求項１２】
所与のベクトル命令に応じて、前記処理回路が、それぞれがベクトル値の一部に対応する複数の処理のビートを実行するように構成され、
処理回路が、前記ベクトル生成命令、及び前記関連付けられたベクトルメモリアクセス命令のオーバーラップした実行をサポートするように構成され、ここにおいて、前記関連付けられたベクトルメモリアクセス命令の第１のビートのサブセットは前記ベクトル生成命令の第２のビートのサブセットと並列に実行される、
請求項１０又は１１に記載の装置。
【請求項１３】
前記命令復号器が、前記ベクトル生成命令を復号する際に検出された指定された条件に応答して、前記処理回路による前記ラップ制御情報の使用を無効とし、それによって、前記処理回路は、前記複数の要素のうちの前記第１の要素が前記スカラ開始値に依存し、前記複数の要素の前記値がいかなるラップ制約なしに規則的に進行するシーケンスに従うように前記ベクトルを生成するように構成される、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
前記指定された条件が、前記ラップ制御情報を特定するために予約値が使用されることを含む、請求項１３に記載の装置。
【請求項１５】
一組のスカラレジスタをさらに備え、
前記ベクトル生成命令が、前記スカラ開始値を提供する第１のスカラレジスタ、前記ラップ制御情報を特定する第２のスカラレジスタを指定し、前記第１及び第２のスカラレジスタの指定は、前記第２のスカラレジスタが選ばれる前記一組内のレジスタの第２のグループとオーバーラップしない前記一組内のスカラレジスタの第１のグループから前記第１のレジスタが選択されるように制約される、請求項１から１４までのいずれか一項に記載の装置。
【請求項１６】
前記処理回路が、前記スカラ開始値から導出した入力値及び規則的に進行する調整値のシーケンスを使用して前記ベクトルについての複数の候補要素を生成するための加算器回路と、
それぞれの候補要素から、前記ベクトル内に含めるための出力要素を生成するための修正回路とを備え、それぞれの候補要素について、前記修正回路がラップ条件が存在するかどうかを判断するように構成され、前記ラップ条件が存在する場合は、前記出力要素を生成するために前記ラップ制御情報に基づいて前記候補要素を修正するための算術演算を実施し、そうでなければ、修正されない前記候補要素を前記出力要素として使用する、請求項１から１５までのいずれか一項に記載の装置。
【請求項１７】
前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御され、
前記加算器回路は、前記入力値から前記調整値のうち関連付けられる１つを減算することによりそれぞれの候補要素を生成するために別個の加算器ブロックを備え、各加算器ブロックからのキャリーアウト信号が、前記関連付けられている候補要素について前記ラップ条件が存在するかどうかを判断するために使用される、請求項１６に記載の装置
【請求項１８】
前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に増加するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御され、
前記入力値が、前記スカラ開始値から前記ラップ制御情報から導出した上限値を減算することによって、前記開始アドレスから導出され、
前記加算器回路が、前記調整値のうち関連付けられる１つを前記入力値に加算することによりそれぞれの候補要素を生成するために別個の加算器ブロックを備え、各加算器ブロックからのキャリーアウト信号が、前記関連付けられている候補要素について前記ラップ条件が存在するかどうかを判断するために使用される、請求項１６に記載の装置。
【請求項１９】
前記修正回路は、前記ラップ条件が存在する場合、前記出力要素を生成するために、前記ラップ制御情報から導出した上限値を前記候補要素へ加算することを前記算術演算として実施するように構成される、請求項１６から１８までのいずれか一項に記載の装置。
【請求項２０】
ベクトル処理演算を実施する処理回路と、ベクトル命令を復号し、前記ベクトル命令によって指定される前記ベクトル処理演算を実施するように前記処理回路を制御するための命令復号器とを有する装置を動作させる方法であって、
スカラ開始値及びラップ制御情報を特定するベクトル生成命令を復号するステップと、
前記復号するステップに応答して、複数の要素を含むベクトルを生成するように前記処理回路を制御するステップであって、前記処理回路が、前記複数の要素のうちの第１の要素が前記スカラ開始値に依存し、それぞれの値が前記ラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成する、ステップ
を含む、方法。
【請求項２１】
ベクトル処理演算を実施するための処理手段と、
ベクトル命令を復号し、前記ベクトル命令によって指定される前記ベクトル処理演算を実施するように前記処理手段を制御するための命令復号器手段と
を備え、
前記命令復号器手段が、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、前記処理手段が複数の要素を含むベクトルを生成するように制御し、前記処理手段が、前記複数の要素のうちの第１の要素がスカラ開始値に依存し、それぞれの値が前記ラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに前記複数の要素の値が従うように、前記ベクトルを生成する、装置。
【請求項２２】
請求項１から１９までのいずれか一項に記載の装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するためのプログラム命令を含む、仮想マシンコンピュータプログラム。
【請求項２３】
請求項２２に記載の仮想マシンコンピュータプログラムを記憶するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。より詳細には、ベクトル命令の処理に関する。
【背景技術】
【０００２】
いくつかのデータ処理システムは、ソースオペランド又は命令の結果値が複数の要素を含むベクトルについて、ベクトル命令の処理をサポートしている。単一の命令に応答していくつかの別個の要素を処理することをサポートすることにより、コード密度が改善され得、命令をフェッチ及び復号するオーバーヘッドが削減される。データ値をベクトルオペランドの個別の要素にロードすること、及びデータ値いくつかの要素を単一のベクトル命令を使用して一度に処理することにより、処理されることになるデータ値の配列は、より効率的に処理され得る。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例は、ベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施する、命令復号器とを備え、命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように処理回路を制御し、処理回路は、前記複数の要素のうちの第１の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成するように構成されている、装置を提供する。
【０００４】
少なくともいくつかの実例が、ベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施する、命令復号器とを有する装置を動作させる方法であって、方法は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令を復号するステップと、前記復号するステップに応答して、複数の要素を含むベクトルを生成するように処理回路を制御するステップであって、処理回路は、前記複数の要素のうちの第１の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成する、ステップを含む、方法を提供する。
【０００５】
少なくともいくつかの実例が、ベクトル処理演算を実施するための処理手段と、処理手段を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実行するための、命令復号器手段とを備え、制御のための命令復号器手段は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、処理手段は複数の要素を含むベクトルを生成し、処理手段は前記複数の要素のうちの第１の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成する、装置を提供する。
【０００６】
少なくともいくつかの実例は、上で議論した装置に対応する命令実行環境を提供するためのホストデータ処理装置を制御するためのプログラム命令を含む仮想マシンコンピュータプログラムを提供する。
【０００７】
仮想マシンコンピュータプログラムを記憶するコンピュータ可読記憶媒体が、提供されてもよい。記憶媒体は非一時的な記憶媒体であってもよい。
【０００８】
本技法は、その実施例を参照して添付の図面に図示されるように、実例としてのみ、さらに説明される。
【図面の簡単な説明】
【０００９】
【図１】一実施例による装置のブロック図である。
【図２】一実施例によるベクトル生成命令内で与えられるフィールドを概略的に図示している。
【図３】一実施例によるベクトル生成命令の特定の実例のために生成され得る要素のベクトルを概略的に図示している。
【図４】一実施例によるベクトル生成命令を実行する時に実施される処理を図示する流れ図である。
【図５】一実施例により、ベクトル生成命令によって生成されたベクトルが、メモリアドレス空間内で循環バッファを特定するためにベクトルアクセス命令への入力としてどのように使用され得るかを概略的に図示している。
【図６】一実施例による、図１のベクトル生成回路の構成をより詳細に図示するブロック図である。
【図７Ａ】一実例の実施例による、図６の加算器回路及び修正回路の構成を概略的に図示している。
【図７Ｂ】一実例の実施例による、図６の加算器回路及び修正回路の構成を概略的に図示している。
【図７Ｃ】一実例の実施例による、図６の加算器回路及び修正回路の構成を概略的に図示している。
【図８】ベクトル命令のオーバーラップした実行の実例を示す。
【図９】異なるプロセッサ実装形態間の、又は命令の実行の異なる場合の間のランタイムにおける、連続するベクトル命令同士のオーバーラップの量をスケーリングさせる３つの実例を示す。
【図１０】一実施例による、ベクトル生成命令のラップ機能がどのように選択的に無効にされるかを概略的に図示する流れ図である。
【図１１】一実施例による、一組のスカラレジスタに関連付けられて使用され得る読み取りアクセス回路の構成を概略的に図示している。
【図１２】さらなる一実施例による装置のブロック図である。
【図１３Ａ】説明した実施例による図１２で示したフラグ情報記憶装置の実例の構成を図示している。
【図１３Ｂ】説明した実施例による図１２で示したフラグ情報記憶装置の実例の構成を図示している。
【図１４】一実施例による、ベクトルメモリアクセス演算を実行する時、フラグ情報がどのように使用され得るかを図示する流れ図である。
【図１５Ａ】説明した実施例において使用され得るフラグ情報の異なる実例の構成を図示している。
【図１５Ｂ】説明した実施例において使用され得るフラグ情報の異なる実例の構成を図示している。
【図１５Ｃ】説明した実施例において使用され得るフラグ情報の異なる実例の構成を図示している。
【図１６Ａ】一実施例による、フラグ情報を無効化させ得る指定された事象を示す流れ図である。
【図１６Ｂ】一実施例による、フラグ情報を無効化させ得る指定された事象を示す流れ図である。
【図１７】説明した実施例によるフラグ情報をポピュレートするために使用され得る異なるメカニズムを図示する流れ図である。
【図１８】説明した実施例によるフラグ情報をポピュレートするために使用され得る異なるメカニズムを図示する流れ図である。
【図１９】説明した実施例によるフラグ情報をポピュレートするために使用され得る異なるメカニズムを図示する流れ図である。
【図２０】使用され得る仮想マシンの実装形態を示している。
【発明を実施するための形態】
【００１０】
添付の図面を参照して実施例を議論する前に、以下に実施例の説明を与える。
【００１１】
現在利用可能な大部分のデジタル信号プロセッサ（ＤＳＰ：Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒｓ）は、メモリへのアドレッシングモードである、時にはモジュロ（ｍｏｄｕｌｏ）とも呼ばれるいくつかの循環の形態をサポートしている。境界チェックを実施するアルゴリズムの必要性を除去し、他の最適化を許可するため、そのような特徴は有用である。
【００１２】
実例の使用例はＦＩＲフィルタである。これは、Ｎ個の先行する結果を重みづけした合計から新しい結果を作成する一般的なＤＳＰ演算である。線形なメモリ構成では、新しいサンプルのブロックが処理される必要がある都度、それ以前の結果にアクセスする必要がある。これは、Ｎ個の最後の結果を線形バッファの開始にコピーし、そこから処理することによって行われ得る。しかしながら、循環メモリを利用する際は、処理は単に古い結果において開始し、終了に達するとラップしてバッファのスタートに戻るので、そのようなコピーするステップはもはや必要ない。したがって、循環バッファはそのような演算をよりずっと効率的なやり方で実施することを可能にする。
【００１３】
メモリへの循環アドレッシングモードをサポートするための知られている一手法は、プロセッサとメモリの間のパスにおいて提供されるアドレス生成ユニット（ＡＧＵ：Ａｄｄｒｅｓｓ  Ｇｅｎｅｒａｔｉｏｎ  Ｕｎｉｔ）内でさらなるロジックを提供することである。しかしながら、処理効率が複数のデータ値をベクトルオペランドのそれぞれの要素にロードし、データ値いくつかの要素を一度に処理することによって向上され得るベクトル処理システムでは、メモリへのアクセスパスは著しく時間制約的なものとなり得、それに応じてそのパス内で余剰なロジックを持続させて演算の循環アドレッシングモードをサポートすることが困難となり得る。したがって、ベクトル処理システム内でメモリへの循環アドレッシングをサポートするための改善されたメカニズムを提供することが望ましい。
【００１４】
一実施例によると、ベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施するための、命令復号器とを有する装置が提供される。命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように処理回路を制御する。処理回路は、第１の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じて及び必要な時にラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成するように構成されている。
【００１５】
そのようなベクトル生成命令の使用は、循環アドレッシングをサポートするためにメモリアクセスパス内でさらなるロジックを提供する必要なく、後続のメモリアクセス命令の入力オペランドとして使用し、メモリ内でそのような循環アドレッシングを直接実装することができる要素のベクトルを生成するための非常に効率的なメカニズムを提供する。別個の命令の使用を通じて循環アドレッシングモードを実装することによって、循環アドレッシングの使用、並びにシステム内で使用できる循環バッファの数及びサイズにおいてかなりの柔軟性を提供する。
【００１６】
説明した実施例のベクトル生成命令によると、ベクトルオペランドはベクトル生成命令への入力としては要求されず、その代わりに、シーケンス内のそれぞれの値がラップ制御情報から決定された境界内に収まることを保証するために、スカラ開始値から生成された規則的に進行するシーケンスがラップするために要求されるかどうか、及びいつ要求されるかを判断するために使用されるラップ制御情報を参照して、要素の出力ベクトル全体が入力されたスカラ開始値から生成される。
【００１７】
スカラ開始値が指定され得るいくつかのやり方があるが、一実施例において、ベクトル生成命令はスカラ開始値を提供する第１のスカラレジスタを指定する。これはスカラ開始値の指定に関してかなりの柔軟性を提供する。さらには、これは命令についての入力ベクトルを指定する必要性を回避することによって、装置内でベクトルレジスタの使用における制約を軽減することができ、これは最適に使用されることを必要とするベクトルレジスタが乏しいリソースでよくあることである。
【００１８】
ベクトル生成命令はベクトル生成命令によって生み出された要素のベクトルを消費するよう意図された命令と密に連結でき、ひいてはベクトル生成命令によって生成される要素のベクトルが比較的短時間、後続の命令がその要素のベクトルをソースオペランドとして消費するまで、保持されることだけを必要とすることを保証するため、ベクトルレジスタの利用は、説明した実施例のベクトル生成命令を使用してさらに最適化することができる。
【００１９】
ベクトル生成命令内でラップ制御情報を特定し得る、いくつかのやり方がある。例えば、１つ又は複数の即値を使用して指定することができるが、一実施例においては、レジスタの内容を参照して指定される。その場合、ラップ制御情報はベクトルレジスタ内で指定することができるが、一実施例においてはさらなるスカラレジスタの内容によって指定される。
【００２０】
ラップ制御情報は、規則的に進行するシーケンスを生成する際に、その範囲内で値が保持されることが必要とされる境界を決定するために使用される。ラップ制御情報は第１の及び第２の境界の両方を決定できるようにするために十分な情報を与えることができるが、一実施例においては処理回路がラップ制御情報を使用して第１の境界を決定し、一方で第２の境界は予め定められる。例えば、一実施例において、第２の境界はゼロ値であってもよい。そのような実施例においては、ラップ制御情報は第１の境界を決定するために使用されるサイズ指標を与えることができる。サイズ指標は様々な形態を取ることができる。例えば、第１及び第２の境界によって定義されるバッファのサイズを特定するために使用することができ、ひいては処理回路がそれぞれの値がその指定されたバッファサイズのバッファによって定義される境界内にとどまることを保証するために規則的に進行するシーケンスがラップする必要があるポイントを決定することを可能にする。或いは、サイズ指標を使用して、その値を論理ゼロ値にラップさせる（規則的に増加するシーケンスについて）あろう規則的に進行するシーケンス内の値をより直接的に特定するために、又は値がゼロに等しくなる時までラップされる値（規則的に減少するシーケンスについて）を特定するために、ラップポイントインジケータを特定することができる
【００２１】
一実施例において、規則的に進行するシーケンス内の各値同士の差異は予め定められてもよい。しかしながら、代替的な実施例においては、ベクトル生成命令は、規則的に進行するシーケンス内で隣接する要素の値同士の差異を決定するために使用される調整量を特定する。ベクトル生成命令内で調整量を指定できるようにすることにより、これは循環アドレッシングを実装するために好適なベクトルの生成に関して著しく改善された柔軟性を提供する。例えば、調整量はメモリ内でアクセスされることになるデータ値のサイズを考慮するために変化し得、したがってアクセスされることになるデータ値のアドレスを決定するために使用することが簡易な要素のベクトルを生成できるようにする。
【００２２】
一実施例において、ベクトル生成命令によって生成される要素のベクトルを使用してアクセスされることになるメモリアドレスを直接指定することができる。しかしながら、一実施例においては、その代わりに、アクセスされることになる実際のメモリアドレスを特定するために、要素のベクトルが次に基底アドレスと結合されるオフセットを指定する。オフセットのベクトルを生成することにより、そのオフセットのベクトルを異なる基底アドレスと結合するだけで、原理的には同一のベクトルはメモリ内の複数の異なる循環バッファを特定するために使用することができるため、これはさらに向上した柔軟性を与える。循環バッファの数に対する唯一の制限は、そのようなベクトルオフセットを記憶するために使用される利用可能なベクトルの数である。さらに、原理的には、バッファは所望によりオーバーラップするように構成することができる。
【００２３】
基底レジスタからオフセットを指定するために要素のベクトルを使用することにより、また所望のように調整量を変化できるようにすることにより、上述の手法を使用して原理的には任意のサイズ及びメモリ内で任意の位置（一実施例においては、サイズは調整量の倍数であるように制約される）にあり得る循環バッファをメモリ内で定義することができる。これは、ひいては循環バッファの使用においてかなりの柔軟性を提供する。
【００２４】
所望であればベクトル生成命令に課すことができる、様々な制約がある。例えば、ラップ制御情報から決定されるバッファサイズを調整量の倍数であるように制約することにより、ベクトル生成命令を実行する際に要素のベクトルを生成するように要求される回路を簡略化できる。一実施例においては、スカラ開始値もまた調整量の倍数であるように制約することができる。そのような制約を使用することにより、ベクトル生成命令を実行する際に要素のベクトルを生成するために使用される回路において著しい簡略化を可能にする。特に、ラップポイントを検出するように要求されるコンポーネントは、条件を超えるか又は条件より小さいかを検出することが必要な回路よりもむしろ等価性チェック回路を使用して実装することができる。
【００２５】
さらに、所望であれば、ベクトルを生成する際に遭遇するかもしれない潜在的なラップポイントの数を制限するためにバッファサイズを制約することができる。例えば、一実施例においては、バッファサイズはベクトル内の要素の数を調整量で乗じて決定したサイズ値を超えるように制約される。そのように制約することで、そのベクトルではせいぜい１つのラップしか起こらないように保証することができる。
【００２６】
一実施例においては、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に増加するシーケンスに従うように、前記ベクトルを生成するためにベクトル生成命令に応じて復号器回路により処理回路が制御される。しかしながら、代替的に、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに従うように、前記ベクトルを生成するためにベクトル生成命令に応じて復号器回路により処理回路が制御されてもよい。ラップ制御情報によって定義されるような上限境界又は下限境界のいずれかに、いつ遭遇するかをチェックすることができる回路を提供することにより、要素が正にインクリメントするシーケンス又は負にインクリメントするシーケンスに従うベクトルを作成することが可能であり、それによってこれらのベクトルを使用していずれかの方向に「踏み込んだ（ｗａｌｋｅｄ）」循環バッファを特定することができる。一実施例においては、ベクトル生成命令の２つの異なる変数を定義することができ、１つは必要に応じてラップするように制約される規則的に増加するシーケンスの生成する結果となり、一方、もう１つは必要に応じてラップするように制約される規則的に減少するシーケンスを生成するために使用される。
【００２７】
説明した実施例のベクトル生成命令は様々な状況で有用であり得る。しかしながら、前述のように、特定の使用例はメモリ内で循環アドレッシングモードを実装するためのものであり得、ベクトル生成命令を関連付けられたベクトルメモリアクセス命令に連結することができる。特に、一実施例においては、復号器回路はベクトルメモリアクセス命令に応答して処理回路を制御して、メモリ内で、複数のアドレス要素を含む入力アドレスベクトルオペランドによって決定されるアドレスにおいて複数のデータ値にアクセスしてもよい。そのような構成において、装置を前述のベクトル生成命令及び関連付けられたベクトルメモリアクセス命令の両方を含む命令のシーケンスを実行するように構成することができ、関連付けられたベクトルメモリアクセス命令は、ベクトル生成命令によって生成されたベクトルを、入力アドレスベクトルオペランドとして特定する。そのような手法によって、複数のデータ値がメモリ内の循環バッファ内でアクセスされることを保証する。
【００２８】
特定の一実施例において、関連付けられたベクトルメモリアクセス命令は、循環バッファの開始アドレスを提供する基底アドレスを特定し、入力アドレスベクトルオペランドは、アクセスされることになる各アドレスを特定するために、複数のアドレス要素として、基底アドレスと結合されるアドレスオフセットのベクトルを指定する。循環バッファの位置が、基底アドレスによって決定されるため、前述のように、そのような手法はメモリ内の循環バッファの位置に関して著しい柔軟性を提供し、次いでベクトル生成命令によって生成される要素のベクトルを使用して、その基底アドレスを参照して特定される循環バッファ内でデータ値がアクセスされるシーケンスを特定する。
【００２９】
一実施例においては、ベクトル命令の実行を「ビート」と称される部分に分割することができ、各ビートは予め定められるサイズのベクトルの部分の処理に相当する。ビートは、完全に実行される又は全く実行されない、及び部分的に実行することができない、のいずれかである、ベクトル命令の微小な部分である。１つのビート内で処理されるベクトルの部分のサイズはアーキテクチャによって定義されることができ、ベクトルの任意の部分であり得る。
【００３０】
そのような一実施例において、所与のベクトル命令に応じて、処理回路はそれぞれがベクトル値の一部に相当する複数の処理のビートを実行するように構成され、また処理回路は前記ベクトル生成命令、及び前記関連付けられたベクトルメモリアクセス命令のオーバーラップした実行をサポートするように構成され、ここにおいて、関連付けられたベクトルメモリアクセス命令の第１のビートのサブセットはベクトル生成命令の第２のビートのサブセットと並列に実行される。ベクトル生成命令及び関連付けられたベクトルメモリアクセス命令のオーバーラップした実行を可能にすることにより、著しいパフォーマンス改善を提供することができる。
【００３１】
ベクトル生成命令が要素のベクトルを生成する際にラップ挙動をサポートされるようにする一方で、一実施例においては、ラップ挙動を選択的に無効にすることができる。特に、一実施例においては、命令復号器はベクトル生成命令を復号する際に検出された指定された条件に応答して、処理回路によるラップ制御情報の使用を無効とし、それによって、処理回路は前記複数の要素のうちの第１の要素がスカラ開始値に依存するようなベクトルを生成するように、また複数の要素の値がいかなるラップ制約なしに規則的に進行するシーケンスに従うように、構成される。したがって、指定された条件に遭遇すると、ベクトル生成命令を使用して、規則的に増加するシーケンスであれ規則的に減少するシーケンスであれ、要素が規則的に進行するシーケンスに従うベクトルを生成することができる。これはベクトル生成命令の使用においてさらなる柔軟性を提供する。
【００３２】
指定された条件は様々な形態を取り得るが、一実施例においては、指定された条件は予約値を使用してベクトル生成命令内のラップ制御情報を特定する時に検出される。したがって、これは効果的にラップ制御情報が無効化されていることを特定する。予約値は様々な形態を取ることができる。例えば、一実施例においては、予約値は許容されない即値であり得、一方、代替的な実施例においては、予約値はラップ制御情報のために特定される予め定められたレジスタの形態を取ってもよく、その予め定められるレジスタは正当にラップ制御情報を提供するために使用することができないレジスタである。
【００３３】
一実施例においては、スカラ開始値及びラップ制御情報の両方は装置によって提供される一組のスカラレジスタ内のスカラレジスタを参照してベクトル生成命令内で特定される。特定の一実施例において、スカラ開始値及びラップ制御情報を特定するために使用されるスカラレジスタの選択は、命令が実行される際に要求される情報へのアクセス時間を短縮する目的で制約される。例えば、一実施例においては、スカラ開始値及びラップ制御情報の特定に使用される第１及び第２のスカラレジスタの指定は、それぞれ、第１のスカラレジスタが、第２のスカラレジスタが選ばれる一組内のレジスタの第２のグループとオーバーラップしない前記一組のスカラレジスタ内の、スカラレジスタの第１のグループから選択されるように制約される。このやり方で第１及び第２のスカラレジスタの選択を制約することによって、一組のスカラレジスタにアクセスするために使用されるアクセス回路を、第１及び第２のスカラレジスタの両方の内容に、より少ない読み取りポートで同時にアクセスできるように、又はレジスタファイルが２つの独立したバンクに分かれるように構成することができ、それによりハードウェア及び潜在的にエリアの観点からより低コストで両方のレジスタへのアクセスを生み出す。
【００３４】
一実施例においては、処理回路を制御してベクトル生成命令によって、複数の要素のそれぞれを生成するステップのシーケンスを繰り返し実行することにより、要求されるベクトルを生成することができる。しかしながら、代替的な実施例において、複数の要素を並列に生成できるようにするために処理を並列化することができ、それによって、パフォーマンスを改善する。特に、一実施例においては、処理回路は、スカラ開始値から導出した入力値及び規則的に進行する調整値のシーケンスを使用して前記ベクトルについての複数の候補要素を生成するための加算器回路と、それぞれの候補要素から前記ベクトル内に含めるための出力要素を生成するための修正回路とを備える。それぞれの候補要素について、修正回路はラップ条件が存在するかどうかを判断するように構成され、前記ラップ条件が存在する場合は、出力要素を生成するためにラップ制御情報に基づいて候補要素を修正するための算術演算を実施し、そうでなければ修正されない候補要素を出力要素として使用する。
【００３５】
そのような手法により、複数の計算を並列に実施することができる。実際、所望であれば、ベクトルの要素のすべてが並列に生成できるように、加算器回路及び修正回路を構成することができる。代替的に、小型化された加算器回路及び修正回路を使用してもよく、複数の要素を並列に決定するようにでき、加算器回路及び修正回路を通してさらなる繰り返しを実施することでベクトルによって要求されるあらゆる残りの要素を計算する。
【００３６】
特定の実施例においては、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに従うように、ベクトルを生成するためにベクトル生成命令に応じて復号器回路により処理回路が制御され、加算器回路は入力値から調整値のうち関連付けられる１つを減算することによりそれぞれの候補要素を生成するために別個の加算器ブロックを備える。各加算器ブロックからのキャリーアウト信号を使用して、関連付けられている候補要素についてラップ条件が存在するかどうかを判断する。したがって、そのような実施例においては、ラップ条件が存在するかどうかについての判断が各加算器ブロックからのキャリーアウト信号から直接的に推論できるので、修正回路を著しく簡略化することができる。これは、ラップ条件が存在する場合を検出するためにより複雑化された比較回路を修正回路に含める要求を回避する。
【００３７】
一実施例においては、ベクトル生成命令の実行が、複数の要素が規則的に増加するシーケンスに従い、やはり必要に応じてラップするように制約されるベクトルの生成を引き起こす時、類似の原理を採用することができる。特に、一実施例においては、入力値はスカラ開始値からラップ制御情報から導出した上限値を減算することによって、スカラ開始値から導出される。加算器回路は、調整値の関連付けられている１つを入力値に加算することによりそれぞれの候補要素を生成するための別個の加算器ブロックを備え、各加算器ブロックからのキャリーアウト信号を使用して、関連付けられている候補要素についてラップ条件が存在するかどうかを判断する。
【００３８】
したがって、この実施例においては、入力値は、スカラ開始値から上限値を初期減算することを実施することにより修正される。初期減算を実施することにより、次いで加算器回路を使用して調整値のうち関連付けられた１つを入力値に加算する際、各加算器ブロックからのキャリーアウト信号を再度使用してラップ条件が存在するかどうかを判定できる。ラップ条件が存在する場合、修正回路は次いで候補要素を修正する。したがって、入力値の適切な調整により、キャリーアウト信号を使用することにより可能とされた修正回路への簡略化は、規則的に増加するシーケンスが生成される時でさえも保持される。
【００３９】
一実施例においては、ラップ条件が存在する場合、修正回路は、出力要素を生成するために、ラップ制御情報から導出した上限値を候補要素へ加算することを前記算術演算として実施するように構成される。したがって、処理回路が規則的に増加するシーケンス又は規則的に減少するシーケンスを生成する両方の場合において、キャリーアウト信号が設定されている時、修正回路をラップ制御情報から導出した上限値を関連付けられている候補要素に加算するように、同じやり方で構成することができる。
【００４０】
次に、図面を参照して特定の実施例を説明する。
【００４１】
図１はベクトル命令の処理をサポートするデータ処理装置２の実例を概略的に図示している。これは説明を容易にするために簡略化された図であり、実際には装置は図１に簡略化のため示されない多くの要素を含み得ることが諒解されよう。装置２は命令復号器６によって復号された命令に応じて桁上げ出力データ処理のための処理回路４を備える。メモリシステム８からプログラム命令がフェッチされ、命令復号器により復号され、アーキテクチャによって定義されるやり方で命令を処理するために処理回路４を制御する制御信号を生成する。例えば、復号器６は復号された命令のオペコード及び命令のあらゆるさらなる制御フィールドを解釈して、処理回路４に適切なハードウェアユニットをアクティブ化させて、算術演算、ロード／ストア演算又は論理演算などの演算を実施させるための制御信号を生成する。装置は一組のスカラレジスタ１０及び一組のベクトルレジスタ１２を有する。また、処理回路の動作を設定するために使用される制御情報を記憶するための他のレジスタ（図示せず）を有してもよい。算術又は論理命令に応じて、処理回路は典型的にはレジスタ１０、１２からソースオペランドを読み取り、命令の結果を元のレジスタ１０、１２に書き込む。ロード／ストア命令に応じて、データ値は処理回路４内で、レジスタ１０、１２とメモリシステム８との間をロード／ストアユニット１８を介して転送される。メモリシステム８はメインメモリ同様に１つ又は複数のキャッシュのレベルを含むことができる。
【００４２】
一組のスカラレジスタ１０は単一のデータ要素を備えるスカラ値を記憶するためのいくつかのスカラレジスタを備える。命令復号器６及び処理回路４によってサポートされるいくつかの命令は、スカラレジスタ１０から読み取られたスカラオペランドを処理し、スカラレジスタに書き込み返されるスカラ結果を生成するスカラ命令であってもよい。
【００４３】
一組のベクトルレジスタ１２はいくつかのベクトルレジスタを含み、それぞれは複数の要素を備えるベクトル値を記憶するように構成される。ベクトル命令に応じて、命令復号器６は処理回路４を制御して、ベクトルレジスタ１２のうちの１つから読み取られたベクトルオペランドの各要素に対してベクトル処理のいくつかのレーンを実施し、スカラレジスタ１０に書き込むためのスカラ結果又はベクトルレジスタ１２に書き込むためのさらなるベクトル結果のいずれかを生成することができる。いくつかのベクトル命令は１つ又は複数のスカラオペランドからベクトル結果を生成することができ、又はスカラレジスタファイル内のスカラオペランドに対してさらなるスカラ演算、同様にベクトルレジスタファイル１２から読み取られたベクトルオペランドに対してベクトル処理のレーンを実行することができる。したがって、いくつかの命令はスカラ−ベクトル命令の混合であってもよく、それに関して、命令の１つ又は複数の転送元レジスタ及び転送先レジスタのうち少なくとも１つはベクトルレジスタ１２であり、１つ又は複数の転送元レジスタ及び転送先レジスタのもう１つはスカラレジスタ１０である。
【００４４】
ベクトル命令はまたベクトルレジスタ１２とメモリシステム８内の位置の間でデータ値を転送させるベクトルロード／ストア命令を含む。ロード／ストア命令は、メモリ内の位置がアドレスの隣接する範囲に対応する、隣接するロード／ストア命令、又はいくつかの個別のアドレスを指定して処理回路４を制御し、それらのアドレスのそれぞれからベクトルレジスタのそれぞれの要素にデータをロードするか、若しくはベクトルレジスタのそれぞれの要素からのデータを個別のアドレスに記憶する、スキャッター／ギャザータイプのベクトルのロード／ストア命令を含むことができる。
【００４５】
処理回路４は異なるデータ要素サイズの範囲を伴うベクトルの処理をサポートすることができる。例えば、１２８ビットのベクトルレジスタ１２は１６個の８ビットのデータ要素、８個の１６ビットのデータ要素、４個の３２ビットのデータ要素又は２つの６４ビットのデータ要素に区切ることができる。制御レジスタを使用して現在のデータ要素のサイズを使用するように指定することができ、又は代替的にこれは実行される所与のベクトル命令のパラメータであってもよい。
【００４６】
処理回路４は様々なクラスの命令を処理するためのいくつかの別個のハードウェアブロックを含むことができる。例えば、メモリシステム８と対話するロード／ストア命令は専用のロード／ストアユニット１８によって処理することができ、一方算術又は論理命令は算術論理ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）によって処理することができる。ＡＬＵ自身はさらに乗算を含む演算を実施するための乗算累積ユニット（ＭＡＣ：Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｅ  Ｕｎｉｔ）及びＡＬＵ演算の他の種類を処理するためのさらなるユニットに区切ることができる。浮動小数点ユニットもまた浮動小数点命令を取り扱うために提供することができる。いかなるベクトル処理も含まない純粋なスカラ命令はまた、ベクトル命令と対照の別個のハードウェアブロックによって、又は同一のハードウェアブロックの再利用によって、取り扱うことができる。
【００４７】
残りの図面を参照してより詳細に議論するように、一実施例によると、ベクトル生成回路１６は、装置２によって実行される命令のシーケンス内に含まれ得るベクトル生成命令によって要求される演算を実施するように構成される処理回路４内に提供される。ベクトル生成回路１６は処理回路４内に専用のブロックを備えることができるか、又はＡＬＵなどの他の回路ブロックのうちの１つの中に組み込むことができる。
【００４８】
本明細書で説明される実施例のうちのいくつかによると、新しい種類のベクトル生成命令をスカラ開始値及びラップ制御情報を特定するように定義することができる。そのような命令が命令復号器６によって復号される際、制御信号が処理回路４に送信され、ベクトル生成回路１６に複数の要素を含むベクトルを生成させ、次いで典型的にはその生成されたベクトルはベクトルレジスタ１２のうちの１つに記憶される。ベクトルの第１の要素がスカラ開始値に依存し、複数の要素の値が、次いでそれぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトル生成回路１６はベクトルを生成するように構成されている。規則的に進行するシーケンスは規則的に増加するシーケンス又は規則的に減少するシーケンスであってもよく、また一実施例においては、ベクトル生成命令の異なる変数は増加するシーケンス及び減少するシーケンスの両方について指定される。
【００４９】
そのように生成された要素のベクトルは様々な状況で有用であり得る。しかしながら、そのようなベクトルが非常に有用である特定の一使用例は、前述のベクトルのギャザー／スキャッターロード／ストア命令についての入力オペランドとして、である。特に、一実施例においては、ベクトル生成命令によって生成されるベクトルはギャザー／スキャッター演算を実施させるようなそのようなベクトルのロード／ストア命令についての入力オペランドとして提供されるオフセットのベクトルとして使用することができる。そのような命令は典型的にはまた基底アドレスを指定するスカラ入力を受信し、オフセットのベクトルは次いでその基底アドレスを参照してアクセスされるメモリ内のアドレスのそれぞれを生成するために使用される。そのようなベクトルのロード又はストア命令がメモリ内の任意のアドレスの一組にアクセスするために使用できる一方、上述のベクトル生成命令によって生成されるオフセットのベクトルを使用する際、これはアドレスのシーケンスがメモリ内の循環バッファにあると特定されることを可能にする。したがって、このメカニズムは、メモリアクセスパスにさらなる回路を追加する必要なしに、メモリ内の循環アドレッシングモードを採用するための非常に効率的な技法を提供し、ひいてはそのようなさらなる回路がそのパス内にもたらすであろう潜在的なパフォーマンスへの影響を回避する。これはメモリアクセスパスがしばしばシステム内の重大なタイミングパスとなるベクトル処理システムに著しい利益をもたらす。
【００５０】
やはり図１に示されるように、所望により命令復号器６及び処理回路４の演算を制御するためにビート制御回路２０を設けてもよい。特に、いくつかの実施例においては、ベクトル命令の実行を「ビート」と称される部分に分割することができ、各ビートは予め定められるサイズのベクトルの部分の処理に相当する。図８及び図９を参照して後により詳細に議論するように、これはベクトル命令のオーバーラップする実行を可能にし、それによりパフォーマンスを改善することができる。
【００５１】
図２は上で議論した種類のベクトル生成命令内に提供され得るフィールドを概略的に図示している。特に、命令５０は命令のオペコードを指定する第１のフィールド５２を含むことができる。これを使用して命令がベクトル生成命令であることを特定することができ、またインクリメントする又はデクリメントする変数など、命令の異なる変数を特定するために使用することもできる。特定の一実施例において、ベクトル生成命令のインクリメントする変数はベクトルインクリメントラップ複製（ＶＩＷＤＵＰ：ｖｅｃｔｏｒ  ｉｎｃｒｅｍｅｎｔ  ａｎｄ  ｗｒａｐ  ｄｕｐｌｉｃａｔｅ）命令と称され、一方デクリメントする方面の変数はベクトルデクリメントラップ複製（ＶＤＷＤＵＰ：ｖｅｃｔｏｒ  ｄｅｃｒｅｍｅｎｔ  ａｎｄ  ｗｒａｐ  ｄｕｐｌｉｃａｔｅ）命令と称される。「複製（ｄｕｐｌｉｃａｔｅ）」との称し方は、ベクトルの要素のそれぞれについて決定された値がスカラシード値から導出され、それぞれの要素についての実際の値はこの場合、先行する要素の値をインクリメント又はデクリメントした方面の変数であり、この時、初期要素値はスカラシード値から導出されることを特定すること意図しているだけである。
【００５２】
一実施例においては、ベクトル内のデータ値のサイズを特定するためにサイズ情報フィールド５３が命令内に用意される。特に、処理回路が異なるサイズのデータ値がベクトル内で処理されるようにすると、次いでそのようなフィールドは現在の命令が関連する特定のデータ値サイズを特定するために使用することができる。代替的な実施例において、データ値サイズは予め定められ得るため、そのようなサイズ情報は必要とされなくてもよい。
【００５３】
転送先ベクトルレジスタフィールド５４は、命令を実行することにより生成される要素のベクトルが書き込まれるベクトルレジスタ（例えば、図２ではレジスタＱｄと示される）を特定する。フィールド５５はスカラ開始値を与え、一実施例においては、スカラレジスタのうち１つを参照して特定される（図２の実例では、スカラレジスタＲｎとして示される）。
【００５４】
ラップ制御情報フィールド５６もまた境界を特定するために使用されるラップ情報、すなわち値の規則的に増加するシーケンス又は規則的に減少するシーケンスがラップする必要があるポイントを特定するために提供される。特定の一実施例において、ラップ制御情報を使用して第１の境界を決定し、第２の境界は予め定められる。より詳細には、一実施例においては、第２の境界はゼロ値であると仮定する。そのような実施例においては、ラップ制御情報は例えば本明細書ではバッファサイズ又は「ＢＵＦＳＩＺＥ」と称されるサイズ情報を提供することができ、第２の境界を予め定めるとすると、これは第１の境界の値を特定できるようにする。ラップ制御情報は命令内の即値として指定することができ、又は代わりにレジスタを参照して特定することができ、スカラレジスタ１０のうちの１つ若しくはベクトルレジスタ１２のうちの１つのいずれかである。一実施例においては、ラップ制御情報はさらなるスカラレジスタによって指定され、図２の実例ではスカラレジスタＲｍと示されている。
【００５５】
一実施例においては、ベクトル処理にかけられるデータ値は予め定められるサイズであってもよいが、代替的な実施例においてデータ値サイズは、いくつかの命令を実行する時はデータ値が第１のサイズであると仮定され、一方で他の命令を実行する時はそれらが異なるサイズであると仮定されるように、変化してもよい。異なるデータ値サイズをサポートする実施例において、次いでベクトル生成命令５０は一実施例においては、即値として指定され得る調整量フィールド５７を含むことができるが、代替的にはレジスタの内容によって指定され得る。命令が実施されると、調整量は規則的に進行するシーケンス内で各要素が増加又は減少させられる量を決定する。前述のように、一実施例においては、ベクトル生成命令によって生成されるベクトルは後続のベクトルのロード又はストア命令のためのアドレスオフセットのベクトルとして使用され、したがって、調整量はその後続のベクトルのロード又はストア命令によってアクセスされるデータ値のサイズを考慮して設定され得る。例えば、一実施例において調整量は、続いてアクセスされるデータ値がバイトサイズのデータ値である場合、１に設定され、データ値が１６ビットのエンティティである場合は２に設定され、データ値が３２ビットのエンティティである場合は４に設定される。
【００５６】
ベクトル生成命令を実行する時に要素のベクトルが生成されるやり方を、図３の特定の実例を参照してより詳細に図示する。この実例において、ベクトル生成命令はＶＩＷＤＵＰ命令、すなわちインクリメントする変数であると仮定する。図３に示すように、論理バッファ７０はゼロ値を有すると仮定される第２の境界、及びバッファサイズ８０を参照して特定される第１の境界を有すると特定される。スカラ開始値７５は開始値として使用される論理バッファ内の特定のポイントを特定する。図３に図示した実例において、バッファサイズは１６、すなわち１６バイトと仮定し、ベクトル長は１２８ビットと仮定する。バッファサイズは単純に説明のために比較的小さくなるように選択されているが、これによって図３に示される３つの実例のそれぞれについての演算のラップ挙動を図示することが助けられるからである。実際には、ベクトルのあらゆる特定の場合を生成する際に起こるラップの発生が減少するようにバッファサイズは著しく大きくてもよい。
【００５７】
実例１で図示するように、調整量は１と仮定する、すなわち関連付けられるデータ値サイズは８ビットであり、スカラ開始値は９に設定されることを示し、これは１６のエントリを含み、１エントリは８ビットのサイズになされたデータ値のそれぞれに対応する、実例１に示されるベクトルの生成をもたらす。見ての通り、ベクトル内の要素は規則的に増加するシーケンスに従うが、値が第１の境界値までインクリメントされているポイントにおいてラップし、そのポイントでシーケンスはゼロに戻り、次いでその後増加する。
【００５８】
実例２は調整量を２に設定する状況を示し、すなわち関連付けられるデータ値が１６ビットのサイズであることを特定している。この場合、スカラ開始値は１０であり、８要素を有し、１要素が１２８ビットのベクトル内で１６ビットのサイズになされたデータ値のそれぞれに対応する図３で示すベクトルの生成をもたらすと仮定する。やはり、値が第１の境界値までインクリメントされたところでラップポイントがあることが分かるが、代わりに次いで論理ゼロ値にラップし戻されている。
【００５９】
実例３は調整量が４に設定される実例を示しており、データ値サイズは３２ビットであることを示している。この実例では、初期のスカラ開始値は８であり、ベクトル内に４要素あり、１要素が１２８ビットのベクトル内で３２ビットのデータ値のそれぞれに対応する、図３で示す要素のベクトルの生成をもたらす。やはり、適切なポイントでラップが起こることが分かる。
【００６０】
この種類のベクトルを生成するための特定の命令の使用は、メモリ内の循環バッファの指定に関してかなりの柔軟性を提供する。原理的には、そのような循環バッファは任意のサイズであり得、メモリ内で任意の位置にあり得、実際に、所望であれば、複数のバッファをメモリアドレス空間内でオーバーラップするように定義することができる。
【００６１】
一実施例においては、ベクトル生成演算を実装するために要求される回路を簡略化のために、バッファサイズ及びスカラ開始値の指定にいくつかの制約を課すことができる。例えば、一実施例においては、バッファサイズは調整量の倍数であると制約することができる。加えて、所望であれば、スカラ開始値は調整量の倍数であると制約することができる。これらの２つの制約が図３に図示した３つの実例に課されていることが分かる。そのような制約を使用して、ラップポイントを検出するように要求される回路は、少なくともいくつかの実施例において、条件を超えるか又は条件より小さいかを検出することが必要な回路よりもむしろ等価性チェック回路を使用して実装することができる。
【００６２】
ＶＩＷＤＵＰ又はＶＤＷＤＵＰいずれかの命令を実行する時に実装される機能性を、以下のように示すことができる：
2020502669.tif 000003
【００６３】
上記の機能性は図４の流れ図を参照してより詳細に議論する。ステップ１００において、ラップ機能を有するベクトル生成命令が実行され、その後ステップ１０５においてスカラレジスタＲｎが読み取られて初期オフセット、すなわちスカラ開始値を取得する。加えて、ステップ１１０において、スカラレジスタＲｍが読み取られてバッファサイズ情報を取得する。その後、ステップ１１５において、変数「ｅ」がゼロに等しくなるよう設定され、次いでステップ１２０において結果ベクトルレジスタ内のｅ番目の要素が現在のオフセット値に等しくなるよう設定される。次いで実施される後続のステップは、実行されるベクトル生成命令がインクリメント方面かデクリメント方面かに依存する。
【００６４】
ステップ１２５においてインクリメント方面であると決定されると、次いでステップ１３０において、オフセットは即値すなわち調整量分インクリメントされ、その後ステップ１３５において今度はオフセットがバッファサイズに等しいかどうかを判断する。オフセットがバッファサイズに等しい場合、次いでステップ１４５に進むのに先立ってステップ１４０においてオフセットがゼロに再設定され、そうでない場合、処理は直接ステップ１４５に進む。ステップ１４５において、ｅの値が最大値に達しているかどうか判断され、これは予め定められた長さのベクトル内のデータ値の数に依存する（データ値サイズから決定されるように）。ｅがまだ最大値に達していない場合、次いで処理がステップ１２０に戻る前にｅはステップ１５０でインクリメントされる。
【００６５】
ステップ１２５において、実行されている命令がデクリメント方面かどうかが判断され、次いでステップ１５５においてオフセットが現在ゼロに等しいかどうかを判断する。オフセットがゼロに等しい場合、次いでオフセットはステップ１６０においてバッファサイズから即値を減算した値に等しくなるように調整される。しかしながら、ステップ１５５においてオフセットがゼロに等しくないと判断される場合、次いでオフセットはステップ１６５において即値分デクリメントされる。ステップ１６０又は１６５に続いて、次いで処理はステップ１４５に進む。
【００６６】
ステップ１４５においてｅが最大値に達していると判断されると、次いでベクトルの要素のすべてが生成され、それに応じて結果ベクトルＱｄは所望の複数の要素を含むことになる。処理は次いでステップ１７０に進み、一実施例においては、レジスタＲｎ内のオフセット値が更新される。ステップ１７０は任意選択であるが、次の繰り返しに関してレジスタＲｎが次いで既にその次の繰り返しに適切な開始値を含むため、ベクトル生成命令が例えばループ本体内で繰り返し実行されている場合は有用であり得る。
【００６７】
図４に示される手法に代替的なものとして、いくつかの実施例においては、スカラレジスタＲｎは各繰り返しの間に更新されてもよい。したがって、この実施例においては、ボックス１７０はステップ１４５からの経路「Ｎｏ」にあると考えることができる。ｅがその最大値に等しいと判断される最後の繰り返しに続いて、処理は次いで経路「Ｙｅｓ」を辿り、やはり図４に示される手順に従ってレジスタＲｎの内容を更新する。
【００６８】
一実施例においては、転送元レジスタＲｍはバッファサイズを指定するが、代替的な実施例においては、バッファのサイズから即値を減算したものに等しい値を与えることによって、直接ラップポイント値を指定することができる。そのような構成においては、前述のＶＩＷＤＵＰ命令についての機能性は次のようになる：
2020502669.tif 000004
【００６９】
この手法は潜在的にハードウェア要求を削減することができ、オフセットのインクリメントでラップを並列に実施させるかどうかの判断を可能にするであろう。
【００７０】
ＶＤＷＤＵＰ命令について対応する機能性は以下の通りである：
2020502669.tif 000005
【００７１】
図５は上述のやり方で生成された要素のベクトルが次いでどのようにベクトルメモリアクセス命令について入力オペランドとして使用することができるかを図示している。特に、図５の実例においては、ベクトルメモリアクセス命令は、アドレスオフセットＱｍのベクトルによって指定されるメモリ内の位置からデータ値の収集を実施するように構成されるベクトルロード命令であると仮定する。得られたデータ値は次いで結果ベクトルＱｄ内の要素として記憶される。スカラレジスタＲｎはメモリ内に基底アドレスを含み、これはアクセスされる個別のアドレスを特定するためにオフセットのベクトルと結合される。ベクトル生成命令については、ベクトルアクセス命令は処理されるデータ値のサイズを特定するためのサイズフィールドを含むことができる。
【００７２】
そのようなベクトルロード命令はメモリ内の任意のアドレスからデータ値を収集するために使用することができる一方、ベクトル転送元レジスタＱｍがＶＩＷＤＵＰ又はＶＤＷＤＵＰ命令の実行によって生成されるベクトルであると設定される時、次いで実際にアクセスされるアドレスはメモリ内の循環バッファに対応すると理解されよう。したがって、例えば前述のＶＩＷＤＵＰ命令によって生成される要素のベクトルが図５の要素２００に示されるようなものである状況、すなわち前述のベクトルが１２８ビット長、データ値が３２ビットのデータ値である図３の実例３における結果と同一のものを考慮すると、次いで図５で示すように、循環バッファはメモリアドレス空間内でアクセスされるが、その循環バッファの開始位置はレジスタＲｎ内で与えられるスカラ値に依存する。したがって、そのスカラ値が第１の値２０５を有している場合、循環バッファは要素２１０で示されるような形態を取り、別の実例の場合スカラ値は値２１５を有し、次いで循環バッファは要素２２０によって示される。したがって、この手法は循環バッファがメモリアドレス空間内に定義される場合に関してかなりの柔軟性を提供する。オフセット２００のベクトルを使用する際、この場合データは関連する循環バッファから検索され、結果ベクトルレジスタＱｄ内に記憶され、図５に示す形態２２５を取る。
【００７３】
図４を参照して前述のようにＶＩＷＤＵＰ又はＶＤＷＤＵＰ命令のいずれかを実行する際実施される機能性は繰り返しシーケンスとして実装することができ、ベクトルの１つの要素が各繰り返しにおいて生成され、いくつかの実施例においてはベクトル生成回路は複数の要素が並列に生成されることができるように構成され得る。
【００７４】
図６はベクトル生成回路の１つのそのような構成を図示するブロック図である。この実例においては、一実施例においては複数の別個の加算器ブロックを含んでもよい加算器回路２５０が用意され、各加算器ブロックは出力ベクトルについて候補要素を生成するように構成されている。次いで加算器ブロックのそれぞれに対応する別個の修正ブロックを有する修正回路２６０が提供され、ラップ条件がその候補要素の値について検出されるかどうかによって各修正ブロックは対応する加算器ブロックによって出力される候補要素を選択的に修正する。加算器回路はスカラ開始値２５０及び様々な即値の倍数を受信する。修正回路２６０はラップ制御情報を受信する。
【００７５】
一実施例においては、加算器回路２５０及び関連付けられている修正回路２６０の両方はベクトルの要素のすべてについての値を並列に計算できるようにするために十分なブロックを含むことができる。代替的には、少なくともいくつかのデータ値サイズについて、加算器回路及び修正回路は要素のすべての値を並列に計算するために十分なブロックを有していないが、要素のすべてについてのその値は加算器回路及び修正回路を２回又はそれ以上の通過することの結果として計算することができることもある。
【００７６】
図６に示される実例において、ベクトルはＭ個の要素を有し、加算器回路２５０及び修正回路２５０はベクトルの要素のすべてを並列に生成できると仮定する。
【００７７】
図７Ａは、ＶＩＷＤＵＰ命令すなわち命令のインクリメント方面を処理する際使用される図６のベクトル生成回路１６の一実例の形態を図示している。この場合の加算器回路は一連の加算器ブロック３００、３０２、３０４、３０６を備え、それらのそれぞれには即値の関連付けられる倍数及び現在のオフセットすなわちスカラ開始値が与えられている。要求される数の加算器ブロック（ベクトルの要素のすべてが並列に生成されると仮定）はデータ値サイズに依存していることが諒解されよう。図３を参照して前述の３つの実例に関して、生成されるベクトルはデータ値サイズによって（またベクトル長が１２８ビットであると仮定して）４個の要素、８個の要素又は１６個の要素のいずれかを有することが分かり、またしたがって、一連のうち最後の加算器３０６は即値の３倍、即値の７倍又は即値の１５倍に対応する第２の入力のいずれかを受信する。
【００７８】
一実施例においては、１６個の加算器ブロック、及び１６個の修正ブロックを有する単一のベクトル生成回路が提供され得、すべてのブロックが要求されない場合では、ブロックのうち一定数をオフにすることができる。したがって、４個の要素を有するベクトルを生成する際、ブロックの四分の一だけがアクティブ化される必要があり、８個の要素を有するベクトルを生成する際、ブロックの半分がアクティブ化される必要があり、１６個の要素を有するベクトルを生成する際、ブロックのすべてがアクティブ化される。
【００７９】
次いで、加算器ブロック３００のそれぞれは、修正回路２６０内の関連付けられる比較ブロック３１０、３１２、３１４、３１６への１つの入力として先に進める候補要素を生成するために、指定された即値の倍数を現在のオフセットに加算する。各比較ブロックへの他の入力は、この実例の実施例においてはバッファサイズ値である。各比較ブロックは次いで関連付けられる加算器ブロックからの出力がバッファサイズよりも大きいか又はバッファサイズに等しいかどうかを判断する。加えて、関連付けられる加算器ブロックから受信した入力からバッファサイズを減算したものに等しい値を計算する（図７Ａで「ａ−ｂ」として表記）。各マルチプレクサ回路３２０、３２２、３２４、３２６は次いで関連付けられる加算器ブロックからの出力及び関連付けられる修正ブロックから出力「ａ−ｂ」を受信し、比較ブロックによって実施される比較の出力に依存して制御される。したがって、加算器の出力がバッファサイズよりも小さいと判断される場合、加算器からの出力が関連付けられるマルチプレクサからの出力であり、一方加算器からの出力がバッファサイズよりも大きいか又はバッファサイズに等しいと判断される場合、修正ブロックからの出力がマルチプレクサからの出力、すなわち関連付けられる加算器ブロックによって出力される値からバッファサイズを減算したものに対応する出力である。
【００８０】
ある実施例におけるＶＤＷＤＵＰ命令に要求される演算を実施するために使用され得る回路の実例を図７Ｂに示す。やはり、一連の加算器ブロック３３０、３３２、３３４、３３６が提供され、やはりこれらは１つの入力として現在のオフセット、また他の入力として即値の倍数を受信する。しかしながら、この実例においては受信される倍数は即値の負の倍数であり、加算器に現在のオフセット値からその即値の倍数の減算を実施させる。加算器ブロックからの出力は修正回路へと先に進められ、加えてキャリーアウト信号もまた修正回路へと伝搬される。この実例において、修正回路は比較ブロックを含む必要がないが、その代わり１つの入力として関連付けられる加算器ブロック３３０、３３２、３３４、３３６からの出力を受信し、第２の入力としてバッファサイズ情報を受信する、さらなる加算器ブロック３４０、３４２、３４４、３４６を含むことができる。さらなる加算器ブロックのそれぞれは、次いでバッファサイズ値を加算器ブロックからの出力に加算し、その値を第２の入力として関連付けられるマルチプレクサ３５０、３５２、３５４、３５６に提供し、各マルチプレクサの第１の入力は加算器回路２５０の加算器ブロック３３０、３３２、３３４、３３６からの出力である。加算器ブロック３３０、３３２、３３４、３３６のいずれかからの出力が負値である場合、キャリービットがこれを示し、これはそれに応じて、キャリービットが負値を示す場合、マルチプレクサが加算器ブロック３３０、３３２、３３４、３３６からの元々の出力の代わりに関連付けられる修正回路ブロック３４０、３４２、３４４、３４６からの出力を選択するように、マルチプレクサを制御するために使用される。
【００８１】
図７Ａ及び図７Ｂの上記比較から分かるように、ＶＤＷＤＵＰ命令を実装する際に使用される回路は加算器からのキャリー信号の使用によって著しく簡略化することができ、ひいては比較回路の必要性を回避できる。図７Ｃは、ＶＩＷＤＵＰ命令を実装する際に使用され得、またキャリー信号を比較回路を回避するために使用することもできる、代替的な回路の構成を図示している。図７Ｃに示すように、加算器ブロック３６０、３６２、３６４、３６６のそれぞれは図７Ａの実例の回路に従って現在のオフセット及び即値の倍数を受信するが、加えて第３の入力「−ＢｕｆＳｉｚｅ」を受信する。結果として、これは効果的に加算器に開始において現在のオフセットからバッファサイズの減算を行わせ、結果として加算器からの出力のいくらかが、キャリービット信号によって示される、負となることが可能である。コンポーネント３７０、３７２、３７４、３７６は図７Ｂのコンポーネント３４０、３４２、３４４、３４６に対応する。負であるあらゆる出力について、関連付けられるマルチプレクサ３８０、３８２、３８４、３８６は、加算器ブロック３６０、３６２、３６４、３６６からの元々の出力の代わりに、コンポーネント３７０、３７２、３７４、３７６からの調整された出力を選択する。
【００８２】
したがって、図７Ｃの回路を採用する際、ベクトルの要素を並列に、また比較回路の必要なしに生成するために、ＶＩＷＤＵＰ命令の実行は非常に効率的に実施することができる。２つの代わりに３つの数字を加算することは、全部の加算器の列を使用してキャリー伝搬加算器へ入力するために３つの入力を２つの被加算値に「減らす」ことにより加算器３６０、３６２、３６４、３６６内で容易に適応される。
【００８３】
さらには、同一の回路を、入力「−ＢｕｆＳｉｚｅ」をゼロに設定し、即値の倍数が加算される代わりに減算されるように構成するだけで、ＶＤＷＤＵＰ演算を実施するために使用することができることに留意すべきである。
【００８４】
デジタル信号処理（ＤＳＰ）などのいくつかの適用例においては、概ね等しい数のＡＬＵ及びロード／ストア命令があってもよく、したがって、ＭＡＣなどのいくらか大きいブロックは著しく長い時間アイドルのままであり得る。この非効率性はベクトルアーキテクチャでは悪化することがあるが、それは実行リソースがより高いパフォーマンスを獲得するためにベクトルレーンの数でスケーリングされるからである。小型プロセッサ（例えば、シングル命令発行、イン・オーダーコア）では完全にスケールアウトされたベクトルパイプラインのエリアオーバーヘッドが法外なものになり得る。利用可能な実行リソースのより良く使用しつつエリアの影響を最小化するための１つの手法は、図８に示すように命令の実行をオーバーラップさせることである。この実例においては、３つのベクトル命令はロード命令ＶＬＤＲ、乗算命令ＶＭＵＬ、及びシフト命令ＶＳＨＲを含み、すべてこれらの命令は相互にデータ依存性があるが、同時に実行していることができる。なぜならＶＭＵＬの要素１がＱ１レジスタの全体ではなくＱ１の要素１に依存しているだけであり、それでＶＭＵＬの実行はＶＬＤＲの実行が終わってしまう前に開始することができる。命令をオーバーラップできるようにすることで、乗算器のような高価なブロックをより長くアクティブにしておくことができる。
【００８５】
したがって、ベクトル命令の実行をオーバーラップするためにマイクロアーキテクチャ的な実装形態を可能にすることが望ましくなり得る。しかしながら、アーキテクチャが命令のオーバーラップの固定量を仮定するものであれば、マイクロアーキテクチャ的な実装形態が実際にアーキテクチャによって仮定される命令のオーバーラップの量に一致する場合は高い効率性をもたらし、一方で異なるオーバーラップを使用する、又は全くオーバーラップしない、異なるようにスケーリングされたマイクロアーキテクチャは問題を引き起こす可能性がある。
【００８６】
代わりに、アーキテクチャは図９の実例で示されるような異なる範囲のオーバーラップをサポートすることができる。ベクトル命令の実行を「ビート」と称される部分に分割し、各ビートは予め定められるサイズのベクトルの部分の処理に対応する。ビートは、完全に実行される又は全く実行されない、及び部分的に実行することができない、のいずれでもある、ベクトル命令の微小な部分である。１つのビート内で処理されるベクトルの部分の大きさはアーキテクチャによって定義され、ベクトルの任意の端数である。図９の実例においては、ビートはベクトル幅の四分の一の処理に相当する処理として定義され、そのため１ベクトル命令当たり４つのビートがある。明らかに、これはただの一実例であり、他のアーキテクチャは異なる数のビート、例えば、２つ又は８つを使用することができる。１ビートに相当するベクトルの部分は同一のサイズ、処理されるベクトルの要素サイズよりも大きい、又は小さくてもよい。したがって、要素サイズが実装形態ごとに、又は異なる命令同士のランタイムで変化しても、ビートはベクトル処理の一定の固定幅である。１ビート中の処理されるベクトルの部分が複数の要素を含む場合、キャリー信号は各要素が独立的に処理されることを保証するために個別の要素間の境界において無効とされることがある。１ビート中の処理されるベクトルの部分が要素の一部分のみに相当し、ハードウェアがいくつかのビートを並列に計算するためには不十分である場合、処理の１ビートの間に生成されるキャリー出力は、２つのビートの結果が共に１つの要素を形成するようにキャリー入力として後続の処理のビートに入力することができる。
【００８７】
図９に示すように、処理回路４の異なるマイクロアーキテクチャ的な実装形態は、抽象的なアーキテクチャ上のクロックの１「ティック（ｔｉｃｋ）」の間に異なる数のビートを実行することができる。ここで、「ティック」はアーキテクチャ的に状態が前進する単位に相当する（例えば、単純なアーキテクチャでは各ティックは命令を実行することに関連付けられるすべてのアーキテクチャ状態が更新される場合に相当し、プログラムカウンタが次の命令をポイントするように更新することを含む）。当業者であればパイプライン化などの知られているマイクロアーキテクチャ技法は単一のティックはハードウェアレベルで実施するには複数のクロックサイクルを必要とし、実際にはハードウェアレベルでの単一のクロックサイクルは複数の命令の複数の部分を処理することができることを意味することが諒解されよう。しかしながら、ティックはアーキテクチャレベルでは非常に微細であるため、そのようなマイクロアーキテクチャ技法はソフトウェアには見えないものである。簡略化のため、本開示のさらなる説明ではそのようなマイクロアーキテクチャは無視する。
【００８８】
図９の下段の実例に示すように、いくつかの実装形態は、１ティック内ですべてのビートを並列に処理するために十分なハードウェアリソースを用意することによって、同一ティック中のベクトル命令の４つすべてのビートをスケジューリングすることができる。これはより高パフォーマンスな実装形態に好適である。この場合、全体的な命令が１ティック内に完了することができるため、アーキテクチャレベルでは命令同士にいかなるオーバーラップも必要がない。
【００８９】
一方で、より良いエリア効率的な実装形態は１ティック当たり２ビートしか処理できない狭い処理ユニットを提供し、図９の中段の実例に示すように、命令実行は、第１の命令の第３又は第４のビートと並列に実行される第２のベクトル命令の第１及び第２のビートとオーバーラップさせることができ、これらの命令は処理回路内では異なる実行ユニット上で実行される（例えば、図９においては、第１の命令はベクトル生成回路を提供するユニット内で実行されるベクトルのインクリメント及びラップ命令であり、第２の命令はロード／ストアユニットを使用して実行されるロード命令である）。
【００９０】
さらになおエネルギー／エリア効率的な実装形態は、より狭く、一度に単一のビートしか処理できないハードウェアユニットを提供してもよく、この場合、１ティック当たり１ビートを処理することができ、命令の実行はオーバーラップし、例えば、図９の上段の実例で示すように２ビート分すれ違う。
【００９１】
図９で示すようなオーバーラップはただの実例であって、他の実装形態もまた可能であることが諒解されよう。例えば、処理回路４のいくつかの実装形態は同一のティック内に複数の命令を並列に二重発行することをサポートすることができ、命令のより高いスループットがある。この場合、１サイクル内で共に開始される２つ又はそれ以上のベクトル命令は、次のサイクル内で開始される２つ又はそれ以上のベクトル命令とオーバーラップするいくつかのビートを有することができる。
【００９２】
異なるパフォーマンスポイントにスケーリングするために実装形態ごとにオーバーラップの量が変化させることと同様に、ベクトル命令同士のオーバーラップの量もまたプログラム内のベクトル命令の実行の異なる瞬間同士の間のランタイムで変化することができる。したがって、処理回路４及び命令復号器６は、先行する命令に対して所与の命令が実行されるタイミングを制御するために使用される図１に示すようなビート制御回路２０を参照することができる。これは実装することがより困難なあるへんぴな場合又は命令にとって利用可能なリソースに依存して、マイクロアーキテクチャに命令をオーバーラップさせない選択する自由を与える。例えば、同一のリソース及びすべての利用可能なＭＡＣ又はＡＬＵリソースが既に別の命令によって使用されていることを要求する所与の種類のバックツーバック命令（例えば、乗累算）がある場合、次の命令の実行を開始するために十分に自由なリソースがないことがあり、それで、第２の命令の発行はオーバーラップするのではなく、むしろ第１の命令が完了してしまうのを待機することができる。
【００９３】
それに応じて、図９の上記説明から、ベクトル生成命令及び関連付けられるメモリアクセス命令がどのように実行されるかについて、かなりの柔軟性があることが分かるが、ベクトルメモリアクセス命令に、ベクトル生成命令によって生成されたベクトルを比較的速く消費させるようにこれらは密に連結し得る。ベクトルレジスタの数は典型的には乏しいリソースであるため、これは有用であり得、それに応じてベクトル生成命令によって生成されたベクトルをベクトルレジスタ内で長期間保持することを要求することによってではなく、ベクトルレジスタリソースを解放することができる。ベクトル生成命令自身の形態もまたこの利益を達成することを支援するものであるが、それはベクトルオペランドがベクトル生成命令へのソースオペランドとして要求されず、代わりにベクトル生成命令はその入力を即値又はスカラレジスタのいずれかから取得するからである。
【００９４】
いくつかの実施例において、ベクトル生成命令によって提供されるラップ機能性は選択的に無効とされることが可能であり、これは図１０の流れ図を参照して実例によって図示されている。特に、ステップ４００において、ベクトル生成命令が実行され、ステップ４０５においてスカラレジスタＲｍ（すなわち、ラップ制御情報を指定するレジスタ）が予約値に設定されたかどうかを判断する。例えば、スカラレジスタのうち１つ又は複数がそのようなラップ制御情報を指定するためには有効でないスカラレジスタである可能性があり、それに応じてレジスタＲｍをこれらのレジスタの１つに設定することによって、これはラップ機能性が無効とされるものと特定する。ある特定の実例において、これはプログラムカウンタのレジスタをレジスタＲｍとして指定することにより達成され得る。レジスタＲｍが予約値を指定しない場合、ステップ４１０で示されるように、処理は通常通り続けられ、例えば、図４の前述の処理を実装する。しかしながら、レジスタＲｍが予約値である場合、ステップ４１５においてラッピングが無効とされ、ステップ４２０においてベクトル生成回路はオフセット及び即（すなわち、調整量）値を使用して値のインクリメント又はデクリメントするシーケンスを生成するが、いかなるラップ制約も伴わない。これはＶＩＷＤＵＰ及びＶＤＷＤＵＰ命令（ラッピングが無効とされる変数においてはＶＩＤＵＰ及びＶＤＤＵＰ命令と称され得る）の使用にさらなる柔軟性をもたらすことができる。
【００９５】
スカラレジスタＲｍ及びＲｎの指定を制約することにより、さらなるパフォーマンス及び効率性の利益が実現され得る。特に、１つのスカラレジスタが、他のレジスタが選ばれるスカラレジスタのグループとオーバーラップしていないスカラレジスタの第１のグループ内にあるように制約される場合、もしレジスタがそのように制約されていなかったら要求されているであろうよりも少ない読み取りポートによって、又は２つの独立したバンクに分けられるレジスタファイルによって、のいずれかで、スカラレジスタファイル１０の読み取りアクセス回路を使用して両方のレジスタの内容に同時にアクセスすることが可能であり得る。これを図１１に概略的に図示しており、２つのグループは偶数及び奇数のレジスタである。したがって、Ｒ０  ４５５、Ｒ２  ４５６等の偶数レジスタのすべては１つのグループ内にあり、Ｒ１  ４６０、Ｒ３  ４７０等の奇数レジスタのすべてはさらなるグループ内にある。スカラ開始値がレジスタによってこれらのグループのうちの１つに指定されるように制約される場合、他のグループ内でレジスタによってラップ制御情報が指定されるが、図１１の読み取りアクセス回路４５０によって示されるように、マルチプレクサ４７５及び４８０からの出力を使用して単一の読み取りポートを介して奇数レジスタ及び偶数レジスタ両方の内容にアクセスすることが可能である。これらの値が最後のマルチプレクサ４８５に入力される前に、これらの値を取り出す（ｔａｐ  ｏｆｆ）ことにより、これが達成されるが、最後のマルチプレクサ４８５は所望であれば、なお単一のレジスタに出力を読み取らせる。
【００９６】
図１１において、偶数レジスタのグループ及び奇数レジスタのグループの観点で実例が図示されるが、より一般的には、レジスタがオフセットを指定するように、及びレジスタがバッファサイズをスカラレジスタセットのオーバーラップしない部分から開始されるように指定するように、制約することにより同一の利益が達成され得る。
【００９７】
以下は、上で議論した提案された命令がどのように効率的に使用されて循環メモリを使用し得るかを図示する実例のコードのシーケンスである：
2020502669.tif 000006
【００９８】
はじめの３つのＭｏｖｅ命令はスカラレジスタｒ８、ｒ９、及びｒ１０の内容を論理ゼロ値に初期化するために使用され、次いでＷＬＳＴＰ命令は、リンクレジスタにループの数を記憶するループを設定している。次いで、ＶＬＤＲＷ命令はスカラレジスタ（「ｓｒｃＣｏｅｆｆ」として示される）で指定されたアドレスから隣接するデータのロードを実施し、結果データ値をベクトルレジスタｑ０に記憶し、次いで命令はまたスカラレジスタ内のアドレスをインクリメントする。ＶＩＷＤＵＰ命令は次いで前述のように演算し、ベクトルレジスタｑ７に記憶されるオフセットのベクトルを生成する。データ値サイズが３２ビットであるため、即値は４である。後続のＶＬＤＲＷ命令は次いでベクトルレジスタｑ７の内容及び転送元レジスタ（「ｓｒｃＳａｍｐｌｅｓＣｉｒｃｕｌａｒ」と称される）内の指定された基底アドレスを使用し、次いでベクトルレジスタｑ１内に記憶されるメモリ内のデータ値にアクセスする。次いでベクトルの乗累演算が実施されるが、ｑ０内の各要素をｑ１内の対応する要素と乗算し、次いでレジスタｒ８及びｒ９内に保持されるスカラ値内で和を求める。この処理はループの複数の繰り返しを通して必要なループ数が実施されてしまうまで続けられる。
【００９９】
前述のように、実施され得るベクトルメモリアクセス演算のうち１種類は、複数のアドレス要素を含むアドレスベクトルオペランドから決定されたアドレスにおけるメモリ内の複数のデータ値にアクセスする。アドレスベクトルオペランドがアクセスされることになる個別のアドレスを直接指定する一方で、アドレスベクトルオペランドはしばしばオフセットのベクトルを指定し、それはアクセスされることになるアドレスを特定するために基底アドレスと結合される。そのような演算は、任意のメモリ位置にあるデータにアクセスできるようにし、メモリ内のアドレスからベクトルの個別の要素内にデータをロードする際にギャザー演算、又はベクトルからの個別の要素を特定されたアドレス位置に記憶する際はスキャッター演算としばしば称される。
【０１００】
そのようなスキャッター又はギャザー演算に関与するアドレスは任意であり得るという事実のため、そのような演算の処理は、一連の独立したロード又はストア演算が実施されるように、典型的には様々なアクセス要求がシリアル化されていることを必要とする。アクセスが実際に任意である場合、これは合理的で必須である。しかしながら、そのようなスキャッター又はギャザータイプのメモリアクセス演算が使用されるが、アクセスされることになるアドレスの少なくともいくつかが実際に連続的で、それに応じてデータ値の複数が、メモリ内の隣接するアドレスへの単一のアクセスを介してアクセスされ得る場合が増えていることが理解されてきた。これについての特定のある実例は、ギャザー又はスキャッター演算を実施する際に次いで使用されるオフセットのベクトルを生成するために前述のベクトルインクリメント及びラップ又はベクトルデクリメント及びラップ命令を使用する時であり、なぜならアドレスはラップポイントに達する所以外は連続的となるからである。
【０１０１】
しかしながら、ベクトル処理システムにおいては、メモリへのアクセスパスはしばしばクリティカルなタイミングパスであり、それに応じてベクトルメモリアクセス演算が処理される時にアドレスを分析するためにメモリアクセスパス内に回路を提供することは実際的でないことが典型的である。
【０１０２】
残りの図面を参照して説明するように、一定の実施例はこの問題を軽減するためのメカニズムを提供することができる。図１２は一定のアドレスのシーケンスがいつ隣接するかを特定すること、ひいてはそのような状況で必要とされるアクセスの数を減らすことにおいてロード／ストアユニットを支援することを目的としたコンポーネントを組み込む実例の実施例を概略的に図示している。図１２を図１と比較することから分かるように、図１２は本質的には図１の装置２であるが、いくつかさらなるコンポーネントを備える装置２’を図示している。特に、処理回路４’は図１の処理回路４内に提供されるコンポーネントのすべてを含むが、加えてベクトルレジスタ１２のうち１つについて記憶するために生成されたベクトルが指定された隣接性の判断基準を満たす複数の要素を含むとの判断に対してフラグ情報を設定するように構成され得るフラグ設定回路５００を有する。フラグ設定回路によって生成されたフラグ情報は様々な位置に記憶することができる。例えば、フラグ情報記憶装置５０５はフラグ情報を記憶するためのフラグ設定回路に関連して設けることができる。代替的に、フラグ情報記憶装置５１０は、必要なフラグ情報をキャプチャするために各ベクトルレジスタに関連していくつかのさらなるビットを与えることによって、ベクトルレジスタファイル１２内に効率的に組み込まれる。
【０１０３】
特定のベクトルレジスタについて、フラグ設定回路５００がフラグ情報を設定して少なくともそのベクトルレジスタの部分が、値が指定された隣接性の判断基準を満たす要素を有していることを特定する場合、続いてロード／ストアユニットがそのレジスタを参照して指定されたオフセットのベクトルを使用してギャザー又はスキャッター演算を実施する際、フラグ情報を利用し、どのアドレス要素が隣接しているか、ひいてはギャザー又はスキャッター演算を実施するために必要とされるメモリシステム８へのアクセス回数を潜在的に減らすかを判断することができる。設定するべきフラグ情報が存在しない場合、ロード／ストアユニットは標準的なやり方でギャザー又はスキャッター演算を取り扱うことになる。これはロード／ストアユニット１８に各アドレス要素を隣接していないアドレスを特定することとして扱うよう要求すること、ひいては各アドレス要素について別個のアクセスを実施することを伴い得る。代替的に、少なくとも部分的にアクセスの最適化することを求めて、いくつかの他のコンポーネントがメモリアクセスパス内に設けられてもよい。そのようなさらなる回路が設けられる程度まで、本明細書で説明されるフラグ情報メカニズムに加えて使用することができる。
【０１０４】
フラグ設定回路５００が存在するか存在しないかを判断することを求める指定された隣接性の判断基準は、様々な形態を取ってよいが、一実施例においては、少なくともベクトル内の要素のサブセットが規則的に進行するシーケンスに従う値を有することを必要とする。次いで、処理回路がベクトル内のどの要素が規則的に進行するシーケンスに従う値を有するかどうか判断できるようにするためのフラグ情報が設定される。
【０１０５】
図１３Ａは一実施例によるフラグ情報記憶装置５０５内に与えられるエントリを図示している。この実例において、複数のエントリが与えられ、各エントリはエントリが関連するレジスタを特定するためのレジスタＩＤフィールド５１５、及び１つ又は複数の有効フラグを含む有効フラグフィールド５１７を有する。一実施例において、単一の有効フラグがベクトル全体に関連して使用されてもよく、ベクトル内の要素のすべてが規則的に進行するシーケンスに従う場合に設定されるだけである。代替的に、複数の有効フラグが有効フラグフィールド５１７内に与えられてもよく、各フラグはベクトルの異なる部分に関連付けられ、また関連付けられる部分が規則的に進行するシーケンスに従う要素を含むかどうかに依存して設定されている。所望であれば、規則的に進行するシーケンスが複数の部分同士に広がっているかどうかを特定するためにさらなる情報がまたキャプチャされ得る。したがって、実例としてベクトル内の４つの部分に関連する４つの有効フラグが存在し、有効フラグが部分２及び３の両方が規則的に進行するシーケンスに従う要素を含むことを示す場合、フラグ情報は、所望であれば、部分３の規則的に進行するシーケンスが、部分２の規則的に進行するシーケンスの中断されない継続であるかどうかをさらにキャプチャすることができる。
【０１０６】
探されている規則的に進行するシーケンスは様々な形態を取ることができるが、一実施例においては、隣接するメモリアドレスが規則的に進行するシーケンスに従う値から得られる（これらの値がメモリアクセス動作のためのアドレス要素として使用される場合）ようなものである。前述のように、単一のデータ値サイズだけがサポートされることもあってよく、したがって、規則的に進行するシーケンスはそのデータ値サイズを考慮する連続的なアドレスを特定する値に関連することになる。しかしながら、代替的な実施例において、複数の異なるデータ値サイズがサポートされてもよく、その場合、フラグ情報が関連するデータ値のサイズを特定するためにサイズフィールド５１９が各エントリ内に設けられ得る。特に、データ値が１つのサイズのものである時は、値のシーケンスが隣接するアドレスを表現するために使用することができるが、データ値が異なるサイズのものである時は、同一の値のシーケンスは必ずしも隣接するアドレスを表現しないことが諒解されよう。
【０１０７】
別の実例として、システムは複数のデータ値サイズをサポートすることもあるが、説明される実施例のフラグ設定メカニズムは特定のサイズのデータ値に関して実装されただけである。例えば、処理されることになるデータ値がバイトサイズのデータ値である時、フラグ設定技法を実装するが、データ値があらゆるより大きなサイズのものである時はフラグ設定技法を実装しない、と決定されることがあってもよい。そのような場合、サイズ情報フィールド５１９を必要としなくてもよい。
【０１０８】
同様に、フラグ設定技法の使用が１つ又は複数の特定のベクトルレジスタに限定され、フラグ情報記憶装置の各エントリが特定のレジスタに直接的に関連付けられていてもよい。この事象では、必ずしもレジスタ識別子フィールド５１５を用意しなくてもよい。
【０１０９】
さらに代替的な実施例において、特に最後に使用されたベクトルについてのフラグ情報を提供するために、フラグ情報は単一のレジスタのみについて保持されてもよい。そのような実施例においては、メモリアクセス命令にすぐ先行する命令が連続的なオフセットを表現できる要素のベクトルを生成するようなやり方でコードが構造化されている場合、実装形態は同一のベクトルがメモリアクセス命令のためのオフセットレジスタとして使用されることを確認し、それに応じてフラグ情報を読み取るだけである。やはり、これはフラグ情報内でレジスタ識別子をキャプチャさせるあらゆる特定の必要性を回避する。
【０１１０】
図１３Ｂはベクトルレジスタファイル１２のベクトルレジスタと組み合わせて設けられる代替的なフラグ情報記憶装置５１０の実例の構成を図示している。各ベクトルレジスタ５２０について、そのレジスタに関連付けられる１つ又は複数の有効フラグを記憶するための対応する有効フラグフィールド５２２が設けられてもよい。必要であればサイズ情報フィールド５２４もまた設けられてもよい。そのような手法によって、ベクトルレジスタファイル１２内のベクトルレジスタのそれぞれについて、有効フラグ情報は潜在的に同時に保持される。
【０１１１】
図１４は、ベクトルメモリアクセス演算を実行する時、フラグ情報がどのように使用されるかを図示する流れ図である。ステップ５５０において、ベクトルメモリアクセス演算が実施されるかどうかが判断される。特に、一実施例においては、この時点で、ロード／ストアユニット１８は実施するためのベクトルメモリギャザー又はスキャッター演算を有していると判断する。固有にメモリ内の隣接するアドレスを特定するベクトルロード又はストア命令の他の種類については、フラグ情報の必要性がなく、これらのアクセスは知られているアドレスの隣接する性質の有利性を取った標準的なやり方で取り扱うことができる。しかしながら、前述のように、スキャッター又はギャザータイプの演算については、これらは潜在的にメモリ内の任意のアドレスに対するものであり、しかしアドレスオフセット情報を提供するために使用されるベクトルレジスタに関連付けられるフラグ情報の存在は、ロード／ストアユニットにアドレス要素のうちいずれかが実際に隣接するアドレスに関連し、必要とされるアクセスの数を潜在的に減らすためにその情報を使用するかどうかを判断できるようにし得る。
【０１１２】
それに応じてステップ５５５において、フラグ情報がアドレスベクトルオペランドを提供するベクトルレジスタに関連付けられるかどうかが判断され、一実施例においては、これは次いでアクセスするアドレスを特定するために基底アドレスに結合されるアドレスオフセットのベクトルである。フラグ情報がそのベクトルレジスタに関連付けられている場合、ステップ５６０においてフラグ情報はデータ値にアクセスするために必要とされるメモリへのアクセスの数を決定する際ロード／ストアユニット１８によって使用される。しかしそうでなければ、処理はステップ５６５に進み、データ値にアクセスするために標準的なやり方でギャザー又はスキャッター演算が実施される。
【０１１３】
図１５Ａ〜図１５Ｃはベクトルギャザー演算を指定するベクトルロード命令への入力として提供されるオフセット値についての様々な実例を図示している。この実例において、ベクトルロード命令が４つの３２ビットデータ値を１２８ビット転送先レジスタＱｄにロードしており、オフセット情報が転送元ベクトルレジスタＱｍ内に与えられ、基底アドレスがスカラレジスタＲｎに指定されていると仮定する。図１５Ａの実例においては、オフセット５７０のベクトルは、４つの３２ビットのデータ値についての隣接するアドレスを生成するために使用され得る値の規則的に増加するシーケンスを与えると仮定する。この実例ではまた、フラグ情報５７２が、規則的に進行するシーケンスがベクトル幅全体に関連することを特定するように設定される単一の有効フラグを有していると仮定する。サイズ情報フィールドはまた仮定されたデータサイズが３２ビットであることを特定するために設定され、レジスタＩＤフィールドはフラグ情報がレジスタＱｍに関連することを特定するために設定される。ベクトルロード命令が３２ビットの量で動作しているため、フラグ情報が参照される際、サイズ情報が一致しているかどうか、及びレジスタＩＤが転送元レジスタＱｍに一致しているかどうかが判断される。有効フラグが設定されているため、したがってロード／ストアユニットは、アドレス要素のすべてが基底アドレスと結合するとメモリ内の隣接するアドレスが特定されるような規則的に進行するシーケンスに従うということを知る。
【０１１４】
ロード／ストアユニット１８がどのように情報を使用するかは、利用可能なメモリアクセス帯域幅を含むファクタの数に依存することになる。例えば、６４ビットメモリアクセス帯域幅がサポートされている場合、図１５Ａに示される情報に基づいてロード／ストアユニットは２つの６４ビットアクセスを実施することができ、それぞれ２つの隣接するアドレスに向けられており、したがって２つのデータ値がそれぞれのアクセスによって検索されることを可能にしている。代わりに１２８ビットメモリアクセス帯域幅がサポートされている場合、ロード／ストアユニット１８は、単一のアクセスを介して４つすべてのデータ値を検索するために、４つの隣接するアドレスに向けられる１つの１２８ビットのアクセスを実施することができる。
【０１１５】
図１５Ｂは第２の実例を図示しており、フラグ情報は有効フラグフィールド内に２つの有効フラグを有しており、それに応じてフラグ情報は特定の実例の要素のベクトル５７４について、５７６の形態を取る。したがってこの実例においては、少なくとも６４ビットのメモリアクセスがサポートされている場合、ロード／ストアユニットははじめの２つのデータ値を検索するために単一のアクセスを発行することができる。第３のデータ値及び第４のデータ値を取得するために、次いで別個のアクセスが典型的には必要とされることになる。
【０１１６】
両方の有効フラグが設定されている事象においては、転送元ベクトルレジスタＱｍの下半分及び上半分の両方が要求される進行するシーケンスに従う要素を含むため、２つの半分同士に連続性があるかどうかを特定するために任意選択でいくつかのさらなる情報がキャプチャされ得る。例えば、Ｑｍが要素２０、１６、４、０を保持する場合、両方の有効フラグが設定されることになるが、このさらなる情報は設定されないこともある一方で、Ｑｍが値１２、８、４、０を保持している場合、両方の有効フラグが設定されることになり、さらにこのさらなるフラグは２つの半分同士の連続性を特定するために設定されることがある。これは一定の状況において有用であり得る。例えば、メモリアクセスパスが１２８ビットの帯域幅を有している場合、このさらなる情報は２つの６４ビットの隣接するアクセスが発行される必要があるかどうかを判断するため、又は単一の１２８ビットの隣接するアクセスが発行され得るかどうか判断するために使用され得る。
【０１１７】
図１５Ｃはなおさらなる実例を図示しており、転送元のオフセットのベクトルは５８０の形態を取り、フラグ情報は５８２の形態を取る。この場合、フラグ情報フィールドは単に一連のフラグを含むのではなく、代わりに要素のうちどれが隣接するアドレスを表現するかを特定するために十分な情報を提供する。この実例において、ベクトル内のはじめの３つの要素は要求されるパターンを有しており、その情報がフラグフィールド内でキャプチャされ得る。これは様々なやり方でキャプチャされ得ることが諒解されよう。例えば、隣接性の開始要素及び終了要素が特定され得、又はその後隣接するいくつかの要素と共に隣接性シーケンスについての開始要素が特定され得る。
【０１１８】
一実施例においては、フラグ設定回路５００は、１つ又は複数の指定された事象の発生があるとフラグ情報を無効化するように構成され得る。特に、一実施例においては、図１６Ａに示すように、ステップ６００において例外が発生したと判断された場合、ステップ６０５においてフラグ情報が無効化される。したがって、例外はフラグ情報を無効化させる指定される事象のうちの１つを形成する。
【０１１９】
図１６Ｂは指定される事象の別の実例を図示しており、この場合、指定される事象は処理回路がそれに関連付けられるフラグ情報を有するベクトルレジスタに書き込む時である。書き込み動作が発生していたとすると、フラグ情報はもはや正確であるとは考えられず、それに応じて無効化される。ステップ６１０において、現在の命令がベクトルレジスタに書き込みをするかどうかが判断され、書き込みが行われる場合、ステップ６１５においてそのベクトルレジスタについて有効なフラグ情報を記憶するかどうかを判断する。記憶すると判断した場合、そのベクトルレジスタについてのフラグ情報はステップ６２０において無効化される。その後、ステップ６２５において命令が実行される。ステップ６１０又はステップ６１５のいずれかから「ＮＯ」経路を辿る場合、処理は直接ステップ６２５に進み、命令を実行し、あらゆるフラグ情報が保持される。
【０１２０】
そのような事象が発生するとフラグ情報が無効化されるように構成することで、これはフラグ情報がアーキテクチャ的に可視である必要がないこと、並びに例外の周りで保存及び復元される必要がないことを意味する。これはフラグ設定メカニズムの実装形態を簡略化する。
【０１２１】
フラグ設定回路５００をトリガして要素のベクトルについてのフラグ情報を生成するために使用され得るいくつかのメカニズムがある。図１７は１つの実例の構成を図示しており、フラグ設定回路は前述のＶＩＷＤＵＰ又はＶＤＷＤＵＰ命令のうち１つの実行が起こるとトリガされる。特に、ステップ６５０において、これらの命令のうち１つを実行するかどうかを判断し、ステップ６５５においてベクトル生成回路１６がその命令を実行する一方、生成されたベクトル内でラップが発生するかどうかを特定するためにフラグ設定回路５００に情報を与え、そうである場合、そのラップはそのベクトル内で発生した。
【０１２２】
ステップ６６０において、フラグ設定回路はその情報を分析し、それに応じて関連するレジスタについてフラグ情報を設定する。特に、ラップが発生しない場合、ベクトルが同一のデータ値サイズに関連する後続のギャザー又はスキャッター演算への入力として使用され、それに応じて有効フラグ又は複数の有効フラグが設定され得る場合、ＶＩＷＤＵＰ又はＶＤＷＤＵＰ命令について特定されたデータ値サイズについて、要素のベクトルは隣接するアドレスを表現することが知られる。同様に、ラップするポイントがある場合、ベクトル内のどの要素が隣接するアドレスを表現するかなお判断することができ、またそれに応じてフラグ情報が設定され得る。そのような場合、隣接するアドレスに関連する要素を含むベクトルの少なくとも部分を特定するためにいずれの有効フラグが設定され得るかに関して生み出されることになるフラグ情報の性質及び粒度に依存する。
【０１２３】
図１８はフラグ設定回路５００を呼び出すために使用され得る別のメカニズムを図示しており、図１７の手法の代わりか、又は図１７の手法の使用に加えるかのいずれかである。ステップ６６５において、復号する新しい命令が存在するかどうかを判断し、存在する場合、復号回路はステップ６７０においてその命令の実行が、要素が規則的に進行するシーケンスに従う値を有するベクトルを作成するかどうかを判断する。例えば、実行されると規則的に進行するシーケンスを作成することが知られている一定の命令があってもよく、それを使用して特定のデータ値サイズに関して隣接するアドレスについてのアドレスオフセットを表現することができる。ステップ６７０においてそのような判断がなされる場合、ステップ６７５において復号器回路は制御信号をフラグ設定回路に送信し、フラグ設定回路に関連するベクトルレジスタについてのフラグ情報を設定させ、その際処理回路４’内で命令が続けて実行される。加えて、ステップ６８０において制御信号が生成され、処理がステップ６６５に戻る前に命令に必要とされる演算を処理回路に実施させる。ステップ６７０において、命令の実行が、要素が規則的に進行するシーケンスに従う値を有するベクトルを作成することを保証されないと判断された場合、処理はステップ６７５を迂回して直接ステップ６８０に進む。
【０１２４】
図１９はフラグ設定回路を呼び出すために使用され得るなおさらなるメカニズムを図示しており、図１７及び図１８で議論したメカニズムの代わり、又はそれに加えてのいずれかである。この実例において、ステップ６８５において、ベクトルがメモリからロードされているかが判断される。ベクトルがメモリからベクトルレジスタのうち１つにロードされていると判断されると、ステップ６９０においてフラグ設定回路内の比較回路を呼び出すことができ、ベクトルの要素を分析して少なくとも要素のサブセットが規則的に進行するシーケンスに従う値を有するかどうかを特定する（これは様々な異なる可能性のあるデータ値サイズについて分析することができる）。次いで、それに応じてフラグ設定回路によって実施された分析の結果としてフラグ情報が設定され得る。図１９で特定される比較演算はメモリへのクリティカルアクセスパス上になく、システムの演算に便利なポイントにあり処理回路のパフォーマンスに影響しない回路によって実施され得ることが諒解されよう。フラグ情報が生成されていると、そのベクトルが続いてギャザー又はスキャッター演算のためのアドレスオフセットの入力ベクトルとして使用される場合、ギャザー又はスキャッター演算を処理するために必要とされる潜在的にメモリへのアクセス回数を減らすためにフラグ情報が参照され得る。
【０１２５】
以下のコードシーケンスはフラグ設定メカニズムがどのようにパフォーマンスを改善できるかの実例を図示している：
2020502669.tif 000007
【０１２６】
ＶＩＷＤＵＰ命令の実行は単調にインクリメントするベクトル値を作成し、これがラップするのは稀な場合だけである。一実例の実装形態において、フラグ設定回路は１ワード（すなわち、３２ビット）当たり１つのフラグを設定することができ、そのワード内すべての要素が単調にインクリメントしていることを表している。次いでベクトルロード命令が続いて実行される際、これらのフラグが読み取られ得、通常通りギャザーロードを処理する代わりに、これらのフラグが連続する要素を示すならどこでもというよりも隣接するロードが発行され得る。
【０１２７】
図２０は使用され得る仮想マシンの実装形態を図示している。前述の説明される実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本技法を実装している一方、ハードウェアデバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシンプログラム７３０をサポートするホストオペレーティングシステム７４０を実行させるホストプロセッサ７５０上で実行する。典型的には、適度な速度で実行する仮想マシンの実装形態を提供するためには大きくパワーのあるプロセッサが要求されるが、そのような手法は一定の状況で正当化されることがあり、例えば互換性又は再利用目的のために別のプロセッサにとってネイティブなコードを実行する願望がある場合などである。仮想マシンプログラム７３０は仮想のハードウェアインターフェースをゲストプログラム７２０に提供し、これは仮想マシンプログラム７３０によってモデル化されるデバイスである現実のハードウェアによって提供されるハードウェアインターフェースと同じである。したがって、上述のメモリアクセスを制御するために使用されるものを含むプログラム命令は、仮想マシンプログラム７３０を使用してゲストプログラム７２０内から実行され、その仮想マシンハードウェアとの対話をモデル化することができる。ゲストプログラム７２０はベアメタルなプログラムであってもよく、又は代替的にはＨｏｓｔＯＳ７４０がどのように仮想マシンアプリケーション７３０を実行するかと同様のやり方でアプリケーションを実行するゲストオペレーティングシステムであってもよい。異なる種類の仮想マシンが存在し、いくつかの種類においては、仮想マシンはホストＯＳ７４０の必要なしに直接ホストハードウェア７５０上で実行することもまた諒解されよう。
【０１２８】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる設定を有することを意味するために使用される。この文脈において、「設定」はハードウェア又はソフトウェアの構成又は内部接続のやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【０１２９】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの精密な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、従属請求項の特徴と独立請求項の特徴との様々な組み合わせが、本発明の範囲を逸脱することなくなされ得る。
【図１】
2020502669.tif 000008
【図２】
2020502669.tif 000009
【図３】
2020502669.tif 000010
【図４】
2020502669.tif 000011
【図５】
2020502669.tif 000012
【図６】
2020502669.tif 000013
【図７Ａ】
2020502669.tif 000014
【図７Ｂ】
2020502669.tif 000015
【図７Ｃ】
2020502669.tif 000016
【図８】
2020502669.tif 000017
【図９】
2020502669.tif 000018
【図１０】
2020502669.tif 000019
【図１１】
2020502669.tif 000020
【図１２】
2020502669.tif 000021
【図１３Ａ】
2020502669.tif 000022
【図１３Ｂ】
2020502669.tif 000023
【図１４】
2020502669.tif 000024
【図１５Ａ】
2020502669.tif 000025
【図１５Ｂ】
2020502669.tif 000026
【図１５Ｃ】
2020502669.tif 000027
【図１６Ａ】
2020502669.tif 000028
【図１６Ｂ】
2020502669.tif 000029
【図１７】
2020502669.tif 000030
【図１８】
2020502669.tif 000031
【図１９】
2020502669.tif 000032
【図２０】
2020502669.tif 000033
【国際調査報告】
2020502669.tif 000034
2020502669.tif 000035