(57)【要約】【課題】演算を効率的に実行できるシストリックアレイを有するプロセッサを提供する。【解決手段】プロセッサは、シストリックアレイを構築可能な複数の演算ユニットを含む演算ユニットアレイを各々有し、マトリックス状に配置された複数のプロセッシングコアを有する。複数のプロセッシングコアの各々は、第１データを保持可能な第１メモリと、第２データを保持可能な第２メモリと、演算ユニットアレイにおいて第１データを受ける第１入力を、自プロセッシングコアの第１メモリの出力または隣接するプロセッシングコアの演算ユニットアレイの出力に接続する第１マルチプレクサと、演算ユニットアレイにおいて第２データを受ける第２入力を、自プロセッシングコアの第２メモリの出力または隣接するプロセッシングコアの演算ユニットアレイの出力に接続する第２マルチプレクサとを有する。【選択図】図１
2020077298.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算ユニットを含む演算ユニットアレイを各々有する複数のプロセッシングコアを備え、
前記複数のプロセッシングコアの各々は、
第１データを保持可能な第１メモリと、
第２データを保持可能な第２メモリと、
前記演算ユニットアレイにおいて前記第１データを受ける第１入力を、自プロセッシングコアの前記第１メモリの出力または隣接するプロセッシングコアの前記演算ユニットアレイの出力に接続する第１マルチプレクサと、
前記演算ユニットアレイにおいて前記第２データを受ける第２入力を、自プロセッシングコアの前記第２メモリの出力または隣接するプロセッシングコアの前記演算ユニットアレイの出力に接続する第２マルチプレクサと、を有することを特徴とするプロセッサ。
【請求項２】
前記複数のプロセッシングコアの各々は、
前記第１メモリから出力する前記第１データの格納先を示す第１アドレスを生成する第１アドレス生成器と、
前記第２メモリから出力する前記第２データの格納先を示す第２アドレスを生成する第２アドレス生成器と、を有することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記複数のプロセッシングコアの各々は、
命令を保持可能な命令メモリと、
前記演算ユニットアレイにおける命令を受ける第３入力を、自プロセッシングコアの前記命令メモリの出力または隣接するプロセッシングコアの前記演算ユニットアレイ内の命令の転送経路に接続する第３マルチプレクサと、を有し、
前記複数の演算ユニットの各々は、命令をデコードする命令デコーダと、デコードされた命令に基づいて演算を実行する複数種の演算器と、演算に使用するデータまたは演算結果を保持するレジスタと、を有することを特徴とする請求項１または請求項２に記載のプロセッサ。
【請求項４】
命令は、前記複数のプロセッシングコアの１つの前記命令メモリに格納され、
命令が格納された前記命令メモリから出力される命令は、前記第３マルチプレクサを介して自プロセッシングコアの前記演算ユニットに供給され、他のプロセッシングコアの前記第３マルチプレクサを介して前記他のプロセッシングコアの前記演算ユニットに供給されることを特徴とする請求項３に記載のプロセッサ。
【請求項５】
前記複数種の演算器は、積和演算器と算術演算器とを含むことを特徴とする請求項３または請求項４に記載のプロセッサ。
【請求項６】
前記複数のプロセッシングコアの各々は、自プロセッシングコア内の前記複数の演算ユニットでの演算結果を保持する結果メモリを有することを特徴とする請求項１ないし請求項５のいずれか１項に記載のプロセッサ。
【請求項７】
前記第１データおよび前記第２データの一方は、畳み込み処理に使用する入力データであり、
前記第１データおよび前記第２データの他方は、畳み込み処理に使用する重みデータであることを特徴とする請求項１ないし請求項６のいずれか１項に記載のプロセッサ。
【請求項８】
前記複数のプロセッシングコアを相互に接続するネットワークと、
前記ネットワークを介して、前記第１メモリへの前記第１データの転送および前記第２メモリへの前記第２データの転送を制御し、前記第１マルチプレクサおよび前記第２マルチプレクサの動作を制御するコントローラと、を有することを特徴とする請求項１ないし請求項７のいずれか１項に記載のプロセッサ。
【請求項９】
前記コントローラは、
前記演算ユニットアレイが演算を実行中に、前記複数のプロセッシングコアのいずれかの前記第１メモリが保持する第１データを、前記ネットワークを介して他のプロセッシングコアの前記第１メモリに転送する制御を実施し、
前記演算ユニットアレイが演算を実行中に、前記複数のプロセッシングコアのいずれかの前記第２メモリが保持する第２データを、前記ネットワークを介して他のプロセッシングコアの前記第２メモリに転送する制御を実施することを特徴とする請求項８に記載のプロセッサ。
【請求項１０】
前記複数のプロセッシングコアは、マトリックス状に配置され、
前記コントローラは、
前記第１マルチプレクサを介して第１方向に並ぶ複数の前記演算ユニットアレイを接続し、前記第２マルチプレクサを介して第１方向に直交する第２方向に並ぶ複数の前記演算ユニットアレイを接続することで、所定数の演算ユニットを含むシストリックアレイを構築し、
前記第１方向に並ぶ複数の前記演算ユニットアレイの端に位置する演算ユニットを第１メモリの出力に接続し、
前記第２方向に並ぶ複数の前記演算ユニットアレイの端に位置する演算ユニットを第２メモリの出力に接続し、
前記第１メモリに前記第１データを出力させ、前記第２メモリに第２データを出力させ、前記シストリックアレイ内の演算ユニットに演算を実行させることを特徴とする請求項８または請求項９に記載のプロセッサ。
【請求項１１】
複数の演算ユニットを含む演算ユニットアレイと、第１データを保持可能な第１メモリと、第２データを保持可能な第２メモリと、前記演算ユニットアレイにおいて前記第１データを受ける第１入力を、自プロセッシングコアの前記第１メモリの出力または隣接するプロセッシングコアの演算ユニットアレイの出力に接続する第１マルチプレクサと、前記演算ユニットアレイにおいて前記第２データを受ける第２入力を、自プロセッシングコアの前記第２メモリの出力または隣接するプロセッシングコアの演算ユニットアレイの出力に接続する第２マルチプレクサと、を各々有する複数のプロセッシングコアを備えたプロセッサの制御方法であって、
第１方向に並ぶ第１所定数の演算ユニットの１つに前記第１メモリの出力を接続し、第１方向と異なる方向に並ぶ第２所定数の演算ユニットの１つに前記第２メモリの出力を接続し、前記第１メモリから出力される前記第１データを前記第１所定数の演算ユニットに順次転送する経路を前記第１マルチプレクサにより構築し、前記第２メモリから出力される前記第２データを前記第２所定数の演算ユニットに順次転送する経路を第２マルチプレクサにより構築することで、所定数の演算ユニットを含むシストリックアレイを構築し、
前記第１メモリから前記第１データを出力して前記シストリックアレイ内に転送するとともに、前記第２メモリから第２データを出力して前記シストリックアレイ内に転送することで、前記シストリックアレイ内の演算ユニットに演算を実行させることを特徴とするプロセッサの制御方法。
【請求項１２】
前記第１メモリに供給する第１アドレスを生成し、前記第１アドレスに応じた前記第１データを前記第１メモリから出力し、
前記第２メモリに供給する第２アドレスを生成し、前記第２アドレスに応じた前記第２データを前記第２メモリから出力することを特徴とする請求項１１に記載のプロセッサの制御方法。
【請求項１３】
前記複数のプロセッシングコアの各々は、命令を保持可能な命令メモリと、前記演算ユニットアレイにおける命令を受ける第３入力を、前記命令メモリの出力または隣接するプロセッシングコアの演算ユニットアレイ内の命令の転送経路に接続する第３マルチプレクサと、を有し、
前記シストリックアレイのコーナー部に対応するプロセッシングコアに含まれる命令メモリに命令を格納し、前記命令メモリから出力される命令を前記シストリックアレイ内の演算ユニットに順次転送し、各演算ユニットに命令に応じた演算を実行させることを特徴とする請求項１１または請求項１２に記載のプロセッサの制御方法。
【請求項１４】
前記複数のプロセッシングコアは、ネットワークを介して相互に接続され、
前記演算ユニットアレイが演算を実行中に、前記複数のプロセッシングコアのいずれかの前記第１メモリが保持する第１データを、前記ネットワークを介して他のプロセッシングコアの前記第１メモリに転送する制御を実施し、
前記演算ユニットアレイが演算を実行中に、前記複数のプロセッシングコアのいずれかの前記第２メモリが保持する第２データを、前記ネットワークを介して他のプロセッシングコアの前記第２メモリに転送する制御を実施することを特徴とする請求項１１ないし請求項１３のいずれか１項に記載のプロセッサの制御方法。
【請求項１５】
前記プロセッサは、前記シストリックアレイを使用して、ニューラルネットワークによるディープラーニングを実行することを特徴とする請求項１１ないし請求項１４のいずれか１項に記載のプロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサおよびプロセッサの制御方法に関する。
【背景技術】
【０００２】
近年、ディープニューラルネットワーク（ＤＮＮ：Deep Neural Network）を使用したディープラーニングにより画像認識や音声認識等が精度よく行われるようになってきている。また、ディープラーニングの畳み込み処理に特化したプロセッサが提案されている。この種のプロセッサは、マトリックス状に配置された複数の演算セルを含むシストリックアレイを有する。そして、シストリックアレイの行方向に入力データを供給し、シストリックアレイの列方向に重みデータを供給し、複数の入力データと複数の重みデータとを順次乗算して積算することで、畳み込み処理が実行される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第９７４７５４６号明細書
【特許文献２】米国特許第９９５２８３１号明細書
【特許文献３】米国特許第９９４０５７３号明細書
【特許文献４】米国特許第９８４２２９３号明細書
【特許文献５】米国特許第９８０５３０３号明細書
【特許文献６】米国特許第９７２１２０３号明細書
【特許文献７】米国特許第９６９１０１９号明細書
【特許文献８】米国特許出願公開第２０１８／０１６５５７７号明細書
【特許文献９】米国特許出願公開第２０１７／０１０３３１５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
シストリックアレイのサイズが固定の場合、ディープラーニングで処理するデータ量が大きいと、シストリックアレイのサイズが不足する場合がある。この場合、処理するデータを複数回に分けてロードし、畳み込み処理を複数回に分けて実行する必要があり、処理効率が低下する。また、入力データが格納されたバッファから入力データを順番に出力しながら畳み込み処理を実行する場合、例えば、入力データのストライド値を変える場合、ストライド値に合わせた入力データをバッファに格納しなおす必要がある。
【０００５】
本発明の実施の形態は、上記の点に鑑みてなされたもので、演算を効率的に実行できるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の実施の形態のプロセッサは、複数の演算ユニットを含む演算ユニットアレイを各々有する複数のプロセッシングコアを備え、前記複数のプロセッシングコアの各々は、第１データを保持可能な第１メモリと、第２データを保持可能な第２メモリと、前記演算ユニットアレイにおいて前記第１データを受ける第１入力を、自プロセッシングコアの前記第１メモリの出力または隣接するプロセッシングコアの前記演算ユニットアレイの出力に接続する第１マルチプレクサと、前記演算ユニットアレイにおいて前記第２データを受ける第２入力を、自プロセッシングコアの前記第２メモリの出力または隣接するプロセッシングコアの前記演算ユニットアレイの出力に接続する第２マルチプレクサと、を有することを特徴とする。
【発明の効果】
【０００７】
演算を効率的に実行できるプロセッサを提供することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態におけるプロセッサの例を示すブロック図である。
【図２】図１のプロセッシングコアの例を示すブロック図である。
【図３】シストリックアレイの構成例を示すブロック図である。
【図４】図２のプロセッシングエレメントの例を示す回路図である。
【図５】図２の各種メモリの例を示すブロック図である。
【図６】図１のプロセッサにより畳み込み処理を実行する場合の動作フロー図である。
【図７】図１のプロセッサにより畳み込み処理を実行する場合の別の動作フロー図である。
【図８】図１のプロセッサにより畳み込み処理を実行する場合のさらなる別の動作フロー図である。
【図９】図６から図８で説明したデータの転送の流れを示す説明図である。
【図１０】図９の続きを示す説明図である。
【図１１】図１０の続きを示す説明図である。
【図１２】図１１の続きを示す説明図である。
【図１３】図１２の続きを示す説明図である。
【図１４】図１３の続きを示す説明図である。
【図１５】図１４の続きを示す説明図である。
【図１６】図１５の続きを示す説明図である。
【図１７】畳み込み処理の例を示す説明図である。
【図１８】図１のプロセッサ内に再構成したシストリックアレイにより、図１７に示した畳み込み処理を実行する例を示す説明図である。
【図１９】図１８に示したＰＥ０−ＰＥ８が実行する畳み込み処理の例を示す説明図である。
【図２０】図１９の続きを示す説明図である。
【図２１】他のプロセッサのシストリックアレイにより、図１７に示した畳み込み処理を実行する例を示す説明図（比較例）である。
【図２２】図１のプロセッサにより畳み込み処理を実行する他の例を示す説明図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【００１０】
図１は、本発明の実施の形態におけるプロセッサの例を示すブロック図である。プロセッサ１００は、ネットワークオンチップＮＯＣ（以下、ＮＯＣ）を介して相互に接続された複数のプロセッシングコア２００（ＴＰＣ：Tensor Processing Core）と、プロセッサ１００の動作を制御するプリフェッチエンジン３００とを有する。複数のプロセッシングコア２００は、例えば、マトリックス状に配置され、各プロセッシング２００は、ＮＯＣに設けられる複数のルータＲＴのうち対応するルータＲＴに接続される。なお、プロセッシングコア２００の配置は、マトリックス状に限定されない。例えば、複数のプロセッシングコア２００の配置方向は、上下方向および左右方向だけではなく、斜め方向（例えば、千鳥状）でもよい。
【００１１】
図１の例では、プロセッサ１００は、縦方向と横方向にそれぞれ３個並ぶ３行３列の９個のプロセッシングコア２００を有する。しかしながら、プロセッサ１００は、１行ｎ列またはｎ行１列のプロセッシングコア２００を有してもよい（ｎは２以上の整数）。すなわち、プロセッシングコア２００の数は、２個以上あればよい。例えば、プロセッサ１００は、縦方向と横方向のそれぞれに１６個並ぶ２５６個のプロセッシングコア２００を有してもよい。プロセッシングコア２００の縦方向と横方向の数は、互いに同じ数であることが好ましいが、縦方向と横方向の数が相違してもよい。以下では、プロセッシングコア２００をＴＰＣ２００とも称する。
【００１２】
互いに隣接するＴＰＣ２００間は、ＮＯＣとは異なる専用の転送経路１１０（破線の矢印）を介して接続される。転送経路１１０により、例えば、図１の左上のＴＰＣ２００を起点として、右方向および下方向にデータ（入力データ、重みデータ）や命令等の情報を転送可能である。
【００１３】
プリフェッチエンジン３００は、例えば、Ｌ２キャッシュに相当する機能を有しており、ＴＰＣ２００への情報の転送およびＴＰＣ２００間での情報の転送を制御するコントローラ３１０を有する。コントローラ３１０は、上位のシステムからの情報を所定のＴＰＣ２００に転送し、ＴＰＣ２００から情報を受信し、あるいは、ＴＰＣ２００間で情報を転送するために、ＮＯＣに含まれるルータＲＴによるルーティングを制御する。
【００１４】
プリフェッチエンジン３００からＴＰＣ２００に出力される入力データ、重みデータおよび命令等の情報は、図１の横方向に並ぶルータＲＴを介してＴＰＣ２００に転送され、図１の縦方向に並ぶルータＲＴ間では転送されない。同様に、ＴＰＣ２００からプリフェッチエンジン３００に出力される畳み込みの結果（特徴マップ）等の情報は、図１の横方向に並ぶルータＲＴを介してプリフェッチエンジン３００に転送され、図１の縦方向に並ぶルータＲＴ間では転送されない。これにより、ルータＲＴ内で情報が交錯することを防止することができ、プリフェッチエンジン３００とＴＰＣ２００との間での情報の転送効率を向上することができる。
【００１５】
図２は、図１のプロセッシングコア（ＴＰＣ）２００の例を示すブロック図である。ＴＰＣ２００は、マトリックス状に配置された複数のプロセッシングエレメント４００（ＰＥ）、アドレス生成部２１、命令メモリ２２、複数のデータメモリ２３、データ管理部２４、複数の重みメモリ２５および出力メモリ２６を有する。また、ＴＰＣ２００は、マルチプレクサ２７（２７１、２７２、２７３、２７４、２７５）、再構成制御部２８（２８１、２８２、２８３）および複数のラッチＬＴを有する。
【００１６】
データメモリ２３または重みメモリ２５の一方は、入力データＤＴまたは重みＷの一方である第１データを保持可能な第１メモリの一例である。データメモリ２３または重みメモリ２５の他方は、入力データＤＴまたは重みＷの他方である第２データを保持可能な第２メモリの一例である。以下では、プロセッシングエレメント４００をＰＥ４００とも称する。また、以降の説明は、畳み込み処理を実行する場合について説明するが、畳み込み処理以外の処理（演算）が実行されてもよい。
【００１７】
例えば、図１に示したコントローラ３１０は、ルータＲＴを制御することで、データメモリ２３への入力データＤＴの転送を制御し、重みメモリ２５への重みデータＷの転送を制御し、命令メモリ２２への命令ＩＮＳＴの転送を制御する。また、コントローラ３１０は、マルチプレクサ２７１−２７５の動作を制御する。以下では、入力データＤＴをデータＤＴとも称し、重みデータＷを重みＷとも称する。また、入力データＤＴおよび重みデータＷをデータとも称する。
【００１８】
例えば、ＴＰＣ２００は、縦方向と横方向にそれぞれ２個並ぶ４個のＰＥ４００を有するが、ＰＥ４００の数は４個に限定されない。ＴＰＣ２００は、縦方向と横方向にそれぞれ３個以上ずつ並ぶＰＥ４００を有してもよい。但し、後述するように、本実施形態では、複数のＴＰＣ２００間で所定数のＰＥ４００を連結してシストリックアレイを構築可能であるため、ＴＰＣ２００は、最小限（すなわち、４個）のＰＥ４００を持てばよい。ＰＥ４００は、演算ユニットとして機能し、各ＴＰＣ２００に含まれる複数のＰＥ４００により、演算ユニットアレイの一例であるＰＥアレイが構築される。
【００１９】
アドレス生成部２１は、データ管理部２４を介してコントローラ３１０から供給されるアドレス生成情報に基づいて、データメモリ２３に出力するアドレスを生成し、重みメモリ２５に出力するアドレスを生成する。アドレス生成部２１は、データメモリ２３に出力するアドレスを生成する第１アドレス生成器および重みメモリ２５に出力するアドレスを生成する第２アドレス生成器として機能する。
【００２０】
アドレス生成部２１がアドレス生成情報に基づいてアドレスを生成し、生成したアドレスを、例えば、データメモリ２３に出力することで、データメモリ２３からアドレスに応じた順番でデータＤＴを出力することができる。したがって、データメモリ２３に保持されたデータＤＴを任意の順序で出力することができ、データメモリ２３にデータＤＴを再格納することなく、ストライド値等を変更することができる。重みメモリ２５からもアドレスに応じた任意の順序で重みＷを出力することができる。この結果、データＤＴおよび重みＷのロードサイクルを減らすことができ、プロセッサ１００による畳み込み処理の効率を向上することができる。
【００２１】
命令メモリ２２は、ルータＲＴおよびデータ管理部２４を介してプリフェッチエンジン３００から供給される命令ＩＮＳＴを保持可能である。命令メモリ２２は、ＰＥ４００による演算の実行に合わせて、演算の種別等の演算仕様を含む命令ＩＮＳＴを、演算を実行するＰＥ４００に出力する。
【００２２】
データメモリ２３は、畳み込み処理に使用するデータＤＴを保持可能な複数の記憶領域を有する。データメモリ２３は、ルータＲＴおよびデータ管理部２４を介してプリフェッチエンジン３００から供給されるデータＤＴを保持し、保持したデータＤＴをアドレス生成部２１からのアドレスにしたがって出力する。なお、データメモリ２３は、図２の横方向に並ぶ２つのＰＥ４００毎に設けられる。これにより、互いに異なるアドレスを各データメモリ２３に供給することが可能になり、各データメモリ２３からアドレスに応じたデータＤＴを出力させることができる。
【００２３】
重みメモリ２５は、畳み込み処理に使用する重みＷを保持可能な複数の記憶領域を有する。重みメモリ２５は、ルータＲＴおよびデータ管理部２４を介してプリフェッチエンジン３００から供給される重みＷを保持し、保持した重みＷをアドレス生成部２１からのアドレスにしたがって出力する。なお、重みメモリ２５は、図２の縦方向に並ぶ２つのＰＥ４００毎に設けられる。これにより、互いに異なるアドレスを各重みメモリ２５に供給することが可能になり、各重みメモリ２５からからアドレスに応じた重みＷを出力させることができる。
【００２４】
出力メモリ２６は、ＰＥ４００による特徴マップ等の演算結果を保持する複数の記憶領域を有する。出力メモリ２６は、複数のＰＥ４００での演算結果を保持する結果メモリの一例である。出力メモリ２６は、自ＴＰＣ２００のＰＥ４００から受ける演算結果を、データ管理部２４を介してプリフェッチエンジン３００に出力する。出力メモリ２６をＴＰＣ２００毎に設けることで、ＴＰＣ２００間での演算結果の転送を不要にすることができ、演算結果の転送サイクルを削減することができる。この結果、プロセッサ１００による畳み込み処理の効率を向上することができる。
【００２５】
命令メモリ２２、データメモリ２３、重みメモリ２５および再構成制御部２８は、転送バスＴＢを介してデータ管理部２４に接続される。命令メモリ２２、データメモリ２３、重みメモリ２５および出力メモリ２６の内部構成の例は、図５で説明する。
【００２６】
データ管理部２４は、プリフェッチエンジン３００とＴＰＣ２００との間のデータ等の情報の転送を管理する。例えば、データ管理部２４は、プリフェッチエンジン３００から転送されるアドレス情報をアドレス生成部２１に出力し、プリフェッチエンジン３００から転送される命令ＩＮＳＴを命令メモリ２２に出力する。データ管理部２４は、プリフェッチエンジン３００から転送される畳み込みに使用するデータＤＴをデータメモリ２３に出力し、プリフェッチエンジン３００から転送される畳み込みに使用する重みＷを重みメモリ２５に出力する。データ管理部２４は、プリフェッチエンジン３００から転送されるマルチプレクサ２７の選択制御情報を再構成制御部２８に出力する。
【００２７】
また、データ管理部２４は、出力メモリ２６から出力される特徴マップ等の演算結果をプリフェッチエンジン３００に転送する。データ管理部２４は、データメモリ２３に保持されているデータＤＴを、ルータＲＴを介して他のＴＰＣ２００のデータメモリ２３に転送し、重みメモリ２５に保持されている重みＷを、ルータＲＴを介して他のＴＰＣ２００の重みメモリ２５に転送する。
【００２８】
例えば、データ管理部２４は、プリフェッチエンジン３００からの指示に基づいて、畳み込み処理を実行中に、データメモリ２３と他のＴＰＣ２００のデータメモリ２３との間でデータＤＴの転送を制御する。なお、データ管理部２４は、情報の転送先を示す識別情報ＩＤを、情報とともに転送バスＴＢに出力する。アドレス生成部２１、命令メモリ２２、データメモリ２３、重みメモリ２５および再構成制御部２８の各々は、転送バスＴＢに転送される識別情報ＩＤが自身を示すとき、識別情報ＩＤともに転送される情報を受信する。すなわち、アドレス生成部２１、命令メモリ２２、データメモリ２３、重みメモリ２５、出力メモリ２６および再構成制御部２８は、ルータＲＴを介してデータとともに転送される識別情報ＩＤにより識別される。
【００２９】
各再構成制御部２８（２８１、２８２、２８３）は、データ管理部２４を介してコントローラ３１０から出力される選択制御情報に基づいて、各マルチプレクサ２７（２７１、２７２、２７３、２７４、２７５）に対する選択信号を生成する。各マルチプレクサ２７は、再構成制御部２８からの選択信号に応じて複数の入力のいずれかを選択し、選択した入力を出力に接続する。
【００３０】
マルチプレクサ２７１は、自ＴＰＣ２００の命令メモリ２２から出力される命令ＩＮＳＴ、上側（Ｔ）のＴＰＣ２００の命令メモリ２２から転送される命令ＩＮＳＴ、または左側（Ｌ）のＴＰＣ２００の命令メモリ２２から転送される命令ＩＮＳＴを選択する。マルチプレクサ２７１が選択した命令ＩＮＳＴは、自ＴＰＣ２００のＰＥアレイの命令入力に出力され、ラッチＬＴを含む命令ＩＮＳＴの転送経路を介して下側（Ｂ）のＴＰＣ２００のマルチプレクサ２７１に転送される。
【００３１】
自ＴＰＣ２００において、マルチプレクサ２７１からＰＥアレイに供給された命令ＩＮＳＴは、ＰＥアレイ内の各ＰＥ４００に転送される。また、図２の右上のＰＥ４００は、左隣のＰＥ４００から受信した命令ＩＮＳＴを右側（Ｒ）のＴＰＣ２００に転送する。なお、図２の右下のＰＥ４００は、命令ＩＮＳＴを受けて各種演算を実行するが、右側（Ｒ）のＴＰＣ２００に命令ＩＮＳＴを転送する機能を持たない。
【００３２】
マルチプレクサ２７１が、自ＴＰＣ２００の命令メモリ２２の出力を選択した場合、ＴＰＣ２００は、畳み込み処理の起点となるコーナー部のＴＰＣ２００として機能する。換言すれば、畳み込み処理の起点となるＴＰＣ２００は、所定数のＴＰＣ２００のＰＥ４００により構築されるシストリックアレイの左上に位置する。一方、マルチプレクサ２７１が、上側（Ｔ）のＴＰ２００または左側（Ｌ）のＴＰＣ２００から転送される命令ＩＮＳＴを選択した場合、ＴＰＣ２００は、起点以外の中間のＴＰＣ２００として機能する。
【００３３】
マルチプレクサ２７２、２７３は、自ＴＰＣ２００のデータメモリ２３から出力されるデータＤＴ、または左側（Ｌ）のＴＰＣ２００から転送されるデータＤＴのいずれかを選択し、選択したデータＤＴを自ＴＰＣ２００のＰＥアレイのデータ入力に出力する。ＰＥアレイにおいて、マルチプレクサ２７２、２７３の出力に接続されたＰＥ４００は、データメモリ２３からデータＤＴを受ける左端のＰＥ４００、または左側（Ｌ）のＴＰＣ２００からデータＤＴを受ける中間のＰＥ４００として機能する。ここで、左端のＰＥ４００は、所定数のＴＰＣ２００のＰＥ４００により構築されるシストリックアレイの左端のＰＥ４００を示し、中間のＰＥ４００は、左端のＰＥ４００以外のＰＥ４００を示す。
【００３４】
マルチプレクサ２７４、２７５は、自ＴＰＣ２００の重みメモリ２５から出力される重みＷ、または上側（Ｔ）のＴＰＣ２００から出力される重みＷのいずれかを選択し、選択した重みＷを自ＴＰＣ２００のＰＥアレイの重み入力に出力する。ＰＥアレイにおいて、マルチプレクサ２７４、２７５の出力に接続されたＰＥ４００は、自ＴＰＣ２００の重みメモリ２５から重みＷを受ける上端のＰＥ４００、または上側（Ｔ）のＴＰＣ２００から重みＷを受ける中間のＰＥ４００として機能する。ここで、上端のＰＥ４００は、所定数のＴＰＣ２００のＰＥ４００により構築されるシストリックアレイの上端のＰＥ４００を示し、中間のＰＥ４００は、上端のＰＥ４００以外のＰＥ４００を示す。
【００３５】
マルチプレクサ２７２−２７５により、複数のＴＰＣ２００に含まれるＰＥ４００を連結することができ、畳み込みに使用するシストリックアレイのサイズを任意に設定することができる。すなわち、再構成制御部２８１−２８３とマルチプレクサ２７１−２７５とにより、畳み込みに使用するデータＤＴの量に合わせて、最適なサイズのシストリックアレイを再構成することができる。
【００３６】
図３は、シストリックアレイの構成例を示すブロック図である。図３に示す例では、４つのＴＰＣ２００により、太枠で示す９個のＰＥ４００を含むシストリックアレイが再構成される。そして、プロセッサ１００は、シストリックアレイを使用して、例えば、ニューラルネットワークの複数の層のディープラーニング（例えば、畳み込み処理）を実行する。図３では、命令メモリ２２、データメモリ２３、重みメモリ２５、出力メモリ２６を、それぞれ命令メモリＩＭ、データメモリＤＭ、重みメモリＷＭおよび出力メモリＯＭとして示している。
【００３７】
網掛けは、シストリックアレイでの畳み込み処理に使用する要素を示す。シストリックアレイに対応する各データメモリＤＭの出力は、図３の横方向に並ぶ所定数のＰＥに順次接続される。シストリックアレイに対応する各重みメモリＷＭの出力は、図３の縦方向に並ぶ所定数のＰＥに順次接続される。
【００３８】
命令ＩＮＳＴは、シストリックアレイにおいて、左上のＴＰＣ２００の命令メモリＩＭのみに格納される。畳み込みに使用するデータＤＴは、シストリックアレイにおいて左側のＴＰＣ２００のデータメモリＤＭに格納される。畳み込みに使用する重みＷは、シストリックアレイにおいて、上側のＴＰＣ２００の重みメモリＷＭに格納される。各ＰＥ４００による畳み込み処理で生成された特徴マップは、各ＰＥが属するＴＰＣ２００の出力メモリＯＭに格納される。
【００３９】
なお、４つのＴＰＣ２００の全てのＰＥ４００（１６個）を使用して畳み込み処理を実行する場合、図３の左下のＴＰＣ２００の下側のデータメモリＤＭにもデータが格納され、図３の右上のＴＰＣ２００の右側の重みメモリＷＭにも重みＷが格納される。
【００４０】
図４は、図２のプロセッシングエレメント４００の例を示す回路図である。ＰＥ４００は、命令デコーダ４１、レジスタファイル４２、ＡＬＵ（Arithmetic and Logic Unit）４３、ＭＡＣ（Multiply and ACcumulate）４４、マルチプレクサ４５（４５１、４５２、４５３）および複数のラッチＬＴを有する。すなわち、ＰＥ４００は、算術演算器（ＡＬＵ）と積和演算器（ＭＡＣ）とを含む。
【００４１】
命令デコーダ４１は、命令ＩＮＳＴをデコードし、出力メモリアドレスＯＭＡＤ、ソースレジスタアドレスＳＲ１ＡＤ、ＳＲ２ＡＤ、ディスティネーションレジスタアドレスＤＲＡＤおよびマルチプレクサ制御信号ＭＵＸＣを生成する。マルチプレクサ制御信号ＭＵＸＣは、マルチプレクサ４５１、４５２、４５３毎に生成される。
【００４２】
出力メモリアドレスＯＭＡＤは、特徴マップ等を格納する出力メモリ２６の格納先を示す。ソースレジスタアドレスＳＲ１ＡＤ、ＳＲ２ＡＤは、例えば、各種演算に使用する重みＷ等のデータがそれぞれ格納されたレジスタＲＥＧを示し、ディスティネーションレジスタアドレスＤＲＡＤは、演算結果を格納するレジスタＲＥＧを示す。マルチプレクサ制御信号ＭＵＸＣは、マルチプレクサ４５１、４５２、４５３にそれぞれ出力され、マルチプレクサ４５１、４５２、４５３の切り替えに使用される。
【００４３】
レジスタファイル４２は、ＣＰＵ（Central Processing Unit）等の汎用のプロセッサと同様に、複数のレジスタＲＥＧを有している。命令で指定された複数のレジスタＲＥＧには、例えば、畳み込みに使用する重みＷまたはデータＤＴが格納されてもよく、演算結果ＲＳＬＴが格納されてもよい。なお、レジスタファイル４２は、固定小数点数用のレジスタＲＥＧと浮動小数点数用のレジスタＲＥＧとを有してもよい。
【００４４】
ＡＬＵ４３は、命令デコーダ４１によりデコードされた命令ＩＮＳＴ（デコード結果）に基づいて、例えば、加算、減算、乗算、左シフト、右シフト、最小値の算出、最大値の算出、論理積、論理和、排他的論理和のいずれかまたは複数を実行可能である。なお、ＡＬＵ４３が実行可能な演算の種類は、上記に限定されない。例えば、ＡＬＵ４３は、３２ビットの浮動小数点数を演算可能である。ＭＡＣ４４は、命令デコーダ４１によりデコードされた命令ＩＮＳＴに基づいて、１６ビットまたは３２ビットの浮動小数点数の積和演算を実行する。ＭＡＣ４４で処理可能なビット数は上記に限定されず、８ビットでもよい。また、複数のＭＡＣ４４が各ＰＥ４００に搭載されてもよい。このように、ＰＥ４００は、複数種の演算器とレジスタファイル４２を有するため、ＣＰＵ（Central Processing Unit）と同様の演算を実行することができる。
【００４５】
マルチプレクサ４５１は、マルチプレクサ制御信号ＭＵＸＣに応じて、レジスタＲＥＧに保持された重みＷまたは上側（Ｔ）から受ける重みＷのいずれかをＡＬＵ４３またはＭＡＣ４４に出力する。マルチプレクサ４５２は、マルチプレクサ制御信号ＭＵＸＣに応じて、レジスタＲＥＧに保持されたデータＤＴまたは左側から受けるデータＤＴのいずれかをＡＬＵ４３またはＭＡＣ４４に出力する。
【００４６】
マルチプレクサ４５３は、マルチプレクサ制御信号ＭＵＸＣに応じて、ＡＬＵ４３またはＭＡＣ４４から出力される演算結果ＲＳＬＴの何れかをレジスタファイル４２または出力メモリ２６（図２）に出力する。なお、演算結果ＲＳＬＴの出力メモリ２６への格納先は、出力メモリアドレスＯＭＡＤにより指定される。また、マルチプレクサ４５３は、マルチプレクサ制御信号ＭＵＸＣに応じて、マルチプレクサ４５１からバイパスされる重みＷをレジスタファイル４２のレジスタＲＥＧのいずれかに格納する。
【００４７】
なお、ＰＥ４００において、命令ＩＮＳＴおよびデータＤＴは、ラッチＬＴを介して図４の左側（Ｌ）から右側（Ｒ）に転送可能であり、重みＷは、ラッチＬＴを介して図４の上側（Ｔ）から下側（Ｂ）に転送可能である。
【００４８】
図４に示すＰＥ４００は、乗算器ではなく、ＡＬＵ４３、ＭＡＣ４４およびレジスタファイル４２を有する。このため、例えば、ＰＥ４００は、畳み込みにおける乗算だけでなく、様々な算術演算および論理演算を実行することができる。これにより、例えば、ニューラルネットワークのディープラーニングにおいて、畳み込み層の演算だけでなく、プーリング層、活性化層、全結合層等の演算にＰＥ４００を使用することが可能になる。また、ＰＥ４００内で、データＤＴと重みＷとの乗算結果を足し込む畳み込み処理を実行することができる。
【００４９】
さらに、ＰＥ４００は、レジスタＲＥＧに格納した演算結果を使用して他の演算を実行することができる。また、外部から供給される重みＷをレジスタＲＥＧにバイパスできるため、レジスタＲＥＧに保持された重みＷを繰り返し使用して畳み込みを実行することができる。この結果、例えば、データメモリ２３へのデータＤＴの転送回数および重みメモリ２５への重みＷの転送回数を従来に比べて少なくすることが可能になり、シストリックアレイによる畳み込み処理を効率よく実行することができる。
【００５０】
図５は、図２の各種メモリの例を示すブロック図である。図５に示すメモリ５００は、命令メモリ２２、データメモリ２３、重みメモリ２５または出力メモリ２６の何れかである。
【００５１】
メモリ５００は、マルチプレクサ５１、レジスタ５２、ライトイネーブルロジック５３、ライトカウンタロジック５４、リードカウンタロジック５５およびメモリアレイ５６（ＡＲＹ）を有する。マルチプレクサ５１は、転送バスＴＢを介して受信する識別情報ＩＤが自メモリ５００を示す場合であって、データにレジスタ５２の設定を示す情報を含む場合、データに含まれるアドレスを所定のレジスタ５２に格納する。レジスタ５２は、ライト用のスタートアドレスＳＴＡＤ（Ｗ）、ライト用のエンドアドレスＥＮＤＡＤ（Ｗ）、リード用のスタートアドレスＳＴＡＤ（Ｒ）およびリード用のエンドアドレスＥＮＤＡＤ（Ｒ）を保持する領域を有している。レジスタ５２への格納位置は、データに含まれるレジスタアドレスＲＥＧＡＤにより識別される。
【００５２】
ライトイネーブルロジック５３は、識別情報ＩＤが自メモリ５００を示す場合であって、データバリッド信号ＤＴＶＬＤがライトデータのバリッド状態を示す場合に動作する。ライトイネーブルロジック５３は、ライトカウンタロジック５４から出力されるライトアドレスＷＲＡＤがエンドアドレスＥＮＤＡＤ（Ｗ）に達するまで、イネーブル信号ＥＮを出力する。ライトカウンタロジック５４は、マルチプレクサ５４１および加算器５４２を有している。マルチプレクサ５４１は、メモリアレイＡＲＹへのデータの書き込み開始時、スタートアドレスＳＴＡＤ（Ｗ）を選択し、その後、加算器５４２が出力するライトアドレスＷＲＡＤを選択する。加算器５４２は、イネーブル信号ＥＮを受信中に動作し、マルチプレクサ５４１から出力されるライトアドレスを"＋１"し、ライトアドレスＷＲＡＤを生成する。
【００５３】
リードカウンタロジック５５は、レジスタ５２に設定されたスタートアドレスＳＴＡＤ（Ｒ）からエンドアドレスＥＮＤＡＤ（Ｒ）までのリードアドレスＲＤＡＤを順次生成する。リードカウンタロジック５５は、有効なリードアドレスＲＤＡＤを生成している間、リードデータバリッド信号ＲＤＴＶＬＤを生成する。リードデータバリッド信号ＲＤＴＶＬＤは、メモリアレイＡＲＹからリードデータＲＤＴが有効であることを示す。
【００５４】
メモリアレイＡＲＹは、ライトアドレスＷＲＡＤとともに受信したライトデータＷＤＴを図示しないメモリセルにライトし、リードアドレスＲＤＡＤが示すメモリセルからデータを読み出してリードデータＲＤＴとして出力する。ライトデータＷＤＴおよびリードデータＲＤＴは、入力データＤＴ、重みデータＷ、演算結果ＲＳＬＴまたは命令ＩＮＳＴである。特に限定されないが、例えば、メモリアレイＡＲＹは、数キロワードのメモリ容量を有している。例えば、１ワードは、５ビットの識別情報ＩＤと６４ビットのデータとを含む。なお、識別情報ＩＤのビット数は、識別が必要な要素の数に応じて増減されてもよい。データは、３２ビットでもよく、１２８ビットでもよい。
【００５５】
図６は、図１のプロセッサ１００により畳み込み処理を実行する場合の動作フロー図である。すなわち、図６は、プロセッサ１００の制御方法の一例を示している。図６に示す動作フローは、例えば、プロセッサ１００の動作を制御する上位のシステムからの畳み込み処理の指示に基づいて開始される。なお、上位のシステムから複数回の畳み込み処理の指示を受けた場合、プロセッサ１００は、図６の動作フローを繰り返し実行してもよい。
【００５６】
ステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６を繰り返すことで、アドレス生成部２１へのアドレス生成情報の転送、データメモリ２３へのデータＤＴの転送、重みメモリ２５への重みＷの転送および命令メモリ２２への命令ＩＮＳＴの転送が順次実行される。以下では、アドレス生成情報、命令ＩＮＳＴ、データＤＴおよび重みＷを、データとも称する。ステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６によるデータの転送は、図１の縦方向に並ぶＴＰＣ２００毎（図１の例では３つ毎）に実行される。換言すれば、データは、図１の縦方向に並ぶＴＰＣ２００に並列に転送可能である。
【００５７】
ステップＳ１００では、プロセッサ１００のコントローラ３１０は、ＮＯＣのルータＲＴを再構成して、データの転送経路を設定する。データの転送対象のＴＰＣ２００が同じ場合、２回目以降のステップＳ１００は省略され、前回設定した転送経路が使用されてもよい。なお、データの転送経路の設定にかかわらず、コントローラ３１０は、任意のＴＰＣ２００に制御信号を出力できる。
【００５８】
次に、ステップＳ１０２では、コントローラ３１０は、データの転送先のメモリアドレスを、データを転送する命令メモリ２２、データメモリ２３または重みメモリ２５に設定する。ここで、メモリアドレスは、データの転送先である命令メモリ２２、データメモリ２３または重みメモリ２５に割り当てられたアドレスであり、図５に示したライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）である。コントローラ３１０は、メモリアドレスおよびレジスタアドレスＲＥＧＡＤを、データの転送先を示す識別情報ＩＤとともにＮＯＣに出力する。例えば、アドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を受けたデータメモリ２３は、受けたアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）をレジスタ５２においてレジスタアドレスＲＥＧＡＤで示される領域に格納する。
【００５９】
次に、ステップＳ１０４では、コントローラ３１０は、畳み込み処理に使用するデータ（データＤＴ、重みＷまたは命令ＩＮＳＴ）を識別情報ＩＤとともにＮＯＣに順次出力する。データの転送対象のＴＰＣ２００のデータ管理部２４は、ＮＯＣを介して受信するデータを転送バスＴＢに出力する。転送バスＴＢを介してコントローラ３１０からデータＤＴを受信したデータメモリ２３は、次の様に動作する。データメモリ２３は、１ワードのデータＤＴを受信する毎に、格納先をスタートアドレスＳＴＡＤ（Ｗ）からエンドアドレスＥＮＤＡＤ（Ｗ）に変えながら、データＤＴをメモリアレイＡＲＹに順次格納する。また、コントローラ３１０は、アドレス生成情報をアドレス生成部２１に転送する場合、アドレス生成情報を識別情報ＩＤとともに出力する。
【００６０】
次に、ステップＳ１０６では、プロセッサ１００は、畳み込み処理に必要な全てのデータを転送したかを判定し、畳み込み処理に必要な全てのデータを転送するまで、ステップＳ１００からステップＳ１０４の動作を繰り返す。畳み込み処理に必要な全てのデータの転送を完了した場合、ステップＳ１０８において、プロセッサ１００は、コンフィギュレーション用の選択制御情報を識別情報ＩＤとともにコンフィギュレーションの対象の再構成制御部２８に出力する。選択制御情報は、図１の縦方向に並ぶＴＰＣ２００毎に出力される。選択制御情報を受けた再構成制御部２８が、マルチプレクサ２７を切り替えることで、所定のサイズのシストリックアレイが構成される。
【００６１】
次に、ステップＳ１１０では、コントローラ３１０は、命令ＩＮＳＴを格納した命令メモリ２２を含むＴＰＣ２００に畳み込み処理を開始するトリガ信号を出力する。トリガ信号に応答して、命令メモリ２２から命令が順次出力され、アドレス生成部２１によりデータメモリ２３と重みメモリ２５へのアドレスが順次出力され、畳み込み処理が開始される。畳み込みの結果である特徴マップは、出力メモリ２６に格納される。ステップＳ１１２では、コントローラ３１０は、畳み込み処理が完了するのを待つ。
【００６２】
畳み込み処理が完了した場合、ステップＳ１１４において、コントローラ３１０は、ルータＲＴを制御して、畳み込み処理により得られた特徴マップを転送する転送経路を設定する。次に、ステップＳ１１６では、コントローラ３１０は、特徴マップが格納された出力メモリ２６に対して、特徴マップの転送元のメモリアドレスを設定する。ここで、メモリアドレスは、図５に示したリード用のアドレスＳＴＡＤ（Ｒ）、ＥＮＤＡＤ（Ｒ）である。そして、ステップＳ１１８では、コントローラ３１０は、出力メモリ２６に転送要求を発行し、出力メモリ２６から出力される特徴マップのデータを１ワードずつ順次受信し、シストリックアレイを使用した畳み込み処理を終了する。
【００６３】
図７は、図１のプロセッサ１００により畳み込み処理を実行する場合の別の動作フロー図である。すなわち、図７は、プロセッサ１００の制御方法の別の例を示している。図７では、シストリックアレイでの畳み込み処理に使用しない空きのデータメモリ２３および空きの重みメモリ２５に、次の畳み込み処理で実行するデータＤＴおよび重みＷがそれぞれ格納される。そして、畳み込み処理中に、次の畳み込み処理で使用するデータＤＴおよび重みＷが格納されたデータメモリ２３および重みメモリ２５から、シストリックアレイに対応するデータメモリ２３および重みメモリ２５にデータＤＴおよび重みＷがそれぞれ転送される。
【００６４】
例えば、畳み込み処理に使用するデータＤＴおよび重みＷのデータ量が多く、データＤＴおよび重みＷのそれぞれが、シストリックアレイの左端のデータメモリ２３およびシストリックアレイの上端の重みメモリ２５に入りきらない場合がある。この場合、シストリックアレイ内の空きのデータメモリ２３および空きの重みメモリ２５を利用して、畳み込み処理を開始する前に、データＤＴおよび重みＷがプリフェッチエンジン３００からシストリックアレイ内に転送される。空きのデータメモリ２３および空きの重みメモリ２５のそれぞれに予めデータＤＴおよび重みＷを転送しておくことで、データ量が多い場合にも、データＤＴおよび重みＷの外部からの転送と畳み込み処理とを分割することなく実行することができる。この結果、畳み込み処理の効率を向上することができる。
【００６５】
なお、データＤＴのみがシストリックアレイの左端のデータメモリ２３に入りきらない場合、データＤＴのみが空きのデータメモリ２３から転送され、重みＷは、空きの重みメモリ２５から転送されない。同様に、重みＷのみがシストリックアレイの上端の重みメモリ２５に入りきらない場合、重みＷのみが空きの重みメモリ２５から転送され、データＤＴは、空きのデータメモリ２３から転送されない。
【００６６】
ステップＳ２００、Ｓ２０２、Ｓ２０４、Ｓ２０６は、空きのデータメモリ２３および空きの重みメモリ２５へのデータの転送を含むことを除き、図６のステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６と同様である。ステップＳ２０８、Ｓ２１０は、図６のステップＳ１０８、Ｓ１１０と同様である。
【００６７】
畳み込み処理が開始された後、ステップＳ２１２からステップＳ２１８において、コントローラ３１０は、データメモリ２３間でのデータＤＴの転送および重みメモリ２５間での重みＷの転送を実行する。すなわち、次の畳み込み処理に使用するデータＤＴおよび重みＷがそれぞれ格納されたデータメモリ２３および重みメモリ２５から、シストリックアレイに対応するデータメモリ２３および重みメモリ２５にデータＤＴおよび重みＷがそれぞれ転送される。
【００６８】
まず、ステップＳ２１２では、コントローラ３１０は、ルータＲＴを制御して、データの転送元のＴＰＣ２００とデータの転送先のＴＰＣ２００との間でデータの転送経路を設定する。次に、ステップＳ２１４では、コントローラ３１０は、データの転送元のＴＰＣ２００にリード用のアドレスＳＴＡＤ（Ｒ）、ＥＮＤＡＤ（Ｒ）を設定し、データの転送先のＴＰＣ２００にライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を設定する。ここで、データの転送元およびデータの転送先は、データメモリ２３または重みメモリ２５である。
【００６９】
次に、ステップＳ２１６では、コントローラ３１０は、データの転送元と転送先のＴＰＣ２００にデータの転送を指示する。指示を受けたＴＰＣ２００のデータ管理部２４は、例えば、データの転送元のデータメモリ２３からデータの転送先のデータメモリ２３へのデータの転送を管理する。図１に示したように、プロセッサ１００は、複数のＴＰＣ２００を相互に接続するＮＯＣを有しており、１つのＴＰＣ２００のデータメモリ２３から他のＴＰＣ２００のデータメモリ２３にデータＤＴを転送可能である。また、１つのＴＰＣ２００の重みメモリ２５から他のＴＰＣ２００の重みメモリ２５に重みＷを転送可能である。したがって、ステップＳ２０８で構築されたシストリックアレイのサイズにかかわりなく、シストリックアレイに含まれるデータメモリ２３間でデータＤＴを転送することができ、シストリックアレイに含まれる重みメモリ２５間で重みＷを転送することができる。
【００７０】
次に、ステップＳ２１８では、プロセッサ１００は、次の畳み込み処理に必要な全てのデータ（データＤＴおよび重みＷ）を転送したかを判定し、次の畳み込み処理に必要な全てのデータを転送するまで、ステップＳ２１２からステップＳ２１６の動作を繰り返す。次の畳み込み処理に必要な全てのデータの転送を完了した場合、ステップＳ２２０において、プロセッサ１００は、畳み込み処理が完了するのを待つ。なお、畳み込み処理の実行時間は、データの転送時間より十分に長いため、畳み込み処理を実行中に、次の畳み込み処理に使用するデータを転送することが可能である。
【００７１】
ステップＳ２２２、Ｓ２２４、Ｓ２２６は、図６のステップＳ１１４、Ｓ１１６、Ｓ１１８と同様である。例えば、ステップＳ２２６の後、図６のステップＳ１１０に移行して次の畳み込み処理が実行されてもよく、あるいは、ステップＳ２１０に移行して、次の畳み込み処理が実行されてもよい。図７に示す動作では、畳み込み処理中に、次の畳み込み処理に使用するデータをデータメモリ２３および重みメモリ２５に転送することで、畳み込み処理の完了後すぐに次の畳み込み処理を開始することができ、畳み込み処理の効率を向上することができる。
【００７２】
図８は、図１のプロセッサ１００により畳み込み処理を実行する場合のさらなる別の動作フロー図である。すなわち、図８は、プロセッサ１００の制御方法のさらなる別の例を示している。図８では、図６のステップＳ１００からＳ１１０を実行した後、畳み込み処理中に、ステップＳ３００において、次の畳み込み処理に使用するデータを、ＮＯＣを介してコントローラ３１０から空きのデータメモリ２３および空きの重みメモリ２５に転送する。ステップＳ３００の動作は、データの転送先が、シストリックアレイに対応しない空きのデータメモリ２３および空きの重みメモリ２５であることを除き、図６のステップＳ１００からＳ１０６の動作と同様である。
【００７３】
ステップＳ３００の後、図６のステップＳ１１２からＳ１１８と同様に特徴マップが転送される。そして、ステップＳ１１８の後、図７のステップＳ２１２からＳ２１８と同様に、ＴＰＣ２００間でのデータの転送が実行され、次の畳み込み処理に使用するデータがシストリックアレイに対応するデータメモリ２３および重みメモリ２５にそれぞれ転送される。次の畳み込み処理に使用するデータの転送後、ステップＳ１１０に戻って次の畳み込み処理が開始され、以降、ステップＳ１１０、Ｓ３００、Ｓ１１２−Ｓ１１８、Ｓ２１２−Ｓ２１８の動作が、所定の回数繰り返される。
【００７４】
図８においても、畳み込み処理中に、次の畳み込み処理に使用するデータをデータメモリ２３および重みメモリ２５に転送することで、畳み込み処理の完了後すぐに次の畳み込み処理を開始することができ、畳み込み処理の効率を向上することができる。
【００７５】
図９から図１６は、図７で説明したデータの転送の流れを示す説明図である。すなわち、図９から図１６は、プロセッサ１００の制御方法の一例を示している。図９から図１６では、図３と同様に、縦２個、横２個のＴＰＣ２００に含まれる９個のＰＥ４００をシストリックアレイとして使用する例を示す。以下では、左上のＴＰＣ２００は、ＴＰＣ（００）と称し、右上のＴＰＣ２００は、ＴＰＣ（０１）と称し、左下のＴＰＣ２００は、ＴＰＣ（１０）と称し、右下のＴＰＣ２００は、ＴＰＣ（１１）と称する。
【００７６】
図３と同様に、命令メモリ２２、データメモリ２３、重みメモリ２５、出力メモリ２６を、それぞれ命令メモリＩＭ、データメモリＤＭ、重みメモリＷＭおよび出力メモリＯＭとして示している。また、ＰＥ４００は、ＰＥと称する。網掛けは、畳み込み処理に使用する命令メモリＩＭ、データメモリＤＭ、重みメモリＷＭおよび出力メモリＯＭを示し、斜線は、次の畳み込み処理に使用するデータ等を保持するデータメモリＤＭ、重みメモリＷＭおよび出力メモリＯＭを示す。太枠で示すＰＥは、シストリックアレイに含まれることを示し、太枠で示すルータＲＴは、転送経路の再構成の対象であることを示す。
【００７７】
図９において、コントローラ３１０は、データの転送経路をプリフェッチエンジン３００からＴＰＣ（００）、（１０）に設定するためにルータＲＴを再構成する。また、コントローラ３１０は、ＴＰＣ（００）、（１０）のデータメモリＤＭにライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を設定する。そして、コントローラ３１０は、畳み込み処理に使用するデータＤＴをＴＰＣ（００）、（１０）に転送する。
【００７８】
次に、図１０において、コントローラ３１０は、転送経路を維持したまま、ＴＰＣ（００）の重みメモリ２５にライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を設定し、畳み込み処理に使用する重みＷを転送する。また、コントローラ３１０は、ＴＰＣ（１０）の重みメモリ２５にライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を設定し、次の畳み込み処理に使用する重みＷを転送する。
【００７９】
さらに、コントローラ３１０は、ＴＰＣ（００）の命令メモリ２２に畳み込み処理に使用する命令ＩＮＳＴを転送する。命令ＩＮＳＴは、シストリックアレイの左上に対応する命令メモリ２２のみに転送される。この実施形態では、シストリックアレイを構築するＴＰＣ２００に含まれる全ての命令メモリ２２に命令ＩＮＳＴを格納しなくてよいため、コントローラ３１０から命令メモリ２２への命令ＩＮＳＴの転送効率を向上することができる。以下では、ライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）の設定の説明を省略する。なお、次の畳み込み処理に使用する重みＷは、シストリックアレイを構成するＰＥを含むＴＰＣ２００以外のＴＰＣ２００の重みメモリ２５に転送されてもよい。
【００８０】
また、図１０において、コントローラ３１０は、選択制御情報をＴＰＣ（００）、（１０）に出力し、再構成制御部２８１、２８２、２８３にマルチプレクサ２７１、２７２、２７３、２７４、２７５を再構成させる。これにより、ＴＰＣ（００）、（１０）において、太枠で示すＰＥにより、畳み込み処理に使用するシストリックアレイの一部が構築される。すなわち、ＴＰＣ（００）の太枠のＰＥは、データＤＴ、重みＷおよび命令ＩＮＳＴを自ＴＰＣ（００）のデータメモリＤＭ、重みメモリＷＭおよび命令メモリＩＭから受けて畳み込み処理を実行可能である。ＴＰＣ（１０）の太枠のＰＥは、データＤＴを自ＴＰＣ（１０）のデータメモリＤＭから受け、重みＷおよび命令ＩＮＳＴをＴＰＣ（００）の重みメモリＷＭおよび命令メモリＩＭから受けて畳み込み処理を実行可能である。
【００８１】
次に、図１１において、コントローラ３１０は、データの転送経路をプリフェッチエンジン３００からＴＰＣ（０１）、（１１）に設定するためにルータＲＴを再構成する。そして、コントローラ３１０は、ＴＰＣ（０１）、（１１）のデータメモリＤＭに次の畳み込み処理に使用するデータＤＴを転送する。なお、次の畳み込み処理に使用するデータＤＴは、シストリックアレイを構成するＰＥを含むＴＰＣ２００以外のＴＰＣ２００のデータメモリ２３に転送されてもよい。
【００８２】
次に、図１２において、コントローラ３１０は、転送経路を維持したまま、ＴＰＣ（０１）の重みメモリ２５に畳み込み処理に使用する重みＷを転送し、ＴＰＣ（１１）の重みメモリ２５に次の畳み込み処理に使用する重みＷを転送する。また、図１２において、コントローラ３１０は、選択制御情報をＴＰＣ（０１）、（１１）に出力し、再構成制御部２８１、２８２、２８３にマルチプレクサ２７１、２７２、２７３、２７４、２７５を再構成させる。これにより、ＴＰＣ（０１）、（１１）において、太枠で示すＰＥにより、畳み込み処理に使用するシストリックアレイの一部が構築される。そして、図３と同様に、畳み込み処理に使用する９個のＰＥを含むシストリックアレイが構築される。
【００８３】
ＴＰＣ（０１）の太枠のＰＥは、データＤＴおよび命令ＩＮＳＴをＴＰＣ（００）のデータメモリＤＭおよび命令メモリＩＭから受け、重みＷを自ＴＰＣ（０１）の重みメモリＷＭから受けて畳み込み処理を実行する。ＴＰＣ（１１）の太枠のＰＥは、データＤＴをＴＰＣ（１０）のデータメモリＤＭから受け、命令ＩＮＳＴをＴＰＣ（００）の命令メモリＩＭから受け、重みＷをＴＰＣ（０１）の重みメモリＷＭから受けて畳み込み処理を実行する。この後、ＴＰＣ（００）、（０１）、（１０）、（１１）は、コントローラ３１０からの指示に基づいて、畳み込み処理を開始する。
【００８４】
次に、図１３において、畳み込み処理中に、コントローラ３１０は、データの転送経路を、プリフェッチエンジン３００からＴＰＣ（００）、（１０）に向かう経路に設定するためにルータＲＴを再構成する。また、コントローラ３１０は、ＴＰＣ（００）、（１０）のデータメモリＤＭにライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を設定する。次に、図示を省略するが、コントローラ３１０は、データの転送経路を、プリフェッチエンジン３００からＴＰＣ（０１）、（１１）に向かう経路に設定するためにルータＲＴを再構成する。そして、コントローラ３１０は、ＴＰＣ（０１）、（１１）のデータメモリＤＭにリード用のアドレスＳＴＡＤ（Ｒ）、ＥＮＤＡＤ（Ｒ）を設定する。なお、出力メモリＯＭには、畳み込み処理により得られる特徴マップの情報が順次格納される。
【００８５】
次に、図１４において、コントローラ３１０は、ＴＰＣ（０１）、（１１）が保持している次の畳み込み処理に使用するデータＤＴをＴＰＣ（００）、（１０）に転送するために、データの転送経路を変更する。すなわち、コントローラ３１０は、データの転送経路を、ＴＰＣ（０１）、（１１）からＴＰＣ（００）、（１０）に向かう経路に設定するためにルータＲＴを再構成する。そして、コントローラ３１０は、ＴＰＣ（０１）、（１１）にデータＤＴの転送を指示するトリガ信号を出力し、ＴＰＣ（０１）、（１１）からＴＰＣ（００）、（１０）に、次の畳み込み処理に使用するデータＤＴ（斜線）を転送する。
【００８６】
これにより、図７で説明したように、畳み込み処理に使用するデータ量が多い場合にも、予めＴＰＣに転送しておいたデータＤＴまたは重みＷを、畳み込み処理中にＴＰＣ間で転送することができ、畳み込み処理の効率を向上することができる。
【００８７】
次に、図１５において、図１３および図１４と同様に、コントローラ３１０は、ＴＰＣ（００）、（０１）の重みメモリＷＭにライト用のアドレスＳＴＡＤ（Ｗ）、ＥＮＤＡＤ（Ｗ）を設定する。また、コントローラ３１０は、ＴＰＣ（１０）、（１１）の重みメモリＷＭにリード用のアドレスＳＴＡＤ（Ｒ）、ＥＮＤＡＤ（Ｒ）を設定する。
【００８８】
そして、コントローラ３１０は、ＴＰＣ（１０）、（１１）が保持している次の畳み込み処理に使用する重みＷをＴＰＣ（００）、（０１）に転送するために、データの転送経路を変更する。すなわち、コントローラ３１０は、データの転送経路を、ＴＰＣ（１０）、（１１）からＴＰＣ（００）、（０１）に向かう経路に設定するためにルータＲＴを再構成する。そして、コントローラ３１０は、ＴＰＣ（１０）、（１１）に重みＷの転送を指示するトリガ信号を出力し、ＴＰＣ（１０）、（１１）の重みメモリＷＭからＴＰＣ（００）、（０１）の重みメモリＷＭに、次の畳み込み処理に使用する重みＷ（斜線）を転送する。
【００８９】
畳み込み処理の完了後、コントローラ３１０は、データの転送経路を、プリフェッチエンジン３００からＴＰＣ（００）、（１０）に向かう経路に設定するためにルータＲＴを再構成する。そして、コントローラ３１０は、ＴＰＣ（００）、（１０）の出力メモリ２６にリード用のアドレスＳＴＡＤ（Ｒ）、ＥＮＤＡＤ（Ｒ）を設定する。
【００９０】
次に、図１６において、畳み込みの結果である特徴マップをプリフェッチエンジン３００に転送するために、コントローラ３１０は、ルータＲＴを再構成し、データの転送経路を、ＴＰＣ（００）、（１０）からプリフェッチエンジン３００に向かう経路に設定する。そして、コントローラ３１０は、ＴＰＣ（００）、（１０）に特徴マップの転送を指示するトリガ信号を出力し、ＴＰＣ（００）、（１０）からプリフェッチエンジン３００に特徴マップを転送する。
【００９１】
この後、ＴＰＣ（０１）、（１１）で得た特徴マップをプリフェッチエンジン３００に転送するために、ルータＲＴが再構成され、ＴＰＣ（０１）、（１１）からプリフェッチエンジン３００に特徴マップが転送され、最初の畳み込み処理が完了する。そして、図１４および図１５で転送されたデータＤＴと重みＷを用いて、次の畳み込み処理が実行される。
【００９２】
図１７は、畳み込み処理の例を示す説明図である。図１７では、３行３列の入力データＤＴ（Ｘ０−Ｘ８）のうち２行２列の入力と２行２列の３つのカーネル（Ｙ０−Ｙ３、Ｙ４−Ｙ７、Ｙ８−Ｙ１１）とを用いて畳み込みが実行される。そして、カーネル毎に９つの出力Ｚ（Ｚ０−Ｚ８、Ｚ９−Ｚ１７、またはＺ１８−Ｚ２６）が出力される。なお、３行３列の入力データＤＴはパディング処理により４行４列として畳み込みが実行される。出力Ｚの演算式の符号"＊"は積を示す。
【００９３】
図１８は、図１のプロセッサ１００内に再構成したシストリックアレイにより、図１７に示した畳み込み処理を実行する例を示す説明図である。図１８では、図３に示した９個のＰＥ（図１８では、ＰＥ０−ＰＥ８）を含むシストリックアレイを使用して畳み込み処理が実行される。データＸ０−Ｘ８は、データメモリＤＭに保持された入力データであり、重みＹ０−Ｙ１１は、重みメモリＷＭに保持された重みである。
【００９４】
ＰＥ０−ＰＥ２には、データＸ０、Ｘ１、Ｘ３、Ｘ４、Ｘ１、Ｘ２、Ｘ４、Ｘ５が順次入力される。ＰＥ３−ＰＥ５には、データＸ３、Ｘ４、Ｘ６、Ｘ７、Ｘ４、Ｘ５、Ｘ７、Ｘ８が順次入力される。ＰＥ６−ＰＥ８には、データＸ６、Ｘ７、"０"、"０"、Ｘ７、Ｘ８、"０"、"０"が順次入力される。ＰＥ０、ＰＥ３、ＰＥ６には、重みＹ０−Ｙ３が順次入力される。ＰＥ１、ＰＥ４、ＰＥ７には、重みＹ４−Ｙ７が順次入力される。ＰＥ２、ＰＥ５、ＰＥ８には、重みＹ８−Ｙ１１が順次入力される。そして、各ＰＥ０−ＰＥ８は、入力されたデータＸ０−Ｘ８および重みＹ０−Ｙ１１を用いて畳み込みを実行し、出力Ｚ０−Ｚ２６（特徴マップ）を生成する。
【００９５】
図１９および図２０は、図１８に示したＰＥ０−ＰＥ８が実行する畳み込み処理の例を示す説明図である。各ＰＥ（ＰＥ０−ＰＥ８）のＭＡＣ４４（図４）は、サイクルＣＹＣ（ＣＹＣ１−ＣＹＣ１６）毎にデータＸ（Ｘ０−Ｘ８）および重みＹ（Ｙ０−Ｙ１１）の積を算出し、算出した積を積算することで畳み込みを実行する。この際、ＭＡＣ４４は、データメモリＤＭから供給されたデータＸあるいはレジスタＲＥＧに保持されたデータＸと、重みメモリＷＭから供給された重みＹあるいはレジスタＲＥＧに保持された重みＹとを乗算する。
【００９６】
ＰＥ０は、サイクルＣＹＣ１−ＣＹＣ１２を使用して、出力Ｚ０−Ｚ２を生成する。ＰＥ１は、サイクルＣＹＣ２−ＣＹＣ１３を使用して、出力Ｚ９−Ｚ１１を生成する。ＰＥ２は、サイクルＣＹＣ３−ＣＹＣ１４を使用して、出力Ｚ１８−Ｚ２０を生成する。
【００９７】
ＰＥ３は、サイクルＣＹＣ２−ＣＹＣ１３を使用して、出力Ｚ３−Ｚ５を生成する。ＰＥ４は、サイクルＣＹＣ３−ＣＹＣ１４を使用して、出力Ｚ１２−Ｚ１４を生成する。ＰＥ５は、サイクルＣＹＣ４−ＣＹＣ１５を使用して、出力Ｚ２１−Ｚ２３を生成する。
【００９８】
ＰＥ６は、サイクルＣＹＣ３−ＣＹＣ１４を使用して、出力Ｚ６−Ｚ８を生成する。ＰＥ７は、サイクルＣＹＣ４−ＣＹＣ１５を使用して、出力Ｚ１５−Ｚ１７を生成する。ＰＥ８は、サイクルＣＹＣ５−ＣＹＣ１６を使用して、出力Ｚ２４−Ｚ２６を生成する。
【００９９】
そして、１６サイクルで畳み込みが実行され、出力Ｚ０−Ｚ２６は、３サイクルで出力メモリ２６に格納される。この結果、図１７に示す畳み込み処理は、１９サイクルで完了する。
【０１００】
この実施形態では、データメモリＤＭおよび重みメモリＷＭから出力されたデータＸおよび重みＹだけでなく、レジスタＲＥＧに保持されたデータＸおよび重みＹを使用して畳み込みを実行する。これにより、データメモリＤＭおよび重みメモリＷＭにデータＸおよび重みＹを再転送することなく、３つのカーネルに対する畳み込みを並列に実行することができ、図１７に示した畳み込み処理に掛かるサイクル数を減らすことができる。
【０１０１】
図２１は、他のプロセッサのシストリックアレイにより、図１７に示した畳み込み処理を実行する例を示す説明図（比較例）である。図２１は、３つのカーネル（Ｙ０−Ｙ３、Ｙ４−Ｙ７、Ｙ８−Ｙ１１）のうち、１つのカーネル（Ｙ０−Ｙ３）による畳み込み処理の例を示す。
【０１０２】
図２１では、入力データＤＴ（Ｘ０−Ｘ８）から抽出される９組の入力（例えば、Ｘ０、Ｘ１、Ｘ３、Ｘ４またはＸ１、Ｘ２、Ｘ４、Ｘ５）の各組が、シストリックアレイのＰＥ０−ＰＥ８を使用してカーネル（Ｙ０−Ｙ３）と畳み込みされる。
【０１０３】
各組の入力データＤＴが、３サイクルでシストリックアレイにロードされた後、５サイクルかけて重みＷをシストリックアレイ内に順次転送しながら畳み込みが実行される。そして、各入力データＤＴと各重みＷとの積がシストリックアレイの列毎に加算されて和ＰＳＵＭ０−ＰＳＵＭ２が出力され、和ＰＳＵＭ０−ＰＳＵＭ２の総和が特徴マップＺとして出力される。
【０１０４】
図２１の畳み込み処理では、入力データのロードに３サイクルを要し、畳み込みの計算に５サイクルを要し、特徴マップＺの出力に１サイクルを要する。この結果、１組の入力データＤＴと１つの重みカーネルとの畳み込みに９サイクルを要し、９組の入力データのそれぞれと３つの重みカーネルとの畳み込みには２４３サイクルを要する。
【０１０５】
図２２は、図１のプロセッサ１００により畳み込み処理を実行する他の例を示す説明図である。図２２では、縦方向と横方向のそれぞれに４個並ぶ１６個のＴＰＣ２００（６４個のＰＥ４００）を使用して、１６個のＰＥ４００を含むシストリックアレイが、使用するＰＥ４００をずらしながら順次構築される。斜線の領域は、畳み込み処理に使用するデータＤＴが格納されるデータメモリ２３および畳み込み処理に使用する重みＷが格納される重みメモリ２５を示し、黒い矩形は、畳み込み処理用の命令ＩＮＳＴが格納される命令メモリ２２を示す。
【０１０６】
例えば、まず、図２２の左上に位置する１６個のＰＥ４００を含むシストリックアレイＡが再構成され、シストリックアレイＡの左側のデータメモリ２３にデータＤＴが転送され、シストリックアレイＡの上側の重みメモリ２５に重みＷが転送される。また、シストリックアレイＡの左上の命令メモリ２２に命令ＩＮＳＴが転送される。そして、シストリックアレイＡにより畳み込み処理が開始される。
【０１０７】
畳み込み処理中、畳み込みを実行中のシストリックアレイＡに対して、ＰＥ４００を右下に１つずらしたシストリックアレイＢが再構成され、データＤＴ、重みＷおよび命令ＩＮＳＴがシストリックアレイＢに転送される。シストリックアレイＡによる畳み込み処理の完了後、シストリックアレイＢによる畳み込み処理が開始される。シストリックアレイＢの畳み込み処理中に、シストリックアレイＡによる畳み込み処理で得られた特徴マップが転送され、ＰＥ４００を右下に１つずらしたシストリックアレイＣが再構成される。そして、データＤＴ、重みＷおよび命令ＩＮＳＴがシストリックアレイＣに転送される。
【０１０８】
この後、シストリックアレイが畳み込み処理を実行中に、畳み込み処理が完了したシストリックアレイから特徴マップが転送され、他のシストリックアレイが再構成されて、データＤＴ、重みＷおよび命令ＩＮＳＴが転送される。以上が繰り返されることで、畳み込み処理のバックグラウンドで、畳み込み処理で得られた特徴マップの転送と、シストリックアレイの再構成と、データＤＴ、重みＷおよび命令ＩＮＳＴの転送を実行することができる。この結果、シストリックアレイの再構成およびデータの転送と、畳み込み処理とをそれぞれ行う場合に比べて、処理効率を向上することができる。また、図２２に示す動作では、シストリックアレイへのデータＤＴおよび重みＷの転送は、１回のみで済み、シストリックアレイ内でのデータＤＴおよび重みＷの転送を不要にすることができる。
【０１０９】
以上、本発明の実施の形態では、マルチプレクサ２７２−２７５により、複数のＴＰＣ２００に含まれるＰＥ４００を連結することができ、畳み込み処理に使用するシストリックアレイのサイズを任意に設定することができる。シストリックアレイのサイズが可変であるため、様々なデータ量の畳み込み処理を、データを分割することなく実行することができる。これにより、例えば、サポートされていない新たなマトリックスサイズの畳み込み処理にも適用可能である。すなわち、再構成制御部２８１−２８３とマルチプレクサ２７２−２７５とにより、畳み込み処理に使用するデータＤＴの量に合わせて、最適なサイズのシストリックアレイを再構成することができる。
【０１１０】
データメモリ２３および重みメモリ２５がＴＰＣ２００毎に設けられるため、畳み込み処理に使用しない空きのデータメモリ２３に、次の畳み込み処理に使用するデータＤＴを予め転送しておくことができる。また、畳み込み処理に使用しない空きの重みメモリ２５に、次の畳み込み処理に使用する重みＷを予め転送しておくことができる。空きのデータメモリ２３および空きの重みメモリ２５は、畳み込み処理と無関係であるため、畳み込み処理中にデータＤＴまたは重みＷを転送することができる。
【０１１１】
また、畳み込み処理中に、次の畳み込み処理に使用するデータを空きのデータメモリ２３および空きの重みメモリ２５に転送することができる。あるいは、畳み込み処理中に、データメモリ２３間でデータＤＴを転送することができ、重みメモリ２５間で重みＷを転送することができる。この結果、畳み込み処理の完了後、コントローラ３１０からデータＤＴおよび重みＷを転送することなく、次の畳み込み処理を開始することができ、処理効率を向上することができる。また、シストリックアレイへのデータＤＴおよび重みＷの転送回数を削減することができ、処理効率を向上することができる。
【０１１２】
アドレス生成部２１がアドレス生成情報に基づいてアドレスを生成することで、データメモリ２３に保持されたデータＤＴを任意の順序で出力することができ、データメモリ２３にデータＤＴを再格納することなく、ストライド値等を変更することができる。この結果、データＤＴのロードサイクルを減らすことができ、プロセッサ１００による畳み込み処理の効率を向上することができる。
【０１１３】
ＰＥ４００に複数種の演算器４３、４４とレジスタファイル４２とを設けることで、畳み込みにおける乗算だけでなく、ＣＰＵと同様に、様々な算術演算および論理演算を実行することができる。したがって、プロセッサ１００を、畳み込みだけでなく、ディープラーニングにおける様々な層の演算に使用することができる。例えば、畳み込み処理に続いて、ＰＥ４００内でプーリング層による演算（最大値の抽出、平均化等）を実行することができる。また、ＰＥ４００内で、乗算結果を積算する畳み込み処理を実行することができる。
【０１１４】
レジスタＲＥＧに格納した結果を使用して畳み込み処理以外の処理（演算）を実行することができる。さらに、外部から供給される重みＷをレジスタＲＥＧにバイパスできるため、レジスタＲＥＧに保持された重みＷを繰り返し使用して畳み込みを実行することができる。この結果、例えば、データメモリ２３へのデータＤＴの転送回数および重みメモリ２５への重みＷの転送回数を従来に比べて少なくすることが可能になり、シストリックアレイによる畳み込み処理を効率よく実行することができる。
【０１１５】
畳み込み処理に使用する命令ＩＮＳＴは、シストリックアレイの左上に対応する命令メモリ２２のみに転送され、１つの命令メモリ２２に保持された命令ＩＮＳＴは、マルチプレクサ２７１を介して畳み込み処理を実行するＰＥ４００に順次転送される。シストリックアレイを構築するＴＰＣ２００に含まれる全ての命令メモリ２２に命令ＩＮＳＴを格納しなくてよいため、コントローラ３１０から命令メモリ２２への命令ＩＮＳＴの転送効率を向上することができる。
【０１１６】
出力メモリ２６がＴＰＣ２００毎に設けられるため、特徴マップを他のＴＰＣ２００を経由することなくＮＯＣに直接出力することができ、特徴マップのプリフェッチエンジン３００への転送効率を向上することができる。
【０１１７】
本発明は、具体的に開示された上記の実施の形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０１１８】
２１      アドレス生成部
２２      命令メモリ
２３      データメモリ
２４      データ管理部
２５      重みメモリ
２６      出力メモリ
２７（２７１、２７２、２７３、２７４、２７５）  マルチプレクサ
２８（２８１、２８２、２８３）  再構成制御部
４１      命令デコーダ
４２      レジスタファイル
４３      ＡＬＵ
４４      ＭＡＣ４４
４５（４５１、４５２、４５３）  マルチプレクサ
１００    プロセッサ
１１０    転送経路
２００    プロセッシングコア（ＴＰＣ）
３００    プリフェッチエンジン
３１０    コントローラ
４００    プロセッシングエレメント（ＰＥ）
ＤＴ      データ
ＩＮＳＴ  命令
ＲＴ      ルータ
Ｗ        重み
【図１】
2020077298.tif 000003
【図２】
2020077298.tif 000004
【図３】
2020077298.tif 000005
【図４】
2020077298.tif 000006
【図５】
2020077298.tif 000007
【図６】
2020077298.tif 000008
【図７】
2020077298.tif 000009
【図８】
2020077298.tif 000010
【図９】
2020077298.tif 000011
【図１０】
2020077298.tif 000012
【図１１】
2020077298.tif 000013
【図１２】
2020077298.tif 000014
【図１３】
2020077298.tif 000015
【図１４】
2020077298.tif 000016
【図１５】
2020077298.tif 000017
【図１６】
2020077298.tif 000018
【図１７】
2020077298.tif 000019
【図１８】
2020077298.tif 000020
【図１９】
2020077298.tif 000021
【図２０】
2020077298.tif 000022
【図２１】
2020077298.tif 000023
【図２２】
2020077298.tif 000024