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

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

Info

Publication number
JP2018026027A
JP2018026027A JP2016158379A JP2016158379A JP2018026027A JP 2018026027 A JP2018026027 A JP 2018026027A JP 2016158379 A JP2016158379 A JP 2016158379A JP 2016158379 A JP2016158379 A JP 2016158379A JP 2018026027 A JP2018026027 A JP 2018026027A
Authority
JP
Japan
Prior art keywords
data
calculation
register file
control unit
element data
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.)
Granted
Application number
JP2016158379A
Other languages
English (en)
Other versions
JP6786948B2 (ja
Inventor
昌宏 藏本
Masahiro Kuramoto
昌宏 藏本
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 JP2016158379A priority Critical patent/JP6786948B2/ja
Priority to US15/651,651 priority patent/US10353705B2/en
Publication of JP2018026027A publication Critical patent/JP2018026027A/ja
Priority to US16/511,035 priority patent/US10642613B2/en
Application granted granted Critical
Publication of JP6786948B2 publication Critical patent/JP6786948B2/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/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • 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
    • 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/30141Implementation provisions of register files, e.g. ports
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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

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)
  • Data Mining & Analysis (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】コストの増加を抑えつつ演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】メモリ11は、行列を形成する要素データを有する第1データ及び第2データをそれぞれ格納する。演算部51〜53は、メモリ11に格納された第1データの第1所定行及び第2データの第2所定行毎に、第1所定行に含まれる要素データ及び第2所定行に含まれる要素データを用いて、第2データの列数を基に行分演算を繰り返し、各行分演算結果を用いて、第1データと第2データとを用いた演算の演算結果を取得する演算処理を実行する。【選択図】図3

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を用いた場合のように複数の演算器で並行して計算を行う場合、処理速度を向上するため、計算順の調整を行い同じデータの使用を回避することや同じデータのコピーを用意して同時に使用することが行われる。
例えば、畳み込み演算に関する技術としては、1ライン毎に乗算器を設け、各ラインの重みを格納するシフトレジスタを設け、値をシフトさせて順次乗算を行い、乗算結果を加算する従来技術がある。また、隣接するライン同士が乗算器を共有するように、各ラインに対応させて乗算器を設け、畳み込み演算を行う従来技術がある。また、メモリのラインデータを格納する領域と重みデータを格納する領域とに分け、メモリ領域を循環させて演算を行う従来技術がある。さらに、乗算器の出力を他の乗算器に渡して演算を行う従来技術がある。
特開2010−134697号公報 特開2015−210709号公報 特開2008−310700号公報 特開2012−205298号公報
しかしながら、同じデータの読み出しを回避するために計算順の調整を行う場合、使用するデータを決めるために掛け算や割り算が用いられる。掛け算や割り算は加算や減算と比較して、演算により多くのサイクル数を消費するため、計算コストが高い。そのため、掛け算や割り算の演算中には、演算器が毎サイクル動作できないおそれがある。このため、計算順の調整を行うことで、演算の処理速度が低下するおそれがある。また、同じデータの読み出しを回避するためにデータのコピーを用意する場合、同時に使用されないようなデータの並び替えが煩雑になる可能性やコピーするデータ数が増えるおそれがある。例えば、フィルタの1度の移動距離が2列2行以上の場合、読み出すデータが各演算器でばらばらになるため、上記の問題が発生する。すなわち、1つのフィルタの配置状態毎にまとめて演算を行う処理方法を用いた場合、処理速度を向上させるには多くの計算コストがかかるおそれがある。
また、異なるデータを使用する場合でも、レジスタにデータを移動する方法によってはレジスタからデータを読み出せない状態になる場合もある。例えば、2つの演算器が同じタイミングで同じレジスタからデータを読み出そうとした場合、データの読み出しが困難となることが考えられる。そのため、演算の処理速度が低下するおそれがある。
開示の技術は、上記に鑑みてなされたものであって、コストの増加を抑えつつ演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、データ格納部は、行列を形成する要素データを有する第1データ及び第2データをそれぞれ格納する。演算部は、前記データ格納部に格納された前記第1データの第1所定行及び前記第2データの第2所定行毎に、前記第1所定行に含まれる要素データ及び前記第2所定行に含まれる要素データを用いて、前記第2データの列数を基に行分演算を繰り返し、各行分演算結果を用いて、前記第1データと前記第2データとを用いた演算を実行する。
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、コストの増加を抑えつつ演算処理速度を向上させることができるという効果を奏する。
図1は、深層学習の全体的な流れを説明するための図である。 図2は、畳み込みフォワード演算及びバックワード演算を説明するための図である。 図3は、実施例1に係る演算処理装置のブロック図である。 図4は、畳み込みフォワード演算時におけるレジスタファイルへのデータの格納状態を示す図である。 図5は、畳み込みフォワード演算におけるストライド数が1の場合の格納される要素データの遷移を表す図である。 図6は、畳み込みフォワード演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。 図7は、畳み込みフォワード演算における最初の状態を表す図である。 図8は、レジスタファイルに格納されたストライド数の行分の要素データにおける最後のフォワード積和演算を行う状態を表す図である。 図9は、次のストライド数の行分まで移動した状態を表す図である。 図10は、畳み込みバックワードの重み差分演算時におけるレジスタファイルへのデータの格納状態を示す図である。 図11は、畳み込みバックワードの重み差分演算におけるストライド数が1の場合の格納される要素データの遷移を表す図である。 図12は、畳み込みバックワードの重み差分演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。 図13は、畳み込みバックワードの重み差分演算における最初の状態を表す図である。 図14は、レジスタファイルに格納された1行分の要素データにおける最後の重み差分積和演算を行う状態を表す図である。 図15は、次のストライド数分の行に移動した状態を表す図である。 図16は、畳み込みバックワードのボトム差分演算時におけるレジスタファイルへのデータの格納状態を示す図である。 図17は、畳み込みバックワードのボトム差分演算におけるストライド数が1の場合の格納される要素データの遷移を表す図である。 図18は、畳み込みバックワードのボトム差分演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。 図19は、畳み込みバックワードのボトム差分演算における最初の状態を表す図である。 図20は、ボトムデータの1行分の最後のボトム差分積和演算を行う状態を表す図である。 図21は、ボトムデータの1行分において用いる要素データを説明するための図である。 図22は、深層学習処理のフローチャートである。 図23は、畳み込みフォワード演算処理のフローチャートである。 図24は、畳み込みバックワードの重み差分演算処理のフローチャートである。 図25は、畳み込みバックワードのボトム差分演算処理のフローチャートである。 図26は、実施例2に係る演算処理装置のブロック図である。 図27は、実施例3に係る演算処理装置によるボトムデータ及びトップデータの指定を説明するための図である。 図28は、複数の演算部を用いた場合の畳み込み演算全体のフローチャートである。 図29は、複数の演算部を用いた畳み込みフォワード演算のプログラムの記述例を説明するための図である。 図30は、複数の演算部を用いた場合の畳み込みバックワードの重み差分演算のプログラムの記述例を説明するための図である。 図31は、複数の演算部を用いた場合の畳み込みバックワードのボトム差分演算のプログラムの記述例を説明するための図である。 図32は、演算処理装置のハードウェア構成図である。
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図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からの出力データとを用いて、特定の演算処理層における重みデータの期待値との差分を求める。さらに、演算処理装置1は、求めた特定の演算処理層における重みデータの期待値との差分を用いて重みデータを修正する。その後、演算処理装置1は、修正した特定の演算処理層における重みデータと特定の演算処理層における出力データと期待値との差分とを用いて、特定の演算処理層の1つ前の演算処理層におけるトップ差分データを算出する。
演算処理装置1は、各演算処理層における重みデータの修正及び1つ前の演算処理層におけるトップ差分データの算出を順次繰り返す。これにより、演算処理装置1は、演算処理層101〜103の全ての層の重みデータを演算処理層103の出力データの期待値に合わせて修正することができる。ここで説明した、演算処理装置1による矢印P2へ向かう方向の各演算処理層における重みデータを修正するための演算処理は、「畳み込みバックワード演算」と呼ばれる場合がある。
以下では、特定の演算処理層における入力データを、「ボトムデータ」という。ボトムデータは、特定の演算処理層の1つ前の演算処理層からの出力データにあたる。また、特定の演算処理層における重みデータの期待値との差分のデータを、「重み差分データ」という。また、特定の演算処理装置における畳み込みバックワード演算の演算結果のデータを「ボトム差分データ」という。さらに、特定の演算処理層において畳み込みバックワード演算において重みデータの修正に用いられる元データを、「トップ差分データ」という。ここで、特定の演算処理層における畳み込みバックワード演算の算出結果は、特定の演算処理層の1つ前の演算処理層の畳み込みバックワード演算の元データとして用いられる。すなわち、特定の演算処理層において算出されたボトム差分データは、特定の演算処理層の1つ前の演算処理層のトップ差分データにあたる。
また、畳み込みバックワード演算において、トップ差分データとボトムデータとを用いて重み差分データを求める演算を、「畳み込みバックワードの重み差分演算」という。さらに、修正された重みデータとトップ差分データとを用いてボトム差分データを算出する演算を、「畳み込みバックワードのボトム差分演算」という。
さらに、本実施例では、ボトムデータ及び重みデータを方形に行列として並んだ要素デを有する場合で説明する。そこで、以下では、重みデータの行数及び列数を「カーネル数」あるいはカーネル数に応じた単位として「カーネルサイズ」という。このカーネル数が、「所定数」の一例にあたる。ただし、ボトムデータ及び重みデータは、それぞれ長方形でもよい。また、畳み込みフォワード演算における重みデータの1回の移動量を「ストライド数」という場合がある。
図2は、畳み込みフォワード演算及びバックワード演算を説明するための図である。図2は、入力データ10を用いて演算処理を始める第1層から出力データ206と期待値207からトップ差分データ203を生成する。ここでは、演算処理層101を第1層敏、演算処理層104を第n−1層とし、演算処理層103を第n層として、第1層から第n層までの各演算処理層101〜104における演算を例に記載した。また、図2中の円で記載した処理は演算処理を表す。演算処理F1は、畳み込みフォワード演算を表す。演算処理F2は、畳み込みバックワードの重み差分演算を表す。また、演算処理F3は、畳み込みバックワードのボトム差分演算を表す。
演算処理装置1は、最初の第1層において入力データ10及び第1層での重みデータ202に対して演算処理F1で表される畳み込みフォワードを行い、演算結果209を算出する。その後は、図示しないが、同様に次の第2層において、前の層の演算結果209及び第2層での重みデータ202に対して同様に演算処理F1で表される畳み込みフォワード演算を行う。これらを繰り返し、最後の第n層においては、同様に前の層の演算結果209及び第n層での重みデータ202に対して演算処理F1で表される畳み込みフォワード演算を行うが、最後の第n層においては、さらに、演算処理装置1は、出力データ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は、実施例1に係る演算処理装置のブロック図である。図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は、後述する演算部51〜53により算出されたトップ差分データ203及び重み差分データ204も格納する。このメモリ11が、「データ格納部」の一例にあたる。
レジスタファイル410,420及び430は、演算時に演算に用いるデータが一時的に格納される記憶部である。レジスタファイル410,420及び430は、本実施例では、各演算部50にそれぞれ1つずつの3つが割り当てられる。
レジスタファイル410は、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードのボトム差分演算で用いられる一方のデータを格納する。また、レジスタファイル420は、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードのボトム差分演算で用いられる他方のデータを格納する。さらに、レジスタファイル430は、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードのボトム差分演算における演算結果が格納される。このレジスタファイル410が、「第1演算用記憶部」の一例にあたる。また、レジスタファイル420が、「第2演算用記憶部」の一例にあたる。
第1データ制御部12は、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードを実行する際に、所定行ずつメモリ11からデータを読み出し、各演算部50に対応するレジスタファイル410それぞれに格納する。
例えば、第1データ制御部12は、畳み込みフォワード演算の場合、読み込みを開始する行の先頭位置の指定を受ける。そして、第1データ制御部12は、指定された先頭位置からボトムデータ201の要素データをストライド数分の行ずつ、配置されたレジスタファイル410の数分までメモリ11から読み込み、各演算部50に対応するレジスタファイル410それぞれに格納する。
ここで、畳み込みフォワード演算を行う場合、重みデータ202は、その1行1列の位置をボトムデータ201の1行1列の位置に合わせた位置から行方向にストライド数ずつ移動される。以下では、2つの行を用いた演算を行う場合に、その行同士の1行1列を一致させた位置を初期位置という。そして、重みデータ202は、カーネル数にストライド数の整数倍を足した数でボトムデータ201の行数より大きく且つ最小の数となる場合の整数倍に用いた数まで、ボトムデータ201の初期位置から行方向にストライド数ずつ移動される。以下では、カーネル数にストライド数の整数倍を足した数でボトムデータ201の行数より大きく且つ最小の数となる場合の整数倍に用いた数を、「最大移動数」という。
第1データ制御部12は、ボトムデータ201の要素データのストライド数の行分ずつの読み込み及びレジスタファイル410への格納を、レジスタファイル410の個数回繰り返す。ただし、レジスタファイル410の個数が最大移動数分以上ある場合、第1データ制御部12は、最大移動数回処理を行うと、要素データの読み込み及びレジスタファイル41への格納を停止する。
次に、レジスタファイル410に格納した要素データを用いた演算が終了した後、第1データ制御部12は、行分演算の終了の通知を演算部50から受ける。そして、第1データ制御部12は、先頭位置をストライド数分列方向に移動させ、ボトムデータ201の要素データをストライド数の行分ずつのメモリ11からの読み込み及びレジスタファイル410への格納を行う。第1データ制御部12は、最大移動数の回数、ボトムデータ201の要素データのストライド数分の行ずつの読み込み及びレジスタファイル410への格納を繰り返す。
第1データ制御部12は、ボトムデータ201の要素データのストライド数分の行ずつの読み込み及びレジスタファイル410への格納が、最大移動数回終了していない場合、同様の処理を最大移動回数に達するまで繰り返す。
また、畳み込みバックワードの重み差分演算の場合、第1データ制御部12は、読み込みを開始する行の先頭位置の指定を受ける。そして、第1データ制御部12は、指定された先頭位置からボトムデータ201の要素データを1行ずつメモリ11から読み込み、各演算部50に対応するレジスタファイル410に格納する。
第1データ制御部12は、ボトムデータ201の要素データの1行ずつの読み込み及びレジスタファイル410への格納を、レジスタファイル410の数分まで繰り返す。ただし、レジスタファイル410の個数が最大移動数分以上ある場合、第1データ制御部12は、最大移動数分行うと、要素データの読込及びレジスタファイル410への格納を終了する。
次に、レジスタファイル410に格納した要素データを用いた演算が完了した後、第1データ制御部12は、行分演算の終了の通知を演算部50から受ける。そして、第1データ制御部12は、先頭位置をストライド数分列方向に移動させ、ボトムデータ201の要素データを1行ずつのメモリ11からの読み込み及びレジスタファイル410への格納を行う。第1データ制御部12は、最大移動数の回数、ボトムデータ201の要素データの1行ずつの読み込み及びレジスタファイル410への格納を繰り返す。
第1データ制御部12は、ボトムデータ201の要素データの1行ずつの読み込み及びレジスタファイル410への格納が、最大移動数回終了していない場合、同様の処理を最大移動数の回数に達するまで繰り返す。
また、畳み込みバックワードのボトム差分演算の場合、第1データ制御部12は、読み込みを開始する行の先頭位置の指定を受ける。そして、第1データ制御部12は、トップ差分データ203の要素データを1行ずつ読み込み、各演算部50に対応するそれぞれのレジスタファイル410に格納する。
第1データ制御部12は、トップ差分データ203の要素データの1行ずつの読み込み及びレジスタファイル410への格納を、レジスタファイル410の数分まで繰り返す。ただし、レジスタファイル410の個数がトップ差分データ203の行数分以上ある場合、第1データ制御部12は、行数分行うと、要素データの読込及びレジスタファイル410への格納を終了する。
次に、レジスタファイル410に格納した要素データを用いた演算が終了した後、第1データ制御部12は、行分演算の終了の通知を演算部50から受ける。そして、第1データ制御部12は、先頭位置を1行下の行に移動させ、トップ差分データ203の要素データを1行ずつのメモリ11からの読み込み及びレジスタファイル410への格納を行う。第1データ制御部12は、重みデータ202の行数、トップ差分データ203の要素データの1行ずつの読み込み及びレジスタファイル410への格納を繰り返す。
第1データ制御部12は、トップ差分データ203の要素データの1行ずつの読み込み及びレジスタファイル410への格納が、最大移動数回終了していない場合、同様の処理を最大移動回数に達するまで繰り返す。
第2データ制御部13は、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードを実行する際に、所定行ずつメモリ11からデータを読み出し、各演算部50に対応するレジスタファイル420に格納する。
例えば、第2データ制御部13は、畳み込みフォワード演算の場合、読み込みを開始する行の先頭位置の指定を受ける。そして、第2データ制御部13は、指定された先頭位置からストライド数の行分の重みデータ202の要素データを、配置されたレジスタファイル420の数分メモリ11から読み込む。そして、第2データ制御部13は、読み込んだ要素データを各演算部50に対応するレジスタファイル420に格納する。すなわち、第2データ制御部13は、各演算部50に対応するレジスタファイル420の全てに同じ要素データを格納する。
レジスタファイル420に格納した要素データを用いた演算が終了した後、第2データ制御部13は、行分演算の終了の通知を演算部50から受ける。そして、第2データ制御部13は、重みデータ202における読み込みの先頭位置をストライド数分移動する。そして、第2データ制御部13は、先頭位置からストライド数の行分の重みデータ202の要素データを、配置されたレジスタファイル420の数分までメモリ11から読み込み、レジスタファイル420に格納する。第2データ制御部13は、先頭位置からのストライド数の行分の要素データの読み込み及びレジスタファイル420への格納を繰り返す。
第2データ制御部13は、最大移動数の回数、要素データの読み込み及びレジスタファイル420への格納を行った時点で、演算処理が終了していない場合、重みデータ202における読み込みの先頭位置を重みデータの先頭に移動する。そして、第2データ制御部13は、演算処理が終了するまで、同様の処理を繰り返す。
また、畳み込みバックワードの重み差分演算の場合、第2データ制御部13は、要素データの読み込みの先頭位置としてトップ差分データ203の先頭の指定を受ける。そして、第2データ制御部13は、指定された先頭位置から1行分のトップ差分データ203の要素データを、配置されたレジスタファイル420の数分メモリ11から読み込む。そして、第2データ制御部13は、読み込んだ要素データを各演算部50に対応するレジスタファイル420に格納する。すなわち、第2データ制御部13は、各演算部50に対応するレジスタファイル420の全てに同じ要素データを格納する。
レジスタファイル420に格納した要素データを用いた演算が終了した後、第2データ制御部13は、行分演算の終了の通知を演算部50から受ける。そして、第2データ制御部13は、トップ差分データ203における読み込みの先頭位置を1行下の行の先頭に移動する。そして、第2データ制御部13は、先頭位置から1行分のトップ差分データ203の要素データを、配置されたレジスタファイル420の数分までメモリ11から読み込み、レジスタファイル420に格納する。第2データ制御部13は、先頭位置からの1行分の要素データの読み込み及びレジスタファイル420への格納を繰り返す。
第2データ制御部13は、最大移動数の回数、要素データの読み込み及びレジスタファイル420への格納を行った時点で、演算処理が終了していない場合、トップ差分データ203における読み込みの先頭位置をトップ差分データ203の先頭に移動する。そして、第2データ制御部13は、演算処理が終了するまで、同様の処理を繰り返す。
また、畳み込みバックワードのボトム差分演算の場合、第2データ制御部13は、要素データの読み込みの先頭位置として重みデータ202の先頭の指定を受ける。そして、第2データ制御部13は、指定された先頭位置から1行分の重みデータ202の要素データを、配置されたレジスタファイル420の数分までメモリ11から読み込む。そして、第2データ制御部13は、読み込んだ要素データを各演算部50に対応するレジスタファイル420に格納する。すなわち、第2データ制御部13は、各演算部50に対応するレジスタファイル420の全てに同じ要素データを格納する。
レジスタファイル420に格納した要素データを用いた演算が終了した後、第2データ制御部13は、行分演算の終了の通知を演算部50から受ける。そして、第2データ制御部13は、重みデータ202における読み込みの先頭位置を1行下の行の先頭に移動する。そして、第2データ制御部13は、先頭位置から1行分の重みデータ202の要素データを、配置されたレジスタファイル420の数分までメモリ11から読み込み、レジスタファイル420に格納する。第2データ制御部13は、先頭位置からの1行分の要素データの読み込み及びレジスタファイル420への格納を繰り返す。
第2データ制御部13は、最大移動数の回数、要素データの読み込み及びレジスタファイル420への格納を行った時点で、演算処理が終了していない場合、重みデータ202における読み込みの先頭位置を重みデータ202の先頭に移動する。そして、第2データ制御部13は、演算処理が終了するまで、同様の処理を繰り返す。
演算部50は、レジスタファイル410及び420に格納された要素データを用いて、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードを実行し、演算結果をレジスタファイル430に格納する。
例えば、演算部50は、畳み込みフォワード演算の場合、レジスタファイル410における後述するポインタ制御部16により指定された先頭ポインタの位置から重みデータ202のストライド数の行分にあたるボトムデータ201の要素データを読み込む。さらに、演算部50は、レジスタファイル420に格納された重みデータ202のストライド数の行分の要素データを読み込む。そして、演算部50は、読み込んだボトムデータ201の要素データと重みデータ202の要素データとを先頭から順に対応させて、対応する要素データを乗算する。さらに、演算部50は、乗算結果を合計する。以下では、畳み込みフォワード演算における、対応する要素データを乗算しその乗算結果を合計する演算を、「フォワード積和演算」という。そして、演算部50は、レジスタファイル430におけるポインタ制御部16により指定された先頭ポインタの位置に合計した演算結果を格納する。そして、演算部50は、1回のフォワード積和演算の完了をポインタ制御部16に通知する。
次に、演算部50は、レジスタファイル410におけるポインタ制御部16によりストライド分移動された先頭ポインタの位置から重みデータ202のストライド数の行分にあたるボトムデータ201の要素データを読み込む。そして、演算部50は、前の計算で既に読み込んだ重みデータ202の要素データと今回読み込んだボトムデータ201の要素データを用いたフォワード積和演算を行う。そして、演算部50は、レジスタファイル430におけるポインタ制御部16により1つ移動された位置に演算結果を格納する。演算部50は、レジスタファイル410に格納されたボトムデータ201のストライド数の行分の要素データ全てについてフォワード積和演算を行うまで同様の処理を繰り返す。
レジスタファイル410に格納された全ての要素データについてフォワード積和演算を行った場合、演算部50は、行分演算完了を第1データ制御部12及び第2データ制御部13に送信する。そして、演算部50は、レジスタファイル410及び420に新たに格納された要素データを用いてフォワード積和演算を繰り返す。ここで、演算部50は、フォワード積和演算を重みデータ202の最大移動数分行う間、各ストライド数の行分の要素データにおいて先頭からの位置が同じ要素データを用いたフォワード積和演算の結果を、レジスタファイル430の同じ位置の値に加算していく。
演算部50は、重みデータ202の最大移動数回フォワード積和演算を行った場合、演算結果をメモリ11が有するトップ差分データ203に格納する。その後、全てのトップ差分データ203の算出が終わっていなければ、演算部50は、新たなトップ差分データ203の要素データの算出として、同様の処理を繰り返す。この畳み込みフォワード演算におけるボトムデータ201が、「第1データ」の一例にあたり、重みデータ202が、「第2データ」の一例にあたる。さらに、ここで説明した畳み込みフォワード演算の場合、ストライド数の行が「第1所定行」及び「第2所定行」の一例にあたる。
また、畳み込みバックワードの重み差分演算の場合、演算部50は、レジスタファイル410におけるポインタ制御部16により指定された先頭ポインタの位置からカーネル数分にあたるボトムデータ201の要素データを読み込む。さらに、演算部50は、レジスタファイル420におけるポインタ制御部16により指定された先頭ポインタの位置のトップ差分データ203の要素データを読み込む。そして、演算部50は、読み込んだボトムデータ201の要素データのそれぞれとトップ差分データ203の要素データとを乗算する。次に、演算部50は、乗算結果を重みデータ202の対応する要素データとして、レジスタファイル430に格納された値に加算する。以下では、畳み込みバックワードの重み差分演算における、対応する要素データを乗算しその乗算結果をレジスタファイル430の値に加算する演算を、「重み差分積和演算」という。演算部50は、演算の完了をポインタ制御部16に通知する。
次に、演算部50は、レジスタファイル410におけるポインタ制御部16によりストライド分移動された先頭ポインタの位置からカーネル数分にあたるボトムデータ201の要素データを読み込む。さらに、演算部50は、レジスタファイル420におけるポインタ制御部16により1つ移動された先頭ポインタの位置のトップ差分データ203の要素データを読み込む。そして、演算部50は、読み込んだボトムデータ201の要素データ及びトップ差分データ203の要素データを用いて重み差分積和演算を行う。演算部50は、レジスタファイル410に格納されたボトムデータ201の1行分の要素データ全てについて重み差分積和演算を行うまで同様の処理を繰り返す。
レジスタファイル410に格納された全ての要素データについて重み差分積和演算を行った場合、演算部50は、行分演算完了を第1データ制御部12及び第2データ制御部13に送信する。そして、演算部50は、レジスタファイル410及び420に新たに格納された要素データを用いて重み差分積和演算を繰り返す。ここで、演算部50は、フォワード積和演算を最大移動数分行う間、各行の要素データにおいて先頭からの位置が同じ要素データを用いた重み差分積和演算の結果を、レジスタファイル430の同じ位置の値に加算していく。
フォワード積和演算を最大移動数分行った場合、演算部50は、演算結果をメモリ11が有する重み差分データ204に格納する。その後、全ての重み差分データ204の算出が終わっていなければ、演算部50は、新たな重み差分データ204の要素データの算出として、同様の処理を繰り返す。この畳み込みバックワードの重み差分演算におけるボトムデータ201が、「第1データ」の一例にあたり、トップ差分データ203が、「第2データ」の一例にあたる。さらに、ここで説明した畳み込みバックワードの重み差分演算の場合、ボトムデータ201の1行が「第1所定行」の一例にあたり及びトップ差分データ203の1行が「第2所定行」の一例にあたる。
また、畳み込みバックワードのボトム差分演算の場合、演算部50は、レジスタファイル410におけるポインタ制御部16により指定されたポインタの位置のトップ差分データ203の要素データを読み込む。さらに、演算部50は、レジスタファイル410に格納された1行分の重みデータ202の要素データを読み込む。そして、演算部50は、読み込んだ重みデータ202の要素データのそれぞれと選択したトップ差分データ203の要素データとを乗算する。次に、演算部50は、乗算結果をボトム差分データ205の対応する要素データとして、レジスタファイル430におけるポインタ制御部16により指定された先頭ポインタからカーネル数分の値にそれぞれ加算する。以下では、畳み込みバックワードのボトム差分演算における、対応する要素データを乗算しその乗算結果をレジスタファイル430の値に加算する演算を、「ボトム差分積和演算」という。演算部50は、演算の完了をポインタ制御部16に通知する。
次に、演算部50は、読み込んだ1行分の重みデータ202の要素データを保持する。さらに、演算部50は、レジスタファイル410におけるポインタ制御部16により1つ移動された先頭ポインタの位置のトップ差分データ203の要素データを読み込む。そして、演算部50は、ボトムデータ201の要素データ及びトップ差分データ203の要素データを用いてボトム差分積和演算を行う。演算部50は、レジスタファイル420に格納されたトップ差分データ203の1行分の要素データ全てについて重み差分積和演算を行うまで同様の処理を繰り返す。
レジスタファイル410に格納された全ての要素データについてボトム差分積和演算を行った場合、演算部50は、行分演算完了を第1データ制御部12及び第2データ制御部13に送信する。そして、演算部50は、レジスタファイル410及び420に新たに格納された要素データを用いてボトム差分積和演算を繰り返す。
フォワード積和演算を重みデータ202の行数分行った場合、演算部50は、演算結果をメモリ11が有するボトム差分データ205に格納する。その後、全てのボトム差分データ205の算出が終わっていなければ、演算部50は、新たなボトム差分データ205の要素データの算出として、同様の処理を繰り返す。この畳み込みバックワードのボトム差分演算におけるトップ差分データ203が、「第1データ」の一例にあたり、重みデータ202が、「第2データ」の一例にあたる。さらに、ここで説明した畳み込みバックワードの重み差分演算の場合、トップ差分データ203の1行が「第1所定行」の一例にあたり及び重みデータ202の1行が「第2所定行」の一例にあたる。
さらに、図1の最終層の第n層である演算処理層103の場合、演算部50は、出力データをモニタなどの出力装置(不図示)へ出力しユーザに演算結果を提供する。例えば、画像認識の場合、演算部50は、認識結果を出力装置へ出力する。
ポインタ制御部16は、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードのボトム差分演算を実行する際に、レジスタファイル410〜430に対して先頭ポインタ及びポインタの指定を行う。図3では、図示の都合上、ポインタ制御部16からレジスタファイル411,421及び431に対して制御を表す矢印を例として記載したが、実際には、他のレジスタファイル410,420及び430に対してもポインタ制御部16は、制御を行う。
例えば、ポインタ制御部16は、畳み込みフォワード演算の場合、最初にレジスタファイル410における先頭ポインタを、レジスタファイル410の先頭に設定する。また、ポインタ制御部16は、最初にレジスタファイル430におけるポインタを、レジスタファイル430の先頭に設定する。
ポインタ制御部16は、1回分の演算完了の通知を受ける毎に、レジスタファイル410における先頭ポインタをストライド数分移動した位置に設定する。また、ポインタ制御部16は、レジスタファイル430におけるポインタを1つ移動した位置に設定する。そして、レジスタファイル410における先頭ポインタの移動を最大移動数分行った場合、ポインタ制御部16は、先頭ポインタをレジスタファイル41の先頭に設定する。すなわち、レジスタファイル41における先頭ポインタは、ボトムデータ201における次のストライド数分の行の先頭に設定される。また、ポインタ制御部16は、ポインタをレジスタファイル430の先頭に戻す。すなわち、レジスタファイル430におけるポインタは、トップ差分データ203の次の行の先頭に設定される。ポインタ制御部16は、演算部50による畳み込みフォワード演算が終了するまで、同様の処理を繰り返す。
また、畳み込みバックワードの重み差分演算の場合、ポインタ制御部16は、最初にレジスタファイル410における先頭ポインタを、レジスタファイル410の先頭に設定する。また、ポインタ制御部16は、最初にレジスタファイル420におけるポインタを、レジスタファイル420の先頭に設定する。
ポインタ制御部16は、1回の演算完了の通知を受ける毎に、レジスタファイル410における先頭ポインタをストライド数分移動した位置に設定する。また、ポインタ制御部16は、レジスタファイル420におけるポインタを1つ移動した位置に設定する。そして、レジスタファイル410における先頭ポインタの移動をボトムデータ201の行方向の移動数分行った場合、ポインタ制御部16は、先頭ポインタをレジスタファイル410の先頭に戻す。すなわち、レジスタファイル410における先頭ポインタは、ボトムデータ201の次の行の先頭に設定される。また、ポインタ制御部16は、レジスタファイル420におけるポインタをレジスタファイル420の先頭に戻す。すなわち、レジスタファイル420におけるポインタは、トップ差分データ203の次の行の先頭に設定される。ポインタ制御部16は、演算部50による畳み込みバックワードの重み差分演算が終了するまで、同様の処理を繰り返す。
また、畳み込みバックワードのボトム差分演算の場合、ポインタ制御部16は、最初にレジスタファイル420におけるポインタを、レジスタファイル420の先頭に設定する。また、ポインタ制御部16は、最初にレジスタファイル430における先頭ポインタを、レジスタファイル430の先頭に設定する。
ポインタ制御部16は、1回の演算完了の通知を受ける毎に、レジスタファイル420における先頭ポインタを1つ移動した位置に設定する。また、ポインタ制御部16は、レジスタファイル430におけるポインタをストライド数分移動した位置に設定する。そして、レジスタファイル420における先頭ポインタの移動をトップ差分データ203の行方向の移動数分行った場合、ポインタ制御部16は、先頭ポインタをレジスタファイル420の先頭に戻す。すなわち、レジスタファイル420における先頭ポインタは、トップ差分データ203の次の行の先頭に設定される。また、ポインタ制御部16は、レジスタファイル430におけるポインタをレジスタファイル430の先頭に戻す。すなわち、レジスタファイル430におけるポインタは、ボトム差分データ205の次の行の先頭に設定される。ポインタ制御部16は、演算部50による畳み込みバックワードのボトム差分演算が終了するまで、同様の処理を繰り返す。
さらに、畳み込みフォワード演算、畳み込みバックワードの重み差分演算及び畳み込みバックワードのボトム差分演算について詳細に説明する。
図4を参照して、畳み込みフォワード演算を実行する場合について説明する。図4は、畳み込みフォワード演算時におけるレジスタファイルへのデータの格納状態を示す図である。図4では、演算処理装置1は、12行12列に要素データが並んだボトムデータ201及びカーネル数5の要素データが5行並んだ(つまり、5行5列に要素データが並んだ)重みデータ202を用いる。ボトムデータ201は、要素データb00〜b143を有する。また、重みデータ202は、要素データw00〜w24を有する。
ボトムデータ201は、第1データ制御部12を経由してボトムデータ格納用の各レジスタファイル411,412,413(以降、これを単にレジスタファイル411,412,413とする。)へ読み込まれる。また、重みデータ202は第2データ制御部12を経由して重みデータ格納用の各レジスタファイル各レジスタファイル421,422,423(以降、これを単にレジスタファイル421,422,423とする。)へ読み込まれる。さらに、演算結果は、演算結果格納用のレジスタファイルル431,432,433(以降、これを単にレジスタファイル431,432,433とする。)へ読み込まれる。
ここで、重みデータ202をストライド数分ずつボトムデータ201上で移動させたき最後の部分がはみ出す場合、すなわち、ボトムデータ201の行数がカーネル数にストライド数の整数倍を足した数で表せない場合、第1データ制御部12及び第2データ制御部13は、以下の処理を行う。第1データ制御部12及び第2データ制御部13は、ボトムデータ201の周囲に、ストライド数の整数倍を足した数でボトムデータ201より大きく且つ最小の数になるように、ボトムデータ201の行方向及び列方向に計算調整用の要素データを付す。例えば、図4においてストライド数が2の場合、第1データ制御部12及び第2データ制御部13は、ボトムデータ201に1行1列分の要素データを加えたデータを用いられる。第1データ制御部12及び第2データ制御部13は、この処理を畳み込みバックワード演算においても行う。
さらに、本実施例では、最大移動数の演算部50が用いられる。例えば、図4においてストライド数が2の場合、5個の演算部50が用いられる。
第1データ制御部12は、畳み込みフォワード演算で用いるボトムデータ201及び重みデータ202のサイズを予め記憶する。また、第1データ制御部12は、畳み込みフォワード演算における重みデータ202の1回の移動量であるストライド数を予め記憶する。例えば、第1データ制御部12は、予めモニタなどの表示装置及びキーボードなどの入力装置を用いて設定された設定値により、ボトムデータ201のサイズ及び重みデータ202のサイズ(あるいはカーネル数)、並びに、ストライド数を取得して記憶する。
第1データ制御部12は、ボトムデータ201における先頭位置からストライド数の行分の要素データをメモリ11から読み込む。例えば、ストライド数が2の場合、第1データ制御部12は、要素データb00〜b23のデータを読み込む。そして、第1データ制御部12は、要素データb00〜b23をレジスタファイル411に格納する。
また、第1データ制御部12は、ボトムデータ201における次のストライド数の行分の要素データをメモリ11から読み込む。そして、第1データ制御部12は、レジスタファイル411に読み込んだ要素データを格納する。例えば、ストライド数が2の場合、第1データ制御部12は、要素データb24〜b47をレジスタファイル412に格納する。
このように、第1データ制御部12は、ストライド数分ずつ先頭をずらしながら、ボトムデータ201におけるストライド数分の行の要素データの取得を取得していき、異なるレジスタファイル411〜413(411,412,413)に順次格納する。
そして、第1データ制御部12は、最大移動数、ストライド数分の行の要素データのメモリ11から読み込み及びレジスタファイル410への格納を繰り返す。例えば、ストライド数が2の場合、第1データ制御部12は、要素データb96〜b119をレジスタファイル413に格納する。
また、第2データ制御部13は、重みデータ202における先頭位置からストライド数の行分、カーネル数で指定された単位の重みデータ202の要素データをメモリ11から読み込む。例えば、ストライド数が2、カーネル数が5の場合、第2データ制御部13は、要素データw00〜w04,w05〜w09をメモリ11から読み込む。そして、第2データ制御部13は、レジスタファイル421〜423(421,422,423)に要素データw00〜w09を格納する。
演算部51は、レジスタファイル411に格納された要素データb00〜b23とレジスタファイル421に格納された要素データw00〜w09とを用いてフォワード積和演算を行う。そして、演算部51は、フォワード積和演算の結果を演算結果格納用のレジスタファイル431のポインタが示す位置の値に加算する。ここで、演算結果格納用のレジスタファイル431は、初期値が0であるので、演算結果格納用のレジスタファイル431には、最初の演算ではフォワード積和演算の演算結果がそのまま格納される。
演算部52〜53も、演算部51と同様のフォワード積和演算を行い、演算結果をそれぞれレジスタファイル432〜433に格納された値に加算する。
次に、第1データ制御部12により、レジスタファイル411には、要素データb24〜b47が格納され、レジスタファイル412には、要素データb48〜b71が格納され、レジスタファイル413には、要素データb120〜b143が格納される。また、第2データ制御部13により、レジスタファイル421〜423には、要素データw10〜w19が格納される。
演算部51は、レジスタファイル411に格納された要素データb24〜b47とレジスタファイル421に格納された要素データw10〜w19とを用いてフォワード積和演算を行う。そして、演算部51は、フォワード積和演算の結果をレジスタファイル431のポインタが示す位置に格納された値に加算する。
演算部52〜53も、演算部51と同様のフォワード積和演算を行い、演算結果をそれぞれレジスタファイル432〜433に格納された値に加算する。
このように、第1データ制御部12及び第2データ制御部13は、要素データをレジスタファイル410及び420に格納する。そして、演算部51〜53は、レジスタファイル410及び420に格納された要素データを用いてフォワード積和演算を実行する。
ここで、図5及び6を参照して、レジスタファイル410及び420に格納される要素データの遷移について説明する。図5は、畳み込みフォワード演算におけるストライド数が1の場合の格納される要素データの遷移を表す図である。また、図6は、畳み込みフォワード演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。ここでは、演算部51〜53の3つが存在する場合で説明する。また、この場合も、図4のボトムデータ201及び重みデータ202を使用する。
ストライド数が1の場合、最初に、図5の状態431に示すように、レジスタファイル411には、要素データb00〜b11が格納される。また、レジスタファイル412には、要素データb12〜b23が格納される。また、レジスタファイル413には、要素データb24〜b35が格納される。また、レジスタファイル421〜423には、カーネル数で指定された単位の要素データw00〜w04が格納される。
次に、状態431の演算が終了すると、状態432に示すように、レジスタファイル411〜413には、状態431で格納されていた要素データの次の1行分の要素データが格納される。このように、カーネル数で指定された重みデータ202の行数である5行分の取り込みが終わるまで、状態433〜435においても順次、前の状態で格納されていた要素データの次の1行分の要素データがレジスタファイル411〜413に格納される。
そして、状態431〜435における演算部51〜53の演算が終了した時点で、ボトムデータ201の先頭に重みデータ202の先頭を合わせて配置した状態から重みデータ202を行方向に順次移動した場合の畳み込みフォワード演算が完了する。ただし、状態431〜435の演算では、列方向に重みデータ202を移動させた状態での畳み込みフォワード演算が行われていない。そこで、演算処理装置1は、畳み込みフォワード演算を全て完了するには、行が重なる方向に重みデータ202を移動させて、行方向に重みデータ202を移動させながら畳み込みフォワード演算を行う処理を、後7回行う。
また、ストライド数が2の場合、最初に、図6の状態441に示すように、レジスタファイル411には、要素データb00〜b23が格納される。また、レジスタファイル412には、要素データb24〜b47が格納される。また、レジスタファイル413には、要素データb48〜b71が格納される。また、レジスタファイル421〜423には、要素データw00〜w09が格納される。
次に、状態441の演算が終了すると、状態442に示すように、レジスタファイル411〜413には、状態441で格納されていた要素データの次のストライド数の行分の要素データが格納される。状態443においても順次、状態442で格納されていた要素データの次の1行分の要素データがレジスタファイル411〜413に格納される。ただし、重みデータ202の行数は5であるため、ストライド数が2の場合、2回移動させた場合、例えば、演算部51は、b00〜b11、b12〜b23、b24〜b35、b36〜b47の4行分取り込んでいるため残りは1行である。そこで、2回移動させた場合の、状態443では、少なくとも、ボトムデータ201の1行分の要素データがレジスタファイル411〜413に格納され、格納された1行分の要素データを用いて同様に演算部により演算処理が行われる。
そして、状態441〜443における演算部51〜53の演算が終了した時点で、ボトムデータ201の先頭に重みデータ202の先頭を合わせて配置した状態から重みデータ202を行方向に順次移動した場合の畳み込みフォワード演算が完了する。ただし、状態441〜443の演算では、列方向に重みデータ202を移動させた状態での畳み込みフォワード演算が行われていない。そこで、演算処理装置1は、畳み込みフォワード演算を全て完了するには、列方向に重みデータ202を移動させつつ、行方向に重みデータ202を移動させて畳み込みフォワード演算を行う処理を、後4回行う。
次に、図7〜9を参照して、演算部50によるフォワード積和演算の詳細について説明する。図7は、畳み込みフォワード演算における最初の状態を表す図である。図8は、レジスタファイルに格納されたストライド数の行分の要素データにおける最後のフォワード積和演算を行う状態を表す図である。図9は、次のストライド数の行分に移動した状態を表す図である。ここでは、図4のボトムデータ201及び重みデータ202を使用し、ストライド数が1の場合で説明する。
まず、畳み込みフォワード演算を開始する場合、レジスタファイル410に要素データb00〜b11が格納される。また、レジスタファイル420に重みデータ202の要素データw00〜w04が格納される。
ポインタ制御部16は、レジスタファイル411に格納された最初の要素データb00にレジスタファイル411における先頭ポインタ161を設定する。また、ポインタ制御部16は、レジスタファイル430におけるトップ差分データ203の先頭の要素データt00に、レジスタファイル430におけるポインタ162を設定する。
演算部50は、点線611で囲われた部分の、レジスタファイル410の先頭ポインタ161の位置からカーネル数の要素データb00〜b04を取得する。そして、演算部50は、要素データb00〜b04と要素データw00〜w04をそれぞれ乗算し、乗算結果を合計する。そして、演算部50は、レジスタファイル430におけるポインタ162が示す要素データt00の値を取得する。ここで、要素データt00の初期値は0である。そして、演算部50は、フォワード積和演算の結果と要素データt00の値を合計し、要素データt00として、レジスタファイル430のポインタ162が示す位置に格納する。
その後、ポインタ制御部16は、先頭ポインタ161のストライド数分の移動を7回繰り返し、図8の状態とする。また、ポインタ制御部16は、ポインタ162の1つずつの移動を7回繰り返し、図8の状態とする。
図8の状態で、演算部50は、点線612で囲われた部分の、レジスタファイル410の先頭ポインタ161の位置からカーネル数の要素データb07〜b11を取得する。そして、演算部50は、要素データb07〜b11と要素データw00〜w04とをそれぞれ乗算し、乗算結果を合計する。そして、演算部50は、レジスタファイル430におけるポインタ162が示す要素データt07の値を取得する。ここで、要素データt07の初期値は0である。そして、演算部50は、フォワード積和演算の結果と要素データt07の値を合計し、要素データt07として、レジスタファイル430のポインタ162が示す位置に格納する。
図8の状態でのフォワード積和演算が完了すると、レジスタファイル410に、新たに次のストライド数の行分の要素データb12〜b23が格納される。また、レジスタファイル420に次の行の重みデータ202の要素データw05〜w09が格納される。
そして、ポインタ制御部16は、先頭ポインタ161を初期化し、図9に示すように、レジスタファイル410に格納された最初の要素データb12に先頭ポインタ161を設定する。また、ポインタ制御部16は、ポインタ162を初期化し、レジスタファイル430におけるトップ差分データ203の先頭の要素データt00にポインタ162を設定する。
演算部50は、点線613で囲われた部分の、レジスタファイル410の先頭ポインタ161の位置からカーネル数の要素データb12〜b16を取得する。そして、演算部50は、要素データb12〜b16と要素データw00〜w04をそれぞれ乗算し、乗算結果を合計する。そして、演算部50は、レジスタファイル430におけるポインタ162が示す要素データt00の値を取得する。そして、演算部50は、フォワード積和演算の結果と要素データt00の値を合計し、要素データt00として、レジスタファイル430のポインタ162が示す位置に格納する。
このように、ポインタ制御部16は、先頭ポインタ161をレジスタファイル410の先頭から1回の演算が完了する毎に、1スライド数分ずつボトムデータ201の列方向の移動数回スライドさせる。その後、先頭ポインタ161が最後尾に達すると、ポインタ制御部16は、先頭ポインタ161を初期化して先頭に戻す。また、ポインタ制御部16は、ポインタ162をレジスタファイル430の先頭から1回の演算が完了する毎に、1つずつ重みデータ202の列方向の移動数回スライドさせる。その後、ポインタ162が最後尾に達すると、ポインタ制御部16は、ポインタ162を初期化して先頭に戻す。
演算部50は、先頭ポインタ161及びポインタ162を用いて、フォワード積和演算を繰り返し、トップ差分データ203を求めていく。
次に、図10を参照して、畳み込みバックワードの重み差分演算を実行する場合について説明する。図10は、畳み込みバックワードの重み差分演算時におけるレジスタファイルへのデータの格納状態を示す図である。図4では、演算処理装置1は、12行12列に要素データが並んだボトムデータ201及び5行5列に要素データが並んだトップ差分データ203を用いる。ボトムデータ201は、要素データb00〜b143を有する。また、トップ差分データ203は、ボトムデータ201及び5行5列の重みデータ202を用いて、ストライド数が2の場合に求められたものとし、要素データt00〜t24を有する。ここでは、重み差分データ204は、重みデータ202と同じ行列数を有するので、重み差分データ204についても重みデータ202と同様に、各要素データをw00という形式で表す。
さらに、本実施例では、重み差分データ204の行数の演算部50が用いられる。これにより、演算部50は、行方向への移動を行うことで、全てのボトムデータ201に対する畳み込みバックワード重み差分演算を行うことができる。例えば、図10では、5個の演算部50が用いられる。
第1データ制御部12は、畳み込みバックワードの重み差分演算で用いるボトムデータ201及びトップ差分データ203のサイズを予め記憶する。例えば、第1データ制御部12は、表示装置及び入力装置を用いて設定された設定値により、ボトムデータ201及びトップ差分データ203のサイズ(あるいはカーネル数)を取得して記憶する。
第1データ制御部12は、ボトムデータ201における先頭位置から1行分の要素データをメモリ11から読み込む。例えば、第1データ制御部12は、要素データb00〜b11のデータを読み込む。そして、第1データ制御部12は、要素データb00〜b11をボトムデータ格納用のレジスタファイル411に格納する。
また、第1データ制御部12は、ボトムデータ201における次の1行の要素データをメモリ11から読み込む。そして、第1データ制御部12は、ボトムデータ格納用のレジスタファイル412に読み込んだ要素データを格納する。例えば、第1データ制御部12は、要素データb12〜b23をボトムデータ格納用のレジスタファイル412に格納する。
第1データ制御部12は、重み差分データ204の行数、1行毎の要素データのメモリ11から読み込み及び異なるボトムデータ格納用のレジスタファイル411〜413(以降、これを単にレジスタファイル411,412,413とする。)への格納を繰り返す。例えば、第1データ制御部12は、要素データb48〜b59をレジスタファイル413に格納する。
また、第2データ制御部13は、トップ差分データ203における先頭位置から1行分の要素データをメモリ11から読み込む。例えば、第2データ制御部13は、トップ差分データ203の要素データt00〜t04をメモリ11から読み込む。そして、第2データ制御部13は、トップ差分データ格納用のレジスタファイル421〜423(以降、これを単にレジスタファイル421,422,423とする。)に要素データt00〜t04を格納する。
演算部51は、レジスタファイル411に格納された要素データb00〜b11とレジスタファイル421に格納された要素データt00〜t04とを用いて重み差分積和演算を行い、重み差分データ204の要素データw00〜w05の仮の値を算出する。そして、演算部51は、重み差分積和演算の結果を演算結果格納用のレジスタファイル431(以降これを単にレジスタファイル431とする。)の対応する重み差分データ204の仮の値として格納する。
演算部52〜53も、演算部51と同様の重み差分積和演算を行い、演算結果であるw06〜09,・・・,w20〜w24の仮の値をそれぞれ演算結果格納用のレジスタファイル432〜433(以降、これを単にレジスタファイル432,433とする。)に格納する。
次に、第1データ制御部12により、レジスタファイル411には、ストライド数分先の行の要素データb24〜b35が格納され、レジスタファイル412には、ストライド数分先の行の要素データb60〜b71が格納され、レジスタファイル413には、要素データb72〜b83が格納される。また、第2データ制御部13により、レジスタファイル421〜423には、要素データt05〜t09が格納される。
演算部51は、レジスタファイル411に格納された要素データb24〜b35とレジスタファイル421に格納された要素データt05〜t09とを用いてフォワード積和演算を行う。演算部51は、レジスタファイル431の対応する重み差分データ204の値をたしこんでいくことで、重み差分データ204の要素データw00〜w05の仮の値をレジスタファイル431に格納する。
演算部52〜53も、演算部51と同様の重み差分積和演算を行い、演算結果をたしこんでいくことで、演算結果として重み差分データ204の仮のであるw06〜09,・・・,w20〜w24の仮の値をそれぞれレジスタファイル432〜433に格納する。
このように、第1データ制御部12は、ボトムデータ201の先頭の行から順にストライド数ずつ先の行の要素データをレジスタファイル410に格納する。また、第2データ制御部13は、トップ差分データ203の先頭の行から順に1行ずつ要素データをレジスタファイル420に格納する。同様に、第1データ制御部12及び第2データ制御部13は、1行ずつずらした行を先頭にしてレジスタファイル411〜413及び421〜423に各要素データを格納する。そして、演算部51〜53は、レジスタファイル411〜413及び421〜423に格納された要素データを用いて重み差分演算を実行する。
ここで、図11及び12を参照して、レジスタファイル410及び420に格納される要素データの遷移について説明する。図11は、畳み込みバックワードの重み差分演算におけるストライド数が1の場合の格納される要素データの遷移を表す図である。また、図12は、畳み込みバックワードの重み差分演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。ここでは、演算部51〜53の3つが存在する場合で説明する。この場合も、12行12列のボトムデータ201及び5行5列の重みデータ202を用いて畳み込みフォワード演算を行い算出したトップ差分データ203を使用する。
ストライド数が1の場合、最初に、図11の状態451に示すように、レジスタファイル411には、要素データb00〜b11が格納される。また、レジスタファイル412には、要素データb12〜b23が格納される。また、レジスタファイル413には、要素データb24〜b35が格納される。また、レジスタファイル421〜423には、要素データt00〜t07が格納される。
次に、状態451の演算が終了すると、状態452に示すように、レジスタファイル411〜413には、状態431で格納されていた要素データの次の1行分の要素データが格納される。また、状態452に示すように、レジスタファイル421〜423には、状態431で格納されていた要素データの次の1行分の要素データが格納される。このように、カーネル数で指定された単位で取り込むボトムデータを同じ行内においてストライド数1でずらせる回数が最大8回なので、状態453〜458においても順次、前の状態で格納されていた要素データの次の1行分の要素データがレジスタファイル411〜413及び421〜423に格納される。
そして、状態451〜458における演算部51〜53の演算が終了した時点で、ボトムデータ201の先頭にトップ差分データ203の先頭を合わせて配置した状態から行方向に順次移動した場合の畳み込みバックワードの重み差分演算が完了する。ただし、状態451〜458の演算では、w15〜w24を算出する畳み込みバックワードの重み差分演算が行われていない。そこで、演算処理装置1は、畳み込みバックワードの重み差分演算を全て完了するには、先頭行がb36〜b47の行に重なるようにトップ差分データ203を移動させて、行方向にトップ差分データ203を移動させながら畳み込みバックワードの重み差分演算を行う処理を行う。
また、ストライド数が2の場合、最初に、図12の状態461に示すように、レジスタファイル411には、要素データb00〜b11が格納される。また、レジスタファイル412には、要素データb12〜b23が格納される。また、レジスタファイル413には、要素データb24〜b35が格納される。また、レジスタファイル421〜423には、カーネル数で指定された単位の要素データt00〜t04が格納される。
次に、状態461の演算が終了すると、状態462に示すように、レジスタファイル411〜413には、状態461で格納されていた要素データのストライド数分先の行の要素データが格納される。すなわち、レジスタファイル411には、状態461でのレジスタファイル413に格納されていた要素データが格納される。また、状態462のように、レジスタファイル421〜423には、状態461で格納されていた要素データの次の行の要素データt05〜t09が格納される。
ストライド数が2の場合に、カーネル数で指定された単位で取り込むボトムデータ201を同じ行内においてずらせる最大数が5回なので、状態463〜465においても順次、1つ前の状態で格納されていた要素データのストライド数分先の1行分の要素データがレジスタファイル411〜413に格納される。また、状態463〜465のように、レジスタファイル421〜423には、1つ前の状態で格納されていた要素データの次の行の要素データが格納される。
そして、状態461〜465における演算部51〜53の演算が終了した時点で、重み差分データ204の要素データw00〜w04,w05〜w09及びw10〜w14を含む3行分の畳み込みバックワードの重み差分演算が完了する。すなわち、トップ差分データ203の要素データt15〜t19及びt20〜t24を含む2行分の演算が未だ完了していない。そこで、演算処理装置1は、畳み込みフォワード演算を全て完了するには、ボトムデータ201の4及び5行目を先頭とする畳み込みフォワード演算を行う処理を行う。
次に、図13〜15を参照して、演算部50による重み差分積和演算の詳細について説明する。図13は、畳み込みバックワードの重み差分演算における最初の状態を表す図である。図14は、レジスタファイルに格納された1行分の要素データにおける最後の重み差分積和演算を行う状態を表す図である。図15は、次のストライド数分の行に移動した状態を表す図である。ここでは、12行12列のボトムデータ201及び5行5列の重みデータ202を使用し、ストライド数が1の場合で説明する。すなわち、トップ差分データ203は、8行8列に並んだ要素データt00〜t63を有する。
まず、畳み込みフォワード演算を開始する場合、レジスタファイル410に要素データb00〜b11が格納される。また、レジスタファイル420にトップ差分データ203の要素データt00〜t07が格納される。
ポインタ制御部16は、レジスタファイル410に格納された最初の要素データb00にレジスタファイル410における先頭ポインタ163を設定する。また、ポインタ制御部16は、レジスタファイル420におけるトップ差分データ203の先頭の要素データt00に、レジスタファイル420におけるポインタ164を設定する。
演算部50は、点線631で囲われた部分の、レジスタファイル410の先頭ポインタ163の位置からカーネル数の要素データb00〜b04を取得する。また、演算部50は、レジスタファイル420のポインタ164が指す要素データt00を取得する。そして、演算部50は、要素データb00〜b04と要素データt00をそれぞれ乗算する。次に、演算部50は、レジスタファイル430に格納された重み差分データ204の要素データw00〜w04の値を取得する。ここで、要素データw00〜w04の初期値は0である。そして、演算部50は、各乗算結果とレジスタファイル430に格納された要素データw00〜w04の値を合計し、レジスタファイル430の要素データw00〜w04を示す位置に格納する。
その後、ポインタ制御部16は、先頭ポインタ163のストライド数分の移動を7回繰り返し、図14の状態とする。また、ポインタ制御部16は、ポインタ164の1つずつの移動を7回繰り返し、図14の状態とする。
図14の状態で、演算部50は、点線631で囲われた部分の、レジスタファイル410の先頭ポインタ163の位置からカーネル数の要素データb07〜b11を取得する。また、演算部50は、レジスタファイル420のポインタ164が指す要素データt07を取得する。そして、演算部50は、要素データb07〜b11と要素データt07をそれぞれ乗算する。次に、演算部50は、レジスタファイル430に格納された重みデータ202の要素データw00〜w04の値を取得する。そして、演算部50は、各乗算結果とレジスタファイル430に格納された要素データw00〜w04の値を合計し、レジスタファイル430の要素データw00〜w04を示す位置に格納する。
図14の状態での重み差分積和演算が完了すると、レジスタファイル410に、新たに次のストライド数先の行の要素データb12〜b23が格納される。また、レジスタファイル420に次の行のトップ差分データ203の要素データt08〜t15が格納される。
そして、ポインタ制御部16は、先頭ポインタ161を初期化し、図15に示すように、レジスタファイル410に格納された最初の要素データb12に先頭ポインタ163を設定する。また、ポインタ制御部16は、ポインタ164を初期化し、レジスタファイル430におけるトップ差分データ203の先頭の要素データt08にポインタ164を設定する。
演算部50は、点線633で囲われた部分の、レジスタファイル410の先頭ポインタ163の位置からカーネル数の要素データb12〜b16を取得する。また、演算部50は、レジスタファイル420のポインタ164が指す要素データt08を取得する。そして、演算部50は、要素データb12〜b16と要素データt08をそれぞれ乗算する。次に、演算部50は、レジスタファイル430に格納された重みデータ202の要素データw00〜w04の値を取得する。そして、演算部50は、各乗算結果とレジスタファイル430に格納された要素データw00〜w04の値を合計し、レジスタファイル430の要素データw00〜w04を示す位置に格納する。
このように、ポインタ制御部16は、先頭ポインタ163をレジスタファイル410の先頭から1回の演算が完了する毎に、1スライド数分ずつボトムデータ201の列方向の移動数回スライドさせる。その後、ポインタ制御部16は、最後尾に達すると、先頭ポインタ163を初期化して先頭に戻す。また、ポインタ制御部16は、ポインタ164をレジスタファイル430の先頭から1回の演算が完了する毎に、1つずつトップ差分データ203の列方向の移動数回スライドさせる。その後、ポインタ164が最後尾に達すると、ポインタ制御部16は、ポインタ164を初期化して先頭に戻す。
演算部50は、先頭ポインタ163及びポインタ164を用いて、重み差分積和演算を繰り返して重み差分データ204を順次求める。
次に、図16を参照して、畳み込みバックワードのボトム差分演算を実行する場合について説明する。図16は、畳み込みバックワードのボトム差分演算時におけるレジスタファイルへのデータの格納状態を示す図である。図16では、演算処理装置1は、5行5列に要素データが並んだトップ差分データ203及び5行5列に要素データが並んだ重みデータ202を用いる。重みデータ202は、要素データw00〜w24を有する。また、トップ差分データ203は、12行12列のボトムデータ201及び重みデータ202を用いて、ストライド2の場合に求められたものであり、要素データt00〜t24を有する。
さらに、本実施例では、トップ差分データ203の行数の演算部50が用いられる。これにより、演算部50は、トップ差分データ格納用のレジスタファイル410(以降、これを単にレジスタファイル410とする。)のデータの入れ替えを行わずに、全てのボトムデータ201に対する畳み込みバックワードのボトム差分演算を行うことができる。例えば、図16では、5個の演算部50が用いられる。
第1データ制御部12は、畳み込みバックワードの重み差分演算で用いるトップ差分データ203、重みデータ202及びボトムデータ201のサイズを予め記憶する。例えば、第1データ制御部12は、予め表示装置及び入力装置を用いて設定された設定値の入力により、トップ差分データ203、重みデータ202及びボトムデータ201のサイズ及び重みデータ202のサイズ(あるいはカーネル数)を取得して記憶する。
第1データ制御部12は、トップ差分データ203における先頭位置から1行分の要素データをメモリ11から読み込む。例えば、第1データ制御部12は、要素データt00〜t04のデータを読み込む。そして、第1データ制御部12は、要素データt00〜t04をトップ差分データ格納用のレジスタファイル411に格納する。
また、第1データ制御部12は、トップ差分データ203における次の1行の要素データをメモリ11から読み込む。例えば、第1データ制御部12は、要素データt05〜t09のデータを読み込む。そして、第1データ制御部12は、要素データt05〜t09をトップ差分データ格納用のレジスタファイル412に格納する。
第1データ制御部12は、トップ差分データ203の行数、1行毎の要素データのメモリ11から読み込み及び異なるトップ差分データ格納用のレジスタファイル411〜413(以降、これを単にレジスタファイル411,412,413とする。)への格納を繰り返す。例えば、第1データ制御部12は、要素データb20〜b24をトップ差分データ格納用のレジスタファイル413に格納する。
また、第2データ制御部13は、重みデータ202における先頭位置から1行分の要素データをメモリ11から読み込む。例えば、第2データ制御部13は、要素データw00〜w04をメモリ11から読み込む。そして、第2データ制御部13は、重みデータ格納用のレジスタファイル421〜423(以降、これを単にレジスタファイル421,422,423とする。)に要素データw00〜w04を格納する。
演算部51は、レジスタファイル410に格納された要素データt00〜t04とレジスタファイル420に格納された要素データw00〜w04とを用いてボトム差分積和演算を行い、重み差分データ204の要素データw00〜w05の仮の値を算出する。そして、演算部51は、演算結果格納用のレジスタファイル430(以降、これを単にレジスタファイル430とする。)にボトム差分データ205の要素データb01〜b23の値を格納する。
演算部52〜53も、演算部51と同様のボトム差分積和演算を行い、演算結果である要素データb24〜b47,・・・,b107〜b119の仮の値をそれぞれ演算結果格納用のレジスタファイル432〜433(以降、これを単にレジスタファイル432,433とする。)に格納する。
次に、レジスタファイル411〜413は、保持するデータを維持する。また、第2データ制御部13により、レジスタファイル421〜423には、要素データw05〜w09が格納される。
演算部51は、レジスタファイル411に格納された要素データt01〜t05とレジスタファイル421に格納された要素データw05〜w09とを用いてボトム差分積和演算を行う。演算部51は、レジスタファイル431のポインタが示す位置にボトム差分データ205の値をたしこんでいくことで、ボトム差分データ205の要素データb48〜b71の値をレジスタファイル431に格納する。
演算部52〜53も、演算部51と同様の重み差分積和演算を行い、演算結果をレジスタファイル432〜433の値にたしこんでいく。そして、レジスタファイル420に重みデータ202の最後の行の要素データw20〜w24が格納された状態で演算を行った時点で、演算部51〜53は、ボトム差分積和演算を終了し、各ボトム差分データ205の値を確定する。
このように、第1データ制御部12は、トップ差分データ203の先頭の行から順に1行ずつ要素データをレジスタファイル411〜413に格納する。また、第2データ制御部13は、トップ差分データ203の先頭の行から順に演算毎に1行ずつずらしながら要素データをレジスタファイル421〜423に格納する。そして、演算部51〜53は、カーネル数の演算を行うと演算を終了する。
ここで、図17及び18を参照して、レジスタファイル410及び420に格納される要素データの遷移について説明する。図17は、畳み込みバックワードのボトム差分演算におけるストライド数が1の場合の格納される要素データの遷移を表す図である。また、図18は、畳み込みバックワードのボトム差分演算におけるストライド数が2の場合の格納される要素データの遷移を表す図である。ここでは、演算部51〜53の3つが存在する場合で説明する。また、この場合も、12行12列のボトムデータ201、5行5列の重みデータ202及びそれらを用いたトップ差分データ203を用いる。
3を使用する。
ストライド数が1の場合、最初に、図17の状態471に示すように、レジスタファイル411には、要素データt00〜t07が格納される。また、レジスタファイル412には、要素データt08〜t15が格納される。また、レジスタファイル413には、要素データt16〜t23が格納される。また、レジスタファイル421〜423には、要素データw00〜w04が格納される。レジスタファイル421〜423には同じ要素データが格納されるので、図17では、レジスタファイル421を例に記載した。
次に、状態471の演算が終了すると、状態472に示すように、レジスタファイル411〜413には、状態471で格納されていた要素データがそのまま保持される。また、状態472に示すように、レジスタファイル421〜423には、状態471で格納されていた要素データの次の1行分の要素データが格納される。このように、状態473〜475においてもレジスタファイル411〜413には、状態471で格納されていた要素データがそのまま保持される。また、レジスタファイル421〜423には、前の状態で格納されていた要素データの次の1行分の要素データが順次格納される。
状態471〜475における演算部51〜53の演算が終了した時点では、畳み込みバックワードのボトム差分演算は途中である。実際には、トップ差分データ203の行数と同じ数の演算部50を用いることで、カーネル数の演算を行うと畳み込みバックワードのボトム差分演算が終了する。すなわち、図17のように3個の演算部51〜53を用いた場合、状態471〜475の後に、第1データ制御部12及び第2データ制御部13は、トップ差分データ203の行数と同じ数の演算部50を用いた場合と同様の残りの演算を行う。
また、ストライド数が2の場合、図18の状態481に示すように、レジスタファイル410にはストライド数が1の場合と同じ値が格納される。また、レジスタファイル420には、要素データw00〜w04及びw05〜w09が格納される。
そして、演算部51は、状態481における演算結果を、レジスタファイル431の要素データb00〜b23の位置に足し込む。具体的には、演算部51は、要素データt0〜t7と要素データw00〜w04を用いた演算結果を要素データb00〜b11の位置に足し込む。また、演算部51は、要素データt00〜t07と要素データw05〜w09を用いた演算結果を要素データb12〜b23の位置に足し込む。
また、演算部52は、状態481における演算結果を、レジスタファイル431の要素データb24〜b47の位置に足し込む。具体的には、演算部52は、要素データt08〜t15と要素データw00〜w04を用いた演算結果を要素データb24〜b35の位置に足し込む。また、演算部52は、要素データt08〜t15と要素データw05〜w09を用いた演算結果を要素データb36〜b47の位置に足し込む。
また、演算部53は、状態481における演算結果を、レジスタファイル433の要素データb48〜b71の位置にたしこむ。具体的には、演算部51は、要素データt0〜t7と要素データw00〜w04を用いた演算結果を要素データb00〜b11の位置に足し込む。また、演算部51は、要素データt00〜t07と要素データw05〜w09を用いた演算結果を要素データb12〜b23の位置に足し込む。
次に、状態481の演算が終了すると、状態482に示すように、演算部51の演算結果をたしこむ位置が、レジスタファイル431には、状態481におけるレジスタファイル432の要素データb24〜b47が移される。また、レジスタファイル432には、状態481におけるレジスタファイル433の要素データb48〜b71が移される。さらに、レジスタファイル433には、新たに、要素データb72〜b95が格納される。ただし、要素データb00〜b143の初期値はいずれも0である。
状態483〜483においても順次、1つ前の状態でレジスタファイル432に格納されていた要素データがレジスタファイル431に移され、1つ前の状態でレジスタファイル433に格納されていた要素データがレジスタファイル432に移される。さらに、レジスタファイル433には、新たにストライド数の行分の要素データが格納される。そして、演算部51〜53は、その時点でのレジスタファイル431〜433の対応する値に要素データに演算結果を足し込む。
ここで、状態481〜483における演算部51〜53の演算が終了した時点では、畳み込みバックワードのボトム差分演算は途中である。実際には、トップ差分データ203の行数と同じ数の演算部50を用いることで、カーネル数の演算を行うと畳み込みバックワードのボトム差分演算が終了する。すなわち、図18のように3個の演算部51〜53を用いた場合、状態481〜483に加えて、演算部51〜53、第1データ制御部12及び第2データ制御部13は、トップ差分データ203の行数と同じ数の演算部50を用いた場合と同様の残りの演算を行う。
次に、図19〜21を参照して、演算部50によるボトム差分積和演算の詳細について説明する。図19は、畳み込みバックワードのボトム差分演算における最初の状態を表す図である。図20は、ボトムデータの1行分の最後のボトム差分積和演算を行う状態を表す図である。図21は、ボトムデータの1行分において用いる要素データを説明するための図である。ここでは、ボトムデータ201及び重みデータ202を使用し、ストライド数が1の場合で説明する。すなわち、トップ差分データ203は、8行8列に並んだ要素データt00〜t63を有する。
まず、畳み込みバックワードのボトム差分演算を開始する場合、レジスタファイル410にトップ差分データ203の要素データt00〜t07が格納される。また、レジスタファイル420に重みデータ202の要素データw00〜w04が格納される。
ポインタ制御部16は、レジスタファイル430に格納された最初の要素データb00にレジスタファイル430における先頭ポインタ165を設定する。また、ポインタ制御部16は、レジスタファイル410におけるトップ差分データ203の先頭の要素データt00に、レジスタファイル410におけるポインタ164を設定する。
演算部50は、レジスタファイル410のポインタ164が指す要素データt00を取得する。さらに、演算部50は、レジスタファイル420に格納された要素データw00〜w04を取得する。また、演算部50は、点線651で囲われた部分の、レジスタファイル430の先頭ポインタ165の位置からカーネル数の要素データb00〜b04を取得する。ここで、要素データb00〜b04の初期値は0である。そして、演算部50は、要素データw00〜w04と要素データt00をそれぞれ乗算する。そして、演算部50は、各乗算結果をレジスタファイル430の要素データb00〜b04の値に加算し、レジスタファイル430の要素データb00〜b04を示す位置に格納する。
その後、ポインタ制御部16は、先頭ポインタ165のストライド数分の移動を7回繰り返し、図20の状態とする。また、ポインタ制御部16は、ポインタ164の1つずつの移動を7回繰り返し、図20の状態とする。
図20の状態で、演算部50は、レジスタファイル410のポインタ164が指す要素データt07を取得する。さらに、演算部50は、レジスタファイル420に格納された要素データw00〜w04を取得する。また、演算部50は、点線652で囲われた部分の、レジスタファイル430の先頭ポインタ165の位置からカーネル数の要素データb07〜b11を取得する。ここで、要素データb07〜b11の初期値は0である。そして、演算部50は、要素データw00〜w04と要素データt07をそれぞれ乗算する。そして、演算部50は、各乗算結果をレジスタファイル430の要素データb07〜b11の値に加算し、レジスタファイル430の要素データb07〜b11を示す位置に格納する。
図20の状態でのボトム差分積和演算が完了すると、レジスタファイル420に、新たに次の行の要素データw05〜w09が格納される。
そして、ポインタ制御部16は、先頭ポインタ165を初期化し、レジスタファイル430に格納された最初の要素データb12に先頭ポインタ163を設定する。また、ポインタ制御部16は、ポインタ164を初期化し、レジスタファイル410におけるトップ差分データ203の先頭の要素データt00にポインタ164を設定する。その後、演算部50は、同様のボトム差分演算を繰り返し、先頭ポインタ165で指定された要素データの格納位置に演算結果をたしこむ。
このように、ポインタ制御部16は、先頭ポインタ165をレジスタファイル430の先頭から1回の演算が完了する毎に、スライド数分ずつボトム差分データ205の列方向の移動数回スライドさせる。また、ポインタ制御部16は、ポインタ166をレジスタファイル410の先頭から1回の演算が完了する毎に、1つずつ最大移動数回スライドさせる。その後、ポインタ166が最後尾に達すると、ポインタ制御部16は、ポインタ164に初期化して先頭に戻す。
演算部50は、先頭ポインタ165及びポインタ166を用いて、ボトム差分積和演算を繰り返してボトム差分データ205を順次求める。
演算部50は、ボトム差分データ205の1行を求めるに当たり、列各行毎に用いる重みデータ202及びトップ差分データ203の行の数が異なる。
図21は、ボトム差分データの上端の1行を算出する場合の例である。ボトム差分データ205の要素データb00〜b11を算出する場合、要素データ00〜w04と要素データt00〜t07を用いた1行分の演算結果が用いられる。また、ボトム差分データ205の要素データb12〜b23の値の算出には、要素データ00〜w04と要素データt08〜t15を用いた1行分の演算結果と要素データ05〜w09と要素データt00〜t07を用いた1行分の演算結果とが用いられる。また、ボトム差分データ205の要素データb24〜35の値の算出には、図21で示す3行分の演算結果が用いられる。図21のボトム差分データ205の各行の先頭の列である欄172に記載した数字は、その行の要素データを算出するのに用いる行の数である。ここで、ボトム差分データ205の各列をB_L0〜B_L11と表す。そして、各列の要素データの算出に用いる行の数をまとめると表171のように表される。のこのように、行の先頭から列向に向けて要素データの算出に用いる行は一旦増えその後最後尾に向けて少なくなる。
次に、図22を用いて畳み込みフォワード演算及び畳み込みバックワード演算を用いた深層学習の全体的な処理の流れを説明する。図22は、深層学習処理のフローチャートである。
例えば、図4などで示した構成の番号を用いて説明すると、第1データ制御部12は、指定された先頭行からストライド数の行分のボトムデータ201の要素データを取得する。また、第2データ制御部13は、指定された先頭行からストライド数の行分の重みデータ202の要素データを取得する(ステップS1)。そして、第1データ制御部12は、取得した要素データをレジスタファイル410に格納する。また、第2データ制御部13は、取得した要素データをレジスタファイル420に格納する。
演算部50は、レジスタファイル410及び420に格納された要素データを用いて、ストライド数の行分のボトムデータ201に対するフォワード積和演算を実施する(ステップS2)。
演算部50は、ボトムデータ201に演算を行っていない残りの行があるか否かを判定する(ステップS3)。残りの行がある場合(ステップS3:肯定)、第1データ制御部12及び第2データ制御部13は、それぞれボトムデータ201の先頭行の指定をストライド数先の行へ移動する(ステップS4)。
これに対して、残りの行が無い場合(ステップS3:否定)、演算部50は、出力データ206の算出を終了する。次に、演算部50は、トップ差分データ203を取得する(ステップS5)。ここで、演算部50は、最終層であれば算出した出力データ206と期待値207との差分を求めることでトップ差分データ203を取得する。また、他の層であれば、演算部50は、1つ後の層で算出されたボトム差分データ205を自層のトップ差分データ203として取得する。
次に、第1データ制御部12は、指定された先頭行からストライド数の行分のボトムデータ201の要素データを取得する。また、第2データ制御部13は、指定された先頭行から1行分のトップ差分データ203の要素データを取得する(ステップS6)。そして、第1データ制御部12は、取得した要素データをレジスタファイル410に格納する。また、第2データ制御部13は、取得した要素データをレジスタファイル420に格納する。
演算部50は、レジスタファイル410及び420に格納された要素データを用いて、1行分のボトムデータ201に対する重み差分積和演算を実施する(ステップS7)。
演算部50は、ボトムデータ201に演算を行っていない残りの行があるか否かを判定する(ステップS8)。残りの行がある場合(ステップS8:肯定)、第1データ制御部12は、ボトムデータ201の先頭行の指定をストライド数先の行へ移動する(ステップS9)。
これに対して、残りの行が無い場合(ステップS8:否定)、第1データ制御部12は、指定された先頭行から1行分のトップ差分データ203の要素データを取得する。また、第2データ制御部13は、指定された先頭行からストライド数の行分の重みデータ202の要素データを取得する(ステップS10)。そして、第1データ制御部12は、取得した要素データをレジスタファイル410に格納する。また、第2データ制御部13は、取得した要素データをレジスタファイル420に格納する。
演算部50は、レジスタファイル410及び420に格納された要素データを用いて、1行分のトップ差分データ203に対するボトム差分積和演算を実施する(ステップS11)。
演算部50は、カーネル数の演算が終了したか否かを判定する(ステップS12)。カーネル数の演算が終了していない場合(ステップS12:否定)、第1データ制御部12は、トップ差分データ203の1先の行へ先頭行の指定を移動する(ステップS13)。
これに対して、カーネル数の演算処理が終了している場合(ステップS12:肯定)、演算部50は、畳み込みフィードバック演算、並びに、畳み込みバックワードの重み差分演算及びボトム差分演算を終了する。
次に、図23を参照して、畳み込みフォワード演算処理の詳細な流れについて説明する。図23は、畳み込みフォワード演算処理のフローチャートである。ここで、図23のフローチャートで示す畳み込みフィードバック演算処理は、図22におけるステップS1〜S4までの処理の詳細の一例にあたる。
例えば、図4で示した構成の番号を用いて説明すると、第1データ制御部12、第2データ制御部13、演算部50及びポインタ制御部16は、カーネルサイズ(あるいはカーネル数)、ストライド数及びボトムデータ201の先頭行の指定を受ける(ステップS101)。
ポインタ制御部16は、ボトムデータ格納用のレジスタファイル410(以降、これを単にレジスタファイル410とする。)の先頭ポインタ161及び重みデータ格納用のレジスタファイル420(以降、これを単にレジスタファイル420とする。)のポインタ162を初期化する(ステップS102)。
第1データ制御部12は、指定された先頭行からストライド数の行分のボトムデータ201の要素データをメモリ11から読み出し、レジスタファイル410に格納する。また、第2データ制御部13は、指定された先頭行からストライド数の行分のボトムデータ201の要素データをメモリ11から読み出し、レジスタファイル420に格納する(ステップS103)。
演算部50は、レジスタファイル410の先頭ポインタ161からカーネル数のボトムデータ201の要素データを読み込む。また、演算部50は、レジスタファイル420から重みデータ202の要素データを読み込む(ステップS104)。
演算部50は、対応するボトムデータ201の要素データと重みデータ202の要素データとを乗算し、乗算結果を合計する(ステップS105)。
次に、演算部50は、演算結果格納用のレジスタファイル430(以降、これを単にレジスタファイル430とする。)のポインタ162が指す値を取得する(ステップS106)。
次に、演算部50は、取得した値に演算結果を加算し値を更新する(ステップS107)。
次に、演算部50は、演算結果格納用のレジスタファイル430(以降、これを単にレジスタファイル430とする。)のポインタ162が示す位置に加算結果を格納してポインタ162が示す値を更新する(ステップS108)。
そして、演算部50は、ボトムデータ201の指定された行に対する演算が終了したか否かを判定する(ステップS109)。ここで、指定された行とは、指定された先頭行からストライド数分の行である。
ボトムデータ201の指定された行に対する演算が終了していない場合(ステップS109:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタをストライド数分シフトする(ステップS110)。
さらに、ポインタ制御部16は、レジスタファイル430のポインタ162を1つシフトする(ステップS111)。その後、処理は、ステップS104へ戻る。
これに対して、ボトムデータ201の指定された行に対する演算が完了した場合(ステップS109:肯定)、演算部50は、ボトムデータ201の全ての行について演算が終了したか否かを判定する(ステップS112)。
演算を行っていない行がある場合(ステップS112:否定)、演算部50は、行分演算の完了を第1データ制御部12及び第2データ制御部13に通知する。第1データ制御部12及び第2データ制御部13は、それぞれボトムデータ201及び重みデータ202における現在の先頭行からストライド数分先の行を先頭行として指定する(ステップS113)。
これに対して、ボトムデータ201の全ての行について演算が終了した場合(ステップS112:肯定)、演算部50は、畳み込みフィードバック演算処理を終了する。
次に、図24を参照して、畳み込みバックワードの重み差分演算処理の詳細な流れについて説明する。図24は、畳み込みバックワードの重み差分演算処理のフローチャートである。ここで、図24のフローチャートで示す畳み込みバックワードの重み差分演算処理は、図22におけるステップS5〜S9までの処理の詳細の一例にあたる。
例えば、図10で示した構成の番号を用いて説明すると、第1データ制御部12、第2データ制御部13、演算部50及びポインタ制御部16は、カーネルサイズ(あるいはカーネル数)、ストライド数及びボトムデータ201の先頭行の指定を取得する(ステップS201)。
ポインタ制御部16は、ボトムデータ格納用のレジスタファイル410(以降、これを単にレジスタファイル410とする。)の先頭ポインタ163及びトップ差分データ格納用のレジスタファイル420(以降、これを単にレジスタファイル420とする。)のポインタ164を初期化する(ステップS202)。
第1データ制御部12は、指定された先頭行のボトムデータ201の要素データをメモリ11から読み出しレジスタファイル410に格納する。また、第2データ制御部13は、指定された先頭行のトップ差分データ203の要素データをメモリ11から読み出しレジスタファイル420に格納する(ステップS203)。
演算部50は、レジスタファイル410の先頭ポインタ163からカーネル数分のボトムデータ201の要素データを読み込む。また、演算部50は、レジスタファイル420のポインタ164が示すトップ差分データ203の1つの要素データを読み込む(ステップS204)。
次に、演算部50は、読み込んだボトムデータ201の要素データそれぞれに読み込んだトップ差分データ203を乗算し、乗算結果を取得する(ステップS205)。
次に、演算部50は、演算を行う最初の行がボトムデータ201の上から何行目の行かを判定する。そして、演算部50は、演算結果格納用のレジスタファイル430(以降、これを単にレジスタファイル430とする。)に重みデータ202の上から同じ行目の行の要素データの値を格納すると決定する。そして、演算部50は、重みデータ202の初期値として0を格納する。その後、演算部50は、レジスタファイル430から重みデータ202の値を取得する(ステップS206)。
そして、演算部50は、取得した重みデータ202の要素データの先頭から順に、加算に使用したボトムデータ201の要素データの順番にしたがい並べた演算結果を対応させ、対応する値を加算する(ステップS207)。
そして、演算部50は、加算した値を、レジスタファイル430の加算に使用した要素データが格納されていた位置に格納し直し更新する(ステップS208)。
そして、演算部50は、ボトムデータ201の指定された行に対する演算が完了したか否かを判定する(ステップS209)。
ボトムデータ201の指定された行に対する演算が完了していない場合(ステップS209:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタ163をストライド数分シフトする(ステップS210)。
さらに、ポインタ制御部16は、レジスタファイル420のポインタ164を1つシフトする(ステップS211)。その後、処理は、ステップS204へ戻る。
これに対して、ボトムデータ201の指定された行に対する演算が完了した場合(ステップS209:肯定)、演算部50は、ボトムデータ201の全ての行について演算が終了したか否かを判定する(ステップS212)。
演算を行っていない行がある場合(ステップS212:否定)、演算部50は、行分演算の完了を第1データ制御部12及び第2データ制御部13に通知する。第1データ制御部12は、ボトムデータ201における現在の先頭行からストライド数分先の行を先頭行として指定する。また、第2データ制御部13は、トップ差分データ203における現在の先頭行から1行先の行を先頭行として指定する(ステップS213)。
これに対して、ボトムデータ201の全ての行について演算が終了した場合(ステップS212:肯定)、演算部50は、畳み込みバックワードの重み差分演算処理を終了する。
次に、図25を参照して、畳み込みバックワードのボトム差分演算処理の詳細な流れについて説明する。図25は、畳み込みバックワードのボトム差分演算処理のフローチャートである。ここで、図25のフローチャートで示す畳み込みバックワードのボトム差分演算処理は、図22におけるステップS10〜S12までの処理の詳細の一例にあたる。
例えば、図16で示した構成の番号を用いて説明すると、第1データ制御部12、第2データ制御部13、演算部50及びポインタ制御部16は、カーネルサイズ(あるいはカーネル数)、ストライド数及びボトムデータ201の先頭行の指定を取得する(ステップS301)。
ポインタ制御部16は、レジスタファイル410のポインタ166及びレジスタファイル430の先頭ポインタ165を初期化する(ステップS302)。
第1データ制御部12は、指定された先頭行のトップ差分データ203の要素データをメモリ11から読み出しレジスタファイル410に格納する。また、第2データ制御部13は、指定された先頭行からストライド数の行分の重みデータ202の要素データをメモリ11から読み出しレジスタファイル420に格納する(ステップS303)。
演算部50は、レジスタファイル410のポインタ166が示すトップ差分データ203の要素データを読み込む。また、演算部50は、レジスタファイル420に格納された重み差分データ204の要素データを読み込む(ステップS304)。
次に、演算部50は、読み込んだ重み差分データ204の要素データそれぞれに読み込んだトップ差分データ403を乗算し、乗算結果を取得する(ステップS305)。
次に、演算部50は、レジスタファイル430の先頭ポインタ165が示す位置からカーネル数分のボトム差分データ205の要素データの値を取得する(ステップS306)。
そして、演算部50は、取得したボトム差分データ205の先頭から順に、使用した重みデータ202の要素データの順番で並べた演算結果を対応させ、対応する値を加算する(ステップS307)。この時、演算結果は、ボトム差分データ205のストライド数の行分生成される。
そして、演算部50は、加算結果であるボトム差分データ205のストライド数の行分のボトム差分データ205を、レジスタファイル430の加算に使用した要素データが格納されていた位置に格納することで更新する(ステップS308)。
そして、演算部50は、トップ差分データ203の指定された行に対する演算が完了したか否かを判定する(ステップS309)。
トップ差分データ203の指定された行に対する演算が完了していない場合(ステップS309:否定)、ポインタ制御部16は、レジスタファイル410の先頭ポインタ166を1つシフトする(ステップS310)。
さらに、ポインタ制御部16は、レジスタファイル430のポインタ165をストライド数分シフトする(ステップS311)。その後、処理は、ステップS304へ戻る。
これに対して、トップ差分データ203の指定された行に対する演算が完了した場合(ステップS309:肯定)、演算部50は、カーネル数分の演算が終了したか否かを判定する(ステップS312)。
カーネル数分の演算を行っていない場合(ステップS312:否定)、演算部50は、行分演算の完了を第1データ制御部12及び第2データ制御部13に通知する。第1データ制御部12は、ボトムデータ201における現在の先頭行の次の行を先頭行として指定する。また、第2データ制御部13は、トップ差分データ203における現在の先頭行の次の行を先頭行として指定する(ステップS313)。
これに対して、カーネル数分の演算が終了した場合(ステップS312:肯定)、演算部50は、畳み込みバックワードのボトム差分演算処理を終了する。
以上に説明したように、本実施例に係る演算処理装置は、演算に使用する行列に並んだデータの1行ずつの演算をまとめて行い、その演算結果を用いて行列に並んだデータ同士の演算を行う。そして各演算部は、異なる行の演算を行うため、同じデータを同時に用いることはなくなる。そのため、データの読み出し時のコンフリクトを回避でき、またデータの複製を保持しなくても良くなる。さらに、使用する行をずらしながら演算を行っていくため、同じ行を使用する回数を低減でき、効率よく入力データを使用することができる。したがって、コストの増加を抑えつつ演算処理速度を向上させることができる。
図26は、実施例2に係る演算処理装置のブロック図である。本実施例に係る演算処理装置1は、実施例1の各部に加えて、クロスバスイッチ17が、レジスタファイル410,420及び430と演算部50との間に設けられる。以下の説明では、実施例1と同様の各部の機能については説明を省略する。
クロスバスイッチ17は、レジスタファイル411〜413,421〜423及び431〜433と演算部51〜53とを結ぶ経路を切り替えるスイッチである。例えば、クロスバスイッチ17は、演算部51を、レジスタファイル411〜413,421〜423及び431〜433の何れとも接続することができる。
畳み込みフォワード演算においてストライド数が1の場合、レジスタファイル411〜413に格納された要素データのうちいくつかは、次の行分演算において、他の演算部50が用いる。そこで、クロスバスイッチ17は、次の演算で用いることができる要素データが格納されたレジスタファイル410がある場合、次の演算でその要素データを用いる演算部50とそのレジスタファイル410とを接続するように経路を切り替える。
例えば、図5のようにデータを格納してストライド数が1の畳み込みフォワード演算を行う場合、状態434でレジスタファイル412に格納されていた要素データを状態435では、演算部51が使用する。そこで、クロスバスイッチ17は、状態434の状態から、演算部51をレジスタファイル412に接続し、演算部52をレジスタファイル413に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル411に接続する。この場合、第1データ制御部12は、レジスタファイル411に、新たに要素データb36〜b47を格納する。これにより、演算部51〜53は、状態436の場合と同様の要素データにアクセスできる。
次の演算、すなわち、図5の実施例1における状態436にあたる演算を行う場合、クロスバスイッチ17は、演算部51をレジスタファイル413に接続し、演算部52をレジスタファイル411に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル412に接続する。この場合、第1データ制御部12は、レジスタファイル412に、新たに要素データb48〜b59を格納する。
このように、クロスバスイッチ17は、演算毎に次の演算で使用する要素データが格納されたレジスタファイル410に演算部50が接続するように経路を切り替えていく。そして、第1データ制御部12は、演算に用いなくなった要素データが格納されたレジスタファイル410のデータを書き換える。
また、図6のようにデータを格納してストライド数が2の畳み込みフォワード演算を行う場合、クロスバスイッチ17は、状態441の状態から、演算部51をレジスタファイル412に接続し、演算部52をレジスタファイル413に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル411に接続する。この場合、第1データ制御部12は、レジスタファイル411に、新たに要素データb72〜b95を格納する。これにより、演算部51〜53は、状態442と同じ状態の要素データにアクセスできる。
次の演算、すなわち、図6の実施例1における状態443にあたる演算を行う場合、クロスバスイッチ17は、演算部51をレジスタファイル413に接続し、演算部52をレジスタファイル411に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル412に接続する。この場合、第1データ制御部12は、レジスタファイル412に、新たに要素データb98〜b107を格納する。また、演算部51及び52は、接続先のレジスタファイル410に格納された要素データの半分を用いる。
また、畳み込みバックワードの重み差分演算においてストライド数が1の場合においても、レジスタファイル411〜413に格納された要素データのうちいくつかは、次の行分演算において、他の演算部50が用いる。そこで、クロスバスイッチ17は、次の演算で用いることができる要素データが格納されたレジスタファイル410がある場合、次の演算でその要素データを用いる演算部50とそのレジスタファイル410とを接続するように経路を切り替える。
例えば、図11のようにデータを格納してストライド数が1の畳み込みバックワードの重み差分演算を行う場合、クロスバスイッチ17は、状態451の状態から、演算部51をレジスタファイル412に接続し、演算部52をレジスタファイル413に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル411に接続する。この場合、第1データ制御部12は、レジスタファイル411に、新たに要素データb36〜b47を格納する。これにより、演算部51〜53は、状態452の場合と同様の要素データにアクセスできる。
次の演算、すなわち、図11の実施例1における状態453にあたる演算を行う場合、クロスバスイッチ17は、演算部51をレジスタファイル413に接続し、演算部52をレジスタファイル411に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル412に接続する。この場合、第1データ制御部12は、レジスタファイル412に、新たに要素データb48〜b59を格納する。
このように、クロスバスイッチ17は、演算毎に次の演算で使用する要素データが格納されたレジスタファイル410に演算部50が接続するように経路を切り替えていく。そして、第1データ制御部12は、演算に用いなくなった要素データが格納されたレジスタファイル410のデータを書き換える。
また、図12のようにデータを格納してストライド数が2の畳み込みバックワードの重み差分演算を行う場合、クロスバスイッチ17は、状態461の状態から、演算部51をレジスタファイル413に接続する。また、クロスバスイッチ17は、演算部52及び53をそれぞれレジスタファイル411及び412に接続し、新たにデータを格納する。
次の演算、すなわち、図12の実施例1における状態443にあたる演算を行う場合、クロスバスイッチ17は、演算部51をレジスタファイル412に接続し、演算部52及び53をレジスタファイル413及び411に接続する。第1データ制御部12は、レジスタファイル413及び411に、新たに要素データを格納する。
また、畳み込みバックワードのボトム差分演算でのストライド数が1の場合、レジスタファイル431〜433に格納された要素データのうちいくつかは、次の行分演算において、他の演算部50が用いる。そこで、クロスバスイッチ17は、次の演算で用いることができる要素データが格納されたレジスタファイル430がある場合、次の演算でその要素データを用いる演算部50とそのレジスタファイル430とを接続するように経路を切り替える。
例えば、図17のようにデータを格納してストライド数が1の畳み込みバックワードのボトム差分演算を行う場合、クロスバスイッチ17は、状態471の状態から、演算部51をレジスタファイル432に接続し、演算部52をレジスタファイル433に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル431に接続する。この場合、レジスタファイル431には、ボトム差分データ205の要素データb36〜b47が格納される。これにより、演算部51〜53は、状態472の場合と同様の要素データにアクセスできる。
次の演算、すなわち、図17の実施例1における状態472にあたる演算を行う場合、クロスバスイッチ17は、演算部51をレジスタファイル433に接続し、演算部52をレジスタファイル431に接続する。さらに、クロスバスイッチ17は、演算部53をレジスタファイル432に接続する。この場合、レジスタファイル432に、ボトム差分データ205の要素データb48〜b59が格納される。
このように、クロスバスイッチ17は、演算毎に次の演算で使用するレジスタファイル430に演算部50が接続するように経路を切り替えていく。畳み込みバックワードのボトム差分演算の場合、クロスバスイッチ17は、ストライド数が2の場合もストライド数が1の場合と同様の切り替えを行う。
以上に説明したように、本実施例に係る演算処理装置は、クロスバスイッチによって1つのレジスタファイルに格納された要素データを異なる演算部で使いまわすことが可能となる。これにより、レジスタファイルへの書き込みの回数を軽減することができ、コストの増加を抑えつつ演算処理速度を向上させることができる。
図27は、実施例3に係る演算処理装置によるボトムデータ及びトップデータの指定を説明するための図である。以下では、複数の演算部50によるボトムデータ201及びトップ差分データ203の指定の方法を説明する。
例えば、縦横各々Nの画素数を持つN×Nサイズを有する画像データにおいて、演算部50は、画像データの左上から指定した行と指定したストライド数に基づいて移動した先の座標点(i、j)を求める。そして、演算部50は、その座標点と指定されたカーネルサイズmに基づいて定義される矩形領域としてボトムデータ201を読み込む。演算部50は、この読み込んだボトムデータ201を元に畳み込み演算を実施し、1×1サイズへ調節した上でボトムデータ201を格納する。そのため、その演算結果であるトップ差分データ203のサイズ(以下トップサイズ)は、予め設定したパッド数を用いて、(N+2*pad―m)/ストライド数+1のサイズに調節される。またボトムデータ201あるいはトップ差分データ203が複数ある場合には全てのデータを連続して演算できるように、そのデータ数を使用するボトムデータ201の枚数であるCiあるいは算出されるトップ差分データ201の枚数であるCoで指定することも行う。
図28は、複数の演算部を用いた場合の畳み込み演算全体のフローチャートである。まず、演算部50は、図28で指定したトップサイズ分、例えば(N+2*pad―m)/ストライド数+1の分が、演算の使用に割り当てられる(ステップS11)。
1つの演算部50による演算処理は実施例1及び実施例2に示した処理と同様である。各演算部50は、行単位のボトムデータ201及び共通の重みデータ202を読み込む(ステップS12)。例えば、畳み込みフォワード演算の場合の図4や、畳み込みバックフォワード演算の場合の図10であれば、トップサイズが8であり、ストライド数が1の場合には、最初の演算部50に対してはb00〜b11が読み込まれ、次の演算部50に対してはb12〜b23が読み込まれ、そして8番目の最後の演算部50に対してはb84〜b95が読み込まれる。このように行単位でボトムデータ201が、各演算部50に読み込まれる。また、ストライド数が2以上の場合には、各演算部50に与えるボトムデータ201は、ストライド数で指定された行数分を用意される。重みデータについては1行分ずつ追加し、全ての演算部50に共通のデータとして与えられる。
そして、ボトムデータ201及び1行分の共通の重みデータ202を使用して、各演算部50は、演算処理を行う(ステップS13)。その後、各演算部50は、それぞれに対応したレジスタファイル230にその演算処理結果を格納する(ステップS14)。
その後、演算部50は、カーネルサイズ分の演算が終了したか否かを判定する(ステップS15)。カーネル細部の演算が終了していない場合(ステップS15:否定)、演算部50は、ボトムデータ201の行数をスライド数分シフトし次の演算処理を行なう(ステップS16)。例えば、最初の演算部5に対してはb12〜b23が追加され、次の演算部50に対してはb24〜b35が追加され、そして8番目の最後の演算部50に対してはb96〜b107が追加される。すなわち、各演算部50には、行単位でボトムデータ201が読み込まれる。演算部50は、重みデータ202の次の行の要素データを読み込み、同様に演算処理を行ない、その演算処理結果を2回目以降の演算については前回の(2回目のときは最初)の演算結果に加算し格納する。例えば、カーネス数が5の場合には、演算部50は、5回計算することで、トップ差分データ203の値に対する演算が完了し、その演算結果を取得できる。また、特に各演算部50毎の演算処理となるステップS11〜S16については、畳み込みフォワード演算の場合の詳細フローは図23と同じであり、畳み込みバックワードの重み差分演算の場合の詳細フローは図24と同じであり、畳み込みバックワードのボトム差分演算の場合の詳細フローは図25と同じである。
また、ボトムデータ201の枚数Ciが複数ある場合、演算部50は、指定したボトムデータ201のデータ数、あるいはトップ差分データ203の枚数の演算が完了したか否かを判定する(ステップS17)。
指定したボトムデータ201のデータ数、あるいはトップ差分データ203の枚数の演算が完了していない場合(ステップS17:否定)、演算部50は、次のボトムデータ201、あるいはトップデータ203を指定する(ステップS18)。その後、処理は、ステップSS12へ戻る。
一方、指定したボトムデータ201のデータ数、あるいはトップ差分データ203の枚数の演算が完了した場合(ステップS17:肯定)、演算部50は、演算処理を終了する。例えばCiが20の場合、演算部50は、同じ計算を20回繰り返すことで、同様にトップ差分データ203の値に対する演算が完了し、その演算結果を取得できることになる。
図29は、複数の演算部を用いた畳み込みフォワード演算のプログラムの記述例を説明するための図である。畳み込みフォワード演算は、図29に示すようにボトムデータ201(bottom_y)とトップ差分データ203(top_x)とを用いた演算は掛け算と足し算で表現できる。畳み込みフォワード演算は、ボトムデータ201のデータ数Ci、トップ差分データ203のデータ数Co、バッチ数mb、ストライド数W及びトップサイズを調節するためのパラメータとなるパッド数padを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
図30は、複数の演算部を用いた場合の畳み込みバックワードの重み差分演算のプログラムの記述例を説明するための図である。畳み込みバックワードの重み差分演算は、図30に示すようにボトムデータ201(bottom_y)とトップデータ202(top_x)とを用いた演算は掛け算と足し算で表現できる。畳み込みバックワードの重み差分演算は、ボトムデータ201のデータ数Ci、トップ差分データ203のデータ数Co、バッチ数mb、ストライド数W及びトップサイズを調節するためのパラメータとなるパッド数padを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
図31は、複数の演算部を用いた場合の畳み込みバックワードのボトム差分演算のプログラムの記述例を説明するための図である。畳み込みバックワードのボトム差分演算は、図31に示すようにボトムデータ201(bottom_y)とトップ差分データ203(top_x)と用いた演算は掛け算と足し算で表現できる。畳み込みバックワードのボトム差分演算は、ボトムデータ201のデータ数Ci、トップデータ203のデータ数Co、バッチ数mb、ストライド数W及びトップサイズを調節するためのパラメータとなるパッド数padを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
(ハードウェア構成)
図32は、演算処理装置のハードウェア構成図である。図32に示すように、演算処理装置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によって実現することができる。
また、他の例として、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データ制御部
410〜413,420〜423,430〜433 レジスタファイル
50〜53 演算部
16 ポインタ制御部
17 クロスバスイッチ
201 ボトムデータ
202 重みデータ
203 トップ差分データ
204 重み差分データ
205 ボトム差分データ
206 出力データ
207 期待値
209 演算結果

Claims (7)

  1. 行列を形成する要素データを有する第1データ及び第2データをそれぞれ格納するデータ格納部と、
    前記データ格納部に格納された前記第1データの第1所定行及び前記第2データの第2所定行毎に、前記第1所定行に含まれる要素データ及び前記第2所定行に含まれる要素データを用いて、前記第2データの列数を基に行分演算を繰り返し、各行分演算結果を用いて、前記第1データと前記第2データとを用いた演算を実行する演算部と
    を備えたことを特徴とする演算処理装置。
  2. 第1演算用記憶部と、
    第2演算用記憶部と、
    前記データ格納部に格納された前記第1データから前記第1所定行に含まれる前記要素データを取得し、前記第1演算用記憶部に格納する第1データ制御部と、
    前記データ格納部に格納された前記第2データから前記第2所定行に含まれる前記要素データを取得し、前記第2演算用記憶部に格納する第2データ制御部とをさらに備え、
    前記演算部は、前記第1演算用記憶部及び前記第2演算用記憶部に格納された前記要素データを基に前記演算を実行し、前記行分演算終了後に前記第1データ制御部及び前記第2データ制御部に対して、他の行の要素データの取得及び格納を指示する
    ことを特徴とする請求項1に記載の演算処理装置。
  3. 前記演算部、前記第1演算用記憶部及び前記第2演算用記憶部は、それぞれ複数配置され、
    前記演算部と、前記第1演算用記憶部及び前記第2演算用記憶部との接続経路を切り替えるスイッチをさらに備えた
    ことを特徴とする請求項2に記載の演算処理装置。
  4. 前記第1データと前記第2データとを用いた演算は、前記第2データを重みデータとして、前記第1データ上の前記第2データの配置位置を所定数ずつずらして実行する畳み込み演算であり、
    前記演算部は、前記所定数の行を有する前記第1所定行に含まれる前記要素データを前記第1データ内で並ぶ順に並べ、所定位置から前記第2データの列数までの前記要素データである第1要素データを取得し、取得した各前記第1要素データと前記所定数の行を有する前記第2所定行に含まれる各前記要素データとをそれぞれ乗算して乗算結果を合計する演算を、前記所定位置を先頭から順に前記所定数ずつずらしながら行うことで、行分演算を実行することを特徴とする請求項1〜3のいずれか一つに記載の演算処理装置。
  5. 前記第2データは、前記第1データ上に配置された重みデータの配置位置を所定数ずつずらして実行する畳み込み演算で算出される算出データと出力期待値との差分であり、
    前記演算部は、前記第1データの1行を前記第1所定行とし、前記第2データの1行を前記第2所定行とし、前記第1データと前記第2データとを用いて前記重みデータと重み期待値との差分を算出する演算を実行する
    ことを特徴とする請求項1〜3のいずれか一つに記載の演算処理装置。
  6. 前記演算は、順番に並んだ複数の層のいずれかにおいて実行され、前記第1データは、前記第2データを重みデータとして、入力データ上の前記第2データの配置位置を所定数ずつずらして実行する畳み込み演算で算出される算出データと出力期待値との差分であり、
    前記演算部は、特定の層において、前記第1データの1行を前記第1所定行とし、前記第2データの1行を前記第2所定行とし、前記第1データと前記第2データとを用いて、前記特定の層の1つ順番が前の層における出力データと出力期待値との差分を前記所定数毎に算出する演算を実行する
    ことを特徴とする請求項1〜3のいずれか一つに記載の演算処理装置。
  7. 行列を形成する要素データを有する第1データ及び第2データを記憶装置にそれぞれ格納し、
    前記記憶装置に格納された前記第1データの第1所定行及び前記第2データの第2所定行毎に、前記第1所定行に含まれる要素データ及び前記第2所定行に含まれる要素データを用いて、前記第2データの列数を基に行分演算を繰り返し、
    各行分演算結果を用いて、前記第1データと前記第2データとを用いた演算を実行する
    ことを特徴とする演算処理装置の制御方法。
JP2016158379A 2016-08-12 2016-08-12 演算処理装置及び演算処理装置の制御方法 Active JP6786948B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2016158379A JP6786948B2 (ja) 2016-08-12 2016-08-12 演算処理装置及び演算処理装置の制御方法
US15/651,651 US10353705B2 (en) 2016-08-12 2017-07-17 Arithmetic processing device for deep learning and control method of the arithmetic processing device for deep learning
US16/511,035 US10642613B2 (en) 2016-08-12 2019-07-15 Arithmetic processing device for deep learning and control method of the arithmetic processing device for deep learning

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016158379A JP6786948B2 (ja) 2016-08-12 2016-08-12 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2018026027A true JP2018026027A (ja) 2018-02-15
JP6786948B2 JP6786948B2 (ja) 2020-11-18

Family

ID=61158930

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016158379A Active JP6786948B2 (ja) 2016-08-12 2016-08-12 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (2) US10353705B2 (ja)
JP (1) JP6786948B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018106559A (ja) * 2016-12-27 2018-07-05 富士通株式会社 演算処理装置及び演算処理装置の制御方法
WO2019077933A1 (ja) * 2017-10-18 2019-04-25 三菱電機株式会社 演算回路および演算方法

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6745019B2 (ja) 2015-10-29 2020-08-26 株式会社Preferred Networks 情報処理装置及び情報処理方法
JP6958027B2 (ja) * 2017-07-03 2021-11-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN110059811A (zh) 2017-11-06 2019-07-26 畅想科技有限公司 权重缓冲器
US10970080B2 (en) * 2018-02-08 2021-04-06 Marvell Asia Pte, Ltd. Systems and methods for programmable hardware architecture for machine learning
US11586907B2 (en) * 2018-02-27 2023-02-21 Stmicroelectronics S.R.L. Arithmetic unit for deep learning acceleration
US11687762B2 (en) 2018-02-27 2023-06-27 Stmicroelectronics S.R.L. Acceleration unit for a deep learning engine
US10977854B2 (en) 2018-02-27 2021-04-13 Stmicroelectronics International N.V. Data volume sculptor for deep learning acceleration
US10740434B1 (en) 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11295200B1 (en) 2018-04-20 2022-04-05 Perceive Corporation Time-multiplexed dot products for neural network inference circuit
US11468145B1 (en) 2018-04-20 2022-10-11 Perceive Corporation Storage of input values within core of neural network inference circuit
US10891136B1 (en) 2018-05-22 2021-01-12 Marvell Asia Pte, Ltd. Data transmission between memory and on chip memory of inference engine for machine learning via a single data gathering instruction
US10929778B1 (en) 2018-05-22 2021-02-23 Marvell Asia Pte, Ltd. Address interleaving for machine learning
US10929779B1 (en) 2018-05-22 2021-02-23 Marvell Asia Pte, Ltd. Architecture to support synchronization between core and inference engine for machine learning
US11016801B1 (en) 2018-05-22 2021-05-25 Marvell Asia Pte, Ltd. Architecture to support color scheme-based synchronization for machine learning
US10929760B1 (en) 2018-05-22 2021-02-23 Marvell Asia Pte, Ltd. Architecture for table-based mathematical operations for inference acceleration in machine learning
US10997510B1 (en) 2018-05-22 2021-05-04 Marvell Asia Pte, Ltd. Architecture to support tanh and sigmoid operations for inference acceleration in machine learning
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
US10741247B1 (en) * 2019-06-21 2020-08-11 Macronix International Co., Ltd. 3D memory array device and method for multiply-accumulate
US11620495B1 (en) * 2019-08-16 2023-04-04 Perceive Corporation Neural networks with spatial and temporal features
CN111008040B (zh) * 2019-11-27 2022-06-14 星宸科技股份有限公司 缓存装置及缓存方法、计算装置及计算方法
US11507831B2 (en) 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61241877A (ja) * 1985-04-18 1986-10-28 Fanuc Ltd 空間積和演算装置
JP2008310524A (ja) * 2007-06-13 2008-12-25 Canon Inc 演算処理装置及びその制御方法
JP2010134697A (ja) * 2008-12-04 2010-06-17 Canon Inc コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
WO2013057856A1 (ja) * 2011-10-17 2013-04-25 パナソニック株式会社 適応等化器
JP2016033806A (ja) * 2014-05-15 2016-03-10 株式会社リコー 画像処理装置、画像処理方法及びプログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040122887A1 (en) * 2002-12-20 2004-06-24 Macy William W. Efficient multiplication of small matrices using SIMD registers
US7844352B2 (en) * 2006-10-20 2010-11-30 Lehigh University Iterative matrix processor based implementation of real-time model predictive control
JP4942095B2 (ja) * 2007-01-25 2012-05-30 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチコア・プロセッサにより演算を行う技術
JP5435241B2 (ja) * 2007-04-16 2014-03-05 エスティー‐エリクソン、ソシエテ、アノニム データ格納方法、データロード方法およびシグナルプロセッサ
US8954484B2 (en) * 2009-06-12 2015-02-10 Cray Inc. Inclusive or bit matrix to compare multiple corresponding subfields
JP5184824B2 (ja) 2007-06-15 2013-04-17 キヤノン株式会社 演算処理装置及び方法
JP5782265B2 (ja) * 2011-02-04 2015-09-24 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 行列計算処理方法、プログラム及びシステム
JP5742366B2 (ja) 2011-03-28 2015-07-01 ヤマハ株式会社 デジタル信号処理装置およびプログラム
JP6314628B2 (ja) 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61241877A (ja) * 1985-04-18 1986-10-28 Fanuc Ltd 空間積和演算装置
JP2008310524A (ja) * 2007-06-13 2008-12-25 Canon Inc 演算処理装置及びその制御方法
JP2010134697A (ja) * 2008-12-04 2010-06-17 Canon Inc コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US20110239032A1 (en) * 2008-12-04 2011-09-29 Canon Kabushiki Kaisha Convolution operation circuit and object recognition apparatus
WO2013057856A1 (ja) * 2011-10-17 2013-04-25 パナソニック株式会社 適応等化器
JP2016033806A (ja) * 2014-05-15 2016-03-10 株式会社リコー 画像処理装置、画像処理方法及びプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
安藤 洸太, ほか4名: ""深層畳込みニューラルネットワークに向けたデータ流再構成型演算器アレイアーキテクチャ"", 電子情報通信学会技術研究報告, vol. 116, no. 53, JPN6020008347, 12 May 2016 (2016-05-12), JP, pages 29 - 34, ISSN: 0004227165 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018106559A (ja) * 2016-12-27 2018-07-05 富士通株式会社 演算処理装置及び演算処理装置の制御方法
WO2019077933A1 (ja) * 2017-10-18 2019-04-25 三菱電機株式会社 演算回路および演算方法
JPWO2019077933A1 (ja) * 2017-10-18 2020-10-22 三菱電機株式会社 演算回路および演算方法
US11281376B2 (en) 2017-10-18 2022-03-22 Mitsubishi Electric Corporation Operation circuit and method of operation for use in operations that are performed in parallel using multiple operators

Also Published As

Publication number Publication date
JP6786948B2 (ja) 2020-11-18
US10642613B2 (en) 2020-05-05
US10353705B2 (en) 2019-07-16
US20190339970A1 (en) 2019-11-07
US20180046458A1 (en) 2018-02-15

Similar Documents

Publication Publication Date Title
JP2018026027A (ja) 演算処理装置及び演算処理装置の制御方法
JP6972547B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP6958027B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP6900487B2 (ja) ハードウェアにおける平均プーリングの実行
US10534607B2 (en) Accessing data in multi-dimensional tensors using adders
CN111937009A (zh) 脉动卷积神经网络
TWI678617B (zh) 用於在使用加法器之多維張量中存取資料之系統、電腦實施方法及設備
JP2018124867A (ja) 演算処理装置及び演算処理装置の制御方法
KR102341523B1 (ko) 동시 멀티 비트 가산기
CN110955406A (zh) 浮点动态范围扩展
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
JP2018022339A (ja) 演算処理装置及び演算処理装置の制御方法
JP2020109604A (ja) ロード/ストア命令
KR20200100190A (ko) 기계 학습을 위한 이미지 변환
US10810281B2 (en) Outer product multipler system and method
CN108139886B (zh) 用于图像处理器的多功能执行通道
WO2018235357A1 (ja) 演算装置、演算方法及びプログラム
CN110232665B (zh) 最大池化方法、装置、计算机设备及存储介质
CN109726798B (zh) 一种数据处理方法及装置
WO2022160704A1 (zh) 一种图像处理方法、装置、计算机设备及存储介质
JP2018525730A (ja) スライディングウィンドウ演算
CN113485751A (zh) 执行伽罗瓦域乘法的方法、运算单元和电子装置
CN109766515B (zh) 矩阵分解处理装置及方法
CN112927124A (zh) 一种数据处理方法、装置、设备及存储介质
JP7078129B2 (ja) 演算処理装置及び演算処理装置の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190513

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200310

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200427

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201012

R150 Certificate of patent or registration of utility model

Ref document number: 6786948

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150