(57)【要約】【課題】深層学習を固定小数点数で精度よく実行することで、回路規模と消費電力を削減する。【解決手段】演算処理装置は、固定小数点数データに対する命令実行後の固定小数点数データ中のビットの分布についての統計情報を取得する取得回路と、固定小数点数データの小数点位置を更新する更新回路と、を備える。【選択図】図１０
2018124681.tif 000002
【特許請求の範囲】
【請求項１】
固定小数点数データに対する命令実行後の前記固定小数点数データ中のビットの分布についての統計情報を取得する取得回路と、
前記固定小数点数データの小数点位置を更新する更新回路と、を備える演算処理装置。
【請求項２】
前記取得回路は、前記命令実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置を取得する回路を有する請求項１に記載の演算処理装置。
【請求項３】
前記取得回路は、前記符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数する回路を有する請求項２に記載の演算処理装置。
【請求項４】
前記取得回路は、前記符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最上位の真値の位置を取得する回路を有する請求項２または３に記載の演算処理装置。
【請求項５】
前記取得回路は、前記符号ビットと一致しない最下位のビットの位置を取得する回路を有する請求項１から４のいずれか１項に記載の演算処理装置。
【請求項６】
前記取得回路は、前記符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数する回路を有する請求項５に記載の演算処理装置。
【請求項７】
前記取得回路は、前記符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最下位の真値の位置を取得する回路を有する請求項５または６に記載の演算処理装置。
【請求項８】
前記命令から、前記統計情報の格納先の指定を取得するデコーダをさらに備える請求項１から７のいずれか１項に記載の演算処理装置。
【請求項９】
前記デコーダは、前記命令から、前記固定小数点数データの小数点位置の指定を取得する請求項８に記載の演算処理装置。
【請求項１０】
１以上の層での演算により深層学習を実行する情報処理装置であって、
前記１以上の層の少なくとも１つの層において前記演算の命令を含む命令実行時の固定小数点数データ中のビットの分布についての統計情報を取得することと、
前記ビットの分布についての統計情報に基づいて前記固定小数点数データの小数点位置を更新することと、を実行する演算処理装置を備える情報処理装置。
【請求項１１】
１以上の層での演算により深層学習を実行するコンピュータが
前記１以上の層の少なくとも１つの層において前記演算の命令を含む命令実行時の固定小数点数データ中のビットの分布についての統計情報を取得することと、
前記ビットの分布についての統計情報に基づいて前記固定小数点数データの小数点位置を更新することと、を実行する情報処理方法。
【請求項１２】
１以上の層での演算により深層学習をコンピュータに実行させるためのプログラムであって、
前記１以上の層の少なくとも１つの層において前記演算の命令を含む命令実行時の固定小数点数データ中のビットの分布についての統計情報を取得することと、
前記ビットの分布についての統計情報に基づいて前記固定小数点数データの小数点位置を更新することと、を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、この演算処理装置を含む情報処理装置、方法、およびプログラムに関する。
【背景技術】
【０００２】
今日、深層学習へのニーズが高まっている。深層学習においては、乗算、積和演算、ベクトル乗算を含む様々な演算が実行される。ところで、深層学習では、個々の演算精度への要求は、他のコンピュータ処理ほど厳密ではない。例えば、従来の信号処理等では、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。深層学習では、複数の入力データを畳み込み演算するときの係数（重み）の調整が主な処理となり、入力データのうち、極端なデータは重視されないことが多いからである。また、大量のデータを繰り返し用いて係数を調整するため、一度飽和された値も、学習の進行に合わせて桁調整を行なうことで、飽和されずに係数調整に反映できるようになるためである。
【０００３】
そこで、このような深層学習の特性を考慮し、深層学習用の演算処理装置のチップ面積の削減、電力性能の向上等を図るため、浮動小数点数を用いないで、固定小数点数による整数演算を用いることが考えられる。浮動小数点数演算よりも整数演算の方が回路構成を簡素にできるからである。
【０００４】
しかしながら、固定小数点数は、ダイナミックレンジが狭いので、浮動小数点数より演算精度が劣化する場合がある。したがって、深層学習においても、小さな値を表現する精度、すなわち、有効桁数について、配慮が求められる。このため、固定小数点数を拡張した技術が提案されている。
【０００５】
例えば、Mixed Fixed Pointによる処理では、プログラム全体として統一した小数点位
置を使うのではなく、変数ごとに適した小数点位置（Ｑフォーマット）が用いられる。図１は、Ｑ３．１２フォーマットを例示する図である。Ｑ３．１２フォーマットは、符号ビット１桁、整数部３桁、小数点以下１２桁の１６ビットデータを定義する。Mixed Fixed Pointでは、変数ごとに、小数点位置、つまり、整数部の桁数と小数点以下の桁数が異な
るものとして処理される。
【０００６】
他の例として、Dynamic Fixed Point (動的固定小数点数)による処理では、実行中に変数の値域が取得され、一定のタイミングで小数点位置が見直される。したがって、Mixed Fixed Point演算、およびDynamic Fixed Point演算は、浮動小数点演算よりも処理が簡単な固定小数点演算に、浮動小数点演算の側面を加えたものと言える。
【０００７】
さらに、Mixed Fixed Point演算、Dynamic Fixed Point演算による処理を実行するためのプログラム向けの機能を有するDigital Signal Processor（ＤＳＰ）も提案されている。例えば、ブロック・シフト指定付きの演算命令を実行するＤＳＰがある。ブロック・シフト指定付きの演算命令は、変数のビット幅より大きいビット幅で演算を実行し、演算結果から値をシフトして切り出して変数用のレジスタに格納する。この命令では、演算結果から値を切り出すときのシフト量 S (例えば、-128〜127)が即値/汎用レジスタで指定可
能である。例えば、ＤＳＰがResult = Saturate (((in1 (演算子) in2) >> S), 16)とい
う命令を実行すると、演算結果を S ビットシフトし、下位16bit を残し、上位ビットを
飽和処理する。S ≧0 の場合には、ＤＳＰは、演算結果を算術右シフトし、すなわち、符号ビットを埋め込んで右シフトし、下位ビットを削除する。一方、S < 0 の場合は、ＤＳ
Ｐは、演算結果を算術左シフト、すなわち、符号ビットを維持して左シフトし、補数での下位ビットを削除する。
【０００８】
ブロック・カウント・リーディング・サイン（ＢＣＬＳ）出力を実行するＤＳＰも提案されている。ＢＣＬＳ出力は、ＤＳＰが演算結果の count leading sign を取って、結果をレジスタに書き込む機能である。ここで、count leading signとは、正数最上位のビット１の位置（負数で最上位のビット０の位置）をいう。例えば、ＤＳＰが、max (block_count_leading_sign(in1 (演算子) in2) -1)を実行すると、変数in1 と変数in2の演算子による演算結果から、正数最上位のビット１の位置（負数で最上位のビット０の位置）がレジスタに記録される。
【０００９】
図２は、深層学習において、単精度浮動小数点数（Single Precision Floating Point
）、半精度浮動小数点数（Half Precision Floating Point）、固定小数点数（Fixed point）、Dynamic Fixed Point数を適用した場合の認識エラー率を例示する（非特許文献１
参照）。なお、図２で、第１行目のデータ（Goodfellow et al.(2013)）は、他の論文の
評価結果である。また、図２の表で、Propは、認識（フォーワッド方向）および学習（バックワード方向）おけるデータ伝搬時のビット幅を示す。また、Up.は、重み係数アップ
デート時のビット幅を示す。さらに、ＰＩ  ＭＮＩＳＴ、ＭＮＩＳＴ、ＣＩＦＡＲ−１０、およびＳＶＨＮは、深層学習に用いられたデータセットを示す。
【００１０】
なお、非特許文献１によるDynamic Fixed Point数による処理では、演算または変数の
代入ごとに、オーバーフローの有無を記録し、オーバーフロー率（全演算回数に対するオーバーフローした演算の回数、全代入回数に対するオーバーフローした代入回数等）が算出される。そして、この処理では、所定の期間ごとに、各変数の小数点位置を以下の手順１、２で変更する。
（手順１）オーバーフロー率が規定値（ｒｍａｘ）より大きい場合、小数点位置を１つ下げる。
（手順２）オーバーフロー率の２倍の値が規定値（ｒｍａｘ）以下の場合、小数点位置を１つ上げる。
【００１１】
図２に例示されるように、従来技術による処理では、単精度浮動小数点数、半精度浮動小数点数、固定小数点数、およびDynamic Fixed Point数による結果においても、認識エ
ラー率は大きく増加していない。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１６−３３７５４号公報
【特許文献２】特開２０１２−２０３５６６号公報
【特許文献３】特開２０１０−１１２８７８号公報
【非特許文献】
【００１３】
【非特許文献１】Courbariaux et al.、 “TRAINING DEEP NEURAL NETWORKS WITH LOW PRECISION MULTIPLICATIONS” Accepted as a workshop contribution at ICLR 2015, International Conference on Learning Representations(ICLR)，2015年9月23日，
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上述のように、従来技術のDynamic Fixed Point数による処理結果においても、認識エ
ラー率が大きく増加しない。しかしながら、上記従来の技術においては、小数点位置をオーバーフロー率を基に1ビット調整するため学習結果の精度が劣化する。例えば、ｋ個の
データの学習ごとに小数点位置を調整する場合、小数点位置が適正位置からn ビットずれている場合、小数点位置が適切な位置に調整されるまでに、(n * k)回の学習が進む。そ
の結果、小数点位置が適正な位置になるまでに、飽和するデータやアンダーフローするデータが増え、学習が収束しない、あるいは、学習結果の精度劣化につながるおそれがある。
１つの側面では本発明の目的は、深層学習を固定小数点数で精度よく実行し、回路規模と消費電力を削減できるようにすることである。
【課題を解決するための手段】
【００１５】
本発明の一側面は、以下の演算処理装置によって例示される。すなわち、本演算処理装置は、固定小数点数データに対する命令実行後の前記固定小数点数データ中のビットの分布についての統計情報を取得する取得回路と、前記固定小数点数データの小数点位置を更新する更新回路と、を備える。
【発明の効果】
【００１６】
本実施形態によれば、深層学習を固定小数点数で精度よく実行することで、回路規模と消費電力を削減することができる。
【図面の簡単な説明】
【００１７】
【図１】Ｑ３．１２フォーマットを例示する図である。
【図２】深層学習において、単精度浮動小数点数、半精度浮動小数点数、固定小数点数、Dynamic Fixed Point数を適用した場合の認識エラー率を例示する図である。
【図３】ニューラルネットワークにおける深層学習を例示する図である。
【図４】フォーワッド方向の認識処理および識別処理とともにバックワード方向の学習処理を例示する図である。
【図５】比較例に係る深層学習の手順を例示する図である。
【図６】各層の処理の詳細を例示する図である。
【図７】比較例の情報処理装置による学習処理のフローチャートを例示する図である。
【図８Ａ】非符号となる最上位ビット位置の分布データを例示する図である。
【図８Ｂ】非符号となる最下位ビット位置の分布データを例示する図である。
【図９】プロセッサの構成を例示する図である。
【図１０】プロセッサの回路ブロックを例示する図である。
【図１１Ａ】ベクトルユニットの詳細を例示する図である。
【図１１Ｂ】スカラユニットの構成を例示する図である。
【図１２】データ変換部の構成を例示する図である。
【図１３Ａ】非符号となる最上位ビット位置を取得する統計情報取得部の処理を例示する図である。
【図１３Ｂ】非符号最上位ビット検出器の真理値表を例示する図である。
【図１４】非符号となる最上位ビット位置を取得する統計情報取得部のハードウェア回路の構成を例示する図である。
【図１５Ａ】非符号となる最下位ビット位置を取得する統計情報取得部の処理を例示する図である。
【図１５Ｂ】非符号最下位ビット検出器の真理値表を例示する図である。
【図１６】非符号となる最下位ビット位置を取得する統計情報取得部のハードウェア回路の構成を例示する図である。
【図１７】統計情報集約部の処理を例示する図である。
【図１８】統計情報集約部のハードウェア回路の構成を例示する図である。
【図１９】統計情報集約部の処理を例示する図である。
【図２０】統計情報集約部のハードウェア回路の構成を例示する図である。
【図２１】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２２】統計情報集約部の変形例である。
【図２３】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２４】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２５】変形例の統計情報格納部の構成を例示する図である。
【図２６】変形例の統計情報格納部の構成を例示する図である。
【図２７】命令フォーマットを例示する図である。
【図２８】命令フォーマットを例示する図である。
【図２９】情報処理装置が深層学習を実行する場合の各層の処理の詳細を例示する図である。
【図３０】情報処理装置による学習処理のフローチャートを例示する図である。
【図３１】データが固定小数点数の範囲に収まらない場合の小数点位置更新例である。
【図３２】データが固定小数点数の範囲に収まる場合の小数点位置更新例である。
【図３３】非符号となる最下位ビットの分布である。
【発明を実施するための形態】
【００１８】
以下、図面を参照して一実施形態に係る情報処理装置について説明する。本情報処理装置は、深層学習を実行する。
［深層学習の実行例］
【００１９】
まず、図３を参照して、ニューラルネットワークにおける深層学習を例示する。ニューラルネットワークは、ハードウェア回路であってもよいし、コンピュータプログラム上で仮想的に構築される階層間を接続するソフトウェアによる仮想的なネットワークであってもよい。ニューラルネットワークは、例えば、画像を認識し、識別するためのフォーワッド方向の処理と、フォーワッド方向の処理で使用するパラメータを決定するバックワード方向の処理を実行する。なお、バックワード方向の処理は、バックプロパゲーション（Ｂａｃｋ  Ｐｒｏｐａｇａｔｉｏｎ、ＢＰ）と呼ばれる。
【００２０】
図３のニューラルネットワークは、入力画像に対して、畳み込み層（Ｃｏｎｖｏｌｕｔｉｏｎ  Ｌａｙｅｒ）の処理と、プーリング層（Ｐｏｏｌｉｎｇ  Ｌａｙｅｒ）の処理とを実行し、画像の特徴を抽出し、画像を識別する。すなわち、図３では、フォーワッド方向の処理が例示されている。図３では、Ｉｎｐｕｔ  Ｌａｙｅｒとされている入力画像に対して、畳み込み層の処理とプーリング層の処理が実行され、４フィーチャマップ、６フィーチャマップ等が順次生成される。ここでフィーチャマップは、例えば、画像の異なるチャンネルで授受されるデータ、あるいは、画像のうちのＲ，Ｇ，Ｂデータ等に相当するデータである。そして、図３のニューラルネットワークは、最終層であるＦｕｌｌｙ  Ｃｏｎｎｅｃｔｅｄ  ｍｕｌｔｉｌａｙｅｒ  ｐｅｒｃｅｐｔｒｏｎ（ＭＬＰ）において、識別結果を出力する。なお、プーリング層は、サブサンプリング層（Ｓｕｂ-ｓａｍｐｌ
ｉｎｇ  Ｌａｙｅｒ）とも呼ばれる。最終層は、全結合層（Ｆｕｌｌｙ  Ｃｏｎｎｅｃｔｅｄ  Ｌａｙｅｒ）とも呼ばれる。
【００２１】
フォーワッド方向の処理のうち、最終層に至るまでの畳み込み層の処理と、プーリング層の処理を繰り返し実行する演算回路部分を特徴抽出部と呼ぶ。すなわち、特徴抽出部は、入力画像に対して、畳み込み層の処理と、プーリング層の処理を繰り返し実行することで、間引かれた画像を抽出する。畳み込み層の処理は、畳み込み演算とも呼ばれる。プーリング層の処理は、プーリング演算、あるいはサブサンプリング演算とも呼ばれる。
【００２２】
より具体的には、特徴抽出部は、フォーワッド方向のある層（第ｌ−１層）において、Ｎ個×Ｎ個の画素を有する画像の情報に対して、例えば、ｍ×ｍ個の重みｗab（ａ，ｂ＝
０，．．．，ｍ−１）のフィルタによる畳み込み演算を実行する。特徴抽出部は、この畳み込み演算を実行することで、現在処理中の層（第ｌ−１層）の画像から、次の層（第ｌ層）の画像の情報を作る。さらに、畳み込み演算による処理結果は、非線形活性化関数  ｙ＝ｓｉｇｍａ（ｘ）によって変換され、発火と呼ばれるモデル化がなされる。非線形活性化関数は、例えば、ｓｉｇｍａ（ｘ）＝ｍａｘ（０，ｘ）である。すなわち、非線形活性化関数  ｙ＝ｓｉｇｍａ（ｘ）は、ｘが負の値の場合、ｓｉｇｍ（ｘ）＝０であり、ｘが正の値の場合、ｓｉｇｍａ（ｘ）＝ｘの値をとる関数である。なお、重みｗは畳み込み演算に用いられることから、係数ということもできる。
【００２３】
＜畳み込み層の計算＞
今、第ｌ−１層における画素（i,j）からの出力をｙl-1i,jとし、第ｌ層の画素（i,j）における畳み込み演算の処理結果をｘli,jとし、第ｌ層における画素（i,j）の非線形活
性化関数  ｙ＝ｓｉｇｍ（ｘ）の演算結果をｙli,jとする。ｘli,jとｙli,jは以下の（式１）、（式２）で表すことができる。ただし、（式２）において、関数ｓｉｇｍａは、ギリシャ文字で表している。
【００２４】
【数１】
2018124681.tif 000003
【００２５】
【数２】
2018124681.tif 000004
【００２６】
式１の対象となる第ｌ−１層の画像の情報のうち、ｍ×ｍ個の画素の領域を以下、単位矩形領域と呼ぶ。なお、単位矩形領域は１つのフィーチャマップに限定される訳ではなく、図１に例示した４フィーチャマップ、６フィーチャマップが畳み込み演算の対象となる場合に、複数のフィーチャマップを用いて、畳み込み演算が実行されてもよい。また、以下、画素をセルともよぶ。
【００２７】
プーリング演算は、Ｎ個×Ｎ個の画素を有する画像をＮ／ｋ個×Ｎ／ｋ個の画素を有する画像に間引く処理である。間引き方としては、例えば、Ｎ個×Ｎ個の画素をｋ個×ｋ個ずつの部分画像に区切り、各部分画像に含まれるｋ個×ｋ個の画素中の最大の画素値を有する１つの画素を選択する処理（以下、ｍａｘ  ｐｏｏｌｉｎｇと呼ぶ）が例示できる。また、他の例として、ｋ個×ｋ個の画素の平均値によって１つの画素を生成する処理が例示できる。
【００２８】
識別部は、間引かれた画像中の全画素に対して、それぞれの画素に重みを適用し、畳み込み演算を実行することで、出力値を得る。今、特徴抽出部の最後の層を第ｌ−１層として、第ｌ−１層の各画素値をｙl-1jとし、全結合による畳み込み演算結果をｘliとし、重みをｗl-1jiとすると、ｘliは以下の（式３）で表すことができる。
【００２９】
【数３】
2018124681.tif 000005
【００３０】
また、識別部における非線形活性化関数  ｙ＝ｓｉｇｍａ（ｘ）の演算結果をｙliとすると、識別部の演算結果ｙliは以下の（式４）で表すことができる。ただし、（式４）において、関数ｓｉｇｍａは、ギリシャ文字で表している。
【００３１】
【数４】
2018124681.tif 000006
ここで、Ｉliはバイアス成分である。
【００３２】
図４に、フォーワッド方向の認識処理および識別処理とともにバックワード方向の学習処理を例示する。図４のニューラルネットワークにおいても、フォーワッド方向の認識処理は、入力画像に畳み込み演算を実行する畳み込み層、間引き処理を実行するプーリング層によって実行される。また、識別結果を出力する識別処理は、全結合層（図４では、Ｆｕｌｌｙ  ｃｏｎｎｅｃｔｅｄと記載）によって実行される。
【００３３】
全結合層による識別処理の結果は、正解データを比較され、比較結果である差分値がエラーとして出力される。エラーは、学習処理に用いられる。学習処理は、エラーから、フォーワッド方向の畳み込み層および全結合層における各層でのエラーおよび各層での次の重みを計算する処理である。図２では、現在の重みとして、畳み込み層（１層）における１つの重みｗiと、全結合層（１層）における１つの重みｗjが例示されている。また、次の重みとして、畳み込み層（１層）における１つの重みｗi+1と、全結合層（１層）にお
ける１つの重みｗj+1が例示されている。
【００３４】
今、例えば、エラーの評価関数として、識別結果である出力値ｙｉと正解データＴｉとの差分値の平方和を評価関数として例示すると、（式５）のように定義できる。学習処理は、（式５）で例示されるエラーの評価関数を最小にするための重みｗを決定する処理と考えることができる。
【００３５】
【数５】
2018124681.tif 000007
【００３６】
次に、（式５）をｙｉで偏微分すると（式６）となり、右辺は出力値ｙｉと正解データＴｉとの差である誤差値となる。エラーの評価関数を（式５）から一般化した場合も、エラーの評価関数を出力値ｙｉで偏微分すると、出力値ｙｉと正解データＴｉとの差である誤差値となると考えることができる。
【００３７】
【数６】
2018124681.tif 000008
さらに、（式５）をｘiで偏微分し、（式７）の推移律を適用し、さらに、ｙiに式４を代入すると、（式８）が得られる。なお、画素値ｘと、非線形活性化関数の出力ｙとの関係を（式２）で表す場合には、（式９）が得られる。
【００３８】
【数７】
2018124681.tif 000009
【００３９】
【数８】
2018124681.tif 000010
【００４０】
【数９】
2018124681.tif 000011
一方、（式５）をｙliで偏微分し、全結合層の画素値ｘliが１つ入力側の層（第ｌ−１層）からの出力値ｙl-1jによって（式３）のように表されることを考慮すると、（式１０）が得られる。なお、第ｌ層の画素値ｘli,jが１つ入力側の層（第ｌ−１層）からの出力値ｙl-1jによって（式１）で表される場合には、（式１０）は、（式１１）のようになる。
【００４１】
【数１０】
2018124681.tif 000012
【００４２】
【数１１】
2018124681.tif 000013
【００４３】
（式１０）の左辺は、第ｌ層の誤差を示す。また、（式１０）の右辺は、第ｌ＋１層の誤差に、第ｌ層の画素ｉと第ｌ＋１層の画素ｊとの間の重みの変数ｗi,jを乗算した結果
の集計である。この集計は、第ｌ層の画素ｉに関係する第ｌ＋１層の画素ｊについて集計したものである。
【００４４】
また、（式５）を重みｗlijで偏微分し、推移律を適用し、さらに、（式３）を代入す
ると、（式１２）が得られる。ただし、（式３）は、第１−１層からの出力ｙと、第ｌ層の画素値ｘの関係となっているが、（式１２）は、第１層からの出力ｙと、第ｌ＋１層の画素値ｘの関係となっている。（式１２）は、エラーの評価関数Ｅの勾配を示す。最勾降下法によるニューラルネットワークの学習処理においては、エラーの評価関数Ｅの勾配と、学習係数イータの積が重みＷの変化量（現在の重みＷｔと次の重みＷｔ＋１の差分値）となる。したがって、以下の記述において、エラーの評価関数Ｅの勾配を重みＷの更新量
ｄｅｌｔａＷと定義する。なお、画素値ｘとｙの関係が（式１）で表される場合には、（式１２）は、（式１３）のようになる。以上から、エラーの評価関数Ｅに最勾降下法を適用すると、（式１４）が得られる。なお、（式１４）では、演算がＭ回繰り返される式となっているが、Ｍ＝１でもよい。
【００４５】
【数１２】
2018124681.tif 000014
【００４６】
【数１３】
2018124681.tif 000015
【００４７】
【数１４】
2018124681.tif 000016
（Ａ）各層の重み
【００４８】
（式１４）は、現在の重みＷｔと次回認識処理での重みＷｔ＋１との関係を示している。したがって、（式１４）の右辺の第２項が次回の重みへの増分値となる。また、（式１４）でギリシャ文字イータは、エラーの評価関数Ｅの勾配から重みＷｔの増分値を得るための係数であり、例えば、経験的実験的に設定できる。すなわち、学習処理においては、学習回路の各層において、（式１２）（あるいは式１３）による勾配を求め、エラーの評価関数Ｅが小さくなる方向に、（式１４）の第２項の増分値を算出し、次回の重みＷｔ＋１を求める処理を実行する。
（Ｂ）各層のエラーの評価関数の勾配（更新量ｄｅｌｔａＷの計算）
【００４９】
ここで、（式１４）の第２項は、（式１２）により、各層（第ｌ層）の画素値（ｙli）と、各層（第ｌ層）に対して１つ出力側の層（第ｌ＋１層）のエラー（エラーの評価関数の画素値ｘl+1jによる偏微分値）との積から得られる。ただし、現在の層（（式１３）では第ｌ−１層）と、１層全結合層側の層（（式１３）では第ｌ層）との関係が（式１）のように積和演算で表される場合、更新量ｄｅｌｔａＷは、（式１３）で表される。すなわち、更新量ｄｅｌｔａＷは、現在の層（第ｌ−１層）の画素の出力値ｙl-1i,jと関係する第ｌ層の画素値ｘli,jからのエラーへの寄与を集計したものとなっている。
（Ｃ）各層のエラー
【００５０】
一方、（式１０）の左辺は、各層（第ｌ層）のエラー（エラーの評価関数の画素値ｙliによる偏微分値）を示す。また、（式１０）の右辺は、現在の層（第ｌ層）に対して１つ出力側の層（第ｌ＋１層）のエラー（エラーの評価関数の画素値ｘl+1jによる偏微分値）と、第ｌ層の画素ｉと第ｌ＋１層の画素ｊとの間の重みの変数ｗi,jとの積の集計である
。この集計は、第ｌ層の画素ｉに関係する第ｌ＋１層の画素ｊについての集計である。
［比較例］
【００５１】
図５から図７を参照して、比較例に係る情報処理装置での深層学習について説明する。
図５は、比較例に係る深層学習の手順を例示する図である。比較例の情報処理装置は、コンピュータプログラムにしたがって深層学習を実行する。比較例の情報処理装置は、Dynamic Fixed Point数の処理を実行可能なプロセッサを有している。
【００５２】
図５のように、比較例の深層学習は、１層目の畳み込み層(Conv_1)とプーリング層(Pool_1)、２層目の畳み込み層(Conv_2)とプーリング層(Pool_2)、全結合層１(fc1)、および
全結合層２(fc2)の処理により実行される。深層学習は、ミニバッチと呼ばれる処理の単
位に区切られて実行される。ここで、ミニバッチとは、学習の対象となる入力データの集合｛（Ｉｎｉ，Ｔｉ），ｉ＝１〜Ｎ｝を複数組（例えば、ｋ個のデータのＭ組、Ｎ＝ｋ＊Ｍ）に分割したｋ個のデータの組み合わせをいう。また、ミニバッチは、このような個々の入力データの組（ｋ個のデータ）で実行される学習の処理単位のことをいう。ここで、Ｉｎｉは、入力データ（ベクトル）、Ｔｉは正解データ（ベクトル）である。比較例の情報処理装置は、以下のように、深層学習中の所定数のミニバッチごとに、各層の各変数のオーバーフロー回数を取得してコンピュータプログラム中の変数に蓄積し、深層学習に用いる変数の固定小数点位置を自動調整する。
【００５３】
比較例の情報処理装置は、例えば、浮動小数点数による試行(ミニバッチ1回など)や、
ユーザ指定により各変数の初期小数点位置を決定し、学習を開始する（Ｓ１）。そして、情報処理装置は、k回のミニバッチを学習中に、各層の各変数のオーバーフローの回数を
統計情報として保存する（Ｓ２）。このとき、情報処理装置は、学習を実行するプログラム中の各変数に対する演算、代入等がなされる毎に、オーバーフローの有無を判定し、回数を計数し、回数を保持するカウンタ変数に代入する。
【００５４】
ミニバッチを学習中に変数にオーバーフローが発生した場合は、変数に対する飽和処理を行ない、学習を続行する（Ｓ３）。ここで、飽和処理とは、正の数がオーバーフローした際には正の最大値に、負の数がオーバーフローした際は負の最小値にクリップする処理である。
【００５５】
そして、情報処理装置は、k組のデータに対するミニバッチ終了後（ｋ回の学習終了後
）、カウンタ変数に蓄積したオーバーフロー回数からオーバーフロー率を求め、オーバーフロー率を基に、固定小数点数の小数点位置を調整する（Ｓ４）。そして、情報処理装置は、Ｓ２の処理に戻り、学習を進める。
【００５６】
図６は、図５における各層の処理の詳細を例示する図である。図では、１層目の畳み込み層(Conv_1)、プーリング層(Pool_1)、および全結合層２(fc2)が例示されている。この
例では、１層目の畳み込み層(Conv_1)において、入力データini=(x0,...,xn)と、重み(Wij)との間で、畳み込み演算が実行され、z0,...,zj,...等が計算される。また、z0,...,zj,...等に対して、活性化関数が演算され、u0,...,uj,...等が計算される。情報処理装置
は、この１層目の畳み込み層(Conv_1)での変数z0,...,zj,...のオーバーフロー回数をカ
ウンタ変数Conv_1_zに蓄積する。また、情報処理装置は、この１層目の畳み込み層(Conv_1)での変数u0,...,uj,...等でのオーバーフロー回数をカウンタ変数Conv_1_uに蓄積する
。例えば、カウンタ変数Conv_1_uが配列の場合、カウンタ変数Conv_1_u（１）には、変数u0,...,uj,...のうち、オーバーフローした変数の個数が累積される。また、カウンタ変
数Conv_1_u（２）には、変数u0,...,uj,...のうち、２倍するとオーバーフローする変数
の個数が累積される。
【００５７】
１層目の畳み込み層(Conv_1)での演算結果は、１層目のプーリング層(Pool_1)から、さらに上位層へ伝播される。このとき、情報処理装置は、２層目以上の層でも同様の演算と、オーバーフロー回数の蓄積を実行する。情報処理装置は、以上のような演算を上位層においても実行して演算結果をさらに上位層へ伝播させる。そして、情報処理装置は、最終
的には、全結合層２(fc2)において、得られた演算結果と、正解データTiとの差分値から
エラーδ0(7),...,δj(7),...を算出する。そして、情報処理装置は、エラーδ0(7),...,δj(7),...を基に、逆方向の伝播を実行する。その結果、情報処理装置は、下位の階層（例えば、結合層１(fc1)）の出力でのエラーδ0(6),...,δj(6),...δn(6)と重みの変数Wijの次回の重みへの差分値ΔWijを算出する。このとき、情報処理装置は、エラーδ0(7),...,δj(7),...およびエラーδ0(6),...,δj(6),...,δn(6)でのオーバーフロー回数をカ
ウンタ変数fc2_δに蓄積する。また、情報処理装置は、差分値ΔWijでのオーバーフロー
回数をカウンタ変数fc2_ΔWに蓄積する。また、情報処理装置は、重みの変数Wijでのオーバーフロー回数をカウンタ変数fc2_Wに蓄積する。
【００５８】
そして、情報処理装置は、全結合層１(fc1)から１層目の畳み込み層(Conv_1)まで、エ
ラーを逆方法に伝播させながら、重みの差分を計算する。情報処理装置は、以上のような順伝播と逆伝播をｋ組の入力データを用いて、ｋ回繰り返す。情報処理装置は、このようなｋ回のミニバッチ終了後、各変数に対応するカウンタ変数のオーバーフロー回数を基に、各変数の固定小数点位置を更新する。
【００５９】
図７に、比較例の情報処理装置による学習処理のフローチャートを例示する。この処理では、情報処理装置は、初期小数点位置を決定する（Ｃ１）。そして、情報処理装置は、回数kを値０で初期化する。そして、情報処理装置は学習終了の条件が充足されたか否か
を判定する（Ｃ３）。学習が終了するのは、全結合層(fc2)でのエラーが基準値以下とな
るか、または、学習回数が規定の最大値に達した場合である。
【００６０】
学習終了の条件が充足されない場合、情報処理装置は、次のミニバッチを実行し、変数ｋをカウントアップする（Ｃ４）。そして、情報処理装置は、統計情報としてオーバーフロー回数を各カウンタ変数に蓄積する（Ｃ５）。すなわち、情報処理装置は、各層において、オーバーフローした変数の個数、２倍するとオーバーフローする変数の個数を累積する。
【００６１】
そして、情報処理装置は、回数ｋが更新間隔に達したか否かを判定する（Ｃ６）。回数ｋが更新間隔に達していない場合、情報処理装置は、Ｃ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置は、変数のオーバーフロー回数にしたがって、小数点位置を更新する。例えば、情報処理装置は、非特許文献１と同様、オーバーフロー回数を演算の実行回数で除算したオーバーフロー率を求めればよい。そして、オーバーフロー率が規定値を超えた場合に、情報処理装置は、該当する変数の小数点位置を１つ下げ、整数部を１ビット拡張すればよい。また、オーバーフロー率の２倍の値が規定値以下の場合、情報処理装置は、小数点位置を１つ上げ、整数部を１ビット削減すればよい。そして、情報処理装置１は、Ｃ３の処理に戻る。
【００６２】
しかし、以上の処理は、各層の演算ごとにオーバーフロー回数を累積し、オーバーフロー率が既定値を越えた場合、および、オーバーフロー率の２倍の値が既定値未満となった場合に固定小数点位置を１ビットずらす処理である。この処理は、オーバーフロー回数あるいはオーバーフロー率に基づく固定小数点位置の更新処理である。情報処理装置は、オーバーフロー回数あるいはオーバーフロー率からは、適正な小数点位置がどこであるかを判断することが困難である。
【００６３】
したがって、比較例の処理は、固定小数点位置の更新時、小数点位置を１つ下げる、あるいは上げる等の処理で、適正な位置を試行し、その結果からさらに判断を重ねていくという手順となる。このため、情報処理装置が適正な小数点位置を決定するまでに、小数点位置が複数回更新されることになる。例えば、上記のように、情報処理装置がｋ回のミニバッチごとにオーバーフロー率を判定し、１ビットずつ小数点位置を更新する場合には、
小数点位置をNビットずらすために、N*k回（*は乗算）分のミニバッチが実行される。こ
のため、小数点位置が不適切な状態で学習処理が繰り返される。つまり、学習中に、望ましくないレベルで固定小数点数データの飽和、あるいは、アンダーフローが発生し、学習結果の精度劣化につながり、収束が遅くなる恐れがある。
【００６４】
また、比較例の情報処理装置は、単にオーバーフロー回数を取得し、蓄積する処理を深層学習のプログラム中で実行するため、学習時間が増大する可能性がある。つまり、情報処理装置は、適正な小数点位置を決定するための情報をプログラムに提供する機能がないため、プログラムにオーバーフロー回数を累積するコードが組み込まれ、処理時間が増加する恐れがある。
［実施形態］
【００６５】
以下、図８Ａから図３２により、一実施形態に係る情報処理装置１、情報処理装置１が実行する情報処理方法、および情報処理装置１で実行されるプログラムについて説明する。本実施形態は、一例であり、情報処理装置１は、本実施形態の構成に限定される訳ではない。
＜統計情報＞
【００６６】
本実施形態では、情報処理装置１のプロセッサが統計情報を取得することで、統計情報取得のためのプログラム中のオーバーヘッドが削減される。ここで、プロセッサが取得する統計情報は、例えば、以下のいずれか、または、これらの組み合わせをいう。情報処理装置１が実行するアプリケーションプログラムは、プロセッサから統計情報を取得することで、小数点位置を最適化する。アプリケーションプログラムの処理にしたがってプロセッサは、Dynamic Fixed Point演算のための命令を実行する。
（１）非符号となる最上位ビット位置の分布
【００６７】
図８Ａに、非符号となる最上位ビット位置の分布データを例示する。図８Ａは演算の途中結果が40bitで、固定小数点数の桁あわせのために14bit右シフトされるデータに対する例である。非符号となる最上位ビット位置とは、正数に対しては、ビットが１となっている最上位のビット位置をいう。また、負数に対しては、ビット０となっている最上位のビット位置をいう。非符号となる最上位ビット位置は、例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビットであるbit[0]としたとき、符号ビットbit[39]と異なるbit[k]のうち、インデックスkが最大のものをいう。非符号となる最上位ビット位置の分
布が得られると、絶対値としての値の分布範囲が把握可能となる。
【００６８】
図８Ａで、縦軸は、非符号となる最上位ビット位置の出現個数であり、横軸は最上位のビットの位置 Count Leading Sign（ＣＬＳ）である。図８Ａでは、ビット０の右側に小
数点があると仮定する。本実施形態では、情報処理装置１のプロセッサの演算回路および演算回路内のレジスタは、命令のオペランドで指定されるレジスタのビット数（例えば、１６ビット）以上のビット幅（例えば、４０ビット）を有する。ただし、情報処理装置１のプロセッサの演算回路および演算回路内のレジスタのビット幅が４０ビットに限定される訳ではない。また、演算結果は、例えば、１６ビットのレジスタ等、演算回路よりも少ないビット幅のレジスタ（命令のオペランドで指定されるレジスタ）に格納される。その結果、演算結果は（例えば、４０ビット）、オペランドで指定されるシフト量でシフトし、ビット0未満に該当するビットは所定の丸め処理がなされ、オペランドで指定されるレ
ジスタのビット幅を越えるデータ（ビット１５を越えるデータ）は、飽和処理される。
【００６９】
また、図８Ａの横軸に付与された数値は、固定小数点で表現可能な数値を示す。例えば、情報処理装置１がこの固定小数点数を−２ビットだけシフト（右方向に２ビットシフト）すると、最上位ビットが１４の位置にシフトし、飽和される領域が２ビット拡張され、
アンダーフローが発生して0となる領域が２ビット減少する。すなわち、情報処理装置１
が小数点位置を２ビット左にシフトすると、飽和される領域が２ビット拡張され、アンダーフローが発生する領域が２ビット減少する。また、例えば、情報処理装置がこの固定小数点数を２ビットだけ正方向にシフト（左方向に２ビットシフト）すると、最上位ビットが１８の位置にシフトし、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。すなわち、情報処理装置１が小数点位置を２ビット右にシフトすると、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。
【００７０】
情報処理装置１は、学習実行中に、非符号となる最上位のビット位置の分布を得ることで、Dynamic Fixed Point演算における適正なシフト量、つまり、適切な固定小数点位置
を直ちに決定できる。例えば、情報処理装置１は、飽和されるデータが指定の割合以下になるように固定小数点位置を決定すればよい。つまり、一例としては、情報処理装置１は、データのアンダーフローが所定の程度となることよりもデータの飽和が所定の程度となること優先して、固定小数点位置を決定できる。
【００７１】
非符号となる最上位ビット位置の分布は、情報処理装置１のプロセッサ１０（図９参照）内の所定のレジスタ（統計情報レジスタともいう）内に積算される。プロセッサ１０は、当該統計情報レジスタからの分布データの読み出し、書き込み、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までに命令実行の対象となった１以上の固定小数点数についての分布データが蓄積される。蓄積された分布データは、読み出し命令によってメモリに読み出される。なお、プロセッサ１０は、クリア命令に代えて、統計情報レジスタへのロード命令の実行を可能とし、値０を統計情報レジスタにロードできるようにしてもよい。
（２）非符号となる最下位ビット位置の分布
【００７２】
非符号となる最下位ビット位置の分布とは、ビットが符号と異なる値となる最下位のビット位置をいう。例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビット
であるbit[0]までの並びとしたとき、符号ビットbit[39]と異なるbit[k]のうち、インデ
ックスkが最小のものをいう。非符号となる最下位ビット位置の分布は図８Ｂのように表
現される。また、非符号となる最下位ビット位置の分布では、有効なデータが含まれる最下位ビットが把握される。
（３）非符号となる最上位ビット位置の最大値
【００７３】
非符号となる最上位ビット位置の最大値は、前回クリア命令が実行されたときから現在に至るまでに、命令実行の対象となった１以上の固定小数点数について符号ビットの値と異なる値となる最上位のビット位置のうちの最大値である。情報処理装置１は、非符号となる最上位のビット位置の最大値をDynamic Fixed Point演算における適正なシフト量、
つまり、適切な小数点位置の決定に利用できる。
【００７４】
プロセッサは、上記統計情報レジスタからの上記最大値の読み出し、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの最大値が蓄積され、読み出し命令によって最大値がメモリに読み出される。
（４）非符号となる最下位ビット位置の最小値
【００７５】
非符号となる最下位ビット位置の最小値は、前回クリア命令が実行されたときから現在に至るまでの１以上の固定小数点数について符号と異なる値となる最下位のビット位置のうちの最小値である。情報処理装置１は、非符号となる最下位ビット位置の最小値をDynamic Fixed Point演算における適正なシフト量、つまり、適切な小数点位置の決定に利用
できる。
【００７６】
プロセッサ１０は、統計情報レジスタからの上記最小値の読み出し、クリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの上記最小値が蓄積され、読み出し命令によってメモリに読み出される。
＜構成＞
【００７７】
図９に、情報処理装置１のプロセッサ１０の構成を例示する。図９では、プロセッサ１０とともに、命令用メモリ（ＩＲＡＭ）２１およびデータ用メモリ（ＤＲＡＭ）２２も例示されている。プロセッサ１０は、single instruction multiple data（ＳＩＭＤ）型の演算処理装置である。
【００７８】
プロセッサ１０は、プログラムカウンタ（ＰＣ）１１１、デコーダ（Decoder）１１２
、レジスタファイル１２、ベクトル演算用の演算器１３１、スカラ演算用の演算器（Arithmetic Logic Unit（ＡＬＵ））１４１、およびベクトル演算用の演算器１３１の結果を
加算するアキュムレータ１３２を有している。また、プロセッサ１０は、ベクトル演算用の演算器１３１、スカラ演算用の演算器１４１、アキュムレータ１３２等の演算結果、および、データ用メモリ２２からの読み出し結果を選択する複数のセレクタ１０１を有している。なお、図では、複数のセレクタを総称してセレクタ１０１と呼ぶ。また、複数のベクトル演算用の演算器を総称して演算器１３１と呼ぶ。
【００７９】
さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータからの統計情報を取得する統計情報取得部１０２、統計情報取得部１０２によって取得された統計情報を格納する統計情報格納部１０５を有している。統計情報取得部１０２と統計情報格納部１０５は、固定小数点数データに対する命令実行後の固定小数点数データ中のビットの分布についての統計情報を取得する取得回路の一例である。なお、図では、複数の統計情報取得部を総称して統計情報取得部１０２と呼ぶ。
【００８０】
さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータの固定小数点位置を変更するデータ変換部１０３を有している。また、図では、複数のデータ変換部を総称してデータ変換部１０３と呼ぶ。
【００８１】
図のように、プログラムカウンタ１１１の指す命令用メモリ２１のアドレスから、命令がフェッチされ、デコーダ１１２がフェッチされた命令をデコードする。なお、図では、命令のフェッチを実行する命令フェッチの制御部が省略されている。
【００８２】
デコーダ１１２が命令をデコードすると、デコード結果に応じて、プロセッサ１０の各部が制御される。例えば、デコードの結果がベクトル演算命令であった場合、レジスタファイル１２のベクタレジスタのデータがベクトル演算用の演算器１３１に入力され、ベクトル演算が実行される。ベクトル演算用の演算器１３１の演算結果は、セレクタ１０１を介して統計情報取得部１０２およびデータ変換部１０３に供給される。また、ベクトル演算用の演算器１３１の演算結果は、アキュムレータ１３２に入力され、ベクトル演算用の演算器１３１の演算結果が例えば、カスケードに加算される。アキュムレータ１３２の演算結果は、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。
【００８３】
また、例えば、デコードの結果、命令がスカラ演算命令であった場合には、レジスタファイル１２のスカラ・レジスタのデータがスカラ演算用の演算器１４１に入力される。演算器１４１の演算結果は、アキュムレータ１３２の演算結果と同様、セレクタ１０１を介して統計情報取得部１０２およびデータ変換部１０３に供給される。
【００８４】
さらに、例えば、デコードの結果、命令がロード命令であった場合には、データ用メモリ２２からデータが読み出され、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。データ変換部１０３でデータ変換された結果は、レジスタファイル１２のレジスタに格納される。
【００８５】
また、デコードの結果、命令がDynamic Fixed Point演算を実行する命令であった場合
、デコーダ１１２は、シフト量がデータ変換部１０３に供給されるように指示する。シフト量は、例えば、命令のオペランド（即値）、オペランドで指定されたレジスタ、オペランドで指定されたアドレス・レジスタの示すアドレスのデータ用メモリ２２等から取得され、データ変換部１０３に供給される。図９の処理は、デコーダが命令から、固定小数点数データの小数点位置の指定（シフト量）を取得することの一例である。
【００８６】
データ変換部１０３は、ベクトル演算の結果、スカラ演算の結果、アキュムレータ１３２の演算結果、あるいは、データ用メモリ２２からの読み出し結果等で得られる固定小数点数データを、指定されたシフト量Sだけシフトする。また、データ変換部１０３は、シ
フトとともに、上位ビットの飽和処理および下位ビットの丸めを実行する。図１２にデータ変換部の具体的構成を例示する。データ変換部１０３は、例えば入力を４０ビットの演算結果とし、下位Sビットを小数部として丸めを行な丸め処理部と、算術シフトを実行す
るシフタと飽和処理を行なう飽和処理部を有する。
【００８７】
丸め処理部は、下位S bitを小数部として丸めを行なう。Sが負の場合には、丸め処理部は、何も行なわない。丸めとしては、最近接丸め、0への丸め、正の無限大への丸め、負
の無限大への丸め、乱数丸めなどが例示される。図でシフト量は、例えば、図９に例示されるように、デコーダが命令から取得するシフト量である。
シフト部は、Sが正の場合はS bit算術右シフト、Sが負の場合は、算術左シフト、すな
わち、-S bit算術左シフトを行なう。飽和部は、シフト結果が 2E15-1（正の最大値）以
上の場合は 2E15、-2E15（負の最小値）以下の場合は -2E15、それ以外は入力の下位16bitを出力する。ここで、2E15は、２の１５乗を表す。
【００８８】
そして、データ変換部１０３は、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、上位ビット廃棄し、下位ビットに０を埋め込む。また、データ変換部１０３は、右シフト時、上位ビット（符号ビットより下位のビット）に符号ビットを埋め込む。そして、データ変換部１０３は、上記のように丸め、シフト、飽和処理によって得られるデータを、レジスタファイル１２のレジスタ等と同一のビット幅（例えば、１６ビットのレジスタ）で出力する。データ変換部は固定小数点数データの小数点位置を更新する更新回路の一例である。
【００８９】
したがって、プロセッサ１０で実行されるコンピュータプログラムがDynamic Fixed Point演算を実行する命令のオペランドにシフト量を指定することで、プロセッサ１０は、
プログラム実行中に、固定小数点数の小数点位置を指定されたシフト量だけ更新する。
【００９０】
また、デコードの結果、命令が統計情報取得を指示する命令（統計情報取得機能付き命令という）である場合、統計情報取得部１０２において、統計情報が取得され統計情報格納部１０５に格納される。ここで、統計情報は、上記で述べたように、（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、またはこれらの組み合わせである。
【００９１】
図１０に、図９のプロセッサ１０の回路ブロックを例示する。プロセッサ１０は、制御
ユニット１１、レジスタファイル１２、ベクトルユニット１３、スカラユニット１４を含む。制御ユニット１１は、プログラムカウンタ１１１とデコーダ１１２を含む。レジスタファイルは、ベクトルレジスタファイル、ベクトル演算用アキュムレータレジスタ（Vector ACC）、スカラレジスタファイル、スカラ演算用アキュムレータレジスタ（ACC）を含
む。ベクトルユニット１３は、ベクトル演算用の演算器１３１、統計情報取得部１０２、データ変換部１０３を含む。スカラユニット１４は、スカラ演算用の演算器１４１、統計情報取得部１０２、データ変換部１０３を含む。
【００９２】
また、図１０の構成例では、複数の統計情報取得部１０２からの統計情報を集約する統計情報集約部１０４が追加されている。また、統計情報格納部１０５はレジスタファイル１２の一部となっている。また、命令用メモリ２１は、メモリインターフェース（Memory
I/F）を介して制御ユニット１１に接続される。また、データ用メモリ２２は、メモリインターフェース（Memory I/F）を介してベクトルユニット１３およびスカラユニット１４に接続される。
【００９３】
図１１Ａにベクトルユニット１３の詳細を例示する。図では、統計情報集約部１０４も例示されている。ベクトルユニット１３は、ベクトル・レジスタVector Reg0、Vector Reg1のデータをベクトル演算用の演算器１３１−１で演算する。ベクトル演算用の演算器１３１−１の演算結果は、積和演算用のアキュムレータ１３２と、ベクトル演算用の演算器１３１−２に入力される。
【００９４】
積和演算用のアキュムレータ１３２は、ベクトル演算用の演算器１３１−１の演算結果をスカラ加算し、スカラ演算用アキュムレータレジスタ（ACC）に格納する。ベクトル演
算用の演算器１３１−２は、命令によって指定される演算モードに従って、ベクトル演算用の演算器１３１−１の演算結果、あるいは、ベクトル演算用アキュムレータレジスタ（Vector ACC）のデータ、あるいは、それらを加算した結果を出力する。
【００９５】
セレクタ１０１は、ベクトル演算用の演算器１３１−２の出力結果と、データ用メモリ２２からの読み出し結果（Read Data 0,…, Read Data 0）のいずれかを選択し、統計情
報取得部１０２およびデータ変換部１０３に入力する。統計情報取得部１０２で取得された統計情報は、統計情報集約部１０４に入力される。また、データ変換部１０３でデータ変換されたデータは、図示しないセレクタを介して、データ用メモリ２２（Write Data0,…, Write Data n）にストアされるか、ベクトルレジスタ（Vector Reg2）に保持される
。
【００９６】
図１１Ｂにスカラユニット１４の構成を例示する。スカラユニット１４は、即値（Immediate）オペランドで得られるデータとスカラ・レジスタScalar Reg1からのデータの一方を選択するセレクタ１４２と、セレクタ１４２の選択結果とスカラ・レジスタScalar Reg0のデータを演算するスカラ用の演算器１４１を有する。スカラ用の演算器１４１の演算
結果は、メモリインターフェース（Memory I/F）を介してデータ用メモリ２２のアドレス（例えば、Addr）にストアされる。また、スカラ用の演算器１４１の演算結果は、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に入力される。
【００９７】
セレクタ１０１は、スカラ用の演算器１４１の演算結果、スカラ・レジスタScalar Reg2のデータ、スカラ演算用アキュムレータレジスタ（ACC）のデータ、およびメモリインターフェース（Memory I/F）を介して読み出されたデータ（Read Data）の１つを選択する
。セレクタ１０１は、選択したデータを、統計情報取得部１０２およびデータ変換部１０３に入力する。統計情報取得部１０２は、セレクタ１０１から入力されたデータから統計情報を取得し、統計情報集約部１０４に入力する。
【００９８】
以下、統計情報取得部１０２のうち、非符号となる最上位ビット位置を取得するものを統計情報取得部１０２Ａと呼ぶことにする。また、統計情報取得部１０２のうち、非符号となる最下位ビット位置を取得するものを統計情報取得部１０２Ｂと呼ぶことにする。また、統計情報集約部１０４のうち、統計情報取得部１０２によって取得されてビット位置を計数してビット位置に対するビットの分布を取得するものを統計情報集約部１０４Ａと呼ぶことにする。また、統計情報集約部１０４のうち、ビット位置の最大値と最小値を取得するための前段階として統計情報取得部１０２によって取得されてビット位置を論理和演算するものを統計情報集約部１０４Ｂと呼ぶことにする。
【００９９】
図１３Ａに、非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａの処理を例示する。図では、統計情報取得部１０２Ａに含まれる非符号最上位ビット検出器による処理が例示されている。非符号最上位ビット検出器は、例えば、図１３Ｂの真理値表で定義される論理回路である。図１３Ａの例では、符号ビットが０、「非符号となる最上位ビット位置」として示される位置のビットが１、このビットより上位側のビットがすべて０、かつ、このビットより下位側のビットはｂの入力データ（in(40bit)）が例示されて
いる。ここで、ｂは０または１のいずれかである。統計情報取得部１０２Ａは、この入力データを処理し、非符号となる最上位ビット位置を１とし、他のビット位置を０とする出力データ（out(40bit)）を生成する。入力データが全ビット0、または、全ビット1の場合は、39bit目に1を、38bit以下に0を出力する。なお、以下の説明では、プロセッサ１０の演算回路のデータは４０ビットのデータで例示されるが、プロセッサ１０の演算回路のデータが４０ビットに限定される訳ではない。
【０１００】
図１３Ｂに非符号最上位ビット検出器の真理値表を例示する。図１３Ｂのように、非符号最上位ビット検出器は、正数に対しては、ビットin[38]から下位ビット方向にビットをサーチして、最初に１になったビット位置の番号を２進数のビットパターンで出力する。また、非符号最上位ビット検出器は、負数に対しては、in[38]から下位ビット方向にビットをサーチして、最初に０になったビット位置の番号を２進数のビットパターンで出力する。また、入力データが全ビット0、または、全ビット1の場合は、非符号最上位ビット検出器は、39bit目に1を、38bit以下に0を出力する。
【０１０１】
図１４に、非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａのハードウェア回路の構成を例示する。この回路では、符号ビットin[39]と他のビット（in[38]からin[0]）との排他論理和（EXOR）が実行される。そうすると、符号ビットin[39]と同じ
値を有するビットによる排他論理和値は０となり、符号ビットin[39]と異なる値を有するビットによる排他論理和値は１となる。
【０１０２】
今、仮にin[38]がin[39]と異なる値であった場合、排他論理和によって出力データのout[38]は１となる。一方、出力データのout[37]には、in[39]とin[37]の排他論理和値がANDゲートを介して入力される。このANDゲートの一方の入力には、in[39]とin[38]の排他論理和値を反転したビット値が入力されるため、in[39]とin[38]とが不一致の場合、in[39]とin[37]の排他論理和値によらず、ANDゲートの出力は０となる。
【０１０３】
同様に、出力データのout[36]には、in[39]とin[36]の排他論理和値が上記と同様のANDゲートを介して入力される。このANDゲートの一方の入力には、in[39]とin[38]の排他論
理和値と、in[39]とin[37]との排他論理和値という２つの排他論理和値の論理和値（ORゲートの出力）を反転したビット値が入力される。このため、in[39]とin[38]とが不一致の場合、in[39]とin[36]の排他論理和値によらず、ANDゲートの出力は０となる。以下、同
様に、in[39]とin[i](iは３７以下)の排他論理和値によらず、ANDゲートの出力は０とな
る。
【０１０４】
一方、仮にin[38]がin[39]と同じ値であった場合、in[39]とin[38]の排他論理和値は０となり、出力データのout[38]は0となる。このため、in[39]とin[37]の排他論理和値が入力されるANDゲートは、in[39]とin[37]の排他論理和値に依存して、１または０を出力す
る。以下、同様に、out[i](iは37以下)が出力されるANDゲートの論理否定付き入力は、in[39]とin[j](jはi+1以上、38以下)の排他的論理和が全て0の場合に0となり、in[39]とin[i](iは３７以下)の排他論理和値が１になると、out[i]には１が設定される。そのビット
位置（i）より下位のビットでは、out[i]が出力されるANDゲートの論理否定付き入力が1
となるため、out[i]には０が設定される。したがって、図１４の回路によって、非符号となる最上位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)が取得される。図１３、図１４の非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａは、命令実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置を取得する回路の一例である。また、非符号となる最上位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)は、符号ビットと一致しない最上位のビットの位置を真値（１）で示すビット列の一例である。
【０１０５】
図１５Ａに、非符号となる最下位ビット位置を取得する統計情報取得部１０２Ｂの処理を例示する。図では、統計情報取得部１０２Ｂに含まれる非符号最下位ビット検出器による処理が例示されている。非符号最下位ビット検出器は、例えば、図１５Ｂの真理値表で定義される論理回路である。図１５Ａの例でも、正数での処理が例示される。この例では、符号ビットin[39]=0、「非符号となる最下位ビット位置」として示される位置のビットが１、このビットよりより下位側のビットがすべて０、このビットより上位側のビット（符号ビットを除く）はｂの入力データが例示されている。ここで、ｂは０または１のいずれかであり、入力データは、in(40bit)である。統計情報取得部１０２Ｂは、この入力デ
ータを処理し非符号となる最下位ビット位置を１とし、他のビット位置を０とする出力データ（out(40bit)）を生成する。入力データが全ビット0、または、全ビット1の場合は、39bit目に1を、38bit以下に0を出力する。
【０１０６】
図１５Ｂに非符号最下位ビット検出器の真理値表を例示する。図１５Ｂのように、非符号最下位ビット検出器は、正数に対しては、in[0]から上位ビット方向にビットをサーチ
して、最初に１になったビット位置の番号を２進数のビットパターンで出力する。また、非符号最下位ビット検出器は、負数に対しては、in[0]から上位ビット方向にビットをサ
ーチして、最初に０になったビット位置の番号を２進数のビットパターンで出力する。また、また、入力データが全ビット0、または、全ビット1の場合は、非符号最下位ビット検出器は、39bit目に1を、38bit以下に0を出力する。
【０１０７】
図１６に、非符号となる最下位ビット位置を取得する統計情報取得部１０２Ｂのハードウェア回路の構成を例示する。符号ビットin[39]が０の場合には、統計情報取得部１０２Ｂは、最下位ビットin[0]から上位側に向かって、ビットが１であるビット位置を探索す
ればよい。一方、符号ビットin[39]が1の場合には、データは補数となっているので、統
計情報取得部１０２Ｂは、最下位ビットin[0]から上位側に向かって、ビットが０である
ビット位置を探索すればよい。
【０１０８】
すなわち、この回路では、符号ビットin[39]と他のビット（in[0]からin[38]）との排
他論理和（EXOR）が実行される。そうすると、符号ビットin[39]と同じ値を有するビットによる排他論理和値は０となり、符号ビットin[39]と異なる値を有するビットによる排他論理和値は１となる。
【０１０９】
今、仮にin[0]がin[39]と異なる値であった場合、排他論理和によって出力データのout[0]は１となる。一方、出力データのout[1]には、in[39]とin[1]の排他論理和値がANDゲ
ートを介して入力される。このANDゲートの一方の入力には、in[39]とin[0]の排他論理和
値を反転したビット値が入力される。このため、in[39]とin[0]の排他論理和値が１の場
合、in[39]とin[1]の排他論理和値によらず、ANDゲートの出力は０となる。
【０１１０】
同様に、出力データのout[2]には、in[39]とin[2]の排他論理和値が上記と同様のANDゲートを介して入力される。このANDゲートの一方の入力には、in[39]とin[0]の排他論理和値と、in[39]とin[1]の排他論理和値という２つの排他論理和値の論理和値（ORゲートの
出力）を反転したビット値が入力される。このため、in[39]とin[0]の排他論理和値が１
の場合、in[39]とin[2]の排他論理和値によらず、出力データのout[2]に値を出力するANDゲートの出力は０となる。以下、同様に、in[39]とin[i](iは１以上)の排他論理和値によらず、出力データのout[i]に値を出力するANDゲートの出力は０となる。
【０１１１】
一方、仮にin[0]がin[39]と同じ値であった場合、排他論理和によって出力データのout[0]は0となるため、in[39]とin[1]の排他論理和値が入力されるANDゲートは、in[39]とin[1]の排他論理和値に依存して、１または０を出力する。以下、同様に、out[i](iは1以上)が出力されるANDゲートの論理否定付き入力は、in[39]とin[j](jは0以上、i-1以下)の排他的論理和が全て0の場合に0となり、in[39]とin[i](iは１以上)の排他論理和値が１になると、out[i]には１が設定される。また、そのビットより上位の出力データout[i]には０が設定される。したがって、図１６の回路によって、非符号となる最下位ビット位置に１が設定され、他のビットが０の出力データout(40bit)が取得される。図１５、図１６の非符号となる最下位ビット位置を取得する統計情報取得部１０２Ｂは、符号ビットと一致しない最下位のビットの位置を取得する回路の一例である。また、非符号となる最下位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)は、符号ビットと一致しない最下位のビットの位置を真値（１）で示すビット列の一例である。
【０１１２】
図１７は、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａの処理を例示する図である。図では、４０ビットのデータが８個並列に処理されるＳＩＭＤデータからビットの分布を取得する処理が例示される。図１７では、ハードウェア回路である統計情報集約部１０４Ａの処理が、擬似コードで記述されている。
【０１１３】
すなわち、入力データは、８（行）×４０（ビット）の配列データで例示されている。また、各行の４０ビットの入力データは、非符号となる最上位ビット位置（図１４の統計情報取得部１０２Ａの出力）または非符号となる最下位ビット位置（図１６の統計情報取得部１０２Ｂの出力）である。この処理では、４０ビットの出力データoutについて、ま
ず、全ビットがクリアされる。次に、入力データの配列in[j][i]の各列ｉの要素の値が、すべての行（ｊ＝０から７）に対して加算される。したがって、図１３、図１５とは異なり、図１７の擬似コードでは、出力データ（配列要素）out[j]は、log2(SIMDデータ数)ビット(図17の例では3ビット)の整数である。なお、図１７では、ＳＩＭＤデータ数（並列
処理されるデータ数）は８であると想定したが、ＳＩＭＤデータ数が８に限定される訳ではない。
【０１１４】
図１８に、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得（ＳＩＭＤデータ数−１））がbit population count演算によって、8個の統計情報のiビット目(i=0から39)における1の個数がそれぞれカウントされる。入力データは、統計情報取得部１０２Ａ（図１３、図１４）によって取得された非符号となる最上位ビット位置である。したがって、統計情報集約部１０４Ａは、統計情報取得部１０２Ａによって取得された非符号となるSIMDデータ個数分の最上位ビット位置に対して、各ビットの’1’の発生回数をカウントすることで最上位ビット
位置の発生回数を計数する。統計情報集約部１０４Ａは、計数結果を出力データout0から
out39にそれぞれ格納する。
【０１１５】
また、入力データは、統計情報取得部１０２Ｂ（図１５、図１６）による非符号となる最下位ビット位置とすることもできる。統計情報集約部１０４Ａは、統計情報取得部１０２Ｂによって取得されたSIMDデータ個数分の非符号となる最下位ビット位置に対して、各ビットの’1’の発生回数をカウントすることで最下位ビット位置の発生回数を計数する
。統計情報集約部１０４Ａは、計数結果を出力データout0からout39にそれぞれ格納する
。すなわち、統計情報集約部１０４Ａは、非符号となる最上位ビット位置または非符号となる最下位ビット位置のいずれをも処理可能である。
【０１１６】
また、図１８でセレクタ（ＳＥＬ）は、bit population count演算器（Σ）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）に選択されたデータが、出力データout0からout39に出力される。したがって、統計情報取得部１０２がスカ
ラユニット１４で取得したデータは、一回のスカラユニット１４の演算においては、加算されることなくそのまま出力データout0からout39に出力される。out0からout39は、統計情報格納部１０５に引き渡すデータ（図２１の１０５Ａ、図２２の１０５Ｂの入力データin0からin39参照）である。図１７、図１８の統計情報集約部１０４Ａは符号ビットと一
致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例である。図１７、図１８の統計情報集約部１０４Ａは符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例でもある。
【０１１７】
図１９は、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂの処理を例示する図である。図１９においても、図１７と同様、４０ビットのデータが８個並列に処理されるＳＩＭＤデータを処理が例示される。図１９では、ハードウェア回路である統計情報集約部１０４Ｂの処理が、擬似コードで記述されている。
【０１１８】
この処理では、４０ビットの出力データout[i](i=0,…,39)には、入力データの配列in[j][i]の各列をすべての行（j=0,…,7）について論理和演算（ＯＲ演算）した結果が入力
される。したがって、図１９の擬似コードでは、図１７とは異なり、出力データ（配列要素）out[i](i=0,…,39)はビット列である。以上の処理の結果、出力データout[i](i=0,…,39)では、out[38]から下位ビット方向に向かって最初に１となるビット位置が最大ビッ
ト位置である。また、out[0]から上位ビット方向に向かって最初に１となるビット位置が最小ビット位置である。
【０１１９】
図２０に、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得ＳＩＭＤデータ数−１）がＯＲゲート（４０ビット）によってＯＲ演算される。また、図１８でセレクタ（ＳＥＬ）は、論理和演算（OR）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）されたデータが、出力データoutに出力される。したがって、統計情報取得部１０２がスカラユニット１４で
取得したデータは、一回の演算においては、論理和演算されることなくそのまま出力データoutに出力される。outは、統計情報格納部１０５に引き渡すデータである。
【０１２０】
論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例である。論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最下位のビットの位置を真値で
示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例でもある。
【０１２１】
図２１に、統計情報格納部１０５（図１０参照）の具体例として、統計情報集約部１０４Ａからの統計情報を専用レジスタに格納する統計情報格納部１０５Ａの構成を例示する。図で、in39からin0は、図１８のout39からout0に相当する統計情報集約部１０４からの統計情報を示す。また、sr39からsr0は、統計情報を格納するレジスタ値である。プロセ
ッサ10は、書き込み命令によってセレクタSELを介して、レジスタsr39からsr0のいずれか1つあるいは複数に初期値v39からv0を書き込む。ただし、プロセッサ10は、デコーダからのリセット信号によってレジスタsr39からsr0をリセットしても良い。プロセッサ10は、
統計情報取得機能付き命令の実行ごとに、加算器を用いて統計情報を蓄積し、レジスタsr39からsr0に格納する。統計情報集約部１０４Ａ（図１７、図１８）と、統計情報集約部
１０４Ａからの統計情報を専用レジスタに格納する統計情報格納部１０５Ａ（図２１）の組み合わせは符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例である。統計情報集約部１０４Ａ（図１７、図１８）と、統計情報集約部１０４Ａからの統計情報を専用レジスタに格納する統計情報格納部１０５Ａ（図２１）の組み合わせは符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例でもある。また、プロセッサ１０は、レジスタ（sr39からsr0）のいずれかの1つあるいは複数の値を読み出し、読み出し命令で指定されたデータ用メモリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
【０１２２】
図２２は、統計情報集約部１０４の変形例であり、統計情報の格納先がデコーダ１１２からのインデックスで指定される回路の構成例である。図では、例えば、sr[j][i](j=0,
…,k, i=0,…,39)の領域が確保され、indexによって、レジスタファイルの行jが指定される。
【０１２３】
プロセッサ１０は、書き込み命令によってセレクタSELを介して、indexによって指定されるレジスタファイルの行jの1つあるいは複数のレジスタに初期値を書き込む。ただし、プロセッサ１０はデコーダ１１２からの制御信号により、indexによって指定されるレジ
スタファイルの行jをリセットしても良い。そして、プロセッサ１０は、in39からin0の統計情報を加算器で蓄積し、indexによって指定されるレジスタファイルの行jに格納する。また、プロセッサ１０は、デコーダ１１２からの制御信号により、indexによって指定さ
れるレジスタファイルの行jから統計情報を読み出す。また、プロセッサ１０は、indexによって指定されるレジスタファイルの行jのいずれかの1つあるいは複数の値を読み出し、読み出し命令で指定されたデータ用メモリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
【０１２４】
図２３は、図１９、図２０で例示した統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するとともに蓄積された統計情報のビット位置の最大値を読み出す統計情報格納部１０５Ｃのハードウェア回路の構成を例示する図である。統計情報格納部１０５Ｃは、統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するレジスタ（sr）を有している。プロセッサ１０は、書き込み命令（write）によってセレクタ（ＳＥＬ）を介してレジスタ（sr）に初期値を書き込み可能である
。ただし、プロセッサ１０は、リセット信号によってレジスタ（sr）をリセットできるようにしてもよい。
【０１２５】
また、統計情報格納部１０５Ｃは、統計情報集約部１０４Ｂの論理和演算結果（in）と、すでにレジスタ（sr）に蓄積された統計情報の論理和演算を実行し、セレクタ（ＳＥＬ）を介してレジスタ（sr）に論理和演算の結果を蓄積する。
【０１２６】
また、プロセッサ１０は、読み出し命令によってセレクタ（ＳＥＬ）を介してレジスタ（sr）の値を読み出し、読み出し命令で指定されたデータ用メモリあるいは読み出し命令で指定された汎用レジスタに保存する。また、統計情報格納部１０５Ｃは、Priority Encoder(MSB優先)を有してもよい。Priority Encoder(MSB優先)は、レジスタ（sr）に蓄積されたビット列中の最上位のビット１の位置（−１から３８）を２進数で出力する。例えば、入力データinとして全ビット０が入力されると、Priority Encoder(MSB優先)は、”111111”（−１）を出力する。また、入力データinとしてin0=1、他のビットがすべて０のデータが入力されると、Priority Encoder(MSB優先)は、”000000”（０）を出力する。ま
た、入力データinとしてin0=x（0または1）、in1=1、他のビットがすべて０のデータが入力されると、Priority Encoder(MSB優先)は、”000001”（１）を出力する。同様に、入
力データinとしてin0〜in37がx（0または1）、in38=1のデータが入力されると、Priority
Encoder(MSB優先)は、”100110”（３８）を出力する。プロセッサ１０は、Priority Encoder(MSB優先)を介して、統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報からビット位置の最大値を２進数値で取得できる。図１９、図２０の論理和演算によってビット位置を集約する統計情報集約部１０４Ｂ（図１９、図２０）と統計情報格納部１０５Ｃの組み合わせは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最上位の真値の位置を取得する回路の一例である。
【０１２７】
図２４は、図１９、図２０で例示した統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するとともに蓄積された統計情報のビット位置の最小値を読み出す統計情報格納部１０５Ｄのハードウェア回路の構成を例示する図である。統計情報格納部１０５Ｄは、統計情報格納部１０５ＣのPriority Encoder(MSB優先)に代えてPriority Encoder(LSB優先)を有している。Priority Encoder(LSB優先)以外の統計情報格納
部１０５Ｄの構成は、統計情報格納部１０５Ｃと同様であるから説明を省略する。
【０１２８】
Priority Encoder(MSB優先)は、レジスタ（sr）に蓄積されたビット列中の最下位のビ
ット１の位置（−１から３８）を２進数で出力する。例えば、入力データinとして全ビット０が入力されると、Priority Encoder(LSB優先)は、”111111”（−１）を出力する。
また、入力データinとしてin0=1、他のビットがx（0または1）のデータが入力されると、Priority Encoder(LSB優先)は、”000000”（０）を出力する。また、入力データinとし
てin0=0、in1=1、他のビット（in2からin38）がx（0または1）のデータが入力されると、Priority Encoder(LSB優先)は、”000001”（１）を出力する。同様に、入力データinと
してin0〜in37が0、in38=1のデータが入力されると、Priority Encoder(LSB優先)は、”100110”（３８）を出力する。プロセッサ１０は、Priority Encoder(LSB優先)を介して、統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報からビット位置の最小値を２進数値で取得できる。論理和演算によってビット位置を集約する統計情報集約部１０４Ｂ（図１９、図２０）と統計情報格納部１０５Ｄ（図２４）の組み合わせは、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最下位の真値の位置を取得する回路の一例である。
【０１２９】
図２５は、図２３の統計情報格納部１０５Ｃのレジスタ（sr）をレジスタファイルとした変形例の統計情報格納部１０５Ｅの構成を例示する図である。また、図２６は、図２４の統計情報格納部１０５Ｄのレジスタ（sr）をレジスタファイルとする変形例の統計情報格納部１０５Ｆの構成を例示する図である。図２５、図２６では、例えば、sr0,sr1,…,srj,…の領域が確保され、indexによって、レジスタファイルの行jが指定される。プロセ
ッサ１０は、デコーダ１１２からの制御信号により、あるいは、indexによって指定され
るレジスタファイルの行jへの初期値の設定、統計情報（入力データin）の蓄積、行jから
の統計情報の読み出し等を実行する。
＜統計情報取得機能付き命令＞
以下、統計情報取得機能付き命令の構成を例示する。ここでは、命令の構成方法として、方法1、方法２を例示する。
【０１３０】
（方法1）方法１では、プロセッサ１０の命令セットに、統計情報を取得する演算命令
、ロード命令などが個別に追加される。以下の命令の構成は例示であり、プロセッサ１０が下記命令に限定される訳ではない。
［vmul_s命令］
【０１３１】
命令の構成：vmul_s vs, vt, vd, imm
vmul_s命令は、プロセッサ１０がベクトル・レジスタ vs と vt を乗算し imm ビットシ
フトし、丸め・飽和を行なって ベクトル・レジスタvd に格納するための命令である。プロセッサ１０は、乗算結果のシフト前の統計情報を取得し、統計情報レジスタに累積する。統計情報レジスタは、例えば、図２１のsr0からsr39、図２２の統計情報レジスタファ
イルのsrj_i（j=0,1,.., i=0,1,…）、図２３、図２４のレジスタ(sr)、図２５、図２６
の統計情報レジスタファイルのレジスタsr0,sr1,…等である。統計情報レジスタについては以下同様である。
【０１３２】
なお、プロセッサ１０が内部のレジスタとデータ用メモリ２２との間で統計情報を授受するためのread / write, load / store 命令も別途用意する。また、プロセッサ１０が
内部のレジスタをリセットするためのリセット命令を別途用意してもよい。以下、同様である。
［vld_s命令］
【０１３３】
命令の構成：vld_s ss, rt, rd
vld_s命令は、プロセッサ１０がアドレス・レジスタ rs とrt を加算したアドレスからベクトルデータをロードして、ベクトル・レジスタ rd に格納するための命令である。プロセッサ１０は、ロードしたデータの統計情報を取得し統計情報レジスタに累積する。
［read_acc_s命令］
【０１３４】
命令の構成：read_acc_s, rd, imm
read_acc_s命令は、プロセッサ１０がアキュムレータ・レジスタ(40bit)のデータに対し
て、imm ビットシフトし、丸め・飽和を行なってスカラ・レジスタ rd に格納するための命令である。プロセッサ１０は、アキュムレータレジスタの統計情報を取得し統計情報レジスタに累積する。
【０１３５】
（方法1の変形）上記方法１に加え、命令のオペランドに、統計情報を格納するレジス
タ・インデックス（s）を追加し、統計情報の格納先が指定できるようにしてもよい。以
下、命令の構成を例示する。この命令のインデックス（s）は、図２２、図２５，図２６
等の統計情報レジスタファイルのindexを指定する。
vmul_s vs, vt, vd, imm, s
vld_s ss, st, vd, s
read_acc sd, imm, s
【０１３６】
（方法２）図２７に方法２による命令フォーマットを例示する。命令フォーマットを拡張し、統計情報を取得するか否かを指定するビットを追加するようにしてもよい。例えば、全命令について統計情報取得機能を追加してもよい。図２５に、拡張された命令フォーマットを例示する。図のように、ＦＬＧ＝１は、統計情報の取得を指定する。一方、ＦＬＧ＝０は、統計情報の取得を指定せず、従来と同じ命令を示す。
【０１３７】
（方法２の変形）図２８に方法２の変形による命令フォーマットを例示する。命令フォーマットを拡張し、統計情報を格納するレジスタ・インデックスを指定するようにしてもよい。図でIDXは、レジスタ・インデックス（図２２、図２５，図２６等のindex）を示す。ただし、IDX=000 の場合には、プロセッサ１０は統計情報を取得しない。図２８の命令フォーマットをデコードし、レジスタ・インデックスIDXを取得する図９のデコーダ１１
２は、統計情報の格納先の指定を取得するデコーダの一例である。
【０１３８】
情報処理装置１が以上のような統計情報取得機能付き命令を実行するため、統計情報取得機能付き命令を専用サブルーチンで実行するようにすればよい。コンパイラは、専用サブルーチンをコンパイルするときに、統計情報取得機能付き命令を実行形式に組み込めばよい。また、専用サブルーチンは、アセンブリ言語で作成され、統計上取得機能付き命令の実行が指定されるようにしてもよい。情報処理装置１が深層学習を実行するためのコンピュータプログラムにおいて、以上のような専用サブルーチンが呼び出されるようにすればよい。
＜実行手順＞
【０１３９】
図２９に、本実施形態の情報処理装置１が深層学習を実行する場合の各層の処理の詳細を例示する。図２９の処理を実行する情報処理装置１は１以上の層での演算により深層学習を実行する情報処理装置の一例である。図では、１層目の畳み込み層(Conv_1)、プーリング層(Pool_1)、および全結合層２(fc2)が例示されている。この例でも、比較例の図６
と同様、１層目の畳み込み層(Conv_1)において、入力データini=(x0,...,xn)と、重み(Wij)との間で、畳み込み演算が実行され、ｚ０，．．．，ｚｊ，．．．等が計算される。また、z0,...,zj,...等に対して、活性化関数が演算され、u0,...,uj,...等が計算される。情報処理装置１は、この１層目の畳み込み層(Conv_1)での変数z0,...,zj,...等での統計
情報を内部の統計情報レジスタまたはレジスタ・インデックスで指定される統計情報レジスタファイルに蓄積する。なお、統計情報レジスタあるいはレジスタファイルが不足する場合は、各層の演算終了後に統計情報をメモリに退避し、次回の演算開始前に統計情報を復帰させる。また、情報処理装置１は、同様に、この１層目の畳み込み層(Conv_1)での変数u0,...,uj,...等での統計情報を内部のレジスタまたはレジスタ・インデックスで指定
される統計情報レジスタファイルに蓄積する。本実施形態の統計情報は、比較例のようなオーバーフロー回数とは異なり、上記で説明した（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、または、これらのいずれか２以上の組み合わせである。
【０１４０】
１層目の畳み込み層(Conv_1)での演算結果は、１層目のプーリング層(Pool_1)から、さらに上位層へ伝播される。このとき、情報処理装置１は、２層目以上の層でも同様の演算と、統計情報の蓄積を実行する。そして、情報処理装置１は、全結合層２(fc2)において
、得られた演算結果と、正解データTiとの差分値からエラーの変数δ０（７），．．．，δｊ（７），．．．を算出する。そして、情報処理装置１は、エラーの変数δ０（７），．．．，δｊ（７），．．．を基に、逆方向の伝播処理を実行する。すなわち、情報処理装置１は、下位の階層（例えば、結合層１(fc1)）の出力でのエラーの変数δ０（６），
．．．，δｊ（６），．．．δｎ（６）と重みの変数Wijの次の重みへの差分値ΔWijを算出する。このとき、情報処理装置１は、エラー変数δ０（７），．．．，δｊ（７），．．．およびエラーの変数δ０（６），．．．，δｊ（６），．．．，δｎ（６）での統計情報を１層目の畳み込み層(Conv_1)と同様に蓄積する。また、情報処理装置１は、差分値ΔWijでの統計情報も蓄積する。また、情報処理装置１は、重みの変数Wijでの統計情報を蓄積する。
【０１４１】
そして、情報処理装置１は、全結合層１(fc1)から１層目の畳み込み層(Conv_1)まで、
エラーを逆方法に伝播させながら、重みの差分を計算する。情報処理装置１は、以上のような順伝播と逆伝播をｋ組の入力データを用いて、ｋ回繰り返す。情報処理装置１は、このようなｋ回のミニバッチ終了後、各変数の統計情報を基に、各変数の固定小数点位置を更新する。
【０１４２】
図３０に、本実施形態の情報処理装置１による学習処理のフローチャートを例示する。この処理では、情報処理装置１は、初期小数点位置を決定する（ＷＥ１）。情報処理装置１は、過去の実験値、実績値、あるいは、ユーザ指定により各変数の初期小数点位置を決定すればよい。
【０１４３】
そして、情報処理装置１は、回数kを0に初期化する。また、情報処理装置１は、プログラム内の統計情報を格納する変数を初期化する（ＷＥ２）。そして、情報処理装置１は学習終了の条件が充足されたか否かを判定する（ＷＥ３）。学習が終了するのは、全結合層(fc2)でのエラーが基準値以下となるか、または、学習回数が規定の最大値に達した場合
である。
【０１４４】
学習終了の条件が充足されない場合、情報処理装置１は、次のミニバッチを実行する。このとき、情報処理装置１は、各レイヤの各変数の統計情報を統計情報レジスタあるいは統計情報レジスタファイルに累積する。統計情報を累積は、上記で説明したように、プロセッサ１０のハードウェアで実行される。そして、情報処理装置１は、変数ｋをカウントアップする（ＷＥ４）。
【０１４５】
そして、情報処理装置１は、回数ｋが更新間隔に達したか否かを判定する（ＷＥ５）。回数ｋが更新間隔に達していない場合、情報処理装置１は、ＷＥ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置１は、各種の統計情報が蓄積された統計情報を統計情報レジスタあるいは統計情報レジスタファイルあるいは統計情報をメモリに退避した領域から統計情報を読み出す。そして、情報処理装置１は、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新する（ＷＥ６）。
【０１４６】
このとき、情報処理装置１は、例えば、飽和するデータとアンダーフローするデータの全体のデータ数に対する比率が目標条件を充足するように、小数点位置を決定すればよい。また、情報処理装置１は、飽和するデータの全体のデータに対する比率とアンダーフローするデータの全体のデータに対する比率の両方が目標条件を充足することが困難である場合、一方を優先してもよい。また、情報処理装置１は、飽和が発生しない上限のビット位置と、有効なデータが存在する下限のビット位置の平均を、固定小数点数で表現可能な範囲の中央を位置づけて、小数点位置を設定してもよい。さらに、情報処理装置１は、回数kを0に初期化し、さらに統計情報を格納するレジスタをリセットする。そして、情報処理装置１は、Ｃ３の処理に戻る。
【０１４７】
ＷＥ４で各レイヤの各変数の統計情報を累積することと、ＷＥ６で各種の統計情報が蓄積されたレジスタあるいはレジスタファイルから統計情報を読み出すことは、１以上の層の少なくとも１つの層において前記演算の命令を含む命令実行時の固定小数点数データ中のビットの分布についての統計情報を取得することの一例である。また、ＷＥ６で、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新することは、ビットの分布についての統計情報に基づいて固定小数点数データの小数点位置を更新することの一例である。
【０１４８】
図３１に、データが固定小数点数の範囲に収まらない場合の小数点位置更新例を示す。図は、例えば、非符号となる最上位ビット位置の分布である。今、固定小数点数がＱ５．
１０（整数部５桁、小数点以下１０桁）で記述され、飽和される領域Ａ１、表現可能な領域Ａ２、および、アンダーフローが発生する領域Ａ３が形成されているとする。この例では、飽和される領域Ａ１とアンダーフローが発生する領域Ａ３は、白抜きの度数分布で例示されている。また、表現可能な領域は斜線のハッチングパターンで示されている。また、この例では、アンダーフローが発生する領域の度数分布が飽和する領域の度数分布より高く、バランスが悪い。一方、小数点位置を２ビット下側に移動し、Ｑ３．１２（整数部３桁、小数点以下１２桁）としても、飽和する領域のデータ数を全データ数で除算した値は、目標の基準値未満となる。そこで、情報処理装置１は、小数点位置をＱ５．１０からＱ３．１２設定しなおし、深層学習を継続すればよい。
【０１４９】
図３２および図３３に、データが固定小数点数の範囲に収まる場合の小数点位置更新例を示す。図３２も図３１と同様、例えば、非符号となる最上位ビット位置の分布である。また、図３３は非符号となる最下位ビットの分布である。図３２では、現在のビット精度（Ｑ３．１２フォーマット）で表現可能な範囲に当該変数のデータが収まっている。しかしながら、図３３では-1ビット目まで有効な値があり、これらの値が丸められていることがわかる。そこで、情報処理装置１は、最上位ビット位置分布でデータ個数が1以上とな
る最大値の11ビット目と、最下位ビットの分布でデータ個数が1以上となる最小値の-1ビ
ット目までが、表現可能な範囲の中心となるよう、小数点位置をＱ３．１２からＱ１．１４設定しなおし、深層学習を継続すればよい。
＜実施形態の効果＞
【０１５０】
情報処理装置１は、深層学習のミニバッチ実行時、各レイヤの各変数の統計情報をレジスタあるいはレジスタファイルに累積する。そして、情報処理装置１は、蓄積された統計情報を基に各レイヤの各変数の小数点位置を更新することができる。すなわち、プロセッサ１０が、ビット分布の統計上情報を取得する。ここで、統計情報は、命令実行時の（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、またはこれらの組み合わせ等である。したがって、情報処理装置１が深層学習実行時に、データの統計情報取得のための深層学習プログラム中のオーバーヘッドがなくなるため、実用的な時間で動的固定小数点演算を実現可能となる。
【０１５１】
すなわち、本実施形態では、情報処理装置１のプロセッサ１０が統計情報取得機能付き命令を実行するとともに、演算結果をビットシフトし、丸め・飽和を行なってレジスタに格納する命令を実行する。したがって、情報処理装置１はビット分布を示す統計情報を取得するオーバーヘッドを少なくできる。また、ビット分布を示す統計情報から直ちに適正なビットシフト、すなわち、小数点位置を決定できる。つまり、情報処理装置１のように、小数点位置を１ビットずつずらして適正な小数点位置を試行し、次の演算で結果を確認するという手順ではなく、ビット分布を示す統計情報から、直ちに小数点位置を決定できる（図３１、図３２）。したがって、情報処理装置１は、比較例のような小数点位置が不適切な状態で学習処理が繰り返される恐れがすくない。また、情報処理装置１は、学習結果の精度劣化につながり、深層学習の収束が遅くなる恐れが少ない。
【０１５２】
また、情報処理装置１は、深層学習を固定小数点数で精度良く実行できるので、データ転送量や演算器の回路規模が削減できる。その結果として、情報処理装置１は、消費電力を削減できる。削減できる回路規模は以下のように試算できる。例として32bit浮動小数
点数演算を実行する回路を、16bit固定小数点数演算を実行する回路に限定した場合、デ
ータ量（ メモリ、および、データ転送量）が半減される。また、演算回路規模としては
、 積和演算での回路規模は約半分となる(FPGAで試算)。
【０１５３】
また、プロセッサ１０は、統計情報取得部１０２Ａによって命令実行後の固定小数点数
データ中の符号ビットと一致しない最上位のビットの位置を取得できる。また、プロセッサ１０は、統計情報集約部１０４Ａによって符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数することができる。また、プロセッサ１０は、統計情報集約部１０４Ｂと、統計情報格納部１０５Ｃ（あるいは１０５Ｅ）によって、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する。そして、プロセッサ１０は、累積したビット列中の最上位の真値の位置を取得することができる。
【０１５４】
また、プロセッサ１０は、統計情報取得部１０２Ｂによって命令実行後の固定小数点数データ中の符号ビットと一致しない最下位のビットの位置を取得できる。また、プロセッサ１０は、統計情報集約部１０４Ａによって符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数することができる。また、プロセッサ１０は、統計情報集約部１０４Ｂと、統計情報格納部１０５Ｄ（あるいは１０５Ｆ）によって、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する。そして、プロセッサ１０は、累積したビット列中の最下位の真値の位置を取得することができる。以上のような構成により、プロセッサ１０は、上記統計情報を取得できる。
＜本実施形態の情報処理装置について＞
【０１５５】
情報処理装置１は、プロセッサ１０、命令用メモリ２１、およびデータ用メモリ２２を備える。情報処理装置１は、命令用メモリ２１に実行可能に展開されたコンピュータプログラムにしたがって深層学習を実行する。プロセッサ１０は、Central Processing Unit
（ＣＰＵ）、Microprocessor（ＭＰＵ）とも呼ばれる。プロセッサ１０は、は、単一のプロセッサに限定される訳ではなく、マルチプロセッサ構成であってもよい。また、単一のソケットで接続される単一のプロセッサ１０がマルチコア構成を有していても良い。深層学習を実行する情報処理装置１の少なくとも一部の処理は、プロセッサ１０以外の装置、例えば、Digital Signal Processor(DSP)、Graphics Processing Unit（GPU）、数値演算プロセッサ、ベクトルプロセッサ、画像処理プロセッサ等の専用プロセッサで行われても良い。また、深層学習を実行する情報処理装置１の少なくとも一部の処理は、集積回路（ＩＣ）、その他のディジタル回路であっても良い。また、深層学習を実行する情報処理装置１の少なくとも一部には、アナログ回路が含まれても良い。集積回路は、ＬＳＩ，Application Specific Integrated Circuit（ASIC），プログラマブルロジックデバイス（Ｐ
ＬＤ）を含む。ＰＬＤは、例えば、Field-Programmable Gate Array(FPGA)を含む。上記
各部は、プロセッサと集積回路との組み合わせであっても良い。組み合わせは、例えば、マイクロコントローラ（ＭＣＵ）、ＳｏＣ（System-on-a-chip）、システムＬＳＩ、チップセットなどと呼ばれる。
＜記録媒体＞
【０１５６】
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１５７】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、Compact Disc（ＣＤ）−Read Only Memory（ＲＯＭ）、ＣＤ−Recordable（Ｒ）、Digital Versatile Disk（ＤＶＤ）、ブルーレイディスク、Digital Audio Tape（ＤＡＴ）、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定され
た記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、Solid State Drive（ＳＳＤ）は、コンピュータ等から取り外し可能な記録媒体としても
、コンピュータ等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１５８】
１    情報処理装置
１０    プロセッサ
１１    制御ユニット
１２    レジスタファイル
１３    ベクトルユニット
１４    スカラユニット
２１    命令用メモリ
２２    データ用メモリ
１０１    セレクタ
１０２    統計情報取得部
１０３    データ変換部
１０４    統計情報集約部
１０５    統計情報格納部
１１１    プログラムカウンタ
１１２    デコーダ
１３１    ベクトル演算用の演算器
１３２    積和演算用のアキュムレータ
１４１    スカラ用の演算器
【図１】
2018124681.tif 000017
【図２】
2018124681.tif 000018
【図３】
2018124681.tif 000019
【図４】
2018124681.tif 000020
【図５】
2018124681.tif 000021
【図６】
2018124681.tif 000022
【図７】
2018124681.tif 000023
【図８Ａ】
2018124681.tif 000024
【図８Ｂ】
2018124681.tif 000025
【図９】
2018124681.tif 000026
【図１０】
2018124681.tif 000027
【図１１Ａ】
2018124681.tif 000028
【図１１Ｂ】
2018124681.tif 000029
【図１２】
2018124681.tif 000030
【図１３Ａ】
2018124681.tif 000031
【図１３Ｂ】
2018124681.tif 000032
【図１４】
2018124681.tif 000033
【図１５Ａ】
2018124681.tif 000034
【図１５Ｂ】
2018124681.tif 000035
【図１６】
2018124681.tif 000036
【図１７】
2018124681.tif 000037
【図１８】
2018124681.tif 000038
【図１９】
2018124681.tif 000039
【図２０】
2018124681.tif 000040
【図２１】
2018124681.tif 000041
【図２２】
2018124681.tif 000042
【図２３】
2018124681.tif 000043
【図２４】
2018124681.tif 000044
【図２５】
2018124681.tif 000045
【図２６】
2018124681.tif 000046
【図２７】
2018124681.tif 000047
【図２８】
2018124681.tif 000048
【図２９】
2018124681.tif 000049
【図３０】
2018124681.tif 000050
【図３１】
2018124681.tif 000051
【図３２】
2018124681.tif 000052
【図３３】
2018124681.tif 000053