WO2018135088A1 - データ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置 - Google Patents
データ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置 Download PDFInfo
- Publication number
- WO2018135088A1 WO2018135088A1 PCT/JP2017/039755 JP2017039755W WO2018135088A1 WO 2018135088 A1 WO2018135088 A1 WO 2018135088A1 JP 2017039755 W JP2017039755 W JP 2017039755W WO 2018135088 A1 WO2018135088 A1 WO 2018135088A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- memory
- memory address
- register
- row
- column
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Abstract
本発明のデータ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置は、アレイ状に配置された複数のプロセッサエレメントを備える。前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備える。前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる。
Description
本発明は、データを処理するデータ処理装置、前記データ処理装置を備える畳み込み演算装置および前記データ処理装置を備える畳み込みニューラルネットワーク装置に関する。
従来、データ処理の効率化や前記データ処理に伴って装置で消費する電力の効率化等の観点から、データ処理装置の一つとして、祖粒度リコンフィギャラブルアレイ(Coarse-Grained Reconfigurable Arichitecture、以下、「CGRA」と適宜に略記する)が知られている。このCGRAは、演算器およびレジスタ等を備えたプロセッシングエレメント(Processing Element、以下、「PE」と適宜に略記する)をアレイ状に複数備えたプロセッサであり、動作中に、各PEのデータ処理内容と各PE間の接続態様とを変更できる(再構成機能)。より具体的には、前記CGRAは、各PEのデータ処理内容および各PE間の接続態様それぞれを規定したデータ(コンフィギュレーションデータ)を格納したメモリ(コンフィギュレーションメモリ)をさらに備え、前記コンフィギュレーションデータに従って、動作中に、各PEのデータ処理内容と各PE間の接続態様とを変更することで、再構成される。
一方、画像認識では、近年、その認識精度が高いこと等から、畳み込みニューラルネットワーク(Convolutional Neural Network、以下、「CNN」と適宜に略記する)に代表される深層学習(ディープラーニング、Deep Learning)が研究、開発さている。そして、非特許文献1には、前記CGRAをCNNに用いた技術が提案されている。
ところで、CNNでは、そのデータ処理で畳み込み演算と呼ばれる演算が膨大な回数で実行される。このため、CNNでは、その学習の情報処理(データ処理)や前記学習後の画像認識の情報処理(データ処理)に多大な時間がかかってしまう。特に、前記CGRAは、大略、二次元アレイの各交点に配置した各PEに対し、多重化されたFor文における最内ループを構成する要素演算を写像した後、主記憶装置から読み出したデータを一方向に流入させ、ループイタレーション(itaration、繰り返し処理)の演算結果をデータ処理装置のサイクルごとに生成する。前記要素演算の写像は、主記憶装置に写像するための情報をセットし、その値を読み出すことで実行されるため、或る程度の時間を要する。そのため、最内ループで演算する回数が少ないと、演算に要する合計時間(写像時間+演算時間)に対する写像時間の割合が増えてしまい、演算効率が悪化してしまう。CNNの畳み込み演算において、1枚の画像に対する演算では最内ループで演算される回数が少ないため、前記非特許文献1は、複数枚の画像を纏めて処理することで、演算効率の悪化を抑制している。しかしながら、略リアルタイムでデータ処理が求められる装置では、画像が1枚ずつ処理されるため、前記非特許文献1のような、複数枚の画像を纏めて処理する方式が採用できない。
Masakazu Tanomoto、et al.、"A CGRA-based Approach for Accelerating Convolutional Neural Network」、2015 IEEE 9th International Symposium Embedded Multicore/Many-cor Systems-on-Chip
本発明は、上述の事情に鑑みて為された発明であり、その目的は、1枚ずつ画像を処理する場合でも、演算効率をより向上できるデータ処理装置、前記データ処理装置を備える畳み込み演算装置および前記データ処理装置を備える畳み込みニューラルネットワーク装置を提供することである。
上述した目的を実現するために、本発明の一側面を反映したデータ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置は、アレイ状に配置された複数のプロセッサエレメントを備える。前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備える。前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる。
発明の1または複数の実施形態により与えられる利点および特徴は、以下に与えられる詳細な説明および添付図面から十分に理解される。これら詳細な説明及び添付図面は、例としてのみ与えられるものであり本発明の限定の定義として意図されるものではない。
以下、図面を参照して、本発明の1または複数の実施形態が説明される。しかしながら、発明の範囲は、開示された実施形態に限定されない。なお、各図において同一の符号を付した構成は、同一の構成であることを示し、適宜、その説明を省略する。本明細書において、総称する場合には添え字を省略した参照符号で示し、個別の構成を指す場合には添え字を付した参照符号で示す。
本実施形態におけるデータ処理装置は、アレイ状に配置された複数のプロセッサエレメントを備えた装置である。前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備える。前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化で好ましくは互いに隣接する2個のメモリアドレスを生成できる。すなわち、前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化で好ましくは互いに隣接する2個のメモリアドレスを生成すること(機能)を含む。より具体的には、一態様では、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化で好ましくは互いに隣接する2個のメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化で好ましくは互いに隣接する2個のメモリアドレスを生成する。他の一態様では、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化でメモリアドレスを生成する。したがって、これら各態様において、前記アドレス生成器は、好ましくは前記複数の数値範囲における互いに隣接する2個の数値範囲の一方の最終のメモリアドレスと、前記2個の数値範囲の他方の最初のメモリアドレスとを非連続な変化(すなわち、異なる値)で生成する。
以下、このようなデータ処理装置を畳み込みニューラルネットワーク(CNN)に適用、より詳しくは、前記CNNにおける、畳み込み演算を行う畳み込み層(畳み込み装置の一例)に適用した場合について、より具体的に説明するが、本実施形態にかかるデータ処理装置は、汎用であり、その用途は、限定されない。
図1は、実施形態における畳み込みニューラルネットワーク装置の構成を示す図である。実施形態における畳み込みニューラルネットワーク装置(CNN装置)Wは、例えば、図1に示すように、前処理部1と、多層パーセプトロン部2とを備える。
前処理部1は、畳み込み層111(111-1、・・・、111-k)およびプーリング層112(112-1、・・・、112-k)を備える前処理セット11(11-1、・・・、11-k)を1または複数k備えて構成される(kは2以上の整数)。前処理セット11が複数である場合には、これら複数の前処理セット11は、直列で接続され、複数段の構成となる。前処理部1には、学習するための画像IPや認識すべき認識対象の画像IPが入力される。以下、前処理部1に入力される画像IPを「対象画像IP」と適宜に呼称する。
畳み込み層111は、入力された対象画像IPに対し畳み込み演算を実行する装置である。より具体的には、畳み込み層111は、対象画像IPに対し所定のカーネル(画像フィルタ)KNで畳み込む(フィルタリングする)。前記カーネルKNは、予め設定された複数のものであり、これら複数のカーネルKNそれぞれによって対象画像IPが畳み込まれ、カーネルKNの個数に応じた複数の画像(特徴マップ)FMが生成される。カーネルKNが多いほど、対象画像IPにおける様々な特徴を捉えることができる。カーネルKNのサイズは、任意であり、各前処理セット11ごとに適宜に設定される。CNNでは、学習によってカーネルKNが生成される。すなわち、カーネルKNの各要素(各フィルタ係数)の数値が学習によって自動的に設定される。この畳み込み演算によって対象画像IP内のパターンが検出できるようになる。畳み込み層111は、当該段の前処理セット11におけるプーリング層112に接続され、畳み込み演算によって生成された画像である特徴マップFMをこのプーリング層112へ出力する。実施形態にかかるデータ処理装置を備えて構成される畳み込み層111は、より詳しく後述する。
プーリング層112は、マックスプーリング(maxpooling)の処理を実行する装置である。より具体的には、プーリング層112は、所定サイズの矩形フィルタを特徴マップFM内で所定の画素ずつずらしながら矩形内の最大値を取り出して新たな画像を生成する。このマックスプーリングの処理によって、抽出される特徴の位置感度が低下される。プーリング層112は、公知な常套技術で構成される。プーリング層112は、次段の前処理セット11が存在する場合には、次段の前処理セット11における畳み込み層111に接続され、その生成した画像をこの畳み込み層111へ出力し、次段の前処理セット11が存在しない場合(すなわち、最終段の前処理セット11-kにおけるプーリング層112-kの場合)には、多層パーセプトロン部2に接続され、前記生成した画像を多層パーセプトロン部2へ出力する。
多層パーセプトロン部2は、複数の層にニューロンを配置したニューラルネットワークであり、前記ニューラルネットワークによって、前処理部1の処理結果(最終段の前処理セット11-kにおけるプーリング層112-kで生成された画像)に基づいて、前処理部1に入力された対象画像IPを認識する装置である。多層パーセプトロン部2は、公知な常套技術で構成される。多層パーセプトロン部2は、前記認識の結果を出力する。
次に、畳み込み層111について、より詳しく説明する。図2は、前記畳み込みニューラルネットワーク装置における畳み込み層(データ処理装置)の構成を示す図である。図3は、前記畳み込み層(データ処理装置)におけるプロセッシングエレメントの構成を示す図である。図4は、畳み込みニューラルネットワークにおける畳み込み演算を説明するための図である。図5は、図2に示す構成において、前記畳み込み層(データ処理装置)における1行1列に配置されたプロセッシングエレメントを説明するための図である。図6は、図2に示す構成において、前記畳み込み層(データ処理装置)における1行2列および1行3列に配置されたプロセッシングエレメントを説明するための図である。図7は、図2に示す構成において、前記畳み込み層(データ処理装置)における2行1列に配置されたプロセッシングエレメントを説明するための図である。図8は、図2に示す構成において、前記畳み込み層(データ処理装置)における2行2列に配置されたプロセッシングエレメントを説明するための図である。図9は、図2に示す構成において、前記畳み込み層(データ処理装置)における2行3列に配置されたプロセッシングエレメントを説明するための図である。図10は、図2に示す構成において、前記畳み込み層(データ処理装置)における2行4列に配置されたプロセッシングエレメントを説明するための図である。図11は、図2に示す構成において、前記畳み込み層(データ処理装置)における3行1列ないし3行4列、4行1列および4行3列に配置されたプロセッシングエレメントを説明するための図である。図12は、図2に示す構成において、前記畳み込み層(データ処理装置)における5行1列に配置されたプロセッシングエレメントを説明するための図である。
畳み込み層111は、データ処理装置の一例に相当し、祖粒度リコンフィギャラブルアレイ(Coarse-Grained Reconfigurable Arichitecture、CGRA)で構成されている。このCGRAで構成された畳み込み層111は、例えば、図2に示すように、演算器アレイ3と、メモリインターフェース(MEMORY I/F)4と、メモリ(MEMORY)5とを備える。
メモリ5は、所定のデータを記憶する回路であり、例えば、DRAM(Dynamic Random Access Memory)等である。前記所定のデータは、例えば、演算器アレイ3で演算処理されるデータ(本実施形態では対象画像IPおよびカーネルKN等)や、演算器アレイ3における後述のプロセッシングエレメント(Processing Element、PE)31のデータ処理内容および各PE31間の接続態様それぞれを規定したデータ(コンフィギュレーションデータ)等である。
メモリインターフェース4は、演算器アレイ3とメモリ5とを相互に接続し、演算器アレイ3とメモリ5との間で所定のクロックに従ってデータをやり取り(送受信)するインターフェース回路である。
演算器アレイ3は、2次元アレイ状に配置された複数のプロセッシングエレメント(PE)31を備え、これら各PE31は、データバスを介してメモリインターフェース4と接続される。各PE31は、それぞれ、データを演算する回路であり、演算器、メモリおよびレジスタ等を備えて構成される。
より具体的には、各PE31は、それぞれ、例えば図3に示すように、ALU(Arithmetic Logic Unit、算術論理演算器)61と、メモリ(MEM)62と、EAG(Effective Address Generator)63と、加算器(ADDER)64と、比較器65と、切換え器66と、レジスタ67とを備える。
ALU61は、3入力1出力で論理演算、加減算および乗算の演算処理を行う回路である。
メモリ62は、当該PE31で処理されるデータを記憶する回路である。
EAG63は、入力に従ってメモリ62のメモリアドレスを生成する回路であり、例えば、入力値を加算して加算結果をメモリアドレスとして出力する加算器である。EAG63は、本実施形態では、2個のメモリアドレスを生成可能とするために、1対(2個)の第1および第2EAG63-1、63-2を備える。
加算器64は、入力値を加算して加算結果を出力する回路である。本実施形態では、加算器64は、1対(2個)の第1および第2EAG63-1、63-2に対応して1対(2個)の第1および第2加算器64-1、64-2を備える。
比較器65は、予め設定された所定の比較を行い、その比較結果を出力する回路である。本実施形態では、比較器65は、第1ないし第3比較器65-1~65-3を備える。第1比較器65-1は、第1加算器64-1に対する2個の入力値を生成するために、1組(2個)の第11および第12比較器65-11、65-12を備える。第2比較器65-2は、第2加算器64-2に対する2個の入力値を生成するために、1組(2個)の第21および第22比較器65-21、65-22を備える。したがって、本実施形態では、比較器65は、計5個である。
切換え器66は、制御信号に応じて複数の入力のうちのいずれかに切り換えて出力する回路である。本実施形態では、切換え器66は、制御信号に応じて2個の入力のうちの一方に切り換えて前記一方を出力する回路である。本実施形態では、比較器65は、第1ないし第5切換え器66-1~66-5を備える。第1切換え器66-1は、第1加算器64-1に対する2個の入力値を生成するために、1組(2個)の第11および第12切換え器66-11、66-12を備える。第2切換え器66-2は、第2加算器64-2に対する2個の入力値を生成するために、1組(2個)の第21および第22切換え器66-21、66-22を備える。第3切換え器66-3は、1対の第1および第2EAG63-1、63-2それぞれに対する入力値を生成するために、2個の第31および第32切換え器66-31、66-32を備える。したがって、本実施形態では、切換え器66は、計8個である。
レジスタ67は、データを一時的に保持する回路であり、例えばフリップフロップ等を備えて構成される。本実施形態では、レジスタ67は、第1ないし第5レジスタ67-1~67-5を備える。第4レジスタ67-4は、1対(2個)の第1および第2EAG63-1、63-2に対応して1対(2個)の第41および第42レジスタ67-41、67-42を備える。第5レジスタ67-5は、2個の第51および第52レジスタ67-51、67-52を備える。したがって、本実施形態では、レジスタ67は、計7個である。
これら各回路を備えるPE31では、各回路は、基本的には、次のように接続され、入出力を行う。
第11比較器65-11は、第11切換え器66-11に接続され、その比較結果を第11切換え器66-11の制御信号として第11切換え器66-11へ出力する。第11切換え器66-11は、第1加算器64-1に接続され、第11比較器65-11の比較結果に応じて、外部から入力された2個の入力のうちの一方に切り換えて前記一方を第1加算器64-1へ出力する。第12比較器65-12は、第12切換え器66-12に接続され、その比較結果を第12切換え器66-12の制御信号として第12切換え器66-12へ出力する。第12切換え器66-12は、第1加算器64-1に接続され、第12比較器65-12の比較結果に応じて、外部から入力された2個の入力のうちの一方に切り換えて前記一方を第1加算器64-1へ出力する。第1加算器64-1は、第1EAG63-1に接続され、第11および第12切換え器66-11、66-12それぞれから入力された各入力値と外部からの外部入力値とを加算して加算結果を第1EAG63-1へ出力する。第31切換え器66-31は、第1EAG63-1に接続され、起動後1度目の計算時のみ外部入力が入力されるようにするONESHOT信号に応じて、外部および第41レジスタ67-41それぞれから入力された2個の入力のうちの一方に切り換えて前記一方を第1EAG63-1へ出力する。第1EAG63-1は、メモリ62および第41レジスタ67-41それぞれに接続され、第1加算器64-1および第31切換え器66-31それぞれから入力された各入力値に基づいてメモリアドレス(第1メモリアドレス)を生成し、その第1メモリアドレスをメモリ62および第41レジスタ67-41それぞれへ出力する。より具体的には、第1EAG63-1は、第1加算器64-1の加算結果と第31切換え器66-31で切り換えられて出力された前記一方とを加算して、その加算結果を前記第1メモリアドレスとしてメモリ62および第41レジスタ67-41それぞれへ出力する。第41レジスタ67-41は、第31切換え器66-31に接続され、その保持している第1メモリアドレスを第31切換え器66-31へ出力する。メモリ62は、第1EAG63-1で指定された第1メモリアドレスを持つ記憶領域からデータを取り出し、第51レジスタ67-51へ出力する。第51レジスタ67-51は、第1メモリアドレスを持つ記憶領域から取り出された前記データを保持する。
第21比較器65-21は、第21切換え器66-21に接続され、その比較結果を第21切換え器66-21の制御信号として第21切換え器66-21へ出力する。第21切換え器66-21は、第2加算器64-2に接続され、第21比較器65-21の比較結果に応じて、外部から入力された2個の入力のうちの一方に切り換えて前記一方を第2加算器64-2へ出力する。第22比較器65-22は、第22切換え器66-22に接続され、その比較結果を第22切換え器66-22の制御信号として第22切換え器66-22へ出力する。第22切換え器66-22は、第2加算器64-2に接続され、第22比較器65-22の比較結果に応じて、外部から入力された2個の入力のうちの一方に切り換えて前記一方を第2加算器64-2へ出力する。第2加算器64-2は、第2EAG63-2に接続され、第21および第22切換え器66-21、66-22それぞれから入力された各入力値と外部からの外部入力値とを加算して加算結果を第2EAG63-2へ出力する。第32切換え器66-32は、第2EAG63-2に接続され、起動後1度目の計算時のみ外部入力が入力されるようにするONESHOT信号に応じて、外部および第42レジスタ67-42それぞれから入力された2個の入力のうちの一方に切り換えて前記一方を第2EAG63-2へ出力する。第2EAG63-2は、メモリ62および第42レジスタ67-42それぞれに接続され、第2加算器64-2および第32切換え器66-32それぞれから入力された各入力値に基づいてメモリアドレス(第2メモリアドレス)を生成し、その第2メモリアドレスをメモリ62および第42レジスタ67-42それぞれへ出力する。より具体的には、第2EAG63-2は、第2加算器64-2の加算結果と第32切換え器66-32で切り換えられて出力された前記一方とを加算して、その加算結果を前記第2メモリアドレスとしてメモリ62および第42レジスタ67-42それぞれへ出力する。第42レジスタ67-42は、第32切換え器66-32に接続され、その保持している第2メモリアドレスを第32切換え器66-32へ出力する。メモリ62は、第2EAG63-2で指定された第2メモリアドレスを持つ記憶領域からデータを取り出し、第52レジスタ67-52へ出力する。第52レジスタ67-52は、第2メモリアドレスを持つ記憶領域から取り出された前記データを保持する。
このような動作がマシンサイクルごとに実行され、第1および第2メモリアドレスが生成される。
第3比較器65-3は、第4切換え器66-4に接続され、その比較結果を第4切換え器66-4へ出力する。第4切換え器66-4は、第5加算器64-5に接続され、コンフィグレーションデータに応じて、第3比較器65-3の比較結果および起動後1度目の計算時のみ外部入力が入力されるようにするONESHOT信号のうちの一方に切り換えて前記一方を第5切換え器66-5の制御信号として第5切換え器66-5へ出力する。第5切換え器66-5は、ALU61に接続され、第4切換え器66-4で切り換えられて出力された前記一方に応じて、外部および第1レジスタ67-1それぞれから入力された2個の入力のうちの一方に切り換えて前記一方をALU61へ出力する。ALU61は、第1および第3レジスタ67-1、67-3ならびにメモリ62それぞれに接続され、第5切換え器66-5で切り換えられて出力された前記一方と、外部から入力された2個の各入力とに基づいて、前記演算処理を行い、その演算結果を第1および第3レジスタ67-1、67-3ならびにメモリ62それぞれへ出力する。第1レジスタ67-1は、第5切換え器66-5に接続され、その保持している演算結果を第5切換え器66-5へ出力する。
このような動作がマシンサイクルごとに実行され、ALU61で演算処理される。
ここで、PE31におけるALU61、第1および第2EAG63-1、63-2、第1および第2加算器64-1、64-2、ならびに、第1ないし第5レジスタ67-1、67-2、67-3、67-4(67-41、67-42)、67-5(67-51、67-52)は、外部からPE31に所定のready信号が与えられ、このready信号がHiレベル(例えば1)の場合に作動し、前記ready信号がLowレベル(例えば0)の場合に停止する。
このようなPE31を複数備えた演算器アレイ3は、メモリ5に格納された、所望のデータ処理(用途)に応じたコンフィギュレーションデータに従って各PE31のデータ処理内容と各PE間の接続態様とが設定される。したがって、各PE31における各ALU61で行われる演算処理と各EAG63-1、63-2とで実行されるメモリアクセスとの各内容は、それぞれ、メモリ5に記憶された前記コンフィギュレーションデータで規定される。一例として、本実施形態では、前記コンフィギュレーションデータは、畳み込み演算を行うように作成されている。
この畳み込み演算は、数学的には、対象の関数と畳み込む関数との積の積分によって表されるが、画像のフィルタ処理(二次元の畳み込み演算)では、掛け算と足し算とで表される。より具体的には、図4に示すように、対象画像IPから、カーネルKNのサイズに一致した範囲内における各画素の各画素値が取り出され、この取り出された各画素の各画素値とカーネルKNの各要素(各フィルタ係数)とが同位置同士で乗算され、各乗算結果が加算され、この加算結果が畳み込み演算で生成される新たな画像(特徴マップ)FMにおける1画素の画素値とされる。対象画像IPにおける例えば左上を基準とする場合、このような処理が、対象画像IPにおける1行目1列目から行に沿って順次に列をずらしながら実行され、カーネルKNのサイズに応じた最終列まで到達すると、次行に移行されて、同様に、1列目から行に沿って順次に列をずらしながら実行され、カーネルKNのサイズに応じた最終列まで到達すると、次行に移行されて、以下、同様に、カーネルKNのサイズに応じた最終行まで実行される。なお、行に沿ったシフトは、1列ずつであって良く、また、1または複数の列を飛ばした飛び飛びであって良い。列に沿ったシフトは、1行ずつであって良く、また、1または複数の行を飛ばした飛び飛びであって良い。一例として、対象画像IPのサイズがIH×IWであり、カーネルKNのサイズがKH×KW=2×2であり、行に沿ったシフトが1列ずつであり、列に沿ったシフトが1行ずつである場合、対象画像IPから、カーネルKNのサイズに一致した2×2内における各画素の各画素値が取り出され、この取り出された各画素における1行1列の画素値とカーネルKNにおける1行1列のフィルタ係数が乗算され、前記取り出された各画素における1行2列の画素値とカーネルKNにおける1行2列のフィルタ係数が乗算され、前記取り出された各画素における2行1列の画素値とカーネルKNにおける2行1列のフィルタ係数が乗算され、前記取り出された各画素における2行2列の画素値とカーネルKNにおける2行2列のフィルタ係数が乗算され、これら4個の各乗算結果が加算され、この加算結果が特徴マップFMにおける1画素の画素値とされる。このような処理が、対象画像IPにおける1行目1列目から行に沿って順次に列を1列ずらしながら実行され、(IW-1)列まで到達すると、次行に移行されて、同様に、1列目から行に沿って順次に列を1列ずらしながら実行され、(IW-1)列まで到達すると、次行に移行されて、以下、同様に、(IH-1)行まで実行される。このような畳み込み演算によって、OH行OW列の特徴マップFMが生成される。一例として、対象画像が10×10である場合(IH=10、IW=10)、2×2のカーネルKN(KH=2、KW=2)では、特徴マップFMは、9×9となる(OH=9、OW=9)。
CNNでは、このような畳み込み演算が予め設定された個数のカーネルKNだけ実行され、カーネルKNの個数と同数OCの特徴マップFMが生成される。一例として、図4に示すように、カーネルKNが3個の第1ないし第3カーネルKN-1~KN-3である場合、3個の第1ないし第3特徴マップFM-1~FM-3が生成される(OC=3)。このようなCNNの畳み込み演算は、コードで表すと次のように多重ループで表される。
すなわち、CNNの畳み込み演算は、3重のループ(3重のFor文)で構成される。
この3重のループにおける最内のループ(第1ループ、xループ)は、対象画像IPから、カーネルKNのサイズに一致した範囲内における各画素の各画素値を取り出し、この取り出した各画素の各画素値とカーネルKNの各フィルタ係数とを同位置同士で乗算し、各乗算結果を加算する処理を、1列目から行に沿って順次に列を1列ずつずらしながら、カーネルKNのサイズに応じた最終列まで実行する処理を表している。この第1ループは、制御変数がxであり(xは整数)、対象画像IPがメモリアドレス0番地から行ごとに記憶される場合、x=0から、x<OWまで繰り返され、このため、xループと適宜に呼称される。
前記第1ループ(xループ)の外側のループ(第2ループ、cループ)は、第1ループの処理を各カーネルKNごとに実行する処理を表している。この第2ループは、制御変数がcであり(cは整数)、c=0から、c<OCまで繰り返され、このため、cループと適宜に呼称される。
前記第2ループ(cループ)の外側のループ(第3ループ、yループ)は、第1ループの処理を、1行目から列に沿って順次に行を1行ずつずらしながら、カーネルKNのサイズに応じた最終行まで実行する処理を表している。この第3ループは、制御変数がyであり(yは整数)、y=0から、y<OHまで繰り返され、このため、yループと適宜に呼称される。
2×2のカーネルKNを用いた畳み込み演算は、上述のようにコードで表されるので、畳み込み層111の演算器アレイ3は、5×4の20個のPE31-11~31-54を備えて構成される。上述のready信号は、各行ごとに与えられ、本実施形態では、5個の、1行目用のStage0_ready信号、2行目用のStage1_ready信号、3行目用のStage2_ready信号、4行目用のStage3_ready信号、および、5行目用のStage4_ready信号を備えて構成される。
右上を基準に1行目(1段目の行)のPE31-11~31-14は、各ループの制御変数を生成する回路となり、前記コンフィギュレーションデータは、1行目のPE31-11~31-14が各ループの制御変数を生成する回路となるように作成される。
より具体的には、本実施形態では、1行1列のPE31-11は、yループの制御変数yを生成する回路となり、1行2列のPE31-12は、cループの制御変数cを生成する回路となり、1行3列のPE31-13は、xループの制御変数xを生成する回路となる。なお、1行4列のPE31-14は、本実施形態では、使用されていない。PE31-11は、図5に示すように、ALU61、第5切換え器66-5、ならびに、第1および第3レジスタ67-1、67-3を備えて構成され、第5切換え器66-5の制御信号として、起動後1度目の計算時のみ外部入力が入力されるようにするONESHOT信号が第5切換え器66-5に入力される点を除き、図3を用いて説明した上述と同様に各回路が接続され、入出力される。PE31-12、31-13は、それぞれ、図6に示すように、ALU61、第3比較器65-3、第5切換え器66-5、ならびに、第1および第3レジスタ67-1、67-3を備えて構成され、第3比較器65-3の比較結果が第5切換え器66-5の制御信号として第5切換え器66-5へ出力する点を除き、図3を用いて説明した上述と同様に各回路が接続され、入出力される。
制御変数yを生成する1行1列のPE31-11では、第5切換え器66-5には、第1レジスタ67-1に保持されているALU61の演算結果、および、設定値として特徴マップFMの行数(垂直方向の画素数)OHとカーネルKNの個数OCと特徴マップFMの列数(水平方向の画素数)OWとの乗算結果(OH×OC×OW)が入力され、第5切換え器66-5は、畳み込み演算の開始時に、初期値として前記設定値の乗算結果(OH×OC×OW)をALU61へ出力し、次以降のマシンサイクルでは、第1レジスタ67-1に保持されているALU61の演算結果をALU61へ出力する。ALU61には、第5切換え器66-5の出力と-1とが入力され、ALU61は、これら第5切換え器66-5の出力と-1とを加算し(すなわち、第5切換え器66-5の出力から1を減算し)、その加算結果を第1および第3レジスタ67-1、67-3それぞれへ出力する。PE31-11は、このように再構成され、マシンサイクルごとに動作することで、初期値OH×OC×OWからマシンサイクルごとに1ずつダウンカウントする。これによってPE31-11は、制御変数yを生成する。
制御変数cを生成する1行2列のPE31-12では、第3比較器65-3は、第1レジスタ67-1に保持されているALU61の演算結果と0とを比較し、その比較結果を第5切換え器66-5の制御信号として第5切換え器66-5へ出力する。第5切換え器66-5には、第1レジスタ67-1に保持されているALU61の演算結果、および、設定値としてカーネルKNの個数OCと特徴マップFMの列数OWとの乗算結果(OC×OW)が入力され、第5切換え器66-5は、畳み込み演算の開始時に、初期値として前記設定値の乗算結果(OC×OW)をALU61へ出力し、次以降のマシンサイクルでは、第1レジスタ67-1に保持されているALU61の演算結果と0とが等しいと言う第3比較器65-3の比較結果となるまで、第1レジスタ67-1に保持されているALU61の演算結果をALU61へ出力する。ALU61には、第5切換え器66-5の出力と-1とが入力され、ALU61は、これら第5切換え器66-5の出力と-1とを加算し(すなわち、第5切換え器66-5の出力から1を減算し)、その加算結果を第1および第3レジスタ67-1、67-3それぞれへ出力する。PE31-12は、このように再構成され、マシンサイクルごとに動作することで、初期値(OC×OW)からマシンサイクルごとに1ずつダウンカウントし、そして、ダウンカウントの結果が0になるたびに、前記設定値の乗算結果(OC×OW)を再びセットし、再びダウンカウントすることを繰り返す。この再セットおよび再ダウンカウントの繰り返し回数は、初回のダウンカウントが有るので、(OH-1)である。すなわち、PE31-12は、(OC×OW)から0までのダウンカウントの動作をOH回実行する。これによってPE31-12は、制御変数cを生成する。
制御変数xを生成する1行3列のPE31-13では、第3比較器65-3は、第1レジスタ67-1に保持されているALU61の演算結果と0とを比較し、その比較結果を第5切換え器66-5の制御信号として第5切換え器66-5へ出力する。第5切換え器66-5には、第1レジスタ67-1に保持されているALU61の演算結果、および、設定値として特徴マップFMの列数OWが入力され、第5切換え器66-5は、畳み込み演算の開始時に、初期値として前記設定値の列数OWをALU61へ出力し、次以降のマシンサイクルでは、第1レジスタ67-1に保持されているALU61の演算結果と0とが等しいと言う第3比較器65-3の比較結果となるまで、第1レジスタ67-1に保持されているALU61の演算結果をALU61へ出力する。ALU61には、第5切換え器66-5の出力と-1とが入力され、ALU61は、これら第5切換え器66-5の出力と-1とを加算し(すなわち、第5切換え器66-5の出力から1を減算し)、その加算結果を第1および第3レジスタ67-1、67-3それぞれへ出力する。PE31-13は、このように再構成され、マシンサイクルごとに動作することで、初期値OWからマシンサイクルごとに1ずつダウンカウントし、そして、ダウンカウントの結果が0になるたびに、前記設定値の列数OWを再びセットし、再びダウンカウントすることを繰り返す。この再セットおよび再ダウンカウントの繰り返し回数は、初回のダウンカウントが有るので、(OH×OC-1)である。すなわち、PE31-13は、OWから0までのダウンカウントの動作をOH×OC回実行する。これによってPE31-13は、制御変数xを生成する。
1行目(1段目の行)のPE31-11~31-14は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
右上を基準に2行目(2段目の行)のPE31-21~31-24は、制御変数yで指定された当該行において、制御変数xで指定されることによって行に沿って1列ずつシフトしながら、対象画像IPから、カーネルKNのサイズに一致した範囲内における各画素の各画素値を取り出し、制御変数cで指定されたカーネルKNにおける各要素(各フィルタ係数)を取り出す回路となり、前記コンフィギュレーションデータは、2行目のPE31-21~31-24が前記各画素値を取り出し、前記各フィルタ係数を取り出す回路となるように作成される。CNNの畳み込み演算では、上述したように、対象画像IPに対しカーネルKNを、例えばラスタースキャンの如くつづら折りにシフトする必要があるため、メモリアドレスを所定の数値範囲では連続的に変化させつつ互いに隣接する数値範囲間では非連続に変化させる必要がある。このため、2行目のPE31-21~31-24は、本実施形態の特徴的な回路構成を有し、上述のように連続的に変化する一方で非連続で変化するメモリアドレスを順次に続けて生成することによって、メモリアドレス0番地から行ごとに記憶されている対象画像IPの前記各画素値を取り出し、メモリアドレス0番地から行ごとにそしてカーネルKNごとに記憶されている各カーネルKNの前記各フィルタ係数を取り出している。
より具体的には、本実施形態では、2行1列のPE31-21は、対象画像IPから、制御変数yおよび制御変数xに応じた範囲であって、カーネルKNのサイズ(2×2)に一致した前記範囲内の各画素における1行1列の画素の画素値i00および1行2列の画素の画素値i01を取り出す回路となる。2行2列のPE31-22は、対象画像IPから、制御変数yおよび制御変数xに応じた範囲であって、カーネルKNのサイズ(2×2)に一致した前記範囲内の各画素における2行1列の画素の画素値i10および2行2列の画素の画素値i11を取り出す回路となる。2行3列のPE31-23は、制御変数cに応じたカーネルKNにおける1行1列のフィルタ係数k00および1行2列のフィルタ係数k01を取り出す回路となる。2行4列のPE31-24は、制御変数cに応じたカーネルKNにおける2行1列のフィルタ係数k10および2行2列のフィルタ係数k11を取り出す回路となる。これらPE31-21~31-24は、図7ないし図10それぞれに示すように、メモリ62、第1および第2EAG63-1、63-2、第1および第2加算器64-1、64-2、第11、第12、第21および第22比較器65-11、65-12、65-21、65-22、第11、第12、第21、第22、第31および第32切換え器66-11、66-12、66-21、66-22、66-31、66-32、ならびに、第41、第42、第51および第52レジスタ67-41、67-42、67-51、67-52を備えて構成され、図3を用いて説明した上述と同様に各回路が接続され、入出力される。
2行1列のPE31-21では、メモリ62には、メモリインターフェース4を介してメモリ5から、対象画像IPのデータが読み込まれ、メモリアドレス0番地から行ごとに格納される。第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、前記範囲内の各画素における1行1列の画素の画素値i00を、メモリ62から取り出すメモリアドレスi00_adrを生成する回路を構成する。
より詳しくは、2行1列のPE31-21において、第21比較器65-21は、1行3列のPE31-13における第3レジスタ67-3に接続され、前記PE31-13の第3レジスタ67-3に保持されているALU61の演算結果(すなわち、制御変数x)が入力される。図7に示すように、第21比較器65-21は、前記PE31-13の第3レジスタ67-3から入力された制御変数xと(OW-1)とを比較し、その比較結果を第21切換え器66-21の制御信号として第21切換え器66-21へ出力する。第21切換え器66-21には、1行1列のメモリアドレスi00_adrを生成するために、0と-9とが入力され、第21切換え器66-21は、制御変数xと(OW-1)とが等しくないと言う第21比較器65-21の比較結果である場合、0を第2加算器64-2へ出力し、制御変数xと(OW-1)とが等しいと言う第21比較器65-21の比較結果である場合、-9を第2加算器64-2へ出力する。
2行1列のPE31-21において、第22比較器65-22は、1行2列のPE31-12における第3レジスタ67-3に接続され、前記PE31-12の第3レジスタ67-3に保持されているALU61の演算結果(すなわち、制御変数c)が入力される。第22比較器65-22は、前記PE31-12の第3レジスタ67-3から入力された制御変数cと(OC×OW-1)とを比較し、その比較結果を第22切換え器66-22の制御信号として第22切換え器66-22へ出力する。第22切換え器66-22には、1行1列のメモリアドレスi00_adrを生成するために、0と10とが入力され、第22切換え器66-22は、制御変数cと(OC×OW-1)とが等しくないと言う第22比較器65-22の比較結果である場合、0を第2加算器64-2へ出力し、制御変数cと(OC×OW-1)とが等しいと言う第22比較器65-22の比較結果である場合、10を第2加算器64-2へ出力する。
2行1列のPE31-21において、第2加算器64-2は、第21切換え器66-21の出力と第22切換器の出力との加算結果に、行方向に1列ずつシフトさせるために、さらに1を加算し、その加算結果を第2EAG63-2へ出力する。第42レジスタ67-42は、第2EAG63-2で生成されたメモリアドレスi00_adrを保持し、第32切換え器66-32には、この第42レジスタ67-42で保持されているメモリアドレスi00_adrと、初期値として-2とが入力され、第32切換え器66-32は、計算開始時にONESHOT信号で選択された-2を初期値として第2EAG63-2へ出力し、次以降のマシンサイクルでは、第42レジスタ67-42に保持されている第2EAG63-2の演算結果を第2EAG63-2へ出力する。第2EAG63-2は、第2加算器64-2の出力と第32切換え器66-32の出力とを加算し、メモリアドレスi00_adrを生成し、この生成したメモリアドレスi00_adrを第42レジスタ67-42およびメモリ62それぞれへ出力する。メモリ62は、第2EAG63-2で指定されたメモリアドレスi00_adrを持つ記憶領域からデータ(すなわち、画素値i00)を取り出し、第52レジスタ67-52へ出力する。第52レジスタ67-52は、メモリアドレスi00_adrを持つ記憶領域から取り出された画素値i00を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスi00_adrが順次に生成され、第52レジスタ67-52には、前記メモリアドレスi00_adrを持つ記憶領域から順次に取り出された画素値i00が順次に保持される。
なお、上述では、第21切換え器66-21に入力される値は、0と-9であって、第22切換え器66-22に入力される値は、0と10であったが、これら各値は、対象画像IPのサイズIH×IWおよびカーネルKNのサイズKH×KWとに依存する。一般には、メモリアドレス0番地から行ごとに対象画像IPが記憶される場合、第21切換え器66-21に入力される値は、0と-(IW-KW+1)とであり、第22切換え器66-22に入力される値は、0とIWとである。第32切換え器66-32に設定される初期値は、-2であったが、この値は、カーネルKNのサイズKH×KWと生成すべきメモリアドレスの行数および列数とに依存する。一般には、第32切換え器66-32に設定される初期値は、-KH+(列番号-1)+(行番号-1)×IWで表される。第11切換え器66-11、第12切換え器66-12および第31切換え器66-31や、次に説明するPE31-22においても、前記各値は、同様に一般化できる。
2行1列のPE31-21において、第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、前記範囲内の各画素における1行2列の画素の画素値i01を、メモリ62から取り出すメモリアドレスi01_adrを生成する回路を構成する。これら第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、図7に示すように、第32切換え器66-32の初期値-2に代え初期値-1が第31切換え器66-31にセットされる点を除き、それぞれ、上述した第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42と同様であるので、その説明を省略する。そして、メモリ62は、第1EAG63-1で指定されたメモリアドレスi01_adrを持つ記憶領域からデータ(すなわち、画素値i01)を取り出し、第51レジスタ67-51へ出力する。第51レジスタ67-51は、メモリアドレスi01_adrを持つ記憶領域から取り出された画素値i01を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスi01_adrが順次に生成され、第51レジスタ67-51には、前記メモリアドレスi01_adrを持つ記憶領域から順次に取り出された画素値i01が順次に保持される。
2行2列のPE31-22では、メモリ62には、メモリインターフェース4を介してメモリ5から、対象画像IPのデータが読み込まれ、メモリアドレス0番地から行ごとに格納される。第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、前記範囲内の各画素における2行1列の画素の画素値i10を、メモリ62から取り出すメモリアドレスi10_adrを生成する回路を構成する。2行2列のPE31-22における第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、図8に示すように、2行1列のPE31-21における第32切換え器66-32の初期値-2に代え初期値8が当該PE31-22の第32切換え器66-32にセットされる点を除き、それぞれ、上述した2行1列のPE31-21における第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42と同様であるので、その説明を省略する。そして、メモリ62は、第2EAG63-2で指定されたメモリアドレスi10_adrを持つ記憶領域からデータ(すなわち、画素値i10)を取り出し、第52レジスタ67-52へ出力する。第52レジスタ67-52は、メモリアドレスi10_adrを持つ記憶領域から取り出された画素値i10を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスi10_adrが順次に生成され、第52レジスタ67-52には、前記メモリアドレスi10_adrを持つ記憶領域から順次に取り出された画素値i10が順次に保持される。
2行2列のPE31-22において、第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、前記範囲内の各画素における2行2列の画素の画素値i11を、メモリ62から取り出すメモリアドレスi11_adrを生成する回路を構成する。2行2列のPE31-22における第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、図8に示すように、前記2行1列のPE31-21における第32切換え器66-32の初期値-2に代え初期値9が当該PE31-32における第31切換え器66-31にセットされる点を除き、それぞれ、上述した2行1列のPE31-21における第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42と同様であるので、その説明を省略する。そして、メモリ62は、第1EAG63-1で指定されたメモリアドレスi11_adrを持つ記憶領域からデータ(すなわち、画素値i11)を取り出し、第51レジスタ67-51へ出力する。第51レジスタ67-51は、メモリアドレスi11_adrを持つ記憶領域から取り出された画素値i11を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスi11_adrが順次に生成され、第51レジスタ67-51には、前記メモリアドレスi11_adrを持つ記憶領域から順次に取り出された画素値i11が順次に保持される。
2行3列のPE31-23では、メモリ62には、メモリインターフェース4を介してメモリ5から、カーネルKNのデータが読み込まれ、メモリアドレス0番地から行ごとにそしてカーネルごとに格納される。第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、カーネルKNにおける1行1列のフィルタ係数k00を、メモリ62から取り出すメモリアドレスk00_adrを生成する回路を構成する。
より詳しくは、2行3列のPE31-23において、第21比較器65-21は、1行3列のPE31-13における第3レジスタ67-3に接続され、前記PE31-13の第3レジスタ67-3に保持されているALU61の演算結果(すなわち、制御変数x)が入力される。図9に示すように、第21比較器65-21は、前記PE31-13の第3レジスタ67-3から入力された制御変数xと(OW-1)とを比較し、その比較結果を第21切換え器66-21の制御信号として第21切換え器66-21へ出力する。第21切換え器66-21には、1行1列のメモリアドレスk00_adrを生成するために、0と4とが入力され、第21切換え器66-21は、制御変数xと(OW-1)とが等しくないと言う第21比較器65-21の比較結果である場合、0を第2加算器64-2へ出力し、制御変数xと(OW-1)とが等しいと言う第21比較器65-21の比較結果である場合、4を第2加算器64-2へ出力する。
2行3列のPE31-23において、第22比較器65-22は、1行2列のPE31-12における第3レジスタ67-3に接続され、前記PE31-12の第3レジスタ67-3に保持されているALU61の演算結果(すなわち、制御変数c)が入力される。第22比較器65-22は、前記PE31-12の第3レジスタ67-3から入力された制御変数cと(OC×OW-1)とを比較し、その比較結果を第22切換え器66-22の制御信号として第22切換え器66-22へ出力する。第22切換え器66-22には、1行1列のメモリアドレスk00_adrを生成するために、0と-12とが入力され、第22切換え器66-22は、制御変数cと(OC×OW-1)とが等しくないと言う第22比較器65-22の比較結果である場合、0を第2加算器64-2へ出力し、制御変数cと(OC×OW-1)とが等しいと言う第22比較器65-22の比較結果である場合、-12を第2加算器64-2へ出力する。
2行3列のPE31-23において、第2加算器64-2は、第21切換え器66-21の出力と第22切換器の出力との加算結果を第2EAG63-2へ出力する。第42レジスタ67-42は、第2EAG63-2で生成されたメモリアドレスk00_adrを保持し、第32切換え器66-32には、この第42レジスタ67-42で保持されているメモリアドレスk00_adrと、初期値として8が入力され、第32切換え器66-32は、ONESHOT信号で選択された8を初期値として第2EAG63-2へ出力し、次以降のマシンサイクルでは、第42レジスタ67-42に保持されている第2EAG63-2の演算結果を第2EAG63-2へ出力する。第2EAG63-2は、第2加算器64-2の出力と第32切換え器66-32の出力とを加算してメモリアドレスk00_adrを生成し、この生成したメモリアドレスk00_adrを第42レジスタ67-42およびメモリ62それぞれへ出力する。メモリ62は、第2EAG63-2で指定されたメモリアドレスk00_adrを持つ記憶領域からデータ(すなわち、フィルタ係数k00)を取り出し、第52レジスタ67-52へ出力する。第52レジスタ67-52は、メモリアドレスk00_adrを持つ記憶領域から取り出されたフィルタ係数k00を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスk00_adrが順次に生成され、第52レジスタ67-52には、前記メモリアドレスk00_adrを持つ記憶領域から順次に取り出されたフィルタ係数k00が順次に保持される。
なお、上述では、第21切換え器66-21に入力される値は、0と4であって、第22切換え器66-22に入力される値は、0と-12であったが、これら各値は、カーネルKNのサイズKH×KWとカーネルKNの個数(OC)とに依存する。一般には、メモリアドレス0番地から行ごとにそしてカーネルKNごとに各カーネルKNが記憶される場合、第21切換え器66-21に入力される値は、0とKH×KWとであり、第22切換え器66-22に入力される値は、0と-KH×KW×OCとである。第32切換え器66-32に設定される初期値は、8であったが、この値は、カーネルKNのサイズKH×KWと生成すべきメモリアドレスの行数および列数とに依存する。一般には、第31切換え器66-31に設定される初期値は、(KH×KW)×(-1+OC)+(列番号-1)+(行番号-1)×KWで表される。第11切換え器66-11、第12切換え器66-12および第31切換え器66-31や、次に説明するPE31-24においても、前記各値は、同様に一般化できる。
2行3列のPE31-23において、第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、カーネルKNにおける1行2列のフィルタ係数k01を、メモリ62から取り出すメモリアドレスk01_adrを生成する回路を構成する。これら第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、図9に示すように、第32切換え器66-32の初期値8に代え初期値9が第31切換え器66-31にセットされる点を除き、それぞれ、上述した第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42と同様であるので、その説明を省略する。そして、メモリ62は、第1EAG63-1で指定されたメモリアドレスk01_adrを持つ記憶領域からデータ(すなわち、フィルタ係数k01)を取り出し、第51レジスタ67-51へ出力する。第51レジスタ67-51は、メモリアドレスk01_adrを持つ記憶領域から取り出されたフィルタ係数k01を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスk01_adrが順次に生成され、第51レジスタ67-51には、前記メモリアドレスk01_adrを持つ記憶領域から順次に取り出されたフィルタ係数k01が順次に保持される。
2行4列のPE31-24では、メモリ62には、メモリインターフェース4を介してメモリ5から、カーネルKNのデータが読み込まれ、メモリアドレス0番地から行ごとにそしてカーネルごとに格納される。第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、カーネルKNにおける2行1列のフィルタ係数k10を、メモリ62から取り出すメモリアドレスk10_adrを生成する回路を構成する。2行4列のPE31-24における第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、図10に示すように、2行3列のPE31-23における第32切換え器66-32の初期値8に代え初期値10が当該PE31-24の第32切換え器66-32にセットされる点を除き、それぞれ、上述した2行3列のPE31-23における第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42と同様であるので、その説明を省略する。そして、メモリ62は、第2EAG63-2で指定されたメモリアドレスk10_adrを持つ記憶領域からデータ(すなわち、フィルタ係数k10)を取り出し、第52レジスタ67-52へ出力する。第52レジスタ67-52は、メモリアドレスk10_adrを持つ記憶領域から取り出されたフィルタ係数k10を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスk10_adrが順次に生成され、第52レジスタ67-52には、前記メモリアドレスk10_adrを持つ記憶領域から順次に取り出されたフィルタ係数k10が順次に保持される。
2行4列のPE31-24において、第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、カーネルKNにおける2行2列のフィルタ係数k11を、メモリ62から取り出すメモリアドレスki11_adrを生成する回路を構成する。2行4列のPE31-24における第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、図10に示すように、前記2行3列のPE31-23における第32切換え器66-32の初期値8に代え初期値11が当該PE31-34における第31切換え器66-31にセットされる点を除き、それぞれ、上述した2行3列のPE31-23における第2EAG63-2、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42と同様であるので、その説明を省略する。そして、メモリ62は、第1EAG63-1で指定されたメモリアドレスk11_adrを持つ記憶領域からデータ(すなわち、フィルタ係数k11)を取り出し、第51レジスタ67-51へ出力する。第51レジスタ67-51は、メモリアドレスk11_adrを持つ記憶領域から取り出されたフィルタ係数k11を保持する。このような動作がマシンサイクルごとに実行され、メモリアドレスk11_adrが順次に生成され、第51レジスタ67-51には、前記メモリアドレスk11_adrを持つ記憶領域から順次に取り出されたフィルタ係数k11が順次に保持される。
2行目(2段目の行)のPE31-21~31-24は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
右上を基準に3行目(3段目の行)のPE31-31~31-34は、対象画像IPのうち、カーネルKNのサイズに一致した範囲内における各画素の各画素値とカーネルKNの各要素(各フィルタ係数)とを同位置同士で乗算する回路となり、前記コンフィギュレーションデータは、3行目のPE31-31~31-34が前記各画素の各画素値とカーネルKNの各フィルタ係数とを同位置同士で乗算する回路となるように作成される。
より具体的には、本実施形態では、3行1列のPE31-31は、1行1列の画素の画素値i00と1行1列のフィルタ係数k00とを乗算する回路となり、3行2列のPE31-32は、1行2列の画素の画素値i01と1行2列のフィルタ係数k01とを乗算する回路となり、3行3列のPE31-33は、2行1列の画素の画素値i10と2行1列のフィルタ係数k10とを乗算する回路となり、3行4列のPE31-34は、2行2列の画素の画素値i11と2行2列のフィルタ係数k11とを乗算する回路となる。これらPE31-31~31-34は、図11に示すように、ALU61および第3レジスタ67-3を備えて構成され、図3を用いて説明した上述と同様に各回路が接続され、入出力される。
3行1列のPE31-20では、2行1列のPE31-21における第52レジスタ67-52と2行3列のPE31-23における第52レジスタ67-52とがALU61に接続され、これによって2行1列のPE31-21で取り出された1行1列の画素の画素値i00と2行3列のPE31-23で取り出された1行1列のフィルタ係数k00とがALU61に入力される。ALU61は、これら画素値i00とフィルタ係数k00とを乗算し、その乗算結果(第11乗算結果)(i00×k00)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記第11乗算結果(i00×k00)を保持する。
3行2列のPE31-32では、2行1列のPE31-21における第51レジスタ67-51と2行3列のPE31-23における第51レジスタ67-51とがALU61に接続され、これによって2行1列のPE31-21で取り出された1行2列の画素の画素値i01と2行3列のPE31-23で取り出された1行2列のフィルタ係数k01とがALU61に入力される。ALU61は、これら画素の画素値i01とフィルタ係数k01とを乗算し、その乗算結果(第12乗算結果)(i01×k01)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記第12乗算結果(i01×k01)を保持する。
3行3列のPE31-33では、2行2列のPE31-22における第52レジスタ67-52と2行4列のPE31-24における第52レジスタ67-52とがALU61に接続され、これによって2行2列のPE31-22で取り出された2行1列の画素の画素値i10と2行4列のPE31-24で取り出された2行1列のフィルタ係数k10とがALU61に入力される。ALU61は、これら画素値i10とフィルタ係数k10とを乗算し、その乗算結果(第21乗算結果)(i10×k10)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記第21乗算結果(i10×k10)を保持する。
3行4列のPE31-34では、2行2列のPE31-22における第51レジスタ67-51と2行4列のPE31-24における第51レジスタ67-51とがALU61に接続され、これによって2行2列のPE31-22で取り出された2行2列の画素の画素値i11と2行4列のPE31-24で取り出された2行2列のフィルタ係数k11とがALU61に入力される。ALU61は、これら画素値i11とフィルタ係数k11とを乗算し、その乗算結果(第22乗算結果)(i11×k11)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記第22乗算結果(i11×k11)を保持する。
3行目(3段目の行)のPE31-31~31-34は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
右上を基準に4行目(4段目の行)のPE31-41~31-44は、3行目のPE31-31~31-34で演算された各乗算結果を2個ずつ加算する回路となり、前記コンフィギュレーションデータは、4行目のPE31-41~31-44が前記各乗算結果を2個ずつ加算する回路となるように作成される。
より具体的には、本実施形態では、4行1列のPE31-41は、1行1列の画素の画素値i00と1行1列のフィルタ係数k00とを乗算した結果である第11乗算結果(i00×k00)と、1行2列の画素の画素値i01と1行2列のフィルタ係数k01とを乗算した結果である第12乗算結果(i01×k01)とを加算する回路となり、4行3列のPE31-43は、2行1列の画素の画素値i10と2行1列のフィルタ係数k10とを乗算した結果である第21乗算結果(i10×k10)と、2行2列の画素の画素値i11と2行2列のフィルタ係数k11とを乗算した結果である第22乗算結果(i11×k11)とを加算する回路となる。なお、4行2列のPE31-42および4行4列のPE31-44は、本実施形態では、使用されていない。これらPE31-41、31-43は、図11に示すように、ALU61および第3レジスタ67-3を備えて構成され、図3を用いて説明した上述と同様に各回路が接続され、入出力される。
4行1列のPE31-41では、3行1列のPE31-31における第3レジスタ67-3と3行2列のPE31-32における第3レジスタ67-3とがALU61に接続され、これによって3行1列のPE31-31で演算された第11乗算結果(i00×k00)と、3行2列のPE31-32で演算された第12乗算結果(i01×k01)とがALU61に入力される。ALU61は、これら第11乗算結果(i00×k00)と第12乗算結果(i01×k01)とを加算し、その加算結果(第1112加算結果)(i00×k00+i01×k01)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記第1112加算結果(i00×k00+i01×k01)を保持する。
4行3列のPE31-43では、3行3列のPE31-33における第3レジスタ67-3と3行4列のPE31-34における第3レジスタ67-3とがALU61に接続され、これによって3行3列のPE31-33で演算された第21乗算結果(i10×k10)と、3行4列のPE31-34で演算された第22乗算結果(i11×k11)とがALU61に入力される。ALU61は、これら第21乗算結果(i10×k10)と第22乗算結果(i11×k11)とを加算し、その加算結果(第2122加算結果)(i10×k10+i11×k11)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記第2122加算結果(i10×k10+i11×k11)を保持する。
4行目(4段目の行)のPE31-41~31-44は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
右上を基準に5行目(5段目の行)のPE31-51~31-54は、4行目のPE31-41~31-44で演算された各加算結果をさらに加算する回路となり、前記コンフィギュレーションデータは、5行目のPE31-51~31-54が前記各加算結果を加算する回路となるように作成される。
より具体的には、本実施形態では、5行1列のPE31-51は、第11乗算結果(i00×k00)と第12乗算結果(i01×k01)とを加算した結果である第1112加算結果(i00×k00+i01×k01)と、第21乗算結果(i10×k10)と第22乗算結果(i11×k11)とを加算した結果である第2122加算結果(i10×k10+i11×k11)とを加算する回路となる。なお、5行2列のPE31-52、5行3列のPE31-53および5行4列のPE31-54は、本実施形態では、使用されていない。このPE31-51は、図12に示すように、ALU61、メモリ62、第1EAG、第31切換え器66-31、ならびに、第3および第41レジスタ67-3、67-41を備えて構成され、図3を用いて説明した上述と同様に各回路が接続され、入出力される。
5行1列のPE31-51では、4行1列のPE31-41における第3レジスタ67-3と4行3列のPE31-43における第3レジスタ67-3とがALU61に接続され、これによって4行1列のPE31-41で演算された第1112加算結果(i00×k00+i01×k01)と、4行3列のPE31-43で演算された第2122加算結果(i10×k10+i11×k11)とがALU61に入力される。ALU61は、これら第1112加算結果(i00×k00+i01×k01)と第2122加算結果(i10×k10+i11×k11)とを加算し、その加算結果(i00×k00+i01×k01+i10×k10+i11×k11)を第3レジスタ67-3へ出力し、第3レジスタ67-3は、前記加算結果(i00×k00+i01×k01+i10×k10+i11×k11)を保持する。これによって畳み込み演算で生成される特徴マップFMにおける1個の画素の画素値が求められる。
第31切換え器66-31には、第41レジスタ67-41に保持されている第1EAG63-1の演算結果と-1とが入力され、第31切換え器66-31は、畳み込み演算の開始時に、計算開始時にONESHOT信号で選択された-1を初期値として第1EAG63-1へ出力し、次以降のマシンサイクルでは、第31レジスタ67-31に保持されている第1EAG63-1の演算結果を第163-1へ出力する。第1EAG63-1には、第41切換え器66-41の出力と1とが入力され、第1EAG63-1は、これら第31切換え器66-31の出力と1とを加算し、その加算結果を特徴マップFMの各画素の画素値を格納するメモリアドレスo_adrとして第41レジスタ67-41およびメモリ62それぞれへ出力する。したがって、PE31-51の第1EAG63-1は、マシンサイクルごとに動作することで、0からマシンサイクルごとに1ずつアップカウントし、メモリアドレスo_adrを生成する。
メモリ62は、第1EAG63-1で指定されたメモリアドレスo_adrを持つ記憶領域に、ALU61で求められた前記加算結果((i00×k00)+(i01×k01)+(i10×k10)+(i11×k11)、すなわち、特徴マップFMの画素値)記憶する。
5行目(5段目の行)のPE31-51~31-54は、それぞれ、このように再構成され、マシンサイクルごとに動作する。
そして、5個のstage0_ready信号~stage4_ready信号は、畳み込み演算の開始では、stage0_ready信号からstage4_ready信号へ、マシンサイクルごとに順次にLowレベルからHiレベルへセットされる。1行1列のPE31-11における制御変数yが0になると、すなわち、対象画像IPに対するカーネルKNを用いた畳み込み演算が終了すると、5個のstage0_ready信号~stage4_ready信号は、stage0_ready信号からstage4_ready信号へ、マシンサイクルごとに順次にHiレベルからLowレベルへセットされる。そして、5行1列のPE31-51におけるメモリ62から、当該メモリ62に記憶されている特徴マップFMのデータがメモリインターフェース4を介してメモリ5へ転送され、取り出される。これによって畳み込み演算の演算結果(すなわち、特徴マップFM)が取得できる。
次に、このような畳み込み演算を実行する演算器アレイ3の動作を一例を用いてより具体的に説明する。図13は、前記畳み込み層に入力された画像(対象画像)の各画素値を格納するメモリのメモリアドレスを示す図である。図14は、前記畳み込み層で実行される畳み込み演算で用いられるカーネルの各要素(画像フィルタの各フィルタ係数)を格納するメモリのメモリアドレスを示す図である。図15は、前記畳み込み層による畳み込み演算によって生成された画像(特徴マップ)の各画素値を格納するメモリのメモリアドレスを示す図である。図15Aは、第1特徴マップFM-1を記憶する各記憶領域の各メモリアドレスo_adrを示し、図15Bは、第2特徴マップFM-2を記憶する各記憶領域の各メモリアドレスo_adrを示し、図15Cは、第3特徴マップFM-3を記憶する各記憶領域の各メモリアドレスo_adrを示す。図16は、前記畳み込み層(データ処理装置)における演算器アレイのタイムチャートを示す図である。図16において、上段から下段に向かって順に、yループの制御変数y、cループの制御変数c、xループの制御変数x、メモリアドレスi00_adr、メモリアドレスi01_adr、メモリアドレスi10_adr、メモリアドレスi11_adr、メモリアドレスk00_adr、メモリアドレスk01_adr、メモリアドレスk10_adr、メモリアドレスk11_adr、メモリアドレスo_adr、stage0_ready信号、stage1_ready信号、stage2_ready信号、stage3_ready信号、および、stage4_ready信号の各値を示し、横軸は、時間である。
この例では、対象画像IPは、図4に示すように、10×10のサイズを持ち(IH=IW=10)、カーネルKNは、2×2のサイズを持つ(KH=KW=2)。カーネルKNの個数は、3個である(OC=3)。したがって、9×9のサイズを持つ3個の特徴マップFM-1~FMが畳み込み演算によって生成される(OH=OW=9)。
畳み込み演算の開始に際し、演算器アレイ3は、メモリ5からメモリインターフェース4を介してコンフィギュレーションデータを読み込む。これによって、上述したように、1行目のPE31-11~31-14は、各ループの制御変数を生成する回路となるように、再構成される。2行目のPE31-21~31-24は、制御変数yで指定された当該行において、制御変数xで指定されることによって行に沿って1列ずつシフトしながら、対象画像IPから、カーネルKNのサイズに一致した範囲内における各画素の各画素値(i00、i01、i10、i11)を取り出し、制御変数cで指定されたカーネルKNにおける各フィルタ係数(k00、k01、k10、k11)を取り出す回路となるように、再構成される。3行目のPE31-31~31-34は、対象画像IPのうち、カーネルKNのサイズに一致した範囲内における各画素の各画素値(i00、i01、i10、i11)とカーネルKNの各フィルタ係数(k00、k01、k10、k11)とを同位置同士で乗算する回路となるように、再構成される。4行目のPE31-41~31-44は、3行目のPE31-31~31-34で演算された各乗算結果(i00×k00、i01×k01、i10×k10、i11×k11)を2個ずつ加算する回路となるように、再構成される。5行目のPE31-51~31-54は、4行目のPE31-41~31-44で演算された各加算結果(i00×k00+i01×k01、i10×k10+i11×k11)をさらに加算する回路となるように、再構成される。
そして、2行1列のPE31-21におけるメモリ62および2行2列のPE31-22におけるメモリ62それぞれには、メモリインターフェース4を介してメモリ5から対象画像IPの各画素値が読み込まれてメモリアドレス0番地から行ごとに格納される。2行1列のPE31-21におけるメモリ62および2行2列のPE31-22におけるメモリ62それぞれでは、例えば、図13に示すように、対象画像IPの各画素値が10×10の各記憶領域に格納され、これら10×10の各記憶領域には、0から99までのメモリアドレスが10個ごとに10行に亘って(10列で10行に亘って)つづら折りに割り当てられている。例えば、1行目における10個の記憶領域には、0から9までの整数が順次に割り当てられ、2行目における10個の記憶領域には、10から19までの整数が順次に割り当てられ、10行目における10個の記憶領域には、90から99までの整数が順次に割り当てられている。
2行3列のPE31-23におけるメモリ62および2行4列のPE31-24におけるメモリ62それぞれには、メモリインターフェース4を介してメモリ5から3個のカーネルKN-1~KN-3の各フィルタ係数が読み込まれてメモリアドレス0番地から行ごとにそしてカーネルごとに格納される。2行3列のPE31-23におけるメモリ62および2行4列のPE31-24におけるメモリ62それぞれでは、例えば、図14に示すように、3個のカーネルKN-1~KN-3の各フィルタ係数が2×6の各記憶領域に格納され、これら2×6の各記憶領域には、0から11までのメモリアドレスが2個ごとに6行に亘って(2列で6行に亘って)つづら折りに割り当てられている。例えば、1行目における2個の各記憶領域には、0および1がそれぞれ割り当てられ、2行目における2個の記憶領域には、2および3がそれぞれ割り当てられ、6行目における2個の記憶領域には、10および11がそれぞれ割り当てられている。
演算が開始されると、図16において、まず、最初のマシンサイクルにおいて、stage0_ready信号がHiレベルとなり、1行目のPE31-11~31-14がその動作を開始する。なお、このマシンサイクルでは、stage1_ready信号、stage2_ready信号、stage3_ready信号およびstage4_ready信号は、それぞれ、Lowレベルであり、2行目以下のPE31-21~31-54は、動作していない。1行1列のPE31-11は、上述の動作によって、制御変数y=242を生成し、その第3レジスタ67-3に242を保持する。1行2列のPE31-12は、上述の動作によって、制御変数c=26を生成し、その第3レジスタ67-3に26を保持する。1行3列のPE31-13は、上述の動作によって、制御変数x=8を生成し、その第3レジスタ67-3に8を保持する。
ここで、この例では、カーネルKNは、対象画像IPに対し行方向によって9画素分を1画素ずつシフトするので、xループ内の繰り返し回数は、9回であり、制御変数xは、8から0までの9個の整数となる。このため、制御変数xには、上述のように、8となる。この9回の繰り返し回数に対し、3個のカーネルKN-1~KN-3を用いて演算されるため、制御変数cは、26から0までの27個の整数となる(9×3=27)。この27回の繰り返し回数に対し、対象画像IPの1行目から9行目がカーネルKNを用いて演算されるため、制御変数yは、242から0までの243個の整数となる(27×9=243)。
次のマシンサイクルにおいて、stage1_ready信号がHiレベルとなり、2行目のPE31-21~31-24がその動作を開始する。stage0_ready信号は、Hiレベルを維持し、1行目のPE31-21~31-24は、その動作を続ける。2行1列のPE31-21は、上述の動作によって、メモリアドレスi00_adr=0およびメモリアドレスi01_adr=1を生成し、図13に示すように、メモリアドレスi00_adr=0を持つ記憶領域からデータ(画素値i00)を取り出し、その第52レジスタ67-52に保持し、メモリアドレスi01_adr=1を持つ記憶領域からデータ(画素値i01)を取り出し、その第51レジスタ67-51に保持する。2行2列のPE31-22は、上述の動作によって、メモリアドレスi10_adr=10およびメモリアドレスi11_adr=11を生成し、図13に示すように、メモリアドレスi10_adr=10を持つ記憶領域からデータ(画素値i10)を取り出し、その第52レジスタ67-52に保持し、メモリアドレスi11_adr=11を持つ記憶領域からデータ(画素値i11)を取り出し、その第51レジスタ67-51に保持する。2行3列のPE31-23は、上述の動作によって、メモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を生成し、図14に示すように、メモリアドレスk00_adr=0を持つ記憶領域からデータ(フィルタ係数k00)を取り出し、その第52レジスタ67-52に保持し、メモリアドレスk01_adr=1を持つ記憶領域からデータ(フィルタ係数k01)を取り出し、その第51レジスタ67-51に保持する。2行4列のPE31-24は、上述の動作によって、メモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を生成し、図14に示すように、メモリアドレスk10_adr=2を持つ記憶領域からデータ(フィルタ係数k10)を取り出し、その第52レジスタ67-52に保持し、メモリアドレスk11_adr=3を持つ記憶領域からデータ(フィルタ係数k11)を取り出し、その第51レジスタ67-51に保持する。
一方、1行1列のPE31-11は、制御変数y=241を生成し、その第3レジスタ67-3に241を保持する。1行2列のPE31-12は、制御変数c=25を生成し、その第3レジスタ67-3に25を保持する。1行3列のPE31-13は、制御変数x=7を生成し、その第3レジスタ67-3に7を保持する。
次のマシンサイクルにおいて、stage2_ready信号がHiレベルとなり、3行目のPE31-31~31-34がその動作を開始する。stage0_ready信号およびstage1_ready信号は、Hiレベルを維持し、1行目および2行目のPE31-11~31-14、31-21~31-24は、その動作を続ける。3行1列のPE31-31は、上述の動作によって、2行1列のPE31-21から入力された画素値i00と2行3列のPE31-23から入力されたフィルタ係数k00とを乗算し、その第11乗算結果(i00×k00)を、その第3レジスタ67-3に保持する。3行2列のPE31-32は、上述の動作によって、2行1列のPE31-21から入力された画素値i01と2行3列のPE31-23から入力されたフィルタ係数k01とを乗算し、その第12乗算結果(i01×k01)を、その第3レジスタ67-3に保持する。3行3列のPE31-33は、上述の動作によって、2行2列のPE31-22から入力された画素値i10と2行4列のPE31-24から入力されたフィルタ係数k10とを乗算し、その第21乗算結果(i10×k10)を、その第3レジスタ67-3に保持する。3行4列のPE31-34は、上述の動作によって、2行2列のPE31-22から入力された画素値i11と2行4列のPE31-24から入力されたフィルタ係数k11とを乗算し、その第22乗算結果(i11×k11)を、その第3レジスタ67-3に保持する。
一方、1行1列のPE31-11は、制御変数y=240を生成し、その第3レジスタ67-3に240を保持する。1行2列のPE31-12は、制御変数c=24を生成し、その第3レジスタ67-3に24を保持する。1行3列のPE31-13は、制御変数x=6を生成し、その第3レジスタ67-3に6を保持する。2行1列のPE31-21は、メモリアドレスi00_adr=1およびメモリアドレスi01_adr=2を生成し、図13に示すように、それらメモリアドレスi00_adr=1およびメモリアドレスi01_adr=2を持つ各記憶領域から各データ(画素値i00、画素値i01)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行2列のPE31-22は、メモリアドレスi10_adr=11およびメモリアドレスi11_adr=12を生成し、図13に示すように、それらメモリアドレスi10_adr=11およびメモリアドレスi11_adr=12を持つ各記憶領域から各データ(画素値i10、画素値i11)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行3列のPE31-23は、メモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を生成し、図14に示すように、それらメモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を持つ各記憶領域から各データ(フィルタ係数k00、フィルタ係数k01)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行4列のPE31-24は、メモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を生成し、図14に示すように、それらメモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を持つ各記憶領域から各データ(フィルタ係数k10、フィルタ係数k11)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。
次のマシンサイクルにおいて、stage3_ready信号がHiレベルとなり、4行目のPE31-41~31-44がその動作を開始する。stage0_ready信号、stage1_ready信号およびstage2_ready信号は、Hiレベルを維持し、1行目、2行目および3行目のPE31-11~31-14、31-21~31-24、31-31~31-34は、その動作を続ける。4行1列のPE31-41は、上述の動作によって、3行1列のPE31-31から入力された第11乗算結果(i00×k00)と3行2列のPE31-32から入力された第12乗算結果(i01×k01)とを加算し、その第1112加算結果(i00×k00+i01×k01)を、その第3レジスタ67-3に保持する。4行3列のPE31-43は、上述の動作によって、3行3列のPE31-33から入力された第21乗算結果(i10×k10)と3行4列のPE31-34から入力された第22乗算結果(i11×k11)とを加算し、その第2122加算結果(i10×k10+i11×k11)を、その第3レジスタ67-3に保持する。
一方、1行1列のPE31-11は、制御変数y=239を生成し、その第3レジスタ67-3に239を保持する。1行2列のPE31-12は、制御変数c=23を生成し、その第3レジスタ67-3に23を保持する。1行3列のPE31-13は、制御変数x=5を生成し、その第3レジスタ67-3に5を保持する。2行1列のPE31-21は、メモリアドレスi00_adr=2およびメモリアドレスi01_adr=3を生成し、図13に示すように、それらメモリアドレスi00_adr=2およびメモリアドレスi01_adr=3を持つ各記憶領域から各データ(画素値i00、画素値i01)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行2列のPE31-22は、メモリアドレスi10_adr=12およびメモリアドレスi11_adr=13を生成し、図13に示すように、それらメモリアドレスi10_adr=12およびメモリアドレスi11_adr=13を持つ各記憶領域から各データ(画素値i10、画素値i11)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行3列のPE31-23は、メモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を生成し、図14に示すように、それらメモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を持つ各記憶領域から各データ(フィルタ係数k00、フィルタ係数k01)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行4列のPE31-24は、メモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を生成し、図14に示すように、それらメモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を持つ各記憶領域から各データ(フィルタ係数k10、フィルタ係数k11)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。3行1列のPE31-31は、PE31-21およびPE31-23それぞれからの各入力に基づいて、第11乗算結果(i00×k00)を求めて、その第3レジスタ67-3に保持する。3行2列のPE31-32は、PE31-21およびPE31-23それぞれからの各入力に基づいて、第12乗算結果(i01×k01)を求めて、その第3レジスタ67-3に保持する。3行3列のPE31-33は、PE31-22およびPE31-24それぞれからの各入力に基づいて、第21乗算結果(i10×k10)を求めて、その第3レジスタ67-3に保持する。3行4列のPE31-34は、PE31-22およびPE31-24それぞれからの各入力に基づいて、第22乗算結果(i11×k11)を求めて、その第3レジスタ67-3に保持する。
次のマシンサイクルにおいて、stage4_ready信号がHiレベルとなり、5行目のPE31-51~31-54がその動作を開始する。stage0_ready信号、stage1_ready信号、stage2_ready信号およびstage3_ready信号は、Hiレベルを維持し、1行目、2行目、3行目および4行目のPE31-11~31-14、31-21~31-24、31-31~31-34、31-41~31-44は、その動作を続ける。5行1列のPE31-51は、上述の動作によって、4行1列のPE31-41から入力された第1112加算結果(i00×k00+i01×k01)と4行2列のPE31-42から入力された第2122加算結果(i10×k10+i11×k11)とを加算し、その加算結果(i00×k00+i01×k01+i10×k10+i11×k11)をその第3レジスタ67-3に保持する。そして、この5行1列のPE31-51は、上述の動作によって、メモリアドレスo_adr=0を生成し、メモリアドレスo_adr=0を持つ記憶領域に、前記加算結果(i00×k00+i01×k01+i10×k10+i11×k11)を格納する。
一方、1行1列のPE31-11は、制御変数y=238を生成し、その第3レジスタ67-3に238を保持する。1行2列のPE31-12は、制御変数c=22を生成し、その第3レジスタ67-3に22を保持する。1行3列のPE31-13は、制御変数x=4を生成し、その第3レジスタ67-3に4を保持する。2行1列のPE31-21は、メモリアドレスi00_adr=3およびメモリアドレスi01_adr=4を生成し、図13に示すように、それらメモリアドレスi00_adr=3およびメモリアドレスi01_adr=4を持つ各記憶領域から各データ(画素値i00、画素値i01)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行2列のPE31-22は、メモリアドレスi10_adr=13およびメモリアドレスi11_adr=14を生成し、図13に示すように、それらメモリアドレスi10_adr=13およびメモリアドレスi11_adr=14を持つ各記憶領域から各データ(画素値i10、画素値i11)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行3列のPE31-23は、メモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を生成し、図14に示すように、それらメモリアドレスk00_adr=0およびメモリアドレスk01_adr=1を持つ各記憶領域から各データ(フィルタ係数k00、フィルタ係数k01)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。2行4列のPE31-24は、メモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を生成し、図14に示すように、それらメモリアドレスk10_adr=2およびメモリアドレスk11_adr=3を持つ各記憶領域から各データ(フィルタ係数k10、フィルタ係数k11)を取り出して、その第52レジスタ67-52および第51レジスタ67-51にそれぞれ保持する。3行1列のPE31-31は、PE31-21およびPE31-23それぞれからの各入力に基づいて、第11乗算結果(i00×k00)を求めて、その第3レジスタ67-3に保持する。3行2列のPE31-32は、PE31-21およびPE31-23それぞれからの各入力に基づいて、第12乗算結果(i01×k01)を求めて、その第3レジスタ67-3に保持する。3行3列のPE31-33は、PE31-22およびPE31-24それぞれからの各入力に基づいて、第21乗算結果(i10×k10)を求めて、その第3レジスタ67-3に保持する。3行4列のPE31-34は、PE31-22およびPE31-24それぞれからの各入力に基づいて、第22乗算結果(i11×k11)を求めて、その第3レジスタ67-3に保持する。4行1列のPE31-41は、PE31-31およびPE31-32それぞれからの各入力に基づいて、第1112加算結果(i00×k00+i01×k01)を求めて、その第3レジスタ67-3に保持する。4行3列のPE31-43は、PE31-33およびPE31-34それぞれからの各入力に基づいて、第2122加算結果(i10×k10+i11×k11)を求めて、その第3レジスタ67-3に保持する。
次以降の各マシンサイクルでは、1行1列のPE31-11で生成される制御変数yが0となるまで、各行のPE31-11~31-54は、それぞれ、上述のように動作し、図16に示す各値を生成する。すなわち、図16に示すように、1行1列のPE31-11は、制御変数yを、242から0まで、マシンサイクルごとに1ずつダウンカウントする。1行2列のPE31-12は、制御変数cを、26から0まで、マシンサイクルごとに1ずつダウンカウントし、0になると、再び制御変数cを26にセット(初期化)して、同様にダウンカウントし、これを繰り返す。1行3列のPE31-13は、制御変数xを、8から0まで、マシンサイクルごとに1ずつダウンカウントし、0になると、再び制御変数xを8にセット(初期化)して、同様にダウンカウントし、これを繰り返す。2行1列のPE31-21は、メモリアドレスi00_adrを、0から8まで、マシンサイクルごとに1ずつアップカウントし、8になると、再び0から同様にアップカウントし、これOC回繰り返す。前記OC回繰り返すと、2行1列のPE31-21は、メモリアドレスi00_adrを、10から18まで、マシンサイクルごとに1ずつアップカウントし、18になると、再び10から同様にアップカウントし、これをOC回繰り返す。前記OC回繰り返すと、2行1列のPE31-21は、メモリアドレスi00_adrを、20から28まで、マシンサイクルごとに1ずつアップカウントし、28になると、再び20から同様にアップカウントし、これOC回繰り返す。2行1列のPE31-21は、以下同様に、図16に示すようにメモリアドレスi00_adrを生成する。さらに、2行1列のPE31-21は、メモリアドレスi01_adrを、1から9まで、マシンサイクルごとに1ずつアップカウントし、9になると、再び1から同様にアップカウントし、これをOC回繰り返す。2行1列のPE31-21が上述のように0から8まで、次に、10から18まで、次に、20から28まで、・・・繰り返したように、2行1列のPE31-21は、上述のように1から9までOC回繰り返すと、図16に示すように、次に、11から19まで、次に、21から29まで、・・・繰り返してメモリアドレスi01_adrを生成する。2行2列のPE31-22は、メモリアドレスi10_adrを、10から18まで、マシンサイクルごとに1ずつアップカウントし、18になると、再び10から同様にアップカウントし、これをOC回繰り返す。2行1列のPE31-21が上述のように0から8まで、次に、10から18まで、次に、20から28まで、・・・繰り返したように、2行2列のPE31-22は、上述のように10から18までOC回繰り返すと、図16に示すように、次に、20から28まで、次に、30から38まで、・・・繰り返してメモリアドレスi10_adrを生成する。さらに、2行2列のPE31-22は、メモリアドレスi11_adrを、11から19まで、マシンサイクルごとに1ずつアップカウントし、19になると、再び11から同様にアップカウントし、これをOC回繰り返す。2行1列のPE31-21が上述のように0から8まで、次に、10から18まで、次に、20から28まで、・・・繰り返したように、2行2列のPE31-22は、上述のように11から19までOC回繰り返すと、図16に示すように、次に、21から29まで、次に、31から39まで、・・・繰り返してメモリアドレスi01_adrを生成する。2行3列のPE31-23は、メモリアドレスk00_adrを、9回のマシンサイクルごとに0、4、8とし、8になると、再び0から同様に9回のマシンサイクルごとに0、4、8とし、これを繰り返す。2行3列のPE31-23は、メモリアドレスk01_adrを、9回のマシンサイクルごとに1、5、9とし、9になると、再び1から同様に9回のマシンサイクルごとに1、5、9とし、これを繰り返す。2行4列のPE31-24は、メモリアドレスk10_adrを、9回のマシンサイクルごとに2、6、10とし、10になると、再び2から同様に9回のマシンサイクルごとに2、6、10とし、これを繰り返す。2行4列のPE31-24は、メモリアドレスk11_adrを、9回のマシンサイクルごとに3、7、11とし、11になると、再び3から同様に9回のマシンサイクルごとに3、7、11とし、これを繰り返す。3行目の各PE31-31~31-34は、2行目の各PE31-21~31-24でマシンサイクルごとに順次に取り出された各画素値(i00、i01、i10、i11)と各フィルタ係数(k00、k01、k10、k11)とを同位置同士で乗算する。4行目の各PE31-41、31-43は、3行目の各PE31-31~31-34でマシンサイクルごとに順次に乗算された各乗算結果を2個ずつ加算する。5行目の各PE31-51は、4行目の各PE31-41、31-43でマシンサイクルごとに順次に加算された各加算結果をさらに加算し、0からアップカウントされたメモリアドレスo_adrに従った記憶領域に、その加算結果を格納する。
1行1列のPE31-11で生成される制御変数yが0となると、カーネルKNが対象画像IPにおけるカーネルKNのサイズに応じた最終行最終列に到達したので、図16に示すように、stage0_ready信号、stage1_ready信号、stage2_ready信号、stage3_ready信号およびstage4_ready信号は、それぞれ、この順でマシンサイクルごとに順次に、HiレベルからLowレベルに変更され、1行目から5行目まで順次に、その動作が停止される。
その動作が停止されると、5行1列のPE31-51のメモリ62に格納された、対象画像IPに対し、3個のカーネルKN-1~KN-3で畳み込み演算した演算結果が、メモリインターフェース4を介してメモリ5へ読み出される。
ここで、上述したように、メモリアドレスo_adrは、0からマシンサイクルごとにアップカウントされる一方、対象画像IPの1行ごとに、3個のカーネルKN-1~KN-3を用いて演算されるので、特徴マップFMは、図15に示すように、各記憶領域に記憶される。すなわち、対象画像IPを第1カーネルKN-1で畳み込み演算することによって生成された第1特徴マップFM-1は、図15Aに示すように、メモリアドレスo_adr=0~8、27~35、54~62、81~89、108~116、135~143、162~170、189~197、216~224それぞれを持つ各記憶領域に記憶される。すなわち、第1特徴マップFM-1を記憶する各記憶領域のメモリアドレスo_adrは、0から9個連続すると、16だけ飛んでその先から再び9個連続して再び16だけ飛び、これを繰り返す。対象画像IPを第2カーネルKN-2で畳み込み演算することによって生成された第2特徴マップFM-2は、図15Bに示すように、メモリアドレスo_adr=9~17、36~44、63~71、90~98、117~125、144~152、171~179、198~206、225~233それぞれを持つ各記憶領域に記憶される。すなわち、第2特徴マップFM-2を記憶する各記憶領域のメモリアドレスo_adrは、9から9個連続すると、16だけ飛んでその先から再び9個連続して再び16だけ飛び、これを繰り返す。対象画像IPを第3カーネルKN-3で畳み込み演算することによって生成された第3特徴マップFM-3は、図15Cに示すように、メモリアドレスo_adr=18~26、45~53、72~80、99~107、126~134、153~161、180~188、207~215、234~242それぞれを持つ各記憶領域に記憶される。すなわち、第3特徴マップFM-3を記憶する各記憶領域のメモリアドレスo_adrは、18から9個連続すると、16だけ飛んでその先から再び9個連続して再び16だけ飛び、これを繰り返す。
第1ないし第3特徴マップFM-1~FM-3を、5行1列のPE31-51のメモリ62から、メモリインターフェース4を介してメモリ5へ読み出してメモリ5に格納する際、第1ないし第3特徴マップFM-1~FM-3は、図15に示すようにメモリアドレスが不連続でメモリ5に格納されて良く、また、このような不連続なメモリアドレスを考慮することで、各特徴マップFMごとにメモリアドレスが連続するようにメモリ5に格納されて良い。
以上の説明から分かるように、本実施形態では、第1EAG63-1、第1加算器64-1、第11および第12比較器65-11、65-12、第11、第12および第31切換え器66-11、66-12、66-31および第41レジスタ67-41は、メモリアドレスを生成する請求項のアドレス生成器の一例に相当し、第2EAG63-1、第2加算器64-2、第21および第22比較器65-21、65-22、第21、第22および第32切換え器66-21、66-22、66-32および第42レジスタ67-42は、前記アドレス生成器の他の一例に相当する。第11比較器65-11は、外部から入力される第1入力値と予め設定された所定の第1条件値とを比較する請求項の第1比較器の一例に相当し、第21比較器65-21は、前記第1比較器の他の一例に相当する。第11切換え器66-11は、予め設定された所定の第1および第2設定値が入力され、前記第1比較器の第1比較結果に基づいて前記第1および第2設定値のうちのいずれかを出力する請求項の第1切換え器の一例に相当し、第21切換え器66-21は、前記第1切換え器の他の一例に相当する。第12比較器65-12は、外部から入力される第2入力値と予め設定された所定の第2条件値とを比較する請求項の第2比較器の一例に相当し、第22比較器65-22は、前記第2比較器の他の一例に相当する。第12切換え器66-12は、予め設定された所定の第3および第4設定値が入力され、前記第2比較器の第2比較結果に基づいて前記第3および第4設定値のうちのいずれかを出力する請求項の第2切換え器の一例に相当し、第22切換え器66-22は、前記第2切換え器の他の一例に相当する。第1加算器64-1は、前記第1および第2切換え器それぞれから出力された第1および第2出力値と、予め設定された第5設定値とを加算する請求項の第1加算器の一例に相当し、第2加算器64-2は、前記第1加算器の他の一例に相当する。第31切換え器66-31は、請求項の第3切換え器の一例に相当し、第32切換え器66-32は、請求項の第3切換え器の一例に相当する。第41レジスタ67-41は、請求項のレジスタの一例に相当し、第42レジスタ67-42は、請求項のレジスタの他の一例に相当する。第1EAG63-1は、前記第3切換え器から出力された第3出力値と、前記第1加算器から出力された第1加算結果と加算し、その第2加算結果を前記メモリアドレスとして前記レジスタおよび前記メモリそれぞれに出力する請求項の第2加算器の一例に相当し、第2EAG63-2は、前記第2加算器の他の一例に相当する。
以上説明したように、本実施形態におけるデータ処理装置および畳み込み演算装置の各一例としての畳み込み層111およびこれを用いた畳み込みニューラルネットワーク装置(CNN装置)Wは、メモリアドレスが非連続で変化する情報処理も実行できる。このため、上記畳み込み層111およびCNN装置Wは、多重ループの情報処理を停止することなく連続的に実行できる。したがって、上記畳み込み層111およびCNN装置Wは、1枚ずつ画像を処理する場合でも、演算効率をより向上できる。
また、上記畳み込み層111およびCNN装置Wは、2行1列のPE31-21や2行2列のPE31-22のように、数値範囲内ではメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理できる。したがって、上記畳み込み層111およびCNN装置Wは、このような情報処理を停止することなく連続的に実行できる。
また、上記畳み込み層111およびCNN装置Wは、2行3列のPE31-23や2行4列のPE31-24のように、数値範囲内ではメモリアドレスを一定値に固定的に生成することでメモリにおける1個の記憶領域に記憶されているデータを続けて用いてデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを一定値で生成することでメモリにおける1個の記憶領域に記憶されているデータを続けて用いてデータ処理できる。したがって、上記畳み込み層111およびCNN装置Wは、このような情報処理を停止することなく連続的に実行できる。
そして、上記畳み込み層111およびCNN装置Wは、第11、第12、第21、第22、第31および第32切換え器66-11、66-12、66-21、66-22、66-31、66-32それぞれに設定される各設定値を所定の値に設定することで、これら情報処理を行うアドレス生成器を同一構成で構成できる。
本明細書は、上記のように様々な態様の技術を開示しているが、そのうち主な技術を以下に纏める。
一態様にかかるデータ処理装置は、アレイ状に配置された複数のプロセッサエレメントを備えたデータ処理装置であって、前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備え、前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化で互いに隣接する2個のメモリアドレスを生成することを含む。好ましくは、上述のデータ処理装置において、前記プロセッサエレメントは、演算処理を行う算術論理演算器をさらに備える。
このようなデータ処理装置は、前記アドレス生成器を備えるので、メモリアドレスが非連続で変化する情報処理も実行できる。このため、上記データ処理装置は、多重ループの情報処理を停止することなく連続的に実行できる。したがって、上記データ処理装置は、1枚ずつ画像を処理する場合でも、演算効率をより向上できる。
他の一態様では、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化でメモリアドレスを生成する。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化で互いに隣接する2個のメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化で互いに隣接する2個のメモリアドレスを生成する。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記複数の数値範囲における互いに隣接する2個の数値範囲の一方の最終のメモリアドレスと、前記2個の数値範囲の他方の最初のメモリアドレスとを非連続な変化(すなわち、異なる値)で生成する。
このようなデータ処理装置は、前記アドレス生成器を備えるので、前記数値範囲内ではメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを連続的に変化させて生成することでメモリの各記憶領域を順次にずらしながらデータ処理できる。したがって、上記データ処理装置は、このような情報処理を停止することなく連続的に実行できる。
他の一態様では、上述のデータ処理装置において、前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化でメモリアドレスを生成する。好ましくは、上述のデータ処理装置において、前記アドレス生成器は、前記複数の数値範囲における互いに隣接する2個の数値範囲の一方の最終のメモリアドレスと、前記2個の数値範囲の他方の最初のメモリアドレスとを非連続な変化(すなわち、異なる値)で生成する。
このようなデータ処理装置は、前記アドレス生成器を備えるので、前記数値範囲内ではメモリアドレスを一定値に固定的に生成することでメモリにおける1個の記憶領域に記憶されているデータを続けて用いてデータ処理でき、前記数値範囲内のデータ処理を終了すると、前記数値範囲とは異なる数値範囲へジャンプしてこのジャンプ先の数値範囲内で再びメモリアドレスを一定値で生成することでメモリにおける1個の記憶領域に記憶されているデータを続けて用いてデータ処理できる。したがって、上記データ処理装置は、このような情報処理を停止することなく連続的に実行できる。
他の一態様では、上述のデータ処理装置において、前記アドレス生成器は、予め設定された所定の個数の前記メモリアドレスを生成し、外部から入力される第1入力値と予め設定された所定の第1条件値とを比較する第1比較器と、予め設定された所定の第1および第2設定値が入力され、前記第1比較器の第1比較結果に基づいて前記第1および第2設定値のうちのいずれかを出力する第1切換え器と、外部から入力される第2入力値と予め設定された所定の第2条件値とを比較する第2比較器と、予め設定された所定の第3および第4設定値が入力され、前記第2比較器の第2比較結果に基づいて前記第3および第4設定値のうちのいずれかを出力する第2切換え器と、前記第1および第2切換え器それぞれから出力された第1および第2出力値と、予め設定された第5設定値とを加算する第1加算器と、第3切換え器と、レジスタと、前記第3切換え器から出力された第3出力値と、前記第1加算器から出力された第1加算結果と加算し、その第2加算結果を前記メモリアドレスとして前記レジスタおよび前記メモリそれぞれに出力する第2加算器とを備え、前記レジスタは、前記第2加算器から出力された前記メモリアドレスを保持して前記第2比較器へ出力し、前記第3切換え器は、前記レジスタで保持されている前記メモリアドレス、および、予め設定された所定の第5設定値が入力され、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスを生成する場合には、前記所定の第5設定値を前記第3出力値として出力し、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスの次以降のメモリアドレスを生成する場合には、前記レジスタで保持されている前記メモリアドレスを前記第3出力値として出力する。
このようなデータ処理装置は、第1ないし第3切換え器それぞれに設定される第1ないし第5設定値を所定の値に設定することで、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化で互いに隣接する2個のメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化で互いに隣接する2個のメモリアドレスを生成する前記アドレス生成器を構成できる一方、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化で互いに隣接する2個のメモリアドレスを生成する前記アドレス生成器を構成できる。
他の一態様にかかる畳み込み演算装置は、これら上述のいずれかのデータ処理装置を備え、前記データ処理装置を用いて畳み込み演算を行う。
このような畳み込み演算装置は、これら上述のいずれかのデータ処理装置を備えて畳み込み演算を行うので、多重ループの情報処理で構成される畳み込み演算を停止することなく連続的に実行できる。したがって、上記畳み込み演算装置は、1枚ずつ画像を処理する場合でも、演算効率をより向上できる。
他の一態様にかかる畳み込みニューラルネットワーク装置は、これら上述のいずれかのデータ処理装置を備え、前記データ処理装置を用いて畳み込みニューラルネットワークを形成する。
このような畳み込みニューラルネットワーク装置は、これら上述のいずれかのデータ処理装置を備えて畳み込み演算を行うので、多重ループの情報処理で構成される畳み込み演算を停止することなく連続的に実行できる。したがって、上記畳み込み演算装置は、1枚ずつ画像を処理する場合でも、演算効率をより向上できる。
この出願は、明細書、クレーム、図面および要約を含む、2017年1月17日に出願された日本国特許出願特願2017-6055を基礎とするものであり、その全体の開示は、その全体において参照により本願に組み込まれる。
本発明の実施形態が詳細に図示され、かつ、説明されたが、それは単なる図例及び実例であって限定ではない。本発明の範囲は、添付されたクレームの文言によって解釈されるべきである。
本発明を表現するために、上述において図面を参照しながら実施形態を通して本発明を適切且つ十分に説明したが、当業者であれば上述の実施形態を変更および/または改良することは容易に為し得ることであると認識すべきである。したがって、当業者が実施する変更形態または改良形態が、請求の範囲に記載された請求項の権利範囲を離脱するレベルのものでない限り、当該変更形態または当該改良形態は、当該請求項の権利範囲に包括されると解釈される。
本発明によれば、データを処理するデータ処理装置、前記データ処理装置を備える畳み込み演算装置および前記データ処理装置を備える畳み込みニューラルネットワーク装置が提供できる。
Claims (6)
- アレイ状に配置された複数のプロセッサエレメントを備えたデータ処理装置であって、
前記プロセッサエレメントは、データを記憶するメモリと、前記メモリにアクセスするためのメモリアドレスを生成するアドレス生成器とを備え、
前記アドレス生成器は、前記メモリアドレスを順次に複数生成し、前記メモリアドレスを順次に複数生成する際に、非連続的な変化でメモリアドレスを生成できる、
データ処理装置。 - 前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは連続的な変化でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化でメモリアドレスを生成する、
請求項1に記載のデータ処理装置。 - 前記アドレス生成器は、前記メモリアドレスを順次に複数生成する場合に、複数の数値範囲内それぞれでは一定値でメモリアドレスを生成し、前記複数の数値範囲における互いに隣接する2個の数値範囲間では非連続な変化でメモリアドレスを生成する、
請求項1に記載のデータ処理装置。 - 前記アドレス生成器は、予め設定された所定の個数の前記メモリアドレスを生成し、
外部から入力される第1入力値と予め設定された所定の第1条件値とを比較する第1比較器と、
予め設定された所定の第1および第2設定値が入力され、前記第1比較器の第1比較結果に基づいて前記第1および第2設定値のうちのいずれかを出力する第1切換え器と、
外部から入力される第2入力値と予め設定された所定の第2条件値とを比較する第2比較器と、
予め設定された所定の第3および第4設定値が入力され、前記第2比較器の第2比較結果に基づいて前記第3および第4設定値のうちのいずれかを出力する第2切換え器と、
前記第1および第2切換え器それぞれから出力された第1および第2出力値と、予め設定された第5設定値とを加算する第1加算器と、
第3切換え器と、
レジスタと、
前記第3切換え器から出力された第3出力値と、前記第1加算器から出力された第1加算結果と加算し、その第2加算結果を前記メモリアドレスとして前記レジスタおよび前記メモリそれぞれに出力する第2加算器とを備え、
前記レジスタは、前記第2加算器から出力された前記メモリアドレスを保持して前記第2比較器へ出力し、
前記第3切換え器は、前記レジスタで保持されている前記メモリアドレス、および、予め設定された所定の第5設定値が入力され、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスを生成する場合には、前記所定の第5設定値を前記第3出力値として出力し、前記所定の個数のメモリアドレスのうちの最初のメモリアドレスの次以降のメモリアドレスを生成する場合には、前記レジスタで保持されている前記メモリアドレスを前記第3出力値として出力する、
請求項1ないし請求項3のいずれか1項に記載のデータ処理装置。 - 請求項1ないし請求項4のいずれか1項に記載のデータ処理装置を備え、前記データ処理装置を用いて畳み込み演算を行う畳み込み演算装置。
- 請求項1ないし請求項4のいずれか1項に記載のデータ処理装置を備え、前記データ処理装置を用いて畳み込みニューラルネットワークを形成する畳み込みニューラルネットワーク装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018562888A JPWO2018135088A1 (ja) | 2017-01-17 | 2017-11-02 | データ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017-006055 | 2017-01-17 | ||
JP2017006055 | 2017-01-17 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2018135088A1 true WO2018135088A1 (ja) | 2018-07-26 |
Family
ID=62908335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2017/039755 WO2018135088A1 (ja) | 2017-01-17 | 2017-11-02 | データ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JPWO2018135088A1 (ja) |
WO (1) | WO2018135088A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020044566A1 (ja) * | 2018-08-31 | 2020-03-05 | オリンパス株式会社 | データ処理システムおよびデータ処理方法 |
JP6962526B1 (ja) * | 2021-01-04 | 2021-11-05 | エッジコーティックス ピーティーイー. リミテッド | ニューラルネットワークアクセラレータランタイム再構成可能性 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11184841A (ja) * | 1997-12-22 | 1999-07-09 | Canon Inc | 画像処理方法及び装置 |
JP2016099707A (ja) * | 2014-11-19 | 2016-05-30 | 株式会社デンソー | 演算処理装置 |
-
2017
- 2017-11-02 WO PCT/JP2017/039755 patent/WO2018135088A1/ja active Application Filing
- 2017-11-02 JP JP2018562888A patent/JPWO2018135088A1/ja active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11184841A (ja) * | 1997-12-22 | 1999-07-09 | Canon Inc | 画像処理方法及び装置 |
JP2016099707A (ja) * | 2014-11-19 | 2016-05-30 | 株式会社デンソー | 演算処理装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020044566A1 (ja) * | 2018-08-31 | 2020-03-05 | オリンパス株式会社 | データ処理システムおよびデータ処理方法 |
JPWO2020044566A1 (ja) * | 2018-08-31 | 2021-06-10 | オリンパス株式会社 | データ処理システムおよびデータ処理方法 |
JP7000586B2 (ja) | 2018-08-31 | 2022-01-19 | オリンパス株式会社 | データ処理システムおよびデータ処理方法 |
JP6962526B1 (ja) * | 2021-01-04 | 2021-11-05 | エッジコーティックス ピーティーイー. リミテッド | ニューラルネットワークアクセラレータランタイム再構成可能性 |
JP2022105467A (ja) * | 2021-01-04 | 2022-07-14 | エッジコーティックス ピーティーイー. リミテッド | ニューラルネットワークアクセラレータランタイム再構成可能性 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2018135088A1 (ja) | 2019-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110073359B (zh) | 用于卷积神经网络的有效数据布局 | |
US11699067B2 (en) | Arithmetic processing apparatus and control method therefor | |
US20180137414A1 (en) | Convolution operation device and convolution operation method | |
US11487845B2 (en) | Convolutional operation device with dimensional conversion | |
EP3093757B1 (en) | Multi-dimensional sliding window operation for a vector processor | |
CN109313663B (zh) | 人工智能计算辅助处理装置、方法、存储介质、及终端 | |
CN108073549B (zh) | 卷积运算装置及方法 | |
KR20170023708A (ko) | 콘볼루션 신경망 컴퓨팅 장치 | |
CN106373112B (zh) | 图像处理方法、装置和电子设备 | |
WO2018135088A1 (ja) | データ処理装置、畳み込み演算装置および畳み込みニューラルネットワーク装置 | |
CN112395092B (zh) | 数据处理方法及人工智能处理器 | |
JP5548087B2 (ja) | 演算装置および演算方法 | |
JP6195342B2 (ja) | 情報処理装置およびメモリアクセス制御方法 | |
JP7014393B2 (ja) | データ処理装置、及びこれにおけるデータ処理方法 | |
CN113392831A (zh) | 分析一组帧中的对象 | |
CN111133457A (zh) | 电子设备及其控制方法 | |
CN110738317A (zh) | 基于fpga的可变形卷积网络运算方法、装置和系统 | |
JP2017027314A (ja) | 並列演算装置、画像処理装置及び並列演算方法 | |
US11500767B2 (en) | Method and device for determining a global memory size of a global memory size for a neural network | |
TWI634436B (zh) | 緩衝裝置及卷積運算裝置與方法 | |
JP4814679B2 (ja) | 画像処理装置 | |
WO2020093669A1 (en) | Convolution block array for implementing neural network application and method using the same, and convolution block circuit | |
CN114626515A (zh) | 基于通道数量执行卷积运算的npu装置及其操作方法 | |
US11842273B2 (en) | Neural network processing | |
JP2007206887A (ja) | Lsiチップ及び演算処理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 17892614 Country of ref document: EP Kind code of ref document: A1 |
|
ENP | Entry into the national phase |
Ref document number: 2018562888 Country of ref document: JP Kind code of ref document: A |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 17892614 Country of ref document: EP Kind code of ref document: A1 |