(57)【特許請求の範囲】
【請求項１】
データを処理するための装置であって、
データ値に処理演算を行うように構成される処理回路と、
前記処理回路に連結され、かつプログラム命令をデコードし、前記処理回路を制御するための制御信号を生成して、前記プログラム命令によって特定される処理演算を行うように構成されるデコーダ回路と、を備え、
前記デコーダ回路が、引数削減命令に応答して、前記処理回路を制御するための制御信号を生成し、複数の成分を有するベクトル浮動小数点値に処理演算を行い、前記複数の成分のそれぞれが、整数指数値および仮数値を含み、前記処理演算が、
前記複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
前記複数の成分のそれぞれに対して、前記指数シフト値Ｃが非ゼロである場合は、前記指数シフト値Ｃを、前記成分の整数指数値に加算して、前記複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成することを含み、
前記第１の所定値Ｅｄｏｔｍａｘが、最小整数値であり、Ｅｄｏｔｍａｘの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のオーバーフローをもたらし、かつ、
前記第２の所定値Ｅｄｏｔｍｉｎが、最大整数値であり、Ｅｄｏｔｍｉｎの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のアンダーフローをもたらす、装置。
【請求項２】
各成分が、浮動小数点数（−１）Ｓｃ＊２（Ｅｃ−１２７）＊（１＋（Ｍｃ／２２４））を表す、符号値Ｓｃ、整数指数値Ｅｃ、および仮数値Ｍｃを有し、Ｅｄｏｔｍａｘが１９０である、請求項１に記載の装置。
【請求項３】
各成分は、浮動小数点数（−１）Ｓｃ＊２（Ｅｃ−１２７）＊（１＋（Ｍｃ／２２４））を表す、符号値Ｓｃ、整数指数値Ｅｃ、および仮数Ｍｃを有し、Ｅｄｏｔｍｉｎは６４である、請求項１に記載の装置。
【請求項４】
前記複数の成分のうちのいずれか１つに対して、前記指数シフト値Ｃを、前記成分の整数指数値に加算して、前記複数の結果の成分のうちの１つを生成する場合、前記複数の結果の成分のうちの１つは、浮動小数点のアンダーフローとなり、次に、前記複数の結果の成分のうちの１つをゼロ値に置き換える、請求項１に記載の装置。
【請求項５】
前記指数シフト値Ｃを選択することが、
前記複数の成分のそれぞれに対して、最上Ｐビットである高次指数部分Ｅｈｏを形成することであって、前記整数指数値Ｐは、前記整数指数値内の総ビット数未満であることと、
前記高次指数部分Ｅｈｏの中から最大値Ｅｈｏｍａｘを選択することと、および、
前記複数の成分のそれぞれに対して、（２（Ｐ−１）−Ｅｈｏｍａｘ）の値を前記高次指数部分Ｅｈｏに加算することと、
によって得られるものと同一の結果をもたらす値を選択することを含む、請求項１に記載の装置。
【請求項６】
前記複数の成分のうちのいずれか１つに対して、前記（２（Ｐ−１）−Ｅｈｏｍａｘ）の値を前記高次指数部分Ｅｈｏに加算する場合、前記（２（Ｐ−１）−Ｅｈｏｍａｘ）の値が負であり、前記加算が、アンダーフローし、次に、前記複数の結果の成分のうちの対応する１つを値ゼロに置き換える、請求項５に記載の装置。
【請求項７】
前記整数指数値内の総ビット数が８であり、かつ、Ｐ＝３である、請求項５に記載の装置。
【請求項８】
前記複数の成分のうちのいずれかが浮動小数点非数である場合、前記複数の結果の成分のすべてが、浮動小数点非数に設定される、請求項１に記載の装置。
【請求項９】
前記複数の成分のうちのいずれかが浮動小数点無限大値である場合、浮動小数点無限大値を有する成分に対応する各結果の成分は、大きさ１の浮動小数点値に設定され、前記成分の前記浮動小数点無限大値に整合する符号および残りの結果の成分のすべては、大きさゼロの浮動小数点値に設定される、請求項１に記載の装置。
【請求項１０】
前記引数削減命令は、また、前記複数の結果の成分のスカラー積によって得られるものと同一の値を有する結果のスカラー積を生成する、請求項１に記載の装置。
【請求項１１】
前記処理回路および前記デコーダ回路は、前記引数削減命令に続いて、１つまたは複数のさらなる命令のシーケンスに応答して、
前記複数の結果の成分のスカラー積によって得られるものと同一の値を有する結果のスカラー積を生成することと、
前記結果のスカラー積の逆数平方根を生成することと、
各結果の成分に対して、前記結果の成分に前記逆数平方根を掛けることによって、対応する正規化成分を生成することと、によって得られるものと同一の複数の正規化成分を有する正規化ベクトル浮動小数点値を生成する、請求項１に記載の装置。
【請求項１２】
前記処理回路および前記デコーダ回路は、グラフィクス処理ユニットの一部である、請求項１に記載の装置。
【請求項１３】
データを処理する装置であって、
データ値に処理演算を行うための処理手段と、
プログラム命令をデコードして、前記処理手段を制御するための制御信号を生成し、前記プログラム命令によって特定される処理演算を行うデコーダ手段と、を備え、
前記でコーダ手段が、引数削減命令に応答して、前記処理手段を制御するための制御信号を生成し、複数の成分を有するベクトル浮動小数点値に処理演算を行い、前記複数の成分のそれぞれは、整数指数値および仮数値を含み、前記処理演算が、
前記複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、かつ、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
前記複数の成分のそれぞれに対して、前記指数シフト値Ｃが非ゼロである場合は、前記指数シフト値Ｃを前記成分の整数指数値に加算して、前記複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成することと、を含み、
前記第１の所定値Ｅｄｏｔｍａｘが、最小整数値であり、Ｅｄｏｔｍａｘの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のオーバーフローをもたらし、かつ、
前記第２の所定値Ｅｄｏｔｍｉｎが、最大整数値であり、Ｅｄｏｔｍｉｎの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のアンダーフローをもたらす、装置。
【請求項１４】
データを処理する方法であって、
引数削減命令に応答して、複数の成分を有するベクトル浮動小数点値に処理演算を行うステップであって、前記複数の成分のそれぞれが、整数指数値および仮数値を含み、前記処理演算が、
前記複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、かつ、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
前記複数の成分のそれぞれに対して、前記指数シフト値Ｃが非ゼロである場合は、前記指数シフト値Ｃを前記成分の整数指数値に加算して、前記複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成するステップを含み、
前記第１の所定値Ｅｄｏｔｍａｘが、最小整数値であり、Ｅｄｏｔｍａｘの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のオーバーフローをもたらし、かつ、
前記第２の所定値Ｅｄｏｔｍｉｎが、最大整数値であり、Ｅｄｏｔｍｉｎの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のアンダーフローをもたらす、方法。
【請求項１５】
プログラム命令に応答し、かつ、データ処理を行うように、データ処理装置を制御するためのコンピュータプログラムであって、複数の成分を有するベクトル浮動小数点値に処理演算を行うように、前記データ処理装置を制御するための引数削減命令を含み、前記複数の成分のそれぞれが、整数指数値および仮数値を含み、前記処理演算が、
前記複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、かつ、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
前記複数の成分のそれぞれに対して、前記指数シフト値Ｃが非ゼロである場合は、前記指数シフト値Ｃを前記成分の整数指数値に加算して、前記複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成することと、を含み、
前記第１の所定値Ｅｄｏｔｍａｘが、最小整数値であり、Ｅｄｏｔｍａｘの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のオーバーフローをもたらし、かつ、
前記第２の所定値Ｅｄｏｔｍｉｎが、最大整数値であり、Ｅｄｏｔｍｉｎの整数指数値および仮数Ｍを有する浮動小数点値の平方が、少なくとも１つのＭの値に対して浮動小数点のアンダーフローをもたらす、コンピュータプログラム。
【請求項１６】
請求項１に記載のデータを処理するための装置を提供するようにプログラムを実行するコンピュータを備える、仮想マシン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理システムの分野に関する。より具体的には、本発明は、ベクトル浮動小数点演算を提供するデータ処理システムの分野に関する。
【背景技術】
【０００２】
ベクトル浮動小数点ベクトルＶにベクトル正規化操作を行って、長さ１であり、入力ベクトルＶと同一方向に点を有する正規化ベクトルを生成することが知られている。このベクトル正規化は、以下の計算シーケンスとして行うことができる。
１． 入力ベクトルＶに関して、入力ベクトルＶのドット積をそれ自体で計算する
２． ドット積の逆数平方根を計算する
３． 入力ベクトルＶの各成分に逆数平方根値を掛ける
【０００３】
上記の数学的演算のシーケンスは、理想的な数学的実数に対してはうまく機能するが、浮動点数が、制限された範囲内、かつ制限された精度で数学的実数を表すに過ぎないという問題がある。特定の問題において、上述されるベクトル正規化技術の文脈では、ドット積は、オーバーフローまたはアンダーフローする場合があり、少なくとも最終結果における精度の喪失、および許容できないエラーをもたらす可能性がある。
【０００４】
この問題に対応する１つのアプローチは、最大値を有する入力ベクトルＶのベクトル成分を識別し、次に、他のベクトル成分をこの値で割る一方で、最大値を有するベクトル成分を大きさ１に設定することであろう。このアプローチの問題は、追加の浮動小数点の除算をもたらし、処理速度を低減し、電力消費を増大させることである。この問題に対応する別のアプローチは、ベクトル正規化手順内で、入力ベクトルＶよりも高い精度で中間計算を行うことであろう（例えば、入力ベクトルＶが単精度浮動小数点数である場合、中間計算は、倍精度浮動小数点数を用いて行われてもよい）。しかしながら、このアプローチは信頼できるが、これも低速で高い電力消費をもたらし、より精度の高い浮動小数点演算のためのサポートが得られることを前提とする。
【発明の概要】
【課題を解決するための手段】
【０００５】
１つの態様から見ると、本発明は、データを処理するための装置を提供し、
データ値に処理演算を行うように構成される処理回路と、
該処理回路に連結され、かつプログラム命令をデコードして、該処理回路を制御するための制御信号を生成し、該プログラム命令によって特定される処理演算を行うように構成されるデコーダ回路と、を備え、
該デコーダ回路が、引数削減命令に応答して、該処理回路を制御するための制御信号を生成し、複数の成分を有するベクトル浮動小数点値に処理演算を行い、該複数の成分のそれぞれが、整数指数値および仮数値を含み、該処理演算が、
該複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、かつ、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
前記複数の成分のそれぞれに対して、前記指数シフト値Ｃが非ゼロである場合は、前記指数シフト値Ｃを前記成分の整数指数値に加算して、前記複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成する。
【０００６】
本発明は、上記問題を認識し、かつこれに対応する。本発明は、スケーリングされたベクトル成分の生成を含む、引数削減命令を提供し、これに対する指数値はすべて、同一の因子によってスケーリングされ、スケーリング後の最大の成分値が安全範囲内にあるようにする。この安全範囲は、最大の成分が、それ自体で乗じられるときに、使用されている浮動小数点表示をオーバーフローもアンダーフローもしないような範囲であり得る（かつ、すべてのベクトルのスカラー積が、浮動少数点表示をオーバーフローしない幾つかの長いベクトルを有する）。したがって、第１の所定値および第２の所定値の選択は、そのようなアンダーフローまたはオーバーフローを回避するように設定され得る。しかしながら、引数削減命令を使用して、異なる制限条件が第１の所定値および第２の所定値と関連付けられ得る、他の潜在的なハザードを回避し得ることが可能である。
【０００７】
オフセット−１２７が保存された指数値に適用される符号付き単精度浮動小数点値の場合、第１の所定値は１９０に設定され得、第２の所定値は６４に設定され得る。
【０００８】
アンダーフローは、引数削減命令の結果の成分内で起こり得る。実施例として、入力ベクトルは、１つの大きいベクトル成分と、２つのはるかに小さいベクトル成分とを含み得る。大きいベクトル成分が再度スケーリングされ、それ自体で乗算されるときにオーバーフローを回避し、次に、このスケーリングが、小さいベクトル成分内でアンダーフローをもたらす可能性がある。この場合、アンダーフローの対象となっているベクトル成分をゼロ値と置き換えてもよい。実際、入力ベクトルは、大きい成分によって非常に強く支配されているため、特に、正規化ベクトルのドット積が考慮される場合、より小さいベクトル内のアンダーフローと関連付けられる精度の喪失は、ごくわずかである。
【０００９】
所望の範囲内に入るように指数シフト値Ｃが選択され得る、多くの異なる方法があることを理解されたい。また、指数シフト値Ｃに対する単一の許容される値はなく、むしろ、一連の許容される値があることも理解されたい。引数削減命令の実装が、低レベルの回路および電力オーバーヘッドを招くことが望ましい。そのような望ましい実装の一実施例は、入力ベクトルの成分のそれぞれに対して、指数値の高次部分が抽出され、次に、これらの高次指数部分のうちの最大部分が識別される。識別された高次部分は、次に、最大の可能な高次部分よりも小さい２の因数である、所定値から差し引かれて、次に、各成分の高次部分のそれぞれに加算される値を生成し得る。この手技は、第１の所定値と第２の所定値との間にある指数シフト値を提供するという要件を満たしながら、計算的に単純であり、比較的小さい回路および電力オーバーヘッドで実装することができる。
【００１０】
この実装を利用する際に、派生した値を高次部分のうちのいずれかに加算した結果が、得られる高次部分においてアンダーフローをもたらし、加算された値が負である場合は、これは、結果の成分のうちの対応する１つをゼロの値と置き換えることによって、適切な精度レベルで処理され得る。
【００１１】
引数削減命令の信頼性を向上させるために、非数成分または無限大値のいずれかである入力浮動小数点ベクトルを形成する成分のうちのいずれかに応答して、十分に定義された適切な動作を有することが望ましい。複数の成分のうちのいずれかが、浮動小数点非数である場合、引数削減命令は、結果の成分のすべてが浮動小数点非数に設定されるという結果を生じる。入力浮動小数点ベクトルの成分のうちのいずれかが浮動小数点無限大値である場合、引数削減命令は、無限大成分に対応する任意の成分を大きさ１の値に設定するという結果、および浮動小数点無限大の符号のそれに適合する符号を生成する一方で、無限大値に対応しないすべての残りの結果の成分は、大きさゼロの浮動小数点値を有するように設定される。
【００１２】
入力成分から適切にスケーリングされた結果の成分を生成するとともに、引数削減命令は、他の結果の値も生成し得ることを理解されたい。特定の実装は、結果の成分以外に、引数削減命令からの追加の結果を伝えるために使用可能な追加の結果のチャネルを有してもよく、これらの追加の結果は、別の命令を実行する必要性を回避できる場合、全体処理効率を向上し得る。そのような状況の一実施例は、引数削減命令が、複数の結果成分のスカラー積によってもたらされるものと同一の値を有する結果のスカラー積も生成する場合である。
【００１３】
前述したように、引数削減命令に関する１つの例示的使用例は、複数の正規化成分で形成される正規化ベクトル浮動小数点値を生成する場合である。引数削減命令は、引数削減命令に続いて、結果の成分のスカラー積によって得られるものと同一の値を有する、結果のスカラー積を生成する機能を果たす、１つまたは複数のさらなる命令のシーケンスによって、その結果の成分を生成することによって、これを促進し、スカラー積の逆数平方根を生成して、各結果の成分に対して、結果の成分に逆数平方根を掛けることによって、対応する正規化された結果の成分を生成する。
【００１４】
引数削減命令は、処理装置の任意の形態、例えば、汎用プロセッサで提供され得るが、ベクトル正規化がしばしば必要とされるグラフィクス処理ユニット内に特定のユーティリティを有する。
【００１５】
別の態様から見ると、本発明は、データを処理するための装置であって、
データ値に処理演算を行うための処理手段と、
プログラム命令をデコードして、該処理回路を制御するための制御信号を生成し、該プログラム命令によって特定される処理演算を行うデコーダ手段と、を備え、
該デコーダ手段が、引数削減命令に応答して、該処理手段を制御するように制御信号を生成し、複数の成分を有するベクトル浮動小数点値に処理演算を行い、該複数の成分のそれぞれが、整数指数値および仮数値を含み、該処理演算が、
該複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、かつ（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
該複数の成分のそれぞれに対して、該指数シフト値Ｃが非ゼロである場合は、該指数シフト値Ｃを該成分の整数指数値に加算して、該複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成することを含む、装置を提供する。
【００１６】
さらなる態様から見ると、本発明は、
引数削減命令に応答して、複数の成分を有するベクトル浮動小数点に処理演算を行うステップであって、該複数の成分のそれぞれは、整数指数値と仮数値とを含み、該処理演算は、
該複数の成分の最大整数指数値Ｂを識別
することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
該複数の成分のそれぞれに対して、該指数シフト値Ｃが非ゼロである場合は、該指数シフト値Ｃを該成分の整数指数値に加算して、該複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成するステップを含む、データを処理する方法を提供する。
【００１７】
さらなる態様から見ると、本発明は、持続性形態を有し、プログラム命令に応答し、かつ、データ処理を行うように、データ処理装置を制御するためのコンピュータプログラムを保存するコンピュータプログラム製品であって、該コンピュータプログラムは、複数の成分を有するベクトル浮動小数点値に処理演算を行うように、該データ処理装置を制御するための引数削減命令を含み、該複数の成分のそれぞれが、整数指数値と仮数値とを含み、該処理演算が、
該複数の成分の最大整数指数値Ｂを識別することと、
（Ｂ＋Ｃ）が第１の所定値Ｅｄｏｔｍａｘ未満であり、かつ、（Ｂ＋Ｃ）が第２の所定値Ｅｄｏｔｍｉｎよりも大きくなるように、整数値である指数シフト値Ｃを選択することと、
該複数の成分のそれぞれに対して、該指数シフト値Ｃが非ゼロである場合は、該指数シフト値Ｃを該成分の整数指数値に加算して、該複数の結果の成分のうちの１つを生成することと、によって得られるものと同一の複数の結果の成分を生成することと、を含む、コンピュータプログラム製品を提供する。
【００１８】
本発明の別のクラスの可能な実装は、汎用コンピュータが、ソフトウェアによって制御され、上述される引数削減命令の実行を支持する、仮想マシン実行環境を提供する、仮想マシン実装であることを理解されたい。
【００１９】
本発明の上記および他の目的、特徴、および利点は、付随する図面と併せて読まれるべき例証的実施形態の以下の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００２０】
【図１】引数削減命令の実行を支持するグラフィクス処理ユニットコアを概略的に説明する。
【図２】ベクトル正規化演算を説明する図である。
【図３】単精度浮動小数点数の形式を概略的に説明する図である。
【図４】第１の形態の引数削減命令の作用を概略的に説明する図である。
【図５】第２の形態の引数削減命令の作用を概略的に説明する図である。
【図６】引数削減命令を実行するときに、適切なレベルの指数スケーリングを選択および適用する１つの方法を概略的に説明するフロー図である。
【図７】非数例外処理を概略的に説明する図である。
【図８】無限大値例外処理を概略的に説明するフロー図である。
【図９】引数削減命令を含むプログラム命令のシーケンスを使用して行われる、ベクトル正規化を概略的に説明するフロー図である。
【図１０】本手技の仮想マシン実装を提供するために使用され得る種類の汎用コンピュータを概略的に説明する図である。
【発明を実施するための形態】
【００２１】
図１は、メモリ４に連結されるグラフィクス処理ユニットコア２を示す。グラフィクス処理ユニットコア２は、浮動小数点演算パイプライン６、浮動小数点レジスタ８のバンク、および命令デコーダ１０を含む。図１におけるグラフィクス処理ユニットコア２の図解は、簡素化されていること、および実際に、多くのさらなる処理素子、例えば、ロードストアパイプライン、テクスチャリングパイプライン、キャッシュメモリ等が提供されることを理解されたい。
【００２２】
メモリ４は、グラフィクスプログラム１２およびグラフィクスデータ１４を保存する。実際に、グラフィクスプログラム１２からのプログラム命令は、グラフィクス処理ユニットコア２によってフェッチされ、命令デコーダ１０に供給される。命令デコーダ１０は、これらのプログラム命令をデコードし、浮動小数点演算パイプライン６および浮動小数点レジスタ８のバンクの形態の処理回路に適用される制御信号１６を生成し、この処理回路６、８を構成および制御して、関与するプログラム命令によって特定される所望の処理演算を行う。この処理演算は、浮動小数点演算パイプライン６による操作のために、浮動小数点レジスタ８のバンクにロードおよび保存される、グラフィクスデータ１４からのデータ値に関して行われる。
【００２３】
当業者によって理解されるように、受信されるプログラム命令に応じて、命令デコーダ１０は、制御信号１６を生成して、特定の所望の処理演算を行うように処理回路６、８を構成する。これらの処理演算は、多様な異なる形態、例えば、乗算、加算、論理演算、先行する演算のベクトル変異等を取り得る。本手技に従って、命令デコーダ１０は、メモリ４からグラフィクスプログラム１２の一部としてフェッチされた引数削減命令に応答して、上述されるような処理演算を行う。これらの所望の処理演算を行う回路は、多様な異なる形態を有し得、本手技は、これらの異なる形態のすべてを包含することを理解されたい。特に、特定の数学的演算のシーケンスを参照して説明される結果の値は、同一の結果の値を生成する数学的演算の異なるセットに従うことによって生成され得る。これらの変形は、本手技内に含まれる。
【００２４】
図２は、ベクトル正規化演算を説明する。入力ベクトル１８は、正規化演算の対象となり、大きさ１の正規化されたベクトル２０を生成する。これは、ライン２２において示されるように、入力ベクトル１８を入力ベクトルの大きさで割ることによって達成され得る。入力ベクトルの大きさは、順に、入力ベクトル１８のドット積の平方根として計算され得る。これは、ライン２４において説明される。このアプローチの問題は、入力ベクトル１８のドット積が、浮動小数点アンダーフローまたは浮動小数点オーバーフローの対象となり得ることである。これらのいずれかが起こる場合、少なくとも最終結果における精度の喪失またはオーバーフローもしくはアンダーフローに起因するエラーの可能性がある。
【００２５】
本手技は、入力ベクトルがスケーリングされる場合、ライン２４に示される式の分子および分母が、いずれも同一因子によってスケーリングされるという認識を利用する。入力ベクトル１８に適用され得る、数学的に便宜的であり、低電力、低オーバーヘッド形態のスケーリングは、２のべき乗による入力ベクトル１８のスケーリングに対応する指数値の変化である。このスケーリングは、正規化ベクトル２０に影響しないため、選択されるスケーリング値は、オーバーフローまたはアンダーフローからドット積を保護するようなものであり得る。したがって、利用される指数シフト値Ｃ（入力ベクトル成分すべての指数値に加算されるか、または除算される数）は、引数削減命令の対象となっているベクトルから計算されるドット積が、最終ドット積結果に対して、悪影響とともに、オーバーフローまたはアンダーフローをもたらさないことを保証するような範囲内で選択され得る。
【００２６】
図３は、単精度浮動小数点数の形式を概略的に説明する。この形式は、当業者には身近である。特に、浮動小数点単精度数は、符号を表す単一ビットＳ、指数値（単精度においてオフセット１２７を対象とする）を表す８ビットＥ、および、２３−ビット仮数値Ｍ（仮数内には暗黙的に先導する１がある）で形成される３２−ビット数である。以下で論じられる実施例は、単精度浮動小数点数に作用する。しかしながら、本手技は、そのような単精度浮動小数点数に制限されず、例えば、必要に応じて、倍精度浮動少数点数（または他の精度浮動少数点数と使用されてもよい。さらに、浮動小数点が表される特定の形式は異なってもよいが、図３に示される形式が広く使用される。
【００２７】
図４は、引数削減命令ＦＲＥＤＵＣＥ４の第１の実施例を説明する。この命令は、４成分入力ベクトルを取り、４つの結果の成分を有する出力を生成する。結果の成分のそれぞれは、Ｃの指数値シフトを受けている。これは、入力成分のそれぞれに２Ｃの値を掛けることに対応する。
【００２８】
この引数削減命令においてＣに選択される値は、許容範囲内で異なり得る。この許容範囲内のＣの任意の値は許容され得る。この範囲は、入力成分の中で最大指数値である値Ｂを識別し、次に、Ｂ＋Ｃが１９０未満であり（値Ｅｄｏｔｍａｘに対応する）、Ｂ＋Ｃが６４より大きくなる（Ｅｄｏｔｍｉｎに対応する）ように、Ｃを整数として設定することによって定められる。この実施例における値１９０は、第１の所定値に対応し、値６４は、第２の所定値に対応する。Ｃの値は、Ｂ＋Ｃが第１の所定値と第２の所定値との間にあるような整数となるように選択される。これは、最大の結果の成分の大きさを、オーバーフローおよびアンダーフローの恐れがない範囲に設定する。許容範囲の終点は、オーバーフローからの多くの結果の成分の倍数の合計で構成される、ドット積を保護することが望ましい実施形態において調整されてもよい（このリスクは、ベクトル長が増加するにつれて増大する）。
【００２９】
図５は、第２の例示的引数削減命令ＦＤＯＴ３Ｒを説明する。この引数削減命令は、３成分入力ベクトルを取り、３つのスケーリングされた結果成分を、スケーリングされた結果の成分のドット積と一緒に生成する。スケーリングは、Ｂ＋Ｃが許容範囲内にあることを保証するために選択される値Ｃに関して前述したように、指数シフトによって行われる。成分のスカラードット積も生成する引数削減命令ＦＤＯＴ３Ｒのこの変数は、結果の成分のスカラードット積が、後次の計算で使用することが望ましい場合、例えば、３成分入力ベクターを正規化する場合に有利である。
【００３０】
図６は、１つの例示的実施形態において、指数シフト値Ｃ（指数変化値）がどのように選択および適用され得るかを概略的に説明するフロー図である。この実施例は、回路および電力オーバーヘッドが有利に低い。ステップ２６において、任意の非数成分に対して、入力ベクトルが確認される。任意の非数成分が検出された場合、非数処理は、ステップ２８においてトリガされ、引数削減命令の実行は終了する。ステップ２６において、非数成分が検出されない場合、ステップ３０は、入力ベクトル内に任意の無限大成分が存在するか否かを検出する機能を果たす。任意の無限大成分が存在する場合、ステップ３２は、無限大処理をトリガする機能を果たし、引数削減命令の実行は完了する。
【００３１】
入力ベクトルが、ステップ２６および３０においてチェックされるように、非数の成分および無限大成分を含まない場合、処理はステップ３４に進み、各入力成分の指数値の上限Ｐビットが抽出されて、値Ｅｈｏｉを形成する。ステップ３６は、次に値Ｂを、ステップ３４において抽出されたＥｈｏｉ値の最大値に設定する。ステップ３８は、指数シフト値Ｃを２（Ｐ−１）−Ｂに設定する。この決定／選択された指数シフト（倍率）は、次に、フロー図の残りにおいて、すべての入力ベクトル成分に適用される。ステップ４０において、指標値ｉは、０に設定される。ステップ４２は、次に、現在のｉ値に対応するベクトル成分のＥｈｏｉ値を選択し、ステップ３８に由来するＣの値をこれに加算する。ステップ４４は、更新されたＥｈｏｉ値が、ゼロ未満であるか否かを決定する。値がゼロ未満である場合、ステップ４６は、対応する結果のベクトル成分ｖｉをゼロに設定する。ステップ４４の決定が、Ｅｈｏｉはゼロ未満でないか、またはステップ４６後である場合、処理はステップ４８に進み、決定は、調整を必要とする任意の入力ベクトル成分ｖｉがさらに存在するか否かに関して行われる。そのような成分がさらに存在する場合、ステップ５０は、ｉ値を増分し、処理はステップ４２に戻る。
【００３２】
図７は、図６のステップ２８に対応する非数例外処理を説明する。非数処理は、ステップ５２において、すべての結果の成分を非数値に設定することによって行われ得る。
【００３３】
図８は、無限大値例外処理を概略的に説明するフロー図である。当業者に知られるように、浮動小数点無限大値は、負の無限大または正の無限大であってもよい。図８の全体作用は、負の無限大値に対応する成分を−１に設定し、正の無限大値に対応する成分を＋１に設定することである。正の無限大値または負の無限大値のいずれにも対応しない他の結果の成分は、すべて大きさゼロとなるように設定される。
【００３４】
ステップ５４は、ｉ値を初期化する。ステップ５６は、現在のｉ値の入力ベクトル成分が、正の無限大であるか否かを決定する。ステップ５６において、入力ベクトル成分が正の無限大であると決定された場合、ステップ５８は、対応する結果のベクトル成分を＋１に設定する。次に、処理はステップ６０に進み、処理すべき任意の入力ベクトル成分がさらに存在する場合、ステップ６２は、ｉ値を増分し、処理はステップ５６に戻る。処理すべき入力ベクトル成分がない場合、無限大例外処理は完了する。
【００３５】
ステップ５６において、現在の入力ベクトル成分ｖｉが正の無限大でないと決定された場合、ステップ６４は、この値が負の無限大であるか否かを確認する。値が負の無限大である場合、ステップ６６は、対応する結果の成分を−１に設定する。
【００３６】
ステップ５６またはステップ６４のいずれも無限大値を検出しなかった場合、ステップ６８は、結果のベクトル内の任意の非無限大成分を、大きさ０を有するように設定する機能を果たす。
【００３７】
図９は、ベクトル正規化演算を行うように実行され得る、一連の命令を概略的に示すフロー図である。ステップ７０は、スケーリングされたベクトル成分（結果の成分）を生成する。これは、４成分入力ベクトルの場合、第１の例示的引数削減命令ＦＲＥＤＵＣＥ４に対応する命令を実行することによって達成され得る。代替として、３成分入力ベクトルの場合、ステップ７０は、第２の例示的引数削減命令ＦＤＯＴ３Ｒの実行の一部として達成されてもよい。削減命令ＦＤＯＴ３Ｒの第２の実施例の使用は、ステップ７０およびステップ７２の両方を許可し、単一命令で計算されるスケール成分のスカラー積（結果の成分のドット積）を生成する。４成分ベクトルが処理されている場合、個別のベクトル掛けるＶＭＵＬを使用して、ステップ７２のスカラー積を計算してもよい。
【００３８】
ステップ７４は、スカラー積の逆数平方根を生成する。ステップ７６は、次に、スケーリングされた成分（結果の成分）のそれぞれにステップ７６において生成された逆数平方根を掛ける。図９の処理と図２における所望の計算の数学的図解との比較は、図９の命令シーケンスの実行が、図２の最終ラインにおいて示される値の決定に対応することを示す。
【００３９】
図１０は、使用され得る仮想マシン実装を説明する。前述の実施形態は、関与する技術を支持する特定の処理ハードウェアを操作するための装置および方法に関して、本発明を実装するが、いわゆるハードウェアデバイスの仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、ホストプロセッサ５３０上で作動し、仮想マシンプログラム５１０を支持するホストオペレーティングシステム５２０を実行する。通常、大型の強力なプロセッサは、適度な速さで実行する仮想マシン実装を提供する必要があるが、そのようなアプローチは、適合性または再利用目的で、別のプロセッサに由来するコードを実行することが望ましい場合等、特定の状況において正当化され得る。仮想マシンプログラム５１０は、アプリケーションプログラムインターフェースを、仮想マシンプログラム５１０によってモデル化されているデバイスである、リアルハードウェアによって提供される、アプリケーションプログラムインターフェースと同一である、アプリケーションプログラム５００に提供する。したがって、上述されるメモリアクセスの制御を含む、プログラム命令は、仮想マシンプログラム５１０を使用して、それらの仮想マシンハードウェアとの相互作用をモデル化することによって、アプリケーションプログラム５００内から実行されてもよい。
【００４０】
本発明の例証的実施形態は、添付の図面を参照して、本明細書において詳細に説明されたが、本発明は、それらの正確な実施形態に限定されないこと、および添付の請求項によって定義されるような本発明の範囲および精神から逸脱することなく、当業者によって、そこに様々な変更および修正を行うことができることを理解されたい。
【符号の説明】
【００４１】
５００  アプリケーションプログラム
５１０  仮想マシンプログラム
５２０  ホストオペレーティングシステム
５３０  ホストプロセッサ
【図１】
0005731937.tif 000002
【図２】
0005731937.tif 000003
【図３】
0005731937.tif 000004
【図４】
0005731937.tif 000005
【図５】
0005731937.tif 000006
【図６】
0005731937.tif 000007
【図７】
0005731937.tif 000008
【図８】
0005731937.tif 000009
【図９】
0005731937.tif 000010
【図１０】
0005731937.tif 000011