JP4858794B2 - 浮動小数点除算器、及びそれを用いた情報処理装置 - Google Patents

浮動小数点除算器、及びそれを用いた情報処理装置 Download PDF

Info

Publication number
JP4858794B2
JP4858794B2 JP2009274930A JP2009274930A JP4858794B2 JP 4858794 B2 JP4858794 B2 JP 4858794B2 JP 2009274930 A JP2009274930 A JP 2009274930A JP 2009274930 A JP2009274930 A JP 2009274930A JP 4858794 B2 JP4858794 B2 JP 4858794B2
Authority
JP
Japan
Prior art keywords
bit
mantissa
subtraction
partial
floating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009274930A
Other languages
English (en)
Other versions
JP2011118633A (ja
Inventor
聡 中里
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2009274930A priority Critical patent/JP4858794B2/ja
Priority to US12/957,907 priority patent/US20110131262A1/en
Publication of JP2011118633A publication Critical patent/JP2011118633A/ja
Application granted granted Critical
Publication of JP4858794B2 publication Critical patent/JP4858794B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/535Dividing only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/535Indexing scheme relating to groups G06F7/535 - G06F7/5375
    • G06F2207/5353Restoring division

Description

本発明は、浮動小数点除算器、及びそれを用いた情報処理装置に関し、2進数浮動小数点数に対する減算シフト型浮動小数点除算器、及びそれを用いた情報処理装置に関する。
浮動小数点除算器、例えば、IEEE−754の2進数浮動小数点数演算規格に準拠した減算シフト型浮動小数点除算器が知られている。ここで、減算シフト型除算とは、一般的に以下の漸化式で表される。
R(j+1)=r×R(j)−q(j)×D ・・・(1)
ここで、jは漸化式の指数、rは基数、Dは除数、q(j)は商の小数点以下j桁目、R(j)は前回(j回目)に算出された部分剰余、R(j+1)は今回算出される部分剰余である。ここで、部分剰余R(j+1)と除数Dの間には、以下の制約が存在する。
0≦R(j+1)<D ・・・(2)
上記(2)式を満たすように商q(j)を定めて、(1)式を実行して部分剰余R(j+1)を求めるのが減算シフト型除算の実行手順である。
例えば、基数rを2とすると、この実行手順における商決定は、以下のように表すことができる。
D≦2×R(j) → q(j)=1
0≦2×R(j)<D → q(j)=0
このことから、(1)式も考慮すると、基数2の減算シフト型除算の実行手順としては、以下のようにまとめることができる。
2×R(j)−D≧0 → q(j)=1、R(j+1)=2×R(j)−D
2×R(j)−D<0 → q(j)=0、R(j+1)=2×R(j)
以上を踏まえて、従来の基数2の2進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の動作について説明する。図1は、従来の基数2の2進数減算シフト型浮動小数点除算器の仮数繰り返し処理部の構成を示すブロック図である。この浮動小数点除算器に入力された2つの浮動小数点オペランド(Y:被除数、Z:除数)は、それぞれレジスタ(FF)で受信される。その後、その2つの浮動小数点オペランドは、それぞれUnpacker640、641と呼ばれるデータ整列器に入力され、仮数部のみが取り出されると共に、符号ビットや隠しビットの補完、単精度浮動小数点と倍精度浮動小数点の小数点位置合わせなどの処理が行われる。一般的にこれらの処理は、仮数前処理と呼ばれる。
被除数YのUnpacker640を通過したデータは、演算実行制御シーケンサ600から出力される選択制御信号605で制御される第1のセレクタ615に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第1のセレクタ615はUnpacker640の出力データ側を選択する。第1のセレクタを通過したデータはレジスタ620に保持される。一方、除数ZのUnpacker641を通過したデータは、そのままレジスタ621に保持される。この除数のレジスタ621は、演算実行中は常に変わらず除数の値を保持し続ける。
被除数Yのレジスタ620と除数Zのレジスタ621のデータは、減算器630において減算処理が行われる。減算器630から出力された桁上げビットはインバータ634を通って第2のセレクタ635へ選択制御信号として入力される。この第2のセレクタ635は、減算器630の出力と被除数のレジスタ620の出力のいずれかを選択出力する。この第2のセレクタ635の出力は、1bit左シフタ610を通って、第1のセレクタ615のもう一方の入力となる。演算実行が開始されて2回目以降の仮数減算シフト処理の時は、第1のセレクタ615は常に1bit左シフタ610の出力を選択し続けることになり、この第1のセレクタ615を通過したデータは部分剰余としてレジスタ620に保持される。以上の構成要素を含む処理部が、仮数繰り返し処理部650である。
レジスタ620に保持される部分剰余は1bit左シフタ610によって“2×R(j)”を保持しており、減算器630において“2×R(j)−D”が求められる。減算器630の桁上げ出力は、“2×R(j)−D”の結果に対する符号ビットに相当し、この値がビット値0の場合は“2×R(j)−D≧0”であることを示しているため、インバータ634で反転した結果を除算結果の商とするとともに、第2のセレクタ635で減算器630の出力である“2×R(j)−D”を次回の部分剰余として選択する。一方、符号ビットがビット値1の場合は“2×R(j)−D<0”であることを示しているため、インバータ634で反転した結果を除算結果の商とするとともに、第2のセレクタ635で部分剰余を保持したレジスタ620の出力である“2×R(j)”を次回の部分剰余として選択する。以上により、この仮数繰り返し処理部650において、前述の基数2の減算シフト型除算の実行手順を実現していることが判る。
減算器630の桁上げ出力をインバータ634で反転した商は、演算実行制御シーケンサ600から出力されるストローブ信号606に従い、1bitずつ商レジスタ680に保持されていく。また、第2のセレクタ635の出力は、演算実行制御シーケンサ600から出力されるストローブ信号に従い、全ての仮数減算シフト処理が終了した時に、最終的な剰余値として剰余レジスタ681に保持される。商レジスタ680と剰余レジスタ681の出力は、丸め処理部660に送出され、丸め処理を実行される。
次に、図1の2進数減算シフト型浮動小数点除算器の仮数繰り返し処理部650の動作をについて説明する。図2は、図1の2進数減算シフト型浮動小数点除算器の仮数繰り返し処理部650の動作を示すフローチャートである。なお、ここに示す演算制御動作は、一般的には図6の演算実行制御シーケンサ600においてハードウェアとして実装され、フローチャートにおける各ステップの動作結果は、仮数繰り返し処理部650に対する制御信号として出力されることになる。
演算実行開始(STEP700)により、まず仮数の減算シフト処理回数の初期値が設定される(STEP710)。この時の初期値は、演算データが単精度浮動小数点データ(32bit)の場合は27回、倍精度浮動小数点データ(64bit)の場合は56回が一般的である。次に、仮数繰り返し処理を実行する(STEP720)。これは、仮数の減算シフト処理により、商1bitと部分剰余を求める処理である。続いて、仮数繰り返し処理(STEP720)の終了後に、仮数の減算シフト処理回数が0になっているかどうかを判定する(STEP730)。ここで、減算シフト処理回数が0になっていれば(STEP730:Yes)、丸め処理を行い(STEP780)、その後、演算実行終了となる(STEP790)。一方、減算シフト処理回数が0になっていなければ(STEP730:No)、仮数繰り返し処理数を−1とし(STEP760)、部分剰余を1bit分左シフト(部分剰余を2倍にする)して(STEP765)、仮数繰り返し処理(STEP720)に戻る。
関連する技術として特許第2835153号公報(米国特許US5105378(A))に、冗長2進数を用いた減算シフト型高基数除算器の基本構成に関する技術が開示されている。この特許第2835153号では、この高基数除算器がニュートンラプソン法のような収束型アルゴリズムに対して有利であることを提示している。この高基数除算器を用いることにより、減算シフト処理回数(演算TATの大部分を占める)は基数と求める演算精度によって一意に決定される。
また、特開昭56−103740号公報に、10進除算装置が開示されている。この10進除算装置は、演算対象データをメモリから読み込み減算シフト型の除算処理を実行中に、剰余がゼロになったかどうかを判定して、剰余がゼロになった場合には商計算を停止して、商の未算出分の桁に対してゼロディジットを発生させて、商計算結果をメモリに書き込む。
また、特開2000−347836号公報(米国特許US6625633(B1))に、高次基数除算器およびその方法が開示されている。この高次基数除算器は、除数Bの倍数B、2B、3Bと剰余Rとを2つの比較器、及び3入力比較器で並行して比較し、1度に商を2ビットずつ求めて基数4の除算を行う。すなわち、引き戻し法による高基数除算器において、例えば基数4の時に、通常は除数Bと剰余Rとの間でR−3B/R−2B/R−Bの3つの減算処理を行い、その符号ビットで商と次の剰余と求めている。
また、特開2003−084969号公報(米国出願US2003050948(A1))に浮動小数点剰余演算器、情報処理装置及びコンピュータプログラムが開示されている。この浮動小数点剰余演算器は、浮動小数点形式の浮動小数点剰余演算において、剰余を求める際に必要な(被除数−整数商×除数)なる浮動小数点積和演算を、浮動小数点剰余演算の特徴を利用して従来の手法に比べて簡単な回路で剰余を求めるように構成する。すなわち、浮動小数点剰余演算器において、2つの浮動小数点数A、Bに対して、浮動小数点除算器で求めた商を整数Cへと丸め、その結果からA−B×Cを実行して、2つの浮動小数点数A、Bの剰余を求める。
また、特開平06−075752号公報(米国特許US5343413(A))に、先行1予測装置及び浮動小数点加減算装置が開示されている。この先行1予測装置は、桁落ち量予測装置で、桁落ち量を1ビットの誤差範囲で予測する。ボロウ伝搬装置で最下位ビット側からのボロウの伝搬を伝える。セレクタでボロウ伝搬装置の情報を使って、桁落ち量予測装置の出力を正規化に必要な正確なビットシフト量に修正し出力する。すなわち、浮動小数点加減算器における、仮数桁落ち/正規化処理での桁落ち量予測(LZA)で、通常1ビットの予測誤差が発生するため、丸め処理においてこの予測誤差に対する補正(仮数の1ビットアライン)が行われるが、この予測誤差を発生しない桁落ち量予測回路に関する。
更に、特開平09−223016号公報(米国特許US5838601(A))に、演算処理方法及び演算処理装置が開示されている。この演算処理方法は、演算処理により得られる演算結果に演算例外が発生する可能性の有無を演算処理の途中で判定し、前記可能性があると判定された場合には命令制御部への演算終了信号の送出を抑制し、前記可能性のある演算処理を専用演算手段とは別の演算手段により実行した後、その演算処理についての演算終了信号を命令制御部へ送出する。
特許第2835153号公報 特開昭56−103740号公報 特開2000−347836号公報 特開2003−084969号公報 特開平06−075752号公報 特開平09−223016号公報
しかしながら、従来の2進数減算シフト型浮動小数点除算器においては、次のような課題がある。
第1の課題は、除算結果を得るために、非常に長い演算TAT(Turn Around Time)が必要であるということである。その第1の理由は以下のとおりである。浮動小数点除算器の場合、倍精度の演算結果が必要な場合には丸め処理も含めて56bitの商が必要になる。しかし、図1に示したような基数2の減算シフト型浮動小数点除算器では、減算シフト1回に付き1bitの商しか求めることができない。そのため、56bitの商を得るためには56回の減算シフト処理を繰り返す必要がある。また、その第2の理由は以下とおりである。この減算シフト処理には、56bitの部分剰余から56bitの除数を減算して、その結果の符合から減算結果と何も処理をしていない部分剰余のいずれかを、次回の減算シフト処理のための部分剰余として選択する処理が含まれている。そのため、この処理が動作周波数を決定するためのクリティカルパスになっている。
一方、このようなクリティカルパスの遅延時間を短縮して、減算シフト処理を1クロックサイクルに複数実行することで演算TATを改善する手法として、冗長2進数(SD数:Signed Degit)を使用する方法がある。図3A及び図3Bは、このような2進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の構成を示すブロック図である。この浮動小数点除算器に入力された2つの浮動小数点オペランド(Y:被除数、Z:除数)は、それぞれレジスタ(FF)で受信される。その後、その2つの浮動小数点オペランドは、それぞれUnpacker840、841と呼ばれるデータ整列器に入力される。被除数YのUnpacker840を通過したデータは、演算実行制御シーケンサ800から出力される選択制御信号805で制御される第1のセレクタ816に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第1のセレクタ816はUnpacker840出力データ側を選択する。第1のセレクタ816を通過したデータはレジスタ821に冗長2進数のSUMデジットとして保持される。一方、除数ZのUnpacker841を通過したデータは、そのままレジスタ822に保持される。この除数Zのレジスタ822は、演算実行中は常に変わらず除数Zの値を保持し続ける。これとは別に、演算実行制御シーケンサ800から出力される選択制御信号805により、演算実行が開始されて最初の仮数減算シフト処理の時のみ、全ビット値が1のデータを入力として選択する第2のセレクタ815がある。第2のセレクタ815を通過したデータはレジスタ820に冗長2進数のSIGNデジットとして保持される。
被除数YのSIGNデジットレジスタ820とSUMデジットレジスタ821のデータは、それぞれ1bit左シフタ810、811を通って2倍数とされた後、除数Zのレジスタ822のデータに対して、2つの冗長2進数加算器830、831において“2×R(j)+D”と“2×R(j)−D”が算出される。一方、1bit左シフタ810、811を通って2倍数となった被除数YのSIGNデジットとSUMデジットの上位3bit(基数が2の場合であり、基数が4以上の場合は更に多くのビット数が必要)は冗長2進数→通常2進数変換器833により通常2進数になった後、商決定論理器834により商1bitの冗長2進数表現でのSIGNビットとSUMビットが出力される。また、この商決定論理器834で生成される商は+1、0、−1の3値を取り得ることから、次回の減算シフト処理に対する部分剰余のSIGNデジットとSUMデジットのセレクタ835、836は、“2×R(j)+D”、“2×R(j)”、“2×R(j)−D”の3つからそれぞれ選択される。以上の構成要素を含む処理部が、第1の仮数繰り返し処理部850である。
同様にして、第1の仮数繰り返し処理部850からの部分剰余のSIGNデジットとSUMデジットを入力として、それらがそれぞれ1bit左シフタ870、871を通って2つの冗長2進数加算器890、891に入力される。それと共に、部分剰余のSIGNデジットとSUMデジットの上位3bitは冗長2進数→通常2進数変換器893で通常2進数に変換された後、商決定論理器894により商1bitの冗長2進数表現でのSIGNビットとSUMビットが出力されて、次回の減算シフト処理に対する部分剰余のSIGNデジットとSUMデジットがセレクタ895、896により選択される。以上の構成要素を含む処理部が、第2の仮数繰り返し処理部851がある。
ここで、第1の仮数繰り返し処理部850と第2の仮数繰り返し処理部851とから出力された、それぞれ各1bitの商の冗長2進数表現でのSIGNビットとSUMビットは、演算実行制御シーケンサ800から出力されるストローブ信号806に従い、2bitずつ商のSIGNデジットレジスタ880とSUMデジットレジスタ881に保持されていく。第2の仮数繰り返し処理部851の部分剰余のSIGNデジットセレクタ895とSUMデジットセレクタ896から出力される部分剰余のSIGNデジットとSUMデジットは、演算実行制御シーケンサ800から出力されるストローブ信号に従い、全ての仮数減算シフト処理が終了した時に、最終的な剰余値として剰余のSIGNデジットレジスタ882とSUMデジットレジスタ883に保持される。商SIGNデジットレジスタ880/商SUMデジットレジスタ881と剰余SIGNデジットレジスタ882/剰余SUMデジットレジスタ883の出力は、丸め処理部860に送出され、冗長2進数から通常2進数に変換された後、丸め処理を実行される。
冗長2進数の仮数繰り返し処理部では、冗長2進数加算器での桁上げ伝播が隣接ビットへの1桁しか伝播しないため、通常2進数による仮数繰り返し処理でのクリティカルパスに対して、減算シフト処理に関する論理段数を大幅に削減できる。このため、図3A及び図3Bに示したように、第1の仮数繰り返し処理部850と、第2の仮数繰り返し処理部851を1クロックサイクルにカスケード接続で実装することが可能になり、これにより1クロックサイクルで2回の減算シフト処理を行って、2bitの商を得ることができる。
また、図3A及び図3Bでは基数2の場合を例示しているが、基数を4にすると1回の減算シフト処理で2bitの商が、基数を8にすると1回の減算シフト処理で3bitの商が得られる。また、基数2の減算シフト処理を1クロックサイクルに2回実行するように実装しているが、1クロックサイクルに3回、4回と実装数を増やすことでも、1クロックサイクルで得られる商のビット数を増やすことができる。当然のことながら、基数4の減算シフト処理を1クロックサイクルに2回実行するような、組み合わせての実装も可能である。
しかしながら、このような冗長2進数を用いた減算シフト型浮動小数点除算器においては、次のような課題がある。すなわち、従来の2進数減算シフト型浮動小数点除算器における第2の課題は、設計難度が非常に高くなるということである。その理由は以下のとおりである。演算TAT短縮のために演算の高基数化を行ったり1クロックサイクルに対して減算シフト処理のカスケード実装を行うことは、冗長2進数で減算シフト処理1回当たりのクリティカルパス遅延は短縮しているとしても、遅延増加やハードウェア量増大の影響が大きく、動作周波数向上のためにはカスタム設計を行ったり、Domino回路設計を行ったりする必要が生じるなど、設計難度が非常に高くなるということである。
本発明の目的は、大幅なHW(HardWare)量増加やクリティカルパス遅延の増大、設計の高難度化を避けながら、演算TATを短縮して、性能向上と消費電力低減効果を実現できる浮動小数点除算器、及びそれを用いた情報処理装置を提供することにある。
本発明の浮動小数点除算器は、2進数の減算シフト型である。この浮動小数点除算器は、仮数繰り返し処理部と、演算実行制御部とを具備する。仮数繰り返し処理部は、入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成する。演算実行制御部は、前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定する。前記仮数繰り返し処理部は、前記演算実行制御部の判定結果に基づいて、前記減算シフト処理の1回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ2倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減する。
本発明の情報処理装置は、上記の段落に記載の浮動小数点除算器を具備する。
本発明の浮動小数点除算方法は、2進数の減算シフト型浮動小数点除算方法である。入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成するステップと、前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定するステップと前記ビット値の判定結果に基づいて、前記減算シフト処理の1回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ2倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減するステップとを具備する。
本発明により、大幅なHW量増加やクリティカルパス遅延の増大、設計の高難度化を避けながら、演算TATを短縮して、性能向上と消費電力低減効果を実現できる。
図1は、従来の基数2の2進数減算シフト型浮動小数点除算器の仮数繰り返し処理部の構成を示すブロック図である。 図2は、図1の2進数減算シフト型浮動小数点除算器の仮数繰り返し処理部650の動作を示すフローチャートである。 図3Aは、このような2進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の構成を示すブロック図である。 図3Bは、このような2進数減算シフト型浮動小数点除算器における仮数繰り返し処理部の構成を示すブロック図である。 図4は、一般的な2進数減算シフト型浮動小数点除算器の全体構成を示すブロック図である。 図5は、本発明の第1の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。 図6は、本発明の第1の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。 図7Aは、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。 図7Bは、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。 図8Aは、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。 図8Bは、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。
以下、本発明の浮動小数点除算器、及びそれを用いた情報処理装置の実施の形態に関して、添付図面を参照して説明する。
(第1の実施の形態)
本発明の第1の実施の形態に係る浮動小数点除算器、及びそれを用いた情報処理装置ついて、添付図面を参照して説明する。
図4は、一般的な2進数減算シフト型浮動小数点除算器の全体構成を示すブロック図である。この2進数減算シフト型浮動小数点除算器において、入力された2つの浮動小数点入力オペランドは、それぞれレジスタ(FF)で受信される。その後、その2つの浮動小数点入力オペランドは、それぞれその全bitもしくは一部のbitが非通常数検出部110、符号処理部120、指数処理部130、仮数前処理部140に入力される。符号処理部120、指数処理部130、仮数前処理部140には、それぞれの浮動小数点入力オペランドが、そのbit位置に応じて定まっている符号、指数、仮数に分割されて入力される。仮数前処理部140に入力された仮数は、必要な前処理を行った後に、減算シフト処理を行う仮数繰り返し処理部150に入力され、求める演算精度によって決まる回数だけ繰り返し処理を行った後に、仮数後処理/丸め処理部160に入力される。仮数後処理/丸め処理部160には、非通常数検出部110、符号処理部120、指数処理部130の結果も入力され、最終的な浮動小数点除算結果を出力する。また、仮数後処理/丸め処理部160からは、仮数丸め処理における指数桁上げ情報も出力され、非通常数検出部110、符号処理部120、指数処理部130からの出力と共に、例外処理部170にて演算例外の検出処理が行われる。また、これら浮動小数点除算処理を実行するために各処理部の動作を制御するための演算実行制御シーケンサ100があり、各処理部に対して実行シーケンスに応じて必要な制御信号を送出する。
非通常数検出部110は、2つの浮動小数点入力オペランドについて、それぞれ非数や無限大数、ゼロ数など、通常の浮動小数点数として表現可能な数値以外であるかどうかを検出する。2つの浮動小数点入力オペランドのいずれか一方でもこのような非通常数であった場合には、除算結果は必ず非通常数になる。そのため、非通常数検出部110は、出力とすべき非通常数を決定するための組み合わせ論理回路を含み、その結果を仮数後処理/丸め処理部160に通知して、演算結果出力値を非通常数の形式に差し替える処理を行う。
符号処理部120は、2つの浮動小数点入力オペランドについて、それぞれの符号を参照して、演算結果の符合ビットを生成する。一般的にこの処理は排他的論理和で実現される。指数処理部130では、2つの浮動小数点入力オペランドについて、それぞれの指数を参照して、演算結果の指数を生成する。一般的にこの処理には減算器が使用されるが、指数値の正負を表現するためにバイアス値による表現を用いる場合には、このバイアス値を考慮した3入力の加減算器が用いられる。仮数前処理部140と仮数繰り返し処理部150については、2つの浮動小数点入力オペランドについて、それぞれの仮数を参照して、減算シフト動作により演算結果の商と剰余を生成する。詳細は図5と共に後述される。
仮数後処理/丸め処理部160では、仮数繰り返し処理部150からの商と剰余を入力として、商を有効ビット数まで丸めて演算結果の仮数生成処理を行う。また、この時、仮数繰り上がりによる指数のインクリメント処理が必要になる場合があり、符号処理部120や指数処理部130からの符号や指数も入力して、演算結果として出力するデータ形式に整形を行う。なお、仮数繰り上がりによる指数のインクリメント処理のため、指数処理部130で最初からインクリメント処理の有無による2通りの指数を生成しておいて、仮数繰り上がり結果によってどちらか一方の指数を選択するような先見論理が比較的よく利用される。
例外処理部170では、非通常数検出部110、符号処理部120、指数処理部130の各出力や、仮数後処理/丸め処理部160からの丸め処理結果や仮数繰り上がり信号を入力として、演算例外の検出を行う。一般的に、検出される演算例外としては浮動小数点オーバーフロー例外、浮動小数点アンダーフロー例外、ゼロ除算例外、不正確演算例外、無効演算例外の5種類である。
図5は、本発明の第1の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。本実施の形態における浮動小数点除算器は、基本的に図4に示される2進数減算シフト型浮動小数点除算器と同じであるが、図5に示される仮数繰り返し処理部とその周辺の構成において、図4の場合と異なっている。以下、図5を参照して、本実施の形態における浮動小数点除算器の構成を説明する。
浮動小数点除算器に入力された2つの浮動小数オペランド(Y:被除数、Z:除数)は、それぞれレジスタ(FF)で受信される。その後、その2つの浮動小数点オペランドは、それぞれUnpacker240、241と呼ばれるデータ整列器に入力され、仮数部のみが取り出されると共に、符号ビットや隠しビットの補完、単精度浮動小数点と倍精度浮動小数点の小数点位置合わせなどの処理が行われる。一般的にこれらの処理は、仮数前処理と呼ばれる。すなわち、本実施の形態における浮動小数点除算器では、このUnpacker240、241は、図4における仮数前処理部140と置き換えられている、又は、その機能を追加されている。
被除数のUnpacker240を通過したデータは、演算実行制御シーケンサ200から出力される選択制御信号205で制御される第1のセレクタ215に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第1のセレクタ215はUnpacker240の出力データ側を選択する。ただし、本実施の形態における浮動小数点除算器では、この演算実行制御シーケンサ200は、図4における演算実行制御シーケンサ100と置き換えられている、又は、その機能を追加されている。第1のセレクタ215を通過したデータはレジスタ220に保持される。一方、除数のUnpacker241を通過したデータは、そのままレジスタ221に保持される。この除数のレジスタ221は、演算実行中は常に変わらず除数の値を保持し続ける。
被除数のレジスタ220と除数のレジスタ221のデータに対して、減算器230において減算処理が行われる。減算器230から出力された桁上げビットはインバータ234を通って第2のセレクタ235に選択制御信号として入力される。この第2のセレクタ235は、減算器230の出力と被除数レジスタ220の出力のいずれかを次回の部分剰余として選択出力する。この第2のセレクタ235の出力は、1bit左シフタ210を通って第1のセレクタ215の別の入力になると同時に、2bit左シフタ211を通って、第1のセレクタ215の更に別の入力になる。また、この第2のセレクタ235の出力としての部分剰余の特定bitの情報236は演算実行制御シーケンサ200に出力される。演算実行制御シーケンサ200は、この特定bit情報236に基づいて、部分剰余の2bit左シフタ211の結果を次回の減算シフト処理の部分剰余とするかどうかの選択制御信号205を生成する。演算実行が開始されて2回目以降の仮数減算シフト処理の時は、第1のセレクタ215は、演算実行制御シーケンサ200からの選択制御信号205によって、1bit左シフタ210の出力、もしくは2bit左シフタ211の出力のいずれかを選択し続けることになる。この第1のセレクタ215を通過したデータは部分剰余としてレジスタ220に保持される。以上の構成要素を含む処理部が、仮数繰り返し処理部250である。すなわち、本実施の形態における浮動小数点除算器では、この仮数繰り返し処理部250は、図4における仮数繰り返し処理部150と置き換えられている、又は、その機能を追加されている。
レジスタ220に保持される部分剰余は1bit左シフタ210によって“2×R(j)”を保持しており、減算器230において“2×R(j)−D”が求められる。減算器230の桁上げ出力は、“2×R(j)−D”の結果に対する符号ビットに相当し、この値がビット値0の場合は“2×R(j)−D≧0”であることを示している。そのため、インバータ234で反転した結果を除算結果の商とするとともに、第2のセレクタ235で減算器230の出力である“2×R(j)−D”を次回の部分剰余として選択する。一方、符号ビットがビット値1の場合は“2×R(j)−D<0”であることを示している。そのため、インバータ234で反転した結果を除算結果の商とするとともに、第2のセレクタ235で部分剰余を保持したレジスタ220の出力である“2×R(j)”を次回の部分剰余として選択する。以上により、この仮数繰り返し処理部250において、前述の基数2の減算シフト型除算の実行手順を実現している。
減算器230の桁上げ出力をインバータ234で反転した商は、演算実行制御シーケンサ200から出力されるストローブ信号206に従い、1bitずつ商レジスタ280に保持されていく。なお、この商レジスタ280は、演算実行制御シーケンサ200からの制御により、演算実行開始時に全ビットの値がビット値0にリセットされる。また、第2のセレクタ235の出力は、演算実行制御シーケンサ200から出力されるストローブ信号に従い、全ての仮数減算シフト処理が終了した時に、最終的な剰余値として剰余レジスタ281に保持される。商レジスタ280と剰余レジスタ281の出力は、丸め処理部260に送出され、丸め処理を実行される。すなわち、本実施の形態における浮動小数点除算器では、この丸め処理部260は、図4における丸め処理部160と置き換えられている、又は、その機能を追加されている。
次に、本発明の第1の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成(図2)の動作について説明する。図6は、本発明の第1の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。なお、ここに示す演算制御動作は、一例としては、図5の演算実行制御シーケンサ200においてハードウェアとして実装され、フローチャートにおける各ステップの動作結果は、仮数繰り返し処理部250や仮数後処理/丸め処理部260に対する制御信号として出力されることになる。
演算実行開始(STEP300)により、まず仮数の減算シフト処理回数の初期値が設定される(STEP310)。この時の初期値は、演算データが単精度浮動小数点データ(32bit)の場合は27回、倍精度浮動小数点データ(64bit)の場合は56回が一般的である。次に、仮数繰り返し処理を実行する(STEP320)。これは仮数の減算シフト処理により、商1bitと部分剰余を求める処理である。続いて、仮数繰り返し処理(STEP320)の終了後に、仮数の減算シフト処理回数が0になっているかどうかを判定する(STEP330)。ここで、減算シフト処理回数が0になっていれば(STEP330:Yes)、丸め処理を行い(STEP380)、その後、演算実行終了となる(STEP390)。
一方、減算シフト処理回数が0になっていなければ(STEP330:No)、仮数繰り返し処理(STEP320)で求められた部分剰余のMSB(Most Significant Bit:)から2bit目(MSBをbit0とする場合はbit1)のビット値が0かどうかを判定する(STEP340)。具体的には、部分剰余のMSBから2bit目のビット値を示す特定bit情報236を受信して、当該特定bit情報236のビット値が0かどうかを判定する。ビット値が0でなかった場合(STEP340:No)、通常の減算シフト型除算器の動作と同様、仮数繰り返し処理数を−1とし(STEP360)、部分剰余を1bit分左シフト(部分剰余を2倍にする:選択制御信号205)して(STEP365)、仮数繰り返し処理(STEP320)に戻る。
一方、ビット値が0であった場合(STEP340:Yes)、次回の減算シフト処理における商1bitの値が必ずビット値0になることが事前に判明するため、仮数繰り返し処理数を−2とし(STEP350)、部分剰余を2bit分左シフト(部分剰余を4倍にする:選択制御信号205)して(STEP355)、仮数繰り返し処理(STEP320)に戻る。この場合、次の演算結果を商レジスタ280に格納するときは、次のストローブ信号206により、商レジスタ280を2bitずらして保持する。
こうすることによって、次回の仮数減算シフト処理を1回省略することが可能になる。このような状況は、倍精度浮動小数点データにおいては56回繰り返し実行される減算シフト処理中において1回だけに限らず、その時の部分剰余の値に応じて複数回発生する可能性があり、その分だけ演算実行TATを短縮することが可能になる。この時、本来実行するはずであった減算シフト処理回数に比較して、より少ない減算シフト処理回数で同じ演算結果を得ることができるため、演算結果を得るために必要な消費電力は当然ながら削減されることになる。
また、図5とその説明において明らかなように、従来の構成に対して追加された要素は、部分剰余の特定bitの情報236を演算実行制御シーケンサ200に送り、その結果により部分剰余の2bit左シフト211の結果を次回の減算シフト処理の部分剰余とするかどうかの選択制御信号205を生成する論理だけである。これは、図6のフローチャートでは、部分剰余のMSBから2bit目(MSBをbit0とする場合はbit1)のビット値が0かどうかを判定するSTEP340と、ビット値が0であった場合に仮数繰り返し処理数を−2とするSTEP350と、部分剰余を2bit分左シフト(部分剰余を4倍にする)するSTEP355とに相当する。この追加要素や追加処理フローは、ハードウェア量の増大やクリティカルパスの遅延時間に対する増加としての影響としてはあまり大きくはないため、設計難度もそれほど高くなることはない。
以上説明したように、本実施の形態においては、以下に記載するような効果を奏する。
第1の効果は、2進数の減算シフト型浮動小数点除算器において、本来、減算シフト処理回数は基数と求める演算精度で一意に決定されるのに対して、本願発明では、演算入力オペランドの値に依存することにはなるが、減算シフト処理回数を削減することができ、その結果、除算の演算TAT短縮により演算性能向上ができることである。
第2の効果は、除算結果を求めることに対して、無駄な減算シフト処理を行わないようにしているので、1回の演算実行における消費電力を削減できることである。第3の効果は、追加されるHW量が小さく、クリティカルパス遅延への影響も小さく抑えているので、高い演算実行性能を得るために、Domino回路を使用したり、カスタム設計手法を採用することなく、従来通り設計自動化ツールを使用した回路/レイアウト設計の省力化ができることである。
(第2の実施の形態)
本発明の第2の実施の形態に係る浮動小数点除算器、及びそれを用いた情報処理装置ついて、添付図面を参照して説明する。
図7A及び図7Bは、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成を示すブロック図である。本実施の形態では、その基本的構成は第1の実施の形態と同様であるが、図5の構成が図7A及び図7Bの構成に変更されている点、すなわち、基数を4にすると共に、減算シフト回数の削減についてさらに判定論理を追加している点で、第1の実施の形態と異なる。以下、具体的に説明する。
浮動小数点除算器に入力された2つの浮動小数点オペランド(Y:被除数、Z:除数)は、それぞれレジスタ(FF)で受信される。その後、その2つの浮動小数点オペランドは、それぞれUnpacker440、441に入力される。ここでの処理は、図5でのUnpacker240、241と同様である。
被除数のUnpacker440を通過したデータは、演算実行制御シーケンサ400から出力される選択制御信号405で制御される第1のセレクタ415に入力される。演算実行が開始されて最初の仮数減算シフト処理の時のみ、この第1のセレクタ415はUnpacker440出力データ側を選択する。第1のセレクタを通過したデータはレジスタ420に保持される。一方、除数のUnpacker441を通過したデータは、そのまま除数レジスタ421に保持されると同時に、倍精度演算用に除数の3倍数を生成する加算器442と単精度演算用に除数の3倍数を生成する加算器443に入力される。そして、実行演算が倍精度か単精度かによって3倍数生成加算器442、443のいずれかの出力を選択するセレクタ445を通って、除数3倍数レジスタ422にも保持される。この除数レジスタ421と除数3倍数レジスタ422は、演算実行中は常に変わらず除数とその3倍数の値を保持し続ける。
被除数のレジスタ420、除数レジスタ421、除数3倍数レジスタ422のデータは、3つの減算器430、431、432において減算処理が行われる。3つの減算器430、431、432から出力された桁上げビットは商決定論理器434を通って、第2のセレクタ435の選択制御信号として入力される。この第2のセレクタ435は、3つの減算器430、431、432の出力と被除数レジスタ420の出力のいずれかを次回の部分剰余として選択出力する。この第2のセレクタ435の出力は、2bit左シフタ410を通って第1のセレクタ415の別の入力になると同時に、4bit左シフタ411を通って第1のセレクタ415の更に別の入力になる。また、この第2のセレクタ435の出力としての部分剰余のMSBから2ビット目から4ビット目までの計3bitが全てビット値0であるかどうかの検出論理の出力信号436は演算実行制御シーケンサ400に出力される。演算実行制御シーケンサ400は次回の減算シフト処理における部分剰余を2bit左シフタ410の出力とするか、4bit左シフタ411の出力とするかを決定する選択制御信号405を生成する。演算実行が開始されて2回目以降の仮数減算シフト処理の時は、第1のセレクタ415は、演算実行制御シーケンサ400からの選択制御信号405によって、2bit左シフタ410の出力、もしくは4bit左シフタ411の出力のいずれかを選択し続けることになる。この第1のセレクタ415を通過したデータは部分剰余としてレジスタ420に保持される。
レジスタ420に保持される部分剰余は2bit左シフタ410によって“4×R(j)”を保持しており、第1の減算器430において“4×R(j)−D”が求められる。第1の減算器430の桁上げ出力は、“4×R(j)−D”の結果に対する符号ビットに相当し、この値がビット値0の場合は“4×R(j)−D≧0”であることを示している。同様に、第2の減算器431においては“4×R(j)−2×D”が求められ、この桁上げ出力のビット値0の場合は“4×R(j)−2×D≧0”であることを示している。第3の減算器432においては“4×R(j)−3×D”が求められ、この桁上げ出力のビット値0の場合は“4×R(j)−3×D≧0”であることを示している。従って、商決定論理器434では、これら3つの減算器430、431、432の桁上げ信号から、商2bitの値として0、1、2、3のいずれかを決定できる。すなわち、全ての桁上げ信号がビット値1であれば商は0、第1の減算器430の桁上げ信号のみがビット値0でそれ以外が全てビット値1であれば商は1、第1の減算器430と第2の減算器431の桁上げ信号のみがビット値0で第3の減算器432の桁上げ信号がビット値1であれば商は2、3つの減算器430、431、432の桁上げ信号が全てビット値0であれば商は3、となって基数4における減算シフト処理における2bitの商を求めることができる。また、この商の値に応じて、第2のセレクタ435において、今回の部分剰余を保持しているレジスタ420の出力である“4×R(j)”と、第1の減算器430の出力である“4×R(j)−D”と、第2の減算器431の出力である“4×R(j)−2×D”と、第3の減算器432の出力である“4×R(j)−3×D”とから、次回の減算シフト処理における部分剰余として選択する。
商決定論理器434から出力された商は、演算実行制御シーケンサ400から出力されるストローブ信号406に従い、2bitずつ商レジスタ480に保持されていく。なお、この商レジスタ480は、演算実行制御シーケンサ400からの制御により、演算実行開始時に全ビットの値がビット値0にリセットされる。また、第2のセレクタ435の出力は、演算実行制御シーケンサ400から出力されるストローブ信号に従い、剰余レジスタ481に保持される。ここまでの構成は、基数4の減算シフト型除算器の仮数前処理部(440、441、442、443)、及び仮数繰り返し部450の構成である。
本実施の形態では追加構成要素として、まず第2のセレクタ435から出力される部分剰余のMSBから2ビット目から4ビット目までの計3bitが全てビット値0であるかどうかの検出論理器437がある。本構成の例では3入力の否定論理和(NOR論理)で実現できる。この検出論理の出力信号436は、演算実行制御シーケンサ400に入力され、第1のセレクタ415の選択制御信号として、次回の減算シフト処理における部分剰余を2bit左シフタ410の出力とするか、4bit左シフタ411の出力とするかを決定する。通常は2bit左シフタ410の出力を選択することになる。すなわち、部分剰余のMSBから2ビット目から4ビット目までの計3bitが全てビット値0であった場合、2bit左シフト後の部分剰余のMSBから3bitが全てビット値0となる。この時、除数レジスタ421や除数3倍数レジスタ422に格納されている値を考慮すると、次回の減算シフト処理における3つの減算器430、431、432の桁上げ信号は全てビット値1であることが容易に判断でき、次回の減算シフト処理における商も0(2bit)となる。このようなケースでは、第1のセレクタ415の選択制御信号として4bit左シフタ411の出力を選択して、次回の減算シフト処理を1回省略する。
また、別の追加構成要素として、剰余レジスタ481の全ビットがビット値0になったかどうかの検出論理がある。通常、このような論理は減算シフト処理が全て終了して、最終的な剰余の値が剰余レジスタに格納された後、この剰余レジスタの全ビットに対する論理和を採って、丸め処理部460での仮数丸め処理に対するスティッキービットとして利用される。しかし、本実施の形態では、減算シフト処理を実行中の全てのタイミングでこの検出論理を動作させる。全ビットのビット値が0であるかどうかの検出は否定論理和で実現できるので、スティッキービット生成論理としての論理和器482と、その出力に対するインバータ483とで、剰余レジスタ481の全ビット0検出論理を構成して、その検出信号486を演算実行制御シーケンサ400に入力する。減算シフト処理の実行途中に剰余レジスタの全ビットがビット値0になった場合、その時点で除算として割り切れた状態を表しているため、このケースでは演算実行制御シーケンサ400は、以降の減算シフト処理の実行を全てキャンセルして、仮数後処理/丸め処理へと処理シーケンスを移行することで、演算TATの短縮を実現することができる。また、この構成は図5の構成(第1実施の形態)に追加することも可能である。その場合、動作において後述のSTEP570が追加される。
更に、別の追加構成要素として、浮動小数点除算器に入力された2つの浮動小数点オペランド(Y:被除数、Z:除数)に対して、非通常数かどうかを検出する非通常数検出部490がある。この非通常数検出部490からの、非通常数検出信号496も、演算実行制御シーケンサ400に入力するようにする。どちらか一方のオペランドでも非通常数として検出された場合、除算の演算結果はかならず非通常数となるため、仮数の減算シフト処理はその実行自体が必要ないことになる。そのため、このようなケースでも演算実行制御シーケンサ400は、以降の減算シフト処理の実行を全てキャンセルして、仮数後処理/丸め処理へと処理シーケンスを移行することで、演算TATの短縮を実現することができる。
なお、このように本実施の形態による演算TAT短縮では、演算TATは固定時間ではなく、入力されるオペランドデータの値に依存して変動することになる。そこで、演算実行制御シーケンサ400から、仮数の減算シフト処理が終了して仮数後処理/丸め処理へと処理シーケンスが移行したタイミングで、演算器外の命令発行制御論理(浮動小数点除算器の外部の制御回路等)に対して演算実行終了予告信号407を出力するようにする。演算実行終了予告信号407が出力されると、必ずそれから固定時間経過後に丸め処理が終了して演算結果が確定することが判るため、後続する命令の発行処理を行うことが可能になる。また、図5の構成(第1実施の形態)の場合にも、仮数の減算シフト処理が終了して仮数後処理/丸め処理へと処理シーケンスが移行したタイミングで、演算器外の命令発行制御論理に対して演算実行終了予告信号を出力する動作を追加することも可能である。
次に、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成(図7A及び図7B)の動作について説明する。図8A及び図8Bは、本発明の第2の実施の形態に係る浮動小数点除算器における主に仮数繰り返し処理部とその周辺の構成の動作を示すフローチャートである。なお、ここに示す演算制御動作は、一例としては、図7A及び図7Bの演算実行制御シーケンサ400においてハードウェアとして実装され、フローチャートにおける各ステップの動作結果は、仮数繰り返し処理部450や仮数後処理/丸め処理部460に対する制御信号として出力されることになる。
演算実行開始(STEP500)により、まず除数のUnpacker441を通過したデータについて、倍精度演算用に除数の3倍数を生成し、単精度演算用に除数の3倍数を生成する。そして、実行演算が倍精度か単精度かによってそれら3倍数のいずれかが保持される(STEP505)。次に、仮数の減算シフト処理回数の初期値が設定される(STEP510)。この時の初期値は、演算基数が4なので、演算データが単精度浮動小数点データ(32bit)の場合は14回、倍精度浮動小数点データ(64bit)の場合は28回が一般的である。次に、仮数繰り返し処理(STEP520)を実行する。これは仮数の減算シフト処理により、商2bitと部分剰余を求める処理である。続いて、仮数繰り返し処理(STEP520)の終了後に、仮数の減算シフト処理回数が0になっているかどうかを判定する(STEP530)。ここで、減算シフト処理回数が0になっていれば(STEP530:Yes)、演算実行終了予告信号を出力して(STEP570)、丸め処理を行い(STEP580)、その後、演算実行終了となる(STEP590)。一方、減算シフト処理回数が0になっていなければ(STEP530:No)、まず、部分剰余の全ビットがビット値0になっているかどうかを判断する(STEP535)。ここで、部分剰余の全ビットがビット値0であった場合(STEP535:Yes)、演算実行終了予告信号を出力して(STEP570)、丸め処理を行い(STEP580)、その後、演算実行終了となる(STEP590)。
なお、演算実行開始(STEP500)において、2つの浮動小数点入力オペランドのそれぞれについて非通常数かどうかの検出を行い(STEP515)、どちらか一方の浮動小数点入力オペランドでも非通常数であるかを判断する(STEP525)。非通常数であった場合(STEP525:Yes)、演算実行終了予告信号を出力して(STEP570)、丸め処理を行い(STEP580)、その後、演算実行終了となる(STEP590)。一方、非通常数でなかった場合(STEP525:No)、STEP505へ戻り、演算を実行する。
部分剰余の全ビットがビット値0でなかった場合(STEP535:No)、仮数繰り返し処理(STEP520)で求められた部分剰余のMSBから3bit目/4bit目/5bit目の3bit(MSBをbit0とする場合はbit2〜bit4)のビット値が全て0かどうかを判定する(STEP540)。具体的には、部分剰余のMSBから3bit目/4bit目/5bit目の3bitのビット値を示す出力信号436を受信して、当該出力信号436のビット値が0かどうかを判定する。ビット値が全て0でなかった場合(STEP540:No)、通常の基数4の減算シフト型除算器の動作であり、仮数繰り返し処理数を−1とし(STEP560)、部分剰余を2bit分左シフト(部分剰余を4倍にする:選択制御信号405)して(STEP565)、仮数繰り返し処理(STEP520)に戻る。
一方、ビット値が全て0であった場合(STEP540:Yes)、次回の減算シフト処理における商2bitの値が必ずビット値00になることが事前に判明するため、仮数繰り返し処理数を−2とし(STEP550)、部分剰余を4bit分左シフト(部分剰余を16倍にする:選択制御信号405)して(STEP555)、仮数繰り返し処理(STEP520)に戻る。
こうすることによって、次回の仮数減算シフト処理を1回省略することが可能になる。このような状況は、倍精度浮動小数点データにおいては28回繰り返し実行される減算シフト処理中において1回だけに限らず、その時の部分剰余の値に応じて複数回発生する可能性があり、その分だけ演算実行TATを短縮することが可能になる。この時、本来実行するはずであった減算シフト処理回数に比較して、より少ない減算シフト処理回数で同じ演算結果を得ることができるため、演算結果を得るために必要な消費電力は当然ながら削減されることになる。
このように、本実施の形態では、基数4で実施することで、減算シフト回数の削減による演算TAT短縮に加えて、減算シフト処理中に割り切れた状態を検出して仮数減算シフト処理を中断したり、入力オペランドが非通常数であることを検出して同じく仮数減算シフト処理を中断したりする構成要素を追加して、更に演算TATを短縮するための仕組みを追加している。また、演算実行終了予告信号を演算器外の命令発行制御に通知する機能を追加して、入力されるオペランドデータの値に依存して変動する演算TATに対して、後続命令の発行制御を容易にしている。
なお、本構成においては基数を4としているが、さらに大きな2のべき乗数でも基本的には同様の構成により本願発明を実現することは可能である。また、クリティカルパス遅延時間の増加(動作周波数の低下)や、ハードウェア量の増大を許容できるのであれば、本発明における仮数減算シフト処理部を1クロックサイクル中に複数段カスケード接続して実装することで、より演算TATを短縮する構成とすることも可能である。
本発明係る浮動小数点除算器は、ワークステーションやコンピュータのような各種情報処理装置に適用することができる。例えば、それらに内蔵された半導体集積回路として実現することが可能である。
本発明は上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変形又は変更され得ることは明らかである。また、各実施の形態の技術は、技術的矛盾の発生しない限り他の実施の形態においても同様に適用可能である。
600 演算実行制御シーケンサ
605 選択制御信号
606 ストローブ信号
610 1bit左シフタ
615 第1のセレクタ
620 レジスタ
621 レジスタ
630 減算器
634 インバータ
635 第2のセレクタ
640、641 Unpacker
650 仮数繰り返し処理部
680 商レジスタ
681 剰余レジスタ
660 丸め処理部
800 演算実行制御シーケンサ
805 選択制御信号
806 ストローブ信号
815 第2のセレクタ
816 第1のセレクタ
820 レジスタ
821 レジスタ
822 レジスタ
810、811 1bit左シフタ
830、831 冗長2進数加算器
833 冗長2進数→通常2進数変換器
834 商決定論理器
835、836 セレクタ
840、841 Unpacker
850 第1の仮数繰り返し処理部
860 丸め処理部
870、871 1bit左シフタ
872 インバータ
890、891 冗長2進数加算器
893 冗長2進数→通常2進数変換器
894 商決定論理器
895 SIGNデジットセレクタ
896 SUMデジットセレクタ
851 第2の仮数繰り返し処理部
880 SIGNデジットレジスタ
881 SUMデジットレジスタ
882 SIGNデジットレジスタ
883 SUMデジットレジスタ
100 演算実行制御シーケンサ
110 非通常数検出部
120 符号処理部
130 指数処理部
140 仮数前処理部
150 仮数繰り返し処理部
160 仮数後処理/丸め処理部
170 例外処理部
200 演算実行制御シーケンサ
205 選択制御信号
206 ストローブ信号
210 1bit左シフタ
211 2bit左シフタ
215 第1のセレクタ
220 レジスタ
221 レジスタ
230 減算器
234 インバータ
235 第2のセレクタ
236 特定bit情報
240、241 Unpacker
250 仮数繰り返し処理部
260 丸め処理部
280 商レジスタ
281 剰余レジスタ
400 演算実行制御シーケンサ
405 選択制御信号
406 ストローブ信号
407 演算実行終了予告信号
410 2bit左シフタ
411 4bit左シフタ
415 第1のセレクタ
420 被除数レジスタ
421 除数レジスタ
422 除数3倍数レジスタ
430、431、432 減算器
434 商決定論理器
435 第2のセレクタ
436 出力信号
437 検出論理器
440、441 Unpacker
442 加算器
443 加算器
445 セレクタ
450 仮数繰り返し処理部
460 丸め処理部
480 商レジスタ
481 剰余レジスタ
482 論理和器
483 インバータ
486 検出信号
490 非通常数検出部
496 非通常数検出信号

Claims (10)

  1. 2進数の減算シフト型浮動小数点除算器であって、
    入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成する仮数繰り返し処理部と、
    前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定する演算実行制御部と
    を具備し、
    前記仮数繰り返し処理部は、前記演算実行制御部の判定結果に基づいて、前記減算シフト処理の1回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ2倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減する
    浮動小数点除算器。
  2. 請求項1に記載の浮動小数点除算器において、
    前記演算実行制御部は、前記減算シフト処理が終了して丸め処理に移行したタイミングで、固定時間経過後に演算実行が終了することを予告する信号を、演算器外部に対して通知する
    浮動小数点除算器。
  3. 請求項2に記載の浮動小数点除算器において、
    前記部分剰余に関して、全ビット値が0になったかどうかを判定する判定部を更に具備し、
    前記演算実行制御部は、前記判定部の判定結果に基づいて、前記部分剰余の全ビット値が0になった場合、前記減算シフト処理を中止して丸め処理に移行する
    浮動小数点除算器。
  4. 請求項2に記載の浮動小数点除算器において、
    前記入力オペランドが非数か否かを検出する被数検出部を更に具備し、
    前記演算実行制御部は、前記入力オペランドのどちらか一方でも非数であることが判明した場合、前記減算シフト処理を中止して丸め処理に移行する
    浮動小数点除算器。
  5. 請求項1乃至4のいずれか一項に記載の浮動小数点除算器において、
    前記仮数繰り返し処理部は、
    前記部分余剰を1ビット左シフトして出力する1ビット左シフタと、
    前記部分余剰を2ビット左シフトして出力する2ビット左シフタと、
    選択信号に基づいて、前記被除数の仮数、前記1ビット左シフタの出力した前記部分余剰、及び前記2ビット左シフタの出力した前記部分余剰のいずれかを第1の部分剰余として選択する第1のセレクタと、
    前記第1の部分余剰と前記入力オペランドの除数とに基づいて減算処理を実行して、桁上げビットと減算結果とを出力する減算器と、
    前記桁上げビットに基づいて、前記第1の部分余剰及び前記減算結果のいずれか一方を、新たに前記部分余剰として、前記1ビット左シフタと、前記2ビット左シフタと、前記演算実行制御部に出力する第2のセレクタと
    を備え、
    前記仮数繰り返し処理部は、前記部分余剰に基づいて、演算実行処理で規定する基数の値により一意に決定される前記特定ビット位置のビット値を前記演算実行制御部に送出し、
    前記演算実行制御部は、前記前記特定ビット位置のビット値に基づいて、前記選択信号を生成し、前記第1のセレクタへ出力する
    浮動小数点除算器。
  6. 請求項1乃至4のいずれか一項に記載の浮動小数点除算器において、
    前記仮数繰り返し処理部は、
    前記部分余剰を2ビット左シフトして出力する2ビット左シフタと、
    前記部分余剰を4ビット左シフトして出力する4ビット左シフタと、
    選択信号に基づいて、前記被除数の仮数、前記2ビット左シフタの出力した前記部分余剰、及び前記4ビット左シフタの出力した前記部分余剰のいずれかを第1の部分剰余として選択する第1のセレクタと、
    前記第1の部分余剰と前記入力オペランドの除数とに基づいて減算処理を実行して、第1の桁上げビットと第1の減算結果とを出力する第1の減算器と、
    前記第1の部分余剰と前記入力オペランドの除数の2倍の値とに基づいて減算処理を実行して、第2の桁上げビットと第2の減算結果とを出力する第2の減算器と、
    前記第1の部分余剰と前記入力オペランドの除数の3倍の値とに基づいて減算処理を実行して、第3の桁上げビットと第3の減算結果とを出力する第3の減算器と、
    前記第1の桁上げビットと第2の桁上げビットと第3の桁上げビットとに基づいて、前記第1の部分余剰、前記第1の減算結果、第2の減算結果、及び第3の演算結果のいずれか一つを、新たに前記部分余剰として、前記2ビット左シフタと、前記4ビット左シフタと、前記演算実行制御部に出力する第2のセレクタと、
    を備え、
    前記仮数繰り返し処理部は、前記部分余剰に基づいて、演算実行処理で規定する基数の値により一意に決定される前記特定ビット位置のビット値を前記演算実行制御部に送出し、
    前記演算実行制御部は、前記前記特定ビット位置のビット値に基づいて、前記選択信号を生成し、前記第1のセレクタへ出力する
    浮動小数点除算器。
  7. 請求項1乃至6のいずれか一項に記載の浮動小数点除算器を具備する
    情報処理装置。
  8. 2進数の減算シフト型浮動小数点除算方法であって、
    入力オペランドにおける被除数の仮数の減算シフト処理により商と部分剰余とを生成するステップと、
    前記部分剰余に関して、演算実行処理における基数によって一意に決定される特定の位置のビット値を判定するステップと
    前記ビット値の判定結果に基づいて、前記減算シフト処理の1回につき生成される商のビット数と部分剰余の左シフトビット数に対して、それぞれ2倍の商生成及び前記部分剰余の左シフト処理を行うことで、減算シフト処理回数を削減するステップと
    を具備する
    浮動小数点除算方法。
  9. 請求項8に記載の浮動小数点除算方法において、
    前記減算シフト処理が終了して丸め処理に移行したタイミングで、固定時間経過後に演算実行が終了することを予告する信号を、演算器外部に対して通知するステップを更に具備する
    浮動小数点除算方法。
  10. 請求項9に記載の浮動小数点除算方法において、
    前記部分剰余に関して、全ビット値が0か否かを判定するステップと、
    前記0か否かの判定結果に基づいて、前記部分剰余の全ビット値が0になった場合、前記減算シフト処理を中止して丸め処理に移行するステップと
    を更に具備する
    浮動小数点除算方法。
JP2009274930A 2009-12-02 2009-12-02 浮動小数点除算器、及びそれを用いた情報処理装置 Expired - Fee Related JP4858794B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009274930A JP4858794B2 (ja) 2009-12-02 2009-12-02 浮動小数点除算器、及びそれを用いた情報処理装置
US12/957,907 US20110131262A1 (en) 2009-12-02 2010-12-01 Floating point divider and information processing apparatus using the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009274930A JP4858794B2 (ja) 2009-12-02 2009-12-02 浮動小数点除算器、及びそれを用いた情報処理装置

Publications (2)

Publication Number Publication Date
JP2011118633A JP2011118633A (ja) 2011-06-16
JP4858794B2 true JP4858794B2 (ja) 2012-01-18

Family

ID=44069648

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009274930A Expired - Fee Related JP4858794B2 (ja) 2009-12-02 2009-12-02 浮動小数点除算器、及びそれを用いた情報処理装置

Country Status (2)

Country Link
US (1) US20110131262A1 (ja)
JP (1) JP4858794B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120059866A1 (en) * 2010-09-03 2012-03-08 Advanced Micro Devices, Inc. Method and apparatus for performing floating-point division
US20130124594A1 (en) * 2011-11-15 2013-05-16 Lsi Corporation Divider circuitry with quotient prediction based on estimated partial remainder
KR20200135059A (ko) 2019-05-24 2020-12-02 삼성전자주식회사 데이터를 처리하는 방법 및 장치
JP2022121055A (ja) 2021-02-08 2022-08-19 キオクシア株式会社 演算装置及び演算回路
CN115033205B (zh) * 2022-08-11 2022-10-28 深圳市爱普特微电子有限公司 一种低延迟高精度定值除法器

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5617435A (en) * 1979-07-23 1981-02-19 Fujitsu Ltd Dividing circuit device
US4381550A (en) * 1980-10-29 1983-04-26 Sperry Corporation High speed dividing circuit
DE68927398T2 (de) * 1988-08-29 1997-05-28 Nec Corp Digitale Divisionsschaltung mit einem N/2-Bit-Subtrahierer für N-Subtraktionen
JPH0264730A (ja) * 1988-08-31 1990-03-05 Nec Corp 演算装置
JPH02252023A (ja) * 1989-03-24 1990-10-09 Mitsubishi Electric Corp 引き去り法または引き戻し法アルゴリズムで除算を行う除算器
JP2835153B2 (ja) * 1990-06-25 1998-12-14 株式会社東芝 高基数除算器
JPH0731592B2 (ja) * 1990-11-29 1995-04-10 株式会社東芝 除算回路
JPH05224889A (ja) * 1992-02-12 1993-09-03 Nec Corp 乗算装置
US5301139A (en) * 1992-08-31 1994-04-05 Intel Corporation Shifter circuit for multiple precision division
JPH06103033A (ja) * 1992-09-18 1994-04-15 Fujitsu Ltd 複数固定倍率器
US5696712A (en) * 1995-07-05 1997-12-09 Sun Microsystems, Inc. Three overlapped stages of radix-2 square root/division with speculative execution
US5946223A (en) * 1995-12-08 1999-08-31 Matsushita Electric Industrial Co. Ltd. Subtraction/shift-type dividing device producing a 2-bit partial quotient in each cycle
US5805489A (en) * 1996-05-07 1998-09-08 Lucent Technologies Inc. Digital microprocessor device having variable-delay division hardware
JP2001034472A (ja) * 1999-07-16 2001-02-09 Mitsubishi Electric Corp データ処理装置および除算、剰余算アルゴリズム
US7660842B2 (en) * 2003-05-12 2010-02-09 Sun Microsystems, Inc. Method and apparatus for performing a carry-save division operation
KR100853787B1 (ko) * 2004-12-31 2008-08-25 동부일렉트로닉스 주식회사 가변 진법 나눗셈 연산기
US8713084B2 (en) * 2008-02-25 2014-04-29 International Business Machines Corporation Method, system and computer program product for verifying floating point divide operation results

Also Published As

Publication number Publication date
US20110131262A1 (en) 2011-06-02
JP2011118633A (ja) 2011-06-16

Similar Documents

Publication Publication Date Title
US8965945B2 (en) Apparatus and method for performing floating point addition
JP3689183B2 (ja) 正確な浮動小数点除算/平方根演算を実現する正確、かつ効果的なスティッキー・ビット計算
US6904446B2 (en) Floating point multiplier/accumulator with reduced latency and method thereof
KR100242274B1 (ko) 제산 및 제곱근 계산 기능을 갖고 있는 부동 소숫점/정수 프로세서
US8489663B2 (en) Decimal floating-point adder with leading zero anticipation
JP4500358B2 (ja) 演算処理装置および演算処理方法
KR20080055985A (ko) 선택가능 준정밀도를 가진 부동―소수점 프로세서
US8166092B2 (en) Arithmetic device for performing division or square root operation of floating point number and arithmetic method therefor
JP2002108606A (ja) スティッキービット生成回路及び乗算器
KR102200913B1 (ko) 풀 인-라인 비정규 서포트를 수반하는 높은 성능의 부동 소수점 덧셈기
JP4858794B2 (ja) 浮動小数点除算器、及びそれを用いた情報処理装置
KR100203468B1 (ko) 부동소수점수를 위한 산술연산장치
Wahba et al. Area efficient and fast combined binary/decimal floating point fused multiply add unit
US8060551B2 (en) Method and apparatus for integer division
JPH04283831A (ja) 除算器
US8019805B1 (en) Apparatus and method for multiple pass extended precision floating point multiplication
US8554819B2 (en) System to implement floating point adder using mantissa, rounding, and normalization
Nannarelli Tunable floating-point for energy efficient accelerators
JP2010238011A (ja) ベクトル乗算処理装置および方法ならびにプログラム
Lang et al. Division unit for binary integer decimals
Li et al. Design of a fully pipelined single-precision multiply-add-fused unit
JP3793505B2 (ja) 演算器及びそれを用いた電子回路装置
US20220357925A1 (en) Arithmetic processing device and arithmetic method
US9519458B1 (en) Optimized fused-multiply-add method and system
JP5376659B2 (ja) 積和演算装置及び積和演算装置の制御方法

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111006

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111019

R150 Certificate of patent or registration of utility model

Ref document number: 4858794

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141111

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees