JP2023134658A - プロセッサおよびプロセッサの制御方法 - Google Patents

プロセッサおよびプロセッサの制御方法 Download PDF

Info

Publication number
JP2023134658A
JP2023134658A JP2023115388A JP2023115388A JP2023134658A JP 2023134658 A JP2023134658 A JP 2023134658A JP 2023115388 A JP2023115388 A JP 2023115388A JP 2023115388 A JP2023115388 A JP 2023115388A JP 2023134658 A JP2023134658 A JP 2023134658A
Authority
JP
Japan
Prior art keywords
data
memory
weight
processing cores
tpc
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023115388A
Other languages
English (en)
Inventor
タンビア アーメド
Ahmed Tanvir
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.)
Preferred Networks Inc
Original Assignee
Preferred Networks Inc
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 Preferred Networks Inc filed Critical Preferred Networks Inc
Priority to JP2023115388A priority Critical patent/JP2023134658A/ja
Publication of JP2023134658A publication Critical patent/JP2023134658A/ja
Pending legal-status Critical Current

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
    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/08Learning methods

Landscapes

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

Abstract

【課題】演算を効率的に実行できるシストリックアレイを有するプロセッサを提供する。【解決手段】プロセッサは、複数のプロセッシングコアと、前記複数のプロセッシングコアを制御するコントローラと、を備え、前記コントローラは、複数の層を有するニューラルネットワークの少なくとも1つの層毎に、前記複数のプロセッシングコアのうち演算に使用するプロセッシングコアの数を変更する。【選択図】図1

Description

本発明は、プロセッサおよびプロセッサの制御方法に関する。
近年、ディープニューラルネットワーク(DNN:Deep Neural Network)を使用したディープラーニングにより画像認識や音声認識等が精度よく行われるようになってきている。また、ディープラーニングの畳み込み処理に特化したプロセッサが提案されている。この種のプロセッサは、マトリックス状に配置された複数の演算セルを含むシストリックアレイを有する。そして、シストリックアレイの行方向に入力データを供給し、シストリックアレイの列方向に重みデータを供給し、複数の入力データと複数の重みデータとを順次乗算して積算することで、畳み込み処理が実行される。
米国特許第9747546号明細書 米国特許第9952831号明細書 米国特許第9940573号明細書 米国特許第9842293号明細書 米国特許第9805303号明細書 米国特許第9721203号明細書 米国特許第9691019号明細書 米国特許出願公開第2018/0165577号明細書 米国特許出願公開第2017/0103315号明細書
シストリックアレイのサイズが固定の場合、ディープラーニングで処理するデータ量が大きいと、シストリックアレイのサイズが不足する場合がある。この場合、処理するデータを複数回に分けてロードし、畳み込み処理を複数回に分けて実行する必要があり、処理効率が低下する。また、入力データが格納されたバッファから入力データを順番に出力しながら畳み込み処理を実行する場合、例えば、入力データのストライド値を変える場合、ストライド値に合わせた入力データをバッファに格納しなおす必要がある。
本発明の実施の形態は、上記の点に鑑みてなされたもので、演算を効率的に実行できるプロセッサを提供することを目的とする。
上記目的を達成するため、本発明の実施の形態のプロセッサは、複数のプロセッシングコアと、前記複数のプロセッシングコアを制御するコントローラと、を備え、前記コントローラは、複数の層を有するニューラルネットワークの少なくとも1つの層毎に、前記複数のプロセッシングコアのうち演算に使用するプロセッシングコアの数を変更する。
演算を効率的に実行できるプロセッサを提供することができる。
本発明の実施の形態におけるプロセッサの例を示すブロック図である。 図1のプロセッシングコアの例を示すブロック図である。 シストリックアレイの構成例を示すブロック図である。 図2のプロセッシングエレメントの例を示す回路図である。 図2の各種メモリの例を示すブロック図である。 図1のプロセッサにより畳み込み処理を実行する場合の動作フロー図である。 図1のプロセッサにより畳み込み処理を実行する場合の別の動作フロー図である。 図1のプロセッサにより畳み込み処理を実行する場合のさらなる別の動作フロー図である。 図6から図8で説明したデータの転送の流れを示す説明図である。 図9の続きを示す説明図である。 図10の続きを示す説明図である。 図11の続きを示す説明図である。 図12の続きを示す説明図である。 図13の続きを示す説明図である。 図14の続きを示す説明図である。 図15の続きを示す説明図である。 畳み込み処理の例を示す説明図である。 図1のプロセッサ内に再構成したシストリックアレイにより、図17に示した畳み込み処理を実行する例を示す説明図である。 図18に示したPE0-PE8が実行する畳み込み処理の例を示す説明図である。 図19の続きを示す説明図である。 他のプロセッサのシストリックアレイにより、図17に示した畳み込み処理を実行する例を示す説明図(比較例)である。 図1のプロセッサにより畳み込み処理を実行する他の例を示す説明図である。
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図1は、本発明の実施の形態におけるプロセッサの例を示すブロック図である。プロセッサ100は、ネットワークオンチップNOC(以下、NOC)を介して相互に接続された複数のプロセッシングコア200(TPC:Tensor Processing Core)と、プロセッサ100の動作を制御するプリフェッチエンジン300とを有する。複数のプロセッシングコア200は、例えば、マトリックス状に配置され、各プロセッシング200は、NOCに設けられる複数のルータRTのうち対応するルータRTに接続される。なお、プロセッシングコア200の配置は、マトリックス状に限定されない。例えば、複数のプロセッシングコア200の配置方向は、上下方向および左右方向だけではなく、斜め方向(例えば、千鳥状)でもよい。
図1の例では、プロセッサ100は、縦方向と横方向にそれぞれ3個並ぶ3行3列の9個のプロセッシングコア200を有する。しかしながら、プロセッサ100は、1行n列またはn行1列のプロセッシングコア200を有してもよい(nは2以上の整数)。すなわち、プロセッシングコア200の数は、2個以上あればよい。例えば、プロセッサ100は、縦方向と横方向のそれぞれに16個並ぶ256個のプロセッシングコア200を有してもよい。プロセッシングコア200の縦方向と横方向の数は、互いに同じ数であることが好ましいが、縦方向と横方向の数が相違してもよい。以下では、プロセッシングコア200をTPC200とも称する。
互いに隣接するTPC200間は、NOCとは異なる専用の転送経路110(破線の矢印)を介して接続される。転送経路110により、例えば、図1の左上のTPC200を起点として、右方向および下方向にデータ(入力データ、重みデータ)や命令等の情報を転送可能である。
プリフェッチエンジン300は、例えば、L2キャッシュに相当する機能を有しており、TPC200への情報の転送およびTPC200間での情報の転送を制御するコントローラ310を有する。コントローラ310は、上位のシステムからの情報を所定のTPC200に転送し、TPC200から情報を受信し、あるいは、TPC200間で情報を転送するために、NOCに含まれるルータRTによるルーティングを制御する。
プリフェッチエンジン300からTPC200に出力される入力データ、重みデータおよび命令等の情報は、図1の横方向に並ぶルータRTを介してTPC200に転送され、図1の縦方向に並ぶルータRT間では転送されない。同様に、TPC200からプリフェッチエンジン300に出力される畳み込みの結果(特徴マップ)等の情報は、図1の横方向に並ぶルータRTを介してプリフェッチエンジン300に転送され、図1の縦方向に並ぶルータRT間では転送されない。これにより、ルータRT内で情報が交錯することを防止することができ、プリフェッチエンジン300とTPC200との間での情報の転送効率を向上することができる。
図2は、図1のプロセッシングコア(TPC)200の例を示すブロック図である。TPC200は、マトリックス状に配置された複数のプロセッシングエレメント400(PE)、アドレス生成部21、命令メモリ22、複数のデータメモリ23、データ管理部24、複数の重みメモリ25および出力メモリ26を有する。また、TPC200は、マルチプレクサ27(271、272、273、274、275)、再構成制御部28(281、282、283)および複数のラッチLTを有する。
データメモリ23または重みメモリ25の一方は、入力データDTまたは重みWの一方である第1データを保持可能な第1メモリの一例である。データメモリ23または重みメモリ25の他方は、入力データDTまたは重みWの他方である第2データを保持可能な第2メモリの一例である。以下では、プロセッシングエレメント400をPE400とも称する。また、以降の説明は、畳み込み処理を実行する場合について説明するが、畳み込み処理以外の処理(演算)が実行されてもよい。
例えば、図1に示したコントローラ310は、ルータRTを制御することで、データメモリ23への入力データDTの転送を制御し、重みメモリ25への重みデータWの転送を制御し、命令メモリ22への命令INSTの転送を制御する。また、コントローラ310は、マルチプレクサ271-275の動作を制御する。以下では、入力データDTをデータDTとも称し、重みデータWを重みWとも称する。また、入力データDTおよび重みデータWをデータとも称する。
例えば、TPC200は、縦方向と横方向にそれぞれ2個並ぶ4個のPE400を有するが、PE400の数は4個に限定されない。TPC200は、縦方向と横方向にそれぞれ3個以上ずつ並ぶPE400を有してもよい。但し、後述するように、本実施形態では、複数のTPC200間で所定数のPE400を連結してシストリックアレイを構築可能であるため、TPC200は、最小限(すなわち、4個)のPE400を持てばよい。PE400は、演算ユニットとして機能し、各TPC200に含まれる複数のPE400により、演算ユニットアレイの一例であるPEアレイが構築される。
アドレス生成部21は、データ管理部24を介してコントローラ310から供給されるアドレス生成情報に基づいて、データメモリ23に出力するアドレスを生成し、重みメモリ25に出力するアドレスを生成する。アドレス生成部21は、データメモリ23に出力するアドレスを生成する第1アドレス生成器および重みメモリ25に出力するアドレスを生成する第2アドレス生成器として機能する。
アドレス生成部21がアドレス生成情報に基づいてアドレスを生成し、生成したアドレスを、例えば、データメモリ23に出力することで、データメモリ23からアドレスに応じた順番でデータDTを出力することができる。したがって、データメモリ23に保持されたデータDTを任意の順序で出力することができ、データメモリ23にデータDTを再格納することなく、ストライド値等を変更することができる。重みメモリ25からもアドレスに応じた任意の順序で重みWを出力することができる。この結果、データDTおよび重みWのロードサイクルを減らすことができ、プロセッサ100による畳み込み処理の効率を向上することができる。
命令メモリ22は、ルータRTおよびデータ管理部24を介してプリフェッチエンジン300から供給される命令INSTを保持可能である。命令メモリ22は、PE400による演算の実行に合わせて、演算の種別等の演算仕様を含む命令INSTを、演算を実行するPE400に出力する。
データメモリ23は、畳み込み処理に使用するデータDTを保持可能な複数の記憶領域を有する。データメモリ23は、ルータRTおよびデータ管理部24を介してプリフェッチエンジン300から供給されるデータDTを保持し、保持したデータDTをアドレス生成部21からのアドレスにしたがって出力する。なお、データメモリ23は、図2の横方向に並ぶ2つのPE400毎に設けられる。これにより、互いに異なるアドレスを各データメモリ23に供給することが可能になり、各データメモリ23からアドレスに応じたデータDTを出力させることができる。
重みメモリ25は、畳み込み処理に使用する重みWを保持可能な複数の記憶領域を有する。重みメモリ25は、ルータRTおよびデータ管理部24を介してプリフェッチエンジン300から供給される重みWを保持し、保持した重みWをアドレス生成部21からのアドレスにしたがって出力する。なお、重みメモリ25は、図2の縦方向に並ぶ2つのPE400毎に設けられる。これにより、互いに異なるアドレスを各重みメモリ25に供給することが可能になり、各重みメモリ25からからアドレスに応じた重みWを出力させることができる。
出力メモリ26は、PE400による特徴マップ等の演算結果を保持する複数の記憶領域を有する。出力メモリ26は、複数のPE400での演算結果を保持する結果メモリの一例である。出力メモリ26は、自TPC200のPE400から受ける演算結果を、データ管理部24を介してプリフェッチエンジン300に出力する。出力メモリ26をTPC200毎に設けることで、TPC200間での演算結果の転送を不要にすることができ、演算結果の転送サイクルを削減することができる。この結果、プロセッサ100による畳み込み処理の効率を向上することができる。
命令メモリ22、データメモリ23、重みメモリ25および再構成制御部28は、転送バスTBを介してデータ管理部24に接続される。命令メモリ22、データメモリ23、重みメモリ25および出力メモリ26の内部構成の例は、図5で説明する。
データ管理部24は、プリフェッチエンジン300とTPC200との間のデータ等の情報の転送を管理する。例えば、データ管理部24は、プリフェッチエンジン300から転送されるアドレス情報をアドレス生成部21に出力し、プリフェッチエンジン300から転送される命令INSTを命令メモリ22に出力する。データ管理部24は、プリフェッチエンジン300から転送される畳み込みに使用するデータDTをデータメモリ23に出力し、プリフェッチエンジン300から転送される畳み込みに使用する重みWを重みメモリ25に出力する。データ管理部24は、プリフェッチエンジン300から転送されるマルチプレクサ27の選択制御情報を再構成制御部28に出力する。
また、データ管理部24は、出力メモリ26から出力される特徴マップ等の演算結果をプリフェッチエンジン300に転送する。データ管理部24は、データメモリ23に保持されているデータDTを、ルータRTを介して他のTPC200のデータメモリ23に転送し、重みメモリ25に保持されている重みWを、ルータRTを介して他のTPC200の重みメモリ25に転送する。
例えば、データ管理部24は、プリフェッチエンジン300からの指示に基づいて、畳み込み処理を実行中に、データメモリ23と他のTPC200のデータメモリ23との間でデータDTの転送を制御する。なお、データ管理部24は、情報の転送先を示す識別情報IDを、情報とともに転送バスTBに出力する。アドレス生成部21、命令メモリ22、データメモリ23、重みメモリ25および再構成制御部28の各々は、転送バスTBに転送される識別情報IDが自身を示すとき、識別情報IDともに転送される情報を受信する。すなわち、アドレス生成部21、命令メモリ22、データメモリ23、重みメモリ25、出力メモリ26および再構成制御部28は、ルータRTを介してデータとともに転送される識別情報IDにより識別される。
各再構成制御部28(281、282、283)は、データ管理部24を介してコントローラ310から出力される選択制御情報に基づいて、各マルチプレクサ27(271、272、273、274、275)に対する選択信号を生成する。各マルチプレクサ27は、再構成制御部28からの選択信号に応じて複数の入力のいずれかを選択し、選択した入力を出力に接続する。
マルチプレクサ271は、自TPC200の命令メモリ22から出力される命令INST、上側(T)のTPC200の命令メモリ22から転送される命令INST、または左側(L)のTPC200の命令メモリ22から転送される命令INSTを選択する。マルチプレクサ271が選択した命令INSTは、自TPC200のPEアレイの命令入力に出力され、ラッチLTを含む命令INSTの転送経路を介して下側(B)のTPC200のマルチプレクサ271に転送される。
自TPC200において、マルチプレクサ271からPEアレイに供給された命令INSTは、PEアレイ内の各PE400に転送される。また、図2の右上のPE400は、左隣のPE400から受信した命令INSTを右側(R)のTPC200に転送する。なお、図2の右下のPE400は、命令INSTを受けて各種演算を実行するが、右側(R)のTPC200に命令INSTを転送する機能を持たない。
マルチプレクサ271が、自TPC200の命令メモリ22の出力を選択した場合、TPC200は、畳み込み処理の起点となるコーナー部のTPC200として機能する。換言すれば、畳み込み処理の起点となるTPC200は、所定数のTPC200のPE400により構築されるシストリックアレイの左上に位置する。一方、マルチプレクサ271が、上側(T)のTP200または左側(L)のTPC200から転送される命令INSTを選択した場合、TPC200は、起点以外の中間のTPC200として機能する。
マルチプレクサ272、273は、自TPC200のデータメモリ23から出力されるデータDT、または左側(L)のTPC200から転送されるデータDTのいずれかを選択し、選択したデータDTを自TPC200のPEアレイのデータ入力に出力する。PEアレイにおいて、マルチプレクサ272、273の出力に接続されたPE400は、データメモリ23からデータDTを受ける左端のPE400、または左側(L)のTPC200からデータDTを受ける中間のPE400として機能する。ここで、左端のPE400は、所定数のTPC200のPE400により構築されるシストリックアレイの左端のPE400を示し、中間のPE400は、左端のPE400以外のPE400を示す。
マルチプレクサ274、275は、自TPC200の重みメモリ25から出力される重みW、または上側(T)のTPC200から出力される重みWのいずれかを選択し、選択した重みWを自TPC200のPEアレイの重み入力に出力する。PEアレイにおいて、マルチプレクサ274、275の出力に接続されたPE400は、自TPC200の重みメモリ25から重みWを受ける上端のPE400、または上側(T)のTPC200から重みWを受ける中間のPE400として機能する。ここで、上端のPE400は、所定数のTPC200のPE400により構築されるシストリックアレイの上端のPE400を示し、中間のPE400は、上端のPE400以外のPE400を示す。
マルチプレクサ272-275により、複数のTPC200に含まれるPE400を連結することができ、畳み込みに使用するシストリックアレイのサイズを任意に設定することができる。すなわち、再構成制御部281-283とマルチプレクサ271-275とにより、畳み込みに使用するデータDTの量に合わせて、最適なサイズのシストリックアレイを再構成することができる。
図3は、シストリックアレイの構成例を示すブロック図である。図3に示す例では、4つのTPC200により、太枠で示す9個のPE400を含むシストリックアレイが再構成される。そして、プロセッサ100は、シストリックアレイを使用して、例えば、ニューラルネットワークの複数の層のディープラーニング(例えば、畳み込み処理)を実行する。図3では、命令メモリ22、データメモリ23、重みメモリ25、出力メモリ26を、それぞれ命令メモリIM、データメモリDM、重みメモリWMおよび出力メモリOMとして示している。
網掛けは、シストリックアレイでの畳み込み処理に使用する要素を示す。シストリックアレイに対応する各データメモリDMの出力は、図3の横方向に並ぶ所定数のPEに順次接続される。シストリックアレイに対応する各重みメモリWMの出力は、図3の縦方向に並ぶ所定数のPEに順次接続される。
命令INSTは、シストリックアレイにおいて、左上のTPC200の命令メモリIMのみに格納される。畳み込みに使用するデータDTは、シストリックアレイにおいて左側のTPC200のデータメモリDMに格納される。畳み込みに使用する重みWは、シストリックアレイにおいて、上側のTPC200の重みメモリWMに格納される。各PE400による畳み込み処理で生成された特徴マップは、各PEが属するTPC200の出力メモリOMに格納される。
なお、4つのTPC200の全てのPE400(16個)を使用して畳み込み処理を実行する場合、図3の左下のTPC200の下側のデータメモリDMにもデータが格納され、図3の右上のTPC200の右側の重みメモリWMにも重みWが格納される。
図4は、図2のプロセッシングエレメント400の例を示す回路図である。PE400は、命令デコーダ41、レジスタファイル42、ALU(Arithmetic and Logic Unit)43、MAC(Multiply and ACcumulate)44、マルチプレクサ45(451、452、453)および複数のラッチLTを有する。すなわち、PE400は、算術演算器(ALU)と積和演算器(MAC)とを含む。
命令デコーダ41は、命令INSTをデコードし、出力メモリアドレスOMAD、ソースレジスタアドレスSR1AD、SR2AD、ディスティネーションレジスタアドレスDRADおよびマルチプレクサ制御信号MUXCを生成する。マルチプレクサ制御信号MUXCは、マルチプレクサ451、452、453毎に生成される。
出力メモリアドレスOMADは、特徴マップ等を格納する出力メモリ26の格納先を示す。ソースレジスタアドレスSR1AD、SR2ADは、例えば、各種演算に使用する重みW等のデータがそれぞれ格納されたレジスタREGを示し、ディスティネーションレジスタアドレスDRADは、演算結果を格納するレジスタREGを示す。マルチプレクサ制御信号MUXCは、マルチプレクサ451、452、453にそれぞれ出力され、マルチプレクサ451、452、453の切り替えに使用される。
レジスタファイル42は、CPU(Central Processing Unit)等の汎用のプロセッサと同様に、複数のレジスタREGを有している。命令で指定された複数のレジスタREGには、例えば、畳み込みに使用する重みWまたはデータDTが格納されてもよく、演算結果RSLTが格納されてもよい。なお、レジスタファイル42は、固定小数点数用のレジスタREGと浮動小数点数用のレジスタREGとを有してもよい。
ALU43は、命令デコーダ41によりデコードされた命令INST(デコード結果)に基づいて、例えば、加算、減算、乗算、左シフト、右シフト、最小値の算出、最大値の算出、論理積、論理和、排他的論理和のいずれかまたは複数を実行可能である。なお、ALU43が実行可能な演算の種類は、上記に限定されない。例えば、ALU43は、32ビットの浮動小数点数を演算可能である。MAC44は、命令デコーダ41によりデコードされた命令INSTに基づいて、16ビットまたは32ビットの浮動小数点数の積和演算を実行する。MAC44で処理可能なビット数は上記に限定されず、8ビットでもよい。また、複数のMAC44が各PE400に搭載されてもよい。このように、PE400は、複数種の演算器とレジスタファイル42を有するため、CPU(Central Processing Unit)と同様の演算を実行することができる。
マルチプレクサ451は、マルチプレクサ制御信号MUXCに応じて、レジスタREGに保持された重みWまたは上側(T)から受ける重みWのいずれかをALU43またはMAC44に出力する。マルチプレクサ452は、マルチプレクサ制御信号MUXCに応じて、レジスタREGに保持されたデータDTまたは左側から受けるデータDTのいずれかをALU43またはMAC44に出力する。
マルチプレクサ453は、マルチプレクサ制御信号MUXCに応じて、ALU43またはMAC44から出力される演算結果RSLTの何れかをレジスタファイル42または出力メモリ26(図2)に出力する。なお、演算結果RSLTの出力メモリ26への格納先は、出力メモリアドレスOMADにより指定される。また、マルチプレクサ453は、マルチプレクサ制御信号MUXCに応じて、マルチプレクサ451からバイパスされる重みWをレジスタファイル42のレジスタREGのいずれかに格納する。
なお、PE400において、命令INSTおよびデータDTは、ラッチLTを介して図4の左側(L)から右側(R)に転送可能であり、重みWは、ラッチLTを介して図4の上側(T)から下側(B)に転送可能である。
図4に示すPE400は、乗算器ではなく、ALU43、MAC44およびレジスタファイル42を有する。このため、例えば、PE400は、畳み込みにおける乗算だけでなく、様々な算術演算および論理演算を実行することができる。これにより、例えば、ニューラルネットワークのディープラーニングにおいて、畳み込み層の演算だけでなく、プーリング層、活性化層、全結合層等の演算にPE400を使用することが可能になる。また、PE400内で、データDTと重みWとの乗算結果を足し込む畳み込み処理を実行することができる。
さらに、PE400は、レジスタREGに格納した演算結果を使用して他の演算を実行することができる。また、外部から供給される重みWをレジスタREGにバイパスできるため、レジスタREGに保持された重みWを繰り返し使用して畳み込みを実行することができる。この結果、例えば、データメモリ23へのデータDTの転送回数および重みメモリ25への重みWの転送回数を従来に比べて少なくすることが可能になり、シストリックアレイによる畳み込み処理を効率よく実行することができる。
図5は、図2の各種メモリの例を示すブロック図である。図5に示すメモリ500は、命令メモリ22、データメモリ23、重みメモリ25または出力メモリ26の何れかである。
メモリ500は、マルチプレクサ51、レジスタ52、ライトイネーブルロジック53、ライトカウンタロジック54、リードカウンタロジック55およびメモリアレイ56(ARY)を有する。マルチプレクサ51は、転送バスTBを介して受信する識別情報IDが自メモリ500を示す場合であって、データにレジスタ52の設定を示す情報を含む場合、データに含まれるアドレスを所定のレジスタ52に格納する。レジスタ52は、ライト用のスタートアドレスSTAD(W)、ライト用のエンドアドレスENDAD(W)、リード用のスタートアドレスSTAD(R)およびリード用のエンドアドレスENDAD(R)を保持する領域を有している。レジスタ52への格納位置は、データに含まれるレジスタアドレスREGADにより識別される。
ライトイネーブルロジック53は、識別情報IDが自メモリ500を示す場合であって、データバリッド信号DTVLDがライトデータのバリッド状態を示す場合に動作する。ライトイネーブルロジック53は、ライトカウンタロジック54から出力されるライトアドレスWRADがエンドアドレスENDAD(W)に達するまで、イネーブル信号ENを出力する。ライトカウンタロジック54は、マルチプレクサ541および加算器542を有している。マルチプレクサ541は、メモリアレイARYへのデータの書き込み開始時、スタートアドレスSTAD(W)を選択し、その後、加算器542が出力するライトアドレスWRADを選択する。加算器542は、イネーブル信号ENを受信中に動作し、マルチプレクサ541から出力されるライトアドレスを"+1"し、ライトアドレスWRADを生成する。
リードカウンタロジック55は、レジスタ52に設定されたスタートアドレスSTAD(R)からエンドアドレスENDAD(R)までのリードアドレスRDADを順次生成する。リードカウンタロジック55は、有効なリードアドレスRDADを生成している間、リードデータバリッド信号RDTVLDを生成する。リードデータバリッド信号RDTVLDは、メモリアレイARYからリードデータRDTが有効であることを示す。
メモリアレイARYは、ライトアドレスWRADとともに受信したライトデータWDTを図示しないメモリセルにライトし、リードアドレスRDADが示すメモリセルからデータを読み出してリードデータRDTとして出力する。ライトデータWDTおよびリードデータRDTは、入力データDT、重みデータW、演算結果RSLTまたは命令INSTである。特に限定されないが、例えば、メモリアレイARYは、数キロワードのメモリ容量を有している。例えば、1ワードは、5ビットの識別情報IDと64ビットのデータとを含む。なお、識別情報IDのビット数は、識別が必要な要素の数に応じて増減されてもよい。データは、32ビットでもよく、128ビットでもよい。
図6は、図1のプロセッサ100により畳み込み処理を実行する場合の動作フロー図である。すなわち、図6は、プロセッサ100の制御方法の一例を示している。図6に示す動作フローは、例えば、プロセッサ100の動作を制御する上位のシステムからの畳み込み処理の指示に基づいて開始される。なお、上位のシステムから複数回の畳み込み処理の指示を受けた場合、プロセッサ100は、図6の動作フローを繰り返し実行してもよい。
ステップS100、S102、S104、S106を繰り返すことで、アドレス生成部21へのアドレス生成情報の転送、データメモリ23へのデータDTの転送、重みメモリ25への重みWの転送および命令メモリ22への命令INSTの転送が順次実行される。以下では、アドレス生成情報、命令INST、データDTおよび重みWを、データとも称する。ステップS100、S102、S104、S106によるデータの転送は、図1の縦方向に並ぶTPC200毎(図1の例では3つ毎)に実行される。換言すれば、データは、図1の縦方向に並ぶTPC200に並列に転送可能である。
ステップS100では、プロセッサ100のコントローラ310は、NOCのルータRTを再構成して、データの転送経路を設定する。データの転送対象のTPC200が同じ場合、2回目以降のステップS100は省略され、前回設定した転送経路が使用されてもよい。なお、データの転送経路の設定にかかわらず、コントローラ310は、任意のTPC200に制御信号を出力できる。
次に、ステップS102では、コントローラ310は、データの転送先のメモリアドレスを、データを転送する命令メモリ22、データメモリ23または重みメモリ25に設定する。ここで、メモリアドレスは、データの転送先である命令メモリ22、データメモリ23または重みメモリ25に割り当てられたアドレスであり、図5に示したライト用のアドレスSTAD(W)、ENDAD(W)である。コントローラ310は、メモリアドレスおよびレジスタアドレスREGADを、データの転送先を示す識別情報IDとともにNOCに出力する。例えば、アドレスSTAD(W)、ENDAD(W)を受けたデータメモリ23は、受けたアドレスSTAD(W)、ENDAD(W)をレジスタ52においてレジスタアドレスREGADで示される領域に格納する。
次に、ステップS104では、コントローラ310は、畳み込み処理に使用するデータ(データDT、重みWまたは命令INST)を識別情報IDとともにNOCに順次出力する。データの転送対象のTPC200のデータ管理部24は、NOCを介して受信するデータを転送バスTBに出力する。転送バスTBを介してコントローラ310からデータDTを受信したデータメモリ23は、次の様に動作する。データメモリ23は、1ワードのデータDTを受信する毎に、格納先をスタートアドレスSTAD(W)からエンドアドレスENDAD(W)に変えながら、データDTをメモリアレイARYに順次格納する。また、コントローラ310は、アドレス生成情報をアドレス生成部21に転送する場合、アドレス生成情報を識別情報IDとともに出力する。
次に、ステップS106では、プロセッサ100は、畳み込み処理に必要な全てのデータを転送したかを判定し、畳み込み処理に必要な全てのデータを転送するまで、ステップS100からステップS104の動作を繰り返す。畳み込み処理に必要な全てのデータの転送を完了した場合、ステップS108において、プロセッサ100は、コンフィギュレーション用の選択制御情報を識別情報IDとともにコンフィギュレーションの対象の再構成制御部28に出力する。選択制御情報は、図1の縦方向に並ぶTPC200毎に出力される。選択制御情報を受けた再構成制御部28が、マルチプレクサ27を切り替えることで、所定のサイズのシストリックアレイが構成される。
次に、ステップS110では、コントローラ310は、命令INSTを格納した命令メモリ22を含むTPC200に畳み込み処理を開始するトリガ信号を出力する。トリガ信号に応答して、命令メモリ22から命令が順次出力され、アドレス生成部21によりデータメモリ23と重みメモリ25へのアドレスが順次出力され、畳み込み処理が開始される。畳み込みの結果である特徴マップは、出力メモリ26に格納される。ステップS112では、コントローラ310は、畳み込み処理が完了するのを待つ。
畳み込み処理が完了した場合、ステップS114において、コントローラ310は、ルータRTを制御して、畳み込み処理により得られた特徴マップを転送する転送経路を設定する。次に、ステップS116では、コントローラ310は、特徴マップが格納された出力メモリ26に対して、特徴マップの転送元のメモリアドレスを設定する。ここで、メモリアドレスは、図5に示したリード用のアドレスSTAD(R)、ENDAD(R)である。そして、ステップS118では、コントローラ310は、出力メモリ26に転送要求を発行し、出力メモリ26から出力される特徴マップのデータを1ワードずつ順次受信し、シストリックアレイを使用した畳み込み処理を終了する。
図7は、図1のプロセッサ100により畳み込み処理を実行する場合の別の動作フロー図である。すなわち、図7は、プロセッサ100の制御方法の別の例を示している。図7では、シストリックアレイでの畳み込み処理に使用しない空きのデータメモリ23および空きの重みメモリ25に、次の畳み込み処理で実行するデータDTおよび重みWがそれぞれ格納される。そして、畳み込み処理中に、次の畳み込み処理で使用するデータDTおよび重みWが格納されたデータメモリ23および重みメモリ25から、シストリックアレイに対応するデータメモリ23および重みメモリ25にデータDTおよび重みWがそれぞれ転送される。
例えば、畳み込み処理に使用するデータDTおよび重みWのデータ量が多く、データDTおよび重みWのそれぞれが、シストリックアレイの左端のデータメモリ23およびシストリックアレイの上端の重みメモリ25に入りきらない場合がある。この場合、シストリックアレイ内の空きのデータメモリ23および空きの重みメモリ25を利用して、畳み込み処理を開始する前に、データDTおよび重みWがプリフェッチエンジン300からシストリックアレイ内に転送される。空きのデータメモリ23および空きの重みメモリ25のそれぞれに予めデータDTおよび重みWを転送しておくことで、データ量が多い場合にも、データDTおよび重みWの外部からの転送と畳み込み処理とを分割することなく実行することができる。この結果、畳み込み処理の効率を向上することができる。
なお、データDTのみがシストリックアレイの左端のデータメモリ23に入りきらない場合、データDTのみが空きのデータメモリ23から転送され、重みWは、空きの重みメモリ25から転送されない。同様に、重みWのみがシストリックアレイの上端の重みメモリ25に入りきらない場合、重みWのみが空きの重みメモリ25から転送され、データDTは、空きのデータメモリ23から転送されない。
ステップS200、S202、S204、S206は、空きのデータメモリ23および空きの重みメモリ25へのデータの転送を含むことを除き、図6のステップS100、S102、S104、S106と同様である。ステップS208、S210は、図6のステップS108、S110と同様である。
畳み込み処理が開始された後、ステップS212からステップS218において、コントローラ310は、データメモリ23間でのデータDTの転送および重みメモリ25間での重みWの転送を実行する。すなわち、次の畳み込み処理に使用するデータDTおよび重みWがそれぞれ格納されたデータメモリ23および重みメモリ25から、シストリックアレイに対応するデータメモリ23および重みメモリ25にデータDTおよび重みWがそれぞれ転送される。
まず、ステップS212では、コントローラ310は、ルータRTを制御して、データの転送元のTPC200とデータの転送先のTPC200との間でデータの転送経路を設定する。次に、ステップS214では、コントローラ310は、データの転送元のTPC200にリード用のアドレスSTAD(R)、ENDAD(R)を設定し、データの転送先のTPC200にライト用のアドレスSTAD(W)、ENDAD(W)を設定する。ここで、データの転送元およびデータの転送先は、データメモリ23または重みメモリ25である。
次に、ステップS216では、コントローラ310は、データの転送元と転送先のTPC200にデータの転送を指示する。指示を受けたTPC200のデータ管理部24は、例えば、データの転送元のデータメモリ23からデータの転送先のデータメモリ23へのデータの転送を管理する。図1に示したように、プロセッサ100は、複数のTPC200を相互に接続するNOCを有しており、1つのTPC200のデータメモリ23から他のTPC200のデータメモリ23にデータDTを転送可能である。また、1つのTPC200の重みメモリ25から他のTPC200の重みメモリ25に重みWを転送可能である。したがって、ステップS208で構築されたシストリックアレイのサイズにかかわりなく、シストリックアレイに含まれるデータメモリ23間でデータDTを転送することができ、シストリックアレイに含まれる重みメモリ25間で重みWを転送することができる。
次に、ステップS218では、プロセッサ100は、次の畳み込み処理に必要な全てのデータ(データDTおよび重みW)を転送したかを判定し、次の畳み込み処理に必要な全てのデータを転送するまで、ステップS212からステップS216の動作を繰り返す。次の畳み込み処理に必要な全てのデータの転送を完了した場合、ステップS220において、プロセッサ100は、畳み込み処理が完了するのを待つ。なお、畳み込み処理の実行時間は、データの転送時間より十分に長いため、畳み込み処理を実行中に、次の畳み込み処理に使用するデータを転送することが可能である。
ステップS222、S224、S226は、図6のステップS114、S116、S118と同様である。例えば、ステップS226の後、図6のステップS110に移行して次の畳み込み処理が実行されてもよく、あるいは、ステップS210に移行して、次の畳み込み処理が実行されてもよい。図7に示す動作では、畳み込み処理中に、次の畳み込み処理に使用するデータをデータメモリ23および重みメモリ25に転送することで、畳み込み処理の完了後すぐに次の畳み込み処理を開始することができ、畳み込み処理の効率を向上することができる。
図8は、図1のプロセッサ100により畳み込み処理を実行する場合のさらなる別の動作フロー図である。すなわち、図8は、プロセッサ100の制御方法のさらなる別の例を示している。図8では、図6のステップS100からS110を実行した後、畳み込み処理中に、ステップS300において、次の畳み込み処理に使用するデータを、NOCを介してコントローラ310から空きのデータメモリ23および空きの重みメモリ25に転送する。ステップS300の動作は、データの転送先が、シストリックアレイに対応しない空きのデータメモリ23および空きの重みメモリ25であることを除き、図6のステップS100からS106の動作と同様である。
ステップS300の後、図6のステップS112からS118と同様に特徴マップが転送される。そして、ステップS118の後、図7のステップS212からS218と同様に、TPC200間でのデータの転送が実行され、次の畳み込み処理に使用するデータがシストリックアレイに対応するデータメモリ23および重みメモリ25にそれぞれ転送される。次の畳み込み処理に使用するデータの転送後、ステップS110に戻って次の畳み込み処理が開始され、以降、ステップS110、S300、S112-S118、S212-S218の動作が、所定の回数繰り返される。
図8においても、畳み込み処理中に、次の畳み込み処理に使用するデータをデータメモリ23および重みメモリ25に転送することで、畳み込み処理の完了後すぐに次の畳み込み処理を開始することができ、畳み込み処理の効率を向上することができる。
図9から図16は、図7で説明したデータの転送の流れを示す説明図である。すなわち、図9から図16は、プロセッサ100の制御方法の一例を示している。図9から図16では、図3と同様に、縦2個、横2個のTPC200に含まれる9個のPE400をシストリックアレイとして使用する例を示す。以下では、左上のTPC200は、TPC(00)と称し、右上のTPC200は、TPC(01)と称し、左下のTPC200は、TPC(10)と称し、右下のTPC200は、TPC(11)と称する。
図3と同様に、命令メモリ22、データメモリ23、重みメモリ25、出力メモリ26を、それぞれ命令メモリIM、データメモリDM、重みメモリWMおよび出力メモリOMとして示している。また、PE400は、PEと称する。網掛けは、畳み込み処理に使用する命令メモリIM、データメモリDM、重みメモリWMおよび出力メモリOMを示し、斜線は、次の畳み込み処理に使用するデータ等を保持するデータメモリDM、重みメモリWMおよび出力メモリOMを示す。太枠で示すPEは、シストリックアレイに含まれることを示し、太枠で示すルータRTは、転送経路の再構成の対象であることを示す。
図9において、コントローラ310は、データの転送経路をプリフェッチエンジン300からTPC(00)、(10)に設定するためにルータRTを再構成する。また、コントローラ310は、TPC(00)、(10)のデータメモリDMにライト用のアドレスSTAD(W)、ENDAD(W)を設定する。そして、コントローラ310は、畳み込み処理に使用するデータDTをTPC(00)、(10)に転送する。
次に、図10において、コントローラ310は、転送経路を維持したまま、TPC(00)の重みメモリ25にライト用のアドレスSTAD(W)、ENDAD(W)を設定し、畳み込み処理に使用する重みWを転送する。また、コントローラ310は、TPC(10)の重みメモリ25にライト用のアドレスSTAD(W)、ENDAD(W)を設定し、次の畳み込み処理に使用する重みWを転送する。
さらに、コントローラ310は、TPC(00)の命令メモリ22に畳み込み処理に使用する命令INSTを転送する。命令INSTは、シストリックアレイの左上に対応する命令メモリ22のみに転送される。この実施形態では、シストリックアレイを構築するTPC200に含まれる全ての命令メモリ22に命令INSTを格納しなくてよいため、コントローラ310から命令メモリ22への命令INSTの転送効率を向上することができる。以下では、ライト用のアドレスSTAD(W)、ENDAD(W)の設定の説明を省略する。なお、次の畳み込み処理に使用する重みWは、シストリックアレイを構成するPEを含むTPC200以外のTPC200の重みメモリ25に転送されてもよい。
また、図10において、コントローラ310は、選択制御情報をTPC(00)、(10)に出力し、再構成制御部281、282、283にマルチプレクサ271、272、273、274、275を再構成させる。これにより、TPC(00)、(10)において、太枠で示すPEにより、畳み込み処理に使用するシストリックアレイの一部が構築される。すなわち、TPC(00)の太枠のPEは、データDT、重みWおよび命令INSTを自TPC(00)のデータメモリDM、重みメモリWMおよび命令メモリIMから受けて畳み込み処理を実行可能である。TPC(10)の太枠のPEは、データDTを自TPC(10)のデータメモリDMから受け、重みWおよび命令INSTをTPC(00)の重みメモリWMおよび命令メモリIMから受けて畳み込み処理を実行可能である。
次に、図11において、コントローラ310は、データの転送経路をプリフェッチエンジン300からTPC(01)、(11)に設定するためにルータRTを再構成する。そして、コントローラ310は、TPC(01)、(11)のデータメモリDMに次の畳み込み処理に使用するデータDTを転送する。なお、次の畳み込み処理に使用するデータDTは、シストリックアレイを構成するPEを含むTPC200以外のTPC200のデータメモリ23に転送されてもよい。
次に、図12において、コントローラ310は、転送経路を維持したまま、TPC(01)の重みメモリ25に畳み込み処理に使用する重みWを転送し、TPC(11)の重みメモリ25に次の畳み込み処理に使用する重みWを転送する。また、図12において、コントローラ310は、選択制御情報をTPC(01)、(11)に出力し、再構成制御部281、282、283にマルチプレクサ271、272、273、274、275を再構成させる。これにより、TPC(01)、(11)において、太枠で示すPEにより、畳み込み処理に使用するシストリックアレイの一部が構築される。そして、図3と同様に、畳み込み処理に使用する9個のPEを含むシストリックアレイが構築される。
TPC(01)の太枠のPEは、データDTおよび命令INSTをTPC(00)のデータメモリDMおよび命令メモリIMから受け、重みWを自TPC(01)の重みメモリWMから受けて畳み込み処理を実行する。TPC(11)の太枠のPEは、データDTをTPC(10)のデータメモリDMから受け、命令INSTをTPC(00)の命令メモリIMから受け、重みWをTPC(01)の重みメモリWMから受けて畳み込み処理を実行する。この後、TPC(00)、(01)、(10)、(11)は、コントローラ310からの指示に基づいて、畳み込み処理を開始する。
次に、図13において、畳み込み処理中に、コントローラ310は、データの転送経路を、プリフェッチエンジン300からTPC(00)、(10)に向かう経路に設定するためにルータRTを再構成する。また、コントローラ310は、TPC(00)、(10)のデータメモリDMにライト用のアドレスSTAD(W)、ENDAD(W)を設定する。次に、図示を省略するが、コントローラ310は、データの転送経路を、プリフェッチエンジン300からTPC(01)、(11)に向かう経路に設定するためにルータRTを再構成する。そして、コントローラ310は、TPC(01)、(11)のデータメモリDMにリード用のアドレスSTAD(R)、ENDAD(R)を設定する。なお、出力メモリOMには、畳み込み処理により得られる特徴マップの情報が順次格納される。
次に、図14において、コントローラ310は、TPC(01)、(11)が保持している次の畳み込み処理に使用するデータDTをTPC(00)、(10)に転送するために、データの転送経路を変更する。すなわち、コントローラ310は、データの転送経路を、TPC(01)、(11)からTPC(00)、(10)に向かう経路に設定するためにルータRTを再構成する。そして、コントローラ310は、TPC(01)、(11)にデータDTの転送を指示するトリガ信号を出力し、TPC(01)、(11)からTPC(00)、(10)に、次の畳み込み処理に使用するデータDT(斜線)を転送する。
これにより、図7で説明したように、畳み込み処理に使用するデータ量が多い場合にも、予めTPCに転送しておいたデータDTまたは重みWを、畳み込み処理中にTPC間で転送することができ、畳み込み処理の効率を向上することができる。
次に、図15において、図13および図14と同様に、コントローラ310は、TPC(00)、(01)の重みメモリWMにライト用のアドレスSTAD(W)、ENDAD(W)を設定する。また、コントローラ310は、TPC(10)、(11)の重みメモリWMにリード用のアドレスSTAD(R)、ENDAD(R)を設定する。
そして、コントローラ310は、TPC(10)、(11)が保持している次の畳み込み処理に使用する重みWをTPC(00)、(01)に転送するために、データの転送経路を変更する。すなわち、コントローラ310は、データの転送経路を、TPC(10)、(11)からTPC(00)、(01)に向かう経路に設定するためにルータRTを再構成する。そして、コントローラ310は、TPC(10)、(11)に重みWの転送を指示するトリガ信号を出力し、TPC(10)、(11)の重みメモリWMからTPC(00)、(01)の重みメモリWMに、次の畳み込み処理に使用する重みW(斜線)を転送する。
畳み込み処理の完了後、コントローラ310は、データの転送経路を、プリフェッチエンジン300からTPC(00)、(10)に向かう経路に設定するためにルータRTを再構成する。そして、コントローラ310は、TPC(00)、(10)の出力メモリ26にリード用のアドレスSTAD(R)、ENDAD(R)を設定する。
次に、図16において、畳み込みの結果である特徴マップをプリフェッチエンジン300に転送するために、コントローラ310は、ルータRTを再構成し、データの転送経路を、TPC(00)、(10)からプリフェッチエンジン300に向かう経路に設定する。そして、コントローラ310は、TPC(00)、(10)に特徴マップの転送を指示するトリガ信号を出力し、TPC(00)、(10)からプリフェッチエンジン300に特徴マップを転送する。
この後、TPC(01)、(11)で得た特徴マップをプリフェッチエンジン300に転送するために、ルータRTが再構成され、TPC(01)、(11)からプリフェッチエンジン300に特徴マップが転送され、最初の畳み込み処理が完了する。そして、図14および図15で転送されたデータDTと重みWを用いて、次の畳み込み処理が実行される。
図17は、畳み込み処理の例を示す説明図である。図17では、3行3列の入力データDT(X0-X8)のうち2行2列の入力と2行2列の3つのカーネル(Y0-Y3、Y4-Y7、Y8-Y11)とを用いて畳み込みが実行される。そして、カーネル毎に9つの出力Z(Z0-Z8、Z9-Z17、またはZ18-Z26)が出力される。なお、3行3列の入力データDTはパディング処理により4行4列として畳み込みが実行される。出力Zの演算式の符号"*"は積を示す。
図18は、図1のプロセッサ100内に再構成したシストリックアレイにより、図17に示した畳み込み処理を実行する例を示す説明図である。図18では、図3に示した9個のPE(図18では、PE0-PE8)を含むシストリックアレイを使用して畳み込み処理が実行される。データX0-X8は、データメモリDMに保持された入力データであり、重みY0-Y11は、重みメモリWMに保持された重みである。
PE0-PE2には、データX0、X1、X3、X4、X1、X2、X4、X5が順次入力される。PE3-PE5には、データX3、X4、X6、X7、X4、X5、X7、X8が順次入力される。PE6-PE8には、データX6、X7、"0"、"0"、X7、X8、"0"、"0"が順次入力される。PE0、PE3、PE6には、重みY0-Y3が順次入力される。PE1、PE4、PE7には、重みY4-Y7が順次入力される。PE2、PE5、PE8には、重みY8-Y11が順次入力される。そして、各PE0-PE8は、入力されたデータX0-X8および重みY0-Y11を用いて畳み込みを実行し、出力Z0-Z26(特徴マップ)を生成する。
図19および図20は、図18に示したPE0-PE8が実行する畳み込み処理の例を示す説明図である。各PE(PE0-PE8)のMAC44(図4)は、サイクルCYC(CYC1-CYC16)毎にデータX(X0-X8)および重みY(Y0-Y11)の積を算出し、算出した積を積算することで畳み込みを実行する。この際、MAC44は、データメモリDMから供給されたデータXあるいはレジスタREGに保持されたデータXと、重みメモリWMから供給された重みYあるいはレジスタREGに保持された重みYとを乗算する。
PE0は、サイクルCYC1-CYC12を使用して、出力Z0-Z2を生成する。PE1は、サイクルCYC2-CYC13を使用して、出力Z9-Z11を生成する。PE2は、サイクルCYC3-CYC14を使用して、出力Z18-Z20を生成する。
PE3は、サイクルCYC2-CYC13を使用して、出力Z3-Z5を生成する。PE4は、サイクルCYC3-CYC14を使用して、出力Z12-Z14を生成する。PE5は、サイクルCYC4-CYC15を使用して、出力Z21-Z23を生成する。
PE6は、サイクルCYC3-CYC14を使用して、出力Z6-Z8を生成する。PE7は、サイクルCYC4-CYC15を使用して、出力Z15-Z17を生成する。PE8は、サイクルCYC5-CYC16を使用して、出力Z24-Z26を生成する。
そして、16サイクルで畳み込みが実行され、出力Z0-Z26は、3サイクルで出力メモリ26に格納される。この結果、図17に示す畳み込み処理は、19サイクルで完了する。
この実施形態では、データメモリDMおよび重みメモリWMから出力されたデータXおよび重みYだけでなく、レジスタREGに保持されたデータXおよび重みYを使用して畳み込みを実行する。これにより、データメモリDMおよび重みメモリWMにデータXおよび重みYを再転送することなく、3つのカーネルに対する畳み込みを並列に実行することができ、図17に示した畳み込み処理に掛かるサイクル数を減らすことができる。
図21は、他のプロセッサのシストリックアレイにより、図17に示した畳み込み処理を実行する例を示す説明図(比較例)である。図21は、3つのカーネル(Y0-Y3、Y4-Y7、Y8-Y11)のうち、1つのカーネル(Y0-Y3)による畳み込み処理の例を示す。
図21では、入力データDT(X0-X8)から抽出される9組の入力(例えば、X0、X1、X3、X4またはX1、X2、X4、X5)の各組が、シストリックアレイのPE0-PE8を使用してカーネル(Y0-Y3)と畳み込みされる。
各組の入力データDTが、3サイクルでシストリックアレイにロードされた後、5サイクルかけて重みWをシストリックアレイ内に順次転送しながら畳み込みが実行される。そして、各入力データDTと各重みWとの積がシストリックアレイの列毎に加算されて和PSUM0-PSUM2が出力され、和PSUM0-PSUM2の総和が特徴マップZとして出力される。
図21の畳み込み処理では、入力データのロードに3サイクルを要し、畳み込みの計算に5サイクルを要し、特徴マップZの出力に1サイクルを要する。この結果、1組の入力データDTと1つの重みカーネルとの畳み込みに9サイクルを要し、9組の入力データのそれぞれと3つの重みカーネルとの畳み込みには243サイクルを要する。
図22は、図1のプロセッサ100により畳み込み処理を実行する他の例を示す説明図である。図22では、縦方向と横方向のそれぞれに4個並ぶ16個のTPC200(64個のPE400)を使用して、16個のPE400を含むシストリックアレイが、使用するPE400をずらしながら順次構築される。斜線の領域は、畳み込み処理に使用するデータDTが格納されるデータメモリ23および畳み込み処理に使用する重みWが格納される重みメモリ25を示し、黒い矩形は、畳み込み処理用の命令INSTが格納される命令メモリ22を示す。
例えば、まず、図22の左上に位置する16個のPE400を含むシストリックアレイAが再構成され、シストリックアレイAの左側のデータメモリ23にデータDTが転送され、シストリックアレイAの上側の重みメモリ25に重みWが転送される。また、シストリックアレイAの左上の命令メモリ22に命令INSTが転送される。そして、シストリックアレイAにより畳み込み処理が開始される。
畳み込み処理中、畳み込みを実行中のシストリックアレイAに対して、PE400を右下に1つずらしたシストリックアレイBが再構成され、データDT、重みWおよび命令INSTがシストリックアレイBに転送される。シストリックアレイAによる畳み込み処理の完了後、シストリックアレイBによる畳み込み処理が開始される。シストリックアレイBの畳み込み処理中に、シストリックアレイAによる畳み込み処理で得られた特徴マップが転送され、PE400を右下に1つずらしたシストリックアレイCが再構成される。そして、データDT、重みWおよび命令INSTがシストリックアレイCに転送される。
この後、シストリックアレイが畳み込み処理を実行中に、畳み込み処理が完了したシストリックアレイから特徴マップが転送され、他のシストリックアレイが再構成されて、データDT、重みWおよび命令INSTが転送される。以上が繰り返されることで、畳み込み処理のバックグラウンドで、畳み込み処理で得られた特徴マップの転送と、シストリックアレイの再構成と、データDT、重みWおよび命令INSTの転送を実行することができる。この結果、シストリックアレイの再構成およびデータの転送と、畳み込み処理とをそれぞれ行う場合に比べて、処理効率を向上することができる。また、図22に示す動作では、シストリックアレイへのデータDTおよび重みWの転送は、1回のみで済み、シストリックアレイ内でのデータDTおよび重みWの転送を不要にすることができる。
以上、本発明の実施の形態では、マルチプレクサ272-275により、複数のTPC200に含まれるPE400を連結することができ、畳み込み処理に使用するシストリックアレイのサイズを任意に設定することができる。シストリックアレイのサイズが可変であるため、様々なデータ量の畳み込み処理を、データを分割することなく実行することができる。これにより、例えば、サポートされていない新たなマトリックスサイズの畳み込み処理にも適用可能である。すなわち、再構成制御部281-283とマルチプレクサ272-275とにより、畳み込み処理に使用するデータDTの量に合わせて、最適なサイズのシストリックアレイを再構成することができる。
データメモリ23および重みメモリ25がTPC200毎に設けられるため、畳み込み処理に使用しない空きのデータメモリ23に、次の畳み込み処理に使用するデータDTを予め転送しておくことができる。また、畳み込み処理に使用しない空きの重みメモリ25に、次の畳み込み処理に使用する重みWを予め転送しておくことができる。空きのデータメモリ23および空きの重みメモリ25は、畳み込み処理と無関係であるため、畳み込み処理中にデータDTまたは重みWを転送することができる。
また、畳み込み処理中に、次の畳み込み処理に使用するデータを空きのデータメモリ23および空きの重みメモリ25に転送することができる。あるいは、畳み込み処理中に、データメモリ23間でデータDTを転送することができ、重みメモリ25間で重みWを転送することができる。この結果、畳み込み処理の完了後、コントローラ310からデータDTおよび重みWを転送することなく、次の畳み込み処理を開始することができ、処理効率を向上することができる。また、シストリックアレイへのデータDTおよび重みWの転送回数を削減することができ、処理効率を向上することができる。
アドレス生成部21がアドレス生成情報に基づいてアドレスを生成することで、データメモリ23に保持されたデータDTを任意の順序で出力することができ、データメモリ23にデータDTを再格納することなく、ストライド値等を変更することができる。この結果、データDTのロードサイクルを減らすことができ、プロセッサ100による畳み込み処理の効率を向上することができる。
PE400に複数種の演算器43、44とレジスタファイル42とを設けることで、畳み込みにおける乗算だけでなく、CPUと同様に、様々な算術演算および論理演算を実行することができる。したがって、プロセッサ100を、畳み込みだけでなく、ディープラーニングにおける様々な層の演算に使用することができる。例えば、畳み込み処理に続いて、PE400内でプーリング層による演算(最大値の抽出、平均化等)を実行することができる。また、PE400内で、乗算結果を積算する畳み込み処理を実行することができる。
レジスタREGに格納した結果を使用して畳み込み処理以外の処理(演算)を実行することができる。さらに、外部から供給される重みWをレジスタREGにバイパスできるため、レジスタREGに保持された重みWを繰り返し使用して畳み込みを実行することができる。この結果、例えば、データメモリ23へのデータDTの転送回数および重みメモリ25への重みWの転送回数を従来に比べて少なくすることが可能になり、シストリックアレイによる畳み込み処理を効率よく実行することができる。
畳み込み処理に使用する命令INSTは、シストリックアレイの左上に対応する命令メモリ22のみに転送され、1つの命令メモリ22に保持された命令INSTは、マルチプレクサ271を介して畳み込み処理を実行するPE400に順次転送される。シストリックアレイを構築するTPC200に含まれる全ての命令メモリ22に命令INSTを格納しなくてよいため、コントローラ310から命令メモリ22への命令INSTの転送効率を向上することができる。
出力メモリ26がTPC200毎に設けられるため、特徴マップを他のTPC200を経由することなくNOCに直接出力することができ、特徴マップのプリフェッチエンジン300への転送効率を向上することができる。
本発明は、具体的に開示された上記の実施の形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
21 アドレス生成部
22 命令メモリ
23 データメモリ
24 データ管理部
25 重みメモリ
26 出力メモリ
27(271、272、273、274、275) マルチプレクサ
28(281、282、283) 再構成制御部
41 命令デコーダ
42 レジスタファイル
43 ALU
44 MAC44
45(451、452、453) マルチプレクサ
100 プロセッサ
110 転送経路
200 プロセッシングコア(TPC)
300 プリフェッチエンジン
310 コントローラ
400 プロセッシングエレメント(PE)
DT データ
INST 命令
RT ルータ
W 重み

Claims (20)

  1. 複数のプロセッシングコアと、
    前記複数のプロセッシングコアを制御するコントローラと、を備え、
    前記コントローラは、複数の層を有するニューラルネットワークの少なくとも1つの層毎に、前記複数のプロセッシングコアのうち演算に使用するプロセッシングコアの数を変更する、
    プロセッサ。
  2. 前記複数のプロセッシングコアの各々に対応する情報転送回路を備える、請求項1に記載のプロセッサ。
  3. 前記複数のプロセッシングコアの各々は、少なくとも1つの出力メモリと少なくとも1つの演算ユニットとを含み、
    前記少なくとも1つの出力メモリは、前記少なくとも1つの演算ユニットの少なくとも1つの演算結果を受信し、
    前記少なくとも1つの出力メモリが受信した前記少なくとも1つの演算結果が、前記情報転送回路に送信される、請求項2に記載のプロセッサ。
  4. 前記複数のプロセッシングコアは、それぞれ複数の演算ユニットを含む、請求項2に記載のプロセッサ。
  5. 前記複数のプロセッシングコアのそれぞれは、前記情報転送回路を経由せずに他のプロセッシングコアと通信する経路を有する、請求項2乃至請求項4のいずれか1項に記載のプロセッサ。
  6. 前記ニューラルネットワークの層は、少なくとも畳み込み層、プーリング層、活性化層又は全結合層を含む、請求項1乃至請求項5のいずれか1項に記載のプロセッサ。
  7. 前記複数のプロセッシングコアのそれぞれは、自プロセッシングコアに重みが供給される重みメモリを含む、請求項1乃至請求項6のいずれか1項に記載のプロセッサ。
  8. 前記複数のプロセッシングコアのうち、演算中のプロセッシングコアにある前記重みメモリに前記重みが転送される、請求項7に記載のプロセッサ。
  9. 前記複数のプロセッシングコアは、少なくとも2行及び2列以上のマトリックス状に配置される、請求項1乃至請求項8のいずれか1項に記載のプロセッサ。
  10. 前記複数のプロセッシングコアのそれぞれは命令メモリを含む、請求項1乃至請求項9のいずれか1項に記載のプロセッサ。
  11. プロセッサの制御方法であって、
    前記プロセッサは、
    複数のプロセッシングコアと前記複数のプロセッシングコアを制御するコントローラと、を備え、
    前記コントローラは、複数の層を有するニューラルネットワークの少なくとも1つの層毎に、前記複数のプロセッシングコアのうち演算に使用するプロセッシングコアの数を変更する、
    プロセッサの制御方法。
  12. 前記複数のプロセッシングコアの各々に対応する情報転送回路を備える、請求項11に記載のプロセッサの制御方法。
  13. 前記複数のプロセッシングコアの各々は、少なくとも1つの出力メモリと少なくとも1つの演算ユニットとを含み、
    前記少なくとも1つの出力メモリは、前記少なくとも1つの演算ユニットの少なくとも1つの演算結果を受信し、
    前記少なくとも1つの出力メモリが受信した前記少なくとも1つの演算結果が、前記情報転送回路に送信される、請求項12に記載のプロセッサの制御方法。
  14. 前記複数のプロセッシングコアはそれぞれ複数の演算ユニットを含む、請求項12に記載のプロセッサの制御方法。
  15. 前記複数のプロセッシングコアのそれぞれは、前記情報転送回路を経由せずに他のプロセッシングコアと通信する経路を有する、請求項12乃至請求項14のいずれか1項に記載のプロセッサの制御方法。
  16. 前記ニューラルネットワークの層は、少なくとも畳み込み層、プーリング層、活性化層又は全結合層を含む、請求項11乃至請求項15のいずれか1項に記載のプロセッサの制御方法。
  17. 前記複数のプロセッシングコアのそれぞれは、自プロセッシングコアに重みが供給される重みメモリを含む、請求項11乃至請求項16のいずれか1項に記載のプロセッサの制御方法。
  18. 前記複数のプロセッシングコアのうち、演算中のプロセッシングコアにある前記重みメモリに前記重みが転送される、請求項17に記載のプロセッサの制御方法。
  19. 前記複数のプロセッシングコアは、少なくとも2行及び2列以上のマトリックス状に配置される、請求項11乃至請求項18のいずれか1項に記載のプロセッサの制御方法。
  20. 前記複数のプロセッシングコアのそれぞれは命令メモリを含む、請求項11乃至請求項19のいずれか1項に記載のプロセッサの制御方法。
JP2023115388A 2018-11-09 2023-07-13 プロセッサおよびプロセッサの制御方法 Pending JP2023134658A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2023115388A JP2023134658A (ja) 2018-11-09 2023-07-13 プロセッサおよびプロセッサの制御方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2018211312A JP7315317B2 (ja) 2018-11-09 2018-11-09 プロセッサおよびプロセッサのデータ転送方法
JP2023115388A JP2023134658A (ja) 2018-11-09 2023-07-13 プロセッサおよびプロセッサの制御方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2018211312A Division JP7315317B2 (ja) 2018-11-09 2018-11-09 プロセッサおよびプロセッサのデータ転送方法

Publications (1)

Publication Number Publication Date
JP2023134658A true JP2023134658A (ja) 2023-09-27

Family

ID=70550506

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2018211312A Active JP7315317B2 (ja) 2018-11-09 2018-11-09 プロセッサおよびプロセッサのデータ転送方法
JP2023115388A Pending JP2023134658A (ja) 2018-11-09 2023-07-13 プロセッサおよびプロセッサの制御方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2018211312A Active JP7315317B2 (ja) 2018-11-09 2018-11-09 プロセッサおよびプロセッサのデータ転送方法

Country Status (2)

Country Link
US (2) US11119765B2 (ja)
JP (2) JP7315317B2 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7287147B2 (ja) * 2019-06-26 2023-06-06 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11842169B1 (en) 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
US20210125049A1 (en) * 2019-10-29 2021-04-29 Taiwan Semiconductor Manufacturing Co., Ltd. System for executing neural network
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
US11537860B2 (en) * 2020-03-23 2022-12-27 Arm Limited Neural net work processing
US11308027B1 (en) 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
US11422773B1 (en) * 2020-06-29 2022-08-23 Amazon Technologies, Inc. Multiple busses within a systolic array processing element
US20220164308A1 (en) * 2020-11-26 2022-05-26 Electronics And Telecommunications Research Institute Systolic array processor and operating method of systolic array processor
CN113342346B (zh) * 2021-05-18 2022-03-25 北京百度网讯科技有限公司 深度学习框架的算子注册方法、装置、设备和存储介质
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
US11494627B1 (en) * 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
US11829321B2 (en) 2022-03-24 2023-11-28 Google Llc General-purpose systolic array

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0713945A (ja) * 1993-06-16 1995-01-17 Nippon Sheet Glass Co Ltd 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造
KR100259276B1 (ko) * 1997-01-27 2000-06-15 윤종용 대역폭확장이 가능한 상호연결망
US5970232A (en) * 1997-11-17 1999-10-19 Cray Research, Inc. Router table lookup mechanism
RU2131145C1 (ru) * 1998-06-16 1999-05-27 Закрытое акционерное общество Научно-технический центр "Модуль" Нейропроцессор, устройство для вычисления функций насыщения, вычислительное устройство и сумматор
JP5939572B2 (ja) 2012-07-11 2016-06-22 国立大学法人東京農工大学 データ処理装置
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10049322B2 (en) 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US10083395B2 (en) 2015-05-21 2018-09-25 Google Llc Batch processing in a neural network processor
US10192162B2 (en) 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US10706348B2 (en) 2016-07-13 2020-07-07 Google Llc Superpixel methods for convolutional neural networks
US10733505B2 (en) 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
US10037490B2 (en) 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
US10586148B2 (en) 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US9952831B1 (en) 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor
US9691019B1 (en) 2017-03-07 2017-06-27 Google Inc. Depth concatenation using a matrix computation unit
US10585621B2 (en) 2017-04-21 2020-03-10 Intel Corporation Statically-schedulable feed and drain structure for systolic array architecture
US10956359B2 (en) * 2017-08-16 2021-03-23 Intel Corporation Smart performance of spill fill data transfers in computing environments
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법

Also Published As

Publication number Publication date
US20200150958A1 (en) 2020-05-14
JP2020077298A (ja) 2020-05-21
JP7315317B2 (ja) 2023-07-26
US20210406010A1 (en) 2021-12-30
US11119765B2 (en) 2021-09-14

Similar Documents

Publication Publication Date Title
JP7315317B2 (ja) プロセッサおよびプロセッサのデータ転送方法
US8443169B2 (en) Interconnection network connecting operation-configurable nodes according to one or more levels of adjacency in multiple dimensions of communication in a multi-processor and a neural processor
CN108470009B (zh) 处理电路及其神经网络运算方法
US20220292049A1 (en) Neural processing accelerator
CN106940815B (zh) 一种可编程卷积神经网络协处理器ip核
US11436143B2 (en) Unified memory organization for neural network processors
US7886128B2 (en) Interconnection network and method of construction thereof for efficiently sharing memory and processing in a multi-processor wherein connections are made according to adjacency of nodes in a dimension
WO2018160738A2 (en) Reconfigurable matrix multiplier system and method
JPH07271764A (ja) 計算機プロセッサ及びシステム
JPH0922404A (ja) 同報通信プロセッサ命令を備えたアレイ・プロセッサ通信アーキテクチャ
JPH07253954A (ja) 並列コンピュータ
JP2008537268A (ja) 可変精度相互接続を具えたデータ処理エレメントの配列
US10970043B2 (en) Programmable multiply-add array hardware
JP2009059346A (ja) 複数のマルチモードプロセッサに接続するための方法および装置
JP2021108104A (ja) 部分的読み取り/書き込みが可能な再構成可能なシストリックアレイのシステム及び方法
JP4962305B2 (ja) リコンフィギュラブル回路
JP2005531843A (ja) アレイプロセッサにおける除算
Merigot et al. A pyramidal system for image processing
Taka et al. MaxEVA: Maximizing the Efficiency of Matrix Multiplication on Versal AI Engine
Abdelhamid et al. MITRACA: A next-gen heterogeneous architecture
CN112486905A (zh) 可重构异构化pea互连方法
JP7136343B2 (ja) データ処理システム、方法、およびプログラム
Pechanek et al. An introduction to an array memory processor for application specific acceleration
JP7250953B2 (ja) データ処理装置、及び人工知能チップ
JP2003244190A (ja) データフロー制御スイッチ用プロセッサ及びデータフロー制御スイッチ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230807