(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5719341
(24)【登録日】2015年3月27日
(45)【発行日】2015年5月20日
(54)【発明の名称】浮動小数点ユニットにおけるオーバーシフトの高速検出のためのメカニズム
(51)【国際特許分類】
G06F 7/76 20060101AFI20150430BHJP
G06F 17/10 20060101ALI20150430BHJP
G06F 7/483 20060101ALI20150430BHJP
【FI】
G06F7/76 101
G06F17/10 S
G06F7/483
【請求項の数】16
【全頁数】14
(21)【出願番号】特願2012-500839(P2012-500839)
(86)(22)【出願日】2010年3月11日
(65)【公表番号】特表2012-521047(P2012-521047A)
(43)【公表日】2012年9月10日
(86)【国際出願番号】US2010026908
(87)【国際公開番号】WO2010107650
(87)【国際公開日】20100923
【審査請求日】2013年3月11日
(31)【優先権主張番号】12/404,426
(32)【優先日】2009年3月16日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ディビッド エス. オリヴァー
【審査官】
緑川 隆
(56)【参考文献】
【文献】
米国特許第05771183(US,A)
【文献】
特開2007−156748(JP,A)
【文献】
特開平09−204295(JP,A)
【文献】
特開平08−335163(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/00
G06F 7/38−7/78
G06F 7/483
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
第1の指数及び第1の仮数を有する第1の浮動小数点数と第2の指数及び第2の仮数を有する第2の浮動小数点数の間で浮動小数点加算動作を実行するように構成される浮動小数点加算器と、
前記第2の指数の値が前記第1の指数の値と同一になるように前記第2の仮数をシフトするビット位置の数に対応するシフト値を計算するように構成されるアライメントシフト器とを備えた浮動小数点ユニットであって、
前記アライメントシフト器は選択されたオーバーシフトスレッショルド値に前記シフト値が等しくなるか又はそれよりも大きくなるオーバーシフト状態を検出するように構成され、
前記アライメントシフト器は前記オーバーシフト状態を検出することに応答してオーバーシフト表示を提供するように更に構成され、
前記選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内の2進数を備えると共に最下位ビットで始まる最多数の連続するゼロのビットを有している浮動小数点ユニット。
【請求項2】
前記アライメントシフト器は前記第2の仮数を前記シフト値によって表されるビット位置の数だけ右にシフトするように構成される請求項1に記載の浮動小数点ユニット。
【請求項3】
前記最小オーバーシフトスレッショルド値は、前記第2の仮数のMSBが前記第1の仮数のLSBの右になるようにシフトされている前記第2の仮数に由来するシフト値に対応し且つ前記第1の仮数のデータパス内のビットの数の2倍に加えられるガードバンドビットの数に対応する請求項1に記載の浮動小数点ユニット。
【請求項4】
前記第1の仮数の最下位ビット(LSB)の右のビットの数はスティッキー領域に対応し、前記スティッキー領域は、前記第1の仮数のデータパス内のビットの数より1小さい数のビットを含む請求項1に記載の浮動小数点ユニット。
【請求項5】
前記第1の仮数のLSBの右の前記第2の仮数の任意のLSBが互いに論理和をとられてスティッキービットを生じさせるように右にシフトされている前記第2の仮数に応答する請求項4に記載の浮動小数点ユニット。
【請求項6】
前記アライメントシフト器は、前記オーバーシフト状態を検出することに応答して前記スティッキービットをセットするように更に構成される請求項5に記載の浮動小数点ユニット。
【請求項7】
前記最大オーバーシフトスレッショルド値は、前記第2の仮数のMSBが前記スティッキー領域のLSBにアラインされるように右にシフトされている前記第2の仮数に由来するシフト値に対応する請求項5に記載の浮動小数点ユニット。
【請求項8】
第3の浮動小数点数に第4の浮動小数点数を乗じて第5の浮動小数点数を生成するように構成される浮動小数点乗算器を更に備えた請求項1に記載の浮動小数点ユニット。
【請求項9】
前記最小オーバーシフトスレッショルド値は、前記第2の仮数のデータパス内のビットの数の3倍に加えられるガードバンドビットの数に対応する請求項8に記載の浮動小数点ユニット。
【請求項10】
前記選択されたオーバーシフトスレッショルド値は、前記シフト値と前記選択されたオーバーシフトスレッショルド値の間での比較のための検出臨界的タイミングパスにおける最も少ない数のゲート遅延を有する論理実装に対応する請求項1に記載の浮動小数点ユニット。
【請求項11】
浮動小数点動作を実行するように構成される浮動小数点ユニットを備えたプロセッサであって、前記浮動小数点ユニットは、
第1の指数及び第1の仮数を有する第1の浮動小数点数と第2の指数及び第2の仮数を有する第2の浮動小数点数の間で浮動小数点加算動作を実行するように構成される浮動小数点加算器と、
前記第2の指数の値が前記第1の指数の値と同一になるように前記第2の仮数をシフトするビット位置の数に対応するシフト値を計算するように構成されるアライメントシフト器とを含み、
前記アライメントシフト器は選択されたオーバーシフトスレッショルド値に前記シフト値が等しくなるか又はそれよりも大きくなるオーバーシフト状態を検出するように構成され、
前記アライメントシフト器は前記オーバーシフト状態を検出することに応答してオーバーシフト表示を提供するように更に構成され、
前記選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内の2進数を備えると共に最下位ビットで始まる最多数の連続するゼロのビットを有しているプロセッサ。
【請求項12】
前記アライメントシフト器は前記第2の仮数を前記シフト値によって表されるビット位置の数だけ右にシフトするように構成される請求項11に記載のプロセッサ。
【請求項13】
前記最小オーバーシフトスレッショルド値は、前記第2の仮数のMSBが前記第1の仮数のLSBの右になるようにシフトされている前記第2の仮数に由来するシフト値に対応し且つ前記第1の仮数のデータパス内のビットの数の2倍に加えられるガードバンドビットの数に対応する請求項11に記載のプロセッサ。
【請求項14】
前記第1の仮数の最下位ビット(LSB)の右のビットの数はスティッキー領域に対応し、前記スティッキー領域は、前記第1の仮数のデータパス内のビットの数より1小さい数のビットを含む請求項11に記載のプロセッサ。
【請求項15】
前記第1の仮数のLSBの右の前記第2の仮数の任意のLSBが互いに論理和をとられてスティッキービットを生じさせるように右にシフトされている前記第2の仮数に応答する請求項14に記載のプロセッサ。
【請求項16】
前記アライメントシフト器は、前記オーバーシフト状態を検出することに応答して前記スティッキービットをセットするように更に構成される請求項15に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はプロセッサに関し、更に特定的にはプロセッサにおける浮動小数点計算に関する。
【背景技術】
【0002】
コンピュータシステムにおいては、浮動小数点数は有理数の数値的な表現である。一般的に、「浮動小数点」の語句は、基数又は小数点が数の有効数字に関連して何処へでも移動させられ得るという考え方を参照する。位置情報は独立に表示され得る。浮動小数点数を表す方法はこれまでにも幾つかあるが、最も普及している標準は、電気電子技術者協会(IEEE)754標準によって規定されている。
【0003】
浮動小数点動作は、浮動小数点数がはるかに広い範囲の値を表し得るということにおいて、固定小数点動作を超える明白な利点を提供する。しかし、浮動小数点動作は計算が遅くなる可能性がある。従って、コンピュータシステムが浮動小数点計算動作を実行し得る速度の測定は、全体的なプロセッサ性能を考える上での最大の関心事である。このように、コンピュータシステムが乗算及び加算動作(FMA)のような浮動小数点計算を実行する場合には、できる限りタイムリーな様態での「オーバーシフト(overshift)」状態の検出が重要になるであろう。例えばFMAを実行する場合、加数は積と有効数字を合わせるためにシフトさせられる必要がある。そのためにシフト量が計算される。計算の一部として、オーバーシフト状態の検出は臨界的パス(critical path)内にある。多くの従来のシステムにおいては、定数と右シフト数の間での比較動作を論理回路が実行するであろう。この比較は臨界的タイミングパス内にあり、また比較を行うためのゲートの数は大きくなり得るので、許容可能なタイミングパス遅延よりも大きな遅延を有することになる。
【発明の概要】
【課題を解決するための手段】
【0004】
オーバーシフト検出メカニズムの種々の実施形態が開示される。1つの実施形態においては、例えばプロセッサ内で用いられるであろうような浮動小数点ユニットは、第1の指数及び第1の仮数を有する第1の浮動小数点数及び第2の指数及び第2の仮数を有する第2の浮動小数点数の間で浮動小数点加算動作を実行するように構成される浮動小数点加算器を含む。浮動小数点ユニットはまた、第2の指数の値が第1の指数の値と同一になるように第2の仮数をシフトするビット位置の数に対応するシフト値を計算し得るアライメントシフト器を含む。アライメントシフト器はオーバーシフト状態を検出してよく、オーバーシフト状態においては、シフト値は、選択されたオーバーシフトスレッショルド値以上である。加えて、アライメントシフト器は、オーバーシフト状態を検出することに応答してオーバーシフト表示を提供してよい。選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内の2進数を備えると共に最下位ビットで始まる最多数の連続するゼロのビットを有している。
【図面の簡単な説明】
【0005】
【
図1】
図1は汎用プロセッサコアの1つの実施形態を示す一般化されたブロック図である。
【0006】
【
図2】
図2は
図1の浮動小数点ユニット124cの実施形態の一部分のブロック図である。
【0007】
【
図3】
図3は幾つかの可変長の加数シフトを示す図である。
【0008】
【
図4】
図4はオーバーシフト検出論理単純化実現化を示す図である。
【0009】
本発明は種々の修正及び代替的な形態を許容する一方で、その特定の実施形態が図面に例として示されており、またここに詳細に説明されることになる。しかし、図面及びそれに対する詳細な説明は、開示される特定の形態に本発明を限定することを意図されておらず、むしろ逆に、本発明は、添付の特許請求の範囲によって画定されるような本発明の精神及び範囲内に含まれる全ての修正、均等なもの、及び代替案に及ぶものであることが理解されるべきである。尚、「〜よい、〜かもしれない、〜ことがある、〜得る、〜であろう(may)」の語は、この出願を通して、許容の意味(即ち、〜する可能性を有する、〜することができる)で用いられており、必須の意味(即ち、〜しなければならない)の意味では用いられていない。
【発明を実施するための形態】
【0010】
図1を参照すると、プロセッサ10の1つの実施形態の一般化されたブロック図が示されている。他の実施形態が可能であり且つ検討されている。
図1に示されるように、プロセッサ10は、プリフェッチ/プリデコードユニット12と、分岐予測ユニット14と、命令キャッシュ16と、命令アライメントユニット18と、デコードユニット20と、予約ステーション22と、機能ユニット24と、ロード/ストアユニット26と、データキャッシュ28と、レジスタファイル30と、リオーダバッファ32と、MROMユニット34と、バスインタフェースユニット37と、L2キャッシュ39とを含む。尚、スーパースケーラプロセッサにおいては、それぞれのデコードユニット、予約ステーション及び機能ユニットを各々が有する多重パイプラインがあり得るので、種々の実施形態においては、デコードユニット20、予約ステーション22、及び機能ユニット24の各々は、任意の数の独立したユニットを含んでいてよい。従って、図示される実施形態では、機能ユニット24は、整数ユニット124a及び124b並びに浮動小数点ユニット(FPU)124cを含む。しかし、他の実施形態においては、他の数の整数ユニット及びFPU124cが用いられてよい。
【0011】
プリフェッチ/プリデコードユニット12は、バスインタフェースユニット37からの命令を受信するように結合され、また命令キャッシュ16及び分岐予測ユニット14に更に結合される。同様に、分岐予測ユニット14は命令キャッシュ16に結合される。また、分岐予測ユニット14はデコードユニット20及び機能ユニット24に結合される。命令キャッシュ16は更にMROMユニット34及び命令アライメントユニット18に結合される。命令アライメントユニット18は同様にデコードユニット20に結合される。デコードユニット20はロード/ストアユニット26及び予約ステーション22に結合される。予約ステーション22は更にそれぞれの機能ユニット24に結合される。加えて、デコードユニット20及び予約ステーション22はレジスタファイル30及びリオーダバッファ32に結合される。機能ユニット24は、ロード/ストアユニット26、レジスタファイル30、及びリオーダバッファ32に同様に結合される。データキャッシュ28はロード/ストアユニット26及びバスインタフェースユニット37に結合される。バスインタフェースユニット37は更にL2キャッシュ39及びバスに結合される。最後に、MROMユニット34はデコードユニット20に結合される。
【0012】
命令キャッシュ16は、命令を記憶するために設けられる高速キャッシュメモリである。命令は命令キャッシュ16からフェッチされ、そしてデコードユニット20へ送られる。1つの実施形態では、命令キャッシュ16は、64バイトライン(1つのバイトは8バイナリビットからなる)を有する2ウエイセットアソシアティブ(2 way set associative)構造での64キロバイトまでの命令を記憶するように構成される。代替的には、任意の他の所望の構成及びサイズが用いられてよい。尚、例えば、命令キャッシュ16は、フルアソシアティブ、セットアソシアティブ、又はダイレクトマップ構成として実装されてよい。
【0013】
命令はプリフェッチ/プリデコードユニット12によって命令キャッシュ16内へ記憶される。命令及び/又はデータは、命令キャッシュ16又はロード/ストアユニット26からのその要求に先立ちプリフェッチスキームに従ってプリフェッチされてよい。デコードユニット20によって直接的にデコードされてよい命令は、「高速パス(fast path)」命令と称される。1つの実施形態によると、残りのx86命令はMROM命令と称される。MROM命令は、デコードユニット20によるデコードには複雑すぎると決定される命令である。MROM命令は、MROMユニット34を起動すること(invoking)によって実行される。より具体的には、MROM命令に直面すると、MROMユニット34は、命令を構文解析し、そして所望の動作を生じさせるように定義される高速パス命令のサブセットとして命令を発行する。MROMユニット34は、高速パス命令のサブセットをデコードユニット20へ送る。
【0014】
図示される実施形態においては、プロセッサ10は、条件付き分岐命令の後に命令を投機的に(speculatively)フェッチするために、分岐予測を採用している。分岐予測ユニット14は、分岐予測動作を実行するためにインクルードされている。デコードユニット20及び機能ユニット24は、更新情報を分岐予測ユニット14に提供してよい。デコードユニット20は、分岐予測ユニット14によって予測されなかった分岐命令を検出してよい。機能ユニット24は、分岐命令を実行し、そして予測された分岐命令が誤っているかどうかを決定する。分岐命令は「取られて(taken)」よく、この場合、その後の命令は分岐命令の目標アドレスからフェッチされる。逆に、分岐命令は「取られない(not taken)」かもしれず、この場合、その後の命令は分岐命令に連続するメモリロケーションからフェッチされる。ミス予測された(mispredicted)分岐命令が検出される場合には、ミス予測された分岐の後の命令は、プロセッサ10の種々のユニットから廃棄される。代替的な構成においては、分岐予測ユニット14は、デコードユニット20及び機能ユニット24の代わりにリオーダバッファ32に結合されてよく、そしてリオーダバッファ32から予測ミス(misprediction)情報を受信してよい。種々の適切な分岐予測アルゴリズムが分岐予測ユニット14によって用いられてよい。
【0015】
命令キャッシュ16からフェッチされた命令は、命令アライメントユニット18へ伝えられる。命令が命令キャッシュ16からフェッチされるにつれて、対応するプリデコードデータが走査されて、フェッチされている最中の命令に関する情報が命令アライメントユニット18(及びMROMユニット34)へ供給される。命令アライメントユニット18は、走査データを利用して命令をデコードユニット20の各ユニットにアラインする(align)。1つの実施形態では、命令アライメントユニット18は、命令を8つの命令バイトの3セットからデコードユニット20にアラインする。
【0016】
デコードユニット20は、命令アライメントユニット18から受信される命令をデコードするように構成される。レジスタオペランド情報が検出され、そしてレジスタファイル30及びリオーダバッファ32へと経路付けられる。また、1つ以上のメモリ動作が実行されることを命令が必要とする場合には、デコードユニット20はメモリ動作をロード/ストアユニット26へ送る。各命令は機能ユニット24のための一連の制御値へとデコードされ、そしてこれらの制御値は、オペランドアドレス情報、及び命令と共に含まれているであろう退去データ又は即時データ(displacement or immediate data)と一緒に予約ステーション22へと送られる。1つの特定の実施形態においては、各命令は、機能ユニット124a〜124bによって別個に実行され得る2つまでの動作へとデコードされる。
【0017】
プロセッサ10は順序外実行(out of order execution)を支持し、そのためにリオーダバッファ32を用いて、レジスタ読み出し及び書き込み動作に対する元のプログラムシーケンスの経過を辿り、レジスタ名変更(register renaming)を実装し、投機的命令実行及び分岐予測ミス回復を可能にし、そして正確な例外を容易にしている。
【0018】
デコードユニット20の出力にて提供される命令制御値及び即時データ又は退去データは、それぞれの予約ステーション22へ直接的に経路付けられる。1つの実施形態では、予約ステーション22の各ユニットは、対応する機能ユニットへと発行されるのを待たされている6つまでの係属中命令のために命令情報(即ち命令制御値の他にオペランド値、オペランドタグ及び/又は即時データ)を保持することが可能である。
【0019】
特定の命令のデコードに際して、要求されたオペランドがレジスタロケーションである場合には、レジスタアドレス情報は同時にリオーダバッファ32及びレジスタファイル30へと経路付けられる。当業者であれば、x86レジスタファイルが8つの32ビットリアルレジスタ(即ち典型的にはEAX、EBX、ECX、EDX、EBP、ESI、EDI及びESP)を含むことを理解するであろう。IA−32アーキテクチャとも称されるx86プロセッサアーキテクチャを採用しているプロセッサ10の実施形態においては、レジスタファイル30は32ビットリアルレジスタの各々のための記憶ロケーションを備えている。MROMユニット34による使用のために、追加的な記憶ロケーションがレジスタファイル30内に含まれていてよい。
【0020】
先に述べたように、予約ステーション22は、対応する機能ユニット124a、124b又は124cによって命令が実行されるまで命令を記憶している。命令は、(
i)命令のオペランドが提供された場合、及び(
ii)同一の予約ステーション22内にあり且つプログラム順序での命令に先立つものである命令に対してオペランドが未だ提供されていない場合に、実行のために選択される。尚、機能ユニット24内のユニットの1つによって命令が実行される場合には、当該命令の結果は、当該結果がリオーダバッファ32へ渡されるのと同時に、当該結果を待っている任意の予約ステーション22へと直接的に渡される(この技術は一般に「結果転送(result forwarding)」と称される)。関連する結果が転送されているクロックサイクルの間に、命令が実行のために選択されてよく、そして1つの機能ユニット24へと渡されてよい。この場合、予約ステーション22が、転送された結果をその機能ユニット24へと経路付ける。機能ユニット24によって実行されるべき多重動作へと命令がデコードされ得る実施形態においては、これらの動作は互いに独立してスケジューリングされてよい。
【0021】
1つの実施形態では、整数ユニット124a及び124bの各々は、加算及び減算の整数演算動作の他、シフト、循環(rotates)、論理動作、及び分岐動作を実行するように構成される。これらの動作は、デコードユニット20によって特定の命令に対してデコードされる制御値に応答して実行される。尚、FPU124cが浮動小数点動作を実行するために用いられてもよい。従って、FPU124cは、浮動小数点乗算器加算器(FMA)ユニット125を含む。FPU124cは、MROMユニット34又はリオーダバッファ32からの命令を受信すると共に次いでリオーダバッファ32と通信して命令を履行するコプロセッサ(coprocessor)として動作させられてよい。加えて、整数ユニット124a及び124bは、ロード/ストアユニット26によって実行されるロード及びストアメモリ動作のためのアドレス生成を実行するように構成されてよい。1つの特定の実施形態においては、整数ユニット124a及び124bは、アドレスを生成するためのアドレス生成ユニットと、残りの機能を実行するための実行ユニットとを備えていてよい。これら2つのユニットは、クロックサイクルの間における異なる命令又は動作に際して独立して動作してよい。
【0022】
以下に更に詳細に説明されるように、1つの実施形態では、FPU124cは、従来の浮動小数点ユニットよりも高速な浮動小数点動作の間にオーバーシフト(overshift)を検出し得るアライメントシフト器制御論理210を含んでいてよいFMAユニット125を含む。より特定的には、1つの実施形態では、アライメントシフト器制御論理210は、別の加数(addend)に又は2つの数の積に加えられることになる加数に対するオーバーシフト値を計算することと、次いで計算された値を選択されたオーバーシフトスレッショルド値と比較することとによって、オーバーシフトを検出することができる。種々の実施形態において、選択されたオーバーシフトスレッショルド値は、最小オーバーシフトスレッショルド値及び最大オーバーシフトスレッショルド値を含むオーバーシフト値の範囲内にある二進数であり、最下位ビットで始まる最多数の連続するゼロのビットを有している。この選択されたオーバーシフト値は、FMAユニット125の臨界的タイミングパス(critical timing paths)の1つにおける最少数のゲート遅延でオーバーシフト検出論理回路を実装するはずである。
【0023】
ロード/ストアユニット26は、機能ユニット24とデータキャッシュ28の間でのインタフェースを提供する。1つの実施形態においては、ロード/ストアユニット26は、データキャッシュ28にアクセスしなかった係属中のロード又はストアのためのデータ及びアドレス情報に対する記憶ロケーションを有するロード/ストアバッファと、データキャッシュ28にアクセスしたロード及びストアのためのデータ及びアドレス情報に対する記憶ロケーションを有する別のロード/ストアバッファとを伴うように構成されてよい。
【0024】
データキャッシュ28は、ロード/ストアユニット26と主メモリサブシステムの間で転送されている最中のデータを一時的に記憶するために設けられる高速キャッシュメモリである。1つの実施形態では、データキャッシュ28はセットアソシアティブ構成であってよい。データキャッシュ28は、セットアソシアティブ構成、フルアソシアティブ構成、直接マップ構成、及び任意の適切なサイズ又は他の構成を含む種々の具体的なメモリ構成で実装されてよいことが理解される。
【0025】
x86プロセッサアーキテクチャを用いるプロセッサ10の1つの特定の実施形態においては、命令キャッシュ16及びデータキャッシュ28は、線形的にアドレス指定され且つ物理的にタグ付けされる。線形アドレスは、命令によって指定されるオフセット及びx86アドレス翻訳メカニズムのセグメント部分によって指定される基本アドレスから形成される。線形アドレスは、随意的に、主メモリにアクセスするための物理アドレスへ翻訳されてよい。線形から物理への翻訳は、x86アドレス翻訳メカニズムのページング部分(paging portion)によって指定される。物理アドレスは物理タグと比較されてヒット/ミス状態を決定する。
【0026】
バスインタフェースユニット37は、プロセッサ10とコンピュータシステム内の他のコンポーネントとの間でシステムバスを介して通信するように構成されてよい。例えば、バスは、デジタルイクイップメントコーポレーション(Digital Equipment Corporation)によって開発されたEV−6バスに適合していてよい。代替的には、パケットベースの、単一方向の、又は双方向のリンク等を含む任意の適切な相互接続構成が用いられてよい。バスインタフェースユニット37は更にL2キャッシュ39と通信してよい。
【0027】
1つの実装においては、L2キャッシュ39は、命令及びデータの両方を記憶する第2レベルキャッシュであってよい。L2キャッシュ39は、例えば、256キロバイト、512キロバイト、又は1メガバイトのサイズであってよい。他の実施形態は、もっと小さな又はもっと大きなサイズを用いてよい。L2キャッシュ39は、ダイレクトマップ構成又はセットアソシアティブ構成を採用していてよい。
【0028】
尚、
図1のプロセッサ10はx86アーキテクチャで実装されるプロセッサであるとして説明されているが、他の実施形態においては、プロセッサ10は任意の他のアーキテクチャで実装される可能性が検討される。また、プロセッサ10は、多重コアプロセッサの一部、又は特定用途向け集積回路(ASIC)内に埋め込まれたプロセッサ等として実装されてよい。
【0029】
図2を参照すると、
図1のFMAユニット125の1つの実施形態の一部分のブロック図が示されている。尚、簡潔さのために種々の要素が省略されると共に議論に密接に関連するFMAユニット125の部分のみが
図2に示されている。図示される実施形態においては、FMA125は脇見出しFX1〜FX6によって表されるパイプラインユニットとして示されているが、他の実施形態においては、非パイプライン設計が実装される可能性が検討される。また、FMA125の図示された部分によって提供されるデータパスは、ノーマルの場合(normal cases)を取り扱うように構成される。即ち、加数の仮数部(addend mantissa)のMSB(最上位ビット)が常に論理値1の場合である。事実、加数の仮数部のMSBがゼロである非ノーマルの場合(denormal cases)の他、全てがゼロである場合は、1つ以上の異なるデータパス及び対応する回路によって取り扱われる。
【0030】
図示されるように、FMAユニット125は、入ってくる加数「C」と被乗数「A」及び「B」とを記憶するための幾つかのレジスタを含む。より特定的には、「A」、「B」及び「C」の指数はレジスタ指定の指数201内に記憶されてよい一方で、加数「C」並びに被乗数「A」及び「B」の仮数は、それぞれ64ビット値としてレジスタ202、203及び204内に記憶されてよい。また、指数レジスタ201は、指数加算器205及びアライメントシフト器制御ユニット210の他、次のパイプライン段階FX2内の第2の指数レジスタ212に結合される。指数レジスタ212は次のパイプライン段階FX3内の指数レジスタ214に結合され、指数レジスタ214はマルチプレクサ(mux)218に結合される。mux218の出力は、指数デクリメント器(exponent decrementer)219、指数インクリメント器(exponent incrementer)220及びmux221の入力の1つに結合される。指数デクリメント器219及び指数インクリメント器220の出力は、各々mux221の他の入力に結合される。mux221の出力は、パイプライン段階FX5の開始にて指数レジスタ225に結合される。指数レジスタ225の出力は、パイプライン段階FX6における正規化及び丸め(normalization and rounding)ユニット250内で最終的な合計の計算において用いられてよく、正規化及び丸めユニット250は、最終的な結果を生成すると共にその結果を結果レジスタ255内に記憶する。正規化及び丸めユニット250は、任意の例外ビット及び/又は状態ビットを例外/状態レジスタ260内に記憶してもよい。
【0031】
段階FX1を再び参照すると、仮数レジスタ203の出力はブースエンコーダ(booth encoder)206に結合され、ブースエンコーダ206は乗算器208の部分積部分(partial products portion)207の1つの入力に結合される。仮数レジスタ204の出力は、乗算器208の部分積部分207の他方の入力に結合される。乗算器208の出力は、桁上げ保存加算器(carry save adder)(CSA)213に結合される。
【0032】
アライメントシフト器制御210の出力は、先行ゼロ予測器(leading zero anticipator)ユニット223を用いるための「Lza使用(Use Lza)」211指定の表示を提供するように結合される。アライメントシフト器制御210の出力は右方シフト器ユニット209にも結合され、右方シフト器ユニット209は次いでCSA213及びアラインレジスタ(align register)215に結合され、アラインレジスタ215は、アラインされシフトされた加数「C」を保持するように構成されてよい。アラインレジスタ215の出力は、194ビット合算レジスタ227に結合されるインクリメント器222に結合され、合算レジスタ227の出力は、正規化及び丸めユニット250に結合される。
【0033】
段階FX3を再び参照すると、CSA213の出力は合算レジスタ216及び桁上げレジスタ(carry register)217に結合され、これらは両方とも次いで先行ゼロ予測器ユニット223及び桁上げ伝播加算器(carry propagate adder)224に結合される。先行ゼロ予測器223の出力は正規化制御レジスタ226に結合される一方、桁上げ伝播加算器224の出力は合算レジスタ227に結合される。
【0034】
上述したように、動作の間、「A」と「B」の積(即ち積値)の指数の値及び加数「C」の指数に応じて、加数「C」(即ち加数値)の仮数は、積値の指数と加数値の指数とが後続の加算動作のために同じになるようにシフトされる必要があるであろう。従って、アライメントシフト器制御210は、適切なシフト値を計算してそれを右方シフト器ユニット209へ供給してよい。加えて、アライメントシフト器制御210は、計算されたシフト値がアンダーシフトを生じさせるか又はオーバーシフトを生じさせるかを決定してよく、これについては
図3及び
図4の説明と共に以下に更に詳細に説明される。更に、オーバーシフトが生じてしまったことをアライメントシフト器制御210が決定すると、アライメントシフト器制御210はスティッキービット(sticky bit)がセットされるようにしてよい。
【0035】
図3は幾つかの可変長の加数シフトを示す図である。
図2及び
図3を併せて参照すると、
図2に示される実施形態は64ビット仮数値を支持する。従って、積は128ビットであろう。
図3に示されるように、積の左への66ビットはインクリメント領域と称され、何故ならば、加数と積が合算される場合に、当該領域におけるビットの効果は多くて1単位を加えることだからである。積の右への63ビットはスティッキー領域と称される。スティッキー領域は、任意の加数ビットがスティッキー領域と重複するするように加数がシフトされる場合に当該ビットが互いに論理和をとられてスティッキービットを生成する区域を参照し、スティッキービットは丸め動作において用いられ得る。スティッキー領域の幅は、仮数幅(Mw)から1を減じたものとして定義され得る。
【0036】
上述したように、加数を積に加える前に、加数は、積及び加数の指数が同じになるようにシフトさせられる必要があろう。実際には、シフト量は、シフトされた加数の少なくとも1ビットが積と重複するシフトに加えて、積よりも左(より上位(more significant))にアラインされる加数に対するガードバンド(guard banding)として必要とされる数ビットに限定されるであろう。この例示的実施形態においては、ガードビット(Gb)は2に選択される。
【0037】
従って、128ビット積(例えば2つの64ビット仮数被乗数)に64ビット加数を加える場合には、
図3における加数302によって示されるように、ゼロのシフトは、加数を126:63の範囲内のそのビットで残すであろう。左シフトされた加数は67ビットシフトに限定されるであろうから、加数のLSB(最下位ビット)と積のMSB(最上位ビット)の間には2つのガードビットがあることになる。その上、
図3におけるアンダーシフト加数301によって示されるように、加数ビットのいずれもが積ビットに対してアラインされないようなアンダーシフト状態が存在するであろう。実際上は、単一方向にのみシフトするのがより単純であると考えられる。アンダーシフトがゼロシフトとしてエンコードされ且つシフト器が常に右へシフトするように、定数が加えられてシフト量をバイアスしてよい。例えば、加数指数が積の指数に等しい場合、加数302は結果として67の右シフトをもたらすであろう。以下、シフト量の全ての参照はこのバイアスされた表現を参照する。
【0038】
シフト限界(shift boundary)の範囲内で2Mw+Gbより大きく右シフトされた加数がシフト加数303によって示されており、シフトされた加数303のビットの幾つかは積の範囲内であり、また幾つかはスティッキー範囲内である。シフト限界は、例えば3Mw+Gb−1で定義され得る。このシフト限界は例示的なデータパスに対して193であり、またそのようなシフトは加数のMSBが積のLSBにアラインされることを可能にするであろうから、シフト限界は最大の右シフトである。尚、この最大の右シフトに対して、積LSBを下回る全ての仮数ビットがスティッキー内に含まれるように、スティッキー範囲は少なくともMw−1ビットを含んでいる必要がある。最大よりも大きな右シフトはオーバーシフトと考えられる。加数のMSBは常に1であるから、任意のオーバーシフトはスティッキーがセットされることを結果としてもらたす。
【0039】
しかし、この実装においては加数のMSBは常に1であり且つゼロ及び非ノーマル(denormals)は異なるデータパスにおいて処理されるので、加数MSBをスティッキー範囲内に置くシフト値は、加数MSBがノーマルスティッキー論理にスティッキー表示をセットさせるであろうという理由で、スティッキービットをオーバーシフト表示にもかかわらず正確にオーバーシフトに設定するであろう。従って、厳密な境界(最大右シフトよりも大きなシフト量)でオーバーシフトを計算するよりもむしろ、オーバーシフト検出回路は、最小及び最大オーバーシフトスレッショルドの間で任意に選択されるオーバーシフトスレッショルドを用いて構成され得る。最小オーバーシフトスレッショルドはシフト器幅として表されてよく、この融合された乗算実装(fused multiply implementation)ではシフト器幅はGb+3Mwである。最大オーバーシフトスレッショルドは4Mw+Gb−2、即ちGb=2に対しては単純に4(Mw)である。尚、純然たる加算器においては、最小オーバーシフトスレッショルドはGb+2Mwで表されるであろうし、また最大オーバーシフトスレッショルドは3Mw+Gb−2であろう。
図3における64ビットFMA実装に対しては、最小及び最大オーバーシフトスレッショルドはそれぞれ194及び256である。
【0040】
図示される実施形態においては、以下に更に説明されるようにオーバーシフト検出を実装する論理はより少ない論理レベル及びこれに伴いより少ないゲート遅延を有していてよいので、オーバーシフトスレッショルドは、オーバーシフト加数305によって図示されるように256以上であるように選択される。そのようなオーバーシフト状態が図示されるように存在する場合には、スティッキー範囲内には論理和をとる加数ビットが残されていないので、スティッキービットが強制的にセットされる。
【0041】
図4を参照すると、
図3に示されるシフトに基くオーバーシフト検出論理単純化実現化を表す図が示されている。上述したように、右シフト量(即ちシフト値)は図示されるように計算されてよい。例示される実施形態においては、指数は18ビット符号なし数値(例えばExpA[17:0])で表されるが、シフト値は負であるアンダーシフト値を計上するので、シフト器は追加的な符号ビットS[18]を含む。オーバーシフトを検出するために、検出論理はシフト量をオーバーシフトスレッショルドと比較する。標準的なシステムにおいては、オーバーシフトスレッショルド値は194以上であった。本実施形態においては、オーバーシフトスレッショルド値は256以上である。
図4における図示は、オーバーシフト410で表される194以上のシフト値を検出するため及びオーバーシフト425で表される256以上のシフト値を検出するために照合される必要があるビットを示している。
【0042】
例えば、2つの数X及びYが図示されるように定義される。X値は、符号ビットが論理値ゼロであり且つ任意のビット[17:8]が論理値1である場合に真であると判断する。Y値は、符号ビットが論理値ゼロであり且つビット7及びビット6が両方とも論理値1であり且つビット[5:1]の少なくとも1つが論理値1である場合に真であると判断する。従って、194以上のオーバーシフト状態を検出するためには、X及びYの論理和動作が実現される必要がある。しかし、256以上のオーバーシフト状態を検出するためには、数Xのみが実現される必要がある。このように、256以上を検出するために、より少ないビットが比較されるであろうし、またそれらを比較するための論理はより少ない論理レベルを有し、従ってより少ないタイミングパス遅延を有する。
【0043】
別の例としては、24ビットデータパス並びにこれに伴い24ビット仮数及び2つのガードバンドビットを支持するシステムにおいては、74及び96の範囲内のオーバーシフトスレッショルド値が選択されてよく、数74はGb+3Mw(例えば2+3(24))に由来し、また数96は4Mw(例えば4(24))に由来する。従って、上述の技術を用いる実装においては、96以上であるべきオーバーシフトスレッショルド値を選択することは、オーバーシフト検出タイミングパスにおいて、より少ない論理レベル及びこれに伴い最も少数のゲート遅延をもたらすことができる。
【0044】
逆に、53ビットデータパスが用いられる更に別の例においては、最大オーバーシフトスレッショルド値は最適な選択ではないかもしれない。この例においては、オーバーシフトスレッショルド範囲は161以上且つ212以上であろう。この例においては、オーバーシフト値212は最適な論理レベル実装を提供しない。事実、192は、LSBで始まり且つ1を伴う最初のビットまで左に移動する複数のビット位置内でより多くの連続したゼロを有するので、192以上は、範囲内の他の選択を凌駕してオーバーシフト検出論理の臨界的タイミングパスにおける最も少ないゲート遅延を提供するであろうことが示され得る。
【0045】
このようにして、最小及び最大オーバーシフトスレッショルドの間にあり且つ値のLSBで始まる最多の連続するゼロのビットを有するオーバーシフトスレッショルド値が選択されてよい。より特定的には、最小及び最大オーバーシフトスレッショルド値として161及び212を用いる上述の例においては、212
dは11010100
bに対応する一方で192
dは11000000
bに対応する。
【0046】
尚、上述の実施形態は乗算器加算器の関連で説明されているが、他の実施形態においては、オーバーシフト検出論理は任意の浮動小数点加算器において実装される可能性が検討される。そのような実施形態においては、1つの積及び1つの加数の代わりに2つの加数があるであろうし、また、上述したように、シフト器幅はGb+2(Mw)であろうし、そして最大オーバーシフトスレッショルドは3(Mw)であろう。
【0047】
更に、上述した浮動小数点ユニットは、浮動小数点機能を実行することが可能な任意の種類の処理ユニット内に実装されてよい。
【0048】
上述の実施形態はかなり詳細に説明されてきたが、上述の開示が完全に理解されるならば種々の変形及び修正が当業者に明らかになろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含するものとして解釈されることが意図されている。