JP6958027B2 - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP6958027B2
JP6958027B2 JP2017130527A JP2017130527A JP6958027B2 JP 6958027 B2 JP6958027 B2 JP 6958027B2 JP 2017130527 A JP2017130527 A JP 2017130527A JP 2017130527 A JP2017130527 A JP 2017130527A JP 6958027 B2 JP6958027 B2 JP 6958027B2
Authority
JP
Japan
Prior art keywords
data
calculation
element data
predetermined
line
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
JP2017130527A
Other languages
English (en)
Other versions
JP2019016011A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017130527A priority Critical patent/JP6958027B2/ja
Priority to US16/015,789 priority patent/US10713042B2/en
Publication of JP2019016011A publication Critical patent/JP2019016011A/ja
Application granted granted Critical
Publication of JP6958027B2 publication Critical patent/JP6958027B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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
    • 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/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
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical 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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

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

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
演算処理装置として用いられるGPU(Graphic Processing Unit)は、元々は画像処理用のプロセッサであるが、後述する浮動小数点用の積和演算器を多数有し、行列計算に最適化されているため、機械学習用の処理を行うプロセッサとしても用いられることが多い。そして、深層学習(ディープラーニング)を行う処理においても、大量の行列計算を行うため、GPUが用いられることが一般的である。
深層学習では、ニューラルネットワークを用いて処理が行われることが多い。例えば、画像認識の深層学習の場合、与えられた画像が何か判断するフォワード処理及び判断するためのニューラルネットワークのパラメータを更新するためのバックワード処理の2つの処理を有する。深層学習を行う演算処理装置は、フォワード処理での計算結果と期待値との差分を用いてバックワード処理を行い、ニューラルネットワークのパラメータを更新する。そして、演算処理装置は、更新したパラメータを用いてフォワード処理の精度を向上させる。
ニューラルネットワークは複数の層で構成され、各層で特徴量の抽出などの演算処理が行われ、且つ、学習が繰り返される。このように、ニューラルネットワークは、それぞれの層で実施される異なる演算処理が行われる多層の構造を有する。このような構造を有することから、層毎のパラメータの更新を行うために、後の層の計算結果と期待値との差分を求め、その差分を1つ前の層に、その層の差分計算の結果をさらに1つ前の層に伝搬しながら学習が行われる。ここでの説明における「1つ前」及び「1つ先」の用語は、フォワード処理が進む方向を基準とする。
さらに、深層学習の中で主に画像認識で用いられる演算処理として、畳み込みニューラルネットワークという処理がある。畳み込みニューラルネットワークでは、畳み込みと呼ばれる演算が多用される。以下では、「畳み込み演算」という。例えば、画像認識を行う場合、入力画像上の領域に予め決められたパラメータを各要素として有する重み枠を元画像に配置する。そして、重み枠が配置された入力画像の各要素と、重み枠の各要素とを乗算したものを合計することで、入力画像における重み枠が配置された領域の特徴量を算出する。この元画像への重み枠の配置を予め決められた重み枠の移動幅を用いて入力画像全体に行い、算出した特徴量をまとめたものが、畳み込み演算の結果として出力される出力画像となる。重み枠は、「フィルタ」と呼ばれる場合がある。
例えば、入力画像として、8×8の要素を有する画像、すなわち8×8ビットのグレースケールの画像を考える。以下では、8×8の入力画像という。また、4×4の要素を有するフィルタを用いる場合で、且つフィルタを入力画像における1列又は1行ずつずらす場合について説明する。以下では、4×4のフィルタという。また、以下では、行が延びる方向を「行方向」といい、列が延びる方向を「列方向」という。この場合、8×8の入力画像の行方向の一方の端に配置された4×4のフィルタを行方向に5(=8−3)回移動させると他方の端に到達する。すなわち、出力画像は行方向に5つの要素を有する。同様に、8×8の入力画像の列方向の一方の端に配置された4×4のフィルタを列方向に8−3回移動させると他方の端に到達する。すなわち、出力画像は列方向にも5つの要素を有する。したがって、出力画像は、5×5の画像となる。そして、出力画像の各要素は、フィルタを入力画像に配置した状態の、フィルタの各要素とその各要素に対応する位置の入力画像の各要素を乗算した合計値となる。
このような乗算した値を合計する演算を行う場合、演算処理装置は、fma(Fused Multiply Add)と呼ばれる命令を用いることが多い。fmaとは、(A×B)+Cの形で表される浮動小数点の積和演算を行う命令である。
さらに、このような畳み込み演算を行う場合に、1つの命令を実行することにより、複数のデータに対する演算処理を同時に行い、同時に複数の演算結果出力を得るSIMD(Single Instruction Multiple Data)という方式が用いられる場合がある。例えば、4個のデータを並列に処理するSIMDを用いた演算の場合で説明する。以下では、n個のデータを並列に処理するSIMDを、nSIMDという。すなわち、この場合の演算処理は、4SIMDの演算処理といえる。また、以下では、SIMDを用いた演算を、SIMD演算という。
上述した8×8の入力画像及び4×4のフィルタを用いた畳み込み演算の場合、演算装置は、フィルタを1列ずつ4回ずらした各配置状態のフィルタの1つの要素と対応する入力画像の要素とを乗算した結果である4つの値を一度で計算できる。すなわち、4SIMDの演算を行う場合、演算処理装置は、4つの異なる配置のフィルタの状態に対応する出力画像の要素を並行して算出することができる。
このようなSIMDを用いた演算処理を行う場合、演算処理装置は、記憶装置としてのメモリに格納された入力画像のデータのうち、演算に用いるデータを、SIMD演算で用いるレジスタに格納してから1回の演算を行う。この処理を繰り返すことで、演算処理装置は、畳み込み演算を行うことができる。例えば、4SIMDの演算処理の場合、1回のSIMD演算に用いられるレジスタは4つである。演算処理装置は、SIMD演算においてレジスタへのデータの格納を行う場合、SIMDのロード命令を用いて1度にSIMDレジスタの全てのレジスタにデータを格納する。
ここで、畳み込み演算では、出力画像の1つの要素を求める場合に、フィルタの各要素とそれに対応する入力画像の各要素とを用いる。さらに、SIMDを用いた畳み込み演算では、フィルタの範囲をずらしながら、繰り返し演算が行われるため、並行する畳み込み演算の中で、同じデータが何度も用いられる。
従来、畳み込み演算では、1つのフィルタの配置状態毎に、各要素の乗算及び乗算結果の合計がまとめて行われる。そのため、SIMDを用いた場合のように複数の演算器で並行して計算を行う場合、処理速度を向上するため、計算順の調整を行い同じデータの使用を回避することや同じデータのコピーを用意して同時に使用することが行われる。
畳込み演算の技術として、隣合う演算回路がアクセス可能なデータ線の範囲を重複させた半導体集積回路の従来技術がある。また、演算を並列処理する技術として、演算素子の中間的な出力を多重化したデータ表現を用いて演算を行う従来技術がある。
特開平7−282237号公報 特開2005−346470号公報
しかしながら、同じデータの読み出しを回避するために計算順の調整を行う場合、使用するデータを決めるために乗算や除算が用いられる。乗算や除算は加算や減算と比較して、演算により多くのサイクル数を消費するため、計算コストが高い。そして、乗算や除算の演算中には、演算器が毎サイクル動作できないおそれがある。このため、計算順の調整を行うことで、演算の処理速度が低下するおそれがある。また、同じデータの読み出しを回避するためにデータのコピーを用意する場合、同時に使用されないようなデータの並び替えが煩雑になる可能性やコピーするデータ数が増えるおそれがある。例えば、フィルタの1度の移動距離が2列2行以上の場合、読み出すデータが各演算器でばらばらになるため、上記の問題が発生する。すなわち、1つのフィルタの配置状態毎にまとめて演算を行う処理方法を用いた場合、処理速度を向上させるには多くの計算コストがかかるおそれがある。
また、異なるデータを使用する場合でも、レジスタにデータを移動する方法によってはレジスタからデータを読み出せない状態になる場合もある。例えば、2つの演算器が同じタイミングで同じレジスタからデータを読み出そうとした場合、データの読み出しが困難となることが考えられる。そのため、演算の処理速度が低下するおそれがある。
特に、フォワード処理における演算では、複数の演算器を用いた場合に、演算器間におけるコンフリクトを回避するために適切なデータ入力を行うことは困難であり、演算処理速度を向上させることは困難である。
また、隣合う演算回路がアクセス可能なデータ線の範囲を重複させた半導体集積回路を用いても、2個以上の演算器間ではコンフリクトの発生を抑えることは困難である。さらに、中間的な出力を多重化したデータ表現を用いる従来技術を用いても、データの入力自伝でのコンフリクトは発生する可能性は高く、演算処理速度を向上させることは困難である。
開示の技術は、上記に鑑みてなされたものであって、コストの増加を抑えつつ演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、演算処理装置は、行列に含まれる第1要素データを有する第1データ上に行列に含まれる第2要素データを有する第2データを、前記第1要素データ及び前記第2要素データ同士が対応するように重ね、前記第1要素データの所定数ずつ行方向に前記第2データを移動させて所定演算を行う。そして、演算処理装置は、各重畳状態で前記所定演算により算出される各第3要素データを含む行列を有する第3データを算出する。格納部は、前記第1データ及び前記第2データを格納する。演算部は、複数存在する。第1格納部は、前記演算部毎に配置され、前記データ格納部に格納された前記第1データの前記所定数の行分の第1所定行を格納する。第2格納部は、前記演算部毎に配置され、前記データ格納部に格納された前記第2データの前記所定数の行分の第2所定行を格納する。積和演算部は、前記演算部毎に前記所定数に応じた個数が含まれ、各々が前記第1所定行に含まれるそれぞれ異なる第1要素データを前記第1格納部から取得し、且つ、前記第2所定行に含まれる同じ第2要素データを前記第2格納部から取得する。そして、積和演算部は、取得した前記第1要素データ及び前記第2要素データをかけ合わせる処理を、前記第3データの列数の回数行う第1演算を行い、前記第1所定行における前記第1要素データの取得位置及び前記第2所定行における前記第2要素データの取得位置を行方向に前記所定数分進ませて前記第1演算を前記第3データの列数の回数繰り返して行分演算を行う処理を、前記第1所定行及び前記第2所定行を1行ずつ進ませて前記第2データの行数分行う第2演算を行い、且つ、前記第2演算を前記第1所定行及び前記第2所定行を前記所定数ずつ列方向に進ませて繰り返す第3演算を行い、前記第3演算の演算結果を基に前記第3データを求める。
1つの側面では、本発明は、コストの増加を抑えつつ演算処理速度を向上させることができる。
図1は、深層学習の全体的な流れを説明するための図である。 図2は、畳み込みフォワード演算及びバックワード演算を説明するための図である。 図3は、演算処理装置のブロック図である。 図4は、演算部の詳細を表すブロック図である。 図5は、畳み込みフォワード演算時におけるデータの取り扱いの全体的な流れを示す図である。 図6は、畳み込みフォワード演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。 図7は、畳み込みフォワード演算におけるストライド数が1の場合の要素データの格納状態の一例を表す図である。 図8は、レジスタファイルにおけるデータの再利用と補充の方法を説明するための図である。 図9は、演算部によるボトムデータの行毎の読み込みを示す図である。 図10は、積和演算器による要素データの取得を示す図である。 図11は、積和演算器によるデータの読み出し及び格納の詳細ついて説明するための図である。 図12は、実施例1に係るストライド数が2の場合の畳み込みフォワード演算の詳細を説明するための図である。 図13は、ストライド数が1の場合の畳み込みフォワード演算の全体を表した図である。 図14は、ストライド数が2の場合の畳み込みフォワード演算の全体を表した図である。 図15は、畳み込みフォワード演算のフローチャートである。 図16は、実施例1に係るフォワード積和演算のフローチャートである。 図17は、実施例2に係るストライド数が2の場合の畳み込みフォワード演算の詳細を説明するための図である。 図18は、実施例2に係るフォワード積和演算のフローチャートである。 図19は、実施例3に係るフォワード積和演算のフローチャートである。 図20は、複数の演算部を用いた畳み込みフォワード演算のプログラムの記述例を説明するための図である。 図21は、演算処理装置のハードウェア構成図である。 図22は、I/Oデバイスにより畳み込みフォワード演算を行う場合を説明するための図である。
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図1は、深層学習の全体的な流れを説明するための図である。ここで、本実施例では、画像認識のための深層学習について説明する。以下では、畳み込み演算を例に説明するが、ニューラルネットワークの各層で行われる演算は畳み込み演算以外の演算もある。
図1に示すように、演算処理装置1は、入力データ10の入力を受ける。そして、演算処理装置1は、複数の演算処理層を有する。各演算処理層では、それぞれ異なる特徴点の抽出などの演算処理を行う。演算処理装置1は、取得した入力データ10に対して第1層である演算処理層101で重みデータを用いて畳み込み演算を実行する。ここで、重みデータは、フィルタにあたる。次に、演算処理装置1は、演算処理層101からの特徴量でもある出力データ20に対して第2層である演算処理層102で重みデータを用いて畳み込み演算を行う。演算処理装置1は、このように各層での演算処理を順次行っていき、第n層である演算処理層103での重みデータを用いた畳み込み演算の演算結果を特徴量でもある出力データ20として出力する。このようにして、例えば、入力データ10を入力画像とすれば、各層での出力データ20は、画像認識のための特徴量として取得できる。そして、演算処理装置1は、各層で取得した特徴量を用いて繰り返しパラメータ更新する深層学習を行うことで、画像認識の精度が向上し、画像認識を行うことができる。また、例えば、音声認識の場合には、入力データ10は、音声データ、テキストマイニングの場合には入力データ10は単語となる。ここで説明した、演算処理装置1による矢印P1へ向かう方向の畳み込み演算による演算処理は、「畳み込みフォワード演算」と呼ばれる場合がある。
さらに、演算処理装置1は、各層における特徴点の抽出の精度を上げるために、期待値の差分を用いて重みデータの変更を行う。例えば、演算処理装置1は、予め決められた期待値を有し、第n層である演算処理層103からの出力データ20と期待値とを比較する。そして、演算処理装置1は、出力データ20と期待値との差分を求め、その求めた差分及びn−1層からの入力データを用いて重みデータの期待値との差分を求める。さらに、演算処理装置1は、求めた重みデータの期待値との差分を用いて重みデータを修正する。そして、演算処理装置1は、修正した重みデータ及び出力データ20と期待値との差分を用いて第n−1層における重みデータを修正するためのデータであるトップ差分データを求める。次に、演算処理装置1は、n−2層からの入力データに対して、求めた第n−1層の出力データ20と第n−1層における出力の期待値との差分を用いて第n−1層の重みデータを修正する。
ここで、矢印P1方向を各層の並び方向とすると、演算処理装置1は、特定の演算処理層の1つ前の演算処理層において特定の演算処理層におけるトップ差分データを算出する。そして、演算処理装置1は、算出した特定の演算処理層におけるトップ差分データと1つ前の演算処理装置1からの出力データ20とを用いて、特定の演算処理層における重みデータの期待値との差分を求める。さらに、演算処理装置1は、求めた特定の演算処理層における重みデータの期待値との差分を用いて重みデータを修正する。その後、演算処理装置1は、修正した特定の演算処理層における重みデータと特定の演算処理層における出力データ20と期待値との差分とを用いて、特定の演算処理層の1つ前の演算処理層におけるトップ差分データを算出する。
演算処理装置1は、各演算処理層における重みデータの修正及び1つ前の演算処理層におけるトップ差分データの算出を順次繰り返す。これにより、演算処理装置1は、演算処理層101〜103の全ての層の重みデータを演算処理層103の出力データ20の期待値に合わせて修正することができる。ここで説明した、演算処理装置1による矢印P2へ向かう方向の各演算処理層における重みデータを修正するための演算処理は、「畳み込みバックワード演算」と呼ばれる場合がある。
以下では、特定の演算処理層における入力データを、「ボトムデータ」という。ボトムデータは、特定の演算処理層の1つ前の演算処理層からの出力データ20にあたる。また、特定の演算処理層における重みデータの期待値との差分のデータを、「重み差分データ」という。また、特定の演算処理装置における畳み込みバックワード演算の演算結果のデータを「ボトム差分データ」という。さらに、特定の演算処理層において畳み込みバックワード演算において重みデータの修正に用いられる元データを、「トップ差分データ」という。ここで、特定の演算処理層における畳み込みバックワード演算の算出結果は、特定の演算処理層の1つ前の演算処理層の畳み込みバックワード演算の元データとして用いられる。すなわち、特定の演算処理層において算出されたボトム差分データは、特定の演算処理層の1つ前の演算処理層のトップ差分データにあたる。
また、畳み込みバックワード演算において、トップ差分データとボトムデータとを用いて重み差分データを求める演算を、「畳み込みバックワードの重み差分演算」という。さらに、修正された重みデータとトップ差分データとを用いてボトム差分データを算出する演算を、「畳み込みバックワードのボトム差分演算」という。
さらに、本実施例では、ボトムデータ及び重みデータを方形に行列として並んだ要素データを有する場合で説明する。そこで、以下では、重みデータの行数及び列数を「カーネル数」あるいはカーネル数に応じた単位として「カーネルサイズ」という。このカーネル数が、「所定数」の一例にあたる。ただし、ボトムデータ及び重みデータは、それぞれ長方形でもよい。また、畳み込みフォワード演算における重みデータの1回の移動量を「ストライド数」という場合がある。
図2は、畳み込みフォワード演算及びバックワード演算を説明するための図である。図2は、入力データ10を用いて演算処理を始める第1層から出力データ206と期待値207からトップ差分データ203を生成する。ここでは、演算処理層101を第1層とし、演算処理層104を第n−1層とし、演算処理層103を第n層とする。第n層まで各演算処理層101〜104における演算を例に記載した。また、図2中の円で記載した処理は演算処理を表す。演算処理F1は、畳み込みフォワード演算を表す。演算処理F2は、畳み込みバックワードの重み差分演算を表す。また、演算処理F3は、畳み込みバックワードのボトム差分演算を表す。
演算処理装置1は、最初の第1層において入力データ10及び第1層での重みデータ202に対して演算処理F1で表される畳み込みフォワード演算を行い、演算結果としてトップデータ209を算出する。入力データ10とボトムデータ201とは、畳み込みフォワード演算においては同じように取り扱われる、以下では、まとめてボトムデータ201という。その後は、図示しないが、同様に次の第2層において、前の層のトップデータ209及び第2層での重みデータ202に対して同様に演算処理F1で表される畳み込みフォワード演算を行う。演算処理装置1は、これらを繰り返して最後の第n層においては、同様に前の層のトップデータ209及び第n層での重みデータ202に対して演算処理F1で表される畳み込みフォワード演算を行う。ただし、演算処理装置1は、最後の第n層においては、さらに出力データ206と期待値207とを比較して、トップ差分データ203を算出する。ここで、第1層の入力データ10は、第2層〜第n層におけるボトムデータ201にあたる。また、第n層の出力データ20は、第1層〜第n−1層における演算結果であるトップデータ209にあたる。
さらに続けて、バックワード演算を説明すると、演算処理装置1は、トップ差分データ203及びボトムデータ201に対して演算処理F2で表される畳み込みバックワードの重み差分演算を行い、重み差分データ204を算出する。さらに、演算処理装置1は、重み差分データ204を用いて重みデータ202を更新する。ここで、図2における一点鎖線の矢印が重みデータ202の更新の処理を表す。具体的には、演算処理装置1は、重み差分データ204に学習率を乗算して、新たな重みデータ202を算出する。
また、演算処理装置1は、フォワード演算で使用した重みデータ202及びトップ差分データ203に対して演算処理F3で表される畳み込みバックワードのボトム差分演算を行い、ボトム差分データ205を算出する。
ここで、図2では、最後の層である演算処理層103を例に図示したが、他の層においても同様の演算が行われる。ただし、他の層では、演算処理装置1は、トップ差分データ203として1つ後の層で算出されたボトム差分データ205を用いる。
次に、図3を参照して、演算処理装置1の詳細について説明する。図3は、演算処理装置のブロック図である。図3に示すように、演算処理装置1は、メモリ11、第1データ制御部12、第2データ制御部13、レジスタファイル(RF:Register File)411〜413,421〜423及び431〜433を有する。また、演算処理装置1は、演算部51〜53及びポインタ制御部16を有する。
ここで、レジスタファイル411〜413は、いずれも同じ機能を有する。そこで、以下では、レジスタファイル411〜413を区別しない場合、「レジスタファイル410」という。また、レジスタファイル421〜423は、いずれも同じ機能を有する。そこで、以下では、レジスタファイル421〜423を区別しない場合、「レジスタファイル420」という。また、レジスタファイル431〜433は、いずれも同じ機能を有する。そこで、以下では、レジスタファイル431〜433を区別しない場合、「レジスタファイル430」という。また。演算部51〜53は、いずれも同じ機能を有する。そこで、以下では、演算部51〜53を区別しない場合、「演算部50」という。
メモリ11は、計算に用いる各種データを格納する記憶部である。例えば、メモリ11は、ボトムデータ201及び重みデータ202を格納する。このメモリ11が、「データ格納部」の一例にあたる。
ここで、演算処理の出力値であるトップデータについて説明する。ボトムデータ201の列数から重みデータ202を減算した値をストライド数で除算した値が演算結果の出力値であるトップデータ209の列数となる。以下では、トップデータの列数を「トップサイズ」という。さらに、ボトムデータ201と重みデータ202が、正方行列の場合、トップデータも正方行列となり、その場合、トップデータの行数もトップサイズと一致する。例えば、ボトムデータ201が5×5行列で重みデータ202が3×3の行列の場合、ストライド数が1であれば、トップサイズは3である。また、同じ場合で、ストライド数が2である場合、トップサイズは2である。
レジスタファイル410,420及び430は、演算時に演算に用いるデータが一時的に格納される記憶部である。レジスタファイル410,420及び430は、本実施例では、各演算部50にそれぞれ1つずつの3つが割り当てられる。
レジスタファイル410は、畳み込みフォワード演算で用いられるボトムデータ201の要素データを格納する。また、レジスタファイル420は、畳み込みフォワード演算で用いられる重みデータ202を格納する。さらに、レジスタファイル430は、畳み込みフォワード演算における演算結果であるトップデータ209又は演算の中間値が格納される。このレジスタファイル410が、「第1演算用記憶部」の一例にあたる。また、レジスタファイル420が、「第2演算用記憶部」の一例にあたる。
第1データ制御部12は、畳み込みフォワード演算を実行する際に、ボトムデータ201の要素データを所定行ずつメモリ11から読み出し、各演算部50に対応するレジスタファイル410に格納する。具体的には、第1データ制御部12は、以下に示す手順でボトムデータ201の要素データの読み出しを行う。
第1データ制御部12は、ボトムデータ201の読み込みを行う行における読み込みを開始する先頭位置からボトムデータ201の要素データをストライド数分の行ずつ、配置されたレジスタファイル410の数分までメモリ11から読み込む。すなわち、第1データ制御部12は、演算部50の数分をストライド数分の行ずつ要素データをメモリ11から読み込む。そして、第1データ制御部12は、読み込んだストライド数分ずつのデータそれぞれを各演算部50に対応するレジスタファイル410それぞれに格納する。ここで、レジスタファイル410は、ボトムデータ201の1行の数分の配列を有しており、配列ごとに1つずつの要素データが読み出される。そこで、第1データ制御部12は、1行分のデータがそれぞれ異なる配列に格納されるようにレジスタファイル410に要素データを格納する。また、第1データ制御部12は、ボトムデータ201の同じ列の要素データが同じ配列に格納されるように要素データを格納する。
ここで、畳み込みフォワード演算を行う場合、重みデータ202は、その1行1列の位置をボトムデータ201の1行1列の位置に合わせた位置から行方向にストライド数ずつ移動される。以下では、2つの行を用いた演算を行う場合に、その行同士の1行1列を一致させた位置を初期位置という。そして、重みデータ202は、カーネル数にストライド数の整数倍を足した数でボトムデータ201の行数より大きく且つ最小の数となる場合の整数倍に用いた数まで、ボトムデータ201の初期位置から行方向にストライド数ずつ移動される。以下では、カーネル数にストライド数の整数倍を足した数でボトムデータ201の行数より大きく且つ最小の数となる場合の整数倍に用いた数を、「最大移動数」という。
第1データ制御部12は、ボトムデータ201の要素データのストライド数の行分ずつの読み込み及びレジスタファイル410への格納を、レジスタファイル410の個数回繰り返す。ただし、レジスタファイル410の個数が最大移動数分以上ある場合、第1データ制御部12は、最大移動数回処理を行うと、要素データの読み込み及びレジスタファイル410への格納を停止する。
次に、レジスタファイル410に格納した要素データを用いた演算が終了した後、第1データ制御部12は、前回の読み込みの先頭位置からストライド数分列方向に移動された先頭位置を特定する。そして、第1データ制御部12は、特定した先頭位置からボトムデータ201の要素データをストライド数の行分ずつのメモリ11からの読み込み及びレジスタファイル410への格納を行う。第1データ制御部12は、最大移動数の回数、ボトムデータ201の要素データのストライド数分の行ずつの読み込み及びレジスタファイル410への格納を繰り返す。
第1データ制御部12は、ボトムデータ201の要素データのストライド数分の行ずつの読み込み及びレジスタファイル410への格納が、最大移動数回終了していない場合、同様の処理を最大移動回数に達するまで繰り返す。すなわち、先頭位置が列方向に最大移動回数移動された場合の演算終了後に、第1データ制御部12は、要素データの読み込み及び格納を終了する。
第2データ制御部13は、畳み込みフォワード演算を実行する際に、重みデータ202の要素データを所定行ずつメモリ11から読み出し、各演算部50に対応するレジスタファイル420に格納する。具体的には、第2データ制御部13は、以下に示す手順で重みデータ202の要素データの読み出しを行う。
第2データ制御部13は、重みデータ202の読み込みを行う行における読み込みを開始する先頭位置からストライド数の行分の重みデータ202の要素データをメモリ11から読み込む。そして、第2データ制御部13は、読み込んだ要素データを各演算部50に対応するレジスタファイル420に格納する。すなわち、第2データ制御部13は、各演算部50に対応するレジスタファイル420の全てに同じ要素データを格納する。
レジスタファイル420に格納した要素データを用いた演算が終了した後、第2データ制御部13は、前回の先頭位置からストライド数分列方向に移動された先頭位置を特定する。そして、第2データ制御部13は、特定した先頭位置からストライド数の行分の重みデータ202の要素データをメモリ11から読み込み、レジスタファイル420に格納する。第2データ制御部13は、先頭位置を移動させながらストライド数の行分の要素データの読み込み及びレジスタファイル420への格納を繰り返す。
第2データ制御部13は、最大移動数の回数、要素データの読み込み及びレジスタファイル420への格納を行った時点で、演算処理が終了していない場合、重みデータ202の先頭に移動された読み込みの先頭位置を特定する。そして、第2データ制御部13は、演算処理が終了するまで、同様の処理を繰り返す。
演算部50は、レジスタファイル410及び420に格納された要素データを用いて、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードのボトム差分演算を実行し、演算結果をレジスタファイル430に格納する。図4は、演算部の詳細を表すブロック図である。
図4に示すように、演算部50は、並列に配置されたFMAの演算を行う積和演算器501〜503を有する。各積和演算器501〜503は、異なる計算経路を形成する。演算部50は、行う演算に合わせて使用する積和演算器501〜503の数を変更することができる。また、レジスタファイル430は、積和演算器501〜503に対応するレジスタファイル301〜303を有する。以下に、演算部50による畳み込みフォワード演算の詳細を説明する。
演算部50は、トップサイズの数が用意される。また、各演算部50は、トップサイズにストライド数を乗算した数の積和演算器501〜503を使用して以下の演算を行う。積和演算器503は、トップサイズにストライド数を乗算した数の個数番目の積和演算器である。
演算部50は、レジスタファイル410に格納されたボトムデータ201のストライド数分の行に含まれる要素データに配置された先頭ポインタの位置の指定をポインタ制御部16から受ける。より詳しくは、演算部50は、最初にレジスタファイル410に格納されたボトムデータ201の行の先頭の要素データを指定する先頭ポインタの位置の入力をポインタ制御部16から受ける。その後、演算部50は、1回の積和演算を計算する毎に、レジスタファイル410に格納されたボトムデータ201の行のストライド数進んだ要素データを指定する先頭ポインタの位置の入力をポインタ制御部16から順次受ける。演算部50は、行の最後の要素データからカーネル数前の要素データを超えない最も後ろの位置に先頭ポインタが達するまで、更新された先頭ポインタの位置の入力をポインタ制御部16から受ける。
演算部50の積和演算器501〜503は、ボトムデータ201における指定された先頭ポインタの位置からトップサイズにストライド数を乗算した数の要素データをそれぞれが先頭から1つずつ読み込む。
さらに、演算部50の積和演算器501〜503は、レジスタファイル420に格納された重みデータ202の1列の先頭からストライド数分の要素データを読み込む。そして、積和演算器501は、読み込んだボトムデータ201の要素データと重みデータ202の要素データとを先頭から順に対応させて、対応する要素データを乗算する。さらに、演算部50は、乗算結果を合計する。以下では、畳み込みフォワード演算における、対応する要素データを乗算しその乗算結果を合計する演算を、「フォワード積和演算」という。そして、演算部50は、レジスタファイル430におけるポインタ制御部16により指定された先頭ポインタの位置に合計した演算結果を格納する。そして、演算部50は、1回のフォワード積和演算の完了をポインタ制御部16に通知する。
次に、積和演算器501〜503は、レジスタファイル410に格納されたボトムデータ201の要素データの前回の位置からストライド数分進めた配置された先頭ポインタの位置の指定を受ける。そして、演算部50の積和演算器501〜503は、ボトムデータ201における指定された先頭ポインタの位置からトップサイズにストライド数を乗算した数の要素データをそれぞれが先頭から1つずつ読み込む。ここで、積和演算器501〜503のうち読み込むデータが無い場合、0を読み込む。
さらに、積和演算器501〜503は、レジスタファイル420に格納された重みデータ202の1列の先頭から列方向にストライド数ずつ進んだ位置からストライド数分の要素データを読み込む。そして、積和演算器501〜503は、読み込んだボトムデータ201の要素データと重みデータ202の要素データとを先頭から順に対応させて、対応する要素データを乗算する。さらに、積和演算器501〜503は、乗算結果を合計する。そして、演算部50は、レジスタファイル430におけるポインタ制御部16により指定された先頭ポインタの位置に合計した演算結果を格納する。そして、演算部50は、1回のフォワード積和演算の完了をポインタ制御部16に通知する。
積和演算器501〜503は、ボトムデータ201の1行分の演算が終了するまで、ボトムデータ201及び重みデータ202の要素データの読み込み及びフォワード積和演算を繰り返す。ボトムデータ201の1行分の演算が終了後、積和演算器501〜503は、カーネルサイズ分の行の計算が終了していなければ、次の行の先頭を示すポインタの位置の指定をポインタ制御部16から受ける。そして、積和演算器501〜503は、次の行に対してボトムデータ201及び重みデータ202の要素データの読み込み及びフォワード積和演算を行う。
カーネルサイズ分の計算が終了した場合、積和演算器501〜503は、先頭からストライド数ずつの積和演算器同士の計算結果であるストライド数分の計算結果を加算する。これにより、積和演算器501〜503は、重みデータ202をボトムデータ201の左端から列方向にスドライド数ずつ進ませて右端まで移動することで算出できるトップデータ209の1行分の要素データを算出する。演算部50は、算出結果をメモリ11に格納する。
さらに、図1の最終層の第n層である演算処理層103の場合、演算部50は、トップデータ209をモニタなどの出力装置(不図示)へ出力しユーザに演算結果を提供する。例えば、画像認識の場合、演算部50は、認識結果を出力装置へ出力する。
ポインタ制御部16は、畳み込みフォワード演算を実行する際に、レジスタファイル410における先頭ポインタの指定を行う。例えば、ポインタ制御部16は、最初にレジスタファイル410における先頭ポインタを、レジスタファイル410の先頭に設定する。
ポインタ制御部16は、1回分の演算完了の通知を受ける毎に、レジスタファイル410における先頭ポインタをストライド数分移動した位置に設定する。そして、レジスタファイル410における先頭ポインタの移動を最大移動数分行った場合、ポインタ制御部16は、先頭ポインタをレジスタファイル410の先頭に設定する。すなわち、レジスタファイル410における先頭ポインタは、ボトムデータ201における次のストライド数分の行の先頭に設定される。ポインタ制御部16は、演算部50による畳み込みフォワード演算が終了するまで、同様の処理を繰り返す。
さらに、本実施例に係る演算処理装置1による畳み込みフォワード演算について詳細に説明する。
まず、図5を参照して、データの格納から演算までのデータの取り扱いについて説明する。図5は、畳み込みフォワード演算時におけるデータの取り扱いの全体的な流れを示す図である。図5では、演算処理装置1は、5行5列に要素データb00〜b24が並んだボトムデータ201及び3行3列に要素データw00〜w08が並んだ重みデータ202を用いる。さらに、ここでは、ストライド数が2の場合について説明する。
図5は、畳み込みフォワード演算開始後最初の要素データ格納状態を表す。この場合、トップサイズは2であるので、演算部51及び52の2つが用意される。また、トップサイズとストライド数との乗算結果は4であるので、演算部51及び52は、それぞれ積和演算器510〜513の4つを使用して演算を行う。ここで、積和演算器510〜513は、図4の積和演算器501〜503にあたる。さらに、レジスタファイル431は、それぞれの積和演算器510〜513に対応する4つのレジスタファイル310〜314を有する。このレジスタファイル310〜314は、図4のレジスタファイル301〜303にあたる。
第1データ制御部12は、ボトムデータ201における畳み込みフォワード演算の開始行からストライド数分の行の要素データを読み出し、レジスタファイル411に格納する。すなわち、第1データ制御部12は、要素データb00〜b09をレジスタファイル411に格納する。また、第1データ制御部12は、ボトムデータ201における畳み込みフォワード演算の開始行からストライド数進めた行からストライド数分の行の要素データを読み出し、レジスタファイル412に格納する。すなわち、第1データ制御部12は、要素データb10〜b19をレジスタファイル412に格納する。
第2データ制御部13は、重みデータ202における畳み込みフォワード演算開始行からストライド数分の行の要素データを読み出し、レジスタファイル421及び422に格納する。すなわち、第2データ制御部13は、要素データw00〜w05をレジスタファイル421及び422に格納する。
演算部51は、レジスタファイル411に格納された行の先頭からトップサイズとストライド数を乗算した値である4個のデータを順に積和演算器510〜513のそれぞれに読み込む。すなわち、積和演算器510は、要素データb00を読み込む。また、積和演算器511は、要素データb01を読み込む。また、積和演算器512は、要素データb02を読み込む。また、積和演算器512は、要素データb03を読み込む。
また、演算部51は、レジスタファイル421に格納された行の先頭からストライド数分の重みデータを順に繰り返して積和演算器510〜513のそれぞれに読み込む。
具体的には、演算部51は、ストライド数である2個分の要素データw00及びw01を積和演算器510〜513のそれぞれに順に読み込ますことを繰り返す。すなわち、積和演算器510は、要素データw00を読み込む。積和演算器511は、要素データw01を読み込む。積和演算器512は、要素データw00を読み込む。積和演算器513は、要素データw01を読み込む。
そして、積和演算器510〜513は、それぞれ読み込んだ要素データを乗算する。その後、積和演算器510〜513は、対応するレジスタファイル310〜314に格納された値に乗算結果を加算し、レジスタファイル310〜314に格納する。ここで、レジスタファイル310〜314は、初期値として0が格納される。
次に、積和演算器510〜513は、ボトムデータ201における次の先頭ポインタの位置からトップサイズにストライド数を乗算した値の個数分の要素データを読み出す。また、積和演算器501〜513は、重みデータ202における先頭からストライド数分進んだ位置からストライド数分の要素データを取得する。ここで、積和演算器501〜513は、該当する要素データが存在しない場合には0を読み込む。そして、積和演算器501〜513は、ボトムデータ201及び重みデータ202の要素データの読み込み及びフォワード積和演算を繰り返す。同様に、演算部52も、ボトムデータ201及び重みデータ202の要素データの読み込み及びフォワード積和演算を繰り返す。以下では、さらに詳しく要素データの取り扱いについて説明する。
まず、図6を参照して、レジスタファイル410及び420に格納される要素データの遷移について説明する。図6は、畳み込みフォワード演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。
最初に図6の矢印の左側に示すように、レジスタファイル411には、要素データb00〜b09が格納される。また、レジスタファイル412には、要素データb10〜b19が格納される。また、レジスタファイル421及び422には、いずれも要素データw00〜w05が格納される。この状態は、図5の状態と同じである。
各行の計算が完了すると、図6の矢印の右側に示すように、レジスタファイル411には、要素データb10〜b19が格納される。また、レジスタファイル412には、要素データb20からストライド数の行数分のデータが格納される。ただし、ボトムデータ201は、5行5列なので、要素データb24以降のデータは存在しない。そこで、レジスタファイル412には、要素データb20〜b24までが格納される。この場合、要素データb25〜b29は存在しないので、それらを表す値として0が格納される。また、レジスタファイル421及び422には、要素データw06からストライド数の行数分のデータが格納される。ただし、重みデータ202は、3行3列なので、要素データw08以降は存在しない。そこで、レジスタファイル421及び422には、要素データw06〜w08までが格納される。この場合、要素データw09〜w11は存在しないので、それらを表す値として0が格納される。ここで、カーネルサイズの行数分の演算完了時に計算を終了する場合、要素データb25〜b29及びw09〜w11を表す値として0を格納しなくてもよい。
また、同様に5行5列の要素データb00〜b24を有するボトムデータ201及び3行3列の要素データw00〜w08を有する重みデータ202を用いたストライド数が1の場合であれば、各要素データは図7のように格納される。図7は、畳み込みフォワード演算におけるストライド数が1の場合の要素データの格納態の一例を表す図である。ここでは、レジスタファイル411〜413は3個のレジスタファイルであり、演算部51〜53は3つの演算部である。
この場合、レジスタファイル411には、ボトムデータ201の先頭行に含まれる要素データb00〜b04が格納される。また、レジスタファイル412には、レジスタファイル411に格納された行の次の行に含まれる要素データb05〜b09が格納される。また、レジスタファイル413には、レジスタファイル412に格納された行の次の行の要素データb10〜b14が格納される。
また、レジスタファイル421〜423には、それぞれ重みデータ202の先頭行の要素データw00〜w02が格納される。この後、1行分の演算が完了する毎に、レジスタファイル411〜413には、ボトムデータ201における1行ずつ列方向にずらされた行の要素データが格納されることが繰り返される。また、レジスタファイル421〜423は、重みデータ202における1行ずつ列方向にずらされた行の要素データが格納されることが繰り返される。
ここで、ここまでの説明では、一行毎に第1データ制御部12がメモリ11からボトムデータ201の1行分の要素データを読み出し、レジスタファイル410に格納するように説明したが、他のレジスタに格納された要素データを流用することもできる。そこで、図8を参照して、データの再利用と補充方法について説明する。
例えば、図8に示すように、レジスタファイル411〜413を1つのレジスタファイル400の中に配置することができる。図8は、レジスタファイルにおけるデータの再利用と補充の方法を説明するための図である。
この場合、例えば、レジスタファイル411は、レジスタファイル412が保持するデータを再利用することができる。図8の状態471は、1回目の各行の読み込み込んだ状態を表す。状態471で各レジスタファイル411〜413に格納されたデータを用いた1行分のフォワード積和演算が終了すると、レジスタファイル411〜413には、状態472に示すように次の行が格納される。
ここで、レジスタファイル411に格納される次の行は、状態471においてレジスタファイル412が保持していた要素データで有る。そこで、状態472に示すように、レジスタファイル411は、レジスタファイル412が保持する情報を再利用する。同様に、レジスタファイル412は、レジスタファイル413が保持する情報を再利用する。そして、レジスタファイル413は、第1データ制御部12により新たな行の要素データが補充される。
同様に、3回目の行の読み込みの場合、状態473で示されるように、2回目の行の読み込みでレジスタファイル412及び413に格納された要素データの再利用が行われる。このように、レジスタファイル411〜413が保持する要素データを次の演算時に再利用することで、メモリ11からの要素データの読み込みが減り、処理を早くすることができる。
また、ここでは、1つのレジスタファイル400の中に複数のレジスタファイル411〜413を配置した場合の再利用を説明したが、これに限らない。例えば、レジスタファイル411〜413と演算部51〜53との経路にクロスバスイッチを配置し、第1データ制御部12がクロスバスイッチを切り替えることで、各レジスタファイル411〜413の間で要素データの再利用を行ってもよい。
次に、演算部51〜53におけるデータの取り扱いについて説明する。図9は、演算部によるボトムデータの行毎の読み込みを示す図である。以下では、各行毎のフォワード積和演算を行分演算という。
図9の状態551は、1回目の行分演算を行う場合の演算部51〜53の要素データの使用状態を表す。状態552は、2回目の行分演算を行う場合の演算部51〜53の要素データの使用状態を表す。状態553は、3回目の行分演算を行う場合の演算部51〜53の要素データの使用状態を表す。ここでは、ストライド数が1の場合で説明する。
演算部51〜53は、各行分演算において、レジスタファイル411〜413が有するボトムデータ201の1行分の要素データを読み込む。また、演算部51は、レジスタファイル421〜423が有する重みデータ202の1行分の要素データを読み込む。
具体的には、状態551に示すように、1回目の行分演算において、演算部51は、要素データb00〜b04を読み込む。また、演算部52は、演算部51が読み込んだ行からストライド数進んだ行の要素データb05〜b09を読み込む。また、演算部53は、演算部52が読み込んだ行からストライド数進んだ行の要素データb10〜b14を読み込む。そして、行分演算の開始時には、先頭ポインタ161は、読み込んだ行の先頭に配置される。さらに、演算部51〜53は、要素データw00〜w02を読み込む。
その後、1回目の行分演算が終了すると、状態552に示すように、演算部51は、1回目に読み込んだ行の次の行の要素データb05〜b09を読み込む。また、演算部52は、演算部51が読み込んだ行からストライド数進んだ行の要素データb10〜b14を読み込む。また、演算部53は、演算部52が読み込んだ行からストライド数進んだ行の要素データb15〜b19を読み込む。そして、行分演算の開始時には、先頭ポインタ161は、読み込んだ行の先頭に配置される。さらに、演算部51〜53は、要素データw03〜w05を読み込む。
その後、2回目の行分演算が終了すると、状態553に示すように、演算部51は、2回目に読み込んだ行の次の行の要素データb10〜b14を読み込む。また、演算部52は、演算部51が読み込んだ行からストライド数進んだ行の要素データb15〜b19を読み込む。また、演算部53は、演算部52が読み込んだ行からストライド数進んだ行の要素データb20〜b24を読み込む。そして、行分演算の開始時には、先頭ポインタ161は、読み込んだ行の先頭に配置される。さらに、演算部51〜53は、要素データw06〜w08を読み込む。
次に、各演算部51〜53における積和演算器501〜503毎のデータの取得について説明する。図10は、積和演算器による要素データの取得を示す図である。ここでは、演算部51を例に説明する。この場合、演算部51〜53は、ボトムデータ201と重みデータ202を用いて、トップデータ209を算出する畳み込みフォワード演算を行う。そして、トップデータ209の要素データt00は、データ210で示される要素データt000〜t008を合計したものである。
ここでは、演算部51〜53が、1回目の行分演算を行う場合で説明する。状態561は、1回目の行分演算における1回目のフォワード積和演算が行われる状態を表す。状態562は、1回目の行分演算における2回目のフォワード積和演算が行われる状態を表す。状態563は、1回目の行分演算における3回目のフォワード積和演算が行われる状態を表す。
1回目のフォワード積和演算の場合、状態561のように先頭ポインタ161は、読み込まれたボトムデータ201の行の先頭に配置される。そして、積和演算器501は、先頭ポインタ161が示す要素データを取得する。また、積和演算器502は、先頭ポインタ161が示す位置の1つ隣の要素データを取得する。さらに、積和演算器503は、先頭ポインタ161が示す位置の2つ隣の要素データを取得する。さらに、積和演算器501〜503は、読み込まれた重みデータ202の行の先頭の要素データw00を取得する。
そして、積和演算器501〜503は、取得したボトムデータ201の要素データと重みデータ202の要素データとを乗算し、それまでの算出結果に加算する。例えば、演算経路571は、演算部51の積和演算器501による演算の流れを表す。また、演算経路572は、演算部51の積和演算器502による演算の流れを表す。演算経路573は、演算部51の積和演算器503による演算の流れを表す。
実際には、状態561〜563における演算結果は、トップデータ209の各要素データt00〜t08を算出する演算の中間値であるが、図10では、分かり易いように要素データt00〜t08として表した。例えば、演算部51の積和演算器501は、状態561において、要素データb00と要素データw00を乗算することで、データ210における要素データt000を算出する。他の積和演算器501〜502もそれぞれトップデータ209の要素データt00〜t08における同じ位置の要素データを算出する。
次に、先頭ポインタ161は、先頭からストライド数進まされることで、状態562で示す位置に移動させられる。そして、積和演算器501は、先頭ポインタ161が示す要素データを取得する。また、積和演算器502は、先頭ポインタ161が示す位置の1つ隣の要素データを取得する。さらに、積和演算器503は、先頭ポインタ161が示す位置の2つ隣の要素データを取得する。さらに、積和演算器501〜503は、読み込まれた重みデータ202の行の先頭の1つ隣の要素データw01を取得する。
そして、積和演算器501〜503は、取得したボトムデータ201の要素データと重みデータ202の要素データとを乗算する。例えば、演算部51の積和演算器501は、状態562において、データ210における要素データt001を算出する。そして、積和演算器501〜503は、乗算結果をそれまでの算出結果に加算する。
次に、先頭ポインタ161は、状態562の位置からストライド数進まされることで、状態563で示す位置に移動させられる。そして、積和演算器501は、先頭ポインタ161が示す要素データを取得する。また、積和演算器502は、先頭ポインタ161が示す位置の1つ隣の要素データを取得する。さらに、積和演算器503は、先頭ポインタ161が示す位置の2つ隣の要素データを取得する。さらに、積和演算器501〜503は、読み込まれた重みデータ202の行の先頭の2つ隣の要素データw02を取得する。
そして、積和演算器501〜503は、取得したボトムデータ201の要素データと重みデータ202の要素データとを乗算する。例えば、演算部51の積和演算器501は、状態562において、データ210における要素データt002を算出する。そして、積和演算器501〜503は、乗算結果をそれまでの算出結果に加算する。
状態561〜563までで、トップサイズの回数のフォワード積和演算が終了する。これにより、1行分の行分演算が終了する。そして、演算部51〜53はこの行分演算をトップサイズの回数繰り返す。すなわち、演算部51〜53は、状態561〜563のそれぞれで表されるフォワード積和演算をカーネル数繰り返すことで、トップデータ209の要素データt00〜t08を求める。
次に、図11を参照して、積和演算器501〜503によるデータの読み出し及び格納の詳細ついて説明する。図11は、積和演算器501〜503によるデータの読み出し及び格納の詳細ついて説明するための図である。ここでは、ストライド数が1の場合について説明する。
レジスタファイル411〜413は、トップサイズにストライド数を乗算した数の配列を有する。そして、メモリ11から読み出されたデータは、先頭から順番に各配列に並べられる。全ての経路を使い切ると、先頭に戻り再度先頭から順番に各配列に並べられる。
例えば、畳み込みフォワード演算が開始されると、レジスタファイル411には、3つの配列の最初の配列に要素データb00及びb03が並べられ、次の配列に要素データb01及びb04が並べられ、次の配列に要素データb02及び0が並べられる。ここで、0は要素データが存在しない場合の値である。同様に、レジスタファイル412及び413にもデータが格納される。これにより、レジスタファイル411〜413の要素データの格納状態は、状態701で表される状態となる。
次に、演算部51〜53の処理を説明するが、いずれも同様の処理であるので、演算部51を例に説明する。演算部51の積和演算器501〜503は、状態701に示すように、レジスタファイル411の配列の一番目の要素データb00〜b02をそれぞれ読み込む。ここで、図11の左端に示すボトムデータ201上の位置は、積和演算器501〜503が読み込んだ要素データのボトムデータ201上の位置を表す。そして、演算部51の積和演算器501〜503は、フォワード積和演算を行う。
その後、積和演算器501は、レジスタファイル301に要素データt00の計算の中間値を格納する。積和演算器502及び503も同様の計算を行う。レジスタファイル301〜303に格納される値は、実際には計算の中間値であるが、図11では分かり易いように算出する要素データを記載した。
次に、積和演算器501〜503は、状態702に示すように、先頭をストライド数進ませた位置から順に要素データを読み込む。そして、積和演算器501〜503は、フォワード積和演算を行う。その後、積和演算器501〜503は、先ほど演算結果を格納してレジスタファイル301〜303の値に演算結果を加算する。
次に、積和演算器501〜503は、状態703に示すように、状態702から先頭をストライド数進ませた位置から順に要素データを読み込む。そして、積和演算器501〜503は、フォワード積和演算を行う。その後、積和演算器501〜503は、先ほど演算結果を格納してレジスタファイル301〜303の値に演算結果を加算する。
このように、積和演算器501〜503は、それぞれレジスタファイル411の個となる配列から要素データを取得する。レジスタファイル411は、1つの配列からは1つの要素データの取得を許す。すなわち、積和演算器501〜503による要素データの読み出しはコンフリクトを起さない。
また、積和演算器501〜503は、単に同じレジスタファイル301〜303が保持する値にデータを加算していくことでトップデータ209の要素データを計算することができる。すなわち、トップデータ209の算出をするためにデータの移動などの処理を行わなくてよい。
そして、左端のボトムデータ201上の位置で示されるように、積和演算器501は、ボトムデータ201と重みデータ202との上端と右端とを一致させた状態の対応する要素データの演算を繰返す。すなわち、積和演算器501は、状態701〜703までの計算でボトムデータ201と重みデータ202との上端と右端とを一致させた状態の対応する要素データの1行分の演算を完了する。積和演算器501は、以上の処理を各行に対して繰り返すことで、ボトムデータ201と重みデータ202との上端と右端とを一致させた場合の畳み込みフォワード演算を行う。すなわち、積和演算器501は、トップデータ209の1つの要素データt00を算出する。同様に、積和演算器502及び503は、要素データt01及びt02を算出する。
次に、図12を参照して、ストライド数が2の場合の、積和演算器501〜503による畳み込みフォワード演算の詳細を説明する。図12は、実施例1に係るストライド数が2の場合の畳み込みフォワード演算の詳細を説明するための図である。ここでは、図5における、演算部51の積和演算器510〜513による演算を例に説明する。
積和演算器510〜513は、状態711に示す演算を行う。すなわち、レジスタファイル411に格納された要素データb00〜b09までのうち、先頭ポインタ161が示す位置からトップサイズとストライド数とを乗算した値である4個の枠611で囲われた要素データb00〜b03を順に読み込む。さらに、積和演算器510及び511は、レジスタファイル412に格納された重みデータ202の最初の行の先頭からストライド数分の要素データw00及びw01を読み込む。また、積和演算器512及び513も、重みデータの最初の行の先頭からストライド数分の要素データw00及びw01を読み込む。
そして、積和演算器510及び511は、読み込んだデータを用いてフォワード積和演算を行い、それぞれ要素データt00の演算の中間値であるデータt00’及びt00’’を算出する。また、積和演算器512及び513は、読み込んだデータを用いてフォワード積和演算を行い、それぞれ要素データt01の演算の中間値である要素データt01’及びt01’’を算出する。そして、積和演算器510〜513は、算出したデータをレジスタファイル413に格納された値に加算し、同じ位置に格納する。
次に、積和演算器510〜513は、状態712に示す演算を行う。この場合、レジスタファイル411に格納された要素データb00〜b09において、先頭ポインタ161は、ストライド数分進まされている。そして、積和演算器510〜513は、先頭ポインタ161が示す位置からトップサイズとストライド数とを乗算した値である4個の枠611で囲われた要素データb02〜b04及び0を順に読み込む。この場合、要素データb04の隣には要素データは存在しないので、積和演算器513が読み込む値は0である。さらに、積和演算器510及び511は、それぞれレジスタファイル412に格納された重みデータ202の最初の行の先頭からストライド数進んだ位置からストライド数分の要素データw02及び0を読み込む。この場合、要素データw02の隣には要素データは存在しないので、積和演算器511が読み込む値は0である。同様に、積和演算器512及び513も、要素データw02及び0を読み込む。
そして、積和演算器510及び511は、読み込んだデータを用いてフォワード積和演算を行い、それぞれ要素データt00の演算の中間値であるデータt00’及びt00’’を算出する。また、積和演算器512及び513は、読み込んだデータを用いてフォワード積和演算を行い、それぞれ要素データt01の演算の中間値であるデータt01’及びt01’’を算出する。そして、積和演算器510〜513は、算出したデータをレジスタファイル413に格納された値に加算し、同じ位置に格納する。
ここで、トップサイズ分の加算が完了したので、積和演算器510〜513は、それぞれ、トップデータ209の要素データt00及びt01の1行分の計算を完了する。次に、積和演算器510〜513は、ボトムデータ201及び重みデータ202における読み込む行を1つ進ませ、状態713で表される2行目の計算を実行する。ここでの計算は、取り扱う要素データが1行目と異なるが演算方法は同じである。
そして、積和演算器510〜513は、状態714に示す3行目の後半の演算を行う。これにより、重みデータ202の全ての行の演算が完了する。そして、演算部51は、積和演算器510が算出したデータt00’と積和演算器511が算出したデータt00’’とを加算して要素データt00を算出する。同様に、演算部51は、データt01’とデータt01’’とを加算して、要素データt01を算出する。
次に、図13を参照して、ストライド数が1の場合の畳み込みフォワード演算全体をまとめて説明する。図13は、ストライド数が1の場合の畳み込みフォワード演算の全体を表した図である。
図13において、各演算部51〜53のそれぞれの積和演算器501〜503の下に位置する列が、それぞれが実行する演算を表す。まず、演算部51〜53は、それぞれ枠721に示したボトムデータ201及び重みデータ202の1行ずつの要素データを取得する。そして、各積和演算器501〜503は、演算部51〜53が読み込んだ要素データを一つずつ用いて行分演算722を行う。行分演算722では、積和演算器501〜503は3回のフォワード積和演算を実行する。
次に、演算部51〜53は、それぞれ枠723に示したボトムデータ201及び重みデータ202の1行ずつの要素データを取得する。そして、各積和演算器501〜503は、演算部51〜53が読み込んだ要素データを一つずつ用いて行分演算724を行う。行分演算724では、積和演算器501〜503は3回のフォワード積和演算を実行する。行分演算724で算出された値は、行分演算722の演算結果に加算される。
次に、演算部51〜53は、それぞれ枠725に示したボトムデータ201及び重みデータ202の1行ずつの要素データを取得する。そして、各積和演算器501〜503は、演算部51〜53が読み込んだ要素データを一つずつ用いて行分演算726を行う。行分演算726では、積和演算器501〜503は3回のフォワード積和演算を実行する。行分演算726で算出された値は、行分演算724の演算結果に加算される。
そして、各積和演算器501〜503は、行分演算722,724及び726を実行することで、トップデータ209の要素データt00〜t08を算出する。
次に、図14を参照して、ストライド数が2以上の場合の畳み込みフォワード演算全体をまとめて説明する。図14は、ストライド数が2の場合の畳み込みフォワード演算の全体を表した図である。
図14において、各演算部51〜53のそれぞれの積和演算器510〜513の下に位置する列が、それぞれが実行する演算を表す。ストライド数が2の場合、ストライド数の個数の積和演算器510及び511、並びに、積和演算器512及び513によりトップデータ209の1つの要素データの算出が行われる。そこで、図14では、積和演算器510〜513の中で、同じ要素データを計算するものを枠で囲んで示した。
まず、演算部51〜53は、それぞれ枠731に示したボトムデータ201及び重みデータ202の1行ずつの要素データを取得する。ここで、積和演算器510〜513は、1回のフォワード積和演算毎に、ボトムデータ201及び重みデータ202における前回の演算で読み込んだ要素データからストライド数進めた位置の要素データを読み込む。そのため、読み込む要素データが無い場合がある。そこで、読み込まれる要素データが無い位置には、0を付加して表した。
各積和演算器510〜513は、演算部51〜53が読み込んだ要素データを一つずつ用いて行分演算732を行う。行分演算732では、積和演算器510〜513は2回のフォワード積和演算を実行する。フォワード積和演算完了毎に、積和演算器510〜513は、ボトムデータ201における前回の演算で読み込んだ要素データからストライド数進めた位置の要素データを読み込む。
次に、演算部51〜53は、それぞれ枠733に示したボトムデータ201及び重みデータ202の1行ずつの要素データを取得する。そして、各積和演算器510〜513は、演算部51〜53が読み込んだ要素データを一つずつ用いて行分演算734を行う。行分演算734では、積和演算器510〜513は2回のフォワード積和演算を実行する。行分演算734で算出された値は、行分演算732の演算結果に加算される。
次に、演算部51〜53は、それぞれ枠735に示したボトムデータ201及び重みデータ202の1行ずつの要素データを取得する。そして、各積和演算器510〜513は、演算部51〜53が読み込んだ要素データを一つずつ用いて行分演算736を行う。行分演算736では、積和演算器510〜513は2回のフォワード積和演算を実行する。行分演算736で算出された値は、行分演算734の演算結果に加算される。
その後、積和演算器510の演算結果と積和演算器511の演算結果とが加算される。また、積和演算器512の演算結果と積和演算器513の演算結果とが加算される。これにより、トップデータ209の要素データt00〜t03の演算が終了する。
次に、図15を参照して、畳み込みフォワード演算の全体の流れについて説明する。図15は、畳み込みフォワード演算のフローチャートである。
演算部51〜53は、操作者からの入力により、ボトムデータ201の行方向の要素データの数であるボトムサイズ及び畳み込みフォワード演算の開始行の取得する(ステップS1)。
次に、演算部51〜53は、操作者からの入力により、カーネルサイズを取得する(ステップS2)。
次に、演算部51〜53は、操作者からの入力により、ストライド数を取得する(ステップS3)。
次に、演算部51〜53は、ボトムサイズ、カーネルサイズ及びストライド数から、トップデータ209のトップサイズを決定する(ステップS4)。
次に、第1データ制御部12は、ボトムデータ201の指定された行の要素データをレジスタファイル411〜413に格納する。また、第2データ制御部13は、重みデータ202の指定された行の要素データをレジスタファイル421〜423に格納する(ステップS5)。
演算部51〜53の各積和演算器501〜503は、フォワード積和演算を実行してトップデータ209を算出する(ステップS6)。演算部51〜53は、算出結果を操作者に通知する。
次に、図16を参照して、本実施例に係るフォワード積和演算の流れを詳細に説明する。図16は、実施例1に係るフォワード積和演算のフローチャートである。
演算部51〜53は、操作者に指定された、カーネルサイズ、ストライド数及びボトムデータにおける開始行を読み込む(ステップS101)。
ポインタ制御部16は、レジスタファイル410の先頭ポインタを初期化する(ステップS102)。
次に、第1データ制御部12及び第2データ制御部13は、指定された先頭行からストライド数の行分のボトムデータ201及び重みデータ202をそれぞれレジスタファイル410及び420に格納する(ステップS103)。
演算部51〜53は、レジスタファイル410の先頭ポインタからトップサイズ数の要素データを読み込み、順に自己が有する積和演算器501〜503に割り当てる(ステップS104)。
また、演算部51〜53は、レジスタファイル420の先頭から終了した計算回数進めた位置の要素データを読み込み、順に自己が有する積和演算器501〜503に割り当てる(ステップS105)。
積和演算器501〜503は、それぞれ取得したボトムデータ201の要素データ及び重みデータ202の要素データを乗算し、乗算結果をレジスタファイル430の自己に対応する所定の格納位置へ格納する(ステップS106)。
演算部51〜53は、ステップS104〜S106の演算がトップサイズの回数分が完了したか否かにより、行分演算が完了したか否かを判定する(ステップS107)。トップサイズの回数の演算が完了していない場合(ステップS107:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタをストライド数分シフトする(ステップS108)。その後、演算部51〜53は、ステップS104へ戻る。
これに対して、トップサイズの回数の演算が完了した場合(ステップS107:肯定)、演算部51〜53は、トップサイズの数の行分演算が完了したか否かを判定する(ステップS109)。トップサイズの数の行分演算が完了していない場合(ステップS109:否定)、演算部51〜53は、ボトムデータ201及び重みデータ202の演算対象とする行として次の行を指定する(ステップS110)。
次に、ポインタ制御部16は、レジスタファイル410の先頭ポインタを初期化する(ステップS111)。この場合、レジスタファイル410の先頭ポインタは、レジスタファイル410に格納された行の先頭に移動させる。その後、演算部51〜53は、ステップS103へ戻る。
これに対して、トップサイズの数の行分演算が完了した場合(ステップS109:肯定)、演算部51〜53は、ストライド数分の計算結果を加算する(ステップS112)。これにより、トップデータ209の各要素データが算出される。
以上に説明したように、本実施例に係る演算処理装置は、フォワード積和演算において、積和演算器がレジスタファイルに格納されたデータのうちそれぞれが異なる配列のデータを読み込むため、データ読み出し時のコンフリクトを回避することができる。さらに、フォワード積和演算において、コンフリクトを回避するためのデータの並び替えや複製の生成などの前処理を行わないため、計算時間を短縮することができる。さらに、同時に複数の積和演算器を用いてフォワード積和演算の処理を並列実行することで、畳み込みフォワード演算の全体の計算時間を短縮することができる。
次に、実施例2について説明する。本実施例に係る演算処理装置は、1つの演算部及びストライド数の積和演算器を用いて畳み込みフォワード演算を行うことが実施例1と異なる。ここでは、ストライド数が2の場合を例に説明する。そして、図5における演算部51が1つ存在し、演算部51が積和演算器510及び511を有する場合で説明する。
この場合、積和演算器510及び511は、実施例1における演算部51の積和演算器510及び511と同じ演算を行う。これにより、積和演算器510及び511は、それぞれトップデータ209の要素データt00の演算の中間値を求める。そして、積和演算器510及び511は、演算結果を加算してトップデータ209の要素データt00を求める。
次に、積和演算器510及び511は、実施例1における演算部51の積和演算器512及び513が実行するそれぞれの処理を順番に実行する。これにより、積和演算器510は、トップデータ209の要素データt01を求める。
さらに、積和演算器510及び511は、実施例1における演算部52の積和演算器510〜513が実行するそれぞれの処理を順番に実行する。これにより、積和演算器510及び511は、トップデータ209の要素データt02及びt03を求める。
以上のように、積和演算器510及び511は、実施例1における演算部51及び52のそれぞれの積和演算器510〜513が実行する演算を順番に実行することで、トップデータ209の全ての要素データt00〜t03を求めることができる。
ここで、図17を参照して、積和演算器510による畳み込みフォワード演算の演算手順について説明する。図17は、実施例2に係るストライド数が2の場合の畳み込みフォワード演算の詳細を説明するための図である。
畳込みフォワード積和演算の開始時点の1行目の行分演算の1回目の演算801において、積和演算器510及び511は、枠612で囲われた先頭ポインタ161からストライド数である2個の要素データb00及びb01を読み込む。さらに、積和演算器510及び511は、重みデータ202の先頭からストライド数である2個の要素データw00及びw01を読み込む。そして、積和演算器510及び511は、取得した要素データを乗算し、さらにレジスタファイル430に格納された値を加算してトップデータ209の要素データt00の中間値であるデータt00’及びt00’’を算出する。その後、積和演算器510及び511は、算出したデータt00’及びt00’’をレジスタファイル430に格納する。
1行目の行分演算の2回目の演算802において、先頭ポインタ161は、演算801の位置から積和演算器510及び511の数行方向に進んだ位置に配置される。そして、積和演算器510及び511は、先頭ポインタ161からストライド数である2個の要素データb02及びb03を読み込む。さらに、積和演算器510及び511は、重みデータ202の先頭からストライド数である2個の要素データw00及びw01を読み込む。そして、積和演算器510及び511は、取得した要素データを乗算し、さらにレジスタファイル430に格納された値を加算してトップデータ209の要素データt01の中間値であるデータt01’及びt01’’を算出する。その後、積和演算器510及び511は、算出したデータt00’及びt00’’をレジスタファイル430に格納する。
積和演算器510及び511は、同様の計算を繰り返す。そして、1行目の行分演算の
3回目の演算803では、先頭ポインタ161は、先頭からストライド数分の移動が1回行われた位置から積和演算器510及び511の数である2つ分行方向に進んだ位置に配置される。そして、積和演算器510及び511は、先頭ポインタ161からストライド数である2個の要素データb04及び0を読み込む。さらに、積和演算器510及び511は、重みデータ202の先頭から積和演算器510及び511の数である2つ分進んだ位置からストライド数である2個の要素データw02及び0を読み込む。そして、積和演算器510及び511は、取得した要素データを乗算してトップデータ209の要素データt01の中間値であるデータt01’及びt01’’を算出する。これにより、積和演算器510及び511は、行分演算を完了する。
この後、演算対象とする行を1つずつずらしながら、積和演算器510及び511は、同様の行分演算を繰返す。演算804は、2行目の行分演算の1回目の演算を表す。また、演算805は、3行目の行分演算の4回目の演算を表す。その後、積和演算器510及び511は、それぞれが算出したトップデータ209の要素データt00〜t01の中間値を合計する。これにより、積和演算器510及び511は、トップデータ209の要素データt00〜t01を算出する。
続いて、積和演算器510及び511は、ボトムデータ201における開始行を同様の演算をストライド数分列方向に移動した状態から繰り替え、トップデータ209のt02及びt03を算出する。これにより、積和演算器510及び511は、要素データt00〜t03で形成されるトップデータ209を求めることができる。
次に、図18を参照して、本実施例に係るフォワード積和演算の流れを詳細に説明する。図18は、実施例2に係るフォワード積和演算のフローチャートである。
演算部51は、操作者に指定された、カーネルサイズ、ストライド数及びボトムデータにおける開始行を読み込む(ステップS201)。
ポインタ制御部16は、レジスタファイル410の先頭ポインタを初期化する(ステップS202)。
次に、第1データ制御部12及び第2データ制御部13は、指定された先頭行からストライド数の行分のボトムデータ及び重みデータをそれぞれレジスタファイル410及び420に格納する(ステップS203)。
演算部51は、レジスタファイル410の先頭ポインタ161からトップサイズ数の要素データを読み込み、順に自己が有するストライド数の個数の積和演算器501〜503に割り当てる(ステップS204)。
また、演算部51の積和演算器501〜503は、レジスタファイル420の先頭から終了した計算回数進めた位置の要素データを読み込む(ステップS205)。
積和演算器501〜503は、それぞれ取得したボトムデータ201の要素データ及び重みデータ202の要素データを乗算し、乗算結果をレジスタファイル430の自己に対応する所定の格納位置の値に加算する(ステップS206)。
演算部51は、ステップS204〜S206の演算のトップサイズの回数の実行が完了したか否かを判定する(ステップS207)。トップサイズの回数の演算が完了していない場合(ステップS207:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタを積和演算器501〜503の個数の分、すなわち、ストライド数分シフトする(ステップS208)。その後、演算部51は、ステップS204へ戻る。
これに対して、トップサイズの回数の演算が完了した場合(ステップS207:肯定)、演算部51は、ステップS204からS207までの演算のトップサイズの回数の実行が完了したか否かにより、行分演算が完了したか否かを判定する(ステップS209)。行分演算が完了していない場合(ステップS209:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタ161を、トップデータ209の次の要素データの算出における先頭に移動する(ステップS210)。すなわち、ポインタ制御部16は、前回のステップS204からS207までの演算における最初の先頭ポインタ161の位置からストライド数進めた位置に先頭ポインタ161を配置する。その後、演算部51は、ステップS204へ戻る。
これに対して、行分演算が完了した場合(ステップS209:肯定)、演算部51は、トップサイズの数の行分演算が完了したか否かを判定する(ステップS211)。トップサイズの数の行分演算が完了していない場合(ステップS211:否定)、演算部51は、ボトムデータ201及び重みデータ202の演算対象とする行として次の行を指定する(ステップS212)。
次に、ポインタ制御部16は、レジスタファイル410の先頭ポインタ161を初期化する(ステップS213)。この場合、レジスタファイル410の先頭ポインタ16は、レジスタファイル410に格納された行の先頭に移動させる。その後、演算部51は、ステップS203へ戻る。
これに対して、トップサイズの数の行分演算が完了した場合(ステップS211:肯定)、演算部51は、ストライド数分の計算結果を加算する(ステップS214)。これにより、トップデータ209の各要素データが算出される。
以上に説明したように、本実施例に係る演算処理装置は、1つの演算部にストライド数の個数の積和演算器を配置した構成で畳み込みフォワード演算を実行する。この場合も、データ読み出し時のコンフリクトを回避することができ、また、計算時間を短縮することができる。
次に、実施例3について説明する。本実施例に係る演算処理装置は、1つの演算部が存在し、その演算部がトップサイズとストライド数とを乗算した数の積和演算器を有し、それらを用いて畳み込みフォワード演算を行うことが実施例1と異なる。ここでは、ストライド数が2の場合を例に説明する。そして、図5における演算部51が1つ存在し、演算部51が4つの積和演算器510〜513を有する場合で説明する。
この場合、積和演算器510〜513は、実施例1における演算部51の積和演算器510〜513と同じ演算を行う。これにより、積和演算器510及び511は、それぞれトップデータ209の要素データt00及びt01の演算の中間値を求める。そして、積和演算器510〜513は、演算結果を加算してトップデータ209の要素データt00及びt01を求める。
次に、積和演算器510及び511は、実施例1における演算部52の積和演算器510〜513が実行するそれぞれの処理を実行する。これにより、積和演算器510及び511は、トップデータ209の要素データt02及びt03を求める。
以上のように、積和演算器510〜513は、実施例1における演算部51及び52のそれぞれの積和演算器510〜513が実行する演算を順番に実行することで、トップデータ209の全ての要素データt00〜t03を求めることができる。
次に、図19を参照して、本実施例に係るフォワード積和演算の流れを詳細に説明する。図19は、実施例3に係るフォワード積和演算のフローチャートである。
演算部51は、操作者に指定された、カーネルサイズ、ストライド数及びボトムデータにおける開始行を読み込む(ステップS301)。
ポインタ制御部16は、レジスタファイル410の先頭ポインタを初期化する(ステップS302)。
次に、第1データ制御部12及び第2データ制御部13は、指定された先頭行からストライド数の行分のボトムデータ201及び重みデータ202をそれぞれレジスタファイル410及び420に格納する(ステップS303)。
演算部51は、レジスタファイル410の先頭ポインタからトップサイズ数の要素データを読み込み、順に自己が有するストライド数にトップサイズを乗算した個数の積和演算器501〜503に割り当てる(ステップS304)。
また、演算部51は、レジスタファイル420の先頭から現在の行分演算において実行した演算の回数進めた位置の要素データを読み込み、順に自己が有する積和演算器501〜503に割り当てる(ステップS305)。
積和演算器501〜503は、それぞれ取得したボトムデータ201の要素データ及び重みデータ202の要素データを乗算し、乗算結果をレジスタファイル430の自己に対応する所定の格納位置へ格納する(ステップS306)。
演算部51は、ステップS304〜S306の演算がトップサイズの回数完了した否かを判定する(ステップS307)。演算がトップサイズの回数完了していない場合(ステップS307:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタを積和演算器501〜503の個数の分、すなわち、ストライド数分シフトする(ステップS308)。その後、演算部51は、ステップS304へ戻る。
これに対して、演算がトップサイズの回数完了した場合(ステップS307:肯定)、演算部51は、ステップS304からS307までの演算のトップサイズの回数の実行が完了したか否かにより、行分演算が完了したか否かを判定する(ステップS309)。行分演算が完了していない場合(ステップS309:否定)、演算部51は、ボトムデータ201及び重みデータ202の演算対象とする行として次の行を指定する(ステップS310)。
次に、ポインタ制御部16は、レジスタファイル410の先頭ポインタ161を、トップデータ209の次の要素データの算出における先頭に配置する(ステップS311)。すなわち、ポインタ制御部16は、前回のステップS304からS307までの演算における最初の先頭ポインタ161の位置からストライド数進めた位置に先頭ポインタ161を配置する。その後、演算部51は、ステップS304へ戻る。
これに対して、行分演算が完了した場合(ステップS309:肯定)、演算部51は、トップサイズの個数の要素データの算出が完了したか否かを判定する(ステップS312)。トップサイズの個数の要素データの算出が完了していない場合(ステップS312:否定)、演算部51は、ボトムデータ201及び重みデータ202の演算対象とする行としてストライド数進めた行を指定する(ステップS313)。
次に、ポインタ制御部16は、レジスタファイル410の先頭ポインタを初期化する(ステップS314)。この場合、レジスタファイル410の先頭ポインタは、レジスタファイル410に格納された行の先頭に移動させる。その後、演算部51は、ステップS304へ戻る。
これに対して、トップサイズの個数の要素データの算出が完了した場合(ステップS312:肯定)、演算部51は、ストライド数分の計算結果を加算する(ステップS315)。これにより、トップデータ209の各要素データが算出される。
以上に説明したように、本実施例に係る演算処理装置は、1つの演算部にストライド数とトップサイズを乗算した値の個数の積和演算器を配置した構成で畳み込みフォワード演算を実行する。この場合も、データ読み出し時のコンフリクトを回避することができ、また、計算時間を短縮することができる。
図20は、複数の演算部を用いた畳み込みフォワード演算のプログラムの記述例を説明するための図である。畳み込みフォワード演算は、図20に示すようにボトムデータ201(bottom_y)とトップ差分データ203(top_x)とを用いた演算は掛け算と足し算で表現できる。畳み込みフォワード演算は、ボトムデータ201のデータ数Ci、トップ差分データ203のデータ数Co、バッチ数mb、ストライド数W及びトップサイズを調節するためのパラメータとなるパッド数padを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
(ハードウェア構成)
図21は、演算処理装置のハードウェア構成図である。図21に示すように、演算処理装置1は、メインメモリ91、CPU(Central Processing Unit)92、I/O(Input/Output)コントローラ93、ハードディスク94及びGPU95を有する。さらに、GPU95は、チップ96及びメモリ99を有する。そして、チップ96には、演算器97及び内蔵メモリ98が搭載される。
一例として、CPU92は、ニューラルネットワークを管理するソフトウェアが動作し、そのソフトウェアが使用するボトムデータ201や重みデータ202がメインメモリ91に格納される。そして、ニューラルネットワークを管理するソフトウェアが演算をGPU95に依頼する。その際、GPU95上の資源を用いて演算が実行できるように、メモリ99に、ボトムデータ201及び重みデータ202が移動される。
演算器97は、演算部50の機能を実現する。また、メモリ99が、メモリ11の機能を実現する。そして、内蔵メモリ98は、レジスタファイル410,420及び430の機能を実現する。この場合、演算器97は、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現する。例えば、メモリ99に演算部50、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現するためのプログラムを含む各種プログラムが格納される。そして、演算器97は、メモリ99から各種プログラムを読み出し実行することで、演算部50、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現することができる。このように、上記各実施例で説明した各機能はGPU95によって実現することができる。
図22は、I/Oデバイスにより畳み込みフォワード演算を行う場合を説明するための図である。この場合、演算処理装置1は、データ913を有し、ソフトウェア911が動作し、且つ、デバイス912により各実施例で説明した各機能が実現される。
データ913は、端末装置910から入力されたデータであり、ボトムデータ201、重みデータ202、期待値、並びに、ボトムサイズ、カーネル数及びストライド数といったネットワーク構成情報が含まれる。
ソフトウェアは、図21のCPU92により実現される。そして、ソフトウェア911は、マイクロプログラムを生成し、デバイス912に動作指示を行う。また、ソフトウェア911は、ネットワーク構成情報をデータ913から取得し、デバイス912に通知する。
デバイス912は、I/Oデバイスであり、図21のGPU95により実現される。そして、デバイス912が、ソフトウェア911により生成されたマイクロプログラムからの動作指示を受けて演算部50、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現する。
また、他の例として、CPU92上で動作するニューラルネットワークを管理するソフトウェアが、演算をCPU92の他のコアに依頼してもよい。その場合、CPU92が、演算部50の機能を実現する。また、ハードディスク94が、メモリ11の機能を実現する。そして、メインメモリ91が、レジスタファイル410〜430の機能を実現する。ハードディスク94は、I/Oコントローラ93を介してCPU92とデータの送受信を行う。この場合、CPU92は、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現する。例えば、ハードディスク94に、演算部50、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現するためのプログラムを含む各種プログラムが格納される。そして、CPU92は、ハードディスク94から各種プログラムを読み出し実行することで、演算部50、第1データ制御部12、第2データ制御部13及びポインタ制御部16の機能を実現することができる。このように、上記各実施例で説明した各機能を、演算処理装置1が有するGPU95以外のCPU92を用いて実現することもできる。
1 演算処理装置
11 メモリ
12 第1データ制御部
13 第2データ制御部
16 ポインタ制御部
50〜53 演算部
201 ボトムデータ
202 重みデータ
203 トップ差分データ
204 重み差分データ
205 ボトム差分データ
206 出力データ
207 期待値
209 トップデータ
310〜314,410〜413,420〜423,430〜433 レジスタファイル
501〜503,510〜513 積和演算器

Claims (4)

  1. 行列に含まれる第1要素データを有する第1データ上に行列に含まれる第2要素データを有する第2データを、前記第1要素データ及び前記第2要素データ同士が対応するように重ね、前記第1要素データの所定数ずつ行方向に前記第2データを移動させて所定演算を行い、各重畳状態で前記所定演算により算出される各第3要素データを含む行列を有する第3データを算出する演算処理装置であって、
    前記第1データ及び前記第2データを格納するデータ格納部と、
    複数の演算部と、
    前記演算部毎に配置され、前記データ格納部に格納された前記第1データの前記所定数の行分の第1所定行を格納する第1格納部と、
    前記演算部毎に配置され、前記データ格納部に格納された前記第2データの前記所定数の行分の第2所定行を格納する第2格納部と、
    前記演算部毎に前記所定数に応じた個数が含まれ、各々が前記第1所定行に含まれるそれぞれ異なる第1要素データを前記第1格納部から取得し、且つ、前記第2所定行に含まれる同じ第2要素データを前記第2格納部から取得し、取得した前記第1要素データ及び前記第2要素データをかけ合わせる処理を、前記第3データの列数の回数行う第1演算を行い、前記第1所定行における前記第1要素データの取得位置及び前記第2所定行における前記第2要素データの取得位置を行方向に前記所定数分進ませて前記第1演算を前記第3データの列数の回数繰り返して行分演算を行う処理を、前記第1所定行及び前記第2所定行を1行ずつ進ませて前記第2データの行数分行う第2演算を行い、且つ、前記第2演算を前記第1所定行及び前記第2所定行を前記所定数ずつ列方向に進ませて繰り返す第3演算を行い、前記第3演算の演算結果を基に前記第3データを求める積和演算部と
    を備えたことを特徴とする演算処理装置。
  2. 前記積和演算部は、各々が前記第1所定行に含まれるそれぞれ異なる前記第1要素データを前記第1格納部から取得し、且つ、前記第2所定行に含まれる同じ前記第2要素データを前記第2格納部から取得し、取得した前記第1要素データ及び前記第2要素データを掛け合わせる処理を、前記第3データの列数の回数行う第1演算を行い、前記第1所定行における前記第1要素データの取得位置及び前記第2所定行における前記第2要素データの取得位置を行方向に前記所定数分進ませて前記第1演算を前記第3データの列数の回数繰り返して行分演算を行う処理を、前記第1所定行及び前記第2所定行を1行ずつ進ませて前記第2データの行数分行う第2演算を行い、且つ、前記第2演算を前記第1所定行及び前記第2所定行を前記所定数ずつ列方向に進ませて繰り返す第3演算を行い、前記第3演算の演算結果を基に前記第3要素データを算出し前記第3データを求めることを特徴とする請求項1に記載の演算処理装置。
  3. 前記演算部は、前記第3データの列数の個数存在することを特徴とする請求項1に記載の演算処理装置。
  4. 行列に含まれる第1要素データを有する第1データ上に行列に含まれる第2要素データを有する第2データを、前記第1要素データ及び前記第2要素データ同士が対応するように重ね、所定数の前記第1要素データずつ行方向に前記第2データを移動させて所定演算を行い、各重畳状態で前記所定演算により算出される各第3要素データを含む行列を有する第3データを算出する演算処理装置の制御方法であって、
    記憶装置に前記第1データ及び前記第2データを格納させ、
    前記記憶装置に格納された前記第1データの第1所定行を第1格納装置に格納し、
    前記記憶装置に格納された前記第2データの第2所定行を第2格納装置に格納し、
    前記所定数に応じた個数が含まれた積和演算器のそれぞれに、前記第1所定行に含まれるそれぞれ異なる前記第1要素データを前記第1格納装置から取得させ、且つ、前記第2所定行に含まれる同じ前記第2要素データを前記第2格納装置から取得させ、
    取得された前記第1要素データ及び前記第2要素データをかけ合わせる処理を、前記第3データの列数の回数行う第1演算を行い、前記第1所定行における前記第1要素データの取得位置及び前記第2所定行における前記第2要素データの取得位置を行方向に前記所定数分進ませて前記第1演算を前記第3データの列数の回数繰り返して行分演算を行う処理を、前記第1所定行及び前記第2所定行を1行ずつ進ませて前記第2データの行数分行う第2演算を行い、且つ、前記第2演算を前記第1所定行及び前記第2所定行を前記所定数ずつ列方向に進ませて繰り返す第3演算を行い、前記第3演算の演算結果を基に前記第3データを求める処理を積和演算器に行わせる
    ことを特徴とする演算処理装置の制御方法。
JP2017130527A 2017-07-03 2017-07-03 演算処理装置及び演算処理装置の制御方法 Active JP6958027B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017130527A JP6958027B2 (ja) 2017-07-03 2017-07-03 演算処理装置及び演算処理装置の制御方法
US16/015,789 US10713042B2 (en) 2017-07-03 2018-06-22 Arithmetic processing device and control method for arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017130527A JP6958027B2 (ja) 2017-07-03 2017-07-03 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2019016011A JP2019016011A (ja) 2019-01-31
JP6958027B2 true JP6958027B2 (ja) 2021-11-02

Family

ID=64738142

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017130527A Active JP6958027B2 (ja) 2017-07-03 2017-07-03 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10713042B2 (ja)
JP (1) JP6958027B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6972547B2 (ja) * 2016-12-27 2021-11-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP6958027B2 (ja) * 2017-07-03 2021-11-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10706840B2 (en) * 2017-08-18 2020-07-07 Google Llc Encoder-decoder models for sequence to sequence mapping
US11803377B2 (en) * 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US10747844B2 (en) * 2017-12-12 2020-08-18 Tesla, Inc. Systems and methods for converting a matrix input to a vectorized input for a matrix processor
US20210034956A1 (en) * 2019-07-29 2021-02-04 Hysai Inc. Minimum memory digital convolver
CN114585997A (zh) * 2019-10-25 2022-06-03 株式会社半导体能源研究所 运算电路、半导体装置及电子设备
US11669587B2 (en) * 2020-10-15 2023-06-06 Gigantor Technologies Inc. Synthetic scaling applied to shared neural networks

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226171A (en) * 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
US5577262A (en) * 1990-05-22 1996-11-19 International Business Machines Corporation Parallel array processor interconnections
JP3251421B2 (ja) 1994-04-11 2002-01-28 株式会社日立製作所 半導体集積回路
US6401106B1 (en) * 2000-08-07 2002-06-04 Systems On Silicon, Inc. Methods and apparatus for performing correlation operations
JP4845350B2 (ja) 2004-06-03 2011-12-28 キヤノン株式会社 並列処理装置
US20070271325A1 (en) * 2006-05-08 2007-11-22 Nvidia Corporation Matrix multiply with reduced bandwidth requirements
JP5376920B2 (ja) * 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
JP6314628B2 (ja) * 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置
JP2018022339A (ja) * 2016-08-03 2018-02-08 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP6786948B2 (ja) * 2016-08-12 2020-11-18 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP6958027B2 (ja) * 2017-07-03 2021-11-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Also Published As

Publication number Publication date
US10713042B2 (en) 2020-07-14
US20190004795A1 (en) 2019-01-03
JP2019016011A (ja) 2019-01-31

Similar Documents

Publication Publication Date Title
JP6958027B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP6786948B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10642622B2 (en) Arithmetic processing device and control method of the arithmetic processing device
JP6900487B2 (ja) ハードウェアにおける平均プーリングの実行
KR102232722B1 (ko) 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망
US11461632B2 (en) Method and apparatus for adapting parameters of neural network
JP6750203B2 (ja) 畳み込みニューラルネットワークの演算方法及び演算プログラム、情報処理装置
TWI678617B (zh) 用於在使用加法器之多維張量中存取資料之系統、電腦實施方法及設備
CN110520834A (zh) 替选循环限制
JP2018124867A (ja) 演算処理装置及び演算処理装置の制御方法
JP6927320B2 (ja) 推論装置、畳み込み演算実行方法及びプログラム
US10248384B2 (en) Arithmetic processing device and control method for arithmetic processing device
JP7020485B2 (ja) 演算装置、演算方法及びプログラム
CN108073549B (zh) 卷积运算装置及方法
JP7165018B2 (ja) 情報処理装置、情報処理方法
CN114341881A (zh) 在脉动阵列上卷积的通用填充支持
CN114792124A (zh) 在硬件中实施扩张卷积
US20220179923A1 (en) Information processing apparatus, information processing method, and computer-readable recording medium
CN112668709B (zh) 计算装置以及用于数据重用的方法
CN109766515B (zh) 矩阵分解处理装置及方法
US20240126617A1 (en) Deep fusion of kernel execution
Huang et al. A hardware/software codesign of WZ factorization to improve time to solve matrices
JP2023073824A (ja) 演算装置、情報処理方法、及びプログラム
JP5958212B2 (ja) パターンマッチング方法、マスクパターンの生成方法、及び、ライブラリの構築方法
JP2004070524A (ja) 演算装置及びその演算方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180713

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210317

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210323

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210519

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: 20210907

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210920

R150 Certificate of patent or registration of utility model

Ref document number: 6958027

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150