関連出願の相互参照
[0001]本願は、2004年11月10日に出願され、本願の譲受人に譲渡された以下の米国特許出願の優先権を主張する。
・出願番号第10/985,291号、名称“Multipurpose Multiply−Add Functional Unit”
・出願番号第10/986,531号、名称“Multipurpose Functional Unit with Combined Integer and Floating−Point Multiply−Add Pipeline”
・出願番号第10/985,695号、名称“Multipurpose Functional Unit with Multiply−Add and Logical Test Pipeline”
・出願番号第10/985,674号、名称“Multipurpose Functional Unit with Multiply−Add and Format Conversion Pipeline”。第10/9865,291号。
発明の背景
[0002]本発明は、広くマイクロプロセッサに関するものであり、特にプロセッサコア用の汎用乗算加算機能ユニットに関するものである。
[0003]リアルタイムコンピュータアニメーションはプロセッサに極端な要求を課す。これらの要求を満たすために、専用グラフィックスプロセッシングユニットは、典型的に、高度並列アーキテクチャを実装しており、当該アーキテクチャでは、多数(例えば、16台)のコアが並列に動作し、各コアが、プロセッシングユニットによってサポートされる演算を実行するための機能ユニットを含む複数(例えば、8台)の並列パイプラインを有している。これらの演算には、一般に、種々の整数及び浮動小数点算術演算(加算、乗算など)、ビット単位論理演算、比較演算、フォーマット変換演算等がある。パイプラインは一般に同一の設計であるため、サポートされた命令は何れのパイプラインによっても処理可能であり、したがって、各パイプラインは完全な機能ユニットのセットを必要とする。
[0004]従来から、各機能ユニットは、一つ又は二つの演算のみを取り扱うように特化されている。例えば、機能ユニットとしては、整数加算/減算ユニット、浮動小数点乗算ユニット、一つ以上の2値ロジックユニット、及び、整数フォーマットと浮動小数点フォーマットとの間で変換するための一つ以上のフォーマット変換ユニットがある。
[0005]時間とともに、グラフィックスプロセッシングユニットがサポートすることを期待される基本演算(命令)の個数が、増加してきている。オペランドA、B、及びCに対してA×B+Cを計算する3重「乗算加算」(MAD)命令のような新しい命令が提案されている。このような演算をサポートするため機能ユニットを追加し続けることは複数の問題を引き起こす。例えば、新しい機能ユニットは各パイプラインに追加されなければならないので、追加ユニットを追加するだけのために必要とされるチップ面積は相当なものとなる。新しい機能ユニットは更に電力消費を増加させ、このことによって改良された冷却システムが必要とされる。このような因子はチップ設計の難しさ及びコストに影響する。更に、機能ユニットの台数が1サイクル中に発行され得る命令の個数を超える範囲では、機能ユニットのプロセッシング能力が非効率に使用される。
[0006]したがって、必要とされるチップ面積が縮小され、より効率的に使用することができる機能ユニットを提供することが望ましい。
発明の概要
[0007]本発明の実施の形態は汎用機能ユニットを提供する。ある実施の形態では、汎用機能ユニットは、以下の演算、即ち、整数オペランド及び浮動小数点オペランドの加算、乗算、並びに、乗算加算と、ブール演算、最大値演算、最小値演算、3値比較演算、及び、2値テスト演算(例えば、大なり、小なり、等値、又は、順序無し)を含むテスト演算と、左シフト演算及び右シフト演算と、整数フォーマットと浮動小数点フォーマットとの間、ある整数フォーマットと別の整数フォーマットとの間、及び、ある浮動小数点フォーマットと別の浮動小数点フォーマットとの間で変換するフォーマット変換演算と、指数関数及び三角関数を含む超越関数の引数の引数還元演算と、浮動小数点オペランドの小数部を返す端数処理演算との全てをサポートする。他の実施の形態では、汎用機能ユニットは、これらの演算の部分集合及び/又はその他の演算についてもサポートする。
[0008]本発明の一態様によれば、プロセッサの汎用機能ユニットは、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2、及び、第3のオペランドと、多数のサポートされた演算のうちの実行されるべき一つの演算を指定するオペコード(オペレーションコード)と、を受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように制御信号に応じて較正可能である。テストパイプラインは入力セクションに結合され、第1、第2及び第3のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第2の中間結果として選択するように制御信号に応じて較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように制御信号に応じて較正可能である。指数パイプラインは入力セクションに結合され、第1、第2及び第3のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように制御信号に応じて較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、サポートされた演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように制御信号に応じて較正可能である。サポートされている演算は、浮動小数点乗算加算(FMAD)演算、整数乗算加算(IMAD)演算、及び、少なくとも一つの比較テスト演算を含む。
[0009]種々の比較テスト演算がサポートされていてもよい。例えば、ある実施の形態では、少なくとも一つの比較テスト演算は、最大値(MAX)演算、最小値(MIN)演算、及び、3値比較(CMP)演算により構成された群から選択された一つ以上の演算を含む。別の実施の形態では、少なくとも一つの比較テスト演算は、大なり演算、小なり演算、等値演算、及び、順序無し演算により構成された群から選択された一つ以上の2値テスト(SET)演算を含み、一つ以上の2値テスト演算のそれぞれはブール結果を生成する。ブール結果を伴うSET演算がサポートされている実施の形態では、補助的な結果パスがテストパイプラインと出力セクションとの間に結合され、テストパイプラインから出力セクションへブール補助結果を送出するように構成され、出力セクションは、更に、オペコードがSET演算のうちの一つを指定する場合にブール補助結果に基づいて最終結果を生成するように制御信号に応じて較正可能である。
[0010]その他の演算もまたサポートし得る。例えば、サポートされる演算には更には、ビット単位ブール論理演算(例えば、AND演算、OR演算、XOR演算)が含まれ、加算パイプラインが更に浮動小数点加算(FADD)演算及び整数加算(IADD)演算を実行するように制御信号に応じて較正可能な状況では、FADD演算及びIADD演算が含まれ、乗算パイプラインが更に浮動小数点乗算(FMUL)演算及び整数乗算(IMUL)演算を実行するように制御信号に応じて較正可能な状況では、FMUL演算及びIMUL演算が含まれ、第1のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算が含まれ、また、例えば、3角関数又は指数関数のドメインマッピング(RRO)演算が含まれ、第1のオペランドの小数部を返す端数処理(FRC)演算が含まれてもよい。これらの演算の種々の組み合わせ、及び、その他の演算もサポートされてもよい。
[0011]本発明の別の態様によれば、マイクロプロセッサは、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも1台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、少なくとも浮動小数点乗算加算(FMAD)演算と、整数乗算加算(IMAD)演算と、少なくとも一つの比較テスト演算とを含む複数のサポートされた演算を実行する能力を備える。汎用機能ユニットは、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2、及び、第3のオペランドと、複数のサポートされた演算のうちの実行されるべき一つの演算を指定するオペコードと、を受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように制御信号に応じて較正可能である。テストパイプラインは入力セクションに結合され、第1、第2及び第3のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第2の中間結果として選択するように制御信号に応じて較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように制御信号に応じて較正可能である。指数パイプラインは入力セクションに結合され、第1、第2及び第3のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように制御信号に応じて較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、オペコードによって指定されたサポートされている演算のうちの一つの演算の最終結果を生成するように制御信号に応じて較正可能である。
[0012]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが、複数のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインは第1の中間結果を生成するように動作させられ、機能ユニット内のテストパイプラインは第2の中間結果を生成するように動作させられ、機能ユニット内の指数パイプラインは指数結果及びアライメント制御信号を生成するように動作させられる。機能ユニット内の加算パイプラインは、第1の中間結果と第2の中間結果を加算し、演算結果を生成するように、オペコード及びアライメント制御信号に応じて動作させられる。機能ユニットの出力セクションは、演算結果及び指数結果から最終結果を計算するように動作させられる。サポートされている演算は、浮動小数点乗算加算(FMAD)演算、整数乗算加算(IMAD)演算、及び、少なくとも一つの比較テスト演算を含む。
[0013]本発明の更なる態様によれば、プロセッサの汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、及び、出力セクションを含む。入力セクションは、第1、第2、及び、第3のオペランドと、多数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。サポートされている演算は、第1、第2及び第3のオペランドを操作する浮動小数点乗算加算(FMAD)演算及び整数乗算加算(IMAD)演算を含み、乗算パイプライン及び加算パイプラインは、更に、FMAD演算の場合に、最終結果が浮動小数点値を表現し、IMAD演算の場合に、最終結果が整数値を表現するように、制御信号に応じて較正可能である。
[0014]また、様々なその他の演算もサポートし得る。例えば、ある実施の形態では、サポートされている演算は、第1のオペランド及び第3のオペランドを操作する浮動小数点加算(FADD)演算及び整数加算(IADD)演算を更に含む。別の実施の形態では、サポートされている演算は、第1のオペランド及び第2のオペランドを操作する浮動小数点乗算(FMUL)演算及び整数乗算(IMUL)演算を更に含む。更に別の実施の形態では、サポートされている演算は、絶対差の整数和(ISAD)演算を更に含む。
[0015]本発明の別の態様によれば、マイクロプロセッサが、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも1台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、少なくとも浮動小数点乗算加算(FMAD)演算と、整数乗算加算(IMAD)演算とを含む複数のサポートされた演算を実行する能力を備える。汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2、及び、第3のオペランドと、多数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。乗算パイプライン及び加算パイプラインは、更に、FMAD演算の場合に、最終結果が浮動小数点値を表現し、IMAD演算の場合に、最終結果が整数値を表現するように、制御信号に応じて較正可能である。
[0016]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが複数個のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインは第1の中間結果及び第2の中間結果を生成するように動作させられる。機能ユニット内の加算パイプラインは、第1の中間結果と第2の中間結果を加算し、演算結果を生成するように、動作させられる。機能ユニットの出力セクションは、演算結果から最終結果を計算する。サポートされている演算は、浮動小数点乗算加算(FMAD)演算、及び、整数乗算加算(IMAD)演算を含む。
[0017]本発明の更に別の態様によれば、プロセッサの汎用機能ユニットが、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2、及び、第3のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように較正可能である。テストパイプラインは入力セクションに結合され、制御信号に応じて、第1、第2及び第3のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第2の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。複数のサポートされている演算は、第1、第2及び第3のオペランドを操作する整数乗算加算(IMAD)演算と、第1、第2及び第3のオペランドの内の少なくとも一つを操作する論理テスト演算とを含む。
[0018]一部の実施の形態では、論理テスト演算は、少なくとも等価性テスト、大なりテスト、及び、小なりテストを含む2値テスト(SET)演算のセットのうちの一つである。ある実施の形態では、論理テスト演算の第1、第2及び第3のオペランドは、整数オペランド又は浮動小数点オペランドである。一部の実施の形態では、サポートされている演算は、第1、第2及び第3のオペランドを操作する浮動小数点乗算加算(FMAD)演算を更に含む。その他の実施の形態では、サポートされている演算は、ビット単位ブールAND演算、ビット単位ブールOR演算、及び、ビット単位ブールXOR演算を更に含む。
[0019]本発明の別の態様によれば、マイクロプロセッサが、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも1台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、第1、第2及び第3のオペランドを操作する乗算加算(MAD)演算と、第1、第2及び第3のオペランドのうちの少なくとも一つを操作する論理テスト演算とを含む複数のサポートされた演算を実行する能力を備えている。汎用機能ユニットは、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2及び第3のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように較正可能である。テストパイプラインは入力セクションに結合され、制御信号に応じて、第1、第2及び第3のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第2の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。
[0020]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが複数のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインが第1の中間結果を生成するように動作させられ、機能ユニット内のテストパイプラインが第2の中間結果を生成するように動作させられる。機能ユニット内の加算パイプラインが、第1の中間結果と第2の中間結果を加算し、演算結果を生成するように動作させられる。機能ユニットの出力セクションが、演算結果から最終結果を計算するように動作させられる。サポートされている演算は、第1、第2及び第3のオペランドを操作する乗算加算(MAD)演算と、第1、第2及び第3のオペランドのうちの少なくとも一つを操作する論理テスト演算と、を含む。
[0021]本発明の更なる態様によれば、プロセッサの汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2及び第3のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。指数パイプラインは入力セクションに結合され、制御信号に応じて、第1、第2及び第3のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。サポートされている演算は、第1、第2及び第3のオペランドを操作する乗算加算(MAD)演算と、第1のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算とを含む。
[0022]整数演算と浮動小数点演算の種々の組み合わせをサポートすることができる。例えば、ある実施の形態では、整数MAD演算がサポートされ、入力フォーマットとターゲットフォーマットのうちの少なくとも一方が整数フォーマットであるフォーマット変換演算が更にサポートされている。別の実施の形態では、浮動小数点MAD演算がサポートされ、入力フォーマットとターゲットフォーマットのうち少なくとも一方が浮動小数点フォーマットであるフォーマット変換演算が更にサポートされている。更に別の実施の形態では、MAD演算は、選択的に、浮動小数点MAD演算と整数MAD演算のいずれかである。
[0023]本発明の別の態様によれば、マイクロプロセッサが、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも1台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、第1、第2及び第3のオペランドを操作する少なくとも乗算加算(MAD)演算と、第1のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算とを含む複数のサポートされた演算を実行する能力を備えている。汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第1、第2及び第3のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第1のオペランドと第2のオペランドの積を計算し、計算された積を第1の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第1の中間結果と第2の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。指数パイプラインは入力セクションに結合され、制御信号に応じて、第1、第2及び第3のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。
[0024]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが複数のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインが、第1の中間結果及び第2の中間結果を生成するように動作させられ、機能ユニット内のテストパイプラインが、第2の中間結果を生成するように動作させられる。機能ユニット内の指数パイプラインが、指数結果及びアライメント制御信号を生成するように動作させられる。機能ユニット内の加算パイプラインが、第1の中間結果と第2の中間結果を加算し、演算結果を生成するように、アライメント制御信号に応じて動作させられる。サポートされている演算は、少なくとも、第1、第2及び第3のオペランドを操作する乗算加算(MAD)演算と、第1のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算とを含む。
[0025]以下の詳細な説明は、添付図面と併せて、本発明の本質及び利点の更なる理解をもたらすものである。
発明の詳細な説明
[0042]本発明の実施の形態は、グラフィックスプロセッサのような、多数の高速計算を実行する能力を備えたプロセッシングシステムの高速汎用機能ユニットを提供する。ある実施の形態では、機能ユニットは、整数又は浮動小数点フォーマットの入力オペランドA、B、Cに関してA×B+Cを計算する3値乗算加算(「MAD」)演算を、乗算器ツリー及び加算器回路を有するパイプラインを用いて、サポートする。MADパイプラインのハードウェアを利用して、機能ユニットは、その他の整数及び浮動小数点算術演算を更にサポートする。機能ユニットは、多種多様な比較、フォーマット変換、及び、ビット単位演算を、僅かな規模の付加的な回路だけを用いてサポートするように更に拡張することができる。
I. システム概要
A. グラフィックスプロセッサ
[0043]図1は本発明の実施の形態に係るコンピュータシステム100のブロック図である。コンピュータシステム100は、バス106を介して通信する中央処理ユニット(CPU)102とシステムメモリ104とを備える。ユーザ入力は、バス106に接続された1台以上のユーザ入力装置108(例えば、キーボード、マウス)から受け入れられる。ビジュアル出力は、システムバス106に接続されたグラフィックスプロセッシングサブシステム112の制御下で動作するピクセルベースのディスプレイ装置110(例えば、従来型のCRT又はLCDベースのモニター)上に提供される。システムディスク128、及び、1台以上のリムーバル記憶装置129(例えば、フロッピーディスクドライブ、コンパクトディスク(CD)ドライブ、及び/又は、DVDドライブ)のようなその他のコンポーネントは、同様にシステムバス106に接続されていてもよい。システムバス106は、PCI(ペリフェラル・コンポーネント・インターコネクト)、AGP(アドバンスト・グラフィックス・プロセッシング)、及び/又は、PCI−エクスプレス(PCI−E)といった一つ以上の様々なバスプロトコルを使用して実施され、ノースブリッジ及びサウスブリッジ(図示せず)のような適切な「ブリッジ」チップが種々のコンポーネント及び/又はバスを相互接続するために設けられていてもよい。
[0044]グラフィックスプロセッシングサブシステム112は、グラフィックスプロセッシングユニット(GPU)114及びグラフィックスメモリ116を有し、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)及びメモリ装置のような1台以上の集積回路装置を使用して実施され得る。GPU114は、レンダリングモジュール120、メモリインターフェイスモジュール122、及び、スキャンアウトモジュール124を有する。レンダリングモジュール120は、システムバス106を介して供給されたグラフィックスデータからのピクセルデータ生成(例えば、種々の2次元及び3次元レンダリングアルゴリズムの実施)、ピクセルデータを格納し更新するためのグラフィックスメモリ116との相互作用などに関係した種々のタスクを実行するように構成されてもよい。レンダリングモジュール120は、好適には、CPU102上で動く種々のプログラムによって供給された2次元又は3次元シーンデータからピクセルデータを生成するように構成される。レンダリングモジュール120の特有のコンフィギュレーションは必要に応じて変更され得るものであり、その詳細な説明は、本発明を理解するために重要ではないので、省略する。
[0045]メモリインターフェイスモジュール122は、レンダリングモジュール120及びスキャンアウト制御ロジック124と通信し、グラフィックスメモリ116とのあらゆる相互作用を管理する。メモリインターフェイスモジュール122は、システムバス106から受け取られたピクセルデータを、レンダリングモジュール120による処理無しで、グラフィックスメモリ116へ書き込むための経路を有することもある。メモリインターフェイスモジュール122の特有のコンフィギュレーションは必要に応じて変更され得るものであり、その詳細な説明は、本発明を理解するために重要ではないので、省略する。
[0046]グラフィックスメモリ116は、一般的に従来型の設計よりなる1台以上の集積回路メモリ装置を使用して実施されるものであり、ピクセルバッファ126のような、種々の物理的又は論理的区画を含み得る。ピクセルバッファ126は、画像(又は、画像の一部)のピクセルデータを格納し、当該ピクセルデータは、スキャンアウト制御ロジック124によって読み出され処理され、表示のためにディスプレイ装置110へ伝送される。このピクセルデータは、例えば、システムバス106を介してGPU114のレンダリングモジュール120へ供給されるか、又は、CPU102上で動く種々のプロセスによって生成され、システムバス106を介してピクセルバッファ126へ供給された2次元又は3次元シーンデータから生成されてもよい。
[0047]スキャンアウトモジュール124は、GPU114と共にシングルチップに集積化されるか、又は、別個のチップに実施されるものであり、ピクセルバッファ118からピクセルカラーデータを読み出し、表示すべきデータをディスプレイ装置110へ転送する。ある実施の形態では、スキャンアウトモジュール124は等時的に動作し、GPU114内で、又は、システム100内のその他の箇所で発生するその他の活動とは無関係に所定のリフレッシュレート(例えば、80Hz)でピクセルデータのフレームをスキャンアウトする。一部の実施の形態では、所定のリフレッシュレートはユーザ選択可能なパラメータでもよく、スキャンアウト順序は、表示フォーマット(例えば、インターレース走査又はプログレッシブ走査)に応じて適切に変更され得る。スキャンアウトモジュール124は、特定の表示ハードウェアのためのカラー値の調整、及び/又は、ピクセルバッファ126からのピクセルデータを、例えば、グラフィックスメモリ116、システムメモリ104、又は、別のデータソース(図示せず)から得られるビデオ又はカーソルオーバーレイ画像などのデータと合成することによる複合スクリーン画像の生成のようなその他の操作も実行できる。スキャンアウトモジュール124の特定のコンフィギュレーションは必要に応じて変更され得るものであり、その詳細な説明は、本発明を理解するために重要ではないので、省略する。
[0048]システム100の動作中に、CPU102は、オペレーティングシステムプログラム、アプリケーションプログラム、及び、グラフィックスプロセッシングサブシステム112のためのドライバプログラムのような種々のプログラムを実行する。ドライバプログラムは、技術的に知られているように、アプリケーションプログラム及びオペレーティングシステムプログラムがグラフィックスプロセッシングサブシステム112の種々の機能を呼び出せるようにするOpenGL、Microsoft DirectX、又は、D3Dのような従来型のアプリケーションプログラムインターフェイス(API)を実施できる。グラフィックスプロセッシングサブシステム112の動作は、適切なコマンドバッファの使用によって、その他のシステム動作と非同期に行われてもよい。
[0049]本明細書で説明するシステムは説明のための例であり、変形と変更が可能であることが認識できるであろう。GPUは、例えば、1台以上の集積回路装置のような適当なテクノロジーを使用して実施することができる。GPUは、1台以上のこのようなプロセッサを含む拡張カードに実装されるか、システムマザーボード上に直接的に実装されるか、又は、システムチップセットコンポーネント(例えば、一つの一般に使用されているPCシステムアーキテクチャのノースブリッジチップ)に集積化されてもよい。グラフィックスプロセッシングサブシステムは、任意の量の専用グラフィックスメモリを有することができ(ある種の実施は専用グラフィックスメモリをもたない)、システムメモリと専用グラフィクスメモリを組み合わせて使用してもよい。特に、ピクセルバッファは、必要に応じて、専用グラフィックスメモリ又はシステムメモリで実施されてもよい。スキャンアウト回路は、GPUと集積化されてもよく、又は、別個のチップに設けられてもよく、また、例えば、1台以上のASIC、プログラマブルプロセッサエレメント、その他の集積回路テクノロジー、又は、それらの何らかの組み合わせを使用して実施することができる。更に、本発明を具現化するGPUは、汎用コンピュータシステム、ビデオゲームコンソール及びその他の特定用途コンピュータシステム、DVDプレーヤー、携帯電話機、又は、携帯情報端末のようなハンドヘルド装置などを含む多種多様な装置に組み込まれてもよい。
B. 実行コア
[0050]図2は本発明の実施の形態に係る実行コア200のブロック図である。例えば、実行コア200は、上記のGPU114のレンダリングモジュール120のためのプログラマブルシェーダー等で実施し得るものであり、種々の計算を実行する命令の任意のシーケンスを実行するように構成されている。実行コア200は、フェッチ及びディスパッチユニット202と、発行ユニット204と、汎用乗算加算(MMAD)機能ユニット220と、複数(M台)のその他の機能ユニット(FU)222と、レジスタファイル224と、を備える。各機能ユニット220、222は指定された演算を実行するように構成されている。MMADユニット220によって実行される演算については後述する。その他の機能ユニット222は、一般的に従来型の設計からなり、超越関数計算(例えば、サイン、コサイン、指数、及び、対数など)、逆数、テクスチャフィルタリング、メモリアクセス(例えば、ロード演算及びストア演算)、整数算術又は浮動小数点算術などのような多種多様の演算をサポートできる。
[0051]実行コア200の動作中に、フェッチ及びディスパッチユニット202は、命令ストア(図示せず)から命令を取得し、命令を復号し、オペランド参照又はオペランドデータが関連付けられたオペコードとして、命令を発行ユニット204へディスパッチする。命令毎に、発行ユニット204は、例えば、レジスタファイル224から、参照されたオペランドを取得する。命令の全オペランドの準備が完了したときに、発行ユニット204は、オペコード及びオペランドをMMADユニット220又は別の機能ユニット222へ送信することにより命令を発行する。発行ユニット204は、好適には、所与の命令を実行するために適切な機能ユニットを選択するためのオペコードを使用する。フェッチ及びディスパッチ回路202と発行回路204は、従来型のマイクロプロセッサアーキテクチャ及び技術を使用して実施することができるものであり、それらの詳細な説明は、本発明を理解するために重要ではないので、省略する。
[0052]MMADユニット220及びその他の機能ユニット222は、オペコード及び関連するオペランドを受け取り、指定された操作をオペランドに実行する。結果データは、結果値(OUT)と条件コード(COND)の形式で提供される。この条件コードは、結果値OUTが正であるか、又は、負であるか、又は、(後述する)特別の値であるか否かといった、結果値OUTに関する一般的な情報を提供するものである。一部の実施の形態では、条件コードCONDは、機能ユニットの動作中にエラー又は例外が発生したか否かを更に示す。結果データは、データ転送パス226を介してレジスタファイル224(又は別の宛先)へ転送される。
[0053]図2の実行コアは説明のための例であり、変形と変更が可能であることが認識されるであろう。フェッチ及びディスパッチユニット202と発行ユニット204は、必要に応じてイン・オーダー命令発行又はアウト・オブ・オーダー命令発行、投機実行モードなどをもつスカラーアーキテクチャ又はスーパースカラーアーキテクチャを含む、任意の所望のマイクロアーキテクチャを実施することができる。一部のアーキテクチャでは、発行元は、複数の機能ユニットのためのオペコード及び/又はオペランドを含む長命令語を発行することができる。実行コアはパイプライン型機能ユニットの系列を更に含み、あるステージの機能ユニットからの結果が、レジスタファイルへ直接的に転送されるのではなく、後段ステージの機能ユニットへ転送され、機能ユニットは単一の長命令語又は別々の命令によって制御することができる。本教示を入手できる当業者は、MMADユニット220は、任意のマイクロプロセッサにおける機能ユニットとして実施することができ、グラフィックスプロセッサ、又は、特定のプロセッサ、又は、実行コアアーキテクチャに限定されるものでないことを認識するであろう。
C. MMADユニット
[0054]本発明の実施の形態によれば、実行コア200は、MMADユニット220を有し、当該MMADユニット220は、最大で(ここでは、A、B及びCとして表示される)三つのオペランドに関する多数の整数及び浮動小数点演算をサポートするする。ある実施の形態では、MMADユニット220は、整数又は浮動小数点オペランドのA×B+Cを計算する乗算加算(MAD)パイプラインを実施し、このパイプライン内の種々の回路は、多数の他の整数演算及び浮動小数点演算を実行するために利用される。MMADユニット220の動作は、上述のようにオペランド及びオペコードをMMADユニット200へ供給する発行回路204によって制御される。発行回路204によってオペランドの各セットと共に供給されたオペコードは、MMADユニット220の動作を制御し、その演算のうちの一つがオペランドのセットに対して実行されることを選択的に可能にさせる。
[0055]MMADユニット220は、好適には、整数と浮動小数点の両方のフォーマットを含む多種多様のフォーマットのオペランドを取り扱うように設計される。本明細書に記載した実施の形態では、MMADユニット220は、(本明細書においてfp32及びfp16と称される)2通りの浮動小数点フォーマットと、(本明細書においてu8、u16、u32、s8、s16、s32と称される)6通りの整数フォーマットとを取り扱う。これらのフォーマットをここで説明する。
[0056]「FP32」は、標準的なIEEE754の単精度浮動小数点フォーマットを指し、通常の浮動小数点数が1ビットの符号部と8ビットの指数ビットと23ビットの有効数字ビットとによって表現される。指数は127だけ上方へバイアスされ、2−126から2127までの範囲内の指数が1から254までの整数を使用して表現されるようになる。「通常の」数の場合、23ビットの有効ビットは、整数部として暗黙の1を含む24ビットの仮数の少数部として解釈される。指数ビットが全て零である数は非正規数と呼ばれ、仮数部に暗黙の先頭の1が存在しないものとして解釈され、このような数は、例えば、計算のアンダーフローを表現することができる。指数ビットが全て1であり、有効数字ビットが全て零である(正又は負の)数は、(正又は負の)INFと呼ばれ、この数は、例えば、計算のオーバーフローを表現できる。指数ビットが全て1であり、有効数字ビットが非零である数は非数(NaN)と呼ばれ、例えば、定義されていない値を表現するために使用することができる。零は、特殊数であると更にみなされ、指数ビットと有効数字ビットの全てが零にセットされることによって表現される。
[0057]「FP16」は、グラフィックスプロセッシングにおいて多く使用される半精度フォーマットを指す。fp16フォーマットは、fp16が5ビットの指数ビットと10ビットの有効数字ビットを有することを除いて、fp32と類似している。指数は15だけ上方へバイアスされ、通常の数の有効数字部は、整数部として暗黙の「1」を含む11ビットの仮数の小数部として解釈される。非正規数、INF、NaN及び零を含む特殊数は、fp32と同じように定義される。
[0058]整数フォーマットは、本明細書においては、フォーマットが符号付きであるか、又は、符号無しであるかを示すイニシャル「s」又は「u」と、ビットの総数を表す数(例えば、8、16、32)によって指定されており、従って、s32は符号付き32ビット整数を指し、u8は符号無し8ビット整数を指し、以下同様である。符号付きフォーマットの場合、好適には、2の補数表現が使用される。よって、u8の場合の範囲は[0,15]であり、s8の場合の範囲は[−8,7]である。本明細書で使用される全フォーマットにおいて、最上位ビット(MSB)はビットフィールドの左にあり、最下位ビット(LSB)は右にある。
[0059]本明細書では説明の目的のために、特定のフォーマットを定義して、参照さしており、また、MMADユニットはこれらのフォーマットの組み合わせ又は異なったフォーマットをサポートすることができることを理解されたい。
[0060]種々のオペランドフォーマットを取り扱うことに加えて、MMADユニット220は、好適には、多数の異なったオペランドをサポートするように構成される。例えば、図3は、本明細書に説明したMMADユニット220の実施の形態によって実行され得る演算のタイプの一覧表である。浮動小数点算術演算(302に掲載されている)は、fp32又はfp16フォーマットのオペランドに対して実行可能であり、結果は入力フォーマットで返される。一部の実施の形態では、浮動小数点算術は、一つのフォーマット、例えば、fp32だけにおいてサポートされる。加算(FADD)、乗算(FMUL)、及び、乗算加算(FMAD)演算と共に、種々のオペランド比較演算がサポートされている。その中には、Cが零以上であり、Bがそうではない場合にAを選択する3値条件付き選択演算(FCMP)と、オペランドAとオペランドBのうちの大きい方を返す最大値演算(FMAX)及び二つのうちの小さい方を返す最小値演算(FMIN)とが含まれる。2値テスト演算(FSET)は、オペランドAとオペランドBに対する多数の2値関係テストのうちの一つを実行し、テストが満たされるか否かを示すブール値を返す。本実施の形態では、テスト可能な2値関係は、大なり(A>B)、小なり(A<B)、等価(A=B)、及び、順序無し(A又はBの何れかがNaNであるならば、真であるA?B)、並びに、否定(例えば、A≠B)、及び、種々の組み合わせテスト(例えば、A≧B、A<>B、A?=Bなど)を含む。
[0061]整数算術演算(304に掲載されている)は、整数フォーマットのオペランドに対して実行され、結果が入力フォーマットで返される。サポートされている整数算術演算は、加算(IADD)、乗算(IMUL)、乗算加算(IMAD)、条件付き選択(ICMP)、最大値(IMAX)、最小値(IMIN)、及び、2値テスト(ISET)を含み、それらの全てが浮動小数点の対応するものと同じように定義される。更にサポートされているのは、|A−B|+Cを計算する絶対差の和(ISAD)演算である。
[0062]ビット演算(306に掲載されている)は、オペランドを32ビットフィールドとして取り扱う。論理演算(LOP)は、2値ブール演算AND(A&B)、OR(A|B)、及び、XOR(A∧B)を含む。LOPの結果は、オペランドAとオペランドBの対応するビットに関する演算の実行結果を示す32ビットフィールドである。左シフト(SHL)及び右シフト(SHR)演算もまたサポートされ、オペランドAがシフトされるべきビットフィールドを供給するために使用され、オペランドBがシフト量を指定するために使用される。右シフトは論理的(零が新しいMSB位置に挿入される)でもよく、算術的(符号ビットが新しいMSB位置に拡張される)でもよい。
[0063]フォーマット変換演算(308に掲載されている)は、オペランドAを一方のフォーマットから別のフォーマットへ変換する。「F2F」は、一般に、ある浮動小数点フォーマットから別の浮動小数点フォーマットへの変換を指す。一部の実施の形態では、これらの変換は、整数Nを用いる2Nによるオペランドのスケーリングも含む。更に、整数丸め付きのF2F変換もまたサポートされている。「F2I」は、浮動小数点フォーマットから整数フォーマットへの変換を指す。F2F変換の場合と同様に、オペランドは2Nによってスケール変換可能である。「I2F」は、一般に、整数から浮動小数点への変換を指し、このような演算は、2Nスケール変換と同様に、否定又は絶対値演算と組み合わせることが可能である。「I2I」は一方の整数フォーマットから別の整数フォーマットへの変換を指し、これらの変換も同様に絶対値又は否定演算と組み合わせる事が可能である。「FRC」は、浮動小数点入力オペランドの小数部を返す「端数」演算である。
[0064]fp32引数還元演算(310に掲載されている)は、レンジリダクション演算(PPO)とも呼ばれ、(sin(x)、cos(x)、又は、2xのような)超越関数の引数xを使い易い数値区間に制約するため使用され、その結果、超越関数は、(例えば、図2の機能ユニット222のうちの1台である)機能ユニットを適切に構成することにより計算される。本実施の形態では、超越関数命令が機能ユニットへ発行される前に、その引数がオペランドAとしてMMADユニット220へ供給される。サイン関数及びコサイン関数の場合、オペランドAは、区間[0,2π)にマッピングされ、(EX2と表示されることもある)指数関数の場合、オペランドAは、数N+fとして表現され、ここで、Nは整数であり、fは区間[0,1)である。技術的に知られているように、このような引数還元は、可能な引数の組を有界な範囲に制限することにより、超越関数のための機能ユニットの設計を簡単化することが可能である。
[0065]セクションII及びIIIでは、図3に示した演算の全てを実行可能であるMMADユニット220について説明する。セクションIIはMMADユニット220の回路構造について説明し、セクションIIIはその回路が図3に掲載した演算を実行するためにどのように使用され得るかを説明する。本明細書に記載したMMADユニット220は説明のための例であり、その他の、又は、異なる機能の組み合わせが回路ブロックの適切な組み合わせを使用してサポートされ得ることが理解されるべきである。
II. 典型的なMMADユニット構造
[0066]図4は、図3に示した全演算をサポートする本発明の実施の形態によるMMADユニット220の簡略化されたブロック図である。本実施の形態では、MMADユニット220は、全演算のために使用される8ステージのパイプラインを実施する。各プロセッササイクルで、MMADユニット220は、(例えば、図2の発行回路204から)オペランド入力パス402、404、406を介して三つの新しいオペランド(A0、B0、C0)を受け取り、オペコードパス408を介して実行されるべき演算を示すオペコードを受け取る。本実施の形態では、演算は図3に示した任意の演算でもよい。演算に加えて、オペコードは、好適には、オペランドの入力フォーマット(及び、結果用に使用する出力フォーマットであって、入力フォーマットと同じである場合と同じではない場合とがある出力フォーマット)を示す。図3に示した演算は、例えば、fp32オペランドを伴うFMULのためのあるオペコードと、fp16オペランドを伴うFMULのための異なったオペコードのように、複数のオペコードが演算に関連付けられていることに注意すべきである。
[0067]MMADユニット220は、パイプラインステージ0−7の全部を使用して各演算を処理し、信号パス410に32ビット結果値(OUT)を生成し、信号パス412に対応する条件コード(COND)を生成する。これらの信号は、アーキテクチャに依存して、例えば、図2に示すようにレジスタファイル224へ伝搬され、又は、プロセッサコアのその他のエレメントへ伝搬される。ある実施の形態では、各ステージはプロセッササイクルに対応しており、その他の実施の形態では、一つのステージ内に示したエレメントが、複数のプロセッササイクルに亘って分割されてもよく、又は、2段(又はそれ以上)のステージからのエレメントが一つのプロセッササイクルに統合されてもよい。ある実装形態では、1.5GHzで10ステージ(サイクル)であった。
[0068]セクションII.Aは、MMADパイプラインの概要を提供し、セクションII.B−Iは各ステージの回路ブロックを詳細に説明する。
A. MMADパイプライン
[0069]パイプラインについては、ステージ0〜2の回路ブロックがFMAD演算中にどのように使用されるかを参照することで、まず理解することができる。ステージ0は、発行ユニット204又はMMADユニット220において任意に実施することができるオペランドフォーマット化ステージであり、(32ビットより短い)オペランドを揃え、一貫した形で表現する。ステージ1−3はFMAD演算の乗算(A×B=P)部分を実行し、ステージ4−6は加算(P+C)部分を実行する。ステージ7においては、最終結果が、信号パス410、412に分配するためフォーマット化される。ステージ7は、後述するように、特定の数の入力、オーバーフロー、アンダーフロー、又は、その他の条件の場合に、特定の出力を生成する制御ロジックを更に含む。
[0070]本発明の説明を容易化するため、MMADユニット220の3本の主要な内部データパスを、図4において点線の境界によって示し、本明細書では、「仮数パス」413、「指数パス」415、及び、「テストパス」417と称する。これらの名前はある特定の演算(例えば、FMAD又は比較)中に各パスに示された種々の回路ブロックによって実行される機能を言及しているが、内部データパス413、415、417の何れかに沿った回路ブロックは、演算に依存する形で多種多様の用途のために利用され得ることが明白になるであろう。
[0071]仮数パス413に沿って、ステージ1−3は、浮動小数点オペランドA及びBの仮数を乗算する回路ブロックを有する。ステージ2の乗算器ブロック414は、乗算器前段ブロック416及び乗算器後段ブロック418によってサポートされている。乗算結果は、ステージ3の終わりに結果R3としてパス421上に供給される。ステージ4−6は、アライメントブロック420及び端数和ブロック422を有しており、これらは、結果R3aを、浮動小数点オペランドCの仮数と揃えて、当該仮数と加算する。この浮動小数点オペランドCは、テストパス417を介してパス419上に結果R3bとして供給される。最終的な仮数は、正規化ブロック423において正規化され、結果R6としてステージ6の出力でパス425上に供給される。
[0072]指数パス415は、浮動小数点オペランドA、B及びCの(Ea、Eb、Ecによって表示された)指数部に対して適切な演算を実行して、FMAD演算をサポートする。ステージ1の指数積ブロック424は、例えば、EaとEbを加算し、バイアス(例えば、127)を減算することにより、積A×Bの指数を計算し、ステージ2の指数和ブロック426は、和(A×B)+Cの有効最終指数(EFE)と、ステージ4のアライメントブロック420の動作を制御するために使用される指数差(Ediff)とを求める。指数パス415に沿ったその後の回路ブロックは、ステージ3の右シフトカウントブロック428、ステージ4の指数インクリメントブロック430、及び、ステージ6の指数デクリメントブロック432を含んでおり、仮数結果の特性に基づいて指数EFEを調整し、最終指数E0をパス427上に供給する。
[0073]テストパス417の回路ブロックは、主として、FMAD以外の演算、特に、整数及び浮動小数点の比較演算のために使用される。テストパス417は、ステージ1のビット単位論理ブロック434と、ステージ3の比較ロジックブロック436とを含む。これらのエレメントの動作については後述する。FMAD演算中に、テストパス412は、オペランドCの仮数をステージ3の出力でパス419へ伝搬する。
[0074]主要なデータパスと並列に、MMADユニット220は、パス429上に特殊数信号(SPC)を生成するステージ1の特殊数検出回路438によって、特殊数(例えば、fp32又はfp16オペランドの場合のNaN、INF、非正規数、及び、零)も取り扱う。特殊数検出回路438は、全部で三つのオペランドA、B及びCを受け取り、一般的に従来型の設計からなり、特殊数信号SPCは、所定の特殊数コードを用いて各オペランドの特殊数状態を示すために、オペランド毎に数ビット(例えば、3ビット)を含むことができる。特殊数信号SPCは、必要に応じてパイプラインからの結果(例えば、R6とE0)を特殊値で上書きするために、特殊数信号SPCを使用するステージ7の出力制御ブロック440といった種々の下流の回路ブロックへ供給されてもよく、その実施例については後述する。
[0075]パイプラインの最後で、出力制御ブロック420は、結果OUTを信号パス410に供給し、条件コードCONDを信号パス412に供給する。条件コードは、好適には結果の他に数ビットを含んでおり、結果の性質に関する一般的な情報を搬送する。例えば、条件コードは、結果が正、負、零、NaN、INF、非正規数などであるか否かを示すビットを含んでいてもよい。技術的に知られているように、条件コードが結果と共に供給される場合には、その結果を後に使用する際に、処理中に結果自体ではなく、条件コードを使用することができる。一部の実施の形態では、条件コードは、演算の実行中に例外又はその他のイベントの発生を示すために使用される。別の実施の形態では、条件コードが完全に省略されてもよい。
[0076]データパスに加えて、MMADユニット220は、ステージ0の制御ブロック442によって図4では表現された制御パスを更に提供する。制御ブロック442は、オペコードを受け取り、種々のオペコード依存型制御信号を生成する。オペコード依存型制御信号は、本明細書においては全体的に「OPCTL」として示されており、パイプラインを通るデータ伝搬と同期して各回路ブロックへ伝搬される。(OPCTL信号の種々の回路ブロックへの接続は図4に示していない)。後述の通り、OPCTL信号を使用して、MMADユニット220の種々の回路ブロックの動作を、オペコードに応じて、有効、無効、または、別の態様で制御することができ、その結果、異なった演算を同じパイプラインエレメントを使用して実行することができる。本明細書において参照する種々のOPCTL信号は、オペコード自体、又は、例えば、制御ブロック442内に実施された組み合わせ論理によって、オペコードから導出されたある種のその他の信号を含むことができる。一部の実施の形態では、制御ブロック442は、数段のパイプラインステージ内の複数の制御ブロックを使用して実施される。所与の演算中に異なるブロックに供給されたOPCTL信号は、同じ信号であってもよく、又は、異なる信号であってもよいことが理解されるべきである。本開示事内容に鑑みて、当業者は適当なOPCTL信号を構築することが可能であろう。
[0077]所与のステージの回路ブロックは異なる量の処理時間を必要とし、且つ、特定のステージで必要とされる時間は演算間で変化するであろうことに注意すべきである。したがって、MMADユニット220は、あるパイプラインステージから別のパイプラインステージへの異なるパス上のデータの伝搬を制御するために、種々のタイミング回路及び同期回路(図4に示されていない)を更に含むこともできる。適切なタイミング回路(例えば、ラッチ、伝送ゲートなど)が使用されることもある。
B. ステージ0のエレメント
[0078]本実施の形態では、8ビット(16ビット)整数オペランドが、32ビットオペランドの8(16)ビットのLSBとしてMMADユニット220へ送出され、fp16オペランドは、3ビットのエクストラビット(全て零)が5ビットの指数ビットの左に挿入され、13ビットのエクストラビット(全て零)が10ビットの端数ビットの右に挿入された「パッド」フォーマットで送出される。ステージ0の間に、フォーマット化ブロック400は、好適には、ある種の演算のため受信されたオペランドに更なるフォーマット化を実行する。
[0079]図5はフォーマット化ブロック400のコンポーネントを表すブロック図である。受け取られた各オペランドA0、B0、C0は、複数のパスを並列に進み、各パス上で異なった変換が適用される。8ビットのアップコンバータ504、505、506は、最上位ビット(MSB)を符号拡張することによって、8ビット整数を32ビット整数に変換する。同様に、16ビットのアップコンバータ508、509、510は、符号拡張によって16ビット整数を32ビット整数に変換する。オペランドAの場合、fp16アップコンバータブロック512は、指数バイアスを15から127へ調整することにより、fp16オペランドをfp32オペランドに昇格させる。
[0080]選択マルチプレクサ(mux)514、515、516は、(上述のようにオペコードによって指定された)オペランドフォーマットに対応するOPCTL信号に基づいて各オペランドの正しい入力フォーマットを選択する。mux514−516の後に、各オペランドパスは、条件付きインバータ回路518、519、520を更に有しており、これら条件付きインバータ回路を使用して、全ビットを反転させることによってオペランドの1の補数を生成することができる。条件付きインバータ回路518−520は、OPCTL信号とオペランドの符号ビットとによって制御される。反転が実行される具体的なケースについては後述する。
[0081]一部の実施の形態では、fp16オペランド及びfp32オペランドの場合に、33ビット表現が内部的に使用される。この表現では、先頭の暗黙の1が有効数字ビットに追加され、その結果、24(11)ビットの仮数ビットがfp32(fp16)用に伝搬される。他の実施の形態では、32ビットより小さいフォーマットの整数オペランドが32ビットフィールド内で任意に揃えられ、フォーマット化ブロック400は、このようなオペランドを内部32ビットデータパスのLSBへシフトする。同様に、fp16オペランドは、パディングすることなく送出され、フォーマット化ブロック400は、上述のようにパディングを挿入するか、又は、その他のアライメント操作を実行することができる。
C. ステージ1のエレメント
[0082]図4を再び参照する。フォーマット化ブロック400は、オペランドA、B及びCをステージ1の種々のデータパスへ供給する。ステージ1は、仮数パス413内の乗算器前段ブロック416と、指数パス415内の指数積ブロック424と、テストパス417のビット単位論理ブロック434と、上述のような特殊数検出ブロック438とを有する。
[0083]図6Aは乗算器前段ブロック416のブロック図である。乗算器前段ブロック416は、ブース3のアルゴリズムを使用して乗算のための被乗数(オペランドA)と乗数(オペランドB)を準備し、実際の乗算はステージ2の乗算器ブロック414で実施される。整数オペランドA及びBのケースでは、乗算器前段ブロック416はオペランド全体を操作し、浮動小数点オペランドのケースでは、乗算器前段ブロック416は、先頭の暗黙の、又は、明示の「1」を含む仮数部を操作する。よって、本説明がオペランドを指す場合には、オペランド全体、又は、仮数部だけが必要に応じて使用されていることを理解すべきである。
[0084]図6Aに示すように、乗算器前段ブロック416は、「3X」加算器612、ブース3型エンコーダ614、及び、選択乗算器(mux)616を含む。3X加算器612は、略従来型の設計によるものであり、オペランドA(被乗数)を受け取り、乗算器ブロック414で使用される(例えば、A+2Aを加算することにより)3Aを計算する。オペランドA及び計算された3Aはステージ2へ転送される。ブース3型エンコーダ614は、略従来型の設計によるものであり、オペランドB(乗数)を受け取り、従来型のブース3方式の符号化を実行し、オペランドBのビットから重複する4ビットセグメントを生成する。他の実施の形態では、ブース3方式以外の乗算アルゴリズムが使用され、適当な乗算器前段回路が本明細書に記載した特定の回路に代わって用いられる。
[0085]選択mux616は、OPCTL信号によって制御されて、オペランドBと、ブース3方式で符号化されたオペランドBと、ブース3方式で符号化された形式でレジスタ618、620に格納された定数乗数(例えば、1/2π及び1.0)との間で選択を行う。選択された値は結果BBとしてステージ2へ供給される。FMUL又はIMUL演算の場合には、ブース3方式で符号化されたオペランドBが選択される。その他の演算中には、選択mux616は、(例えば、後述する比較演算のため)ブース3型エンコーダ614の周りでオペランドBを迂回させるように、又は、(例えば、後述の引数還元演算、又は、フォーマット変換演算のため)レジスタ618、620からの定数乗数のうちの一方を選択するように制御され得る。その他の実施の形態では、定数乗数が使用される演算の場合には、乗数は、MMADユニット220の入力でオペランドB0として供給され、又は、乗数のブース方式で符号化されていない表現が乗算器前段ブロック416の入力で選択されて、エンコーダ614を使用してブース方式で符号化される。
[0086]図6Bは指数積ブロック424を表すブロック図である。浮動小数点算術演算の場合、指数積ブロック424は、オペランドA及びB用の指数ビット(Ea,Eb)を受け取り、それらを第1の加算器回路622で加算し、積A×Bの指数を計算する。指数積ブロック424は、第2の加算器回路624を更に有しており、当該第2の加算器回路624は、(正でも、負でも、零でもよい)バイアスβを和Ea+Ebに加算する。バイアスレジスタ626は、一つ以上の候補バイアス値を格納し、OPCTL信号は、演算に依存した方法で適切なバイアスを選択するために使用される。例えば、FMUL演算中に、バイアスβは、二つのバイアスされた指数Ea及びEbが加算されるときに、fp16又はfp32指数バイアスを訂正するために使用される。その他の演算中に、異なる値が、後述するように、バイアスβとして選択される。指数積ブロック424の出力で、選択mux628は、OPCTL信号に応じて、和と二つの入力指数との間で選択を行う。結果Eabはパス431上のステージ2へ伝搬される。
[0087]結果Eabは、好適には、入力指数Ea、Ebより1ビット多いビットを使用して表現され、指数飽和(オーバーフロー)を下流側で検出することを可能にする。例えば、指数Ea及びEbはそれぞれが8ビットであり、Eabは9ビットである。
[0088]図6Cはビット単位論理ブロック434を表すブロック図である。オペランドA及びBは、AND2回路630、OR2回路632、及び、XOR2回路634に供給される。これらの回路のそれぞれは、略従来型の設計からなり、オペランドA及びBの対応するビットに対して指定された論理演算を実行し、32ビットの候補結果を提供する。並行して、条件付きインバータ635が、FRC演算中にオペランドCを反転させ、その他の演算中には変更されていないオペランドCを通過させるように作動される。選択mux636は、OPCTL信号に応じて、種々の論理演算の結果又はオペランドC(若しくはその反転)のうちの一つを選択し、選択されたデータ(R1)がパス433上でステージ2へ伝搬される。選択mux636へのOPCTL信号は、オペランドCがMAD、ADD又はCMP演算のために選択され、論理演算結果のうちの適切な一つの演算結果が論理演算のために選択され、XOR2回路634からの結果がSET演算のために伝搬されるように構成される。一部の演算では、結果R1は下流側コンポーネントにおいて使用されず、このような例では、如何なる選択が行われてもよい。
[0089]ステージ1はまた、図4に示す「I2Fバイト」回路444を有する。この回路は、I2Fフォーマット変換演算中に使用されるものであり、ByteAとしてオペランドAの8ビットのMSBを選択し、パス435を介してByteAをステージ2へ伝搬させる。I2Fバイト回路444はまた、オペランドAの24ビットのLSBの全てが1であるか否かを判定するANDツリー(図示せず)を含む。パス437上のANDツリー出力信号(And24)は、オペランドAの24ビットのLSB全体が1であるならば1にセットされ、そうでなければ0にセットされる単一ビットであってもよい。
D. ステージ2のエレメント
[0090]図4を再度参照する。ステージ2は、仮数パス413上の乗算器ブロック414と、指数パス415上の指数和ブロック426とを有する。テストパス417上で、パス433は、データR1を更に処理することなくステージ3へ伝搬させる。
[0091]図7Aは、乗算器ツリー700を含む乗算器ブロック414のブロック図である。乗算器ツリー700において、ブースマルチプレクサ704は、ステージ1からオペランドA、計算された結果3A、及び、ブース3方式で符号化されたオペランドBBを受け取り、ブース乗算アルゴリズムを実施する。技術的に知られているように、ブース乗算は、ブース3方式で符号化された乗数BB中の各ビットグループに対応する(被乗数Aの倍数である)部分積の選択を伴う。得られた部分積は桁上げ保存加算器(CSA)ツリーを使用して加算され、桁上げ保存加算器は、本実施の形態では、3台の(3:2)CSA706により構成されており、当該CSA706は、2台の(3:2)CSA708にデータを供給し、当該CSA708は、次いで、1台の(4:2)39ビットCSA710にデータを供給する。ブースマルチプレクサ704及びCSA706、708、710は、略従来型の設計であってもよい。最終出力は、冗長(和、キャリー)表現での積A×Bである。和フィールド及びキャリーフィールドは、好適には、オペランドより大きい(例えば、ある実施の形態では、それぞれが48ビットである)。ブース乗算以外のアルゴリズムを実施する回路を含むその他の乗算器回路が代わりに用いられてもよい。
[0092]ある実施の形態では、乗算器は24ビット×24ビットまでの乗算をサポートする。より大きなオペランド(例えば、32ビット整数)の積は、技術的に知られているように、複数の乗算演算(例えば、複数の16ビット×16ビット乗算演算)を使用して合成される。その他の実施の形態では、乗算器は異なるサイズを有し、例えば、32ビット×32ビットまでの乗算をサポートする。このような設計上の選択は、本発明に重要ではなく、チップ面積及び性能のような検討事項に基づくものである。
[0093]乗算器ブロック414はオペランドA及びBのための迂回パスを更に有する。具体的には、選択mux711は、オペランドAと、乗算器ツリー700からの和フィールドとを受け取り、別の選択mux713は、オペランドBと、乗算器ツリー410からのキャリーフィールドとを受け取る。Mux711、713は共通のOPCTL信号によって制御されて、これによって、オペランド(A,B)又は乗算結果(和,キャリー)の何れかが結果R2a及びR2bとして選択され、パス715、717上に伝搬される。乗算演算又はMAD演算の場合、和結果及びキャリー結果が選択されるであろう。その他の演算、例えば、ISAD又は最大値又は最小値の場合、オペランドA及びBが後述するように選択されるであろう。結果パス715、717は、好適には、通常のオペランドより大きく(例えば、32ビットに対して48ビット)、したがって、オペランドA及びBは、mux711、713によって選択されるときに、必要に応じて、先頭の零又は末尾の零を埋め込むことができることに注意すべきである。
[0094]図7Bは、差回路714、選択mux716、及び、8ビット優先エンコーダ718を含む指数和ブロック702のブロック図である。差回路714は、パス431上の積指数Eabと、パス439上のオペランドCの指数部(Ec)とを受け取り、差(Eab−Ec)を計算する。浮動小数点加算演算又はMAD演算中に、差回路714は、差の符号を表現する信号Sdiffをパス721上に供給する。この信号は、和(A×B)+Cのための有効最終指数(EFE)としてEabとEcのうちの大きい方を選択するように選択mux716を制御するために使用される。信号EFEは、パス723の下流側へ伝搬される。差(Ediff)自体は、正でも負でもよく、パス725上の下流側コンポーネントへ伝搬される。浮動小数点加算又はMAD以外の演算の場合、指数和ブロック702はその他の目的のために利用され、したがって、差回路714は、後述のように信号Sdiff及びEdiffの生成を制御するOPCTL信号を受け取る。
[0095]優先エンコーダ718は、オペランドAの8ビットのMSBの間で(もしあれば)先頭の1の位置を特定するために、I2F変換演算中に使用される。MSB(信号ByteA)はパス435を介して優先エンコーダ718に供給され、優先エンコーダの出力BPは、(8ビットのMSBの全部が零であり、出力BPが零であるならば)先頭の1のビット位置から取り出された指数を表現する。I2F変換演算中に、差回路714は、後述するように出力選択中に信号And24を更に使用する。
E. ステージ3のエレメント
[0096]ステージ3は、仮数パス413上の乗算器後段ブロック418と、指数パス415上の右シフトカウント回路428と、テストパス417上の比較ロジック436を有する。
[0097]図8Aは、中間積(IP)加算器804と、スティッキービットロジック808と、整数mux810と、入力選択mux812と、出力選択mux814とを含む乗算器後段ブロック418のブロック図である。OPCTL信号に応じて、入力選択mux812は、(ステージ2の乗算器ブロック414からの)パス717上の結果R2bと、レジスタ816に格納された定数オペランド(値1)との間で選択を行う。後述するように、mux812のためのOPCTL信号は、オペランドAの2の補数が必要とされるある種のフォーマット変換演算中に、定数オペランドを選択する。このようなケースでは、オペランドAはステージ0で反転させられ、1がIP加算器804を使用して加算される。その他の演算の場合、mux812は結果R2bを選択できる。
[0098]IP加算器804は、和RPを生成するために結果R2aとR2b(又は、R2aと定数オペランド)を加算する。IP加算器804は、パス805を介して和RPの2ビットのMSB(RP2)を比較ロジックブロック806へ供給する。乗算演算又はMAD演算のケースでは、和RPは積A×Bである。その他の演算の場合、和RPは、A+Bを表現するか(例えば、オペランドA及びBが乗算器ツリー700の周りで迂回させられた場合)、又は、〜A+1を表現できる(例えば、オペランドAがステージ0で反転させられ、乗算器ツリー700の周りで迂回させられ、定数オペランドが入力mux812によって選択される)。
[0099]上述の通り、結果R2a及びR2bは、通常のオペランドより幅が大きく(例えば、48ビット)、従って、IP加算器804は48ビット加算器として実施され、パスRPはキャリーを収容するために49ビット幅であってもよい。乗算器後段ブロック802は、好適には、和RPを、例えば、LSBを落とすことにより、通常のオペランド幅(例えば、32ビット)を有する結果R3aまで縮小する。スティッキービットロジック808は、略従来型の設計でもよく、好適には、(落とされたビットの一部又は全部)スティッキービットSB3を収集し、後述するように丸めのためにスティッキービットを使用する下流側コンポーネントへスティッキービットを供給する。並行して、整数mux810は整数オペランドを取り扱い、mux810は、OPCTL信号に応じて49ビット和RPの上位32ビット又は下位32ビットの何れかを選択する。選択は、オペランドR2a及びR2bが幅広いパス715、717上でどのように揃えられているかに依存する。
[0100]出力mux814は、演算及びオペランドフォーマットに依存するOPCTL信号に応じて浮動小数点パス又は整数パスから結果R3aを選択し、R3aをパス421上に供給する。加えて、迂回パス817は、結果R2aをIP加算器804の周りを迂回させ、出力mux814によって選択することを可能にし(オペランドAであることもある)、従って、R2aを結果R3aとしてパス421上に伝搬することが可能である。
[0101]図4を再度参照する。右シフトカウント回路428はOPCTL信号に応答する。FMAD(又はFADD)演算中に、右シフトカウント回路428は、浮動小数点加数(例えば、A×B+C)のための適切なアライメントを決定するためにパス725上の指数差Ediffを使用する。特に、指数が小さい方の加数が右シフトされ、これによって、アライメントは大きい方の指数を使用して表現される。したがって、右シフト回路428は、A×B又はCが大きい方の指数を有するか否かを判定するために指数差Ediffの符号を使用し、後述するようにどちらの加数が右シフトされるかを制御するスワップ制御信号(SwapCtl)を生成する。右シフトカウント回路428は、後述するように選択された加数がどの程度まで右シフトされるかを制御するシフト量信号(RshAmt)を生成するために指数差Ediffの絶対値を更に使用する。このシフト量は、例えば、加数の幅に基づいてクランプされる。これらの信号はパス441上のアライメントブロック420へ伝搬される。
[0102]OPCTL信号の使用によって、右シフトカウント回路428は、右シフトが使用され得るその他の演算のために利用される。このような使用の実施例を後述する。
[0103]図8Bは、AB符号回路820、2値テストロジックユニット822、及び、選択mux824を含む比較ロジックブロック436を表すブロック図である。比較ロジックブロック436は、入力R1、R2a及びR2bを受け取り、パス419上に結果R3bとして伝搬させるために、そのうちの一つを選択するように構成される。MAD又は加算演算のケースでは、オペランドCは入力R1として受け取られ、変更されることなく、比較ロジックブロック436の中を伝搬させられる。LOP、CMP、MAX、MIN及びSET演算を含むその他の演算の場合、比較ロジックブロック436はその入力のうちの別の一つを選択する。
[0104]AB符号回路820は、パス805上でIP加算器804(図8A)から2ビットのMSBであるRP2を受け取る。最大値(FMAX又はIMAX)、最小値(FMIN又はIMIN)、又は、2値テスト(FSET又はISET)演算の場合、オペランドBは、好適には、ステージ0内の条件付きインバータ519(図5参照)によって反転され、オペランドA及びBは、上述のように選択muxを使用してIP加算器804へ迂回される。このようなケースでは、結果RPは差A−Bであり、MSBのRP2は、差が負である(B>Aを意味する)か否かを示す。AB符号回路820はMSBを受け取り、符号信号Sab(例えば、A−Bが正であるならばアサートされ、そうでなければ、デアサートされる1ビット信号)を生成する符号信号Sabは、パス821を介して2値テストロジックユニット822及び下流側コンポーネントへ供給される。
[0105]符号信号Sabに加えて、2値テストロジックユニット822は、パス429を介してステージ1の特殊数検出ブロック438(図4)からの特殊数信号SPCと、OPCTL信号と、ステージ1のビット単位論理回路434からの結果R1とを受け取る。結果R1は、条件付き選択演算(FCMP、ICMP)の場合にはオペランドCであり、ステージ3内の2値テストロジックユニット822がアクティブ状態であるその他の演算の場合にはXORユニット634の出力である。
[0106]これらの入力信号に応じて、2値テストロジックユニット822は、選択mux824の動作を制御する比較選択信号(CSEL)と、図4に示したようにパス825上でステージ7へ伝搬させられるブール結果信号(BSEL)とを生成する。CSEL信号はパス827を介して下流側コンポーネントへも伝搬させられる。
[0107]CSEL信号及びBSEL信号の生成は演算に依存する。FMAX、IMAX、FMIN又はIMINのケースでは、オペランドA及びBは、乗算器ツリー700の周りで迂回させられ(図7A)、結果R2a及びR2bとして供給される。2値テストロジック822は、符号信号Sabに基づいてこれらの二つのオペランドのうちの一方を選択するためにCSEL信号を生成する。
[0108]条件付き選択演算(FCMP、ICMP)の場合、パス433上の結果R1はオペランドCである。特殊数信号SPCは、特に、オペランドCが零(又は、その他の特殊数)であるか否かを示す。2値テストロジック822は、条件C≧0が満たされるか否かを判定するためにオペランドC及び特殊数信号SPCの符号ビットを使用し、それに応じてオペランドA(R2a)とB(R2b)のうちの一方を選択する。
[0109]2値テスト演算(FSET、ISET)の場合、2値テストロジック822は、ブール型の真又は偽信号BSELを生成する。この信号はパス825を介してステージ7へ供給され、そこで、ブール結果の適切な32ビット表現を生成するために使用される。このケースでは、パス433上の結果R1は32ビットのXOR2結果を提供する。2値テストロジック822は四つの基本テスト、即ち、「順序無し」(A?B)、「等価」(A=B)、「大なり」(A>B)、及び、「小なり」(A<B)を実行する。A?Bテストは、AとBのうちの少なくとも一方がINF又はNaNである場合にブール型の真を生じ、これは、特殊数信号SPCを参照することによって判定される。A=Bテストは、パスR1上のXOR結果の全ビットが零であるならば、ブール型の真を生じる。A<Bテストは、パスSab上の符号信号がA−Bは負数であることを示すならば、ブール型の真を生じる。A>Bテストは、その他の三つのテストが全て偽を生じるならば、ブール型の真を生じる。否定テスト(等しくない、より大きくない、より小さくない、順序無しではない)は、四つの基本テストの結果を反転させることによって解決される。付加的な組み合わせテスト(例えば、A≦Bなど)は、四つの基本テストからの結果又はそれらの否定の適当なブール型のORを構築することによってサポートされる。ある実施の形態では、2値テストロジック822は、複数のテストを並列に実行し、OPCTL信号に基づいて結果BSELを選択するように構成される。結果はSET演算中に無視されるので、mux824への入力のうちのいずれかが結果R3bとして選択され得る。
F. ステージ4のエレメント
[0110]図4を再度参照する。ステージ4は、アライメントブロック420及び指数インクリメントブロック430を含む。
[0111]図9はアライメントブロック420を表すブロック図である。FMAD又はFADD演算中に、アライメントブロック420は、浮動小数点加算に備えて仮数を揃えるために使用される。アライメントブロック420は、後述するようにその他の演算中に右シフトを実行するためにも利用される。アライメントブロック420のための制御信号は、部分的に、パス441を介して右シフトカウント回路428によって供給される。
[0112]アライメントブロック420は、「スモール」スワップmux904及び「ラージ」スワップmux906を含み、各スワップmuxがパス421、419から入力R3a及びR3bを受け取る。スモールスワップmux904及びラージスワップmux906は、右シフトカウント回路428からのSwapCtl信号で共通に制御され、その結果、スモールスワップmux904が入力R3a、R3bのうちの一方をスモールオペランドパス908へ向けるときに、ラージスワップmux906は入力R3b、R3aの他方をラージオペランドパス910へ向ける。FMAD演算の場合、オペランドは、(A×B)及びCに対応し、指数が小さい方のオペランドがスモールオペランドパス908へ向けられる。
[0113]スモールオペランドパス908は、右シフト回路912、スティッキービットロジック914、シフトmux916、及び、条件付きインバータ918を含む。右シフト回路912は、右シフトカウント回路804からのRshAmt信号によって制御されるシフト量(例えば、零から32ビット)で、スモールオペランドパス908上のデータビットを右シフトする。ある実施の形態では、右シフト回路912は、RshAmt信号又は別個のOPCTL信号(図示されず)の何れかによって、算術シフト又は論理シフトを実行するように制御される。
[0114]スティッキービットロジック914は、右シフト回路912によってシフトアウトされたLSBの一部又は全部を取得し、後述するよう丸めに使用するためにパス915を介してステージ5へスティッキービットSB4を供給する。ある実施の形態では、スティッキービットロジック914は、パスSB3を介してステージ3からスティッキービットSB3を更に受け取り(図8Aを参照せよ)、スティッキービットロジック914が受け取られたスティッキービットSB3を伝搬させるか、又は、新しいスティッキービットを生成するかを、OPCTL信号に応じて制御することができる。
[0115]シフトmux916は、前の乗算が次のビット位置にキャリーアウトを生じる場合に、アライメントを調整するために設けられている。シフトmuxは、シフト量RshAmtが基礎としている指数差(Ediff)が負である場合に、アライメントシフトの正確な実施をサポートするためにも使用される。このようなケースは、RshAmtを得るために右シフトカウント回路428内でEdiff値を反転させ、次に、1ビットの更なる右シフトを実行させるためにシフトmux916を作動させることによって取り扱われる。一部の実施の形態では、シフトmux916は、オペランドが付加的な特殊ロジックを使用することなく32ビットだけシフトされたときに零が返されるべき演算をサポートするためにも使用される。
[0116]条件付きインバータ918は、OPCTL信号に応じて、一部の例では、比較ロジックブロック436からのCSEL信号又はSab信号(図8Bを参照せよ)のようなその他の信号に応じて、スモールオペランドパス918上のオペランドを反転させるか、又は、反転させない。条件付き反転は、例えば、ステージ5の間に減算演算を実施するために使用され得る。出力信号R4aはパス909上でステージ5へ供給される。
[0117]ラージオペランドパス910は、条件付き零回路920及びシフトmux922を含む。条件付き零回路920は、OPCTL信号に応じ、パス910上のオペランドを零で置き換えるために使用される。条件付き零回路は、例えば、R3a又はR3bを変更することなく(後述する)ステージ5の加算器に通すことが望ましい演算中に使用される。FMAD演算の場合、条件付き零回路920は非アクティブ状態であり、ラージオペランドは変更されずに通過する。シフトmux922は、シフトmux916と同様に、前の乗算においてキャリーアウトが生じた場合に、アライメントを調整するために使用され得る。
[0118]ラージオペランドパス410からの出力信号R4bはパス911でステージ5へ供給される。
[0119]図4を再度参照する。指数インクリメントブロック430は、パス723上の有効最終指数EFEと、パス421上の積結果R3a(又は、積結果の最上位ビットだけ)とを受け取る。FMAD又はFMUL演算中に、指数インクリメントブロック430は、乗算器後段ブロック418における48ビット和とキャリー結果(R2a、R2b)の加算が49番目のビット位置にキャリーを生じさせたか否かを検出する。もしそうであるならば、有効最終指数EFEは1だけインクリメントされる。修正された(又は修正されていない)有効最終指数EFE2がパス443を介してステージ4へ供給される。
G. ステージ5のエレメント
[0120]ステージ5は端数和ブロック422を含む。加算演算及びMAD演算中に、このブロックは加算を実行する。丸めを使用する全演算のための丸め処理もまたこのステージで実施される。
[0121]図10は、プラス1加算器1002と、AND2回路1004と、インバータ1006と、丸めロジックユニット1008と、選択mux1010とを含む端数和ブロック422のブロック図である。加数R4a及びR4bは、アライメントブロック420からパス909、911上に受け取られる。プラス1加算器1002は、略従来型の設計であってもよいものであり、加数を加算し、Sum出力を生成し、1をSumに加算してSum+1出力を生成する。インバータ1006は、Sum出力を反転させ、〜Sum出力を生成する。これらの出力は、丸めだけでなく、2の補数算術をサポートする。
[0122]並行して、AND2回路1004は、オペランドR4a及びR4bの対応するビットに論理AND演算を実行し、32ビットの結果を供給する。AND2回路1004は、後述するようにFRC演算中に使用される。その他の演算中に、AND2回路1004は、迂回されるか、又は、低電力アイドル状態に入れられる。
[0123]丸めロジック1008は、略従来型の設計であってもよく、OPCTL信号と、比較ロジックブロック436からのパス821上の符号信号Sabと(図8Bを参照せよ)、パス915上のスティッキービットSB4と、プラス1加算器1002からの選択されたMSB及びLSBとを受け取る。これらの信号に応じて、丸めロジック1008は、mux1010に、結果R5としてSumと、Sum+1と、〜Sumと、AND2出力とのうちの一つを選択するように命令し、選択された結果R5がパス1011に伝搬させられる。
[0124]結果R5の選択は検討事項の数に依存する。例えば、丸めロジック1008は、好適には、IEEE標準算術のために定義され、異なるモードが異なる結果を選択する可能性がある4通りの丸めモード(最近接、切り下げ、切り上げ、及び、切り捨て)を実施する。OPCTL信号又は別の制御信号(図示せず)は、丸めモードのうちの一つを指定するため使用されてもよい。更に、選択は、フォーマット(整数又は浮動小数点)、結果の正負、絶対値又は否定が要求されたか否か、及び、類似した検討事項にも依存する。種々の丸めモードによる正数及び負数を丸める従来の規則が実施されてもよい。FRC演算の場合、AND2回路1004の出力が選択され、その他の演算の場合、この出力は無視される。
H. ステージ6のエレメント
[0125]図4を再度参照する。ステージ6は、正規化ブロック423及び指数デクリメントブロック432を含む。FMAD、FMUL又はFADD演算中に、正規化ブロック423は、先頭ビットが1になるまで、結果を左シフトすることにより仮数R5を揃えるよう動作する。本状況における左シフトは、2による乗算を意味するので、指数EFEを相応に削減する左シフト量が指数デクリメントブロック432に供給され、それによって、最終指数E0を生成する。その他の演算中に、正規化ブロック423は後述するように左シフトを実行するために利用される。
[0126]図11は正規化ブロック423のブロック図である。優先エンコーダ1108は、パス1011上の加算結果R5を受け取り、先頭の1の位置を判定する。この情報はシフト制御回路1110へ供給され、シフト制御回路が左シフト量信号LshAmtを生成する。LshAmt信号は左シフト回路1112へ供給され、指数デクリメントブロック432(図4)へも供給される。左シフト回路1112は、指定されたビット数だけ結果R5を左にシフトし、結果R6をパス425上に供給する。指数デクリメントブロック432は、LshAmt信号に従って指数EFE2を削減し、結果として得られた最終指数E0をパス427上に供給する。
[0127]シフト制御回路1110は、OPCTL信号、パス443からのEFE2信号、及び、パス429からの特殊数信号SPCを更に受け取り、左シフト回路1112を利用してその他の状況において左シフトを実行することを可能にする。その実施例については、後述する。
I. ステージ7のエレメント
[0128]図4を再度参照すると、ステージ7は、パス410、412を介してMMADユニット220の外部にあるコンポーネントへ送出するための最終結果(OUT及びCOND)をフォーマット化し、選択する出力制御ブロック440を含む。図12は出力制御ブロック440のブロック図である。浮動小数点動作の場合、フォーマットブロック1210は、パス427経由で最終指数E0を、パス425経由で最終仮数R6を受け取る。浮動小数点演算の場合、フォーマットブロック1210は、OPCTL信号によって指定されたfp32又はfp16フォーマットで結果Rdataを生成するために値E0及びR6を使用する。
[0129]整数演算の場合、フォーマットブロック1210は、結果R6を受け取り、指数E0を棄てる。フォーマットブロック1210は、変更されていない整数結果R6を通過させるか、又は、適切なフォーマット化を適用でき、例えば、32ビットより少ないビットを使用する整数フォーマットのために、32ビット結果の適切な位置に有効ビットを揃える。一部の実施の形態では、フォーマットブロック1210は、更に、オーバーフロー又はアンダーフローする整数出力を(例えば、指定された整数フォーマットの最大値又は最小値に)クランプする。
[0130]フォーマット化された結果Rdataは、入力として、最終選択mux1212へ供給され、最終選択muxは、パス410上の最終結果OUTとして、結果Rdataと一つ以上の所定の値との間で選択を行う。ある実施の形態では、所定の値は、fp16フォーマット及びfp32フォーマットの特殊数NaN及びINFと、32ビットブール型の真の値(例えば、0x1)及び偽の値(例えば、0x0)を含む。これらの選択された最終結果OUTは、更に、その結果に基づいて条件コードCONDを生成する条件コード回路1218へ供給される。結果フォーマットは部分的にオペコードに依存するので、条件コード回路1218は、期待されるフォーマットを示すOPCTL信号を受け取る。条件コードの実施例については上述している。
[0131]浮動小数点算術演算中に、指数飽和ロジック1216は、最終指数E0を受け取り、指数オーバーフロー(又はアンダーフロー)が起こったか否かを判定する。この判定は、好適には、fp16又はfp32フォーマットが使用中であるか否かを示すOPCTL信号に部分的に基づいている。指数飽和ロジック1216からの指数飽和信号Esatは、最終結果選択ロジック1214へ供給される。
[0132]最終結果選択ロジック1214は、OPCTL信号、(ステージ1からの)パス429上の特殊数信号SPC、(ステージ3からの)パス825上のブール型選択信号BSEL、及び、指数飽和信号Esatを含む制御信号の組み合わせに応じて、最終選択mux1212の動作を制御する。最終結果の選択は、演算及び結果フォーマット、並びに、特殊数又は飽和の発生に依存して変化する。
[0133]例えば、浮動小数点算術演算の場合、最終結果選択ロジック1214は、好適には、特殊数に関連した算術の規則(例えば、NaNがある数に加算されるか、又は、ある数によって乗算されるとNaNであるなど)を実施するために、特殊数信号SPCを使用する。入力オペランド(A、B又はC)のうちの一つが特殊数であるとき、最終結果選択ロジック1214は、mux1212に、結果Rdataより優先して、対応する特殊数を選択するように命令する。更に、最終結果選択ロジック1214は、指数オーバーフロー又はアンダーフロー条件の場合に、特殊数(例えば、INF又は零)を選択するために飽和信号Esatも使用する。
[0134]2値テスト(FSET、ISET)演算のケースにおいて、最終結果選択ロジック1214は、数値結果Rdataを無視して、ブール型の真と論理型の偽の出力との間で選択を行うために、ブール型の選択信号BSELを使用する。
J. オペランド迂回又は通過パス
[0135]上述のように、MMADユニット220は、オペランドが種々の回路ブロックの中を変更されることなく伝搬することを可能にする迂回パス又は通過パスを提供する。例えば、オペランドAはステージ1の乗算器前段ブロック416を通過する(図6A参照)。オペランドAは更に、結果R2aとしてステージ2において乗算器ツリーの周りを迂回させられ(図7A参照)、結果R3aとしてステージ3においてIP加算器804の周りを迂回させられ(図8A参照)、結果R4aとしてスモールオペランドパス908の中を伝搬させられる(図9参照)。更に、条件付き零回路920は、強制的に結果R4bを零とし、その結果、オペランドAがステージ5においてプラス1加算器1002によって零に加算されるようにする(図10参照)。結果Sumが次にmux1010によって選択されるならば、結果R5はオペランドAである。
[0136]同様に、オペランドBは、ステージ1においてパスBBまで乗算器前段ブロック416の周りを迂回させられ(図6A参照)、結果R2bとしてステージ2の乗算器ツリー700の周りを迂回させられる(図7Aを参照)。オペランドCは、結果R1としてステージ1のビット単位論理ブロック434を通過させられ(図6Cを参照)、結果R3bとしてステージ3の比較ロジックブロック436を通過させられる(図8B参照)。本実施の形態では、オペランドB及びCのための更なる迂回パスは設けられないが、代替的な実施の形態では、(例えば、オペランドAに関して表された迂回と類似した)更なる迂回が必要に応じて設けられる。
[0137]したがって、セクションIIIにおける動作説明は、特定のステージへ迂回させられ、又は、通過させられた種々のオペランドを参照し、ある種のステージを通る迂回パス又は通過パスを辿ることは、必ずしも後続のステージの迂回パスを追跡し続けることを要求しないことが理解されるべきである。その上、あるステージにおいて修正された値は、後続のステージを通過する迂回パスの方へ進むことができる。特定の回路ブロックが演算中に迂回される場合、そのブロックは、電力消費を削減するために非アクティブ状態にセットされるか、又は、例えば、選択mux又はその他の回路エレメントの使用によって、その出力が無視された状態で正常に動作することが許容される。
[0138]本明細書に記載したMMADユニットは、説明のための例であり、変形と変更が可能であることが認識認されるであろう。本明細書に記載した回路ブロックの多くは、従来通りの機能を提供し、技術的に知られている技術を使用して実施され得るので、これらのブロックの詳細な説明を省略している。演算回路のブロックへの分割を変更してもよく、ブロックを組み合わせてもよく、又変更してもよい。その上、後で明らかになるように、パイプラインステージの段数と、特定の回路ブロック又は演算の特定のステージへの割当は、変更又は変形してもよい。特定の実施形態のための回路ブロックの選択及び配置は、サポートされるべき演算の組に依存し、当業者は、本明細書に記載したブロックの全部が演算のあらゆる組み合わせのために要求されるとは限らないことを認識するであろう。
III. MMADユニット動作の実施例
[0139]MMADユニット220は、好適には、図3に掲載された演算の全てを面積効率に優れた方法でサポートするために上記の回路ブロックを利用する。したがって、MMADユニット220の動作は、少なくともある観点において、実行されている演算に依存する。以下のセクションは、図3に掲載した演算のそれぞれを実行するためのMMADユニット220の使用について説明する。
A. 浮動小数点演算
[0140]MMADユニット220によってサポートされている浮動小数点演算を図3の302に示す。算術演算(FADD、FMUL、FMAD)の場合、指数パス415は指数を計算するため使用され、仮数パス413は仮数を計算するため使用される。その他の浮動小数点演算(FCMP、FMIN、FMAX及びFSET)は、fp32及びfp16フォーマットでは、相対的な絶対値が32ビット符号無し整数であるかのように取り扱うことによって正確に決定されるという特性を利用し、これらの演算は仮数パス413及びテストパス417を使用して取り扱われる。
1. FMAD演算
[0141]FMAD演算は、MMADユニット220にfp16又はfp32フォーマットで供給されたオペランドA、B及びCについてA×B+Cを計算し、入力オペランドと同じフォーマットで結果を返す。
[0142]ステージ0において、オペランドA0、B0及びC0が受け取られ、選択mux514−516(図5)の動作によって変更されることなく、オペランドA、B及びCへフォーマット化ブロック400を経て渡される。
[0143]ステージ1において、乗算器前段ブロック416は、オペランドAの仮数部から3Aを計算し、ブース3は、オペランドBの仮数部を符号化し、ブース方式で符号化された仮数をパスBB上に伝搬させる。指数積ブロック424は、オペランドA及びBの指数部(Ea、Eb)を受け取り、Ea+Ebを計算し、バイアスβが好適には和において正確なfp16又はfp32指数バイアスを再確定するために使用される。オペランドCの仮数部はビット単位論理ブロック434へ送出され、オペランドCがmux636によって選択され(図6C)、結果R1としてパス433上に伝搬される。オペランドCの指数部(Ec)は、指数パス415の中でパス439上をルーティングされる。同様にステージ1の間に、特殊数検出ブロック438は、オペランドA、B又はCのうちの何れかが特殊数であるか否かを判定し、ステージ7で使用するためにパス429上に適切な特殊数信号SPCを生成する。
[0144]ステージ2において、乗算器ブロック414は、A×Bの仮数部を計算し、結果R2a及びR2bとして和フィールド及びキャリーフィールドを選択する。指数和ブロック426は、パス上の積指数と、パス431上のEabと、パス439上のオペランドCの指数部(Ec)とを受け取る。差ユニット704(図7B)は、Eab−Ecを計算し、パス725上に結果Ediffを伝搬させる。同様に、Eab−Ecの符号に基づいて、EabとEcの一方が有効最終指数EFEとして選択される。オペランドC(R1)の仮数はパス433上を通過させられる。
[0145]ステージ3において、乗算器後段ブロック418は、和結果R2aとキャリー結果R2bを加算し、結果R3aをパス421上に供給する。スティッキービットロジック808(図8A)が動作するが、本実施の形態では、スティッキービットSB3は後段で無視され、積A×Bは丸められるのではなく、切り捨てられる。右シフトカウントブロック428は、浮動小数点加算用にどのオペランドをシフトすべきかを決定するために、パス725上のEdiffの符号を使用し、対応するSwapCtl信号を生成する。右シフトカウントブロック428は、更に、選択されたオペランドをシフトする際に用いるビット数を決定するために、パスEdiff上の値の絶対値を使用し、適切なRshAmt信号を生成する。比較ロジック436は、オペランドCの仮数部をパス419上に結果R3bとして通過させる。
[0146]ステージ4において、アライメントブロック420は、積A×Bの仮数を結果R3aとして受け取り、オペランドCの仮数を結果R3bとして受け取る。右シフトカウントブロック804からのSwapCtl信号に基づいて、スワップmux904、906(図9)は、オペランドの一方をスモールオペランドパス908へ向け、他方をラージオペランドパス910へ向ける。小さい方のオペランドは右シフト回路912によって右シフトされ、スティッキービットロジック914がシフトアウトされたビットからスティッキービットSB4を生成する。その結果の揃えられた加数R4a、R4bはパス909、911に供給される。指数インクリメントブロック430(図4)は積A×B(R3a)の仮数を受け取り、上述のように、有効最終指数EFEをインクリメントするか、又は、インクリメントしない。結果EFE2はパス443へ伝搬させられる。
[0147]ステージ5において、端数和ブロック422は揃えられた加数R4a及びR4bを受け取る。プラス1加算器1002(図10)は、Sum出力とSum+1出力を生成し、インバータ1006は反転されたSumを生成する。丸めロジック1008は、パスSB4上のスティッキービットを受け取り、スティッキービット、選択された丸めモード、及び、プラス1加算器1002において計算された和の符号に基づいて、Sum出力とSum+1出力との間で選択を行うために選択mux1010を制御する。結果として得られる仮数R5がパス1011上で伝搬される。
[0148]ステージ6において、正規化ブロック423は仮数R5を正規化する。優先エンコーダ1108(図11)は、先頭の1の位置を検出し、そのデータをシフト制御ユニット1110へ供給し、シフト制御ユニットは対応するLshAmt信号を生成する。左シフトブロック1112は仮数を左へシフトし、結果R6をパス425上に伝搬させる。指数デクリメントブロック432(図4)は、有効最終指数EFE2をそれに応じて下方へ調整し、得られた最終指数E0をパス427上に伝搬させる。
[0149]ステージ7において、出力制御回路440は最終結果を生成する。フォーマットブロック1210(図12)は、指数E0及び仮数R6を受け取り、適当なフォーマット(例えば、fp32又はfp16)でRdata上に正規化数を生成する。飽和ロジック1216は指定されたフォーマットに従って指数E0を評価し、オーバーフローがあれば検出し、適切な飽和信号Esatを生成する。最終結果選択ロジック1214は、飽和信号Esatと、特殊数信号SPCとを受け取る。この動作のために、最終結果選択ロジック1214は、mux1212に、最終結果が特殊数であるべきことをEsat又はSPC信号が示さない限り、結果Rdataを選択するように命令する。そのケースでは、適切な特殊数が最終結果として選択される。上述のように、最終結果選択ロジック1214は、入力オペランドのうちの一つが特殊数であるケースでは、IEEE754に準拠した規則(又はその他の規則)を実施可能である。
2. FMUL及びFADD演算
[0150]浮動小数点乗算(FMUL)の場合、MMADユニット220はオペランドAとして被乗数を受け取り、オペランドBとして乗数を受け取る。値0.0(浮動小数点零)が好適にはオペランドCとして供給される。上述したFMAD演算は、次に、ステージ4において、スティッキービットロジック914(図9)が好適にはステージ3からのスティッキービットを通過させて、積を丸め処理することを可能にすることを除いて、積A×B(+0.0)を生成するように実行される。一部の実施の形態では、オペランドCは、ステージ4の条件付き零ブロック920(図9)の使用によって強制的に零にされ、その結果、オペランドCには任意の値が供給されてもよい。
[0151]浮動小数点加算(FADD)の場合、MMADユニット220はオペランドA及びCとして加数を受け取る。ある実施の形態では、FMAD演算は、1.0にセットされたオペランドBを用いて、(A×1.0)+Cを計算するよう実行され、オペランドBを1.0にセットすることを、例えば、浮動小数点1.0をオペランドBとしてMMADユニット220に供給することによって、又は、レジスタ620からブース3方式で符号化された1.0を選択するように乗算器前段選択mux616(図6A)を動作させることによって行なうことができる。
[0152]FADDの代替的な実施の形態では、オペランドBは(例えば、浮動小数点零を入力オペランドとしてMMADユニット220に供給することにより)0.0にセットされ、オペランドA及びBはステージ3へ迂回させられ、ステージ3では、和A+0.0が乗算器後段ブロック418内のIP加算器804(図8A)によって計算され、或いは、代替的な実施の形態では、オペランドAは結果R3aとしてIP加算器804の周りを更に迂回させられる。後に続くステージは、FMAD演算に関する限り、A+Cを計算するよう動作する。
3. FMIN及びFMAX演算
[0153]浮動小数点最大値(FMIN)及び最小値(FMIN)演算は、それらの二つのオペランドのうち、大きい方又は小さい方の一つを返す。上述のように、これらの、及び、その他の比較に基づく演算は、仮数パス413とテストパス417のコンポーネントを使用して取り扱われる。MMADユニット220は、FMAX又はFMIN演算が実行されるオペランドA及びBを受け取り、オペランドCはいかなる値にセットされてもよい。
[0154]FMIN及びFMAX演算の場合、オペランドBはステージ0で反転させられ(〜B)、オペランドA及び〜Bの32ビット全部が、それぞれ、結果R2a及びR2bとしてステージ3へ通過させられる。ステージ3において、IP加算器804(図8A)は、和A+〜B(即ち、A−B)を計算する。この結果RP2の2ビットのMSBは比較ロジックブロック436へ供給される。オペランドA及びBは浮動小数点数であるが、比較演算の目的で、これらのオペランドは、fp32及びfp16フォーマットを定義する方法を理由に、整数であるかのように減算され得ることに注意すべきである。
[0155]比較ロジックブロック436において、AB符号回路820(図8B)は、パスRP2上の信号を受け取り、適切な符号信号Sabを生成する。2値テストロジック822は上述のように選択を行い、FMAXの場合、(A+〜B)が負であるならば(即ち、BがAより大きいならば)、Bが選択され、そうでなければ、Aが選択され、FMINの場合、(A+〜B)が負であるならば、Aが選択され、そうでなければ、Aが選択される。A=Bであるケースは、FMIN又はFMAXの何れのためのオペランドを選択しても正しい結果を与えるので、特別に取り扱われないことに注意すべきである。2値テストロジック822は、mux824にR2a(オペランドA)とR2b(オペランド〜B)のうちの適切な一つを結果R3bとして伝搬させるよう指示する適切なCSEL信号を生成する。
[0156]ステージ4において、スモールスワップmux904(図9)は、スモールオペランドパス908へ伝搬させるための結果R3bを選択し、ラージスワップmux906は、結果R3aを選択する。この結果R3aは、ステージ3の間の演算に起因してA−Bであってもよい。右シフトカウント回路428を使用して、指数に関わらず、OPCTL信号に応じてこの結果を生成するために、SwapCtl信号の適切な状態を生成してもよい。ラージオペランドパス910において、条件付き零ブロック914は結果R4bを零にするよう作動される。スモールオペランドパス908において、結果R3bは、結果R4aとして伝搬させられる。オペランド〜B(ステージ0で反転されている)がステージ3で選択されたならば、条件付き反転回路918が結果R4aを再反転させるために使用される。このケースを検出するため、条件付き反転回路918はパス827からCSEL信号を受け取る(図8B参照)。
[0157]ステージ5において、プラス1加算器1002(図10)は、R4a(A又はB)とR4b(零)を加算する。和の結果(即ち、選択されたオペランドA又はB)が結果R5としてmux1010によって選択される。
[0158]ステージ6において、シフト制御回路1110(図11)は、LshAmtを零にセットすることによって、OPCTL信号に応答し、結果R5が変更されることなく結果R6として伝搬されるようにする。
[0159]ステージ7において、フォーマットブロック1210(図12)は、そのままの結果R6をRdataとして供給する。A又はBが特殊数であるならば、最終結果選択ロジック1214は、結果Rdataを適切な特殊数で上書きするようにmux1212を作動できる。例えば、A又はBがNaNであるならば、FMAX又はFMINの結果は強制的にNaNにすることができる。
4. FSET演算
[0160]2値テスト(FSET)演算の場合、MMADユニット220はオペランドA及びBを受け取り、いかなる値がオペランドCとして供給されてもよい。上述のFMIN及びFMAX演算の場合と同様に、オペランドBはステージ0で反転され、オペランドA及び〜Bはステージ3へ迂回され、ステージ3において、オペランドはPP加算器802(図8A)を使用して減算され、MSBのRP2が比較ロジックブロック436へ供給される。
[0161]ステージ1において、オペランドA及び〜Bは通過させられ、一方、ビット単位論理ブロック434が動作して、mux636(図6C)は、結果R1として伝搬させるためにXOR2ユニット634の結果を選択する。
[0162]ステージ3において、AB符号回路820(図8B)は、信号RP2を受け取り、符号信号Sabを生成する。2値テストロジック822は、Sab信号、XOR2の結果(R1)、特殊数信号SPC、及び、実行されるべき2値テストを指定するOPCTL信号を受け取る。2値テストロジック822は、上述のようにそのテストを実行し(セクションII.Eを参照)、ブール型の結果BSELをパス825に伝搬させる。
[0163]ブール型の結果BSELはパス825上をステージ7まで伝搬する。ステージ4〜6の種々の回路ブロックは、適切な信号パスに出現することがある全ての信号を操作してもよく、又は、動作不能状態であってもよい。ステージ4−6において実行された任意の演算の結果が、出力制御ブロック440によって無視される。
[0164]ステージ7において、最終結果選択ロジック1214は、ブール型の結果BSELを受け取り、それに応じてブール型の真(例えば、0x1)と偽(例えば、0x0)の値の間で選択を行うように最終選択mux1212を作動させる。結果BSELは、オペランドが特殊数であるか否かを正確に反映し、最終結果選択ロジック1214はFSET演算中に特殊数信号SPCを無視してもよい。
5. FCMP演算
[0165]3値条件付き選択演算(FCMP)の場合、MMADユニットは、オペランドA、B及びCを受け取る。オペランドA及びBは、それぞれ、結果R2a及びR2bとして、ステージ3へ通過させられる。オペランドCは結果R1としてステージ3へ通過させられる。
[0166]ステージ3で、2値テストロジック822(図8B)は、オペランドC(R1)及び特殊数信号SPCを受け取る。上述のように(セクションII.Eを参照)、2値テストロジック822は、条件C≧0が満たされたか否かを判定するためにこれらの信号を使用する。2値テストロジック822は、mux824に、C≧0であるならば、オペランドA(R2a)を選択し、そうでなければ、オペランドB(R2b)を選択するように命令する。NaNは零より大きくもなく、零と等しくもないので、オペランドCがNaNであるとき、オペランドBが選択されるであろう。
[0167]選択された値は、FMIN及びFMAX演算の場合に上述したような方法で、結果R3bとしてステージ7へ伝搬させられる。(結果R3aは、IP加算器804(図8A)からのオペランドAとBの和でもよく、又は、オペランドAは結果R3aとして選択されてもよく、何れのケースでも、結果R3aは最終結果に影響を与えない)。ステージ7において、最終結果選択ロジック1214は、好適には、オペランドCがNaNであるケースを検出し、伝搬された結果をNaN値で上書きする。
B. 整数算術
[0168]整数オペランドは指数ビットを含まない。本明細書において使用されているフォーマットでは、符号付き整数は2の補数を使用して表現され、当業者は、その他の表現で置き換えてもよいことを認識するであろう。後述するように、整数算術演算は、一般に、指数ロジックが使用されない点を除いて、整数算術演算に対応した浮動小数点算術演算と類似している。
1. IMAD
[0169]整数MAD(IMAD)演算の場合、MMADユニット220は、A×B+Cを計算するために仮数パス413を使用する。ある種の整数フォーマットは符号無しであるが、MMADユニット220は、好適には、全てのフォーマットが符号付き32ビットの2の補数表現であるとして取り扱い、これは、本質的に、実際のフォーマットとは無関係に正しい結果を生じる。
[0170]ステージ0において、オペランドA、B及びCは、必要に応じて、8ビット入力フォーマット用のブロック504−506(図5)、又は、508−510(16ビットフォーマット用)を使用して、32ビットに拡張される。
[0171]ステージ1において、乗算器前段ブロック416は、3Aと、オペランドBのブース3方式符号化を計算する。ビット単位論理ブロック434はオペランドCを結果R1として伝搬させる。
[0172]ステージ2において、乗算器ブロック414は、A×Bを計算し、結果R2a及びR2bとして積の和フィールド及びキャリーフィールドを選択する。
[0173]ステージ3において、乗算器後段ブロック418は、IP加算器804(図8A)を使用して和フィールドとキャリーフィールドを加算する。整数mux810は上位32ビットを選択し、選択mux812はこれを結果R3aとして選択する。比較ロジックブロック436は結果R3bとしてオペランドC(R1)を伝搬させる。
[0174]ステージ4において、アライメントユニット420は、R3a(積A×B)及びR3b(オペランドC)を受け取る。整数加算は仮数アライメントを必要としないので、右シフトカウント回路428は、全てのIMAD演算に対して一貫した状態のSwapCtl信号を生成でき、その結果、例えば、R3a(R3b)は常にスモール(ラージ)オペランドパス908(910)(図9)へ向けられ、又は、その逆もまた同様である。代替的に、オペランドの一方が負であるならば、そのオペランドは、スモールオペランドパス908へルーティングされ、条件付きインバータ918によって反転させられる。スティッキービットロジック914は、パス915上にスティッキービットSB4を生成するように動作する。
[0175]ステージ5において、プラス1加算器1002(図10)は、値R4a及びR4b(A×BとCを表現する)を加算し、丸めロジック1008は、受け取られたオペランドの符号及びスティッキービットSB4に基づいて、Sum出力、Sum+1出力、及び、〜Sum出力のうちの適切な一つを選択する。結果R5はパス1011に伝搬させられる。
[0176]ステージ6において、結果R5はそのまま正規化ブロック423を通過させられる。
[0177]ステージ7において、フォーマット化ブロック1210は結果R6を受け取り、必要に応じて、入力オペランドフォーマットに適合するようにその結果をフォーマット化する。フォーマット化ブロック1210はまた、好適には、オーバーフローを検出し、結果値Rdataを入力フォーマットに対する最大許容値にクランプする。最終結果選択ロジック1214は、パスRdata上の値を最終結果OUTとして選択する。
2. 乗算(IMUL)及び加算(IADD)
[0178]上述のFMUL及びFADD演算と同様に、整数乗算(IMUL)及び加算(IADD)演算はMADパイプラインを利用する。IMAD演算の場合、MMADユニット220は、オペランドAとして被乗数を、オペランドBとして乗数を受け取り、値0(整数零)が好適にはオペランドCのために供給される。上述したようなIMAD演算は、次に、ステージ4において、スティッキービットロジック914(図9)がスティッキービットSB3を通過させ、積が丸め処理されるようにすると有利である点を除いて、積A×B(+0)を生成するために実行される。一部の実施の形態では、オペランドCは、ステージ4の条件付き零ブロック920(図9)を使用して強制的に零にされ、その結果、オペランドCには任意の値が供給されてもよい。
[0179]整数加算(IADD)の場合、MMADユニット220は、オペランドA及びCとして加数を受け取る。ある実施の形態では、IMAD演算は、(A×1)+Cを計算するためにオペランドBを1にセットして実行され、オペランドBを1にセットすることは、例えば、整数1をオペランドBとしてMMADユニット220に供給することによって、又は、レジスタ620若しくは異なるレジスタからブース3方式で符号化された整数1を選択するように乗算器前段選択mux616(図6A)を作動することによって行われ得る。
[0180]IADDの代替的な実施の形態では、オペランドBは(例えば、整数零を入力オペランドとしてMMADユニット220へ供給することにより)零にセットされ、オペランドA及びBがステージ3へ迂回させられ、ステージ3で、和A+0が乗算器後段ブロック802内のIP加算器804(図8A)によって計算され、或いは、異なる実施の形態では、オペランドAが結果R3aとしてIP加算器804の周りを迂回させられる。後続のステージは、A+Cを計算するため、IMADの場合と同様に動作する。
3. 絶対差の和:ISAD
[0181]整数の場合、絶対差の和(ISAD)演算がサポートされている。この演算は、|A−B|+Cを計算する。ステージ0で、オペランドA、B及びCが受け取られ、オペランドBが、オペランド〜Bを生成するために、インバータ519(図5)によって反転させられる。オペランドは、その後に、ステージ1及び2を通過させられる。
[0182]ステージ3において、乗算器後段ブロック418は、IP加算器804(図8A)内でAと〜Bを加算することによりA−Bを計算し、結果R3aを伝搬させる。比較ロジックブロック436(図8B)において、AB符号回路820はA−Bの符号を検出し、パス821上でステージ4及び5へ転送される対応する符号信号Sabを生成する。2値テストロジック822は、オペランドCを結果R3bとして伝搬させるように選択mux824を制御する。
[0183]ステージ4において、A−Bの絶対値が決定される。特に、ISAD演算のSwapCtl信号は、結果R3a(即ち、A−B)がスモールオペランドパス908へルーティングされ、結果R3b(即ち、オペランドC)がラージオペランドパス910へルーティングされるように、スワップmux904及び906(図9)を制御する。スモールオペランドパス908上の条件付きインバータ918は、AB符号回路820からSab信号を受け取り、符号が負であるならば、オペランド(A−B)を反転させる。よって、結果R4aは非負整数に対応し、(正又は負の整数である)オペランドCは結果R4bとして伝搬させられる。
[0184]ステージ5において、プラス1加算器1002は、パスR4aとパスR4bからの値を加算する。Sab信号に基づいて、丸めロジック1008は、2の補数形式で正しい答えを提供するためにSum出力又はSum+1出力の何れかを選択する。特に、A−Bが非負であるならば、結果は(A−B)+Cとすべきであり、これはSum出力である。A−Bが負であるならば、結果はC−(A−B)であり、これは2の補数ではC+〜(A−B)+1として表現され、ステージ4内の条件付き反転によってSum+1出力である。
[0185]ステージ6及び7において、結果R5は、その他の整数算術演算と同様に伝搬させられる。一部の実施の形態では、ステージ7のフォーマット化ブロック1214(図12)は、上述のようにオーバーフローを検出し、取り扱う。
4. 比較演算:IMIN、IMAX、ISET
[0186]上述のように、浮動小数点比較FMIN、FMAX、FSETは、オペランドを整数として取り扱うことによって実行される。したがって、整数比較演算IMIN、IMAX及びISETの実施は、セクションIII.A.3及びIII.A.4に記載した浮動小数点比較の実施と全く同様である。
5. 条件付き選択演算:ICMP
[0187]整数条件付き選択演算(ICMP)もまた浮動小数点条件付き選択演算と全く同様であり、MMADユニット220内でのこの演算の処理は、セクションIII.A.5に記載したFCMPの実施と同じである。
C. ビット単位論理演算
[0188]整数算術関数及び浮動小数点算術関数に加えて、MMADユニット220は、ビットが何を表現しているかとは無関係にオペランドのビットを操作する種々のビット単位論理演算(図3の306に掲載されている)を更にサポートする。これらの演算は、ビット単位ブール演算AND、OR、及び、XORと、ビットシフト演算SHL(左シフト)及びSHR(右シフト)を含む。
1. ブール演算:AND、OR、XOR
[0189]ブール演算は、主として、ステージ1のビット単位論理ブロック434によって取り扱われる。これらの演算の場合、MMADユニットは、二つの32ビットオペランドA及びBと(オペランドCは無視されるので、いかなる値にセットされてもよい)、望ましいブール演算を示すオペコードとを受け取る。オペランドはステージ0の中を通過させられる。
[0190]ステージ1において、ビット単位論理ブロック434は、オペランドA及びBを受け取り、並行して、論理回路630、632、634(図6C)を使用して、オペランドA及びBに関してビット単位AND、OR及びXOR演算を実行する。選択mux636は、要求されているブール演算を示すOPCTL信号を受け取り、対応する結果をR1として伝搬させる。オペランドA及びBは、ステージ1の乗算器前段ブロック416及びステージ2の乗算器ブロック414を通過させられる。
[0191]ステージ3において、比較ロジックブロック436は、ブール演算の結果R1を結果R3bとして伝搬させる。乗算器後段ブロック418は、AとBを加算するか、又は、単に結果R3aとしてAを伝搬させ、何れのケースでも、結果R3aは廃棄される。
[0192]ステージ4において、スワップmux904及び906(図9)は、結果R3bをスモールオペランドパス908へ向け、結果R3aをラージオペランドパス910へ向ける。スモールオペランドパス908において、結果R3b(望ましい結果)は、変更されることなく結果R4aとして伝搬させられる。ラージオペランドパス910において、条件付き零回路920は、OPCTL信号に応じて、結果R4bを零にする。
[0193]ステージ5において、プラス1加算器1002(図10)は、R4b(零)をR4a(ブール演算の結果)に加算し、和の結果を結果R5として選択する。ステージ6において、結果R6にシフトは適用されない。ステージ7において、結果R6は更に変更されることなく最終結果として伝搬させられ、この演算の場合にオーバーフロー又はその他の条件は起こらない。
2. ビットシフト演算:SHL、SHR
[0194]MMADユニット220は、ビットフィールドを左シフト(SHL)又は右シフト(SHR)するためにビットシフト演算を更に実行する。どちらの演算の場合も、シフトされるべき32ビットフィールドはオペランドAとしてMMADユニット220に供給され、シフト量は、好適には、8ビット整数値をオペランドBのfp32指数ビット位置に挿入することにより、MMADユニット220へ供給される。31より大きなシフト量は関係がないので、シフト量データを搬送するためには8ビットであれば十分である。オペランドBの符号ビット及び端数ビットはこれらの演算の場合に無視されるので、オペランドCと同様にいかなる値にセットされてもよい。
[0195]SHL演算はステージ6の左シフト回路1112(図11)を利用する。オペランドAは、セクションII.Jにおいて説明したように、ステージ5の出力R5へ通過させられる。並行して、シフト量を示すオペランドBの指数部Ebもまた指数パス415の中をパス443上の結果EFE2まで通過させられる。より詳細には、ステージ1において、シフト量Ebは、選択mux628(図6B)の動作によって、指数積ブロック424を通過させられる。ステージ2において、差ブロック714(図7B)は、出力EFEとして(Ebである)入力Eabを選択するようにmux716に命令することにより、OPCTL信号に応答する。指数インクリメントブロック902は、EFE信号をそのままパス443へ通過させる。
[0196]ステージ6において、シフト制御ブロック1110(図11)は、パス443上の信号EFE2としてシフト量Ebを受け取り、その量を反映するLshAmt信号を生成する。一部の実施の形態では、シフト制御ブロック1110は、例えば、Ebが非常に大きいならば、LshAmt信号を31ビットでクランプする。LshAmt信号に応じて、左シフト回路1112は、適切なビット数を用いてオペランドA(結果R5)をシフトし、好適には、必要に応じて末尾の零を挿入する。左シフトされた結果R6はパス425上に伝搬させられる。一部の実施の形態では、指数デクリメントブロック432は、変更することなく、最終指数E0としてシフト量信号EFE2を伝搬させる。
[0197]ステージ7において、結果R6は、好適には、最終結果OUTとしてそのまま供給される。一部の実施の形態では、ステージ7は、シフト量が31を上回るならば、結果を零にクランプするロジックを更に含み、このロジックは、シフト量を最終指数E0として受け取る飽和ロジック1216に組み込まれる。
[0198]SHR演算はステージ4の右シフト回路912(図9)を利用する。SHR演算は、零が新しいMSB毎に挿入される論理シフトモードと、符号ビットが新しいMSBに拡張される算術シフトモードの両方をサポートするために実施されてもよく、オペコードが好適には各SHR演算のモードを選択する。
[0199]上述のように、シフトされるべきオペランドはオペランドAとして供給され、シフト量は、fp32型のオペランドBの指数ビットを使用して供給される。オペランドAは、セクションII.Jに記載したように、ステージ3の出力(結果R3a)を通過させられる。
[0200]並行して、シフト量Ebは右シフトカウント回路804へ伝搬させられる。より詳細には、ステージ1において、シフト量Ebは、選択mux628(図6B)の動作によって、指数積ブロック424を迂回してパス431へ渡される。ステージ2では、差ブロック714(図7B)は、差EdiffとしてEab値を選択するようにmux716に命令する。EFE信号は無視され、何れかの候補値が必要に応じて選択され、一部の実施の形態では、Eab値がEFE値として供給される。
[0201]ステージ3において、右シフトカウント回路428は、Ediff信号(即ち、Eb)に対応するRshAmt信号を生成する。RshAmt信号は、例えば、31ビットにクランプされる。一部の実施の形態では、右シフトカウント回路408は、受け取られたOPCTL信号に基づいて、論理シフトと算術シフトのどちらが要求されているかを判定し、対応する「シフトタイプ」ビットをRshAmt信号に組み入れる。
[0202]ステージ4において、スモールスワップmux904(図9)は、オペランドAをスモールオペランドパス908へ向ける。ラージオペランドパス910上で、結果R4bは条件付き零回路920によって零にされる。スモールオペランドパス908上で、右シフト回路912は、RshAmt信号を受け取り、指定されたビット数を用いてオペランドAを右シフトする。一部の実施の形態では、右シフト回路912は、RshAmt信号中のシフトタイプビット(論理又は算術)を検出し、それに応じて、オペランドが右シフトされるときに零又は1を新しいMSBに挿入する。
[0203]ステージ5において、結果R4a(右シフトされたオペランドA)は、プラス1加算器1002(図10)によってR4b(零)に加算され、結果R5として選択される。ステージ6において、結果R5は、更にシフトされることなく、正規化ブロック423の中を伝搬する。ステージ7において、結果R6は、好適には、変更されることなく、最終結果OUTとして使用される。一部の実施の形態では、ステージ7は、シフト量Ebが31を超えるならば、結果を零にクランプするロジックを更に含み、このロジックは、左シフト演算に関して説明したようにEbを受け取る飽和ロジック1216に組み込むことが可能である。
D. フォーマット変換演算
[0204]MMADユニット220は、種々の整数フォーマット及び浮動小数点フォーマットの間の変換を更にサポートする。一部の実施の形態では、フォーマット変換は、上述の算術演算と同時に実行されないが、ある種のその他の演算はフォーマット変換と組み合わされる。例えば、種々の変換演算は、整数Nに関する2Nによるスケール変換、及び/又は、オペランドの絶対値又は否定の決定と組み合わされる。以下のセクションは、浮動小数点フォーマット間の変換と、整数フォーマット間の変換について説明する。
1. 浮動小数点対浮動小数点の変換(F2F)
[0205]サポートされている浮動小数点対浮動小数点(F2F)の変換演算は、fp16からfp32への直接変換、及び、その逆を含み、このような変換は、絶対値、否定、及び/又は、2Nスケール変換を更に組み込む。その上、fp16からfp16及びfp32からfp32への整数丸め変換もサポートされている。全てのケースにおいて、変換されるべき数は、オペランドAとしてMMADユニット220へ供給され、2Nスケール変換が行われるべきであるならば、スケール係数Nは、fp32型オペランドBの8ビットの指数ビットEbを使用して供給される。fp16及びfp32フォーマットの場合、符号ビットが設けられ、絶対値及び否定は符号ビットを操作することより実施され得る。このような操作は当技術分野で知られており、詳細な説明は省略する。
[0206]fp16からfp32への直接変換は、オペランドAのfp32表現を生成するためにステージ0のアップコンバータ512(図5)を使用する。アップコンバータ512は、(例えば、127−15=112を加算することにより)fp32に対応するように指数バイアスを調整し、13の末尾の零を端数に付け加える。オペランドAがfp16型非正規数でない限り、この変換は正確である。ステージ1において、特殊数検出ブロック414は、オペランドAがfp16型非正規数、INF、又は、NaNであるか否かを判定し、適切な信号をパスSPC上に生成する。
[0207]オペランドAの仮数部は、セクションII.Jにて上述しているように、ステージ5の出力(結果R5)へ通過させられる。オペランドA及びBのそれぞれの指数部Ea、Ebは、ステージ1の指数積ブロック424へ送出され、このケースでは、指数Ebが指数スケール係数Nである。指数Ea及びEbは、指数積ブロック424において加算され、それによって、2Nスケール変換を実現し、結果Eabがパス431へ伝搬させられる。ステージ2では、指数和ブロック426が有効最終指数EFEとして結果Eabを伝搬させる。ステージ3では、右シフトカウント回路428は、零シフトに対する信号を生成することによりOPCTL信号に応答し、パス725に存在するであろうEdiff信号を無視する。ステージ4で、指数インクリメントブロック430は変更することなく(EFE2として)指数EFEをパス433へ転送する。
[0208]ステージ6はfp16型非正規数を取り扱うために使用され、fp16型非正規数の全てはfp32では正規数として表現される。上述のように、非正規数は、最小許容指数を有し、仮数に暗黙の整数1をもたない数として解釈される。ステージ6では、優先エンコーダ1108(図11)がオペランドAの仮数部における先頭の1の位置を判定する。特殊数信号SPCがオペランドAはfp16型非正規数であることを示すならば、シフト制御回路1110は、先頭の1の位置に基づいてLshAmt信号を生成し、そうでなければ、シフト制御回路1110は零シフトに対応するLshAmt信号を生成する。左シフト回路1112は、指定されたシフトを仮数R5に適用し、それによって、正規化された仮数R6を生成する。指数デクリメントブロック432(図4)は、対応する量を使って指数EFE2をデクリメントする。
[0209]ステージ7は、入力がfp16型INF又はNaNであるケースを取り扱うため使用される。特に、特殊数信号SPCがこのような値を示すならば、最終結果選択ロジック1214(図12)は、必要に応じて、正規fp32型INF又はNaN値を選択する。更に、2Nスケール変換は指数を飽和させることがあるので、飽和ロジック1216が、好適には、このような飽和を検出し、最終結果として適切な特殊数(例えば、INF)の選択を行うためにも使用される。
[0210]fp32からfp16への直接変換は、指数を8ビットから5ビットに削減し、有効数字を23ビットから10ビットに削減することを伴う。有効数字は、必要に応じて、丸められるか、又は、切り捨てられる。この丸め処理は、ステージ4のアライメントユニット420(図9)と、ステージ5の丸めロジック1008(図10)とを利用する。オペランドAの仮数部(好ましくは、明示的な先頭の1を含む)は、セクションII.Jにおいて説明したようにステージ3の出力(結果R3a)へ通過させられる。
[0211]ステージ1において、オペランドAの指数部Eaは指数積ブロック424の中を通過させられ、2Nスケール変換は、上述したようにオペランドBの指数部Ebを加算することにより適用されてもよい。結果Eabはパス431に伝搬させられる。
[0212]ステージ2において、指数和ブロック426は、例えば、112を減算するために差分回路714(図7B)を使用することにより、指数にfp16型バイアスまで再びバイアスを加え、その結果を有効最終指数EFEとして供給する。他の実施の形態では、再バイアス化は、バイアスβと指数積ブロック424(図6B)の加算器624とを使用しても実行されてもよい。指数和ブロック426は、好適には、fp16型指数オーバーフロー(INF又はNaN)及びアンダーフロー(非正規数)を更に検出する。オーバーフローの場合、指数はその最大値にクランプされる。アンダーフローの場合、指数和ブロック426は、アンダーフローの量(例えば、112−Eab)を示すように差Ediffをセットし、有効最終指数EFEを零(最小指数)にセットする。アンダーフロー以外のケースでは、差Ediffは零にセットしてもよい。
[0213]ステージ3では、右シフトカウント回路428は、適用されるべき右シフト量を決定するためにEdiff信号を使用し、適当なRshAmt信号を生成する。fp32からfp16への変換の場合、デフォルトシフトは13ビットによる(したがって、結果R4aの11ビットのLSBはfp16型仮数を搬送する)。差Ediffがこのデフォルト値に加算されて、fp16型非正規数は最大で24ビットまで右シフトされる。24ビットを上回るシフトは、fp16型の零を生じ、その結果、これに応じて、右シフトカウント回路804は、この演算の場合、シフト量を24ビットにクランプすることができる。
[0214]ステージ4では、スワップmux904(図9)は、オペランドAの仮数をスモールオペランドパス908へ向ける。ラージオペランドパス910上で、結果R4bは条件付き零ユニット920によって零にされる。スモールオペランドパス908上で、右シフト回路912は、RshAmt信号に従って、仮数を右シフトし、スティッキービットロジック914は、好適には、スティッキービットSB4を生成する。
[0215]ステージ5では、結果R4a(オペランドAの仮数)は、プラス1加算器1002(図10)によってR4b(零)に加算される。丸めロジック1008は、スティッキービットSB4を受け取り、望ましい丸めモードに従って、Sum出力とSum+1出力との間で選択を行い、他の演算と同様に、何れかのIEEE丸めモードが選択されてもよい。丸めロジック1008によって選択された結果R5はパス1011へ伝搬させられる。
[0216]ステージ6では、正規化ブロック423は、結果R5を変更することなく通過させる。
[0217]ステージ7では、フォーマットブロック1210(図12)は、最終指数E0及び仮数R6を使用してfp16型の結果をフォーマット化する。指数飽和ロジック1216はfp16型指数オーバーフローを検出し、最終結果検出ロジック1214は、結果をfp16型INFで上書きすることにより、このようなオーバーフローに応答する。更に、ステージ1の特殊数検出ブロック438によって検出されたfp32型INF又はNaN入力は、fp16型INF又はNaNを出力させることが可能である。
[0218]F2F整数丸め演算は、入力フォーマットと出力フォーマットが同じであるケース(fp32対fp32、又は、fp16対fp16)で実施される。整数丸めは、オペランドによって表現された数の小数部を除去し、丸めは、標準的なIEEE丸めモード(切り上げ、切り下げ、切り捨て、及び、最近傍)のうちのいずれかを使用する。fp32対fp16変換の場合と同様に、MMADユニット220は、整数丸めをサポートするために、ステージ4の右シフト回路912とステージ5の丸めロジック1008とを利用する。2Nによるスケール変換はこの演算と組み合わせてもよい。
[0219]オペランドAの仮数は、セクションII.Jにおいて記載したように、ステージ3の出力(結果R3a)へ通過させられる。整数丸めをサポートするため、バイナリポイントの場所を決定するためにステージ1及び2の指数ロジックが使用される。ステージ1では、2Nスケール変換の適用に加えて、指数積ブロック424(図6B参照)もまたバイアスβ(例えば、fp32の場合には127、fp16の場合には15)を減算し、結果をEabとして供給する。結果Eabが零未満であるならば、その数は純然たる小数である。ステージ2では、指数和ブロック426が結果Eabを(信号Ediffとして)パス725及び(信号EFEとして)723へ供給する。
[0220]ステージ3では、右シフトカウント回路428は、信号Ediffに基づいて右シフト量RshAmtを決定する。シフト量は、好適には、シフトされた仮数に対して、真のバイナリポイントがLSBの直ぐ右側であるように選択される。例えば、fp32型入力の場合、シフト量は、Eab≦23に対して(23−Eab)であり、Eab>23に対して零である。右シフトカウント回路428はこの量を計算し、適切なRshAmt信号をアライメントブロック420へ供給する。
[0221]ステージ4では、スモールスワップmux904(図9)は、オペランドAをスモールオペランドパス908へ向け、ラージオペランドパス910上で、条件付き零回路920は結果R4bを零にする。スモールオペランドパス908において、右シフト回路912はRshAmt信号に従って右シフトを実行し、スティッキービットロジック914はスティッキービットSB4を生成する。
[0222]ステージ5では、プラス1加算器1002(図10)は、結果R4a(オペランドAの仮数)とR4b(零)を加算し、丸めロジック1008は、丸めモードと、パス504上のスティッキービットとに基づいて、結果Sumと結果Sum+1との間で選択を行う。
[0223]ステージ6では、結果R5は入力フォーマットへ再正規化される。優先エンコーダ1108(図11)は先頭の1の位置を検出し、シフト制御回路1110は、適切なビット数を使って仮数を左シフトさせ、末尾の零を挿入するように左シフト回路1112に命令する、対応するLshAmt信号を生成する。指数デクリメントブロック432(図4)は、好適には、LshAmt信号を無視し、指数EFE2をそのまま最終指数E0として供給するように構成される。
[0224]ステージ7では、結果はフォーマット化され、出力として伝搬させられる。2Nスケール変換が飽和に達するときに、指数飽和ロジック1216が好適には作動される。特殊数入力(例えば、INF又はNaN)が検出され、対応する特殊数結果が上述のように返される。
2. 浮動小数点対整数の変換(F2I)
[0225]浮動小数点対整数(F2I)の変換は、上述の整数丸めF2F変換と同様に、MMADユニット220において実施される。変換されるべき浮動小数点数は、fp16又はfp32フォーマットのオペランドAとしてMMADユニット220に供給される。2Nによるスケール変換は、上述のようにfp32型オペランドBの指数ビットにスケール変換パラメータNを供給することによって実施される。ある実施の形態では、ターゲット整数フォーマットは、符号付き又は符号無しの16ビット又は32ビットであり、ターゲットフォーマットはオペコードによって指定される。
[0226]ステージ0において、オペランドAがfp16フォーマットであるならば、アップコンバータ512(図5)は、上述のようにオペランドAをfp32フォーマットへ昇格させる。絶対値及び否定もまたこのステージで適用される。絶対値の場合、符号ビットは正にセットされる。否定の場合、符号ビットは反転させられる。適用可能な否定後に、符号ビットが負であり、符号付き整数表現が要求されるならば、仮数部は条件付きインバータ518によって反転させられ、負の結果を要求する符号制御信号(図4には示していない)が更に伝搬させられる。
[0227]ステージ1−4は、F2F整数丸め変換に関して説明したように進行し、ステージ3の右シフト制御回路428は、仮数が右シフトされ、ステージ4の右シフト回路912(図9)がシフトを適用するために使用されるときに、LSBの直ぐ右側にバイナリポイントを置くシフト量RshAmtを生成する。スティッキービットロジック914はスティッキービットSB4を生成できる。
[0228]ステージ5では、プラス1加算器1002(図10)は、結果R4a(オペランドAの仮数)とR4b(零)を加算し、Sum出力とSum+1出力を生成する。丸めロジック1008は、適用可能な丸めモードに基づいて、符号付き整数フォーマットの場合は、更に、適切な2の補数表現が獲得されるようにステージ0からの符号制御信号が負の結果を示すか否かに基づいて、それらの間の選択を行う。
[0229]ステージ6では、右シフトされた仮数R5はそのまま通過させられる。
[0230]ステージ7では、指数飽和ロジック1216(図12)は、入力浮動小数点値がターゲット整数フォーマットの最大値を超えるか否かを判定する。もしそうであるならば、結果は、最終結果選択ロジック1214によって最大値にクランプされる(例えば、全ビットが1にセットされる)。入力オペランドがINFである場合、出力は最大整数値にクランプされ、同様に、入力オペランドがNaNである場合、出力はやはり望ましい値、例えば、零にクランプされてもよい。正しくフォーマット化された整数は最終結果OUTとして送られる。32ビットより小さな整数フォーマットの場合、結果は、必要に応じて、32ビットフィールド内で、右揃えされるか、又は、左揃えされる。
3. 整数対浮動小数点の変換(I2F)
[0231]ある実施の形態では、整数対浮動小数点(I2F)の変換演算は、符号付き又は符号無しの整数フォーマットをfp32に変換し、8ビット及び16ビットの符号付き又は符号無しフォーマットをfp16に変換するためにサポートされている。他の変換と同様に、オプション的な否定、絶対値、及び、2Nスケール変換がサポートされている。オペランドAは整数フォーマットでMMADユニット220へ供給され、スケール変換パラメータNは、上述のように、浮動小数点オペランドBの指数ビットに供給される。
[0232]ステージ0では、オペランドAは、必要に応じて、アップコンバータ504、508(図5)によって32ビットへアップコンバートされる。アップコンバージョンは、符号拡張又は零拡張を使用できる。オペランドAが負であるならば、オペランドは条件付きインバータ518によって反転させられ、Aが反転されたことを示す符号制御信号が伝搬させられる。この信号は浮動小数点結果の符号ビットをセットするために使用される。(絶対値が要求されるならば、符号ビットは常にその正の状態にセットされる)。
[0233]浮動小数点数の指数が231と一致するように初期化され、次に、整数内の先頭の1の実際の位置に基づいて下方へ調整される。仮数に関して、整数の32ビットは、整数を浮動小数点仮数フィールドに収めるために必要とされる程度(fp32の場合には24ビット、fp16の場合には11ビット)、右へシフトされる。特に、右シフトは、32ビット整数からfp32への変換中に整数の8ビットのMSBの何れかが非零であるケースで実行され、16ビット整数からfp16への変換中に整数の5ビットのMSBの何れかが非零であるケースで実行される。右シフトが行われる場合、浮動小数点結果は何れかのIEEE丸めモードを使用して丸められる。
[0234]より詳細には、ステージ1では、I2Fバイト回路444は、入力フォーマットに基づいて、オペランドAから8ビットのMSBを抽出する。32ビット整数入力の場合、32ビットフィールドのうちの8ビットのMSBが抽出され、32ビットフィールドに右揃えされた16ビット整数フォーマットの場合、32ビットフィールドのうちの最初の16ビットが落とされ、次の8ビットのMSBが抽出される。8ビット整数の場合、最後の8ビットが抽出されてもよいが、I2Fバイト回路444の結果が8ビット整数入力のため使用されないことは明らかになるであろう。上述のように、I2Fバイト回路444は、残りのビットが全て1であるか否かをテストするANDツリーを更に含み、このテストの結果(信号And24)がパス437上に伝搬させられる。並行して、指数積ブロック424は、信号Eabを、31とfp16用の適切なバイアス(15)又はfp32用の適切なバイアス(127)との合計にセットする。2Nスケール変換が使用されると、指数積ブロック424は上述のようにスケール変換パラメータNを更に加算する。
[0235]ステージ2では、指数和ブロック426の優先エンコーダ718(図7B)は、オペランドAのMSBの範囲内で先頭の1の位置を決定する。差分回路714は、指数差Ediffとして優先エンコーダの結果を選択し、有効最終指数EFEとして指数Eabを選択する。一部の実施の形態では、差分回路714は、2の補数を決めるためにオペランドに1を加算することが8ビットのMSBの間に非零ビットを生じるか否かを判定するために信号And24を使用し、それに応じて優先エンコーダの結果を調整する。類似したロジックが優先エンコーダ718にも組み込まれてもよい。オペランドAは、セクションII.Jに記載したように乗算器ブロック414の出力(結果R2a)へ迂回させられる。
[0236]ステージ3では、オペランドAがステージ0で反転させられているならば(これは上述の符号制御信号から決定される)、オペランドBはmux812(図8A)を使用して強制的に1にされ、2の補数反転を完成するために、IP加算器804によってオペランドAに加算される。そうでなければ、オペランドAはパス421へ迂回させられる。よって、結果R3aは、fp16又はfp32フォーマットの仮数に関して、必要に応じて、正であることが保証される。
[0237]同様にステージ3では、右シフトカウント回路428は、仮数が右シフトされるべきか否かを判定するために信号Ediffを使用し、もしそうであるならば、シフト量である。(先頭の零を除く)整数を表現するために必要とされるビット数が浮動小数点フォーマットにおける有効数字ビット数を超えるならば、右シフトが好適には使用される。例えば、32ビット整数フォーマットからfp32への変換中に、仮数は、先頭の1が1番目から8番目までのビット位置の何れかにあるならば、右シフトされるべきであり、16ビット整数フォーマットからfp16への変換中に、仮数は、先頭の1が1番目から5番目までのビット位置の何れかにあるならば、右シフトされるべきである。既に指摘しているように、優先エンコーダ718から来る信号Ediffは、この情報を反映し、右シフトカウント回路428は適切な信号RshAmtを生成する。
[0238]ステージ4では、スモールスワップmux904(図9)は、仮数(結果R3a)をスモールオペランドパス908へ向ける。右シフト回路912は、RshAmt信号に従って、仮数を右シフトする。スティッキービットロジック908はスティッキービットSB4を生成する。ラージオペランドパス910上で、条件付き零回路920は結果R4bを零にする。
[0239]ステージ5では、プラス1加算器1002(図10)は、結果R4a(仮数)とR4b(零)を加算し、丸めロジック1008は、丸めモード及びスティッキービットSB4に基づいて、Sum出力とSum+1出力との間で選択を行う。
[0240]ステージ6では、仮数R5は浮動小数点表現に正規化される。正規化ブロック423は、先頭の1をMSB位置に置くために仮数を左シフトし、指数デクリメントブロック432はそれに応じて下方へ指数E0を調整する。
[0241]ステージ7では、仮数R6及び指数E0は、フォーマットブロック1210(図12)によってfp32型又はfp16型の数としてフォーマット化され、最終選択mux1212へ渡される。飽和ロジック1216はアクティブ状態であり、飽和は、幾つかの場合に、例えばu16からfp16への変換中に、発生する可能性がある。飽和が発生した場合、適切な浮動小数点フォーマットのオーバーフロー値(例えば、INF)が選択される。
[0242]32ビット整数からfp16へのI2F変換は、本実施の形態では、優先エンコーダ718(図7B)が8ビットエンコーダであるため、サポートされていない。当業者は、優先エンコーダのサイズが設計上の選択事項であり、この変換がより大きな優先デコーダ(例えば、21ビット)を設けることによりサポートされ得ることを認識するであろう。
[0243]別の実施の形態では、優先エンコーダ718は、2の補数変換が実行された後に(例えば、IP加算器804の後で)、パイプライン内のポイントに移され得る。このケースでは、ANDツリーはプラス1演算の効果を検出するために必要とされないであろう。
4. 整数対整数(I2I)の変換
[0244]整数対整数(I2I)の変換演算は、符号付きフォーマットから符号無しフォーマット、及び、その逆を含む、任意の整数フォーマットから別の任意の整数フォーマットへ変換するためサポートされている。否定(2の補数)及び絶対値のオプションがサポートされている。
[0245]本実施の形態では、以下の規則がI2I変換におけるオーバーフローを取り扱うため適用される。第一に、符号付きフォーマットから符号無しフォーマットへの変換の場合、あらゆる負値は零にクランプされる。第二に、大きなフォーマット(即ち、ビット数の多いフォーマット)から小さなフォーマット(即ち、ビット数の少ないフォーマット)への変換の場合、オーバーフローは小さなフォーマットにおける最大許容値にクランプされる。第三に、小さなフォーマットから大きな符号無しフォーマットへの変換の場合、正値は零拡張され、大きな符号付きフォーマットへの変換の場合、符号拡張が使用される。
[0246]ステージ0では、オペランドAが受け取られる。入力フォーマットが32ビットより小さいならば、オペランドAは、符号拡張(又は、符号無し入力フォーマットの場合には零拡張)を使用して32ビット(図5を参照)までアップコンバートされる。オペランドAは、その後に、セクションII.Jにおいて既に説明したように、ステージ3の出力(結果R3a)へ通過させられる。ステージ4では、スモールスワップmux904(図9)はオペランドAをスモールオペランドパス908へ向け、ラージオペランドパス910上で、条件付き零回路920は結果R4bを零にする。スモールオペランドパス908において、条件付きインバータ918は、否定又は絶対値が要求されたか否かに基づくことなく、かつ、絶対値のケースでは、オペランドAが正であるか負であるかに基づくことなく、オペランドAを反転させる。
[0247]ステージ5では、プラス1加算器1002(図10)は、R4a(オペランドA)とR4b(零)を加算する。オペランドAがステージ4で反転されているならば、Sum+1出力が選択されて、結果は2の補数形式となる。結果R5はそのままステージ6の中を通過する。
[0248]ステージ7では、出力がフォーマット化ブロック1210(図12)においてフォーマット化される。より大きな符号付きフォーマットへの変換の場合、フォーマット化ブロック1210は、好適には、符号拡張を適用する。フォーマット化ブロック1210は、所定のフォーマットの場合、同様に、結果を最大許容整数にクランプし、例えば、正数の場合、ターゲットフォーマットのMSB位置の左側に1が存在するならば、出力は全て1にセットされる。
5. 端数(FRC)演算
[0249]端数(FRC)演算は、浮動小数点(例えば、fp32型)オペランドAの小数部を返す。FRC演算中に、MMADユニット320は、オペランドAの仮数内のバイナリポイントの場所を決定するためにオペランドAの指数部を使用し、バイナリポイントの右側の全てのビット(整数ビット)を零にセットし、バイナリポイントの右側のビット(端数ビット)を保存するマスクを適用する。
[0250]ステージ0では、浮動小数点(例えば、fp16又はfp32)オペランドAが受け取られ、必要に応じてfp32へアップコンバートされてもよい。オペランドCは全て零の(又は、強制的に零にされた)フィールドとして入力される。オペランドAは、セクションII.Jで既に説明したようにステージ3の出力(結果R3a)まで通過させられる。
[0251]ステージ1では、オペランドAは通過させられるが、ビット単位論理ブロック434内の条件付きインバータ635(図6C)は、全て1のフィールドを得るためにオペランドCを反転させ、選択mux636はこのフィールドを結果R1として選択する。他の実施の形態では、選択mux636又は別の回路が、例えば、適切なレジスタ(図示せず)から全て1のフィールドを選択するため使用される。結果R1(全て1のフィールド)は、セクションII.Jで既に説明したようにステージ3の出力(結果R3b)まで通過させられる。
[0252]同様にステージ1では、指数積ブロック424は、指数バイアス(例えば、fp32型オペランドの場合に127)をオペランドAの指数部Eaから減算し、この値を指数Eabとして転送する。ステージ2では、指数和ブロック426は、指数差Ediffとして、及び、有効最終指数EFEとして、Eabを供給する。
[0253]ステージ3では、右シフトカウント回路428は、Aのバイアスされていない指数(Eab)に基づくシフト信号RshAmtと、結果R3a及びR3bをそれぞれラージオペランドパス及びスモールオペランドパスへ向ける適切なSwapCtl信号とを生成する。
[0254]ステージ4では、ラージスワップmux906(図9)は、オペランドA(結果R3a)をラージオペランドパス910へ向け、スモールスワップmux904は1のフィールド(結果R3b)をスモールオペランドパス908へ向ける。右シフト回路912は、RshAmt信号に応じて、1のフィールドを右シフトすることによりマスクを形成し、論理右シフトが好適には使用される。マスクは、パス909上の結果R4aとして条件付きインバータ918へ通過させられる。オペランドAのバイアスされていない指数が零又は負であるならば、RshAmt信号は好適には零シフトに対応することに注意すべきである。正の指数の場合、非零シフトが適切であり、シフトは、例えば、24ビットに制限される。
[0255]ラージオペランドパス910は、パス911上に結果R4bとして、オペランドAをそのまま通過させる。並行して、指数インクリメントブロック430(図4)は、EFE2として有効最終指数EFEをそのまま通過させる。
[0256]ステージ5では、AND2回路1004(図10)は、マスクR4aを(R4bとして受け取られた)オペランドAに適用するため動作する。マスクは、オペランドAの整数ビットを零にさせ、端数ビットに影響を与えない。選択mux1010は、Aの端数ビットであるAND2回路1004からの出力を選択する。
[0257]ステージ6では、正規化ブロック423は、結果R5を優先符号化し、正規化し、指数デクリメントブロック432は、最終指数E0を得るために、有効最終指数EFE2に対応する調整を施す。
[0258]ステージ7では、指数E0を含む結果R6がフォーマットブロック1210(図12)によってfp32型(又はfp16型)の数としてフォーマット化され、選択のため最終選択mux1212へ渡される。特殊数ロジックは、オペランドAがINF又はNaNであるケースにおいて、計算された結果を上書きするために、必要に応じて使用される。
E. ドメインマッピング(RRO)
[0259]引数還元演算或いはレンジリダクション演算(RRO)とも呼ばれるドメインマッピング演算もまたMMADユニット220において実施される。これらの演算は、例えば、図2の他の機能ユニット222の一つとして実施される別個の算術ユニットにおける種々の超越関数の計算をサポートする。ある実施の形態では、MMADユニット220は、三角関数(例えば、sin(x)及びcos(x))と指数関数(2x)の浮動小数点引数xを有界な範囲に限定するドメインマッピング演算を実行する。よって、RROの場合、MMADユニット220への入力は、オペランドAとして供給されるfp32型の数xである。出力は後述するように特殊な32ビットフォーマットである。
1. 三角関数のRRO
[0260]sin(x)及びcos(x)を計算する機能ユニットは、一般に、Kは整数であり、かつ、0≦x0<2πであるとき、引数xが何よりも2πK+x0に還元されることを要求することにより、これらの関数の周期性を利用する。三角関数は、これにより、x0を使用して計算される。一部の実施では、x0は、0≦xR<1であるとき、端数xR=x0/2πとして指定される。
[0261]本発明のある実施の形態では、MMADユニット220は、1/2πによる浮動小数点乗算を実行するためにMADパイプラインの乗算ステージ(図4のステージ1−3)を利用し、結果の小数部を抽出するために残りのステージを利用することにより、三角法RROに関してxRを計算する。乗算の有限数値精度が原因となって、結果は近似であるが、この近似はxの非常に大きな値が現れないアプリケーション(例えば、グラフィックス)に適切である。
[0262]三角法RROの出力は、符号ビット、1ビットの特殊数フラグ、5ビットの予備ビット、及び、25ビットの端数ビットを含む特殊な32ビット固定小数点フォーマットで提供される。特殊数フラグが論理型の真にセットされると、結果は特殊数であり、予備ビット又は端数ビットの一部又は全部がどの特殊数(例えば、INF又はNaN)であるかを指定するために使用される。
[0263]ステージ0において、引数xはfp32フォーマットのオペランドA0として与えられ、オペランドAとして通過させられる。
[0264]ステージ1では、指数積ブロック424は、オペランドAの指数部Eaを指数Eabとして通過させる。乗算器前段回路416において、乗算器616(図6A)は、レジスタ618からの記憶されているブース3方式で符号化された1/2πの表現を、パスBB上に乗数として選択する。
[0265]ステージ2では、指数和ブロック426は、有効最終指数EFE及び差Ediffとして指数Eaを選択する。乗算器ブロック614は、A×(1/2π)を計算し、その積の和フィールド及びキャリーフィールドを結果R2a及びR2bとして供給する。
[0266]ステージ3では、右シフトカウント回路428は、信号Ediffから、固定小数点結果のバイナリポイントを適切に揃えるために右シフトが実行されるべきか否かを判定する。例えば、右シフトは、指数が負であるならば、必要とされる。右シフトが必要であるならば、右シフトカウント回路428は適切なシフト量信号RshAmtを供給する。同様にステージ3では、IP加算器804(図8A)が積を生成するために和フィールドとキャリーフィールド(R2a、R2b)を加算する。上位32ビットはmux814によって結果R3aとして選択される。スティッキービットロジック808は、丸め処理の際に後で使用されるスティッキービットSB3を生成できる。
[0267]ステージ4では、指数インクリメントブロック430は、上記のFMUL及びFMAD演算中に行われたように、IP加算器804のキャリーを反映させることが必要であるならば、指数を調整する。アライメントユニット420において、スモールスワップmux904(図9)は、積結果R3aをスモールオペランドパス908へ向け、右シフトカウント回路428によって決定された右シフトが右シフト回路912によって適用される。結果R4aはパス909へ伝搬させられる。右シフトが適用されるならば、スティッキービットロジック914は新しいスティッキービットSB4を生成し、そうでなければ、スティッキービットロジック914は、スティッキービットSB3をスティッキービットSB4として転送できる。ラージオペランドパス910において、条件付き零ユニット920は結果R4bを零にする。
[0268]ステージ5では、プラス1加算器1002(図10)がR4a(積)とR4b(零)を加算する。一部の実施の形態では、丸めロジック1008は使用されず、他の実施の形態では、丸めロジック1008がパスからのスティッキービットSB4を操作する。(RROは近似であるので、丸めが結果の精度を改善するとは限らない)。
[0269]ステージ6では、正規化ブロック423は、バイナリポイントを適切に配置するために必要とされるならば(例えば、指数が正であるならば)、左シフトを適用する。パスEFE2上の有効最終指数は、左シフト量を決定するためにシフト制御回路1110によって使用され、シフトは左シフト回路1112によって実行される。シフトされた結果R6はパス425上に供給される。指数デクリメントブロック432は、必要に応じて、最終指数E0をそれに応じてデクリメントするが、指数はステージ7において無視される。
[0270]ステージ7では、パスR6上の結果からの符号ビット及び25ビットが、上述したフォーマットの32ビット結果Rdataを生成するために、フォーマットブロック1210(図12)によって使用される。結果Rdata中の特殊数フラグは、好適には、ステージ1内の特殊数検出ブロック439からの特殊数信号SPCに応じてセットされ、特殊数が検出されると、端数ビット又は予備ビットの一部がどの特殊数であるかを示すために使用され得る。
2. 指数関数EX2のRRO
[0271]当技術分野で知られているように、底2の指数関数(EX2(x)=2x)は、Mが整数であり、fが区間[0.0,1.0)であるとき、分解x=M+fを行い、次に、2M×2fを計算することによって算術関数ユニットにおいて実施される。2Mの計算は平凡であり(ビットシフト又は指数加算)、2fの計算はルックアップテーブルを使用して行われる。
[0272]ある実施の形態では、MMADユニット220は、引数xの小数部を抽出することによりEX2関数のためのRROを実行する。このRROは、F2F変換との関連で上述した整数丸め演算に多少類似しているが、このケースでは、バイナリポイントの右側のビットが保存される。
[0273]指数RROの出力は、符号ビットと、1ビットの特殊数フラグと、7ビットの整数ビットと、23ビットの端数ビットとをもつ特殊な32ビットフォーマットである。特殊数フラグが論理型の真にセットされているならば、結果は特殊数であり、整数ビット又は端数ビットの一部又は全部がどの特殊数であるかを示すために使用されてもよい。
[0274]ステージ0において、引数xはfp32フォーマットのオペランドA0として与えられ、オペランドAとして通過させられる。
[0275]ステージ1では、指数積ブロック424は、指数Eaから127(fp32型のバイアス)を減算し、結果Eabを生成する。後述するように、結果Eabは、バイナリポイントを揃えるために後続のステージにおいて使用されて、バイナリポイントの右側に23ビットが存在し、左側に7ビットが存在するようになる。乗算器前段回路416(図6A参照)において、レジスタ620からのブース3方式で符号化された1.0の表現がmux616によって選択される。
[0276]ステージ2では、指数和ブロック426は、有効最終指数EFE及び差EdiffとしてEabを通過させる。乗算器ブロック414は、オペランドAに1.0を乗じ、その積の和フィールド及びキャリーフィールドを結果R2a及びR2bとして供給する。
[0277]ステージ3では、右シフトカウント回路428は、差信号Ediffから、例えば、Ediffが負であるか、又は、正であるかに基づいて、バイナリポイントを揃えるために右シフトが必要とされるか否かを判定する。右シフトが必要であるならば、右シフトカウント回路428は、Ediffの絶対値から決定されるシフト量を反映させるためにRshAmt信号を生成する。同様にステージ3では、IP加算器804(図8A)が積を生成するために和フィールドとキャリーフィールド(R2a、R2b)を加算し、mux814は、上位32ビットを結果R3aとして選択する。スティッキービットロジック808はスティッキービットSB3を生成する。
[0278]ステージ4では、指数インクリメントブロック430は、IP加算器804によるキャリーを反映させるために指数を調整する。アライメントユニット420において、スモールスワップmux904(図9)は、積結果R3aをスモールオペランドパス908へ向け、右シフトカウント回路804によって決定された右シフトが右シフト回路912によって適用され、それによって、結果R4aを生成する。右シフトが適用されるならば、スティッキービットロジック914は、右シフト量に基づいて新しいスティッキービットSB4を生成し、そうでなければ、スティッキービットSB3がスティッキービットSB4として伝搬させられる。ラージオペランドパス910において、条件付き零ユニット920は結果R4bを零にする。
[0279]ステージ5では、プラス1加算器1002(図10)が結果R4a(積A×1)とR4b(零)を加算する。一部の実施の形態では、丸めロジック1008は結果R5としてSum出力を選択し、他の実施の形態では、丸めロジック1008は、Sum出力とSum+1出力との間で選択を行うためにスティッキービットSB4を使用できる。
[0280]ステージ6では、正規化ブロック423は、バイナリポイントを適切に配置するために(必要とされるならば)(例えば、指数が正であるならば)、左シフトを適用する。有効最終指数EFE2は、左シフト量を決定するためにシフト制御回路1110によって使用され、シフトは左シフト回路1112によって実行される。このシフトされた結果R6はパス425上に供給される。指数デクリメントブロック432は、必要に応じて、指数をそれに応じてデクリメントする。
[0281]ステージ7では、フォーマットブロック1210(図12)は、結果R6を、7ビットの整数ビットと23ビットの端数ビットをもつ固定小数点表現に変換する。指数飽和ロジック1216は飽和を検出するため使用され、飽和のケースでは、(上述した特殊な出力フォーマットで)INFが結果として選択されてもよい。
IV. 更なる実施の形態
[0282]本発明を特定の実施の形態に関して説明したが、当業者は種々の変更が可能であることを認識するであろう。例えば、MMADユニットは、より多くの、より少数の、又は、異なった機能を組み合わせてサポートし、どのようなフォーマット、又は、どのようなフォーマットの組み合わせのオペランド及び結果でもサポートするように実施される。
[0283]本明細書において説明した種々の迂回パス及びパススルーは変更してもよい。一般に、回路ブロックの周りの迂回パスを説明している場合には、そのパスは、そのブロック内の一致演算(即ち、零を加算するようなオペランドに影響を与えない演算)によって置き換えてもよく、逆もまた同様である。所定の演算中に迂回される回路ブロックは待機状態(例えば、電力削減状態)に置かれてもよく、又は、例えば、選択マルチプレクサ又はその他の回路の動作を用いて、下流側ブロックによりその結果を無視される状態で通常どおりに作動されてもよい。
[0284]MMADパイプラインのステージへの分割の仕方は任意である。パイプラインは、何段のステージを収容してもよく、各ステージにおけるコンポーネントの組み合わせは必要に応じて変えられる。本明細書における特定のブロックに割り当てられた機能性は、パイプラインステージを越えて分離されてもよく、例えば、乗算器ツリーが複数のステージを占めることがある。
[0285]種々のブロックの機能性は更に変更されることもある。一部の実施の形態では、例えば、異なる加算器回路又は乗算器回路が使用され、乗算のためのブース3方式符号化(又はその他の符号化)の使用は必須ではない。
[0286]更に、MMADユニットを、理解を容易にするために回路ブロックの観点から説明しているが、当業者は、ブロックが多種多様の回路コンポーネント及びレイアウトを使用して実施されること、並びに、本明細書に記載したブロックが特定のコンポーネントの組又は物理的なレイアウトに限定されないことを理解するであろう。ブロックは必要に応じて物理的に組み合わされ、又は、分離される。
[0287]プロセッサは実行コア内に1台以上のMMADユニットを収容する。例えば、スーパースカラー命令発行(即ち、1サイクル当たり二つ以上の命令の発行)が望まれるならば、複数のMMADユニットが実施され、異なったMMADユニットは異なった機能の組み合わせをサポートする。プロセッサは複数の実行コアを収容してもよく、各コアがその固有の(複数の)MMADユニットを所有してもよい。
[0288]更に、本発明をグラフィックスプロセッサに関して説明してきたが、当業者は、本発明が、数値演算コプロセッサ、ベクトルプロセッサ、又は、汎用プロセッサのようなその他のプロセッサにおいても利用され得ることを理解するであろう。
[0289]したがって、本発明を特定の実施の形態に関して説明してきたが、本発明は特許請求の範囲内であらゆる変更物及び均等物を網羅することを意図されていることが理解されるであろう。
本発明の実施の形態に係るコンピュータシステムのブロック図である。
本発明の実施の形態に係る実行コアの一部分のブロック図である。
本発明の実施の形態に係る汎用乗算加算(MMAD)ユニットにおいて実行される演算の一覧表である。
本発明の実施の形態に係るMMADユニットのブロック図である。
図4のMMADユニットのオペランドフォーマット化ブロックのブロック図である。
図4のMMADユニットの乗算器前段ブロックのブロック図である。
図4のMMADユニットの指数積ブロックのブロック図である。
図4のビット単位論理ブロックのブロック図である。
図4のMMADユニットの乗算器ブロックのブロック図である。
図4のMMADユニットの指数和ブロックのブロック図である。
図4のMMADユニットの乗算器後段ブロックのブロック図である。
図4のMMADユニットの比較ロジックブロックのブロック図である。
図4のMMADユニットのアライメントブロックのブロック図である。
図4のMMADユニットの端数和ブロックのブロック図である。
図4のMMADユニットの正規化ブロックのブロック図である。
図4のMMADユニットの出力制御ブロックのブロック図である。