(57)【要約】      （修正有）【課題】固定小数点演算で精度を高めた高速除算を行う演算処理方法を提供する。【解決手段】演算処理装置１は、２進数の固定小数点数を乗算式除算する除算装置である。近似前シフト部１０は、除数の絶対値が特定範囲内の場合は除数Ｄを特定ビット数ｍだけ右シフトし、特定範囲内でない場合は除数Ｄを右シフトせずに保持する。初期値取得部２０は、近似前シフト部１０により右シフトされた又は右シフトされずに保持された除数Ｄに対する近似計算の初期値Ｘ0を取得する。漸近近似部３０は、初期値取得部２０により取得された初期値Ｘ0を複数回、漸近近似して、除数の逆数Ｘnを算出する。乗算シフト部４０は、漸近近似部３０により算出された逆数Ｘnと被除数Ｙとの積を算出し、除数Ｄがシフトされた場合は算出された積を特定ビット数ｍだけ右シフトする。【選択図】図１
2016062404.tif 000002
【特許請求の範囲】
【請求項１】
２進数の固定小数点数の演算処理回路により、被除数を除数で乗算式除算する演算を実行させる演算処理方法であって、
前記除数の絶対値が特定範囲内の場合は前記除数を特定ビット数だけシフトし、前記特定範囲内でない場合は前記除数をシフトせずに保持し、
シフトされた又はシフトされずに保持された前記除数に対する近似計算の初期値を取得し、
取得された前記初期値を複数回、漸近近似して、前記除数の逆数を算出し、
算出された前記逆数と前記被除数との積を算出し、前記除数がシフトされた場合は算出された積を前記特定ビット数だけシフトする
ことを特徴とする演算処理方法。
【請求項２】
前記除数の有効ビット数を確認し、前記除数の有効ビット数に対応する前記除数の逆数の有効ビット数が得られるよう、前記特定範囲と前記特定ビット数とを算出する
ことを特徴とする請求項１に記載の演算処理方法。
【請求項３】
ニュートン・ラプソン法により、前記漸近近似を実行する
ことを特徴とする請求項１又は２に記載の演算処理方法。
【請求項４】
２進数の固定小数点数を乗算式除算する演算処理装置であって、
前記除数の絶対値が特定範囲内の場合は前記除数を特定ビット数だけシフトし、前記特定範囲内でない場合は前記除数をシフトせずに保持する近似前シフト手段と、
該近似前シフト手段によりシフトされた又はシフトされずに保持された前記除数に対する近似計算の初期値を取得する初期値取得手段と、
該初期値取得手段により取得された前記初期値を複数回、漸近近似して、前記除数の逆数を算出する漸近近似手段と、
該漸近近似手段により算出された前記逆数と前記被除数との積を算出し、前記除数がシフトされた場合は算出された積を前記特定ビット数だけシフトする乗算シフト手段とを備える
ことを特徴とする演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理方法及び演算処理装置に係り、特に２進数の固定小数点数を乗算式除算する演算処理方法及び演算処理装置に関する。
【背景技術】
【０００２】
乗算式除算法は、漸近近似式を繰り返し解いて被除数の逆数を算出し、算出された被除数の逆数と除数とを乗算して、商の近似値を得る除算の手法の一つである。乗算式除算法の代表的手法として、ニュートン・ラプソン（Newton-Raphson）法、及びゴールドシュミット法（Goldschmidt）法が知られている。
いずれの手法も、少ない回数で近似を収束させるために、除数の逆数の粗い近似値（初期値）をルックアップテーブル（Lookup table、以下「ＬＵＴ」という。）等の手段を用いて取得する。その初期値について、漸近近似による近似計算を繰り返し行うことで、望む精度の逆数を得ることができる。
このような従来のニュートン・ラプソン法を、浮動小数点演算について使用する技術の例が、特許文献１に記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０２−５１７３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、２進数の固定小数点数について、特許文献１のような乗算式除算法を用いて計算する場合、除数の逆数を生成する手段に入力する値と、当該手段から出力される逆数の値とでビット数を同じにすると、特に除数が大きい領域で除算の精度が劣化していた。これは、大きな入力値の逆数を同じビット数の範囲で表すと、出力の有効ビット数が僅かになってしまうためである。実際のところ、固定小数点数の誤差は、有効ビット数をｉとした場合には、±（１００／２i−１）％程度となる。このように、固定小数点数の有効ビット数が少なければ、その精度は大きく劣化する。結果として、近似の初期値が十分な精度を持たないと、演算結果の精度も大きく劣化してしまっていた。
このため、２進数の固定小数点数の乗算式除算法でも、精度が高く計算可能な演算処理方法が求められていた。
【０００５】
本発明は、このような状況に鑑みてなされたものであり、上述の問題を解消することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の演算処理方法は、２進数の固定小数点数の演算処理回路により、被除数を除数で乗算式除算する演算を実行させる演算処理方法であって、前記除数の絶対値が特定範囲内の場合は前記除数を特定ビット数だけシフトし、前記特定範囲内でない場合は前記除数をシフトせずに保持し、シフトされた又はシフトされずに保持された前記除数に対する近似計算の初期値を取得し、取得された前記初期値を複数回、漸近近似して、前記除数の逆数を算出し、算出された前記逆数と前記被除数との積を算出し、前記除数がシフトされた場合は算出された積を前記特定ビット数だけシフトすることを特徴とする。
本発明の演算処理方法は、前記除数の有効ビット数を確認し、前記除数の有効ビット数に対応する前記除数の逆数の有効ビット数が得られるよう、前記特定値と前記特定ビット数とを算出することを特徴とする。
本発明の演算処理方法は、ニュートン・ラプソン法により、前記漸近近似を実行することを特徴とする。
本発明の演算処理装置は、２進数の固定小数点数を乗算式除算する演算処理装置であって、前記除数の絶対値が特定範囲内の場合は前記除数を特定ビット数だけシフトし、前記特定範囲内でない場合は前記除数をシフトせずに保持する近似前シフト手段と、該近似前シフト手段によりシフトされた又はシフトされずに保持された前記除数に対する近似計算の初期値を取得する初期値取得手段と、該初期値取得手段により取得された前記初期値を複数回、漸近近似して、前記除数の逆数を算出する漸近近似手段と、該漸近近似手段により算出された前記逆数と前記被除数との積を算出し、前記除数がシフトされた場合は算出された積を前記特定ビット数だけシフトする乗算シフト手段とを備えることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、除数の絶対値が特定範囲内の場合は除数を特定ビット数だけシフトし、特定範囲内でない場合は除数をシフトせずに保持し、算出された積について除数の逆数がシフトされた場合は特定ビット数だけシフトすることで、固定小数点の乗算式除算で、桁数の少ない乗算器を用いても精度の高い除算結果が得られる演算処理装置を提供することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態に係る演算処理装置の機能構成を示すブロック図である。
【図２】本発明の実施の形態に係る演算処理装置の回路の概略構成を示すブロック図である。
【図３】本発明の実施の形態に係る除算処理のフローチャートである。
【図４】図３に示す近似前右シフト処理を説明するための図である。
【図５】図３に示すＬＵＴ初期近似値取得処理を説明するための図である。
【図６】図３に示す漸近近似式計算処理を説明するための図である。
【図７】図３に示す乗算及び右シフト処理を説明するための図である。
【発明を実施するための形態】
【０００９】
＜実施の形態＞
〔演算処理装置１の構成〕
図１を参照し、本発明の実施の形態に係る演算処理装置１の構成について説明する。
本発明の実施形態に係る演算処理装置１は、２進数の固定小数点数を乗算式除算する除算回路を含む装置である。演算処理装置１は、ＤＳＰ（Digital Signal Processor）、ＭＰＵ（Micro Processing Unit）、ＧＰＵ（Graphics Processing Unit）等に使用される除算装置であり、ＳＯＣ（System-on-a-chip）の一部であってもよい。
演算処理装置１は、図１のように、２進数の固定小数点数について、商Ｕ＝被除数Ｙ（分子）／除数Ｄ（分母）を算出する。この際、漸近近似の近似計算で除数Ｄの逆数の近似値Ｘnを算出し、これと被除数Ｙとの積を計算することで、商Ｕを算出する。つまり、演算処理装置１は、商Ｕ＝被除数Ｙ×Ｘnの高速な乗算式除算の計算を実行する。
また、演算処理装置１は、上述の計算を行う際、下記で説明するように、除数Ｄ、Ｘn等について適切なシフト（bit shift）を実行する。これにより、精度を確保した２進数の固定小数点数の乗算式除算を実行することが可能となる。
【００１０】
より具体的に説明すると、演算処理装置１は、近似前シフト部１０（近似前シフト手段）、初期値取得部２０（初期値取得手段）、漸近近似部３０（漸近近似手段）、及び乗算シフト部４０（乗算シフト手段）を備えている。
【００１１】
近似前シフト部１０は、除数Ｄの絶対値が特定範囲内の場合は除数を特定ビット数だけシフトし、特定範囲内でない場合は除数をシフトせずに保持する。具体的には、近似前シフト部１０は、除数Ｄの逆数の近似値Ｘn等を算出する前に、除数Ｄの値が特定値によって規定される特定範囲内であるか否かを判断する。近似前シフト部１０は、除数Ｄが特定範囲内であった場合、この特定範囲に対応した特定ビット数だけ、除数Ｄを右シフトする。右シフトにより、除数Ｄの値が１／２(特定ビット数)倍となり、シフトされた下位ビットはアンダーフローとなり切り捨てられる。なお、本実施形態においては、最上位ビットの符号を保ったまま、右シフトを行う。
また、近似前シフト部１０は、除数Ｄの有効ビット数を確認し、この有効ビット数に対応した除数Ｄの逆数Ｘnの有効ビット数が得られる値となるように、特定範囲と特定ビット数とを算出する。つまり、近似前シフト部１０は、シフトによる除数Ｄの情報喪失がもたらす精度劣化を特定の誤差以下に抑え、除数の逆数の近似値の精度が確保されるように、特定範囲と特定ビット数のペアを算出する。この精度劣化に関する特定の誤差は、例えば、乗算器（Binary Multiplier、以下「ＭＵＬ」という。）の桁数と、入力された被除数Ｙ又は除数Ｄのビット数とから、演算処理装置１の使用目的に対応して演算の精度が適切になるようにする。このため、特定範囲及び特定ビット数の複数のペアを用意することが好適である。
このように、除数Ｄの大きさに応じたシフトを行うことで、除数Ｄの逆数の精度が悪化する領域を回避して除算することが可能になる。
【００１２】
初期値取得部２０は、近似前シフト部１０によりシフトされた除数Ｄ、又はシフトされずに保持された除数Ｄについて、漸近近似により算出するための近似計算の初期値Ｘ0を取得する。本実施形態では、Ｘ0は、後述する逆数近似値生成ＬＵＴ１４０（図２）から取得された、除数Ｄの逆数の粗い近似値である。
【００１３】
漸近近似部３０は、初期値取得部２０により取得された初期値を複数回、漸近近似して、除数Ｄの逆数を算出する。本実施形態では、漸近近似部３０は、ニュートン・ラプソン法による漸近近似式Ｘn＝Ｘn-1（２−除数Ｄ×Ｘn-1）の計算を実行する。この近似計算により、Ｘnが収束する。
【００１４】
乗算シフト部４０は、漸近近似部３０により算出された逆数Ｘnと被除数Ｙとの積を算出し、除数Ｄがシフトされた場合は算出された積を特定ビット数だけシフトする。本実施形態では、乗算シフト部４０は、除数Ｄが特定範囲内であり、逆数であるＸnを算出する前に右シフトされた場合、被除数Ｙ×Ｘnの演算結果（積）に対しても、同じ特定ビット数の右シフトをして、除算を終了する。これは、特定ビット数ｍだけ右シフトした除数Ｄから得られる積は、求める商Ｕの２m倍となるためである。よって、乗算シフト部４０は、この積の値に対して再度、特定ビット数ｍだけ右シフトを行うことで１／２m倍にし、実際の商Ｕを算出する。
また、乗算シフト部４０は、除数Ｄが特定範囲内になく、シフトが行われなかった場合は、被除数Ｙ×Ｘnの演算結果をそのまま商Ｕとして除算を終了する。
【００１５】
次に、図２を参照して、演算処理装置１の回路（演算処理回路）の概略構成について説明する。
演算処理装置１は、主に、入力データ格納レジスター１００、特定値特定ビット数算出回路１１０、シフター１２０、シフト後除数保持レジスター１３０、逆数近似値生成ＬＵＴ１４０、漸近近似結果格納レジスター１５０、ＭＵＬ１６０、ＡＬＵ１７０（Arithmetic Logic Unit）、及びＡＣＣ１８０（Accumulator）を含んで構成される。
【００１６】
入力データ格納レジスター１００は、特定の数値を格納する一時記憶媒体であるレジスター（Register）等である。入力データ格納レジスター１００は、例えば、１６ビットのレジスターが１６個あるような、ＤＳＰ等の汎用レジスターであってもよい。入力データ格納レジスター１００には、被除数Ｙ及び除数Ｄが格納される。
【００１７】
特定値特定ビット数算出回路１１０は、特定値と特定ビット数を算出する回路である。特定値特定ビット数算出回路１１０は、入力データ格納レジスター１００に格納される除数Ｄの有効ビット数を確認し、当該有効ビット数から特定値を算出する。特定値特定ビット数算出回路１１０は、この特定値から特定範囲を算出し、除数Ｄが特定範囲内にあるか否かを判断して、シフト数を指定する特定ビット数を算出する。なお、特定値特定ビット数算出回路１１０は、特定値と特定ビット数との関係について、予めゲートを配線した形式のＲＯＭ（Read Only Memory）等にテーブル等として保持していてもよい。つまり、特定値及び特定範囲は、ＲＯＭ等に保持された固定値であってもよい。
また、特定値特定ビット数算出回路１１０は、漸化式の定数を左シフトした値を、ＡＬＵ１７０に出力する。この左シフトするビット数は、後述する漸近近似のステップ中の乗算において、ＭＵＬ１６０で計算した積で増えた小数部分のビット数である。本実施形態の例では、後述するように、小数部分が増加したビット数は１５ビットとなる。よって、本実施形態において、特定値特定ビット数算出回路１１０は、定数「２」を１５ビット左シフトした値（１６進表記で「０ｘ１００００」）を、ＡＬＵ１７０に出力する。なお、この漸化式の定数を左シフトした値についても、特定値特定ビット数算出回路１１０のＲＯＭ等に、予め保持されていてもよい。つまり、漸化式の定数を左シフトした値も、ＲＯＭ等に保持された固定値であってもよい。
【００１８】
シフター１２０は、入力された値について、入力されたシフト数を指定する信号に対応するよう、右又は左にビットシフト（bit shift、シフト）する回路である。シフター１２０は、特定値特定ビット数算出回路１１０により算出された後の特定ビット数により、除数Ｄ、被除数Ｙ×Ｘnの積等を、特定値特定ビット数算出回路１１０により算出された特定ビット数だけ右シフトして、この小数部分を切り捨てる。また、シフター１２０は、漸近近似中のＸnについて、シフト後除数保持レジスター１３０に格納可能なビット数にするよう、右シフトする。なお、シフター１２０は、シフト前後で入力された値を符号拡張してもよい。
【００１９】
シフト後除数保持レジスター１３０は、シフター１２０によりシフトされた除数Ｄを格納するレジスター等である。シフト後除数保持レジスター１３０は、入力データ格納レジスター１００のビット数に、符号ビットを１ビット分加えたビット数のレジスターを使用してもよい。
【００２０】
逆数近似値生成ＬＵＴ１４０は、入力された数値に対応した値を、ＲＯＭ等に保持されたテーブルを参照して出力するＬＵＴである。逆数近似値生成ＬＵＴ１４０は、シフター１２０にシフトされた除数Ｄを入力すると、除数Ｄの逆数の粗い近似値を出力する。この近似値は、上述したように、近似計算の初期値Ｘ0となる。なお、逆数近似値生成ＬＵＴ１４０は、入力された数値に対応する全ての近似値を保持している必要はなく、特定ビットや数値範囲で丸められた値に対応するテーブルを保持したり、線形補間等した値を出力したりしてもよい。
【００２１】
漸近近似結果格納レジスター１５０は、逆数近似値生成ＬＵＴ１４０により出力された初期値Ｘ0、漸近近似中のＸn等を格納するレジスターである。
【００２２】
ＭＵＬ１６０は、入力された二つの値の乗算を実行する乗算回路である。ＭＵＬ１６０は、演算処理装置１の使用目的に適合して必要な精度等に対応した規模の回路を用いることが可能である。本実施形態において、ＭＵＬ１６０は、漸近近似中の乗算、被除数Ｙと算出されたＸnとの乗算等を実行する。
【００２３】
ＡＬＵ１７０は、論理演算、加算、及び減算を実行する回路である。ＡＬＵ１７０は、ＭＵＬ１６０と合わせて積和演算を実現する。本実施形態において、ＡＬＵ１７０は、漸近近似の漸化式の減算等の演算を実行する。ＡＬＵ１７０は、ＭＵＬ１６０の乗算結果と同じビット数の値を入力可能に構成される。
【００２４】
ＡＣＣ１８０は、演算結果を累積するレジスター等である。本実施形態において、ＡＣＣ１８０は、近似計算途中の値、算出された除算の商Ｕ等を格納する。ＡＣＣ１８０は、ＡＬＵ１７０の演算結果を格納可能なビット数の値を格納可能であってもよい。
【００２５】
〔本発明の実施の形態に係る除算処理〕
次に、図３〜図７を参照して、本実施形態の演算処理装置１による除算の演算処理方法に係る除算処理の各処理について説明する。
本実施形態の除算処理では、除算方式としてニュートン・ラプソン法を使用し、上位ビットから下位ビットについて符号１ビット＋１５ビット（１６ビット）のフォーマットの固定小数点数の被除数Ｙ及び除数Ｄを入力に用いて、出力３２ビットの符号付き除算を実行する例について説明する。
本実施形態の除算処理では、除数の絶対値が大きい場合には、逆数の計算に入る前に除数に対し右シフトを行い、逆数の精度劣化を回避する。このため、漸近近似前に、特定値及び特定ビット数を算出し、この特定ビット数だけ除数Ｄを右シフトする（ステップＳ１０１）。次に、右シフト後の除数Ｄの逆数の漸近近似のための初期値Ｘnを取得する（ステップＳ１０２）。次に、漸近近似式、Ｘn＝Ｘn-1（２−ＤＸn-1）により、Ｘnを収束させて近似させる（ステップＳ１０３〜Ｓ１０４）。最後に、除数Ｄの逆数の近似結果Ｘ3と被除数Ｙとを乗算する（ステップＳ１０５）。この際、特定ビット数ｍだけ右シフトした除数Ｄから算出された値は求める値の２n倍となるので、この値に対して再度、特定ビット数ｍ分の右シフトを行うことで、商Ｕが得られる。
なお、固定小数点の演算の場合、加減算では小数部分のビット数は変わらず、乗除算では掛けた数の小数点の位置だけずれる。このため、以下の説明では、各値の固定小数点の小数部分のビット数を「Ｑ（）」のように、Ｑ表記（Ｑフォーマット）で表す。ここで、本実施形態では、除数Ｄの小数点部分のビット数はｄであり、Ｑ表記はＱ（ｄ）と表す。また、被除数Ｙの小数点部分のビット数はｙであり、Ｑ表記はＱ（ｙ）と表す。また、下記では、各ビットの左側を上位ビット、右側を下位ビットとして説明する。
以下で、図３のフローチャートにより、本実施形態の除算処理の詳細をステップ毎に説明する。
【００２６】
（ステップＳ１０１）
まず、入力データ格納レジスター１００、特定値特定ビット数算出回路１１０、及びシフター１２０で構成される近似前シフト部１０が、近似前右シフト処理を行う。
図４により具体的に説明すると、特定値特定ビット数算出回路１１０は、入力データ格納レジスター１００から除数Ｄを受け取る。そして、特定値特定ビット数算出回路１１０は、除数Ｄのビット数に対応する特定値を算出する。また、特定値特定ビット数算出回路１１０は、除数Ｄの有効ビット数を算出する。この際、特定値特定ビット数算出回路１１０は、除数Ｄの絶対値の最大ビットを有効ビットとして算出する。特定値特定ビット数算出回路１１０は、この有効ビットにより除数Ｄの絶対値が、算出された特定値の間の範囲（特定範囲）内にある場合、特定ビット数として算出する。本実施形態では、特定ビット数は、除数Ｄの絶対値が大きい場合に行う右シフトのシフト数となる。
具体例で説明すると、特定値特定ビット数算出回路１１０は、除数Ｄのビット数が１６ビットに対して、有効ビット数１１ビットに対応する特定値ｔ１＝１０２４と、有効ビット数１４ビットに対応する特定値ｔ２＝８１９２とを算出する。この上で、特定値特定ビット数算出回路１１０は、除数Ｄの有効ビット数を算出して、特定値ｔ１、ｔ２により特定される特定範囲と比較する。この例の場合、特定値特定ビット数算出回路１１０は、特定範囲（ａ）８１９２≦｜除数Ｄ｜を満たす場合、除数Ｄに対して６ビット右シフトするよう、特定ビット数ｍを「６」と算出する。また、特定値特定ビット数算出回路１１０は、特定範囲（ｂ）１０２４≦｜除数Ｄ｜＜８１９２を満たす場合、除数Ｄに対して５ビット右シフトするよう、特定ビット数ｍを「５」と算出する。また、特定値特定ビット数算出回路１１０は、１０２４＞｜除数Ｄ｜である場合、特定範囲内でないとして、除数Ｄに対してシフトをしないで保持する。この場合、特定値特定ビット数算出回路１１０は、特定ビット数ｍを「０」と算出してもよい。特定値特定ビット数算出回路１１０は、特定ビット数に対応してシフト数を指定する信号をシフター１２０に出力する。
また、並行して、シフター１２０は、入力データ格納レジスター１００から除数Ｄを受け取り、まず２０ビット分の符号拡張を施す。つまり、シフター１２０に入力された除数Ｄは、合計３６ビットとなる。この上で、シフター１２０は、シフト数を指定する信号により、除数Ｄを特定ビット数だけ右シフトする、又は除数Ｄをシフトせずに保持する。シフター１２０は、右シフトされた又は保持された除数Ｄ（以下、「除数Ｄ’」と記載する。）のうち、下位ビットから１６ビット分を、逆数近似値生成ＬＵＴ１４０とシフト後除数保持レジスター１３０とへ出力する。
【００２７】
（ステップＳ１０２）
次に、シフト後除数保持レジスター１３０、逆数近似値生成ＬＵＴ１４０、及び漸近近似結果格納レジスター１５０で構成される初期値取得部２０が、ＬＵＴ初期近似値取得処理を行う。
図５により具体的に説明すると、逆数近似値生成ＬＵＴ１４０は、除数Ｄ’をシフター１２０から取得して、この値に対応する除数Ｄの逆数の近似計算の初期値であるＸ0を取得し、漸近近似結果格納レジスター１５０へ出力する。本実施形態では、この漸近近似結果格納レジスター１５０のビット数は１６ビットとなる。また、Ｘ0のＱ表記は、Ｘ0（Ｑ（１５−ｄ＋ｍ））となる。
また、シフト後除数保持レジスター１３０は、除数Ｄ’を取得して格納する。上述したように、本実施形態では、シフト後除数保持レジスター１３０は、除数Ｄのビット数に符号１ビット分を加えて保持するため、本実施形態では、この格納された除数Ｄ’のビット数は、（符号１ビット＋１６ビット）であり、１７ビットとなる。また、除数Ｄ’のＱ表記は、Ｄ’（Ｑ（ｄ−ｍ））となる。
【００２８】
（ステップＳ１０３）
次に、シフター１２０、シフト後除数保持レジスター１３０、漸近近似結果格納レジスター１５０、ＭＵＬ１６０、ＡＬＵ１７０、及びＡＣＣ１８０で構成される漸近近似部３０が、漸近近似式計算処理を行う。
図６により具体的に説明すると、漸近近似部３０は、ニュートン・ラプソン法による除数の逆数の近似式Ｘn＝Ｘn-1（２−Ｄ’Ｘn-1）を計算する。
この式の計算には乗算が２回必要なため、２サイクルを要する。
まず、図６（ａ）によると、漸近近似部３０は、１サイクル目で、積和演算により２−Ｄ’Ｘn-1を計算し、結果をＡＣＣ１８０に格納する。具体的に、ＭＵＬ１６０は、シフト後除数保持レジスター１３０に格納された除数Ｄ’の値と、漸近近似結果格納レジスター１５０に格納されたＸn-1（初期値は、Ｘ0）の値とを取得して、乗算する。本実施形態において、ＭＵＬ１６０が１７ビット×１６ビットの３６ビットの乗算を実行する場合、この乗算の結果のＱ表記では、Ｑ（（１５−ｄ＋ｍ）＋（ｄ−ｍ））となるため、Ｄ’Ｘn-1（Ｑ１５）となる。つまり、この１サイクル目でＭＵＬ１６０による乗算の積で増えた小数部分のビット数は１５ビットとなる。このため、ＡＬＵ１７０は、２を１５ビット左シフトした値から、乗算の積を減算し、ＡＣＣ１８０に格納する。ＡＣＣ１８０に格納された値のＱ表記は、２−Ｄ’Ｘn-1（Ｑ（１５））となる。
図６（ｂ）によると、２サイクル目は、まず１サイクル目の演算結果である２−ＤＸn-1とＸn-1の積を計算し、その積を右シフトして、漸近近似結果格納レジスター１５０に格納する。具体的には、ＭＵＬ１６０は、ＡＣＣ１８０に保存された２−ＤＸn-1の値と、漸近近似結果格納レジスター１５０に格納されたＸn-1の値とを取得して乗算する。上述のようにＭＵＬ１６０が１７ビット×１６ビットの乗算をする場合、この積のＱ表記は、Ｘn-1（２−ＤＸn-1）（Ｑ（３０−ｄ＋ｍ）となる。シフター１２０は、この積の値を、１５ビット分、右シフトする。シフター１２０は、この右シフトした積をＸnとして、漸近近似結果格納レジスター１５０に格納する。格納されたＸnのＱ表記はＱ（１５−ｄ＋ｍ）となる。
【００２９】
（ステップＳ１０４）
次に、漸近近似部３０が、近似計算によりＸnが収束したか否かを判定する。
上述したように、本実施形態の例では、近似計算を３回実行することで収束したものと判断する。よって、漸近近似部３０は、Ｘ3まで漸近近似式の計算が終了した場合は、Ｙｅｓと判定し、得られたＸ3を漸近近似の結果として扱う。逆に、漸近近似部３０は、まだＸ3まで算出していない場合は、Ｎｏと判定する。
Ｙｅｓの場合、漸近近似部３０は、処理をステップＳ１０５に進める。
ＮＯの場合、漸近近似部３０は、処理をステップＳ１０３に戻して近似計算を続ける。これにより、ステップＳ１０３〜Ｓ１０４が３回実行されることになる。
【００３０】
（ステップＳ１０５）
Ｘ3まで算出された場合、入力データ格納レジスター１００、シフター１２０、シフト後除数保持レジスター１３０、ＭＵＬ１６０、及びＡＣＣ１８０で構成される乗算シフト部４０が、乗算及び右シフト処理を行う。
乗算シフト部４０は、除数Ｄの逆数の近似結果と被除数Ｙとの乗算を行い、この積を右シフトして最終的な商Ｕを算出する。
図７により具体的に説明すると、ＭＵＬ１６０は、上述の処理で得られた漸近近似の結果であるＸ3を漸近近似結果格納レジスター１５０から取得し、被除数Ｙを入力データ格納レジスター１００から取得して、乗算する。本実施形態では、この際、ＭＵＬ１６０は、被除数Ｙについて１ビット分、符号を付加して１７ビットとし、１６ビットのＸ3と乗算する。このため、被除数ＹのＱ表記をＹ（Ｑ（ｙ））とすると、乗算結果である積のＱ表記は、Ｘ3Ｙ（Ｑ（１５＋ｙ−ｄ＋ｍ））となる。
シフター１２０は、この積を入力として、特定ビット数算出回路から特定ビット数ｍに対応する信号を取得して右シフトする。つまり、シフター１２０は、ステップＳ１０１で被除数Ｙに対して実行したのと同じビット数だけ、右シフトを実行する。シフター１２０は、シフト後の結果を、除算命令の結果である商ＵとしてＡＣＣ１８０に格納する。この商ＵのＱ表記はＱ（１５＋ｙ−ｄ）となる。
本実施形態では、これらの処理により、誤差±２％程度の除算の実行が可能となる。また、本実施形態の例では、漸近近似を３回実行するため、ステップＳ１０１〜Ｓ１０２を１クロック、ステップＳ１０３〜Ｓ１０４を２クロック、ステップＳ１０５を１クロック要すると計算すると、８クロックで除算命令を完了できる。
以上により、本発明の実施の形態に係る除算処理を終了する。
【００３１】
以上のように構成することで、以下のような効果を得ることができる。
従来、２進数の固定小数点の乗算式除算装置では、回路規模の小さな（桁数の少ない）乗算器を使うと、出力結果の精度が低くなっていた。これは、除数の絶対値が大きい場合、その逆数の絶対値が小さくなり、必然的に逆数の有効桁数も減少するためであった。
これに対して、本発明の実施の形態に係る演算処理装置１は、２進数の固定小数点数である被除数Ｙを除数Ｄで乗算式除算する除算装置であり、除数Ｄの絶対値が特定範囲内の場合は除数Ｄを特定ビット数だけシフトし、特定範囲内でない場合は除数Ｄをシフトせずに保持する近似前シフト部１０と、近似前シフト部１０によりシフトされた又はシフトされずに保持された除数に対する近似計算の初期値を取得する初期値取得部２０と、初期値取得部２０により取得された初期値を複数回、漸近近似して、除数の逆数を算出する漸近近似部３０と、漸近近似部３０により算出された逆数と被除数との積を算出し、除数がシフトされた場合は算出された積を特定ビット数だけシフトする乗算シフト部４０とを備えることを特徴とする。
このように構成することで、除数Ｄの大きな領域での漸近近似を回避して、ＭＵＬ１６０の桁数を増やさずに精度の劣化を抑える除算が可能となる。
つまり、除数Ｄとその逆数の関係は非線形であることに着目すれば、特に除数Ｄが大きい領域では、下位側のビットをある程度無視しても逆数Ｘの値にはあまり影響を及ぼさない。この除数Ｄの大きさに応じたシフトを行えば、除数の逆数の精度が悪化する領域を回避して除算を行うことができ、除算結果の誤差を少なくし精度を高めることができる。
【００３２】
また、従来、固定小数点の乗算式除算について、除算の漸近近似の計算に関する値のビット数を拡張することで、固定小数点数の演算中の精度を確保する方式もあった。このように、精度確保のために演算に関する値のビット数の拡張を行う場合、漸近近似の計算に利用される演算器、特に乗算器の入出力を拡張しなければならない。たとえば、入力１６ビット、出力３２ビットの符号付き除算を行う場合、例えば、３回の漸近近似を、ニュートン・ラプソン法を用いて行う必要がある。この際、２％以下の誤差の除算を実現するのであれば、５ビット以上のビット数の拡張が必要となる。よって、従来の技術では、乗算器が入力２１ビット、出力４２ビットの桁数に拡張されていた。
しかしながら、乗算器は論理規模の大きい回路であり、その素子数は入力ビット数の２乗に比例する。入力２１ビットの桁数の乗算器は、入力１６ビットの桁数の乗算器に比べると、最小でも１．７倍程度の大きさとなり、コストが上昇していた。
これに対して、本実施形態の演算処理方法では、通常の１７ビット×１６ビットのＭＵＬ１６０を使用しても、±２％の誤差で除算を行うことができる。このため、桁数の大きな乗算器を使う必要がなくなり、回路面積を締小してコストを削減することができる。
【００３３】
また、本発明の実施の形態に係る演算処理装置１は、近似前シフト部１０が、除数Ｄの有効ビット数を確認し、除数Ｄの有効ビット数に対応する除数の逆数Ｘnの有効ビット数が得られるよう、特定範囲と特定ビット数とを算出することを特徴とする。つまり、近似前シフト部１０は、シフトによる除数Ｄの情報喪失がもたらす精度劣化を特定値以下に抑え、除数Ｄの逆数の近似値の精度確保されるよう、特定範囲と特定ビット数とを算出することを特徴とする。
このように構成することで、除数Ｄの有効ビット数をチェックするだけで、算出される商Ｕの精度が最適となるようなシフトの特定ビット数が容易に得られる。また、算出のための計算が容易であるので、回路規模を抑えつつ、例えば、１クロック内に特定ビットを算出することができる。
【００３４】
また、本発明の実施の形態に係る演算処理装置１は、漸近近似部３０が、ニュートン・ラプソン法により、漸近近似を実行することを特徴とする。
このように構成することで、高速に、精度が確保された２進数の固定小数点数の乗算式除算を行うことが可能となる。また、精度が確保された状態で、除数Ｄの逆数を確実に収束させることが可能である。
【００３５】
なお、本発明の本実施形態の説明においては、漸近近似をニュートン・ラプソン法で行う例について説明するものの、これに限られず、ゴールドシュミット法等にも適用可能である。この場合、ニュートン・ラプソン法とゴールドシュミット法とで、近似計算の初期値を取得するためのＬＵＴとして、それぞれ異なるものを用意してもよい。
また、本発明の実施の形態においては、逆数Ｄの絶対値の有効ビット数に対応する特定値の特定範囲と比較したものの、逆数Ｄの有効ビット数に依存しない特定範囲を設定してもよい。たとえば、逆数Ｄの絶対値の上位ビットと特定ビット数に対応したテーブルを、特定値特定ビット数算出回路１１０に保持して、特定ビットを算出してもよい。また、逆数近似値生成ＬＵＴ１４０について、算出される特定ビット数により別々のＬＵＴを使用するような構成であってもよい。
【００３６】
なお、上記実施の形態の構成及び動作は例であって、本発明の趣旨を逸脱しない範囲で適宜変更して実行することができることは言うまでもない。
【産業上の利用可能性】
【００３７】
本発明の演算処理方法は、ＤＳＰやＣＰＵやＧＰＵ等で除算させる回路に適用可能であるため、産業上、利用することができる。
【符号の説明】
【００３８】
１  演算処理装置
１０  近似前シフト部
２０  初期値取得部
３０  漸近近似部
４０  乗算シフト部
１００  入力データ格納レジスター
１１０  特定値特定ビット数算出回路
１２０  シフター
１３０  シフト後除数保持レジスター
１４０  逆数近似値生成ＬＵＴ
１５０  漸近近似結果格納レジスター
１６０  ＭＵＬ
１７０  ＡＬＵ
１８０  ＡＣＣ
【図１】
2016062404.tif 000003
【図２】
2016062404.tif 000004
【図３】
2016062404.tif 000005
【図４】
2016062404.tif 000006
【図５】
2016062404.tif 000007
【図６】
2016062404.tif 000008
【図７】
2016062404.tif 000009