(57)【要約】【課題】演算の精度を低下させることなく、演算処理装置の回路規模を削減する。【解決手段】演算処理装置は、固定小数点数を演算する固定小数点演算器と、浮動小数点数を演算する浮動小数点演算器と、前記浮動小数点演算器による演算結果を、第１ビット幅より広い第２ビット幅を有する固定小数点数に変換する第１変換部と、前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数のいずれかの統計情報を取得する統計情報取得部と、前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数の前記いずれかを、前記第１ビット幅を有する固定小数点数に変換する第２変換部と、を有する。【選択図】図１
2020098469.tif 000002
【特許請求の範囲】
【請求項１】
固定小数点数を演算する固定小数点演算器と、
浮動小数点数を演算する浮動小数点演算器と、
前記浮動小数点演算器による演算結果を、第１ビット幅より広い第２ビット幅を有する固定小数点数に変換する第１変換部と、
前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数のいずれかの統計情報を取得する統計情報取得部と、
前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数の前記いずれかを、前記第１ビット幅を有する固定小数点数に変換する第２変換部と、を有することを特徴とする演算処理装置。
【請求項２】
前記統計情報取得部が取得した統計情報に基づいて、前記第１変換部が出力する固定小数点数の小数点位置を更新する第１更新情報と、前記第２変換部が出力する固定小数点数の小数点位置を更新する第２更新情報とを生成する更新情報生成部を有し、
前記第１変換部は、前記第１更新情報に基づいて、出力する固定小数点数の小数点位置を設定し、
前記第２変換部は、前記第２更新情報に基づいて、出力する固定小数点数の小数点位置を設定することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記更新情報生成部は、前記第２更新情報が示す小数点位置に所定のオフセット値を加えることで、前記第１更新情報を生成することを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記統計情報取得部が取得した統計情報が格納される記憶部を有し、
前記更新情報生成部は、前記記憶部に格納された統計情報に基づいて、前記第１更新情報および前記第２更新情報を生成することを特徴とする請求項２または請求項３に記載の演算処理装置。
【請求項５】
前記第２変換部が変換した前記第１ビット幅を有する固定小数点数を浮動小数点数に変換する第３変換部を有し、
前記第３変換部は、浮動小数点数に変換する固定小数点数の小数点位置を、前記第２変換部が設定する前の小数点位置に戻した後、小数点位置を戻した固定小数点数を浮動小数点数に変換し、
前記浮動小数点演算器は、前記第３変換部が変換した浮動小数点数を演算することを特徴とする請求項１ないし請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
前記第１変換部により変換された固定小数点数を保持するレジスタと、
前記固定小数点演算器から出力される固定小数点数を、前記固定小数点演算器に演算を実行させる演算命令に基づいて選択し、前記第１変換部から前記レジスタに保持された固定小数点数を、前記浮動小数点演算器による演算結果を前記第２変換部に転送する転送命令に基づいて選択する選択部を有し、
前記統計情報取得部は、前記選択部が選択した固定小数点数の統計情報を取得することを特徴とする請求項１ないし請求項５のいずれか１項に記載の演算処理装置。
【請求項７】
命令をデコードする命令デコーダを有し、
前記第１変換部は、前記浮動小数点演算器の出力に接続され、
前記命令デコーダが、前記浮動小数点演算器による演算と前記第１変換部による変換との実行を示す複合命令をデコードした場合、前記第１変換部は、前記浮動小数点演算器による演算結果である浮動小数点数を、前記第２ビット幅を有する固定小数点数に変換することを特徴とする請求項１ないし請求項６のいずれか１項に記載の演算処理装置。
【請求項８】
前記統計情報取得部は、前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数のビットの分布情報を統計情報として取得することを特徴とする請求項１ないし請求項７のいずれか１項に記載の演算処理装置。
【請求項９】
固定小数点数を演算する固定小数点演算器と、浮動小数点数を演算する浮動小数点演算器とを有する演算処理装置の制御方法において、
前記浮動小数点演算器による演算結果を、第１ビット幅より広い第２ビット幅を有する固定小数点数に変換し、
前記固定小数点演算器が出力する固定小数点数または第２ビット幅に変換された固定小数点数のいずれかの統計情報を取得し、
前記固定小数点演算器が出力する固定小数点数または第２ビット幅に変換された固定小数点数の前記いずれかを、前記第１ビット幅を有する固定小数点数に変換することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
深層学習等に使用される演算処理装置において、演算命令の実行により得られたデータの固定小数点数のビット位置の分布に基づいて固定小数点数の小数点位置を更新することで、深層学習の精度を向上する手法が提案されている（例えば、特許文献１、２参照）。固定小数点数を用いて画像データの畳み込み演算を実行する場合、畳み込み演算を実行するマスクのサイズに応じて小数点位置を設定することで、オーバーフローの発生を防止する手法が提案されている（例えば、特許文献３参照）。入力音声の大きさの平均に応じて、演算装置内での演算に使用する変数の小数点位置を切り替えることで、演算装置内で扱うデータのビット長を、演算精度を低下させることなく短縮する手法が提案されている（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１８−１２４６８１号公報
【特許文献２】国際公開第２０１８／１３９２６６号
【特許文献３】特開２００８−０５９２８７号公報
【特許文献４】特開平４−１９０３９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば、ディープニューラルネットワークは、固定小数点数を使用して演算を実行するレイヤと、浮動小数点数を使用して演算を実行するレイヤとを有する。浮動小数点数を使用して演算を実行するレイヤの後段に固定小数点を使用して演算を実行するレイヤが接続される場合、浮動小数点数の演算結果は、固定小数点数に変換された後、後段のレイヤに入力される。この際、変換後の固定小数点数の小数点位置を、浮動小数点数のビット位置の分布に基づいて更新することで、後段のレイヤでの演算の精度が向上され、深層学習の精度が向上される。しかしながら、浮動小数点数のビット位置は、指数部の値により幅広く分布可能であるため、ビット位置の分布を取得するためには大規模な回路が新たに必要になり、演算処理装置の回路規模が増大する。
【０００５】
１つの側面では、本発明は、演算の精度を低下させることなく、演算処理装置の回路規模を削減することを目的とする。
【課題を解決するための手段】
【０００６】
一つの観点によれば、演算処理装置は、固定小数点数を演算する固定小数点演算器と、浮動小数点数を演算する浮動小数点演算器と、前記浮動小数点演算器による演算結果を、第１ビット幅より広い第２ビット幅を有する固定小数点数に変換する第１変換部と、前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数のいずれかの統計情報を取得する統計情報取得部と、前記固定小数点演算器が出力する固定小数点数または前記第１変換部が出力する固定小数点数の前記いずれかを、前記第１ビット幅を有する固定小数点数に変換する第２変換部と、を有する。
【発明の効果】
【０００７】
１つの側面では、本発明は、演算の精度を低下させることなく、演算処理装置の回路規模を削減することができる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態における演算処理装置の一例を示す図である。
【図２】図１の更新情報生成部により小数点位置を更新する一例を示す図である。
【図３】別の実施形態における演算処理装置の一例を示す図である。
【図４】図３の演算処理装置を使用して実施する深層学習の一例を示す図である。
【図５】図４の各レイヤの処理において、小数点位置を更新する例を示す図である。
【図６】１６ビットの動的固定小数点数の統計情報を取得する場合と、３２ビットの動的固定小数点数を取得する場合の一例を示す図である。
【図７】１６ビットの動的固定小数点数の小数点位置に基づいて、３２ビットの動的固定小数点数の小数点位置を設定する手法の一例を示す図である。
【図８】図３の演算処理装置を使用して実施する深層学習において、重み等の係数を更新するバックワード処理の一例を示す図である。
【図９】図３の演算処理装置を使用して実施する深層学習の別の例を示す図である。
【図１０】図３の演算処理装置の動作フローの一例を示す図である。
【図１１】演算処理装置の別の例（比較例）を示す図である。
【図１２】図１１の演算処理装置を使用して実施する深層学習の一例（比較例）を示す図である。
【図１３】別の実施形態における演算処理装置の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を用いて実施形態が説明される。
【００１０】
図１は、一実施形態における演算処理装置の一例を示す。図１に示す演算処理装置１００は、深層学習に使用される専用のプロセッサ、ＧＰＵ（Graphics  Processing  Unit）またはＣＰＵ（Central  Processing  Unit）等である。
【００１１】
演算処理装置１００は、固定小数点数を演算する固定小数点演算器１、浮動小数点数を演算する浮動小数点演算器２、第１変換部３、選択部４、統計情報取得部５、更新情報生成部６および第２変換部７を有する。固定小数点演算器１は、例えば、１６ビットの積和演算器を含み、演算結果ＤＴ１（例えば、４０ビット）を選択部４に出力する。
【００１２】
浮動小数点演算器２は、例えば、３２ビットの乗算器または除算器等を含み、浮動小数点数の演算結果ＤＴ２（例えば、３２ビット）を第１変換部３に出力する。例えば、３２ビットの浮動小数点数は、８ビットの小数部を含み、２５６通りの小数点位置を表現可能である。
【００１３】
第１変換部３は、浮動小数点演算器２による３２ビットの演算結果ＤＴ２（浮動小数点数）を、例えば、第２ビット幅の一例である３２ビットの演算結果ＤＴ３（固定小数点数）に変換する。この際、第１変換部３は、固定小数点数ＤＴ３の小数点位置を、更新情報生成部６が算出した小数点位置ＵＰＤ１に合わせる。換言すれば、第１変換部３は、更新情報生成部６が算出した小数点位置を示す更新情報ＵＰＤ１に合わせて、固定小数点数ＤＴ３の整数部のビット数と小数部のビット数とを設定する。なお、第１変換部３は、３２ビットの演算結果ＤＴ２（浮動小数点数）を、演算結果ＤＴ１と同じ４０ビットの演算結果ＤＴ３（固定小数点数）に変換してもよい。
【００１４】
選択部４は、選択信号ＳＥＬに基づいて、演算結果ＤＴ１、ＤＴ３のいずれかを選択し、演算結果ＤＴ４として出力する。例えば、選択信号ＳＥＬは、固定小数点演算器１に演算を実行させる演算命令に基づいて、固定小数点演算器１が出力する固定小数点数ＤＴ１を選択するレベルに設定される。また、選択信号ＳＥＬは、浮動小数点演算器２による演算結果ＤＴ２を第２変換部７に転送する転送命令に基づいて、第１変換部３が出力する固定小数点数ＤＴ３を選択するレベルに設定される。
【００１５】
これにより、ディープニューラルネットワークに含まれる複数のレイヤのうち、固定小数点演算器１を使用して演算を実行するレイヤでは、選択部４は、演算命令に基づいて固定小数点演算器１の出力を選択することができる。また、ディープニューラルネットワークに含まれる複数のレイヤのうち、浮動小数点演算器２を使用して演算を実行するレイヤでは、選択部４は、転送命令に基づいて浮動小数点演算器２の出力を選択することができる。
【００１６】
統計情報取得部５は、選択部４が選択した４０ビットまたは３２ビットの固定小数点数ＤＴ４の統計情報（例えば、分布情報）を取得する。例えば、統計情報取得部５は、３２ビットの固定小数点数ＤＴ４も４０ビットのデータとして扱う。これにより、固定小数点数ＤＴ１、ＤＴ３のそれぞれの統計情報を共通の統計情報取得部５により取得することができ、統計情報取得部５の回路規模を削減することができる。なお、統計情報取得部５は、選択信号ＳＥＬに基づいて、固定小数点数毎に（４０ビットまたは３２ビット）、統計情報を取得に使用するビット範囲を切り替えてもよい。
【００１７】
統計情報取得部５は、後述する第２変換部７で変換された１６ビットの固定小数点数ＤＴ５の統計情報ではなく、第２変換部７での変換前の４０ビットまたは３２ビットの固定小数点数ＤＴ４の統計情報を取得する。情報量が相対的に多い固定小数点数ＤＴ４を用いて統計情報を取得することにより、統計情報の精度を低下させることなく、統計情報取得部５の回路規模の増大を抑止することができる。
【００１８】
例えば、ディープニューラルネットワークの各レイヤが複数のミニバッチ処理を実行する場合、統計情報取得部５は、ミニバッチ処理毎に演算結果ＤＴ４のビット値の分布情報を取得してもよい。ここで、ミニバッチ処理は、各レイヤにおいて処理するデータを複数のグループに分割したグループ毎に実行される処理である。
【００１９】
ビット値の分布情報は、演算結果ＤＴ４のビット値の最上位ビットの分布または最下位ビットの分布を示す情報であり、あるいは、演算結果ＤＴ４のビット値の最上位ビットの最大の位置または最下位ビットの最小の位置を示す情報である。最上位ビットは、正値においては最も上位側のビット１の位置を示し、負値においては最も上位側のビット０の位置を示す。最下位ビットは、正値においては最も下位側のビット１の位置を示し、負値においては最も下位側のビット０の位置を示す。
【００２０】
更新情報生成部６は、統計情報取得部５が取得した統計情報に基づいて、第１変換部３が出力する固定小数点数ＤＴ３の小数点位置を更新する更新情報ＵＰＤ１と、第２変換部７が出力する固定小数点数ＤＴ５の小数点位置を更新する更新情報ＵＰＤ２とを生成する。例えば、更新情報生成部６は、更新情報ＵＰＤ２で示される小数点位置に所定のオフセット値を加えることで、更新情報ＵＰＤ１を算出してもよい。更新情報ＵＰＤ１、ＵＰＤ２は、小数点位置を示し、あるいは、現在設定されている小数点位置からのシフト量を示す。
【００２１】
例えば、更新情報生成部６は、ディープニューラルネットワークの各レイヤで実行される複数のミニバッチ処理の各々の実行後、各ミニバッチ処理で取得した統計情報に基づいて、更新情報ＵＰＤ１、ＵＰＤ２を生成する。固定小数点数を演算するレイヤでは、第１変換部３が出力する固定小数点数ＤＴ３は使用されないため、更新情報生成部６は、固定小数点数を処理するレイヤでは、更新情報ＵＰＤ１を生成しなくてよい。
【００２２】
しかしながら、動作する演算器１、２にかかわらず、更新情報ＵＰＤ１、ＵＰＤ２を常に生成することで、固定小数点演算器１を使用するレイヤの処理と、浮動小数点演算器２を使用するレイヤの処理とで、更新情報生成部６を共通化することができる。この結果、更新情報生成部６の回路規模の増大を抑止することができる。なお、更新情報ＵＰＤ１を、更新情報ＵＰＤ２で示される小数点位置に所定のオフセット値を加えることで生成する場合、更新情報ＵＰＤ１の生成回路は、シフタ等により設計できるため、回路規模は小さい。
【００２３】
第１変換部３は、更新情報ＵＰＤ１に基づいて、出力する固定小数点数ＤＴ３の小数点位置を更新する。第２変換部７は、更新情報ＵＰＤ２に基づいて、出力する固定小数点数ＤＴ５の小数点位置を更新する。固定小数点演算器１は、更新情報ＵＰＤ２に基づいて、演算に使用する固定小数点数の小数点位置を設定する。ここで、あるミニバッチ処理中に更新情報生成部６が算出した更新情報ＵＰＤ１、ＵＰＤ２で示される小数点位置は、次のミニバッチ処理で使用される。
【００２４】
なお、統計情報取得部５と更新情報生成部６との間に、統計情報を保持する記憶部が設けられてもよい。記憶部は、レジスタ、バッファまたはＲＡＭ（Random  Access  Memory）等である。この場合、統計情報取得部５は、取得した統計情報を記憶部に格納し、更新情報生成部６は、記憶部に格納された統計情報に基づいて、更新する小数点位置を決定する処理を実行する。
【００２５】
第２変換部７は、４０ビットまたは３２ビットの演算結果ＤＴ４を、例えば、第１ビット幅の一例である１６ビットの固定小数点数ＤＴ５に変換する。すなわち、第２変換部７は、固定小数点演算器１が出力する固定小数点数ＤＴ１（演算結果）または第１変換部３が変換した固定小数点数ＤＴ３（演算結果）のビット幅を減らして、固定小数点数ＤＴ５を生成する。この際、第２変換部７は、更新情報生成部６が生成した更新情報ＵＰＤ２に基づいて固定小数点数ＤＴ５の小数点位置を更新する。これにより、第２変換部７が変換したビット幅の狭い固定小数点数ＤＴ５が次のレイヤ等で使用される場合にも、固定小数点数ＤＴ５は最適な小数点位置に調整されているため、その後の演算の精度が低下することを抑止することができる。
【００２６】
この実施形態では、固定小数点数を使用するレイヤのミニバッチ処理と浮動小数点数を使用するレイヤのミニバッチ処理とにおいて、共通の統計情報取得部５により、固定小数点数ＤＴ４（ＤＴ１またはＤＴ３）の統計情報を取得することができる。また、小数点位置を示す更新情報ＵＰＤ１、ＵＰＤ２の生成を共通の更新情報生成部６により実行することができる。また、更新情報ＵＰＤ１は、更新情報ＵＰＤ２で示される小数点位置に所定のオフセット値を加えることで算出されるため、更新情報ＵＰＤ１を算出するために更新情報生成部６に設けられる回路規模を抑制することができる。
【００２７】
したがって、浮動小数点数を使用するレイヤのミニバッチ処理用に小数点位置を更新する専用の更新情報生成部を設けなくてよい。統計情報を取得に基づいて、固定小数点数ＤＴ５の小数点位置を構成することで、固定小数点数ＤＴ５を使用して実行される演算の精度が低下することを抑止することができる。この結果、演算の精度を低下させることなく、演算処理装置１００の回路規模を削減することができる。
【００２８】
図２は、図１の更新情報生成部６により小数点位置を更新する一例を示す。図２は、統計情報取得部５により取得された演算結果ＤＴ４のビット値の最上位ビットの分布を示しており、左側は、分布が表現可能な領域に収まらない場合を示し、右側は、分布が表現可能な領域に収まる場合を示す。
【００２９】
図２の左側において、表現可能な領域（１６ビット）の上限より上位側にビット値の最上位ビットがある固定小数点数は、飽和処理が実行される（オーバーフロー）。一方、表現可能な領域（１６ビット）の下限より下位側にビット値の最上位ビットがある固定小数点数は、丸め処理が実行される（アンダーフロー）。更新情報生成部６は、統計情報取得部５により取得された分布に基づいて、現在のビット精度（Ｑ５．１０）で表現される固定小数点数の分布が上位側に偏っていると判定し、次のミニバッチ処理でのビット精度を（Ｑ３．１２）に決定する。
【００３０】
そして、更新情報生成部６は、ビット精度（Ｑ３．１２）を示す更新情報ＵＰＤ２を生成し、あるいは、小数点位置を上位側に２ビットシフトすることを示す更新情報ＵＰＤ２を生成する。また、図２には示していないが、更新情報生成部６は、更新情報ＵＰＤ２により示される小数点位置に所定のオフセット値を加えた小数点位置を示す更新情報ＵＰＤ１を生成する。これにより、例えば、次のミニバッチ処理で使用する固定小数点数（ＤＴ５）の精度が低下することを抑止できる。なお、１６ビットの固定小数点数と３２ビットの固定小数点数との小数点位置の関係は、図７で説明される。
【００３１】
例えば、更新情報生成部６は、ビット精度により示される１６ビットが分布の中心になるように、固定小数点数の小数点位置を決定する。ここで、ビット精度（Ｑ５．１０）、（Ｑ３．１２）は、Ｑフォーマットでの固定小数点数の表記を示している。ビット精度（Ｑ５．１０）は、符号ビット１桁、整数部５桁、小数部１０桁の１６ビットデータを示し、ビット精度（Ｑ３．１２）は、符号ビット１桁、整数部３桁、小数部１２桁の１６ビットデータを示す。
【００３２】
なお、更新情報生成部６は、”（オーバーフローしたデータ数）／（全体のデータ数）”が所定の既定値より小さくなるように、小数点位置を更新してもよい。あるいは、更新情報生成部６は、”（アンダーフローしたデータ数）／（全体のデータ数）”に応じて小数点位置を更新してもよく、オーバーフローしたデータ数とアンダーフローしたデータ数、またはそれらの比率に基づいて、小数点位置を更新してもよい。
【００３３】
一方、図２の右側において、分布が表現可能な領域に収まる場合、例えば、更新情報生成部６は、ビット精度により示される１６ビットが分布の中心になるように、小数点位置を決定する。図２に示す例では、更新情報生成部６は、統計情報取得部５により取得された分布に基づいて、現在のビット精度（Ｑ３．１２）で表現される固定小数点数の分布が上位側に偏っていると判定し、次のミニバッチ処理でのビット精度を（Ｑ１．１４）に決定する。
【００３４】
この実施形態では、演算結果である固定小数点数ＤＴ３、ＤＴ５のそれぞれの最適な小数点位置を、共通の統計情報取得部５および更新情報生成部６を用いて算出し、更新することができる。これにより、深層学習等の精度を低下させることなく、演算処理装置１００の回路規模を削減することができる。換言すれば、固定小数点演算および浮動小数点演算のいずれを実行する場合にも、固定小数点数ＤＴ５を、精度を落とすことなくその後のレイヤの処理等に使用することができる。
【００３５】
また、固定小数点演算用と浮動小数点演算用とのそれぞれに対応して統計情報取得部５および更新情報生成部６を設ける場合に比べて、演算処理装置１００の消費電力を削減することができる。第２変換部７により、固定小数点数ＤＴ５のビット数を削減することで、固定小数点数ＤＴ５を使用するその後の処理でのデータ処理量を削減することができ、深層学習の処理精度を低下させることなく、処理時間を短縮することができる。
【００３６】
図３は、別の実施形態における演算処理装置の一例を示す。例えば、図３に示す演算処理装置１０２は、深層学習に使用される専用のプロセッサであり、チップの形態を有する。なお、演算処理装置１０２は、ＧＰＵまたはＣＰＵ等の汎用のプロセッサでもよい。
【００３７】
演算処理装置１０２は、メモリアクセスコントローラ１０、制御部２０、ベクタユニット３０およびスカラユニット４０を有する。制御部２０は、プログラムカウンタ（ＰＣ）２２、命令デコーダ２４および演算制御部２６を有する。ベクタユニット３０は、複数の演算器３２、複数のレジスタを含むレジスタファイル３４、統計情報集約部３６、メモリ３８および小数点位置決定部３９を有する。スカラユニット４０は、演算器４２と、複数のレジスタを含むレジスタファイル４４とを有する。レジスタファイル４４は、データバスＤＢＵＳに接続される。メモリアクセスコントローラ１０、制御部２０、ベクタユニット３０およびスカラユニット４０は、データバスＤＢＵＳを介して相互に接続される。図３では、統計情報集約部３６、メモリ３８および小数点位置決定部３９は、ベクタユニット３０に含まれるが、ベクタユニット３０の外部に設けられてもよい。
【００３８】
メモリアクセスコントローラ１０は、制御部２０からの指示に基づいて、演算処理装置１０２に接続されるＤＲＡＭ（Dynamic  Random  Access  Memory）等の外部メモリ２００のアクセスを制御する。メモリアクセスコントローラ１０は、外部メモリ２００に格納された命令コードを読み出して制御部２０に出力する。また、メモリアクセスコントローラ１０は、外部メモリ２００に格納された演算に使用するデータ等を読み出してベクタユニット３０またはスカラユニット４０に出力する。
【００３９】
演算制御部２６は、プログラムカウンタ２２が生成するアドレスに基づいて外部メモリ２００から命令をロードし、ロードした命令を命令デコーダ２４に転送する。命令デコーダ２４は、転送された命令をデコードし、デコード結果を演算制御部２６に出力する。演算制御部２６は、命令デコーダ２４からのデコード結果に基づいて、ベクタユニット３０またはスカラユニット４０を制御する制御信号を生成し、ベクタユニット３０またはスカラユニット４０による演算の実行を制御する。
【００４０】
ベクタユニット３０の演算器３２は、ＦＰＵ（Floating  Point  operation  Unit）３２０、ＡＬＵ（Arithmetic  and  Logic  Unit）３２２、選択部３２４、アキュムレータレジスタ（ＡＣＣ）３２６、データ変換部３２８、３３０、３３２および統計情報取得部３３４を有する。ベクタユニット３０は、命令デコーダ２４がデコードしたベクトル演算命令を実行する。ＦＰＵ３２０は、浮動小数点演算器の一例であり、ＡＬＵ３２２は、固定小数点演算器の一例である。
【００４１】
ＦＰＵ３２０は、例えば、３２ビットの浮動小数点数の積和演算、乗算、加算、指数関数等の特殊な演算、浮動小数点数の固定小数点数への変換演算等を実行する機能を有する。ＦＰＵ３２０は、演算結果である３２ビットの浮動小数点数をレジスタファイル３４とデータ変換部３２８に出力する。
【００４２】
ＡＬＵ３２２は、１６ビットの動的固定小数点数の積和演算、加算演算、比較演算および論理演算等を実行する機能を有する。例えば、ＡＬＵ３２２は、積和演算器ＭＡＣ(Multiply  and  ACcumulation)を含む。積和演算による演算の累積結果は、選択部３２４を介して４０ビットのアキュムレータレジスタ３２６に格納される。加算演算、比較演算および論理演算等の一般演算の演算結果は、データ変換部３２８を介して、１６ビットの固定小数点数としてレジスタファイル３４に書き戻される。
【００４３】
選択部３２４は、ＡＬＵ３２２により固定小数点数の演算が実行される場合、ＡＬＵ３２２からの出力データを選択してアキュムレータレジスタ３２６に出力する。選択部３２４は、３２ビットの動的固定小数点数をレジスタファイル３４からアキュムレータレジスタ３２６に格納する転送命令が実行される場合、レジスタファイル３４から出力される３２ビットの動的固定小数点数を選択する。選択部３２４は、選択した３２ビットの動的固定小数点数をアキュムレータレジスタ３２６に出力する。例えば、選択部３２４が選択する３２ビットの動的固定小数点数は、データ変換部３３０により変換された後、レジスタファイル３４に格納されたデータである。
【００４４】
データ変換部３２８は、レジスタファイル３４に保持された小数点位置のシフト量を示すシフト情報ＳＦＴ２に基づいて、アキュムレータレジスタ３２６から出力される４０ビットのデータのうちの１６ビットを取り出す。なお、図２で説明したように、４０ビットから取り出す１６ビットの位置により、１６ビット中での小数点位置が決まる。
【００４５】
そして、データ変換部３２８は、取り出す１６ビットのデータに対する丸め処理を実行することで、１６ビットの動的固定小数点数ＤＦＰ（Dynamic  Fixed  Point）１６を生成し、生成した動的固定小数点数ＤＦＰ１６をレジスタファイル３４に格納する。データ変換部３２８は、第２変換部の一例である。シフト情報ＳＦＴ２は、データ変換部３２８が出力する１６ビットの動的固定小数点数ＤＦＰ１６の小数点位置を更新する第２更新情報の一例である。動的固定小数点数ＤＦＰ１６は、例えば、Ｑフォーマットを使用して表現され、小数点位置がシフト可能な固定小数点数である。
【００４６】
データ変換部３３０は、ＦＰＵ３２０から出力される３２ビットの浮動小数点数ＦＰ３２を３２ビットの動的固定小数点数ＤＦＰ３２に変換する。この際、データ変換部３３０は、レジスタファイル３４に保持された小数点位置のシフト量を示すシフト情報ＳＦＴ１に基づいて、動的固定小数点数ＤＦＰ３２の小数点位置を設定する。そして、データ変換部３３０は、変換により得た動的固定小数点数ＤＦＰ３２をレジスタファイル３４に格納する。データ変換部３３０は、第１変換部の一例である。シフト情報ＳＦＴ１は、データ変換部３３０が出力する３２ビットの動的固定小数点数ＤＦＰ３２の小数点位置を更新する第１更新情報の一例である。動的固定小数点数ＤＦＰ３２は、例えば、Ｑフォーマットを使用して表現され、小数点位置がシフト可能な固定小数点数である。
【００４７】
データ変換部３３２は、レジスタファイル３４から転送される１６ビットの動的固定小数点数ＤＦＰ１６を３２ビットの浮動小数点数ＦＰ３２に変換し、変換した浮動小数点数ＦＰ３２をレジスタファイル３４に転送する。この際、データ変換部３３２は、動的固定小数点数ＤＦＰ１６の小数点位置の設定に使用したシフト情報ＳＦＴ３に基づいて、動的固定小数点数ＤＦＰ１６の小数点位置を元に戻してから浮動小数点数ＦＰ３２に変換する。データ変換部３３２は、第３変換部の一例である。
【００４８】
シフト情報ＳＦＴ３は、前段のレイヤＬ１が１つ前のミニバッチ処理で決定した小数点位置（シフト情報ＳＦＴ２に対応する）であり、レジスタファイル３４に保持されている。以下では、動的固定小数点数ＤＦＰ３２は、単にＤＦＰ３２とも称され、動的固定小数点数ＤＦＰ１６は、単にＤＦＰ１６とも称され、浮動小数点数ＦＰ３２は、単にＦＰ３２とも称される。
【００４９】
例えば、データ変換部３３２は、ＤＦＰ１６をＦＰ３２に変換する変換命令を命令デコーダ２４がデコードしたことに基づいて動作する。なお、データ変換部３３０、３３２は、ＦＰＵ３２０に内蔵され、ＦＰＵ３２０の機能の一部として動作されてもよい。データ変換部３３０による浮動小数点数から固定小数点数への変換は、式（１）により示される。
ＤＦＰ＝ｒｏｕｎｄ（ＦＰ＊２ｍ）  ‥（１）
【００５０】
データ変換部３３２による固定小数点数から浮動小数点数への変換は、式（２）により示される。
ＦＰ＝ＤＦＰ＊２−ｍ  ‥（２）
【００５１】
式（１）および式（２）において、ＤＦＰは動的固定小数点数を示し、ＦＰは浮動小数点数を示し、ｒｏｕｎｄは四捨五入、偶数丸め、確率丸め等の丸め関数を示し、ｍは小数点位置を示す。また、符号＊は、積を示す。
【００５２】
統計情報取得部３３４は、アキュムレータレジスタ３２６から出力される４０ビットのデータの統計情報を取得する。例えば、統計情報取得部３３４は、４０ビットのデータのビット値の最上位ビット、４０ビットのビット値の最下位ビット、または最下位ビットと最上位ビットの両方を取得する。例えば、統計情報取得部３３４は、取得した統計情報をミニバッチ処理の完了毎に統計情報集約部３６に転送する。
【００５３】
レジスタファイル３４は、複数の演算器３２のそれぞれに対応して割り当てられた複数のメモリバンクＢＫを有し、メモリバンクＢＫ毎にデータバスＤＢＵＳに接続される。各メモリバンクＢＫは、演算器３２のいずれかに接続される。なお、レジスタファイル３４において１つまたは複数のソースオペランドを保持するレジスタを、所定のメモリバンクＢＫの演算器３２に接続するクロスバースイッチ（図示せず）が、レジスタファイル３４と演算器３２との間に配置されてもよい。
【００５４】
統計情報集約部３６は、ベクタユニット３０の複数の演算器３２の統計情報取得部３３４が取得した統計情報およびスカラユニット４０の統計情報取得部（図示せず）が取得した統計情報を集約し、集約した統計情報をメモリ３８に格納する。例えば、統計情報集約部３６は、統計情報取得部３３４が取得した４０ビットのデータのビット値の最上位ビットの分布、最下位ビットの分布、最上位ビットの最大の位置または最下位ビットの最小の位置のいずれか１つまたは複数を、統計情報として取得する。統計情報取得部３３４および統計情報集約部３６は、統計情報取得部の一例である。
【００５５】
メモリ３８は、データバスＤＢＵＳに接続され、例えば、ＳＲＡＭ（Static  Random  Access  Memory）であり、統計情報集約部３６から書き込まれた統計情報を保持する。
【００５６】
スカラユニット４０は、スカラ命令（単一データを扱う命令）を処理するユニットである。スカラユニット４０の演算器４２は、命令デコーダ２４がデコードしたスカラ演算命令（単一データを扱う命令）を実行する。演算器４２は図示しない統計処理部を有しており、統計処理部は、統計情報取得部３３４と同様に、演算器４２による演算結果の統計情報を取得し、取得した統計情報を統計情報集約部３６に出力する。なお、演算処理装置１０２のスカラ命令とベクター命令の演算内容の違いにより、スカラユニット４０の演算器４２の演算機能と、ベクタユニット３０の演算器３２の演算機能とは異なっていてもよい。
【００５７】
小数点位置決定部３９は、データバスＤＢＵＳに接続され、メモリ３８に格納された統計情報（例えば、ビット値の最上位ビットの分布）に基づいて、次のミニバッチ処理で使用するデータの新しい小数点位置を決定する。小数点位置決定部３９は、決定した小数点位置をレジスタファイル３４に格納する。レジスタファイル３４に格納された小数点位置は、シフト情報ＳＦＴ１、ＳＦＴ２として出力される。
【００５８】
そして、レジスタファイル３４に格納された小数点位置は、小数点位置の決定後に処理を実行するレイヤのミニバッチ処理で使用される。なお、小数点位置決定部３９は、回路（ハードウェア）として実装される代わりに、外部メモリ２００に格納される制御プログラム（ソフトウェア）の一部として実現されてもよい。この場合、スカラユニット４０の演算器４２は、演算処理装置１０２が実行する制御プログラムに基づいて、メモリ３８に格納された統計情報に基づいて、小数点位置を決定してもよい。小数点位置決定部３９は、小数点位置を更新する更新情報生成部の一例である。
【００５９】
図４は、図３の演算処理装置１０２を使用して実施する深層学習の一例を示す。図４は、ディープニューラルネットワークに含まれる複数のレイヤＬ１、Ｌ２、Ｌ３の処理が、演算処理装置１０２の複数の演算器３２を使用して順次実行される例を示す。レイヤＬ１、Ｌ３の処理は、ＤＦＰ１６をＡＬＵ３２２により演算することで実行され、レイヤＬ２の処理は、ＦＰ３２をＦＰＵ３２０により演算することで実行される。なお、レイヤＬ１の前またはレイヤＬ３の後に、他のレイヤの処理が実行されてもよい。各レイヤＬ１、Ｌ２、Ｌ３の処理の各々は、複数のミニバッチ処理を含む。
【００６０】
深層学習においてＡＬＵ３２２を使用するレイヤとして、畳み込みレイヤ、プーリングレイヤ、全結合レイヤ等が挙げられる。また、深層学習において、ＦＰＵ３２０を使用するレイヤとして、除算、平方根またはべき乗等の演算が必要な正規化レイヤ、指数関数が必要なソフトマックスレイヤ等が挙げられる。また、演算に使用する値が広い領域に分布するため、固定小数点数では演算の精度が足りず、データを幅広い桁を用いて表現する必要がある場合にも、ＦＰＵ３２０を使用してレイヤの処理が実行される。
【００６１】
レイヤＬ１、Ｌ３の処理では、ＡＬＵ３２２が、複数のＤＦＰ１６を使用して複数の演算を実行する。統計情報取得部３３４は、ＡＬＵ３２２の演算結果である４０ビットの値の統計情報を演算毎に取得する。統計情報取得部３３４により取得された統計情報は、ミニバッチ処理毎に統計情報集約部３６（図３）により集約され、分布情報等としてメモリ３８に格納される。
【００６２】
また、４０ビットの演算結果は、データ変換部３２８によりＤＦＰ１６に変換される。この際、データ変換部３２８は、レジスタファイル３４等に保持されたシフト情報ＳＦＴ２を用いて、ＤＦＰ１６内での小数点位置を設定し、設定した小数点位置に基づいて、４０ビットの演算結果から１６ビットを取り出してＤＦＰ１６を生成する。データ変換部３２８によるＤＦＰ１６を生成する動作は、図２と同様である。レイヤＬ１の処理結果であるＤＦＰ１６は、例えば、レジスタファイル３４を介して外部メモリ２００（図３）等に一時保存された後、レイヤＬ２の処理に使用される。
【００６３】
レイヤＬ１、Ｌ３の処理において、小数点位置決定部３９は、ミニバッチ処理の完了毎に、メモリ３８に格納された統計情報を用いて次のミニバッチ処理で使用する小数点位置を決定する。小数点位置決定部３９は、決定した小数点位置を示すシフト情報ＳＦＴ２をレジスタファイル３４に格納する。レジスタファイル３４に格納されたシフト情報ＳＦＴ２は、データ変換部３２８に出力され、次のミニバッチ処理での演算結果であるＤＦＰ１６の小数点位置を設定するために使用される。なお、メモリ３８に格納された統計情報は、ミニバッチ処理毎に消去される。
【００６４】
一方、レイヤＬ２の処理では、レイヤＬ１の処理で得られ、小数点位置が補正され、レジスタファイル３４に保持されたＤＦＰ１６が使用される。１６ビットの動的固定小数点数ＤＦＰ１６は、データ変換部３３２により３２ビットの浮動小数点数ＦＰ３２に変換される。この際、ＤＦＰ１６は、シフト情報ＳＦＴ３を使用して、小数点位置が元のＤＦＰ１６に戻された後、ＦＰ３２に変換する。これにより、小数点位置が補正される前のＤＦＰ１６をＦＰ３２に変換することができ、レイヤＬ２により、前のレイヤＬ１で設定された小数点位置を引き継げない指数関数、シグモイド関数、双曲線正接ｔａｎｈ等の非線形の関数の処理を実行することができる。
【００６５】
ＦＰＵ３２０は、演算命令に基づいて、変換されたＦＰ３２を順次使用して複数の演算を実行する。ＦＰＵ３２０の演算結果であるＦＰ３２は、データ変換部３３０によりＤＦＰ３２に変換され、レジスタファイル３４に格納される。ＤＦＰ３２への変換の際、シフト情報ＳＦＴ１に基づいてＤＦＰ３２の小数点位置が設定される。なお、後続のレイヤの処理でＦＰ３２を使用して演算を実行する場合、後続のレイヤは、レジスタファイル３４から外部メモリ２００等に転送されたＦＰ３２を使用する。
【００６６】
例えば、以下に示す浮動小数点演算命令を実行することで、演算の実行とともに、データ変換部３３０によるＦＰ３２からＤＦＰ３２への変換を実行することができる。
ＦＡＤＤｑ  Ｆｄｓｔ，Ｆｓｒｃ１，Ｆｓｒｃ２，Ｆｑｓｆｔ
ここで、ＦＡＤＤｑは、ＤＦＰ３２への変換処理付き（小数点位置の設定を含む）の浮動小数点数の加算命令（複合命令）を示し、Ｆｄｓｔ、Ｆｓｒｃ１、Ｆｓｒｃ２、Ｆｑｓｆｔは、レジスタファイル３４のレジスタ番号を示す。ｄｓｔはディスティネーションオペランドを示し、ｓｒｃはソースオペランドを示す。ｑｓｆｔは、小数点位置のシフト量を示し、シフト情報ＳＦＴ１としてデータ変換部３３０に出力される。
【００６７】
統計情報取得部３３４は、選択部３２４およびアキュムレータレジスタ３２６を介して転送されるＤＦＰ３２の統計情報を取得し、取得した統計情報をミニバッチ処理の完了時に統計情報集約部３６に転送する。統計情報集約部３６は、転送された統計情報をメモリ３８に格納する。例えば、統計情報取得部３３４から統計情報集約部３６への統計情報の転送と、統計情報集約部３６からメモリ３８への統計情報の転送は、転送命令に基づいて実行される。
【００６８】
レジスタファイル３４に保持されたＤＦＰ３２は、例えば、転送命令に基づいてデータ変換部３２８に転送され、データ変換部３２８によりＤＦＰ１６に変換された後、レジスタファイル３４に格納される。レイヤＬ２の処理結果であるレジスタファイル３４に格納されたＤＦＰ１６は、例えば、外部メモリ２００等に一時保存された後、レイヤＬ３の処理に使用される。なお、ＤＦＰ３２からＤＦＰ１６への変換の際、シフト情報ＳＦＴ２に基づいてＤＦＰ１６の小数点位置が補正される。
【００６９】
小数点位置決定部３９は、ミニバッチ処理の完了毎に、メモリ３８に保持された統計情報を用いて次のミニバッチ処理で使用する小数点位置を決定する。小数点位置決定部３９は、データ変換部３３０が出力するＤＦＰ３２の小数点位置と、データ変換部３２８が出力するＤＦＰ１６の小数点位置とを算出する。そして、小数点位置決定部３９は、ＤＦＰ３２の小数点位置を示すシフト情報ＳＦＴ１と、ＤＦＰ１６の小数点位置を示すシフト情報ＳＦＴ２とをレジスタファイル３４の所定のレジスタに格納する。なお、レイヤＬ２の処理においても、統計情報取得部３３４が取得した統計情報は、ミニバッチ処理毎に消去される。
【００７０】
図４に示す動作は、複数の演算器３２を使用して並列に実行されてもよい。また、レイヤＬ１、Ｌ２、Ｌ３の処理は、互いに異なる演算器３２を使用して実行されてもよい。演算処理装置１０２がベクタユニット３０とスカラユニット４０とをそれぞれ有する複数のプロセッサコアを有する場合、レイヤＬ１、Ｌ２、Ｌ３の処理は、互いに異なるプロセッサコアを使用して実行されてもよい。これにより、レイヤＬ１、Ｌ２、Ｌ３の処理を並列に実行することができ、演算処理装置１０２によるディープラーニングの処理効率を向上することができる。
【００７１】
図５は、図４の各レイヤの処理において、小数点位置を更新する例を示す。上述したように、各レイヤの処理は、複数のミニバッチ処理（ｉ−１番目、ｉ番目、ｉ＋１番目、．．．：ｉは正の整数）を実行することで行われる。各ミニバッチ処理は、前回のミニバッチ処理で決定した小数点位置に基づいて小数点位置を更新した固定小数点数を使用して実行される。また、各ミニバッチ処理での演算結果である固定小数点数の統計情報が取得される。例えば、取得する統計情報は、データのビット値の最上位ビットの分布、最下位ビットの分布、最上位ビットの最大の位置または最下位ビットの最小の位置のいずれか１つまたは複数である。そして、各ミニバッチ処理の完了後、取得した統計情報に基づいて、次のミニバッチ処理で使用する小数点位置が算出される。
【００７２】
図６は、１６ビットの動的固定小数点数ＤＦＰ１６の統計情報を取得する場合と、３２ビットの動的固定小数点数ＤＦＰ３２を取得する場合の一例を示す。例えば、図６は、図２と同様に、ＤＦＰ１６およびＤＦＰ３２のビット値の最上位ビットの分布を示す。
【００７３】
ＦＰＵ３２０で扱う浮動小数点数ＦＰ３２は、表現可能な小数点位置の範囲（すなわち、値の範囲）が広い。このため、ＦＰＵ３２０による演算結果ＦＰ３２をＤＦＰ１６に変換した場合、ＤＦＰ１６の統計情報では、演算結果ＦＰ３２の分布の全体を取得できない可能性が高い。この場合、誤った分布に基づいて小数点位置が決定されてしまうおそれがある。例えば、図６の上側では、下位ビット側の分布が欠落してしまう。これに対して、ＦＰＵ３２０による演算結果ＦＰ３２をＤＦＰ３２に変換した場合、ＤＦＰ１６に比べて取得可能な分布の範囲を広くすることができ、演算結果ＦＰ３２の正しい分布を取得することができる。
【００７４】
したがって、図４で説明したように、ＦＰＵ３２０での演算結果ＦＰ３２を、データ変換部３３０、３２８により２段階でＤＦＰ３２とＤＦＰ１６とに順次変換し、ＤＦＰ３２を用いて統計情報を取得することで、小数点位置の算出の精度を向上することができる。さらに、ＤＦＰ３２は、ＡＬＵ３２２の演算結果の４０ビットと同じスケールで表すことができるため、統計情報取得部３３４は、ＡＬＵ３２２の演算結果の４０ビットの値の統計情報と、ＤＦＰ３２の統計情報とを取得することができる。すなわち、統計情報取得部３３４を４０ビットの値とＤＦＰ３２とで共通にすることができ、ＤＦＰ３２の統計情報を取得する専用の統計情報取得部を不要にすることができる。
【００７５】
図７は、１６ビットの動的固定小数点数ＤＦＰ１６の小数点位置に基づいて、３２ビットの動的固定小数点数ＤＦＰ３２の小数点位置を設定する手法の一例を示す。図７において、符号Ｓは、符号ビットを示す。
【００７６】
例えば、ＤＦＰ１６のＱフォーマットが（Ｑ５．１０）に設定された場合、黒丸で示す小数点は、第９ビットと第１０ビットとの間に設定される。図７に示す例では、１６ビットのＱフォーマット（Ｑ５．１０）を３２ビットのＱフォーマットに拡張する場合、上位ビット側と下位ビット側とのそれぞれは、同じビット数（８ビット）だけ拡張される。また、１６ビットのＱフォーマット（Ｑ３．１２）を３２ビットのＱフォーマットに拡張する場合、上位ビット側と下位ビット側とのそれぞれは、同じビット数（８ビット）だけ拡張される。これにより、上位ビット側（オーバーフロー側）と下位ビット側（アンダーフロー側）とで同じ余裕度を持たせることができる。
【００７７】
小数点位置決定部３９は、小数点位置をＱフォーマット（Ｑ５．１０）とする場合、例えば、”１０”を示すシフト情報ＳＦＴ２を出力し、小数点位置をＱフォーマット（Ｑ２．１２）とする場合、例えば、”１２”を示すシフト情報ＳＦＴ２を出力する。”１０”および”１２”は、整数第１位のビット番号である。また、小数点位置決定部３９は、シフト情報ＳＦＴ２（＝”１０”または”１２”）に、オフセット値＝”８”を加えたシフト情報ＳＦＴ１（＝”１８”または”２０”）を生成する。これにより、ＤＦＰ１６のビット値に対して、上位側と下位側との両方に均等に広がるＤＦＰ３２を生成することができる。
【００７８】
図８は、図３の演算処理装置１０２を使用して実施する深層学習において、正解データを用いて重み等の係数を更新するバックワード処理の一例を示す。図８は、図５に示したレイヤＬ１、Ｌ２、Ｌ３の処理を順次実行後、最終のレイヤによる処理で得られた演算結果と正解データとの差分に基づいて、レイヤＬ３、Ｌ２、Ｌ１で使用する係数等を最適化する場合の動作の例が示される。すなわち、図８は、係数等を最適化するためのデータが、図５とは逆方向であるレイヤＬ３、Ｌ２、Ｌ１に順次伝搬される場合に、統計情報に基づいて小数点位置を更新する例を示す。
【００７９】
例えば、畳み込みレイヤのフォワード処理では、図４に示したように各レイヤＬ１−Ｌ３から出力されるデータの統計情報が取得される。これに対して、畳み込みレイヤのバックワード処理では、各レイヤＬ１−Ｌ３に入力される差分値、重みパラメータの差分値、および重みと差分値を加算した後の更新後の重み値の統計情報がそれぞれ取得される。バックワードの処理においても、データの流れは、図４と同様である。
【００８０】
図９は、図３の演算処理装置１０２を使用して実施する深層学習の別の例を示す。図９は、ディープニューラルネットワークに含まれる複数のレイヤＬ１１、Ｌ１２の処理が、演算処理装置１０２の複数の演算器３２によりＤＦＰ１６を使用して順次実行される例を示す。すなわち、レイヤＬ１１、Ｌ１２の処理は、ＡＬＵ３２２により１６ビットの動的固定小数点数ＤＦＰ１６を演算することで実行される。レイヤＬ１１、Ｌ１２の処理のための回路動作に使用される要素は、図４のレイヤＬ１の処理のための回路動作に使用される要素と同じである。そして、レイヤＬ１１においてデータ変換部３２８が変換により生成したＤＦＰ１６は、レイヤＬ１２の処理に使用される。換言すれば、図９は、図４からレイヤＬ２の処理を削除し、レイヤＬ１、Ｌ３を順次実行する場合と同様である。
【００８１】
例えば、レイヤＬ１２は、レイヤＬ１１での前回のミニバッチ処理により決定した小数点位置に設定されたＤＦＰ１６を使用して処理を実行する。レイヤＬ１２は、レイヤＬ１１での小数点位置の更新量（例えば、シフト量＝２）を、レジスタファイル３４を参照することで知ることができる。そして、レイヤＬ１２の処理において、前回のミニバッチ処理により小数点位置決定部３９が決定した小数点位置のシフト量が”５”の場合、レイヤＬ１２の出力データは、レイヤＬ１１での小数点位置の更新量との差分の”３”だけシフトされる。
【００８２】
なお、例えば、レイヤＬ１１での処理が、入力データと重みデータとの積を足し込んでいく畳み込みの場合であるとする。この場合、入力データに設定された小数点位置がａ桁目、重みデータに設定された小数点位置がｂ桁目、演算結果である積の小数点位置がｃ桁目の場合、出力データの小数点位置は、”ｃ−（ａ＋ｂ）”だけシフトされる。
【００８３】
図１０は、図３の演算処理装置１０２の動作フローの一例を示す。すなわち、図１０は、演算処理装置１０２の制御方法の一例を示す。図１０に示す動作は、演算処理装置１０２が制御プログラムを実行することで実現され、例えば、深層学習の各レイヤの処理を複数のミニバッチ処理により実行する場合に開始される。また、以下に示す動作は、命令デコーダ２４が命令をデコードすることで生成する制御信号により、演算処理装置１０２の内部回路の動作を制御することで実現される。
【００８４】
まず、ステップＳ１０において、演算処理装置１０２は、固定小数点数を使用するレイヤでは、動作をステップＳ１２に移行し、浮動小数点数を使用するレイヤでは、動作をステップＳ３２に移行する。
【００８５】
ステップＳ１２において、演算処理装置１０２は、ＡＬＵ３２２の出力を選択する。次に、ステップＳ１４において、演算処理装置１０２は、ＡＬＵ３２２を使用して固定小数点数の演算を実行する。次に、ステップＳ１６において、演算処理装置１０２は、統計情報取得部３３４を使用して各演算結果の統計情報を取得する。次に、ステップＳ１８において、演算処理装置１０２は、１つのミニバッチ処理が完了した場合、動作をステップＳ２０に移行し、ミニバッチ処理が完了していない場合、次の演算を実行するために動作をステップＳ１４に戻す。
【００８６】
ステップＳ２０において、演算処理装置１０２は、ミニバッチ処理で取得した統計情報に基づいて、次のミニバッチ処理で使用するＤＦＰ１６の小数点位置を決定する。次に、ステップＳ２２において、演算処理装置１０２は、決定した小数点位置にしたがい、次のミニバッチ処理で使用するＤＦＰ１６の小数点位置を更新する。次に、ステップＳ２４において、演算処理装置１０２は、次のミニバッチ処理がある場合、動作をステップＳ１４に戻し、レイヤでの全てのミニバッチ処理が完了した場合、動作を終了する。
【００８７】
一方、ステップＳ３２において、演算処理装置１０２は、レジスタファイル３４を介してデータ変換部３３０の出力を選択する。次に、ステップＳ３４において、演算処理装置１０２は、ＦＰＵ３２０を使用して浮動小数点数の演算を実行する。次に、ステップＳ３６において、演算処理装置１０２は、統計情報取得部３３４を使用して各演算結果の統計情報を取得する。次に、ステップＳ３８において、演算処理装置１０２は、１つのミニバッチ処理が完了した場合、動作をステップＳ４０に移行し、ミニバッチ処理が完了していない場合、次の演算を実行するために動作をステップＳ３４に戻す。
【００８８】
ステップＳ４０において、演算処理装置１０２は、ミニバッチ処理で取得した統計情報に基づいて、次のミニバッチ処理で使用するＤＦＰ１６とＤＦＰ３２の小数点位置を決定する。次に、ステップＳ４２において、演算処理装置１０２は、決定した小数点位置にしたがい、次のミニバッチ処理で使用するＤＦＰ１６とＤＦＰ３２の小数点位置を更新する。次に、ステップＳ４４において、演算処理装置１０２は、次のミニバッチ処理がある場合、動作をステップＳ３４に戻し、レイヤでの全てのミニバッチ処理が完了した場合、動作を終了する。
【００８９】
図１１は、演算処理装置の別の例（比較例）を示す。図３と同一または同様の要素については、同じ符号を付し、詳細な説明は省略する。図１１に示す演算処理装置１１０は、図３に示す演算器３２の代わりに演算器３２Ａを有し、小数点位置決定部３９とは別に小数点位置決定部３９Ａを有する。演算処理装置１１０におけるその他の構成は、図３に示す演算処理装置１０２と同様である。
【００９０】
演算器３２Ａは、ＦＰＵ３２０による演算結果（３２ビットの浮動小数点数ＦＰ３２）を直接使用して統計情報を取得するため、ＦＰ３２をＤＦＰ３２に変換するデータ変換部３３０（図３）を持たない。演算器３２Ａは、データ変換部３３０の代わりに、ＦＰ３２をＤＦＰ１６に変換するデータ変換部３４０を有する。データ変換部３４０は、レジスタファイル３４に保持された小数点位置のシフト量を示すシフト情報ＳＦＴ４に基づいて、動的固定小数点数ＤＦＰ１６の小数点位置を設定する。
【００９１】
また、演算器３２Ａは、ＦＰＵ３２０よる演算結果（ＦＰ３２）の統計情報を取得する統計情報取得部３４２を、統計情報取得部３３４とは別に有する。統計情報取得部３４２が統計情報取得部３３４とは独立に設けられるため、演算器３２Ａは、図３に示す選択部３２４を有しておらず、ＡＬＵ３２２による演算結果は、アキュムレータレジスタ３２６に直接転送される。
【００９２】
また、演算器３２Ａは、統計情報取得部３３４、３４２の出力のいずれかを統計情報集約部３６に接続する選択部３４４を有する。選択部３４４は、各ミニバッチ処理の完了後、例えば、切り替え命令を実行することにより、統計情報取得部３３４、３４２の出力のいずれかを選択する。例えば、図４に示すレイヤＬ１、Ｌ３の処理では、統計情報取得部３３４が選択され、図４に示すレイヤＬ２の処理では、統計情報取得部３４２が選択される。
【００９３】
図１２は、図１１の演算処理装置１１０を使用して実施する深層学習の一例（比較例）を示す。図４と同一または同じ動作については、詳細な説明は省略する。レイヤＬ１、Ｌ３の動作は、統計情報取得部３３４が選択部３４４を介して統計情報集約部３６に統計情報を転送することを除き、図４の動作と同様である。
【００９４】
レイヤＬ２の処理において、ＦＰＵ３２０は、演算命令を実行し、演算結果ＦＰ３２を出力する。データ変換部３４０は、ＦＰ３２をＤＦＰ１６に変換し、レジスタファイル３４に格納する。この際、データ変換部３４０は、レジスタファイル３４に保持されたシフト情報ＳＦＴ４に基づいて、ＤＦＰ１６の小数点位置を設定する。この後、レジスタファイル３４に格納されたＤＦＰ１６を使用して、レイヤＬ３の処理が実施される。
【００９５】
統計情報取得部３４２は、ＦＰＵ３２０の演算結果である３２ビットの浮動小数点数ＦＰ３２をレジスタファイル３４から読み出し、浮動小数点数ＦＰ３２の統計情報を取得する。例えば、ＩＥＥＥ（The  Institute  of  Electrical  and  Electronics  Engineers）７５４（浮動小数点数演算標準）の２進浮動小数点形式では、単精度（３２ビット）の浮動小数点数の指数部は８ビットである。このため、ＦＰ３２は、−１２６から＋１２７までの２５６通りの指数の値を取り得る。
【００９６】
統計情報取得部３４２は、例えば、２５６通りの指数の値毎に、ＦＰ３２のビット値の最上位ビットの分布を統計情報として取得する。統計情報取得部３４２が取得した統計情報は、ミニバッチ処理の完了後、選択部３４４を介して統計情報集約部３６に転送される。
【００９７】
例えば、以下に示す浮動小数点演算命令を実行することで、演算の実行とともに、データ変換部３４０によるＦＰ３２からＤＦＰ１６への変換を実行することができる。
ＦＡＤＤｑ  Ｆｄｓｔ，Ｆｓｒｃ１，Ｆｓｒｃ２，Ｆｑｓｆｔ
ここで、ＦＡＤＤｑは、ＤＦＰ１６への変換処理付き（小数点位置の設定を含む）の浮動小数点数の加算命令を示し、Ｆｄｓｔ、Ｆｓｒｃ１、Ｆｓｒｃ２、Ｆｑｓｆｔは、レジスタファイル３４のレジスタ番号を示す。ｄｓｔはディスティネーションオペランドを示し、ｓｒｃはソースオペランドを示す。ｑｓｆｔは、小数点位置のシフト量を示し、シフト情報ＳＦＴ４としてデータ変換部３４０に出力される。
【００９８】
統計情報集約部３６は、転送された統計情報をメモリ３８に格納する。なお、統計情報取得部３４２は、ＦＰ３２のビット値の最下位ビットの分布、ＦＰ３２のビット値の最上位ビットの最大の位置またはＦＰ３２のビット値の最下位ビットの最小の位置を、統計情報として取得してもよい。小数点位置決定部３９Ａは、２５６通りの指数の値の分布に基づいて、小数点位置を決定し、決定した小数点位置を示すシフト情報ＳＦＴ４をレジスタファイル４４に格納する。
【００９９】
図１１に示す演算処理装置１１０では、統計情報取得部３３４および小数点位置決定部３９とは別に、ＦＰ３２用の統計情報取得部３４２および小数点位置決定部３９Ａを設ける必要があり、データ変換部３２８とは別にデータ変換部３４０を設ける必要がある。このため、演算処理装置１１０の回路規模は、図３の演算処理装置１０２の回路規模に比べて増大する。
【０１００】
以上、図３から図１０に示す実施形態においても、図１および図２に示す実施形態と同様に、ＦＰＵ３２０とＡＬＵ３２２に共通の統計情報取得部３３４により、浮動小数点数と固定小数点数との統計情報を取得することができる。また、ＦＰＵ３２０とＡＬＵ３２２に共通の小数点位置決定部３９により、ＤＦＰ３２、ＤＦＰ１６の小数点位置を更新するシフト情報ＳＦＴ１、ＳＦＴ２を生成することができる。シフト情報ＳＦＴ１は、シフト情報ＳＦＴ２にオフセットを加えることで簡易に生成することができる。これにより、統計情報取得部３３４および小数点位置決定部３９の回路規模が増大することを抑制することができる。シフト情報ＳＦＴ１、ＳＦＴ２により、その後の処理に使用するデータの精度が低下することを抑止することができる。この結果、データの精度および深層学習の精度を低下させることなく、演算処理装置１０２の回路規模を削減することができる。
【０１０１】
さらに、図３から図１０に示す実施形態では、統計情報集約部３６は、集約した統計情報をデータバスＤＢＵＳに接続されたメモリ３８に格納する。このため、小数点位置決定部３９は、統計情報集約部３６との間で通信することなく、データバスＤＢＵＳを介してメモリ３８にアクセスすることで、統計情報を取得することができる。
【０１０２】
アキュムレータレジスタ３２６の入力に選択部３２４を接続することで、ＡＬＵ３２２による演算結果と、レジスタファイル３４に保持されたＦＰＵ３２０の演算結果であるＤＦＰ３２とを選択的にデータ変換部３２８に転送することができる。すなわち、選択部３２４により、固定小数点数の演算結果の統計情報と浮動小数点数の演算結果の統計情報とを、共通の統計情報取得部３３４により取得することができる。
【０１０３】
ＦＰＵ３２０の出力にデータ変換部３３０を接続しているため、例えば、ＦＡＤＤｑ命令を実行することで、ＦＰ３２の演算の実行とともに、データ変換部３３０によりＦＰ３２からＤＦＰ３２へ変換することができる。レイヤＬ１で得られたＤＦＰ１６を使用してレイヤＬ２でのＦＰ３２の処理を実行する場合、データ変換部３３２は、データ変換部３２８により小数点位置が補正されたＤＦＰ１６の小数点位置を補正前の小数点位置に戻した後、ＦＰ３２に変換する。これにより、レイヤＬ１で設定された小数点位置を引き継げない非線形の関数の処理をレイヤＬ２により実行することができる。
【０１０４】
図１３は、別の実施形態における演算処理装置の一例を示す。図３と同一または同様の要素については、同じ符号を付し、詳細な説明は省略する。図１３に示す演算処理装置１０４は、図３のＦＰＵ３２０の代わりにＦＰＵ３２０Ａを有し、図３のＦＰＵ３２０（演算器）は、ＦＰＵ３２０Ａ内のＦＰＵ演算器３３６として実現される。すなわち、ＦＰＵ演算器３３６は、図３のＦＰＵ３２０と同じ機能を有する。ＦＰＵ３２０Ａは、図３のデータ変換部３３０、３３２と、ＦＰＵ演算器３３６およびデータ変換部３３０、３３２の出力のいずれかを選択してレジスタファイル３４に書き戻す選択部３３８とを有する。
【０１０５】
データ変換部３３０による浮動小数点数ＦＰ３２から動的固定小数点ＤＦＰ３２への変換は、ＦＰＵ３２０Ａで実行する処理として実現される。データ変換部３３２による動的固定小数点数ＤＦＰ１６から浮動小数点数ＦＰ３２への変換は、ＦＰＵ３２０Ａで実行する処理として実現される。データ変換部３３０は、変換する元のＦＰ３２および小数点位置を示すシフト情報ＳＦＴ１をオペランドとしてレジスタファイル３４から受信し、変換処理を実行する。同様に、データ変換部３３２は、変換する元のＤＦＰ１６および小数点位置を示すシフト情報ＳＦＴ３をオペランドとしてレジスタファイル３４から受信し、変換処理を実行する。
【０１０６】
以下、図１３に示す演算処理装置１０４により、図４に示したレイヤＬ２の処理を実行する場合を説明する。まず、レイヤＬ１の処理で得られたＤＦＰ１６がレジスタファイル３４から読み出され、ＦＰＵ３２０Ａ内のデータ変換部３３２によりＦＰ３２に変換され、レジスタファイル３４に格納される。この際、シフト情報ＳＦＴ３に基づいてＤＦＰ１６の小数点位置を、小数点位置を補正する前の設定に戻してからＦＰ３２に変換してもよい。
【０１０７】
次に、浮動小数点演算命令に基づいて、ＦＰＵ演算器３３６により、レジスタファイル３４に保持されたＦＰ３２の演算が実行され、実行結果（ＦＰ３２）はレジスタファイル３４に格納される。次に、ＦＰＵ演算器３３６での演算結果（ＦＰ３２）とシフト情報ＳＦＴ１とをレジスタファイル３４から読み出して、データ変換部３３０により、ＦＰ３２は、シフト情報ＳＦＴ１に対応する小数点位置を有するＤＦＰ３２に変換される。変換により得られたＤＦＰ３２は、レジスタファイル３４に格納される。例えば、データ変換部３３０によるＦＰ３２からＤＦＰ３２への変換は、浮動小数点演算命令の１つであるＤＦＰ３２変換命令を命令デコーダ２４がデコードしたことに基づいて実行される。
【０１０８】
例えば、ＦＰＵ演算器３３６によるＦＰ３２の演算と、データ変換部３３０によるＦＰ３２からＤＦＰ３２への変換処理は、以下に示す命令を順次実行することで実行される。
ＦＡＤＤ  Ｆｄｓｔ，Ｆｓｒｃ１，Ｆｓｒｃ２
ＦＣＮＶＱ３２  Ｆｄｓｔ，Ｆｓｒｃ，Ｆｑｓｆｔ
【０１０９】
ここで、ＦＡＤＤは、浮動小数点数の加算命令を示し、Ｆｄｓｔ、Ｆｓｒｃ１、Ｆｓｒｃ２、Ｆｄｓｔ、Ｆｓｒｃ、Ｆｑｓｆｔは、レジスタファイル３４のレジスタ番号を示す。ｄｓｔはディスティネーションオペランドを示し、ｓｒｃはソースオペランドを示す。ＦＣＮＶＱ３２命令のＦｓｒｃは、ＦＡＤＤ命令のＦｄｓｔと同じレジスタが指定される。ｑｓｆｔは、小数点位置のシフト量を示し、シフト情報ＳＦＴ１としてデータ変換部３３０に出力される。
【０１１０】
統計情報取得部３３４は、選択部３２４およびアキュムレータレジスタ３２６を介してレジスタファイル３４から転送されるＤＦＰ３２の統計情報を取得する。統計情報取得部３３４は、取得した統計情報をミニバッチ処理の完了時に統計情報集約部３６に転送する。統計情報集約部３６は、転送された統計情報をメモリ３８に格納する。また、レジスタファイル３４に格納されたＤＦＰ３２は、データ変換部３２８によりＤＦＰ１６に変換され、レイヤＬ２の処理結果であるＤＦＰ１６は、例えば、レジスタファイル３４を介して外部メモリ２００等に一時保存される。なお、ＤＦＰ３２からＤＦＰ１６への変換の際、シフト情報ＳＦＴ２に基づいてＤＦＰ１６の小数点位置が補正される。この後、例えば、図４で説明したレイヤＬ３の処理が実行される。
【０１１１】
以上、図１３に示す実施形態においても、図１から図１０に示した実施形態を同様の効果を得ることができる。さらに、図１３に示す実施形態では、選択部３３８により、ＦＰＵ演算器３３６、データ変換部３３０、３３２の出力のいずれかが選択的にレジスタファイル３４に接続される。このため、演算器３２とレジスタファイル３２間を接続する信号線の数を図３に比べて削減することができる。
【０１１２】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１３】
１              固定小数点演算器
２              浮動小数点演算器
３              第１変換部
４              選択部
５              統計情報取得部
６              更新情報生成部
７              第２変換部
１０            メモリアクセスコントローラ
２０            制御部
２２            プログラムカウンタ
２４            命令デコーダ
２６            演算制御部
３０            ベクタユニット
３２            演算器
３４            レジスタファイル
３６            統計情報集約部
３８            メモリ
３９            小数点位置決定部
４０            スカラユニット
４２            演算器
４４            レジスタファイル
１００、１０２、１０４  演算処理装置
３２０          ＦＰＵ
３２２          ＡＬＵ
３２４          選択部
３２６          アキュムレータレジスタ
３２８、３３０、３３２  データ変換部
３３４          統計情報取得部
【図１】
2020098469.tif 000003
【図２】
2020098469.tif 000004
【図３】
2020098469.tif 000005
【図４】
2020098469.tif 000006
【図５】
2020098469.tif 000007
【図６】
2020098469.tif 000008
【図７】
2020098469.tif 000009
【図８】
2020098469.tif 000010
【図９】
2020098469.tif 000011
【図１０】
2020098469.tif 000012
【図１１】
2020098469.tif 000013
【図１２】
2020098469.tif 000014
【図１３】
2020098469.tif 000015