(57)【要約】【課題】レイヤーアルゴリズムの処理において、外部メモリの帯域を有効に使うことができる集積回路を提供する。【解決手段】集積回路は、演算を実行する第１の演算器と、前記第１の演算器で使用するデータを保持する第１のメモリと、を備える第１の演算部と、前記第１のメモリと、第２の演算器を含む第２の演算部に設けられる第２のメモリとの間でのデータの転送を制御する第１のデータ転送制御部と、を備え、前記第１の演算部を介して前記第２の演算部と外部メモリとを通信させる。【選択図】図１
2020170358.tif 000002
【特許請求の範囲】
【請求項１】
演算を実行する第１の演算器と、
前記第１の演算器で使用するデータを保持する第１のメモリと、を備える第１の演算部と、
前記第１のメモリと、第２の演算器を含む第２の演算部に設けられる第２のメモリとの間でのデータの転送を制御する第１のデータ転送制御部と、を備え、
前記第１の演算部を介して前記第２の演算部と外部メモリとを通信させる、集積回路。
【請求項２】
前記第１のメモリは前記外部メモリと通信する、請求項１に記載の集積回路。
【請求項３】
前記第１の演算部は、前記第２の演算部に転送されるデータを制御する第２のデータ転送制御部を備える、請求項１または請求項２に記載の集積回路。
【請求項４】
前記第１のデータ転送制御部は、前記第２の演算器が算出した、ニューラルネットワークのレイヤーで使用するパラメータの誤差であるパラメータ誤差を、前記第２のメモリから前記第１のメモリに転送し、
前記第１のメモリと前記外部メモリとの間でデータの転送を制御する前記第２のデータ転送制御部は、前記パラメータを、前記外部メモリから前記第１のメモリに転送し、
前記第１の演算器は、前記第１のメモリに保持された前記パラメータと前記パラメータ誤差とを使用して前記パラメータの更新値を算出する、請求項３に記載の集積回路。
【請求項５】
前記集積回路は、命令デコーダをさらに備え、
前記命令デコーダは、待ち合わせ命令をデコードした場合、命令のデコードを停止し、
前記第２のデータ転送制御部による前記パラメータの前記第１のメモリへの転送の完了と、前記第１のデータ転送制御部による前記パラメータ誤差の前記第１のメモリへの転送の完了とに基づいて、命令のデコードを再開する、請求項４に記載の集積回路。
【請求項６】
前記第２の演算器による前記パラメータ誤差の算出処理は、複数回に分けて行われ、
前記第１の演算器は、前記パラメータの更新値の算出処理を、前記第２の演算器による前記パラメータ誤差の算出処理と並列に実行する、請求項５に記載の集積回路。
【請求項７】
前記第１のメモリを前記第２の演算部の第２のメモリに接続する第１のバスと、
前記第１のメモリを前記外部メモリに接続する第２のバスと、を備え、
前記外部メモリが保持するデータの前記第２の演算部の前記第２のメモリへの転送は、前記第１のデータ転送制御部および前記第２のデータ転送制御部による制御に基づいて、前記第２のバス、前記第１のメモリおよび前記第１のバスを介して行われる、請求項５または請求項６のいずれか１項に記載の集積回路。
【請求項８】
前記第１のメモリは、前記第１のバスと前記第２のバスとを相互に接続するスイッチ回路を備える、請求項７に記載の集積回路。
【請求項９】
前記第１のメモリは、データを保持するメモリセルアレイと、前記メモリセルアレイに対してデータを読み書きするデータ入出力部と、を備え、
前記第１のメモリは、さらに、前記第１のデータ転送制御部、前記第２のデータ転送制御部または前記命令デコーダから受ける制御信号に応じて、前記メモリセルアレイのデータ端子を前記第２の演算部の前記第２のメモリ、前記外部メモリまたは前記第１の演算器のいずれかに接続するスイッチ回路を備える、請求項５から請求項７のいずれか１項に記載の集積回路。
【請求項１０】
第１の演算部と第２の演算部とを備える半導体装置であって、
前記第１の演算部は、
演算を実行する第１の演算器と、
前記第１の演算器で使用するデータを保持する第１のメモリと、
前記第１のメモリと前記第２の演算部に設けられる第２のメモリとの間でのデータの転送を制御する第１のデータ転送制御部と、を備え、
前記第２の演算部は、演算をそれぞれ実行する複数の第２の演算器、を備え、
前記第２のメモリは、前記複数の第２の演算器で使用するデータを保持し、
前記第２の演算部は、前記第１の演算部を介して外部メモリと通信する、半導体装置。
【請求項１１】
前記第１の演算部は、前記第２の演算部に転送されるデータを制御する第２のデータ転送制御部を備える、請求項１０に記載の半導体装置。
【請求項１２】
前記第１のデータ転送制御部は、前記第２の演算器が算出した、ニューラルネットワークのレイヤーで使用するパラメータの誤差であるパラメータ誤差を、前記第２のメモリから前記第１のメモリに転送し、
前記第１のメモリと前記外部メモリとの間でデータの転送を制御する前記第２のデータ転送制御部は、前記パラメータを、前記外部メモリから前記第１のメモリに転送し、
前記第１の演算器は、前記第１のメモリに保持された前記パラメータと前記パラメータ誤差とを使用して前記パラメータの更新値を算出し、
前記第１の演算器、前記複数の第２の演算器、前記第１のデータ転送制御部および前記第２のデータ転送制御部の動作は、並列に実行される、請求項１１に記載の半導体装置。
【請求項１３】
前記第１の演算部は、命令デコーダをさらに備え、
前記命令デコーダは、待ち合わせ命令をデコードした場合、命令のデコードを停止し、
前記第２のデータ転送制御部による前記パラメータの前記第１のメモリへの転送の完了と、前記第１のデータ転送制御部による前記パラメータ誤差の前記第１のメモリへの転送の完了とに基づいて、命令のデコードを再開する、請求項１２に記載の半導体装置。
【請求項１４】
前記第２の演算器は、前記パラメータ誤差の算出処理を、複数回に分けて行い、
前記第１の演算器による前記パラメータの更新値の算出処理と、前記第２の演算器による前記パラメータ誤差の算出処理とは並列に実行される、請求項１２または請求項１３に記載の半導体装置。
【請求項１５】
前記第１の演算器は、算出した前記パラメータの更新値を前記第１のメモリに格納し、
前記第１のデータ転送制御部は、データ転送命令に基づいて、前記第１のメモリから前記第２のメモリに前記パラメータの更新値を転送し、
前記第２の演算器は、前記第２のメモリに保持された前記パラメータの更新値を、次のレイヤーの前記パラメータ誤差の算出に使用する、請求項１２から請求項１４のいずれか１項に記載の半導体装置。
【請求項１６】
請求項１から請求項９のいずれか１項に記載の集積回路を複数、または、請求項１０から請求項１５のいずれか１項に記載の半導体装置を複数含む半導体モジュール。
【請求項１７】
請求項１から請求項９のいずれか１項に記載の集積回路を複数、または、請求項１０から請求項１５のいずれか１項に記載の半導体装置を複数、または、請求項１６に記載の半導体モジュールを複数含む情報処理装置。
【請求項１８】
第１の演算部と第２の演算部とを備え、前記第１の演算部が、演算を実行する第１の演算器と、前記第１の演算器で使用するデータを保持する第１のメモリと、前記第１のメモリと前記第２の演算部に設けられる第２のメモリとの間でのデータの転送を制御する第１のデータ転送制御部と、前記第１のメモリと外部メモリとの間でデータの転送を制御する第２のデータ転送制御部と、を備え、前記第２の演算部が、演算をそれぞれ実行する複数の第２の演算器を備え、前記第２のメモリは、前記複数の第２の演算器で使用するデータを保持し、前記第２の演算部が、前記第１の演算部を介して外部メモリと通信する、半導体装置の制御方法であって、
前記第１のデータ転送制御部が、前記第２の演算器が算出した、ニューラルネットワークのレイヤーで使用するパラメータの誤差であるパラメータ誤差を、前記第２のメモリから前記第１のメモリに転送し、
前記第２のデータ転送制御部が、前記パラメータを、前記外部メモリから前記第１のメモリに転送し、
前記第１の演算器が、前記第１のメモリに保持された前記パラメータと前記パラメータ誤差とを使用して前記パラメータの更新値を算出する、半導体装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、集積回路、半導体装置、半導体モジュール、情報処理装置および半導体装置の制御方法に関する。
【背景技術】
【０００２】
近時、ニューラルネットワークを利用したディープラーニングにより画像認識や音声認識等が精度よく行われるようになってきている。例えば、ディープラーニングを実行するプロセッサは、外部メモリである主記憶装置から内部メモリに読み出した画像データおよび重みデータ等を使用して、複数の演算器に並列に演算を実行させる。この際、内部メモリに記憶された画像データおよび重みデータ等の配列を変換してプロセッサコアに入力することで、演算が効率的に実行される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１８−１２０５４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一般に、ディープラーニングにおいて、ニューラルネットワークの各レイヤーで使用するパラメータの数は、各レイヤーに供給されるデータの数に比べて少ない場合が多い。そのため、レイヤーアルゴリズムの処理においてパラメータを外部メモリに対して入出力する場合、外部メモリの帯域を使い切れないタイミングがあり、メモリ資源を十分に活用できない場合がある。また、レイヤーアルゴリズムの処理を実行するために実装された多数の演算器を含む半導体装置でパラメータの更新処理を実行する場合、演算器の使用効率が低くなると、演算資源を十分に活用できない場合がある。
【課題を解決するための手段】
【０００５】
本発明の実施形態の集積回路は、演算を実行する第１の演算器と、前記第１の演算器で使用するデータを保持する第１のメモリと、を備える第１の演算部と、前記第１のメモリと、第２の演算器を含む第２の演算部に設けられる第２のメモリとの間でのデータの転送を制御する第１のデータ転送制御部と、を備え、前記第１の演算部を介して前記第２の演算部と外部メモリとを通信させる。
【図面の簡単な説明】
【０００６】
【図１】本発明の一実施形態における半導体装置の例を示すブロック図である。
【図２】図１の半導体装置が搭載される情報処理装置の例を示すブロック図である。
【図３】ディープニューラルネットワークの訓練におけるフォワード処理の例を示すフロー図である。
【図４】ディープニューラルネットワークの訓練におけるバックワード処理およびパラメータの更新処理の例を示すフロー図である。
【図５】フォワード処理およびバックワード処理でのレイヤーアルゴリズムの例を示す説明図である。
【図６】パラメータを最適化する勾配降下法の例を示す説明図である。
【図７】図１の半導体装置によりバックワード処理とパラメータの更新処理とを実行する場合の例を示すシーケンス図である。
【図８】図７におけるレイヤーＮ−１のパラメータ誤差の算出処理とパラメータの更新処理との詳細を示す説明図である。
【図９】図７のシーケンスを実行するメイン演算部およびサブ演算部の動作の例を示すフロー図である。
【図１０】図１の内部メモリの例を示すブロック図である。
【図１１】図１の内部メモリの別の例を示すブロック図である。
【図１２】図１の内部メモリの別の例を示すブロック図である。
【図１３】図１の内部メモリの別の例を示すブロック図である。
【図１４】図１の内部メモリの別の例を示すブロック図である。
【図１５】本発明の別の実施形態における半導体装置の例を示すブロック図である。
【図１６】図１５の半導体装置がパラメータの更新処理を実行するときの動作の例を示すフロー図である。
【発明を実施するための形態】
【０００７】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
【０００８】
図１は、本発明の一実施形態における半導体装置の例を示すブロック図である。図１に示す半導体装置１０は、例えば、複数のレイヤーを含むディープニューラルネットワーク（ＤＮＮ：Deep Neural Network）の訓練に使用されるプロセッサであり、フォワード処理、バックワード処理およびパラメータの更新処理を実行する。フォワード処理、バックワード処理およびパラメータの更新処理については、図３および図４で説明する。
【０００９】
半導体装置１０は、第１の演算部３０および第２の演算部２０を有している。第１の演算部３０は、第１の演算器３１、第１のメモリ３２、命令デコーダ３３、第１のデータ転送制御部３４および第２のデータ転送制御部３５を有している。第２の演算部２０は、第２の演算器２１および第２のメモリ２２を有している。本実施形態において、第１の演算部３０は、パラメータの更新処理を実行する最適化演算部であり、第２の演算部２０は、ディープニューラルネットワークのフォワード処理およびバックワード処理を実行するベクトル演算部である。第１の演算部３０は、第１の集積回路の一例であり、第２の演算部２０は、第２の集積回路の一例である。
【００１０】
第２の演算器２１は、ベクトル演算または行列演算等を実行するための多数の演算器を有している。なお、第２の演算部２０は、演算命令やデータ転送命令等の命令を保持する命令バッファ、命令をデコードする命令デコーダ、演算に使用するデータや演算結果を保持するレジスタ等を有してもよい。また、第２の演算部２０は、第２のメモリ２２以外に、命令メモリ、命令キャッシュあるいはデータキャッシュを有してもよい。
【００１１】
第２の演算器２１に含まれる各種演算器の種類として、積和演算器、乗算器、加算器、除算器等が挙げられるが、これらに限定されない。また、本実施形態の第２の演算器２１は、浮動小数点演算器と固定小数点演算器を有しており、浮動小数点数データは、例えば、半精度、単精度、倍精度のいずれでもよい。
【００１２】
第２のメモリ２２は、アドレスにより識別される複数の記憶領域を有し、第２の演算器２１が演算に使用するデータやパラメータ等を保持する。第２のメモリ２２は、例えば、高速ＳＲＡＭであるが、ｅＤＲＡＭ（embedded DRAM）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＰＣＭ（Phase-change memory）、またはＲｅＲＡＭ（Resistive Random Access Memory）等でもよい。
【００１３】
第１の演算部３０の第１の演算器３１は、例えば、加算器、乗算器、除算器、論理演算器（オア論理、アンド論理、否定論理、排他的論理和）および平方根演算器等を有している。平方根演算器は、ルックアップテーブルにより近似値を求める方式でもよい。第１の演算器３１が対数演算器等の他の関数を演算する演算器を有する場合、これら演算器も、ルックアップテーブルにより近似値を求める方式でもよい。また、第１の演算器３１は、平方根演算器の代わりに、逆数平方根演算器を有してもよい。
【００１４】
さらに、ディープニューラルネットワークの訓練におけるパラメータの更新処理を第１の演算器３１に実行させる場合、第１の演算器３１は、パラメータの更新値を求める式の値あるいは式中の所定の項の値を算出する専用の演算器を有してもよい。例えば、図６のＡＤＡＭ（Adaptive moment estimation）によりパラメータの更新値Ｗｔを求める場合、右辺の第２項を演算する専用の演算器を第１の演算器３１に設けてもよい。これにより、演算効率を向上することができる。
【００１５】
例えば、第１の演算器３１に含まれる各種演算器は、浮動小数点演算器であり、扱う浮動小数点数の型は、半精度、単精度、倍精度のいずれか１つまたは複数である。第１の演算器３１に含まれる各種演算器は、ＳＩＭＤ（Single Instruction Multiple Data）演算器でもよい。例えば、倍精度のＳＩＭＤ演算器は、２つの単精度データまたは４つの半精度データの演算を並列に実行することができる。なお、ＳＩＭＤ演算器で実行するデータが格納されるレジスタは固定長でもよく、命令に含まれる情報に基づいてサイズが変わる可変長でもよい。第１の演算器３１は、固定小数点数データを演算する演算器を含んでもよい。さらに、第１の演算器３１は、浮動小数点数データの型を変換する演算器や、浮動小数点数を固定小数点数に変換し、あるいは、固定小数点数を浮動小数点数に変換する演算器を有してもよい。
【００１６】
なお、第１の演算器３１は、ビット演算、浮動小数点演算、整数演算等を組み合わせることで、対数関数の演算や指数関数の演算を実現可能である。対数関数の演算や指数関数の演算は、複数の演算命令を組み合わせることで実行されてもよく、複数の演算器を組み合わせた専用の演算器により実行されてもよい。
【００１７】
第１の演算器３１に含まれる各演算器は、命令デコーダ３３からの制御信号に基づいて、第１のメモリ３２に保持されたデータを読み出して演算を実行し、演算結果を第１のメモリ３２に格納する。以下では、第１の演算器３１に含まれる各演算器を、第１の演算器３１とも称する。また、第１の演算器３１は、パラメータの更新処理を実行するために最適な数の演算器を演算器の種類毎に有してもよい。これにより、第１の演算部３０において、パラメータの更新処理の実行時の演算性能に対する外部メモリ４０の帯域の比であるＢ／Ｆ比を最適に設定することができる。
【００１８】
第１のメモリ３２は、アドレスにより識別される複数の記憶領域を有している。第１のメモリ３２は、第１の演算部３０と第２の演算部２０とを接続する第１のバスＩＢＵＳを介して第２の演算部２０の第２のメモリ２２に接続され、第２のバスＥＢＵＳを介して外部メモリ４０に接続される。本実施形態では、第１のバスＩＢＵＳと第２のバスＥＢＵＳとは、互いに独立している。このため、外部メモリ４０から第２のメモリ２２へのデータの転送は、第１のメモリ３２を介して行われる。但し、後述するように、第１のバスＩＢＵＳと第２のバスＥＢＵＳとを相互に接続するバイパススイッチを第１のメモリ３２内に設けることで、第１のメモリ３２を経由することによるアクセス遅延のペナルティを少なくすることができる。第１のメモリ３２は、高速ＳＲＡＭで構成されるが、ｅＤＲＡＭ、ＭＲＡＭ、ＰＣＭまたはＲｅＲＡＭ等でもよい。
【００１９】
命令デコーダ３３は、例えば、半導体装置１０の外部から供給される命令をデコードし、デコード結果に応じて生成した制御信号を第１の演算器３１、第１のメモリ３２および第１、第２のデータ転送制御部３４、３５の１つまたは複数に出力する。命令デコーダ３３は、第１の演算器３１に演算を実行させる演算命令をデコードした場合、第１の演算器３１内において演算を実行させる演算器を示す情報と、演算命令の種別を示す情報とを第１の演算器３１に出力する。また、命令デコーダ３３は、演算命令のデコードに基づいて、演算に使用するデータを第１のメモリ３２から読み出す読み出し情報（読み出しアドレス等）と、演算結果を第１のメモリ３２に書き込む書き込み情報（書き込みアドレス等）とを第１のメモリ３２に出力する。以下では、命令デコーダ３３が第１の演算器３１に出力する制御信号等は、命令とも称される。
【００２０】
第１の演算器３１において、命令デコーダ３３からの命令に対応する演算器は、第１のメモリ３２からロードされるデータの演算を実行し、演算結果を第１のメモリ３２にストアする。第１のメモリ３２は、命令デコーダ３３からのアドレス等の情報に基づいて、第１の演算器３１が演算に使用するデータを記憶領域から読み出して第１の演算器３１に出力し、受信した演算結果を記憶領域に書き込む。
【００２１】
なお、命令デコーダ３３に供給される命令は、１回の演算を実行する命令でもよく、複数の演算を実行するＳＩＭＤ命令でもよく、演算回数を指定した命令でもよい。複数回数を指定した命令を受信した第１の演算器３１は、第１のメモリ３２におけるデータのロード元と演算結果のストア先を順に変えながら、指定された回数の演算を実行してもよい。ＳＩＭＤ命令または演算回数を指定した命令を命令セットに含めることで、第１の演算部３０への命令の供給効率を向上することができる。
【００２２】
命令デコーダ３３は、第２のメモリ２２および第１のメモリ３２間でデータを転送するデータ転送命令をデコードした場合、例えば、ソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報を第１のデータ転送制御部３４に出力する。また、命令デコーダ３３は、外部メモリ４０と第１のメモリ３２間でデータを転送するデータ転送命令をデコードした場合、例えば、ソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報を第２のデータ転送制御部３５に出力する。ソースアドレスは、データの転送元を示し、ディスティネーションアドレスは、データの転送先を示し、転送量情報は、転送バイト数等のデータ転送量を示し、入出力情報は、データの入出力方向（リード／ライト）を示すものとする。
【００２３】
第１のデータ転送制御部３４は、命令デコーダ３３から受信したソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報に基づいて、第１のバスＩＢＵＳを介して第２のメモリ２２および第１のメモリ３２にそれぞれアクセスする。例えば、データ転送命令が、第２のメモリ２２から第１のメモリ３２へのデータ転送を示す場合、第１のデータ転送制御部３４は、データ転送量に対応する回数の読み出しコマンドを第２のメモリ２２に発行する。また、第１のデータ転送制御部３４は、データ転送量に対応する回数の書き込みコマンドを第１のメモリ３２に発行する。そして、転送量情報に対応する量のデータが第２のメモリ２２から第１のメモリ３２に転送される。
【００２４】
第２のデータ転送制御部３５は、命令デコーダ３３から受信したソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報に基づいて、第２のバスＥＢＵＳを介して外部メモリ４０および第１のメモリ３２にそれぞれアクセスする。例えば、データ転送命令が、第１のメモリ３２から外部メモリ４０へのデータ転送を示す場合、第２のデータ転送制御部３５は、データ転送量に対応する回数の読み出しコマンドを第１のメモリ３２に発行する。また、第２のデータ転送制御部３５は、データ転送量に対応する回数の書き込みコマンドを外部メモリ４０に発行する。そして、転送量情報に対応する量のデータが第１のメモリ３２から外部メモリ４０に転送される。
【００２５】
なお、第１のデータ転送制御部３４は、命令デコーダ３３からのデータ転送命令に基づいて、パケット形式のデータ転送要求を第２のメモリ２２および第１のメモリ３２に発行してもよい。同様に、第２のデータ転送制御部３５は、命令デコーダ３３からのデータ転送命令に基づいて、パケット形式のデータ転送要求を第１のメモリ３２および外部メモリ４０に発行してもよい。
【００２６】
例えば、外部メモリ４０は、ＳＤＲＡＭのメモリモジュール等の主記憶装置である。外部メモリ４０は、ＨＢＭ（High Bandwidth Memory）またはＨＭＣ（Hybrid Memory Cube）等の積層タイプのメモリモジュールでもよい。
【００２７】
なお、例えば、半導体装置１０は、単一のチップの形態を有していることが好ましい。第２の演算部２０と第１の演算部３０とを１つのチップに含めることで、第１のバスＩＢＵＳをチップ内配線として形成することができる。また、第２のメモリ２２および第１のメモリ３２の高速アクセス性を生かして、第２のメモリ２２および第１のメモリ３２間でのデータ転送を高速に行うことができる。
【００２８】
これに対して、第２の演算部２０と第１の演算部３０とは互いに異なる半導体チップに設けられてもよい。この場合、第２の演算部２０を含む半導体装置と、第１の演算部３０を含む半導体装置とが、それぞれ設計される。これにより、各半導体チップのチップサイズを単一の半導体チップのチップサイズに比べて小さくできるため、半導体チップの歩留まりを向上させることができる。なお、この場合、第１のバスＩＢＵＳの各信号線に接続される入出力バッファと、パッドやバンプ等の外部端子と、保護素子等とを両方のチップに配置することが好ましい。
【００２９】
第１の演算部３０は、命令デコーダ３３に供給する命令を保持する命令バッファやプログラムカウンタ、演算に使用するデータや演算結果を保持するレジスタ等を有してもよい。例えば、複数の命令を並列に命令バッファに格納することで、第１の演算部３０への命令の供給効率を向上することができる。なお、命令バッファが保持する命令は、外部メモリ４０から転送されてもよく、図２で説明するＣＰＵ２１０からの指示に基づいて、外部メモリ４０から命令バッファに転送されてもよい。
【００３０】
また、第１の演算部３０にプログラムカウンタを設けることにより、条件分岐命令を命令セットに追加でき、条件分岐命令の追加によりループ処理を実行できる。この結果、命令の供給効率を向上することができる。また、条件分岐命令の分岐先に応じて実行する関数を変えることで、複雑な関数の値を近似により求めることができる。また、条件ビットを参照することで条件付き実行を行ってもよい。
【００３１】
さらに、第１の演算部３０は、データアドレスレジスタを有してもよい。この場合、アドレスの間接参照が可能になり、アプリケーションプログラムを変更することなく、レジスタ値を変えることで、異なる処理を実行することができる。また、演算結果に応じてデータアドレスレジスタを書き換えることで、例えば、演算の近似に使用するルックアップテーブルの参照先を変えることができ、データを複数の区間に区切って、区間毎に異なる関数による近似を行うことができる。
【００３２】
図２は、図１の半導体装置１０が搭載される情報処理装置の例を示すブロック図である。図２に示す情報処理装置１００は、システムバスＳＢＵＳで相互に接続された所定数の基板２００、ＣＰＵ２１０、外部記憶装置２２０およびネットワークインタフェース（Ｉ／Ｆ）２３０を有している。例えば、所定数の基板２００とＣＰＵ２１０とは、システム基板に搭載される。なお、本開示に係る情報処理装置１００は、様々な形態とすることができ、例えば、ＣＰＵ２１０がアクセスする主記憶装置がシステムバスＳＢＵＳに接続されてもよく、ＧＰＵがシステムバスＳＢＵＳに接続されてもよい。
【００３３】
システムバスＳＢＵＳは、例えば、ＰＣＩｅ（Peripheral Component Interconnect express；登録商標）バスでもよい。また、情報処理装置１００は、複数の半導体装置１０を協働させてディープニューラルネットワークの訓練を実行するサーバとして機能させてもよい。
【００３４】
各基板２００は、複数の半導体装置１０、複数の半導体装置１０にそれぞれ接続された複数の外部メモリ４０、通信インタフェース５０および命令制御部６０を有している。命令制御部６０は、複数の半導体装置１０の各々に設けられてもよい。また、基板２００に搭載される半導体装置１０の数は、４つに限定されない。複数の半導体装置１０、通信インタフェース５０および命令制御部６０は、基板２００に設けられたバスＢＵＳを介して相互に接続されている。なお、基板２００は、システム基板に設けられるコネクタに接続されるベア基板の形態でもよく、システム基板に半田付けされるパッケージの形態でもよい。
【００３５】
ＣＰＵ２１０は、情報処理装置１００の全体の動作を管理し、例えば、ディープラーニングで使用するデータを複数の半導体装置の各々に割り当てるホストコンピュータとして機能する。外部記憶装置２２０は、例えば、各半導体装置１０が実行するディープラーニングの演算で使用するデータおよびパラメータを保持してもよい。また、外部記憶装置２２０は、ＣＰＵ２１０が実行する管理プログラムおよびアプリケーションプログラムを保持してもよく、各半導体装置１０が実行する命令を保持してもよい。外部記憶装置２２０は、ハードディスク、ＳＳＤ（Solid State Drive）、他の記憶装置でもよい。ネットワークインタフェース２３０は、システムバスＳＢＵＳを外部のネットワークに接続する。外部記憶装置２２０が保持するプログラムやデータ等の情報は、ネットワークインタフェース２３０を介して外部のネットワークから転送されてもよい。
【００３６】
各基板２００において、通信インタフェース５０は、システムバスＳＢＵＳを介してＣＰＵ２１０、他の基板２００の通信インタフェース５０またはネットワークインタフェース２３０との間での通信を制御する。命令制御部６０は、ＣＰＵ２１０からの指示に基づいて、バスＢＵＳで接続された半導体装置１０の各々に発行する命令を制御する。すなわち、命令制御部６０は、予め決められたディープニューラルネットワークの訓練の手順にしたがってＣＰＵ２１０から出力される指示に基づいて、半導体装置１０に訓練を実行させるための各種の命令を半導体装置１０の各々に発行する。命令制御部６０から発行された命令は、図１に示した半導体装置１０内の命令デコーダ３３に供給される。
【００３７】
命令制御部６０は、第２の演算部２０による処理と第１の演算部３０による処理とを同期させるためのタイミング信号を第２の演算部２０および第１の演算部３０の一方または両方に出力してもよい。なお、ＣＰＵ２１０が半導体装置１０の各々に発行する命令を管理できる場合、命令は、ＣＰＵ２１０から各半導体装置１０に直接発行されてもよく、この場合、基板２００には、命令制御部６０は搭載されていなくてもよい。
【００３８】
なお、例えば、基板２００に搭載される複数の半導体装置１０は、半導体モジュール（パッケージ）の形態で、基板２００に搭載されてもよい。例えば、図２では、４つの半導体装置１０が１つの半導体モジュールに含まれる。また、第１の演算部３０と第２の演算部２０とがそれぞれ半導体装置（チップ）として設計される場合、第１の演算部３０を含む半導体装置が複数搭載された半導体モジュールが基板２００に搭載されてもよい。さらに、例えば、情報処理装置１００は、ネットワークを介して接続された複数の半導体装置１０によりクラスタを構築してもよい。
【００３９】
図３は、ディープニューラルネットワークの訓練におけるフォワード処理の例を示すフロー図である。フォワード処理では、入力レイヤーおよび所定数の中間レイヤーの各々にデータと重み等のパラメータとが入力される。入力レイヤーでは、入力データとパラメータ１とが演算され、中間データ１が生成される。入力レイヤーの次の中間レイヤーでは、中間データ１とパラメータ２とが演算され、中間データ２が生成される。以降の中間レイヤーにおいても、１つ前の中間レイヤーが生成する中間データと、中間レイヤー毎に設定されたパラメータとが演算され、演算により生成された中間データが次の中間レイヤーに出力される。なお、パラメータを使用しない中間レイヤーも存在する場合がある。中間レイヤーとしては、例えば、畳み込みレイヤー、プーリングレイヤー、全結合レイヤー等がある。
【００４０】
出力レイヤーでは、出力レイヤーの１つ前の中間レイヤーＮ（Ｎ番目のレイヤー）が生成した中間データＮを使用して出力データが求められる。分類問題において誤差を求める出力レイヤーでは、例えば、ソフトマックス関数を活性化関数として使用し、交差エントロピーを誤差関数として使用することで出力データ（解）が求められる。出力レイヤーでは、図４で説明するように、出力データと教師データ（正解データ）とを比較することで、正解との誤差が求められる。
【００４１】
このように、フォワード処理では、ニューラルネットワークの各レイヤーにおいて、入力データとパラメータとが演算されて次のレイヤーに入力するデータが求められ、最終のレイヤーから出力データが出力される（順伝播）。なお、フォワード処理は、ニューラルネットワークの訓練だけでなく、ニューラルネットワークを用いた推論にも使用される。
【００４２】
図４は、ディープニューラルネットワークの訓練におけるバックワード処理およびパラメータの更新処理の例を示すフロー図である。バックワード処理では、フォワード処理とは逆の順序で誤差を伝播させていく誤差逆伝播が行われる。図４において、符号Δは、データの誤差またはパラメータの誤差を示す。パラメータの更新処理は、破線の矢印で示される。
【００４３】
まず、バックワード処理では、誤差を求めるレイヤー（出力レイヤー）において、フォワード処理で生成した出力データと教師データとが比較され、出力レイヤーに入力される中間データＮに対する誤差であるΔ中間データＮが生成される。Δ中間データＮは、Ｎ番目の中間レイヤーが出力する出力データの誤差でもある。
【００４４】
次に、各中間レイヤーにおいて、出力レイヤーに近い中間レイヤーから順に、出力データに対する誤差（Δ中間データ）と、入力データである中間データとが演算され、当該中間レイヤーのパラメータに対する誤差であるΔパラメータが生成される。Δパラメータは、パラメータの変化に対する誤差の変化を示す曲線におけるパラメータの勾配を示す。例えば、中間レイヤー２では、Δ中間データ２と中間データ１とが演算されてΔパラメータ２が求められる。
【００４５】
また、各中間レイヤーにおいて、出力データに対する誤差（Δ中間データ）と、当該中間レイヤーのパラメータとが演算され、当該中間レイヤーの入力データに対する誤差であるΔ中間データが生成される。当該中間レイヤーの入力データに対する誤差（Δ中間データ）は、１つ前の中間レイヤー（または入力レイヤー）の出力データの誤差でもある。例えば、中間レイヤー２では、Δ中間データ２とパラメータ２とが演算されてΔ中間データ１が求められる。
【００４６】
入力レイヤーにおいても中間レイヤーと同様に、Δ中間データ１と入力データとが演算されてΔパラメータ１が求められ、Δ中間データ１とパラメータ１とが演算され、入力データに対する誤差であるΔ入力データが求められてもよい。
【００４７】
パラメータの更新処理では、各中間レイヤーおよび入力レイヤーにおいて、バックワード処理で求めたΔパラメータ（誤差の勾配）を使用して、パラメータが補正される。すなわち、パラメータが最適化される。パラメータの最適化は、Ｍｏｍｅｎｔｕｍ−ＳＧＤ（Stochastic Gradient Descent）やＡＤＡＭ等の勾配降下法を使用して行われる。
【００４８】
このように、バックワード処理では、出力データと教師データとから出力レイヤーに入力されたデータ（出力レイヤーの１つ前の中間レイヤーの出力データ）の誤差が算出される。そして、算出されたデータの誤差を用いて入力データの誤差を算出する処理と、入力データの誤差を用いてパラメータの誤差を算出する処理とが、出力側のレイヤーから順に行われる（誤差逆伝播）。パラメータの更新処理では、バックワード処理で得られたパラメータの誤差に基づいて、パラメータが最適化される。
【００４９】
図５は、フォワード処理およびバックワード処理でのレイヤーアルゴリズムの例を示す説明図である。図５は、ニューラルネットワークにおいて基本的なレイヤーアルゴリズムである全結合レイヤーの例を示す。以下では、画像データの処理の例を説明するが、図５に示すレイヤーアルゴリズムは、画像データ以外のデータを処理する場合にも適用可能である。
【００５０】
説明を簡単にするために、１回のレイヤーアルゴリズムで処理するバッチサイズは、画像サイズと同じであるとし、画像毎に図５に示すレイヤーアルゴリズムが実施されるとする。これに対して、画像を複数に分割した分割画像の各々をバッチサイズとする場合、ループの入れ子（ネスト）の数が図５よりも増加する。なお、画像処理で頻繁に使用される畳み込みレイヤーも、畳み込みの構造を無視すれば、要素数が大きい全結合レイヤーと考えることができる。
【００５１】
フォワード処理において、符号Ｎは、レイヤーの並び順（レイヤー番号）を示し、レイヤー番号が大きいレイヤーほど出力側に位置することを示す。符号ＤＮ＋１は、レイヤーから出力される出力データを示し、符号ＤＮは、レイヤーに入力される入力データを示し、符号ＷＮは、レイヤーに入力されるパラメータを示す。符号Ｂは、データの要素数（処理する画素数）を示し、符号ＯＣは、出力チャネル数（すなわち、当該レイヤーに含まれるユニット数）を示し、符号ＩＣは、入力チャネル数（すなわち、１つ前のレイヤーに含まれるユニット数）を示す。フォワード処理では、図３で説明したように、入力レイヤーおよび中間レイヤーにおいて、出力データＤＮ＋１（中間データ）を算出する処理が、出力チャネル毎に、入力データＤＮとパラメータＷＮとを変えながら行われる。
【００５２】
バックワード処理において、符号ΔＤＮ＋１は、出力側のレイヤーから受けるデータの誤差を示し、符号ΔＤＮは、入力側のレイヤーに出力するデータの誤差を示す。ここで、出力側は、フォワード処理においてデータが出力される側を示し、入力側は、フォワード処理においてデータが入力される側を示す。符号ΔＷＮは、パラメータの誤差を示し、符号ＷＮは、パラメータを示す。その他の符号は、フォワード処理と同じである。
【００５３】
バックワード処理では、図４で説明したように、入力誤差ΔＤＮ（Δ中間データまたはΔ入力データ）を算出する処理が、出力チャネル毎に、出力誤差ΔＤＮ＋１とパラメータＷＮとを変えながら行われる。また、パラメータ誤差ΔＷＮ（Δパラメータ）を算出する処理が、出力チャネル毎に、出力誤差ΔＤＮ＋１と入力データＤＮとを変えながら行われる。
【００５４】
ここで、フォワード処理およびバックワード処理等のニューラルネットワークの訓練を複数の計算ノード（例えば、半導体装置１０と外部メモリ４０のペア）で並列に実行する場合、計算ノードの割り当て方として、以下の３つが考えられる。
（割り当て方１）データを、画像毎または画像を分割した分割画像毎に計算ノードを割り当てる。すなわち、データを要素毎に計算ノードに割り当てる（バッチ／画像分割）。
（割り当て方２）データをチャネル（各レイヤーのユニット）方向に分割して計算ノードに割り当てる（チャネル分割）。
（割り当て方３）データをレイヤー毎に計算ノードに割り当てる（レイヤー分割）。
【００５５】
チャネル分割では、レイヤー単位で入出力するデータを全対全で通信する必要があるため、通信ネックになりやすい。レイヤー分割では、レイヤー間で入出力するデータを計算ノード間で移動する必要があるため、通信ネックになりやすく、移動するデータの管理が複雑になる。バッチ／画像分割では、計算ノード間でパラメータに関するデータを縮約（Reduce）または放送（Broadcast）する必要がある。しかし、大半のニューラルネットワークの構成では、演算に使用するパラメータのサイズは、演算に使用する入力データ等のデータのサイズより小さいため、通信ネックになりにくい。したがって、計算ノード間での通信量を抑えるためには、サイズが比較的大きいデータを要素毎に計算ノードに割り当てるバッチ／画像分割（割り当て方１）により訓練することが効率をよくする場合が多い。
【００５６】
外部メモリ４０の帯域は、サイズが比較的大きいデータを考慮して設計する必要がある。例えば、バッチ／画像分割によるニューラルネットワークの訓練では、レイヤー間で入出力されるデータは、演算を実行する演算器毎に異なるため、データを外部メモリ４０に退避する場合、帯域を広くする必要がなる。
【００５７】
一方、バッチ／画像分割によるニューラルネットワークの訓練では、サイズが比較的小さいパラメータのみを外部メモリ４０に対して入出力する場合、外部メモリ４０の帯域を使い切れないおそれがある。例えば、パラメータは、外部メモリ４０から各演算器に同じ値が放送され、パラメータの誤差は縮約されて外部メモリ４０に格納される。放送と縮約は、互いに対となる通信であり、データの入出力方向は逆であるが、帯域のオーダーは変わらない。なお、パラメータを最適化するためのパラメータの更新処理は、畳み込み演算等のレイヤーアルゴリズムの処理に比べて演算回数が少ないため、多数の演算器が搭載される第２の演算部２０でこれを行った場合、演算器の使用効率が低下するおそれがある。本実施形態では、これら問題を解決することができる。
【００５８】
また、ニューラルネットワークの訓練においては、縮約・放送という通信が多数の演算器に対して実行される。この種の通信の帯域は、各演算器の近傍の通信路の幅に制限される場合があり、この場合、外部メモリ４０の帯域を使い切れないおそれがある。例えば、第２の演算部２０において演算を行う場合、レイヤーアルゴリズムの計算時にはパラメータの縮約・放送の通信が必要になり、レイヤーアルゴリズムの計算を行うタイミングにおいて、外部メモリ４０の帯域を使い切れなくなる場合がある。一方、本実施形態では、第２の演算部２０によるレイヤーアルゴリズムの計算と並列に、第１の演算部３０においてパラメータの更新処理という付加的な計算を実行することにより、外部メモリ４０の帯域を有効に利用することができる。
【００５９】
図６は、パラメータを最適化する勾配降下法の例を示す説明図である。図６において、符号ｔ−１が付いたパラメータは、更新前のパラメータを示し、符号ｔが付いたパラメータは、更新後のパラメータを示す。符号ΔＷｔは、更新直前のパラメータの誤差の勾配を示す。
【００６０】
Ｍｏｍｅｎｔｕｍ−ＳＧＤでは、パラメータ誤差ΔＷｔから新たなパラメータＷｔを算出するために、２回の乗算と２回の加減算とが行われる。ＡＤＡＭでは、パラメータ誤差ΔＷｔから新たなパラメータＷｔを算出するために、６回の乗算と、６回の加減算と、１回の平方根演算と、１回の除算が行われる。これに対して、図５で示したレイヤーアルゴリズムの計算においては、パラメータサイズとデータサイズの積に比例する回数の積和計算が実行される。このように、パラメータの更新時に実行される演算の回数は、畳み込み演算等のレイヤーアルゴリズムで実行される演算の回数より少ない。このため、パラメータを更新する演算のみを演算器で実行する場合、演算性能当たりのメモリの帯域の比であるＢ／Ｆ比が高くなり、演算器の数が多いベクトル演算部等を使用すると、大半の演算器が遊んでしまうことになる。
【００６１】
図７は、図１の半導体装置１０によりバックワード処理とパラメータの更新処理とを実行する場合の例を示すシーケンス図である。すなわち、図７は、半導体装置１０の制御方法の例を示す。図７は、ディープニューラルネットワークの誤差逆伝播の第２の演算部２０による実行と、第１の演算部３０によるパラメータの更新処理とを並列に実行する例を示す。図７では、ディープニューラルネットワークの複数のレイヤーのうち、レイヤーＮ−１の処理と、レイヤーＮ−１の１つ後ろのレイヤーＮの処理の一部と、レイヤーＮ−１の１つ前のレイヤーＮ−２の処理の一部が示される。
【００６２】
パラメータＷ、Ｍ、Ｖに付した符号Ｔは、更新前であることを示し、パラメータＷ、Ｍ、Ｖに付した符号Ｔ＋１は、更新後であることを示す。例えば、パラメータＷは、ＡＤＡＭの手法によりパラメータＭ、Ｖとともに更新される。
【００６３】
五角形はデータ転送を示し、突出した角部が転送先を示す。五角形は、一度にまとめてデータ転送を行うことを示すとは限らず、複数回に分けてデータ転送を行うことを示してもよい。データ転送を複数回に分けて行う場合、第１のデータ転送制御部３４または第２のデータ転送制御部３５は、データ転送毎にデータ転送命令を発行する。以下では、外部メモリ４０と第１のメモリ３２との間でデータを転送するデータ転送命令は、外部データ転送命令と称し、第１のメモリ３２および第２のメモリ２２間でデータを転送するデータ転送命令は、内部データ転送命令と称する。図１に示した命令デコーダ３３は、外部データ転送命令をデコードした場合、第２のデータ転送制御部３５に制御信号を出力し、内部データ転送命令をデコードした場合、第１のデータ転送制御部３４に制御信号を出力する。
【００６４】
データ転送と同様に、第２の演算部２０によるデータ誤差ΔＤの算出処理およびパラメータ誤差ΔＷの算出処理と、第１の演算部３０によるパラメータＷの算出処理は、複数回に分けて行われてもよい。これら算出処理では、第２の演算器２１および第１の演算器３１は、１つの命令で複数のデータに対する演算を実行してもよい（ＳＩＭＤ方式）。この際、命令デコーダ３３に供給されるＳＩＭＤ命令は、演算するデータの数を指定可能であってもよい（可変長のＳＩＭＤ方式）。
【００６５】
第１の演算部３０は、内部データ転送命令の受信に基づいて、第１のメモリ３２に保持しているパラメータＷＮ，Ｔを、第２の演算部２０の第２のメモリ２２に転送する。このため、半導体装置１０は、第２のバスＥＢＵＳを使うことなく、パラメータＷＮ，Ｔを第２のメモリ２２に転送することができる。パラメータＷＮ，Ｔは、フォワード処理時に使用したレイヤーＮのパラメータであり、レイヤーＮのパラメータの更新処理時に外部メモリ４０から第１のメモリ３２に転送済みである。第２の演算部２０は、図５に示したように、データ誤差ΔＤＮ＋１と転送されたパラメータＷＮ，Ｔとを使用してデータ誤差ΔＤＮを算出し、算出したデータ誤差ΔＤＮを第２のメモリ２２に格納する。なお、データ誤差ΔＤＮ＋１は、レイヤーＮ＋１のバックワード処理時に算出されており、第２のメモリ２２に保持されている。
【００６６】
第２の演算部２０によるレイヤーＮのデータ誤差ΔＤＮの算出中に、第１の演算部３０は、外部データ転送命令を受信し、外部メモリ４０に保持されたデータＤＮ−１を、第１のメモリ３２に転送し、さらに、第１のメモリ３２から第２のメモリ２２に転送する。データ誤差ΔＤＮの算出中、外部メモリ４０はアクセスされないため、第２のバスＥＢＵＳの帯域の空きを利用してデータＤＮ−１を第１のメモリ３２に転送することができる。
【００６７】
次に、第２の演算部２０は、レイヤーＮの処理で算出したデータ誤差ΔＤＮと外部メモリ４０から転送されたデータＤＮ−１とを使用してパラメータ誤差ΔＷＮ−１を算出し、算出したパラメータ誤差ΔＷＮ−１を第２のメモリ２２に格納する。第１の演算部３０は、内部データ転送命令の受信に基づいて、パラメータ誤差ΔＷＮ−１を第２のメモリ２２から第１のメモリ３２に順次転送する。例えば、図２の命令制御部６０は、第２の演算部２０によるパラメータ誤差ΔＷＮ−１を算出するタイミングと、パラメータ誤差ΔＷＮ−１を第１のメモリ３２に転送する内部データ転送命令のタイミングが合うように、第２の演算部２０にタイミング信号を出力する。
【００６８】
第１の演算部３０は、外部データ転送命令の受信に基づいて、パラメータＷＮ−１，Ｔ、ＭＮ−１，Ｔ、ＶＮ−１，Ｔを外部メモリ４０から第１のメモリ３２に転送する。また、第１の演算部３０の第１の演算器３１は、命令デコーダ３３がデコードした演算命令に基づいて、パラメータＷＮ−１の更新処理を行う。すなわち、第１の演算器３１は、図６に示したＡＤＡＭの演算を実行し、新たなパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１を算出して第１のメモリ３２に格納する。第１の演算部３０は、外部データ転送命令の受信に基づいて、第１のメモリ３２に保持された更新後のパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１を外部メモリ４０に転送する。
【００６９】
図７に示すように、第１の演算部３０によるパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１の算出処理は、第２の演算部２０によるパラメータ誤差ΔＷの算出と並列に実行される。なお、パラメータ誤差ΔＷＮ−１は、当該レイヤーＮ−１のパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１の算出のみに使用されるため、外部メモリ４０に待避される必要はない。
【００７０】
次に、レイヤーＮのデータ誤差ΔＤＮの算出と同様に、第２の演算部２０の第２の演算器２１を使用してレイヤーＮ−１のデータ誤差ΔＤＮ−１が算出される。第１の演算部３０は、内部データ転送命令の受信に基づいて、データ誤差ΔＤＮ−１の算出に使用されるパラメータＷＮ−１，Ｔを第１のメモリ３２から第２の演算部２０の第２のメモリ２２に転送する。パラメータＷＮ−１，Ｔは、直前のパラメータ更新処理時に外部メモリ４０から第１のメモリ３２に転送されているため、外部メモリ４０から改めて転送する必要はなく、第２のバスＥＢＵＳの帯域を使わなくて済む。
【００７１】
第２の演算部２０の第２の演算器２１は、第２のメモリ２２に保持されたデータ誤差ΔＤＮとパラメータＷＮ−１，Ｔとを使用してデータ誤差ΔＤＮ−１を算出し、算出したデータ誤差ΔＤＮ−１を第２のメモリ２２に格納する。なお、データ誤差ΔＤＮは、レイヤーＮのバックワード処理時に算出され、第２のメモリ２２に保持されている。第２の演算部２０によるレイヤーＮ−１のデータ誤差ΔＤＮ−１の算出中に、第１の演算部３０は、外部データ転送命令に基づいて、第１のメモリ３２を介して外部メモリ４０から第２のメモリ２２にデータＤＮ−２を転送する。
【００７２】
次に、レイヤーＮ−１のパラメータ誤差ΔＷＮ−１の算出と同様に、第２の演算部２０の第２の演算器２１を使用してレイヤーＮ−２のパラメータ誤差ΔＷＮ−２が算出される。第２の演算部２０は、データ誤差ΔＤＮ−１と外部メモリ４０から第２のメモリ２２に転送されたデータＤＮ−２とを使用してパラメータ誤差ΔＷＮ−２を算出し、算出したパラメータ誤差ΔＷＮ−２を第２のメモリ２２に格納する。第１の演算部３０は、内部データ転送命令の受信に基づいて、パラメータ誤差ΔＷＮ−２を第２のメモリ２２から第１のメモリ３２に順次転送する。第１の演算部３０は、外部データ転送命令の受信に基づいて、パラメータＷＮ−２，Ｔ、ＭＮ−２，Ｔ、ＶＮ−２，Ｔを外部メモリ４０から第１のメモリ３２に転送する。そして、第１の演算部３０の第１の演算器３１は、演算命令に基づいて、新たなパラメータＷＮ−２，Ｔ＋１、ＭＮ−２，Ｔ＋１、ＶＮ−２，Ｔ＋１を算出することでパラメータを更新する。第１の演算部３０は、外部データ転送命令の受信に基づいて、第１のメモリ３２に保持された更新後のパラメータＷＮ−２，Ｔ＋１、ＭＮ−２，Ｔ＋１、ＶＮ−２，Ｔ＋１を外部メモリ４０に転送する。
【００７３】
本実施形態では、第２の演算部２０によるパラメータ誤差ΔＷの算出中に、第１の演算部３０によりパラメータＷの更新処理を実行することができる。すなわち、バックワード処理とパラメータＷの更新処理とを、異なる第２の演算器２１および第１の演算器３１により並列に実行することができる。これにより、図４に示したバックワード処理およびパラメータの更新処理に掛かる時間を短縮することができる。また、パラメータ誤差ΔＷの算出中にパラメータＷの更新処理を実行するため、パラメータＷの更新処理のみに使用するパラメータ誤差ΔＷは、外部メモリ４０に待避させる必要がない。したがって、パラメータ誤差ΔＷの転送を考慮せずに第２のバスＥＢＵＳの帯域を設計できる。第２のバスＥＢＵＳを使用した無駄なデータ転送をなくすことができるため、半導体装置１０の消費電力を削減することができる。
【００７４】
さらに、図６で説明したように、ニューラルネットワークで使用されるパラメータを更新する処理で実行される演算の回数は、フォワード処理およびバックワード処理での演算の回数に比べて少ない。このため、パラメータの更新処理を第２の演算部２０の第２の演算器２１に実行させる場合、Ｂ／Ｆ比が高くなり、第２の演算器２１の使用効率が低下してしまう。しかし、第２の演算器２１によるパラメータ誤差ΔＷの算出中に、第１の演算部３０の第１の演算器３１によりパラメータＷの更新処理を実行することで、第２の演算器２１の使用効率が低下することを防止できる。
【００７５】
また、第１の演算器３１は、パラメータの更新処理の演算数に合わせた数の演算器に設計可能であるため、パラメータの更新処理時に第１の演算部３０の第１の演算器３１の使用効率を最適にすることができる。さらに、第２の演算部２０によるデータ誤差ΔＤの算出時に、パラメータＷを外部メモリ４０から転送しなくてよいため、第２のバスＥＢＵＳの帯域を、パラメータＷの量を考慮することなく設計することができる。
【００７６】
図７はまとめて実行されているように見えるが、実際には、図８に示すように、パラメータの更新処理と、それに付随するパラメータ等の転送動作、パラメータ誤差ΔＷの算出処理は、複数に分割して実行される。
【００７７】
図８は、図７におけるレイヤーＮ−１のパラメータ誤差ΔＷＮ−１の算出処理とパラメータＷＮ−１、ＭＮ−１、ＶＮ−１の更新処理との詳細を示す説明図である。パラメータ誤差ΔＷＮ−１の算出処理とパラメータＷＮ−１、ＭＮ−１、ＶＮ−１の更新処理とは、任意の数に分割して並列に実行可能である。例えば、図８は、処理を４つに分割して実行する例を示し、あるいは、全体の処理を１００個に分割したうちの４つの処理を示している。以下では、全体の処理を４つに分割して並列に実行する例について説明する。
【００７８】
処理（１）では、まず、第２の演算部２０は、第２のメモリ２２が保持するデータ誤差ΔＤＮ（４分の１）と第２のメモリ２２に転送されたデータＤＮ−１（４分の１）とを使用してパラメータ誤差ΔＷＮ−１（４分の１）を算出する。第２の演算部２０は、算出したパラメータ誤差ΔＷＮ−１を第２のメモリ２２に格納する。
【００７９】
処理（１）では、レイヤーＮ−１のパラメータＷＮ−１，Ｔ、ＭＮ−１，Ｔ、ＶＮ−１，Ｔのうち最初の４分の１が外部メモリ４０から第１のメモリ３２に転送される。また、第２の演算部２０が算出して第２のメモリ２２に格納した最初の４分の１のパラメータ誤差ΔＷＮ−１が第２のメモリ２２から第１のメモリ３２に転送される。
【００８０】
処理（１）では、第１の演算部３０は、第１のメモリ３２に転送されたパラメータＷＮ−１，Ｔ、ＭＮ−１，Ｔ、ＶＮ−１，Ｔ（４分の１）と、パラメータ誤差ΔＷＮ−１（４分の１）とを使用して、更新後のパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１（４分の１）を算出する。算出されたパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１は、外部メモリ４０に転送される。また、パラメータＷＮ−１，Ｔは、第１のメモリ３２から第２の演算部２０の第２のメモリ２２に転送される。
【００８１】
処理（２）、処理（３）、処理（４）においても、処理（１）と同様に、データ誤差ΔＤＮの４分の１とデータＤＮ−１の４分の１とを使用してパラメータ誤差ΔＷＮ−１の４分の１が算出される。また、パラメータＷＮ−１，Ｔ、ＭＮ−１，Ｔ、ＶＮ−１，Ｔの４分の１とパラメータ誤差ΔＷＮ−１の４分の１とを使用して、更新後のパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１の４分の１が算出される。算出されたパラメータＷＮ−１，Ｔ＋１、ＭＮ−１，Ｔ＋１、ＶＮ−１，Ｔ＋１は、外部メモリ４０に転送され、パラメータＷＮ−１，Ｔは、第１のメモリ３２から第２の演算部２０の第２のメモリ２２に転送される。
【００８２】
なお、第２の演算部２０は、パラメータ誤差ΔＷＮ−１の算出が完了した後、データ誤差ΔＤＮ−１の算出を開始する。データ誤差ΔＤＮ−１の算出処理の分割数は、パラメータ誤差ΔＷＮ−１の算出処理の分割数と相違してもよく、分割せずにまとめて実行されてもよい。
【００８３】
図９は、図７のシーケンスを実行する第２の演算部２０および第１の演算部３０の動作の例を示すフロー図である。すなわち、図９は、半導体装置１０の制御方法の例を示す。図４および図７と同様の動作については、詳細な説明を省略する。第２の演算部２０によるバックワード処理は、第２の演算部２０によるフォワード処理の完了後に実行される。第１の演算部３０によるパラメータの更新処理は、第２の演算部２０によるバックワード処理の進行に合わせて実行される。図９に示す例では、パラメータの更新処理は、ＡＤＡＭの手法により実行されるが、Ｍｏｍｅｎｔｕｍ−ＳＧＤや他の手法により実行されてもよい。
【００８４】
まず、第２の演算部２０は、ステップＳ２１において、バックワード処理の出力レイヤーで算出した出力データと、予め用意された教師データとを使用してデータ誤差ΔＤを算出する。次に、第２の演算部２０は、ステップＳ２２において、データ誤差ΔＤ（出力レイヤー側）と当該レイヤーの入力データＤとを使用してパラメータ誤差ΔＷを算出する。算出したパラメータ誤差ΔＷは、第１の演算部３０によるパラメータの更新処理に使用される。
【００８５】
次に、第２の演算部２０は、ステップＳ２３において、出力側のデータ誤差ΔＤとパラメータＷとを使用して入力側のデータ誤差ΔＤを算出する。次に、第２の演算部２０は、ステップＳ２４において、入力レイヤーの処理を実行した場合、動作を終了し、入力レイヤー以外の処理を実行した場合、１つ前のレイヤー（入力レイヤー側）に対する動作を実行するためにステップＳ２２に戻す。
【００８６】
一方、第１の演算部３０は、ステップＳ３１において、当該レイヤーの入力データＤを外部メモリ４０から第１のメモリ３２に転送し、さらに、第２のメモリ２２に転送する。なお、初回のステップＳ３１は、出力レイヤーの１つ前のレイヤーに対する動作である。入力データＤは、ステップＳ２２で使用される。次に、第１の演算部３０は、ステップＳ３２において、第１のデータ転送制御部３４を制御し、第２の演算部２０が算出したパラメータ誤差ΔＷを第２のメモリ２２から第１のメモリ３２に転送する。
【００８７】
第１の演算部３０は、ステップＳ３３において、第２のデータ転送制御部３５を制御し、更新前のパラメータＷ、Ｍ、Ｖを外部メモリ４０から第１のメモリ３２に転送する。次に、第１の演算部３０は、ステップＳ３４において、更新前のパラメータＷ、Ｍ、Ｖとパラメータ誤差ΔＷとを使用して、更新後のパラメータＷ、Ｍ、Ｖを算出する。すなわち、第１の演算部３０は、パラメータの更新処理を実行する。次に、第１の演算部３０は、ステップＳ３５において、更新後のパラメータＷ、Ｍ、Ｖを第１のメモリ３２から外部メモリ４０に転送する。
【００８８】
ここで、ステップＳ３２によるパラメータ誤差ΔＷの第２のメモリ２２から第１のメモリ３２への転送と、ステップＳ３３による更新前のパラメータＷ、Ｍ、Ｖの外部メモリ４０から第１のメモリ３２への転送とは、互いに独立に実行される。すなわち、第１のデータ転送制御部３４と第２のデータ転送制御部３５とは、互いに別の情報を転送する。外部メモリ４０の帯域は大きい。さらに、ステップＳ３４での第１の演算部３０によるパラメータの更新処理では、第２のバスＥＢＵＳおよび第１のバスＩＢＵＳは、使用されない。このため、ステップＳ３２、Ｓ３３、Ｓ３４、Ｓ３５の動作の一部は、タイミングを重複して実行することができる。但し、パラメータの更新処理に使用するデータおよびパラメータは、更新処理の実行前に第１のメモリ３２に格納されている必要がある。
【００８９】
また、図８で説明したように、第２の演算部２０によるステップＳ２２の動作と、第１の演算部３０によるＳ３２、Ｓ３３、Ｓ３４、Ｓ３５の動作とは、所定数のデータと所定数のパラメータのグループに区切って、複数回に分けて実行されてもよい。さらに、第２のバスＥＢＵＳを介した外部メモリ４０からのデータＤＮ−１の転送を複数回に分けて実行してもよい。
【００９０】
次に、第１の演算部３０は、ステップＳ３６において、更新前のパラメータＷを第１のメモリ３２から第２のメモリ２２に転送する。次に、第１の演算部３０は、ステップＳ３７において、入力レイヤーのパラメータの更新処理を実行した場合、動作を終了する。また、第１の演算部３０は、入力レイヤー以外のパラメータの更新処理を実行した場合、１つ前のレイヤー（入力レイヤー側）に対する動作を実行するためにステップＳ３１に戻す。
【００９１】
なお、図７から図９では、第１の演算部３０が第２の演算部２０の代わりにパラメータＷの更新処理を実行することで、図４に示したバックワード処理とパラメータの更新処理のトータルの処理時間を短縮し、第２のバスＥＢＵＳの帯域を減らす例を説明した。しかし、第１の演算部３０が実行する処理は、パラメータＷの更新処理に限定されない。例えば、第１の演算部３０は、第２の演算部２０の計算負荷を軽減するとともに、外部メモリ４０から第２のメモリ２２へのデータの転送量を削減するための他の処理を実行してもよい。また、第１の演算部３０の第１の演算器３１が搭載する演算器の種類は、第１の演算部３０で実行する処理に応じて適宜変更することができる。また、第１の演算部３０は、第２の演算部２０の代わりに、パラメータの更新処理と他の処理とを実行するために設計されてもよく、第１の演算器３１には、これら処理を実行するために必要な演算器を搭載することができる。
【００９２】
図７に示した動作を実行する半導体装置１０は、第２のバスＥＢＵＳの帯域を抑えて、バックワード処理およびパラメータの更新処理を効率よく実行できる。また、図８に示したように、パラメータの更新処理を複数回に分けて実行することで、パラメータの縮約・放送時に外部メモリ４０の帯域が余るタイミングが発生することを防止することができる。さらに、半導体装置１０では、第２の演算部２０がパラメータの更新処理を実行しないため、パラメータの更新処理の実行時のＢ／Ｆ比を考慮することなく、第２の演算部２０および第１のバスＩＢＵＳを設計することができる。
【００９３】
本実施形態では、第1の演算部３０と、第２の演算部２０がそれぞれ単一の命令列を順次実行するよう構成されており、レイヤーアルゴリズムとパラメータ更新処理を並列に実行できる。したがって、本実施形態は、レイヤーアルゴリズムとパラメータ更新処理を並列に実行するための構成を備えている。
【００９４】
レイヤーアルゴリズムとパラメータ更新処理を並列に実行するための構成の他の一例として、二つ以上の命令ストリームを実行可能な単一種の演算器がグローバルキャッシュを介して外部メモリと接続する構成を考えることができる。この構成では、演算部をレイヤーアルゴリズムとパラメータ更新処理というＢ／Ｆ比が大きく異なる計算のどちらにも対応できるように設計しておく必要があることから、回路設計の冗長性が増すおそれがある。例えば、演算部を階層化し、各階層で一次キャッシュ、二次キャッシュのような内部メモリを持つような構成は、パラメータ更新処理には必要ないが、レイヤーアルゴリズムでは性能向上の面で大きな効果があるので設置される場合がある。しかし、このような構成ではグローバルキャッシュと個々の演算器とのデータパスが長くなるため、全体の処理時間が伸びてしまうおそれがある。これに対して、本実施形態の第1の演算部３０では、第一の演算器３１と、第一のメモリ３２を、物理的に近い場所に設置できるので、遅延の発生を減少させつつパラメータ更新処理を実行することができる。
【００９５】
また、さらに他の例として、第１の演算部３０と、第２の演算部２０が外部メモリを経由してデータをやりとりする構成も考えられる。このような構成では、第２の演算部２０がパラメータ誤差ΔＷを外部メモリに書き出し、第１の演算部３０がこのパラメータ誤差ΔＷの値を外部メモリから読み出して、パラメータ更新処理を実行する必要がある。このため、本実施形態と比べて外部メモリにアクセスする頻度とデータ量が増えてしまう。このような構成では、本実施形態と比べて全体の処理時間が伸びると考えられる。
【００９６】
また、パラメータ誤差ΔＷを外部メモリ４０に待避せずに、第２の演算部２０で保持しておき、保持しているパラメータ誤差ΔＷを使用してパラメータの更新値を算出し、算出した更新値を外部メモリ４０に格納する場合も考えられる。例えば、ＡＤＡＭを利用して、パラメータの最適化をする場合、レイヤーアルゴリズムの処理で使用するパラメータＷ以外にパラメータＭ、Ｖが必要になり、これらパラメータＭ、Ｖも第２の演算部２０に保持する必要がある。この場合、第２の演算部２０の第２のメモリ２２の容量が不足するおそれがあり、また、バッファ容量を不足させないために、パラメータＭ、Ｖだけを外部メモリ４０に待避することは効率的とは言えない。
【００９７】
また、パラメータＭ、Ｖを使用せずに、パラメータ誤差ΔＷのみからパラメータＷの更新値を求めることで、第２のメモリ２２の容量不足が避けられる場合にも、パラメータＷの最適値への収束が遅くなり、パラメータの更新処理時間が長くなってしまうおそれがある。
【００９８】
さらに、第２の演算部２０と外部メモリ４０との間にキャッシュメモリを設けることで、外部メモリ４０の帯域を削減することが考えられる。例えば、第２の演算部２０がパラメータＷやパラメータ誤差ΔＷをキャッシュメモリと送受信している間に、キャッシュメモリと外部メモリ４０との間で画像データＤ等を通信する。
【００９９】
これにより、パラメータＷやパラメータ誤差ΔＷの通信において、第２の演算部２０側に起因する通信帯域のボトルネックが存在する場合であっても、キャッシュメモリと外部メモリ４０とが常に通信しているような状況を作ることが可能である。しかしながら、この方法では、高速な外部メモリ４０を利用できる場合も、あえて帯域を削減することとなり、例えば、パラメータの更新処理のような、Ｂ／Ｆ比の高い処理において外部メモリ４０の帯域がボトルネックとなり処理時間が伸びてしまうおそれがある。
【０１００】
これに対して、本実施形態では、第１の演算部３０によるパラメータの更新処理を第２の演算部２０によるレイヤーアルゴリズムの処理と並列に実行することができる。このため、第１の演算部３０と外部メモリ４０とが常に通信しているような状況を作り出すことができ、外部メモリ４０の帯域を有効に使うことができる。
【０１０１】
さらに、この場合、第２の演算部２０とキャッシュメモリ間の帯域が確保できたとしても、キャッシュメモリと外部メモリ４０間の帯域が確保できず、例えば、Ｂ／Ｆ比の高いパラメータの更新処理がシーケンス全体のボトルネックになるおそれがある。
【０１０２】
なお、レイヤーアルゴリズムの処理とパラメータの更新処理とのＢ／Ｆ比は、大きく異なり、異なるレイヤー間のＢ／Ｆ比も大きく異なる場合がある。これは、画像サイズやチャネル数などによって、レイヤーアルゴリズムの計算量、入出力データサイズおよびパラメータサイズのバランスが変わるためである。
【０１０３】
例えば、画像処理向けのディープラーニングの典型的な構成であるＲｅｓＮｅｔでは、合計４回のプーリングが実行され、プーリング毎に画像サイズ（ＸＹ平面の面積）は１／４となり、チャネル数は２倍となる。ＲｅｓＮｅｔでは、各レイヤーの計算量が概ね一定となる設計がなされているので、入力層に近いレイヤーでは、画像データの通信がボトルネックとなりやすく、出力層に近いレイヤーでは、計算あるいは重みの通信がボトルネックになりやすい。特に、バッチ／画像分割により計算ノードを割り当てる場合、演算器の使用効率を向上させるため、画像サイズや画像のバッチサイズを大きくとることが多い。つまり、画像処理向けのディープラーニングの典型的な構成では、レイヤーアルゴリズムのＢ／Ｆ比は、レイヤーが入出力する画像サイズに概ね比例し、入力層に近いレイヤーほど上昇し、出力層に近いレイヤーほど下降する傾向を持つ。
【０１０４】
このようにディープラーニングの計算において支配的な計算量を持つ、レイヤーアルゴリズム間においても、Ｂ／Ｆ比には無視できない差がある。このため、Ｂ／Ｆ比の高いレイヤーにおいても充分な通信帯域を確保できるように、外部メモリ４０の通信帯域を設計しておく必要があるため、外部メモリ４０自体の帯域を削減することは困難である。
【０１０５】
さらに、レイヤーアルゴリズムのＢ／Ｆ比に応じて、外部メモリ４０のクロック周波数を動的に変えることで、外部メモリ４０とキャッシュメモリとが常に通信しているような状況を作り出すことも可能である。しかしながら、このような設計は、システム構成を複雑化し、半導体装置の安定動作に支障がきたすおそれがある。また、パラメータ更新処理とレイヤーアルゴリズムの処理との並列実行を行わないため、パラメータ更新処理をレイヤーアルゴリズムの処理とは異なるタイミングで実施する必要がある。
【０１０６】
これに対して、本実施形態の構成ではパラメータ更新処理とレイヤーアルゴリズムの計算とを並列に実行することが可能であり、さらに、並列実行させるかどうかはソフトウェアにより制御可能である。このため、例えば、Ｂ／Ｆ比の高いレイヤーアルゴリズムでは並列実行させず、Ｂ／Ｆ比の低いレイヤーアルゴリズムでは並列実行させるなどの対応も実現できる。したがって、本実施形態の構成では、レイヤーアルゴリズムごとに異なるＢ／Ｆ比に応じて、ディープニューラルネットワークの処理を効率的に実行することができる。
【０１０７】
なお、本実施形態は、上述の例と比べて優位性を有するものであるが、本発明は、上述の例の構成の一部または全部を備えていてもよい。
【０１０８】
図１０は、図１の第１のメモリ３２の例を示すブロック図である。第１のメモリ３２は、動作制御部ＣＮＴＬと、アドレスデコーダＡＤＥＣと、データ入出力部ＤＩＯと、複数のバンクＢＫ（この例では、４個）を含むメモリセルアレイＡＲＹとを有している。
【０１０９】
アドレスデコーダＡＤＥＣは、図１の第１および第２のデータ転送制御部３４、３５または命令デコーダ３３のいずれかから受けるバンク番号に基づいて、アクセスするバンクＢＫのいずれかを選択し、アドレスに基づいて選択したバンクＢＫ内のメモリセルを選択する。動作制御部ＣＮＴＬは、第１および第２のデータ転送制御部３４、３５または命令デコーダ３３のいずれかから受けるポート番号、リードイネーブル、ライトイネーブル等の制御信号に基づいて、メモリセルアレイＡＲＹおよびデータ入出力部ＤＩＯの動作を制御する。
【０１１０】
データ入出力部ＤＩＯは、受信するポート番号に応じて、入出力ポートＰ（Ｐ０、Ｐ１、Ｐ２）のいずれかをメモリセルアレイＡＲＹに接続し、メモリセルアレイＡＲＹに対してデータを読み書きする。入出力ポートＰ０は、第１の演算器３１に接続され、入出力ポートＰ１は、第２のバスＥＢＵＳを介して外部メモリ４０に接続され、入出力ポートＰ２は、第１のバスＩＢＵＳを介して第２の演算部２０の第２のメモリ２２に接続される。特に限定されないが、メモリセルアレイＡＲＹがアクセスされる毎にデータ入出力部ＤＩＯが入力または出力するデータは、例えば、２のｎ乗（ｎは、４以上の整数）でもよい。なお、第１の演算器３１で処理するデータに誤り検出訂正用のデータが付加される場合、データのビット数は２のｎ乗＋ｍビットでもよい（ｍは、誤り検出訂正用のデータのビット数）。
【０１１１】
データ入出力部ＤＩＯは、リードイネーブルに基づいてバンクＢＫのいずれかから読み出されるデータをポート番号に応じて選択される入出力ポートＰのいずれかに出力する。データ入出力部ＤＩＯは、ライトイネーブルに基づいて、ポート番号に応じて選択される入出力ポートＰで受けるデータを、バンク番号で選択されるバンクＢＫに出力し、バンクＢＫ内のメモリセルに書き込む。
【０１１２】
ポート番号、アドレスおよびバンク番号の各々は、複数ビットで構成され、オアゲートＯＲは、信号線毎に設けられる。リードイネーブルおよびライトイネーブルは、論理レベルにより有効または無効を示す１ビットの信号である。リードイネーブルは、メモリセルアレイＡＲＹからデータを読み出す場合に有効レベルになり、ライトイネーブルは、メモリセルアレイＡＲＹにデータを書き込む場合に有効レベルになる。
【０１１３】
図１に示した命令デコーダ３３は、演算命令に基づいて、第１の演算器３１で使用するデータを第１のメモリ３２から読み出すために、アドレス、バンク番号、入出力ポートＰ０を選択するポート番号およびリードイネーブルを第１のメモリ３２に出力する。また、命令デコーダ３３は、第１の演算器３１での演算の完了に基づいて、演算結果を第１のメモリ３２に書き込むために、アドレス、バンク番号、入出力ポートＰ０を選択するポート番号およびライトイネーブルを第１のメモリ３２に出力する。
【０１１４】
命令デコーダ３３は、外部メモリ４０から第１のメモリ３２にデータを転送するデータ転送命令に基づいて、外部メモリ４０の読み出し開始アドレス、第１のメモリ３２の書き込み開始アドレス、転送サイズおよび入出力情報を第２のデータ転送制御部３５に出力する。第２のデータ転送制御部３５は、命令デコーダ３３から受信した情報に基づいて、書き込みアドレス、バンク番号、入出力ポートＰ１を選択するポート番号およびライトイネーブルを第１のメモリ３２に出力する。
【０１１５】
命令デコーダ３３は、第１のメモリ３２から外部メモリ４０にデータを転送するデータ転送命令に基づいて、第１のメモリ３２の読み出し開始アドレス、外部メモリ４０の書き込み開始アドレス、転送サイズおよび入出力情報を第２のデータ転送制御部３５に出力する。第２のデータ転送制御部３５は、命令デコーダ３３から受信した情報に基づいて、読み出しアドレス、バンク番号、入出力ポートＰ１を選択するポート番号およびリードイネーブルを第１のメモリ３２に出力する。
【０１１６】
命令デコーダ３３は、第２のメモリ２２から第１のメモリ３２にデータを転送するデータ転送命令に基づいて、第２のメモリ２２の読み出し開始アドレス、第１のメモリ３２の書き込み開始アドレス、転送サイズおよび入出力情報を第１のデータ転送制御部３４に出力する。第１のデータ転送制御部３４は、命令デコーダ３３から受信した情報に基づいて、書き込みアドレス、バンク番号、入出力ポートＰ２を選択するポート番号およびライトイネーブルを第１のメモリ３２に出力する。
【０１１７】
命令デコーダ３３は、第１のメモリ３２から第２のメモリ２２にデータを転送するデータ転送命令に基づいて、第１のメモリ３２の読み出し開始アドレス、第２のメモリ２２の書き込み開始アドレス、転送サイズおよび入出力情報を第１のデータ転送制御部３４に出力する。第１のデータ転送制御部３４は、命令デコーダ３３から受信した情報に基づいて、書き込みアドレス、バンク番号、入出力ポートＰ２を選択するポート番号およびライトイネーブルを第１のメモリ３２に出力する。
【０１１８】
図１１は、図１の第１のメモリ３２の別の例を示すブロック図である。図１０と同じ要素については、詳細な説明を省略する。図１１に示す第１のメモリ３２は、シングルポートタイプのデータ入出力部ＤＩＯと、データ入出力部ＤＩＯに接続されたスイッチ回路ＳＷとを有している。第１のメモリ３２のその他の構成は、図１０と同様である。
【０１１９】
図１１に示す第１のメモリ３２では、データ入出力部ＤＩＯがシングルポートタイプのため、動作制御部ＣＮＴＬは、ポート番号を受けず、リードイネーブルおよびライトイネーブルを受けて、データ入出力部ＤＩＯにおけるデータの転送方向を制御する。
【０１２０】
スイッチ回路ＳＷは、図１の第１および第２のデータ転送制御部３４、３５または命令デコーダ３３のいずれかから受けるスイッチ制御信号に基づいて、データ入出力部ＤＩＯのデータ端子を第１の演算器３１、第２のバスＥＢＵＳまたは第１のバスＩＢＵＳに接続する。スイッチ制御信号は、図１に示した命令デコーダ３３により、図１０に示したポート番号の代わりに生成される。命令デコーダ３３の動作と第１のメモリ３２の動作とは、図１０で説明した動作と同様である。
【０１２１】
図１２は、図１の第１のメモリ３２の別の例を示すブロック図である。図１０および図１１と同じ要素については、詳細な説明を省略する。第１のメモリ３２は、複数のメモリコアＭＣＯＲＥ（この例では、ＭＣＯＲＥ１、ＭＣＯＲＥ２の２個）とスイッチ回路ＳＷとを有している。各メモリコアＭＣＯＲＥは、図１０と同様に、図示しない動作制御部ＣＮＴＬ、アドレスデコーダＡＤＥＣ、データ入出力部ＤＩＯ、および複数のバンクＢＫを含むメモリセルアレイＡＲＹを有してもよい。但し、データ入出力部ＤＩＯは、図１１と同様に、シングルポートタイプであり、各メモリコアＭＣＯＲＥは、図１１と同様に、ポート番号を受けない。各メモリコアＭＣＯＲＥのデータ端子は、スイッチ回路ＳＷに接続されている。
【０１２２】
スイッチ回路ＳＷは、図１１のスイッチ回路ＳＷと同様に、図１の第１および第２のデータ転送制御部３４、３５または命令デコーダ３３のいずれかからスイッチ制御信号を受ける。そして、スイッチ回路ＳＷは、スイッチ制御信号に基づいて、メモリコアＭＣＯＲＥのデータ端子のいずれか１つを第１の演算器３１、第２のバスＥＢＵＳまたは第１のバスＩＢＵＳに接続する。スイッチ制御信号は、図１に示した命令デコーダ３３により生成され、メモリコアＭＣＯＲＥを選択するアドレスの論理を含む。
【０１２３】
なお、例えば、メモリコアＭＣＯＲＥ１と外部メモリ４０との接続と、メモリコアＭＣＯＲＥ２と第１の演算器３１との接続とを同時に行う機能をスイッチ回路ＳＷに持たせてもよい。この場合、スイッチ制御信号の論理は、メモリコアＭＣＯＲＥ１、ＭＣＯＲＥ２と、第１の演算器３１、第２のバスＥＢＵＳ、第１のバスＩＢＵＳとの接続の組合せを示す。命令デコーダ３３は、スイッチ回路ＳＷの接続の組合せの数に対応する命令（演算命令およびデータ転送命令）をデコードする。これにより、複数のメモリコアＭＣＯＲＥを、同時かつ独立にアクセスすることができる。
【０１２４】
図１３は、図１の第１のメモリ３２の別の例を示すブロック図である。図１２と同じ要素については、詳細な説明を省略する。図１３に示す第１のメモリ３２は、スイッチ回路ＳＷが図１２のスイッチ回路ＳＷと異なることを除き、図１２に示す第１のメモリ３２と同様である。スイッチ回路ＳＷは、第２のバスＥＢＵＳと第１のバスＩＢＵＳとを相互に接続する経路を有することを除き、図１２のスイッチ回路ＳＷと同様である。
【０１２５】
図１の命令デコーダ３３は、外部メモリ４０と第２の演算部２０の第２のメモリ２２との間でデータを直接転送する直接データ転送命令をデコードする機能を有している。換言すれば、半導体装置１０は、直接データ転送命令を含む命令セットを有する。
【０１２６】
命令デコーダ３３は、直接データ転送命令をデコードした場合、第２のバスＥＢＵＳと第１のバスＩＢＵＳとを接続するスイッチ制御信号を第１のメモリ３２に出力する。また、命令デコーダ３３は、外部メモリ４０をアクセス動作させるための情報を第２のデータ転送制御部３５に出力し、第２のメモリ２２をアクセス動作させるための情報を第１のデータ転送制御部３４に出力する。
【０１２７】
第２のデータ転送制御部３５は、命令デコーダ３３からの情報に基づいて、外部メモリ４０に読み出しコマンドまたは書き込みコマンドを発行する。第１のデータ転送制御部３４は、命令デコーダ３３からの情報に基づいて、第２のメモリ２２に読み出しコマンドまたは書き込みコマンドを発行する。これにより、第１のメモリ３２のメモリコアＭＣＯＲＥにデータを書き込むことなく、外部メモリ４０と第２の演算部２０の第２のメモリ２２との間でデータを転送することができる。例えば、図７に示したデータＤＮ−１、ＤＮ−２をメモリコアＭＣＯＲＥに書き込むことなく、外部メモリ４０から第２のメモリ２２に転送することができる。
【０１２８】
図１４は、図１の第１のメモリ３２の別の例を示すブロック図である。図１１および図１２と同じ要素については、詳細な説明を省略する。図１４に示す第１のメモリ３２は、メモリコアＭＣＯＲＥ毎にスイッチ回路ＳＷ（ＳＷ１、ＳＷ２）が設けられており、各スイッチ回路ＳＷは、互いに異なるスイッチ制御信号を命令デコーダ３３から受けて動作する。スイッチ回路ＳＷは、図１１に示したスイッチ回路ＳＷと同様であり、メモリコアＭＣＯＲＥの図示しないデータ入出力部ＤＩＯを第１の演算器３１、第２のバスＥＢＵＳまたは第１のバスＩＢＵＳに接続する。
【０１２９】
スイッチ制御信号は、メモリコアＭＣＯＲＥを選択するアドレスの論理を含む。これにより、第１のメモリ３２を２つの独立したメモリとして動作させることができる。すなわち、メモリコアＭＣＯＲＥ２の動作の影響を受けることなく、メモリコアＭＣＯＲＥ１を動作させることができ、メモリコアＭＣＯＲＥ１の動作の影響を受けることなく、メモリコアＭＣＯＲＥ２を動作させることができる。
【０１３０】
以上、この実施形態では、ニューラルネットワークにおけるフォワード処理およびバックワード処理を第２の演算部２０により実行し、パラメータの更新処理を、バックワード処理のバックグラウンドで第１の演算部３０により実行する。また、パラメータの更新処理に適した仕様および数の演算器を第１の演算部３０に搭載し、バックワード処理で使用するパラメータＷを、外部メモリ４０でなく第１のメモリ３２から転送する。これにより、第２の演算部２０および第１の演算部３０の双方の演算器の使用効率を低下させることなく、効率よく外部メモリ４０の帯域に合わせてバックワード処理およびパラメータの更新処理を実行することができる。
【０１３１】
また、バックワード処理とパラメータの更新処理とを並列に実行するため、バックワード処理の開始からパラメータを更新するまでの時間を短縮することができる。さらに、バックワード処理のパラメータ誤差ΔＷの算出処理とパラメータの更新処理とを並列に行うことで、第２のバスＥＢＵＳの帯域を効率よく利用することできる。
【０１３２】
第２の演算部２０が生成したパラメータ誤差ΔＷを外部メモリ４０に格納することなく、第１の演算部３０によりパラメータの更新処理を実行することができる。また、第２の演算部２０は、第１の演算部３０が生成したパラメータＷの更新値を外部メモリ４０から読み出すことなく、第１のメモリ３２から読み出すことで、データ誤差ΔＤを算出することができる。これにより、外部メモリ４０に対するデータ転送を減少させることができ、第２のバスＥＢＵＳの帯域を有効に使うことができる。また、半導体装置１０の消費電力を削減することができる。
【０１３３】
なお、第１の演算部３０は、第２の演算部２０の計算負荷を軽減するとともに、外部メモリ４０から第２のメモリ２２へのデータの転送量を削減するための他の付加的な処理を、命令に基づいて実行してもよい。すなわち、第１の演算部３０が実行する処理は、パラメータの更新処理に限定されない。この場合にも、上記効果を得ることができる。
【０１３４】
図１５は、本発明の別の実施形態における半導体装置の例を示すブロック図である。図１と同じ要素については、同じ符号を付し、詳細な説明は省略する。図１５に示す半導体装置１０Ａは、図１の命令デコーダ３３および第１および第２のデータ転送制御部３４、３５の代わりに、命令デコーダ３３Ａおよび第１および第２のデータ転送制御部３４Ａ、３５Ａを有している。半導体装置１０Ａのその他の構成は、図１に示す半導体装置１０と同様である。半導体装置１０Ａが搭載される情報処理装置は、図２に示した情報処理装置と同様である。
【０１３５】
命令デコーダ３３Ａは、受信した命令を保持する命令キュー３３１（命令バッファ）を有しており、命令キュー３３１に保持された命令をデコードする。本実施形態の命令デコーダ３３Ａは、命令（デコード結果）の出力を待ち合わせる待ち合わせ命令をデコードすることができる。命令デコーダ３３Ａは、待ち合わせ命令をデコードした場合、命令のデコードを停止し、第１および第２のデータ転送制御部３４Ａ、３５Ａのいずれか、または両方から開始信号ＳＴＴ（ＳＴＴ１、ＳＴＴ２）を受けるまで、待ち合わせ命令に続く命令のデコードを実行しない。
【０１３６】
命令キュー３３１を設けることで、待ち合わせ命令に続く命令を、キューに保持しておくことができ、命令デコーダ３３Ａに命令を供給する回路（図２の命令制御部６０等）は、開始信号ＳＴＴに同期させることなく、命令デコーダ３３Ａに命令を供給できる。なお、命令キューは、命令デコーダ３３Ａの外部に配置されてもよい。
【０１３７】
第１のデータ転送制御部３４Ａは、第２の演算部２０から受信する完了信号ＣＰＬＴ１に応答して開始信号ＳＴＴ１を出力し、あるいは、データ転送の完了に応答して開始信号ＳＴＴ１を出力することができる。例えば、第２の演算部２０は、第１のデータ転送制御部３４Ａから予め指示されたデータ転送の完了に基づいて完了信号ＣＰＬＴ１を出力する機能を有する。
【０１３８】
第２のデータ転送制御部３５Ａは、外部メモリ４０から受信する完了信号ＣＰＬＴ２に応答して開始信号ＳＴＴ２を出力し、あるいは、データ転送の完了に応答して開始信号ＳＴＴ２を出力ことができる。例えば、外部メモリ４０は、第２のデータ転送制御部３５Ａから予め指示されたデータ転送の完了に基づいて完了信号ＣＰＬＴ２を出力する機能を有する。
【０１３９】
図１６は、図１５の半導体装置１０Ａがパラメータの更新処理を実行するときの動作の例を示すフロー図である。すなわち、図１６は、半導体装置１０Ａの制御方法の例を示す。図１６は、図８に示したステップＳ３２からステップＳ３４の処理に対応する動作を示す。
【０１４０】
まず、命令デコーダ３３Ａは、ステップＳ４１において、第２の演算部２０により算出され、第２のメモリ２２に保持されたパラメータ誤差ΔＷを第１のメモリ３２にロードするためのデータ転送命令をデコードする。命令デコーダ３３Ａは、デコードしたデータ転送命令（第１のデータ転送命令）を第１のデータ転送制御部３４Ａに発行する。第１のデータ転送制御部３４Ａは、ステップＳ４２において、第１のデータ転送命令に基づいて、第２のメモリ２２および第１のメモリ３２を制御し、第２のメモリ２２から第１のメモリ３２にパラメータ誤差ΔＷを転送する処理を実行する。ステップＳ４１、Ｓ４２は、図９に示したステップＳ３２に対応する処理である。
【０１４１】
また、命令デコーダ３３Ａは、ステップＳ４３において、外部メモリ４０に保持されたパラメータＷ、Ｍ、Ｖを第１のメモリ３２にロードするためのデータ転送命令をデコードし、データ転送命令（第２のデータ転送命令）を第２のデータ転送制御部３５Ａに発行する。第２のデータ転送制御部３５Ａは、ステップＳ４４において、第２のデータ転送命令に基づいて、外部メモリ４０と第１のメモリ３２とを制御し、外部メモリ４０から第１のメモリ３２にパラメータＷ、Ｍ、Ｖを転送する処理を実行する。ステップＳ４３、Ｓ４４は、図９に示したステップＳ３３に対応する処理である。なお、ステップＳ４１、Ｓ４２とステップＳ４３、Ｓ４４の順序は逆でもよく、並列に実行されてもよい。
【０１４２】
次に、命令デコーダ３３Ａは、ステップＳ４５において、ステップＳ４１、Ｓ４３の第１および第２のデータ転送命令に対応する待ち合わせ命令をデコードし、命令のデコード動作を停止する。命令デコーダ３３Ａは、２つのデータ転送命令に対応する２つの待ち合わせ命令を受信してもよく、２つのデータ転送命令に共通の待ち合わせ命令を受信してもよい。なお、命令デコーダ３３Ａは、命令のデコードを停止中も、新たな待ち合わせ命令をデコード可能である。このため、命令デコーダ３３Ａは、２つの待ち合わせ命令を連続して受信し、１つ目の待ち合わせ命令に基づいて命令のデコードを停止した場合にも、２つ目の待ち合わせ命令をデコードすることができる。
【０１４３】
次に、第２のデータ転送制御部３５Ａは、ステップＳ４６において、完了信号ＣＰＬＴ２の受信を待ち、完了信号ＣＰＬＴ２を受信した場合、ステップＳ４７において、開始信号ＳＴＴ２を命令デコーダ３３Ａに出力する。第１のデータ転送制御部３４Ａは、ステップＳ４８において、完了信号ＣＰＬＴ１の受信を待ち、完了信号ＣＰＬＴ１を受信した場合、ステップＳ４９において、開始信号ＳＴＴ１を命令デコーダ３３Ａに出力する。ステップＳ４５、Ｓ４６と、ステップＳ４７、Ｓ４８とは、逆の順序で実行されてもよく、並列に実行されてもよい。
【０１４４】
なお、第２のデータ転送制御部３５Ａは、パラメータＷ、Ｍ、Ｖの第１のメモリ３２への転送の完了を自ら判定できる場合、転送の完了に基づいて、完了信号ＣＰＬＴ２を受信することなく開始信号ＳＴＴ２を出力してもよい。同様に、第１のデータ転送制御部３４Ａは、パラメータ誤差ΔＷの第１のメモリ３２への転送の完了を自ら判定できる場合、転送の完了に基づいて、完了信号ＣＰＬＴ１を受信することなく開始信号ＳＴＴ１を出力してもよい。
【０１４５】
ステップＳ５０において、２つのデータ転送命令に対応する開始信号ＳＴＴ１、ＳＴＴ２を受信した命令デコーダ３３Ａは、２つのデータ転送命令による転送動作が完了したと判断し、命令のデコードを再開する。例えば、命令デコーダ３３Ａは、パラメータを更新するための演算命令を受信してデコードし、演算命令を第１の演算器３１に発行する。そして、第１の演算器３１は、ステップＳ５１において、第１のメモリ３２に転送されたパラメータＷ、Ｍ、Ｖおよびパラメータ誤差ΔＷを使用して、パラメータＷ、Ｍ、Ｖの更新処理を実行する。ステップＳ５１は、図９に示したステップＳ３４に対応する処理である。なお、図８に示したように、パラメータの更新処理が複数に分割して実行される場合、図１６に示す動作は、分割された複数のパラメータの更新処理毎に実行される。
【０１４６】
以上、この実施形態においても、上述した実施形態と同様に、第２の演算部２０および第１の演算部３０の双方の演算器の使用効率を低下させることなく、外部メモリ４０の帯域に合わせてバックワード処理およびパラメータの更新処理を実行することができる。さらに、この実施形態では、バックワード処理とパラメータの更新処理とが、互いに独立に動作する第２の演算部２０と第１の演算部３０とによりそれぞれ実行される場合にも、待ち合わせ命令により、処理を同期させることができる。すなわち、パラメータの更新処理を、更新処理に使用するパラメータ誤差ΔＷおよびパラメータＷ、Ｍ、Ｖの転送の完了に同期させて開始できる。このため、パラメータの更新処理の前に無駄な待ち合わせ時間が挿入されることがなくなり、バックワード処理およびパラメータの更新処理を効率よく実行できる。この結果、バックワード処理の開始からパラメータを更新するまでの時間をさらに短縮することができる。
【０１４７】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０１４８】
１０  半導体装置
２０  第２の演算部
２１  第２の演算器
２２  第２のメモリ
３０  第１の演算部
３１  第１の演算器
３２  第１のメモリ
３３、３３Ａ  命令デコーダ
３４、３４Ａ  第１のデータ転送制御部
３５、３５Ａ  第２のデータ転送制御部
４０  外部メモリ
５０  通信インタフェース
６０  命令制御部
１００  情報処理装置
２００  基板
２１０  ＣＰＵ
２２０  外部記憶装置
２３０  ネットワークインタフェース
３３１  命令キュー
ＥＢＵＳ  第２のバス
ＩＢＵＳ  第１のバス
【図１】
2020170358.tif 000003
【図２】
2020170358.tif 000004
【図３】
2020170358.tif 000005
【図４】
2020170358.tif 000006
【図５】
2020170358.tif 000007
【図６】
2020170358.tif 000008
【図７】
2020170358.tif 000009
【図８】
2020170358.tif 000010
【図９】
2020170358.tif 000011
【図１０】
2020170358.tif 000012
【図１１】
2020170358.tif 000013
【図１２】
2020170358.tif 000014
【図１３】
2020170358.tif 000015
【図１４】
2020170358.tif 000016
【図１５】
2020170358.tif 000017
【図１６】
2020170358.tif 000018