(57)【要約】  指数演算または対数演算を行なう演算回路１０７，１１４と、演算回路１０７，１１４による演算繰り返し回数が閾値以下の場合に、１サイクル当たりに演算回路１０７，１１４が求めるビット数を第１数に設定し、演算繰り返し回数が閾値よりも多い場合に、１サイクル当たりに演算回路１０７，１１４が求めるビット数を、第１数よりも多い第２数に設定する設定部１０６，１０８，１０９とを備えることで、回路規模を大きくすることなく指数演算または対数演算において解に収束できるようにする。
2020090025.tif 000002
【特許請求の範囲】
【請求項１】
指数演算または対数演算を行なう演算回路と、
前記演算回路による演算繰り返し回数が閾値以下の場合に、１サイクル当たりに前記演算回路が求めるビット数を第１数に設定し、前記演算繰り返し回数が前記閾値よりも多い場合に、１サイクル当たりに前記演算回路が求めるビット数を、前記第１数よりも多い第２数に設定する設定部と
を備えること特徴とする、演算処理装置。
【請求項２】
前記設定部が、処理対象データのビット列に対して右シフトを行なう右シフト回路であって、
前記右シフト回路が、前記処理対象データに対して、前記演算繰り返し回数に応じた数のビットシフトを行なう
ことを特徴とする、請求項１に記載の演算処理装置。
【請求項３】
前記演算回路が、指数演算を実施する指数演算回路であり、
演算繰り返し回数（i）が閾値以下の場合に、Li+1 = Li - log(1 + n × 2^-i)を演算し、
前記演算繰り返し回数（i）が前記閾値よりも多い場合に、Li+1 = Li- log(1 + n × 2^-(2i-k))を演算する
ことを特徴とする、請求項１または２記載の演算処理装置。
【請求項４】
前記演算回路が、対数演算を実施する指数演算回路であり、  
演算繰り返し回数（i）が閾値以下の場合に、Ei+1 = Ei + Ei× n × 2^-iを演算し、
前記演算繰り返し回数（i）が前記閾値よりも多い場合に、Ei+1 = Ei+ Ei × n × 2^-(2i-k)を演算する
ことを特徴とする、請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
指数演算または対数演算を行なう演算回路を備える演算処理装置において、
前記演算回路による演算繰り返し回数を確認する処理と、
前記演算回路による前記演算繰り返し回数が閾値以下の場合に、１サイクル当たりに前記演算回路が求めるビット数を第１数に設定し、前記演算繰り返し回数が前記閾値よりも多い場合に、１サイクル当たりに前記演算回路が求めるビット数を、前記第１数よりも多い第２数に設定する処理
とを備えること特徴とする、演算処理装置の制御方法。
【請求項６】
処理対象データのビット列に対して右シフトを行なう右シフト回路が、前記処理対象データに対して、前記演算繰り返し回数に応じた数のビットシフトを行なう
ことを特徴とする、請求項５に記載の演算処理装置の制御方法。
【請求項７】
前記演算回路が、指数演算を実施する指数演算回路であり、
演算繰り返し回数（i）が閾値以下の場合に、Li+1 = Li - log(1 + n × 2^-i)を演算し、
前記演算繰り返し回数（i）が前記閾値よりも多い場合に、Li+1 = Li- log(1 + n × 2^-(2i-k))を演算する
ことを特徴とする、請求項５または６記載の演算処理装置の制御方法。
【請求項８】
前記演算回路が、対数演算を実施する指数演算回路であり、  
演算繰り返し回数（i）が閾値以下の場合に、Ei+1 = Ei + Ei× n × 2^-iを演算し、
前記演算繰り返し回数（i）が前記閾値よりも多いの場合に、Ei+1 = Ei+ Ei × n × 2^-(2i-k)を演算する
ことを特徴とする、請求項５〜７のいずれか１項に記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
図８は従来の演算処理回路５００の構成を示す図である。
この図８に示す演算処理回路５００は、レジスタ５０１〜５０４，判定回路５０５，ＣＳＡ（Carry-Save Adder：桁上げ保存加算器）５０６，５０７，Log Table回路５０８，右シフト回路（ＲＳＦＴ）５０９，５１０および演算回路５１１〜５１４を備える。【０００３】
演算処理回路５００は指数（ＥＸＰ）演算および対数（ＬＯＧ）演算を行なう演算回路である。例えば、演算1回で商2bitを求めるradix-4のＳＴＬ（Sequential Table Lookup）法を用いる。【０００４】
演算処理回路５００は、指数演算において、ｘを入力とし、exp(x)を求める。
Lはべき数の空間の変数であり、Eは指数の空間の変数である。また、iは演算の繰り返し回数である。【０００５】
Liの算出（Li演算）には、以下の式（１）を用いる。
Li+1= Li - log(1 + n × 2^-2i)      ・・・（１）【０００６】
また、Eiの算出（Ei演算）には、以下の式（２）を用いる。
Ei+1= Ei × (1 + n × 2^-2i)
=Ei+ Ei × n × 2^-2i    ・・・（２）【０００７】
ただし、n = -2, -1, 0, +1, +2であり、Liと0との大小関係および差分を判定し、Liが0に一番近づくようにnを選ぶ。【０００８】
なお、レジスタ５０１，５０２，５０３，５０４に格納される値（レジスタ値）を、それぞれLS，LC，ES，ECという場合がある。また、レジスタ５０１，５０２，５０３，５０４を、それぞれレジスタＬＳ，ＬＣ，ＥＳ，ＥＣという場合がある。【０００９】
演算処理回路５００においては、初期値をL1 = x，E1 = exp(0) = 1となるよう、レジスタ５０１〜５０４の初期化が行なわれる。【００１０】
なお、LS + LC = L1であり、例えば、LSとLCとのいずれか一方にxを設定し、他方に0を設定する。同様に、ES + EC =E1であり、ESとECとのいずれか一方に1を設定し、他方に0を設定する。【００１１】
演算処理回路５００においては、x = log(Ei) + Liを満たしつつ、演算を繰り返してLiを少しずつ0に近づけることで、Eiがexp(x)に近づく（Li=x→0、Ei=exp(0)→exp(x)）。【００１２】
すなわち、処理対象の指数演算においてiが予め規定された最大値（imax）に到達するまで、Liを算出するLi演算とEiを算出するEi演算とを繰り返し行なう。【００１３】
演算処理回路５００は、対数演算において、ｘを入力とし、log(x)を求める。
Lは対数の空間の変数であり、Eは真数の空間の変数である。またiは繰り返し演算の回数である。【００１４】
初期値をL1= log(1) = 0，E1 = xとし、x = Ei × exp(Li)を満たしつつ、演算を繰り返してEiを少しずつ1に近づけることで、Liがlog(x)に近づく（Ei=x→1、Li=log(1)→log(x)）。【００１５】
対数演算におけるLiおよびEiの演算方法（Li演算，Ei演算）は概ね指数演算と同様であるが、nの選び方は異なる。すなわち、Eiと1との大小関係および差分を判定し、Eiが1に一番近づくようにnを選ぶ。【００１６】
演算処理回路５００において、Log Table回路５０８およびＣＳＡ５０６が、指数演算または対数演算におけるLi演算を実現する。また、右シフト回路５０９，５１０，演算回路５１１〜５１４およびＣＳＡ５０７が、指数演算または対数演算におけるEi演算を実現する。【００１７】
指数演算を行なう場合、判定回路５０５は、Liに基づき、nを選択する。判定回路５０５は、Liと0との大小関係および差分を判定し、Liが0に一番近づくnの値を選択する。一方、対数演算を行なう場合、判定回路５０５は、Eiに基づき、nを選択する。判定回路505は、Eiと1との大小関係および差分を判定し、Eiが1に一番近づくnの値を選択する。選択されたnはLog Table回路５０８に出力される。【００１８】
Log Table回路５０８には、予め変数i, nに対応するlog(1+n*2^-2i)の値が設定されており、iと判定回路５０５から入力されるnとに応じたlog(1+n*2^-2i)の値をＣＳＡ５０６に出力する。【００１９】
ＣＳＡ５０６は、桁上を伝播させずにそのまま出力する加算器であり、上記式（１）を用いてLi演算（参照）を行なう。ＣＳＡ５０６の出力（演算結果）のうち部分和ビットの列は、レジスタ５０１に入力される。一方、ＣＳＡ５０６の出力（演算結果）のうち桁上げビットの列はレジスタ５０２に入力される。【００２０】
また、右シフト回路５０９，５１０，演算回路５１１〜５１４およびＣＳＡ５０７が、指数演算におけるEi演算（上記式（２）参照）を実現する。【００２１】
右シフト回路５０９，５１０は、レジスタ５０３，５０４から読み出された値ES，ECに対して2iビットの右シフト演算を行なうことで2^-2i倍算を実現する。これにより、上記式（２）の2^-2iの演算が実現される。なお、その後、演算回路５１１〜５１４によりEi×n×2^-2iの演算が実現される。【００２２】
演算回路５１１，５１２は、右シフト回路５０９，５１０から出力された値に対して、1倍（×1）演算または2倍（×2）演算を行なう。例えば、判定回路５０５において決定されたnが+2または-2である場合に、演算回路５１１，５１２は×2演算を行なう。一方、判定回路５０５において決定されたnが+1または-1である場合に、演算回路５１１，５１２は×1演算を行なう。【００２３】
演算回路５１３，５１４は、演算回路５１１，５１２から出力された値をスルー（+）または符号反転（-）して出力する。例えば、判定回路５０５において決定されたnが+2，+1，0のいずれかである場合に、演算回路５１３，５１４はスルー出力する。一方、判定回路５０５において決定されたnが-2または-1である場合に、演算回路５１３，５１４は符号反転して出力する。【００２４】
ＣＳＡ５０７は、桁上を伝播させずにそのまま出力する加算器であり、上記式（２）を用いてEi演算を行なう。ＣＳＡ５０７の出力（演算結果）のうち部分和ビットの列は、レジスタ５０３に入力される。一方、ＣＳＡ５０７の出力（演算結果）のうち桁上げビットの列はレジスタ５０４に入力される。【００２５】
演算処理回路５００においては、指数演算の結果としてレジスタ５０３，５０４の値Eiを出力し、対数演算の結果としてレジスタ５０１，５０２の値Liを出力する。【００２６】
しかしながら、このような従来の演算処理回路５００においては、指数演算を行なう場合に、Liが0から遠い時点では、1回の演算でEiがexp(x)に十分近づかず、結果として演算を繰り返してもEiがexp(x)に収束しないことがある。同様に、対数演算を行なう場合に、Eiが1から遠い時点では、1回の演算でLiがlog(x)に十分近づかず、結果として演算を繰り返してもLiがlog(x)に収束しないことがある。EiもしくはLiが解にある程度近い範囲にあることを想定しているのに対し、繰り返し回数（i）が少ない時点では、その範囲から外れる場合があるからである。【００２７】
すなわち、演算を繰り返しても指数演算のEiもしくは対数演算のLiが解に収束しない場合がある。【００２８】
図９は上述の如き演算処理回路５００による問題を解消するための従来の演算処理回路６００の構成を示す図である。【００２９】
この図９に示す演算処理回路６００においては、図８に示した演算処理回路５００の判定回路５０５に代えて判定回路６０１，1st_nテーブル回路６０２およびセレクタ６０３を備える。また、演算処理回路５００の演算回路５１１，５１２に代えて演算回路６０４，６０５を備えるとともに、Log Table回路５０８に代えてLog Table回路６０６を備える。その他の部分は図８の演算処理回路５００と同様に構成されている。【００３０】
なお、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。【００３１】
この図９に示す演算処理回路６００においては、演算1回目（i=1）だけnの選択論理を変更する。【００３２】
1st_nテーブル回路６０２および判定回路６０１の各出力がセレクタ６０３に入力される。【００３３】
1st_nテーブル回路６０２は、演算1回目（i=1）においてのみ参照される参照テーブル（lookup table）である。演算1回目（i=1）だけ、L1もしくはE1（つまり入力x）をインデックスとして1st_nテーブル回路６０２が参照され、セレクタ６０３は1st_n テーブル回路６０２の出力を選択して出力する。【００３４】
なお、演算2回目以降は、セレクタ６０３は判定回路６０１の出力を選択して出力する。また、判定回路６０１においては、図８に示した判定回路５０５に比べてnの選択肢に±3が追加されている。すなわち、判定回路６０１は、選択肢nとして、-3，-2，-1，0，+1，+2，+3を有する。【００３５】
セレクタ６０３の出力は、演算回路５１３，５１４，６０４，６０５およびLog Table回路６０６に入力される。【００３６】
Log Table回路６０６においては、Log Table回路５０８に比べて、エントリにn=-3，+3に対応する値を追加して備える。【００３７】
演算回路６０４，６０５は、それぞれ、×1 or ×2 or ×3回路であり、判定回路６０１から出力されるnに応じて、スルー（×1）または、左シフト（×2）または×3乗算のいずれかを行なう。
【先行技術文献】
【特許文献】
【００３８】
【特許文献１】特開平８−１２３７８５号公報
【特許文献２】特開平２−１７０２８５号公報
【発明の概要】
【発明が解決しようとする課題】
【００３９】
しかしながら、このような図９に示す従来の演算処理回路６００においては、1st_nテーブル回路６０２やセレクタ６０３，演算回路６０４，６０５を備えることで、回路規模が大きくなる。これにより、クリティカルパスの論理段数が多くなり、ディレイが大きくなるという課題がある。【００４０】
本発明は、このような課題に鑑み創案されたもので、回路規模を大きくすることなく指数演算または対数演算において解に収束できるようにすることを目的とする。
【課題を解決するための手段】
【００４１】
上記の目的を達成するために、この演算処理装置は、指数演算または対数演算を行なう演算回路と、前記演算回路による演算繰り返し回数が閾値以下の場合に、１サイクル当たりに前記演算回路が求めるビット数を第１数に設定し、前記演算繰り返し回数が前記閾値よりも多い場合に、１サイクル当たりに前記演算回路が求めるビット数を、前記第１数よりも多い第２数に設定する設定部とを備える。
【発明の効果】
【００４２】
回路規模を大きくすることなく指数演算または対数演算において解に収束できる。
【図面の簡単な説明】
【００４３】
【図１】実施形態の一例としての演算処理回路の構成を例示する図である。
【図２】実施形態の一例としての演算処理回路におけるLog Table回路のインデックスとエントリとの関係を例示する図である。
【図３】実施形態の一例としての演算処理回路における右シフト回路の回路構成を例示する図である。
【図４】図３に例示した右シフト回路のセレクタの切り替えルールを例示する図である。
【図５】実施形態の一例としての演算処理回路の処理の概要を説明するためのフローチャートである。
【図６】実施形態の一例としての演算処理回路における演算処理を説明するためのフローチャートである。
【図７】実施形態の一例としての演算処理回路をプロセッサに実装する構成例を示す図である。
【図８】従来の演算処理回路の構成を示す図である。
【図９】従来の演算処理回路の構成を示す図である。
【発明を実施するための形態】
【００４４】
以下、図面を参照して本演算処理装置および演算処理装置の制御方法に係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００４５】
図１は実施形態の一例としての演算処理回路１の構成を例示する図である。
【００４６】
演算処理回路（演算器）１は、例えば情報処理装置のプロセッサ（演算処理装置）に備えられ、演算を実現する。図１に示す演算処理回路１は、指数（ＥＸＰ）演算および対数（ＬＯＧ）演算の２種類の演算を実現する演算処理回路である。すなわち、本演算処理回路１は、指数演算および対数演算のいずれかを選択的に実現する。
【００４７】
［指数演算］
指数演算においては、例えば、演算1回で商2bitを求めるradix4のＳＴＬ（Sequential Table Lookup）法を用いてもよい。
例えば、ｘを入力とし、exp(x)を求める。
Lはべき数の空間の変数であり、Eは指数の空間の変数である。また、iは演算の繰り返し回数である。
【００４８】
初期値をL1= x，E1 = exp(0) = 1とし、x = log(Ei) + Liを満たしつつ、演算を繰り返してLiを少しずつ0に近づけることで、Eiがexp(x)に近づく（Li=x→0、Ei=exp(0)→exp(x)）。
【００４９】
［対数演算］
対数演算にＳＴＬ法を用いてもよい。
例えば、ｘを入力とし、log(x)を求める。
【００５０】
Lは対数の空間の変数であり、Eは真数の空間の変数である。またiは繰り返し演算の回数である。
【００５１】
初期値をL1= log(1) = 0，E1 = xとし、x = Ei × exp(Li)を満たしつつ、演算を繰り返してEiを少しずつ1に近づけることで、Liがlog(x)に近づく（Ei=x→1、Li=log(1)→log(x)）。
【００５２】
対数演算におけるLiおよびEiの演算方法（Li演算，Ei演算）は概ね指数演算と同様であるが、nの選び方は異なる。すなわち、Eiと1との大小関係および差分を判定し、Eiが1に一番近づくようにnを選ぶ。
【００５３】
（Ａ）構成
図１に示す演算処理回路１は、レジスタ１０１〜１０４，判定回路１０５，ＣＳＡ１０７，１１４，Log Table回路１０６，右シフト回路（ＲＳＦＴ２）１０８，１０９および演算回路１１０〜１１３を備える。
【００５４】
以下、レジスタ１０１をレジスタＬＳと表す場合がある。同様に、レジスタ１０２をレジスタＬＣと表す場合があり、レジスタ１０３をレジスタＥＳと表す場合があり、レジスタ１０４をレジスタＥＣと表す場合がある。
【００５５】
レジスタ１０１は、判定回路１０５およびＣＳＡ１０７にそれぞれ接続されている。レジスタ１０１には、後述するＣＳＡ１０７によるLi演算の結果（sum）が格納される。すなわち、レジスタ１０１には、演算処理の過程でＣＳＡ１０７によって生成された演算途中値が格納される。
【００５６】
また、レジスタ１０１から読み出されたレジスタ値Liは、判定回路１０５およびＣＳＡ１０７のそれぞれに入力される。
【００５７】
レジスタ１０２は、判定回路１０５およびＣＳＡ１０７にそれぞれ接続されている。レジスタ１０２にＣＳＡ１０７によるLi演算の結果（carry）が格納される。すなわち、レジスタ１０２には、演算処理の過程でＣＳＡ１０７によって生成された演算途中値が格納される。
【００５８】
レジスタ１０２から読み出されたレジスタ値Liは判定回路１０５およびＣＳＡ１０７のそれぞれに入力される。
【００５９】
Log Table回路１０６およびＣＳＡ１０７が、指数演算または対数演算におけるLi演算を実現する。右シフト回路１０８，１０９，演算回路１１０〜１１３およびＣＳＡ１１４が、指数演算または対数演算におけるEi演算を実現する。
【００６０】
ここで、本演算処理回路１においては、繰り返し回数（i）が少ない時点、すなわちiが閾値k以下の時点では１サイクルあたりに求めるビット数（第１数）を少なくする（例えば、１回）。そして、繰り返し回数（i）が閾値kよりも大きくなった以降は１サイクルあたりに求めるビット数（第２数）を増やす（例えば、２回以上）。第２数は第１数よりも多くする。
【００６１】
具体的には、例えば、Liの算出（Li演算）およびEiの算出（Ei演算）には、以下の式（３）を用いる。
【数１】
2020090025.tif 000003
【００６２】
なお、n = -2, -1, 0, +1, +2である。
本実施形態においては、i≦kのときには１サイクルあたりに求めるビット数（第１数）は１であり、i＞kのときには１サイクルあたりに求めるビット数（第２数）は２である。
【００６３】
指数演算を行なう場合、判定回路１０５は、Liに基づき、nを選択する。判定回路１０５は、Liと0との大小関係および差分を判定し、Liが0に一番近づくnの値を選択する。対数演算を行なう場合、判定回路１０５は、Eiに基づき、nを選択する。判定回路１０５は、Eiと1との大小関係および差分を判定し、Eiが1に一番近づくnの値を選択する。
【００６４】
判定回路１０５によって決定されたnの値は、演算回路１１０〜１１３およびLog Table回路１０６に入力される。
【００６５】
Log Table回路１０６は、log(1+n*2^-A)の値を出力する。ここで、i≦kのとき A=iであり、i＞kのときA=2i-kである。
【００６６】
Log Table回路１０６には、変数であるi, nに対応するlog(1+n*2^-A)の値が予め設定されており、iと判定回路１０５から入力されるnとに応じたlog(1+n*2^-A)の値を出力する。
【００６７】
すなわち、Log Table回路１０６は、インデックスとしてiおよびnを有し、エントリとしてlog(1+n×2^-i)やlog(1+n×2^-(2i-k))の各値を有する。
【００６８】
図２は実施形態の一例としての演算処理回路１におけるLog Table回路１０６のインデックスとエントリとの関係を例示する図である。
【００６９】
この図２においては、1≦i≦9であり、k=3の例について示す。また、図２中においては、便宜上、各エントリをlogを冠した対数の形式で示しているが、実際には各エントリには対数を計算した数値が保持される。また、図２中において“don't care”が示された箇所は選択されることがない。
【００７０】
Log Table回路１０６は、入力されたiおよびnに対応するエントリの値をＣＳＡ１０７に出力する。
【００７１】
なお、Log Table回路１０６は、図２に例示するようなインデックスとエントリとを対応付けた情報を図示しない記憶装置に格納し、iおよびnが入力された場合に、この情報を、入力されたi，nをインデックスとして参照して、対応するエントリの値を取得し、出力してもよい。
【００７２】
また、Log Table回路１０６は、図２に例示するような情報を制御ユニット１０等から取得してもよい。
【００７３】
ＣＳＡ１０７は、３入力−２出力（3 in - 2 out）の桁上げ保存加算器であり、レジスタ１０１，１０２およびLog Table回路１０６から各出力が入力される。また、このＣＳＡ１０７の出力（演算結果）のうち、部分和ビットの列はレジスタ１０１に入力される。一方、ＣＳＡ１０７の出力（演算結果）のうち、桁上げビットの列はレジスタ１０２に入力される。
【００７４】
ＣＳＡ１０７は、Li+1の演算（Li演算）を行なう。ＣＳＡ１０７は、Log Table回路１０６から出力されたlog(1+n*2^-A)の値を用いて、上記式（３）に基づきLiを算出する。
【００７５】
レジスタ１０３は、判定回路１０５，右シフト回路１０８およびＣＳＡ１１４にそれぞれ接続されており、このレジスタ１０３に後述するＣＳＡ１１４によるEi演算の結果（sum）が格納される。すなわち、レジスタ１０３には、演算処理の過程でＣＳＡ１１４によって生成された演算途中値が格納される。
【００７６】
レジスタ１０３から読み出されたレジスタ値Eiは、判定回路１０５，右シフト回路１０８およびＣＳＡ１１４のそれぞれに入力される。
【００７７】
レジスタ１０４は、判定回路１０５，右シフト回路１０９およびＣＳＡ１１４にそれぞれ接続されている。このレジスタ１０４にＣＳＡ１１４によるEi演算の結果（carry）が格納される。すなわち、レジスタ１０４には、演算処理の過程でＣＳＡ１１４によって生成された演算途中値が格納される。
【００７８】
レジスタ１０４から読み出されたレジスタ値Eiは、判定回路１０５，右シフト回路１０９およびＣＳＡ１１４のそれぞれに入力される。
【００７９】
ＣＳＡ１１４は、４入力−２出力（4 in - 2 out）の桁上げ保存加算器であり、レジスタ１０３，１０４および演算回路１１２，１１３からの各出力が入力される。
【００８０】
ＣＳＡ１１４は、指数演算または対数演算に用いられる。ＣＳＡ１１４は、Ei+1の演算を行なう。ＣＳＡ１１４は、レジスタ１０３，１０４および演算回路１１２，１１３のそれぞれから出力された値を用いて、上記式（３）に基づきEiを算出する。
【００８１】
ＣＳＡ１１４の出力（演算結果）のうち部分和ビットの列は、レジスタ１０３に入力される。一方、ＣＳＡ１１４の出力（演算結果）のうち桁上げビットの列はレジスタ１０４に入力される。
【００８２】
右シフト回路１０８，１０９は、処理対象データのビット列に対して右シフトを行なうものであり、処理対象データに対して、演算繰り返し回数iに応じた数のビットシフトを行なう。右シフト回路１０８は、レジスタ１０３のレジスタ出力ESに対して、また、右シフト回路１０９は、レジスタ１０４のレジスタ出力ECに対して、それぞれ右シフト演算を行なうことで、Ei×2^-iの演算またはEi×2^-(2i-k)の演算を実現する。
【００８３】
右シフト回路１０８，１０９は、i≦kのとき Ei×2^-iの演算を行ない、i＞kのときEi×2^-(2i-k)の演算を行なう。
【００８４】
右シフト回路１０８，１０９は、iだけEiを右シフトすることでEi×2^-iの演算を実現し、2i-kだけEiを右シフトすることでEi×2^-(2i-k)の演算を実現する。なお、右シフト回路１０８，１０９は互いに同様の構成を有する。
【００８５】
図３は実施形態の一例としての演算処理回路１における右シフト回路１０８，１０９の回路構成を例示する図、図４は図３に例示した右シフト回路１０８，１０９のセレクタ１０８１の切り替えルールを例示する図である。
【００８６】
右シフト回路１０８，１０９は図４に例示する切り替えルールに従って各セレクタ１０８１による選択出力を行なうことで、i≦kの場合にEi×2^-iの演算結果の出力を行ない、i＞kの場合にEi×2^-(2i-k)の演算結果の出力を実現する。
【００８７】
図３および図４においてはデータ幅が16bitの右シフト回路１０８，１０９を例示しており、また、k=3の場合について示すものとする。
【００８８】
D[15:0]は、シフト対象のデータを示し、R[15:0]はシフト後のデータを示す。なお、[15]は符号ビットである。また、iは繰り返し演算の回数である。
【００８９】
右シフト回路１０８，１０９は、Rの各ビット（R[0]〜R[15]）に対し、Dを入力とするセレクタ１０８１をそれぞれ備える。セレクタ１０８１は、図４に例示する切り替えルールを参照してiに応じた選択および出力を行なう。セレクタ１８０１の入力数はiのとり得る数（図４に示す例では9）である。
【００９０】
図４に例示する切り替えルールにおいて、例えばR[0]は、i≦3の場合にはシフト量がiのデータが出力データとして選択され、i≧4の場合にはシフト量が2i-kのデータが出力データとして選択されている。すなわち、右シフト回路１０８，１０９においては、閾値k（図４に示す例ではk=3）を境にシフト量が変更され、i≦3の場合にEi×2^-iの演算によりシフト量=iビットとなり、i＞kの場合にEi×2^-(2i-k)の演算によりシフト量=2i-kビットとなる。
【００９１】
このように、右シフト回路１０８，１０９は、処理対象データに対して、演算繰り返し回数iに応じた数のビットシフトを行なう。入力D[15:0]がiビット右シフトしたものがR[15:0]となる。
【００９２】
演算回路１１０，１１１は、入力された値に対して、1倍（×1）演算または2倍（×2）演算を行なう。演算回路１１０，１１１は、入力された値をスルーすることで1倍（×1）演算を実現し、入力されたレジスタ値を1bit左シフトすることで2倍（×2）演算を実現する。
【００９３】
例えば、判定回路１０５において決定されたnが+2または-2である場合に、演算回路１１０，１１１は×2演算を行なう。一方、判定回路１０５において決定されたnが+1または-1である場合に、演算回路１１０，１１１は×1演算を行なう。
【００９４】
演算回路１１０による演算結果は演算回路１１２に入力され、演算回路１１１による演算結果は演算回路１１３に入力される。
【００９５】
演算回路１１２，１１３は、入力された値をスルー（+）または符号反転（-）して出力する。演算回路１１２，１１３には、判定回路１０５からの出力が入力される。演算回路１１２，１１３は、判定回路１０５において決定されたnの符号に応じた符号を選択して設定する。
【００９６】
制御ユニット１０は本演算処理回路１における演算処理を制御する。制御ユニット１０は、プログラムからの指示で動作する。
【００９７】
制御ユニット１０は、命令デコーダとしての機能を備え、図示しない命令レジスタに読み込まれた命令の内容を解読し、本演算処理回路１を制御する。
【００９８】
メモリ１１は、例えばＲＡＭ（Random Access Memory）である。メモリ１１には、例えば、各レジスタ１０１〜１０４の初期値が格納されている。初期値は演算処理の種類（指数演算および対数演算）に応じて、それぞれ備えられている。
【００９９】
制御ユニット１０は、本演算処理回路１における演算処理の開始時に、各レジスタ１０１〜１０４の初期化を行なう。制御ユニット１０は本演算処理回路１において実行する演算種類に応じた初期値をメモリ１１から読み出し、各レジスタ１０１〜１０４に格納することで初期化を行なってもよい。
【０１００】
また、制御ユニット１０は、演算処理の結果を格納するレジスタ１０１〜１０４から演算結果を読み出し、出力させる。
【０１０１】
制御ユニット１０は、Log Table回路１０６が参照するインデックスとエントリとを対応付けた情報（図２参照）を、メモリ１１に格納し、適宜、Log Table回路１０６に提供してもよい。
【０１０２】
また、制御ユニット１０は、右シフト回路１０８，１０９が参照するセレクタ１０８１の切り替えルール（図４参照）をメモリ１１に格納し、適宜、右シフト回路１０８，１０９に提供してもよい。
【０１０３】
また、制御ユニット１０は、本演算処理回路１における演算処理の開始指示を行なってもよい。
【０１０４】
制御ユニット１０は、本演算処理回路１における演算の繰り返し（ループ）回数を示すｉを管理してもよい。制御ユニット１０は、iのカウントを行ない、このiの値と予め設定された閾値（imax）とを比較することでループが終わったという判断を行なってもよい。
【０１０５】
（Ｂ）動作
上述の如く構成された実施形態の一例としての演算処理回路１の処理の概要を、図５に示すフローチャート（ステップＡ１〜Ａ１５）に従って説明する。
【０１０６】
ステップＡ１において、制御ユニット１０は演算種類の確認を行なう。演算種類が指数演算である場合には（ステップＡ１のEXPルート参照）、ステップＡ２に移行する。
【０１０７】
ステップＡ２において、例えば右シフト回路１０８，１０９は、演算の繰り返し回数iが所定の閾値k（例えば、k=3）以下であるかを確認する。
【０１０８】
確認の結果、演算の繰り返し回数iが閾値k以下である場合には（ステップＡ２のＹＥＳルート参照）、ステップＡ３に移行する。ステップＡ３において、演算処理回路１は、１サイクルあたりに求めるビット数として規定の第１の数（第１のビット数：例えば1bit）を設定する。
【０１０９】
一方、演算の繰り返し回数iが閾値kよりも多い場合には（ステップＡ２のＮＯルート参照）、ステップＡ４に移行する。ステップＡ４において、演算処理回路１は、１サイクルあたりに求めるビット数として、第１の数よりも多い第２の数（第２のビット数：例えば2bit）を設定する。右シフト回路１０８，１０９が、設定されたシフト数に応じた右シフト演算を実行する。
【０１１０】
ステップＡ５において、判定回路１０５は、Liに基づいてnを選択する。
【０１１１】
ステップＡ６において、ステップＡ３またはステップＡ４において設定された第１の数または第２の数に応じたビット数で、指数演算が実行される。
【０１１２】
ステップＡ７において、制御ユニット１０は指数演算が終了したかを確認する。この確認の結果、指数演算が終了していない場合には（ステップＡ７のＮＯルート参照）、ステップＡ８においてiの値をインクリメント（i++）した後、ステップＡ２に戻る。
【０１１３】
また、ステップＡ７における確認の結果、指数演算が終了している場合には（ステップＡ７のＹＥＳルート参照）、ステップＡ１５に移行する。
【０１１４】
ステップＡ１５においては、レジスタ１０３，１０４の値がEi演算の結果として出力される。
【０１１５】
一方、ステップＡ１における確認の結果、演算種類が対数演算である場合には（ステップＡ１のLOGルート参照）、ステップＡ９に移行する。
【０１１６】
ステップＳ９において、制御ユニット１０は、演算の繰り返し回数iが所定の閾値k（例えば、k=3）以下であるかを確認する。
【０１１７】
確認の結果、演算の繰り返し回数iが閾値k以下である場合には（ステップＡ９のＹＥＳルート参照）、ステップＡ１０に移行する。ステップＡ１０において、演算処理回路１は、１サイクルあたりに求めるビット数として規定の第１の数（第１のビット数：例えば1bit）を設定する。
【０１１８】
一方、演算の繰り返し回数iが閾値kよりも多い場合には（ステップＡ９のＮＯルート参照）、ステップＡ１１に移行する。ステップＡ１１において、演算処理回路１は、１サイクルあたりに求めるビット数として、第１の数よりも多い第２の数（第２のビット数：例えば2bit）を設定する。右シフト回路１０８，１０９が、設定されたシフト数に応じた右シフト演算を実行する。
【０１１９】
ステップＡ１２において、判定回路１０５は、Eiに基づいてnを選択する。
【０１２０】
その後、ステップＡ６において、ステップＡ１０またはステップＡ１１において設定された第１の数または第２の数に応じたビット数で、対数演算が実行される。
【０１２１】
ステップＡ１３において、制御ユニット１０は対数演算が終了したかを確認する。この確認の結果、対数演算が終了していない場合には（ステップＡ１３のＮＯルート参照）、ステップＡ１４においてiの値をインクリメント（i++）した後、ステップＡ９に戻る。
【０１２２】
また、ステップＡ１３における確認の結果、対数演算が終了している場合には（ステップＡ１３のＹＥＳルート参照）、ステップＡ１５に移行する。
【０１２３】
ステップＡ１５においては、レジスタ１０１，１０２の値がLi演算の結果として出力される。
【０１２４】
次に、実施形態の一例としての演算処理回路１における演算処理を、図６に示すフローチャート（ステップＢ１〜Ｂ２３）に従って説明する。
【０１２５】
演算処理の開始に際して、ｘが入力される。ステップＢ１において、制御ユニット１０は演算種類の確認を行なう。演算種類が指数演算である場合には（ステップＢ１のEXPルート参照）、ステップＢ２に移行する。
【０１２６】
ステップＢ２において、レジスタ１０１〜１０４の初期化が行なわれる。レジスタの初期化は、例えば、制御ユニット１０によって行なわれる。例えば、レジスタ１０１〜１０４に対して、L1=x，E1=1となるように初期化が行なわれる。なお、LS + LC = L1であり、例えば、LSとLCとのいずれか一方にxを設定し、他方に0を設定する。同様に、ES + EC =E1であり、ESとECとのいずれか一方に1を設定し、他方に0を設定する。
【０１２７】
ステップＢ３において、処理対象の指数演算においてiが予め規定された最大値（imax）に到達するまで、ステップＢ１１までの制御を繰り返し実施するループ処理を開始する。
【０１２８】
ステップＢ４において、例えば右シフト回路１０８，１０９は、演算の繰り返し回数iが所定の閾値k（例えば、k=3）以下であるかを確認する。
【０１２９】
確認の結果、演算の繰り返し回数iが閾値k以下である場合には（ステップＢ４のＹＥＳルート参照）、ステップＢ５において、A=iが設定される。一方、演算の繰り返し回数iが閾値kよりも多い場合には（ステップＢ４のＮＯルート参照）、ステップＢ６において、A=2i-kが設定される。
【０１３０】
その後、ステップＢ７において、判定回路１０５は、Liと0との大小関係および差分を判定し、Liが0に一番近づくnの値を選択する。
【０１３１】
ステップＢ８において、Log Table回路１０６は、iと判定回路１０５によって選択されたnとに対応するlog(1+n*2^-A)の値を出力する。
【０１３２】
ステップＢ９において、ＣＳＡ１０７が、Log Table回路１０６から取得したlog(1+n*2^-A)を用いて、上記式（３）に基づきLi演算を行なう。すなわち、ＣＳＡ１０７は、Li+1 = Li- log(1 + n × 2^-A)を算出する。
【０１３３】
また、ステップＢ１０において、右シフト回路１０８，１０９，演算回路１１０〜１１３およびＣＳＡ１１４が、指数演算におけるEi演算（上記式（３）参照）を実現する。すなわち、ＣＳＡ１１４等は、Ei+1 = Ei + Ei × n × 2^-A を算出する。
【０１３４】
その後、制御がステップＢ１１に進む。ステップＢ１１では、ステップＢ３に対応するループ端処理が実施される。ここで、iがimaxに到達すると（i = imax）、ステップＢ１２に移行する。
【０１３５】
ステップＢ１２において、Eiは後段の処理部（例えば、他の演算回路等）に出力され、処理を終了する。
【０１３６】
ステップＢ１における演算種類の確認の結果、演算種類が対数演算である場合には（ステップＢ１のLOGルート参照）、ステップＢ１３に移行する。
【０１３７】
ステップＢ１３において、レジスタ１０１〜１０４の初期化が行なわれる。レジスタの初期化は、例えば、制御ユニット１０によって行なわれる。例えば、レジスタ１０１〜１０４に対して、L1=0，E1=xとなるように初期化が行なわれる。なお、LS + LC = L1であり、例えば、LSとLCとのそれぞれに0を設定する。同様に、ES + EC =E1であり、ESとECとのいずれか一方にxを設定し、他方に0を設定する。
【０１３８】
ステップＢ１４において、処理対象の指数演算においてiが予め規定された最大値（imax）に到達するまで、ステップＢ２２までの制御を繰り返し実施するループ処理を開始する。
【０１３９】
ステップＢ１５において、例えば右シフト回路１０８，１０９は、演算の繰り返し回数iが所定の閾値k（例えば、k=3）以下であるかを確認する。
【０１４０】
確認の結果、演算の繰り返し回数iが閾値k以下である場合には（ステップＢ１５のＹＥＳルート参照）、ステップＢ１６において、A=iが設定される。一方、演算の繰り返し回数iが閾値kよりも多い場合には（ステップＢ１５のＮＯルート参照）、ステップＢ１７において、A=2i-kが設定される。
【０１４１】
その後、ステップＢ１８において、判定回路１０５は、Eiと1との大小関係および差分を判定し、Eiが0に一番近づくnの値を選択する。
【０１４２】
ステップＢ１９において、Log Table回路１０６は、iと判定回路１０５によって選択されたnとに対応するlog(1+n*2^-A)の値を出力する。
【０１４３】
ステップＢ２０において、ＣＳＡ１０７が、Log Table回路１０６から取得したlog(1+n*2^-A)を用いて、上記式（３）に基づきLi演算を行なう。すなわち、ＣＳＡ１０７は、Li+1 = Li- log(1 + n × 2^-A)を算出する。
【０１４４】
また、ステップＢ２１において、右シフト回路１０８，１０９，演算回路１１０〜１１３およびＣＳＡ１１４が、指数演算におけるEi演算（上記式（３）参照）を実現する。すなわち、ＣＳＡ１１４等は、Ei+1 = Ei + Ei × n × 2^-A を算出する。
【０１４５】
その後、制御がステップＢ２２に進む。ステップＢ２２では、ステップＢ１４に対応するループ端処理が実施される。ここで、iがimaxに到達すると（i = imax）、ステップＢ２３に移行する。
【０１４６】
ステップＢ２３において、Liは後段の処理部（例えば、他の演算回路等）に出力され、処理を終了する。
【０１４７】
（Ｃ）効果
このように、実施形態の一例としての演算処理回路１によれば、演算の繰り返し回数iが閾値k以下の時点において、1サイクル当たりに求めるビット数を少なくするとともに、演算の繰り返し回数iが閾値kよりも多い時点において、1サイクル当たりに求めるビット数を多くする。これにより、指数演算のEiをexp(x)に、対数演算のLiをlog(x)にそれぞれ収束させることができる。
【０１４８】
また、図９に示した従来の演算処理回路と比べて、1st_nテーブル回路等を備える必要がなく、回路規模を削減することができる。これにより、クリティカルパスの論理段数を減らし、ディレイを小さくすることができる。
【０１４９】
すなわち、回路規模を大きくすることなく指数演算または対数演算において解に収束できるのである。
【０１５０】
（Ｄ）その他
図７は上述した実施形態の一例としての演算処理回路１を、例えば、ディープラーニング等の用途のプロセッサに実装する構成例を示す図である。
【０１５１】
ディープラーニング等を用途とするプロセッサは、図７に例示するように、複数の演算器を備え、並列演算を行なう。
【０１５２】
各演算器は、それぞれ指数演算および対数演算を行なうＥＸＰ／ＬＯＧ演算器を備え、図７に示すように、プロセッサに備えられるＥＸＰ／ＬＯＧ演算器として本演算処理回路１を用いてもよい。
【０１５３】
図７に例示するプロセッサは、命令ユニットと、複数のレジスタファイル＃１〜＃ｍと、複数の実行ユニット＃１〜＃ｍを備える。
【０１５４】
各実行ユニットは複数（ｎ個）の演算器＃１〜＃ｎを備え、これらの演算器に演算処理回路１が備えられる。
【０１５５】
この図７に例示するプロセッサシステムは、全体に対する演算器の占有率が大きいものであるが、このような各演算器に本演算処理回路１を適用することで、演算器の回路規模削減の効果を奏することができる。
【０１５６】
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０１５７】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【符号の説明】
【０１５８】
１    演算処理回路
１０    制御ユニット
１１    メモリ
１２    プロセッサ
１０１〜１０４    レジスタ
１０５    判定回路
１０７，１１４    ＣＳＡ
１０６    Log Table回路
１０８，１０９    右シフト回路
１１０〜１１３    演算回路
１０８１    セレクタ
【図１】
2020090025.tif 000004
【図２】
2020090025.tif 000005
【図３】
2020090025.tif 000006
【図４】
2020090025.tif 000007
【図５】
2020090025.tif 000008
【図６】
2020090025.tif 000009
【図７】
2020090025.tif 000010
【図８】
2020090025.tif 000011
【図９】
2020090025.tif 000012
【手続補正書】
【提出日】令和3年3月11日(2021.3.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
指数演算または対数演算を行なう演算回路と、
前記演算回路による演算繰り返し回数が閾値以下の場合に、１サイクル当たりに前記演算回路が求めるビット数を第１数に設定し、前記演算繰り返し回数が前記閾値よりも多い場合に、１サイクル当たりに前記演算回路が求めるビット数を、前記第１数よりも多い第２数に設定する設定部と
を備えること特徴とする、演算処理装置。
【請求項２】
前記設定部が、処理対象データのビット列に対して右シフトを行なう右シフト回路であって、
前記右シフト回路が、前記処理対象データに対して、前記演算繰り返し回数に応じた数のビットシフトを行なう
ことを特徴とする、請求項１に記載の演算処理装置。
【請求項３】
前記演算回路が、指数演算を実施する指数演算回路であり、
演算繰り返し回数（i）が閾値以下の場合に、Li+1 = Li - log(1 + n × 2^-i)を演算し、
前記演算繰り返し回数（i）が前記閾値よりも多い場合に、Li+1 = Li- log(1 + n × 2^-(2i-k))を演算する
ことを特徴とする、請求項１または２記載の演算処理装置。
【請求項４】
前記演算回路が、対数演算を実施する指数演算回路であり、  
演算繰り返し回数（i）が閾値以下の場合に、Ei+1 = Ei + Ei× n × 2^-iを演算し、
前記演算繰り返し回数（i）が前記閾値よりも多い場合に、Ei+1 = Ei+ Ei × n × 2^-(2i-k)を演算する
ことを特徴とする、請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
指数演算または対数演算を行なう演算回路を備える演算処理装置において、
前記演算回路による演算繰り返し回数を確認する処理と、
前記演算回路による前記演算繰り返し回数が閾値以下の場合に、１サイクル当たりに前記演算回路が求めるビット数を第１数に設定し、前記演算繰り返し回数が前記閾値よりも多い場合に、１サイクル当たりに前記演算回路が求めるビット数を、前記第１数よりも多い第２数に設定する処理
とを備えること特徴とする、演算処理装置の制御方法。
【国際調査報告】
2020090025.tif 000013
2020090025.tif 000014