JP2023161967A - 演算装置、演算方法及びプログラム - Google Patents

演算装置、演算方法及びプログラム Download PDF

Info

Publication number
JP2023161967A
JP2023161967A JP2022072639A JP2022072639A JP2023161967A JP 2023161967 A JP2023161967 A JP 2023161967A JP 2022072639 A JP2022072639 A JP 2022072639A JP 2022072639 A JP2022072639 A JP 2022072639A JP 2023161967 A JP2023161967 A JP 2023161967A
Authority
JP
Japan
Prior art keywords
data
input data
coefficient
unit
block
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.)
Pending
Application number
JP2022072639A
Other languages
English (en)
Inventor
栄太 小林
Eita Kobayashi
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 JP2022072639A priority Critical patent/JP2023161967A/ja
Publication of JP2023161967A publication Critical patent/JP2023161967A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】回路構成の簡易化と演算精度の向上を両立できる演算装置等を提供する。【解決手段】演算装置は、入力部と、第1演算部と、第2演算部と、切替部とを備える。入力部は、仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける。第1演算部は、ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の第1係数に基づいて加算演算を行う。第1のデータは、N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである。第2演算部は、N個の入力データ間の指数部の差分を算出し、ビット位置毎に差分に基づいて第2係数を生成し、生成した第2係数に基づいて加算演算を行う。切替部は、ブロックの切替に応じて、N個の入力データを第1演算部及び第2演算部のうちのいずれかに供給する。【選択図】図1

Description

本開示は、演算装置、演算方法及びプログラムに関する。
デジタルフィルタ回路において回路構成を簡易化することが求められている。例えば有限インパルス応答(FIR=Finite Impulse Response)フィルタでは、通常積和演算を繰り返すが、乗算器を用いずにメモリを参照することにより積和演算を行う分散算術(DA=Distributed Arithmetic)法が開発されている。例えば特許文献1では、M個の値のパターンに対応して積の和のパターンを用意しておき、M個の第1のデータから作成されたM個の値のパターンと同じパターンに対応する積の和を出力する演算装置が開示されている。
特開平10-040234号公報
ここで小数点を扱う場合には回路規模の増大又は演算精度の低下が懸念されている。本開示の目的は、上述した課題に鑑み、回路構成の簡易化と演算精度の向上を両立できる演算装置、演算方法及びプログラムを提供することにある。
本開示の一態様にかかる演算装置は、入力部と、第1演算部と、第2演算部と、切替部とを備える。入力部は、仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける。第1演算部は、ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の前記第1係数に基づいて加算演算を行う。前記第1のデータは、前記N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである。第2演算部は、前記N個の入力データ間の指数部の差分を算出し、ビット位置毎に前記差分に基づいて第2係数を生成し、生成した前記第2係数に基づいて加算演算を行う。切替部は、ブロックの切替に応じて、前記N個の入力データを前記第1演算部及び前記第2演算部のうちのいずれかに供給する。
本開示の一態様にかかる演算方法は、入力段階と、第1演算段階と、第2演算段階とを備える。入力段階は、仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける。第1演算段階は、ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の前記第1係数に基づいて加算演算を行う。前記第1のデータは、前記N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである。第2演算段階は、ブロックの切替に応じて、前記N個の入力データ間の指数部の差分を算出し、ビット位置毎に前記差分に基づいて第2係数を生成し、生成した前記第2係数に基づいて加算演算を行う。
本開示の一態様にかかるプログラムは、入力機能と、第1演算機能と、第2演算機能と、切替機能とをコンピュータに実現させる。入力機能は、仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける機能である。第1演算機能は、ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の前記第1係数に基づいて加算演算を行う機能である。前記第1のデータは、前記N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである。第2演算機能は、前記N個の入力データ間の指数部の差分を算出し、ビット位置毎に前記差分に基づいて第2係数を生成し、生成した前記第2係数に基づいて加算演算を行う機能である。切替機能は、ブロックの切替に応じて、前記第1演算機能及び前記第2演算機能のうちのいずれかを動作させる機能である。
本開示により、回路構成の簡易化と演算精度の向上を両立できる演算装置、演算方法及びプログラムを提供できる。
実施形態1にかかる演算装置の構成を示すブロック図である。 実施形態2にかかる演算装置の構成を示すブロック図である。 実施形態2にかかるLUTのデータ構造の一例を示す図である。 実施形態2にかかる第1演算処理を説明するための図である。 実施形態2にかかる第2演算処理を説明するための図である。 実施形態2にかかる演算処理の流れの一例を示すフローチャートである。 実施形態2にかかる第1演算処理の流れの一例を示すフローチャートである。 実施形態2にかかる第2演算処理の流れの一例を示すフローチャートである。 コンピュータシステムのハードウェア構成例を示す図である。 積和演算を説明するための図である。 ブロック浮動小数点方式を説明するための図である。 ブロック浮動小数点を説明するための図である。
以下では、本開示の実施形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明者による事前検討>
デジタルフィルタ回路の一例であるFIRフィルタでは、係数と変数との積の和を演算する積和演算を繰り返す処理が含まれる。
例えば上記処理として以下に示されるZを演算する。
Figure 2023161967000002
Nは入力データ数であり積和の項数である。Nは2以上の自然数である。またnはN未満の自然数である。またXはn個目の入力データであり、dはn個目の入力データに対応する係数である。
ここでコンピュータは情報を2進数で取り扱う。以下では説明のため、XをKビット(一例としてK=3)の整数型の2進数として扱う。例えばn個目の入力データXは、次のように表される。
Figure 2023161967000003
k,nは、n個目の入力データのkビット目の値であり、0又は1である。
式(1)に式(2)を代入すると以下の式が得られる。
Figure 2023161967000004
ここで
Figure 2023161967000005
とすると、コンピュータは、ビット位置毎にY(n)を求め、ビット位置毎のY(n)を、桁を考慮して塁加算することで積和計算を実現できる。
上記積和計算を回路で表現した図が図10である。図10は、積和演算を説明するための図である。図10には、以下の4つの3ビットの入力データが示されている。つまり本図ではN=4である。
=101
=100
=011
=010
4つの入力データが入力された場合、回路は、ビット位置毎に入力データX、X、X、Xにおけるそのビット位置の値をそれぞれb、b、b、bとして入力を受け付ける。そして回路は、b、b、b、bをそれぞれ係数d、d、d、dで乗算し、各乗算結果を加算する。Y(n)は、加算された結果を示している。
例えば1ビット目、2ビット目、及び3ビット目のY(n)は、以下のように表される。
Y(1)=d×1+d×0+d×1+d×0=d+d
Y(2)=d×0+d×0+d×1+d×1=d+d
Y(3)=d×1+d×1+d×0+d×0=d+d
となる。
そして回路は、各ビット位置について得られたY(n)を用いて、以下のように加算演算を行うことで、Zを求める。
Z=Y(1)+Y(2)×2+Y(3)×2
ここで回路規模削減のために、乗算器を用いずにメモリを参照することにより積和演算を行う分散算術法が開発されている。上述の例でbは0又は1であるため、b、b、b、bのパターンは限定的である。そこで分散算術法では、b、b、b、bのパターン毎に、予め演算したY(n)を記憶するルックアップテーブル(LUT)を保持し、入力データに応じてLUTを参照する。これにより図10に示す加算器及び乗算器を省略できるため、回路構成が簡易となる。また電力を削減できる。
以上、Xは、整数型の2進数である場合について説明したが、小数点を含む場合は桁合わせが必要となる。
ここでXが小数点を含む場合、浮動小数点方式又は固定小数点方式で表現されることができる。
浮動小数点方式では、個々のデータ(X)に対して指数部を解析して小数点のビット位置を確定させている。したがって浮動小数点方式では演算コストが高く、また回路規模が大きくなるという問題がある。
固定小数点方式では、Kビットのデータのうち小数点が置かれる位置を固定する方式である。しかし固定小数点方式では、浮動小数点数に比べて表現できる値の範囲が狭いため、演算精度が低下するという問題がある。
このような課題を解決するために、ブロック浮動小数点方式が開発されている。図11~図12は、ブロック浮動小数点方式を説明するための図である。ブロック浮動小数点方式は、処理するデータをブロックに分けて、ブロック毎に小数点の位置を異ならせる方式である。
ブロック浮動小数点で表現されるデータは、小数点の位置を示す指数部と、実数を示す仮数部とを少なくとも含む。同じブロックでは、指数部が共通化される。仮数部は一例として8ビットである。
図11に示すように、各ブロックBLにはm個(mは自然数)のデータが含まれる。mは例えば100である。ブロックBLに含まれるデータX~データXm-1の指数部は全て、左から3ビット目に小数点があることを示している。ブロックBLに対応する図12(a)の例は、2進数で011.01100、つまり10進数では3.375を示している。
一方、ブロックBLに含まれるデータX~データX2m-1の指数部は全て、左から-1ビット目に小数点があることを示している。ブロックBLに対応する図12(b)の例は、2進数で0.01101100、つまり10進数では0.421875を示している。
このようにブロック小数点で表現することで、固定小数点方式と同様の回路規模で、ダイナミックレンジが確保できる。
ところで積和演算で用いる入力データは、ブロック内の配列順にN個選択され、入力される。積和演算で用いる入力データが全て同ブロックに属していれば指数部が同じであるため、1つのルックアップテーブルを用いて上述した分散算術法を適用することが可能となる。しかしブロックを跨いだ入力データを積和演算に用いる場合、例えばXm-1,X,Xm+1,Xm+2を入力データとする場合、異なるブロックに属する入力データが存在するため、属するブロックによって小数点の位置が変わる。したがってこのような場合、分散算術法における単純なテーブル参照では対応できなくなる。
ブロック間のビット位置を補正するためにブロック浮動小数点を全て固定小数点に変換することが考えられるが、これではブロック浮動小数点方式の演算精度の確保という利点を活かすことができない。
以下の実施形態は、上記課題の少なくとも1つを解決するためになされたものである。
<実施形態1>
まず本開示の実施形態1について説明する。図1は、実施形態1にかかる演算装置10の構成を示すブロック図である。演算装置10は、係数と入力データとの積の和をとる、つまり積和演算を実行する装置である。入力データは、ブロック浮動小数点で表現された仮数部がKビット(Kは自然数)のデータである。入力データは、L個(Lは自然数)用意されており、1つのブロックにはm個(mはL未満の自然数)の入力データが含まれる。演算装置10は、ブロックの配列順で、かつブロック内の入力データの配列順に、N個ずつ入力データを入力して積和演算を実行することを繰り返す。
演算装置10は、入力部11と、切替部13と、第1演算部15と、第2演算部17とを備える。
入力部11は、N個の入力データを受け付ける。具体的には、入力部11は、同じブロックに残っている未処理の入力データがN個以上である場合、未処理の入力データのうち、ブロック内の配列順にN個の入力データを選択し、当該N個の入力データを受け付ける。また入力部11は、同じブロックに残っている未処理の入力データがN個未満である場合、当該残っている入力データと、次のブロックの未処理の入力データとを合わせた計N個の入力データとし、当該N個の入力データを受け付ける。尚、このように1回のイテレーションで入力されたN個の入力データ内に異なるブロックに属する入力データが含まれることを、ブロックの切替の発生と称する。
切替部13は、ブロックの切替に応じて、N個の入力データを第1演算部15及び第2演算部17のうちいずれかに供給する。具体的には、N個の入力データ内でブロックの切替が生じていない場合には第1演算部15に供給し、N個の入力データ内でブロックの切替が生じた場合には第2演算部17に供給する。
第1演算部15は、ブロックの切替が生じていない場合に通常の分散算術法を用いた加算演算を行う。具体的には、まず第1演算部15は、ビット位置毎に、N個の入力データに含まれる仮数部の、そのビット位置の値を並べ、第1のデータを生成する。つまり第1のデータは、N個の入力データの同じビット位置のデータを並べた、N個の値からなるデータである。次に第1演算部15は、ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブル(LUT)から読み出す。これにより各々が各ビット位置に対応するK個の第1係数が読み出される。そして第1演算部15は、K個の第1係数に基づいて加算演算を行う。
第2演算部17は、ブロックの切替が生じた場合に、分散算術法と異なる方法で加算演算を行う。具体的には、第2演算部17は、N個の入力データ間の指数部の差分を算出し、ビット位置毎に差分に基づいて第2係数を生成する。このとき第2演算部17は、LUTを用いて第2係数を生成する。当該LUTは、第1演算部15で用いたLUTと同じテーブルであってもよいし、同じ内容の異なるテーブルであってもよい。例えばまず第2演算部17は、ブロックの切替前の入力データの指数部と、ブロックの切替後の入力データの指数部との差分を算出する。そして第2演算部17は、ビット位置毎に、前述の第1のデータから、ブロックの切替後に対応する第3のデータと、ブロック切替前に対応する第4のデータとを生成する。そして第2演算部17は、第3のデータと、第4のデータと、算出した差分と、LUTとに基づいて、第2係数を生成する。そして第2演算部17は、ビット位置毎に生成した第2係数に基づいて加算演算を行う。
このように実施形態1によれば、演算装置10は、積和演算のために分散算術法及びブロック浮動小数点を両立して利用する。具体的には、演算装置10は、ブロック浮動小数点を用いながらも、ブロックの切替発生時には桁合わせのために乗算器の増設を避けてLUTを参照することで積和演算をする。これにより回路構成の簡易化と演算精度の向上を両立できる。また回路規模を削減することで電力も削減できる。
<実施形態2>
次に、本開示の実施形態2について説明する。図2は、実施形態2にかかる演算装置10aの構成を示すブロック図である。演算装置10aは、実施形態1の演算装置10の一例であり、積和演算を実行する装置である。演算装置10aは、ブロックの配列順で、かつブロック内の入力データの配列順に、N個ずつ入力データを入力部110に入力して積和演算を実行することを繰り返す。そして演算装置10aは、都度演算結果を出力する。
演算装置10aは、入力部110、ブロックカウンタ部120、切替部130、記憶部140、第1演算部150、第1出力部160、第2演算部170及び第2出力部180を備える。
入力部110及びブロックカウンタ部120は、実施形態1の入力部11の一例である。入力部110は、用意されたL個のデータから未処理のN個の入力データを配列順に受け付ける。したがって同じブロックに残っている未処理の入力データがN個以上である場合、未処理の入力データのうち、ブロック内の配列順にN個の入力データが選択され、入力部110に入力される。また同じブロックに残っている未処理の入力データがN個未満である場合、当該残っている入力データと、次のブロックの未処理の入力データとを合わせた計N個の入力データが入力される。
ブロックカウンタ部120は、入力部110が受け付けた各入力データが何番目のブロックに属するか、つまりブロック数をカウントする。そしてブロックカウンタ部120は、ブロックの切替を検出する。ブロックカウンタ部120は、ブロックの切替を検出したことに応じて、切替信号を切替部130に供給する。
切替部130は、実施形態1の切替部13の一例である。切替部130は、ブロックカウンタ部120から切替信号を受信していない場合、N個の入力データを第1演算部150に供給し、第1演算部150を機能させる。一方、ブロックカウンタ部120から切替信号を受信したことに応じて、つまりブロックの切替を検出したことに応じて、ブロックの切替前後の入力データを含むN個の入力データを、第2演算部170に供給し、第2演算部170を機能させる。
記憶部140は、演算装置10aの処理に必要な情報を記憶する記憶装置である。特に記憶部140は、LUTを記憶する。LUTは、後述する第1演算部150による第1演算処理と、第2演算部170による第2演算処理に共通して用いられる。
図3は、実施形態2にかかるLUTのデータ構造の一例を示す図である。LUTは、N個の値の組み合わせパターンに応じた第1係数を記憶する。本図に示すように各値はbで表され、0又は1である。N=4の場合、(b,b,b,b)の組み合わせパターンは16パターンである。したがってLUTは16パターンの第1係数を記憶する。
第1係数は、b,b,b,bの各々に対して、b,b,b,bの各々に対応する係数d,d,d,dを乗算した値の和であり、予め算出されている。
図2に戻り説明を続ける。第1演算部150は、実施形態1の第1演算部15の一例である。第1演算部150は、切替部130から入力データが供給されたことに応じて、通常の分散算術法を用いた第1演算処理を実行する。第1演算部150は、係数参照部151と、塁加算処理部152とを有する。
図4は、実施形態2にかかる第1演算処理を説明するための図である。図4に示すように、入力データはX,X,X,Xである。上述の通り、第1演算部150に入力データが入力される場合とは、ブロックの切替が生じていない場合である。したがってこれらの入力データは全て同じブロックに属しており、指数部が共通である。例えば入力データX,X,X,Xの指数部は全て、左から2ビット目のビット位置に小数点があること(指数部:2ビット)を示している。
まず第1演算部150係数参照部151は、各入力データX,X,X,Xの1ビット目のビット位置の値を取り出し、それぞれb,b,b,bを予め定められた順番で並べた第1のデータを生成する。図4では、1ビット目の第1のデータは、(b,b,b,b)=(0,1,0,1)である。
したがって係数参照部151は、記憶部140に格納されるLUTを参照し、第1のデータ(b,b,b,b)=(0,1,0,1)に対応する第1係数として、d+dを読み出す。
次に係数参照部151は、各入力データX,X,X,Xの2ビット目のビット位置の値を取り出し、それぞれb,b,b,bを予め定められた順番で並べた第1のデータを生成する。そして係数参照部151は、LUTを参照し、第1のデータ対応する第1係数を読み出す。係数参照部151は、同様の処理をKビット目まで繰り返すことで、K個の第1係数を生成する。
塁加算処理部152は、各々が各ビット位置に対応するK個の第1係数に基づいて加算演算を行う。具体的には塁加算処理部152は、桁を考慮して、(1ビット目の第1係数)×2-1+(2ビット目の第1係数)+(3ビット目の第1係数)×2を演算する。
尚、塁加算処理部152は、K個の第1係数が生成するまで加算を待ってもよいが、第1係数を生成したことに応じて順次塁加算することが好ましい。後者のほうが、演算時間を短縮できる。
図2に戻り説明を続ける。第1出力部160は、第1演算部150の第1演算処理の結果を出力する。
第2演算部170は、実施形態1の第2演算部17の一例である。第2演算部170は、切替部130から入力データが供給されたことに応じて、分散算術法を拡張した第2演算処理を実行する。第2演算部170は、ビット解析部171と、係数算出部172と、塁加算処理部173とを有する。
図5は、実施形態2にかかる第2演算処理を説明するための図である。図5に示すように、入力データはX,X,X,Xである。上述の通り、第2演算部170に入力データが入力される場合とは、ブロックの切替が生じている場合である。したがってこれらの入力データは2つのブロックのいずれかに属しており、同じブロックに属するデータ同士では指数部が共通であるが、異なるブロックに属するデータ同士では指数部が異なる。例えば入力データX,Xの指数部は、左から1ビット目のビット位置に小数点があること(指数部:1ビット)を示しているが、入力データX,Xの指数部は、左から2ビット目のビット位置に小数点があること(指数部:2ビット)を示している。
図5の例のように入力データ間の桁数が異なる場合、桁合わせをする必要がある。例えば、入力データX,Xの指数部(1ビット)を基準とすると、入力データX,Xの指数部は基準より1ビット大きい。したがって入力データX,Xの各ビット位置のb,bに対応する係数d,dに2をかけて係数を調整すれば、入力データX,Xの同じビット位置のb,bに対応する係数d,dと同等に扱うことができる。
そこでまず第2演算部170のビット解析部171は、ブロックの切替前の入力データの指数部と、ブロックの切替後の入力データの指数部との差分を算出する。そして第2演算部170の係数算出部172は、第1演算部150と同様にビット位置毎に第1のデータを生成し、第1のデータからブロック切替前後に応じた第3のデータ及び第4のデータを生成する。具体的には係数算出部172は、ビット位置毎に、第1のデータに含まれる、ブロック切替後の入力データに対応する値をマスクした第3のデータを生成する。また係数算出部172は、ビット位置毎に、第1のデータに含まれる、ブロック切替前の入力データに対応する値をマスクした第4のデータを生成する。マスクするとは、値を0にすることであってよい。係数算出部172は、記憶部140に格納されるLUTから、第3のデータに対応する係数を第3係数として読み出し、第4のデータに対応する係数を第4係数として読み出す。そして係数算出部172は、第3係数及び第4係数と、差分とに基づいて第2係数を生成する。
例えば図5では、入力データX,X,X,Xの1ビット目の各値が(0,1,0,1)である。したがって係数算出部172は、第3のデータとして(b,b,b,b)=(0,0,0,1)を生成し、LUTから第3のデータに対応する第3の係数としてdを読み出す。また係数算出部172は、第4のデータとして(b,b,b,b)=(0,1,0,0)を生成し、LUTから第4のデータに対応する第4係数としてdを読み出す。そして係数算出部172は、第4係数に、指数部の差分に対応する値を乗算した値と、第3係数とを加算することで、第2係数を算出する。尚、第4係数に乗算する値は、指数が指数部の差分である、2のべき乗で表される。本例では第4係数に乗算する値は、差分1ビットに対応し、具体的には2である。したがって第2係数は、d+2・dとなる。
そして第2演算部170の塁加算処理部173は、各々が各ビット位置に対応するK個の第2係数に基づいて加算演算を行う。具体的には塁加算処理部173は、基準となる桁を考慮して、(1ビット目の第1係数)×2-2+(2ビット目の第1係数)×2-1+(3ビット目の第1係数)を演算する。尚、塁加算処理部173は、K個の第2係数が生成するまで加算を待ってもよいが、第2係数を生成したことに応じて順次塁加算することが好ましい。後者のほうが、演算時間を短縮できる。
図2に戻り説明を続ける。第2出力部180は、第2演算部170の第2演算処理の結果を出力する。
図6は、実施形態2にかかる演算処理の流れの一例を示すフローチャートである。まず入力部110は、用意された入力データのうちN個の入力データの入力を受け付ける(S10)。次にブロックカウンタ部120は、各入力データのブロック数をカウントし、ブロックの切替を検出したか否かを判定する(S11)。具体的にはブロックカウンタ部120は、これまで入力部110に入力された入力データ数や直近の切替タイミングの後に入力された入力データ数と、1ブロックに含まれるデータ数とに基づいて、ブロックの切替を検出してよい。1ブロックに含まれるデータ数は、一定であってもよいし、可変であってもよい。可変である場合は、ブロックカウンタ部120は、ブロック毎に含まれるデータ数を示す信号を他の要素から受信することで、ブロック毎にそのブロックに含まれるデータ数を把握してよい。
ブロックカウンタ部120がブロックの切替を検出しなかった場合(S11でNo)、切替部130はN個の入力データを第1演算部150に供給する(S12)。N個の入力データの供給を受けた第1演算部150は、第1演算処理を実行する(S13)。そして第1出力部160は、演算結果を出力する(S14)。次に演算装置10aは、処理をS18に進める。
一方、ブロックカウンタ部120がブロックの切替を検出した場合(S11でYes)、切替部130はN個の入力データを第2演算部170に供給する(S15)。N個の入力データの供給を受けた第2演算部170は、第2演算処理を実行する(S16)。そして第2出力部180は、演算結果を出力する(S17)。次に演算装置10aは、処理をS18に進める。
S18において、演算装置10aは未処理の入力データがあるかを判定する。未処理の入力データがある場合は(S18でYes)、処理をS10に戻し、未処理の入力データが残っていない場合は(S18でNo)、処理を終了する。
図7は、実施形態2にかかる第1演算処理(つまり図6のS13に示す処理)の流れの一例を示すフローチャートである。まず第1演算部150の係数参照部151は、N個の入力データの仮数部のkビット目のビット位置の値を並べた第1のデータを生成する(S130)。次に係数参照部151は、第1のデータに対応する第1係数をLUTから読み出す(S131)。次に係数参照部151はkをインクリメントし(S132)、kがKより大きくなるまで(S133でNo)、S130~S132を繰り返す。これにより係数参照部151はK個の第1係数を生成する。kがKより大きくなった場合(S133でYes)、塁加算処理部152は各ビット位置の第1係数に基づいて加算演算を行う(S134)。
図8は、実施形態2にかかる第2演算処理(つまり図6のS16に示す処理)の流れの一例を示すフローチャートである。まず第2演算部170のビット解析部171は、N個の入力データの指数部に基づいて、基準となる小数点位置を示す基準指数を設定する(S160)。例えばビット解析部171は、N個の入力データの指数部のうち、最も小さい値を示す指数部の値を基準指数としてよい。あるいはビット解析部171は、N個の入力データの指数部のうち、最も大きい値を示す指数部の値を基準指数としてもよい。ビット解析部171は、各入力データについて指数部の値と、基準指数との差分を算出する(S161)。
係数算出部172は、N個の入力データの仮数部のkビット目の値を並べた第1のデータを生成する(S162)。次に係数算出部172は、第1のデータからブロック切替前後に応じた第3のデータ及び第4のデータを生成する(S163)。次に係数算出部172は、第3のデータに対応する第3係数と、第4のデータに対応する第4係数とを、記憶部140のLUTから読み出す(S164)。そして係数算出部172は、第3係数、第4係数、及びS161で算出した差分に基づいて第2係数を生成する(S165)。
係数算出部172はkをインクリメントし(S166)、kがKより大きくなるまで(S167でNo)、S160~S166を繰り返す。これにより係数算出部172はK個の第2係数を生成する。kがKより大きくなった場合(S167でYes)、塁加算処理部173は、基準指数に基づく桁を考慮して、各ビット位置の第2係数に基づいて加算演算を行う(S168)。
このように実施形態2によれば、演算装置10aは、積和演算のために分散算術法及びブロック浮動小数点を両立して利用する。具体的には、演算装置10は、ブロック浮動小数点を用いながらも、ブロックの切替発生時には桁合わせのために乗算器の増設を避けてテーブルを参照することで積和演算をする。これにより回路構成の簡易化と演算精度の向上を両立できる。また回路規模を削減することで電力も削減できる。
また演算装置10aは、ブロックの切替発生時にも、ブロックの切替発生前に用いたルックアップテーブルを共通して用いる。したがって演算装置10aは、1のテーブルを記憶すればよいため、回路構成がより簡易になる。
尚、上述したように、上記の演算装置の各処理部(ブロックカウンタ部120、切替部130、第1演算部150、及び第2演算部170等)は、CPUで動作させるプログラムとして実現することも可能である。上記プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disc(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
当該プログラムを動作させるコンピュータシステムのハードウェア構成の一例を、図9を参照して説明する。図9は、コンピュータシステムのハードウェア構成例を示す図である。
図9に示すコンピュータ1000は、プロセッサ1010、記憶部1020、ROM1030、RAM1040、通信インタフェース(IF)1050、及びユーザIF1060を備えている。プロセッサ1010とRAM1040とは、バスを介して他の要素に接続される。記憶部1020は、各種のデータを保持できる補助記憶装置である。通信IF1050は、有線通信手段又は無線通信手段などを介して、コンピュータ1000と通信ネットワークとを接続するためのインタフェースである。ユーザIF1060は、例えば、入力をするためのポインティング・デバイス(マウス、ジョイスティック等)やキーボード等の入力装置である。またコンピュータ1000は、視覚データをユーザに提示するための液晶ディスプレイ等の表示装置を備えてもよい。
プロセッサ1010が実行するプログラムは、記憶部1020又はROM1030に格納され得る。プログラムがRAM1040上に展開され、プロセッサ1010がプログラムに従って処理を行い、他のハードウェア構成と協働することによって、本実施形態の各処理部が構成されている。尚、コンピュータ1000は、単一のコンピュータでなくとも、複数のコンピュータによって構成することも可能である。
尚、本開示は上記実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、実施形態2において記憶部140は、1のLUTを記憶していたが、同じ内容の複数のLUTを記憶していてもよい。したがって実施形態2において第1演算部150は、ビット位置毎に順次LUTから第1係数を読み出していたが、ビット位置毎に第1係数をLUTから読み出す処理を、複数のビット位置について並列で実行してもよい。また実施形態2において第2演算部170は、ビット位置毎に順次LUTから第3係数及び第4係数を読み出していたが、ビット位置毎に第3係数及び第4係数をLUTから読み出す処理を、複数のビット位置について並列で実行してもよい。これにより演算時間を短縮できる。
10,10a 演算装置
11 入力部
13 切替部
15 第1演算部
17 第2演算部
110 入力部
120 ブロックカウンタ部
130 切替部
140 記憶部
150 第1演算部
151 係数参照部
152 塁加算処理部
160 第1出力部
170 第2演算部
171 ビット解析部
172 係数算出部
173 塁加算処理部
180 第2出力部
1000 コンピュータ
1010 プロセッサ
1020 記憶部
1030 ROM
1040 RAM
1050 通信インタフェース(IF)
1060 ユーザインタフェース(IF)
BL ブロック

Claims (7)

  1. 仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける入力部と、
    ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の前記第1係数に基づいて加算演算を行う第1演算部であって、前記第1のデータは、前記N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである、第1演算部と、
    前記N個の入力データ間の指数部の差分を算出し、ビット位置毎に前記差分に基づいて第2係数を生成し、生成した前記第2係数に基づいて加算演算を行う第2演算部と、
    ブロックの切替に応じて、前記N個の入力データを前記第1演算部及び前記第2演算部のうちのいずれかに供給する切替部と
    を備える演算装置。
  2. 前記第2演算部は、前記ルックアップテーブルを用いて前記第2係数を生成する
    請求項1に記載の演算装置。
  3. 前記第2演算部は、
    ブロックの切替前の入力データの指数部と、ブロックの切替後の入力データの指数部との差分を算出し、
    ビット位置毎に、
    前記第1のデータに含まれる、ブロック切替後の入力データに対応する値をマスクした第3のデータを生成し、
    前記第1のデータに含まれる、ブロック切替前の入力データに対応する値をマスクした第4のデータを生成し、
    第3のデータに応じた第3係数と、第4のデータに応じた第4係数とを前記ルックアップテーブルから読み出し、前記第3係数及び前記第4係数と、前記差分とに基づいて前記第2係数を生成し、
    生成した前記K個の第2係数に基づいて加算演算を行う
    請求項2に記載の演算装置。
  4. 前記第1演算部は、ビット位置毎に前記第1係数を読み出す処理を、複数のビット位置について並列で実行し、
    前記第2演算部は、ビット位置毎に前記第3係数及び前記第4係数を読み出す処理を、複数のビット位置について並列で実行する
    請求項3に記載の演算装置。
  5. 各入力データのブロック数をカウントし、ブロックの切替を検出するブロックカウンタ部をさらに備え、
    前記切替部は、前記ブロックカウンタ部がブロックの切替を検出したことに応じて、ブロックの切替前後の入力データを含む前記N個の入力データを、前記第2演算部に供給する
    請求項1から4のいずれか一項に記載の演算装置。
  6. 仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける入力段階と、
    ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の前記第1係数に基づいて加算演算を行う第1演算段階であって、前記第1のデータは、前記N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである、第1演算段階と、
    ブロックの切替に応じて、前記N個の入力データ間の指数部の差分を算出し、ビット位置毎に前記差分に基づいて第2係数を生成し、生成した前記第2係数に基づいて加算演算を行う第2演算段階と
    を備える演算方法。
  7. 仮数部がKビット(Kは自然数)のブロック浮動小数点で表現されたN個(Nは自然数)の入力データを受け付ける入力機能と、
    ビット位置毎に、第1のデータに応じた第1係数をルックアップテーブルから読み出し、読み出したK個の前記第1係数に基づいて加算演算を行う第1演算機能であって、前記第1のデータは、前記N個の入力データに含まれる仮数部の同じビット位置の値を並べた、N個の値からなるデータである、第1演算機能と、
    前記N個の入力データ間の指数部の差分を算出し、ビット位置毎に前記差分に基づいて第2係数を生成し、前記第2係数に基づいて加算演算を行う第2演算機能と、
    ブロックの切替に応じて、前記第1演算機能及び前記第2演算機能のうちのいずれかを動作させる切替機能と
    をコンピュータに実現させるためのプログラム。
JP2022072639A 2022-04-26 2022-04-26 演算装置、演算方法及びプログラム Pending JP2023161967A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2022072639A JP2023161967A (ja) 2022-04-26 2022-04-26 演算装置、演算方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022072639A JP2023161967A (ja) 2022-04-26 2022-04-26 演算装置、演算方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2023161967A true JP2023161967A (ja) 2023-11-08

Family

ID=88650545

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022072639A Pending JP2023161967A (ja) 2022-04-26 2022-04-26 演算装置、演算方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2023161967A (ja)

Similar Documents

Publication Publication Date Title
JP3541066B2 (ja) コンピュータにおいて除算および平方根計算を実施するための方法および装置
KR102430645B1 (ko) 독립형 부동소수점 변환장치
US8694572B2 (en) Decimal floating-point fused multiply-add unit
JP4500358B2 (ja) 演算処理装置および演算処理方法
EP0472139A2 (en) A floating-point processor
US8751555B2 (en) Rounding unit for decimal floating-point division
CN112241291A (zh) 用于指数函数实施的浮点单元
CN106250098B (zh) 用于在执行浮点运算时控制舍入的装置及方法
JP4274633B2 (ja) 累乗演算装置
JP4273071B2 (ja) 除算・開平演算器
KR20170138143A (ko) 단일 곱셈-누산 방법 및 장치
JP2001222410A (ja) 除算器
JPH05241787A (ja) 算術演算におけるスティッキイ・ビット値の判別装置
CN105573712B (zh) 用于计算重复迭代和的结果的装置、方法和存储介质
JP2023161967A (ja) 演算装置、演算方法及びプログラム
CN114201140A (zh) 指数函数处理单元、方法和神经网络芯片
CN111124361A (zh) 算术处理装置及其控制方法
CN114691082A (zh) 乘法器电路、芯片、电子设备及计算机可读存储介质
JPH04172526A (ja) 浮動小数点除算器
US8788560B2 (en) Decimal elementary functions computation
US10353671B2 (en) Circuitry and method for performing division
Gonzalez-Navarro et al. A binary integer decimal-based multiplier for decimal floating-point arithmetic
Villalba-Moreno et al. Floating Point Square Root under HUB Format
JPH01282633A (ja) 非正規化数の処理方式
JP2022544132A (ja) 乗算のための計算ユニット、方法及びコンピュータプログラム