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

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

Info

Publication number
JP7062617B2
JP7062617B2 JP2019118757A JP2019118757A JP7062617B2 JP 7062617 B2 JP7062617 B2 JP 7062617B2 JP 2019118757 A JP2019118757 A JP 2019118757A JP 2019118757 A JP2019118757 A JP 2019118757A JP 7062617 B2 JP7062617 B2 JP 7062617B2
Authority
JP
Japan
Prior art keywords
vector
matrix
processing
read
address
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.)
Active
Application number
JP2019118757A
Other languages
English (en)
Other versions
JP2021005227A (ja
Inventor
耕一郎 坂
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 JP2019118757A priority Critical patent/JP7062617B2/ja
Priority to US16/801,025 priority patent/US11423291B2/en
Publication of JP2021005227A publication Critical patent/JP2021005227A/ja
Application granted granted Critical
Publication of JP7062617B2 publication Critical patent/JP7062617B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Description

本発明の実施形態は、演算装置および演算方法に関する。
ニューラルネットワークの演算に含まれる畳み込み処理と行列演算処理とを同じ演算装置で実行する技術が知られている。例えば、演算処理装置に含まれる畳込演算制御部および全結合演算制御部の処理を複数の入力スイッチおよび出力スイッチにより切り替える技術が提案されている。
特許第6387913号公報
NVDLA Unit Description (Fig.54)、 [online]、 retrieved from the Internet: <URL:http://nvdla.org/hw/v1/ias/unit_description.html>
しかしながら、従来技術では、特定の畳み込み処理および行列演算処理において処理速度が低下するという問題があった。例えば従来技術では、フィルタの形状が1×1である場合、および、Deconvolutionなどの特定の処理では、演算処理装置内部の積和演算器の動作率が低下し、処理速度が低下するという問題があった。
実施形態の演算装置は、記憶部と制御部と演算部とを備える。記憶部は、P次元(Pは2以上の整数)の入力ベクトル、P×N次元(Nは2以上の整数)の行列、N次元の中間値ベクトル、および、N次元の出力ベクトルを記憶し、入力ベクトル、行列、中間値ベクトルの読み出し処理、および、出力ベクトルの書き込み処理のうち、少なくとも2つの処理を並行して実行可能である。制御部は、D次元(Dは3以上の整数)の処理ループを含む演算処理の中での、第1入力ベクトル、第1行列、および、第1中間値ベクトルの読み出しタイミングと、第1出力ベクトルの書き込みタイミングと、を設定する。演算部は、第1入力ベクトルと第1行列との積を演算し、第1中間値ベクトルと積との和を演算し、和を第1出力ベクトルとして記憶部に記憶させる。
実施形態の演算装置のブロック図。 記憶部のブロック図。 行列演算部の詳細な構成を示すブロック図。 行列演算部に設定されるパラメータの構成例を示す図。 行列演算部で実行される行列演算処理のフローチャート。 第1処理から第8処理の例を示す図。 第1処理から第8処理に対する処理の割り当てパターンを示す図。 WSに相当する演算処理の疑似プログラミングコードの一例を示す図。 OS1に相当する演算処理の疑似プログラミングコードの一例を示す図。 OS2に相当する演算処理の疑似プログラミングコードの一例を示す図。 疑似プログラミングコードで用いられる変数および関数の定義を示す図。 行列演算処理の他の例を示すフローチャート。 行列演算処理の他の例を示すフローチャート。 WSに相当する演算処理の疑似プログラミングコードの一例を示す図。 行列演算部による2次元の畳み込み処理のフローチャート。 フィルタの処理順序の例を示した図。 図14のステップS402での処理の例を説明する図。 図14のステップS403での処理の例を説明する図。 畳み込み処理と非線形演算を合わせて実行する場合のフローチャート。 OS1での畳み込み処理の計算例を示す図。 OS2での畳み込み処理の計算例を示す図。 OS2での全結合層処理を説明する図。 共有メモリの構成例を示す図。 2ポートメモリを1ポートメモリで実現する構成例を示す図。 中間メモリの構成例を示す図。 共有メモリのアドレスの割り当ての構成例を示す図。 共有メモリのアドレスの割り当ての他の構成例を示す図。 5次元処理ループを用いる行列演算処理の一例を示すフローチャート。 5次元処理ループを用いる行列演算処理の他の例を示すフローチャート。 パラメータの例を示す図。 処理の割り当てパターンの例を示す図。 OS1での畳み込み処理の計算例を示す図。 畳み込み処理の分割例を示す図。
以下に添付図面を参照して、この発明にかかる演算装置の好適な実施形態を詳細に説明する。
本実施形態の演算装置は、データを記憶する記憶部と、記憶部内のデータ転送を行うDMA(Direct Memory Access)部と、演算処理を行う行列演算部と、DMA部および行列演算部に対してパラメータの設定および処理命令を行う制御部とを用いて、パラメータにより制御可能なD次元(Dは3以上の整数)のループ処理を行う。これにより、ニューラルネットワークなどで実行される演算処理を高効率(低消費電力、高速)に実行することができる。
D次元のループ(処理ループ)とは、繰り返し処理がD回入れ子(ネスト)となった処理である。例えば3次元の処理ループは、3重の多重ループ(3重ループ)であると言い換えることもできる。以下では、主に3次元(D=3)の処理ループを用いる例を説明し、変形例として5次元(D=5)の処理ループを用いる例を説明する。
また、以下では、D次元の処理ループの各次元それぞれでインクリメントされるカウンタの変化する方向を各座標軸とした座標を用いて、各カウンタの値を表現する場合がある。例えば座標(x,y,z)は、3次元の処理ループの各次元それぞれでインクリメントされるカウンタをx、y、zとし、x、y、zそれぞれの変化する方向をx軸(x方向)、y軸(y方向)、z軸(z方向)としたときの座標を意味する。
図1は、本実施形態の演算装置100の構成例を示すブロック図である。演算装置100は、例えばCNN(Convolutional Neural Network)およびRNN(Recurrent Neural Network)などのニューラルネットワークの演算を行う装置であるが、これに限られるものではない。演算装置100は、行列演算を含む演算処理を行う他の装置として実現されてもよい。
図1に示すように、演算装置100は、記憶部600と、DMA部300と、行列演算部400(演算部の一例)と、制御部200と、を備えている。
記憶部600は、演算で用いられる各種データを記憶する。記憶部600は、フラッシュメモリ、および、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
図2は、記憶部600の構成例を示すブロック図である。記憶部600は、共有メモリ601、中間メモリ602、および、命令メモリ603を有する。共有メモリ601、中間メモリ602、および、命令メモリ603のうち2つ以上のメモリは、物理的に同じメモリの中の異なるアドレス空間を割り当ててもよい。
命令メモリ603は、制御部200の各機能を実現するプログラムコードを記憶する。制御部200は、命令メモリ603に記憶されたプログラムコードを読み出し、読み出したプログラムコードに従って、行列演算部400およびDMA部300に対するパラメータ設定および処理命令を行う。共有メモリ601は、SRCベクトルおよび重み行列を記憶する。中間メモリ602は、DSTベクトル(OUTベクトル)を記憶する。
SRCベクトルは、演算の対象として行列演算部400に入力されるベクトル形式のデータである(入力ベクトルの一例)。重み行列は、SRCベクトルに対して乗じられるデータとして行列演算部400に入力される行列形式のデータである。DSTベクトルは、行列演算部400による演算の結果を示すベクトル形式のデータである(中間値ベクトルの一例)。DSTベクトルは、次の処理ループの演算の結果に対する加算処理(和の演算)に用いられる場合がある。このため中間メモリ602がDSTベクトルを記憶する。DSTベクトルは、最終的な演算結果として出力される場合がある。最終的な演算結果として出力されるDSTベクトルをOUTベクトル(出力ベクトルの一例)という場合がある。
図1に戻り、DMA部300は、記憶部600内の各メモリ間のデータ転送を行う。例えばDMA部300は、共有メモリ601から中間メモリ602へのデータ移動、および、中間メモリ602から共有メモリ601へのデータ移動を制御する。
行列演算部400は、制御部200からの処理命令に従い演算処理を実行する。制御部200は、DMA部300および行列演算部400に対して、パラメータの設定および処理命令を行う。例えば制御部200は、D次元の処理ループを含む演算処理の中での、記憶部600から読み出す各データ(SRCベクトル(第1入力ベクトル)、重み行列(第1行列)、および、DST(第1中間値ベクトル))のアドレス、各データの読み出しタイミング、記憶部600に書き込むデータ(OUTベクトル(第1出力ベクトル))のアドレス、および、書き込むデータの書き込みタイミングを、パラメータの設定および処理命令により制御する。
例えば行列演算部400は、制御部200によって設定された読み出しタイミングに従って記憶部600から読み出されたSRCベクトルと重み行列との積を演算し、設定された読み出しタイミングに従って記憶部600から読み出されたDSTベクトルと演算により得られた積との和を演算し、演算した和をOUTベクトルとして、設定された書き込みタイミングで記憶部600に記憶させる。行列演算部400および制御部200の機能の詳細は後述する。
図1に示すように、制御部200およびDMA部300は、外部バスを経由して外部の機器およびメモリと接続されてもよい。
制御部200は、例えば、DMA部300および行列演算部400に対する専用の命令セットを備えるセントラルプロセッサユニット(CPU)として実現できる。DMA部300および行列演算部400は、それぞれ独立の、または、一体化したハードウェア回路などにより実現できる。制御部200、DMA部300、および、行列演算部400の一部または全部を、物理的に一体化したハードウェア回路により実現してもよい。
図3は、行列演算部400の詳細な構成の一例を示すブロック図である。行列演算部400は、制御部200からのパラメータ設定および処理命令201に従って処理を行う。行列演算部400は、メモリ制御部401と、行列積演算部402と、累積加算部403と、非線形演算部404と、累積レジスタ411と、レジスタ412と、を備えている。
メモリ制御部401は、記憶部600からのデータの読み出し、および、記憶部600に対するデータの書き込みを制御する。行列積演算部402は、記憶部600から読み出された重み行列11とSRCベクトル12との行列積を計算する。累積加算部403は、行列積演算部402による演算結果である出力ベクトルと、記憶部600から読み出されたDSTベクトル13、または、累積レジスタ411に記憶されたベクトルとの加算を行う。
非線形演算部404は、累積加算部403による演算結果である出力ベクトルに対して非線形演算を適用し、演算結果である出力ベクトルをOUTベクトル14として記憶部600に書き込む。非線形演算は、例えば、活性化関数を適用した演算、および、量子化などの演算であり、複数の処理をパイプライン化した演算でもよい。また、パラメータ設定を用いて複数の非線形演算を切り替える機能を有していてもよい。
累積レジスタ411は、累積加算部403による演算(加算)に用いるデータを記憶するレジスタである。累積レジスタ411には、累積する値の初期値(例えばゼロ)、または、記憶部600から読み出された値などが設定される。
累積レジスタ411に記憶(代入)する値は、事前の最適化処理によってバッチ正規化処理を畳み込み処理に吸収した場合のバイアス値(畳み込み処理に吸収できない値に相当する)、および、行列演算部400による演算結果に他の演算の演算結果を加算する場合の他の演算の演算結果などであってもよい。
レジスタ412は、DMA部300および行列演算部400に対して設定するパラメータを記憶するためのレジスタである。レジスタ412に記憶されるパラメータの詳細は後述する。
累積レジスタ411およびレジスタ412は、行列演算部400の外部に備えられてもよい。また、累積レジスタ411およびレジスタ412の一部または全部の代わりに、記憶部600などの他の記憶装置を用いるように構成してもよい。
以上のような構成により、行列演算部400は、制御部200からのパラメータ設定および処理命令のオペランドに従って、様々な畳み込み処理および全結合層処理(ニューラルネットワークの全結合層の処理に相当)を実行することが可能となる。以下、行列演算部400および制御部200の機能の詳細について説明する。
SRCベクトルのサイズが1×P(P次元のベクトル)であり、重み行列のサイズがP×Nであるとすれば、DSTベクトルおよびOUTベクトルのサイズは1×N(N次元のベクトル)となる。Pは、2以上の整数であり、例えば、共有メモリ601の記憶単位(ワード)のサイズに応じて決定される。また、Nは、2以上の整数であり、例えば、中間メモリ602の記憶単位のサイズに応じて決定される。
例えば、SRCベクトルは、特徴マップの一部分である(横幅,縦幅,チャネル数)=(1,1,P)の要素に相当するベクトルである。特徴マップは、例えば、CNNの各畳み込み層による処理の入力となるデータである。例えば、2次元の画像データ(横方向および縦方向の画素ごとにRGBの各チャネルの画素値を含むデータなど)、および、2次元の画像データを前段の畳み込み層で演算した結果であるデータが、特徴マップになりうる。
特徴マップのサイズ(横幅,縦幅,チャネル数)=(X,Y,Z×P)は、例えば、(7,7,4×P)である。特徴マップのうち、横幅=1、縦幅=1、チャネル数=Pの部分を取り出した情報は、P次元のベクトルとなる。SRCベクトルは、例えばこのような特徴マップの一部分の要素に相当するベクトルである。以下では、特徴マップのサイズの表現である(横幅,縦幅,チャネル数)に対応させて、ベクトルのサイズも(横幅,縦幅,チャネル数)=(1,1,P)などと表現する場合がある。
X,Y,Zは、それぞれx方向、y方向、z方向の処理サイズと解釈することができる。処理サイズは、例えば各次元の処理ループのカウンタの最大値に相当する。例えば、特徴マップの横方向および縦方向には1要素単位で処理が行われる。従って、x方向およびy方向の処理サイズは、特徴マップの横幅および縦幅(上記例では、それぞれ7)と一致する。チャネル方向では、例えばP次元のSRCベクトルが処理単位となるため、チャネル方向の処理サイズZはチャネル数/P=4となる。
重み行列は、例えば畳み込みフィルタの一部分を抽出して並べることにより得られるP×N次元の行列である。言い換えると、重み行列は、入力チャネル数がP、出力チャネル数がNの行列である。特徴マップのサイズの表現に対応させると、重み行列は、(横幅,縦幅,入力チャネル数,出力チャネル数)=(1,1,P,N)の行列であると解釈することもできる。
DSTベクトルは、N次元のベクトル、言い換えると、チャネル数がNのベクトルである。特徴マップのサイズの表現に対応させると、DSTベクトルは、(横幅,縦幅,チャネル数)=(1,1,N)のベクトルであると解釈することもできる。
行列演算部400は、1回の処理命令に対して以下のような演算を行うと解釈することができる。それぞれのベクトルおよび行列の読み書きのタイミング、並びに、非線形関数(非線形演算)の適用の有無は、パラメータで制御される。
OUTベクトル=非線形関数(SRCベクトル×重み行列+DSTベクトル)
図4は、行列演算部400に設定されるパラメータの構成例を示す図である。パラメータは、レジスタ412に設定するパラメータ、および、処理命令のオペランドに設定するパラメータに分類することができる。図4に示す分類方法は一例であり、他のどのような分類方法を適用してもよい。例えば、すべてのパラメータがレジスタ412に設定されてもよいし、すべてのパラメータがオペランドとして設定されてもよい。
パラメータによって、処理するデータのアドレスの範囲、データの処理順序、処理を行うタイミングなどを制御することができる。すなわち、行列演算部400は、図4に示すパラメータに従う1回の処理命令で、1回の行列積を計算するのみでなく、指定された範囲のデータを用いた1回以上の積和演算を行うことができる。
図4の定義を用いると、3次元の処理ループでの座標(x,y,z)における重み行列の読み出しアドレス(wadr)、SRCベクトルの読み出しアドレス(sadr)、および、DSTベクトルの読み出しアドレス(dadr)は、それぞれ例えば以下の式(1)、式(2)および式(3)ように書くことができる。ここでは、DSTベクトルの読み出しアドレス=OUTベクトルの書き込みアドレスとしているが、両者を独立して定義してもよい。
wadr=wadr0+wadr_offset+xΔwx+yΔwy+zΔwz ・・・(1)
sadr=sadr0+sadr_offset+xΔsx+yΔsy+zΔsz ・・・(2)
dadr=dadr0+dadr_offset+xΔdx+yΔdy+zΔdz ・・・(3)
図5は、1回の処理命令に対して行列演算部400で実行される行列演算処理の一例を示すフローチャートである。図5に示すように、行列演算処理は、x方向、y方向、z方向に相当する3重のループ処理になっている。例えば、x方向、y方向、および、z方向は、それぞれ特徴マップの横方向、縦方向、および、チャネル方向に対応する。
行列演算部400は、制御部200からの処理命令に従い、行列演算処理を開始する。第1処理から第8処理(ステップS101、ステップS103、ステップS105、ステップS107、ステップS109、ステップS112、ステップS115、ステップS118)は、各タイミングでの処理が指定されている場合に実行される。第1処理から第8処理の具体例は後述する。
行列演算部400は、3次元の各ループの前に、対応する変数を初期化する。例えば、行列演算部400は、z=0(ステップS102)、y=0(ステップS104)、x=0(ステップS106)のようにz、y、xを初期化する。
最も内側のループ内で、行列積演算部402および累積加算部403は、積和演算処理を実行する(ステップS108)。例えば行列積演算部402は、ここまでの処理で記憶部600から読み出された重み行列とSRCベクトルとの行列積を計算する。そして、累積加算部403は、行列積演算部402による演算結果である出力ベクトルと、記憶部600から読み出されたDSTベクトル、または、累積レジスタ411に記憶されたベクトルとを加算する。
各ループ内での処理が終了すると、行列演算部400は、対応するカウンタ(x、yまたはz)に1を加算する(ステップS110、ステップS113、ステップS116)。また、行列演算部400は、カウンタが終了条件を満たすか否かを判定する。
例えば行列演算部400は、最も内側の処理ループのカウンタxがX(x方向の処理サイズに相当)に達したか否かを判定し(ステップS111)、達していない場合(ステップS111:No)、ステップS107に戻り処理を繰り返す。達している場合(ステップS111:Yes)、行列演算部400は、ステップS112以降の処理を実行する。
行列演算部400は、中央の処理ループのカウンタyがY(y方向の処理サイズに相当)に達したか否かを判定し(ステップS114)、達していない場合(ステップS114:No)、ステップS105に戻り処理を繰り返す。達している場合(ステップS114:Yes)、行列演算部400は、ステップS115以降の処理を実行する。
行列演算部400は、最も外側の処理ループのカウンタzがZ(z方向の処理サイズに相当)に達したか否かを判定し(ステップS117)、達していない場合(ステップS117:No)、ステップS103に戻り処理を繰り返す。達している場合(ステップS117:Yes)、行列演算部400は、ステップS118以降の処理を実行する。
図6は、第1処理から第8処理の例を示す図である。図6の重み処理、SRC処理、DST処理、OUT処理の4つの処理は、図4の第1処理~第8処理のいずれかのタイミングで実行される。第1処理から第8処理のそれぞれは、図6の4つの処理のうち2つ以上の処理を含んでもよい。
図6に記載した初期条件は、例えば、累積する値の初期値を累積レジスタ411から読み出すかを判定するための条件である。初期条件の構成例を、以下の(INIT1)~(INIT4)に示す。なお、以下のような複数の初期条件から適用する初期条件を選択できるようなパラメータをさらに備えてもよい。また、以下の初期条件のうち一部の初期条件のみを適用してもよい。また、以下の初期条件内の変数x、y、zのうち一部または全部を用いない初期条件を適用してもよい。なおinit_cond_x、init_cond_y、および、init_cond_zは、初期条件が満たされる場合に実行される処理を適用するデータの範囲を制限する条件と解釈することができる。
(INIT1):
init_condition(init_flag,x,y,z)=
(init_flag==1)&
((x≦init_cond_x)&(y≦init_cond_y)&(z≦init_cond_z))
(INIT2):
init_condition(init_flag,x,y,z)=
(init_flag==1)&
((x≦init_cond_x)|(y≦init_cond_y)|(z≦init_cond_z))
(INIT3):
init_condition(init_flag,x,y,z)=
(init_flag==1)&
((x≧init_cond_x)&(y≧init_cond_y)&(z≧init_cond_z))
(INIT4):
init_condition(init_flag,x,y,z)=
(init_flag==1)&
((x≧init_cond_x)|(y≧init_cond_y)|(z≧init_cond_z))
図6に記載した最終条件は、例えば、出力ベクトル(OUTベクトル)に対して非線形演算を実行するかを判定するための条件である。最終条件の構成例を、以下の(LAST1)~(LAST4)に示す。以下のような複数の最終条件から適用する最終条件を選択できるようなパラメータをさらに備えてもよい。また、以下の最終条件のうち一部の最終条件のみを適用してもよい。また、以下の最終条件内の変数x、y、zのうち一部または全部を用いない最終条件を適用してもよい。なおlast_cond_x、last_cond_y、および、last_cond_zは、最終条件が満たされる場合に実行される処理(非線形演算など)を適用するデータの範囲を制限する条件と解釈することができる。
(LAST1):
last_condition(last_flag,x,y,z)=
(last_flag==1)&
((x≦last_cond_x)&(y≦last_cond_y)&(z≦last_cond_z))
(LAST2):
last_condition(last_flag,x,y,z)=
(last_flag==1)&
((x≦last_cond_x)|(y≦last_cond_y)|(z≦last_cond_z))
(LAST3):
last_condition(last_flag,x,y,z)=
(last_flag==1)&
((x≧last_cond_x)&(y≧last_cond_y)&(z≧last_cond_z))
(LAST4):
last_condition(last_flag,x,y,z)=
(last_flag==1)&
((x≧last_cond_x)|(y≧last_cond_y)|(z≧last_cond_z))
図7は、第1処理から第8処理に対する処理(図6の処理)の割り当てパターン(スケジューリング)の例を示す図である。第1処理から第8処理に処理を割り当てるか否か、および、どのような処理を割り当てるかによって、行列演算処理の対象とするデータおよびタイミングを変更することができる。
スケジューリングは、WS(Weight Stationary)、OS(Output Stationary)1、および、OS2を含む。WSは、主としてWSアルゴリズムによる2次元の畳み込み処理を実行するための設定である。OS1は、主としてOSアルゴリズムによる2次元の畳み込み処理を実行するための設定である。OS2は、主として全結合層処理、すなわち、ベクトル×行列の積を演算するための設定である。
一般的に、パラメータを変えた複数回の処理命令(スケジューリング)を組み合わせることで、2次元の畳み込み処理を実現することができる。図7以外にも任意の組み合わせを用いることができる。
図8は、WSに相当する演算処理の疑似プログラミングコードの一例を示す図である。図9は、OS1に相当する演算処理の疑似プログラミングコードの一例を示す図である。図10は、OS2に相当する演算処理の疑似プログラミングコードの一例を示す図である。図11は、図8から図10の疑似プログラミングコードで用いられる変数および関数の定義を示す図である。
1回の処理命令に対して行列演算部400で実行される行列演算処理の例は、図5に限られるものではない。図12-1および図12-2は、行列演算処理の他の例を示すフローチャートである。図5のフローチャートとの違いは、図6の各処理(重み処理、SRC処理、DST処理、および、OUT処理)を割り当てるタイミングを変えるのではなく、各処理を実行するか否かの判定条件が追加される点である。
まず行列演算部400は、z=0、y=0、x=0のように各カウンタを初期化する(ステップS201、ステップS202、ステップS203)。行列演算部400は、最も内側のループ内で、ループ内処理を実行する(ステップS204)。ループ内処理は図12-2を用いて説明する。
最も内側のループ内での処理が終了すると、行列演算部400は、対応するカウンタxに1を加算する(ステップS205)。また、行列演算部400は、カウンタxが終了条件を満たすか否かを判定する(ステップS206)。終了条件を満たさない場合(ステップS206:No)、行列演算部400は、ステップS204に戻り処理を繰り返す。終了条件を満たす場合(ステップS206:Yes)、行列演算部400は、ステップS207以降の処理を実行する。
行列演算部400は、中央の処理ループのカウンタyに1を加算する(ステップS207)。また、行列演算部400は、カウンタyが終了条件を満たすか否かを判定する(ステップS208)。終了条件を満たさない場合(ステップS208:No)、行列演算部400は、ステップS203に戻り処理を繰り返す。終了条件を満たす場合(ステップS208:Yes)、行列演算部400は、ステップS209以降の処理を実行する。
行列演算部400は、最も外側の処理ループのカウンタzに1を加算する(ステップS209)。また、行列演算部400は、カウンタzが終了条件を満たすか否かを判定する(ステップS210)。終了条件を満たさない場合(ステップS210:No)、行列演算部400は、ステップS202に戻り処理を繰り返す。終了条件を満たす場合(ステップS210:Yes)、行列演算処理が終了する。
ステップS204のループ内処理について図12-2を用いて説明する。
行列演算部400は、重み行列のアドレスを計算する(ステップS301)。行列演算部400は、重み行列のアドレスが更新されたか否かを判定する(ステップS302)。更新された場合(ステップS302:Yes)、行列演算部400は、更新されたアドレスから重み行列を読み出す(ステップS303)。重み行列のアドレスが更新されていない場合(ステップS302:No)、または、重み行列を読み出した後、行列演算部400は、SRCベクトルのアドレス(SRCアドレス)を計算する(ステップS304)。
行列演算部400は、SRCアドレスが更新されたか否かを判定する(ステップS305)。更新された場合(ステップS305:Yes)、行列演算部400は、更新されたアドレスからSRCベクトルを読み出す(ステップS306)。SRCアドレスが更新されていない場合(ステップS305:No)、または、SRCベクトルを読み出した後、行列演算部400は、DSTベクトルのアドレス(DSTアドレス)を計算する(ステップS307)。
行列演算部400は、DSTアドレスが更新されたか否かを判定する(ステップS308)。DSTアドレスが更新された場合(ステップS308:Yes)、行列演算部400は、初期条件が満たされるか否かを判定する(ステップS309)。初期条件が満たされない場合(ステップS309:No)、行列演算部400は、更新されたアドレスからDSTベクトルを読み出す(ステップS310)。初期条件が満たされる場合(ステップS309:Yes)、行列演算部400は、累積レジスタ(REG)の値を読み出し、DSTベクトルの値として設定する(ステップS311)。
DSTアドレスが更新されていない場合、または、DSTベクトルを読み出した後、行列演算部400は、積和演算処理を実行する(ステップS312)。この積和演算処理は、図5のステップS108の処理と同様である。
行列演算部400は、書き込み条件が満たされるか否かを判定する(ステップS313)。書き込み条件が満たされる場合(ステップS313:Yes)、行列演算部400は、最終条件が満たされるか否かを判定する(ステップS314)。最終条件が満たされる場合(ステップS314:Yes)、行列演算部400は、積和演算処理の演算結果に対して非線形演算処理を実行する(ステップS315)。
最終条件が満たされない場合(ステップS314:No)、または、非線形演算処理を実行後、行列演算部400は、ここまでの処理の演算結果をOUTベクトルとして記憶部600に書き込む(ステップS316)。
書き込み条件を満たさない場合(ステップS313:No)、または、OUTベクトルを書き込み後、ループ内処理が終了する。
このように、図12-1および図12-2の例では、重み行列のアドレスの更新がある場合には重み行列の読み込み、SRCアドレスの更新がある場合にはSRCベクトルの読み込み、DSTアドレスの更新がある場合にはDSTベクトルの読み込みが実行される。この例も、図5のフローチャートと同様に3重の処理ループになっており、図5と同様の機能を実現できる。
図13は、図12-1および図12-2のフローチャートに従って実行される場合の、WSに相当する演算処理の疑似プログラミングコードの一例を示す図である。図13中の記号「※」に示すように、各アドレスの3次元のインクリメント量を制御し、アドレスが更新されたか否かを判定することで、図5と実質的に同じ処理が実現できる。
図12-2のステップS302、ステップS305、および、ステップS308で、重み行列、SRCベクトル、および、DSTベクトルそれぞれのアドレスが更新されたか判定する第1の方法は、過去のアドレス値をレジスタに記憶しておき、新たに計算したアドレス値と比較する方法である。この場合、初回の処理では原則としてアドレス値が更新されたとみなす。
アドレスが更新されたか判定する第2の方法は、3次元のアドレスのインクリメント値(Δwx,Δwy,Δwz,Δsx,Δsy,Δsz,Δdx,Δdy,Δdz)が非ゼロか否か、および、カウンタがインクリメントしたかを用いて判定する方法である。すなわち行列演算部400は、x方向のインクリメント値(Δwx、Δsx、Δdx)が非ゼロならxがインクリメントしたときに対応するアドレスが更新されたと判定する。行列演算部400は、y方向のインクリメント値(Δwy、Δsy、Δdy)が非ゼロならyがインクリメントしたときに対応するアドレスが更新されたと判定する。行列演算部400は、z方向のインクリメント値(Δwz、Δsz、Δdz)が非ゼロならzがインクリメントしたときに対応するアドレスが更新されたと判定する。3次元のアドレスのインクリメント値(Δwx,Δwy,Δwz,Δsx,Δsy,Δsz,Δdx,Δdy,Δdz)は、対応するアドレスの値を処理ループ内で更新するか否かを定めるパラメータであると解釈することができる。この場合も、初回の処理では原則としてアドレス値が更新されたとみなす。
図12-2のステップS313で書き込み条件を満たすかどうかの判定は、DSTアドレスが更新されたタイミングに関連付けて行うことができる。書き込み条件を満たすかどうか判定する第1の方法は、3次元のアドレスのインクリメント値が非ゼロか否か、および、3次元のアドレスの各次元が最大値かどうかを用いて以下のように書くことができる。
(書き込み条件を満たすかどうか判定する第1の方法):
(Δdx!=0)|
(Δdx=0&Δdy!=0&x=X-1)|
(Δdx=0&Δdy=0&Δdz!=0&x=X-1&y=Y-1)|
(Δdx=0&Δdy=0&Δdz=0&x=X-1&y=Y-1&z=Z-1)
上述のように、1回、または、複数回の行列演算処理(図5、または、図12-1および図12-2)を組み合わせることにより、例えばCNNの畳み込み層の演算に相当する2次元の畳み込み処理、および、全結合層の演算に相当する処理を実現することができる。以下、2次元の畳み込み処理、および、全結合層処理の例について説明する。
図14は、行列演算部400による2次元の畳み込み処理のフローチャートの例である。2次元の畳み込み処理は、例えば、特徴マップの横方向および縦方向の2次元の方向に畳み込みフィルタをスライドさせて畳み込みを行う処理である。図14は、横方向および縦方向のサイズが共に3である3×3の畳み込みフィルタ(3×3フィルタ)を用いる場合の例を示す。より具体的には、図14の例では、畳み込みのパラメータは、(x方向のストライド,y方向のストライド)=(1,1)、(上のパディングサイズ,下のパディングサイズ,左のパディングサイズ,右のパディングサイズ)=(1,1,1,1)、(x方向のフィルタサイズ,y方向のフィルタサイズ)=(3,3)である。
ステップS401は、制御部200がレジスタにパラメータを設定する処理に相当する。例えば、制御部200は、wadr0、sadr0、dadr0に、それぞれ重み行列、SRCベクトル、および、DSTベクトルの開始アドレスのベース値(基準値)を設定する。アドレスの3次元のインクリメント値、および、3次元の処理サイズのベース値(基準値)は、例えば図14のステップS401内で示すような値に設定される。「scheduling(WS)」は、例えば図7のスケジューリング(割り当てパターン)のうち、WSのスケジューリングを適用することを示す。図14には示されていないが、初期条件および最終条件がステップS401で設定されてもよい。
ステップS402~ステップS410に示す命令それぞれが、図5、または、図12-1および図12-2で示した行列演算処理に対応する。例えば、ステップS402では、制御部200は、図14に示すようなオペランドを含む処理命令を発行し、行列演算部400に処理命令に応じた処理を実行させる。ステップS402は、フィルタの中心画素に対する畳み込み処理に相当する。中心画素から開始した理由は、x方向およびy方向の要素全体に対する演算処理が実行されるため、初期化(対応する初期値を累積レジスタ411から読み出す処理など)を1命令で実行することができるからである。
なお、中心画素に対する処理から開始しない場合は、初期化処理を適用する要素の範囲を各次元のいずれかで制限するような初期条件を、2つ以上のステップで設定する必要がある。例えば、上記の(INIT1)~(INIT4)に示すような初期条件のinit_cond_x、init_cond_y、init_cond_zを適切に設定することにより、初期条件を適用する各次元の要素の範囲を、2つ以上のステップに分割して(重複しないように)設定することができる。
ステップS403以降の各ステップでは、アドレスのオフセット、処理サイズのオフセット、初期フラグ、および、最終フラグなどのオペランドを変更することで、所望の行列演算処理を実行させることができる。
図14に示すように、3×3フィルタを適用した2次元の畳み込み処理は、9個の処理命令(ステップS402~ステップS410)に相当する9回の行列演算処理によって実現できる。畳み込みフィルタのサイズが変更される場合は、そのサイズに応じた回数の行列演算処理によって2次元の畳み込み処理が実現される。
図15は、図14に示す2次元の畳み込み処理でのフィルタの処理順序の例を示した図である。図15内の各数値は処理順序を示す。具体的には、数値の小さい要素から処理が実行されることを意味する。w0~w35は、各フィルタ内の重みが、「w」の後に付された数値の順序で適用されることを意味する。各数値(0~195)および重み(w0~w35)が付された各矩形は、1×Pのベクトルまたは1×Nのベクトルに相当する。同じ数値が付された重みをNカーネル分、抽出したP×Nの行列が重み行列に相当する。説明の便宜のため、右方向に並べたN個(Nカーネル分)のフィルタの重みに同じ符号(w0など)を付しているが、これは重みの値が同じことを意味するのではなく、適用順序が同じであることを意味するのみである。
図16は、図14のステップS402での処理の例を説明する図である。図16の例では、特徴マップのサイズ(X,Y,Z×P)=(横幅,縦幅,チャネル数)=(7,7,4×P)である。また、行列積演算部402へ入力される特徴マップに相当するSRCベクトルは、(横幅,縦幅,チャネル数)=(1,1,P)に相当する1×Pベクトルである。重み行列は、(横幅,縦幅,入力チャネル数,出力チャネル数)=(1,1,P,N)のP×N行列である。
共有メモリ601に格納される1ワードのデータの形式は原則としてチャネル方向の要素を含むベクトルであり、横幅=縦幅=1である要素単位(画像の場合は画素単位)になっている。図16の処理では、フィルタの中心画素と特徴マップの同一チャネルの全画素との積和演算が実行される。その結果、(横幅、縦幅、チャネル数)=(1,1,N)であるDSTベクトルが計算される。
すなわち、w0に相当する重み行列と、0~48の数値に相当する49個のSRCベクトルとの行列積が計算され、累積レジスタ411の値を初期値として49個の行列積が順次加算され、加算結果が中間メモリ602に書き込まれる。次に、w1に相当する重み行列と49~97の数値に相当する49個のSRCベクトルとの行列積が計算され、中間メモリ602からDSTベクトルとして読み出したw0に対する計算結果に対して、49個の行列積が順次加算され、加算結果が中間メモリ602に再度書き込まれる。
w2に相当する重み行列と98~146の数値に相当する49個のSRCベクトル、および、w3に相当する重み行列と147~195の数値に相当する49個のSRCベクトルついても同様に行列積の計算および累積加算が行われる。ステップS402の処理によって畳み込み処理のうち、3×3フィルタ画素1つに相当する処理が完了する。
上述のようにフィルタの「w」に続く数字は処理順序であり、読み出し順序と一致している。一般的にフィルタのデータは事前に用意できるため、共有メモリ601に格納する順序を所望の順序にすることは容易に実現できる。従って、重み行列にアクセスする際のアドレスは、単純な+1のインクリメントで十分な場合が多い。
図17は、図14のステップS403での処理の例を説明する図である。図17の例は、左下のフィルタ画素を使った処理の例である。中心画素の場合と違い、SRCベクトルおよびDSTベクトルの処理範囲(処理サイズ)がx方向およびy方向の要素全体ではないことに注意する必要がある。図17内の灰色の矩形は、計算に用いられない矩形を示す。この例では、処理サイズを7×7から6×6に小さくし、SRCベクトルの開始アドレスを7、DSTベクトルおよびOUTベクトルの開始アドレスを1オフセットすることで所望の処理が実現される。
本実施形態では、処理サイズのオフセットおよびアドレスのオフセットなどのパラメータを設定レジスタおよび命令オペランドで制御することができる。
図14のステップS404~ステップS410に示す、残りの7フィルタ画素の処理については、図14のパラメータに従って同様の方法で計算を行えばよい。ステップS410の処理が終了後に、2次元の畳み込み処理が完了する。
なお図14は、最終条件を考慮しない例、すなわち、非線形演算を適用しない例である。非線形演算を適用する例について以下に説明する。図18は、畳み込み処理と非線形演算を合わせて実行する場合のフローチャートの例である。
畳み込み処理の後に続けて非線形演算を実行するために、最終フラグが使用される。しかし、例えば図14の最後のステップS410で最終フラグ(last_flag)を1に設定するのみでは不十分である。フィルタの中心画素以外では、DSTベクトルのすべての要素を計算することはないため、一部の要素に非線形演算が適用されないからである。図18のステップS501~ステップS508までは、図14のステップS401~ステップS407と同じである。また、ステップS510とステップS409、および、ステップS512とステップS410は、最終フラグとして0を設定するか、1を設定するかが違うのみである。
図18では、最終フラグの適用範囲を決めるパラメータを設定する処理(ステップS509、ステップS511)が追加される。具体的にはステップS511ではz=3の場合にx方向およびy方向の要素全体に対して非線形演算が適用される。ステップS509では、(x=7)かつ(z=3)の場合に非線形演算が適用される。これらを合わせると、x方向およびy方向の要素全体の各画素に対して非線形演算が適用されるようになる。このような処理により、2命令に分かれたデータに対してパイプライン的に追加の非線形演算を適用することができる。
図18の例では、初期条件を1命令、最終条件を2命令に分割して処理していたが、初期命令を2命令に分割し、最終条件を1命令にして処理することも可能である。例えば、図15に示すようなフィルタの処理順序を反対にして数字の大きい順から処理することを考える。この場合、最後にフィルタの中心(図15の0)を処理するので、最終条件が1命令で実行できる。一方、この場合は、初期条件を2つの命令(図15の8と7に対応する命令)に分割して設定する必要がある。
図19は、行列演算部400におけるOS1での畳み込み処理の計算例を示す図である。図19は、OUTベクトルの8番目の1要素を出力するための計算を行う例を示している。この例では以下のようにパラメータが設定される。
処理サイズ:(X,Y,Z)=(3,3,4)
インクリメント値:
(Δwx,Δwy,Δwz)=(1,3,9)
(Δsx,Δsy,Δsz)=(1,7,49)
(Δdx,Δdy,Δdz)=(0,0,0)
オフセット:dadr0+dadr_offset=8
別の要素の計算は基本的にはSRCベクトルの開始アドレスをsadr0またはsadr_offsetでインクリメントしていけばよい。x方向およびy方向の端部の要素については、実際に計算に用いられるフィルタのサイズを必要に応じてX_offsetおよびY_offsetで縮小すればよい。また、それに合わせて重み行列の開始アドレスもwadr_offsetでオフセットすればよい。
一般的にWSの方が、OS1より少ない命令で畳み込み処理を記述できる場合が多い。上記例では、レジスタ設定に必要な命令を除くと、同じ畳み込み処理に対してWSが9命令で実現できるのに対して、OS1では49命令が必要になる。
図20は、行列演算部400におけるOS2での畳み込み処理の計算例を示す図である。図20の例では、1命令で3×3フィルタをx方向(特徴マップの横方向)に5回スライドして演算が実行される。すなわち、スライド方向がz方向に相当し、z方向の処理サイズがZ=5として設定される。この例では以下のようにパラメータが設定される。
処理サイズ:(X,Y,Z)=(3,3,5)
インクリメント値:
(Δwx,Δwy,Δwz)=(1,3,0)
(Δsx,Δsy,Δsz)=(1,7,1)
(Δdx,Δdy,Δdz)=(0,0,1)
図19の例では(X,Y,Z)の3次元で数値の累積を行い、最後に一回書き込みを行っている。一方、図20の例では(X,Y)の2次元で数値の累積を行うことを、Z回繰り返す計算になっている。
図21は、行列演算部400におけるOS2での全結合層処理を説明する図である。全結合層処理では、処理対象とする全結合層の行列全体を、複数のP×N次元の行列(重み行列)に分割して処理するようにパラメータを設定する。例えば、全結合層の行列サイズを(PX)×(NZ)と考えて、適切にパラメータ設定を行えばレジスタ設定を除いて1命令で全結合層の行列積全体を処理することができる。
この例では以下のようにパラメータが設定される。
処理サイズ:(X,Y,Z)=(4,1,3)
インクリメント値:
(Δwx,Δwy,Δwz)=(1,0,4)
(Δsx,Δsy,Δsz)=(1,0,0)
(Δdx,Δdy,Δdz)=(0,0,1)
このように、図21の例では処理サイズ(X、Y,Z)=(4,1,3)と考えることができる。全結合層の行列全体のサイズを(PX)×(NZ)では正確に表現できない場合にはゼロパディングしてサイズを調整すればよい。
演算処理を高効率(低消費電力、高速)に実行するためには、記憶部600からのデータの読み出しをより高速に実行可能とすることが望ましい。本実施形態では、SRCベクトルの読み出し処理、重み行列の読み出し処理、DSTベクトルの読み出し処理、および、OUTベクトルの書き込み処理のうち、少なくとも2つの処理を並行して実行可能な記憶部600を用いるように構成する。
図22は、このように構成される記憶部600における共有メモリ601の構成例を示す図である。図22に示すように、共有メモリ601は、例えばN個(図22の例ではN=8)の2ポートメモリと、列セレクタ612と、を含む。図22の2ポートメモリ621~628の1ワードは、P個の要素を含むSRCベクトルが格納できるサイズである。2ポートメモリ621~628は、例えばQ個(Qは1以上の整数)のP次元のベクトルをそれぞれ記憶可能なメモリである。また、P×N次元の重み行列は、Nワード分のデータサイズに相当する。例えば重み行列は、1ワードごとにN個の2ポートメモリ621~628に分けられて記憶される。
共有メモリ601の任意のメモリアドレスへの書き込みおよび読み出しは、列セレクタ612を用いて行うことができる。図22では列セレクタ612は1つであるが、複数の列セレクタ612が備えられてもよい。SRCベクトルの読み出しは、列セレクタ612経由で行う。重み行列の読み出しは、例えば、N個の2ポートメモリ621~628の同じアドレスから並行して行う。
記憶部600外部からの重み行列のアドレスの指定方法としては、例えば一番左の2ポートメモリ621のアドレス(記憶部600の外部から見たアドレス)を基準にする方法を適用できる。この場合、重み行列を指定するために必要なアドレスのビット数は、共有メモリ601全体のアドレス空間と比べてLOG2(N)ビット省略することができる。図22の例で、2ポートメモリ621に0、8、16・・・のようにアドレスが割り当てられ、このアドレスの指定により、他の2ポートメモリ622~628の対応する列のデータも読み出されるとする。この場合、必要なアドレスのビット数をLOG2(8)=3ビット省略することができる。
このような記憶部600の構成を用いることで、SRCベクトルと重み行列とを並行して読み出すこともでき、畳み込み処理および全結合層処理において高い動作率を維持することが可能になる。
図23は、図22の2ポートメモリ621を1ポートメモリの組み合わせで実現する構成例を示す図である。図22は、2ポートメモリ621について記載しているが、他の2ポートメモリ622~628も同様に構成することができる。
図23に示すように、2ポートメモリ621は、2つの1ポートメモリ621a、621bを含むように構成してもよい。例えば、2ポートメモリ621のワード数がQである場合、Q1+Q2=QであるようなQ1ワードの1ポートメモリ621aと、Q2ワードの1ポートメモリ621bと、行セレクタ621c、621dと、を組み合わせた構成を用いることができる。ただし、1ポートメモリで構成した場合には、SRCベクトルと重み行列が同じ1ポートメモリ内にある場合には同時に読み出すことができないという制約が発生しうる。しかし、SRCベクトルが1ポートメモリ621aに存在し、重み行列が1ポートメモリ621bに存在するような場合であれば、SRCベクトルと重み行列とを並行して読み出すことができる。
図24は、中間メモリ602の構成例を示す図である。中間メモリ602は、複数(図の例では4個)の1R1Wメモリ651~654と、列セレクタ655と、を含む。1R1Wメモリ651~654それぞれの1ワードは、N要素からなるDSTベクトルまたはOUTベクトルを格納できるサイズになっている。複数のバンクにしている理由は、例えば行列演算部400での演算を行いながら、DMA命令を使ってデータを移動するなどの処理を行うためである。この例では、1つの読み出し(READ)と1つの書き込み(WRITE)を並行して処理できる1R1Wメモリ651~654が用いられている。外部から見て等価に扱えるのであれば、中間メモリ602は、2ポートメモリまたは1ポートメモリで構成されてもよい。列セレクタ655を用いて、複数の1R1Wメモリ651~654のいずれかにアクセスすることができる。
図25は、共有メモリ601(2ポートメモリ621~628)のアドレスの割り当ての構成例を示す図である。数値がアドレスに相当する。図25の構成例では、同一行の複数の2ポートメモリ621~628に対して連続するアドレスが割り当てられる。その後、2ポートメモリ621のワード方向に隣接する領域に1インクリメントしたアドレスが割り当てられ、以降、同様の割り当てが繰り返される。
図26は、共有メモリ601(2ポートメモリ621~628)のアドレスの割り当ての他の構成例を示す図である。数値がアドレスに相当する。図26の構成例では、同一の2ポートメモリ内でアドレスが連続するように割り当てられる。
図26の割り当て方法がより一般的であると考えられるが、図25の割り当て方法の方が、例えばDMA処理と行列演算処理が連続的なメモリアドレスにアクセスする際に、競合が発生する可能性を低減できる。
(変形例)
上記実施形態では、図5のフローチャートおよび図12-1、図12-2のフローチャートで示したように、3次元の処理ループを用いたが、4次元以上に拡張することも可能である。
図27は、5次元の処理ループを用いる行列演算処理の一例を示すフローチャートである。図27は、図5のフローチャートを3次元から5次元に拡張した例である。図27のステップS605~ステップS622は、図5のステップS101~ステップS118と同様である。図27では、ステップS605~ステップS622の処理ループの外側に、さらにV方向およびW方向の次元についての処理が追加される。第9処理から第12処理(ステップS625、ステップS628、ステップS601、ステップS603)には、図6に示す4つの処理のいずれかを指定することができる。
行列演算部400は、追加された次元の各ループの前に、対応する変数を初期化する。例えば、行列演算部400は、w=0(ステップS602)、v=0(ステップS604)のようにw、vを初期化する。追加された各ループ内での処理が終了すると、行列演算部400は、対応するカウンタ(vまたはw)に1を加算する(ステップS623、ステップS626)。また、行列演算部400は、カウンタが終了条件を満たすか否かを判定する(ステップS624、ステップS627)。
図28は、5次元の処理ループを用いる行列演算処理の他の例を示すフローチャートである。図28は、図12-1のフローチャートを3次元から5次元に拡張した図である。図28のステップS703~ステップS712は、図12-1のステップS201~ステップS210と同様である。図28では、ステップS703~ステップS712の処理ループの外側に、さらにV方向およびW方向の次元についての処理が追加される。
行列演算部400は、w=0、v=0のように追加された次元で用いる各カウンタを初期化する(ステップS701、ステップS702)。追加された各ループ内での処理が終了すると、行列演算部400は、対応するカウンタ(vまたはw)に1を加算する(ステップS713、ステップS715)。また、行列演算部400は、カウンタが終了条件を満たすか否かを判定する(ステップS714、ステップS716)。
なお、4次元の処理ループは、5次元の処理ループのサブセットであり、V方向またはW方向が存在しない処理とすればよい。
図29は、処理ループの次元を3次元から5次元に拡張した場合に追加されるパラメータの例を示す図である。図4に示すパラメータと、図29に示すパラメータとを合わせるとパラメータ全体が得られる。図29に示すように、(x,y,z)の3次元から、(v,w,x,y,z)の5次元に拡張された分だけ、対応するパラメータが追加される。
式(1)から式(3)で定義されるアドレスは、それぞれ5次元の処理ループでは以下の式(4)から式(6)のように拡張すればよい。
wadr=wadr0+wadr_offset+vΔwv+wΔww+xΔwx+yΔwy+zΔwz ・・・(4)
sadr=sadr0+sadr_offset+vΔsv+wΔsw+xΔsx+yΔsy+zΔsz ・・・(5)
dadr=dadr0+dadr_offset+vΔdv+wΔdw+xΔdx+yΔdy+zΔdz ・・・(6)
また、3次元処理での初期条件の構成例(INIT1)~(INIT4)および最終条件の構成例(LAST1)~(LAST4)は、それぞれ以下の(INIT5)~(INIT8)、および、(LAST5)~(LAST8)のように拡張すればよい。
(INIT5):
init_condition(init_flag,v,w,x,y,z)=
(init_flag==1)&
((v≦init_cond_v)&(w≦init_cond_w)&(x≦init_cond_x)&(y≦init_cond_y)&(z≦init_cond_z))
(INIT6):
init_condition(init_flag,v,w,x,y,z)=
(init_flag==1)&
((v≦init_cond_v)|(w≦init_cond_w)|(x≦init_cond_x)|(y≦init_cond_y)|(z≦init_cond_z))
(INIT7):
init_condition(init_flag,v,w,x,y,z)=
(init_flag==1)&
((v≧init_cond_v)&(w≧init_cond_w)&(x≧init_cond_x)&(y≧init_cond_y)&(z≧init_cond_z))
(INIT8):
init_condition(init_flag,v,w,x,y,z)=
(init_flag==1)&
((v≧init_cond_v)|(w≧init_cond_w)|(x≧init_cond_x)|(y≧init_cond_y)|(z≧init_cond_z))
(LAST5):
last_condition(last_flag,v,w,x,y,z)=
(last_flag==1)&
((v≦last_cond_v)&(w≦last_cond_w)&(x≦last_cond_x)&(y≦last_cond_y)&(z≦last_cond_z))
(LAST6):
last_condition(last_flag,v,w,x,y,z)=
(last_flag==1)&
((v≦last_cond_v)|(w≦last_cond_w)|(x≦last_cond_x)|(y≦last_cond_y)|(z≦last_cond_z))
(LAST7):
last_condition(last_flag,v,w,x,y,z)=
(last_flag==1)&
((v≧last_cond_v)&(w≧last_cond_w)&(x≧last_cond_x)&(y≧last_cond_y)&(z≧last_cond_z))
(LAST8):
last_condition(last_flag,v,w,x,y,z)=
(last_flag==1)&
((v≧last_cond_v)|(w≧last_cond_w)|(x≧last_cond_x)|(y≧last_cond_y)|(z≧last_cond_z))
また、3次元処理での書き込み条件を満たすかどうか判定する第1の方法は、以下の第2の方法のように拡張すればよい。
(書き込み条件を満たすかどうか判定する第2の方法):
(Δdx!=0)|
(Δdx=0&Δdy!=0&x=X-1)|
(Δdx=0&Δdy=0&Δdz!=0&x=X-1&y=Y-1)|
(Δdx=0&Δdy=0&Δdz=0&Δdv!=0&x=X-1&y=Y-1&z=Z-1)|
(Δdx=0&Δdy=0&Δdz=0&Δdv=0&Δdw!=0&x=X-1&y=Y-1&z=Z-1&v=V-1)|
(Δdx=0&Δdy=0&Δdz=0&Δdv=0&Δdw=0&x=X-1&y=Y-1&z=Z-1&v=V-1&w=W-1)
図30は、図27のフローチャートにおける処理の割り当てパターン(スケジューリング)の例を示す図である。基本的には図6をそのまま拡張した例となっている。3次元から5次元に拡張した分だけ割り当ての自由度を増加させることができる。
図31は、行列演算部400におけるOS1での畳み込み処理の計算例を示す図である。図31は、図19に示す3次元での処理を5次元に拡張した例に相当する。この例では以下のようにパラメータが設定される。
処理サイズ:(V,W,X,Y,Z)=(5,5,3,3,4)
インクリメント値:
(Δwv,Δww,Δwx,Δwy,Δwz)=(0,0,1,3,9)
(Δsv,Δsw,Δsx,Δsy,Δsz)=(1,7,1,7,49)
(Δdv,Δdw,Δdx,Δdy,Δdz)=(1,7,0,0,0)
オフセット:dadr0+dadr_offset=8
図19の3次元の例では(X,Y,Z)方向に累積加算を実行していたため、OUTベクトルが変化する方向に対して自由度を割り当てることができず、1つのOUTベクトルしか計算できなかった。
図31の例では、さらに自由度が2次元追加されたため、(X,Y,Z)方向の累積加算に加えて、(V,W)方向でOUTベクトルの出力座標を2次元的に動かすことも可能になる。図31の例では、5次元処理にすることで25アドレス(W×V=5×5=25)の範囲の畳み込み処理を1命令で完成させることが可能になる。ただし、これら25アドレス以外については、フィルタのサイズを3×3から縮小する必要があるため、別の命令で処理する必要がある。
図32は、図31に示す畳み込み処理の分割例を示す図である。図32は7×7のOUTベクトルの処理範囲を示しており、分割された9個の矩形それぞれが、1命令で処理できる範囲になる。処理範囲が同じであるフィルタを適用する範囲が、それぞれ1つの矩形として分割される。また、図32の数値は、1命令で処理されるアドレス数を示す。図31で示すW×V=5×5の範囲に対応するアドレスが、図32の中心に示す25アドレスである。図32に示す分割例では、合計で9命令に分割して処理することができる。
また、これまでは主に2次元の画像データに基づく特徴マップを処理する例を説明したが、3次元以上の画像データなど他の多次元のデータを処理対象としてもよい。3次元のデータは、例えばCT(Computed Tomography)またはMRI(Magnetic Resonance Imaging)などを用いた3次元画像データである。
以上のように、本実施形態の演算装置100によれば、データを記憶する記憶部600と、メモリ間のデータ転送を行うDMA部300と、演算処理を行う行列演算部400と、DMA部300と行列演算部400に対してパラメータの設定および処理命令を行う制御部200、とを用いて、パラメータ制御可能なD次元処理を行うことができる。これにより、ニューラルネットワークなどで用いられる畳み込み処理および行列演算処理などの演算処理の動作率を低下させずに高速に実行することが可能となる。
本実施形態にかかる演算装置で実行されるプログラムは、記憶部600(命令メモリ603)等に予め組み込まれて提供される。
本実施形態にかかる演算装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD-R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、本実施形態にかかる演算装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる演算装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施形態にかかる演算装置で実行されるプログラムは、コンピュータを上述した演算装置の各部として機能させうる。このコンピュータは、制御部200がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
100 演算装置
200 制御部
300 DMA部
400 行列演算部
401 メモリ制御部
402 行列積演算部
403 累積加算部
404 非線形演算部
411 累積レジスタ
412 レジスタ
600 記憶部
601 共有メモリ
602 中間メモリ
603 命令メモリ

Claims (11)

  1. 1個以上のP次元(Pは2以上の整数)の入力ベクトル、1個以上のP×N次元(Nは2以上の整数)の行列、1個以上のN次元の中間値ベクトル、および、1個以上のN次元の出力ベクトルを記憶し、前記入力ベクトルの読み出し処理、前記行列の読み出し処理、前記中間値ベクトルの読み出し処理、および、前記出力ベクトルの書き込み処理のうち、少なくとも2つの処理を並行して実行可能な記憶部と、
    D次元(Dは3以上の整数)の処理ループを含む演算処理の中での、前記入力ベクトルのうち読み出す第1入力ベクトル、前記行列のうち読み出す第1行列、および、前記中間値ベクトルのうち読み出す第1中間値ベクトルの読み出しタイミングと、前記出力ベクトルのうち書き込む第1出力ベクトルの書き込みタイミングと、を設定する制御部と、
    前記読み出しタイミングに従って前記記憶部から読み出された前記第1入力ベクトルと前記第1行列との積を演算し、前記読み出しタイミングに従って前記記憶部から読み出された前記第1中間値ベクトルと前記積との和を演算し、前記和を前記第1出力ベクトルとして、前記書き込みタイミングで前記記憶部に記憶させる演算部と、
    を備える演算装置。
  2. 前記制御部は、前記第1入力ベクトルのアドレスの基準値、前記第1行列のアドレスの基準値、および、前記第1中間値ベクトルのアドレスの基準値と、D次元に含まれる各次元の処理ループ内での、前記第1入力ベクトルのアドレスのインクリメント値、前記第1行列のアドレスのインクリメント値、および、前記第1中間値ベクトルのアドレスのインクリメント値と、を設定し、
    前記演算部は、前記第1入力ベクトル、前記第1行列、および、前記第1中間値ベクトルのアドレスを、対応する基準値およびインクリメント値に基づいて求める、
    請求項1に記載の演算装置。
  3. 前記制御部は、前記第1入力ベクトルのアドレスの基準値に対するオフセット、前記第1行列のアドレスの基準値に対するオフセット、および、前記第1中間値ベクトルのアドレスの基準値に対するオフセットを設定し、
    前記演算部は、前記第1入力ベクトル、前記第1行列、および、前記第1中間値ベクトルのアドレスを、対応するオフセットに基づいて求める、
    請求項1に記載の演算装置。
  4. 前記制御部は、D次元に含まれる各次元の処理ループ内で処理する前記第1入力ベクトルの範囲、前記第1行列の範囲、および、前記第1中間値ベクトルの範囲と、前記第1入力ベクトルの範囲に対するオフセット、前記第1行列の範囲に対するオフセット値、および、前記第1中間値ベクトルの範囲に対するオフセット値と、を設定し、
    前記演算部は、前記第1入力ベクトル、前記第1行列、および、前記第1中間値ベクトルの範囲を、対応する範囲およびオフセットに基づいて求める、
    請求項1に記載の演算装置。
  5. 前記中間値ベクトルの初期値を記憶するレジスタをさらに備え、
    前記演算部は、設定された初期条件が満たされる場合、前記レジスタから前記第1中間値ベクトルを読み出す、
    請求項1に記載の演算装置。
  6. 前記初期条件は、前記初期条件が満たされる場合に実行される処理を適用するデータの範囲を制限する条件を含む、
    請求項5に記載の演算装置。
  7. 前記演算部は、設定された最終条件が満たされる場合、前記出力ベクトルに対して非線形演算を実行し、前記非線形演算を実行した前記第1出力ベクトルを前記書き込みタイミングで前記記憶部に記憶させる、
    請求項1に記載の演算装置。
  8. 前記最終条件は、前記最終条件が満たされる場合に実行される処理を適用するデータの範囲を制限する条件を含む、
    請求項7に記載の演算装置。
  9. 前記制御部は、前記第1入力ベクトル、前記第1行列、および、前記第1中間値ベクトルを指定するアドレスの値を前記処理ループ内で更新するか否かを定めるパラメータにより前記読み出しタイミングを設定する、
    請求項1に記載の演算装置。
  10. 前記記憶部は、Q個(Qは1以上の整数)のP次元のベクトルをそれぞれ記憶可能であり、並行してアクセス可能な複数のメモリを含み、
    前記入力ベクトル、前記中間値ベクトル、および、前記出力ベクトルは、複数の前記メモリのいずれかにそれぞれ記憶され、
    前記行列は、N個の前記メモリに分けられて記憶される、
    請求項1に記載の演算装置。
  11. 記憶部を備える演算装置で実行される演算方法であって、
    前記記憶部は、1個以上のP次元(Pは2以上の整数)の入力ベクトル、1個以上のP×N次元(Nは2以上の整数)の行列、1個以上のN次元の中間値ベクトル、および、1個以上のN次元の出力ベクトルを記憶し、前記入力ベクトルの読み出し処理、前記行列の読み出し処理、前記中間値ベクトルの読み出し処理、および、前記出力ベクトルの書き込み処理のうち、少なくとも2つの処理を並行して実行可能であり、
    D次元(Dは3以上の整数)の処理ループを含む演算処理の中での、前記入力ベクトルのうち読み出す第1入力ベクトル、前記行列のうち読み出す第1行列、および、前記中間値ベクトルのうち読み出す第1中間値ベクトルの読み出しタイミングと、前記出力ベクトルのうち書き込む第1出力ベクトルの書き込みタイミングと、を設定する制御ステップと、
    前記読み出しタイミングに従って前記記憶部から読み出された前記第1入力ベクトルと前記第1行列との積を演算し、前記読み出しタイミングに従って前記記憶部から読み出された前記第1中間値ベクトルと前記積との和を演算し、前記和を前記第1出力ベクトルとして、前記書き込みタイミングで前記記憶部に記憶させる演算ステップと、
    を含む演算方法。
JP2019118757A 2019-06-26 2019-06-26 演算装置および演算方法 Active JP7062617B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2019118757A JP7062617B2 (ja) 2019-06-26 2019-06-26 演算装置および演算方法
US16/801,025 US11423291B2 (en) 2019-06-26 2020-02-25 Arithmetic device and arithmetic method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019118757A JP7062617B2 (ja) 2019-06-26 2019-06-26 演算装置および演算方法

Publications (2)

Publication Number Publication Date
JP2021005227A JP2021005227A (ja) 2021-01-14
JP7062617B2 true JP7062617B2 (ja) 2022-05-06

Family

ID=74044738

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019118757A Active JP7062617B2 (ja) 2019-06-26 2019-06-26 演算装置および演算方法

Country Status (2)

Country Link
US (1) US11423291B2 (ja)
JP (1) JP7062617B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210071471A (ko) * 2019-12-06 2021-06-16 삼성전자주식회사 뉴럴 네트워크의 행렬 곱셈 연산을 수행하는 장치 및 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180253402A1 (en) 2017-03-01 2018-09-06 Texas Instruments Incorporated Implementing Fundamental Computational Primitives Using A Matrix Multiplication Accelerator (MMA)
WO2018211129A1 (en) 2017-05-19 2018-11-22 Movidius Ltd. Methods, systems and apparatus to improve convolution efficiency
US20180341479A1 (en) 2017-05-23 2018-11-29 Google Llc Accessing data in multi-dimensional tensors using adders

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7607132B2 (en) * 2004-04-08 2009-10-20 Taiwan Semiconductor Manufacturing Co., Ltd. Process scheduling system and method
US8782115B1 (en) * 2008-04-18 2014-07-15 Altera Corporation Hardware architecture and scheduling for high performance and low resource solution for QR decomposition
US8805911B1 (en) * 2011-05-31 2014-08-12 Altera Corporation Cholesky decomposition in an integrated circuit device
JP6365258B2 (ja) 2014-11-19 2018-08-01 株式会社デンソー 演算処理装置
JP6387913B2 (ja) 2015-07-08 2018-09-12 株式会社デンソー 演算処理装置
US11301713B2 (en) * 2017-10-25 2022-04-12 Nec Corporation Information processing apparatus, information processing method, and non-transitory computer readable medium
TWI650714B (zh) * 2018-01-19 2019-02-11 財團法人工業技術研究院 動態智能排程方法及裝置
KR102449941B1 (ko) * 2018-04-05 2022-10-06 레인 뉴로모픽스 인크. 효율적인 행렬 곱셈을 위한 시스템 및 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180253402A1 (en) 2017-03-01 2018-09-06 Texas Instruments Incorporated Implementing Fundamental Computational Primitives Using A Matrix Multiplication Accelerator (MMA)
WO2018211129A1 (en) 2017-05-19 2018-11-22 Movidius Ltd. Methods, systems and apparatus to improve convolution efficiency
US20180341479A1 (en) 2017-05-23 2018-11-29 Google Llc Accessing data in multi-dimensional tensors using adders

Also Published As

Publication number Publication date
JP2021005227A (ja) 2021-01-14
US20200410331A1 (en) 2020-12-31
US11423291B2 (en) 2022-08-23

Similar Documents

Publication Publication Date Title
CN110073359B (zh) 用于卷积神经网络的有效数据布局
US11204976B2 (en) Expanded kernel generation
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
US20200202198A1 (en) Neural network processor
GB2554711A (en) Buffer addressing for a convolutional neural network
US11170469B2 (en) Image transformation for machine learning
US10642622B2 (en) Arithmetic processing device and control method of the arithmetic processing device
CN107223237B (zh) 用于存储器访问的方法和装置
WO2022206556A1 (zh) 图像数据的矩阵运算方法、装置、设备及存储介质
US10114795B2 (en) Processor in non-volatile storage memory
CA2929403C (en) Multi-dimensional sliding window operation for a vector processor
US11341210B2 (en) Two-dimensional multi-layer convolution for deep learning
US11580369B2 (en) Inference apparatus, convolution operation execution method, and program
US11705207B2 (en) Processor in non-volatile storage memory
JP7062617B2 (ja) 演算装置および演算方法
US11321092B1 (en) Tensor-based memory access
US10229472B2 (en) Image processing apparatus, image processing method, and vehicle control apparatus
US20230289287A1 (en) Programmable Multi-Level Data Access Address Generator
TWI776838B (zh) 半導體裝置
US20230244600A1 (en) Process for Generation of Addresses in Multi-Level Data Access
KR102494565B1 (ko) 콘볼루션 신경망의 하드웨어 구조 최적화 방법
JP2022074442A (ja) 演算装置および演算方法
CN112712457A (zh) 数据处理方法以及人工智能处理器
JP2020080048A (ja) 並列処理装置およびプログラム
CN116721006A (zh) 特征图处理方法和装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210311

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220322

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220420

R151 Written notification of patent or utility model registration

Ref document number: 7062617

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151