以下、図面を参照して本演算処理装置にかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形(実施形態および各変形例を組み合わせる等)して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
(I)第1実施形態の説明
図1は第1実施形態の一例としての演算処理回路1aの構成を例示する図である。
演算処理回路(演算器)1aは、例えば情報処理装置のプロセッサ(演算処理装置)に備えられ、演算を実現する。図1に示す演算処理回路1aは、指数(EXP)演算、対数(LOG)演算、除算(DIV)演算および開平(SQRT)演算の4種類の演算を実現する演算処理回路である。すなわち、本演算処理回路1aは、指数演算、対数演算、除算演算および開平演算のいずれかを選択的に実現する。
[指数演算]
演算処理回路1aにおいては、指数演算にradix-4のSTL(Sequential Table Lookup)法(第1のアルゴリズム)を用いる。
指数演算において、xを入力とし、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))。
Liの算出(Li演算)には、以下の式(1)を用いる。
Li+1= Li - log(1 + n × 2^-2i) ・・・(1)
また、Eiの算出(Ei演算)には、以下の式(2)を用いる。
Ei+1= Ei × (1 + n × 2^-2i)
= Ei + Ei × n × 2^-2i ・・・(2)
ただし、n = -2, -1, 0, +1, +2であり、Liと0との大小関係および差分を判定し、Liが0に一番近づくようにnを選ぶ。
[対数演算]
本演算処理回路1aにおいては、対数演算にradix-4のSTL法を用いる。
対数演算において、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を選ぶ。
上述の如く、本演算処理回路1aにおいては、指数演算および対数演算にSTL(Sequential Table Lookup)法(第1のアルゴリズム)を用いる。
[除算]
本演算処理回路1aにおいては、除算に、演算1回で商2bitを求めるradix-4のSRT(Sweeney, Robertson, Tocher)法(第2のアルゴリズム)を用いる。
除算において、x,yを入力とし、y/xを求める。
Qは部分商(繰り返し演算中の途中までの商)であり、Dは除数である。Rは部分剰余であり、iは演算の繰り返し回数である。
初期値をQ0= 0,R0 = y,D = x(Dは変化しない)とし、y = Qi× D + Ri を満たしつつ、演算を繰り返してRiを0に近づけることで、Qiがy/xに近づく(Ri=y→0、Qi×D=0→yつまりQ=0→y/x)。
Riの算出(Ri演算)には以下の式(3)を用いる。
Ri+1= Ri - D × qi ・・・(3)
ただし、qi= (-2 or -1 or 0 or +1 or +2) × 2^-2iとする。
また、Qiの算出(Qi演算)には以下の式(4)を用いる。
Qi+1 = Qi + qi ・・・(4)
Riと0との大小関係および差分を判定し、Riが0に一番近づくようにqiを選ぶ。
Rはsum+carryの形式で保持する。後述するレジスタ103のレジスタ値RSとレジスタ104のレジスタ値RCとが、sumとcarryとに相当する。
[開平演算]
本演算処理回路1aにおいては、開平演算に、radix-4のSRT法(第2のアルゴリズム)を用いる。
開平演算において、yを入力とし、sqrt(y)を求める。
Qは部分商であり、Rは部分剰余であり、iは演算の繰り返し回数である。
初期値をQ0= 0,R0 = yとし、y = Qi^2 + Riを満たしつつ、演算を繰り返してRiを0に近づけることで、Qiがsqrt(y)に近づく(Ri=y→0、Qi^2=0→yつまりQ=0→sqrt(y))。
Riの算出(Ri演算)には以下の式(5)を用いる。
Ri+1 = Ri-2Qi × qi-qi^2 ・・・(5)
ただしqi=(-2 or -1 or 0 or +1 or +2)×2^-2iとする。
Qiの算出(Qi演算)には以下の式(6)を用いる。
Qi+1= Qi+qi ・・・(6)
このように、開平演算においてRiおよびQiの演算方法は除算演算と概ね同様であるが、厳密にはRiの演算において相違がある。
Riと0との大小関係および差分を判定し、Riが0に一番近づくようにqiを選ぶ。
(A)構成
本第1実施形態の演算処理回路1aは、図1に示すように、レジスタ101~104,判定回路105,106,CSA(Carry-Save Adder:桁上げ保存加算器)107,108,Log Table回路109,右シフト回路(RSFT)110,111,処理回路112,演算回路113~119,130,131およびセレクタ120~126を備える。
以下、レジスタ101をレジスタLS/Qと表す場合がある。同様に、レジスタ102をレジスタLC/Dと表す場合があり、レジスタ103をレジスタES/RSと表す場合があり、レジスタ104をレジスタEC/RCと表す場合がある。
レジスタ101は、判定回路105,106,演算回路115,119およびCSA107にそれぞれ接続されている。
本演算処理回路1aが指数演算または対数演算を行なう場合には、このレジスタ101に後述するCSA107によるLi演算の結果(sum)がセレクタ124を介して格納される。
また、本演算処理回路1aが指数演算または対数演算を行なう場合には、レジスタ101から読み出されたレジスタ値Liは、判定回路105およびCSA107にそれぞれ入力される。
一方、本演算処理回路1aが除算または開平演算を行なう場合には、後述する演算回路119による(Q+q)の演算結果Qがセレクタ124により選択され、レジスタ101に格納される。
本演算処理回路1aが除算または開平演算を行なう場合には、レジスタ101から読み出されたレジスタ値Qは判定回路106および演算回路115,119にそれぞれ入力される。
レジスタ102は、判定回路105,106およびCSA107にそれぞれ接続されている。また、レジスタ102はセレクタ120を介して処理回路112にも接続されている。さらに、レジスタ102の出力はセレクタ123にも入力される。
本演算処理回路1aが指数演算または対数演算を行なう場合には、レジスタ102にCSA107によるLi演算の結果(carry)がセレクタ123を介して格納される。
また、本演算処理回路1aが指数演算または対数演算を行なう場合には、レジスタ102から読み出されたレジスタ値Liは、判定回路105およびCSA107にそれぞれ入力される。
一方、本演算処理回路1aが除算を行なう場合には、レジスタ値Dがセレクタ123により選択され、レジスタ102に格納される。本演算処理回路1aが開平演算を行なう場合には、レジスタ102は使用しない。
本演算処理回路1aが除算を行なう場合には、レジスタ102から読み出されたレジスタ値Dは、判定回路106に入力される。また、レジスタ102から読み出されたレジスタ値Dはセレクタ120を介して処理回路112にも入力される。
本演算処理回路1aが指数演算または対数演算を行なう場合には、Log Table回路109およびCSA107が、指数演算または対数演算におけるLi演算を実現する。右シフト回路110,111,演算回路113,114,116,117およびCSA108が、指数演算または対数演算におけるEi演算を実現する。
一方、本演算処理回路1aが除算を行なう場合には、処理回路112,演算回路116,117,130,131およびCSA108が、Ri演算を実現する。また、本演算処理回路1aが開平演算を行なう場合には、処理回路112,演算回路116~118,130,131およびCSA108が、Ri演算を実現する。ただし、上記式(3),(5)ではqiの桁がサイクルごとに2bitずつ小さくなるところを、式(3),(5)の両辺をサイクルごとに4倍することでqiの桁が一定になるようにする。また、除算および開平演算におけるQi演算は演算回路119によって実現される。
判定回路105は、指数演算または対数演算に用いられる。判定回路105は、指数演算を行なう場合には、Liに基づき、nを選択する。例えば、判定回路105は、Liと0との大小関係および差分を判定し、Liが0に一番近づくnの値を選択する。また、対数演算を行なう場合には、判定回路105は、Eiと1との大小関係および差分を判定し、Eiが1に一番近づくnの値を選択する。なお、この判定回路105による処理は既知の手法を用いて実現してもよく、その詳細な説明は省略する。
判定回路105によって決定されたnの値は、演算回路113,114,116,117およびLog Table回路109に入力される。
Log Table回路109およびCSA107は、Liの演算を実施する。
Log Table回路109は、指数演算または対数演算に用いられる。Log Table回路109は、log(1+n*2^-2i)を出力する。Log Table回路109には、予め変数i, nに対応するlog(1+n*2^-2i)の値が設定されており、判定回路105に入力されるnとiに応じたlog(1+n*2^-2i)の値を出力する。
CSA107は、3入力-2出力(3 in - 2 out)の桁上げ保存加算器(全加算器)であり、レジスタ101,102およびLog Table回路109から各出力が入力される。また、このCSA107の出力(演算結果)のうち、部分和ビットの列は、セレクタ124に出力され、このセレクタ124を介してレジスタ101に入力される。一方、CSA107の出力(演算結果)のうち、桁上げビットの列は、セレクタ123に出力され、このセレクタ123を介してレジスタ102に入力される。
CSA107は、指数演算または対数演算に用いられる。CSA107は、Li+1の演算を行なう。CSA107は、Log Table回路109から出力されたlog(1+n*2^-2i)の値を用いて、上記式(1)に基づきLiを算出する。
CSA107により算出されたLi+1の値は、セレクタ124に入力される。
判定回路106は、除算または開平演算に用いられる。判定回路106は、除算時はRiとDとに基づいてqiを選択し、開平演算時はRiとQiとに基づいてqiを選択する。具体的には、判定回路106は、Riと0との大小関係及び差分とDもしくはQiを判定し、Riが0に一番近づくようにqiを選択する。上記式(3),(5)に示すように、qi = (-2 or -1 or 0 or +1 or +2) × 2^-2iであり、radix-4であるので、判定回路106は2bitずつqiを選択する。
演算回路119は、除算または開平演算に用いられる。演算回路119は、上記式(4),(6)に基づきQi演算を行なう。すなわち、演算回路119は、Qi+1 = Qi + qiを算出する。Qとqとは有効bitがほぼ重複しないので、演算回路119は簡易的な加算回路として構成されてよい。
演算回路115は開平演算に用いられる。演算回路115は、入力された値を2倍して出力する2倍回路である。演算回路115は、レジスタ101から読み出されたレジスタ値Qiに対して2倍(×2)演算を行なう。なお、演算回路115は、入力されたレジスタ値をbit左シフトすることで2倍を実現する。この演算回路115による演算結果はセレクタ120を介して処理回路112に入力される。セレクタ120は開平演算時に演算回路115の出力を選択して出力する。また、セレクタ120は除算時にレジスタ102のレジスタ値Dを選択して出力する。
レジスタ103は、判定回路105,106,右シフト回路110および演算回路118にそれぞれ接続されている。
本演算処理回路1aが指数演算または対数演算を行なう場合には、このレジスタ103に後述するセレクタ125,126が出力するEi演算の結果(sum)が格納される。
また、本演算処理回路1aが指数演算または対数演算を行なう場合には、レジスタ103から読み出されたレジスタ値Eiは、判定回路105および右シフト回路110にそれぞれ入力される。
一方、本演算処理回路1aが除算または開平演算を行なう場合には、レジスタ103にセレクタ125,126が出力するRi演算の結果(sum)が格納される。
本演算処理回路1aが除算または開平演算を行なう場合には、レジスタ103から読み出されたレジスタ値Riは、判定回路106および演算回路118にそれぞれ入力される。
レジスタ104は、判定回路105,106,右シフト回路111およびCSA108にそれぞれ接続されている。
本演算処理回路1aが指数演算または対数演算を行なう場合には、このレジスタ104にセレクタ125,126が出力するEi演算の結果(carry)が格納される。
また、本演算処理回路1aが指数演算または対数演算を行なう場合には、レジスタ104から読み出されたレジスタ値Eiは、判定回路105および右シフト回路111にそれぞれ入力される。また、レジスタ104から読み出されたレジスタ値EiはCSA108にも入力される。
一方、本演算処理回路1aが除算または開平演算を行なう場合には、レジスタ104にセレクタ125,126が出力するRi演算の結果(carry)が格納される。
本演算処理回路1aが除算または開平演算を行なう場合には、レジスタ104から読み出されたレジスタ値Riは、判定回路106およびCSA108にそれぞれ入力される。
CSA108は、4入力-2出力(4 in - 2 out)の桁上げ保存加算器(全加算器)であり、演算回路116,117,118およびレジスタ104からの各出力が入力される。また、このCSA108の出力(演算結果)のうち部分和ビットの列は、演算回路130およびセレクタ125に入力される。一方、CSA108の出力(演算結果)のうち桁上げビットの列は演算回路131およびセレクタ126に入力される。
図2は第1実施形態の一例としての演算処理回路1aのCSA108の構成を例示する図である。
CSA108は、2つの3入力-2出力(3 in -2 out)の全加算器を組み合わせた多段構成を有する。すなわち、一つの3入力-2出力の桁上げ保存加算器の出力(S,C)を、他の3入力-2出力の桁上げ保存加算器の入力とすることで、CSA108は4入力を実現している。
また、このCSA108の出力(演算結果)のうち、部分和ビットの列は、演算回路130やセレクタ125を介してレジスタ103に入力される。一方、CSA108の出力(演算結果)のうち、桁上げビットの列は、演算回路131やセレクタ126を介してレジスタ104に入力される。
演算回路130,131は、それぞれ入力された値に対して4倍演算(×4)演算を行なう。4倍演算は、入力された値を2bit左シフトすることで実現する。セレクタ125,126は、それぞれ本演算処理回路1aが指数演算または対数演算を行なう場合には、CSA108の出力を選択して出力する。一方、演算処理回路1aが除算または開平演算を行なう場合には、セレクタ125は演算回路130の出力を、また、セレクタ126は演算回路131の出力を、それぞれ選択して出力する。演算回路130,131によりqiの2^-2iの部分の辻褄合わせが行なわれる。
処理回路112は、×0,×1,×2の3信号を生成する。除算時には、セレクタ120はレジスタ値Dを出力する。処理回路112と演算回路116とがDを0倍/±1倍/±2倍することにより、式(3)のD×qiの演算が実現される。
一方、開平演算時には、演算回路115がレジスタ値Qの2倍(2Q)を出力し、セレクタ120が2Qを出力する。処理回路112と演算回路116とが2Qを0倍/±1倍/±2倍することにより、式(5)の2Qi×qiの部分が生成される。
演算回路115は、レジスタ101の出力Qに対して、1bit左シフトすることで2倍算を実現する。演算回路115の出力はセレクタ120に入力される。
セレクタ120にはレジスタ102の出力Dと演算回路115の出力とが入力される。除算を行なう場合には、セレクタ120はレジスタ102の出力Dを選択し、処理回路112に出力する。開平演算を行なう場合には、セレクタ120は演算回路115の出力を選択し、処理回路112に出力する。
処理回路112は、固定値0(×0)と、入力値をスルー出力した値(×1)、入力値を1bit左シフトした値(×2)を生成し出力する。
これにより、処理回路112は、×0,×1および×2の各値を出力可能に構成されている。処理回路112に設定されるこれらの値は、判定回路106により選択される選択肢に相当する。
セレクタ121は、処理回路112から出力される×0,×1および×2のいずれかの出力値を選択してセレクタ122に出力する。セレクタ121は、処理回路112が出力する複数種類の選択肢(×0,×1,×2)の中から、判定回路106によって決定されたqiに対応する出力値を選択して出力する。
なお、判定回路106により決定されたqiが負値である場合には、セレクタ121はqiの絶対値に相当する選択肢を選択する。なお、qiが負値である場合には、セレクタ121の出力値(正値)に対して演算回路116が符号反転を行なうことで負値にする。
右シフト回路110,111は、それぞれレジスタ値ES,ECを2i bit右シフトすることで、式(2)のEi×2^-2iの部分を生成する。
すなわち、右シフト回路110は、本演算処理回路1aが指数演算または対数演算を行なう場合に、レジスタ103のレジスタ出力ESに対して、2iビットの右シフト演算を行なうことで2^-2i倍算を実現する。右シフト回路110の出力は演算回路113に入力される。
右シフト回路111は、本演算処理回路1aが指数演算または対数演算を行なう場合に、レジスタ104のレジスタ出力ECに対して、2iビットの右シフト演算を行なうことで2^-2i倍算を実現する。右シフト回路111の出力は演算回路114に入力される。
なお、右シフト回路110,111の後段において演算回路113,116によりEi×n×2^-2iが生成される。
演算回路113,114は、本演算処理回路1aが指数演算または対数演算を行なう場合に、入力された値に対して、1倍(×1)演算または2倍(×2)演算を行なう。なお、演算回路113,114は、入力された値をスルーすることで1倍(×1)演算を実現する。また、演算回路113,114は、入力されたレジスタ値を1bit左シフトすることで2倍演算を実現する。この演算回路115による演算結果はセレクタ120を介して処理回路112に入力される。
セレクタ122は、セレクタ121からの出力(×0,×1,×2)と演算回路113からの出力とのいずれかを選択して、演算回路116に入力する。
演算回路116,117は、入力された値をスルー(+)または符号反転(-)して出力する。演算回路116には、判定回路105からの出力と、判定回路106からの出力が入力される。演算回路116は、指数演算時または対数演算時はnの符号に応じた処理を行ない、除算または開平演算時はqiの符号に応じた処理を行なう。
演算回路117は、指数演算時または対数演算時はnの符号に応じた処理を行なう。なお、除算時または開平演算時は演算回路117は使用されない。演算回路116には、セレクタ122によって選択された出力が入力される。
演算回路118は、レジスタ値RSからqi^2を減算し、結果を出力する。演算回路118の出力はCSA108に入力される。
本演算処理回路1aにおいて、レジスタ101~104,判定回路105,右シフト回路110,111,演算回路113,114,116,117,Log Table回路109およびCSA107,108が、指数演算および対数演算を処理する第1の処理部を構成する。
また、レジスタ101~104,判定回路106,演算回路115,117,118,119,130,131,処理回路112,セレクタ120,121およびCSA108が、除算および開平演算を処理する第2の処理部を構成する。
制御ユニット10は本演算処理回路1aにおける演算処理を制御する。制御ユニット10はプログラムからの指示で動作する。
制御ユニット10は、命令デコーダとしての機能を備え、図示しない命令レジスタに読み込まれた命令の内容を解読し、本演算処理回路1aを制御する。
メモリ11は、例えばRAM(Random Access Memory)である。メモリ11には、例えば、各レジスタ101~104の初期値が格納されている。初期値は演算処理の種類(指数演算,対数演算,除算および開平演算)に応じて、それぞれ備えられている。
制御ユニット10は、本演算処理回路1aにおける演算処理の開始時に、各レジスタ101~104の初期化を行なう。制御ユニット10は本演算処理回路1aにおいて実行する演算種類に応じた初期値をメモリ11から読み出し、各レジスタ101~104に格納することで初期化を行なう。
また、制御ユニット10は、演算処理の結果を格納するレジスタ101~104から演算結果を読み出し、出力させる。
制御ユニット10は、判定回路105,106の選択も行なう。すなわち、実行を指示された演算種類に応じて、判定回路105,106を選択し、機能させる。
制御ユニット10は、各セレクタ120~126の切り替え制御を行なってもよい。また、制御ユニット10は、本演算処理回路1aにおける演算処理の開始指示を行なってもよい。
制御ユニット10は、本演算処理回路1aにおける演算の繰り返し(ループ)回数を示すiを管理してもよい。制御ユニット10は、iのカウントを行ない、このiの値と予め設定された閾値(imax)とを比較することでループが終わったという判断を行なってもよい。
(B)動作
上述の如く構成された第1実施形態の一例としての演算処理回路1aの処理を、図3~図6に示すフローチャート(ステップS1~S34)に従って説明する。なお、図3はステップS1~ステップS9の処理を、図4はステップS10~S17の処理を、図5はステップS18~S25の処理を、図6はステップS26~S34の処理を、それぞれ示す。
演算処理の開始に際して、x,yが入力される。図3のステップS1において、制御ユニット10は演算種類の確認を行なう。演算種類が指数演算である場合には(ステップS1のEXPルート参照)、図3のステップS2に移行する。
ステップS2において、レジスタ101~104の初期化が行なわれる。レジスタの初期化は、例えば、制御ユニット10によって行なわれる。例えば、レジスタ101~104に対して、L1=x,E1=1となるように初期化が行なわれる。なお、LS + LC = L1であり、例えば、LSとLCとのいずれか一方にxを設定し、他方に0を設定する。同様に、ES + EC =E1であり、ESとECとのいずれか一方に1を設定し、他方に0を設定する。
図3のステップS3では、処理対象の指数演算においてiが予め規定された最大値(imax)に到達するまで、ステップS8までの制御を繰り返し実施するループ処理を開始する。
図3のステップS4では、判定回路105が、Liに基づきnを決定しLog Table回路109および演算回路113,114,116,117に出力する。
図3のステップS5において、Log Table回路109が、log(1+n×2^-2i)の値を出力する。図3のステップS6において、CSA107は、Li演算(上記式(1)参照)を行なう。
また、図3のステップS7において、右シフト回路110,111,演算回路113,114,116,117およびCSA108が、指数演算におけるEi演算(上記式(2)参照)を実現する。
その後、制御が図3のステップS8に進む。ステップS8では、ステップS3に対応するループ端処理が実施される。ここで、iがimaxに到達すると(i = imax)、図3のステップS9に演算処理が移行する。
図3のステップS9において、Eiは後段の処理部(例えば、他の演算回路等)に出力され、処理を終了する。
一方、図3のステップS1における演算種類の確認の結果、演算種類が対数演算である場合には(ステップS1のLOGルート参照)、図4のステップS10に移行する。
ステップS10において、レジスタ101~104の初期化が行なわれる。レジスタの初期化は、例えば、制御ユニット10によって行なわれる。例えば、レジスタ101~104に対して、L1=0,E1=xとなるように初期化が行なわれる。
図4のステップS11では、処理対象の対数演算においてiが予め規定された最大値(imax)に到達するまで、ステップS16までの制御を繰り返し実施するループ処理を開始する。
図4のステップS12では、判定回路105が、Eiに基づきnを決定しLog Table回路109および演算回路113,114,116,117に出力する。
図4のステップS13において、Log Table回路109が、log(1+n×2^-2i)の値を出力する。図4のステップS14において、CSA107は、Li演算(上記式(1)参照)を行なう。
また、図4のステップS15において、右シフト回路110,111,演算回路113,114,116,117およびCSA108が、対数演算におけるEi演算(上記式(2)参照)を実現する。
その後、制御が図4のステップS16に進む。ステップS16では、ステップS11に対応するループ端処理が実施される。ここで、iがimaxに到達すると(i = imax)、図4のステップS17に演算処理が移行する。
図4のステップS17において、Liは後段の処理部(例えば、他の演算回路等)に出力され、処理を終了する。
一方、図3のステップS1における演算種類の確認の結果、演算種類が除算である場合には(ステップS1のDIVルート参照)、図5のステップS18に移行する。
ステップS18において、レジスタ101~104の初期化が行なわれる。レジスタの初期化は、例えば、制御ユニット10によって行なわれる。例えば、レジスタ101~104に対して、Q0=0,R0=y,D=xとなるように初期化が行なわれる。なお、RS + RC = R0である。
図5のステップS19では、処理対象の除算においてiが予め規定された値(imax-1)に到達するまで、ステップS24までの制御を繰り返し実施するループ処理を開始する。
図5のステップS20では、判定回路106が、RiおよびDに基づきqiを選択し出力する。図5のステップS21において、演算回路119が、Qi+1 = Qi + qiを演算し出力する。
図5のステップS22において、処理回路112および演算回路116がD × qiを生成し出力する。また、図5のステップS23において、CSA108がRi+1= Ri -D × qiを算出する。
その後、制御が図5のステップS24に進む。ステップS24では、ステップS19に対応するループ端処理が実施される。ここで、iがimax-1に到達すると(i = imax-1)、図5のステップS25に演算処理が移行する。
ステップS25において、Qiは後段の処理部(例えば、他の演算回路等)に出力され、処理を終了する。
図3のステップS1における演算種類の確認の結果、演算種類が開平演算である場合には(ステップS1のSQRTルート参照)、図6のステップS26に移行する。
ステップS26において、レジスタ101~104の初期化が行なわれる。レジスタの初期化は、例えば、制御ユニット10によって行なわれる。例えば、レジスタ101~104に対して、Q0=0,R0=yとなるように初期化が行なわれる。
図6のステップS27では、処理対象の除算においてiが予め規定された値(imax-1)に到達するまで、ステップS33までの制御を繰り返し実施するループ処理を開始する。
図6のステップS28では、判定回路106が、RiおよびQiに基づきqiを選択し出力する。図6のステップS29において、演算回路119が、Qi+1 = Qi + qiを演算し出力する。
図6のステップS30において、演算回路115および処理回路112が2Qi × qiを生成する。また、図6のステップS31において、演算回路118がRi - qi ^2を生成する。
図6のステップS32において、CSA108が、上記式(5)に基づき、Ri+1 = Ri-2Qi × qi-qi^2を算出する。
その後、制御が図6のステップS33に進む。ステップS33では、ステップS27に対応するループ端処理が実施される。ここで、iがimax-1に到達すると(i = imax-1)、図6のステップS34に演算処理が移行する。
ステップS34において、Qiは後段の処理部(例えば、他の演算回路等)に出力され、処理を終了する。
(C)効果
このように、第1実施形態の一例としての演算処理回路1aによれば、レジスタ101~104,演算回路116およびCSA108を、指数・対数演算回路と除算・開平演算回路とで共用することで、指数・対数演算回路と除算・開平演算回路とを一つの演算処理回路1aとして構成することができる。
これにより、回路規模を削減し、回路サイズの小型化および製造コストの削減を実現することができる。
(II)第2実施形態の説明
図1に例示した第1実施形態の演算処理回路1aにおいては、4in-2outのCSA108を用いているが、除算および開平演算において、このCSA108の入力が1つ未使用となっている。
本第2実施形態においては、CSA108の入力を全て使用することで有効に利用することができる。
図7は第2実施形態の一例としての演算処理回路1bの構成を例示する図である。
この図7に示すように、第2実施形態の演算処理回路1bは、第1実施形態の演算処理回路1aの処理回路112に代えて処理回路212を備えるとともに、セレクタ121に代えてセレクタ221,222,223を備える。そして、その他の部分は第1実施形態の演算処理回路1aと同様に構成されている。
なお、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。また、図7においては、便宜上、制御ユニット10およびメモリ11の図示を省略している。
処理回路212には、レジスタ102の出力値と、演算回路115からの出力値とがセレクタ120を介して入力される。また、処理回路212は4つの出力(×0,×2,×0,×1)を可能に構成されており、セレクタ221およびセレクタ222に対して、それぞれ2つの出力を行なう。
処理回路212は、×0,×1,×2の3信号を生成する。除算時には、セレクタ120はレジスタ値Dを出力する。処理回路212と演算回路116,117とがDを0倍/±1倍/±2倍することにより、式(3)のD×qiの部分が生成される。
一方、開平演算時には、演算回路115がレジスタ値Qの2倍(2Q)を出力し、セレクタ120が2Qを出力する。処理回路212と演算回路116,117とが2Qを0倍/±1倍/±2倍することにより、式(5)の2Qi×qiの部分が生成される。
処理回路212は、固定値0(×0)と、入力値をスルー出力した値(×1)、入力値を1bit左シフトした値(×2)を生成し出力する。
処理回路212に設定されるこれらの値は、判定回路106により選択される選択肢に相当する。
処理回路212には予め規定された固定値(×0)が2つ設定されている。そして、これらの2つの固定値(×0)のうち一つは、出力値×1(スルー)とペアを成してセレクタ222に入力される。また、2つの固定値(×0)のうち他の一つは、演算回路115からの出力値×2(左シフト)とペアを成してセレクタ221に入力される。
すなわち、本第2実施形態の演算処理回路1bにおいては、セレクタ222には、処理回路212から×0または×1(×0/×1)が入力され、セレクタ221には、処理回路212から×0または×2(×0/×2)が入力される。
このように、本第2実施形態においては、セレクタ120の出力が、×0/×2と、×0/×1との2つの2択セレクタ221,222に入力されるように構成されている。
各セレクタ221,222は、判定回路106によって選択されたqiの値に応じてセレクト対象を選択して出力する。
本第2実施形態の演算処理回路1bにおいては、処理回路212の複数の出力値の中から、2つのセレクタ221,222がそれぞれ1つの出力値を選択して出力する。これにより、CSA108には、セレクタ221からの出力と、セレクタ222からの出力が入力され、CSA108の入力信号線を余さず使用することができる。すなわち、CSA108を効率的に使用することができる。
なお、セレクタ221,222の各出力値を組み合わせることで、判定回路106により選択されたqiを再現することができる。
図8は第2実施形態の一例としての演算処理回路1bのqi選択結果に対する各セレクタのセレクト対象を示す図である。なお、この図8において、“×0/×1セレクタ”はセレクタ222を示し、“×0/×2セレクタ”はセレクタ221を示す。
この図8に示すセレクト対象は、判定回路106によって選択されたqiを再現するためにセレクタ221,222が選択すべき出力を示している。
例えば、判定回路106によって選択されたqiが“-1×2^-2i”である場合には、セレクタ222(×0/×1セレクタ)は“×1(スルー)”を選択してその値を出力させ、セレクタ221(×0/×2セレクタ)は“×0(固定値)”を選択してその値を出力させる。
制御ユニット10は、この図8に例示するような参照情報を予めメモリ11に記憶しておき、この参照情報を参照してセレクタ221,222の切り替え制御を行なってもよい。
セレクタ221からの出力はセレクタ223に入力される。また、セレクタ223には、演算回路114の出力も入力される。セレクタ223によって選択された出力は演算回路117に入力され、この演算回路117において符号反転された後、CSA108に入力される。
セレクタ223は、除算または開平演算を行なう場合にはセレクタ221からの入力を選択して出力させる。一方、セレクタ223は、指数演算または対数演算を行なう場合には演算回路114からの入力を選択して出力させる。
CSA108には、演算回路116,117,118からの各出力およびレジスタ104の出力が入力される。
本発明の第2実施形態としての演算処理回路1bによれば、上述した第1実施形態と同様の作用効果を得ることができる他、除算または開平演算を行なうに際して、qiを±3×2^-2iの中から選ぶことが可能となる。すなわち、qiの選択肢を増やすことができる。
また、 qiの選択肢を増やすことにより、判定回路106における判定論理の簡略化が可能となり、判定回路106の論理段数を減らすことができ、これにより判定回路106におけるディレイを削減することができる。
(III)第3実施形態の説明
図9は第3実施形態の一例としての演算処理回路1cの構成を例示する図である。
この図9示すように、第3実施形態の演算処理回路1cは、図7に示した第2実施形態の演算処理回路1bの処理回路212に代えて処理回路312を備えるとともに、セレクタ221,222に代えてセレクタ321,322を備える。そして、その他の部分は第2実施形態の演算処理回路1bと同様に構成されている。
なお、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。また、図9においては、便宜上、制御ユニット10およびメモリ11の図示を省略している。
また、本第3実施形態の演算処理回路1cにおいて、演算回路116を“+or-(A)”と表すことがある。また、演算回路117を“+or-(B)”と表すことがある。
処理回路312には、レジスタ102の出力値と、演算回路115からの出力値とがセレクタ120を介して入力される。
また、処理回路312は、6つの出力(×0,×4,×8,×0,×1,×2)を可能に構成されており、セレクタ321およびセレクタ322に対して、それぞれ3つの出力を行なう。
すなわち、処理回路312において、6つの出力のうち、×0(固定値),×4(左シフト)および×8(左シフト)が、セレクタ321に入力される。また、6つの出力のうち、×0(固定値),×1(スルー)および×2(左シフト)が、セレクタ322に入力される。
すなわち、本第3実施形態の演算処理回路1cにおいては、セレクタ321には、処理回路312から×0,×4および×8(×0/×4/×8)のいずれかが入力され、セレクタ322には、処理回路312から×0,×1および×2(×0/×1/×2)のいずれかが入力される。
このように、本第3実施形態においては、セレクタ120の出力が、×0/×4/×8と、×0/×1/×2との2つの3択セレクタ321,322に入力されるように構成されている。
これにより、qi=(-10 or -9 or -8 or -7 or -6 or -5 or -4 or -3 or -2 or -1 or 0 or +1 or +2 or +3 or +4 or +5 or +6 or +7 or +8 or +9 or +10 )×2^-2iとなる。
各セレクタ321,322は、判定回路106によって選択されたqiの値に応じてセレクト対象を選択して出力する。
本第3実施形態の演算処理回路1cにおいては、処理回路312に設定された複数の出力値の中から、2つのセレクタ321,322がそれぞれ1つの出力値を選択して出力する。これにより、CSA108には、セレクタ321からの出力と、セレクタ322からの出力が入力され、CSA108の入力信号線を余さず使用することができる。すなわち、CSA108を効率的に使用することができる。
なお、×0,×1,×2,×4,×8の各演算は実質的には回路不要で実現できる。すなわち、×0演算は固定値0を出力することで実現可能であり、×1演算は入力値をスルー出力することで実現可能である。また、×2,×4,×8は、1bit左シフト,2bit左シフト,3bit左シフトでそれぞれ実現可能である。これに対して、×3,×5,×6,×7,×9, ×10の各演算は乗算回路が必要となり回路規模およびディレイが増大するため、使用しないことが望ましい。
図10は第3実施形態の一例としての演算処理回路1cのqi選択結果に対する各セレクタのセレクト対象および符号を示す図である。なお、この図10において、“×0/×1/×2セレクタ”はセレクタ322を示し、“×0/×4/×8セレクタ”はセレクタ321を示す。また、“+or-(A)”は演算回路116を示し、“+or-(B)”は演算回路117を示す。
この図10に示すセレクト対象および符号は、判定回路106によって選択されたqiを再現するために、セレクタ321,322が選択すべき出力および演算回路116,117が設定すべき符号を示している。
例えば、判定回路106によって選択されたqiが“+1×2^-2i”である場合には、セレクタ322(×0/×1/×2セレクタ)は“×1(スルー)”を選択してその値を出力させ、演算回路116において符号“+”を設定させる。また、セレクタ321(×0/×4/×8セレクタ)は“×0(固定値)”を選択してその値を出力させ、演算回路117において符号“+”を設定させる。
制御ユニット10は、この図10に例示するような参照情報を予めメモリ11に記憶しておき、この参照情報を参照してセレクタ321,322の切り替え制御を行なってもよい。
このように、第3実施形態の一例としての演算処理回路1cによれば、除算または開平演算において、第2実施形態の演算処理回路1bに比べてqiの選択肢を増やすことができる。qiの選択肢が増えることで、判定回路106における判定論理の簡略化が可能となり、判定回路106の論理段数を減らすことができ、これにより判定回路106におけるディレイを削減することができる。
また、繰り返し演算1回毎に求めるbit数を増加させる高radix化を実現することができる。
(IV)その他
図11は上述した各実施形態の一例としての演算処理回路1a,1b,1cを、例えば、ディープラーニング等の用途のプロセッサに実装する構成例を示す図である。
図11に例示するプロセッサは、命令ユニットと、複数のレジスタファイル#1~#mと、複数の実行ユニット#1~#mを備える。
各実行ユニットは複数(n個)の演算器#1~#nを備え、これらの演算器に演算処理回路1a,1b,1cが備えられる。
この図11に例示するプロセッサシステムは、全体に対する演算器の占有率が大きいものであるが、このような各演算器に本演算処理回路1a,1b,1cを適用することで、演算器の回路規模削減の効果を奏することができる。
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。