JP2022074442A - 演算装置および演算方法 - Google Patents

演算装置および演算方法 Download PDF

Info

Publication number
JP2022074442A
JP2022074442A JP2020184482A JP2020184482A JP2022074442A JP 2022074442 A JP2022074442 A JP 2022074442A JP 2020184482 A JP2020184482 A JP 2020184482A JP 2020184482 A JP2020184482 A JP 2020184482A JP 2022074442 A JP2022074442 A JP 2022074442A
Authority
JP
Japan
Prior art keywords
vector
matrix
unit
addition
input
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
JP2020184482A
Other languages
English (en)
Inventor
耕一郎 坂
Koichiro Saka
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2020184482A priority Critical patent/JP2022074442A/ja
Priority to US17/408,746 priority patent/US20220138282A1/en
Publication of JP2022074442A publication Critical patent/JP2022074442A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】行列演算を効率的に実行する。【解決手段】演算装置は、行列積演算部と累積加算部とシフト加算部とベクトル演算部と制御部とを備える。行列積演算部は、M×P次元の第1入力行列と、P×K次元の第2入力行列と、の積であるM×K次元の第1出力行列を演算する。累積加算部は、第1出力行列と、M×K次元の行列とを加算したM×K次元の累積加算行列を計算して累積レジスタに記憶する。シフト加算部は、累積加算行列に含まれるM次元の累積加算ベクトルと、M次元の一時ベクトルと、を加算した加算ベクトルを計算してベクトルレジスタに記憶し、M番目のベクトルレジスタに記憶された一時ベクトルを出力する。ベクトル演算部は、一時ベクトルに対してベクトル演算を実行して出力ベクトルを出力する。制御部は、各演算の指示を制御する。【選択図】図1

Description

本発明の実施形態は、演算装置および演算方法に関する。
ニューラルネットワークの演算に含まれる行列演算処理を実行する演算装置が知られている。例えば、シストリックアレイを用いて行列乗算を実行し、演算のレイテンシを低減する技術が提案されている。
特表2020-516991号公報
しかしながら、従来技術では、行列演算を効率的に実行できない場合があった。例えば上記のようにシストリックアレイを用いる技術では、シストリックアレイに重みをロードするためのオーバーヘッド、または、重みのロード時間を短縮するための余分なレジスタおよびデータパスが必要となる問題があった。
実施形態の演算装置は、行列積演算部と累積加算部とシフト加算部とベクトル演算部と制御部とを備える。行列積演算部は、M×P次元の第1入力行列と、P×K次元の第2入力行列と、の積であるM×K次元の第1出力行列を演算する。累積加算部は、第1出力行列と、M×K次元の行列とを加算したM×K次元の累積加算行列を計算して累積レジスタに記憶する。シフト加算部は、累積加算行列に含まれるM次元の累積加算ベクトルと、M次元の一時ベクトルと、を加算した加算ベクトルを計算してベクトルレジスタに記憶し、M番目のベクトルレジスタに記憶された一時ベクトルを出力する。ベクトル演算部は、一時ベクトルに対してベクトル演算を実行して出力ベクトルを出力する。制御部は、各演算の指示を制御する。
実施形態にかかる演算装置のブロック図。 行列積演算部の処理の例を示す図。 内積演算部のブロック図。 累積加算部の処理の例を示す図。 シフト加算部のブロック図。 ベクトル演算部のブロック図。 演算装置による畳み込み演算の例を示す図。 演算方法の疑似プログラミングコードの例を示す図。 演算装置による演算スケジューリングの例を示す図。 演算装置による演算スケジューリングの例を示す図。 重みカーネルからサブカーネルへの分割方法を説明する図。 データの並び替え処理の一例を示す図。 シフト加算部での畳み込み演算の一例を示す図。 記憶部のデータ配置の構成例を示す図。 記憶部のデータ配置の構成例を示す図。 ニューラルネットワークのグラフの一例を示す図。 レイヤL1~L3の演算処理のフローチャート。 レイヤL4の演算処理のフローチャート。
以下に添付図面を参照して、この発明にかかる演算装置の好適な実施形態を詳細に説明する。
上記のように、シストリックアレイを用いる従来技術では、重みをシストリックアレイにロードするためのオーバーヘッドなどが生じ、行列演算を効率的に実行できない場合があった。また、シストリックアレイによる一度の行列演算処理では、ニューラルネットワークの畳み込み演算などの出力データを完成できない場合が多い。このため、部分和を記憶するための余分なメモリが必要となる場合があった。
以下の実施形態にかかる演算装置は、行列演算処理の効率(動作率)を低下させずに高速に実行可能とする。実施形態の演算装置に適用可能な行列演算処理はどのような処理であってもよい。例えば実施形態の演算装置は、ニューラルネットワークの演算に含まれる行列演算処理を実行するように構成することができる。
図1は、本実施形態にかかる演算装置10の構成例を示すブロック図である。図1に示すように、演算装置10は、制御部11と、転送部12と、記憶部13と、演算部31と、を備えている。
記憶部13は、演算で用いられる各種データを記憶する。記憶部13は、フラッシュメモリ、および、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
転送部12は、演算装置10と外部との間のデータ転送を行う。演算部31は、行列演算を含む演算処理を行う。制御部11は、各部(記憶部13、転送部12、および、演算部31)のパラメータ設定および制御を行う。
制御部11は、例えば、転送部12および演算部31に対する専用の命令セットを備えるセントラルプロセッサユニット(CPU)として実現できる。転送部12および演算部31は、それぞれ独立の、または、一体化したハードウェア回路などにより実現できる。制御部11、転送部12、および、演算部31の一部または全部を、物理的に一体化したハードウェア回路により実現してもよい。
演算部31は、行列積演算部100と、累積加算部200と、シフト加算部300と、ベクトル演算部400と、を備えている。
行列積演算部100は、制御部11の指示に従い、行列積の演算を実行する。例えば行列積演算部100は、M(Mは2以上の整数)×P(Pは2以上の整数)次元の行列(第1入力行列)と、P×K(Kは2以上の整数)次元の行列(第2入力行列)と、の積であるM×K次元の行列(第1出力行列)を演算して出力する。
入力される行列はどのような行列であってもよい。本実施形態では、以下のような行列を用いる例を主に説明する。
・第1入力行列:垂直方向、水平方向、および、チャネル方向の3次元の座標値ごとの特徴を要素とする特徴マップデータ(入力特徴データの一例)から得られる行列。以下では、このような行列を特徴マップ行列という場合がある。
・第2入力行列:垂直方向、水平方向、チャネル方向、カーネル方向(出力チャネル方向)の4次元の座標値ごとの重みを要素として含む重みデータから得られる行列。例えば第2入力行列は、重みデータのうち、水平方向の1個の座標、垂直方向の1個の座標、チャネル方向のP個の座標、および、カーネル方向にK個の座標に対応する要素を含む行列。以下では、このような行列を、重み行列という場合がある。
図2は、行列積演算部100の処理の例を示す図である。行列積演算部100は、制御部11から指示された読み出し命令に従って記憶部13から読み出された特徴マップ行列と重み行列との行列積を計算し、計算結果である行列積出力行列(第1出力行列)を出力する。
特徴マップ行列のサイズはM×P、重み行列のサイズはP×K、行列積出力行列のサイズはM×Kである。特徴マップ行列は、M個のサイズPの特徴マップベクトル21-1~21-Mを含む。重み行列は、K個のサイズPの重みベクトル22-1~22-Kを含む。行列積出力行列は、M個のサイズKの行列積出力ベクトル23-1~23-Mを含む。
P=Kの場合には、これらのベクトルのサイズがすべて同じになる。このため、以下では説明を明確化するためにP=Kとして説明するが、本実施形態の一般性が失われるわけではない。また、行列およびベクトルのサイズは、行列およびベクトルの要素数を意味し、各要素のビット幅を意味するものではない。行列積演算部100の演算処理は、図2に示すように、M個の特徴マップベクトルとK個の重みベクトルとの合計M×K個の内積演算として表現することができる。すなわち、行列積演算部100は、M×K個の内積演算部110を備えるように構成することができる。
図3は、行列積演算部100に含まれる内積演算部110の構成例を示すブロック図である。内積演算部110は、内積乗算部111と、指数加算部112と、ビットシフト部113と、を備える。
なお、内積演算部110には、特徴マップベクトル、重みベクトル、特徴マップ指数、および、重み指数が入力される。特徴マップベクトルそれぞれ、および、重みベクトルそれぞれは、同一ベクトル内の全K個の要素は共通した固定小数点フォーマットで符号化されており、その小数点の位置を示す指数データを伴っている。すなわち、各ベクトルに対して1つの指数データが定められており、各ベクトルは独立に定められた固定小数点フォーマット(同じフォーマットとなる場合と、異なるフォーマットとなる場合がある)で符号化されている。特徴マップベクトルに対する指数データが特徴マップ指数である。重みベクトルに対する指数データが重み指数である。
M×K個の内積演算部110のそれぞれは、m(1≦m≦M)およびk(1≦k≦K)の組み合わせが相互に異なるm番目の特徴マップベクトル(第1入力ベクトルの一例)と、k番目の重みベクトルと、に対応する。例えば、m番目の特徴マップベクトルと、k番目の重みベクトルとに対応する内積演算部110に含まれる内積乗算部111、指数加算部112、および、ビットシフト部113は、以下のような演算を実行する。
内積乗算部111は、m番目の特徴マップベクトルと、k番目の重みベクトル(第2入力ベクトルの一例)との内積を計算する。内積は、整数演算(固定小数点演算)での乗算と加算で構成されるため、浮動小数点演算と比べて回路規模を非常に小さくすることができる。
指数加算部112は、m番目の特徴マップベクトルの特徴マップ指数(第1指数値の一例)と、k番目の重みベクトルの重み指数(第2指数値の一例)と、を加算した指数値を計算する。
ビットシフト部113は、内積乗算部111により計算された内積(スカラ値)を、指数加算部112により計算された指数値に応じてビットシフトする。ビットシフト処理によって、M×K個の内積演算部110の出力の固定小数点フォーマットの小数点の位置を揃えることが可能になる。また、K個の要素に対して定められる指数データは1つである。このため、オーバーヘッドは小さいが、浮動小数点フォーマットのように広いダイナミックレンジでの数値表現が可能になる。この結果、回路規模も大幅に削減することが可能になる。
図1に戻り、累積加算部200は、行列の累積加算処理を実行する。例えば累積加算部200は、制御部11による累積加算の指示(累積加算命令)に応じて、行列積出力行列と、累積レジスタに記憶されたM×K次元の行列とを加算した行列を表すM×K次元の累積加算行列を計算し、計算した累積加算行列を累積レジスタに記憶する。累積レジスタは、例えば、累積加算部200内、または、演算部31内に備えられるレジスタである。
図4は、累積加算部200の処理の例を示す図である。累積加算部200は、制御部11からの累積加算命令に従って、行列積演算部100から出力された行列積出力行列と、累積レジスタに記憶された累積加算行列と、の累積加算処理を実行し、累積レジスタに記憶された値を出力値とする。累積レジスタに値が記憶されていない場合には、累積加算部200は、行列積出力行列を累積レジスタへ代入する処理を行ってもよい。累積加算部200に入力される行列(行列積出力行列)と、累積加算部200から出力される行列(累積加算行列)とは同一サイズ(M×K)である。
図1に戻り、シフト加算部300は、累積加算部200の出力に対するシフト加算を行う。例えばシフト加算部300は、制御部11からのベクトル加算の指示(加算命令)に応じて、累積加算行列に含まれるM次元の累積加算ベクトルそれぞれと、M個のベクトルレジスタそれぞれに記憶されたM次元の一時ベクトルと、を加算した加算ベクトルを計算し、計算した加算ベクトルをベクトルレジスタに記憶する。また、シフト加算部300は、制御部11からのシフトの指示(シフト命令)に応じて、ベクトルレジスタに記憶された一時ベクトルを出力する。
図5は、シフト加算部300の構成例を示すブロック図である。シフト加算部300は、加算セレクタ301-1~301-Mと、シフトセレクタ302-1~302-Mと、ベクトル加算器303-1~303-Mと、ベクトルレジスタ304-1~304-Mと、を備えている。
加算セレクタ301-1~301-M、および、シフトセレクタ302-1~302-Mは、ベクトル加算器303-1~303-Mへの入力信号を切り替える。ベクトル加算器303-1~303-Mは、ベクトル同士の加算を行う。ベクトルレジスタ304-1~304-Mは、それぞれベクトルを記憶する。
シフト加算部300は、制御部11からの加算命令に従って、累積加算部200から出力される累積加算行列に含まれるベクトル(累積加算ベクトル)とベクトルレジスタ304-1~304-Mの各ベクトルとの加算処理を行う。またシフト加算部300は、制御部11からのシフト命令に従って、ベクトルレジスタ304-1~304-Mのシフト処理を行う。シフト処理では、端部のベクトルレジスタ304-1に記憶されているベクトルが、シフト加算部300の出力ベクトルとして出力される。
加算セレクタ301-m(m=1~M)は、加算命令が有効な場合には、累積加算ベクトル42-mを出力し、それ以外は0ベクトルを出力する。
シフトセレクタ302-m(m=1~M-1)は、シフト命令が有効な場合には、ベクトルレジスタ304-(m+1)の値を出力し、それ以外はベクトルレジスタ304-mの値を出力する。シフトセレクタ302-Mは、シフト命令が有効な場合には、0ベクトルを出力し、それ以外はベクトルレジスタ304-Mの値を出力する。すなわち、シフト命令が有効な場合には、ベクトルレジスタ304-1~304-Mの値がシフトすることを意味する。
加算命令とシフト命令は、独立してクロックサイクル単位で変更可能な制御信号である。シフト命令が有効な場合には、ベクトルレジスタ304-1の値が、シフト加算処理の結果を表す出力ベクトルとしてシフト加算部300から出力される。
図1に戻り、ベクトル演算部400は、ベクトル単位での処理を行う。例えばベクトル演算部400は、シフト加算部300から出力されたベクトル(一時ベクトル)に対して、制御部11により指示されたベクトル演算を実行し、ベクトル演算の実行結果である出力ベクトルを出力する。
図6は、ベクトル演算部400の構成の一例を示すブロック図である。ベクトル演算部400は、一時記憶部421と、バイアス加算部401と、活性化関数部402と、プーリング部403と、並び替え部404と、ソフトマックス部405と、要素加算部406と、転置部407と、信頼度比較部408と、量子化部409と、データパッキング部410と、を備えている。
バイアス加算部401は、畳み込み演算およびバッチ正規化処理等で用いられる、固定のバイアス値の加算処理を実行する。バイアス加算部401は、例えば、一時記憶部421、記憶部13またはレジスタ(図示せず)に記憶されたバイアス値を加算に用いる。
活性化関数部402は、例えばReLU関数のような非線形関数処理を実行する。
プーリング部403は、例えば最大プーリング(MaxPooling)処理のようなプーリング処理を実行する。プーリング処理は、一般的には2次元プーリング処理である。このため、プーリング部403は、連続的に入力される入力ベクトルを用いて行単位の1次元プーリング処理を行い、その結果を一時記憶部421等に記憶する。そしてプーリング部403は、次の行に対する1次元プーリング処理の計算結果と一時記憶部421に記憶された値とを使って2次元プーリング処理を行い、その計算結果を、一時記憶部421に記憶する、または、プーリング部403から出力する、または、一時記憶部421に記憶しつつプーリング部403から出力する。プーリング部403は、このような処理を行ごとに逐次的に実行することで、任意のサイズの2次元プーリング処理を完成させる。
並び替え部404は、データの並び替えを行う。データの並び替えは、例えば、逆畳み込み演算(Deconvolution、Transposed Convolution)を行う場合に、入力データの順序が特徴マップデータの水平座標に対して連続的ではなくブロックインターリーブされたような順序になる場合に、一時記憶部421を使って連続的な順序に戻す処理である。
ソフトマックス部405は、連続する入力ベクトルに対してKカーネル並列して特徴マップデータの水平方向に1次元的なソフトマックス処理を行う。ソフトマックス処理では、演算精度を確保するために、最大値を計算する場合が多いが、事前に最大値を知ることはできない。また、ソフトマックス処理の分母の計算も同様に事前に計算することはできない。そこで、ソフトマックス部405は、以下のような処理を3回繰り返すように構成してもよい。ソフトマックス部405の前までの処理は、同じ処理が繰り返される。ソフトマックス部405は、3回の処理のうち、一巡目で最大値を求め、二巡目で分母を計算し、三巡目で最大値と分母を使ってソフトマックス値を計算する。
一巡目:xmax=max(xmax、xin
二巡目:xtmp=exp(xin-xmax)、xsum=xsum+xtmp
三巡目:ソフトマックス値=xtmp/xsum
要素加算部406は、入力ベクトルと記憶部13に記憶された特徴マップデータとの加算処理を行う。要素加算部406の処理は、例えば、ResNet(Residual Network)のようなニューラルネットワークにおける分岐パスの加算処理に対応する。
転置部407は、入力ベクトルの転置処理を行う。例えば転置部407は、連続するK個のサイズKのベクトルを記憶するレジスタを用意し、K×Kのレジスタすべてに値を書き込んでから、転置した方向にサイズKのベクトル単位で値を読み出す。
量子化部409は、データフォーマットの変換を行う。例えば量子化部409は、同一ベクトル内のK個の要素のフォーマットを、ビット数を削減したK個の固定小数点フォーマットデータと1個の指数データとに変換する。例えば、変換前のK個の要素がBビットの固定小数点フォーマットであるとした場合、量子化部409は、まず、これらを符号付きマグニチュード(Signed Magnitude)形式に変換し、K個のB-1ビットの振幅値(Magnitude)を得る。
次に量子化部409は、K個の振幅値の対応するビットのORを計算し、B-1ビットのORデータを得る。量子化部409は、ORデータを上位ビット側から見て最初に1になるビットの位置を求める。量子化部409は、求めた位置を最上位ビット(MSB、Most Significant Bit)としてC-1ビットを切り出して量子化後の振幅値を求める。量子化部409は、振幅値の計算の際に切り捨てるビットのMSBの四捨五入により、C-1ビットを切り出すMSBの値を求めてもよい。符号(Sign)ビットは変換の前後で不変である。
また、指数データは、最初に1となるMSBビットの位置のインデックス(またはその負数)に固定値を加算したDビットのスカラである。このような量子化処理を行うことで、記憶部13の使用量が削減される共に、行列積演算部100の回路規模を削減することが可能となる。例えば、K=16、B=16、C=8、D=5とすれば、量子化によって、演算に用いるベクトルを記憶するために必要なメモリサイズが、K×B=256ビットから、K×C+D=133ビットへ、約48%削減される。
データパッキング部410は、入力されるベクトルを記憶部13の形式に合わせてから、記憶部13に書き込む処理を行う。例えばデータパッキング部410は、サイズKのベクトルをM個合わせて、サイズM×K(=M×P)の特徴マップ行列の形式にして、記憶部13に書き込む。記憶部13に対する書き込み形式と読み出し形式とを揃えることができるため、例えばニューラルネットワークの複数のレイヤ処理を連続的に実行することが容易になる。
信頼度比較部408は、演算処理で得られる信頼度を比較する。例えば本実施形態の演算処理を、ニューラルネットワークを用いた物体検出に適用する場合、信頼度比較部408は、特徴マップデータの座標値ごとに、物体検出の検出対象の信頼度と、検出対象以外の対象の信頼度との差分を、閾値と比較する。信頼度比較部408は、差分が閾値より大きい座標値についてのみ、検出対象の検出結果を示す情報を出力する。信頼度比較部408は、差分が閾値より大きい座標値を示す位置情報を含む出力ベクトルを出力してもよい。信頼度比較部408の出力は、例えば記憶部13または一時記憶部421に記憶される。
ベクトル演算部400の各構成要素(バイアス加算部401、活性化関数部402、プーリング部403、並び替え部404、ソフトマックス部405、要素加算部406、転置部407、信頼度比較部408、量子化部409、データパッキング部410)は、制御部11によって必要に応じて機能をオフにすることができる。ベクトル演算部400の各構成要素のうち少なくとも一部を備えないように構成してもよい。
また、ベクトル演算部400の各構成要素の処理順序は限定されない。実現する演算処理に必要な構成要素が必要な順序で実行されるように、制御部11が各構成要素を制御するように構成すればよい。また、各構成要素は、それぞれ複数備えられてもよい。例えば複数の活性化関数部402がベクトル演算部400の構成要素として含まれてもよい。
制御部11が各部(記憶部13、転送部12、および、演算部31)のパラメータ設定および制御を行うことにより、様々な演算処理を実現することができる。以下では、本実施形態で実現できる演算処理の例について説明する。
図7は、演算装置10による畳み込み演算の例を示す図である。図7において(x、y、z)の3次元は、特徴マップデータおよび重みデータの(水平方向、垂直方向、チャネル方向)を意味する。本実施形態において、水平方向(x軸)および垂直方向(y軸)は、相互に入れ替え可能である。
図7では、入力される特徴マップデータは入力特徴マップとして表されている。入力特徴マップのx軸、y軸およびz軸方向のサイズは、それぞれWin、HinおよびCinである。以下では、x軸、y軸およびz軸方向のサイズを、サイズ(Win、Hin、Cin)のように表す場合がある。重みデータは、x軸、y軸およびz軸方向のサイズが(R、S、Cin)であるCout個の重みカーネル701-1~701-Coutで構成される。重みデータから、重みカーネルがK個選択され、演算処理に用いられる。
演算部31が一度に連続して計算して出力する特徴マップデータである出力特徴マップの処理単位は、図7の網掛け部分で示すような1行Kチャネルである。すなわち、制御部11は、1行Kチャネルを計算するように、必要な重み行列と特徴マップ行列を連続的に読み出して演算部31へと入力する。
Hは、出力特徴マップの1行の計算に必要な入力特徴マップの行数(y軸サイズ)を意味する。Hは、重みカーネルのサイズ(カーネルサイズ)が1より大きく、パディング処理がある場合の出力特徴マップの上下の端部を除けば、重みカーネルのy軸サイズであるSに等しい。
図2のK個の重みベクトル22-1~22-Kは、図7のK個の重みカーネル(例えば重みカーネル701-1~701-K)の、それぞれ同一の(x、y、z)座標から切り出したサイズ(1、1、K)のベクトルに相当する。
図2の特徴マップ行列は、図7のサイズ(M、1、K)の1ブロック、または、サイズ(2M、1、K)の2ブロックの中のx軸が偶数(または奇数)であるサイズ(M、1、K)のデータに相当する。後者は、例えば畳み込み演算の水平方向のストライドが偶数(例えば2)の場合の処理に対応する。
図8は、演算部31による演算方法の疑似プログラミングコードの例を示す図である。図8に示すように、演算部31の処理は、5次元の処理ループ構造になる。5次元の処理ループとは、繰り返し処理が5回入れ子(ネスト)となった処理である。内側から外側に向けて1次元から5次元の処理であるとすると、以下のような処理の単純な繰り返しになるように構成できるためである。
1次元:z軸、すなわち、チャネル方向(特徴マップと重みで共通)のループ
2次元:y軸およびs軸、すなわち、垂直方向(y軸:特徴マップ、s軸:重み)のループ
3次元:r軸、すなわち、重みの水平方向のループ
4次元:x軸、すなわち、特徴マップの水平方向のループ
5次元:d軸、すなわち、ソフトマックス処理用のループ、または、逆畳み込み演算のサブカーネル選択のループ
なお、1次元(z軸)の処理、および、2次元(y軸、s軸)の処理の順序は交換可能である。逆畳み込み演算の詳細は後述する。
重みデータの処理の分解という観点では、まず行列積演算部100が、重みカーネルのz軸の一部(サイズ(1、1、K))を処理する。次に、累積加算部200は、重みカーネルのz軸方向とy軸(s軸)方向の処理を行う。そして、シフト加算部300は、重みカーネルのx軸方向(r軸)の処理を行う。これらを組み合わせて重みカーネル全体の処理が完成する。これらの処理を特徴マップのx軸方向に連続的に処理することで、1行Kチャネルの出力特徴マップを完成させることができる。出力特徴マップは、x軸方向にM要素が並列に演算される。カーネルサイズがR×S=1×1の場合を除けば、x軸ループ内でM要素がすべて完成するわけではない。シフト加算部300のベクトルレジスタ304-1~304-Mの値を初期値として引き継ぐことで、x軸ループの次の処理において残りが出力される。
図8内の「dot」は、行列積演算部100の演算結果を表す行列である。「acm」は、累積加算部200の演算結果を表す行列である。「shift_add()」は、シフト加算部300による演算を表す関数である。「ofmap」は、シフト加算部300またはベクトル演算部400による演算結果を表す出力特徴マップである。
制御部11は、図8に記載された以下のようなパラメータの設定を調整することにより、様々な演算処理を実行する。
・xrange、yrange:特徴マップのx軸、y軸の処理範囲
・rrange、srange:重みカーネルのx軸、y軸の処理範囲(逆畳み込み処理では、rrangeはdの関数となる)
・zrange:特徴マップ、重みのz軸の処理範囲
・drange:逆畳み込み演算、ソフトマックス処理用のループ
なお、図7の畳み込み演算の例については、各パラメータを以下のように設定することができる。
・xrange=Win/M
・yrange=H
・rrange=R
・srange=S
・zrange=Cin/K
制御部11は、以上のように演算処理を行うことで、中間メモリ(部分和を記憶するためのメモリなど)を使わずに、1行Kチャネル分の畳み込み演算、逆畳み込み演算、および、行列演算処理などの演算処理を連続的に実行することができる。
図9および図10は、演算装置10による演算スケジューリングの例を示す図である。図9および図10は、それぞれ第1の演算スケジューリングの例、および、第2の演算スケジューリングの例を示す。第1の演算スケジューリングは、1行Kチャネルを処理単位として、チャネル方向に次の処理を進めて1行を完成させる。第2の演算スケジューリングは、1行Kチャネルを処理単位として、行方向に次の処理を進めてKチャネルを完成させる。
演算装置10は、これらの2つのスケジューリング方法を、処理する特徴マップおよび重みの形状に応じて選択することができる。記憶部13における特徴マップの配置は、2つの演算スケジューリングに対応した2種類の並び順が存在する。データの最小単位をサイズ(M、1、K)として、これをx軸、z軸、y軸の順番に並べた場合が図9に対応する。データの最小単位をx軸、y軸、z軸の順番に並べた場合が図10に対応する。このように記憶部13内での特徴マップのデータの並び順が決定されていることにより、制御部11は、あらゆる座標の特徴マップのアドレスを容易に計算して読み出すことができる。
次に、逆畳み込み演算について説明する。図11は、逆畳み込み演算における重みカーネルからサブカーネルへの分割方法を説明する図である。重みカーネルをサブカーネルに変換することで、逆畳み込み演算は複数の畳み込み演算に分解することが可能となる。演算装置10は、逆畳み込み演算を複数のサブカーネルへ分解して畳み込み演算するように演算を行う。図11では、x軸とy軸での分解の例のみを示し、z軸(チャネル方向の軸)での分解は省略している。図11の例では、x軸およびy軸方向のサイズが(4、4)であり、x軸およびy軸方向のストライドが(2、2)であるカーネルが、x軸およびy軸方向のサイズが(2、2)である4個のサブカーネルに分割される。これらのサブカーネルのx軸およびy軸方向のストライドは(1、1)である。
サブカーネルへの変換では、まず、逆畳み込み演算の重みカーネルに対して、x軸とy軸のそれぞれで座標(並び)が反転される。次に、x軸とy軸のそれぞれに対してストライドごとの要素を選択することで、重みカーネルがサブカーネルに分割される。例えば、サイズ(8、8)、ストライド(4、4)であれば、サイズ(2、2)の16個のサブカーネルに分割される。
図8に示したd軸の処理ループは、逆畳み込み演算の場合は、x軸方向のサブカーネルのいずれかを選択するループになる。すなわち、図11の例では、d軸の処理ループは、サブカーネルA1かサブカーネルB1(または、サブカーネルA2かサブカーネルB2)のうち1つを選択するループである。drangeのサイズは、x軸のストライドサイズに等しい。サブカーネルのサイズは、元のカーネルサイズをストライドサイズで除算した値となる。サブカーネルA1とB1のセットを使うか、サブカーネルA2とB2のセットを使うかは、計算する出力特徴マップの行番号によって決まり、行ごとに順番に使用される。
逆畳み込み演算では、図8のd軸の処理ループより内側の処理ループは、選択したサブカーネルを使って通常の畳み込み演算と同様に処理される。ただし、図7に示したように、1行K列の出力特徴マップをx座標の順番にするために、並び替え部404が、サブカーネルごとに計算した出力特徴マップを並び替える必要がある。
図12は、並び替え部404による、逆畳み込み演算におけるデータの並び替え処理の一例を示す図である。図12は、drangeのサイズが2で、1マスがサイズ(1、1、K)である特徴マップベクトルの並び替えの例に相当する。図12の1行が逆畳み込み演算の1サブカーネルを処理した結果である。Wsubは、サブカーネルで計算した出力特徴マップのx軸のサイズ(Wsub=Wout/drangeのサイズ)を表す。図12に示すように、行ごとに書き込みを行い、列ごとに読み出すような並び替えを行う。このような並び替え処理を行うことで、逆畳み込み演算においても、記憶部13に書き込まれる出力特徴マップのデータの並び順をx座標の順番にすることが可能となる。
図13は、シフト加算部300での畳み込み演算の一例を示す図である。図13は、入力特徴マップと出力特徴マップのx軸およびy軸方向のサイズは等しく、カーネルのx軸およびy軸方向のサイズ(R、S)は(3、3)、x軸およびy軸方向のストライドは(1、1)、x軸およびy軸方向のパディングは(1、1)である畳み込み演算を実行する場合の例である。
図13において、W(n)(n=1~3)は、x座標がnで、サイズ(1、S、Cin)であるカーネルの範囲を意味する。同様に、F(n)は、x座標がn(n=1~Win)で、サイズ(1、S、Cin)である特徴マップの範囲を意味する。また、J(n)(n=1~Wout)は、x座標がnで、サイズ(1、1、1)である出力特徴マップを意味する。実際には、このような処理がK個のカーネルに対して並列して実行されるが、説明の簡素化のため、図13では、出力チャネルが1として説明する。
出力特徴マップJ(n)は、W(n)とF(n)から以下の(1)式で表すことができる。
Figure 2022074442000002
ただし、F(n)=0(n<0またはn>Win)、offset=2、<F(n)、W(M)>は、F(n)とW(M)の要素積をすべて加算した値である。<F(n)、W(M)>は、シフト加算部300への入力に対応する。カーネルのx軸は、右から左の順番で処理される。
まず、加算命令が有効な状態で、<F(1)、W(3)>~<F(M)、W(3)>がシフト加算部300へ入力されず、ベクトルレジスタ304-1~304-Mにそれぞれ代入される。ただし、ベクトルレジスタ304-1~304-Mの初期値は0である。次に、加算命令とシフト命令の両方が有効な状態で、<F(1)、W(2)>~<F(M)、W(2)>がシフト加算部300に入力される。最後に、加算命令とシフト命令の両方が有効な状態で、<F(1)、W(1)>~<F(M)、W(1)>がシフト加算部300に入力される。その後のベクトルレジスタ304-1~304-M-1の値は、出力特徴マップJ(1)~J(M-1)が完成した状態である。しかし、J(M)の完成にはF(M+1)が必要であるため、ベクトルレジスタ304-MではJ(M)は未完成の状態となっている。
次に、(M-1)回のシフト命令によって出力特徴マップJ(1)~J(M-1)がシフト加算部300から出力されると同時に、ベクトルレジスタ304-Mの値がベクトルレジスタ304-1に移動され、それ以外のベクトルレジスタ304-1~304-M-1の値が0に初期化される。
同様の処理が、次のM個の入力特徴マップ(F(M+1)~F(2M))に対して実行される。加算命令が有効な状態で、<F(M+1)、W(3)>~<F(2M)、W(3)>がシフト加算部300のベクトルレジスタ304-1~304-Mと加算される。その結果、ベクトルレジスタ304-1では出力特徴マップJ(M)が完成する。
以上の処理を繰り返すことで、図7に示したような1行Kチャネル分の出力特徴マップを完成することができる。
次に、記憶部13のデータ配置の例について説明する。図14および図15は、記憶部13のデータ配置の第1の構成例および第2の構成例をそれぞれ示す図である。各図のそれぞれ1マスがサイズ(1、1、K)の特徴マップである。1ワードはサイズ(M、1、K)であり、M=8の場合を図示している。また、マス内の数値はx軸の値を意味する。
記憶部13の内部は2つのバンク(メモリバンク)で構成されており、各バンクは独立した読み書きも可能である。第1の構成例(図14)では、記憶部13は、バンクBK1およびBK2を含む。第2の構成例(図15)では、記憶部13は、バンクBK1およびBK2-2を含む。第1の構成例および第2の構成例のいずれ場合も、2つのバンクそれぞれの同一アドレス内のx軸の値は、奇数または偶数のいずれかのみで構成される。
第1の構成例および第2の構成例は、バンクBK2およびバンクBK2-2の間で、偶数アドレスと奇数アドレスのデータが入れ替わっている点が異なる。いずれの場合も、2つのバンクが独立にアクセスできる点で共通する。
このようなデータ配置にすることにより、畳み込み演算のストライドが偶数(特に2)の場合において、x軸の座標が偶数のみ(または奇数のみ)の値を持つサイズM×Pの特徴マップ行列に相当するデータを、1サイクルで読み出すことが可能となる。
例えば第1の構成例では、ストライド1の畳み込み演算であれば、バンクBK1とバンクBK2ともに同じアドレスでデータが読み出される。ストライド2の畳み込み演算で偶数データを読み出す場合には、バンクBK1は偶数アドレスとなり、バンクBK2はバンクBK1のアドレスのLSB(Least Significant Bit)を反転した奇数アドレスとなる。同様に、奇数データを読み出す場合には、バンクBK1は奇数アドレスとなり、バンクBK2はバンクBK1アドレスのLSBを反転した偶数アドレスとなる。
このような構成によって、ストライドが1および2のいずれであっても、演算部31へ入力するサイズの特徴マップ行列を毎サイクル読み出すことが可能となり、効率的な処理が実現できる。
これまで説明した演算処理は、複数(Q個、Qは2以上の整数)のレイヤの処理にそれぞれ含まれるように構成することができる。レイヤとは、畳み込み演算といった単独の演算処理ではなく、畳み込み演算(または逆畳み込み演算、または行列乗算処理)、および、それに続くプーリング処理など、本実施形態のベクトル演算部400における処理も含めた一連の処理である。
以下では、複数のレイヤで構成される処理の例について説明する。複数のレイヤで構成される処理は、例えば、ニューラルネットワークを用いた処理である。図16は、4つのレイヤで構成されるニューラルネットワークのグラフの一例を示す図である。
複数のレイヤは、例えば以下のように構成される。
・第1レイヤ:入力特徴マップ(第1入力特徴データ)を用いる演算を行い出力特徴マップ(第1出力特徴データ)を出力する。
・第qレイヤ(2≦q≦Q、Qは2以上の整数):第(q-1)レイヤが出力する出力特徴マップ(第(q-1)出力特徴データ)を入力特徴マップ(第q入力特徴データ)として用いる演算を行い出力特徴マップ(第q出力特徴データ)を出力する。
制御部11は、上記のような複数のレイヤの処理を、以下のように制御することができる。すなわち、制御部11は、第q出力特徴データの一部である部分データの演算に必要な、第(q-1)出力特徴データの一部または全部が得られたときに、この部分データの演算を開始するように、5次元の処理ループを制御する。以下、このような制御の例について説明する。
制御部11は、ニューラルネットワークのグラフにおいてレイヤ処理のループの開始点と終了点とをそれぞれ定義し、レイヤ処理のループ単位(レイヤ処理ループという)で演算処理のフローを定義する。
図16の例では、レイヤL1~L3が1つのレイヤ処理ループにまとめて処理する対象となる。レイヤL4が単独で処理するもう1つのレイヤ処理ループである。また、レイヤL1~L3が、上述の第1の演算スケジューリングに従い、出力特徴マップの行ごとに処理を進めるレイヤである。レイヤL4が第2の演算スケジューリングに従い、カーネル単位で処理を進めるレイヤである。一般的に、第1の演算スケジューリングを用いて複数レイヤを纏めて処理することで、出力特徴マップのサイズがより小さくなるレイヤまで処理を一括で連続的に進めることができる。このため、レイヤごとに処理を進める場合と比較して、記憶部13のメモリ使用量、および、外部メモリとの間のデータ転送を削減することができる。外部メモリとは、演算装置10の外部に備えられる記憶装置である。
図17は、演算装置10による図16のレイヤL1~L3の演算処理の一例を示すフローチャートである。図17は、まとめて処理するレイヤの個数が3個(L=3)の例であるが、2個または4個以上の場合も同様の手順を適用できる。
まず制御部11は、レイヤL1~L3の重みおよびバイアス値を外部メモリから演算装置10へ転送する(ステップS101)。例えば制御部11は、転送部12へデータ転送命令を送ることでデータ転送を実行する。
次に、制御部11は、レイヤL1の入力特徴マップが外部メモリに記憶されているか否かを判定する(ステップS102)。外部メモリに記憶されている場合(ステップS102:Yes)、制御部11は、外部メモリから演算装置10へ入力特徴マップのデータ転送を開始する(ステップS103)。
レイヤL1の入力特徴マップの転送を開始後、または、外部メモリに記憶されていない場合、すなわち、レイヤL1の入力特徴マップが記憶部13に記憶されている場合は(ステップS102:No)、ステップS104に遷移する。
なお、制御部11は、レイヤL1の入力特徴マップに割り当てられた記憶部13の記憶領域、データ転送の進捗、および、演算処理の進捗から、使用予定の入力特徴マップが上書き消去されないように、データ転送を一時的に中断する機能を有する。例えばAXI(Advanced eXtensible Interface)バスが用いられる場合は、制御部11は、RREADY信号をデアサートすることで、転送の中断機能をサイクル単位で容易に実現できる。
ステップS104では、制御部11は、レイヤL1の次の1行の出力特徴マップを計算するために必要な入力特徴マップと重みが揃っているか否かを判定する(ステップS104)。揃っている場合(ステップS104:Yes)、制御部11は、レイヤL1の演算処理を実行する(ステップS105)。揃っていない場合(ステップS104:No)、必要なデータが揃って演算を実行可能になるまで待つ。
次の行の出力特徴マップを計算するために必要なデータ(入力特徴マップ、重み)が、部分データの一例である。以下の処理も同様である。
次に、制御部11は、レイヤL2の次の1行の出力特徴マップを計算するために必要なレイヤL2の入力特徴マップ(=レイヤL1の出力特徴マップ)が揃っているか否かを判定する(ステップS106)。揃っている場合(ステップS106:Yes)、制御部11は、レイヤL2の演算処理を実行する(ステップS107)。揃っていない場合(ステップS106:No)、レイヤL2の演算処理は実行せずに、ステップS108に進む。
同様に、制御部11は、レイヤL3の次の1行の出力特徴マップを計算するために必要なレイヤL3の入力特徴マップ(=レイヤL2の出力特徴マップ)が揃っているか否かを判定する(ステップS108)。揃っている場合(ステップS108:Yes)、制御部11は、レイヤL3の演算処理を実行する(ステップS109)。揃っていない場合(ステップS108:No)、レイヤL3の演算処理は実行せずに、ステップS112に進む。
レイヤL3の演算処理を実行した場合には、制御部11は、レイヤL3の出力特徴マップを外部メモリに記憶するか否かを判定する(ステップS110)。記憶する場合(ステップS110:Yes)、制御部11は、計算したレイヤL3の出力特徴マップ1行を外部メモリに転送する(ステップS111)。転送後、または、レイヤL3の出力特徴マップを外部メモリに記憶しない場合(ステップS110:No)、ステップS112に進む。
ステップS112では、制御部11は、レイヤL3の演算処理が終了したか、すなわち、レイヤL3の出力特徴マップがすべて完成したか否かを判定する(ステップS112)。完成していない場合(ステップS112:No)、ステップS104に戻り、次の行から処理が繰り返される。完成した場合(ステップS112:Yes)、レイヤL1~L3の演算処理は終了する。
図18は、演算装置10による図18のレイヤL4の演算処理の一例を示すフローチャートである。
まず、制御部11は、レイヤL4の入力特徴マップが外部メモリに記憶されているか否かを判定する(ステップS201)。外部メモリに記憶されている場合(ステップS201:Yes)、制御部11は、外部メモリから演算装置10へ入力特徴マップのデータ転送を開始する(ステップS202)。
レイヤL4の入力特徴マップを転送後、または、外部メモリに記憶されていない場合(ステップS201:No)、すなわち、レイヤL4の入力特徴マップが記憶部13に記憶されている場合は、ステップS203に遷移する。
次に、制御部11は、外部メモリから演算装置10へレイヤL4の重みおよびバイアス値のデータ転送を開始する(ステップS203)。
制御部11は、レイヤL4の重みに割り当てられた記憶部13の記憶領域、データ転送の進捗、および、演算処理の進捗から、使用予定の重みが上書き消去されないように、必要に応じてデータ転送を一時的に中断する機能を有する。
制御部11は、レイヤL4の次のKカーネルの出力特徴マップを計算するために必要な重みが揃っているか否かを判定する(ステップS204)。揃っている場合(ステップS204:Yes)、制御部11は、レイヤL4の演算処理を実行する(ステップS205)。揃っていない場合(ステップS204:No)、ステップS204の判定に戻り、揃うまで待機する。
次に、制御部11は、レイヤL4の出力特徴マップを外部メモリに記憶するか否かを判定する(ステップS206)。記憶する場合(ステップS206:Yes)、制御部11は、計算したレイヤL4の出力特徴マップを外部メモリに転送する(ステップS207)。転送後、または、レイヤL4の出力特徴マップを外部メモリに記憶しない場合(ステップS206:No)、ステップS208に進む。
制御部11は、レイヤL4の演算処理が終了したか、すなわち、レイヤL4の出力特徴マップがすべて完成したか否かを判定する(ステップS208)。完成していない場合(ステップS208:No)、ステップS204に戻り、次のカーネルから処理が繰り返される。完成した場合(ステップS208:Yes)、レイヤL4の演算処理は終了する。
このように、本実施形態にかかる演算装置は、制御部11が、行列積演算部100、累積加算部200、シフト加算部300、および、ベクトル演算部400を、5次元の処理ループによって制御して、畳み込み演算等の演算処理を行う。これにより、ニューラルネットワークなどの演算処理を高効率に並列実行することが可能となる。
本実施形態にかかる演算装置で実行されるプログラムは、記憶部13等に予め組み込まれて提供される。
本実施形態にかかる演算装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD-R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、本実施形態にかかる演算装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる演算装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施形態にかかる演算装置で実行されるプログラムは、コンピュータを上述した演算装置の各部として機能させうる。このコンピュータは、制御部11がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
10 演算装置
11 制御部
12 転送部
13 記憶部
31 演算部
100 行列積演算部
110 内積演算部
111 内積乗算部
112 指数加算部
113 ビットシフト部
200 累積加算部
300 シフト加算部
301-1~301-M 加算セレクタ
302-1~302-M シフトセレクタ
303-1~303-M ベクトル加算器
304-1~304-M ベクトルレジスタ
400 ベクトル演算部
401 バイアス加算部
402 活性化関数部
403 プーリング部
404 並び替え部
405 ソフトマックス部
406 要素加算部
407 転置部
408 信頼度比較部
409 量子化部
410 データパッキング部
421 一時記憶部

Claims (9)

  1. 行列積演算の指示に応じて、M(Mは2以上の整数)×P(Pは2以上の整数)次元の第1入力行列と、P×K(Kは2以上の整数)次元の第2入力行列と、の積であるM×K次元の第1出力行列を演算する行列積演算部と、
    累積加算の指示に応じて、前記第1出力行列と、累積レジスタに記憶されたM×K次元の行列とを加算した行列を表すM×K次元の累積加算行列を計算し、計算した前記累積加算行列を前記累積レジスタに記憶する累積加算部と、
    ベクトル加算の指示に応じて、前記累積加算行列に含まれるM次元の累積加算ベクトルそれぞれと、M個のベクトルレジスタそれぞれに記憶されたM次元の一時ベクトルと、を加算した加算ベクトルを計算し、計算した前記加算ベクトルを前記ベクトルレジスタに記憶し、シフトの指示に応じて、M番目の前記ベクトルレジスタに記憶された前記一時ベクトルを出力するシフト加算部と、
    出力された前記一時ベクトルに対して、指示されたベクトル演算を実行し、前記ベクトル演算の実行結果である出力ベクトルを出力するベクトル演算部と、
    前記行列積演算の指示、前記累積加算の指示、前記ベクトル加算の指示、前記シフトの指示、および、前記ベクトル演算の指示を制御する制御部と、
    を備える演算装置。
  2. 前記第1入力行列は、M個のP次元の第1入力ベクトルを含み、
    前記第2入力行列は、K個のP次元の第2入力ベクトルを含み、
    前記第1入力ベクトルに含まれる各要素は、第1指数値により指数の位置が指定された固定小数点で符号化され、
    前記第2入力ベクトルに含まれる各要素は、第2指数値により指数の位置が指定された固定小数点で符号化され、
    前記行列積演算部は、組み合わせが相互に異なるm番目(1≦m≦M)の前記第1入力ベクトルとk番目(1≦k≦K)の前記第2入力ベクトルとに対応するM×K個の内積乗算部、指数加算部、および、ビットシフト部をそれぞれ含み、
    前記内積乗算部のそれぞれは、対応するm番目の前記第1入力ベクトルと、k番目の前記第2入力ベクトルとの内積を計算し、
    前記指数加算部のそれぞれは、対応するm番目の前記第1入力ベクトルの前記第1指数値と、k番目の前記第2入力ベクトルの前記第2指数値と、を加算した指数値を計算し、
    前記ビットシフト部のそれぞれは、対応する前記指数加算部により計算された指数値に応じて、対応する前記内積乗算部により計算された前記内積をビットシフトする、
    請求項1に記載の演算装置。
  3. 前記第1入力行列は、垂直方向、水平方向、および、チャネル方向の3次元の座標値ごとの特徴を要素として含む入力特徴データのうち、前記水平方向のM個の座標、前記垂直方向の1個の座標、および、前記チャネル方向のP個の座標に対応する要素を含む行列であり、
    前記第2入力行列は、垂直方向、水平方向、チャネル方向、および、カーネル方向の4次元の座標値ごとの重みを要素として含む重みデータのうち、前記水平方向のP個の座標、前記垂直方向の1個の座標、および、前記チャネル方向のK個の座標に対応する要素を含む行列であり、
    前記制御部は、内側から第1処理ループ、第2処理ループ、第3処理ループ、第4処理ループ、および、第5処理ループの順の5次元の処理ループで演算を制御し、
    前記チャネル方向で前記行列積演算部の演算を繰り返す処理、および、前記垂直方向で前記累積加算部の処理を繰り返す処理のうち、一方が前記第1処理ループであり、他方が前記第2処理ループであり、
    前記第3処理ループは、前記行列積演算部、前記累積加算部、前記シフト加算部、および、前記ベクトル演算部の処理を、前記重みデータの前記水平方向に繰り返す処理であり、
    前記第4処理ループは、前記第3処理ループに含まれる処理を、前記入力特徴データの前記水平方向に繰り返す処理であり、
    前記第5処理ループは、前記第4処理ループに含まれる処理を、予め定められた回数分、繰り返す処理である、
    請求項1に記載の演算装置。
  4. 前記制御部は、
    第1入力特徴データを用いる演算を行い第1出力特徴データを出力する第1レイヤと、第(q-1)レイヤ(2≦q≦Q、Qは2以上の整数)が出力する第(q-1)出力特徴データを第q入力特徴データとして用いる演算を行い第q出力特徴データを出力する第qレイヤと、を含む複数のレイヤの演算処理を制御し、
    前記第q出力特徴データの一部である部分データの演算に必要な、前記第(q-1)出力特徴データの一部または全部が得られたときに、前記部分データの演算を開始するように、前記5次元の処理ループを制御する、
    請求項3に記載の演算装置。
  5. 垂直方向、水平方向、および、チャネル方向の3次元の座標値ごとの特徴を要素として含む入力特徴データを記憶する記憶部をさらに備え、
    前記記憶部は、少なくとも2つのメモリバンクを含み、
    前記入力特徴データのうち、前記水平方向の座標値が偶数および奇数の一方であるデータが、前記メモリバンクの偶数番目のアドレスで指定される領域に記憶され、他方が、前記メモリバンクの奇数番目のアドレスで指定される領域に記憶される、
    請求項1に記載の演算装置。
  6. 前記ベクトル演算は、一時記憶部を用いたベクトル単位のプーリング処理、および、前記一時記憶部を用いたベクトル単位の並び替え処理を含む、
    請求項1に記載の演算装置。
  7. 前記第1入力行列は、垂直方向、水平方向、および、チャネル方向の3次元の座標値ごとの特徴を要素として含む入力特徴データのうち、前記水平方向のM個の座標、前記垂直方向の1個の座標、および、前記チャネル方向のP個の座標に対応する要素を含む行列であり、
    前記ベクトル演算は、前記座標値ごとに、前記入力特徴データから計算される、検出対象の信頼度と検出対象以外の対象の信頼度との差分を、閾値と比較し、前記差分が前記閾値より大きい前記座標値を示す位置情報を含む前記出力ベクトルを出力する処理を含む、
    請求項1に記載の演算装置。
  8. 前記第1入力行列は、垂直方向、水平方向、および、チャネル方向の3次元の座標値ごとの特徴を要素として含む入力特徴データのうち、前記水平方向のM個の座標、前記垂直方向の1個の座標、および、前記チャネル方向のP個の座標に対応する要素を含む行列であり、
    前記ベクトル演算は、前記座標値ごとに、前記入力特徴データから計算される、検出対象の信頼度と検出対象以外の対象の信頼度との差分を、閾値と比較し、前記差分が前記閾値より大きい前記座標値に対してのみ、前記検出対象の検出結果を示す情報を含む前記出力ベクトルを出力する処理を含む、
    請求項1に記載の演算装置。
  9. 行列積演算の指示に応じて、M(Mは2以上の整数)×P(Pは2以上の整数)次元の第1入力行列と、P×K(Kは2以上の整数)次元の第2入力行列と、の積であるM×K次元の第1出力行列を演算する行列積演算ステップと、
    累積加算の指示に応じて、前記第1出力行列と、累積レジスタに記憶されたM×K次元の行列とを加算した行列を表すM×K次元の累積加算行列を計算し、計算した前記累積加算行列を前記累積レジスタに記憶する累積加算ステップと、
    ベクトル加算の指示に応じて、前記累積加算行列に含まれるM次元の累積加算ベクトルそれぞれと、M個のベクトルレジスタそれぞれに記憶されたM次元の一時ベクトルと、を加算した加算ベクトルを計算し、計算した前記加算ベクトルを前記ベクトルレジスタに記憶し、シフトの指示に応じて、M番目の前記ベクトルレジスタに記憶された前記一時ベクトルを出力するシフト加算ステップと、
    出力された前記一時ベクトルに対して、指示されたベクトル演算を実行し、前記ベクトル演算の実行結果である出力ベクトルを出力するベクトル演算ステップと、
    前記行列積演算の指示、前記累積加算の指示、前記ベクトル加算の指示、前記シフトの指示、および、前記ベクトル演算の指示を制御する制御ステップと、
    を含む演算方法。
JP2020184482A 2020-11-04 2020-11-04 演算装置および演算方法 Pending JP2022074442A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020184482A JP2022074442A (ja) 2020-11-04 2020-11-04 演算装置および演算方法
US17/408,746 US20220138282A1 (en) 2020-11-04 2021-08-23 Computing device and computing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020184482A JP2022074442A (ja) 2020-11-04 2020-11-04 演算装置および演算方法

Publications (1)

Publication Number Publication Date
JP2022074442A true JP2022074442A (ja) 2022-05-18

Family

ID=81378952

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020184482A Pending JP2022074442A (ja) 2020-11-04 2020-11-04 演算装置および演算方法

Country Status (2)

Country Link
US (1) US20220138282A1 (ja)
JP (1) JP2022074442A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12040821B2 (en) * 2022-08-03 2024-07-16 Arm Limited Weight processing for a neural network

Also Published As

Publication number Publication date
US20220138282A1 (en) 2022-05-05

Similar Documents

Publication Publication Date Title
EP3698313B1 (en) Image preprocessing for generalized image processing
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
EP3499427A1 (en) Method and electronic device for convolution calculation in neutral network
US6539368B1 (en) Neural processor, saturation unit, calculation unit and adder circuit
CN110415157B (zh) 一种矩阵乘法的计算方法及装置
US20170206089A1 (en) Information processing apparatus and computational method
CN109426483B (zh) 并发多位加法器
US10678509B1 (en) Software-driven design optimization for mapping between floating-point and fixed-point multiply accumulators
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
US10943039B1 (en) Software-driven design optimization for fixed-point multiply-accumulate circuitry
US11983616B2 (en) Methods and apparatus for constructing digital circuits for performing matrix operations
CN111985602A (zh) 神经网络计算设备、方法以及计算设备
CN109993293B (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
CN112395092B (zh) 数据处理方法及人工智能处理器
CN110807170A (zh) 多样本多通道卷积神经网络Same卷积向量化实现方法
CN110851779A (zh) 用于稀疏矩阵运算的脉动阵列架构
JP3955741B2 (ja) ソート機能を有するsimd型マイクロプロセッサ
CN109902821B (zh) 一种数据处理方法、装置及相关组件
CN112712457B (zh) 数据处理方法以及人工智能处理器
JP2022074442A (ja) 演算装置および演算方法
Shahbahrami et al. FPGA implementation of parallel histogram computation
US20230289287A1 (en) Programmable Multi-Level Data Access Address Generator
US11182128B2 (en) Multiply-accumulate operation device, multiply-accumulate operation methods, and systems
CN114692073A (zh) 基于卷积运算的数据处理方法及电路
CN114281755A (zh) 一种面向向量处理器的半精度向量化卷积方法及***

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231003

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20240402