(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-27
(45)【発行日】2024-04-04
(54)【発明の名称】混合精度演算のプロセッシングユニット
(51)【国際特許分類】
G06F 9/302 20180101AFI20240328BHJP
G06F 7/483 20060101ALI20240328BHJP
G06F 9/38 20180101ALI20240328BHJP
【FI】
G06F9/302 A
G06F7/483
G06F9/38 370C
(21)【出願番号】P 2021537919
(86)(22)【出願日】2020-03-10
(86)【国際出願番号】 US2020021853
(87)【国際公開番号】W WO2020190570
(87)【国際公開日】2020-09-24
【審査請求日】2023-02-17
(32)【優先日】2019-03-15
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-10-02
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ビン ホー
(72)【発明者】
【氏名】マイケル マントル
(72)【発明者】
【氏名】ジャーシェン チェン
【審査官】漆原 孝治
(56)【参考文献】
【文献】米国特許出願公開第2018/0113708(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/302
G06F 7/483
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
プロセッシングユニット[100]において、第1の命令[101]を復号して、
オペコードによって指定される第1の多精度演算[105]を識別することと、
算術論理ユニット(ALU)[104]において、前記オペコードに基づいて、利用可能な複数の実行パスから第1の実行パスを選択することであって、前記複数の実行パスの各々は異なる多精度演算を実行する、ことと、
前記ALUにおいて、異なる精度のオペランドを使用して第1の数学演算を実行することによって、前記第1の多精度演算を実行することと、を含む、
方法。
【請求項2】
前記第1の数学演算は、浮動小数点積和演算を含む、
請求項1の方法。
【請求項3】
前記浮動小数点積和演算は、第1の精度のN個のオペランドの2つのセットを乗算し、前記第1の精度とは異なる第2の精度のオペランドを加算する、
請求項2の方法。
【請求項4】
Nは、少なくとも2である、
請求項3の方法。
【請求項5】
Nは、少なくとも4である、
請求項4の方法。
【請求項6】
前記第1の数学演算は、整数積和演算を含む、
請求項1の方法。
【請求項7】
前記プロセッシングユニットにおいて、第2の命令を復号して、前記第1の多精度演算とは異なる第2の多精度演算を識別することと、
前記ALUにおいて、異なる精度のオペランドを使用して第2の数学演算を実行することによって、前記第2の多精度演算を実行することであって、前記第2の数学演算は、前記第1の数学演算とは異なる、ことと、をさらに含む、
請求項1の方法。
【請求項8】
前記第2の多精度演算を実行することは、前記ALUの第2の実行パス[107]
によって前記第2の多精度演算を実行することを含み、
前記第2の実行パスは、前記第1の実行パスとは異なる、
請求項7の方法。
【請求項9】
第1の命令[101]を復号して、
オペコードによって指定される第1の多精度演算[105]を識別する復号ステージ[102]と、
前記オペコードに基づいて、利用可能な複数の実行パスから第1の実行パスを選択する算術論理ユニット(ALU)[104]であって、異なる精度のオペランドを使用して第1の数学演算を実行することによって、
前記第1の実行パスによって前記第1の多精度演算を実行する算術論理ユニット(ALU)[104]と、を備え
、
前記複数の実行パスの各々は異なる多精度演算を実行する、
プロセッシングユニット[100]。
【請求項10】
前記第1の数学演算は、浮動小数点積和演算を含む、
請求項9のプロセッシングユニット。
【請求項11】
前記浮動小数点積和演算は、第1の精度のN個のオペランドの2つのセットを乗算し、前記第1の精度とは異なる第2の精度のオペランドを加算する、
請求項10のプロセッシングユニット。
【請求項12】
Nは、少なくとも2である、
請求項11のプロセッシングユニット。
【請求項13】
Nは、少なくとも4である、
請求項12のプロセッシングユニット。
【請求項14】
前記第1の数学演算は、整数積和演算を含む、
請求項9のプロセッシングユニット。
【請求項15】
前記復号ステージは、第2の命令を復号して、前記第1の多精度演算とは異なる第2の多精度演算を識別し、
前記ALUは、異なる精度のオペランドを使用して第2の数学演算を実行することによって、前記ALUにおいて前記第2の多精度演算を実行し、
前記第2の数学演算は、前記第1の数学演算とは異なる、
請求項9のプロセッシングユニット。
【発明の詳細な説明】
【背景技術】
【0001】
プロセッサは、指定された演算をプロセッサの代わりに実行するように特別に設計及び構成された1つ以上のプロセッシングユニットを採用する。例えば、或るプロセッサは、グラフィックスプロセッシングユニット(GPU)を採用し、他の並列プロセッシングユニットは、典型的には、グラフィックス処理演算、ベクトル処理演算及び他の計算処理動作を実行するように、複数のデータセットに対して単一のプログラムの複数のインスタンスを同時に実行する複数の処理要素(プロセッサコア又は計算ユニットとも呼ばれる)を実装している。プロセッサの中央処理装置(CPU)は、GPUにコマンドを提供し、GPUのコマンドプロセッサ(CP)は、コマンドを1つ以上の演算に復号する。1つ以上の算術論理ユニット(ALU)等のようなGPUの実行ユニットは、グラフィックス処理演算及びベクトル処理演算を実行するためにオペレーションを実行する。
【0002】
添付図面を参照することによって、本開示をより良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面において同一の符号を使用することは、同一又は類似の要素を示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、混合精度演算のための演算コードを採用するプロセッシングユニットの一部のブロック図である。
【
図2】いくつかの実施形態による、
図1のプロセッシングユニットの混合精度浮動小数点実行パスのブロック図である。
【
図3】いくつかの実施形態による、
図1のプロセッシングユニットの別の混合精度浮動小数点実行パスのブロック図である。
【
図4】いくつかの実施形態による、
図1のプロセッシングユニットの混合精度整数実行パスのブロック図である。
【発明を実施するための形態】
【0004】
図1~
図4は、並列プロセッシングユニット(この例では、グラフィックスプロセッシングユニット(GPU))が、混合精度数学演算を実行するために、関連する演算コード(オペコード)を用いて演算を実行する技術を示している。GPUは、異なる実行パスを有する算術論理ユニット(ALU)を含み、各実行パスは、異なる混合精度演算を実行する。演算を指定する演算コードを指定したことに応じてALUで混合精度演算を実行することによって、GPUは、指定された数学演算の精度を効率的に向上させると共に、実行オーバヘッドを低減させる。
【0005】
例えば、GPUは、命令を実行する過程で、命令に関連する演算コードによって指定された数学演算を実行する。演算コードは、数学演算に使用されるオペランドのサイズを指定することによって、数学演算の精度を少なくとも部分的に示す。例えば、或る演算コードは、16ビットオペランドで実行される16ビット浮動小数点演算を指定する演算コードと、32ビットオペランドで実行される32ビット演算を指定するオペコードがある。従来、演算で使用される全てのオペランドは、同じサイズのオペランドであるため、同じ精度のオペランドである。しかしながら、或るベクトル処理数学演算等の或る演算では、同じサイズを有するオペランドを使用すると、演算の全体的な精度の損失をもたらす。例えば、全てのオペランドが16ビットに制限されるドット積演算の結果は、いくつかのアプリケーションに対して比較的低い精度を有する。本明細書で説明する技術を使用して、GPUは、対応する演算コードに応じて、混合精度オペランドを用いた数学演算を実行し、それによって、増加した数学的精度を効率的にサポートする。
【0006】
図1は、いくつかの実施形態による、混合精度演算をサポートするGPU100を示す図である。説明のために、GPU100は、電子デバイスの代わりにタスクを実行するように、命令のセット(例えば、コンピュータプログラム)を実行するプロセッサの一部であることが想定される。よって、異なる実施形態では、GPU100は、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、タブレット、スマートフォン、ゲームコンソール等の電子デバイスの一部である。更に、プロセッサは、命令のセットを実行する中央処理装置(CPU)を含むことが想定される。
【0007】
GPU100は、CPUに代わって、指定された演算を実行するように設計及び製造されている。特に、GPU100は、CPUに代わって、グラフィックス処理演算及びベクトル処理演算を実行する。例えば、いくつかの実施形態では、CPUは、命令を実行する過程で、グラフィックス処理演算及びベクトル処理演算に関連するコマンドを生成する。CPUは、コマンドをGPU100に提供し、GPU100は、コマンドプロセッサ(図示省略)を使用してコマンドを命令のセットに復号して、GPU100で実行する。
【0008】
GPU100は、命令の実行を容易にするために、復号ステージ102及びALU104を含む。いくつかの実施形態では、復号ステージ102は、命令バッファから命令をフェッチするフェッチステージと、追加の復号ステージと、ALU104に加えた実行ユニットと、実行された命令を退避(リタイア)する退避ステージと、を含む、命令実行をサポートする追加のステージを含む命令パイプライン(図示省略)の一部である。復号ステージ102は、フェッチステージから受信した命令(例えば、命令101)を1つ以上の演算(例えば、演算105)に復号し、演算のタイプに従って、演算を1つの実行ユニットにディスパッチする回路を含む。いくつかの実施形態では、各演算は、対応する演算コードによって識別され、復号ステージは、演算コードに基づいて実行ユニットを識別し、演算コードを示す情報を実行ユニットに提供する。実行ユニットは、演算コード又はそれに基づく情報を用いて、実行される演算のタイプを決定し、示された演算を実行する。
【0009】
例えば、或る演算及び関連する演算コードは、算術演算を示す。復号ステージ102は、受信した命令が算術演算を示していることを識別したことに応じて、演算のための演算コードを決定し、算術演算に使用されるオペランド等の他の情報と共に、演算コードをALU104に提供する。ALU104は、レジスタファイル110に記憶された、示されたオペランドを使用して、演算コードによって示された演算を実行する。いくつかの実施形態では、ALU104によって提供される演算は、オペランドの精度及び実行される演算を示す。例えば、いくつかの実施形態では、復号ステージ102は、16ビットオペランドを使用する16ビット乗算演算のための1つの演算(及び、対応する演算コード)を提供し、32ビットオペランドを使用する32ビット乗算演算のための別の演算(及び、対応する演算コード)を提供する。
【0010】
また、復号ステージ102は、混合精度数学演算のための演算を、対応する演算コードと共に生成し、混合精度演算は、異なるサイズのオペランドを使用する。例えば、いくつかの実施形態では、復号ステージは、対応する命令に基づいて、1つのサイズ(例えば、16ビット)のオペランドを乗算し、その結果を異なるサイズ(例えば、32ビット)のオペランドと累算する積和(MACC)演算を生成する。いくつかの実施形態では、これらの演算は、1)4つの16ビット浮動小数点オペランドの2つのセットを乗算し、乗算結果を相互に及び32ビット浮動小数点オペランドに加算する混合精度ドット積演算(DOT4_F32_F16と示される)と、2)2つの16ビット浮動小数点オペランドの2つのセットを乗算し、乗算結果を相互に及び32ビット浮動小数点オペランドに加算する混合精度ドット積演算(DOT2_F32_F16と示される)と、3)4つの16ビット整数オペランドの2つのセットを乗算し、乗算結果を相互に及び32ビット整数オペランドに加算する混合精度ドット積演算(DOT_I32_I16と示される)と、を含む。
【0011】
ALU104は、各混合精度演算を実行するための異なる実行パスを含む。いくつかの実施形態では、異なる実行パスは、レジスタ、加算器、乗算器等の電子コンポーネント又はモジュールを共有する。他の実施形態では、異なる実行パスの一部又は全ては、独立しており、算術回路又はモジュールを共有しない。図示した実施形態では、ALU104は、DOT4_F32_F16演算を実行するためのパス106と、DOT2_F32_F16演算を実行するためのパス107と、DOT4_I32_I16演算を実行するためのパス108と、を含む。ALU104は、混合精度演算のための演算コード又は他のインジケータを受信したことに応じて、対応する実行パスを使用して演算を実行し、結果をレジスタファイル110のレジスタに記憶する。いくつかの実施形態では、各混合精度演算は、単一の演算コードによって指定される。すなわち、ALU104は、混合精度演算を実行するために複数の演算コード又は演算を必要とせず、処理オーバヘッドを低減させると共に、精度の向上をサポートする。
【0012】
図2は、いくつかの実施形態による、DOT4_F32_F16実行パス106を示す図である。上述したように、DOT4_F32_F16演算は、4つの16ビットオペランド(説明のために、A
0、A
1、A
2、A
3として示されている)の1つのセットを、4つの16ビットオペランド(説明のために、B
0、B
1、B
2、B
3として示されている)の別のセットの対応するものと乗算し、その結果を第3の32ビットオペランド(Cとして示されている)に加算する。よって、DOT4_F32_F16演算は、以下の式によって表される。
D.f32=A.f16[0]*B.f16[0]+A.f16[1]*B.f16[1]+A.f16[2]*B.f16[2]+A.f16[3]*B.f16[3]+C.f32
【0013】
更に、DOT_F32_F16演算の関数は、以下の疑似コードによって表される。
【表1】
【0014】
実行パス106は、演算を実行するために、オペランドA0、A1、A2、A3及びオペランドB0、B1、B2、B3を記憶するための16ビットレジスタ(例えば、レジスタ212)のセットと、オペランドCを記憶するための32ビットレジスタと、を含む。これらのオペランドの各々は、仮数及び指数を含む浮動小数点数として表される。実行パス106は、加算器(例えば、加算器216)及び乗算器(例えば、乗算器218)のセットを更に含み、各加算器は、A及びBのオペランドの対応するペアの指数を加算し、各乗算器は、A及びBのオペランドの対応するペアの仮数を乗算する。よって、例えば、加算器216は、オペランドA0及びB0の指数を加算し、乗算器218は、オペランドA0及びB0の仮数を乗算する。
【0015】
実行パス106は、指数比較モジュール220及び仮数ソート整列(mantissa sort and align)モジュール222を更に含む。指数比較モジュール220は、加算された指数を加算器から受信し、指数のミスマッチを判別するために合計を比較し、以下に説明する後続の正規化のために、結果D.f32の仮の指数値を決定する。指数比較モジュール220は、識別されたミスマッチを示す制御シグナリングを仮数ソート整列モジュール222に提供する。仮数ソート整列モジュール222は、乗算器から、及び、指数比較モジュールによって提供される情報に基づいて、仮数積を受信する。仮数ソート整列モジュール222は、指数ミスマッチ情報に基づいて仮数積をシフトし、その結果、各仮数積は、シフトした後に、同じ指数値によって表される。それによって、仮数ソート整列モジュール222は、加算のために仮数積を整列する。
【0016】
実行パス106は、整列された仮数積を加算するために、結合加算器224を含む。いくつかの実施形態では、結合加算器224は、精度を高めるために、A、B、Cのオペランドよりも大きいビットサイズを有する値を加算する。例えば、いくつかの実施形態では、A及びBのオペランドは16ビット値であり、Cのオペランドは32ビット値であり、仮数ソート整列モジュール222は82ビット幅の仮数値を生成する。これらの実施形態では、結合加算器224は、82ビット(又は、これよりも大きい)の値を加算することが可能であり、それによって、仮数の加算の間の精度の損失を防止する。
【0017】
結合加算器224は、仮数値を加算してD.f32の仮数の仮の値を生成し、仮の仮数値を正規化モジュール226に提供し、正規化モジュール226は、仮の仮数値を正規化する。例えば、いくつかの実施形態では、正規化モジュール226は、仮数内の先行ゼロを除去するために、仮の仮数値をシフトする。いくつかの実施形態では、正規化モジュール226は、仮の仮数の整数部分を指定された値(例えば、1)にするように、仮の仮数を調整する。正規化モジュールは、仮数に対して行われた調整に基づいて、指数比較モジュール220によって提供される仮の指数値を調整して、仮の仮数の全体値を保持する。また、正規化モジュールは、仮数ソート整列モジュール222から受信した末尾ビット229に基づいて、仮数のスティッキビット(sticky bit)を設定する。
【0018】
正規化モジュール226は、D.f32について調整された仮数値及び指数値を、丸めモジュール228に提供する。丸めモジュール228は、D.f32を最も近い偶数値に丸める等のように、指定された丸めルールに基づいて仮数値を丸め、それによって、D.f32の最終値を生成する。丸めモジュール228は、最終的なD.f32値を、受信した演算によって示されたレジスタに記憶するためにレジスタファイル110に提供する。
【0019】
図3は、いくつかの実施形態による、DOT2_F32_F16実行パス107を示す図である。上述したように、DOT2_F32_F16演算は、2つの16ビットオペランド(説明のために、A
0及びA
1として示されている)の1つのセットを、2つの16ビットオペランド(説明のために、B
0及びB
1として示されている)の別の対応するセットのものと乗算し、結果を第3の32ビットオペランド(Cとして示されている)に加算する。よって、DOT2_F32_F16演算は、以下の式によって表される。
D.f32=A.f16[0]*B.f16[0]+A.f16[1]*B.f16[1]+C.f32
【0020】
演算を実行するために、実行パス107は、オペランドA0、A1、B0、B1及びオペランドCを記憶するための32ビットレジスタのセット(レジスタ320,321,323)を含む。いくつかの実施形態では、オペランドは、実行される特定の命令又は演算に応じて、レジスタ320,321,323のうち異なるレジスタに記憶される。例えば、DOT2_F32_F16演算の一例では、レジスタ320はAのオペランドを記憶し、レジスタ321はBのオペランドを記憶し、レジスタ323はCのオペランドを記憶する。DOT2_F32_F16演算の別の例では、レジスタ320はCのオペランドを記憶し、レジスタ321はBのオペランドを記憶し、レジスタ323はAのオペランドを記憶する。更に、DOT2_F32_F16演算の異なる例では、32ビットレジスタの異なる部分は、16ビットオペランドの異なるものを記憶する。例えば、ある場合には、A0のオペランドは、レジスタ320,321,323のうち何れかの上位16ビットに記憶され、他の場合には、A0のオペランドは、レジスタ320,321,323のうち何れかの下位16ビットに記憶される。実行パス106は、受信した演算によって提供される制御情報に基づいて、レジスタ320,321,323からオペランドを選択するためのオペランド選択モジュールを更に含む。
【0021】
各オペランドは、仮数及び指数を含む浮動小数点数として表される。実行パス107は、例えば、16ビットオペランドの指数値を変換する等のように16ビットオペランドを32ビットオペランドに変換することによって、16ビットオペランドA0、A1、B0、B1を事前に正規化するための事前正規化モジュール(例えば、事前正規化モジュール324)のセットを含む。また、実行パス107は、Cのオペランドが非正規化値である場合にCの値をゼロにフラッシュする非正規化フラッシュモジュール326を含む。
【0022】
A及びBのオペランドを乗算するために、実行パス107は、ANDゲート(例えば、ANDゲート328)のセット、加算器(例えば、加算器330)のセット、及び、乗算器(例えば、乗算器332)のセットを含む。各ANDゲートは、事前に正規化されたA及びBのオペランドの対応するペアの符号ビットに対して論理AND演算を実行して、対応する乗算演算のための符号ビットを生成する。よって、例えば、ANDゲート328は、事前に正規化されたオペランドA0及びB0の符号ビットに対してAND演算を実行して、A0*B0演算のための符号ビットを生成するする。各加算器は、事前に正規化されたA及びBのオペランドの対応するペアの指数を加算し、各乗算器は、事前に正規化されたA及びBのオペランドの対応するペアの仮数を乗算する。よって、例えば、加算器216は、事前に正規化されたオペランドA0及びB0の指数を加算し、乗算器218は、事前に正規化されたオペランドA0及びB0の仮数を乗算する。
【0023】
ANDゲート、乗算器及び加算器によって生成された積を加算するために、実行パス107は、結合加算器334を含む。いくつかの実施形態では、精度を高めるために、結合加算器224は、A、B、Cのオペランドよりも大きいビットサイズを有する値を加算する。例えば、いくつかの実施形態では、A及びBのオペランドは16ビット値であり、Cのオペランドは32ビット値であり、加算器は7ビット指数を生成し、乗算器は22ビット仮数積を生成する。これらの実施形態では、結合加算器334は、52ビットの値を加算することが可能であり、それによって、仮数の加算の間の精度の損失を防止する。
【0024】
結合加算器224は、仮数積値を加算してD.f32の仮数についての仮の値を生成し、仮の仮数値及び指数値を正規化モジュール336に提供し、正規化モジュール336は、仮のD.f32値を正規化する。例えば、いくつかの実施形態では、正規化モジュール336は、仮数内の先行ゼロを除去するために、仮の仮数値をシフトする。いくつかの実施形態では、正規化モジュール336は、仮の仮数の整数部分を指定された値(例えば、1)にするように、仮の仮数を調整する。正規化モジュールは、仮数に対して行われた調整に基づいて仮の指数値を調整し、D.f32の全体値を保持する。
【0025】
正規化モジュール336は、D.f32について調整された仮数値及び指数値を丸めモジュール338に提供する。丸めモジュール338は、D.f32を最も近い偶数値に丸める等のように、指定された丸めルールに基づいて仮数値を丸め、それによって、D.f32の最終値を生成する。丸めモジュール338は、最終的なD.f32値を、記憶するためにレジスタファイル110に提供する。
【0026】
図4は、いくつかの実施形態による、DOT2_I32_I16実行パス108を示す図である。上述したように、DOT2_I32_I16演算は、2つの16ビット整数オペランド(説明のために、A
0及びA
1として示されている)の1つのセットを、2つの16ビット整数オペランド(説明のために、B
0及びB
1として示されている)の別のセットの対応するものと乗算し、結果を第3の32ビット整数オペランド(Cとして示されている)に加算する。よって、DOT2_I32_I16演算は、以下の式によって表される。
D.i32=A.i16[0]*B.i16[0]+A.i16[1]*B.i16[1]+C.i32
【0027】
演算を実行するために、実行パス108は、オペランドA
0、A
1、B
0、B
1及びオペランドCを記憶するための32ビットレジスタのセット(レジスタ440,441,443)を含む。いくつかの実施形態では、
図3に関連して上述した実行パス107と同様に、オペランドは、実行される特定の命令又は演算に応じて、レジスタ440,441,443のうち異なるレジスタに記憶される。実行パス108は、受信した演算によって提供される制御情報に基づいて、レジスタ440,441,443からオペランドを選択するためのオペランド選択モジュールを更に含む。
【0028】
A及びBのオペランドを乗算するために、実行パス108は、乗算器444,446を含む。乗算器444,446の各々は、16ビットオペランドの対応するペアを乗算して32ビット積を生成する。実行パス108は、32ビット加算器を更に含み、32ビット加算器は、乗算器444,446によって生成された積を相互に及びCのオペランドと加算して、D.i32の仮の値を生成する。実行パス108は、D.i32の仮の値と共にクランプ値(CLMPと示されている)を受信する飽和モジュール450を含む。飽和モジュール450は、仮のD.i32値をCLMP値と比較する。飽和モジュール450は、D.i32値がCLMP値を超えたことに応じて、最終的なD.i32値をCLMP値に設定し、そうでなければ、最終的なD.i32値を仮のD.i32値に設定する。飽和モジュール450は、最終的なD.i32値を、記憶のためにレジスタファイル110に提供する。
【0029】
本明細書で説明するように、いくつかの実施形態では、方法は、プロセッシングユニットにおいて、第1の命令を復号して、第1の多精度演算を識別することと、算術論理ユニット(ALU)において、異なる精度のオペランドを使用して第1の数学演算を実行することによって、第1の多精度演算を実行することと、を含む。一態様では、第1の数学演算は、浮動小数点積和演算を含む。別の態様では、浮動小数点積和演算は、第1の精度のN個のオペランドの2つのセットを乗算し、第1の精度とは異なる第2の精度のオペランドを加算する。一態様では、Nは、少なくとも2である。別の態様では、Nは、少なくとも4である。
【0030】
一態様では、第1の数学演算は、整数積和演算を含む。別の態様では、方法は、プロセッシングユニットにおいて、第2の命令を復号して、第1の多精度演算とは異なる第2の多精度演算を識別することと、ALUにおいて、異なる精度のオペランドを使用して第2の数学演算を実行することによって、第2の多精度演算を実行することであって、第2の数学演算は、第1の数学演算とは異なる、ことと、を含む。更に別の態様では、第1の多精度演算を実行することは、ALUの第1の実行パスにおいて第1の多精度演算を実行することを含み、第2の多精度演算を実行することは、ALUの第2の実行パスにおいて第2の多精度演算を実行することを含み、第2の実行パスは、第1の実行パスとは異なる。
【0031】
いくつかの実施形態では、プロセッシングユニットは、第1の命令を復号して、第1の多精度演算を識別する復号ステージと、異なる精度のオペランドを使用して第1の数学演算を実行することによって、第1の多精度演算を実行する算術論理ユニット(ALU)と、を含む。一態様では、第1の数学演算は、浮動小数点積和演算を含む。別の態様では、浮動小数点積和演算は、第1の精度のN個のオペランドの2つのセットを乗算し、第1の精度とは異なる第2の精度のオペランドを加算する。一態様では、Nは、少なくとも2である。別の態様では、Nは、少なくとも4である。
【0032】
一態様では、第1の数学演算は、整数積和演算を含む。別の態様では、復号ステージは、第2の命令を復号して、第1の多精度演算とは異なる第2の多精度演算を識別し、ALUは、異なる精度のオペランドを使用して第2の数学演算を実行することによって、ALUにおいて第2の多精度演算を実行し、第2の数学演算は、第1の数学演算とは異なる。更に別の態様では、ALUは、第1の多精度演算を実行する第1の実行パスと、第2の多精度演算を実行する第2の実行パスと、を含み、第2の実行パスは、第1の実行パスとは異なる。
【0033】
いくつかの実施形態では、プロセッシングユニットは、算術論理ユニット(ALU)を含み、ALUは、異なる精度のオペランドを使用して第1の数学演算を実行することによって、第1の多精度演算を実行する第1の実行パスと、異なる精度のオペランドを使用して第2の数学演算を実行することによって、第2の多精度演算を実行する第2の実行パスと、を含み、第2の数学演算は、第1の実行パスとは異なる。一態様では、第1の数学演算は、第1の浮動小数点積和演算を含み、第2の数学演算は、第2の浮動小数点積和演算を含む。別の態様では、第1の浮動小数点積和演算は、第1の精度のN個のオペランドの2つのセットを乗算し、第1の精度とは異なる第2の精度のオペランドを加算し、第2の浮動小数点積和演算は、第1の精度のM個のオペランドの2つのセットを乗算し、第2の精度のオペランドを加算する。一態様では、Nは、少なくとも2であり、Mは、少なくとも4である。
【0034】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0035】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0036】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。