(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024077427
(43)【公開日】2024-06-07
(54)【発明の名称】演算器、演算装置及び演算装置の動作方法
(51)【国際特許分類】
G06F 7/523 20060101AFI20240531BHJP
G06F 7/50 20060101ALI20240531BHJP
G06F 7/499 20060101ALI20240531BHJP
G06F 17/10 20060101ALI20240531BHJP
【FI】
G06F7/523
G06F7/50
G06F7/499 101
G06F17/10 S
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2022189519
(22)【出願日】2022-11-28
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(71)【出願人】
【識別番号】504150450
【氏名又は名称】国立大学法人神戸大学
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】渡部 源太郎
(72)【発明者】
【氏名】牧野 淳一郎
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA01
5B056BB71
(57)【要約】
【課題】回路規模の増加と消費電力の増加と演算速度の低下とを抑えつつ、演算を実行できる演算器及び演算装置を提供する。
【解決手段】演算器は、演算器は、共通の指数である第1共通指数が設定された複数の第1データの第1仮数と、共通の指数である第2共通指数が設定された複数の第2データの第2仮数とをそれぞれ乗じる複数の乗算部と、前記複数の乗算部が算出した複数の積を加算する第1加算部と、を有する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
共通の指数である第1共通指数が設定された複数の第1データの第1仮数と、共通の指数である第2共通指数が設定された複数の第2データの第2仮数とをそれぞれ乗じる複数の乗算部と、
前記複数の乗算部が算出した複数の積を加算する第1加算部と、を有する演算器。
【請求項2】
前記第1共通指数と前記第2共通指数とを加算することで、前記第1加算部の加算結果である仮数の小数点位置を決める第3共通指数を生成する第2加算部を有する請求項1に記載の演算器。
【請求項3】
前記複数の乗算部の各々は、
事前に定められた複数のシフト量の中から前記第1データの桁位置に応じて選択的に設定される、0ビットシフトを含む第1ビットシフト量と、事前に定められた複数のシフト量の中から前記第2データの桁位置に応じて選択的に設定される、0ビットシフトを含む第2ビットシフト量とにより、算出した積をビットシフトする第1シフタを有する請求項1に記載の演算器。
【請求項4】
前記複数の乗算部の各々は、
前記第1ビットシフト量を示す第1コードと前記第2ビットシフト量を示す第2コードとの和と、基準のビットシフト量との積を、前記第1シフタに出力するビットシフト量として算出するシフト量算出部を有することを特徴とする請求項3に記載の演算器。
【請求項5】
前記第1コードと前記第2コードとの和が最大値を示す場合、前記第1シフタは、算出した積をビットシフトした値の代わりに、"0"を示すデータを出力する請求項4に記載の演算器。
【請求項6】
前記第1共通指数と前記第2共通指数との和と、第3データの指数との差である第3ビットシフト量を算出する指数算出部と、
前記第3データの第3仮数を前記第3ビットシフト量に応じてシフトする第2シフタと、を有し、
前記第1加算部は、さらに、前記複数の積の加算値に前記第2シフタでビットシフトされた前記第3仮数を加算する請求項2、4又は5のいずれか1項に記載の演算器。
【請求項7】
請求項1乃至請求項5のいずれか1項に記載の演算器と、
複数の第1浮動小数点数データのうちの指数の最大値を前記第1共通指数に設定し、前記第1共通指数に合わせて前記複数の第1浮動小数点数データの仮数のそれぞれを前記第1仮数に変更し、複数の第2浮動小数点数データのうちの指数の最大値を前記第2共通指数に設定し、前記第2共通指数に合わせて前記複数の第2浮動小数点数データの仮数のそれぞれを前記第2仮数に変更するブロック浮動小数点化部と、を有する演算装置。
【請求項8】
演算器を含む演算装置であって、
前記演算器は、
共通の指数である第1共通指数が設定された複数の第1データの第1仮数と、共通の指数である第2共通指数が設定された複数の第2データの第2仮数とをそれぞれ乗じる複数の乗算部と、
前記複数の乗算部が算出した複数の積を加算する第1加算部と、を有する演算装置。
【請求項9】
前記複数の乗算部の各々は、
事前に定められた複数のシフト量の中から前記第1データの桁位置に応じて選択的に設定される、0ビットシフトを含む第1ビットシフト量と、事前に定められた複数のシフト量の中から前記第2データの桁位置に応じて選択的に設定される、0ビットシフトを含む第2ビットシフト量とにより、算出した積をビットシフトする第1シフタを有する請求項8に記載の演算装置。
【請求項10】
前記複数の乗算部の各々は、
前記第1ビットシフト量を示す第1コードと前記第2ビットシフト量を示す第2コードとの和と、基準のビットシフト量との積を、前記第1シフタに出力するビットシフト量として算出するシフト量算出部を有し、
前記演算装置は、さらに、前記第1共通指数と、前記第1共通指数に合わせた前記複数の第1データ毎の前記第1仮数と、前記複数の第1データ毎の前記第1コードと、前記第2共通指数と、前記第2共通指数に合わせた前記複数の第2データ毎の前記第2仮数と、前記複数の第2データ毎の前記第2コードとを、前記複数の第1データと前記複数の第2データとの浮動小数点数データから生成するデータ生成部を有する請求項9に記載の演算装置。
【請求項11】
演算装置の演算器に含まれる複数の乗算部により、共通の指数である第1共通指数が設定された複数の第1データの第1仮数と、共通の指数である第2共通指数が設定された複数の第2データの第2仮数とをそれぞれ乗じ、
前記演算器に含まれる第1加算部により、前記複数の乗算部が算出した複数の積を加算する演算装置の動作方法。
【請求項12】
請求項1乃至請求項5のいずれか1項に記載の演算器を有する演算装置の動作方法であって、
前記演算装置に含まれるブロック浮動小数点化部により、
複数の第1浮動小数点数データのうちの指数の最大値を前記第1共通指数に設定し、
前記第1共通指数に合わせて前記複数の第1浮動小数点数データの仮数を前記第1仮数に変更し、
複数の第2浮動小数点数データのうちの指数の最大値を前記第2共通指数に設定し、
前記第2共通指数に合わせて前記複数の第2浮動小数点数データの仮数を前記第2仮数に変更する演算装置の動作方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、演算器、演算装置及び演算装置の動作方法に関する。
【背景技術】
【0002】
一般に、CPU(Central Processing Unit)及びGPU(Graphics Processing Unit)等の演算装置によるデジタル信号処理では、固定小数点数データ又は浮動小数点数データを用いて演算が実行される。例えば、複数の固定小数点数データを含むデータブロック毎に1つのブロックスケールファクタを持たせ、データブロックの固定小数点数データに対して共通のスケーリングを行う手法が知られている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
固定小数点演算を実行する固定小数点演算器は、浮動小数点演算を実行する浮動小数点演算器に比べて、回路規模が小さく、消費電力が小さく、演算速度が速いが、演算精度が低い。反対に、浮動小数点演算器は、固定小数点演算器に比べて、演算精度が高いが、回路規模が大きく、消費電力が大きく、演算速度が遅い。
【0004】
本開示の実施の形態は、上記の点に鑑みてなされたもので、回路規模の増加を抑えつつ、演算を実行できる演算器及び演算装置を提供することを目的とする。
【課題を解決するための手段】
【0005】
上記目的を達成するため、本開示の実施の形態の演算器は、共通の指数である第1共通指数が設定された複数の第1データの第1仮数と、共通の指数である第2共通指数が設定された複数の第2データの第2仮数とをそれぞれ乗じる複数の乗算部と、前記複数の乗算部が算出した複数の積を加算する第1加算部と、を有する。
【発明の効果】
【0006】
回路規模の増加抑えつつ、演算を実行できる演算器及び演算装置を提供することができる。
【図面の簡単な説明】
【0007】
【
図1】本開示の実施の形態における演算器の例を示すブロック図である。
【
図2】
図1の内積演算器による演算で使用するブロック浮動小数点数データの形式の例を示す説明図である。
【
図3】
図1の内積演算器を有する演算装置の例を示すブロック図である。
【
図4】
図3の演算処理部の例を示すブロック図である。
【
図5】
図1の内積演算器の整数乗算器に入力される仮数の例を示す説明図である。
【
図6】本開示の別の実施の形態における演算器の例を示すブロック図である。
【
図7】
図6の内積演算器による演算で使用するブロック浮動小数点数データの形式の例を示す説明図である。
【
図8】
図6に示すシフトコードとシフト量との関係を示す説明図である。
【
図9】
図6の内積演算器の整数乗算器に入力される仮数の例を示す説明図である。
【
図10】
図6の内積演算器を有する演算装置の動作の例を示すフローチャートである。
【
図11】浮動小数点数データの内積演算を実行する内積演算器の例(比較例)を示すブロック図である。
【
図12】本開示の別の実施の形態の演算装置における演算処理部の例を示すブロック図である。
【
図13】
図12のブロック浮動小数点化部により生成されるブロック浮動小数点数データの形式の例を示す説明図である。
【
図14】
図12のブロック浮動小数点化部及び抽出部の動作の例を示す説明図である。
【
図15】
図3に示した演算装置が搭載されるコンピュータを含むシステムの構成例を示すブロック図である。
【発明を実施するための形態】
【0008】
以下、本開示の実施の形態について、図面を参照しながら詳細に説明する。信号線に付けた矢印は、信号線に伝送される信号の転送方向を示し、信号線に付けた符号"/"は、信号線(信号)が複数で構成されることを示す。
【0009】
図1は、本開示の実施の形態における演算器の例を示すブロック図である。例えば、
図1に示す演算器100は、複数組のデータの積の和を算出する内積演算器として利用可能である。内積演算器100は、例えば、複数の整数乗算器112をそれぞれ含む複数の乗算部105、指数算出部120、シフタ130、CSA140、CPA150、リーディングゼロ予測器160及び後処理部170を有している。
【0010】
内積演算器100は、
図2で説明する複数のブロック浮動小数点数データa(a1、a2、...、am)、b(b1、b2、...、bm)[mは、2以上の整数]の内積を演算してもよい。なお、ブロック浮動小数点数データa、bは、データa、b毎に共通の指数Ea、Ebに固定されている。
【0011】
式(1)は、mが"4"の場合の内積演算の例を示す。式(1)において、符号"*"は積(乗算)を示し、符号"c"は、ブロック浮動小数点数データa、bの内積演算の結果に加算されるデータを示す。例えば、データcを別のブロック浮動小数点数データa、bの内積演算の結果とすることで、乗算部105の数に依存しない内積演算を実行することができる。
a1*b1+a2*b2+a3*b3+a4*b4+c ‥(1)
例えば、式(1)の4つの乗算は並列に実行され、その後、4つの乗算結果とデータcとが加算される。
【0012】
以下では、内積演算器100が16個の乗算部105を有するものとして説明するが、乗算部105の数は、16個に限定されず、2個以上であればよい。また、以下では、ブロック浮動小数点数データa、bを単にデータa、bとも称する。また、以下では、浮動小数点数データの計算におけるヒドンビットの取り扱いおよび丸め等の詳細な記述は省いている場合があるが、実施においてはIEEE(The Institute of Electrical and Electronics Engineers)754などの仕様に従い扱うものとする。
【0013】
図2は、
図1の内積演算器100による演算で使用するブロック浮動小数点数データa、bの形式の例を示す説明図である。各データa(a1、a2、...、a16)は、符号ビットSa(Sa1、Sa2、...、Sa16)と、仮数Ma(Ma1、Ma2、...、Ma16)と、共通指数Eaとにより表される。共通指数Eaは、16個のデータa1-a16に共通に設定される。各データaは、第1データの一例であり、各仮数Maは、第1仮数の一例であり、共通指数Eaは、第1共通指数の一例である。
【0014】
各データb(b1、b2、...、b16)は、符号ビットSb(Sb1、Sb2、...、Sb16)と、仮数Mb(Mb1、Mb2、...、Mb16)と、共通指数Ebとにより表される。共通指数Ebは、16個のデータb1-b16に共通に設定される。各データbは第2データの一例であり、各仮数Mbは第2仮数の一例であり、共通指数Ebは、第2共通指数の一例である。
【0015】
データa1-a16は、共通指数Eaが設定された1つのデータブロックに属し、データb1-b16は、共通指数Ebが設定された別のデータブロックに属する。例えば、データブロックに属するデータaの数、及びデータブロックに属するデータbの数は、乗算部105の数に等しい。
【0016】
データcは、例えば、IEEE754の浮動小数点形式で表され、符号ビットSc、指数Ec及び仮数Mcで表される。データcは、第3データの一例であり、仮数Mcは、第3仮数の一例である。
【0017】
以下では、内積演算器100が、単精度の浮動小数点数データに対応するブロック浮動小数点数データの内積演算を実行する例について説明する。しかしながら、内積演算器100は、半精度、単精度、倍精度又は任意の精度の浮動小数点数データに対応するブロック浮動小数点数データの内積演算を実行してもよい。
【0018】
図1に戻って、整数乗算器112は、例えば、Wallace Treeを含み、データa、bの仮数Ma、Mbの積を算出し、算出結果をサムS及びキャリーCとして出力してもよい。
【0019】
指数算出部120は、データaの共通指数Eaとデータbの共通指数Ebとデータcの指数Ecとに基づいて、シフタ130のシフト量Sc2を算出してもよい。例えば、シフト量Sc2は、指数Ecと共通指数Ea+共通指数Ebとの差("指数Ec-(Ea+Eb)")により算出される。シフト量Sc2は、第3ビットシフト量の一例である。また、指数算出部120は、共通指数Eaと共通指数Ebとの和を、内積演算結果の指数として、後処理部170に出力してもよい。後処理部170に出力される共通指数Eaと共通指数Ebとの和は、CSA140による加算結果である仮数の小数点位置を決める第3共通指数の一例であり、共通指数Eaと共通指数Ebとの和を算出する指数算出部120は、第2加算部の一例である。
【0020】
シフタ130は、データcの仮数Mcの桁を乗算部105による乗算結果の桁と合わせるために、データの桁位置を表すスケール上で仮数Mcのビット位置をシフト量Sc2に応じてシフトし、シフトした仮数McをCSA140に出力してもよい。シフタ130は、第2シフタの一例である。
【0021】
CSA140は、データa、b、cの符号S(Sa1、Sa2、...、Sa16、Sb1、Sb2、...、Sb16、Sc)を用いて、乗算部105による乗算結果(S、C)とシフタ130による桁合わせ後の仮数Mcとの和(加算値)を算出してもよい。CSA140は、算出により得たサムSとキャリーCをCPA150及びリーディングゼロ予測器160に出力してもよい。CSA140は、第1加算部の一例である。
【0022】
CPA150は、CSA140により算出されたサムSとキャリーCとを加算し、加算結果(すなわち、仮数部の内積演算の結果)を後処理部170に出力してもよい。リーディングゼロ予測器160は、CSA140により算出されたサムSとキャリーCとに基づいて、上位ビット側に連続して並ぶ"0"の数(すなわち、上位ビット側に最初に"1"が現れるビット位置)を算出してもよい。そして、リーディングゼロ予測器160は、算出したビット位置を示す情報を後処理部170に出力してもよい。
【0023】
後処理部170は、例えば、正規化シフタ172及び丸め回路174を有する。正規化シフタ172は、リーディングゼロ予測器160が算出したリーディングゼロの数に基づいて、IEEE754にしたがい、CPA150による加算結果の正規化を行ってもよい。すなわち、正規化シフタ172は、CPA150による加算結果(仮数)の最上位の"1"を、ヒドンビットにするためのシフト動作を行ってもよい。丸め回路174は、正規化されたデータの丸め処理を行ってもよい。そして、丸め処理された内積演算結果は、正規化シフタ172によるシフト量に応じて指数Ea+Ebが調整されてもよく、例えば、浮動小数点数データOUTとして出力される。なお、後処理部170は、浮動小数点数データ以外の形式で演算結果(OUT)を出力してもよい。また、
図1では、浮動小数点数データOUTの符号を算出するブロックの記載を省略している。
【0024】
図3は、
図1の内積演算器100を有する演算装置500の例を示すブロック図である。例えば、演算装置500は、半導体チップの形態を有しており、複数の演算処理部(PE)510と、演算処理部510の動作を制御する制御部520とを有している。演算装置500は、CPU又はGPUの一部に含まれてもよく、専用のプロセッサの一部に含まれてもよい。
【0025】
演算装置500は、ディープニューラルネットワーク(DNN:Deep Neural Network)又はコンボリューショナルニューラルネットワーク(CNN:Convolutional Neural Network)を使用したディープラーニング等に利用されてもよい。例えば、演算装置500により、複数の入力データと複数の重みデータとを順次乗算して積算する畳み込み処理に利用されてもよい。
【0026】
制御部520は、演算装置500に接続される上位装置(図示せず)からの指示に基づいて、演算処理部510に演算させるデータと、演算の実行に必要な制御データ等を演算処理部510に出力する。制御データは、演算の起動指示を含んでもよい。また、制御部520は、例えば、演算処理部510から演算結果を受信し、受信した演算結果を上位装置に出力し、又は演算結果を演算装置500に接続された外部メモリに格納する。
【0027】
複数の演算処理部510は、制御部520から受信するデータ及び制御データに基づいて、演算を並列に実行し、演算結果を制御部520に出力する。演算処理部510(PE)の例は、
図4に示される。
【0028】
図4は、
図3の演算処理部510(PE)の例を示すブロック図である。
図4の各ブロック間を接続する矢印は、複数ビットのデータを転送する信号線を示す。
図4では、制御信号の記載は省略する。演算処理部510(PE)は、例えば、
図1に示した内積演算器100と、ALU(Arithmetic and Logic Unit)200と、複数のSRAM(Static Random Access Memory)300とを有している。内積演算器100は、制御部520からの指示に基づいて、SRAM300に保持されているデータa、b、cを用いて内積演算を実行してもよく、演算の実行結果をSRAM300に格納してもよい。例えば、SRAM300には、
図2に示したデータa、b、cが複数組記憶されている。
【0029】
ALU200は、制御部520からの指示に基づいて、SRAM300に保持されているデータを用いて算術演算や論理演算等を実行してもよく、演算の実行結果をSRAM300に格納してもよい。また、ALU200は、ブロック浮動小数点化部220を有している。
【0030】
ブロック浮動小数点化部220は、例えば、制御部520からの指示に基づいて、SRAM300に保持された所定数の浮動小数点数データをブロック浮動小数点数データに変換する。例えば、ブロック浮動小数点化部220は、所定数の浮動小数点数データをそれぞれ含むデータブロックに共通に使用される共通指数Ea(又はEb)を生成する。共通指数Ea(又はEb)には、データブロック中の最大の浮動小数点数データの指数が採用されてもよい。換言すれば、共通指数Ea(又はEb)には、SRAM300に保持された各データブロック中の浮動小数点数データの指数の最大値が採用されてもよい。
【0031】
また、ブロック浮動小数点化部220は、データブロックに属する浮動小数点数データと共通指数Ea(又はEb)とに基づいて、ブロック浮動小数点数データの仮数Ma(又はMb)を生成してもよい。すなわち、ブロック浮動小数点化部220は、共通指数Ea(又はEb)に合わせてデータブロックに属する浮動小数点数データの仮数のそれぞれを仮数Ma(又はMb)に変更してもよい。
【0032】
例えば、仮数Maは、共通指数Eaと元の浮動小数点数データの指数との差に対応するビット数だけ右シフトすることで生成されてもよい。仮数Mbの生成も、仮数Maの生成と同様に実施されてもよい。なお、データブロック中の最大の浮動小数点数データでは、浮動小数点数データの仮数が、そのままブロック浮動小数点数データの仮数Ma(又はMb)に設定されてもよい。
【0033】
なお、ブロック浮動小数点化部220は、演算処理部510(PE)内であって、ALU200の外部に配置されてもよい。また、ブロック浮動小数点化部220の機能の一部は、制御部520により実現されてもよく、演算装置500に接続される上位装置等が実行するソフトウェアにより実現されてもよい。演算処理部510に搭載されるSRAM300の数は、2個に限定されない。また、SRAM300は、内積演算器100とALU200とで区別して使用されてもよく、演算するデータの種類等に応じて区別して使用されてもよい。
【0034】
図5は、
図1の内積演算器100の整数乗算器112に入力される仮数の例を示す説明図である。
図5では、整数乗算器112に入力される仮数Ma、Mbのうち、仮数Maを示している。また、仮数Maは、データ形式に合わせて23ビットとするが、ビット数はこの数字に限定されるものではない。
【0035】
図5に示す例では、16個のデータa1-a16(図示せず)のうち最大のデータは"a3"であるとする。例えば、この場合、データa3の指数が共通指数Eaに設定され、データの桁位置を表すスケール上において、共通指数Eaに対応する23ビットの範囲(ウィンドウ)の仮数Ma1-Ma16が整数乗算器112に入力される。
【0036】
内積演算器100では、元の浮動小数点数データの仮数のうち、23ビットのウィンドウに入らない仮数は、アンダーフローとなり、内積演算器100に入力される仮数(例えば、Ma2、Ma5)の値は、"0"になる。また、元の浮動小数点数データの仮数のうち、ウィンドウに含まれるビットが他より少ない仮数(例えば、Ma1、Ma6)は、内積演算器100に入力される仮数の有効ビットが少なくなる。一方、内積演算器100は、後述する他の内積演算器に比べて乗算部105の回路規模が小さいため、チップサイズを削減することができ、消費電力を下げることができる。あるいは、チップサイズを削減しない場合、1チップに搭載可能な内積演算器100の数を増やすことができる。
【0037】
以上、
図1から
図5に示す実施の形態では、共通指数Ea、Ebに基づいてビットシフトした仮数Ma、Mbを整数乗算器112で乗算することで、整数乗算器112の乗算結果を、ビットシフトすることなくCSA140に供給することができる。このため、乗算結果をビットシフトするシフタを乗算部105に設けることなく、複数組のデータの内積演算を実行することができる。この結果、シフタを乗算部105に設ける場合に比べて、内積演算器100の回路規模を小さくすることができ、消費電力を削減することができ、演算速度を向上することができる。回路規模及び消費電力の削減効果は、単純に考えれば内積演算器100に搭載される乗算部105の数が多いほど(すなわち、内積演算するブロック浮動小数点数a、bの数が多いほど)、高くなる。ただし、周辺回路等のサイズによって効果が打ち消される場合があり、適切な乗算部105の個数は具体的な回路設計によって定まる。
【0038】
図6は、本開示の別の実施の形態における演算器の例を示すブロック図である。
図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。
図6に示す演算器101は、
図1に示した演算器100と同様に、複数組のデータの積の和を算出する内積演算器として利用可能である。内積演算器101は、例えば、複数の乗算部106、指数算出部120、シフタ130、CSA140、CPA150、リーディングゼロ予測器160及び後処理部170を有している。
【0039】
各乗算部106は、例えば、整数乗算器112、シフト量算出部114及びシフタ116を有している。指数算出部120、シフタ130、CSA140、CPA150及び後処理部170の機能及び動作は、
図1に示した指数算出部120、シフタ130、CSA140、CPA150及び後処理部170の機能及び動作と同様であってもよい。
【0040】
図7は、
図6の内積演算器101による演算で使用するブロック浮動小数点数データa、bの形式の例を示す説明図である。
図2と同様の内容については、詳細な説明は省略する。この実施形態は、ブロック浮動小数点数a、bの各々が、シフトコードSCa(SCa1、SCa2、...、SCa16)、SCb(SCb1、SCb2、...、SCb16)を有することを除き、
図2に示したブロック浮動小数点数a、bと同様であってもよい。この実施形態のブロック浮動小数点数データa、bは、指数に対するオフセット値を、回路設計時など、事前に定められた複数のシフト量(固定値)の中から選択的に設定可能である。具体的には、指数の取り得る値に制約(具体的には、例えば、"2"と"4"と"6"に限る、等)を与えることで、シフタ116の回路サイズを極めてコンパクトに実装できる。シフトコードSCa、SCbの使い方については、
図8以降で説明する。
【0041】
図8は、
図6に示すシフトコードSCa、SCbとシフト量S(S1-S16)との関係を示す説明図である。シフトコードSCa(SCa1-SCa16)は、データの桁位置を表すスケール上において、共通指数Eaにより表される仮数Maの桁位置(ビット範囲)に対するビットシフト量を示すコードであり、第1コードの一例である。シフトコードSCb1-SCb16は、データの桁位置を表すスケール上において、共通指数Ebにより表される仮数Mbの桁位置(ビット範囲)に対するビットシフト量を示すコードであり、第2コードの一例である。
【0042】
図8では、データa1、b1に対応するシフトコードSCa1、SCb1とS値及びシフト量S1との関係の例を示すが、他のシフトコードSCa2-SCa16、SCb2-SCb16でも同様であってもよい。また、
図8では、シフトコードSCa1、SCb1のそれぞれが1ビットである場合を示す。シフトコードSCa1、SCb1のそれぞれが1ビットである場合、S値及びシフト量S1は3通りである。シフトコードSCa1、SCb1のそれぞれが2ビットである場合、S値及びシフト量S1は7通りである。
【0043】
この実施形態では、
図4に示したブロック浮動小数点化部220は、例えば、データaが属するデータブロック中の最大のデータaの指数を共通指数Eaに設定し、データbが属するデータブロック中の最大のデータbの指数を共通指数Ebに設定する。また、ブロック浮動小数点化部220は、例えば、最大のデータaの指数との指数差が所定量以上のデータaのシフトコードSCaを"1"に設定し、最大のデータaの指数との指数差が所定量未満のデータaのシフトコードSCaを"0"に設定する。ブロック浮動小数点化部220は、例えば、最大のデータbの指数との指数差が所定量以上のデータbのシフトコードSCbを"1"に設定し、最大のデータbの指数との指数差が所定量未満のデータbのシフトコードSCbを"0"に設定する。
【0044】
以下では、共通指数Eaが"8"であり、共通指数Ebが"6"であり、シフトコードSCa(又はSCb)により示される共通指数Ea(又はEb)との差n(シフトするビット数)が4ビットの場合について説明する。差nは、基準のビットシフト量の一例である。なお、共通指数Ea、Ebの値は、バイアスされていない実の指数値であるとする。
【0045】
シフトコードSCa="0"は、シフト動作をしないことを示し(0ビットシフト)、シフトコードSCa="1"は、基準のビットシフト量n(第1ビットシフト量)のシフト動作を示す。同様に、シフトコードSCb="0"は、シフト動作をしないことを示し(0ビットシフト)、シフトコードSCb="1"は、基準のビットシフト量n(第2ビットシフト量)のシフト動作を示す。
【0046】
S値は、仮数Ma1、Mb1に対応するシフト量算出部114(
図6)が出力するシフト量S1を示すコードであり、シフトコードSCa1、SCb1の和である。シフタ116によるシフト量S1は、S値と差nとの積により示される。
図8に示す例では、差n="4"であるため、シフト量S1は、S値が"0"のとき"0"になり、S値が"1"のとき"4"になり、S値が"2"のとき"8"になる。
【0047】
シフト量S1は、シフタ116で実行する整数乗算器112の乗算結果のビットシフト量(右シフト)を示す。例えば、シフト量S1は、式(2)で示すように、シフトコードSCa、SCbの和に基準のビットシフト量nを乗じることで生成され、制約された範囲での離散的な値を取る。
シフト量S1=(SCa+SCb)*n ‥(2)
なお、シフトコードSCa、SCbのビット数を増やすだけでなく、差nをシフトコードSCa、SCb毎に設定することでも、シフト量S1の種類を増やすことができる。
【0048】
図6に戻って、シフト量算出部114は、シフトコードSCa(SCa1、SCa2、...、SCa16)、SCb(SCb1、SCb2、...、SCb16)を加算してもよく、加算により得た値に対応するシフト量S(S1、S2、...、S16)を算出してもよい。なお、シフト量算出部114は、シフトコードSCa、SCbとシフト量S1-S16との関係を記憶したレジスタ等を参照することで、シフト量S1-S16を求めてもよい。
【0049】
各シフタ116は、整数乗算器112から受信したサムS及びキャリーCを各シフト量S1-S16に応じたビット数だけ、データの桁位置を表すスケール上で右(下位側)にシフトしてもよく、シフトしたサムS及びキャリーCをCSA140に出力してもよい。シフタ116は、第1シフタの一例である。
【0050】
例えば、シフト量S1の算出に使用するために予め設定される差nが"12"であるとする。この場合、シフトコードSCa、SCbがともに"0"のときのシフト量S1は0ビットである。シフトコードSCa、SCbのいずれかが"1"のときのシフト量S1は12ビットである。シフトコードSCa、SCbがともに"1"のときのシフト量S1は、24ビットである。
【0051】
このように、シフトコードSCa、SCbが1ビットで表され、差nが"12"の場合、シフト量S1は、"0"、"12"、"24"の何れかになる。したがって、シフタ116は、0ビットシフト又は12ビットシフトのいずれかを選択するマルチプレクサを2段接続することで実現できる。換言すれば、回路規模の増加を抑えて、シフト量の大きいシフタ116を実現できる。
【0052】
これに対して、浮動小数点数データの内積演算を実行する内積演算器では、1ビット単位でシフト量を設定可能な可変長シフタが必要である。この種の可変長シフタでは、最大シフト量を31ビットにする場合、5段のマルチプレクサが必要であり、最大シフト量を63ビットにする場合、6段のマルチプレクサが必要である。浮動小数点数データの内積演算を実行する内積演算器は、
図11に示される。
【0053】
なお、シフト量S1が最大値であり、仮数Ma1、Ma2の積のビットシフト後のデータ値が小さすぎて無視できる場合、シフタ116は、仮数Ma1、Ma2の積をシフトしたデータを出力せずに、"0"を示すデータを出力してもよい。この例では、シフト量S1の最大値は、"24"であり、
図8のS値が最大値("2")の場合である。例えば、シフタ116は、
図4に示す演算処理部(PE)510に設けられるモードレジスタ等により"0"の出力が設定された場合、CSA140への出力を"0"に設定するゲート回路等を有する。シフタ116にゲート回路を追加する必要があるが、12ビットをシフトするマルチプレクサが1段不要になるため、シフタ116の回路規模を削減することができる。
【0054】
図6に示す内積演算器101では、浮動小数点数データの内積演算器に比べて、シフタ116のマルチプレクサの段数を、例えば、半分以下にすることができる。これにより、乗算部106の回路規模を削減することができ、内積演算器101の回路規模を削減することができる。この結果、内積演算器101が搭載される演算装置のチップサイズを削減することができ、演算装置のコストを削減することができる。また、シフタ116のマルチプレクサの段数を少なくできるため、演算速度を向上することができ、内積演算器101の消費電力を削減することができる。単純には、回路規模及び消費電力の削減効果は、乗算する仮数Ma、Mbペアの数(すなわち、乗算部106の数)が多いほど大きい。
【0055】
図6に示す内積演算器101は、
図1に示した内積演算器100と同様に、
図3に示した演算装置500に含まれる複数の演算処理部(PE)510の各々に搭載されてもよい。各演算処理部510は、
図4に示した内積演算器100の代わりに内積演算器101を有してもよく、内積演算器100と内積演算器101が一緒に搭載されていてもよい。
【0056】
なお、内積演算器101を有する演算処理部510は、
図4に示した演算処理部510のブロック浮動小数点化部220に、シフトコードSCa、SCbを生成する機能を追加したことを除き、
図4に示した演算処理部510と同様の構成及び機能を有している。
【0057】
この実施形態のブロック浮動小数点化部220は、上述の実施形態におけるブロック浮動小数点化部220と同様に算出した共通指数Ea(又はEb)と各浮動小数点数データの指数とに基づいて、データa(又はデータb)毎にシフトコードSCa(又はSCb)を生成してもよい。そして、ブロック浮動小数点化部220は、生成した共通指数Ea(又はEb)、仮数Ma(又はMb)、シフトコードSCa(又はSCb)及び符号ビットSa(又はSb)をSRAM300に格納してもよい。符号ビットSa(又はSb)は、元の浮動小数点数データの符号が使用されてもよい。ブロック浮動小数点化部220は、共通指数Ea、Eb、仮数Ma、Mb及びシフトコードSCa、SCbを生成するデータ生成部の一例である。
【0058】
図9は、
図6の内積演算器101の整数乗算器112に入力される仮数の例を示す説明図である。
図5と同様の内容については、詳細な説明は省略する。
図9においても、整数乗算器112に入力される仮数Ma、Mbのうち、仮数Maを示し、仮数Ma、Mbは24ビットであるとする。内積演算器101の24ビットの仮数Maは、単精度の浮動小数点数データの23ビットの仮数とヒドンビットとに相当する。
【0059】
また、
図9に示す例においても、16個のデータa1-a16(図示せず)のうち最大のデータは"a3"であるとする。この場合、内積演算器101では、データa3の指数が共通指数Eaに設定される。そして、シフトコードSCaが"0"の場合、
図1の内積演算器100と同様に、共通指数Eaに対応する23ビットの範囲(ウィンドウ)の仮数Maが整数乗算器112に入力される。一方、シフトコードSCaが"1"の場合、共通指数Eaに対応する23ビットの範囲を、予め設定された差n(例えば、12ビット)だけ右(下位側)にずらした範囲(ウィンドウ)の仮数Maが整数乗算器112に入力される。
【0060】
図6に示した内積演算器101では、元の浮動小数点数データの大きさ(指数値)に応じて、仮数Ma(Ma1、Ma2、...、Ma16)毎に、シフトコードSCa("0"又は"1")が設定される。そして、シフトコードSCaが"1"の場合、予め設定された差n(例えば、12ビット)だけ右にずらしたウィンドウに含まれるビットが仮数Maとして内積演算器100に入力される。
【0061】
これにより、内積演算器101では、
図1の内積演算器100でアンダーフローしていた仮数M2a、M5a(
図5)をアンダーフローさせることなく乗算を実行することができる。すなわち、ブロック浮動小数点数データの狭いダイナミックレンジを広げることができる。また、内積演算器100で有効ビット数が少なかった仮数M1a、M6aの有効ビットを増やすことができる。さらに、シフトコードSCaが"0"の仮数M3a、M4a、M16aについては、有効ビット数を
図1の内積演算器100と同じにすることができる。
【0062】
シフトコードSCbによりウィンドウを下位ビット側にずらすことができる仮数Mbについても、アンダーフローの発生の可能性を低くすることができ、仮数Maと同様に有効ビットを増加させることができる。また、シフタ116の段数を削減することができる。この結果、
図6に示した内積演算器101では、回路規模の増加と消費電力の増加と演算速度の低下とを抑制しつつ、内積演算の精度を向上することができる。
【0063】
図10は、
図6の内積演算器101を有する演算装置500(
図3)の動作の例を示すフローチャートである。すなわち、
図10は、演算装置500の内積演算器101が内積演算を実行する場合の動作方法を示している。例えば、
図10に示すフローは、演算装置500に接続される上位装置からの指示に基づいて開始される。上位装置は、内積演算に使用する浮動小数点数データ(オペランド)をSRAM300(
図5)に書き込んでおく。
図10は、1回の内積演算の実行を示している。例えば、
図10に示す動作は、
図3に示した複数の演算処理部(PE)510で並列に実行されてもよい。
【0064】
まず、ステップS10において、演算装置500のブロック浮動小数点化部220は、SRAM300から所定数の浮動小数点数データをデータブロックとして読み出し、読み出した浮動小数点数データをブロック浮動小数点数データに変換してもよい。なお、上述した式(1)のデータcに相当する浮動小数点数データは、ブロック浮動小数点数データに変換されなくてもよい。ブロック浮動小数点化部220は、変換したブロック浮動小数点数データをSRAM300に格納してもよい。ここで、SRAM300に格納するブロック浮動小数点数データは、例えば、
図7に示した共通指数Ea、Eb、仮数Ma、Mb、符号ビットSa、Sbと、データc(浮動小数点数データSc+Ec+Mc)とを含む。
【0065】
次に、ステップS12において、演算装置500のブロック浮動小数点化部220は、
図8で説明したように、共通指数Eaと、元の各浮動小数点数データの指数とに基づいて、仮数Ma毎にシフトコードSCaを生成してもよい。同様に、ブロック浮動小数点化部220は、共通指数Ebと、元の各浮動小数点数データの指数とに基づいて、仮数Mb毎にシフトコードSCbを生成してもよい。ブロック浮動小数点化部220は、生成したシフトコードSCa、SCbをSRAM300に格納してもよい。なお、ステップS10、S12は、逆順に実行されてもよく、並列に実行されてもよい。
【0066】
次に、ステップS14において、演算装置500の内積演算器101(
図6)は、SRAM300に保持されたデータa、bのブロック浮動小数点数データと、浮動小数点数データcとを読み出し、内積演算を実行してもよい。次に、ステップS16において、内積演算器101は、内積演算の結果を浮動小数点数データに変換し、変換したデータをSRAM300に格納してもよく、これらにより1回の内積演算の実行が完了する。
【0067】
図11は、浮動小数点数データの内積演算を実行する内積演算器の例(比較例)を示すブロック図である。
図6と同様の要素については、同じ符号を付し、詳細な説明を省略する。
【0068】
図11に示す内積演算器102は、複数の乗算部107、指数算出部121、シフタ130、CSA140、CPA150、リーディングゼロ予測器160及び後処理部170を有している。各乗算部107は、整数乗算器112及びシフタ117を有している。
【0069】
内積演算器102は、複数の浮動小数点数データa(a1、a2、...、am)、b(b1、b2、...、bm)[mは、2以上の整数]の内積を演算する。内積演算の例は、データがブロック浮動小数点数データでなく、浮動小数点数データであることを除き、式(1)と同じである。
【0070】
整数乗算器112は、データa、bの仮数Ma、Mbの積を算出し、算出結果をサムS及びキャリーCとして出力する。シフタ117は、整数乗算器112から受信したサムS及びキャリーCを、指数算出部121が算出するシフト量E(E1、E2、...、E16)が示すシフト量だけ右(下位側)にシフトし、シフトしたサムS及びキャリーCをCSA140に出力する。
【0071】
例えば、シフタ117は、シフト量Eを1ビット単位で設定可能な可変長シフタである。このため、シフト量Eの最大値を31ビットにする場合、5段のマルチプレクサが必要であり、シフト量Eの最大値を63ビットにする場合、6段のマルチプレクサが必要である。したがって、シフタ117の回路規模は、
図1のシフタ116の回路規模より大きく、シフタ117の消費電力は、
図1のシフタ116の消費電力より大きい。さらに、シフタ117のシフト動作時間は、
図1のシフタ116のシフト動作時間より長い。
【0072】
指数算出部121は、データaの指数Ea(Ea1、Ea2、...、Ea16)とデータbの指数Eb(Eb1、Eb2、...、Eb16)とに基づいて、乗算部107毎にシフタ117のシフト量E(E1-E16)を算出する。例えば、指数算出部121は、指数の和Ea+Ebの最大値を基準にし、最大値以外の指数の和Ea+Ebと最大値との差をシフタ117のシフト量E(右シフト)に設定する。これにより、各乗算部107から出力される乗算結果の桁が合わせられる。なお、和Ea+Ebの最大値に対応するシフト量Eは、ゼロに設定される。
【0073】
また、指数算出部121は、データaの指数Ea(Ea1、Ea2、...、Ea16)とデータbの指数Eb(Eb1、Eb2、...、Eb16)とデータcの指数Ecとに基づいて、指数Ecのシフト量Sc2を算出する。例えば、シフト量Sc2は、指数の和Ea+Ebと最大値と指数Ecとの差を示す。また、指数算出部121は、指数の和Ea+Ebと最大値を内積演算結果の指数として、後処理部170に出力する。
【0074】
シフタ130は、データcの仮数Mcの桁を乗算部106による乗算結果の桁と合わせるために、仮数Mcのビット位置をシフト量Sc2に応じてシフトし、シフトした仮数McをCSA140に出力する。CSA140、CPA150及び後処理部170の機能及び動作は、
図1に示したCSA140、CPA150及び後処理部170の機能及び動作と同様であってもよい。そして、後処理部170は、浮動小数点数データによる内積演算の結果を、例えば、浮動小数点数データOUTとして出力する。なお、
図11では、浮動小数点数データOUTの符号を算出するブロックの記載を省略している。
【0075】
以上、
図6から
図10に示す実施の形態では、共通指数Ea、Ebとの差を回路設計時など、事前に定義した制約の中で示すシフトコードSCa、SCbの設定により、整数乗算器112に与える仮数Ma、Mbのダイナミックレンジを広くできる。これにより、仮数Ma、Mbの有効ビットを増加させて、内積演算を実行することができる。したがって、例えば、仮数をアンダーフローさせることなく乗算を実行することが可能になり、演算精度を向上することができる。
【0076】
また、シフタ116で使用するシフト量S1-S16の数を制約できるため、シフタ116のマルチプレクサの段数を、浮動小数点数データ用の内積演算器102に設けられるシフタ117のマルチプレクサの段数に比べて削減することができる。したがって、
図1に示したシフタ116を持たない内積演算器100に対する回路規模の増加量を抑えることができ、消費電力の増加量を抑えることができ、演算速度の低下量を抑えることができる。すなわち、回路規模の増加と消費電力の増加と演算速度の低下を抑制しつつ、内積演算の速度と精度とを向上することができる。
【0077】
図12は、本開示の別の実施の形態の演算装置における演算処理部の例を示すブロック図である。この実施の形態の演算装置は、演算処理部(PE)512が、
図4に示した演算処理部510と相違することを除き、
図3に示した演算装置500と同様であってもよい。なお、この実施の形態の演算装置の動作フローは、
図10のステップS10による浮動小数点数データからブロック浮動小数点数データへの変換方法が異なることを除き、
図10の動作と同様であってもよい。
【0078】
図12では、ALU200は、
図4に示したブロック浮動小数点化部220の代わりにブロック浮動小数点化部222を有し、新たに抽出部450を有していてもよい。演算処理部512のその他の構成は、
図4に示した演算処理部510と同様であってもよい。なお、ブロック浮動小数点化部222は、演算処理部512(PE)内であって、ALU200の外部に配置されてもよい。また、ブロック浮動小数点化部220の機能の一部は、制御部520(
図3)により実現されてもよく、演算装置500に接続される上位装置等が実行するソフトウェアにより実現されてもよい。
【0079】
ブロック浮動小数点化部222は、例えば、制御部520(
図3)からの指示に基づいて、SRAM300に保持された所定数の浮動小数点数データを
図13に示すブロック浮動小数点数データに変換する。変換されたブロック浮動小数点数データは、SRAM300に格納される。抽出部450は、ブロック浮動小数点数データをSRAM300から読み出して、共通指数Ea、EbとシフトコードSCa、SCbを抽出する。抽出部450は、抽出した共通指数Ea、EbとシフトコードSCa、SCbとを、SRAM300から読み出したブロック浮動小数点数データとともに、内積演算器100に出力してもよい。抽出部450による抽出動作の例は、
図14で説明する。
【0080】
図13は、
図12のブロック浮動小数点化部222により生成されるブロック浮動小数点数データ形式の例を示す説明図である。この実施の形態では、各データa、b、cの形式は、IEEE754の浮動小数点数データの形式に対応する。すなわち、ブロック浮動小数点数データの符号部、指数部及び仮数部のそれぞれのビット数と配列は、IEEE754の浮動小数点数データの形式と同じである。例えば、単精度の場合、符号部は1ビット、指数部は8ビット、仮数部は23ビットである。
【0081】
但し、共通指数Eaは、データブロック内のデータa1-a16の少なくとも1つの指数部に埋め込まれ、共通指数Ebは、データブロック内のデータb1-b16の少なくとも1つの指数部に埋め込まれてもよい。この際、例えば、Ea又はEbが埋め込まれなかったデータa1-a16又はデータb1-b16については、読み出しの際にそれらの指数部を読み出さないようにして消費電力を減らすことができる。また、Ea又はEbが埋め込まれなかったデータa1-a16又はデータb1-b16については、それらの指数部を仮数部として扱うことで仮数部を長くし、計算精度の向上を図ることができる。また、例えば、Eaをデータa1-a16のいずれか又はすべてに分散させて埋め込み(例えば1ビットずつ)、Eaが埋め込まれなかったデータa1-a16の指数部を仮数部として扱うことで仮数部を長くし、計算精度の向上を図ることができる。長くする仮数部は、埋め込みが行われないデータがあったとしても、埋め込みが行われたデータと同じビット数だけ長くして仮数部のビット数をそろえてもよい。Ebについても同様である。この際、例えば、埋め込まれなかったデータa1-a16の指数部を仮数部として扱かわず、データ読み出しの際に埋め込まれなかったデータa1-a16の指数部を読み出さないようにして、消費電力を減らすことができる。ブロック浮動小数点数データの形式を、IEEE754の浮動小数点数データの形式に対応させることで、ブロック浮動小数点数データへの変換を容易にでき、ブロック浮動小数点数データの扱い(例えば、ソフトウェアによる処理)が容易にできる。
【0082】
図14は、
図12のブロック浮動小数点化部222及び抽出部450の動作の例を示す説明図である。
図14は、
図13の指数部を示している。
図14に示す例では、データaが属するデータブロック中の最大値は、データa3であるとし、データbが属するデータブロック中の最大値は、データb2であるとする。
【0083】
例えば、ブロック浮動小数点化部222は、最大値であるデータa3の指数(16進数で"87")との指数差が所定量以上のデータaの指数部にオールゼロを設定する。また、ブロック浮動小数点化部222は、データa3の指数との指数差が所定量未満のデータaの指数部にデータa3の指数(すなわち、共通指数Ea)を設定する。
図14の例では、指数差が所定量以上のデータa2、a4の指数部にオールゼロが設定され、他のデータa1、a3、a5-a16の指数部に共通指数Eaが設定される。
【0084】
同様に、ブロック浮動小数点化部222は、最大値であるデータb2の指数(16進数で"85")との指数差が所定量以上のデータbの指数部にオールゼロを設定してもよい。また、ブロック浮動小数点化部222は、データb2の指数との指数差が所定量未満のデータbの指数部にデータb2の指数(すなわち、共通指数Eb)を設定してもよい。
図14の例では、指数差が所定量以上のデータb1、b16の指数部にオールゼロが設定され、他のデータb2-b15の指数部に共通指数Ebが設定される。ブロック浮動小数点化部222により設定されたデータa、bの指数部は、
図13に示した符号部及び仮数部とともにSRAM300(
図12)に格納されてもよい。
【0085】
抽出部450は、
図1に示した内積演算器100がブロック浮動小数点数データを用いて内積演算を実行する場合、SRAM300から指数部の各値を読み出す。抽出部450は、各データa1-a16の指数部のビット(
図14の横方向に並ぶビット)のノア論理(NOR)を演算して、各データa1-a16のシフトコードSCaを生成してもよい。これにより、指数部に共通指数Ea(16進数で"87")が設定されたデータa1、a3、a16のシフトコードSCaは"0"になり、指数部にオールゼロが設定されたデータa2、a4のシフトコードSCaは"1"になる。すなわち、抽出部450は、各データaの指数部がオールゼロか否かに応じて、データa毎にシフトコードSCaを抽出してもよい。
【0086】
抽出部450は、各データb1-b16の指数部のビット(
図14の横方向に並ぶビット)のノア論理(NOR)を演算して、各データb1-b16のシフトコードSCbを生成してもよい。これにより、指数部に共通指数Eb(16進数で"85")が設定されたデータb2-b15のシフトコードSCbは"0"になり、指数部にオールゼロが設定されたデータb1、b16のシフトコードSCbは"1"になる。すなわち、抽出部450は、各データbの指数部がオールゼロか否かに応じて、データb毎にシフトコードSCbを抽出してもよい。
【0087】
また、抽出部450は、16個のデータa1-a16において、指数部のビット番号毎にオア論理(OR)を演算して、共通指数Eaを生成してもよい。抽出部450は、16個のデータb1-b16において、指数部のビット番号毎にオア論理(OR)を演算して、共通指数Ebを生成してもよい。すなわち、抽出部450は、データa1-a16の指数部のビット番号毎(
図14の縦方向に並ぶビット毎)にビット値の論理和を算出し、算出した論理和を共通指数Eaとして抽出してもよい。また、抽出部450は、データb1-b16の指数部のビット番号毎(
図14の縦方向に並ぶビット毎)にビット値の論理和を算出し、算出した論理和を共通指数Ebとして抽出してもよい。
【0088】
以上の抽出部450の動作により、浮動小数点形式でSRAM300に保持されているデータa、bの指数部から、シフトコードSCa、SCbと共通指数Ea、Ebとを抽出することができる。これにより、
図13で説明したように、ブロック浮動小数点数データの扱いを容易にでき、ソフトウェアによる処理が容易にできる。
【0089】
図12から
図14に示す実施の形態に関して以下に付記を示す。
(付記)
前記データ生成部(222)は、
最大の前記第1データ(a3)の指数との指数差が所定量以上の前記第1データの指数部にオールゼロを設定し、最大の前記第1データの指数との指数差が所定量未満の前記第1データの指数部に前記第1共通指数(Ea)を設定し、
最大の前記第2データ(b2)の指数との指数差が所定量以上の前記第2データの指数部にオールゼロを設定し、最大の前記第2データの指数との指数差が所定量未満の前記第2データの指数部に前記第2共通指数(Eb)を設定し、
前記演算装置は、さらに、
前記データ生成部により設定された前記各第1データの指数部がオールゼロか否かに応じて、前記第1データ毎に前記第1コード(SCa)を抽出し、前記各第2データの指数部がオールゼロか否かに応じて、前記第2データ毎に前記第2コード(SCb)を抽出し、前記複数の第1データの指数部のビット番号毎にビット値の論理和を算出し、算出した論理和を前記第1共通指数として抽出し、前記複数の第2データの指数部のビット番号毎にビット値の論理和を算出し、算出した論理和を前記第2共通指数として抽出する抽出部(450)を有する。
【0090】
以上、
図12から
図14に示す実施の形態においても、
図6から
図10に示した実施の形態と同様の効果を得ることができる。例えば、共通指数Ea、Ebとの差を回路設計時など、事前に定義した制約の中で示すシフトコードSCa、SCbの設定により、ダイナミックレンジを広くでき、仮数Ma、Mbの有効ビットを増加させて、内積演算を実行することができる。これにより、例えば、仮数をアンダーフローさせることなく乗算を実行することが可能になり、演算精度を向上することができる。また、シフタ116のマルチプレクサの段数を、浮動小数点数データ用の内積演算器101に設けられるシフタ117のマルチプレクサの段数に比べて削減することができる。この結果、回路規模の増加と消費電力の増加と演算速度の低下を抑制しつつ、内積演算の速度と精度とを向上することができる。
【0091】
さらに、
図12から
図14に示す実施の形態では、ブロック浮動小数点数データの形式を、IEEE754の浮動小数点数データの形式に対応させることで、ブロック浮動小数点数データへの変換を容易にできる。また、ブロック浮動小数点数データの扱い(例えば、ソフトウェアによる処理)を容易にできる。さらに、各データa1-a16、b1-b16の指数部に格納する値を工夫することで、簡易な論理演算により、共通指数Ea、Eb及びシフトコードSCa、SCbを抽出することができる。
【0092】
図15は、
図3に示した演算装置500が搭載されるコンピュータ600を含むシステムSYSの構成例を示すブロック図である。コンピュータ600は、一例として、演算装置500と、主記憶装置620(メモリ)と、補助記憶装置630(メモリ)と、ネットワークインタフェース640と、デバイスインタフェース650と、を備え、これらがバス610を介して接続されることで実現されてもよい。なお、例えば、演算装置500は、主記憶装置620又は補助記憶装置630等の記憶装置に記憶された命令に基づいて、内積演算を実行してもよい。
【0093】
図15のコンピュータ600は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、
図15では、1台のコンピュータ600が示されているが、ソフトウェアが複数台のコンピュータにインストールされて、当該複数台のコンピュータそれぞれがソフトウェアの同一の又は異なる一部の処理を実行してもよい。この場合、コンピュータそれぞれがネットワークインタフェース640等を介して通信して処理を実行する分散コンピューティングの形態であってもよい。つまり、1又は複数の記憶装置に記憶された命令を1台又は複数台のコンピュータ600が実行することで機能を実現するシステムが構成されてもよい。また、端末から送信された情報をクラウド上に設けられた1台又は複数台のコンピュータ600で処理し、この処理結果を端末に送信するような構成であってもよい。
【0094】
各種演算は、コンピュータ600に搭載される1又は複数の演算装置500を用いて、又はネットワークを介した複数台のコンピュータ600を用いて、並列処理で実行されてもよい。また、各種演算が、演算装置500内に複数ある演算コアに振り分けられて、並列処理で実行されてもよい。また、本開示の処理、手段等の一部又は全部は、ネットワークを介してコンピュータ600と通信可能なクラウド上に設けられたプロセッサ及び記憶装置の少なくとも一方により実現されてもよい。このように、演算装置500による各種演算の形態は、1台又は複数台のコンピュータによる並列コンピューティングの形態であってもよい。
【0095】
演算装置500は、少なくともコンピュータの制御又は演算のいずれかを行う電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、ASIC等)であってもよい。また、演算装置500は、汎用プロセッサ、特定の演算を実行するために設計された専用の処理回路又は汎用プロセッサと専用の処理回路との両方を含む半導体装置のいずれであってもよい。また、演算装置500は、光回路を含むものであってもよいし、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0096】
演算装置500は、コンピュータ600の内部構成の各装置等から入力されたデータやソフトウェアに基づいて演算処理を行ってもよく、演算結果や制御信号を各装置等に出力してもよい。演算装置500は、コンピュータ600のOS(Operating System)や、アプリケーション等を実行することにより、コンピュータ600を構成する各構成要素を制御してもよい。
【0097】
演算装置500は、1又は複数のチップにより実現されてもよい。ここで、演算装置500は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
【0098】
主記憶装置620は、演算装置500が実行する命令及び各種データ等を記憶してもよく、主記憶装置620に記憶された情報が演算装置500により読み出されてもよい。補助記憶装置630は、主記憶装置620以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ又は不揮発性メモリのいずれでもよい。演算装置500において各種データ等を保存するための記憶装置は、主記憶装置620又は補助記憶装置630により実現されてもよく、演算装置500に内蔵される内蔵メモリにより実現されてもよい。
【0099】
コンピュータ600が、少なくとも1つの記憶装置(メモリ)と、この少なくとも1つの記憶装置に接続(結合)される少なくとも1つの演算装置500で構成される場合、記憶装置1つに対して、少なくとも1つの演算装置500が接続されてもよい。また、1つの演算装置500に対して、少なくとも1つの記憶装置が接続されてもよい。また、複数の演算装置500のうち少なくとも1つの演算装置500が、複数の記憶装置のうち少なくとも1つの記憶装置に接続される構成を含んでもよい。また、複数台のコンピュータ600に含まれる記憶装置と演算装置500によって、この構成が実現されてもよい。さらに、記憶装置が演算装置500と一体になっている構成(例えば、L1キャッシュ、L2キャッシュを含むキャッシュメモリ)を含んでもよい。
【0100】
ネットワークインタフェース640は、無線又は有線により、通信ネットワーク700に接続するためのインタフェースである。ネットワークインタフェース640は、既存の通信規格に適合したもの等、適切なインタフェースを用いればよい。ネットワークインタフェース640により、通信ネットワーク700を介して接続された外部装置710と情報のやり取りが行われてもよい。なお、通信ネットワーク700は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等の何れか又はそれらの組み合わせであってもよく、コンピュータ600と外部装置710Aとの間で情報のやり取りが行われるものであればよい。WANの一例としてインターネット等があり、LANの一例としてIEEE802.11やイーサネット(登録商標)等があり、PANの一例としてBluetooth(登録商標)やNFC(Near Field Communication)等がある。
【0101】
デバイスインタフェース650は、外部装置720と直接接続するUSB等のインタフェースである。
【0102】
外部装置710はコンピュータ600とネットワークを介して接続されている装置である。外部装置720はコンピュータ600と直接接続されている装置である。
【0103】
外部装置710又は外部装置720は、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、タッチパネル等のデバイスであり、取得した情報をコンピュータ600に与える。また、パーソナルコンピュータ、タブレット端末、スマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
【0104】
また、外部装置710又は外部装置720は、一例として、出力装置でもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
【0105】
また、外部装置710また外部装置720は、記憶装置(メモリ)であってもよい。例えば、外部装置710はネットワークストレージ等であってもよく、外部装置720はHDD等のストレージであってもよい。
【0106】
また、外部装置710又は外部装置720は、コンピュータ600の構成要素の一部の機能を有する装置でもよい。つまり、コンピュータ600は、外部装置710又は外部装置720に処理結果の一部又は全部を送信してもよいし、外部装置710又は外部装置720から処理結果の一部又は全部を受信してもよい。
【0107】
本明細書(請求項を含む)において、「a、b及びcの少なくとも1つ(一方)」又は「a、b又はcの少なくとも1つ(一方)」の表現(同様な表現を含む)が用いられる場合は、a、b、c、a-b、a-c、b-c又はa-b-cのいずれかを含む。また、a-a、a-b-b、a-a-b-b-c-c等のように、いずれかの要素について複数のインスタンスを含んでもよい。さらに、a-b-c-dのようにdを有する等、列挙された要素(a、b及びc)以外の他の要素を加えることも含む。
【0108】
本明細書(請求項を含む)において、「データを入力として/を用いて/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、データそのものを用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、データの中間表現等)を用いる場合を含む。また「データを入力として/を用いて/データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合(同様な表現を含む)、特に断りがない場合、当該データのみに基づいて当該結果が得られる場合や、当該データ以外の他のデータ、要因、条件及び/又は状態にも影響を受けて当該結果が得られる場合を含む。また、「データを出力する」旨が記載されている場合(同様な表現を含む)、特に断りがない場合、データそのものを出力として用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、各種データの中間表現等)を出力とする場合も含む。
【0109】
本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0110】
本明細書(請求項を含む)において、「AがBするよう構成される(A configured to B)」との表現が用いられる場合は、要素Aの物理的構造が、動作Bを実行可能な構成を有するとともに、要素Aの恒常的(permanent)又は一時的(temporary)な設定(setting/configuration)が、動作Bを実際に実行するように設定(configured/set)されていることを含んでよい。例えば、要素Aが汎用プロセッサである場合、当該プロセッサが動作Bを実行可能なハードウェア構成を有するとともに、恒常的(permanent)又は一時的(temporary)なプログラム(命令)の設定により、動作Bを実際に実行するように設定(configured)されていればよい。また、要素Aが専用プロセッサ、専用演算回路等である場合、制御用命令及びデータが実際に付属しているか否かとは無関係に、当該プロセッサの回路的構造が動作Bを実際に実行するように構築(implemented)されていればよい。
【0111】
本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」及び有する「(having)等」)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0112】
本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」、「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0113】
本明細書において、ある実施形態の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施形態についても当該効果が得られると理解されるべきである。但し、当該効果の有無は、一般に種々の要因、条件及び/又は状態に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の要因、条件及び/又は状態が満たされたときに実施形態に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る開示において、当該効果が必ずしも得られるものではない。
【0114】
本明細書(請求項を含む)において、「最大化する(maximize)/最大化(maximization)」等の用語が用いられる場合は、グローバルな最大値を求めること、グローバルな最大値の近似値を求めること、ローカルな最大値を求めること、及びローカルな最大値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最大値の近似値を確率的又はヒューリスティックに求めることを含む。同様に、「最小化する(minimize)/最小化(minimization)」等の用語が用いられる場合は、グローバルな最小値を求めること、グローバルな最小値の近似値を求めること、ローカルな最小値を求めること、及びローカルな最小値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最小値の近似値を確率的又はヒューリスティックに求めることを含む。同様に、「最適化する(optimize)/最適化(optimization)」等の用語が用いられる場合は、グローバルな最適値を求めること、グローバルな最適値の近似値を求めること、ローカルな最適値を求めること、及びローカルな最適値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最適値の近似値を確率的又はヒューリスティックに求めることを含む。
【0115】
本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現(同様な表現を含む)が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、電子回路を含む装置等を含んでよい。
【0116】
本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置のうち個々の記憶装置は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。また、複数の記憶装置のうち一部の記憶装置がデータを記憶する構成を含んでもよい。
【0117】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本開示の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した実施形態において、数値又は数式を説明に用いている場合、これらは例示的な目的で示されたものであり、本開示の範囲を限定するものではない。また、実施形態で示した各動作の順序も例示的なものであり、本開示の範囲を限定するものではない。
【符号の説明】
【0118】
100、101、102 内積演算器
105、106、107 乗算部
112 整数乗算器
114 シフト量算出部
116 シフタ
120 指数算出部
130 シフタ
140 CSA
150 CPA
160 リーディングゼロ予測器
170 後処理部
172 正規化シフタ
174 丸め回路
200 ALU
220、222 ブロック浮動小数点化部
300 SRAM
450 抽出部
500 演算装置
510 演算処理部(PE)
520 制御部520
600 コンピュータ
610 バス
620 主記憶装置
630 補助記憶装置
640 ネットワークインタフェース
650 デバイスインタフェース
a、b ブロック浮動小数点数データ
Ea、Eb 共通指数
Ec 指数
Ma、Mb、Mc 仮数
SCa、SCb シフトコード