(57)【要約】【課題】演算処理と学習処理とを並行に実行しつつ、内部でのトラフィックの停滞を軽減する。【解決手段】ニューラルネットワーク装置は、複数のコアと、複数のルータとを備える。複数のコアは、それぞれが、ニューラルネットワークにおける一部の構成要素の演算および処理を実行する。出力回路は、出力記憶部と、ルータ内受信部と、送信部と、を含む。ルータ内受信部は、受信した順方向データおよび逆方向データを出力記憶部に書き込む。送信部は、出力記憶部に記憶された順方向データおよび逆方向データを、複数のコアおよび複数のルータのうちの何れか１つに送信する。出力回路は、データの受信を要求する要求信号を受信した場合であって、逆方向データを記憶させるための空き容量が存在しない場合、記憶している逆方向データを削除する。【選択図】図９
2019095861.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが、ニューラルネットワークにおける一部の構成要素の演算および処理を実行する複数のコアと、
前記複数のコアのそれぞれから出力されたデータを、前記ニューラルネットワークの構成に従って演算および処理が実行されるように、前記複数のコアの何れか１つのコアに転送する複数のルータと、
を備え、
前記複数のルータのそれぞれは、入力回路と、出力回路と、を有し、
前記複数のコアのそれぞれは、前記ニューラルネットワークを順方向に伝播する順方向データ、および、前記ニューラルネットワークを逆方向に伝播する逆方向データの少なくとも一方を送信し、
前記入力回路は、前記複数のコアおよび前記複数のルータのうちの何れか１つから、前記順方向データおよび前記逆方向データを受信し、
前記出力回路または前記入力回路は、
データの受信を要求する要求信号を受信した場合であって、前記逆方向データを記憶させるための空き容量が存在しない場合、記憶している前記逆方向データを削除する
ニューラルネットワーク装置。
【請求項２】
前記出力回路は、
出力記憶部と、
前記入力回路から前記順方向データおよび前記逆方向データを受信し、受信した前記順方向データおよび前記逆方向データを前記出力記憶部に書き込むルータ内受信部と、
前記出力記憶部に記憶された前記順方向データおよび前記逆方向データを、前記複数のコアおよび前記複数のルータのうちの何れか１つに送信する送信部と、
を含み、
前記ルータ内受信部は、
前記入力回路から前記逆方向データの受信を要求する要求信号を受信した場合であって、前記逆方向データを記憶させるための空き容量が前記出力記憶部に存在しない場合、前記出力記憶部に記憶されている前記逆方向データを削除する
請求項１に記載のニューラルネットワーク装置。
【請求項３】
前記入力回路は、前記複数のコアおよび前記複数のルータのうち何れか１つのコアまたはルータに接続され、当該入力回路に接続されたコアまたはルータから前記順方向データまたは前記逆方向データを受信し、
前記出力回路は、前記複数のコアおよび前記複数のルータのうち何れか１つのコアまたはルータに接続され、当該出力回路に接続されたコアまたはルータに前記順方向データまたは前記逆方向データを送信する
請求項２に記載のニューラルネットワーク装置。
【請求項４】
前記入力回路は、
入力記憶部と、
当該ルータに接続されたコアまたはルータから前記順方向データおよび前記逆方向データを受信し、受信した前記順方向データおよび前記逆方向データを前記入力記憶部に書き込む受信部と、
前記入力記憶部に記憶された前記順方向データまたは前記逆方向データを読み出し、読み出した前記順方向データまたは前記逆方向データの送信先となる、当該ルータに接続されたコアまたはルータを決定し、決定したコアまたはルータに接続された出力回路に、読み出した前記順方向データまたは前記逆方向データを送信するルータ内送信部と、
を含む請求項３に記載のニューラルネットワーク装置。
【請求項５】
前記出力記憶部は、前記順方向データを記憶する順方向データバッファを含み、
前記送信部は、最も過去に書き込まれた前記順方向データを前記順方向データバッファから読み出し、読み出した前記順方向データを前記送信先に送信する
請求項４に記載のニューラルネットワーク装置。
【請求項６】
前記出力記憶部は、前記逆方向データを記憶して書き込み順に出力する逆方向データバッファをさらに含み、
前記送信部は、最も過去に書き込まれた前記逆方向データを前記逆方向データバッファから読み出し、読み出した前記逆方向データを前記送信先に送信する
請求項５に記載のニューラルネットワーク装置。
【請求項７】
前記送信部は、送信した前記順方向データまたは前記逆方向データを前記出力記憶部から削除する
請求項２から６の何れか１項に記載のニューラルネットワーク装置。
【請求項８】
前記ルータ内受信部は、前記逆方向データを記憶させるための空き容量が前記出力記憶部に存在しない場合、最も過去に書き込まれた１つの前記逆方向データを前記出力記憶部から削除する
請求項２から７の何れか１項に記載のニューラルネットワーク装置。
【請求項９】
前記ルータ内受信部は、前記要求信号を受信した場合、前記要求信号を送信した入力回路に、前記逆方向データの送信を許可する許可信号を送信する
請求項２から８の何れか１項に記載のニューラルネットワーク装置。
【請求項１０】
前記出力記憶部は、
前記順方向データおよび前記逆方向データを記憶するランダムアクセス可能なデータ記憶部と、
前記データ記憶部に対するアクセス制御をするメモリコントローラと、
を含み、
前記メモリコントローラは、前記データ記憶部に対して、前記順方向データを記憶させるための記憶容量および前記逆方向データを記憶させるための記憶容量を設定しており、
前記ルータ内受信部は、前記逆方向データの受信を要求する要求信号を何れか１つの入力回路から受信した場合であって、前記データ記憶部に記憶されている前記逆方向データの合計容量が、前記逆方向データを記憶させるための記憶容量に達している場合、前記データ記憶部に記憶されている何れか１つの前記逆方向データを削除する
請求項２から５の何れか１項に記載のニューラルネットワーク装置。
【請求項１１】
前記出力記憶部は、
前記順方向データおよび前記逆方向データを記憶するランダムアクセス可能なデータ記憶部を含み、
前記ルータ内受信部は、前記逆方向データの受信を要求する要求信号を何れか１つの入力回路から受信した場合であって、前記データ記憶部の空き容量が存在しない場合、前記データ記憶部に記憶されている前記逆方向データを削除する
請求項２から５の何れか１項に記載のニューラルネットワーク装置。
【請求項１２】
前記出力記憶部は、
前記順方向データおよび前記逆方向データを記憶するランダムアクセス可能なデータ記憶部を含み、
前記ルータ内受信部は、前記順方向データまたは前記逆方向データの受信を要求する要求信号を何れか１つの入力回路から受信した場合であって、前記データ記憶部の空き容量が存在しない場合、前記データ記憶部に記憶されている何れか１つの前記逆方向データを削除する
請求項２から５の何れか１項に記載のニューラルネットワーク装置。
【請求項１３】
前記複数のコアは、前記複数のルータに対して一対一に対応して設けられ、対応して設けられたルータとデータを送受信する
請求項１から１２の何れか１項に記載のニューラルネットワーク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ニューラルネットワーク装置に関する。
【背景技術】
【０００２】
近年、ハードウェア化したニューラルネットワークを用いて、脳型プロセッサを実現する技術が提案されている。脳型プロセッサでは、内部で学習器がニューラルネットワークに誤差データを与えて、ニューラルネットワークに設定されている重み係数等を最適化する。
【０００３】
従来のニューラルネットワークは、通常の演算処理を停止した状態で学習処理を実行し、重み係数を最適化する。このため、従来のニューラルネットワークは、外部のプロセッサにより学習処理を実行させることができた。
【０００４】
しかし、脳型プロセッサを実現する場合、ニューラルネットワークは、演算処理と学習処理とを並行して実行しなければならない。従って、この場合、ニューラルネットワークは、外部装置から受信した演算対象データを順方向に伝播させる処理と、学習用の誤差データを逆方向に伝播させる処理とを並行して実行しなければならない。
【０００５】
しかし、ニューラルネットワークに対して順方向にデータを伝播させる処理と逆方向にデータを伝播させる処理とを並行に実行した場合、ニューラルネットワーク内でのトラフィックが停滞し、コストの増大および処理時間の増加を招いてしまう。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１６／０３３６０６４号明細書
【特許文献２】米国特許出願公開第２０１６／０２８４４００号明細書
【特許文献３】米国特許出願公開第２０１５／００８８７９７号明細書
【非特許文献】
【０００７】
【非特許文献１】Geoffrey  W.  Burr,  “Analog  resistive  neuromorphic  hardware”,  IBM  Research  -  Almaden.,  BioComp  Summer  School,  ２０１７年６月３０日
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、演算処理と学習処理とを並行に実行しつつ、内部でのトラフィックの停滞を軽減したニューラルネットワーク装置を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態に係るニューラルネットワーク装置は、複数のコアと、複数のルータとを備える。前記複数のコアは、それぞれが、ニューラルネットワークにおける一部の構成要素の演算および処理を実行する。前記複数のルータは、前記複数のコアのそれぞれから出力されたデータを、前記ニューラルネットワークの構成に従って演算および処理が実行されるように、前記複数のコアの何れか１つのコアに転送する。前記複数のルータのそれぞれは、入力回路と、出力回路と、を有する。前記複数のコアのそれぞれは、前記ニューラルネットワークを順方向に伝播する順方向データ、および、前記ニューラルネットワークを逆方向に伝播する逆方向データの少なくとも一方を送信する。前記入力回路は、前記複数のコアおよび前記複数のルータのうちの何れか１つから、前記順方向データおよび前記逆方向データを受信する。前記出力回路または前入力回路は、データの受信を要求する要求信号を受信した場合であって、前記逆方向データを記憶させるための空き容量が存在しない場合、記憶している前記逆方向データを削除する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るニューラルネットワーク装置の構成を示す図。
【図２】順方向処理の内容を示す図。
【図３】逆方向処理の内容を示す図。
【図４】データ処理部の構成を示す図。
【図５】ニューラルネットワークに含まれる構成要素とコアとの対応関係図。
【図６】複数のコアおよび複数のルータの間で送受信されるデータを示す図。
【図７】データの構成の一例を示す図。
【図８】ルータの構成を示す図。
【図９】入力回路および出力回路の構成を示す図。
【図１０】入力回路の受信部の処理を示すフローチャート。
【図１１】入力回路のルータ内送信部の処理を示すフローチャート。
【図１２】出力回路のルータ内受信部の処理を示すフローチャート。
【図１３】出力回路の送信部の処理を示すフローチャート。
【図１４】第１変形例に係る出力記憶部の構成を示す図。
【図１５】第２変形例に係るルータ内受信部の処理を示すフローチャート。
【図１６】第３変形例に係るルータ内受信部の処理を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら実施形態に係るニューラルネットワーク装置１０について説明する。実施形態に係るニューラルネットワーク装置１０は、ニューラルネットワークにおける通常のデータ処理と学習処理とを並行に実行しつつ、内部でのトラフィックの混雑を軽減することができる。
【００１２】
図１は、実施形態に係るニューラルネットワーク装置１０の構成を示す図である。ニューラルネットワーク装置１０は、データ処理部２０と、通信部２２と、学習部２４と、設定部２６とを備える。
【００１３】
データ処理部２０、通信部２２、学習部２４および設定部２６は、１つの半導体装置内に実装されてもよいし、１つの基板上に設けられた複数の半導体装置に実装されていてもよいし、複数の基板に設けられた複数の半導体装置に実装されていてもよい。また、学習部２４および設定部２６は、同一のプロセッサにより実現されてもよい。
【００１４】
ニューラルネットワーク装置１０は、外部装置から入力データを受信する。ニューラルネットワーク装置１０は、受信した入力データに対してニューラルネットワークを用いた演算処理を実行する。そして、ニューラルネットワーク装置１０は、ニューラルネットワークを用いた演算処理の結果である出力データを外部装置に送信する。
【００１５】
データ処理部２０は、ニューラルネットワークに基づく通常の演算処理を実行する。データ処理部２０は、例えば、ニューラルネットワークに基づく通常の演算処理として、パターン認識処理、データ解析処理および制御処理等の様々な情報処理を実行する。
【００１６】
また、データ処理部２０は、通常の演算処理と並行して、学習処理を実行する。データ処理部２０は、学習処理により、通常の演算処理をより適切に行うように、ニューラルネットワークに含まれる複数の係数（重み）を変更する。
【００１７】
通信部２２は、外部装置とデータの送受信をする。具体的には、通常の演算処理において、通信部２２は、外部装置から、演算対象となる入力データを受信する。また、通信部２２は、外部装置へ、演算結果である出力データを送信する。
【００１８】
学習部２４は、通常の演算処理においてデータ処理部２０から出力された出力データを取得する。そして、学習処理において、学習部２４は、出力データの誤差を表す誤差データを算出して、データ処理部２０に与える。
【００１９】
さらに、学習部２４は、データ処理部２０が複数の層に対して誤差データを逆方向に伝播した結果得られた情報に基づき、ニューラルネットワークに含まれる複数の係数（重み）を変更する。例えば、学習部２４は、ニューラルネットワークに含まれる複数の係数のそれぞれについて、誤差の勾配を算出する。そして、学習部２４は、誤差の勾配を例えば０とする方向に、複数の係数を変更する。
【００２０】
設定部２６は、学習部２４によりニューラルネットワークに含まれる複数の係数が変更された場合、データ処理部２０に対して、変更後の係数を設定する。
【００２１】
図２は、ニューラルネットワークにおける通常の演算処理（順方向処理）の内容を示す図である。
【００２２】
ニューラルネットワークは、複数の層を含む。複数の層のそれぞれは、受け取ったデータに対して所定の演算および処理をする。ニューラルネットワークに含まれる複数の層のそれぞれは、複数のノードを含む。１つの層に含まれるノードの数は、層毎に異なってもよい。
【００２３】
それぞれのノードには、活性化関数が設定されている。活性化関数は、層毎に異なってもよい。また、同一の層において、ノード毎に活性化関数が異なってもよい。また、それぞれのノードとノードとを結ぶリンクには、係数（重み）が設定されている。ニューラルネットワークは、ノードから次のノードへとデータを伝播する場合に、そのデータに対してリンクに設定された係数を乗じる。これらの係数は、学習処理により適切に変更される。
【００２４】
データ処理部２０は、ニューラルネットワークにおける通常の演算処理において、ニューラルネットワークにおける複数の層に対してデータを順方向に伝播させながら演算を実行させる順方向処理を実行する。例えば、順方向処理において、データ処理部２０は、入力層に入力データを与える。続いて、順方向処理において、データ処理部２０は、それぞれの層から出力されたデータを、直後の層へと順方向に伝播させる。そして、順方向処理において、データ処理部２０は、出力層から出力されたデータを、出力データとして外部装置へと送信する。
【００２５】
ここで、本実施形態においては、ニューラルネットワークにおける通常の演算処理において、複数の層を順方向に伝播するデータを、順方向データと呼ぶ。
【００２６】
図３は、ニューラルネットワークにおける学習処理（逆方向処理）の内容を示す図である。それぞれのノードには、誤差関数が設定されている。誤差関数は、そのノードに設定されている活性化関数の導関数である。すなわち、誤差関数は、そのノードに設定されている活性化関数の微分である。
【００２７】
学習部２４は、順方向処理が終了した場合、順方向処理で出力された出力データに対する誤差を表す誤差データを算出する。続いて、逆方向処理において、データ処理部２０は、学習部２４により生成された誤差データを出力層に与える。そして、逆方向処理において、データ処理部２０は、それぞれの層から出力された複数のデータを、直前の層へと逆方向に伝播させる。
【００２８】
ここで、本実施形態においては、ニューラルネットワークにおける学習処理において、複数の層を逆方向に伝播するデータを、逆方向データと呼ぶ。
【００２９】
図４は、データ処理部２０の構成を示す図である。データ処理部２０は、複数のコア３０と、複数のルータ４０と、通信路４２（４２−１，４２−２）と、を有する。
【００３０】
複数のコア３０は、それぞれが、ニューラルネットワークにおける一部の構成要素の演算および処理を実行する。複数のコア３０のそれぞれは、プロセッサであってもよいし、専用のハードウェア回路であってもよいし、デジタル回路であってもよいし、アナログ回路であってもよい。また、複数のコア３０のそれぞれは、記憶部を有し、ニューラルネットワークに含まれる係数を記憶してもよい。
【００３１】
複数のルータ４０は、複数のコア３０のそれぞれから出力されたデータを、ニューラルネットワークの構成に従って演算および処理が実行されるように、通信路４２を介して複数のコア３０の何れか１つのコア３０に転送する。
【００３２】
例えば、複数のルータ４０のそれぞれは、通信路４２の分岐点に配置される。複数のルータ４０のそれぞれは、通信路４２を介して複数の他のルータ４０と直接接続される。複数のルータ４０のそれぞれは、通信路４２を介して直接接続された他のルータ４０とデータを送受信する。
【００３３】
また、複数のルータ４０のそれぞれは、さらに、１または複数のコア３０と接続され、接続されたコア３０とデータを送受信してもよい。本実施形態においては、複数のコア３０は、複数のルータ４０に対して一対一に対応して設けられ、対応して設けられたルータ４０とデータを送受信する。
【００３４】
このような複数のルータ４０のそれぞれは、当該ルータ４０と接続された送信元であるルータ４０またはコア３０から受信したデータを、送信先である当該ルータ４０と接続された他のルータ４０またはコア３０へとデータを転送する。
【００３５】
例えば、複数のルータ４０は、第１配列方向および第２配列方向に並べてマトリクス状に配列される。例えば、第２配列方向は、第１配列方向に直交する方向である。例えば、通信路４２は、第１配列方向に配列された複数の第１通信路４２−１と、第１配列方向とは直交する第２配列方向に配列された複数の第２通信路４２−２とを含むクロスバーネットワークである。複数のルータ４０は、このようなクロスバーネットワークにおける、第１通信路４２−１と第２通信路４２−２との交点に設けられる。これにより、複数のルータ４０は、何れかのコア３０から出力されたデータを、複数のコア３０の何れにも転送することができる。
【００３６】
図５は、ニューラルネットワークに含まれる構成要素と、その構成要素での処理を実行するコア３０との対応関係を示す図である。
【００３７】
複数のコア３０のそれぞれには、ニューラルネットワークに含まれる複数の構成要素のうちの何れかが予め割り当てられている。複数のコア３０のそれぞれは、ニューラルネットワークに含まれる複数の構成要素のうち、予め割り当てられた構成要素の演算または処理を実行する。
【００３８】
ニューラルネットワークに含まれる構成要素とは、例えば、ノードにおける活性化関数の演算および誤差関数の演算、リンクに設定された係数の乗算、および、係数が乗算されたデータの加算、外部装置からのデータの入力、外部装置へのデータの出力、誤差データの取得、および、勾配データの出力等である。ニューラルネットワークに含まれる全ての構成要素が少なくとも何れかのコア３０で実行されるように、複数のコア３０のそれぞれに構成要素が割り当てられている。
【００３９】
１つのコア３０において実行される処理は、例えば、１つのノードで実行される処理であってもよい。例えば、ある１つのコア３０は、ある層のある１つのノードにおける、リンクに設定された係数の乗算、前段の層から受け取った複数のデータの加算、活性化関数の演算または誤差関数の演算等を実行する。
【００４０】
また、１つのコア３０において実行される演算および処理は、１つのノードの一部分の演算であってもよい。例えば、ある１つのコア３０は、１つのノードにおける活性化関数の演算を実行し、他の１つのコア３０は、そのノードにおける係数の乗算および加算を実行してもよい。また、１つのコア３０において実行される演算および処理は、１つの層に含まれる複数のノードにおける全ての処理であってもよい。
【００４１】
このようにデータ処理部２０は、ニューラルネットワークに含まれる複数の構成要素の処理を複数のコア３０に分散して実行することができる。
【００４２】
図６は、複数のコア３０および複数のルータ４０の間で送受信されるデータを示す図である。
【００４３】
複数のコア３０のそれぞれは、ニューラルネットワークを順方向に伝播する順方向データ、および、ニューラルネットワークを逆方向に伝播する逆方向データの少なくとも一方を、当該コア３０に接続されたルータ４０に送信する。また、複数のコア３０のそれぞれは、順方向データおよび逆方向データの少なくとも一方を、当該コア３０に接続されたルータ４０から受信する。
【００４４】
また、複数のルータ４０のそれぞれは、順方向データおよび逆方向データを、当該ルータ４０と接続されたコア３０または他のルータ４０から受信する。また、複数のルータ４０のそれぞれは、受信した順方向データおよび逆方向データを、当該ルータ４０と接続されたコア３０または他のルータ４０に送信する。
【００４５】
ここで、コア３０は、順方向データまたは逆方向データを送信する場合、送信に先だって、当該コア３０に接続されたルータ４０に対して順方向データまたは逆方向データの受信を要求する要求信号を送信する。また、ルータ４０は、順方向データまたは逆方向データを送信する場合、送信に先だって、送信先である、当該ルータ４０に接続されたコア３０または他のルータ４０に対して、要求信号を送信する。
【００４６】
コア３０は、要求信号を受信した場合、受信可能であれば、要求信号の送信元のルータ４０に対して許可信号を送信する。ルータ４０は、要求信号を受信した場合、受信可能であれば、要求信号の送信元のコア３０または他のルータ４０に対して許可信号を送信する。
【００４７】
コア３０は、許可信号を受信した場合、当該コア３０に接続されたルータ４０に対して順方向データまたは逆方向データを送信する。また、ルータ４０は、許可信号を受信した場合、送信先である、当該ルータ４０に接続された他のルータ４０またはコア３０に対して、順方向データまたは逆方向データを送信する。
【００４８】
図７は、データの構成の一例を示す図である。順方向データおよび逆方向データは、例えば、図７に示すように、例えば、実体データと、ヘッダとを含む。実体データは、ニューラルネットワークにおいて演算および処理がされる対象である。ヘッダは、パケットを目的のコア３０へと転送させるために必要な情報、および、実体データに対して演算および処理をするために必要な情報等を含む。
【００４９】
例えば、ヘッダは、ＩＤと、データ種別と、前処理アドレスと、次処理アドレスと、を含む。ＩＤは、当該実体データの元となる入力データを識別するための情報である。
【００５０】
データ種別は、実体データが、順方向に伝播される順方向データ（通常の演算処理において伝播されるデータ）であるか、逆方向に伝播される逆方向データ（学習処理において伝播されるデータ）であるかを識別する情報である。
【００５１】
前処理アドレスは、当該データを出力したコア３０を識別するアドレスである。前処理アドレスは、ニューラルネットワークにおける当該データを生成した層およびノードを識別する情報であってもよい。
【００５２】
次処理アドレスは、ニューラルネットワークにおける当該データに対して次に演算または処理をするコア３０を識別するアドレスである。次処理アドレスは、ニューラルネットワークにおける、当該データに対して演算または処理をする構成要素（層またはノード等）を識別する情報であってもよい。
【００５３】
ヘッダは、以上のような構成に限らず、ルータ４０が、実体データをニューラルネットワークの構成に従って演算および処理が実行されるように適切なコア３０に転送することができれば、他の構成であってもよい。
【００５４】
図８は、ルータ４０の構成を示す図である。ルータ４０は、少なくとも１つの入力回路５０と、少なくとも１つの出力回路６０とを有する。
【００５５】
少なくとも１つの入力回路５０のそれぞれは、複数のコア３０または複数のルータ４０のうちの何れか１つから、順方向データおよび逆方向データを受信する。例えば、少なくとも１つの入力回路５０のそれぞれは、予め設定された何れか１つのコア３０または１つのルータ４０に通信路４２を介して接続され、接続された１つのコア３０または１つのルータ４０から順方向データおよび逆方向データを受信する。
【００５６】
少なくとも１つの出力回路６０のそれぞれは、複数のコア３０または複数のルータ４０のうちの何れか１つに、順方向データおよび逆方向データを送信する。例えば、少なくとも１つの出力回路６０のそれぞれは、予め設定された何れか１つのコア３０またはルータ４０に通信路４２を介して接続され、接続された１つのコア３０または１つのルータ４０に順方向データおよび逆方向データを送信する。
【００５７】
入力回路５０は、当該ルータ４０が有する全ての出力回路６０と接続される。ただし、入力回路５０は、当該入力回路５０と接続している同一のコア３０またはルータ４０に接続された出力回路６０とは、接続されていなくてもよい。すなわち、入力回路５０は、当該入力回路５０と同一のコア３０またはルータ４０に接続された出力回路６０とは、接続されていなくてもよい。
【００５８】
例えば、ルータ４０は、入力回路５０および出力回路６０の第１の組と、入力回路５０および出力回路６０の第２の組と、入力回路５０および出力回路６０の第３の組と、入力回路５０および出力回路６０の第４の組と、入力回路５０および出力回路６０の第５の組とを有する。第１の組および第２の組は、マトリクス状における第１配列方向に隣接する他のルータ４０に接続される。第３の組および第４の組は、マトリクス状における第２配列方向に隣接する他のルータ４０に接続される。第５の組は、当該ルータ４０に対応して設けられたコア３０に接続される。
【００５９】
なお、図８の接続例では、入力回路５０は、複数の出力回路６０のそれぞれと互いに異なる信号線により接続されている。しかし、入力回路５０は、複数の出力回路６０のそれぞれと共通のバスにより接続されていてもよい。すなわち、ルータ４０は、少なくとも１つの入力回路５０のそれぞれおよび少なくとも１つの出力回路６０のそれぞれが、同一のバスに接続される構成であってもよい。この場合、入力回路５０は、宛先となる出力回路６０の識別子を付加したデータをバスに送信する。出力回路６０は、バスから、自身の識別子が付加されたデータを選択して受信する。これにより、入力回路５０は、少なくとも１つの出力回路６０のうち、特定の１つの出力回路６０に順方向データおよび逆方向データを送信することができる。
【００６０】
図９は、入力回路５０および出力回路６０の構成を示す図である。なお、図９の例においては、入力回路５０と出力回路６０とが一対一で接続されているが、入力回路５０は、当該ルータ４０内の１または複数の出力回路６０と接続される。また、出力回路６０は、当該ルータ４０内の１または複数の入力回路５０と接続される。
【００６１】
入力回路５０は、受信部５２と、入力記憶部５４と、ルータ内送信部５６とを含む。受信部５２は、当該入力回路５０に通信路４２を介して接続されたコア３０またはルータ４０から要求信号、順方向データおよび逆方向データを受信する。なお、受信部５２の処理の詳細は、後述において図１０を参照してさらに説明する。
【００６２】
入力記憶部５４は、受信部５２が受信した順方向データおよび逆方向データを記憶する。入力記憶部５４は、先入れ、先出し方式のバッファ（ＦＩＦＯバッファ）である。また、入力記憶部５４は、例えば、順方向データおよび逆方向データのデータサイズ毎にデータをシフトするシフトレジスタであってもよい。
【００６３】
ルータ内送信部５６は、当該ルータ４０内の１または複数の出力回路６０のそれぞれに、第１の要求信号、第２の要求信号、順方向データおよび逆方向データを送信する。なお、ルータ内送信部５６の処理の詳細は、後述において図１１を参照してさらに説明する。
【００６４】
出力回路６０は、ルータ内受信部６２と、出力記憶部６４と、送信部６６とを含む。ルータ内受信部６２は、当該ルータ４０内の１または複数の入力回路５０のそれぞれから、第１の要求信号、第２の要求信号、順方向データおよび逆方向データを受信する。なお、ルータ内受信部６２の処理の詳細は、後述において図１２を参照してさらに説明する。
【００６５】
出力記憶部６４は、順方向データバッファ７２と、逆方向データバッファ７４とを含む。順方向データバッファ７２は、ルータ内受信部６２が受信した順方向データを記憶する。順方向データバッファ７２は、先入れ、先出し方式のバッファ（ＦＩＦＯバッファ）である。また、順方向データバッファ７２は、例えば、順方向データのデータサイズ毎にデータをシフトするシフトレジスタであってもよい。
【００６６】
逆方向データバッファ７４は、ルータ内受信部６２が受信した逆方向データを記憶する。逆方向データバッファ７４は、先入れ、先出し方式のバッファ（ＦＩＦＯバッファ）である。また、逆方向データバッファ７４は、例えば、逆方向データのデータサイズ毎にデータをシフトするシフトレジスタであってもよい。
【００６７】
送信部６６は、当該出力回路６０に通信路４２を介して接続されたコア３０またはルータ４０に、要求信号、順方向データおよび逆方向データを送信する。なお、送信部６６の処理の詳細は、後述において図１３を参照してさらに説明する。
【００６８】
図１０は、入力回路５０の受信部５２の処理を示すフローチャートである。当該入力回路５０に通信路４２を介して接続されたコア３０またはルータ４０から要求信号が送信された場合、受信部５２は、以下のＳ１１〜Ｓ１６の処理を実行する。
【００６９】
まず、Ｓ１１において、受信部５２は、当該入力回路５０に通信路４２を介して接続されたコア３０またはルータ４０から要求信号を受信する。続いて、Ｓ１２において、受信部５２は、入力記憶部５４に空き容量が存在するか否かを判断する。
【００７０】
入力記憶部５４に空き容量が存在しない場合（Ｓ１２のＮｏ）、Ｓ１３において、受信部５２は、処理を一定時間待機する。受信部５２は、一定時間待機した後、処理をＳ１２に戻し、入力記憶部５４に空き容量ができるまでＳ１２およびＳ１３の処理を繰り返す。なお、受信部５２は、一定回数または所定時間以上待機しても入力記憶部５４に空き容量ができない場合には、要求信号の送信元のコア３０またはルータ４０に不許可信号を送信して、処理を終了してもよい。
【００７１】
入力記憶部５４に空き容量が存在する場合（Ｓ１２のＹｅｓ）、Ｓ１４において、受信部５２は、許可信号を、要求信号の送信元のコア３０またはルータ４０に送信する。要求信号の送信元のコア３０またはルータ４０は、許可信号を受信した場合、順方向データまたは逆方向データを当該入力回路５０に送信する。
【００７２】
続いて、Ｓ１５において、受信部５２は、要求信号の送信元のコア３０またはルータ４０から、順方向データまたは逆方向データを受信する。そして、Ｓ１６において、受信部５２は、受信した順方向データまたは逆方向データを入力記憶部５４に書き込む。受信部５２は、Ｓ１６の処理後、本フローを終了する。
【００７３】
図１１は、入力回路５０のルータ内送信部５６の処理を示すフローチャートである。ルータ内送信部５６は、ニューラルネットワーク装置１０の動作中、下記のＳ２１からＳ２８の処理を繰り返して実行する。
【００７４】
Ｓ２１において、ルータ内送信部５６は、入力記憶部５４を監視して、入力記憶部５４に順方向データまたは逆方向データが存在するか否かを判断する。ルータ内送信部５６は、入力記憶部５４に順方向データおよび逆方向データが存在しない場合（Ｓ２１のＮｏ）、Ｓ２１の処理を繰り返す。
【００７５】
入力記憶部５４に順方向データまたは逆方向データが存在する場合（Ｓ２１のＹｅｓ）、Ｓ２２において、ルータ内送信部５６は、まだ未送信であって、最も過去に書き込まれた１つの順方向データまたは１つの逆方向データを、入力記憶部５４から読み出す。
【００７６】
続いて、Ｓ２３において、ルータ内送信部５６は、読み出した順方向データまたは逆方向データのヘッダを参照して、当該ルータ４０に接続されたコア３０またはルータ４０の中から１つの送信先を決定する。例えば、ルータ内送信部５６は、ヘッダを解析して、読み出した順方向データまたは逆方向データに対して次の演算および処理を実行するコア３０のアドレス（例えば、次処理アドレス）を検出する。次処理アドレスを検出した後、ルータ内送信部５６は、当該ルータ４０から、検出したコア３０へと適切に（例えば、最短時間または最短距離で）データを転送できる１つの経路を見つけ出す。そして、ルータ内送信部５６は、当該ルータ４０に接続されたコア３０またはルータ４０の中から、見つけ出した１つの経路上のコア３０またはルータ４０を送信先として決定する。
【００７７】
続いて、Ｓ２４において、ルータ内送信部５６は、順方向データを読み出した場合には、送信先として決定したコア３０またはルータ４０に接続された出力回路６０に対して、順方向データの受信を要求する第１の要求信号を送信する。また、ルータ内送信部５６は、逆方向データを読み出した場合には、送信先として決定したコア３０またはルータ４０に接続された出力回路６０に対して、逆方向データの受信を要求する第２の要求信号を送信する。
【００７８】
出力回路６０は、第１の要求信号を受信した場合、順方向データを受信可能であれば、第１の要求信号の送信元に許可信号を送信する。また、出力回路６０は、第２の要求信号を受信した場合、逆方向データを受信可能であれば、第２の要求信号の送信元に許可信号を送信する。
【００７９】
続いて、Ｓ２５において、ルータ内送信部５６は、送信先として決定したコア３０またはルータ４０に接続された出力回路６０から、許可信号を受信したか否かを判断する。許可信号を受信していない場合（Ｓ２５のＮｏ）、Ｓ２６において、ルータ内送信部５６は、処理を一定時間待機する。ルータ内送信部５６は、一定時間待機した後、処理をＳ２５に戻し、許可信号が受信できるまでＳ２５およびＳ２６の処理を繰り返す。なお、ルータ内送信部５６は、一定回数または所定時間以上待機しても許可信号を受信できない場合、または、出力回路６０から不許可信号を受信した場合には、処理をＳ２１に戻してもよい。
【００８０】
許可信号を受信した場合（Ｓ２５のＹｅｓ）、Ｓ２７において、ルータ内送信部５６は、送信先として決定したコア３０またはルータ４０に接続された出力回路６０に対して、読み出した順方向データまたは逆方向データを送信する。続いて、Ｓ２８において、ルータ内送信部５６は、送信した順方向データまたは逆方向データを入力記憶部５４から削除する。ルータ内送信部５６は、Ｓ２８の処理後、処理をＳ２１に戻して、本フローを繰り返し実行する。
【００８１】
図１２は、出力回路６０のルータ内受信部６２の処理を示すフローチャートである。当該ルータ４０が有する少なくとも１つの入力回路５０の何れかから、当該出力回路６０へと第１の要求信号または第２の要求信号が送信された場合、ルータ内受信部６２は、以下のＳ４１〜Ｓ５２の処理を実行する。
【００８２】
まず、Ｓ４１において、ルータ内受信部６２は、何れかの入力回路５０から、第１の要求信号または第２の要求信号を受信する。続いて、Ｓ４２において、ルータ内受信部６２は、順方向データの受信要求か（すなわち、第１の要求信号を受信したか）、または、逆方向データの受信要求か（すなわち、第２の要求信号を受信したか）を判断する。
【００８３】
順方向データの受信要求の場合（Ｓ４２のＹｅｓ）、ルータ内受信部６２は、処理をＳ４３に進める。Ｓ４３において、ルータ内受信部６２は、出力記憶部６４における順方向データバッファ７２に空き容量が存在するか否かを判断する。
【００８４】
順方向データバッファ７２に空き容量が存在しない場合（Ｓ４３のＮｏ）、Ｓ４４において、ルータ内受信部６２は、処理を一定時間待機する。ルータ内受信部６２は、一定時間待機した後、処理をＳ４３に戻し、順方向データバッファ７２に空き容量ができるまでＳ４３およびＳ４４の処理を繰り返す。なお、ルータ内受信部６２は、一定回数または所定時間以上待機しても空き容量ができない場合には、第１の要求信号の送信元の入力回路５０に不許可信号を送信して、処理を終了してもよい。
【００８５】
順方向データバッファ７２に空き容量が存在する場合（Ｓ４３のＹｅｓ）、Ｓ４５において、ルータ内受信部６２は、許可信号を、第１の要求信号の送信元の入力回路５０に送信する。第１の要求信号の送信元の入力回路５０は、許可信号を受信した場合、順方向データを当該出力回路６０に送信する。
【００８６】
続いて、Ｓ４６において、ルータ内受信部６２は、第１の要求信号の送信元の入力回路５０から、順方向データを受信する。そして、Ｓ４７において、ルータ内受信部６２は、受信した順方向データを順方向データバッファ７２に書き込む。ルータ内受信部６２は、Ｓ４７の処理後、本フローを終了する。
【００８７】
Ｓ４３〜Ｓ４７を実行することにより、出力回路６０は、順方向データを記憶するための空き容量が無い場合には、空き容量を確保するまで受信を待機する。これにより、出力回路６０は、順方向データを確実に送信先のコア３０に転送することができる。
【００８８】
逆方向データの受信要求の場合（Ｓ４２のＮｏ）、ルータ内受信部６２は、処理をＳ４８に進める。Ｓ４８において、ルータ内受信部６２は、出力記憶部６４における逆方向データバッファ７４に空き容量が存在するか否かを判断する。
【００８９】
出力記憶部６４における逆方向データバッファ７４に空き容量が存在しない場合（Ｓ４８のＮｏ）、Ｓ４９において、ルータ内受信部６２は、出力記憶部６４における逆方向データバッファ７４に記憶されている逆方向データを削除する。例えば、逆方向データバッファ７４がＦＩＦＯバッファである場合、ルータ内受信部６２は、逆方向データバッファ７４における先頭に記憶された１つの逆方向データを削除する。すなわち、最も過去に書き込まれた１つの逆方向データを逆方向データバッファ７４から削除する。これにより、ルータ内受信部６２は、出力記憶部６４における逆方向データバッファ７４に空き容量を確保することができる。
【００９０】
Ｓ４９で逆方向データを逆方向データバッファ７４から削除した後、または、そもそも逆方向データバッファ７４に空き容量が存在した場合（Ｓ４８のＹｅｓ）、Ｓ５０において、ルータ内受信部６２は、許可信号を、第２の要求信号の送信元の入力回路５０に送信する。第２の要求信号の送信元の入力回路５０は、許可信号を受信した場合、逆方向データを当該出力回路６０に送信する。
【００９１】
続いて、Ｓ５１において、ルータ内受信部６２は、第２の要求信号の送信元の入力回路５０から、逆方向データを受信する。そして、Ｓ５２において、ルータ内受信部６２は、受信した逆方向データを逆方向データバッファ７４に書き込む。ルータ内受信部６２は、Ｓ５２の処理後、本フローを終了する。
【００９２】
Ｓ４８〜Ｓ５２を実行することにより、出力回路６０は、逆方向データを記憶するための空き容量が無い場合には、出力記憶部６４から逆方向データを削除して、空き容量を確保し、直ぐに逆方向データを受信する。これにより、出力回路６０は、逆方向データの滞留を無くし、トラフィックをスムーズにすることができる。
【００９３】
図１３は、出力回路６０の送信部６６の処理を示すフローチャートである。送信部６６は、ニューラルネットワーク装置１０の動作中、下記のＳ６１からＳ６７の処理を繰り返して実行する。
【００９４】
Ｓ６１において、送信部６６は、出力記憶部６４を監視して、出力記憶部６４に、順方向データまたは逆方向データが存在するか否かを判断する。送信部６６は、出力記憶部６４に順方向データおよび逆方向データが存在しない場合（Ｓ６１のＮｏ）、Ｓ６１の処理を繰り返す。
【００９５】
出力記憶部６４に順方向データまたは逆方向データが存在する場合（Ｓ６１のＹｅｓ）、Ｓ６２において、送信部６６は、当該出力回路６０に通信路４２を介して接続されたコア３０またはルータ４０に、要求信号を送信する。コア３０またはルータ４０は、要求信号を受信した場合、順方向データおよび逆方向データを受信可能であれば、許可信号を送信元のコア３０またはルータ４０に送信する。
【００９６】
続いて、Ｓ６３において、送信部６６は、当該出力回路６０に接続されたコア３０またはルータ４０から許可信号を受信したか否かを判断する。許可信号を受信していない場合（Ｓ６３のＮｏ）、Ｓ６４において、送信部６６は、処理を一定時間待機する。送信部６６は、一定時間待機した後、処理をＳ６３に戻し、許可信号が受信できるまでＳ６３およびＳ６４の処理を繰り返す。なお、送信部６６は、一定回数または所定時間以上待機しても許可信号を受信できない場合、または、当該出力回路６０に接続されたコア３０またはルータ４０から不許可信号を受信した場合には、処理をＳ６１に戻してもよい。
【００９７】
許可信号を受信した場合（Ｓ６３のＹｅｓ）、Ｓ６５において、送信部６６は、まだ未送信であって、最も過去に書き込まれた１つの順方向データまたは１つの逆方向データを、出力記憶部６４の順方向データバッファ７２または逆方向データバッファ７４から読み出す。なお、送信部６６は、順方向データバッファ７２に記憶された順方向データと逆方向データバッファ７４に記憶された逆方向データとを交互に読み出してもよい。また、送信部６６は、順方向データバッファ７２に記憶された順方向データを３回読み出した後に、逆方向データバッファ７４に記憶された逆方向データを１回読み出すといったように、逆方向データよりも順方向データを優先して読み出してもよい。
【００９８】
続いて、Ｓ６６において、送信部６６は、当該出力回路６０に通信路４２を介して接続されたコア３０またはルータ４０に対して、読み出した順方向データまたは逆方向データを送信する。続いて、Ｓ６７において、送信部６６は、送信した順方向データまたは逆方向データを出力記憶部６４から削除する。送信部６６は、Ｓ６７の処理後、処理をＳ６１に戻して、本フローを繰り返し実行する。
【００９９】
以上のように本実施形態に係るニューラルネットワーク装置１０は、ニューラルネットワークにおける学習処理（逆方向処理）において伝播される逆方向データが、何れかのルータ４０で滞留した場合、滞留した逆方向データを削除して、逆方向データの転送をスムーズにする。これにより、ニューラルネットワーク装置１０は、内部でのトラフィックの停滞を軽減することができる。
【０１００】
また、ニューラルネットワーク装置１０は、ニューラルネットワークにおける通常の演算処理（順方向処理）において伝播される順方向データが、何れかのルータ４０で停滞しても削除しない。これにより、ニューラルネットワーク装置１０は、外部装置から与えられる入力データに対する演算を確実に実行することができる。また、ニューラルネットワーク装置１０は、逆方向データが転送できなくなることにより学習精度が低下するが、少なくとも演算を確実に実行することができるので、データ削除による影響を少なくすることができる。
【０１０１】
また、ニューラルネットワーク装置１０は、ルータ４０での逆方向データの滞留を無くすことができるので、ルータ４０内での順方向データを記憶するための記憶容量を大きくし、逆方向データを記憶するための記憶容量を小さくすることができる。これにより、ニューラルネットワーク装置１０は、少ないメモリ容量で効率良くデータ転送を実現し、コストを小さくすることができる。
【０１０２】
図１４は、第１変形例に係る出力回路６０内の出力記憶部６４の構成を示す図である。出力記憶部６４は、例えば、図１４に示すような構成であってもよい。なお、第１変形例については、上述で説明した構成の相違点を中心に説明する。第２変形例以降も同様である。
【０１０３】
第１変形例に係る出力記憶部６４は、データ記憶部８２と、メモリコントローラ８４とを含む。データ記憶部８２は、ランダムアクセスが可能なメモリであり、順方向データおよび逆方向データを記憶する。メモリコントローラ８４は、データ記憶部８２に対するアクセス制御をする。
【０１０４】
メモリコントローラ８４は、データ記憶部８２に対して、順方向データを記憶させるための第１の記憶容量、および、逆方向データを記憶させるための第２の記憶容量を設定している。例えば、メモリコントローラ８４は、データ記憶部８２に対して、順方向データを記憶させるための第１の記憶容量を少なくとも有する順方向データ領域と、逆方向データを記憶させるための第２の記憶容量を少なくとも有する逆方向データ領域とを設定している。
【０１０５】
ルータ内受信部６２は、順方向データの受信を要求する第１の要求信号を何れか１つの入力回路５０から受信した場合、データ記憶部８２に記憶されている順方向データの合計容量が、第１の記憶容量に達しているか否かを判断する。ルータ内受信部６２は、順方向データの合計容量が第１の記憶容量に達していない場合には、第１の要求信号を送信した入力回路５０に許可信号を返信する。
【０１０６】
ルータ内受信部６２は、順方向データの合計容量が第１の記憶容量に達している場合には、許可信号を返信せず、順方向データの合計容量が第１の記憶容量を下回った後に、許可信号を返信する。
【０１０７】
また、ルータ内受信部６２は、逆方向データの受信を要求する第２の要求信号を何れか１つの入力回路５０から受信した場合、データ記憶部８２に記憶されている逆方向データの合計容量が、第２の記憶容量に達しているか否かを判断する。ルータ内受信部６２は、逆方向データの合計容量が第２の記憶容量に達していない場合には、第２の要求信号を送信した入力回路５０に許可信号を返信する。
【０１０８】
ルータ内受信部６２は、逆方向データの合計容量が第２の記憶容量に達している場合には、データ記憶部８２に記憶されている何れか１つの逆方向データを削除する。そして、ルータ内受信部６２は、逆方向データを削除した後に、許可信号を返信する。
【０１０９】
また、メモリコントローラ８４は、データ記憶部８２に記憶された順方向データおよび逆方向データの書き込み順を管理する。そして、送信部６６は、メモリコントローラ８４により管理された書き込み順に従い、最も過去に書き込まれた１つの順方向データまたは１つの逆方向データを読み出して、当該出力回路６０に接続されたコア３０またはルータ４０に送信する。
【０１１０】
なお、メモリコントローラ８４は、データ記憶部８２に記憶されている順方向データの合計容量の時間変化および逆方向データの合計容量の時間変化に応じて、順方向データを記憶させるための第１の記憶容量および逆方向データを記憶させるための第２の記憶容量を変更してもよい。例えば、メモリコントローラ８４は、一定時間毎に、順方向データの受信量と逆方向データの受信量の比率を算出し、比率の変化に応じて、第１の記憶容量と第２の記憶容量の比率を変更する。
【０１１１】
このような第１変形例に係る出力回路６０は、ランダムアクセス可能なメモリを用いて順方向データおよび逆方向データを記憶することができる。
【０１１２】
図１５は、第２変形例に係る出力回路６０のルータ内受信部６２の処理を示すフローチャートである。出力記憶部６４が、例えば、図１４に示すようなランダムアクセス可能なデータ記憶部８２とメモリコントローラ８４を含む構成である場合、出力回路６０は、図１５に示すような処理を実行してもよい。
【０１１３】
まず、Ｓ７１において、ルータ内受信部６２は、何れかの入力回路５０から、第１の要求信号または第２の要求信号を受信する。続いて、Ｓ７２において、ルータ内受信部６２は、データ記憶部８２に空き容量が存在するか否かを判断する。
【０１１４】
データ記憶部８２に空き容量が存在しない場合（Ｓ７２のＮｏ）、ルータ内受信部６２は、処理をＳ７３に進める。Ｓ７３において、ルータ内受信部６２は、順方向データの受信要求か（すなわち、第１の要求信号を受信したか）、または、逆方向データの受信要求か（すなわち、第２の要求信号を受信したか）を判断する。
【０１１５】
順方向データの受信要求の場合（Ｓ７３のＹｅｓ）、ルータ内受信部６２は、処理をＳ７４に進める。Ｓ７４において、ルータ内受信部６２は、処理を一定時間待機する。ルータ内受信部６２は、一定時間待機した後、処理をＳ７２に戻し、データ記憶部８２に空き容量ができるまでＳ７２、Ｓ７３およびＳ７４の処理を繰り返す。なお、ルータ内受信部６２は、一定回数または所定時間以上待機しても空き容量ができない場合には、第１の要求信号の送信元の入力回路５０に不許可信号を送信して、処理を終了してもよい。
【０１１６】
逆方向データの受信要求の場合（Ｓ７３のＮｏ）、ルータ内受信部６２は、処理をＳ７５に進める。Ｓ７５において、ルータ内受信部６２は、データ記憶部８２に記憶されている逆方向データを削除する。例えば、ルータ内受信部６２は、最も過去に書き込まれた１つの逆方向データをデータ記憶部８２から削除する。これにより、ルータ内受信部６２は、データ記憶部８２に空き容量を確保することができる。なお、ルータ内受信部６２は、データ記憶部８２に逆方向データが存在しない場合には、処理をせずに次の処理に進める。
【０１１７】
データ記憶部８２に空き容量が存在すると判断された場合（Ｓ７２のＹｅｓ）または１つの逆方向データをデータ記憶部８２から削除した場合（Ｓ７５）、Ｓ７６において、ルータ内受信部６２は、許可信号を、第１の要求信号または第２の要求信号の送信元の入力回路５０に送信する。第１の要求信号または第２の要求信号の送信元の入力回路５０は、許可信号を受信した場合、順方向データまたは逆方向データを当該出力回路６０に送信する。
【０１１８】
続いて、Ｓ７７において、ルータ内受信部６２は、第１の要求信号または第２の要求信号の送信元の入力回路５０から、順方向データまたは逆方向データを受信する。そして、Ｓ７８において、ルータ内受信部６２は、受信した逆方向データをデータ記憶部８２に書き込む。なお、ルータ内受信部６２は、データ記憶部８２に逆方向データが存在せずに、Ｓ７５で空き容量を確保できなかった場合には、Ｓ７７で受信した逆方向データを書き込まず破棄する。
【０１１９】
このような第２変形例に係る出力回路６０は、データ記憶部８２に順方向データまたは逆方向データを区別なく記憶させることができる。さらに、第２変形例に係る出力回路６０は、データ記憶部８２の空き容量が存在しない場合に、逆方向データを受信した場合には、滞留した逆方向データを削除して、逆方向データの転送をスムーズにすることができる。
【０１２０】
また、入力回路５０は、通信路４２を介して接続されたコア３０またはルータ４０から要求信号を受信した場合、入力記憶部５４に空き容量が存在するか否かを判断している。そして、入力回路５０は、入力記憶部５４に空き容量が存在しない場合、入力記憶部５４に空き容量ができるまで処理を一定時間待機している。そこで、第２変形例において、入力回路５０は、コア３０またはルータ４０から要求信号を受信した場合であって、入力記憶部５４に空き容量が存在しない場合、当該ルータ４０内の出力回路６０に対して、逆方向データの削除を指示する信号を送信してもよい。これにより、出力回路６０のデータ記憶部８２に空き容量ができ、入力回路５０が、出力回路６０へデータを送信することが可能となる。そして、入力回路５０は、出力回路６０へデータを送信することができると、入力記憶部５４に空き容量を作成することができる。
【０１２１】
図１６は、第３変形例に係る出力回路６０のルータ内受信部６２の処理を示すフローチャートである。出力記憶部６４が、例えば、図１４に示すようなランダムアクセス可能なデータ記憶部８２とメモリコントローラ８４を含む構成である場合、出力回路６０は、図１６に示すような処理を実行してもよい。
【０１２２】
まず、Ｓ８１において、ルータ内受信部６２は、何れかの入力回路５０から、第１の要求信号または第２の要求信号を受信する。続いて、Ｓ８２において、ルータ内受信部６２は、データ記憶部８２に空き容量が存在するか否かを判断する。
【０１２３】
データ記憶部８２に空き容量が存在しない場合（Ｓ８２のＮｏ）、ルータ内受信部６２は、処理をＳ８３に進める。Ｓ８３において、ルータ内受信部６２は、データ記憶部８２に逆方向データが存在するか否かを判断する。
【０１２４】
データ記憶部８２に逆方向データが存在しない場合（Ｓ８３のＮｏ）、ルータ内受信部６２は、処理をＳ８４に進める。Ｓ８４において、ルータ内受信部６２は、処理を一定時間待機する。ルータ内受信部６２は、一定時間待機した後、処理をＳ８２に戻し、データ記憶部８２に空き容量ができるまでＳ８２、Ｓ８３およびＳ８４の処理を繰り返す。なお、ルータ内受信部６２は、一定回数または所定時間以上待機しても空き容量ができない場合には、第１の要求信号または第２の要求信号の送信元の入力回路５０に不許可信号を送信して、処理を終了してもよい。
【０１２５】
データ記憶部８２に逆方向データが存在する場合（Ｓ８３のＹｅｓ）、ルータ内受信部６２は、処理をＳ８５に進める。Ｓ８５において、ルータ内受信部６２は、データ記憶部８２に記憶されている逆方向データを削除する。例えば、ルータ内受信部６２は、最も過去に書き込まれた１つの逆方向データをデータ記憶部８２から削除する。これにより、ルータ内受信部６２は、データ記憶部８２に空き容量を存在させることができる。
【０１２６】
データ記憶部８２に空き容量が存在すると判断された場合（Ｓ８２のＹｅｓ）または１つの逆方向データをデータ記憶部８２から削除した場合（Ｓ８５）、Ｓ８６において、ルータ内受信部６２は、許可信号を、第１の要求信号または第２の要求信号の送信元の入力回路５０に送信する。
【０１２７】
続いて、Ｓ８７において、ルータ内受信部６２は、第１の要求信号または第２の要求信号の送信元の入力回路５０から、順方向データまたは逆方向データを受信する。そして、Ｓ８８において、ルータ内受信部６２は、受信した順方向データまたは逆方向データをデータ記憶部８２に書き込む。ルータ内受信部６２は、Ｓ８８の処理後、本フローを終了する。
【０１２８】
このような第３変形例に係る出力回路６０は、データ記憶部８２に順方向データまたは逆方向データを区別なく記憶させることができる。さらに、第３変形例に係る出力回路６０は、データ記憶部８２の空き容量が存在しない場合に、滞留した逆方向データを削除して、順方向データおよび逆方向データの転送をスムーズにすることができる。
【０１２９】
以上、実施形態に係るニューラルネットワーク装置１０およびいくつかの変形例を説明した。実施形態および変形例においては、入力回路５０に備えられる入力記憶部５４は、通常のＦＩＦＯバッファまたはシフトレジスタを想定している。しかし、入力回路５０に備えられる入力記憶部５４は、ランダムアクセス可能なメモリであってもよい。この場合、入力回路５０の受信部５２は、出力回路６０のルータ内受信部６２と同様の処理を実行してもよい。
【０１３０】
すなわち、入力回路５０は、要求信号を受信した場合であって、入力記憶部５４における逆方向データを記憶させるための空き容量が存在しない場合、入力記憶部５４に記憶されている逆方向データを削除する。例えば、この場合、入力回路５０は、最も過去に書き込まれた逆方向データを削除する。また、入力回路５０は、第１変形例、第２変形例および第３変形例で説明したルータ内受信部６２と同様の処理を入力記憶部５４に対して実行してもよい。
【０１３１】
また、入力回路５０に備えられる入力記憶部５４がＦＩＦＯバッファまたはシフトレジスタである場合、入力回路５０は、要求信号を受信した場合であって、入力記憶部５４における逆方向データを記憶させるための空き容量が存在しない場合、ＦＩＦＯバッファにおける先頭に記憶された１つの逆方向データを削除する。ただし、ＦＩＦＯバッファにおける先頭に記憶されたデータが、順方向データである場合には、入力回路５０は、実施形態で説明した処理を実行する。
【０１３２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３３】
１０  ニューラルネットワーク装置
２０  データ処理部
２２  通信部
２４  学習部
２６  設定部
３０  コア
４０  ルータ
４２  通信路
５０  入力回路
５２  受信部
５４  入力記憶部
５６  ルータ内送信部
６０  出力回路
６２  ルータ内受信部
６４  出力記憶部
６６  送信部
７２  順方向データバッファ
７４  逆方向データバッファ
８２  データ記憶部
８４  メモリコントローラ
【図１】
2019095861.tif 000003
【図２】
2019095861.tif 000004
【図３】
2019095861.tif 000005
【図４】
2019095861.tif 000006
【図５】
2019095861.tif 000007
【図６】
2019095861.tif 000008
【図７】
2019095861.tif 000009
【図８】
2019095861.tif 000010
【図９】
2019095861.tif 000011
【図１０】
2019095861.tif 000012
【図１１】
2019095861.tif 000013
【図１２】
2019095861.tif 000014
【図１３】
2019095861.tif 000015
【図１４】
2019095861.tif 000016
【図１５】
2019095861.tif 000017
【図１６】
2019095861.tif 000018