(57)【要約】  装置２が、処理回路４と、いくつかのベクトル・レジスタ１４と、いくつかのスカラー・レジスタ１２とを備える。少なくとも１つのベクトル・レジスタ１４と少なくとも１つのスカラー・レジスタ１２とを指定するベクトル積和命令の復号をサポートする命令デコーダ６が与えられる。ベクトル積和命令に応答して、デコーダ６は、ベクトル積和命令を実施するように処理回路４を制御し、ベクトル積和命令において、処理の各レーンは、積値と加数値との差の和に対応するそれぞれの結果データ要素を生成し、積値は、第１のベクトル値のそれぞれのデータ要素と乗数値との積を含む。処理の各レーンにおいて、乗数値と加数値とのうちの少なくとも一方は、スカラー・レジスタ１２に記憶されたスカラー値の部分として指定される。
2019526866.tif 000002
【特許請求の範囲】
【請求項１】
データ処理を実施するための処理回路と、
複数のデータ要素を含むベクトル値を記憶するための複数のベクトル・レジスタと、
スカラー値を記憶するための複数のスカラー・レジスタと、
複数の結果データ要素を含む結果ベクトル値を生成するために、少なくとも１つのベクトル・レジスタと少なくとも１つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令によって指定された第１のベクトル・レジスタに記憶された第１のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように前記処理回路を制御するために、前記ベクトル積和命令を復号するための命令デコーダと
を備える装置であって、
処理の各レーンが、積値と加数値との和又は差に対応する前記結果ベクトル値のそれぞれの結果データ要素を生成することを含み、前記積値が、前記第１のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、前記乗数値と前記加数値とのうちの少なくとも一方が、前記ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、装置。
【請求項２】
処理の各レーンについて、前記乗数値と前記加数値とのうちの一方が前記スカラー値の前記少なくとも部分を含み、前記乗数値と前記加数値とのうちの他方が、前記ベクトル積和命令によって指定された第２のベクトル・レジスタに記憶された第２のベクトル値のそれぞれのデータ要素を含む、請求項１に記載の装置。
【請求項３】
前記ベクトル積和命令の第１の変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンについて、前記加数値が前記スカラー値の前記少なくとも部分を含み、前記乗数値が前記第２のベクトル値の前記それぞれのデータ要素を含む、請求項２に記載の装置。
【請求項４】
前記ベクトル積和命令の第２の変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンについて、前記乗数値が前記スカラー値の前記少なくとも部分を含み、前記加数値が前記第２のベクトル値の前記それぞれのデータ要素を含む、請求項２及び３のいずれか一項に記載の装置。
【請求項５】
前記処理回路は、前記結果ベクトル値の所与の部分がマスキングされるべき部分であることを識別するプレディケーション指示に応答して、前記所与の部分に関連する演算をマスキングするように構成された、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記結果データ要素の各部分についての前記プレディケーション指示が、前記ベクトル積和命令によって指定されたプレディケート・レジスタにおいて指定される、請求項５に記載の装置。
【請求項７】
前記結果データ要素の各部分についての前記プレディケーション指示が、前記ベクトル積和命令の符号化から独立して、プレディケーション回路によって与えられるか、又はプレディケート・レジスタにおいて指定される、請求項５に記載の装置。
【請求項８】
所与のベクトル命令に応答して、前記処理回路が、ベクトル値のセクションに各々対応する処理の複数のビートを実施するように構成され、
前記処理回路が、第１のベクトル命令と第２のベクトル命令との重複実行をサポートするように構成され、前記重複実行において、前記第２のベクトル命令のビートの第１のサブセットが、前記第１のベクトル命令のビートの第２のサブセットと並行して実施される、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
前記ベクトル積和命令の加算変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、処理の各レーンが、前記加数値と前記積値との前記和に対応する前記それぞれの結果データ要素を生成することを含む、請求項１から８までのいずれか一項に記載の装置。
【請求項１０】
前記ベクトル積和命令の減算変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、処理の各レーンが、前記加数値と前記積値との前記差に対応する前記それぞれの結果データ要素を生成することを含む、請求項１から９までのいずれか一項に記載の装置。
【請求項１１】
前記ベクトル積和命令の飽和変形態に応答して、前記命令デコーダは、処理の対応するレーンの結果が所定の範囲外にあるとき、前記結果ベクトル値の所与の結果データ要素を前記所定の範囲の最小値又は最大値にクランプするように前記処理回路を制御するように構成された、請求項１から１０までのいずれか一項に記載の装置。
【請求項１２】
前記第１のベクトル値が、前記処理回路によってサポートされる複数のデータ要素サイズのうちの１つを有するデータ要素を含む、請求項１から１１までのいずれか一項に記載の装置。
【請求項１３】
前記第１のベクトル値の前記データ要素のデータ要素サイズが前記スカラー・レジスタの幅よりも小さいとき、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記乗数値と前記加数値とのうちの前記少なくとも一方が、前記データ要素サイズに対応する幅を有する前記スカラー値の部分に対応する、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
前記ベクトル積和命令の整数又は固定小数点変形態に応答して、前記命令デコーダが、整数又は固定小数点算術を使用して前記結果ベクトル値の前記それぞれの結果データ要素を生成するように前記処理回路を制御するように構成された、請求項１から１３までのいずれか一項に記載の装置。
【請求項１５】
前記ベクトル積和命令の要素拡大変形態に応答して、前記命令デコーダが、Ｋビット結果データ要素を含む前記結果ベクトル値を生成するために、Ｊビット・データ要素を含む前記第１のベクトル値に対して前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、Ｋ＞Ｊである、請求項１４に記載の装置。
【請求項１６】
前記ベクトル積和命令の要素サイズ保存変形態に応答して、前記命令デコーダが、Ｊビット結果データ要素を含む前記結果ベクトル値を生成するために、Ｊビット・データ要素を含む前記第１のベクトル値に対して前記ベクトル積和演算を実施するように前記処理回路を制御するように構成された、請求項１４及び１５のいずれか一項に記載の装置。
【請求項１７】
前記ベクトル積和命令の前記要素サイズ保存変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、ここで、処理の所与のレーンについて、前記それぞれの結果データ要素が、
前記積値と前記加数値との前記和又は前記差に対応する値の最下位Ｊビットと、
前記和又は前記差に対応する前記値の最上位Ｊビットと、
前記和又は前記差に対応する前記値の最上位Ｊビットであって、前記最上位Ｊビットよりも小さい、前記和又は前記差に対応する前記値の少なくとも１つの下位ビットに基づいて丸められた、最上位Ｊビットと、
前記積値と前記加数値との前記和又は前記差に対応する２Ｊ＋１ビット値のビット［２Ｊ−１：Ｊ］と、
前記２Ｊ＋１ビット値のビット［Ｊ−１：０］のうちの少なくとも１つに基づいて丸められた、前記２Ｊ＋１ビット値のビット［２Ｊ−１：Ｊ］と
のうちの１つに対応する、請求項１６に記載の装置。
【請求項１８】
前記ベクトル積和命令の浮動小数点変形態に応答して、前記命令デコーダが、浮動小数点算術を使用して前記結果ベクトル値の前記それぞれの結果データ要素を生成するために、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成された、請求項１から１３までのいずれか一項に記載の装置。
【請求項１９】
前記ベクトル積和命令の分割浮動小数点変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンが、前記第１のベクトル値の前記それぞれのデータ要素と前記乗数値との丸められた積を生成することと、前記丸められた積と前記加数値との和又は差に従って前記結果ベクトル値の前記それぞれの結果データ要素を生成することとを含む、請求項１８に記載の装置。
【請求項２０】
前記ベクトル積和命令の融合浮動小数点変形態に応答して、前記命令デコーダが、前記ベクトル積和演算を実施するように前記処理回路を制御するように構成され、前記ベクトル積和演算において、処理の各レーンが、前記第１のベクトル値の前記それぞれのデータ要素と前記乗数値との丸められていない積を生成することと、前記丸められていない積と前記加数値との和又は差に従って前記結果ベクトル値の前記それぞれの結果データ要素を生成することとを含む、請求項１８及び１９のいずれか一項に記載の装置。
【請求項２１】
データ処理を実施するための手段と、
複数のデータ要素を含むベクトル値を記憶するための複数の手段と、
スカラー値を記憶するための複数の手段と、
複数の結果データ要素を含む結果ベクトル値を生成するために、ベクトル値を記憶するための少なくとも１つの手段とスカラー値を記憶するための少なくとも１つの手段とを指定するベクトル積和命令によって指定された、ベクトル値を記憶するための第１の手段に記憶された第１のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように、データ処理を実施するための前記手段を制御するために、前記ベクトル積和命令を復号するための手段と
を備える装置であって、
処理の各レーンが、積値と加数値との和又は差に対応する前記結果ベクトル値のそれぞれの結果データ要素を生成することを含み、前記積値が、前記第１のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、前記乗数値と前記加数値とのうちの少なくとも一方が、前記ベクトル積和命令によって指定された、スカラー値を記憶するための手段に記憶されたスカラー値の少なくとも部分を含む、装置。
【請求項２２】
少なくとも１つのベクトル・レジスタと少なくとも１つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令を復号するステップと、
前記ベクトル積和命令に応答して、複数の結果データ要素を含む結果ベクトル値を生成するために、前記ベクトル積和命令によって指定された第１のベクトル・レジスタに記憶された第１のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように処理回路を制御するステップと
を含むデータ処理方法であって、
処理の各レーンが、積値と加数値との和又は差に対応する前記結果ベクトル値のそれぞれの結果データ要素を生成することを含み、前記積値が、前記第１のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、前記乗数値と前記加数値とのうちの少なくとも一方が、前記ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、データ処理方法。
【請求項２３】
請求項１から２０までのいずれか一項に記載の装置に対応する、命令実行環境を与えるようにホスト・データ処理装置を制御するためのプログラム命令を含む、仮想マシン・コンピュータ・プログラム。
【請求項２４】
請求項２３に記載の仮想マシン・コンピュータ・プログラムを記憶するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。
【背景技術】
【０００２】
いくつかのデータ処理システムは、ベクトル命令のソース・オペランド又は結果値が、多数のデータ要素を含むベクトルである、ベクトル命令の処理をサポートする。単一の命令に応答していくつかの別個のデータ要素の処理をサポートすることによって、コード密度が改善され、命令のフェッチング及び復号のオーバーヘッドが低減され得る。処理されるべきデータ値のアレイが、データ値をベクトル・オペランドのそれぞれの要素にロードすることと、単一のベクトル命令を使用してデータ値、いくつかの要素を一度に処理することとによって、より効率的に処理され得る。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例は、
データ処理を実施するための処理回路と、
複数のデータ要素を含むベクトル値を記憶するための複数のベクトル・レジスタと、
スカラー値を記憶するための複数のスカラー・レジスタと、
複数の結果データ要素を含む結果ベクトル値を生成するために、少なくとも１つのベクトル・レジスタと少なくとも１つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令（ｖｅｃｔｏｒ  ｍｕｌｔｉｐｌｙ−ａｄｄ  ｉｎｓｔｒｕｃｔｉｏｎ）によって指定された第１のベクトル・レジスタに記憶された第１のベクトル値に対する処理の複数のレーンを含むベクトル積和演算（ｖｅｃｔｏｒ  ｍｕｌｔｉｐｌｙ−ａｄｄ  ｏｐｅｒａｔｉｏｎ）を実施するように処理回路を制御するために、ベクトル積和命令を復号するための命令デコーダと
を備える装置であって、
処理の各レーンが、積値（ｐｒｏｄｕｃｔ  ｖａｌｕｅ）と加数値（ａｄｄｅｎｄ  ｖａｌｕｅ）との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値が、第１のベクトル値のそれぞれのデータ要素と乗数値（ｍｕｌｔｉｐｌｉｅｒ  ｖａｌｕｅ）との積に対応し、
処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方が、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、
装置を提供する。
【０００４】
少なくともいくつかの実例は、
データ処理を実施するための手段と、
複数のデータ要素を含むベクトル値を記憶するための複数の手段と、
スカラー値を記憶するための複数の手段と、
複数の結果データ要素を含む結果ベクトル値を生成するために、ベクトル値を記憶するための少なくとも１つの手段とスカラー値を記憶するための少なくとも１つの手段とを指定するベクトル積和命令によって指定された、ベクトル値を記憶するための第１の手段に記憶された第１のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように、データ処理を実施するための手段を制御するために、ベクトル積和命令を復号するための手段と
を備える装置であって、
処理の各レーンが、積値と加数値との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値が、第１のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方が、ベクトル積和命令によって指定された、スカラー値を記憶するための手段に記憶されたスカラー値の少なくとも部分を含む、
装置を提供する。
【０００５】
少なくともいくつかの実例は、
少なくとも１つのベクトル・レジスタと少なくとも１つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令を復号するステップと、
ベクトル積和命令に応答して、複数の結果データ要素を含む結果ベクトル値を生成するために、ベクトル積和命令によって指定された第１のベクトル・レジスタに記憶された第１のベクトル値に対する処理の複数のレーンを含むベクトル積和演算を実施するように処理回路を制御するステップと
を含むデータ処理方法であって、
処理の各レーンが、積値と加数値との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値が、第１のベクトル値のそれぞれのデータ要素と乗数値との積に対応し、
処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方が、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む、
データ処理方法を提供する。
【０００６】
少なくともいくつかの実例は、上記で説明された装置に対応する、命令実行環境を与えるようにホスト・データ処理装置を制御するためのプログラム命令を含む、仮想マシン・コンピュータ・プログラムを提供する。
【０００７】
仮想マシン・コンピュータ・プログラムを記憶するコンピュータ可読記憶媒体も、提供され得る。本記憶媒体は、非一時的記憶媒体であり得る。
【０００８】
本技法のさらなる態様、特徴及び利点は、添付の図面とともに読まれるべきである、実例の以下の説明から明らかであろう。
【図面の簡単な説明】
【０００９】
【図１】２つ又はそれ以上のデータ要素を含むベクトル値の処理をサポートする処理回路を有する装置の実例を概略的に示す図である。
【図２】積和演算についての加数値がスカラー・レジスタによって指定される、ベクトル積和命令の第１の変形態の実例を示す図である。
【図３】積和演算についての乗数値がスカラー・レジスタによって指定される、ベクトル積和命令の第２の変形態の実例を示す図である。
【図４】第２の変形態の別の実例を示す図である。
【図５】ベクトル積和命令の非破壊的変形態（ｎｏｎ−ｄｅｓｔｒｕｃｔｉｖｅ  ｖａｒｉａｎｔ）を示す図である。
【図６】プレディケーション指示（ｐｒｅｄｉｃａｔｉｏｎ  ｉｎｄｉｃａｔｉｏｎ）に基づいて結果ベクトルのいくつかの部分に関連する演算をマスキングする実例を示す図である。
【図７】ベクトル化されたループの終了に達したとき、ベクトル処理のレーンをマスキングするためのループ・ベース・プレディケーション（ｌｏｏｐ−ｂａｓｅｄ  ｐｒｅｄｉｃａｔｉｏｎ）の実例を示す図である。
【図８】ベクトル命令の実行の重複するそれぞれのビートの実例を示す図である。
【図９】ベクトル命令の実行の重複するそれぞれのビートの実例を示す図である。
【図１０】ベクトル命令の実行の重複するそれぞれのビートの実例を示す図である。
【図１１】ベクトル積和命令の減算変形態（ｓｕｂｔｒａｃｔ  ｖａｒｉａｎｔ）を示す図である。
【図１２】ベクトル積和命令の飽和変形態（ｓａｔｕｒａｔｉｎｇ  ｖａｒｉａｎｔ）を示す図である。
【図１３】スカラー・レジスタがベクトル・オペランドのデータ要素サイズよりも広いとき、スカラー・レジスタに記憶されたスカラー値のより小さい部分がどのようにベクトル積和演算のために使用され得るかを示す図である。
【図１４】ベクトル積和命令の要素拡大変形態（ｅｌｅｍｅｎｔ−ｗｉｄｅｎｉｎｇ  ｖａｒｉａｎｔ）の実例を示す図である。
【図１５】ベクトル積和命令の要素サイズ保存変形態（ｅｌｅｍｅｎｔ−ｓｉｚｅ−ｐｒｅｓｅｒｖｉｎｇ  ｖａｒｉａｎｔ）の場合、対応する結果データ要素を生成するためにレーン結果をトランケートする５つの異なる実例を示す図である。
【図１６】浮動小数点ベクトル積和演算の融合変形態（ｆｕｓｅｄ  ｖａｒｉａｎｔ）を示す図である。
【図１７】浮動小数点ベクトル積和演算の分割変形態（ｓｐｌｉｔ  ｖａｒｉａｎｔ）を示す図である。
【図１８】ベクトル積和命令を処理する方法を示す流れ図である。
【図１９】使用され得る仮想マシン実装形態を示す図である。
【発明を実施するための形態】
【００１０】
データ処理装置は、データ処理を実施するための処理回路と、多数のデータ要素を含むベクトル値を記憶するためのいくつかのベクトル・レジスタと、単一のデータ要素を含むスカラー値を記憶するためのいくつかのスカラー・レジスタとを有し得る。命令デコーダが、実行されるべきプログラム命令を復号し、これらの命令によって表されるデータ処理演算を実施するように処理回路を制御するために与えられ得る。命令デコーダは、少なくとも１つのベクトル・レジスタと少なくとも１つのスカラー・レジスタとを含む複数のレジスタを指定するベクトル積和命令をサポートする。積和命令に応答して、命令デコーダは、ベクトル積和命令によって指定された第１のベクトル・レジスタに記憶された第１のベクトル値に対して実施される処理の多数のレーンを含むベクトル積和演算を実施するように処理回路を制御する。処理回路は、ベクトル積和演算の成果に基づいて、いくつかの結果データ要素を含む結果ベクトル値を生成する。処理の各レーンは、積値と加数値との和又は差に対応する結果ベクトル値のそれぞれの結果データ要素を生成することを含み、積値は、第１のベクトル値のそれぞれのデータ要素と乗数値との積に対応する。処理の各レーンについて、乗数値と加数値とのうちの少なくとも一方は、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の少なくとも部分を含む。
【００１１】
単一のベクトル・レジスタ内に表される独立したデータ要素の処理の多数のレーンが単一の命令に応答して実施されるベクトル処理は、一般に、低電力又は回路面積ではなく性能のために設計された比較的大きいプロセッサ中で使用されている。そのような高性能なプロセッサでは、ベクトル・レジスタ・ファイル及びベクトル・データ経路は、一般に、回路面積が比較的大きく、スカラー処理のために使用されるスカラー・レジスタ・ファイル及びスカラー・データ経路も、回路面積が比較的大きい。したがって、これらのブロックの大きい回路面積は、スカラー・レジスタ・ファイルからベクトル処理回路にデータ値を送信するために比較的長い配線が必要となり、したがって、そのようなワイヤに沿った信号伝搬遅延があまりに長くなり、そのようなプロセッサのタイミング要件及び性能要求を満足することが困難になることを意味するので、ベクトル算術命令（ｖｅｃｔｏｒ  ａｒｉｔｈｍｅｔｉｃ  ｉｎｓｔｒｕｃｔｉｏｎ）がスカラー・レジスタ・ファイルとベクトル・レジスタ・ファイルの両方に直接アクセスすることは、概して実際的ではなかった。したがって、スカラー・レジスタ・ファイルとベクトル・レジスタ・ファイルとの間でデータを転送するための数個の専用命令の他に、ベクトル算術命令は、一般に、入力オペランドのすべてを、ベクトル・レジスタに記憶されたベクトル・オペランドとして指定することになる。
【００１２】
しかしながら、最近、スカラー・レジスタ・ファイルとベクトル算術データ経路とがチップ上で互いにより近くなるように、ベクトル処理技法が、より低い電力消費とより小さい回路面積とをもつより小さいプロセッサ実装形態において使用され始めている。発明者は、このことが、処理回路がベクトル算術命令を処理するときにスカラー・レジスタにアクセスすることをより実際的にすると認識していた。とはいえ、異なる処理演算をサポートする際の最も大きいフレキシビリティのために、ベクトル処理のレーンの各々においてオペランドの各々について異なる数値が使用されることを可能にするために、ベクトル演算への入力の各々がベクトルとして指定されるべきであることが、通常予想されよう。多くのデータ処理アルゴリズムにおいて比較的共通である１つの算術演算は、積和演算であり、ここで、２つのオペランドが互いに乗算され、積及び第３のオペランドが、加算又は減算されて、結果が生成される。積和演算が３入力演算であるので、ベクトル積和命令が、３つの入力ベクトルを定義するために３つのベクトル・レジスタを指定することが予想されよう。
【００１３】
しかしながら、一般に、３つの入力オペランドを必要とする演算はほとんどなく、したがって、積和命令がそれの入力のすべてをベクトルとして指定する場合、これにより、他の演算のために使用される可能性が低い第３のベクトル・レジスタ読出しポートが、ベクトル・レジスタ・ファイルにおいて実装されることが必要となる。また、特定の処理装置が３つ以上のベクトル・レジスタ読出しポートを有する場合でも、読出しポートのすべてが所与の命令によって使用されるとは限らない場合、これにより、予備レジスタ読出しポートを使用して別の命令が並行して実行されることが可能になり得る。したがって、ベクトル積和演算の乗数値と加数値とのうちの少なくとも一方をスカラー値として指定することによって、これにより、第３のベクトル・レジスタ読出しポートがベクトル積和命令のために使用される必要が回避され、それにより、第３のレジスタ読取りポートをまったく実装しないことによって回路面積及び電力消費を節約すること、又は予備読取りポートを使用して別の命令が並行して実行することを可能にすることによって改善された性能を可能にすることのいずれかを行うことができる。
【００１４】
乗算値と加数値の一方又は両方を指定するためにスカラー・レジスタを使用することは、（レーンの各々が乗数及び／又は加数について同じ値を使用することに制限されることになるので）ベクトル積和命令の有用性を限定することになると予想され得るが、実際には、乗数と加数とのうちの少なくとも一方が、いずれにせよレーンの各々にわたって同じ値になる、いくつかの比較的共通の使用事例がある。たとえば、いくつかのデータ処理アルゴリズムにおける共通演算は、ｘの多数の値についての形式ａｘ３＋ｂｘ２＋ｃｘ＋ｄの多項式の評価であり得、それは、ベクトル積和命令を使用して行われ得、ここで、ｘについての異なる値が、入力ベクトルの異なる要素に割り振られ、係数ａ、ｂ、ｃ、ｄは各レーンについて同じである。したがって、少なくとも１つのスカラー入力をベクトル積和命令に与えることの別の利益は、これにより、ベクトル積和命令がそのオペランドの各々をベクトルとして指定した場合に必要とされるであろう、入力ベクトルの要素の各々にわたって同じスカラー値を複製するための追加の命令の必要がなくなることである。したがって、コード・サイズが減少されるか、又はコード密度が増加され得る。
【００１５】
図１は、ベクトル命令の処理をサポートするデータ処理装置２の実例を概略的に示す。これが、説明を簡単にするための簡略図であり、実際には、装置が、簡潔のために図１に示されていない多くの要素を有し得ることが諒解されよう。装置２は、命令デコーダ６によって復号された命令に応答して、データ処理を行うための処理回路４を備える。プログラム命令が、命令セット・アーキテクチャによって定義されたやり方で命令を処理するように処理回路４を制御する制御信号を生成するために、メモリ・システム８からフェッチされ、命令デコーダによって復号される。たとえば、デコーダ６は、算術演算、ロード／記憶演算、又は論理演算などの演算を実施するために適切なハードウェア・ユニットを処理回路４にアクティブ化させる、制御信号を生成するために、復号された命令のオペコードと、命令の任意の追加の制御フィールドとを解釈し得る。装置は、処理回路４によって処理されるべきデータ値と、処理回路の動作を構成するための制御情報とを記憶するためのレジスタ１０のセットを有する。算術又は論理命令に応答して、処理回路４は、レジスタ１０からオペランドを読み取り、命令の結果をレジスタ１０に書き戻す。ロード／記憶命令に応答して、データ値は、処理論理を介してレジスタ１０とメモリ・システム８との間で転送される。メモリ・システム８は、１つ又は複数のレベルのキャッシュ並びにメイン・メモリを含み得る。
【００１６】
レジスタ１０は、単一のデータ要素を含むスカラー値を記憶するためのいくつかのスカラー・レジスタを備える、スカラー・レジスタ・ファイル１２を含む。命令デコーダ６及び処理回路４によってサポートされるいくつかの命令は、スカラー・レジスタに書き戻されるスカラー結果を生成するためにスカラー・レジスタ１２から読み取られたスカラー・オペランドを処理する、スカラー命令である。
【００１７】
レジスタ１０は、それぞれ、多数のデータ要素を含むベクトル値を記憶するための、いくつかのベクトル・レジスタを含む、ベクトル・レジスタ・ファイル１４をも含む。ベクトル命令に応答して、命令デコーダ６は、スカラー・レジスタ１２に書き込まれるべきスカラー結果、又はベクトル・レジスタ１４に書き込まれるべきさらなるベクトル結果のいずれかを生成するために、ベクトル・レジスタ１４のうちの１つから読み取られたベクトル・オペランドのそれぞれの要素に対してベクトル処理のいくつかのレーンを実施するように、処理回路４を制御する。いくつかのベクトル命令は、１つ又は複数のスカラー・オペランドからベクトル結果を生成し得るか、又は、スカラー・レジスタ・ファイル中のスカラー・オペランドに対する追加のスカラー演算、並びにベクトル・レジスタ・ファイル１４から読み取られたベクトル・オペランドに対するベクトル処理のレーンを実施し得る。したがって、いくつかの命令は、命令の１つ又は複数のソース・レジスタ及び宛先レジスタのうちの少なくとも１つがベクトル・レジスタ１４であり、１つ又は複数のソース・レジスタ及び宛先レジスタのうちの別のものがスカラー・レジスタ１２である、混合スカラー・ベクトル命令であり得る。ベクトル命令は、データ値がベクトル・レジスタ１４とメモリ・システム８中のロケーションとの間で転送されることを引き起こすベクトル・ロード／記憶命令をも含み得る。ロード／記憶命令は、メモリ中のロケーションがアドレスの連続範囲に対応する、連続ベクトル・ロード／記憶命令、又は、いくつかの個別のアドレスを指定し、それらのアドレスの各々からのデータをベクトル・レジスタのそれぞれの要素にロードするか、若しくはベクトル・レジスタのそれぞれの要素からのデータを個別のアドレスに記憶するように、処理回路４を制御する、分散／集約（ｓｃａｔｔｅｒ／ｇａｔｈｅｒ）タイプ・ベクトル・ロード／記憶命令を含み得る。
【００１８】
処理回路４は、様々な異なるデータ要素サイズをもつベクトルの処理をサポートし得る。たとえば、１２８ビット・ベクトル・レジスタ１４は、たとえば、１６個の８ビット・データ要素、８つの１６ビット・データ要素、４つの３２ビット・データ要素、又は２つの６４ビット・データ要素に区分され得る。レジスタ・バンク１０内の制御レジスタが、使用されている現在のデータ要素サイズを指定し得るか、又は代替的に、これは、実行されるべき所与のベクトル命令のパラメータであり得る。
【００１９】
レジスタ・バンク１０は、処理回路４の演算を制御するための制御情報を記憶するためのレジスタをも含む。制御レジスタは、現在の実行ポイントに対応する命令のアドレスを示すためのプログラム・カウンタ・レジスタ、例外を扱うときにレジスタ状態をセーブ／復元するためのスタック・データ構造のメモリ・システム８中のロケーションのアドレスを示すスタック・ポインタ・レジスタ、及びそれに対する処理が関数の実行に続いて分岐することである関数復帰アドレスを記憶するためのリンク・レジスタなどのレジスタを含み得る。これらは、簡潔のために図１に示されていない。
【００２０】
図１に示されているように、レジスタは、ベクトル化されたループの進行を追跡するためのループ・カウンタ１６と、ループ内で処理されているベクトルのデータ要素中のビット数を示すパラメータを記憶するための要素サイズ・レジスタ１８と、１つのベクトル・レジスタ中の総ビット数を示すパラメータを記憶するためのベクトル幅レジスタ２０と、ベクトル演算のプレディケーションを制御するためのベクトル・プレディケート・レジスタ２２とをも含む。いくつかの例では、ベクトル幅レジスタ２０は、所与のデバイスのためのベクトル・レジスタ１４において実装される特定のベクトル幅に応じて装置の製造中に配線接続され得る。代替的に、ベクトル・レジスタ・ファイル１４が、異なるベクトル幅をもつ異なる構成をサポートする場合、ベクトル幅レジスタ２０は、使用されている現在の幅を示すためにプログラム可能であり得る。同様に、要素サイズ・レジスタ１８は、所与の装置のために特定の要素サイズが常に使用される場合に配線接続されるか、又は装置が異なるデータ要素サイズのベクトルを用いる処理をサポートする場合に可変であるかのいずれかであり得る。ループ・カウンタ１６が専用制御レジスタとして示されているが、他の実例は、ベクトル化されたループの進行を追跡するために汎用スカラー・レジスタ１２のうちの１つを使用し得る。
【００２１】
図２は、ベクトル積和命令を処理する実例を概略的に示す。命令は、第１のベクトル・レジスタＱ０と、第２のベクトル・レジスタＱ１と、スカラー・レジスタＲ０とを指定する。この実例は、命令の破壊的変形態（ｄｅｓｔｒｕｃｔｉｖｅ  ｖａｒｉａｎｔ）を示しており、ここで、第１のベクトル・レジスタＱ０は、積和演算において生成された結果データ要素がレジスタＱ０に書き込まれて、レジスタＱ０の対応する部分に前に記憶された値を上書きするように、命令のための結果レジスタとしても働く。これは、命令符号化における別個の宛先レジスタ指定子のための符号化空間の必要を回避し、これは、命令符号化空間がしばしば貴重であるので、有用であり得る。
【００２２】
図２は、スカラー・レジスタＲ０が、処理の各レーンにおける積和演算において使用されるべき加数値を指定し、ベクトル・レジスタＱ０、Ｑ１が、各レーンにおいて互いに乗算されるべき値を指定する、ベクトル積和命令の第１の変形態を示す。したがって、処理の各レーンは、Ｑ０［ｉ］＊Ｑ１［ｉ］＋Ｒ０に従って、それぞれの結果データ要素Ｑ０’［ｉ］を生成し、ここで、この実例では、ベクトルごとに４つのデータ要素があるので、０≦ｉ≦３である。すなわち、処理の各レーンは、加数値Ｒ０と、第１のベクトルＱ０及び第２のベクトルＱ１のそれぞれのデータ要素の積との和に対応するそれぞれの結果データ要素を生成する。加数値Ｒ０は、レーンの各々について同じである。
【００２３】
このタイプの命令が有用であり得る計算の実例が、以下で示されている。ある適用例では、以下の多項式を評価することが望まれると考える。
ａｘ３＋ｂｘ２＋ｃｘ＋ｄ（命令が有用である多くの他の事例がある）が、これは、良好な実例として働くことになる）。ホーナー法（Ｈｏｒｎｅｒ’ｓ  ｍｅｔｈｏｄ）を使用して、これは、より計算効率の良い形式ｘ（ｘ（ａｘ＋ｂ）＋ｃ）＋ｄで表され得る。これは、通常、３つの乗算累算（ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）演算に等しい。
【００２４】
ある適用例では、処理時間を最小限に抑えるためにベクトル実装形態を使用してこの多項式を効率的に評価することが望まれる。旧来のベクトル実装形態では、そのようなベクトル実装形態は、（ベクトルごとに４つの要素を仮定すると）以下のようになるであろう。
【００２５】
【表１】
2019526866.tif 000003
【００２６】
（１）と（２）とを組み合わせて、単一のベクトル積和命令にすること、ＶＭＵＬＡＤＤ  Ｑｄ、Ｑ１、Ｑ２、Ｑ３によって、これは、性能を著しく増加させることができる。しかしながら、得られた命令は、その場合（Ｑ１、Ｑ２、及びＱ３のための）３つのベクトル読出しポート、並びにＱｄのための書込みベクトル・ポートを必要とする。これは、利用可能な十分な読出しポートがない（面積及び／又は電力制約のために限られる）か、又はそれらが、本来なら並行して実行することが可能であったであろう他の命令からリソースを盗むかのいずれかであるので、小さいコアに関する問題である。
【００２７】
形式（Ｉ１）ベクトル＝ベクトル＊ベクトル＋スカラー、又は（Ｉ２）ベクトル＝ベクトル＊スカラー＋ベクトルの積和命令を使用することによって、これらの命令は、代わりにスカラー・レジスタ・ファイルから読み出すことによって、ベクトル・レジスタ・ファイル読出しポート制約を回避する。これらの新しい命令の助けをかりて、上記の例示的なアルゴリズムは、以下に簡略化され得る。
【００２８】
【表２】
2019526866.tif 000004
【００２９】
必要なレジスタが利用可能であると仮定すると、ループ外で係数ロード及び初期複製を行うことなど、さらなる最適化が可能である。以下の図８〜図１０で説明されるように、高効率な実装形態に寄与する、いくつかのデータ・ベクトルの処理をパイプライン化することも可能である。上記の実例は、命令のための１つの使用事例を示しているが、提案される命令は、当然多くの他の使用事例に好適である。
【００３０】
図３は、ベクトル積和命令の第２の変形態を示す。この場合も、命令は２つのベクトル・レジスタＱ０、Ｑ１とスカラー・レジスタＲ０とを指定し、第１のベクトル・レジスタＱ０は命令のための宛先レジスタとして働く。この場合も、処理の各レーンは積和演算に対応し、ここで、２つの値が乗算されて、積を形成し、積は、次いで加数値に加算される。しかしながら、この変形態では、スカラー・レジスタは、各レーンにおいて第１の入力ベクトルＱ０のそれぞれの要素と乗算されるべき乗数値Ｒ０を指定するが、加数は、第２の入力ベクトルＱ１の対応するデータ要素である。したがって、第２の変形態の場合、所与の結果データ要素Ｑ０’［ｉ］は、Ｑ０［ｉ］＊Ｒ０＋Ｑ１［ｉ］に従って生成される。この場合も、この場合も、この実例では、０≦ｉ≦３である。
【００３１】
図４は、図３に示されている第２の変形態の代替バージョンを示し、ここで、第２のベクトル・レジスタＱ１は、Ｑ０の代わりに宛先レジスタとして働く。したがって、図３では、乗算されているベクトル・オペランドが、結果を上書きされるが、図４では、加数として働くベクトル・オペランドが、結果を上書きされる。いくつかのシステムは、図３及び図４に示されているバージョンのうちの１つのみをサポートし得るが、他のシステムは両方のタイプをサポートし得る。
【００３２】
また、図５は、入力オペランドを定義する２つのベクトル・レジスタＱ０、Ｑ１とは別個の、命令のための宛先レジスタとして働く追加のベクトル・レジスタＱ２を指定するベクトル積和命令の非破壊的変形態の実例を示す。この変形態を用いると、入力オペランドは、積和演算の結果として上書きされず、したがって、後続の命令による処理のために依然として利用可能である。いくつかのシステムは、図２〜図４に示されている破壊的変形態に加えて、図５に示されている非破壊的変形態をサポートし得るが、他の実装形態は、破壊的変形態と非破壊的変形態とのうちの一方のみを選定し得る。図５は、（スカラー・レジスタが加数を指定する）非破壊的命令として実装される命令の第２の変形態の実例を示しているが、他の実例は、（スカラー・レジスタが乗数を指定する）第１の変形態の非破壊的バージョンを同様に実装し得る。
【００３３】
同様に、以下で説明される実例は、簡潔のために、スカラー値が各レーンについての加数を指定する、図２に示されているベクトル積和命令の第１の変形態に対応する実例を使用して説明されるが、これらの実例の各々が、スカラーが乗数値を指定する、図３又は図４に示されている第２の変形態にも適用され得ることが諒解されよう。
【００３４】
また、ベクトル積和命令の別の変形態は、それぞれのスカラー値を使用して乗算値と加数値の両方を指定し得る。そのような変形態の場合、命令は、対応するベクトル・レジスタとスカラー・レジスタとを使用して１つのベクトル・オペランドと２つのスカラー・オペランドとを指定することになる。たとえば、命令は、ベクトル・レジスタＱ０と、２つのスカラー・レジスタＲ０、Ｒ１とを指定し得、Ｑ０’［ｉ］＝Ｑ０［ｉ］×Ｒ０＋Ｒ１に従って各結果データ要素を生成し得る。この場合も、２つのベクトル・レジスタＱ０、Ｑ１と２つのスカラー・レジスタＲ０、Ｒ１とを指定する非破壊的バージョンも与えられ得、ここで、Ｑ１［ｉ］＝Ｑ０［ｉ］×Ｒ０＋Ｒ１である。
【００３５】
したがって、上記で説明された異なる変形態が与えられれば、概して、ベクトル積和命令は、少なくとも１つのベクトル・レジスタと少なくとも１つのスカラー・レジスタとを指定し得、第３のオペランドは、変形態に応じて、ベクトル又はスカラーのいずれかであり得る。
【００３６】
処理回路４は、所与のベクトル命令についての処理のレーンを、並行して、連続的に実施するか、又は部分的に並行して、及び部分的に順々に実施し得る。たとえば、いくつかの実装形態は、同じサイクルにおいて結果データ要素のすべてを生成するために並行して処理のレーンのすべてを実施するのに十分な算術回路ユニットを有し得る。他の回路実装形態は、一度に単一のレーンを処理する算術ユニットの単一のセットを与え得、この場合、各レーンは、別個のサイクルにおいて連続的に処理され得る。この場合の性能は、より遅くなり得るが、ベクトル・レーンを連続的に処理することは、それが、所与のアルゴリズムを処理するために必要とされる命令フェッチ及び命令復号演算の数を低減し、電力消費を低減するので、依然として、スカラー実装形態に勝る利点を与える。他の実装形態は、ベクトルの総幅よりも小さくなり得る一定のビット幅までを並行して処理することができる算術ユニットを有し得る。この場合、処理の２つ又はそれ以上のレーンのブロックが、並行して実施され得るが、ベクトル・サイズが、ハードウェアでサポートされるビット幅よりも大きい場合、ベクトル処理が部分的に並行して及び部分的に順々に行われるように、算術ユニットを通る多数のパスが、連続的に実施され得る。
【００３７】
上記の実例は、結果レジスタＱ０’が処理のレーンの各々中の結果データ要素を用いて更新される場合を示している。しかしながら、結果ベクトルの所与の部分に関連する演算は、所与の部分がマスキングされるべきであるかどうかを識別するプレディケーション指示に基づいてマスキングされ得る。そのようなプレディケーションを実装するいくつかのやり方があり、そのうちの２つが図６及び図７に示されている。
【００３８】
図６は、結果ベクトルの対応する部分が、それの演算をマスキングされるべきであるかどうかに応じて、ベクトル・プレディケート・レジスタ（ＶＰＲ：ｖｅｃｔｏｒ  ｐｒｅｄｉｃａｔｅ  ｒｅｇｉｓｔｅｒ）２２が、０又は１に設定され得るいくつかのプレディケート・ビットを含む、実例を示す。たとえば、ＶＰＲ２２の各ビットは、装置２によってサポートされる最も小さいデータ要素サイズに対応する結果ベクトルの部分に対応し得、結果ベクトルの所与の部分に関連するビットが０であるとき、これは、対応する演算が、ベクトル演算の結果が結果ベクトルのその部分に書き込まれることを防ぐためにマスキングされることを引き起こし得る。マスキングは、異なるやり方で実装され得る。一実例では、所定の値（たとえば０）が、マスキングされるべき結果ベクトルの部分に書き込まれ得る。別の実例では、結果ベクトルのマスキングされた部分は、それらがベクトル命令の結果として更新されないように、それらの前の値を保持し得る。別のオプションは、ともかく処理のマスキングされたレーンについての算術演算が実施されることを防ぐことである。いくつかの実装形態は、これらのマスキングオプションのうちの１つのみをサポートし得る。他の実装形態は２つ以上のオプションをサポートし得、プログラマー又はコンパイラは、どの特定のマスキングオプションが所与の命令のために使用されるべきであるかを指定することができる（たとえば、命令は、マスキングされた部分に０が書き込まれる０化マスキング、又はマスキングされていない部分についての結果が、それらの前の値を保存するマスキングされた部分中の既存の値とマージされるマージングマスキングを使用するものとして指定され得る）。図６に示されている実例では、レーン０及び３中のＶＰＲビットは０であり、レーン１及び２中のＶＰＲビットは１であり、これは、レーン０及び３がマスキングされるべきであるが、レーン１及び２がプレディケートされず、図２と同じやり方で処理されて、結果ベクトルの対応する部分を更新することを示す。図６は、図２に示されているベクトル積和命令の第１の変形態に適用される実例を示しているが、その実例が、第２の変形態、又は本明細書で説明される他の変形態のいずれにも適用され得ることが諒解されよう。
【００３９】
プレディケーションは、しばしば所与の処理アルゴリズムが、実施されるべき条件付き演算を必要とし得るので、有用であり得、ここで、ターゲット・データ値がある条件（たとえば、それがしきい値よりも大きいかどうか）に合致する場合、計算が必要とされるにすぎないことがある。ベクトル比較命令は、いくつかのターゲット値を関連する基準と比較し、各レーンについての基準が満足されるかどうかに従ってＶＰＲ２２のビットを設定し得、次いで、これは、図６に示されているベクトル積和命令などの後続のベクトル命令の実行を制御し得る。
【００４０】
図６は、処理のレーン全体が後続のベクトル積和命令においてマスキングされるようにＶＰＲビットが設定される場合を示す。しかしながら、ベクトル命令のために使用されているデータ要素サイズよりも小さい幅に対応する結果ベクトルの部分をマスキングすることも可能である。たとえば、ＶＰＲ２２を設定する比較命令が、後続の積和命令よりも小さいデータ要素サイズを使用する場合、これにより、積和命令のための処理の所与のレーンは、いくつかのＶＰＲビットが１に設定され、いくつかのビットが０に設定され得、これにより、そのレーンについての結果データ要素のパート（ｐａｒｔ）のみが結果ベクトルの対応する部分に書き込まれ、他のパートがマスキングされ得る。したがって、マスキングは、データ要素サイズよりも細かいグラニュラリティにおいて制御され得る。
【００４１】
図６は、プレディケート・レジスタ２２がベクトル積和命令の符号化において指定されない実例を示す。代わりに、プレディケート・レジスタ２２は、任意のベクトル命令のマスキングを暗黙的に制御するデフォルト・レジスタである。しかしながら、別の手法は、マスキングを制御するために使用されるべきプレディケート指示を指定するプレディケート・レジスタへの明示的参照を用いてベクトル積和命令を符号化することである。たとえば、２つ又はそれ以上のプレディケート・レジスタのバンクが与えられ得、プレディケート・ビットの異なるセットが、後続のベクトル命令のプレディケーションを制御するためのプレディケート・レジスタに書き込まれ得、それらのベクトル命令は、各々、その命令のために使用されるべき特定のプレディケート・レジスタを参照する。明示的プレディケート・レジスタ参照を使用する手法は、プレディケート・ビットの多数のセットが同時に保持され得る場合、繰り返しプレディケート・レジスタを更新する必要が少なくなり得るので、コード・サイズを低減することにおいていくつかの利点を有することができる。一方、命令によって参照されない暗黙的プレディケート・レジスタを使用する、図６に示されている手法は、命令符号化空間を節約することと、より少数のプレディケート・レジスタを与えることによって回路面積及び電力消費を低減することとにおいて利点を有することができる。いずれかの手法が、本技法のベクトル積和命令とともに使用され得る。
【００４２】
図７は、プレディケーションの第２の実例を示す。ベクトル命令のための一般的な用途は、動作の一定のシーケンスが、メモリに記憶されたアレイ８０の各要素ａ０、ａ１などに適用される必要がある、ベクトル化されたループにおけるものである。高レベル・コードで要素ごとに１回反復するループが、より少数の反復をもつループを含むベクトル化されたコードにコンパイルされ、その反復の各々は、要素のブロックをベクトル・レジスタにロードし、一連のベクトル命令を使用して要素を処理し、処理の各レーンの結果をメモリに記憶する。したがって、各反復は、１つのベクトル・レジスタ中のデータ要素の数に対応する要素のブロックを処理し得る。処理されるべきアレイ中の要素の総数がＮＥであり、１つのベクトル中のデータ要素の数が（データ要素サイズＥＳで除算されたベクトル幅ＶＷに等しい）ＮＶである場合、アレイ全体は、ＮＥ／ＮＶ回の反復の最小値において処理され得る。しかしながら、しばしば、要素の総数ＮＥは、１つのベクトル中の、したがって、ループの最後の反復中の要素の数ＮＶの厳密な倍数でないことがあり、ベクトルの要素のすべてが、処理されるべき実数値で満たされるとは限らない。満たされていないレーンにおける処理がマスキングされずに進むことを可能にされる場合、これは誤差を生じることがある。たとえば、アレイ８０の端部を越えたメモリ・アドレス空間は、ページ・テーブル中でマッピングされていないことがあり、したがって、アレイの末尾を処理する最終反復において「未使用」レーンのうちの１つについてロード／記憶演算が実施される場合、メモリ・アクセス障害、又はアレイに隣接するデータの破損があり得る。
【００４３】
したがって、ループの最終反復において未使用レーンにおける演算をマスキングすることが望ましいことがある。図１に示されているように、処理回路４は、所与のベクトル化されたループのどのレーンが有効にされるか又はマスキングされるかを制御するためのループ・プレディケーション回路９０を与えられ得る。ベクトル化されたループを開始すると、ループ・カウンタ１６は、ループにおいて処理されるべき要素の総数ＮＥを指定する値に設定される。たとえば、ループ開始命令は、処理されるべき要素の数を指定し得、ループ・カウンタ１６は、ループ開始命令に応答して設定され得る。ループの各反復の終了時に、ＮＥｒｅｍ、すなわち、処理されるべき残りの要素の数を計算するために、１つのベクトル中の要素の数ＮＶがループ・カウンタ１６から減算される。所与のループ反復を開始すると、ＮＥｒｅｍ＜ＮＶである場合、ループ・プレディケーション回路９０は、たとえば、ベクトル処理のレーン自体を抑圧すること（たとえば、ロード／記憶要求が発行されることを防ぐこと）によって、及び／又はマスキングされたレーンにおける処理の結果の書込みを無効にすること、若しくは上記で説明されたようにマスキングされたレーンを０に設定することによって、ベクトル処理の上側のＮＶ−ＮＥｒｅｍ個のレーンに関連する演算をマスキングするように処理回路４を制御する。
【００４４】
したがって、ループ・プレディケーション回路９０は、それが、命令符号化において明示的プレディケート参照を必要とすることなしに、いくつかのレーンをマスキングするように処理回路を直接制御し得るので、ベクトル積和命令自体の符号化から独立してプレディケーションを実装する別のやり方であり得る。図６に示されている手法と図７に示されている手法とは組み合わせられ得、いくつかの場合には、プレディケーション回路９０によって与えられるプレディケート指示は、ループ・プレディケーション回路９０又はプレディケート・レジスタ２２のいずれかによってマスキングされない結果ベクトルのそれらの部分に結果が書き込まれるように、ベクトル処理のマスキング全体を制御するために、ＶＰＲ２２又は別のタイプのプレディケート・レジスタから与えられたプレディケート指示との論理積をとられ得る。
【００４５】
プレディケーションは、簡潔のために他の例に示されていないが、プレディケーションは、本明細書で示される実例のいずれかとともに使用され得る。したがって、処理回路は、ベクトル積和命令に応答して処理の多数のレーンを実施するように構成されるが、処理回路は、適用されているマスキングに応じて、常にレーンのすべてを行う必要があるとは限らないことが諒解されよう。
【００４６】
図８〜図１０に示されているように、ベクトル命令（ベクトル積和命令を含むことが本明細書で説明される）の処理は、前のベクトル命令が完了する前に１つのベクトル命令を処理することが開始することができるようにインターリーブされ得る。特に、所与のベクトル命令に応答して、処理回路４は、ベクトルのセクションに各々対応する処理の多数のビートを実施し得、（ここで、そのセクションは、そのベクトル命令のために使用されている特定のデータ要素サイズよりも小さいか、それに等しいか、又はそれよりも大きくなり得）、処理回路は、第１のベクトル命令と第２のベクトル命令との重複実行をサポートし得、重複実行において、第２のベクトル命令のビートの第１のサブセットは、第１のベクトル命令のビートの第２のサブセットと並行して実施される。
【００４７】
この手法は、処理回路４が、命令の異なるクラスを処理するためのいくつかの別個のハードウェア・ブロックを含み得るので、有用であり得る。たとえば、メモリ・システム８と対話するロード／記憶命令は、専用ロード／記憶ユニットによって処理され得るが、算術又は論理命令は、算術論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）によって処理され得る。ＡＬＵ自体は、さらに、乗算に関与する演算において実施するための乗算累算ユニット（ＭＡＣ：ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ  ｕｎｉｔ）と、他の種類のＡＬＵ演算を処理するためのさらなるユニットとに区分され得る。また、浮動小数点命令を扱うために浮動小数点ユニットが与えられ得る。また、ベクトル処理に関与しない純粋な（ｐｕｒｅ）スカラー命令が、ベクトル命令と比較して別個のハードウェア・ブロックによって扱われるか、又は同じハードウェア・ブロックを再利用することができる。
【００４８】
デジタル信号処理（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ）などのいくつかの適用例では、ほぼ等しい数のＡＬＵ及びロード／記憶命令があり得、したがって、ＭＡＣなどのいくつかの大きいブロックが、かなりの量の時間の間、アイドルのままにされ得る。この非効率性は、実行リソースが、より高い性能を獲得するためにベクトル・レーンの数を用いてスケーリングされるとき、ベクトル・アーキテクチャ上で悪化させられ得る。より小さいプロセッサ（たとえば、単一発行、インオーダー・コア）上では、十分にスケーリング・アウトされたベクトル・パイプラインの面積オーバーヘッドが、法外に高くなり得る。利用可能な実行リソースのより良好な使用を行いながら、面積影響を最小限に抑えるための１つの手法は、図８に示されているように、命令の実行を重複させることである。この実例では、３つのベクトル命令が、ロード命令ＶＬＤＲと、乗算命令ＶＭＵＬと、シフト命令ＶＳＨＲとを含み、すべてのこれらの命令は、それらの間にデータ依存性があるとしても、同時に実行していることがある。これは、ＶＭＵＬの要素１が、Ｑ１の要素１のみに依存し、Ｑ１レジスタの全体に依存せず、そのため、ＶＬＤＲの実行が終了する前に、ＶＭＵＬの実行が開始することができるからである。命令が重複することを可能にすることによって、乗算器のような費用がかかるブロックが、より多くの時間、アクティブに保たれ得る。
【００４９】
したがって、マイクロアーキテクチャ実装形態がベクトル命令の実行を重複させることを可能にすることが望ましいことがある。しかしながら、アーキテクチャが、一定量の命令重複があることを仮定した場合、これは、マイクロアーキテクチャ実装形態が、アーキテクチャによって仮定された命令重複の量に実際に一致する場合、高効率を与え得るが、それは、異なる重複を使用するか又はまったく重複しない異なるマイクロアーキテクチャにスケーリングされる場合、問題を生じることがある。
【００５０】
代わりに、アーキテクチャが、図９の実例に示されているように様々な異なる重複をサポートし得る。ベクトル命令の実行は、「ビート」と呼ばれるパートに分割され、各ビートは、所定のサイズのベクトルの部分の処理に対応する。ビートは、完全に実行されるか又はまったく実行されないかのいずれかである、ベクトル命令のアトミック・パートであり、部分的に実行され得ない。１つのビートにおいて処理されるベクトルの部分のサイズは、アーキテクチャによって定義され、ベクトルの任意の断片であり得る。図９の実例では、ビートは、ベクトル命令ごとに４つのビートがあるように、ベクトル幅の１／４に対応する処理として定義される。明らかに、これは１つの実例にすぎず、他のアーキテクチャは、異なる数のビート、たとえば、２つ又は８つを使用し得る。１つのビートに対応するベクトルの部分は、処理されているベクトルのデータ要素サイズと同じサイズであるか、それよりも大きいか又は小さくなり得る。したがって、要素サイズが、実装形態ごとに変化するか又はラン・タイムにおいて異なる命令間で変化する場合でも、ビートは、ベクトル処理のある固定幅である。１つのビートにおいて処理されているベクトルの部分が、多数のデータ要素を含む場合、桁上げ信号（ｃａｒｒｙ  ｓｉｇｎａｌ）は、各要素が独立して処理されることを保証するために、それぞれの要素の間の境界において無効にされ得る。１つのビートにおいて処理されるベクトルの部分が、要素のパートのみに対応し、ハードウェアが、いくつかのビートを並行して計算するには不十分である場合、処理の１つのビート中に生成された桁上げ出力は、２つのビートの結果が一緒にデータ要素を形成するように、処理の後続するビートに桁上げ入力として入力され得る。
【００５１】
図９に示されているように、処理回路４の異なるマイクロアーキテクチャ実装形態は、抽象アーキテクチャ・クロックの１つの「ティック（ｔｉｃｋ）」において異なる数のビートを実行し得る。ここで、「ティック」は、アーキテクチャ状態前進（ａｄｖａｎｃｅｍｅｎｔ）のユニットに対応する（たとえば、単純なアーキテクチャ上では、各ティックは、次の命令をポイントするためにプログラム・カウンタを更新することを含む、命令を実行することに関連するすべてのアーキテクチャ状態を更新するインスタンスに対応し得る）。パイプライン化などの知られているマイクロアーキテクチャ技法は、単一のティックが、ハードウェア・レベルにおいて実施するために多数のクロック・サイクルを必要とし得ることと、実際、ハードウェア・レベルにおける単一のクロック・サイクルが、多数の命令の多数のパートを処理し得ることとを意味し得ることが、当業者によって諒解されよう。しかしながら、そのようなマイクロアーキテクチャ技法は、ティックがアーキテクチャ・レベルにおいてアトミックであるとき、ソフトウェアに対して可視でない。簡潔のために、そのようなマイクロアーキテクチャは、本開示のさらなる説明中に無視される。
【００５２】
図９の下部の実例に示されているように、いくつかの実装形態は、すべてのビートを１つのティック内で並行して処理するために十分なハードウェア・リソースを与えることによって、同じティック中にベクトル命令のすべての４つのビートをスケジュールし得る。これは、より高性能の実装形態に好適であり得る。この場合、命令全体が１つのティックにおいて完了され得るので、アーキテクチャ・レベルにおける命令間の重複の必要はない。
【００５３】
一方、より面積効率的な実装形態は、ティックごとに２つのビートのみを処理することができる、より狭い処理ユニットを与え得、図９の中間の実例に示されているように、命令実行が重複され得、第２のベクトル命令の第１及び第２のビートが、第１の命令の第３又は第４のビートと並行して行われ、ここで、それらの命令は、処理回路内の異なる実行ユニット上で実行される（たとえば、図９では、第１の命令は、ロード／記憶ユニットを使用して実行されるロード命令であり、第２の命令は、ＭＡＣを使用して実行される乗算累算命令である）。
【００５４】
さらによりエネルギー／面積効率的な実装形態が、より狭く、一度に単一のビートのみを処理することができるハードウェア・ユニットを与え得、この場合、ティックごとに１つのビートが処理され、命令実行は、図９の上部の実例に示されているように、１つのビートだけ重複及びスタッガされ得る（これは、上記の図８に示された実例と同じである）。
【００５５】
図９に示されている重複はいくつかの実例にすぎず、他の実装形態も可能であることが諒解されよう。たとえば、処理回路４のいくつかの実装形態は、同じティックにおける並行した多数の命令のデュアル発行をサポートし得、したがって、命令のより大きいスループットがある。この場合、１つのサイクルにおいて一緒に開始する２つ又はそれ以上のベクトル命令は、次のサイクルにおいて開始する２つ又はそれ以上のベクトル命令と重複するいくつかのビートを有し得る。
【００５６】
異なる性能ポイントにスケーリングするために、実装形態ごとに重複の量を変化させることと同様に、ベクトル命令間の重複の量は、ラン・タイムにおけるプログラム内のベクトル命令の実行の異なるインスタンス間でも変わることができる。したがって、処理回路４は、所与の命令が前の命令に対して実行されるタイミングを制御するための回路を与えられ得る。これは、命令にとって利用可能なリソースを実装すること又はそれらに依存することがより困難であるいくつかのコーナーケースでは、命令を重複させないことを選択する自由をマイクロアーキテクチャに与える。たとえば、同じリソースを必要とする所与のタイプ（たとえば、乗算累算）の命令が、相次いであり、すべての利用可能なＭＡＣ又はＡＬＵリソースが、別の命令によってすでに使用されている場合、次の命令を実行することを開始するための十分な空いているリソースがないことがあり、したがって、重複することよりむしろ、第２の命令の発行は、第１の命令が完了するまで待機することがある。
【００５７】
図１０に示されているように、介在するスカラー命令がある場合も、２つのベクトル命令間の重複が防がれ得る。これは、スカラー命令は、ベクトル命令の最後のビートの成果に依存し得、第２のベクトル命令は、それのビートのすべてにおいてスカラー結果に依存し、したがって、ベクトル命令をスカラー命令と重複させることを回避することが、より安全であり得るからである。
【００５８】
上記の実例は、加数が入力ベクトル要素と乗数との積に加算される、ベクトル積和命令の加算変形態（ａｄｄ  ｖａｒｉａｎｔ）を示す。しかしながら、図１１に示されているように、加数が積から減算される、ベクトル積和命令の減算変形態を与えることも可能である。図１１は、図２に示している命令の第１の形式の場合の減算変形態を示しているが、減算変形態が、図３又は図４に示されている導入の第２の形式の場合にも与えられ得ることが諒解されよう。同様に、図５と同様の、減算変形態の非破壊的バージョンも与えられ得る。したがって、減算変形態の場合、結果ベクトルの結果データ要素は、積と加数との間の差に対応する（たとえば、Ｑ０’［ｉ］＝Ｑ０［ｉ］＊Ｑ１［ｉ］−Ｒ０）。したがって、積和演算への言及は、本明細書では積差演算（ｍｕｌｔｉｐｌｙ−ｓｕｂｔｒａｃｔ  ｏｐｅｒａｔｉｏｎ）を包含する。実際には、減算変形態は、単に、積に加数を加算する前に加数をネゲートするために加数の２の補数を生成することによって実装され得るので、加算変形態と減算変形態の両方が、共通加算回路を使用して計算され得る。
【００５９】
ベクトル積和演算は、モジュラ算術又は飽和算術のいずれかを使用して各レーン結果を計算し得る。モジュラ算術では、演算の結果が、結果値中で利用可能なビット数を使用して表され得る最大値を超えたとき、結果は、それらのビットを使用して表せる範囲の最下端に「ラップ・アラウンド」し、結果は、より大きいビット数が利用可能であった場合に表されたであろう結果値の最下位部分を効果的に示す（結果がオーバーフローしたことを示すためにオーバーフロー・ビットが制御レジスタ中に設定され得る）。すなわち、結果値は、結果値中のビット数に依存する、ある定数を法とする真の結果と事実上等価である。
【００６０】
対照的に、飽和算術を用いると、真の結果が、結果値で表せる最大可能値を超えたとき、結果は最大値においてクランプされる。同様に、結果が、結果値で表せる最小値よりも小さい場合、結果は、最小値にクランプされ、ラップ・アラウンドしない。図１２に示されているように、所与のレーンＬ［ｉ］の結果が、飽和の場合の最小限界よりも小さいとき、結果データ要素Ｑ０’［ｉ］はその最小限界に等しく設定され、レーン結果Ｌ［ｉ］が最小限界若しくは最大限界に等しいか、又は最小限界と最大限界との間にあるとき、結果データ要素Ｑ０’［ｉ］は単にレーン結果に等しく、より大きい結果が最大限界よりも大きいとき、結果データ要素Ｑ０’［ｉ］は最大限界に等しい。飽和が行われた場合（すなわち、レーン結果Ｌ［ｉ］が最小値よりも小さいか、又は最大値よりも大きいかのいずれかである場合）、制御レジスタ中のスティッキー・ビットが１に設定される。結果が飽和しなかった場合、スティッキー・ビットはそれの前の値を保持する。したがって、命令のシーケンスを処理するとき、ひとたび１に設定された所与のレーンについてのスティッキー・ビットは、飽和がシーケンス中のある時点において行われたことを示すために、シーケンスの残りの間、１のままになる。いくつかのシステムは、ベクトル積和命令について、１つのみ、又はモジュラ算術若しくは飽和算術をサポートし得る。他の場合、処理回路４は、算術の両方の形式について、ベクトル積和命令変形態をサポートし得る。
【００６１】
上記の実例は、ベクトル積和命令が、各々４つのデータ要素を有するベクトルに適用される場合を示すが、明らかに、これは必須でなく、ベクトルは任意の数のデータ要素を含み得る。上述のように、いくつかのシステムでは、ベクトル・オペランドの所与の数のビットが、異なるデータ要素サイズに分割され得、たとえば、１２８ビット・ベクトルが、８ビット、１６ビット、３２ビット、又は６４ビット・データ要素に分割され得る。したがって、図１３は、各ベクトルが８つのデータ要素を含む代替例を示す。
【００６２】
いくつかのデータ要素サイズの場合、データ要素のサイズは、スカラー・レジスタ１２のうちの１つの幅よりも狭くなり得る。たとえば、図１３に示されているように、ベクトル積和命令の実行の所与のインスタンスのための各データ要素は一定のビット数Ｊを有し得るが、スカラー・レジスタＲ０はＪビットよりも多くのビットを有し得る。この場合、スカラー・レジスタ中のスカラー値の部分のみが、ベクトル処理の各レーンにおける積和処理のための加数値又は乗数値として使用され得る。たとえば、図１３に示されているように、スカラー・レジスタの選択された部分Ｒ０’は、最下位Ｊビットであり得、ここで、Ｊは、現在実行された命令のために使用された現在のデータ要素サイズである。代替的に、他の例は、ベクトル処理のために使用されるべきスカラー値の部分をスカラー・レジスタの最上位Ｊビットとして選択し得る。したがって、本明細書で説明されるすべての実例では、スカラー・レジスタ中のスカラー値全体が積和処理のために使用されることは必須でないが、データ要素サイズに対応する幅をもつスカラー値の部分のみが乗数値又は加数値として使用されることは可能であることが諒解されよう。
【００６３】
また、上記で示された実例は、入力ベクトルのデータ要素と同じサイズのデータ要素をもつ結果値を生成するが、これは必須でなく、図１４に示されているように、Ｊビット・データ要素を有する１つ又は複数の入力ベクトルからＫビット結果データ要素をもつ結果ベクトル値を生成する、ベクトル積和命令の要素拡大変形態が与えられ得、ここで、Ｋ＞Ｊである。結果データ要素が入力データ要素よりも大きいとき、入力データ要素のすべてが結果に寄与するとは限らない。たとえば、図１４の場合に示されているように、各結果データ要素Ｑ０’［ｉ］は、入力ベクトルの偶数番号のレーン０、２、４、６中の対応するデータ要素に基づいて生成され得、奇数番号の要素は無視され得る。代替例は、たとえば、奇数番号の要素を使用して、又はベクトルの上側又は下側の端部における隣接する要素のブロックを使用して、異なる位置から要素を選択し得る。代替的に、すべての入力要素は、入力要素の数が結果要素の数と同じであるように使用され得、この場合、結果ベクトルの幅は、入力ベクトルの幅よりも大きくなる。要素拡大命令を実装することが、特に有用であり得、ここで、各結果データ要素が入力データ要素のサイズの２倍であるように、Ｋ＝２Ｊである。これは、積和処理の所与のレーンにおいて実施される乗算が、入力のビット数の２倍をもつ結果を生成することになるからであり、したがって、ベクトル積和命令の要素拡大変形態を使用することによって、この増加された精度が、結果において保持され得る。
【００６４】
一方で、結果ベクトル値が入力ベクトルのデータ要素と同じサイズ（Ｊビット）の結果データ要素を有するベクトル積和命令の要素サイズ保存変形態の場合、Ｊビット結果データ要素を生成するために積和演算のレーン結果Ｌ［ｉ］をどのようにトランケートすべきかについての異なるオプションがある。概して、２つのＪビット・データ要素を互いに乗算し、第３のＪビット・データ要素を加算することは、ビット［２Ｊ：０］を含む２Ｊ＋１ビット・レーン結果Ｌ［ｉ］を生成し得、ここで、ビット０は最下位ビットを指し、ビット２Ｊは最上位ビットを指す。図１５は、対応する結果データ要素Ｑ０’［ｉ］を生成するためにレーン結果Ｌ［ｉ］をどのようにトランケートすべきかについての５つの実例を示す。
ａ）  レーン結果Ｌ［ｉ］の最下位Ｊビット（たとえば、２Ｊ＋１ビット・レーン結果のビット［Ｊ−１：０］）が選択され得る。
ｂ）  レーン結果Ｌ［ｉ］の最上位Ｊビット（たとえば、２Ｊ＋１ビット・レーン結果のビット［２Ｊ：Ｊ＋１］）が選択され得る。
ｃ）  レーン結果Ｌ［ｉ］の最上位Ｊビットが選択され、レーン結果の少なくとも１つの下位ビットに基づいて丸められ得る。たとえば、選択された部分中に含まれない最上位ビットが選択された部分に加算されて、Ｊビット結果データ要素Ｑ０’［ｉ］に丸められ得るか、又は代替的に、２つ以上の下位ビットが丸めのために使用されて、より複雑な丸めモードが実装され得る。丸めを実施することによって、トランケーションによって引き起こされる結果に対する負バイアスが回避され得る。
ｄ）  レーン結果Ｌ［ｉ］の最上位ビット［２Ｊ］が無視され、次のＪ最上位ビット［２Ｊ−１：Ｊ］が、選択されて、結果が形成され得る。２Ｊ＋１ビット結果の先頭ビットは、一般に、Ｊビット入力要素のうちの３つすべてがそれらの最大値にあるか又はその近くにある場合のみ、１になり、したがって、しばしば、大部分の計算について０になる。したがって、先頭ビット以外の次のＪビットが、有用な情報をよりしばしば与え得、したがって、トランケートされた結果についてこれらを使用することが、好ましくなり得る。
ｅ）  実例ｃ）と同様のやり方で、レーン結果Ｌ［ｉ］のビット［２Ｊ−１：Ｊ］は、少なくとも１つの下位ビットに基づいて丸められて、結果が生成され得る。
【００６５】
いくつかの実装形態は、これらのトランケーション技法のうちの１つのみをサポートし得るが、他の実装形態は、２つ以上をサポートし、プログラマー／コンパイラが所与の命令のためにどれが使用されるべきであるかを指定することを可能にし得る。
【００６６】
トランケートされた結果は、完全な２Ｊ＋１ビット・レーン結果が実際に生成され、次いで、図１５に示されているやり方でトランケートされた場合に生成されるであろう値に対応するが、ハードウェアがレーン結果の完全な２Ｊ＋１ビットを実際に生成することは必須でないことに留意されたい。いくつかの場合には、ハードウェアがトランケートされた値を入力オペランドから直接生成することは、可能であり得る（たとえば、パートａ）の実例では、レーン結果の上側ビットは、積和演算中に生成される必要はない）。したがって、ハードウェアが、２Ｊ＋１ビット・レーン結果値からトランケートされた選択されたビットに対応する結果データ要素を生成することは、十分であるが、実際にこのようにして結果データ要素を生成する必要はない。
【００６７】
いくつかの実装形態は、積和命令の整数／固定小数点変形態と浮動小数点変形態の両方をサポートし得る。代替的に、他の実装形態は、ベクトル積和命令の整数／固定小数点変形態、又は浮動小数点変形態のみをサポートし得る。ベクトル積和命令の整数又は固定小数点変形態の場合、命令デコーダは、固定小数点又は整数算術（たとえば、２の補数２値算術）を使用して各結果データ要素を生成するためにベクトル積和演算を実施するように処理回路を制御し得る。一方、浮動変形態の場合、浮動小数点算術が使用され得る。値の各ビットがある固定有意性を有する整数又は固定小数点値とは異なり、浮動小数点値を用いると、データ値の有効ビットが仮数によって表され、別個の指数が、仮数の有意性を示すために与えられる。浮動小数点ユニットが（使用されている特定の浮動小数点フォーマットを使用して表され得る値に処理結果を丸めるために）浮動小数点値の丸めのために、又は（等価有意性の値を、それらを加算又は減算する前に生成するために）浮動小数点オペランドの整合のために、追加の回路を必要とし得るので、処理回路４内の一般に異なる処理ユニットが、それぞれ浮動小数点算術及び整数／固定小数点算術のために与えられ得る。
【００６８】
命令の浮動小数点変形態がサポートされる場合、これは、それぞれ、図１６及び図１７に示されているように、融合積和演算又は分割積和演算として実装され得る。融合積和を用いると、乗算が実施されて、丸められていない積値を生成し、丸められていない積は、最初に積を丸めずに加数値に加算される。したがって、図１６の融合演算を用いると、積と加数との加算又は減算が実施された後に実施される単一の丸めステップのみがある。この手法は、追加の丸めステップを回避することが、丸められていない積の増加された精度を保持するので、いくつかの利点を有し、より正確な結果を与えることができるが、この手法はまた、性能を改善するために、乗算自体と並行して実施されるべき、加数値を丸められていない積と整合させるためのシフトを有効にする（とはいえ、融合積和に対するいくつかの手法は、加数値が演算の後の段において入力されることを可能にするために、後になるまで整合を遅延させることを決め得、これは、異なる命令間のパイプライン化を改善することができる）。
【００６９】
一方で、図１７に示されている分割積和手法を用いると、乗算が第１に実施され、丸めステップが実施されて、丸められた積を生成し、丸められた積は、次いで後続の加算又は減算段において、整合された加数に加算され、その後に、加算器によって生成された和又は差を丸めるための第２の丸め演算が続いて、最終結果を生成する。分割手法は、いくつかの場合には、分割手法が、スタンド・アロン乗算又は加算命令を実行するために与えられる既存の乗算及び加算回路により効率的にオーバーレイし得るので、ハードウェアで実装するのがより簡単であり得る。
【００７０】
したがって、いくつかのシステム設計は、ベクトル積和命令の浮動変形態の場合、融合積和のみ、又は分割積和のみを実装し得る。他のシステムは、両方のタイプの演算をサポートし得、したがって、浮動小数点ベクトル積和命令の別個の融合積和変形態及び分割積和変形態があり得る。
【００７１】
ベクトル積和命令のいくつかの変形態は、上記で説明されている。概して、これらの変形態は、任意の所望の組合せで、たとえば、分割積和浮動小数点変形態で組み合わせられ得、分割積和浮動小数点変形態は加数値をスカラー値として指定し、入力ベクトルのうちの１つが宛先レジスタでもある破壊的形式を使用する。したがって、簡潔のために、これらの命令のすべての組合せが説明されたとは限らないが、必要に応じて異なる変形態を組み合わせることが可能である。概して、命令の異なる変形態は、演算のどんな変形態が処理回路によって実施されるべきであるかを指定するために、任意のやり方で、たとえば、異なる命令オペコードを使用することによって、又は命令符号化の別のビットフィールドを使用することによって区別され得る。たとえば、積和命令の変形態を定義するいくつかのパラメータはまた、命令符号化とは別に、たとえば、制御レジスタ中の制御ビットを使用して指定され得る。
【００７２】
図１８は、ベクトル命令の処理の実例を示す流れ図である。ステップ１０３において、実行されるべき次の命令が、メモリ・システム８からフェッチされる。ステップ１００において、命令デコーダ６は、処理されるべきフェッチされた命令が、少なくとも１つのスカラー・レジスタと少なくとも１つのベクトル・レジスタとを指定するベクトル積和命令であるかどうかを決定する。そのようなベクトル積和命令でない場合、命令は、遭遇される命令のタイプに適した様式で処理される。そのようなベクトル積和命令が遭遇されたとき、それは復号され、命令デコーダ６は、ステップ１０２において、ベクトル処理のいくつかのレーンを含むベクトル積和演算を実施するように処理回路４を制御するための制御信号を生成する。各プレディケートされないレーンは、積値と加数値との和又は差に対応する結果データ要素を生成し、ここで、積値は、第１のベクトル値のそれぞれのデータ要素と乗数との積である。加数値と乗数値とのうちの少なくとも一方が、ベクトル積和命令によって指定されたスカラー・レジスタに記憶されたスカラー値の部分として指定される。
【００７３】
要約すれば、加数と乗数の一方又は両方を識別するためにスカラー・レジスタを使用するベクトル積和命令を与えることによって、これは、限られた数のみが物理的に与えられるので、又はリソースが同時に実行命令との間で共有されるので、限られたベクトル・レジスタ読出しポートをもつプロセッサ・コアに特に好適である、様々な共通算術演算のためのデータを処理する効率的なやり方を与える。命令はまた、いくつかの処理アルゴリズムを実装するために必要とされる命令の数を低減するのを助け、それにより、コード・サイズを減少させるか、又はコード密度を増加させる。実行されるべき命令の数を低減することも、性能を増加させ得る。
【００７４】
図１９は、使用され得る仮想マシン実装形態を示す。前に説明された実施例は、関係する技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して本発明を実装するが、ハードウェア・デバイスのいわゆる仮想マシン実装形態を与えることも可能である。これらの仮想マシン実装形態は、仮想マシン・プログラム１３０をサポートするホスト・オペレーティング・システム１４０を動作させる、ホスト・プロセッサ１５０上で動作する。一般に、妥当な速度で実行する仮想マシン実装形態を提供するために、大きい、強力なプロセッサが必要とされるが、そのような手法は、適合性又は再利用理由のために、別のプロセッサにネイティブなコードを動作させる要望があるときなど、いくつかの状況で正当化され得る。仮想マシン・プログラム１３０は、仮想マシン・プログラム１３０によってモデル化されたデバイスである実際のハードウェアによって提供されるであろう、ハードウェア・インターフェースと同様である仮想ハードウェア・インターフェースをゲスト・プログラム１２０に提供する。したがって、上記のメモリ・アクセスの制御を含むプログラム命令は、仮想マシン・ハードウェアとのそれらの対話をモデル化するために仮想マシン・プログラム１３０を使用して、ゲスト・プログラム１２０内から実行され得る。ゲスト・プログラム１２０は、ベア・メタル（ｂａｒｅ  ｍｅｔａｌ）プログラムであり得、又は代替的に、それは、ホストＯＳ１４０が仮想マシン・アプリケーション１３０を動作させるやり方と同様のやり方でアプリケーションを動作させる、ゲスト・オペレーティング・システムであり得る。異なるタイプの仮想マシンがあり、いくつかのタイプでは、仮想マシンは、ホストＯＳ１４０の必要なしに、ホスト・ハードウェア１５０上で直接動作することも諒解されよう。
【００７５】
本出願では、「．．．ように構成された（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ．．．）」という言葉は、装置の要素が、定義された動作を行うことが可能である構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の配列又は様式を意味する。たとえば、装置が、定義された動作を提供する専用ハードウェアを有し得るか、又は、プロセッサ若しくは他の処理デバイスが、機能を実施するようにプログラムされ得る。「ように構成された」は、装置要素が定義された動作を提供するために、何らかのやり方で変更されることを必要とすることを暗示しない。
【００７６】
本発明の例示的な実施例が、添付の図面を参照しながら本明細書では詳細に説明されたが、本発明がそれらの正確な実施例に限定されないこと、並びに、様々な変更及び修正が、添付の特許請求の範囲及び趣旨によって規定される本発明の範囲から逸脱することなく、当業者によってその中で実施され得ることを理解されたい。
【図１】
2019526866.tif 000005
【図２】
2019526866.tif 000006
【図３】
2019526866.tif 000007
【図４】
2019526866.tif 000008
【図５】
2019526866.tif 000009
【図６】
2019526866.tif 000010
【図７】
2019526866.tif 000011
【図８】
2019526866.tif 000012
【図９】
2019526866.tif 000013
【図１０】
2019526866.tif 000014
【図１１】
2019526866.tif 000015
【図１２】
2019526866.tif 000016
【図１３】
2019526866.tif 000017
【図１４】
2019526866.tif 000018
【図１５】
2019526866.tif 000019
【図１６】
2019526866.tif 000020
【図１７】
2019526866.tif 000021
【図１８】
2019526866.tif 000022
【図１９】
2019526866.tif 000023
【国際調査報告】
2019526866.tif 000024
2019526866.tif 000025