(57)【要約】プロセッサ内に含まれる精度制御反復算術論理演算ユニット（ＩＡＬＵ）は、副精度結果、すなわち、最大精度よりも低いビット精度を有する結果を生成する。一実施形態においては、精度制御ＩＡＬＵは、算術論理演算回路および精度制御回路を備える。算術論理演算回路は、結果を得るために、第１のビット精度のオペランドを反復的に処理するように構成される。精度制御回路は、第１のビット精度よりも低いプログラムされた第２のビット精度に結果が達するときに、反復オペランド処理を終了するように構成される。一実施形態においては、精度制御回路は、制御回路によって受け取られたインジケータに応じて、算術論理演算回路に反復オペランド処理を終了させる。精度制御ＩＡＬＵは、さらに、副精度結果を丸めるように構成された丸め論理を備える。
2009536409.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにおいて反復算術演算を実行する方法であって、
１つの結果を得るために第１のビット精度のオペランドを反復的に処理することと、
前記の結果が、前記第１のビット精度よりも低いプログラムされた第２のビット精度に達するときに、前記反復処理を終了することと、
を備える方法。
【請求項２】
パッドされた結果が前記第１のビット精度に対応するビット幅を有するように前記の結果をパッドすること、をさらに備える請求項１に記載の方法。
【請求項３】
前記パッドされた結果が前記第１のビット精度に対応するビット幅を有するように前記の結果をパッドすることは、１つまたは複数の論理「０」ビットを前記の結果に付加することを備える、請求項２に記載の方法。
【請求項４】
前記第１のビット精度よりも小さいビット幅を有するレジスタ内に前記の結果を記憶すること、をさらに備える請求項１に記載の方法。
【請求項５】
切り捨てられたオペランドが、前記第１のビット精度よりも低くかつ前記プログラムされた第２のビット精度よりも高いかまたは前記プログラムされた第２のビット精度に等しいビット精度を有するように、前記反復処理を開始する前に、前記オペランドの１つまたは複数の最下位ビット（ＬＳＢ）を切り捨てること、をさらに備える請求項１に記載の方法。
【請求項６】
前記オペランドの１つまたは複数のＬＳＢを切り捨てることは、前記オペランドの１つまたは複数のＬＳＢをマスクすることを備える、請求項５に記載の方法。
【請求項７】
前記の結果を丸めること、をさらに備える請求項１に記載の方法。
【請求項８】
前記の結果を丸めることは、
丸め値を前記の結果の最下位ビット（ＬＳＢ）に位置合わせすることと、
前記位置合わせされた丸め値を前記の結果に条件付きで加えることと、
を備える、
請求項７に記載の方法。
【請求項９】
前記丸め値を前記の結果の前記ＬＳＢに位置合わせすることは、
前記丸め値が、前記の結果の前記ＬＳＢに対応するビット位置に配置された論理「０」を有するように、前記丸め値をシフトすること、を備える、請求項８に記載の方法。
【請求項１０】
前記丸め値を前記の結果の前記ＬＳＢに位置合わせすることは、丸めオペランドを生成するために前記第２のプログラムされたビット精度を復号化すること、を備える、請求項８に記載の方法。
【請求項１１】
前記プロセッサ内に含まれるレジスタの内容における変化に応じて、前記プログラムされた第２のビット精度を変更すること、をさらに備える請求項１に記載の方法。
【請求項１２】
前記プロセッサによって受け取られた１つまたは複数の命令に応答して、前記プログラムされた第２のビット精度を変更すること、をさらに備える請求項１に記載の方法。
【請求項１３】
プロセッサにおいて使用するための反復算術論理演算ユニットであって、
1つの結果を得るために第１のビット精度のオペランドを反復的に処理するように構成された算術論理演算回路と、
前記の結果が、前記第１のビット精度よりも低いプログラムされた第２のビット精度に達するときに、前記反復処理を終了するように構成された精度制御回路と、
を備える反復算術論理演算ユニット。
【請求項１４】
パッドされた結果が、前記第１のビット精度に対応するビット幅を有するように、前記算術論理演算回路は、さらに、前記の結果をパッドするように構成されている、請求項１３に記載の反復算術論理演算ユニット。
【請求項１５】
前記パッドされた結果が、１つまたは複数の論理「０」ビットを前記の結果に付加することによって、前記第１のビット精度に対応するビット幅を有するように、前記算術論理演算回路は、前記の結果をパッドするよう構成されている、請求項１４に記載の反復算術論理演算ユニット。
【請求項１６】
切り捨てられたオペランドが、前記第１のビット精度よりも低くかつ前記プログラムされた第２のビット精度よりも高いかまたは前記プログラムされた第２のビット精度に等しいビット精度を有するように、前記算術論理演算回路は、さらに、前記オペランドの１つまたは複数の最下位ビット（ＬＳＢ）を切り捨てるように構成されている、請求項１３に記載の反復算術論理演算ユニット。
【請求項１７】
前記算術論理演算回路は、前記オペランドの１つまたは複数のＬＳＢをマスクすることによって、前記オペランドの１つまたは複数のＬＳＢを切り捨てるように構成されている、請求項１６に記載の反復算術論理演算ユニット。
【請求項１８】
前記の結果を丸めるように構成された丸め論理、をさらに備える請求項１３に記載の反復算術論理演算ユニット。
【請求項１９】
前記丸め論理は、丸め値を前記の結果の最下位ビット（ＬＳＢ）に位置合わせし、そして、前記位置合わせされた丸め値を前記の結果に条件付きで加えることによって、前記の結果を丸めるように構成されている、請求項１８に記載の反復算術論理演算ユニット。
【請求項２０】
前記丸め値が、前記の結果の前記ＬＳＢに対応するビット位置に配置された論理「０」を有するように、前記丸め論理は、前記丸め値をシフトすることによって、前記丸め値を前記の結果の前記ＬＳＢに位置合わせするように構成されている、請求項１９に記載の反復算術論理演算ユニット。
【請求項２１】
前記丸め論理は、丸めオペランドを生成するために、前記第２のプログラムされたビット精度を復号化することによって、前記丸め値を前記の結果の前記ＬＳＢに位置合わせするように構成されている、請求項１９に記載の反復算術論理演算ユニット。
【請求項２２】
前記精度制御回路は、前記精度制御回路によって受け取られたインジケータに応じて、前記反復処理を終了するように構成されている、請求項１３に記載の反復算術論理演算ユニット。
【請求項２３】
１つの結果を得るために第１のビット精度のオペランドを反復的に処理し、そして、前記の結果が、前記第１のビット精度よりも低いプログラムされた第２のビット精度に達するときに、前記反復処理を終了する、ように構成された反復算術論理演算ユニット、を備えるプロセッサ。
【請求項２４】
パッドされた結果が、前記第１のビット精度に対応するビット幅を有するように、前記反復算術論理演算ユニットは、さらに、前記の結果をパッドするように構成されている、請求項２３に記載のプロセッサ。
【請求項２５】
前記の結果を記憶するためのレジスタをさらに備え、前記レジスタは、前記第１のビット精度よりも小さいビット幅を有する、請求項２３に記載のプロセッサ。
【請求項２６】
前記反復算術論理演算ユニットは、さらに、前記の結果を丸めるように構成されている、請求項２３に記載のプロセッサ。
【請求項２７】
前記反復算術論理演算ユニットは、丸め値を前記の結果の最下位ビット（ＬＳＢ）に位置合わせし、そして、前記位置合わせされた丸め値を前記の結果に条件付きで加えることによって、前記の結果を丸めるように構成されている、請求項２６に記載のプロセッサ。
【請求項２８】
前記丸め値が、前記の結果の前記ＬＳＢに対応するビット位置に配置された論理「０」を有するように、前記反復算術論理演算ユニットは、前記丸め値をシフトすることによって、前記丸め値を前記の結果の前記ＬＳＢに位置合わせするように構成されている、請求項２７に記載のプロセッサ。
【請求項２９】
前記反復算術論理演算ユニットは、丸めオペランドを生成するために、前記第２のプログラムされたビット精度を復号化することによって、前記丸め値を前記の結果の前記ＬＳＢに位置合わせするように構成されている、請求項２７に記載のプロセッサ。
【請求項３０】
前記プログラムされた第２のビット精度を、固定値として、または、動的に変更可能な値として記憶するように構成された記憶エレメント、をさらに備える請求項２３に記載のプロセッサ。
【請求項３１】
前記記憶される動的に変更可能な値は、前記プロセッサによって受け取られた１つまたは複数の命令に応答して、変更される、請求項３０に記載のプロセッサ。
【請求項３２】
前記算術論理演算ユニットは、前記プロセッサによって受け取られたインジケータに応じて、前記反復処理を終了する、請求項２３に記載のプロセッサ。
【請求項３３】
前記インジケータは、前記プロセッサ内に含まれるレジスタにおいて記憶されたフラグビットを備える、請求項３２に記載のプロセッサ。
【発明の詳細な説明】
【分野】
【０００１】
本発明は、一般的には、プロセッサに関し、より詳細には、プロセッサにおいて副精度反復算術演算(sub-precision iterative arithmetic operations)を実行することに関する。
【背景】
【０００２】
一般的なプロセッサは、除算、平方根演算、および、超越演算(transcendental operation)（例えば、ＳＩＮ、ＣＯＳ）のような反復演算を実行するための１つまたは複数の算術論理演算ユニットを含む。反復算術演算は、一般的には、定義された所定のビット精度を有する結果が生成されるまで実行される。すなわち、オペランドは、結果レジスタに関連する精度または開始オペランドに関連する精度のような最大精度(full precision,)すなわちターゲット精度(target precision)を有する結果が生成されるまで、反復的に処理される。例えば、米国電気電子技術者協会（ＩＥＥＥ）は、２進浮動小数点演算に関連する規格を定義しており、この規格は、しばしば、ＩＥＥＥ７５４と呼ばれる。ＩＥＥＥ７５４規格は、単精度浮動小数点演算および倍精度浮動小数点演算(single and double precision floating-point operations)の両方に関する数値形式、基本的演算、変換、および、例外条件を規定している。
【０００３】
ＩＥＥＥ７５４準拠浮動小数点数は、３つの基本的な成分、すなわち、符号ビット、指数、仮数を含む。仮数は、さらに、整数部と小数部とに分けられる。符号化のときには、小数ビットだけが、記憶される。通常の数の場合、整数部は、暗黙的に値１に等しい。ＩＥＥＥ７５４準拠単精度数は、１つの符号ビット、８ビットの指数、および、２３ビットの小数によって表現され、倍精度数は、１つの符号ビット、１１ビットの指数、および、５２ビットの小数によって表現される。そのようなものとして、ＩＥＥＥ７５４準拠浮動小数点数の反復処理は、単精度オペランドに対しては２４ビットの精度および倍精度オペランドに対しては５３ビットの精度を有する結果を生成する。例えば、単精度ＩＥＥＥ７５４準拠ＡＬＵを備えるプロセッサは、２４ビットの最大精度を有する結果を生成する。しかしながら、ｏｐｅｎＧＬ準拠グラフィックスアプリケーションのようなある種のアプリケーションは、最大の２４ビット単精度を有する結果を必要としないことがある。そのようなものとして、最大単精度よりも多少低い精度、例えば、１６ビットの精度を許容することのできるアプリケーションに対して結果を最大の２４ビット単精度まで計算することによって、不必要な電力の消費および不必要な処理サイクルの浪費が、発生する。
【０００４】
一般的なプロセッサのあるものは、ターゲット形式の精度よりも低い精度を有する結果を生成する。しかしながら、これらのプロセッサは、実行されるオペランドがターゲット形式よりも低い精度を有するときにだけ、ターゲット形式に到達する前に反復算術演算を終了する。例えば、倍精度プロセッサは、ターゲットレジスタ形式が倍精度値の形式であるときでさえも、単精度オペランドに対して単精度演算を実行し、そして、単精度の結果を生成してもよい。そのようなものとして、通常の演算処理のあるものは、オペランド精度に依存する(operand-precision dependent)ものであり、したがって、オペランドの精度に等しい最大精度を有する結果を生成する。その結果として、電力およびプロセッササイクルは、ある種のアプリケーションに対しては許容または容認できる精度よりも高い精度を有する結果を生成するために、不必要に浪費されることがある。
【発明の開示】
【開示の概要】
【０００５】
ここに教示される方法および装置によれば、プロセッサ内に含まれる精度制御反復算術論理演算ユニット(controlled- precision Iterative Arithmetic Logic Unit)（ＩＡＬＵ）は、副精度結果(sub-precision result)、すなわち、最大精度よりも低いビット精度を有する結果を生成する。１つまたは複数の実施形態においては、精度制御ＩＡＬＵは、算術論理演算回路および精度制御回路を備える。算術論理演算回路は、１つの結果(a result)を得るために、第１のビット精度のオペランド(operand of a first bit precision)を反復的に処理するように構成されている。精度制御回路は、該結果が、第１のビット精度よりも低いプログラムされた第２のビット精度に達するときに、反復オペランド処理を終了するように、構成されている。最大精度演算の場合のように、低い精度の演算は、適切な丸めを可能にするために、最終的な結果において必要とされるものよりも多いビットを生成することができる。これらの「丸めビット(rounding bits)」は、一般的に、ガード、ラウンド、および、スティッキービット("guard, round, and sticky bits")と呼ばれる。一実施形態においては、精度制御回路は、制御回路によって受け取られたインジケータに応じて、算術論理演算回路に反復オペランド処理を終了させる。精度制御ＩＡＬＵは、さらに、丸めモード、ＬＳＢ、および、丸めビットに基づいて、副精度結果の最下位ビット（ＬＳＢ）において、結果を条件付きでインクリメントする(conditionally increment)ように構成された丸め論理(rounding logic)を備える。一実施形態においては、丸め論理は、丸め値を結果のＬＳＢに位置合わせすること(aligning)、および、位置合わせされた丸め値を結果に条件付きで加えること(adding)によって、結果を丸める(round)ように構成されている。
【０００６】
したがって、少なくとも１つの実施形態においては、副精度結果は、
1つの結果を得るために、第１のビット精度のオペランドを反復的に処理すること、および、結果が、第１のビット精度よりも低いプログラムされた第２のビット精度に達するときに、反復オペランド処理を終了すること、によって、プロセッサ内において生成される。さらに、パッドされた結果(padded result)が、第１のビット精度に対応するビット幅を有するように、副精度結果の幅は、結果をパッドすること(padding)によって調整されることができる。
【０００７】
別の実施形態においては、プロセッサは、精度制御ＩＡＬＵ(controlled-precision IALU)を備える。プロセッサは、さらに、プログラムされた第２のビット精度を固定としてあるいは動的に変更可能な値として記憶するように構成された記憶エレメントを備える。プログラムされた第２のビット精度が、動的に変更可能な値として記憶される場合、その第２のビット精度は、プロセッサによって受け取られた１つまたは複数の命令に応答して、変更されることができる。精度制御ＩＡＬＵは、プロセッサによって受け取られたインジケータに応じて、反復オペランド処理を終了するように構成される。一実施形態においては、インジケータは、プロセッサ内に含まれるレジスタ内に記憶されたフラグビット(flag bit)である。
【０００８】
当然ながら、本開示は、上述した特徴に限定されるものではない。当業者は、以下の詳細な説明を読むことによって、また、添付の図面を見ることによって、さらなる特徴を理解するであろう。
【詳細な説明】
【０００９】
図１は、１つまたは複数の精度制御反復算術論理演算ユニット（ＩＡＬＵ）１２を含むプロセッサ１０の一実施形態を示す。精度制御ＩＡＬＵ１２は、ＩＡＬＵ１２内に含まれるかまたはＩＡＬＵ１２に結合された精度制御回路１４の制御下において、ＩＡＬＵ１２によって生成される結果が最大精度に達する前に反復演算処理を終了するように構成される。すなわち、精度制御回路１４によって受け取られた「プログラムされたビット精度（ＰＢＰ：Programmed Bit Precision）値」に応じて、制御回路１４は、副精度結果、すなわち、結果レジスタに関連するような精度または開始オペランドに関連する精度のようなターゲット精度よりも低いビット精度を有する結果をＩＡＬＵ１２に生成させる。そのようなものとして、精度制御回路１４は、ＰＢＰ値に応じて、結果が最大精度に達する前にＩＡＬＵ１２にオペランド処理を終了させてもよい。したがって、ＩＡＬＵ１２によって生成される副精度結果は、ＰＢＰ値に対応する最大精度ではないビット精度を有する。ＰＢＰ値は、プロセッサ１０内に含まれる記憶エレメント、例えば、特殊用途かまたは汎用のレジスタ１６またはデータキャッシュメモリー１８に保存されてもよい。一実施形態においては、ＰＢＰ値は、ハードワイヤードされたものであり、したがって、リプログラマブルなものではない。別の実施形態においては、ＰＢＰ値は、ＰＢＰレジスタ１６またはデータキャッシュ１８内に記憶された動的に変更可能な値であり、したがって、変更することが可能である。ＰＢＰ値は、１つの命令または一連の命令の一部として、例えば、超長命令語の一部として、プロセッサ１０に提供されてもよい。
【００１０】
ＰＢＰ値が、どのように生成、記憶、または、変更されたかに関係なく、精度制御回路１４は、早期にすなわち結果が最大精度に達する前に精度制御ＩＡＬＵ１２は反復算術演算を終了すべきかどうかを制御するのにＰＢＰ値を使用する。一般的な技術とは異なり、精度制御回路１４は、オペランド精度に関係なく、結果が最大精度に達する前にＩＡＬＵ１２に反復算術演算を終了させてもよい。その代わりに、精度制御回路１４は、オペランドの精度に直接に関連するものではないＰＢＰ値をそれの早期終了論理の根拠とする。その結果として、精度制御ＩＡＬＵ１２は、オペランド精度に関係なく副精度結果を生成することができ、それによって、副精度結果を許容することのできるアプリケーション例えばグラフィックスアプリケーションをプロセッサ１０が実行しているときに、消費電力を減少させ、かつ、プロセッサ１０の性能を改善することができる。
【００１１】
プロセッサ１０は、さらに、命令ユニット２０、１つまたは複数のロード／ストアユニット２２、および、命令キャッシュ２４を含む。命令ユニット２０は、ロード／ストアユニット２２および精度制御ＩＡＬＵ１２のような様々な実行ユニットへの命令の流れを中央制御する。これらの実行ユニットは、複数の命令を並列に実行してもよい。そのようなものとして、プロセッサ１０は、スーパースケーラーであってもよく、および／または、スーパーパイプライン化されてもよい。命令キャッシュ２４およびデータキャッシュ１８は、システムレジスタ（図示しない）および実行ユニットが命令およびデータに迅速にアクセスするのを可能にする。さらに、データは、実行ユニットの中の１つ、例えば、ロード／ストアユニット２２を介して、データキャッシュ１８とシステムレジスタとの間を移動してもよい。
【００１２】
図２は、精度制御ＩＡＬＵ１２の一実施形態を示す。この実施形態においては、ＩＡＬＵ１２は、算術論理演算回路２６を含む。算術論理演算回路２６は、除算、平方根、および、超越的関数のような反復算術演算を実行するように構成される。算術論理演算回路２６は、プロセッサ１０内に含まれるレジスタ２８、３０からオペランドを受け取る。一例においては、オペランドは、ＩＥＥＥ７５４単精度に準拠したものであり、したがって、それぞれのレジスタ２８、３０は、１つの符号ビット、８ビットの指数、および、２３ビットの小数を記憶する。さらなる例においては、オペランドは、ＩＥＥＥ７５４倍精度に準拠したものであり、したがって、それぞれのレジスタ２８、３０は、１つの符号ビット、１１ビットの指数、および、５２ビットの小数を記憶する。別の例においては、ｏｐｅｎＧＬ規格またはカスタムアプリケーションの精度を満たすことのできるオペランドのような、ＩＥＥＥ７５４規格とは異なる最大精度を有する。
【００１３】
ただ単に説明を簡単にするために、次に、精度制御ＩＡＬＵ１２の詳細な動作が、ＩＥＥＥ７５４単精度（ここでは、一般的に単精度と呼ばれる）に対応する最大精度を有するオペランドを参照して説明される。しかしながら、当業者は、精度制御ＩＡＬＵ１２の１つまたは複数の実施形態は、どのようなビット精度を有するオペランドでも十分に処理できること、したがって、どのような精度が最大精度を定義するかに関係なく、最大精度に到達する前に反復算術演算を終了することができることを容易に理解できるはずである。
【００１４】
図２に戻ると、算術論理演算回路２６は、図３のステップ１００に示されるように、オペランドレジスタ２８、３０から受け取った単精度オペランドを反復的に処理する。精度制御回路１４は、ＰＢＰレジスタ１６の内容かまたは１つまたは複数の命令に応答して、算術論理演算回路２６に反復処理を中断することなく完結させるか、あるいは、図３のステップ１０２に示されるように、最大精度結果に達する前に反復処理を終了することによって、算術論理演算回路２６に「早期終了」を実行させる。ＰＢＰレジスタ１６から受け取った情報の一部として、または、１つまたは複数の命令によって提供されるように、精度制御回路１４は、算術論理演算回路２６は処理を早期に終了すべきかどうかすなわち副精度結果を生成すべきかどうかを決定するインジケータ（ＲＤＰ）を受け取る。一実施形態においては、インジケータは、ＰＢＰレジスタ１６内にセットされたフラグビットである。インジケータが、セットされていなければ、精度制御回路１４は、算術論理演算回路２６に最大単精度が得られるまで反復させ、それによって、図３のステップ１０４によって示されるように、最大精度結果を生成する。しかしながら、インジケータが、セットされていれば、精度制御回路１４は、制御信号（ＣＴＲＬ）を起動し、必要とされる丸めビットを含めて所望の副精度を満たす十分なビットが生成されたときに、算術論理演算回路２６に反復を停止させ、それによって、図３のステップ１０６によって示されるように、副精度結果を生成する。
【００１５】
ＰＢＰ値は、精度制御回路１４が算術論理演算回路２６に処理を終了させる時点における結果のビット精度を指示する。例えば、ＰＢＰ値が、１６ビットのビット精度を指示するならば、精度制御回路１４は、１６ビットのビット精度を備える適切に丸められた結果を生成するのに十分なビットを中間結果が有するときに、算術論理演算回路２６に反復を停止させる。
【００１６】
一実施形態においては、ＰＤＰ値を備えないＲＤＰビットが、予め定められたサイズを有する副精度結果を生成するのに使用される。別の実施形態においては、ＲＤＰビットを備えないＰＤＰ値が、同様に、低い精度演算を可能にするのに使用される。
【００１７】
一実施形態においては、精度制御回路１４は、実行される算術的な反復の回数を追跡するためのステートマシンまたはカウンターを備える。そのようなものとして、精度制御回路１４は、算術論理演算回路の処理を監視する。算術論理演算回路２６が、ＰＢＰ値に合致するビット精度を備える適切に丸められた結果を生成するのに十分なビットを有する中間結果を生成したときに、精度制御回路１４は、制御信号を起動し、それによって、算術論理演算回路２６に処理を終了させる。例えば、精度制御回路１４は、算術論理演算回路２６によって実行される処理サイクルの数をカウントし、その数が最終的結果のビット精度がＰＢＰ値のビット精度に合致することを指示するときに、算術論理演算回路２６に処理を終了させる。
【００１８】
精度制御ＩＡＬＵ１２は、生成された結果を、プロセッサ１０内に含まれる結果レジスタ３２内に記憶する。結果レジスタ３２は、最大精度結果を記憶するのに十分なビット幅を有する。単精度結果の場合、レジスタ３２は、最大精度小数結果を記憶するための２３ビットの位置を含む（ここで、ｘ＝２３）。算術論理演算回路２６は、結果をレジスタ３２内に記憶するとき、副精度結果をパッドすることができ、それによって、レジスタ３２の内容が最大精度に対応するパッドされたビット幅を有することを確かなものにすることができる。一実施形態においては、パッドされた副精度結果が最大精度と等価なビット幅を有するように、算術論理演算回路２６は、十分な量の論理「０」ビットを結果に付加することによって、副精度結果をパッドする。ＩＡＬＵ１２は、副精度結果を結果レジスタ３２内に記憶してもよいが、（ｘ−ｎ）個のレジスタビットは、有効なものではなく、ここで、ｎ＝（ＰＢＰ値よりも１つだけ大きな有意性を有するビット位置）である。あるいは、ＩＡＬＵ１２は、副精度結果を別の結果レジスタ（図示しない）内に記憶し、ここで、その別のレジスタのビット幅は、ＰＢＰ値に対応している。
【００１９】
算術論理演算回路２６は、１つまたは複数のオペランド最下位ビット（ＬＳＢ）を切り捨ててもよく、それによって、切り捨てられたオペランドは、最大オペランド精度よりも低くかつＰＢＰ値に関連する精度よりも高いかまたはＰＢＰ値に関連する精度に等しいビット精度を有する。算術論理演算回路２６は、精度制御回路１４から受け取った切り捨て値（ＴＲＵＮＣ）に応じて、１つまたは複数のオペランドＬＳＢを切り捨てる。精度制御回路１４は、切り捨て値をＰＢＰレジスタ１６からかまたは１つまたは複数の命令から得る。一例においては、算術論理演算回路２６は、オペランドＬＳＢ（１つかまたは複数）をマスクすること(masking)によって、１つまたは複数のオペランドＬＳＢを切り捨てる。
【００２０】
図４は、精度制御ＩＡＬＵ１２の別の実施形態を示し、ＩＡＬＵ１２は、さらに、算術論理演算回路２６によって生成された結果を丸めるための丸め論理３４を含む。この実施形態においては、算術論理演算回路２６は、単精度除算器３６および商結果を一時的に保持するための商レジスタ３８を備える。一般的な丸め論理は、結果のＬＳＢ（１つかまたは複数）を削除しかつ残されたビットを調整するための１つまたは複数の丸めアルゴリズムを実施する。例えば、一般的な丸め論理は、１つまたは複数の丸めアルゴリズム、あるいは、以下の丸めアルゴリズム、すなわち、最近似値偶数への丸め、ゼロへの丸め、上方向への丸め、および／または、下方向への丸めを実施する。ガードビット、丸めビット、および、スティッキービットが、丸め処理を助けるのに使用されてもよい。しかしながら、一般的な丸め回路には、副精度結果を丸めるのは面倒なことである。このことは、副精度結果に関連するビット精度が、例えば、ＰＢＰ値の動的な変更に応じて変化し、そのために、結果のＬＳＢ、ガードビット、ラウンドビット、および、スティッキービットが、位置を移動する場合に、とりわけ言えることである。
【００２１】
精度制御ＩＡＬＵ１２内に含まれる丸め論理３４は、特定の副精度結果のＬＳＢを識別することによって、動的に変更可能なビット精度を含めて、副精度結果に関連するビット精度に対して責任を果たす。丸め論理３４は、丸め値をＬＳＢに位置合わせすることによって、それによって、結果の適切な丸めを可能にすることによって、副精度結果のＬＳＢに対して責任を果たす。丸め論理３４は、丸め回路４０および加算器４２を含む。丸め回路４０は、ＰＢＰ値を処理し、特定の結果に関連するどのビット位置が条件付きでインクリメントされるべきかを決定する。例えば、丸め回路４０は、ＰＢＰ値に応じて、商レジスタ３８内に記憶された結果の条件付きでインクリメントされるべきＬＳＢを識別する。一実施形態においては、丸め回路４０は、シフターを備える。シフターは、丸め値を移動またはシフトし、それによって、丸め値は、図５のステップ２００によって示されるように、特定の副精度結果のＬＳＢ（１つかまたは複数）に位置合わせされる。丸め値は、論理「１」値を、ＰＢＰ値のＬＳＢに対応するビット位置へシフトすることによって、位置合わせされてもよい。そのようなものとして、丸め値は、対応する結果のＬＳＢに対応するビット位置を除けばすべて論理「０」を有するビットパターンを備える。そして、シフトされた丸め値は、オペランドとして加算器４２に提供される。算術論理演算回路２６によって生成された副精度結果は、他方のオペランド、例えば、商レジスタ３８内に記憶された結果の役割をなす。加算器４２は、シフトされた丸め値を、算術論理演算回路２６によって生成された結果に条件付きで加算し、図５のステップ２０２によって示されるように、正確に丸められた結果を生成する。当業者は、結果は、様々な公知の条件付きインクリメント技術の中の１つを用いる丸めモードと協力して、ＬＳＢ、ガードビット、ラウンドビット、および、スティッキービットに基づいて、丸められてもよいことがわかるはずであり、それらの条件付きインクリメント技術のそれぞれは、ここで開示される実施形態の範囲内に存在する。
【００２２】
別の実施形態においては、丸め回路４０は、丸め値を副精度結果のＬＳＢ（１つかまたは複数）に位置合わせするための復号器を備え、それによって、結果を適切に丸めることを可能にする。復号器は、ＰＢＰ値を受け取り、そして、図６のステップ３００によって示されるように、そのＰＢＰ値に対応する丸め値を生成する。一実施形態においては、丸め値は、ＰＢＰ値のＬＳＢに対応するビット位置を除けばすべて論理「０」を有するビットパターンを備える。ＰＢＰ値のＬＳＢに対応する丸め値のビット位置は、論理「１」を備える。そして、丸め値は、オペランドとして加算器４２に提供され、そして、算術論理演算回路２６によって生成された結果は、他方のオペランドの役割をなす。加算器４２は、その丸め値を、算術論理演算回路２６によって生成された結果に条件付きで加算し、図６のステップ３０２によって示されるように、正確に丸められた結果を生成する。このように、丸め値を適切にシフトするかまたはＰＢＰ値を復号化し、丸めオペランドを生成し、そして、その丸めオペランドを対応する結果に条件付きで加えることによって、精度制御ＩＡＬＵ１２は、正確な副精度結果を生成することができる。
【００２３】
上述した一連の変形およびアプリケーションを考えれば、本発明はこれまでの説明によって限定されることはなく、また添付の図面によって限定されることもないことがわかるはずである。その代わりに、本発明は、添付の特許請求の範囲およびそれらの法律上の均等物(legal equivalents)によってのみ限定される。
【図面の簡単な説明】
【００２４】
【図１】精度制御反復算術論理演算ユニット（ＩＡＬＵ）を含むプロセッサの実施形態を示すブロック図である。
【図２】図１の精度制御ＩＡＬＵの実施形態を示すブロック図である。
【図３】反復算術演算を実行するためのプログラム論理の実施形態を説明する論理フローチャートである。
【図４】丸め回路をさらに備える図１の精度制御ＩＡＬＵの実施形態を示すブロック図である。
【図５】図４の精度制御ＩＡＬＵによって生成された副精度結果を丸めるためのプログラム論理の実施形態を説明する論理フローチャートである。
【図６】図４の精度制御ＩＡＬＵによって生成された副精度結果を丸めるためのプログラム論理の実施形態を説明する論理フローチャートである。
【図１】
2009536409.tif 000003
【図２】
2009536409.tif 000004
【図３】
2009536409.tif 000005
【図４】
2009536409.tif 000006
【図５】
2009536409.tif 000007
【図６】
2009536409.tif 000008
【国際調査報告】
2009536409.tif 000009
2009536409.tif 000010
2009536409.tif 000011
2009536409.tif 000012
2009536409.tif 000013
2009536409.tif 000014