(57)【要約】  開平演算処理装置において、商の一部のビット列を決定する第１論理回路１０４と、ビット列と部分剰余とに基づき、部分剰余演算における冪乗演算以外の第１演算を行なうことで第１の部分剰余を算出する第２論理回路１０７と、第１の部分剰余とビット列とを用いて冪乗演算を含む第２演算を行なうことで部分剰余を算出する第３論理回路１０５とを備えることで、開平演算処理装置においてクリティカルパスのディレイを改善させる。
2020079802.tif 000002
【特許請求の範囲】
【請求項１】
被開平数の平方根を計算する演算処理装置であって、
商の一部のビット列を決定する第１論理回路と、
前記ビット列と部分剰余とに基づき、部分剰余演算における冪乗演算以外の第１演算を行なうことで第１の部分剰余を算出する第２論理回路と、
前記第１の部分剰余と前記ビット列とを用いて冪乗演算を含む第２演算を行なうことで前記部分剰余を算出する第３論理回路と
を備えることを特徴とする演算処理装置。
【請求項２】
前記第１論理回路によって決定された前記ビット列を格納する第１レジスタを備え、
前記第３論理回路が、演算繰り返しにおける前サイクルにおいて前記第１レジスタに格納された前記ビット列を用いて前記部分剰余を算出する
ことを特徴とする、請求の範囲第１項記載の演算処理装置。
【請求項３】
前記第２論理回路によって算出された前記第１の部分剰余を格納する第２レジスタを備え、
前記第１論理回路が、前記第２レジスタに前サイクルにおいて格納された前記第１の部分剰余を用いて前記ビット列を算出する
ことを特徴とする、請求の範囲第１項又は第２項記載の演算処理装置。
【請求項４】
前記第１論理回路が、
演算繰り返し回数が所定の閾値以下の場合には解を１サイクルあたり第１のビット数ずつ求め、前記演算繰り返し回数が前記閾値よりも大きい場合には解を１サイクルあたり、前記第１のビット数よりも大きい第２のビット数ずつ求める
ことを特徴とする、請求の範囲第１〜３項のいずれか１項に記載の演算処理装置。
【請求項５】
被開平数の平方根を計算する演算処理装置において、
第１論理回路が、商の一部のビット列を決定する処理と、
第２論理回路が、前記ビット列と部分剰余とに基づき、部分剰余演算における冪乗演算以外の第１演算を行なうことで第１の部分剰余を算出する処理と、
第３論理回路が、前記第１の部分剰余と前記ビット列とを用いて冪乗演算を含む第２演算を行なうことで前記部分剰余を算出する処理と
を備えることを特徴とする演算処理装置の制御方法。
【請求項６】
第１レジスタに、前記第１論理回路によって決定された前記ビット列を格納する処理と、
前記第３論理回路が、演算繰り返しにおける前サイクルにおいて前記第１レジスタに格納された前記ビット列を用いて前記部分剰余を算出する処理と
を備えることを特徴とする、請求の範囲第５項記載の演算処理装置の制御方法。
【請求項７】
第２レジスタに、前記第２論理回路によって算出された前記第１の部分剰余を格納する処理と、
前記第１論理回路が、前記第２レジスタに前サイクルにおいて格納された前記第１の部分剰余を用いて前記ビット列を算出する処理と
を備えることを特徴とする、請求の範囲第５項又は第６項記載の演算処理装置の制御方法。
【請求項８】
前記第１論理回路が、演算繰り返し回数が所定の閾値以下の場合には解を１サイクルあたり第１のビット数ずつ求め、前記演算繰り返し回数が前記閾値よりも大きい場合には解を１サイクルあたり、前記第１のビット数よりも大きい第２のビット数ずつ求める処理
を備えることを特徴とする、請求の範囲第５〜７項のいずれか１項に記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、様々な分野においてディープラーニング（Deep Learning）技術の実用化が進んでおり、ディープラーニング用途のプロセッサが求められている。ディープラーニングにおける訓練速度向上のためにバッチノーマライゼーション（Batch Normalization）が用いられるが、このバッチノーマライゼーションでは開平演算が必要となる。したがってディープラーニング用途のプロセッサには開平演算の高速実行が求められる。【０００３】
開平演算をハードウェアに実装するための一般的なアルゴリズムとして、ＳＲＴ（Sweeney, Robertson, Tocher）法や非回復法が知られている。これらに基づく開平演算では、被開平数xに対しx=Q^2+Rと置き、この式を満たしつつQとRの加減算を繰り返す。ここで、Qは部分商（途中までの開平結果）であり、Rは部分剰余を示す。Rを0に十分に近づけると、Qがxの平方根sqrt(x)に十分近い値となる。【０００４】
前記の式を漸化式で表現すると、下記の式（１）となる。【０００５】
Qi+1^2+Ri+1= Qi^2+Ri  ・・・（１）【０００６】
上記式（１）を変形すると、以下の式（２）が求められる。【０００７】
Ri+1= Ri-Qi+1^2+Qi^2
= Ri-(Qi+qi) ^2+Qi^2
= Ri-2Qi*qi-qi^2           ・・・（２）【０００８】
各変数の意味は下記の通りである。
Ri  :  演算i回目の部分剰余（partial remainder）。 R0=x.
Qi  :  演算i回目の部分商（partial quotient）。  Q0=0.
qi   :  演算i回目に求まる商の一部のビット列。Qi+qi=Qi+1.
qiは商の最上位ビット（bit）から開始し、iが1増えるごとに演算1回で求める商のbit数だけ桁を下げていき、その桁の整数倍となるような複数の候補を持たせる。【０００９】
例えば、演算1回で商2bitを求めるradix-4のＳＲＴ法の場合、下記の式（３）のようになる。
qi = (-3 or -2 or -1 or 0 or +1 or +2 or +3)*2^-2i・・・（３）【００１０】
上記式（２）において、Ri+1を0に近づけるようqiを決定していくことで、Qi+1がsqrt(x)に近づく。【００１１】
図８は従来の開平演算回路の構成を示す図であり、上記式（２）をデジタル回路に実装した例を示す。【００１２】
図８に示す演算回路は、開平演算を行なう開平演算回路であり、レジスタ５０１，５０２，論理回路５０３，５０４，５０５を備える。【００１３】
レジスタ５０１は論理回路５０３，５０４，５０５に接続され、レジスタ５０２は論理回路５０３，５０５に接続されている。レジスタ５０１は0で初期化され、レジスタ５０２はxで初期化される。【００１４】
レジスタ５０１から読み出されたレジスタ値Qiが論理回路５０３，５０４，５０５に、それぞれ入力され、レジスタ５０２から読み出されたレジスタ値Riが論理回路５０３，５０５に、それぞれ入力される。以下、レジスタ５０１から読み出されたレジスタ値Qiをレジスタ５０１の出力Qiという場合がある。同様に、以下、レジスタ５０２から読み出されたレジスタ値Riをレジスタ５０２の出力Riという場合がある。【００１５】
論理回路５０３は、レジスタ５０１，５０２および論理回路５０４，５０５にそれぞれ接続され、レジスタ５０１の出力Qi，レジスタ５０２の出力Ri，および演算回数信号iが入力される。【００１６】
論理回路５０３は、レジスタ５０１の出力Qiとレジスタ５０２の出力Riと演算回数信号iとに基づいてqiを決定する。すなわち、論理回路５０３は、上記式（２）においてRi+1が0に近づくように、qiを式（３）に示された候補の中から選ぶ。【００１７】
論理回路５０３は、決定したqiを論理回路５０４，５０５のそれぞれに入力する。論理回路５０４は、Qiおよびqiを受け取り、Qi+1=Qi+qiを演算してQi+1を出力する。この論理回路５０４の出力Qi+1はレジスタ５０１に入力され、このレジスタ５０１の値を更新する。【００１８】
論理回路５０５は、Ri，Qiおよびqiを受け取り、上記式（２）を演算してRi+1を出力する。この論理回路５０５の出力Ri+1はレジスタ５０２に入力され、このレジスタ５０２の値を更新する。【００１９】
論理回路５０３〜５０５による演算を複数サイクル繰り返すことで、Qiがsqrt(x)に近づく。演算結果として必要な桁数のQiが求まるまで演算を繰り返し、その後Qiを演算結果として出力する。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開平９−２６９８９２号公報
【特許文献２】特開平１１−３５３１５８号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
図８に例示する従来の開平演算回路においては、レジスタ５０２から論理回路５０３，５０５を介してレジスタ５０２に戻るパスｐ１（図８参照）が、ディレイ面でのクリティカルパスとなる。【００２２】
開平演算回路において、このようなクリティカルパスのディレイを改善することが求められている。【００２３】
１つの側面では、本発明は、開平演算回路においてクリティカルパスのディレイを改善することを目的とする。
【課題を解決するための手段】
【００２４】
このため、この演算処理装置は、被開平数の平方根を計算する演算処理装置であって、商の一部のビット列を決定する第１論理回路と、前記ビット列と部分剰余とに基づき、部分剰余演算における冪乗演算以外の第１演算を行なうことで第１の部分剰余を算出する第２論理回路と、前記第１の部分剰余と前記ビット列とを用いて冪乗演算を含む第２演算を行なうことで前記部分剰余を算出する第３論理回路とを備える。
【発明の効果】
【００２５】
一実施形態によれば、開平演算回路においてクリティカルパスのディレイを改善することができる。
【図面の簡単な説明】
【００２６】
【図１】実施形態の一例としての開平演算回路の構成を例示する図である。
【図２】実施形態の一例としての開平演算回路の処理を説明するためのフローチャートである。
【図３】実施形態の一例としての開平演算回路を浮動小数点数の入出力に対応させた構成を例示する図である。
【図４】実施形態の一例としての開平演算回路を備える演算回路の処理を説明するためのフローチャートである。
【図５】図３に例示した演算回路の変形例としての演算回路の構成を例示する図である。
【図６】実施形態の変形例としての演算回路の初期値決定回路による初期値の決定論理を例示する図である。
【図７】実施形態の変形例としての開平演算回路を備える演算回路の処理を説明するためのフローチャートである。
【図８】従来の開平演算回路の構成を示す図である。
【発明を実施するための最良の形態】
【００２７】
以下、図面を参照して本演算処理装置および演算処理装置の制御方法にかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形（実施形態および各変形例を組み合わせる等）して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。【００２８】
（Ｉ）一実施形態の説明
（Ａ）構成
図１は実施形態の一例としての開平演算回路１の構成を例示する図である。
開平演算回路１は、開平演算を行なう演算回路であり、ＳＲＴ法や非回復法に基づき、被開平数xのsqrt(x)を演算する。【００２９】
ＳＲＴ法や非回復法に基づく開平演算では、被開平数xに対しx=Q^2+Rと置き、この式を満たしつつQとRの加減算を繰り返す。Qは部分商（途中までの開平結果）であり、Rは部分剰余を示す。Rを0に十分に近づけると、Qがxの平方根sqrt(x)に十分近い値となる。【００３０】
図１に例示する開平演算回路１は、レジスタ１０１〜１０３および論理回路１０４〜１０７を備える。以下、レジスタ１０１をレジスタＱという場合がある。同様に、レジスタ１０２をレジスタｑという場合があり、レジスタ１０３をレジスタｐｒｅＲという場合がある。【００３１】
レジスタ１０１は、パス（通信経路）２−２，２−３，２−４を介して論理回路１０６，１０４，１０７にそれぞれ接続されている。レジスタ１０１から読み出されたレジスタ値Qiは、論理回路１０４，１０６，１０７にそれぞれ入力される。以下、レジスタ１０１から読み出されたレジスタ値Qiをレジスタ１０１の出力Qiという場合がある。【００３２】
レジスタ１０３は、パス２−６，２−５を介して論理回路１０４，１０５にそれぞれ接続されている。レジスタ１０３から読み出されたレジスタ値preRiが論理回路１０４，１０５にそれぞれ入力される。以下、レジスタ１０３から読み出されたレジスタ値preRiをレジスタ１０３の出力preRiという場合がある。【００３３】
レジスタ１０２は、パス２−１２を介して論理回路１０５に接続されている。レジスタ１０２から読み出されたレジスタ値qi-1は論理回路１０５に入力される。以下、レジスタ１０２から読み出されたレジスタ値qi-1をレジスタ１０２の出力qi-1という場合がある。【００３４】
本開平演算回路１においては、後述する論理回路１０４〜１０７による演算を、求める商のbit数に到達するまで演算を繰り返し行なう（ループ演算）。【００３５】
論理回路１０４は、レジスタ１０１，１０３に接続されるとともに、パス２−７，２−８，２−１０を介して論理回路１０６，論理回路１０７，レジスタ１０２にそれぞれ接続されている。論理回路１０４には、レジスタ１０１の出力Qi，レジスタ１０３の出力preRi，および演算回数を示す信号（演算回数信号）iが入力される。また、以下、iを演算回数を示す値として用いる場合もある。【００３６】
論理回路１０４は、レジスタ１０１の出力Qiとレジスタ１０３の出力preRiと演算回数iとに基づいて、演算i回目に求まる商の一部のビット列（部分商ビット列）qiを決定する第１論理回路として機能する。【００３７】
さて、ＳＲＴ法や非回復法において、部分商ビット列qiは、部分商Qiと部分剰余Riとを判定して決められる。これらのアルゴリズムの特性として、厳密なQiやRiの値で判定する場合だけでなく、QiやRiに対してある程度誤差を含んだ値で判定した場合でも、正しい解を得ることができる。【００３８】
図８に示した従来の開平演算回路において、論理回路５０５に着目すると、上記式（２）において、iが増加するにつれ、qi^2の項がRiや2qi*Qiの項と比べ相対的に小さくなっていく。【００３９】
以上のことから、iがある程度大きくなった以降は、式（２）のqi^2の項を除外しても論理回路５０３の動作には問題がない。つまり、上記式（２）を下記の式（４）に置き換え、その出力preRi+1を論理回路５０３で用いるように変更できる。【００４０】
preRi+1= Ri-2Qi*qi           ・・・（４）【００４１】
ただし、iが小さいうちはqi^2の項が相対的に大きく、上記式（２）のRi+1と式（４）のpreRi+1との差が大きいため、RiをpreRiに置き換えるだけでは正しい解が求まらないことがある。【００４２】
これは、演算i回目ではi+1回目以降の演算によりRが0に収束できる程度まで、Riを0に近づけておく必要があるが、iが小さいうちは論理回路で適切なqiを選択できず十分に近づかないことがあるためである。本開平演算回路１においては、この問題を回避するために、iが小さいうち（所定の閾値k以下の場合）はi増加に対するqiの桁の下げ幅を減らす手法を用いる。【００４３】
例えば、radix-4のSRT法の場合、論理回路１０４において、以下の式（５）を用いてqiを定める。
【数１】
2020079802.tif 000003
【００４４】
i≦kの場合にはqiが式（３）よりも大きくなるため、１回の演算でRiが式（２）の時に必要なほど0に近づかなくても、それ以降の演算でRiを0に収束させることが可能となる。【００４５】
本開平演算回路１においては、iが閾値k以下のうちは解を1サイクルあたり1ビット求め、iが閾値kよりも大きくなってから1サイクルあたり2ビット求める。【００４６】
図１に例示する開平演算回路１において、論理回路１０４は、式（４）においてRi+1が0に近づくように、qiを式（５）に示された候補の中から選ぶ。【００４７】
論理回路１０４によって決定されたqiは、パス２−７を介して論理回路１０６に、パス２−８を介して論理回路１０７に、パス２−１０を介してレジスタ１０２に、それぞれ入力される。【００４８】
論理回路１０６には、パス２−２を介してレジスタ１０１からQiが、パス２−７を介して論理回路１０４からqiが、それぞれ入力される。【００４９】
論理回路１０６は、Qiおよびqiを受け取り、Qi+1=Qi+qiを演算してQi+1を出力する。論理回路１０６はパス２−１を介してレジスタ１０１に接続されており、論理回路１０６の出力Qi+1はこのパス２−１を介してレジスタ１０１に入力され、このレジスタ１０１の値を更新する。【００５０】
論理回路１０５は、上記式（４）で除外したqi^2の項の演算を行なう。論理回路１０４によって決定されたqiが、パス２−１０を介してレジスタ１０２に格納されて一旦保持された後、次サイクルにおいて前サイクルの値qi-1として論理回路１０５に入力される。また、論理回路１０５には、レジスタ１０３のpreRiもパス２−５を介して入力される。【００５１】
論理回路１０６および論理回路１０７には論理回路１０４によって決定されたqiが入力されるのに対して、論理回路１０５には、これらの論理回路１０６，１０７に入力されるqiよりも１つ前のサイクルのqi-1が入力される。【００５２】
論理回路１０５は、レジスタ１０３のpreRiおよびレジスタ１０２のqi-1を受け取り、以下の式（６）を演算してRiを出力する。【００５３】
Ri=preRi-qi-1^2      ・・・（６）【００５４】
論理回路１０５は、第１の部分剰余（preRi）とビット列（qi）とを用いて冪乗演算（qi-1 ^2）を含む第２演算（式（６））を行なうことで部分剰余（Ri）を算出する第３論理回路として機能する。【００５５】
論理回路１０５はパス２−９を介して論理回路１０７に接続されており、論理回路１０５の出力Riはこのパス２−９を介して論理回路１０７に入力される。【００５６】
論理回路１０７は、パス２−８を介して論理回路１０４に、パス２−４を介してレジスタ１０１に、パス２−９を介して論理回路１０５に、パス２−１１を介してレジスタ１０３に、それぞれ接続されている。【００５７】
論理回路１０７は、論理回路１０４から出力されたqiと、論理回路１０５から出力されるRiと、レジスタ１０１から読み出されたQiとに基づき、上記式（４）を演算してpreRi+1を出力する。この論理回路１０７の出力preRi+1はパス２−１１を介してレジスタ１０３に入力され、このレジスタ１０３の値を更新する。【００５８】
すなわち、論理回路１０７は、ビット列（qi）と部分剰余（Ri）とに基づき、部分剰余演算における冪乗演算（qi-1 ^2）以外の第１演算（式（４））を行なうことで第１の部分剰余（preRi）を算出する第２論理回路として機能する。  【００５９】
本開平演算回路１において、レジスタ１０３，パス２−６，論理回路１０４，パス２−８，論理回路１０７およびパス２−１１を連結するパス（ディレイ面でのクリティカルパス）に対して、論理回路１０５は、論理回路１０４と並列となるようレジスタ１０３と論理回路１０７との間に配置されている。また、論理回路１０５は、論理回路１０７の上流側位置において、当該論理回路１０７に対して直列に接続されている。【００６０】
そして、論理回路１０５は本開平演算回路１のディレイ面でのクリティカルパス（図１のｐ２参照）を除けて備えられ、当該クリティカルパスには含まれない。すなわち、本開平演算回路１において、qi^2の項の演算を行なう論理回路１０５はディレイ面でのクリティカルパスの外部に備えられる。【００６１】
本開平演算回路１においては、論理回路１０４〜１０７による演算を複数サイクル繰り返すことで、Qiがsqrt(x)に近づく。演算結果として必要な桁数のQiが求まるまで演算を繰り返し、その後Qiを演算結果として出力される。【００６２】
（Ｂ）動作
上述の如く構成された実施形態の一例としての開平演算回路１の処理を、図２に示すフローチャート（ステップＡ１〜Ａ７）に従って説明する。【００６３】
ステップＡ１において、レジスタ１０１〜１０３の初期化が行なわれる。レジスタ１０１〜１０３の初期化は、例えば、当該開平演算回路１の外部にある図示しない制御装置によって行なわれてもよい。【００６４】
各レジスタ１０１〜１０３の初期化により、レジスタ１０１のレジスタ値Qi=0，レジスタ１０２のレジスタ値qi-1=0，レジスタ１０３のレジスタ値preRi=xとなる。【００６５】
ステップＡ２では、処理対象の開平演算において必要な桁数のQiが求まるまで、ステップＡ７までの制御を繰り返し実施するループ処理を開始する。【００６６】
レジスタＱ（レジスタ１０１）の出力Qi，レジスタｐｒｅＲ（レジスタ１０３）の出力preRiと演算回数iとが論理回路Ａ（論理回路１０４）に入力される。【００６７】
ステップＡ３では、論理回路Ａが、入力されたQi，preRiおよびiに基づき上記式（５）を演算してqiを決定し、出力する。【００６８】
レジスタＱ（レジスタ１０１）の出力Qiおよび論理回路Ａ（論理回路１０４）の出力qiが論理回路Ｂ（１０６）に入力される。【００６９】
ステップＡ４では、論理回路Ｂが、Qi，qiに基づき、Qi+1=Qi+qiを演算してQi+1を出力する。出力されたQi+1はレジスタＱに入力され、このレジスタＱのレジスタ値を更新する。【００７０】
一方、論理回路Ａによって決定されたqiは、レジスタｑ（レジスタ１０２）に一旦保持された後、次サイクルにqi-1として論理回路Ｃ２（論理回路１０５）に入力される。また、レジスタｐｒｅＲ（レジスタ１０３）の出力preRiも論理回路Ｃ２（論理回路１０５）に入力される。【００７１】
ステップＡ５において、論理回路Ｃ２は、preRiとqi-1とに基づき、式（６）を演算してRiを出力する。【００７２】
論理回路Ｃ２から出力されたRiと、論理回路Ａから出力されたqiと、レジスタＱの出力Qiとは、論理回路Ｃ１（論理回路１０７）に入力される。【００７３】
ステップＡ６において、論理回路１０７は、qiとRiとQiとに基づき、上記式（４）を演算してpreRi+1を出力する。【００７４】
その後、制御がステップＡ７に進む。ステップＡ７では、ステップＡ２に対応するループ端処理が実施される。ここで、必要な桁数のQiが求まると、本開平演算回路１による演算処理が終了する。算出されたQiは後段の処理部（例えば、他の演算回路等）に出力される。【００７５】
（Ｃ）効果
このように、一実施形態の一例としての開平演算回路１によれば、論理回路１０５が式（６）を演算することで、qi^2の項の演算を行なう。これにより、論理回路１０７においてqi^2の演算を行なう必要がなく、論理回路１０７の論理段数を低減することができる。これにより、論理回路１０７におけるディレイを低減させることができる。【００７６】
本開平演算回路１においては、レジスタ１０３から論理回路１０４，１０７を介してレジスタ１０３に戻るパスｐ２（図１参照）が、ディレイ面でのクリティカルパスとなる。【００７７】
そして、論理回路１０７は論理段数を少なく構成することができ、ディレイを短縮することができるので、演算回路１のクリティカルパスｐ２の総ディレイを短くすることができる。すなわち、図８に例示した従来の開平演算回路のクリティカルパスｐ１に比べて、本開平演算回路１のクリティカルパスｐ２の総ディレイを短くすることができ、クリティカルパスの改善を実現することができる。【００７８】
本開平演算回路１は、ＳＲＴ法や非回復法に基づく開平演算を行なうに際して、クリティカルパスのディレイを改善することができる。【００７９】
（ＩＩ）演算回路への適用
（Ａ）構成
上述した実施形態の開平演算回路１を浮動小数点数の入出力に対応させた構成を、図３に例示する。【００８０】
なお、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。また、図３中においては、図１に示したパスの符号の図示を省略している。【００８１】
図３に例示する演算回路１１は、図１に例示した開平演算回路１に加えて、前処理回路２０１，１／２倍回路２０２，レジスタ２０３およびセレクタ２０４を備える。【００８２】
この図３に例示する演算回路１１は、浮動小数点数inに対し、inの平方根の浮動小数点数outを求める。【００８３】
in，outは、以下の式（７），式（８）に示すような指数部iexp，oexpおよび仮数部ifrac，ofracとを備えるものとする。iexp，oexpは整数であり、ifrac，ofracは1以上2未満の実数である。【００８４】
in  = 2^iexp * ifrac                  ・・・（７）
out = 2^oexp * ofrac                ・・・（８）【００８５】
本開平演算回路１においては、iexp，ifracに基づいて補正後指数部eおよび補正後仮数部xを生成し、これらのe，xを基づいてoutを生成する。inとe，xとは、以下の式（９）の関係を有する。【００８６】
in = 2^e * x                                 ・・・（９）
e，xは、以下の式（１０），式（１１）により決められる。【００８７】
iexpが偶数のとき、e = iexp    , x = ifrac ・・・（１０）
iexpが奇数のとき、e = iexp - 1 , x = ifrac * 2    ・・・（１１）【００８８】
上記式（９）より、inの平方根は以下の式（１２）で求められる。ただし、eh=e/2。【００８９】
sqrt(in) = 2^eh * sqrt(x)      ・・・（１２）  【００９０】
上記式（１０），式（１１）よりeは必ず偶数であるため、ehは整数となる。また、xは1以上4未満の実数であるため、sqrt(x)は1以上2未満の実数となる。したがって上記式（８）と式（１２）とを比べると、oexp=eh，ofrac=sqrt(x)であり、ehとsqrt(x)とを演算すればoutが求まることが分かる。【００９１】
前処理回路２０１には、in（iexp，ifrac）が入力される。前処理回路２０１は、入力されたin（iexp，ifrac）を用いて、上記式（１０），式（１１）に基づき補正後指数部eおよび補正後仮数部xを算出（生成）する。【００９２】
算出されたeは１／２倍回路２０２に入力される。１／２倍回路２０２は、入力されたeを1/2倍してehとして出力する（eh=e/2）。なお、１／２倍回路２０２は、eを1bit右シフトすることでeの1/2倍を実現する。出力されたehはレジスタ２０３に入力される。レジスタ２０３から読み出されたレジスタ値ehはoexpとして出力される。【００９３】
レジスタ２０３から読み出されたレジスタ値ehをレジスタ２０３の出力ehといってもよい。【００９４】
前処理回路２０１から出力されたxはセレクタ２０４に入力される。セレクタ２０４は、レジスタ１０１の初期化時のみ前処理回路２０１の出力xを選択し、それ以外は論理回路１０６の出力を選択して出力する。【００９５】
すなわち、前処理回路２０１から出力されたxは、セレクタ２０４を通過した後レジスタ１０１に入力される。【００９６】
xがレジスタ１０１に入力された後に、開平演算回路１はsqrt(x)を演算する。なお、開平演算回路１によるsqrt(x)の演算は、図１および図２を用いて上述した処理と同様であるので、その説明は省略する。開平演算回路１によるsqrt(x)の演算が完了するとQiがsqrt(x)となり、Qiがofracとして出力される。【００９７】
（Ｂ）動作
上述の如く構成された実施形態の一例としての開平演算回路１を備える演算回路１１の処理を、図４に示すフローチャート（ステップＡ１〜Ａ７，Ｂ１〜Ｂ３）に従って説明する。【００９８】
なお、図中、既述の符号と同一の符号を付した処理は同様の処理を示しているので、その説明は省略する。【００９９】
演算開始により、例えば、当該開平演算回路１の外部にある図示しない制御装置からin（iexp，ifrac）が入力される。【０１００】
ステップＢ１において、前処理回路２０１は、入力されたin（iexp，ifrac）を用いて、上記式（１０），式（１１）に基づき補正後指数部eおよび補正後仮数部xを算出（生成）する。算出されたeは１／２倍回路２０２に入力される。【０１０１】
ステップＢ２において、１／２倍回路２０２は、入力されたeを1/2倍してehとして出力する（eh=e/2）。その後、処理はステップＢ３に移行する。【０１０２】
また、前処理回路２０１によって算出されたxはセレクタ２０４に入力される。レジスタ１０１の初期化時において、セレクタ２０４は、前処理回路２０１の出力xをレジスタ１０１に入力させる。その後、ステップＡ１に移行する。ステップＡ１〜Ａ７の処理の完了後には、ステップＢ３に移行する。【０１０３】
ステップＢ３において、Qiがofracとして出力され、ehがoexpとして出力される。すなわち、out(oexp,ofrac)が出力され、処理が終了する。outは後段の処理部（例えば、他の演算回路等）に出力される。【０１０４】
（Ｃ）効果
このように、演算回路１１によれば、開平演算回路１を備えることにより、上述した一実施形態と同様の作用効果を奏することができる。すなわち、ＳＲＴ法や非回復法に基づく開平演算を行なうに際して、クリティカルパスのディレイを改善することができる。【０１０５】
（ＩＩＩ）演算回路への適用の変形例
（Ａ）構成
図５は図３に例示した演算回路１１の変形例としての演算回路１１ａの構成を例示する図である。なお、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。また、図５中においては、図１に示したパスの符号の図示を省略している。【０１０６】
演算回路１１ａは、図３に例示した演算回路の解導出を高速化する構成を有する。【０１０７】
図１に例示した開平演算回路１においては、iが小さいうちはRiの収束が遅い問題の回避策として、式（５）のようにiが閾値k以下のうちはqiの桁を1ビットずつ下げ（解を1ビットずつ導出）、iが閾値kよりも大きくなってから2ビットずつ下げている（解を2ビットずつ導出）。【０１０８】
すなわち、図１に例示した開平演算回路１においては、iが閾値k以下のうちは解を1サイクルあたり1ビット求め、iが閾値kよりも大きくなってから1サイクルあたり2ビット求める。【０１０９】
これに対して、本演算回路１１ａにおいては、iに関わらず常に1サイクルあたり2ビット求める。これにより、本演算回路１１ａにおいては解導出のレイテンシを短くすることができる。【０１１０】
演算回路１１ａは、図５に示すように、図３に例示した演算回路１１に加えて初期値決定回路２０５およびセレクタ２０６を備える。【０１１１】
前処理回路２０１から出力された補正後仮数部xは初期値決定回路２０５に入力される。初期値決定回路２０５は、前処理回路２０１から入力されたxに基づいて、部分商の初期値Q0を決定する。【０１１２】
図６は実施形態の変形例としての演算回路１１ａの初期値決定回路２０５による初期値の決定論理を例示する図である。【０１１３】
この図６においては、入力x（補正後仮数部）と出力Q0（部分商の初期値）とを対応付けて構成されている。なお、図６に示す例においては、入力xおよび出力Q0は２進数で表されている。【０１１４】
初期値決定回路２０５は、例えば、この図６に例示する決定論理を参照し、入力されたxの値に対応する出力Q0を決定する。例えば、入力x = 10.10である場合には、初期値決定回路２０５は、出力Q0 = 1.1001を決定し、出力する。【０１１５】
本演算回路１１においては、xの上位ビットに応じてQiの初期値Q0を細かく分け、初期化時点でQiの上位数ビットを定めておく。これによりqiの決定を前記上位数ビットよりも下のビットから始めることができる。【０１１６】
qiを下位のビットから始めるため、上記の式（４）においてiが小さい時もqi^2の項が相対的に小さく、iが小さいうちはRiの収束が遅いという前述の問題が回避可能となり、かつiに関わらず解を2ビットずつ導出することが可能となる。【０１１７】
なお、図６に例示する決定論理に相当する機能は、例えば、図示しない記憶装置（レジスタ等）に格納された情報によって実現してもよく、種々変形して実施することができる。【０１１８】
また、初期値決定回路２０５が参照する決定論理は図６に例示するものに限定されるものでなく適宜変更して実施することができる。【０１１９】
初期値決定回路２０５から出力されるQ0はセレクタ２０４に入力される。【０１２０】
また、初期値決定回路２０５は、xおよびQ0に基づいて以下の式（１３）を演算することで、preR0を決定（生成）する。【０１２１】
preR0= x - Q0^2     ・・・式（１３）【０１２２】
初期値決定回路２０５によって決定されたpreR0は、セレクタ２０６を介してレジスタ１０３（レジスタｐｒｅＲ）に入力される。【０１２３】
初期値決定回路２０５から出力されたQ0はセレクタ２０４に入力される。セレクタ２０４は、レジスタ１０１の初期化時のみ初期値決定回路２０５の出力Q0を選択し、それ以外は論理回路１０６の出力を選択して出力する。【０１２４】
セレクタ２０６は、レジスタ１０３の初期化時のみ初期値決定回路２０５の出力preR0を選び、それ以外は論理回路１０７の出力を選択して出力する。【０１２５】
（Ｂ）動作
上述の如く構成された実施形態の変形例としての演算回路１１ａの処理を、図７に示すフローチャート（ステップＡ１〜Ａ７，Ｂ１〜Ｂ３，Ｃ１）に従って説明する。【０１２６】
なお、図中、既述の符号と同一の符号を付した処理は同様の処理を示しているので、その説明は省略する。【０１２７】
演算開始により、例えば、当該開平演算回路１の外部にある図示しない制御装置からin（iexp，ifrac）が入力される。【０１２８】
ステップＢ１において、前処理回路２０１は、入力されたin（iexp，ifrac）を用いて、上記式（１０），式（１１）に基づき補正後指数部eおよび補正後仮数部xを算出（生成）する。算出されたeは１／２倍回路２０２に入力される。【０１２９】
前処理回路２０１によって算出されたxは初期値決定回路２０５に入力される。初期値決定回路２０５は、前処理回路２０１から入力されたxに基づいて、部分商の初期値Q0を決定する。【０１３０】
ステップＣ１において、初期値決定回路２０５は、xおよびQ0に基づいて上記式（１３）を演算することで、preR0を決定（生成）する。【０１３１】
レジスタ１０１の初期化時において、セレクタ２０４は、初期値決定回路２０５の出力Q0をレジスタ１０１に入力させる。また、レジスタ１０３の初期化時において、セレクタ２０６は、初期値決定回路２０５の出力preR0をレジスタ１０３に入力させる。その後、ステップＡ１に移行する。【０１３２】
ステップＡ１〜Ａ７の処理の完了後には、ステップＢ３に移行する。ステップＢ３において、Qiがofracとして出力され、ehがoexpとして出力される。すなわち、out(oexp,ofrac)が出力され、処理が終了する。outは後段の処理部（例えば、他の演算回路等）に出力される。【０１３３】
（Ｃ）効果
このように、本変形例の演算回路１１ａによれば、図３に例示した適用例と同様の作用効果を得ることができる。【０１３４】
また、図３に例示する演算回路１１においては、iが小さいうちは解を1サイクルあたり1ビット求め、iが大きくなってから1サイクルあたり2ビット求めるのに対し、本変形例の演算回路１１ａにおいては、iに関わらず常に1サイクルあたり2ビット求める。これにより、本変形例の演算回路１１ａにおいては、解導出のレイテンシを短くすることができる。【０１３５】
（ＩＶ）その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。【０１３６】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。例えば、上述した実施形態においては、ＳＲＴ法や非回復法を用いる場合について説明しているが、これに限定されるものではなく、適宜変更して実施してもよい。
【符号の説明】
【０１３７】
１    開平演算回路
２−１〜２−１２    パス
１１，１１ａ    演算回路
１０１〜１０３，２０３    レジスタ
１０４〜１０７    論理回路
２０１    前処理回路
２０２    １／２倍回路
２０４，２０６    セレクタ
２０５    初期値決定回路
【図１】
2020079802.tif 000004
【図２】
2020079802.tif 000005
【図３】
2020079802.tif 000006
【図４】
2020079802.tif 000007
【図５】
2020079802.tif 000008
【図６】
2020079802.tif 000009
【図７】
2020079802.tif 000010
【図８】
2020079802.tif 000011
【手続補正書】
【提出日】令和3年3月11日(2021.3.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
被開平数の平方根を計算する演算処理装置であって、
商の一部のビット列を決定する第１論理回路と、
前記ビット列と部分剰余とに基づき、部分剰余演算における冪乗演算以外の第１演算を行なうことで第１の部分剰余を算出する第２論理回路と、
前記第１の部分剰余と前記ビット列とを用いて冪乗演算を含む第２演算を行なうことで前記部分剰余を算出する第３論理回路と
を備えることを特徴とする演算処理装置。
【請求項２】
前記第１論理回路によって決定された前記ビット列を格納する第１レジスタを備え、
前記第３論理回路が、演算繰り返しにおける前サイクルにおいて前記第１レジスタに格納された前記ビット列を用いて前記部分剰余を算出する
ことを特徴とする、請求の範囲第１項記載の演算処理装置。
【請求項３】
前記第２論理回路によって算出された前記第１の部分剰余を格納する第２レジスタを備え、
前記第１論理回路が、前記第２レジスタに前サイクルにおいて格納された前記第１の部分剰余を用いて前記ビット列を算出する
ことを特徴とする、請求の範囲第１項又は第２項記載の演算処理装置。
【請求項４】
前記第１論理回路が、
演算繰り返し回数が所定の閾値以下の場合には解を１サイクルあたり第１のビット数ずつ求め、前記演算繰り返し回数が前記閾値よりも大きい場合には解を１サイクルあたり、前記第１のビット数よりも大きい第２のビット数ずつ求める
ことを特徴とする、請求の範囲第１〜３項のいずれか１項に記載の演算処理装置。
【請求項５】
被開平数の平方根を計算する演算処理装置において、
第１論理回路が、商の一部のビット列を決定する処理と、
第２論理回路が、前記ビット列と部分剰余とに基づき、部分剰余演算における冪乗演算以外の第１演算を行なうことで第１の部分剰余を算出する処理と、
第３論理回路が、前記第１の部分剰余と前記ビット列とを用いて冪乗演算を含む第２演算を行なうことで前記部分剰余を算出する処理と
を備えることを特徴とする演算処理装置の制御方法。
【国際調査報告】
2020079802.tif 000012
2020079802.tif 000013