IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社Preferred Networksの特許一覧

<>
  • 特開-情報処理装置および情報処理方法 図1
  • 特開-情報処理装置および情報処理方法 図2
  • 特開-情報処理装置および情報処理方法 図3
  • 特開-情報処理装置および情報処理方法 図4
  • 特開-情報処理装置および情報処理方法 図5
  • 特開-情報処理装置および情報処理方法 図6
  • 特開-情報処理装置および情報処理方法 図7
  • 特開-情報処理装置および情報処理方法 図8
  • 特開-情報処理装置および情報処理方法 図9
  • 特開-情報処理装置および情報処理方法 図10
  • 特開-情報処理装置および情報処理方法 図11
  • 特開-情報処理装置および情報処理方法 図12
  • 特開-情報処理装置および情報処理方法 図13
  • 特開-情報処理装置および情報処理方法 図14
  • 特開-情報処理装置および情報処理方法 図15
  • 特開-情報処理装置および情報処理方法 図16
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023178385
(43)【公開日】2023-12-14
(54)【発明の名称】情報処理装置および情報処理方法
(51)【国際特許分類】
   G06N 3/063 20230101AFI20231207BHJP
   G06F 15/78 20060101ALI20231207BHJP
   G06F 9/38 20180101ALI20231207BHJP
   G06N 3/084 20230101ALI20231207BHJP
【FI】
G06N3/063
G06F15/78 515
G06F9/38 370C
G06N3/084
【審査請求】有
【請求項の数】22
【出願形態】OL
(21)【出願番号】P 2023179055
(22)【出願日】2023-10-17
(62)【分割の表示】P 2019071557の分割
【原出願日】2019-04-03
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】加藤 辰哉
(72)【発明者】
【氏名】名村 健
(57)【要約】
【課題】レイヤーアルゴリズムの処理において、外部メモリの帯域を有効に使うことができる集積回路を提供する。
【解決手段】情報処理装置は、1又は複数の第1の演算部を含む第1のチップと、1又は複数の第2の演算部を含む第2のチップと、を備え、前記1又は複数の第2の演算部は、ニューラルネットワークのバックワード処理を実行して前記ニューラルネットワークの重みの勾配を計算し、前記1又は複数の第2の演算部は、前記計算された勾配を前記第1のチップに転送し、前記1又は複数の第1の演算部は、前記計算された勾配に基づいて前記ニューラルネットワークの重みを更新し、前記1又は複数の第1の演算部は、前記更新された重みを前記第2のチップに転送し、前記1又は複数の第1の演算部は、複数種類のパラメータを用いる方法により前記ニューラルネットワークの重みを更新する。
【選択図】図1
【特許請求の範囲】
【請求項1】
1又は複数の第1の演算部を含む第1のチップと、
1又は複数の第2の演算部を含む第2のチップと、を備え、
前記1又は複数の第2の演算部は、ニューラルネットワークのバックワード処理を実行して前記ニューラルネットワークの重みの勾配を計算し、
前記1又は複数の第2の演算部は、前記計算された勾配を前記第1のチップに転送し、
前記1又は複数の第1の演算部は、前記計算された勾配に基づいて前記ニューラルネットワークの重みを更新し、
前記1又は複数の第1の演算部は、前記更新された重みを前記第2のチップに転送し、
前記1又は複数の第1の演算部は、複数種類のパラメータを用いる方法により前記ニューラルネットワークの重みを更新する、
情報処理装置。
【請求項2】
前記1又は複数の第2の演算部は、前記ニューラルネットワークのフォワード処理をさらに実行する、請求項1に記載の情報処理装置。
【請求項3】
前記第1のチップと前記第2のチップは互いに異なる設計である、請求項1または請求項2に記載の情報処理装置。
【請求項4】
前記ニューラルネットワークのフォワード処理、前記ニューラルネットワークのバックワード処理、前記ニューラルネットワークの重みの勾配の計算及び前記ニューラルネットワークの重みの更新は繰り返して行われる、請求項2に記載の情報処理装置。
【請求項5】
前記1又は複数の第2の演算部は、SIMD(Single Instruction Multiple Data)演算器を備える、請求項1乃至請求項4のいずれか1項に記載の情報処理装置。
【請求項6】
前記1又は複数の第1の演算部は、前記1又は複数の第2の演算部と同期される、請求項1乃至請求項5のいずれか1項に記載の情報処理装置。
【請求項7】
前記ニューラルネットワークのバックワード処理および前記ニューラルネットワークの重みの更新は、並列に実行される、請求項1乃至請求項6のいずれか1項に記載の情報処理装置。
【請求項8】
前記1又は複数の第2の演算部は、前記第1のチップを介して外部メモリと通信する、請求項1乃至請求項7のいずれか1項に記載の情報処理装置。
【請求項9】
前記勾配は、外部メモリに転送されない、請求項1乃至請求項7のいずれか1項に記載の情報処理装置。
【請求項10】
前記外部メモリは、HBM(High Bandwidth Memory)である、請求項8に記載の情報処理装置。
【請求項11】
前記複数種類のパラメータのうち、前記更新された重みのみが前記1又は複数の第2の演算部に転送される、請求項1乃至請求項10のいずれか1項に記載の情報処理装置。
【請求項12】
1又は複数の第1の演算部を含む第1のチップと1又は複数の第2の演算部を含む第2のチップとにより実行される情報処理方法であって、
前記1又は複数の第2の演算部は、ニューラルネットワークのバックワード処理を実行して前記ニューラルネットワークの重みの勾配を計算し、
前記1又は複数の第2の演算部は、前記計算された勾配を前記第1のチップに転送し、
前記1又は複数の第1の演算部は、前記計算された勾配に基づいて前記ニューラルネットワークの重みを更新し、
前記1又は複数の第1の演算部は、前記更新された重みを前記第2のチップに転送し、
前記1又は複数の第1の演算部は、複数種類のパラメータを用いる方法により前記ニューラルネットワークの重みを更新する、
情報処理方法。
【請求項13】
前記1又は複数の第2の演算部は、前記ニューラルネットワークのフォワード処理をさらに実行する、請求項12に記載の情報処理方法。
【請求項14】
前記第1のチップと前記第2のチップは互いに異なる設計である、請求項12又は請求項13に記載の情報処理方法。
【請求項15】
前記ニューラルネットワークのフォワード処理、前記ニューラルネットワークのバックワード処理、前記ニューラルネットワークの重みの勾配の計算及び前記ニューラルネットワークの重みの更新は繰り返して行われる、請求項13に記載の情報処理方法。
【請求項16】
前記1又は複数の第2の演算部は、SIMD(Single Instruction Multiple Data)演算器を備える、請求項12乃至請求項15のいずれか1項に記載の情報処理方法。
【請求項17】
前記1又は複数の第1の演算部は、前記1又は複数の第2の演算部と同期される、請求項12乃至請求項16のいずれか1項に記載の情報処理方法。
【請求項18】
前記ニューラルネットワークのバックワード処理および前記ニューラルネットワークの重みの更新は、並列に実行される、請求項12乃至請求項17のいずれか1項に記載の情報処理方法。
【請求項19】
前記1又は複数の第2の演算部は、前記第1のチップを介して外部メモリと通信する、請求項12乃至請求項18のいずれか1項に記載の情報処理方法。
【請求項20】
前記勾配は、外部メモリに転送されない、請求項12乃至請求項18のいずれか1項に記載の情報処理方法。
【請求項21】
前記外部メモリは、HBM(High Bandwidth Memory)である、請求項19に記載の情報処理方法。
【請求項22】
前記複数種類のパラメータのうち、前記更新された重みのみが前記1又は複数の第2の演算部に転送される、請求項12乃至請求項21のいずれか1項に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報処理装置および情報処理方法に関する。
【背景技術】
【0002】
近時、ニューラルネットワークを利用したディープラーニングにより画像認識や音声認識等が精度よく行われるようになってきている。例えば、ディープラーニングを実行するプロセッサは、外部メモリである主記憶装置から内部メモリに読み出した画像データおよび重みデータ等を使用して、複数の演算器に並列に演算を実行させる。この際、内部メモリに記憶された画像データおよび重みデータ等の配列を変換してプロセッサコアに入力することで、演算が効率的に実行される。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2018-120547号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
一般に、ディープラーニングにおいて、ニューラルネットワークの各レイヤーで使用するパラメータの数は、各レイヤーに供給されるデータの数に比べて少ない場合が多い。そのため、レイヤーアルゴリズムの処理においてパラメータを外部メモリに対して入出力する場合、外部メモリの帯域を使い切れないタイミングがあり、メモリ資源を十分に活用できない場合がある。また、レイヤーアルゴリズムの処理を実行するために実装された多数の演算器を含む半導体装置でパラメータの更新処理を実行する場合、演算器の使用効率が低くなると、演算資源を十分に活用できない場合がある。
【課題を解決するための手段】
【0005】
本発明の実施形態の情報処理装置は、1又は複数の第1の演算部を含む第1のチップと、1又は複数の第2の演算部を含む第2のチップと、を備え、前記1又は複数の第2の演算部は、ニューラルネットワークのバックワード処理を実行して前記ニューラルネットワークの重みの勾配を計算し、前記1又は複数の第2の演算部は、前記計算された勾配を前記第1のチップに転送し、前記1又は複数の第1の演算部は、前記計算された勾配に基づいて前記ニューラルネットワークの重みを更新し、前記1又は複数の第1の演算部は、前記更新された重みを前記第2のチップに転送し、前記1又は複数の第1の演算部は、複数種類のパラメータを用いる方法により前記ニューラルネットワークの重みを更新する。
【図面の簡単な説明】
【0006】
図1】本発明の一実施形態における半導体装置の例を示すブロック図である。
図2図1の半導体装置が搭載される情報処理装置の例を示すブロック図である。
図3】ディープニューラルネットワークの訓練におけるフォワード処理の例を示すフロー図である。
図4】ディープニューラルネットワークの訓練におけるバックワード処理およびパラメータの更新処理の例を示すフロー図である。
図5】フォワード処理およびバックワード処理でのレイヤーアルゴリズムの例を示す説明図である。
図6】パラメータを最適化する勾配降下法の例を示す説明図である。
図7図1の半導体装置によりバックワード処理とパラメータの更新処理とを実行する場合の例を示すシーケンス図である。
図8図7におけるレイヤーN-1のパラメータ誤差の算出処理とパラメータの更新処理との詳細を示す説明図である。
図9図7のシーケンスを実行するメイン演算部およびサブ演算部の動作の例を示すフロー図である。
図10図1の内部メモリの例を示すブロック図である。
図11図1の内部メモリの別の例を示すブロック図である。
図12図1の内部メモリの別の例を示すブロック図である。
図13図1の内部メモリの別の例を示すブロック図である。
図14図1の内部メモリの別の例を示すブロック図である。
図15】本発明の別の実施形態における半導体装置の例を示すブロック図である。
図16図15の半導体装置がパラメータの更新処理を実行するときの動作の例を示すフロー図である。
【発明を実施するための形態】
【0007】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
【0008】
図1は、本発明の一実施形態における半導体装置の例を示すブロック図である。図1に示す半導体装置10は、例えば、複数のレイヤーを含むディープニューラルネットワーク(DNN:Deep Neural Network)の訓練に使用されるプロセッサであり、フォワード処理、バックワード処理およびパラメータの更新処理を実行する。フォワード処理、バックワード処理およびパラメータの更新処理については、図3および図4で説明する。
【0009】
半導体装置10は、第1の演算部30および第2の演算部20を有している。第1の演算部30は、第1の演算器31、第1のメモリ32、命令デコーダ33、第1のデータ転送制御部34および第2のデータ転送制御部35を有している。第2の演算部20は、第2の演算器21および第2のメモリ22を有している。本実施形態において、第1の演算部30は、パラメータの更新処理を実行する最適化演算部であり、第2の演算部20は、ディープニューラルネットワークのフォワード処理およびバックワード処理を実行するベクトル演算部である。第1の演算部30は、第1の集積回路の一例であり、第2の演算部20は、第2の集積回路の一例である。
【0010】
第2の演算器21は、ベクトル演算または行列演算等を実行するための多数の演算器を有している。なお、第2の演算部20は、演算命令やデータ転送命令等の命令を保持する命令バッファ、命令をデコードする命令デコーダ、演算に使用するデータや演算結果を保持するレジスタ等を有してもよい。また、第2の演算部20は、第2のメモリ22以外に、命令メモリ、命令キャッシュあるいはデータキャッシュを有してもよい。
【0011】
第2の演算器21に含まれる各種演算器の種類として、積和演算器、乗算器、加算器、除算器等が挙げられるが、これらに限定されない。また、本実施形態の第2の演算器21は、浮動小数点演算器と固定小数点演算器を有しており、浮動小数点数データは、例えば、半精度、単精度、倍精度のいずれでもよい。
【0012】
第2のメモリ22は、アドレスにより識別される複数の記憶領域を有し、第2の演算器21が演算に使用するデータやパラメータ等を保持する。第2のメモリ22は、例えば、高速SRAMであるが、eDRAM(embedded DRAM)、MRAM(Magnetoresistive Random Access Memory)、PCM(Phase-change memory)、またはReRAM(Resistive Random Access Memory)等でもよい。
【0013】
第1の演算部30の第1の演算器31は、例えば、加算器、乗算器、除算器、論理演算器(オア論理、アンド論理、否定論理、排他的論理和)および平方根演算器等を有している。平方根演算器は、ルックアップテーブルにより近似値を求める方式でもよい。第1の演算器31が対数演算器等の他の関数を演算する演算器を有する場合、これら演算器も、ルックアップテーブルにより近似値を求める方式でもよい。また、第1の演算器31は、平方根演算器の代わりに、逆数平方根演算器を有してもよい。
【0014】
さらに、ディープニューラルネットワークの訓練におけるパラメータの更新処理を第1の演算器31に実行させる場合、第1の演算器31は、パラメータの更新値を求める式の値あるいは式中の所定の項の値を算出する専用の演算器を有してもよい。例えば、図6のADAM(Adaptive moment estimation)によりパラメータの更新値Wtを求める場合、右辺の第2項を演算する専用の演算器を第1の演算器31に設けてもよい。これにより、演算効率を向上することができる。
【0015】
例えば、第1の演算器31に含まれる各種演算器は、浮動小数点演算器であり、扱う浮動小数点数の型は、半精度、単精度、倍精度のいずれか1つまたは複数である。第1の演算器31に含まれる各種演算器は、SIMD(Single Instruction Multiple Data)演算器でもよい。例えば、倍精度のSIMD演算器は、2つの単精度データまたは4つの半精度データの演算を並列に実行することができる。なお、SIMD演算器で実行するデータが格納されるレジスタは固定長でもよく、命令に含まれる情報に基づいてサイズが変わる可変長でもよい。第1の演算器31は、固定小数点数データを演算する演算器を含んでもよい。さらに、第1の演算器31は、浮動小数点数データの型を変換する演算器や、浮動小数点数を固定小数点数に変換し、あるいは、固定小数点数を浮動小数点数に変換する演算器を有してもよい。
【0016】
なお、第1の演算器31は、ビット演算、浮動小数点演算、整数演算等を組み合わせることで、対数関数の演算や指数関数の演算を実現可能である。対数関数の演算や指数関数の演算は、複数の演算命令を組み合わせることで実行されてもよく、複数の演算器を組み合わせた専用の演算器により実行されてもよい。
【0017】
第1の演算器31に含まれる各演算器は、命令デコーダ33からの制御信号に基づいて、第1のメモリ32に保持されたデータを読み出して演算を実行し、演算結果を第1のメモリ32に格納する。以下では、第1の演算器31に含まれる各演算器を、第1の演算器31とも称する。また、第1の演算器31は、パラメータの更新処理を実行するために最適な数の演算器を演算器の種類毎に有してもよい。これにより、第1の演算部30において、パラメータの更新処理の実行時の演算性能に対する外部メモリ40の帯域の比であるB/F比を最適に設定することができる。
【0018】
第1のメモリ32は、アドレスにより識別される複数の記憶領域を有している。第1のメモリ32は、第1の演算部30と第2の演算部20とを接続する第1のバスIBUSを介して第2の演算部20の第2のメモリ22に接続され、第2のバスEBUSを介して外部メモリ40に接続される。本実施形態では、第1のバスIBUSと第2のバスEBUSとは、互いに独立している。このため、外部メモリ40から第2のメモリ22へのデータの転送は、第1のメモリ32を介して行われる。但し、後述するように、第1のバスIBUSと第2のバスEBUSとを相互に接続するバイパススイッチを第1のメモリ32内に設けることで、第1のメモリ32を経由することによるアクセス遅延のペナルティを少なくすることができる。第1のメモリ32は、高速SRAMで構成されるが、eDRAM、MRAM、PCMまたはReRAM等でもよい。
【0019】
命令デコーダ33は、例えば、半導体装置10の外部から供給される命令をデコードし、デコード結果に応じて生成した制御信号を第1の演算器31、第1のメモリ32および第1、第2のデータ転送制御部34、35の1つまたは複数に出力する。命令デコーダ33は、第1の演算器31に演算を実行させる演算命令をデコードした場合、第1の演算器31内において演算を実行させる演算器を示す情報と、演算命令の種別を示す情報とを第1の演算器31に出力する。また、命令デコーダ33は、演算命令のデコードに基づいて、演算に使用するデータを第1のメモリ32から読み出す読み出し情報(読み出しアドレス等)と、演算結果を第1のメモリ32に書き込む書き込み情報(書き込みアドレス等)とを第1のメモリ32に出力する。以下では、命令デコーダ33が第1の演算器31に出力する制御信号等は、命令とも称される。
【0020】
第1の演算器31において、命令デコーダ33からの命令に対応する演算器は、第1のメモリ32からロードされるデータの演算を実行し、演算結果を第1のメモリ32にストアする。第1のメモリ32は、命令デコーダ33からのアドレス等の情報に基づいて、第1の演算器31が演算に使用するデータを記憶領域から読み出して第1の演算器31に出力し、受信した演算結果を記憶領域に書き込む。
【0021】
なお、命令デコーダ33に供給される命令は、1回の演算を実行する命令でもよく、複数の演算を実行するSIMD命令でもよく、演算回数を指定した命令でもよい。複数回数を指定した命令を受信した第1の演算器31は、第1のメモリ32におけるデータのロード元と演算結果のストア先を順に変えながら、指定された回数の演算を実行してもよい。SIMD命令または演算回数を指定した命令を命令セットに含めることで、第1の演算部30への命令の供給効率を向上することができる。
【0022】
命令デコーダ33は、第2のメモリ22および第1のメモリ32間でデータを転送するデータ転送命令をデコードした場合、例えば、ソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報を第1のデータ転送制御部34に出力する。また、命令デコーダ33は、外部メモリ40と第1のメモリ32間でデータを転送するデータ転送命令をデコードした場合、例えば、ソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報を第2のデータ転送制御部35に出力する。ソースアドレスは、データの転送元を示し、ディスティネーションアドレスは、データの転送先を示し、転送量情報は、転送バイト数等のデータ転送量を示し、入出力情報は、データの入出力方向(リード/ライト)を示すものとする。
【0023】
第1のデータ転送制御部34は、命令デコーダ33から受信したソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報に基づいて、第1のバスIBUSを介して第2のメモリ22および第1のメモリ32にそれぞれアクセスする。例えば、データ転送命令が、第2のメモリ22から第1のメモリ32へのデータ転送を示す場合、第1のデータ転送制御部34は、データ転送量に対応する回数の読み出しコマンドを第2のメモリ22に発行する。また、第1のデータ転送制御部34は、データ転送量に対応する回数の書き込みコマンドを第1のメモリ32に発行する。そして、転送量情報に対応する量のデータが第2のメモリ22から第1のメモリ32に転送される。
【0024】
第2のデータ転送制御部35は、命令デコーダ33から受信したソースアドレス、ディスティネーションアドレス、転送量情報および入出力情報に基づいて、第2のバスEBUSを介して外部メモリ40および第1のメモリ32にそれぞれアクセスする。例えば、データ転送命令が、第1のメモリ32から外部メモリ40へのデータ転送を示す場合、第2のデータ転送制御部35は、データ転送量に対応する回数の読み出しコマンドを第1のメモリ32に発行する。また、第2のデータ転送制御部35は、データ転送量に対応する回数の書き込みコマンドを外部メモリ40に発行する。そして、転送量情報に対応する量のデータが第1のメモリ32から外部メモリ40に転送される。
【0025】
なお、第1のデータ転送制御部34は、命令デコーダ33からのデータ転送命令に基づいて、パケット形式のデータ転送要求を第2のメモリ22および第1のメモリ32に発行してもよい。同様に、第2のデータ転送制御部35は、命令デコーダ33からのデータ転送命令に基づいて、パケット形式のデータ転送要求を第1のメモリ32および外部メモリ40に発行してもよい。
【0026】
例えば、外部メモリ40は、SDRAMのメモリモジュール等の主記憶装置である。外部メモリ40は、HBM(High Bandwidth Memory)またはHMC(Hybrid Memory Cube)等の積層タイプのメモリモジュールでもよい。
【0027】
なお、例えば、半導体装置10は、単一のチップの形態を有していることが好ましい。第2の演算部20と第1の演算部30とを1つのチップに含めることで、第1のバスIBUSをチップ内配線として形成することができる。また、第2のメモリ22および第1のメモリ32の高速アクセス性を生かして、第2のメモリ22および第1のメモリ32間でのデータ転送を高速に行うことができる。
【0028】
これに対して、第2の演算部20と第1の演算部30とは互いに異なる半導体チップに設けられてもよい。この場合、第2の演算部20を含む半導体装置と、第1の演算部30を含む半導体装置とが、それぞれ設計される。これにより、各半導体チップのチップサイズを単一の半導体チップのチップサイズに比べて小さくできるため、半導体チップの歩留まりを向上させることができる。なお、この場合、第1のバスIBUSの各信号線に接続される入出力バッファと、パッドやバンプ等の外部端子と、保護素子等とを両方のチップに配置することが好ましい。
【0029】
第1の演算部30は、命令デコーダ33に供給する命令を保持する命令バッファやプログラムカウンタ、演算に使用するデータや演算結果を保持するレジスタ等を有してもよい。例えば、複数の命令を並列に命令バッファに格納することで、第1の演算部30への命令の供給効率を向上することができる。なお、命令バッファが保持する命令は、外部メモリ40から転送されてもよく、図2で説明するCPU210からの指示に基づいて、外部メモリ40から命令バッファに転送されてもよい。
【0030】
また、第1の演算部30にプログラムカウンタを設けることにより、条件分岐命令を命令セットに追加でき、条件分岐命令の追加によりループ処理を実行できる。この結果、命令の供給効率を向上することができる。また、条件分岐命令の分岐先に応じて実行する関数を変えることで、複雑な関数の値を近似により求めることができる。また、条件ビットを参照することで条件付き実行を行ってもよい。
【0031】
さらに、第1の演算部30は、データアドレスレジスタを有してもよい。この場合、アドレスの間接参照が可能になり、アプリケーションプログラムを変更することなく、レジスタ値を変えることで、異なる処理を実行することができる。また、演算結果に応じてデータアドレスレジスタを書き換えることで、例えば、演算の近似に使用するルックアップテーブルの参照先を変えることができ、データを複数の区間に区切って、区間毎に異なる関数による近似を行うことができる。
【0032】
図2は、図1の半導体装置10が搭載される情報処理装置の例を示すブロック図である。図2に示す情報処理装置100は、システムバスSBUSで相互に接続された所定数の基板200、CPU210、外部記憶装置220およびネットワークインタフェース(I/F)230を有している。例えば、所定数の基板200とCPU210とは、システム基板に搭載される。なお、本開示に係る情報処理装置100は、様々な形態とすることができ、例えば、CPU210がアクセスする主記憶装置がシステムバスSBUSに接続されてもよく、GPUがシステムバスSBUSに接続されてもよい。
【0033】
システムバスSBUSは、例えば、PCIe(Peripheral Component Interconnect express;登録商標)バスでもよい。また、情報処理装置100は、複数の半導体装置10を協働させてディープニューラルネットワークの訓練を実行するサーバとして機能させてもよい。
【0034】
各基板200は、複数の半導体装置10、複数の半導体装置10にそれぞれ接続された複数の外部メモリ40、通信インタフェース50および命令制御部60を有している。命令制御部60は、複数の半導体装置10の各々に設けられてもよい。また、基板200に搭載される半導体装置10の数は、4つに限定されない。複数の半導体装置10、通信インタフェース50および命令制御部60は、基板200に設けられたバスBUSを介して相互に接続されている。なお、基板200は、システム基板に設けられるコネクタに接続されるベア基板の形態でもよく、システム基板に半田付けされるパッケージの形態でもよい。
【0035】
CPU210は、情報処理装置100の全体の動作を管理し、例えば、ディープラーニングで使用するデータを複数の半導体装置の各々に割り当てるホストコンピュータとして機能する。外部記憶装置220は、例えば、各半導体装置10が実行するディープラーニングの演算で使用するデータおよびパラメータを保持してもよい。また、外部記憶装置220は、CPU210が実行する管理プログラムおよびアプリケーションプログラムを保持してもよく、各半導体装置10が実行する命令を保持してもよい。外部記憶装置220は、ハードディスク、SSD(Solid State Drive)、他の記憶装置でもよい。ネットワークインタフェース230は、システムバスSBUSを外部のネットワークに接続する。外部記憶装置220が保持するプログラムやデータ等の情報は、ネットワークインタフェース230を介して外部のネットワークから転送されてもよい。
【0036】
各基板200において、通信インタフェース50は、システムバスSBUSを介してCPU210、他の基板200の通信インタフェース50またはネットワークインタフェース230との間での通信を制御する。命令制御部60は、CPU210からの指示に基づいて、バスBUSで接続された半導体装置10の各々に発行する命令を制御する。すなわち、命令制御部60は、予め決められたディープニューラルネットワークの訓練の手順にしたがってCPU210から出力される指示に基づいて、半導体装置10に訓練を実行させるための各種の命令を半導体装置10の各々に発行する。命令制御部60から発行された命令は、図1に示した半導体装置10内の命令デコーダ33に供給される。
【0037】
命令制御部60は、第2の演算部20による処理と第1の演算部30による処理とを同期させるためのタイミング信号を第2の演算部20および第1の演算部30の一方または両方に出力してもよい。なお、CPU210が半導体装置10の各々に発行する命令を管理できる場合、命令は、CPU210から各半導体装置10に直接発行されてもよく、この場合、基板200には、命令制御部60は搭載されていなくてもよい。
【0038】
なお、例えば、基板200に搭載される複数の半導体装置10は、半導体モジュール(パッケージ)の形態で、基板200に搭載されてもよい。例えば、図2では、4つの半導体装置10が1つの半導体モジュールに含まれる。また、第1の演算部30と第2の演算部20とがそれぞれ半導体装置(チップ)として設計される場合、第1の演算部30を含む半導体装置が複数搭載された半導体モジュールが基板200に搭載されてもよい。さらに、例えば、情報処理装置100は、ネットワークを介して接続された複数の半導体装置10によりクラスタを構築してもよい。
【0039】
図3は、ディープニューラルネットワークの訓練におけるフォワード処理の例を示すフロー図である。フォワード処理では、入力レイヤーおよび所定数の中間レイヤーの各々にデータと重み等のパラメータとが入力される。入力レイヤーでは、入力データとパラメータ1とが演算され、中間データ1が生成される。入力レイヤーの次の中間レイヤーでは、中間データ1とパラメータ2とが演算され、中間データ2が生成される。以降の中間レイヤーにおいても、1つ前の中間レイヤーが生成する中間データと、中間レイヤー毎に設定されたパラメータとが演算され、演算により生成された中間データが次の中間レイヤーに出力される。なお、パラメータを使用しない中間レイヤーも存在する場合がある。中間レイヤーとしては、例えば、畳み込みレイヤー、プーリングレイヤー、全結合レイヤー等がある。
【0040】
出力レイヤーでは、出力レイヤーの1つ前の中間レイヤーN(N番目のレイヤー)が生成した中間データNを使用して出力データが求められる。分類問題において誤差を求める出力レイヤーでは、例えば、ソフトマックス関数を活性化関数として使用し、交差エントロピーを誤差関数として使用することで出力データ(解)が求められる。出力レイヤーでは、図4で説明するように、出力データと教師データ(正解データ)とを比較することで、正解との誤差が求められる。
【0041】
このように、フォワード処理では、ニューラルネットワークの各レイヤーにおいて、入力データとパラメータとが演算されて次のレイヤーに入力するデータが求められ、最終のレイヤーから出力データが出力される(順伝播)。なお、フォワード処理は、ニューラルネットワークの訓練だけでなく、ニューラルネットワークを用いた推論にも使用される。
【0042】
図4は、ディープニューラルネットワークの訓練におけるバックワード処理およびパラメータの更新処理の例を示すフロー図である。バックワード処理では、フォワード処理とは逆の順序で誤差を伝播させていく誤差逆伝播が行われる。図4において、符号Δは、データの誤差またはパラメータの誤差を示す。パラメータの更新処理は、破線の矢印で示される。
【0043】
まず、バックワード処理では、誤差を求めるレイヤー(出力レイヤー)において、フォワード処理で生成した出力データと教師データとが比較され、出力レイヤーに入力される中間データNに対する誤差であるΔ中間データNが生成される。Δ中間データNは、N番目の中間レイヤーが出力する出力データの誤差でもある。
【0044】
次に、各中間レイヤーにおいて、出力レイヤーに近い中間レイヤーから順に、出力データに対する誤差(Δ中間データ)と、入力データである中間データとが演算され、当該中間レイヤーのパラメータに対する誤差であるΔパラメータが生成される。Δパラメータは、パラメータの変化に対する誤差の変化を示す曲線におけるパラメータの勾配を示す。例えば、中間レイヤー2では、Δ中間データ2と中間データ1とが演算されてΔパラメータ2が求められる。
【0045】
また、各中間レイヤーにおいて、出力データに対する誤差(Δ中間データ)と、当該中間レイヤーのパラメータとが演算され、当該中間レイヤーの入力データに対する誤差であるΔ中間データが生成される。当該中間レイヤーの入力データに対する誤差(Δ中間データ)は、1つ前の中間レイヤー(または入力レイヤー)の出力データの誤差でもある。例えば、中間レイヤー2では、Δ中間データ2とパラメータ2とが演算されてΔ中間データ1が求められる。
【0046】
入力レイヤーにおいても中間レイヤーと同様に、Δ中間データ1と入力データとが演算されてΔパラメータ1が求められ、Δ中間データ1とパラメータ1とが演算され、入力データに対する誤差であるΔ入力データが求められてもよい。
【0047】
パラメータの更新処理では、各中間レイヤーおよび入力レイヤーにおいて、バックワード処理で求めたΔパラメータ(誤差の勾配)を使用して、パラメータが補正される。すなわち、パラメータが最適化される。パラメータの最適化は、Momentum-SGD(Stochastic Gradient Descent)やADAM等の勾配降下法を使用して行われる。
【0048】
このように、バックワード処理では、出力データと教師データとから出力レイヤーに入力されたデータ(出力レイヤーの1つ前の中間レイヤーの出力データ)の誤差が算出される。そして、算出されたデータの誤差を用いて入力データの誤差を算出する処理と、入力データの誤差を用いてパラメータの誤差を算出する処理とが、出力側のレイヤーから順に行われる(誤差逆伝播)。パラメータの更新処理では、バックワード処理で得られたパラメータの誤差に基づいて、パラメータが最適化される。
【0049】
図5は、フォワード処理およびバックワード処理でのレイヤーアルゴリズムの例を示す説明図である。図5は、ニューラルネットワークにおいて基本的なレイヤーアルゴリズムである全結合レイヤーの例を示す。以下では、画像データの処理の例を説明するが、図5に示すレイヤーアルゴリズムは、画像データ以外のデータを処理する場合にも適用可能である。
【0050】
説明を簡単にするために、1回のレイヤーアルゴリズムで処理するバッチサイズは、画像サイズと同じであるとし、画像毎に図5に示すレイヤーアルゴリズムが実施されるとする。これに対して、画像を複数に分割した分割画像の各々をバッチサイズとする場合、ループの入れ子(ネスト)の数が図5よりも増加する。なお、画像処理で頻繁に使用される畳み込みレイヤーも、畳み込みの構造を無視すれば、要素数が大きい全結合レイヤーと考えることができる。
【0051】
フォワード処理において、符号Nは、レイヤーの並び順(レイヤー番号)を示し、レイヤー番号が大きいレイヤーほど出力側に位置することを示す。符号DN+1は、レイヤーから出力される出力データを示し、符号Dは、レイヤーに入力される入力データを示し、符号Wは、レイヤーに入力されるパラメータを示す。符号Bは、データの要素数(処理する画素数)を示し、符号Oは、出力チャネル数(すなわち、当該レイヤーに含まれるユニット数)を示し、符号Iは、入力チャネル数(すなわち、1つ前のレイヤーに含まれるユニット数)を示す。フォワード処理では、図3で説明したように、入力レイヤーおよび中間レイヤーにおいて、出力データDN+1(中間データ)を算出する処理が、出力チャネル毎に、入力データDとパラメータWとを変えながら行われる。
【0052】
バックワード処理において、符号ΔDN+1は、出力側のレイヤーから受けるデータの誤差を示し、符号ΔDは、入力側のレイヤーに出力するデータの誤差を示す。ここで、出力側は、フォワード処理においてデータが出力される側を示し、入力側は、フォワード処理においてデータが入力される側を示す。符号ΔWは、パラメータの誤差を示し、符号Wは、パラメータを示す。その他の符号は、フォワード処理と同じである。
【0053】
バックワード処理では、図4で説明したように、入力誤差ΔD(Δ中間データまたはΔ入力データ)を算出する処理が、出力チャネル毎に、出力誤差ΔDN+1とパラメータWとを変えながら行われる。また、パラメータ誤差ΔW(Δパラメータ)を算出する処理が、出力チャネル毎に、出力誤差ΔDN+1と入力データDとを変えながら行われる。
【0054】
ここで、フォワード処理およびバックワード処理等のニューラルネットワークの訓練を複数の計算ノード(例えば、半導体装置10と外部メモリ40のペア)で並列に実行する場合、計算ノードの割り当て方として、以下の3つが考えられる。
(割り当て方1)データを、画像毎または画像を分割した分割画像毎に計算ノードを割り当てる。すなわち、データを要素毎に計算ノードに割り当てる(バッチ/画像分割)。
(割り当て方2)データをチャネル(各レイヤーのユニット)方向に分割して計算ノードに割り当てる(チャネル分割)。
(割り当て方3)データをレイヤー毎に計算ノードに割り当てる(レイヤー分割)。
【0055】
チャネル分割では、レイヤー単位で入出力するデータを全対全で通信する必要があるため、通信ネックになりやすい。レイヤー分割では、レイヤー間で入出力するデータを計算ノード間で移動する必要があるため、通信ネックになりやすく、移動するデータの管理が複雑になる。バッチ/画像分割では、計算ノード間でパラメータに関するデータを縮約(Reduce)または放送(Broadcast)する必要がある。しかし、大半のニューラルネットワークの構成では、演算に使用するパラメータのサイズは、演算に使用する入力データ等のデータのサイズより小さいため、通信ネックになりにくい。したがって、計算ノード間での通信量を抑えるためには、サイズが比較的大きいデータを要素毎に計算ノードに割り当てるバッチ/画像分割(割り当て方1)により訓練することが効率をよくする場合が多い。
【0056】
外部メモリ40の帯域は、サイズが比較的大きいデータを考慮して設計する必要がある。例えば、バッチ/画像分割によるニューラルネットワークの訓練では、レイヤー間で入出力されるデータは、演算を実行する演算器毎に異なるため、データを外部メモリ40に退避する場合、帯域を広くする必要がなる。
【0057】
一方、バッチ/画像分割によるニューラルネットワークの訓練では、サイズが比較的小さいパラメータのみを外部メモリ40に対して入出力する場合、外部メモリ40の帯域を使い切れないおそれがある。例えば、パラメータは、外部メモリ40から各演算器に同じ値が放送され、パラメータの誤差は縮約されて外部メモリ40に格納される。放送と縮約は、互いに対となる通信であり、データの入出力方向は逆であるが、帯域のオーダーは変わらない。なお、パラメータを最適化するためのパラメータの更新処理は、畳み込み演算等のレイヤーアルゴリズムの処理に比べて演算回数が少ないため、多数の演算器が搭載される第2の演算部20でこれを行った場合、演算器の使用効率が低下するおそれがある。本実施形態では、これら問題を解決することができる。
【0058】
また、ニューラルネットワークの訓練においては、縮約・放送という通信が多数の演算器に対して実行される。この種の通信の帯域は、各演算器の近傍の通信路の幅に制限される場合があり、この場合、外部メモリ40の帯域を使い切れないおそれがある。例えば、第2の演算部20において演算を行う場合、レイヤーアルゴリズムの計算時にはパラメータの縮約・放送の通信が必要になり、レイヤーアルゴリズムの計算を行うタイミングにおいて、外部メモリ40の帯域を使い切れなくなる場合がある。一方、本実施形態では、第2の演算部20によるレイヤーアルゴリズムの計算と並列に、第1の演算部30においてパラメータの更新処理という付加的な計算を実行することにより、外部メモリ40の帯域を有効に利用することができる。
【0059】
図6は、パラメータを最適化する勾配降下法の例を示す説明図である。図6において、符号t-1が付いたパラメータは、更新前のパラメータを示し、符号tが付いたパラメータは、更新後のパラメータを示す。符号ΔWtは、更新直前のパラメータの誤差の勾配を示す。
【0060】
Momentum-SGDでは、パラメータ誤差ΔWtから新たなパラメータWtを算出するために、2回の乗算と2回の加減算とが行われる。ADAMでは、パラメータ誤差ΔWtから新たなパラメータWtを算出するために、6回の乗算と、6回の加減算と、1回の平方根演算と、1回の除算が行われる。これに対して、図5で示したレイヤーアルゴリズムの計算においては、パラメータサイズとデータサイズの積に比例する回数の積和計算が実行される。このように、パラメータの更新時に実行される演算の回数は、畳み込み演算等のレイヤーアルゴリズムで実行される演算の回数より少ない。このため、パラメータを更新する演算のみを演算器で実行する場合、演算性能当たりのメモリの帯域の比であるB/F比が高くなり、演算器の数が多いベクトル演算部等を使用すると、大半の演算器が遊んでしまうことになる。
【0061】
図7は、図1の半導体装置10によりバックワード処理とパラメータの更新処理とを実行する場合の例を示すシーケンス図である。すなわち、図7は、半導体装置10の制御方法の例を示す。図7は、ディープニューラルネットワークの誤差逆伝播の第2の演算部20による実行と、第1の演算部30によるパラメータの更新処理とを並列に実行する例を示す。図7では、ディープニューラルネットワークの複数のレイヤーのうち、レイヤーN-1の処理と、レイヤーN-1の1つ後ろのレイヤーNの処理の一部と、レイヤーN-1の1つ前のレイヤーN-2の処理の一部が示される。
【0062】
パラメータW、M、Vに付した符号Tは、更新前であることを示し、パラメータW、M、Vに付した符号T+1は、更新後であることを示す。例えば、パラメータWは、ADAMの手法によりパラメータM、Vとともに更新される。
【0063】
五角形はデータ転送を示し、突出した角部が転送先を示す。五角形は、一度にまとめてデータ転送を行うことを示すとは限らず、複数回に分けてデータ転送を行うことを示してもよい。データ転送を複数回に分けて行う場合、第1のデータ転送制御部34または第2のデータ転送制御部35は、データ転送毎にデータ転送命令を発行する。以下では、外部メモリ40と第1のメモリ32との間でデータを転送するデータ転送命令は、外部データ転送命令と称し、第1のメモリ32および第2のメモリ22間でデータを転送するデータ転送命令は、内部データ転送命令と称する。図1に示した命令デコーダ33は、外部データ転送命令をデコードした場合、第2のデータ転送制御部35に制御信号を出力し、内部データ転送命令をデコードした場合、第1のデータ転送制御部34に制御信号を出力する。
【0064】
データ転送と同様に、第2の演算部20によるデータ誤差ΔDの算出処理およびパラメータ誤差ΔWの算出処理と、第1の演算部30によるパラメータWの算出処理は、複数回に分けて行われてもよい。これら算出処理では、第2の演算器21および第1の演算器31は、1つの命令で複数のデータに対する演算を実行してもよい(SIMD方式)。この際、命令デコーダ33に供給されるSIMD命令は、演算するデータの数を指定可能であってもよい(可変長のSIMD方式)。
【0065】
第1の演算部30は、内部データ転送命令の受信に基づいて、第1のメモリ32に保持しているパラメータWN,Tを、第2の演算部20の第2のメモリ22に転送する。このため、半導体装置10は、第2のバスEBUSを使うことなく、パラメータWN,Tを第2のメモリ22に転送することができる。パラメータWN,Tは、フォワード処理時に使用したレイヤーNのパラメータであり、レイヤーNのパラメータの更新処理時に外部メモリ40から第1のメモリ32に転送済みである。第2の演算部20は、図5に示したように、データ誤差ΔDN+1と転送されたパラメータWN,Tとを使用してデータ誤差ΔDを算出し、算出したデータ誤差ΔDを第2のメモリ22に格納する。なお、データ誤差ΔDN+1は、レイヤーN+1のバックワード処理時に算出されており、第2のメモリ22に保持されている。
【0066】
第2の演算部20によるレイヤーNのデータ誤差ΔDの算出中に、第1の演算部30は、外部データ転送命令を受信し、外部メモリ40に保持されたデータDN-1を、第1のメモリ32に転送し、さらに、第1のメモリ32から第2のメモリ22に転送する。データ誤差ΔDの算出中、外部メモリ40はアクセスされないため、第2のバスEBUSの帯域の空きを利用してデータDN-1を第1のメモリ32に転送することができる。
【0067】
次に、第2の演算部20は、レイヤーNの処理で算出したデータ誤差ΔDと外部メモリ40から転送されたデータDN-1とを使用してパラメータ誤差ΔWN-1を算出し、算出したパラメータ誤差ΔWN-1を第2のメモリ22に格納する。第1の演算部30は、内部データ転送命令の受信に基づいて、パラメータ誤差ΔWN-1を第2のメモリ22から第1のメモリ32に順次転送する。例えば、図2の命令制御部60は、第2の演算部20によるパラメータ誤差ΔWN-1を算出するタイミングと、パラメータ誤差ΔWN-1を第1のメモリ32に転送する内部データ転送命令のタイミングが合うように、第2の演算部20にタイミング信号を出力する。
【0068】
第1の演算部30は、外部データ転送命令の受信に基づいて、パラメータWN-1,T、MN-1,T、VN-1,Tを外部メモリ40から第1のメモリ32に転送する。また、第1の演算部30の第1の演算器31は、命令デコーダ33がデコードした演算命令に基づいて、パラメータWN-1の更新処理を行う。すなわち、第1の演算器31は、図6に示したADAMの演算を実行し、新たなパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1を算出して第1のメモリ32に格納する。第1の演算部30は、外部データ転送命令の受信に基づいて、第1のメモリ32に保持された更新後のパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1を外部メモリ40に転送する。
【0069】
図7に示すように、第1の演算部30によるパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1の算出処理は、第2の演算部20によるパラメータ誤差ΔWの算出と並列に実行される。なお、パラメータ誤差ΔWN-1は、当該レイヤーN-1のパラメータWN-1,T+1、N-1,T+1、VN-1,T+1の算出のみに使用されるため、外部メモリ40に待避される必要はない。
【0070】
次に、レイヤーNのデータ誤差ΔDの算出と同様に、第2の演算部20の第2の演算器21を使用してレイヤーN-1のデータ誤差ΔDN-1が算出される。第1の演算部30は、内部データ転送命令の受信に基づいて、データ誤差ΔDN-1の算出に使用されるパラメータWN-1,Tを第1のメモリ32から第2の演算部20の第2のメモリ22に転送する。パラメータWN-1,Tは、直前のパラメータ更新処理時に外部メモリ40から第1のメモリ32に転送されているため、外部メモリ40から改めて転送する必要はなく、第2のバスEBUSの帯域を使わなくて済む。
【0071】
第2の演算部20の第2の演算器21は、第2のメモリ22に保持されたデータ誤差ΔDとパラメータWN-1,Tとを使用してデータ誤差ΔDN-1を算出し、算出したデータ誤差ΔDN-1を第2のメモリ22に格納する。なお、データ誤差ΔDは、レイヤーNのバックワード処理時に算出され、第2のメモリ22に保持されている。第2の演算部20によるレイヤーN-1のデータ誤差ΔDN-1の算出中に、第1の演算部30は、外部データ転送命令に基づいて、第1のメモリ32を介して外部メモリ40から第2のメモリ22にデータDN-2を転送する。
【0072】
次に、レイヤーN-1のパラメータ誤差ΔWN-1の算出と同様に、第2の演算部20の第2の演算器21を使用してレイヤーN-2のパラメータ誤差ΔWN-2が算出される。第2の演算部20は、データ誤差ΔDN-1と外部メモリ40から第2のメモリ22に転送されたデータDN-2とを使用してパラメータ誤差ΔWN-2を算出し、算出したパラメータ誤差ΔWN-2を第2のメモリ22に格納する。第1の演算部30は、内部データ転送命令の受信に基づいて、パラメータ誤差ΔWN-2を第2のメモリ22から第1のメモリ32に順次転送する。第1の演算部30は、外部データ転送命令の受信に基づいて、パラメータWN-2,T、MN-2,T、VN-2,Tを外部メモリ40から第1のメモリ32に転送する。そして、第1の演算部30の第1の演算器31は、演算命令に基づいて、新たなパラメータWN-2,T+1、MN-2,T+1、VN-2,T+1を算出することでパラメータを更新する。第1の演算部30は、外部データ転送命令の受信に基づいて、第1のメモリ32に保持された更新後のパラメータWN-2,T+1、MN-2,T+1、VN-2,T+1を外部メモリ40に転送する。
【0073】
本実施形態では、第2の演算部20によるパラメータ誤差ΔWの算出中に、第1の演算部30によりパラメータWの更新処理を実行することができる。すなわち、バックワード処理とパラメータWの更新処理とを、異なる第2の演算器21および第1の演算器31により並列に実行することができる。これにより、図4に示したバックワード処理およびパラメータの更新処理に掛かる時間を短縮することができる。また、パラメータ誤差ΔWの算出中にパラメータWの更新処理を実行するため、パラメータWの更新処理のみに使用するパラメータ誤差ΔWは、外部メモリ40に待避させる必要がない。したがって、パラメータ誤差ΔWの転送を考慮せずに第2のバスEBUSの帯域を設計できる。第2のバスEBUSを使用した無駄なデータ転送をなくすことができるため、半導体装置10の消費電力を削減することができる。
【0074】
さらに、図6で説明したように、ニューラルネットワークで使用されるパラメータを更新する処理で実行される演算の回数は、フォワード処理およびバックワード処理での演算の回数に比べて少ない。このため、パラメータの更新処理を第2の演算部20の第2の演算器21に実行させる場合、B/F比が高くなり、第2の演算器21の使用効率が低下してしまう。しかし、第2の演算器21によるパラメータ誤差ΔWの算出中に、第1の演算部30の第1の演算器31によりパラメータWの更新処理を実行することで、第2の演算器21の使用効率が低下することを防止できる。
【0075】
また、第1の演算器31は、パラメータの更新処理の演算数に合わせた数の演算器に設計可能であるため、パラメータの更新処理時に第1の演算部30の第1の演算器31の使用効率を最適にすることができる。さらに、第2の演算部20によるデータ誤差ΔDの算出時に、パラメータWを外部メモリ40から転送しなくてよいため、第2のバスEBUSの帯域を、パラメータWの量を考慮することなく設計することができる。
【0076】
図7はまとめて実行されているように見えるが、実際には、図8に示すように、パラメータの更新処理と、それに付随するパラメータ等の転送動作、パラメータ誤差ΔWの算出処理は、複数に分割して実行される。
【0077】
図8は、図7におけるレイヤーN-1のパラメータ誤差ΔWN-1の算出処理とパラメータWN-1、MN-1、VN-1の更新処理との詳細を示す説明図である。パラメータ誤差ΔWN-1の算出処理とパラメータWN-1、MN-1、VN-1の更新処理とは、任意の数に分割して並列に実行可能である。例えば、図8は、処理を4つに分割して実行する例を示し、あるいは、全体の処理を100個に分割したうちの4つの処理を示している。以下では、全体の処理を4つに分割して並列に実行する例について説明する。
【0078】
処理(1)では、まず、第2の演算部20は、第2のメモリ22が保持するデータ誤差ΔD(4分の1)と第2のメモリ22に転送されたデータDN-1(4分の1)とを使用してパラメータ誤差ΔWN-1(4分の1)を算出する。第2の演算部20は、算出したパラメータ誤差ΔWN-1を第2のメモリ22に格納する。
【0079】
処理(1)では、レイヤーN-1のパラメータWN-1,T、MN-1,T、VN-1,Tのうち最初の4分の1が外部メモリ40から第1のメモリ32に転送される。また、第2の演算部20が算出して第2のメモリ22に格納した最初の4分の1のパラメータ誤差ΔWN-1が第2のメモリ22から第1のメモリ32に転送される。
【0080】
処理(1)では、第1の演算部30は、第1のメモリ32に転送されたパラメータWN-1,T、MN-1,T、VN-1,T(4分の1)と、パラメータ誤差ΔWN-1(4分の1)とを使用して、更新後のパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1(4分の1)を算出する。算出されたパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1は、外部メモリ40に転送される。また、パラメータWN-1,Tは、第1のメモリ32から第2の演算部20の第2のメモリ22に転送される。
【0081】
処理(2)、処理(3)、処理(4)においても、処理(1)と同様に、データ誤差ΔDの4分の1とデータDN-1の4分の1とを使用してパラメータ誤差ΔWN-1の4分の1が算出される。また、パラメータWN-1,T、MN-1,T、VN-1,Tの4分の1とパラメータ誤差ΔWN-1の4分の1とを使用して、更新後のパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1の4分の1が算出される。算出されたパラメータWN-1,T+1、MN-1,T+1、VN-1,T+1は、外部メモリ40に転送され、パラメータWN-1,Tは、第1のメモリ32から第2の演算部20の第2のメモリ22に転送される。
【0082】
なお、第2の演算部20は、パラメータ誤差ΔWN-1の算出が完了した後、データ誤差ΔDN-1の算出を開始する。データ誤差ΔDN-1の算出処理の分割数は、パラメータ誤差ΔWN-1の算出処理の分割数と相違してもよく、分割せずにまとめて実行されてもよい。
【0083】
図9は、図7のシーケンスを実行する第2の演算部20および第1の演算部30の動作の例を示すフロー図である。すなわち、図9は、半導体装置10の制御方法の例を示す。図4および図7と同様の動作については、詳細な説明を省略する。第2の演算部20によるバックワード処理は、第2の演算部20によるフォワード処理の完了後に実行される。第1の演算部30によるパラメータの更新処理は、第2の演算部20によるバックワード処理の進行に合わせて実行される。図9に示す例では、パラメータの更新処理は、ADAMの手法により実行されるが、Momentum-SGDや他の手法により実行されてもよい。
【0084】
まず、第2の演算部20は、ステップS21において、バックワード処理の出力レイヤーで算出した出力データと、予め用意された教師データとを使用してデータ誤差ΔDを算出する。次に、第2の演算部20は、ステップS22において、データ誤差ΔD(出力レイヤー側)と当該レイヤーの入力データDとを使用してパラメータ誤差ΔWを算出する。算出したパラメータ誤差ΔWは、第1の演算部30によるパラメータの更新処理に使用される。
【0085】
次に、第2の演算部20は、ステップS23において、出力側のデータ誤差ΔDとパラメータWとを使用して入力側のデータ誤差ΔDを算出する。次に、第2の演算部20は、ステップS24において、入力レイヤーの処理を実行した場合、動作を終了し、入力レイヤー以外の処理を実行した場合、1つ前のレイヤー(入力レイヤー側)に対する動作を実行するためにステップS22に戻す。
【0086】
一方、第1の演算部30は、ステップS31において、当該レイヤーの入力データDを外部メモリ40から第1のメモリ32に転送し、さらに、第2のメモリ22に転送する。なお、初回のステップS31は、出力レイヤーの1つ前のレイヤーに対する動作である。入力データDは、ステップS22で使用される。次に、第1の演算部30は、ステップS32において、第1のデータ転送制御部34を制御し、第2の演算部20が算出したパラメータ誤差ΔWを第2のメモリ22から第1のメモリ32に転送する。
【0087】
第1の演算部30は、ステップS33において、第2のデータ転送制御部35を制御し、更新前のパラメータW、M、Vを外部メモリ40から第1のメモリ32に転送する。次に、第1の演算部30は、ステップS34において、更新前のパラメータW、M、Vとパラメータ誤差ΔWとを使用して、更新後のパラメータW、M、Vを算出する。すなわち、第1の演算部30は、パラメータの更新処理を実行する。次に、第1の演算部30は、ステップS35において、更新後のパラメータW、M、Vを第1のメモリ32から外部メモリ40に転送する。
【0088】
ここで、ステップS32によるパラメータ誤差ΔWの第2のメモリ22から第1のメモリ32への転送と、ステップS33による更新前のパラメータW、M、Vの外部メモリ40から第1のメモリ32への転送とは、互いに独立に実行される。すなわち、第1のデータ転送制御部34と第2のデータ転送制御部35とは、互いに別の情報を転送する。外部メモリ40の帯域は大きい。さらに、ステップS34での第1の演算部30によるパラメータの更新処理では、第2のバスEBUSおよび第1のバスIBUSは、使用されない。このため、ステップS32、S33、S34、S35の動作の一部は、タイミングを重複して実行することができる。但し、パラメータの更新処理に使用するデータおよびパラメータは、更新処理の実行前に第1のメモリ32に格納されている必要がある。
【0089】
また、図8で説明したように、第2の演算部20によるステップS22の動作と、第1の演算部30によるS32、S33、S34、S35の動作とは、所定数のデータと所定数のパラメータのグループに区切って、複数回に分けて実行されてもよい。さらに、第2のバスEBUSを介した外部メモリ40からのデータDN-1の転送を複数回に分けて実行してもよい。
【0090】
次に、第1の演算部30は、ステップS36において、更新前のパラメータWを第1のメモリ32から第2のメモリ22に転送する。次に、第1の演算部30は、ステップS37において、入力レイヤーのパラメータの更新処理を実行した場合、動作を終了する。また、第1の演算部30は、入力レイヤー以外のパラメータの更新処理を実行した場合、1つ前のレイヤー(入力レイヤー側)に対する動作を実行するためにステップS31に戻す。
【0091】
なお、図7から図9では、第1の演算部30が第2の演算部20の代わりにパラメータWの更新処理を実行することで、図4に示したバックワード処理とパラメータの更新処理のトータルの処理時間を短縮し、第2のバスEBUSの帯域を減らす例を説明した。しかし、第1の演算部30が実行する処理は、パラメータWの更新処理に限定されない。例えば、第1の演算部30は、第2の演算部20の計算負荷を軽減するとともに、外部メモリ40から第2のメモリ22へのデータの転送量を削減するための他の処理を実行してもよい。また、第1の演算部30の第1の演算器31が搭載する演算器の種類は、第1の演算部30で実行する処理に応じて適宜変更することができる。また、第1の演算部30は、第2の演算部20の代わりに、パラメータの更新処理と他の処理とを実行するために設計されてもよく、第1の演算器31には、これら処理を実行するために必要な演算器を搭載することができる。
【0092】
図7に示した動作を実行する半導体装置10は、第2のバスEBUSの帯域を抑えて、バックワード処理およびパラメータの更新処理を効率よく実行できる。また、図8に示したように、パラメータの更新処理を複数回に分けて実行することで、パラメータの縮約・放送時に外部メモリ40の帯域が余るタイミングが発生することを防止することができる。さらに、半導体装置10では、第2の演算部20がパラメータの更新処理を実行しないため、パラメータの更新処理の実行時のB/F比を考慮することなく、第2の演算部20および第1のバスIBUSを設計することができる。
【0093】
本実施形態では、第1の演算部30と、第2の演算部20がそれぞれ単一の命令列を順次実行するよう構成されており、レイヤーアルゴリズムとパラメータ更新処理を並列に実行できる。したがって、本実施形態は、レイヤーアルゴリズムとパラメータ更新処理を並列に実行するための構成を備えている。
【0094】
レイヤーアルゴリズムとパラメータ更新処理を並列に実行するための構成の他の一例として、二つ以上の命令ストリームを実行可能な単一種の演算器がグローバルキャッシュを介して外部メモリと接続する構成を考えることができる。この構成では、演算部をレイヤーアルゴリズムとパラメータ更新処理というB/F比が大きく異なる計算のどちらにも対応できるように設計しておく必要があることから、回路設計の冗長性が増すおそれがある。例えば、演算部を階層化し、各階層で一次キャッシュ、二次キャッシュのような内部メモリを持つような構成は、パラメータ更新処理には必要ないが、レイヤーアルゴリズムでは性能向上の面で大きな効果があるので設置される場合がある。しかし、このような構成ではグローバルキャッシュと個々の演算器とのデータパスが長くなるため、全体の処理時間が伸びてしまうおそれがある。これに対して、本実施形態の第1の演算部30では、第1の演算器31と、第1のメモリ32を、物理的に近い場所に設置できるので、遅延の発生を減少させつつパラメータ更新処理を実行することができる。
【0095】
また、さらに他の例として、第1の演算部30と、第2の演算部20が外部メモリを経由してデータをやりとりする構成も考えられる。このような構成では、第2の演算部20がパラメータ誤差ΔWを外部メモリに書き出し、第1の演算部30がこのパラメータ誤差ΔWの値を外部メモリから読み出して、パラメータ更新処理を実行する必要がある。このため、本実施形態と比べて外部メモリにアクセスする頻度とデータ量が増えてしまう。このような構成では、本実施形態と比べて全体の処理時間が伸びると考えられる。
【0096】
また、パラメータ誤差ΔWを外部メモリ40に待避せずに、第2の演算部20で保持しておき、保持しているパラメータ誤差ΔWを使用してパラメータの更新値を算出し、算出した更新値を外部メモリ40に格納する場合も考えられる。例えば、ADAMを利用して、パラメータの最適化をする場合、レイヤーアルゴリズムの処理で使用するパラメータW以外にパラメータM、Vが必要になり、これらパラメータM、Vも第2の演算部20に保持する必要がある。この場合、第2の演算部20の第2のメモリ22の容量が不足するおそれがあり、また、バッファ容量を不足させないために、パラメータM、Vだけを外部メモリ40に待避することは効率的とは言えない。
【0097】
また、パラメータM、Vを使用せずに、パラメータ誤差ΔWのみからパラメータWの更新値を求めることで、第2のメモリ22の容量不足が避けられる場合にも、パラメータWの最適値への収束が遅くなり、パラメータの更新処理時間が長くなってしまうおそれがある。
【0098】
さらに、第2の演算部20と外部メモリ40との間にキャッシュメモリを設けることで、外部メモリ40の帯域を削減することが考えられる。例えば、第2の演算部20がパラメータWやパラメータ誤差ΔWをキャッシュメモリと送受信している間に、キャッシュメモリと外部メモリ40との間で画像データD等を通信する。
【0099】
これにより、パラメータWやパラメータ誤差ΔWの通信において、第2の演算部20側に起因する通信帯域のボトルネックが存在する場合であっても、キャッシュメモリと外部メモリ40とが常に通信しているような状況を作ることが可能である。しかしながら、この方法では、高速な外部メモリ40を利用できる場合も、あえて帯域を削減することとなり、例えば、パラメータの更新処理のような、B/F比の高い処理において外部メモリ40の帯域がボトルネックとなり処理時間が伸びてしまうおそれがある。
【0100】
これに対して、本実施形態では、第1の演算部30によるパラメータの更新処理を第2の演算部20によるレイヤーアルゴリズムの処理と並列に実行することができる。このため、第1の演算部30と外部メモリ40とが常に通信しているような状況を作り出すことができ、外部メモリ40の帯域を有効に使うことができる。
【0101】
さらに、この場合、第2の演算部20とキャッシュメモリ間の帯域が確保できたとしても、キャッシュメモリと外部メモリ40間の帯域が確保できず、例えば、B/F比の高いパラメータの更新処理がシーケンス全体のボトルネックになるおそれがある。
【0102】
なお、レイヤーアルゴリズムの処理とパラメータの更新処理とのB/F比は、大きく異なり、異なるレイヤー間のB/F比も大きく異なる場合がある。これは、画像サイズやチャネル数などによって、レイヤーアルゴリズムの計算量、入出力データサイズおよびパラメータサイズのバランスが変わるためである。
【0103】
例えば、画像処理向けのディープラーニングの典型的な構成であるResNetでは、合計4回のプーリングが実行され、プーリング毎に画像サイズ(XY平面の面積)は1/4となり、チャネル数は2倍となる。ResNetでは、各レイヤーの計算量が概ね一定となる設計がなされているので、入力層に近いレイヤーでは、画像データの通信がボトルネックとなりやすく、出力層に近いレイヤーでは、計算あるいは重みの通信がボトルネックになりやすい。特に、バッチ/画像分割により計算ノードを割り当てる場合、演算器の使用効率を向上させるため、画像サイズや画像のバッチサイズを大きくとることが多い。つまり、画像処理向けのディープラーニングの典型的な構成では、レイヤーアルゴリズムのB/F比は、レイヤーが入出力する画像サイズに概ね比例し、入力層に近いレイヤーほど上昇し、出力層に近いレイヤーほど下降する傾向を持つ。
【0104】
このようにディープラーニングの計算において支配的な計算量を持つ、レイヤーアルゴリズム間においても、B/F比には無視できない差がある。このため、B/F比の高いレイヤーにおいても充分な通信帯域を確保できるように、外部メモリ40の通信帯域を設計しておく必要があるため、外部メモリ40自体の帯域を削減することは困難である。
【0105】
さらに、レイヤーアルゴリズムのB/F比に応じて、外部メモリ40のクロック周波数を動的に変えることで、外部メモリ40とキャッシュメモリとが常に通信しているような状況を作り出すことも可能である。しかしながら、このような設計は、システム構成を複雑化し、半導体装置の安定動作に支障がきたすおそれがある。また、パラメータ更新処理とレイヤーアルゴリズムの処理との並列実行を行わないため、パラメータ更新処理をレイヤーアルゴリズムの処理とは異なるタイミングで実施する必要がある。
【0106】
これに対して、本実施形態の構成ではパラメータ更新処理とレイヤーアルゴリズムの計算とを並列に実行することが可能であり、さらに、並列実行させるかどうかはソフトウェアにより制御可能である。このため、例えば、B/F比の高いレイヤーアルゴリズムでは並列実行させず、B/F比の低いレイヤーアルゴリズムでは並列実行させるなどの対応も実現できる。したがって、本実施形態の構成では、レイヤーアルゴリズムごとに異なるB/F比に応じて、ディープニューラルネットワークの処理を効率的に実行することができる。
【0107】
なお、本実施形態は、上述の例と比べて優位性を有するものであるが、本発明は、上述の例の構成の一部または全部を備えていてもよい。
【0108】
図10は、図1の第1のメモリ32の例を示すブロック図である。第1のメモリ32は、動作制御部CNTLと、アドレスデコーダADECと、データ入出力部DIOと、複数のバンクBK(この例では、4個)を含むメモリセルアレイARYとを有している。
【0109】
アドレスデコーダADECは、図1の第1および第2のデータ転送制御部34、35または命令デコーダ33のいずれかから受けるバンク番号に基づいて、アクセスするバンクBKのいずれかを選択し、アドレスに基づいて選択したバンクBK内のメモリセルを選択する。動作制御部CNTLは、第1および第2のデータ転送制御部34、35または命令デコーダ33のいずれかから受けるポート番号、リードイネーブル、ライトイネーブル等の制御信号に基づいて、メモリセルアレイARYおよびデータ入出力部DIOの動作を制御する。
【0110】
データ入出力部DIOは、受信するポート番号に応じて、入出力ポートP(P0、P1、P2)のいずれかをメモリセルアレイARYに接続し、メモリセルアレイARYに対してデータを読み書きする。入出力ポートP0は、第1の演算器31に接続され、入出力ポートP1は、第2のバスEBUSを介して外部メモリ40に接続され、入出力ポートP2は、第1のバスIBUSを介して第2の演算部20の第2のメモリ22に接続される。特に限定されないが、メモリセルアレイARYがアクセスされる毎にデータ入出力部DIOが入力または出力するデータは、例えば、2のn乗(nは、4以上の整数)でもよい。なお、第1の演算器31で処理するデータに誤り検出訂正用のデータが付加される場合、データのビット数は2のn乗+mビットでもよい(mは、誤り検出訂正用のデータのビット数)。
【0111】
データ入出力部DIOは、リードイネーブルに基づいてバンクBKのいずれかから読み出されるデータをポート番号に応じて選択される入出力ポートPのいずれかに出力する。データ入出力部DIOは、ライトイネーブルに基づいて、ポート番号に応じて選択される入出力ポートPで受けるデータを、バンク番号で選択されるバンクBKに出力し、バンクBK内のメモリセルに書き込む。
【0112】
ポート番号、アドレスおよびバンク番号の各々は、複数ビットで構成され、オアゲートORは、信号線毎に設けられる。リードイネーブルおよびライトイネーブルは、論理レベルにより有効または無効を示す1ビットの信号である。リードイネーブルは、メモリセルアレイARYからデータを読み出す場合に有効レベルになり、ライトイネーブルは、メモリセルアレイARYにデータを書き込む場合に有効レベルになる。
【0113】
図1に示した命令デコーダ33は、演算命令に基づいて、第1の演算器31で使用するデータを第1のメモリ32から読み出すために、アドレス、バンク番号、入出力ポートP0を選択するポート番号およびリードイネーブルを第1のメモリ32に出力する。また、命令デコーダ33は、第1の演算器31での演算の完了に基づいて、演算結果を第1のメモリ32に書き込むために、アドレス、バンク番号、入出力ポートP0を選択するポート番号およびライトイネーブルを第1のメモリ32に出力する。
【0114】
命令デコーダ33は、外部メモリ40から第1のメモリ32にデータを転送するデータ転送命令に基づいて、外部メモリ40の読み出し開始アドレス、第1のメモリ32の書き込み開始アドレス、転送サイズおよび入出力情報を第2のデータ転送制御部35に出力する。第2のデータ転送制御部35は、命令デコーダ33から受信した情報に基づいて、書き込みアドレス、バンク番号、入出力ポートP1を選択するポート番号およびライトイネーブルを第1のメモリ32に出力する。
【0115】
命令デコーダ33は、第1のメモリ32から外部メモリ40にデータを転送するデータ転送命令に基づいて、第1のメモリ32の読み出し開始アドレス、外部メモリ40の書き込み開始アドレス、転送サイズおよび入出力情報を第2のデータ転送制御部35に出力する。第2のデータ転送制御部35は、命令デコーダ33から受信した情報に基づいて、読み出しアドレス、バンク番号、入出力ポートP1を選択するポート番号およびリードイネーブルを第1のメモリ32に出力する。
【0116】
命令デコーダ33は、第2のメモリ22から第1のメモリ32にデータを転送するデータ転送命令に基づいて、第2のメモリ22の読み出し開始アドレス、第1のメモリ32の書き込み開始アドレス、転送サイズおよび入出力情報を第1のデータ転送制御部34に出力する。第1のデータ転送制御部34は、命令デコーダ33から受信した情報に基づいて、書き込みアドレス、バンク番号、入出力ポートP2を選択するポート番号およびライトイネーブルを第1のメモリ32に出力する。
【0117】
命令デコーダ33は、第1のメモリ32から第2のメモリ22にデータを転送するデータ転送命令に基づいて、第1のメモリ32の読み出し開始アドレス、第2のメモリ22の書き込み開始アドレス、転送サイズおよび入出力情報を第1のデータ転送制御部34に出力する。第1のデータ転送制御部34は、命令デコーダ33から受信した情報に基づいて、書き込みアドレス、バンク番号、入出力ポートP2を選択するポート番号およびライトイネーブルを第1のメモリ32に出力する。
【0118】
図11は、図1の第1のメモリ32の別の例を示すブロック図である。図10と同じ要素については、詳細な説明を省略する。図11に示す第1のメモリ32は、シングルポートタイプのデータ入出力部DIOと、データ入出力部DIOに接続されたスイッチ回路SWとを有している。第1のメモリ32のその他の構成は、図10と同様である。
【0119】
図11に示す第1のメモリ32では、データ入出力部DIOがシングルポートタイプのため、動作制御部CNTLは、ポート番号を受けず、リードイネーブルおよびライトイネーブルを受けて、データ入出力部DIOにおけるデータの転送方向を制御する。
【0120】
スイッチ回路SWは、図1の第1および第2のデータ転送制御部34、35または命令デコーダ33のいずれかから受けるスイッチ制御信号に基づいて、データ入出力部DIOのデータ端子を第1の演算器31、第2のバスEBUSまたは第1のバスIBUSに接続する。スイッチ制御信号は、図1に示した命令デコーダ33により、図10に示したポート番号の代わりに生成される。命令デコーダ33の動作と第1のメモリ32の動作とは、図10で説明した動作と同様である。
【0121】
図12は、図1の第1のメモリ32の別の例を示すブロック図である。図10および図11と同じ要素については、詳細な説明を省略する。第1のメモリ32は、複数のメモリコアMCORE(この例では、MCORE1、MCORE2の2個)とスイッチ回路SWとを有している。各メモリコアMCOREは、図10と同様に、図示しない動作制御部CNTL、アドレスデコーダADEC、データ入出力部DIO、および複数のバンクBKを含むメモリセルアレイARYを有してもよい。但し、データ入出力部DIOは、図11と同様に、シングルポートタイプであり、各メモリコアMCOREは、図11と同様に、ポート番号を受けない。各メモリコアMCOREのデータ端子は、スイッチ回路SWに接続されている。
【0122】
スイッチ回路SWは、図11のスイッチ回路SWと同様に、図1の第1および第2のデータ転送制御部34、35または命令デコーダ33のいずれかからスイッチ制御信号を受ける。そして、スイッチ回路SWは、スイッチ制御信号に基づいて、メモリコアMCOREのデータ端子のいずれか1つを第1の演算器31、第2のバスEBUSまたは第1のバスIBUSに接続する。スイッチ制御信号は、図1に示した命令デコーダ33により生成され、メモリコアMCOREを選択するアドレスの論理を含む。
【0123】
なお、例えば、メモリコアMCORE1と外部メモリ40との接続と、メモリコアMCORE2と第1の演算器31との接続とを同時に行う機能をスイッチ回路SWに持たせてもよい。この場合、スイッチ制御信号の論理は、メモリコアMCORE1、MCORE2と、第1の演算器31、第2のバスEBUS、第1のバスIBUSとの接続の組合せを示す。命令デコーダ33は、スイッチ回路SWの接続の組合せの数に対応する命令(演算命令およびデータ転送命令)をデコードする。これにより、複数のメモリコアMCOREを、同時かつ独立にアクセスすることができる。
【0124】
図13は、図1の第1のメモリ32の別の例を示すブロック図である。図12と同じ要素については、詳細な説明を省略する。図13に示す第1のメモリ32は、スイッチ回路SWが図12のスイッチ回路SWと異なることを除き、図12に示す第1のメモリ32と同様である。スイッチ回路SWは、第2のバスEBUSと第1のバスIBUSとを相互に接続する経路を有することを除き、図12のスイッチ回路SWと同様である。
【0125】
図1の命令デコーダ33は、外部メモリ40と第2の演算部20の第2のメモリ22との間でデータを直接転送する直接データ転送命令をデコードする機能を有している。換言すれば、半導体装置10は、直接データ転送命令を含む命令セットを有する。
【0126】
命令デコーダ33は、直接データ転送命令をデコードした場合、第2のバスEBUSと第1のバスIBUSとを接続するスイッチ制御信号を第1のメモリ32に出力する。また、命令デコーダ33は、外部メモリ40をアクセス動作させるための情報を第2のデータ転送制御部35に出力し、第2のメモリ22をアクセス動作させるための情報を第1のデータ転送制御部34に出力する。
【0127】
第2のデータ転送制御部35は、命令デコーダ33からの情報に基づいて、外部メモリ40に読み出しコマンドまたは書き込みコマンドを発行する。第1のデータ転送制御部34は、命令デコーダ33からの情報に基づいて、第2のメモリ22に読み出しコマンドまたは書き込みコマンドを発行する。これにより、第1のメモリ32のメモリコアMCOREにデータを書き込むことなく、外部メモリ40と第2の演算部20の第2のメモリ22との間でデータを転送することができる。例えば、図7に示したデータDN-1、DN-2をメモリコアMCOREに書き込むことなく、外部メモリ40から第2のメモリ22に転送することができる。
【0128】
図14は、図1の第1のメモリ32の別の例を示すブロック図である。図11および図12と同じ要素については、詳細な説明を省略する。図14に示す第1のメモリ32は、メモリコアMCORE毎にスイッチ回路SW(SW1、SW2)が設けられており、各スイッチ回路SWは、互いに異なるスイッチ制御信号を命令デコーダ33から受けて動作する。スイッチ回路SWは、図11に示したスイッチ回路SWと同様であり、メモリコアMCOREの図示しないデータ入出力部DIOを第1の演算器31、第2のバスEBUSまたは第1のバスIBUSに接続する。
【0129】
スイッチ制御信号は、メモリコアMCOREを選択するアドレスの論理を含む。これにより、第1のメモリ32を2つの独立したメモリとして動作させることができる。すなわち、メモリコアMCORE2の動作の影響を受けることなく、メモリコアMCORE1を動作させることができ、メモリコアMCORE1の動作の影響を受けることなく、メモリコアMCORE2を動作させることができる。
【0130】
以上、この実施形態では、ニューラルネットワークにおけるフォワード処理およびバックワード処理を第2の演算部20により実行し、パラメータの更新処理を、バックワード処理のバックグラウンドで第1の演算部30により実行する。また、パラメータの更新処理に適した仕様および数の演算器を第1の演算部30に搭載し、バックワード処理で使用するパラメータWを、外部メモリ40でなく第1のメモリ32から転送する。これにより、第2の演算部20および第1の演算部30の双方の演算器の使用効率を低下させることなく、効率よく外部メモリ40の帯域に合わせてバックワード処理およびパラメータの更新処理を実行することができる。
【0131】
また、バックワード処理とパラメータの更新処理とを並列に実行するため、バックワード処理の開始からパラメータを更新するまでの時間を短縮することができる。さらに、バックワード処理のパラメータ誤差ΔWの算出処理とパラメータの更新処理とを並列に行うことで、第2のバスEBUSの帯域を効率よく利用することできる。
【0132】
第2の演算部20が生成したパラメータ誤差ΔWを外部メモリ40に格納することなく、第1の演算部30によりパラメータの更新処理を実行することができる。また、第2の演算部20は、第1の演算部30が生成したパラメータWの更新値を外部メモリ40から読み出すことなく、第1のメモリ32から読み出すことで、データ誤差ΔDを算出することができる。これにより、外部メモリ40に対するデータ転送を減少させることができ、第2のバスEBUSの帯域を有効に使うことができる。また、半導体装置10の消費電力を削減することができる。
【0133】
なお、第1の演算部30は、第2の演算部20の計算負荷を軽減するとともに、外部メモリ40から第2のメモリ22へのデータの転送量を削減するための他の付加的な処理を、命令に基づいて実行してもよい。すなわち、第1の演算部30が実行する処理は、パラメータの更新処理に限定されない。この場合にも、上記効果を得ることができる。
【0134】
図15は、本発明の別の実施形態における半導体装置の例を示すブロック図である。図1と同じ要素については、同じ符号を付し、詳細な説明は省略する。図15に示す半導体装置10Aは、図1の命令デコーダ33および第1および第2のデータ転送制御部34、35の代わりに、命令デコーダ33Aおよび第1および第2のデータ転送制御部34A、35Aを有している。半導体装置10Aのその他の構成は、図1に示す半導体装置10と同様である。半導体装置10Aが搭載される情報処理装置は、図2に示した情報処理装置と同様である。
【0135】
命令デコーダ33Aは、受信した命令を保持する命令キュー331(命令バッファ)を有しており、命令キュー331に保持された命令をデコードする。本実施形態の命令デコーダ33Aは、命令(デコード結果)の出力を待ち合わせる待ち合わせ命令をデコードすることができる。命令デコーダ33Aは、待ち合わせ命令をデコードした場合、命令のデコードを停止し、第1および第2のデータ転送制御部34A、35Aのいずれか、または両方から開始信号STT(STT1、STT2)を受けるまで、待ち合わせ命令に続く命令のデコードを実行しない。
【0136】
命令キュー331を設けることで、待ち合わせ命令に続く命令を、キューに保持しておくことができ、命令デコーダ33Aに命令を供給する回路(図2の命令制御部60等)は、開始信号STTに同期させることなく、命令デコーダ33Aに命令を供給できる。なお、命令キューは、命令デコーダ33Aの外部に配置されてもよい。
【0137】
第1のデータ転送制御部34Aは、第2の演算部20から受信する完了信号CPLT1に応答して開始信号STT1を出力し、あるいは、データ転送の完了に応答して開始信号STT1を出力することができる。例えば、第2の演算部20は、第1のデータ転送制御部34Aから予め指示されたデータ転送の完了に基づいて完了信号CPLT1を出力する機能を有する。
【0138】
第2のデータ転送制御部35Aは、外部メモリ40から受信する完了信号CPLT2に応答して開始信号STT2を出力し、あるいは、データ転送の完了に応答して開始信号STT2を出力ことができる。例えば、外部メモリ40は、第2のデータ転送制御部35Aから予め指示されたデータ転送の完了に基づいて完了信号CPLT2を出力する機能を有する。
【0139】
図16は、図15の半導体装置10Aがパラメータの更新処理を実行するときの動作の例を示すフロー図である。すなわち、図16は、半導体装置10Aの制御方法の例を示す。図16は、図8に示したステップS32からステップS34の処理に対応する動作を示す。
【0140】
まず、命令デコーダ33Aは、ステップS41において、第2の演算部20により算出され、第2のメモリ22に保持されたパラメータ誤差ΔWを第1のメモリ32にロードするためのデータ転送命令をデコードする。命令デコーダ33Aは、デコードしたデータ転送命令(第1のデータ転送命令)を第1のデータ転送制御部34Aに発行する。第1のデータ転送制御部34Aは、ステップS42において、第1のデータ転送命令に基づいて、第2のメモリ22および第1のメモリ32を制御し、第2のメモリ22から第1のメモリ32にパラメータ誤差ΔWを転送する処理を実行する。ステップS41、S42は、図9に示したステップS32に対応する処理である。
【0141】
また、命令デコーダ33Aは、ステップS43において、外部メモリ40に保持されたパラメータW、M、Vを第1のメモリ32にロードするためのデータ転送命令をデコードし、データ転送命令(第2のデータ転送命令)を第2のデータ転送制御部35Aに発行する。第2のデータ転送制御部35Aは、ステップS44において、第2のデータ転送命令に基づいて、外部メモリ40と第1のメモリ32とを制御し、外部メモリ40から第1のメモリ32にパラメータW、M、Vを転送する処理を実行する。ステップS43、S44は、図9に示したステップS33に対応する処理である。なお、ステップS41、S42とステップS43、S44の順序は逆でもよく、並列に実行されてもよい。
【0142】
次に、命令デコーダ33Aは、ステップS45において、ステップS41、S43の第1および第2のデータ転送命令に対応する待ち合わせ命令をデコードし、命令のデコード動作を停止する。命令デコーダ33Aは、2つのデータ転送命令に対応する2つの待ち合わせ命令を受信してもよく、2つのデータ転送命令に共通の待ち合わせ命令を受信してもよい。なお、命令デコーダ33Aは、命令のデコードを停止中も、新たな待ち合わせ命令をデコード可能である。このため、命令デコーダ33Aは、2つの待ち合わせ命令を連続して受信し、1つ目の待ち合わせ命令に基づいて命令のデコードを停止した場合にも、2つ目の待ち合わせ命令をデコードすることができる。
【0143】
次に、第2のデータ転送制御部35Aは、ステップS46において、完了信号CPLT2の受信を待ち、完了信号CPLT2を受信した場合、ステップS47において、開始信号STT2を命令デコーダ33Aに出力する。第1のデータ転送制御部34Aは、ステップS48において、完了信号CPLT1の受信を待ち、完了信号CPLT1を受信した場合、ステップS49において、開始信号STT1を命令デコーダ33Aに出力する。ステップS45、S46と、ステップS47、S48とは、逆の順序で実行されてもよく、並列に実行されてもよい。
【0144】
なお、第2のデータ転送制御部35Aは、パラメータW、M、Vの第1のメモリ32への転送の完了を自ら判定できる場合、転送の完了に基づいて、完了信号CPLT2を受信することなく開始信号STT2を出力してもよい。同様に、第1のデータ転送制御部34Aは、パラメータ誤差ΔWの第1のメモリ32への転送の完了を自ら判定できる場合、転送の完了に基づいて、完了信号CPLT1を受信することなく開始信号STT1を出力してもよい。
【0145】
ステップS50において、2つのデータ転送命令に対応する開始信号STT1、STT2を受信した命令デコーダ33Aは、2つのデータ転送命令による転送動作が完了したと判断し、命令のデコードを再開する。例えば、命令デコーダ33Aは、パラメータを更新するための演算命令を受信してデコードし、演算命令を第1の演算器31に発行する。そして、第1の演算器31は、ステップS51において、第1のメモリ32に転送されたパラメータW、M、Vおよびパラメータ誤差ΔWを使用して、パラメータW、M、Vの更新処理を実行する。ステップS51は、図9に示したステップS34に対応する処理である。なお、図8に示したように、パラメータの更新処理が複数に分割して実行される場合、図16に示す動作は、分割された複数のパラメータの更新処理毎に実行される。
【0146】
以上、この実施形態においても、上述した実施形態と同様に、第2の演算部20および第1の演算部30の双方の演算器の使用効率を低下させることなく、外部メモリ40の帯域に合わせてバックワード処理およびパラメータの更新処理を実行することができる。さらに、この実施形態では、バックワード処理とパラメータの更新処理とが、互いに独立に動作する第2の演算部20と第1の演算部30とによりそれぞれ実行される場合にも、待ち合わせ命令により、処理を同期させることができる。すなわち、パラメータの更新処理を、更新処理に使用するパラメータ誤差ΔWおよびパラメータW、M、Vの転送の完了に同期させて開始できる。このため、パラメータの更新処理の前に無駄な待ち合わせ時間が挿入されることがなくなり、バックワード処理およびパラメータの更新処理を効率よく実行できる。この結果、バックワード処理の開始からパラメータを更新するまでの時間をさらに短縮することができる。
【0147】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【0148】
10 半導体装置
20 第2の演算部
21 第2の演算器
22 第2のメモリ
30 第1の演算部
31 第1の演算器
32 第1のメモリ
33、33A 命令デコーダ
34、34A 第1のデータ転送制御部
35、35A 第2のデータ転送制御部
40 外部メモリ
50 通信インタフェース
60 命令制御部
100 情報処理装置
200 基板
210 CPU
220 外部記憶装置
230 ネットワークインタフェース
331 命令キュー
EBUS 第2のバス
IBUS 第1のバス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16