(57)【要約】【課題】固定小数点数での精度を向上するとともに、回路の物理量および消費電力を削減可能な演算処理装置を実現する。【解決手段】演算処理装置の複数の演算処理回路の各々は、固定小数点数データに対する演算命令をそれぞれ実行する複数の演算部と、統計情報取得部を有する。統計情報取得部は、演算結果である複数の固定小数点数データに関し、最下位ビット位置から、符号ビットと異なるビット値を持つビット位置のうちの最上位のビット位置までの範囲にフラグビットを設定することで得られるビットパターンをビット位置ごとに累積する。または、統計情報取得部は、符号ビットの位置から、符号ビットと異なるビット値を持つビット位置のうちの最下位のビット位置までの範囲にフラグビットを設定することで得られるビットパターンをビット位置ごとに累積する。【選択図】図３７
2019074951.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置に接続されるとともに、複数の演算処理回路を有する演算処理装置において、
前記複数の演算処理回路の各々は、
固定小数点数データに対する演算命令をそれぞれ実行する複数の演算部と、
前記複数の演算部がそれぞれ実行した演算結果である複数の固定小数点数データに関し、最下位ビット位置から、符号ビットと異なるビット値を持つビット位置のうちの最上位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第１の統計情報、または、前記符号ビットの位置から、前記符号ビットと異なるビット値を持つビット位置のうちの最下位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第２の統計情報、の少なくとも一方の統計情報を取得する統計情報取得部と、を有する演算処理装置。
【請求項２】
前記統計情報取得部は、
前記取得された統計情報の各桁に累積した情報を保持する保持部と、
前記保持部が保持する統計情報のうちの特定の桁の情報を、前記特定の桁を指定する制御信号にしたがって選択する第１の選択部と、を有する請求項１記載の演算処理装置。
【請求項３】
前記保持部が保持する統計情報の各桁に累積した情報と閾値とを比較する比較部と、
前記比較部の比較結果に基づいて、前記統計情報の各桁のうち選択される桁を指定する制御部を有する請求項２に記載の演算処理装置。
【請求項４】
前記指定された桁に累積した情報を選択する第２の選択部をさらに有する請求項３に記載の演算処理装置。
【請求項５】
前記保持部が保持した統計情報の最上位桁から最下位桁に向かって順次各桁に累積した情報を第１の閾値と比較し、前記比較結果に基づき第１の桁を指定する第１の探索部と、
前記保持部が保持した統計情報の最下位桁から最上位桁に向かって順次各桁に累積した情報を第２の閾値と比較し、前記比較結果に基づき第２の桁を指定する第２の探索部と、
前記第１の桁と前記第２の桁とによって指定される範囲のそれぞれの桁に累積した情報を選択する第３の選択部と、を有する請求項２に記載の演算処理装置。
【請求項６】
制御処理回路をさらに備え、
前記制御処理回路は、前記複数の演算処理回路のそれぞれにおいて選択される桁に累積した情報について、それぞれの桁を選択した前記複数の演算処理回路に対応する値を計数し、前記計数された値が最も大きい桁を基に、前記複数の演算部が次に実行する演算命令の演算結果となる固定小数点数データの小数点位置を指定する小数点位置指定部をさらに有する請求項４に記載の演算処理装置。
【請求項７】
固定小数点数データに対する演算命令をそれぞれ実行する複数の演算部と、
前記複数の演算部がそれぞれ実行した演算結果である複数の固定小数点数データに関し、最下位ビット位置から、符号ビットと異なるビット値を持つビット位置のうちの最上位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第１の統計情報、または、前記符号ビットの位置から、前記符号ビットと異なるビット値を持つビット位置のうちの最下位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第
２の統計情報、の少なくとも一方の統計情報を取得する統計情報取得部と、を有する演算処理回路。
【請求項８】
主記憶装置と、
前記主記憶装置に接続される処理装置と、
前記主記憶装置および前記処理装置に接続されるとともに、複数の演算処理回路を有する演算処理装置と、を備える情報処理装置において、
前記複数の演算処理回路の各々は、
固定小数点数データに対する演算命令をそれぞれ実行する複数の演算部と、
前記複数の演算部がそれぞれ実行した演算結果である複数の固定小数点数データに関し、最下位ビット位置から、符号ビットと異なるビット値を持つビット位置のうちの最上位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第１の統計情報、または、前記符号ビットの位置から、前記符号ビットと異なるビット値を持つビット位置のうちの最下位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第２の統計情報、の少なくとも一方の統計情報を取得する統計情報取得部と、を有する情報処理装置。
【請求項９】
主記憶装置に接続するとともに、複数の演算処理回路を有する演算処理装置の制御方法において、
前記複数の演算処理回路の各々に含まれる複数の演算部に固定小数点数データに対する演算命令をそれぞれ実行させ、
前記複数の演算部がそれぞれ実行した演算結果である複数の固定小数点数データに関し、最下位ビット位置から、符号ビットと異なるビット値を持つビット位置のうちの最上位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第１の統計情報、または、前記符号ビットの位置から、前記符号ビットと異なるビット値を持つビット位置のうちの最下位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを各ビット位置に対応する桁ごとに累積した第２の統計情報、の少なくとも一方の統計情報を取得する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理回路、演算処理回路を含む演算処理装置、演算処理装置を含む情報処理装置、および方法に関する。
【背景技術】
【０００２】
今日、人工知能を用いた機械学習のうち、特に深層学習（ＤＬ）へのニーズが高まっている。深層学習は、多層ニューラルネットワーク（ＤＮＮ）を用いた機械学習の手法ということができる。図１は、ニューラルネットワークの構成を例示する図である。ニューラルネットワークは、神経細胞（ニューロン）をコンピュータ上にモデル化したものである。神経細胞は、細胞体と、他の細胞体から入力される信号を受ける樹状突起と、他の細胞体に信号を出力する軸索とを有する。また、信号を出力する軸索の末端と信号を受ける樹状突起との間にはシナプスと呼ばれる信号の伝達構造が形成されている。ニューラルネットワークでは、神経細胞間でのシナプスを介した情報伝達がモデル化されている。
【０００３】
さらに、ニューラルネットワークが多層化された多層ニューラルネットワークでは、深層学習が実行される。そして、深層学習が実行される多層ニューラルネットワークの認識性能を高めるため、多層ニューラルネットワークが大規模化される傾向にある。例えば、多層ニューラルネットワークで処理されるパラメータ数は、数百万から１億数千万にも及ぶ。多層ニューラルネットワークが人の脳に近づくためには、究極的に、パラメータ数は１千数百億にも及ぶと考えられる。したがって、今後、深層学習における学習データは増加し、多層ニューラルネットワークにおける計算負荷、メモリ負荷が増大することが予想される。そのため、増え続ける学習データに対して、認識性能と学習効率の改善が望まれている。認識性能と学習効率を改善し、負荷を軽減するため、多層ニューラルネットワークが軽量化されることが望ましい。
【０００４】
ところで、深層学習においては、乗算、積和演算、ベクトル乗算を含む様々な演算が実行される。ただし、深層学習では、個々の演算精度への要求は、通常の演算処理ほど厳密ではない。例えば、通常の演算処理等では、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。深層学習では、複数の入力データを畳み込み演算するときの係数（重み）の調整が主な処理となり、入力データのうち、極端なデータは重視されないことが多いからである。また、大量のデータを繰り返し用いて係数を調整するため、一度飽和された値も、学習の進行に合わせて桁調整を行なうことで、飽和されずに係数の調整に反映できるようになるためである。
そこで、このような深層学習の特性を考慮し、深層学習用の演算処理装置のチップ面積の削減、電力効率の向上等を図るため、浮動小数点数を用いないで、固定小数点数による演算を用いることが考えられる。浮動小数点数演算よりも固定小数点演算の方が回路構成を簡素にできるからである。
【０００５】
図２にデータ表現に用いるビットの構成を例示する。３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数のように、深層学習で処理するデータ（重みとパラメータ）のデータ表現に用いるビット幅を縮小することで、多層ニューラルネットワークで扱うデータ量を削減できる。扱うデータ量が削減されることで、深層学習の処理量が削減され、学習時間が短縮されることが期待できる。
【０００６】
しかしながら、固定小数点数は、取りうる値のダイナミックレンジが狭いので、浮動小
数点数より演算精度が劣化する場合がある。図３に、３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する。図では、「固定小数点数」が「整数」と記述されている。固定小数点数が整数に限定される訳ではない。固定小数点数は２進整数とも理解できるので、本明細書中では、固定小数点数を整数という場合がある。図のように、ビット幅を削減すると演算精度が低下することが予測される。演算精度が低下すると、深層学習がうまく実施できない場合もあり得る。すなわち、深層学習では、フォーワッド方向およびバックワード方向に積和演算が多数回繰り返され、演算結果が固定小数点数のダイナミックレンジを超えてしまうこともあるからである。そこで、演算精度を改善する技術により、ビット幅を削減することに起因する上記課題を克服することが望まれる。
【０００７】
ビット幅を削減することに起因する課題を考察するため、まず、深層学習の手順を説明する。図４に、通常の深層学習における処理手順を例示する。また、図５に、図４の処理手順のうち、Ｃｏｎｖ＿１の順方向処理とＦＣ２の逆方向処理を詳細化したものを例示する。深層学習の処理の流れは図４のとおりである。深層学習の処理では、それぞれの入力データに対応した正解データが存在する。深層学習を実行するネットワークの構成は人が決定する。
【０００８】
ネットワークは、入力データを左から入力し、各層の処理結果を右方向へ伝播させ（順伝播）、正解データと結果を比較し、結果の差分を左方向へ伝播させる(逆伝播)。例えば、図５の例では、入力パラメータｘｊに、係数Ｗｉｊの積和演算を実行することで、Ｃｏｎｖ＿１層の畳み込み演算が実行される。各階層は係数（Ｗｉｊ）を持っており、多層ニューラルネットワークの最上位の層（図４で、ＦＣ２）まで演算がなされると、演算結果が正解データと比較され、比較結果を基に各層の係数が更新される。この係数の変化（ΔＷｉｊ）によりネットワークが最適化される。なお、多層ニューラルネットワークは、１データごとに上記の係数の更新を行ってもよい。あるいは多層ニューラルネットワークは、複数データ(例えば２５６データ)について並列に同時に計算を行い、２５６通りの係数の更新情報を平均した結果を元に重みを更新しても良い。このとき、重み更新に用いる複数データの集合をミニバッチという。複数データの集合を並列に処理して重み更新が行われる場合、並列同時処理されるデータの集合をミニバッチということもできる。
【０００９】
図６に、深層学習におけるパラメータと重みのビット幅を縮小することによる課題を例示する。ビット幅を縮小することでデータ量は削減可能である。しかし深層学習では、図４に例示した処理を多数回繰り返す。例えば入力データが100,000枚の画像データであり
、重み係数の最適化のため図４のネットワークを１入力データ（１枚の画像データ）あたり100回通したとするとデータが10,000,000回多層ニューラルネットワークを通過する。
さらに、図５に例示したように、各階層で重みとパラメータとの内積（積和演算）が実行されるためさらに数万倍の演算が行われる。このような場合のデータの桁位置が図６に例示されている。深層学習が初期、中盤、終盤と進行するにしたがって、データの桁位置がずれていく。したがって、固定小数点で単純に深層学習を継続すると、有効桁少なくなり、究極的には、計算が破綻してしまうことが予想される。したがって、深層学習においても、小さな値を表現する精度、すなわち、有効桁数について、配慮が求められる。このため、固定小数点数を拡張した技術が提案されている。
【００１０】
例えば、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.は、重み係数アップ
デート時のビット幅を示す。さらに、ＰＩ  ＭＮＩＳＴ、ＭＮＩＳＴ、ＣＩＦＡＲ−１０、およびＳＶＨＮは、深層学習に用いられたデータセットを示す。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２０１２−２０３５６６号公報
【特許文献２】特開２００９−２７１５９８号公報
【非特許文献】
【００１６】
【非特許文献１】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回など)や、ユーザ指定により各変数
の初期小数点位置を決定する（図示しない）。
手順（２）：Ｋ回のミニバッチを学習中に、各層の変数ごとにオーバーフローの回数を統計情報として保存する。
手順（３）：ミニバッチを学習中にオーバーフローが発生した場合は、飽和処理を行ない、学習を続行する。
手順（４）：Ｋ回のミニバッチ終了後、統計情報から固定小数点数の小数点位置を調整する。
手順（５）：手順（２）に戻り、学習を進める
【００２３】
図９のように、比較例の深層学習は、１層目の畳み込み層(Conv_1)とプーリング層(Pool_1)、２層目の畳み込み層(Conv_2)とプーリング層(Pool_2)、全結合層１(fc1)、および
全結合層２(fc2)の処理により実行される。深層学習は、ミニバッチと呼ばれる処理の単
位に区切られて実行される。ここで、ミニバッチとは、学習の対象となる入力データの集合｛（Ｉｎｉ，Ｔｉ），ｉ＝１〜Ｎ｝を複数組（例えば、Ｋ個のデータのＭ組、Ｎ＝Ｋ＊Ｍ）に分割したＫ個のデータの組み合わせをいう。また、ミニバッチは、このような個々の入力データの組（Ｋ個のデータ）で実行される学習の処理単位のことをいう。ここで、Ｉｎｉは、入力データ（ベクトル）、Ｔｉは正解データ（ベクトル）である。比較例の情報処理装置は、以下のように、深層学習中の所定数のミニバッチごとに、各層の各変数のオーバーフロー回数を取得してコンピュータプログラム中の変数に蓄積し、深層学習に用いる変数の固定小数点位置を自動調整する。
【００２４】
比較例の情報処理装置は、例えば、浮動小数点数による試行(ミニバッチ1回など)や、
ユーザ指定により各変数の初期小数点位置を決定し、学習を開始する（Ｓ１）。そして、情報処理装置は、Ｋ回のミニバッチを学習中に、各層の各変数のオーバーフローの回数を統計情報として保存する（Ｓ２）。このとき、情報処理装置は、学習を実行するプログラム中の各変数に対する演算、代入等がなされる毎に、オーバーフローの有無を判定し、回数を計数し、回数を保持するカウンタ変数に代入する。
【００２５】
ミニバッチを学習中に変数にオーバーフローが発生した場合は、変数に対する飽和処理を行ない、学習を続行する（Ｓ３）。ここで、飽和処理とは、正の数がオーバーフローした際には正の最大値に、負の数がオーバーフローした際は負の最小値にクリップする処理である。
【００２６】
そして、情報処理装置は、Ｋ組のデータに対するミニバッチ終了後（Ｋ回の学習終了後
）、カウンタ変数に蓄積したオーバーフロー回数からオーバーフロー率を求め、オーバーフロー率を基に、固定小数点数の小数点位置を調整する（Ｓ４）。そして、情報処理装置は、Ｓ２の処理に戻り、学習を進める。
【００２７】
図１０は、図９における各層の処理の詳細を例示する図である。図では、１層目の畳み込み層(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)でのエラーが基準値以下と
なるか、または、学習回数が規定の最大値に達した場合である。
【００３１】
学習終了の条件が充足されない場合、情報処理装置は、次のミニバッチを実行し、変数ｋをカウントアップする（Ｃ４）。そして、情報処理装置は、統計情報としてオーバーフロー回数を各カウンタ変数に蓄積する（Ｃ５）。すなわち、情報処理装置は、各層において、オーバーフローした変数の個数、２倍するとオーバーフローする変数の個数を累積する。
【００３２】
そして、情報処理装置は、回数ｋが更新間隔（例えば、Ｋ）に達したか否かを判定する
（Ｃ６）。回数ｋが更新間隔に達していない場合、情報処理装置は、Ｃ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置は、変数のオーバーフロー回数にしたがって、小数点位置を更新する。例えば、情報処理装置は、非特許文献１と同様、オーバーフロー回数を演算の実行回数で除算したオーバーフロー率を求めればよい。そして、オーバーフロー率が規定値を超えた場合に、情報処理装置は、該当する変数の小数点位置を１つ下げ、整数部を１ビット拡張すればよい。また、オーバーフロー率の２倍の値が規定値以下の場合、情報処理装置は、小数点位置を１つ上げ、整数部を１ビット削減すればよい。そして、情報処理装置は、Ｃ３の処理に戻る。
【００３３】
なお、非特許文献１によるDynamic Fixed Point数による処理では、演算または変数の
代入ごとに、オーバーフローの有無を記録し、オーバーフロー率（全演算回数に対するオーバーフローした演算の回数、全代入回数に対するオーバーフローした代入回数等）が算出される。そして、この処理では、所定の期間ごとに、各変数の小数点位置を以下の手順１、２で変更する。
（手順１）オーバーフロー率が規定値（ｒｍａｘ）より大きい場合、小数点位置を１つ下げる。
（手順２）オーバーフロー率の２倍の値が規定値（ｒｍａｘ）以下の場合、小数点位置を１つ上げる。
【００３４】
しかし、以上の処理は、各層の演算ごとにオーバーフロー回数を累積し、オーバーフロー率が既定値を越えた場合、および、オーバーフロー率の２倍の値が既定値未満となった場合に固定小数点位置を１ビットずらす処理である。この処理は、オーバーフロー回数あるいはオーバーフロー率に基づく固定小数点位置の更新処理である。情報処理装置は、オーバーフロー回数あるいはオーバーフロー率からは、適正な小数点位置がどこであるかを判断することが困難である。
【００３５】
したがって、比較例の処理は、固定小数点位置の更新時、小数点位置を１つ下げる、あるいは上げる等の処理で、適正な位置を試行し、その結果からさらに判断を重ねていくという手順となる。このため、情報処理装置が適正な小数点位置を決定するまでに、小数点位置が複数回更新されることになる。例えば、上記のように、情報処理装置がＫ回のミニバッチごとにオーバーフロー率を判定し、１ビットずつ小数点位置を更新する場合には、小数点位置をNビットずらすために、N*Ｋ回（*は乗算）分のミニバッチが実行される。このため、小数点位置が不適切な状態で学習処理が繰り返される。つまり、学習中に、望ましくないレベルで固定小数点数データの飽和、あるいは、アンダーフローが発生し、学習結果の精度劣化につながり、収束が遅くなる恐れがある。
【００３６】
また、比較例の情報処理装置は、単にオーバーフロー回数を取得し、蓄積する処理を深層学習のプログラム中で実行するため、学習時間が増大する可能性がある。つまり、情報処理装置は、適正な小数点位置を決定するための情報をプログラムに提供する機能がないため、プログラムにオーバーフロー回数を累積するコードが組み込まれ、処理時間が増加する恐れがある。
＜統計情報＞
【００３７】
そこで、次の比較例では、情報処理装置のプロセッサが統計情報を取得することで、統計情報取得のためのプログラム中のオーバーヘッドが削減される。ここで、プロセッサが取得する統計情報は、例えば、以下のいずれか、または、これらの組み合わせをいう。情報処理装置が実行するアプリケーションプログラムは、プロセッサから統計情報を取得することで、小数点位置を最適化する。アプリケーションプログラムの処理にしたがってプロセッサは、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ビットを小数部として丸めを
行な丸め処理部と、シフト量Ｓだけ算術シフトを実行するシフタと飽和処理を行なう飽和処理部を有する。
【００５８】
丸め処理部は、下位Ｓ bitを小数部として丸めを行なう。Ｓが負の場合には、丸め処理部は、何も行なわない。丸めとしては、最近接丸め、0への丸め、正の無限大への丸め、
負の無限大への丸め、乱数丸めなどが例示される。シフト量Ｓは、例えば、図１３に例示されるように、デコーダが命令から取得するシフト量である。
【００５９】
シフト部は、Ｓが正の場合はＳ bit算術右シフト、Ｓが負の場合は、算術左シフト、すなわち、-Ｓ 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について、まず、全ビットがクリアされる。次に、入力デ
ータの配列in[j][i]の各列ｉの要素の値が、すべての行（ｊ＝０から７）に対して加算される。したがって、図１７とは異なり、図１９の擬似コードでは、出力データ（配列要素）out[j]は、log2(SIMDデータ数)ビット(図１９の例では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参照）である。
【００８２】
図２１に、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得ＳＩＭＤデータ数−１）がＯＲゲート（４０ビット）によってＯＲ演算される。また、図２１でセレクタ（ＳＥＬ）は、論理和演算（OR）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）によって選択されたデータが、出力データoutに出力される。したがって、統計情報取得部１０２がスカラユ
ニット１４で取得したデータは、一回の演算においては、論理和演算されることなくそのまま出力データoutに出力される。outは、統計情報格納部１０５に引き渡すデータである。
【００８３】
図２２に、統計情報格納部１０５（図１４参照）の具体例として、統計情報集約部１０４Ａからの統計情報を専用レジスタに格納する統計情報格納部１０５Ａの構成を例示する。図で、in39からin0は、図２０のout39からout0に相当する統計情報集約部１０４からの統計情報を示す。また、sr39からsr0は、統計情報を格納するレジスタ値である。プロセ
ッサ１０は、書き込み命令によって図示しないセレクタを介して、レジスタsr39からsr0
のいずれか1つあるいは複数に初期値v39からv0を書き込む。ただし、プロセッサ１０は、デコーダからのリセット信号によってレジスタsr39からsr0をリセットしても良い。プロ
セッサ１０は、統計情報取得機能付き命令の実行ごとに、加算器を用いて統計情報を蓄積し、レジスタsr39からsr0に格納する。また、プロセッサ１０は、レジスタ（sr39からsr0）のいずれかの1つあるいは複数の値を読み出し、読み出し命令で指定されたデータ用メ
モリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
【００８４】
図２３は、統計情報集約部１０４の変形例であり、統計情報の格納先がデコーダ１１２からのインデックスで指定される回路の構成例である。図では、例えば、sr[j][i](j=0,
…,k, i=0,…,39)の領域が確保され、indexによって、レジスタファイルの行jが指定される。
【００８５】
プロセッサ１０は、書き込み命令によって図示しないセレクタを介して、indexによっ
て指定されるレジスタファイルの行jの1つあるいは複数のレジスタに初期値を書き込む。ただし、プロセッサ１０はデコーダ１１２からの制御信号により、indexによって指定さ
れるレジスタファイルの行jをリセットしても良い。そして、プロセッサ１０は、in39か
らin0の統計情報を加算器で蓄積し、indexによって指定されるレジスタファイルの行jに
格納する。また、プロセッサ１０は、デコーダ１１２からの制御信号により、indexによ
って指定されるレジスタファイルの行jから統計情報を読み出す。また、プロセッサ１０
は、indexによって指定されるレジスタファイルの行jのいずれかの1つあるいは複数の値
を読み出し、読み出し命令で指定されたデータ用メモリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
＜統計情報取得機能付き命令＞
以下、統計情報取得機能付き命令の構成を例示する。ここでは、命令の構成方法として、方法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,…）等である。統計情報レジスタについては以下同様で
ある。
【００８８】
なお、プロセッサ１０が内部のレジスタとデータ用メモリ２２との間で統計情報を授受するためのread / write, load / store 命令も別途用意する。また、プロセッサ１０が
内部のレジスタをリセットするためのリセット命令を別途用意してもよい。以下、同様である。
［vld_s命令］
命令の構成：vld_s ss, st, rd
【００８９】
vld_s命令は、プロセッサ１０がアドレス・レジスタ ss とst を加算したアドレスからベクトルデータをロードして、ベクトル・レジスタ 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_s, rd, imm, s
【００９２】
（方法２）図２４に方法２による命令フォーマットを例示する。命令フォーマットを拡張し、統計情報を取得するか否かを指定するビットを追加するようにしてもよい。例えば、全命令について統計情報取得機能を追加してもよい。図２４に、拡張された命令フォーマットを例示する。図のように、ＦＬＧ＝１は、統計情報の取得を指定する。一方、ＦＬＧ＝０は、統計情報の取得を指定せず、従来と同じ命令を示す。
【００９３】
（方法２の変形）図２５に方法２の変形による命令フォーマットを例示する。命令フォーマットを拡張し、統計情報を格納するレジスタ・インデックスを指定するようにしてもよい。図でIDXは、レジスタ・インデックス（図２３のindex）を示す。ただし、IDX=000 の場合には、プロセッサ１０は統計情報を取得しない。デコーダ１１２は、図２５の命令フォーマットをデコードし、レジスタ・インデックスIDXを取得する。
【００９４】
情報処理装置が以上のような統計情報取得機能付き命令を実行するため、統計情報取得機能付き命令を専用サブルーチンで実行するようにすればよい。コンパイラは、専用サブルーチンをコンパイルするときに、統計情報取得機能付き命令を実行形式に組み込めばよい。また、専用サブルーチンは、アセンブリ言語で作成され、統計上取得機能付き命令の実行が指定されるようにしてもよい。情報処理装置が深層学習を実行するためのコンピュータプログラムにおいて、以上のような専用サブルーチンが呼び出されるようにすればよい。
＜実行手順＞
【００９５】
図２６に、比較例の情報処理装置による学習処理のフローチャートを例示する。この処理では、情報処理装置は、初期小数点位置を決定する（ＷＥ１）。情報処理装置は、過去の実験値、実績値、あるいは、ユーザ指定により各変数の初期小数点位置を決定すればよい。
【００９６】
そして、情報処理装置は、回数kを0に初期化する。また、情報処理装置は、プログラム内の統計情報を格納する変数を初期化する（ＷＥ２）。そして、情報処理装置は学習終了の条件が充足されたか否かを判定する（ＷＥ３）。学習が終了するのは、全結合層(fc2)
でのエラーが基準値以下となるか、または、学習回数が規定の最大値に達した場合
である。
【００９７】
学習終了の条件が充足されない場合、情報処理装置は、次のミニバッチを実行する。このとき、情報処理装置は、各レイヤの各変数の統計情報を統計情報レジスタあるいは統計情報レジスタファイルに累積する。統計情報の累積は、上記で説明したように、プロセッサ１０のハードウェアで実行される。そして、情報処理装置は、変数ｋをカウントアップする（ＷＥ４）。
【００９８】
そして、情報処理装置は、回数ｋが更新間隔に達したか否かを判定する（ＷＥ５）。回数ｋが更新間隔に達していない場合、情報処理装置は、ＷＥ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置は、各種の統計情報が蓄積された統計情報を統計情報レジスタあるいは統計情報レジスタファイルあるいは統計情報をメモリに退避した領域から統計情報を読み出す。そして、情報処理装置は、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新する（ＷＥ６）。
【００９９】
このとき、情報処理装置は、例えば、飽和するデータとアンダーフローするデータの全
体のデータ数に対する比率が目標条件を充足するように、小数点位置を決定すればよい。また、情報処理装置は、飽和するデータの全体のデータに対する比率とアンダーフローするデータの全体のデータに対する比率の両方が目標条件を充足することが困難である場合、一方を優先してもよい。また、情報処理装置は、飽和が発生しない上限のビット位置と、有効なデータが存在する下限のビット位置の平均を、固定小数点数で表現可能な範囲の中央を位置づけて、小数点位置を設定してもよい。さらに、情報処理装置は、回数kを0に初期化し、さらに統計情報を格納するレジスタをリセットする。そして、情報処理装置は、Ｃ３の処理に戻る。
［実施形態１］
【０１００】
以下、図２７から図４６により、実施形態１のサーバ３、演算処理装置３０、演算コア３００およびその制御方法を説明する。図２７は、実施形態１に係るサーバ３Ａの構成を例示する図である。サーバ３Ａは、Central Processing Unit（ＣＰＵ）３１と、メモリ
３２と、演算処理装置３０Ａと、演算処理装置用メモリ３３とをPeripheral Component Interconnect(PCI) Express(ＰＣＩｅ)等のバス３４で接続した構成を有する。ＣＰＵ３１は、処理装置の一例である。メモリ３２は、主記憶装置の一例である。
【０１０１】
演算処理装置３０Ａは、専用の演算処理装置用メモリ３３に接続され、演算処理装置用メモリ３３を使って演算を実行する。演算処理装置３０ＡはＳＩＭＤ(Single Instruction Multiple data)命令を基本とした演算コア３００を複数有する。複数の演算コア３００は、個別には、演算コア３００−１から３００−１６のように枝番（ｋ＝１から１６）で区別する。ただし、演算コア３００の数が１６個に限定される訳ではない。演算コア３００は演算処理回路の一例である。
【０１０２】
各演算コア３００は、データバス３５を介して相互に通信可能である。また、各演算コア３００は、データバス３５およびＰＣＩｅインターフェース等の上位側とのバスインターフェース３６を介して、バス３４に接続されたＣＰＵ３１等と接続される。また、各演算コア３００は、データバス３５およびメモリインターフェース３７を介して、演算処理装置用メモリ３３に接続される。
【０１０３】
したがって、演算処理装置３０Ａは、バス３４、バスインターフェース３６およびデータバス３５経由でＣＰＵ３１の指示を受け、複数の演算コア３００により並列に演算を実行する。一方、ＣＰＵ３１は、メモリ３２に実行可能に展開されたプログラムにしたがって、演算処理装置３０Ａ内の複数の演算コア３００を制御する。
【０１０４】
図２８は、実施形態１に係るサーバ３Ｂの構成を例示する図である。サーバ３Ｂは、サーバ３Ａと同様、ＣＰＵ３１と、メモリ３２と、演算処理装置３０Ｂと、演算処理装置用メモリ３３とをバス３４で接続した構成を有する。サーバ３Ａとサーバ３Ｂとの相違点は、演算処理装置３０Ａと演算処理装置３０Ｂとの相違にある。演算処理装置３０Ｂは、制御コア３８を有する点で、制御コア３８を有しない演算処理装置３０Ａと相違する。
【０１０５】
すなわち、制御コア３８は、ＣＰＵ３１に代って、演算処理装置３０Ｂ内の複数の演算コア３００を制御する。演算処理装置３０Ｂ内の複数の演算コア３００は、制御コア３８の制御にしたがって並列に演算を実行する。したがって、演算処理装置３０Ａと演算処理装置３０Ｂとの相違点は、演算コア３００の制御をＣＰＵ３１が実行するか、制御コア３８が実行するかにあり、この相違点以外に、演算処理装置３０Ａと演算処理装置３０Ｂに相違はない。そこで、演算処理装置３０Ａと演算処理装置３０Ｂとを総称して、演算処理装置３０ともいう。なお、サーバ３Ａとサーバ３Ｂを総称して、サーバ３ともいう。また、演算処理装置３０Ｂのデータバス３５、バスインターフェース３６、メモリインターフェース３７の構成および作用は、演算処理装置３０Ａと同様であるので、その説明を省略
する。演算処理装置３０Ａ、３０Ｂ、３０等は演算処理装置の一例である。サーバ３Ａ、３Ｂ、３等は情報処理装置の一例である。
【０１０６】
図２９および図３０により、比較例に例示した統計情報に基づく処理をサーバ３Ｂに適用した場合の課題を例示する。図２９、図３０はサーバ３Ｂを例示するが、サーバ３Ａについても、サーバ３Ｂと同様の課題が生じる。例えば、各演算コア３００で取得された統計情報は、データバス３５およびＰＣＩｅ等のバスインターフェース３６を介してメモリ３２に格納される。あるいは、各演算コア３００で取得された統計情報は、データバス３５およびメモリインターフェース３７を介して演算処理装置用メモリ３３に格納される（図２９）。制御コア３８は、演算処理装置用メモリ３３に格納された統計情報を集約する（図３０）。
【０１０７】
図２９では、複数のセグメントに分かれたデータバス３５が線上の連結部分３５Ｃで連結されている。多数の演算コア３００がデータバス３５に接続されると、データバス３５の連結部分３５Ｃ上ではバスインターフェース３６に近い位置ほど、転送される統計情報が大きな帯域を占有する。その結果、連結部分３５Ｃ上のバスインターフェース３６に近い位置ほど、転送データ量が大きくなる。また、バスインターフェース３６の負荷が大きくなる。
【０１０８】
統計情報は、比較例で説明したように、演算器内部のビット数（例えば、４０ビット）について、それぞれ非符号となる最上位のビット位置（または最下位のビット位置）の発生回数を蓄積したものである。したがって、データバス３５およびバスインターフェース３６の帯域は、統計情報のデータ量と演算コア数との積にしたがって増大する。例えば、演算処理装置３０Ｂ内の演算コア３００の数を１２８個とすると、単一の演算コア３００と比較して、１２８倍のデータ量がデータバス３５とバスインターフェース３６を転送される。
【０１０９】
図３１に、比較例および実施形態１に係る課題を例示する。比較例で統計情報を取得し、集約し、外部のレジスタ等に出力したのは、図３１に例示する課題を解決するためである。なお、図３１では、表示および理解を容易にするため、データが１０進数で記載されているが、実際に演算処理装置３０内で処理されるのは２進数のデータである。
【０１１０】
例えば、仮に、演算処理装置３０で、演算コア３００が出力する固定小数点データを１０進数８桁とし、１１桁目から１８桁目を表現するものとして、固定小数点位置を設定したとする。回路規模および消費電力削減のため、固定小数点データのビット数を削減すると、表現できる桁数が減少する。その結果、固定小数点位置が固定の場合には、学習等の処理の繰り返しにより、データの有効桁数が次第に減少する。図のように、例えば、処理の中盤には１０進数で有効桁数が４桁となり、処理の終盤では、例えば、有効桁数が０となる場合が生じ得る。
【０１１１】
そこで、上記比較例の処理をそのまま実施形態１に適用した場合には、演算後に、統計情報を取得し、ＣＰＵ３１等で実行するプログラムが有効な桁の範囲を調整するように、演算処理装置３０に指示する。すると、図３１の下側に例示したように、固定小数点データの範囲を数値の減少に追従させることができる。すなわち、処理の中盤から終盤にかけて、統計情報が示すデータの桁の範囲の分布に応じて、ＣＰＵ３１で実行されるアプリケーションプログラムが、演算処理装置３０に固定小数点位置を指示する。このような調整によって、サーバ３は、演算結果後の固定小数点データの桁の範囲の分布に応じて、適切に固定小数点データの小数点位置、すなわち、有効な桁の範囲を設定できる。その結果、少ない有効桁数で、深層学習（ＤＬ）等の処理が可能となる。このような固定小数点データの小数点位置をアプリケーションプログラムが調整可能とするため、例えば、図１２に
例示するように、比較例では、非符号となる最上位ビットの位置の分布を取得して、集約したのである。
【０１１２】
すなわち、図１２で「表現可能な領域」で示される範囲に、極力多くのデータが入るように固定小数点データの桁の範囲を調整したいとの課題がある。そこで、比較例では、プロセッサ１０は、深層学習の各変数を十分なビット数（例えば４０ビット）のアキュムレータ等で演算することで、演算中の桁落ちを抑制している。そして、各変数での計算結果から、「非符号となる最上位の桁位置（あるいは、非符号となる最下位の桁位置）」の頻度情報を取得している。そして、例えば、サーバ３のアプリケーションプログラムは、上位Ａ％（特異データデータの可能性がある）を除いて、飽和が発生しない最大の桁位置を求める。そして、比較例のプロセッサ１０のアプリケーションプログラムは、求めた桁位置が最上位桁となるように、固定小数点データの桁位置を変更する命令をプロセッサ１０に実行させ、桁位置を変更する。すると、変更された桁位置の範囲に対して、最大の桁位置よりも大きなデータは飽和され、最小の桁位置よりも小さなデータは丸められる。したがって、図２７あるいは図２８のような実施形態１の構成において、比較例の手法をそのまま適用することで効果がない訳ではない。しかしながら、図２９、図３０に例示したようなデータ転送の負荷、データ転送を処理する回路規模、および消費電力等が増加する可能性が高くなるという問題が生じる。
【０１１３】
図３２は、実施形態１の演算処理装置３０における解決手段を例示する図である。図３２では、比較例での解決手段が上段に記載され、上段に対する改善方法として、下段に実施形態１の解決手段が対比される形式で例示されている。上段の比較例では上位Ａ％（特異データのオーバーフロー率）等を求めるために全桁（４０ビット）について統計情報が収集された。
【０１１４】
実施形態１では各演算コア３００で取得する統計情報を頻度分布から累積分布に変更する。ここで、累積分布とは、演算結果である複数の固定小数点数データに関し、非符号となるビット値を持つ最上位のビット位置から最下位ビット（ＬＳＢ）までフラグを設定することで得られるビットパターンを累積した情報（以下、第１の統計情報）をいう。例えば、演算結果である４０ビット（ビット０からビット３９）について、ＬＳＢはビット０である。ビット３９は符号ビット（ＭＳＢ）である。ビット３９の値と異なる値のビット位置のうち、ビットｋが最も上位の（符号ビットに近い）ビットであるとする。すると、実施形態１の演算処理装置３０は、ビットｋからビット０（ＬＳＢ）に対応する範囲でフラグビット（＝１）を設定し、ビットｋ＋１からビット３９（ＭＳＢ）に対応する範囲でビット０を設定したビットパターンを生成する。
【０１１５】
そして、演算処理装置３０は、例えば、ベクトル演算の実行ごとに、ベクトル演算器に含まれるそれぞれの演算器からビットパターンを収集し、累積し、累積分布を生成する。以上の手順によれば、累積分布の各桁の数値は、当該桁以上で非符号となるビット値が存在したことを示すサンプル数ということができる。
【０１１６】
累積分布の各桁が表すサンプル数は、最上位桁（ＭＳＢ）からその桁までの累積サンプル数であるため、累積分布のＡ％を超えた桁位置のサンプル数が、比較例の「Ａ％を超えるまでの全桁のサンプル数」に相当する。このため、演算処理装置３０は、一桁分のサンプル数情報とその桁位置情報を転送するだけで比較例と同様、所定の閾値を越えた桁位置を特定する情報を得ることが可能である。
【０１１７】
なお、累積分布全体に対する所定の閾値を越えた桁位置以上の分布の割合（Ａ％）を算出するためには、分母となる累積分布全体の総サンプル数が要求される。しかしながら、累積分布全体の総サンプル数は、回路構成から既知となる。例えば、演算コア３００内で
１回のベクトル演算では、ベクトル演算器の並列数だけ演算が実行される。したがって、１回のベクトル演算当りの総サンプル数は、ベクトル演算器の並列数となる。仮に、累積分布全体のサンプル数に、スカラ演算も含める場合には、累積分布の集計対象である各演算器の回数分だけ積算すればよい。
【０１１８】
図３３は、統計情報として非符号となるビット値を持つ最下位のビット位置の分布を求める処理例である。図３３でも、比較例での解決手段が上段に記載され、上段に対する改善方法として、下段に実施形態１の解決手段が対比される形式で例示されている。すなわち、演算処理装置３０は、累積分布として非符号となるビット値を持つ最下位のビット位置から最上位ビット（ＭＳＢ）までフラグビットを設定することで得られるビットパターンを累積した情報（第２の統計情報）を求めてもよい。例えば、演算処理装置３０は、ビット３９の値と異なる値のビット位置のうち、ビットｋが最も下位の（ビット０に近い）ビットであるとする。すると、実施形態１の演算処理装置３０は、ビットｋからビット３９（ＭＳＢ）に対応する範囲にフラグビット（＝１）を設定し、ビットｋ−１からビット０（ＬＳＢ）に対応する範囲にビット０を設定したビットパターンを生成する。
【０１１９】
そして、演算処理装置３０は、例えば、ベクトル演算の実行ごとに、ベクトル演算器に含まれるそれぞれの演算器からビットパターンを収集し、累積し、累積分布を生成する。非符号となるビット値を持つ最下位のビット位置の分布による判断は、データ分布上のごく小さい異常データを排除する場合に効果的である。
＜構成＞
【０１２０】
図３４、図３５に、実施形態１に係る演算コア３００の構成を例示する。図３４では、演算コア３００とともに、データバスインターフェース３０１、データバス３５、ＰＣＩｅ等のバスインターフェース３６、およびメモリインターフェース３７も記載されている。なお、データバスインターフェース３０１は、演算コア３００に含まれてもよい。また、図３５では、データバス３５には、制御コア３８が接続されている。一方、図３４は、制御コアのない演算処理装置３０Ａに含まれる演算コア３００を例示する。また、図３５は、制御コアのある演算処理装置３０Ｂに含まれる演算コア３００を例示する。ただし、図３４においてにおいて演算コア３００がＣＰＵ３１により制御され、図３５において演算コア３００が制御コア３８により制御される点を除いて、図３４と図３５の演算コア３００の構成および作用は同様である。
【０１２１】
演算コア３００は、比較例のプロセッサ１０（図１３）と同様、ＰＣ１１１、デコーダ（Decoder）１１２、レジスタファイル１２、ベクトル演算用の演算器１３１、スカラ演
算用のＡＬＵ１４１、およびベクトル演算用の演算器１３１の結果を加算するアキュムレータ１３２を有している。また、演算コア３００は、ベクトル演算用の演算器１３１、スカラ演算用の演算器１４１、アキュムレータ１３２等の演算結果、および、データ用メモリ２２からの読み出し結果を選択する複数のセレクタ１０１を有している。なお、図では、複数のセレクタを総称してセレクタ１０１と呼ぶ。また、複数のベクトル演算用の演算器を総称して演算器１３１と呼ぶ。
【０１２２】
さらに、演算コア３００は、セレクタ１０１によって選択されたデータからの統計情報を取得する統計情報取得部１０２Ｃ、および統計情報取得部１０２Ｃによって取得された統計情報を集約する統計情報集約部１０４Ｃを有している。なお、図では、複数の統計情報取得部１０２Ｃを総称して統計情報取得部１０２Ｃと呼ぶ。さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータの固定小数点位置を変更するデータ変換部１０３を有している。また、図では、複数のデータ変換部を総称してデータ変換部１０３と呼ぶ。
【０１２３】
演算コア３００は、統計情報取得部１０２Ｃおよび統計情報集約部１０４Ｃを有する点で、統計情報取得部１０２（１０２Ａ、１０２Ｂ）、統計情報集約部１０４（１０４Ａ，１０４Ｂ）、および統計情報格納部１０５（１０５Ａ）を有する比較例のプロセッサ１０と相違する。実施形態１では、統計情報取得部１０２Ｃは、図３２（また図３３）に例示したフラグの累積分布を取得する点で、比較例と相違する。すなわち、実施形態１では、統計情報取得部１０２Ｃは、比較例の非符号となる最上位のビットの分布情報（または非符号となる最下位のビットの分布情報）を取得する統計情報取得部１０２（１０２Ａ、１０２Ｂ）と相違する。統計情報取得部１０２Ｃは統計情報取得部の一例である。ベクトル演算用の演算器１３１、スカラ演算用のＡＬＵ１４１等は、それぞれ実行した演算結果である複数の固定小数点数データに関し統計情報取得部１０２Ｃにより統計情報を取得されるので、固定小数点数データに対する演算命令を実行する演算部の一例である。
【０１２４】
また、統計情報集約部１０４Ｃは、図３２（また図３３）に例示したフラグビットのビットパターンの累積分布を格納する点で、非符号となる最上位のビットの分布情報（または非符号となる最下位のビットの分布情報）を集約する比較例の統計情報集約部１０４（１０４Ａ）と相違する。以上のような、統計情報取得部１０２Ｃと統計情報集約部１０４Ｃの組み合わせは、統計情報取得部の一例でもある。
【０１２５】
また、演算コア３００は、データバスインターフェース３０１を介してデータバス３５に接続され、さらに、バスインターフェース３６を介してＰＣＩｅ等のバス３４、さらにはＣＰＵ３１に接続される。また、演算コア３００は、データバス３５からメモリインターフェース３７を介して、演算処理装置用メモリ３３に接続される（図２７、図２８参照）。
【０１２６】
各演算コア３００は、統計情報取得部１０２Ｃで取得したビットパターンを累積分布として取得する。以下、本実施形態では、統計情報取得部１０２Ｃで取得したビットパターンの累積分布を統計情報と呼ぶ。各演算コア３００には、統計情報（累積分布）から取得する桁位置が設定される。ここで、桁位置とは、例えば固定小数点データの演算がなされたときに、固定小数点データの各ビット位置に対応して設けられる桁位置であって、統計情報（累積分布）が累積される桁位置をいう。
【０１２７】
桁位置はユーザがハイパーパラメータとして任意に指定してもよい。統計情報集約部１０４Ｃは、統計情報取得部１０２Ｃが取得した累積分布のうちの指定された桁の累積分布データ（サンプル数ともいう）を出力する。より具体的には、各演算コア３００の統計情報集約部１０４Ｃは、指定された桁位置の前後−Ｌ〜＋Ｍ桁（Ｌ、Ｍは整数）の区間の統計情報のサンプル数情報を抽出する。各演算コア３００は抽出したサンプル情報を制御コア３８またはＣＰＵ３１へ転送する。なお、比較例の統計情報格納部１０５に相当する構成は、実施形態１においては、統計情報取得部１０２Ｃ内の例えば、図示しないレジスタとして設けられる。
【０１２８】
図３６に、制御コア３８の構成を例示する。制御コア３８は、例えば、Reduced Instruction Set Computer（ＲＩＳＣ）、あるいはDigital Signal Processor （ＤＳＰ）を用
いる。制御コア３８は、制御部３８１と、レジスタ３８２と、命令メモリ３８３を有する。制御コア３８は、ＰＣＩｅ等のバスインターフェース３６経由でバス３４上のメモリ３２（図２８参照）またはメモリインターフェース３７で制御コア３８に接続される演算処理装置用メモリ３３に命令コードの本体を保持する。
【０１２９】
制御コア３８の制御部３８１は、例えば、ＰＣＩｅ等のバスインターフェース３６経由で命令コードを命令メモリ３８３へ格納する。そして、ＣＰＵ３１は、ＰＣＩｅ等のバスインターフェース３６経由の制御信号により、制御コア３８を起動する。制御コア３８の
制御部３８１は命令メモリ３８３のコードを順次、フェッチ、デコードし、演算等の命令を実行する。また、制御コア３８の制御部３８１はデータバス３５を介して演算コア３００あるいは演算処理装置用メモリ３３にアクセスし、レジスタ３８２との間でデータを授受する。なお、制御部３８１がメモリ３２のデータをレジスタ３８２に書き込むことをライトバックという。
【０１３０】
図３４、図３５で例示した演算コア３００は、演算処理装置３０内に複数設けられ、データバス３５を介して相互に接続され、並列に演算を実行する。ただし、演算コア３００の構成のうち、統計情報取得部１０２Ｃおよび統計情報集約部１０４Ｃ以外については、上述のように、比較例のプロセッサ１０と同様である。そこで、以下の実施形態１では、統計情報取得部１０２Ｃおよび統計情報集約部１０４Ｃについて詳述する。
【０１３１】
図３７に、実施形態１に係る統計情報取得部１０２Ｃの構成を例示する。図では、統計情報取得部１０２Ｃによる統計情報取得の対象であるaccumulator ＡＣ０からＡＣ７、演算部Ａ−０からＡ−７、バンク０のレジスタＲ０からＲ７、バンク１のレジスタＲ０からＲ７、およびデコーダ１１２も記載されている。なお、accumulator ＡＣ０からＡＣ７、演算部Ａ−０からＡ−７、バンク０のレジスタＲ０からＲ７、バンク１のレジスタＲ０からＲ７は、Single Instruction/Multiple Data（ＳＩＭＤ）プロセッサの一部である。また、演算部Ａ−０からＡ−７が、図３４、図３５に例示したベクトル演算用の演算器１３１の例である。
【０１３２】
統計情報取得部１０２Ｃは、演算部Ｂ−０からＢ−７と、加算器ＡＢ０からＡＢ３９と、桁＃レジスタＡＲ０からＡＲ３９を有する。ここで、＃は、演算中のデータの各桁（０から３９）に対応する数字である。
【０１３３】
上述のように、実施形態１の統計情報取得部１０２Ｃは、ＳＩＭＤプロセッサを前提としている。ＳＩＭＤプロセッサはレジスタをＳＩＭＤ並列幅分有する(レジスタbank0,レ
ジスタbank1)。複数の演算部Ａ−０からＡ−７は各レジスタbank0とbank1から同一のタイミングでデータを取得する。演算部Ａ−０からＡ−７はデコーダ１１２で解読された命令に従った演算を並列に実行する。実施形態１では、複数の演算部Ａ−０からＡ−７が積和命令を実行することを想定する。積和命令はレジスタbank0の値とレジスタbank1の値の積にaccumulator ＡＣ０からＡＣ７に蓄積済みの累積和を加算する。そして、複数の演算部Ａ−０からＡ−７は、演算結果をaccumulator ＡＣ０からＡＣ７に格納する。積和命令では、通常複数回の積和が実行され最終回は演算結果がレジスタbank0またはbank1に返される。このときaccumulator ＡＣ０からＡＣ７は結果を演算部Ｂ−０からＢ−７にも送出する。
【０１３４】
演算部Ｂ−０からＢ−７は非符号となる最上位ビット以下ＬＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理を行う。非符号となる最上位ビットとは
、符号ビットの値と異なるビット値を有するビットのうち、符号ビット（Most Significant Bit(ＭＳＢ)）に最も近い位置のビットをいう。演算部Ｂ−０からＢ−７の処理により、最下位ビット位置（Least Significant Bit(ＬＳＢ)）から、符号ビットと異なるビッ
ト値を持つビット位置のうちの最上位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンの一例が生成される。
【０１３５】
なお、演算部Ｂ−０からＢ−７は非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理を行うものであってもよい。非符
号となる最下位ビットとは、符号ビットの値と異なるビット値を有するビットのうち、符号ビットから最も遠い位置（ＬＳＢに最も近い位置）のビットをいう。演算部Ｂ−０からＢ−７の処理により、符号ビット（ＭＳＢ）の位置から、符号ビットと異なるビット値を
持つビット位置のうちの最下位のビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンの一例が生成される。
【０１３６】
さらに統計情報取得部１０２Ｃには、加算器ＡＢ０からＡＢ３９が４０器設けられている。加算器ＡＢ０からＡＢ３９は、accumulator ＡＣ０からＡＣ７のそれぞれのビット幅と同じビット幅を有し、演算部Ｂ−０からＢ−７の結果の桁ごとの加算を行う。加算器ＡＢ０からＡＢ３９は、演算部Ｂ−０からＢ−７の演算結果の桁ごとの加算結果と、桁＃レジスタＡＲ０からＡＲ３９に保存した各桁の値と加算して桁＃レジスタＡＲ０からＡＲ３９を更新する。桁＃レジスタＡＲ０からＡＲ３９は、桁ごとの統計情報格納部と呼ばれる。加算器ＡＢ０からＡＢ３９と桁＃レジスタＡＲ０からＡＲ３９との処理によって、フラグビットを設定することで得られるビットパターンをビット位置ごとに累積した第１の統計情報の一例が生成される。以上の構成によって、演算部Ａ−０からＡ−７は、演算結果である複数の固定小数点数データに関し、統計情報取得部１０２Ｃによって統計情報を収集される。このため、演算部Ａ−０からＡ−７は、演算部の一例であると言える。また、桁＃レジスタＡＲ０からＡＲ３９は、保持部の一例である。
【０１３７】
また、演算部Ｂ−０からＢ−７は非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理を行うものである場合、加算器Ａ
Ｂ０からＡＢ３９と桁＃レジスタＡＲ０からＡＲ３９との処理によって、第２の統計情報が生成される。したがって、統計情報取得部１０２Ｃ、あるいは加算器ＡＢ０からＡＢ３９と桁＃レジスタＡＲ０からＡＲ３９とは、第１の統計情報と第２の統計情報の少なくとも一方の統計情報を取得する統計情報取得部の一例ということができる。
【０１３８】
図３８に、C言語の擬似コードによって演算部Ｂ−０からＢ−７の処理を例示する。以
下演算部Ｂ−０からＢ−７のうちの１つを代表して呼ぶ場合には、単に、演算部Ｂという。今、例えば、000…01bbbb(ここで、bは、０または１のいずれもよい)というデータが入力されるとする。このデータは、最上位ビット（ビット３９）が０、ビット３９からビットｋ＋１まで０、ビットｋが１のデータである。演算部Ｂは、符号ビット０と異なる値となっている１のビット位置（ビットｋ）から最下位ビット（ビット０、ＬＳＢ）までの範囲に対応するビット位置にフラグビット１を出力し、符号ビット（ビット３９）から符号ビット０と異なる値となっている１のビット位置の直上までのビット位置（ビットｋ＋１）までの範囲に対応するビット位置に０を出力する。以上によって、非符号となる最上位ビット以下ＬＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理
が実行される。
【０１３９】
なお、図３８において、ビット３８からビット０までをサーチする処理（for(i=38;i>=0;i--)）をビット０からビット３８までをサーチする処理（for(i=0;i<=38;i++)）に変更してもよい。この変更により、非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理が実行される。
【０１４０】
図３９に、演算部Ｂのハードウェア回路を例示する。図のように、演算部Ｂは、符号ビット（bit[39]）と、ビット３８（bit[38]）からビット０(bit[0])の排他論理和を実行する３９桁分の排他論理和回路（ＸＯＲ）と、ビット３７(bit[37])以下のビットについて
、上位ビットとのＯＲ演算を実行する３８桁分のＯＲ回路(or)とを有する。図３９の回路により、ビット３９からビットｋ＋１までが０で、ビットｋにおいて１となるデータについては、出力ビット（output[38]〜output[0]）のうち、ビットｋ＋１以上（output[38]
からoutput[k+1]）は０が設定され、ビットｋ以下（output[k]からoutput[0]）は１に設
定される。また、図３９の回路で、最上位ビットに対応する出力ビットは０固定である。以上によって、非符号となる最上位ビット以下ＬＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理がハードウェアで実行される。
【０１４１】
なお、図３９において、ＯＲ回路(or)をbit[38]とbit[37]から順次下位ビット方向に演算する代わりに、bit[0]とbit[1]から順次上位方向に演算するように接続してもよい。この構成によって、非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビット”1”を設定する処理がハードウェアによって実行される。
【０１４２】
図４０に、統計情報集約部１０４Ｃの構成を例示する。また、図４１は、図４０に例示するカウンタ１０４３の動作を例示するＲＴＬの擬似コードである。また、図４２は、統計情報集約部１０４Ｃの各要素の動作を例示するタイムチャートである。図４３は、終了処理部１０４７の構成と作用を例示する図である。図４４は、終了処理部１０４７の各構成の動作を例示するタイミングチャートである。
【０１４３】
図４０では、統計情報集約部１０４Ｃとともに、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９も記載されている。統計情報集約部１０４Ｃは、桁＃レジスタＡＲ０からＡＲ３９から「桁位置設定値」を基準位置（原点位置）として＋Mの桁位置か
ら−Lの桁位置までの範囲の値を順次選択し出力する。なお、図４０では省略されている
が、統計情報集約部１０４Ｃの各部はクロック信号に同期して動作する。桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９は、統計情報の各桁に累積した情報を保持する保持部の一例である。
【０１４４】
ここで、桁位置設定値は、例えば、ＣＰＵ３１が実行するアプリケーションプログラムによって、桁位置設定命令等を通じて、ＣＰＵ３１に引き渡される値である。ＣＰＵ３１は、例えば、桁位置設定値を受け付け、演算処理装置３０、演算コア３００または制御コア３８のレジスタに閾値を設定する命令を実装すればよい。＋Mの桁位置および−Lの桁位置は、例えば、ユーザが指定したシステムパラメータを介してＯＳからＣＰＵ３１に引き渡される。サーバ３は、ハイパーパラメータ、すなわち事前設定値として、＋Mの桁位置
および−Lの桁位置を保持すればよい。ただし、ＣＰＵ３１が実行するアプリケーション
プログラムから指定を受け、桁位置設定命令等を通じて、＋Ｍの桁位置および−Ｌの桁位置を演算コア３００に設定してもよい。例えば、＋Ｍ桁指定値および−Ｌ桁指定値は、ＣＰＵ３１から演算処理装置３０への命令によって、メモリ３２から演算処理装置３０、または制御コア３８のレジスタにロードされるようにすればよい。
【０１４５】
図４０のように、統計情報集約部１０４Ｃは、桁位置セレクタ１０４０と、制御部１０４１と、制御用カウンタ１０４２と、カウンタ１０４３と、デコーダ１０４４と、桁位置出力用のＡＮＤゲート１０４５と、指定範囲の統計情報出力用のＡＮＤゲート１０４６と、終了処理部１０４７と、カウント数出力用の加算器（ＡＤＤ）Ｇ１と、桁の上限位置出力用の加算器Ｇ２と、桁の下限位置出力用の減算器（ＳＵＢ）Ｇ３とを有する。
【０１４６】
カウント数出力用の加算器（ＡＤＤ）Ｇ１は、＋Ｍ設定値と−Ｌ設定値の加算によってカウント数を生成する。桁の上限位置出力用の加算器Ｇ２は、桁位置設定値と＋Ｍの設定値を加算することで、カウンタ初期値である桁の上限位置を算出する。また、桁の下限位置出力用の減算器（ＳＵＢ）Ｇ３は、桁位置設定値から−Ｌの設定値を減算することで、カウンタ最終値である桁の下限位置を算出する。
【０１４７】
桁位置セレクタ１０４０は、デコーダ１０４４に指定された番号の位置に対応する桁＃レジスタＡＲ０からＡＲ３９のいずれかに保持された値（以下、桁の値という）を選択するセレクタである。桁位置セレクタ１０４０が選択した桁の値（例えば、３２ビット）は、ＡＮＤゲート１０４６を介して出力される。桁の値は、統計情報の各桁のサンプル数ということもできる。
【０１４８】
制御部１０４１は、統計情報集約部１０４Ｃの各部を制御する。制御部１０４１は、ステートマシンを実装するハードウェア回路である。ただし、制御部１０４１は、ＲＯＭに格納されたファームウェアによって動作するプロセッサを内蔵してもよい。制御部１０４１には、開始イネーブルとカウント数とカウンタ初期値とカウンタ最終値が入力される。
【０１４９】
制御部１０４１は、開始イネーブルによって動作を開始し、制御用カウンタ１０４２のイネーブルをＯＮ（真、１）にし、制御用カウンタ１０４２にしたがって動作する。すなわち、制御部１０４１は、制御用カウンタ１０４２の値が０からカウント数まで計数する範囲で統計情報集約部１０４Ｃの各部を制御する。制御部１０４１は、カウンタ１０４３にカウント初期値（桁の上限位置）を設定した後、カウンタの制御信号によりカウンタのイネーブルをＯＮとし、動作を開始させるとともに、ＡＮＤゲート１０４６への出力イネーブルをＯＮにする。
【０１５０】
カウンタ１０４３は、統計情報が出力される桁位置を計数する。カウンタ１０４３は、制御部１０４１からのカウンタの制御信号によりイネーブルをＯＦＦにされるまでカウンタ初期値から計数を継続する。カウンタ１０４３の計数値は、デコーダ１０４４および桁位置出力用のＡＮＤゲート１０４５に出力される。なお、桁＃レジスタＡＲ０からＡＲ３９に、非符号となる最上位ビットのサンプル値が累積されている場合には、カウンタ１０４３は、上位桁（桁位置設定値＋Ｍ）から下位桁（桁位置設定値−Ｌ）に向けて計数すればよい。また、桁＃レジスタＡＲ０からＡＲ３９に、非符号となる最下位ビットのサンプル値が累積されている場合には、カウンタ１０４３は、下位桁（桁位置設定値−Ｌ）から上位桁（桁位置設定値＋Ｍ）に向けて計数すればよい。
【０１５１】
デコーダ１０４４は一般的なデコーダであり、例えば、6bit2進数を40bitのone-hot-vector（１つのビットだけが１で残りが０のビットパターン）に変換する。デコーダ１０４４による40bitのone-hot-vectorは、桁位置セレクタ１０４０に入力される。
【０１５２】
桁位置セレクタ１０４０は40bitのデコードされた桁位置セレクタセレクト信号が”1”となっているビットに対応する桁の値（桁＃レジスタＡＲ０からＡＲ３９のいずれか）32bitを出力する。デコーダ１０４４から出力されるone-hot-vectorは、保持部が保持する統
計情報のうちの特定の桁を指定する制御信号の一例である。
【０１５３】
ＡＮＤゲート１０４５は、制御部１０４１からの出力イネーブルがＯＮのとき、カウンタ１０４３からの桁位置信号を出力する。ＡＮＤゲート１０４６は、制御部１０４１からの出力イネーブルがＯＮのとき、桁＃レジスタＡＲ０からＡＲ３９のうち桁位置セレクタ１０４０で選択された桁の値、すなわち、統計情報の当該桁のサンプル値を出力する。したがって、桁位置セレクタ１０４０、制御部１０４１、カウンタ１０４３、デコーダ１０４４、ＡＮＤゲート１０４５、およびＡＮＤゲート１０４５は第１の選択部の一例である。終了処理部１０４７は、制御部１０４１からの出力イネーブルがＯＦＦになったときに、統計情報集約部１０４Ｃの各部をリセットする信号を生成する。
【０１５４】
図４１は、カウンタ１０４３の動作を例示するＲＴＬの擬似コードである。図の擬似コードで、input wireは、入力データ信号を示し、output regは、出力データ信号、および、保持される信号を示す。図４１のように、カウンタは、入力信号ck,rst,set,en,およびdataをそれぞれ入力される。入力データ信号dataは６ビットの信号である。入力信号rst
は、リセット信号であり、入力信号rstに１が入力されると、カウンタ１０４３は、計数
値ｑ（例えば、６ビット）を０クリアする。入力信号setは計数値の初期設定信号であり
、入力信号rstが０で、入力信号setに１が入力されると、カウンタ１０４３は、計数値ｑに入力信号data（例えば、６ビット）を設定する。
【０１５５】
信号enはイネーブル信号であり、入力信号rstおよび入力信号setがともに０で、入力信号enに１が入力された状態になると、カウンタ１０４３は動作を開始する。カウンタ１０４３は計数値ｑが０になるまで、所定のクロック周期で計数値ｑをデクレメントする。
【０１５６】
図４２は、統計情報集約部１０４Ｃの各部の動作を例示するタイムチャートである。図は、非符号となる最上位ビットの累積値を集約する場合のタイムチャートである。したがって、カウンタ１０４２は計数方向が上位桁から下位桁にデクレメントする方向となっている。なお、非符号となる最下位ビットの累積値を集約する場合のタイムチャートでは、カウンタ１０４２は計数方向が下位桁から上位桁にインクレメントする方向となればよい。以下、統計情報集約部１０４Ｃの動作を図４２のタイムチャートとあわせて説明する。図４２のように、統計情報集約部１０４Ｃの各部はクロック信号ＣＬＫに同期して動作する。
【０１５７】
上述のように、制御部１０４１は開始イネーブルが”1”となることで動作を開始する
。制御部１０４１は、動作開始時に制御用カウンタ１０４２のイネーブルをＯＮ(真、１)にし、制御用カウンタ１０４２を起動する。制御用カウンタ１０４２は０からカウントアップを始める。
【０１５８】
制御部１０４１は制御用カウンタ１０４２の値を読み、制御用カウンタ１０４２の値が”０”であるときに、制御部１０４１に入力されたカウンタ初期値を読み取り、カウンタ１０４３へ初期値（図では値３６）を設定する。カウンタ１０４３は初期値設定機能を有する。制御部１０４１はset信号を”１”にすることでカウンタ１０４３の初期値設定信
号線を使ってカウンタ初期値を設定する。さらに、制御部１０４１は次のサイクルでカウンタ１０４３のイネーブル信号enをＯＮにする。制御部１０４１はカウンタ１０４３のイネーブル信号enをＯＮにするとともに、出力イネーブルを”ALL1”にする。ここで、出力イネーブルは、桁位置を出力するＡＮＤゲート１０４５の一方の入力（１ビット）と、桁位置に対応する統計情報のサンプル値を出力するＡＮＤゲート１０４６（例えば３２ビット分）の一方の入力（３２ビット）の合計３３ビットの信号である。
【０１５９】
デコーダ１０４４はカウンタ１０４３の計数値である6bit2進数を40bitのone-hot-vectorに変換する。桁位置セレクタ１０４０は40bitのデコードされた桁位置セレクタセレク
ト信号が”1”となっている桁32bitを出力する。制御部１０４１は制御用カウンタ１０４２がカウント数になるまでカウンタイネーブルおよび出力イネーブルを”1”にして継続
する。制御用カウンタ１０４２の値がカウント数まで到達したら、制御部１０４１は、カウンタイネーブルおよび出力イネーブルを”０”にし、カウンタ１０４３およびＡＮＤゲート１０４５、１０４６による出力を停止する。
【０１６０】
したがって、出力イネーブルに１が入力されている間、カウンタ１０４３の計数値にしたがって、桁３６から桁３１までの範囲で、統計情報の各桁のサンプル値１５、３３、１００、１２５、４００、５００がＡＮＤゲート１０４６から出力される。ＡＮＤゲート１０４６から出力された統計情報のサンプル値は、統計情報集約部１０４Ｃで集約され、例えば、レジスタファイル１２内のレジスタに出力される。そして、出力された統計情報のサンプル値はＣＰＵ３１で実行されるアプリケーションプログラムに引き渡される。
【０１６１】
終了処理部１０４７は、次回統計データ取得のため、カウンタ１０４３等の内部のフリップフロップ等、状態を有する論理回路を初期化する。終了処理部１０４７は、出力イネーブルが”１”から”0”に立ち下がったことを検出することで、一連の統計データ取得
処理が終了したことを検出する。終了処理部１０４７は、立ち下がり検出信号の反転論理を統計情報集約部１０４Ｃの各フリップフロップ等のリセット信号に接続することで初期化を実行する。
【０１６２】
図４３のように、終了処理部１０４７は、フリップフロップ（ＦＦ）と、ＡＮＤゲート（ＡＮＤ１）と、インバータＩＶ１とを有する。フリップフロップ（ＦＦ）は、前回のクロックで入力された出力イネーブルを保持する。一方、ＡＮＤゲート（ＡＮＤ１）は、フリップフロップ（ＦＦ）の信号と現在の出力イネーブルの反転信号のＡＮＤを実行する。したがって、図４４のように、出力イネーブルが前回１（真）で、今回０（偽）となる場合に、終了処理部１０４７は、フリップフロップ（ＦＦ）とＡＮＤゲート（ＡＮＤ１）とによって１（真）を出力する。
【０１６３】
さらに、次のクロックでは、フリップフロップ（ＦＦ）は、出力イネーブルの今回の値０（偽）を受けて、０（偽）を出力するので、ＡＮＤゲート（ＡＮＤ１）の出力は、出力イネーブルが０（偽）になった後、次のクロックまでの間１（真）となるパルス信号を発生する。そして、インバータＩＶ１によって信号が反転されるので、終了処理部１０４７は、出力イネーブルが１（真）から０（偽）になったときに、１（真）から０（偽）となるパルス信号を発生する。
【０１６４】
図４５は、各演算コア３００の処理を例示するフローチャートである。図４５では、制御コア３８の処理も併せて記載されている。処理開始前、例えば、ユーザ操作にしたがい、ＣＰＵ３１が実行するアプリケーションプログラムは、初期値となる桁位置を決定する。初期値とは固定小数点データの桁数の値である。ＣＰＵ３１および演算処理装置３０は、設定後深層学習の処理を開始する。
【０１６５】
深層学習の処理を開始後、各演算コア３００は、決定済みの初期値となる桁位置を所定のレジスタに設定する。また、また、ユーザ（またはＣＰＵ３１が実行するアプリケーションプログラム）からのパラメータを基に、各演算コア３００は、「更新間隔」というパラメータを設定する（Ｓ１）。「更新間隔」は学習処理が何回行われる毎に桁位置を更新するかを判断する値で、例えば、サーバ３のユーザが所望の値を設定可能である。各演算コア３００は、さらに学習の前に、学習回数の変数ｋおよび統計情報の初期化を行う。ここで、統計情報の初期化は前述の桁ごとの統計情報格納部の値を”0”にクリアする処理
である（Ｓ２）。
【０１６６】
初期化後、各演算コア３００は、桁ごとの統計情報格納部（桁＃レジスタＡＲ０からＡＲ３９）を更新しながらの深層学習を実行する（Ｓ３、Ｓ４）。なお、図４５の例では、各演算コア３００は、まず、分岐１で学習終了を判定する（Ｓ３）。学習の終了とは、例えば、学習対象の入力データと正解データのペアに対して、エラーが許容値の範囲となる場合である。また、学習が最後のミニバッチを終了した場合も、各演算コア３００は、学習を終了する。
【０１６７】
Ｓ３でＮＯの場合、学習の進行とともに、学習回数ｋが更新間隔回数となるまで統計情報は累積する（Ｓ４）。そして、各演算コア３００は、まず、分岐２で学習回数ｋが更新間隔の回数に達したか否かを判定する（Ｓ５）。分岐２で学習回数ｋが更新間隔の回数に達した場合、ＣＰＵ３１は制御コア３８に累積された統計情報（指定の桁位置＋Ｍから−Ｌとなる範囲の桁位置のデータ）を転送し（Ｓ６）、転送した統計情報の集計を指示する。
【０１６８】
制御コア３８は各演算コア３００の閾値＋Ｍ〜閾値−Ｌとなる桁位置のサンプル数の転送完了を待つ。転送完了後、制御コア３８は、転送された演算コア３００からの統計情報を積算し、演算処理装置３０全体での統計情報を集計する。そして、制御コア３８は、集計された統計情報を所定のレジスタまたはメモリ３２の所定のアドレスに出力する。
【０１６９】
さらに、制御コア３８は、更新間隔を数える変数ｋと累積された統計情報を初期化し、分岐１の学習終了判定（Ｓ３）に処理を進める。そして、各演算コア３００は学習が最後のミニバッチであるか、エラーが所定の許容範囲となった場合（分岐１）、学習を終了する。なお、図４５のＳ６では、統計情報が制御コア３８に転送され、制御コア３８がＳ７の処理を実行している。しかし、制御コア３８がない図３４の構成では、各演算コア３００は、Ｓ６で統計情報をＣＰＵ３１に転送し、ＣＰＵ３１がＳ７の処理を実行してもよい。
【０１７０】
図４６は、制御コア３８の動作を例示するフローチャートである。ただし、制御コア３８の代りにＣＰＵ３１が図４６の処理を実行してもよい。制御コア３８は、ＣＰＵ３１の指示を待ち（Ｓ７０、Ｓ７１）、その指示を受けて動作する。例えば、制御コア３８は、図４５の更新間隔、学習終了を判定するための情報等を独自には保持していない。このため、制御コア３８は、更新間隔、学習終了を判定するための情報等をＣＰＵ３１から受け取る。
【０１７１】
制御コア３８は、ＣＰＵ３１からの指示を受信し（Ｓ７１でＹＥＳ）、各演算コア３００を起動し処理を行わせる（Ｓ７２）。制御コア３８は、各演算コア３００での演算の終了を待つ（Ｓ７３）。演算の終了とは、例えば、演算コア３００での１回の演算の終了でもよいし、図４５の更新間隔分の演算の終了でもよい。各演算コア３００の演算が終了すると（Ｓ７４でＹＥＳ）、制御コア３８は、演算を終了した演算コア３００に統計情報の集約を指示する（Ｓ７５）。この指示により、演算を終了した演算コア３００は、図４０に例示した回路により、統計情報を制御コア３８に出力する。
【０１７２】
そして、制御コア３８は、各演算コア３００で集約された統計情報を取得すると、取得した統計情報を集計していく（Ｓ７６）。そして、制御コア３８がすべての演算コア３００で集約された統計情報を集計すると（Ｓ７７でＹＥＳ）、集計した統計情報をメモリ３２に転送する（Ｓ７８）。
【０１７３】
なお、制御コア３８では、データバス３５に接続される演算コア３００の数および当該演算で使用される演算器（図３７の演算部Ａの並列数）が既知である。したがって、制御コア３８がすべての演算コア３００で集約された統計情報を集計すると、総サンプル数に対する集計された桁のサンプル数の比率を算出できる。Ｓ７８では、制御コア３８は、集計された桁の総サンプル数に対する当該桁以上のサンプル数の比率を転送すればよい。そして、制御コア３８は、統計情報をクリアし（Ｓ７９）、処理の完了をＣＰＵ３１に通知する（Ｓ８０）。なお、制御コア３８が演算処理装置３０Ａを有するサーバ３Ａ（図２７参照）では、ＣＰＵ３１が図４６のＳ７２からＳ８０の処理を実行すればよい。
＜実施形態１の効果＞
【０１７４】
以上述べたように、実施形態１では、各演算コア３００の統計情報集約部１０４Ｃは、統計情報を図３２、図３３に例示した累積分布の形式で取得し、桁位置設定値によって指定されたビット位置を基準に、＋Ｍ桁から−Ｌ桁の範囲（最低限１桁の範囲）で集約し、取得できる。ＣＰＵ３１または制御コア３８は、各演算コア３００で集約された統計情報の所定桁数（＋Ｍ〜―Ｌ）をデータバス３５とメモリインターフェース３７、あるいはデータバス３５、バスインターフェース３６、およびバス３４を通じた伝送路で収集すればよい。すでに述べたように、最低限１桁の統計情報があれば、アプリケーションプログラムを実行するＣＰＵ３１、あるいは、ＣＰＵ３１に制御される制御コア３８は、当該桁以上でのサンプル数の総サンプル数に対する比率を各演算コア３００から収集できる。この比率は、集計対象の演算におけるオーバーフロー率あるいはアンダーフロー率ということができる。したがって、ＣＰＵ３１、あるいは、制御コア３８は、集計対象の演算でのオーバーフロー率あるいはアンダーフロー率を判定できる。
【０１７５】
したがって、実施形態１の演算処理装置３０は、比較例のように、演算途中の演算回路内の全ビット（例えば、４０ビット相当）の統計情報を収集し、集約し、格納する必要がない。つまり、実施形態１の演算処理装置３０および演算コア３００では、統計情報を収集し、集約し、格納する構成要素および各要素間で統計情報を転送するための伝送路の帯域を低減できる。したがって、実施形態１では、回路規模および消費電力を低減した上で、統計情報の指定された桁のサンプル数をアプリケーションプログラムに引き渡すことができる。したがって、深層学習等のアプリケーションプログラムを実行するサーバ３は、回路規模および消費電力を低減した上で、少ないオーバーヘッドで統計情報を取得することができ、早期に固定小数点データの小数点位置を決定できる。すなわち、サーバ３は、アプリケーションプログラム内の変数の有効桁数の範囲を適切な範囲に効率的に決定できる。
［実施形態２］
【０１７６】
図４７から図５１により、実施形態２における演算処理装置３０の演算コア３００を説明する。上記実施形態１では、演算コア３００は統計情報取得部１０２Ｃにより、統計情報の累積分布を取得するとともに、統計情報集約部１０４Ｃに指定された桁位置を基準に＋Ｍ桁から−Ｌ桁の範囲で統計情報のサンプル数を抽出して出力した。実施形態２でも、実施形態１と同様、演算コア３００は統計情報取得部１０２Ｃにより、統計情報の累積分布を取得する。ただし、実施形態２では、演算コア３００は、統計情報取得の基準となる桁位置の指定を受ける代りに、オーバーフロー率（または、オーバーフロー回数、アンダーフロー率、アンダーフロー回数等）等に該当する閾値の指定を受ける。そして、実施形態２では、統計情報集約部１０４Ｃに代えて、統計情報集約部１０４Ｄが指定を受けた閾値に対応する桁位置を決定する。
【０１７７】
そして、実施形態２の演算コア３００は、統計情報集約部１０４Ｄによって決定された桁位置を基準に＋Ｍ桁から−Ｌ桁の範囲で統計情報のサンプル数を抽出して出力する。実施形態２において、以上のような統計情報集約部１０４Ｄに関連する演算コア３００の構成および作用以外の点は、実施形態１と同様である。そこで、実施形態１の構成要素のうち、実施形態１と同一の構成要素については、同一の符合を付してその説明を省略する。
【０１７８】
すなわち、実施形態２においても、実施形態１と同様、サーバ３として、図２７のサーバ３Ａまたは図２８のサーバ３Ｂの構成が例示できる。また、サーバ３Ｂの制御コア３８としては、図３６の構成が例示される。そして、演算コア３００としては、図３４、図３５中で、統計情報集約部１０４Ｃを統計情報集約部１０４Ｄに置き換えた構成が例示される。
【０１７９】
したがって、実施形態２でも、実施形態１と同様、各演算コア３００は取得したデータを累積分布として保存する。一方、制御コア３８（またはＣＰＵ３１）は、各演算コア３００に事前に閾値を設定する。閾値は、例えば、ユーザが所望の値を指定可能とする。サーバ３は、ハイパーパラメータ、すなわち事前設定値として、閾値を保持すればよい。閾値は、例えば、演算処理装置３０への命令によって、メモリ３２から演算処理装置３０のレジスタにロードされる。
そして、各演算コア３００は、閾値を超えた最初の桁位置の前後−Ｌ〜＋Ｍの区間のサンプル数情報を抽出する。すなわち、各演算コア３００は、
｛閾値＜（累積分布の桁位置のサンプル数／総サンプル数）｝
となる桁位置を計算する。各演算コア３００は抽出したサンプル数と、サンプル数／総サンプル数が閾値を超えた桁位置情報を制御コア３８へ転送すればよい。
【０１８０】
ここで、累積分布が第１の情報である場合には、累積分布の各桁位置のサンプル数は、
非符号となるビット値を持つ最上位のビット位置についてのサンプル数であって、各桁位置以上のサンプル数を示す。したがって、ある桁が固定小数点数の有効桁の最上位桁である場合、累積分布の当該桁位置のサンプル数／総サンプル数は、オーバーフロー率に該当する値となる。また、累積分布の当該桁位置のサンプル数はオーバーフロー回数を示す。総サンプル数は、例えば、１個の演算コア３００における１回のベクトル演算においては、並列に実行される演算器の数（並列に実行されるベクトルの次元数）となり、既知である。
【０１８１】
また、総サンプル数は、例えば、複数回の演算を累積する場合は、上記の１個の演算コア３００の総サンプル数に演算回数を積算したものとなる。例えば、ベクトル演算器Ｎ個をＫ１回、スカラ演算器Ｍ個をＫ２回実行した場合には演算回数の積算値はＮ×Ｋ１＋Ｍ×Ｋ２となる。深層学習のレイヤごとのパラメータ（変数ベクトル）と重みベクトルとが定まると、各レイヤにおける演算回数の積算値は既知となる。さらに、ＣＰＵ３１あるいは制御コア３８が複数レイヤ分の演算回数を累積してもよい。また、ＣＰＵ３１あるいは制御コア３８が全レイヤで複数回の深層学習処理（認識（フォーワッド方向）および学習（バックワード方向））の演算回数を累積してもよい。さらに、ＣＰＵ３１あるいは制御コア３８が学習時の小数点位置の更新間隔分（図２６）の演算回数を累積して総サンプル数を求めてもよい。
【０１８２】
したがって、ユーザが閾値を指定する場合、オーバーフロー率を指定してもよいし、オーバーフロー回数を指定してもよい。オーバーフロー回数は、ある処理単位あたり、つまり、並列に演算を実行するベクトル演算器１組による１回の演算、１つの演算処理装置３０内の演算コア３００の総数による１回の演算当りのオーバーフロー回数であること等の条件が特定されればよい。また、オーバーフロー回数は、１つのレイヤにおける１組の入力データに対する認識と学習、全レイヤにおける１組の入力データに対する認識と学習、または小数点位置の更新間隔あたりのオーバーフロー回数であること等の条件が特定されればよい。そこで、以下の説明では、閾値はオーバーフロー率あるいはオーバーフロー回数のいずれであってもよいこととする。
【０１８３】
閾値は、例えば、深層学習等のアプリケーションプログラム実行時の実行時パラメータ、あるいは、ＯＳ等のシステムパラメータとして設定できるようにすればよい。例えば、閾値としてオーバーフロー率が指定されるとする。ＣＰＵ３１は、アプリケーションプログラム実行時に、実行時パラメータあるいはシステムパラメータをメモリ３２等から取得し、演算コア３００内で並列に実行されるベクトル演算器の数を基に、統計情報の累積値と比較するための閾値に変換すればよい。そして、ＣＰＵ３１は、算出した閾値を制御コア３８あるいは演算コア３００の統計情報集約部１０４Ｄ等に引き渡せばよい。ＣＰＵ３１は、例えばオーバーフロー率で閾値を指定され、演算コア３００内の１回の演算のあたりのオーバーフロー回数に換算して、制御コア３８あるいは演算コア３００の統計情報集約部１０４Ｄ等に引き渡せばよい。
【０１８４】
以上は、オーバーフロー回数とオーバーフロー率を例に説明した。しかし、閾値がアンダーフロー率で指定されても同様である。すなわち、累積分布が第２の情報である場合には、累積分布の各桁位置のサンプル数は、非符号となるビット値を持つ最下位のビット位置についてのサンプル数であって、各桁位置以下のサンプル数を示す。したがって、ある桁が固定小数点数の有効桁の最下位桁である場合、累積分布の当該桁位置のサンプル数／総サンプル数は、アンダーフロー率に該当する値となる。また、累積分布の当該桁位置のサンプル数はアンダーフロー回数を示す。ＣＰＵ３１は、アンダーフロー率を指定される場合には、指定されたアンダーフロー率を演算コア３００内で並列に実行されるベクトル演算器の数を基に、統計情報の累積値と比較するための閾値に変換すればよい。
【０１８５】
実施形態２では、統計情報集約部１０４Ｄは、桁位置探索部１０４Ｄ１と集約部１０４Ｄ２に分かれる。図４７に、桁位置探索部１０４Ｄ１の詳細構成を例示する。なお、図４７では、集約部１０４Ｄ２も例示されている。桁位置探索部１０４Ｄ１は、実施形態１の統計情報集約部１０４Ｃと同様、桁位置セレクタＤ１４０と、制御部Ｄ１４１と、制御用カウンタＤ１４２と、カウンタＤ１４３と、デコーダＤ１４４を有する。以下、桁位置探索部１０４Ｄ１の制御部Ｄ１４１を桁位置制御部ともいう。さらに、桁位置探索部１０４Ｄ１は、桁位置セレクタＤ１４０からの各桁の統計情報のサンプル数と閾値とを比較する比較器Ｄ１４５と、比較器Ｄ１４５による比較結果を保持する結果保持１部Ｄ１４６とを有する。このうち、桁位置セレクタＤ１４０、制御部Ｄ１４１、制御用カウンタＤ１４２、カウンタＤ１４３、およびデコーダＤ１４４の動作は、それぞれ、実施形態１の桁位置セレクタ１０４０、制御部１０４１、制御用カウンタ１０４２、カウンタ１０４３、およびデコーダ１０４４の動作と同様である。すなわち、桁位置セレクタＤ１４０は、デコーダＤ１４４に指定された番号の位置に対応する桁＃レジスタＡＲ０からＡＲ３９のいずれかに保持されたサンプル数を選択する。
【０１８６】
制御部Ｄ１４１は、桁位置探索部１０４Ｄ１の各部を制御する。制御部Ｄ１４１は、ステートマシンを実装するハードウェア回路である。ただし、制御部Ｄ１４１は、ＲＯＭに格納されたファームウェアによって動作するプロセッサを内蔵してもよい。制御部Ｄ１４１には、開始イネーブルとカウント数と比較器Ｄ１４５で生成され、結果保持１部Ｄ１４６に保持される比較結果保持信号が入力される。
【０１８７】
制御部Ｄ１４１は、開始イネーブルによって動作を開始し、制御用カウンタＤ１４２のイネーブルをＯＮにし、制御用カウンタＤ１４２にしたがって動作する。制御部Ｄ１４１は、カウンタＤ１４３にカウント初期値として最上位桁（例えば、３９）を設定した後、カウンタの制御信号によりカウンタＤ１４３のイネーブルをＯＮとし、動作を開始させる。
【０１８８】
カウンタＤ１４３は、統計情報が出力される桁位置を計数する。カウンタＤ１４３は、制御部Ｄ１４１からのカウンタＤ１４３への制御信号によりイネーブルをＯＦＦにされるまでカウンタ初期値（最上位桁）から計数を継続する。カウンタＤ１４３の計数値は、デコーダＤ１４４に出力されるとともに、桁位置保持信号として集約部１０４Ｄ２に出力される。
【０１８９】
デコーダＤ１４４は実施形態１のデコーダ１０４４と同様、一般的なデコーダであり、例えば、6bit2進数を40bitのone-hot-vectorに変換する。デコーダＤ１４４による40bit
のone-hot-vectorは、桁位置セレクタＤ１４０に出力される。桁位置セレクタＤ１４０は40bitのデコードされた桁位置セレクタセレクト信号が”1”となっているビットに対応する桁の値（桁＃レジスタＡＲ０からＡＲ３９のいずれかのサンプル数）32bitを出力する
。
【０１９０】
比較器Ｄ１４５は、図示しないレジスタに保持された閾値と桁位置セレクタＤ１４０からの各桁のサンプル数を比較する。比較器Ｄ１４５は、桁位置セレクタＤ１４０からの各桁のサンプル数が閾値以下のとき、０（偽）を出力し、サンプル数が閾値を越えると１（真）を出力する。比較器Ｄ１４５は、統計情報の各ビット位置に累積した情報と閾値とを比較する比較部の一例である。
【０１９１】
結果保持１部Ｄ１４６は、比較結果保持信号として初期値として０（偽）を保持し、一旦、１（真）が入力されると、図示しないリセット信号が入力されるまで、比較結果保持信号として１（真）を保持する。結果保持１部Ｄ１４６は、比較結果保持信号を制御部Ｄ１４１と集約部１０４Ｄ２に供給する。
【０１９２】
制御部Ｄ１４１は、結果保持信号が１（真）になると、カウンタＤ１４３のイネーブルを偽（０）に設定し、停止させる。なお、実施形態２では、結果保持信号が１（真）になっても、制御用カウンタＤ１４２は動作を継続し、計数値の制御部Ｄ１４１への供給を継続する。制御部Ｄ１４１、制御用カウンタＤ１４２、カウンタＤ１４３、デコーダＤ１４４は、統計情報の各ビット位置のうち選択されるビット位置を指定する制御部の一例である。桁位置セレクタＤ１４０は、指定されたビット位置に累積した情報を選択する第２の選択部の一例である。
【０１９３】
図４８は、結果保持１部Ｄ１４６の動作をＲＴＬの擬似コードで例示する。結果保持１部Ｄ１４６は、リセット信号rstが１（真）のとき、値ｑをクリアする。また、結果保持
１部Ｄ１４６は、リセット信号rstが０（偽）で、かつ、入力データの信号（ｄ）が正の
パルス（１）のとき、出力データ信号ｑを１に設定する。また、入力データの信号（ｄ）が正のパルス（１）以外のとき、出力データ信号ｑをそのまま維持する。
【０１９４】
図４９は、桁位置探索部１０４Ｄ１の各部の動作を例示するタイムチャートである。以下、図４７の桁位置探索部１０４Ｄ１の動作を図４９のタイムチャートと併せて説明する。実施形態１と同様、まず開始イネーブルが１（真）となることで制御部Ｄ１４１が動作を開始する。そして、制御部Ｄ１４１が制御用カウンタＤ１４２のイネーブル信号を”1
”にすることで制御用カウンタＤ１４２が動作を開始する。制御用カウンタＤ１４２の計数が１（真）になったら制御部Ｄ１４１はカウンタＤ１４３へ初期値”３９”を設定し、イネーブルを１（真）にすることでカウンタＤ１４３を起動する。
【０１９５】
デコーダＤ１４４および桁位置セレクタＤ１４０の動作は実施の形態1と同様である。
上述のように、閾値は例えばユーザが設定した設定値である。比較器Ｄ１４５は桁位置セレクタＤ１４０を経由して順次出力される各桁のサンプル数と閾値を比較し、サンプル数が閾値を超えたら１（真）を出力する。また、サンプル数が閾値以下のとき、比較器Ｄ１４５は０（偽）を出力する。
【０１９６】
結果保持1部Ｄ１４６は、図４８のように一度比較器Ｄ１４５の出力が１（真）になっ
たらその結果を保持する。結果保持1部Ｄ１４６の出力が１（真）になったら制御部Ｄ１
４１はカウンタＤ１４３のイネーブルを０（偽）としてカウンタＤ１４３を停止する。以上の結果として桁位置保持信号は、比較器Ｄ１４５によってサンプル数が閾値以上であると判断されたときのカウンタ値(桁位置情報)を保持し続ける。なお、図４９で、＋Ｍ桁指定値および−Ｌ桁指定値は、例えば、ＣＰＵ３１から演算処理装置３０への命令によって、メモリ３２から演算処理装置３０のレジスタにロードされる。
【０１９７】
図５０は、実施形態２に係る統計情報集約部１０４Ｄの集約部１０４Ｄ２の構成を例示する図である。なお、図５０では、桁位置探索部１０４Ｄ１も例示されている。上述のように、実施形態２では、桁位置探索部１０４Ｄ１が、実施形態１の桁位置指定値に相当する桁位置保持信号を生成する。また、桁位置探索部１０４Ｄ１は、比較結果保持信号を開始イネーブル信号として制御部Ｄ２４１に入力する。なお、集約部１０４Ｄ２の制御部Ｄ２４１を出力制御部ともいう。
【０１９８】
ここで、実施形態２の集約部１０４Ｄ２の動作は実施の形態1の統計情報集約部１０４
Ｃとほぼ同様である。すなわち、桁位置探索部１０４Ｄ１によって、桁位置指定値に相当する桁位置保持信号が生成され、開始イネーブル信号となる比較結果保持信号が生成される。すなわち、桁の上限位置出力用の加算器Ｇ２は、桁位置設定値である桁位置保持信号と＋Ｍの設定値を加算することで、カウンタ初期値である桁の上限位置を算出する。また、桁の下限位置出力用の減算器（ＳＵＢ）Ｇ３は、桁位置設定値である桁位置保持信号か
ら−Ｌの設定値を減算することで、カウンタ最終値である桁の下限位置を算出する。以上の点以外の実施形態２の演算コア３００の構成は、実施形態１の演算コア３００の構成と同様である。すなわち、制御部Ｄ２４１は、比較結果保持信号をイネーブル信号として動作を開始し、カウント数、カウンタ初期値、およびカウンタ終了値により、カウンタＤ２４３を制御する。その結果、桁位置設定値である桁位置保持信号を基準に、＋Ｍ桁から−Ｌ桁の範囲で、桁位置セレクタＤ２４０から統計情報のサンプル数が抽出される。
【０１９９】
そこで、実施形態２において演算コア３００の構成要素のうち、桁位置探索部１０４Ｄ１に関係する構成要素以外については、実施形態１の構成がそのまま適用されるものとしてその説明を省略する。また、終了処理部Ｄ２４７については実施の形態１の終了処理部１０４７と同様であるためその説明を省略する。
【０２００】
図５１は、実施形態２の統計情報集約部１０４Ｄの各部の動作を例示するタイムチャートである。すなわち、図５１は、桁位置探索部１０４Ｄ１と集約部１０４Ｄ２の動作を含む。なお、実施形態２の集約部１０４Ｄ２の動作は実施の形態1の統計情報集約部１０４
Ｃとほぼ同様であるため差分を説明する。すなわち、桁位置探索部１０４Ｄ１が出力する桁位置保持信号が実施の形態1の桁位置設定値に相当し、比較結果保持信号が１（真）に
なったら制御部Ｄ２４１（桁位置制御部）が動作を開始する。桁位置探索部１０４Ｄ１と合わせたタイムチャートのうち、比較結果保持信号が１（真）となる桁位置探索終了後の信号の変化は、実施の形態1と同様である。なお、図５１で、桁位置制御部は、図４７の
桁位置探索部１０４Ｄ１の制御部Ｄ１４１の動作を示し、出力制御部は、図５０の集約部１０４Ｄ２の制御部Ｄ２４１の動作を示す。
【０２０１】
図５１のように、比較結果保持信号が１（真）になると、桁位置保持信号が固定（図では値３６）される。桁位置セレクタＤ２４０は、桁位置保持信号の桁位置（３６）に対して、＋Ｍ設定値（Ｍは図４９の２）から−Ｌ（Ｌは図４９の値３）の範囲を選択する。すなわち、制御部Ｄ２４１は、桁位置３８から桁位置３３の範囲でカウンタＤ２４３を計数させ、桁位置セレクタＤ２４０は、計数値に対応する出力信号（サンプル数）を出力する。
【０２０２】
なお、図４９および図５１では、閾値および統計情報としてオーバーフロー率およびオーバーフロー回数を想定している。このため、カウンタＤ１４３、カウンタＤ２４３等が上位桁３９から下位桁に向けて計数する。しかし、閾値および統計情報としてアンダーフロー率およびアンダーフロー回数を想定する場合には、カウンタＤ１４３、カウンタＤ２４３等が下位桁０から上位桁に向けて非符号となる最下位のビット位置の統計情報を取得すればよい。
＜実施形態２の効果＞
【０２０３】
実施形態２の統計情報集約部１０４Ｄは、例えば、ユーザが指定する閾値と、統計情報の累積分布（サンプル数／総サンプル数）の各桁を上位桁から順次比較し、サンプル数／総サンプル数が閾値を越える桁を識別する。そして、統計情報集約部１０４Ｄは、サンプル数／総サンプル数が閾値を越える桁位置の番号を桁位置保持信号として保持し、実施形態１の桁位置設定値の代わりに用いる。その結果、実施形態２のサーバ３では、ユーザは統計情報のサンプル数を収集する桁位置を指定する代わりに、オーバーフロー率等の閾値を指定すればよい。
【０２０４】
実施形態２でも実施形態１と同様、総サンプル数は、例えば、１個の演算コア内の１回のベクトル演算を対象とする場合には、ベクトル演算器の並列演算が実行される演算器数で特定できる。したがって、各桁のサンプル数は、当該桁を固定小数点データの最上位の有効桁とした場合のオーバーフロー回数に対応する。また、総サンプル数に対する各桁の
サンプル数の比率は、当該桁を固定小数点データの最上位の有効桁として場合のオーバーフロー率を示す。
【０２０５】
したがって、ユーザが指定したオーバーフロー率を基に、閾値を決定することで、ＣＰＵ３１あるいは制御コア３８は、オーバーフロー率がユーザの所望範囲に近い部分の統計情報のサンプル数を取得できる。すなわち、サーバ３で深層学習等のアプリケーションプログラムを実行するユーザは、オーバーフロー率を望ましい範囲に納めるための判断に有効な桁位置付近の統計情報の累積分布を取得できる。
【０２０６】
以上は、オーバーフロー率を例に説明したが、ユーザがアンダーフロー率と指定する場合も同様である。閾値および統計情報としてアンダーフロー率およびアンダーフロー回数を想定する場合には、カウンタＤ１４３、カウンタＤ２４３等が下位桁０から上位桁に向けて非符号となる最下位のビット位置の統計情報を取得すればよい。したがって、実施形態３では、例えば、ユーザあるいはアプリケーションプログラムは、実施形態１よりも適格に、オーバーフロー率あるいはアンダーフロー率を望ましい範囲に納めるための小数点位置の設定をすることが可能となる。
［実施形態３］
【０２０７】
図５２から図５６により、実施形態３の演算処理装置３０の演算コア３００を説明する。上記実施形態２では、統計情報集約部１０４Ｄの桁位置探索部１０４Ｄ１は、非符号となる最上位のビット位置の統計情報を取得する場合には、統計情報の累積分布における各桁のサンプル数を上位桁から順に取得し、サンプル数／総サンプル数をユーザ等によって指定可能な閾値と比較した。そして、サンプル数／総サンプル数が閾値を越える桁を特定した。なお、実施形態２において、桁位置探索部１０４Ｄ１は、非符号となる最下位のビット位置の統計情報を取得する場合には、統計情報の累積分布における各桁のサンプル数を下位桁から順に取得すればよい。そして、桁位置探索部１０４Ｄ１は、サンプル数が閾値を超える桁を特定すればよい。
【０２０８】
本実施形態では、非符号となる最上位のビット位置の統計情報を取得する場合には、桁位置探索部１０４Ｅ１は、統計情報の累積分布における各桁のサンプル数を下位桁から順に取得し、ユーザ等によって指定可能な閾値と比較する。そして、桁位置探索部１０４Ｅ１は、サンプル数が閾値以下となる桁を特定する。なお、桁位置探索部１０４Ｅ１は、非符号となる最下位のビット位置の統計情報を取得する場合には、統計情報の累積分布における各桁のサンプル数を上位桁から順に閾値と比較すればよい。そして、桁位置探索部１０４Ｅ１は、サンプル数が閾値以下となる桁を特定すればよい。すなわち、実施形態３では、実施形態２と異なり、桁位置探索部１０４Ｅ１は、サンプル数が閾値以下となる桁を特定する。
【０２０９】
実施形態３の他の構成および作用は、実施形態２と同様である。そこで、実施形態３の構成要素のうち、実施形態１、実施形態２と同一の構成要素については、実施形態１、２と同一の符合を付してその説明を省略する。
【０２１０】
すなわち、実施形態３においても、実施形態１、２と同様、サーバ３として、図２７のサーバ３Ａまたは図２８のサーバ３Ｂの構成が例示できる。また、サーバ３Ｂの制御コア３８としては、図３６の構成が例示される。そして、演算コア３００としては、図３４、図３５中で、統計情報集約部１０４Ｃを統計情報集約部１０４Ｅに置き換えた構成が例示される。
【０２１１】
したがって、実施形態３でも、実施形態１、２と同様、各演算コア３００は取得したデータを累積分布として保存する。一方、制御コア３８（またはＣＰＵ３１）は、各演算コ
ア３００に事前に閾値を設定する。閾値は、例えば、ユーザが所望の値を指定可能とする。サーバ３は、ハイパーパラメータとして、閾値を保持すればよい。
【０２１２】
そして、各演算コア３００は、下位桁から順に、累積分布の各サンプル数を取得し、閾値と比較する。そして、各演算コア３００は、閾値を以下となる最後の桁位置の前後−Ｌ〜＋Ｍの区間のサンプル数情報を抽出する。すなわち、各演算コア３００は、
｛閾値＞＝（累積分布の桁位置のサンプル数／総サンプル数）｝
となる位置を計算する。各演算コア３００は抽出したサンプル数と閾値以下となる位置情報を制御コア３８へ転送すればよい。閾値については、実施形態２の閾値と同様であるので、その説明を省略する。
【０２１３】
実施形態３でも、統計情報集約部１０４Ｅは、桁位置探索部１０４Ｅ１と集約部１０４Ｅ２に分かれる。図５２に桁位置探索部１０４Ｅ１の詳細構成を例示する。なお、図５２では、集約部１０４Ｅ２も例示されている。桁位置探索部１０４Ｅ１は、実施形態１の統計情報集約部１０４Ｃ、実施形態２の桁位置探索部１０４Ｄ１と同様、桁位置セレクタＥ１４０と、制御部Ｅ１４１と、制御用カウンタＥ１４２と、カウンタＥ１４３と、デコーダＥ１４４を有する。さらに、桁位置探索部１０４Ｅ１は、桁位置セレクタＥ１４０からのサンプル数と閾値とを比較する比較器Ｅ１４５と、比較器Ｅ１４５による比較結果を保持する結果保持１部Ｅ１４６とを有する。このうち、桁位置セレクタＥ１４０、制御部Ｅ１４１、制御用カウンタＥ１４２、カウンタＥ１４３、およびデコーダＥ１４４の動作は、それぞれ、実施形態２の桁位置セレクタＤ１４０、制御部Ｄ１４１、制御用カウンタＤ１４２、カウンタＤ１４３、およびデコーダＤ１４４の動作と同様である。比較器Ｅ１４５は、統計情報の各ビット位置に累積した情報と閾値とを比較する比較部の一例である。制御部Ｅ１４１、制御用カウンタＥ１４２、カウンタＥ１４３、デコーダＥ１４４は、統計情報の各ビット位置のうち選択されるビット位置を指定する制御部の一例である。桁位置セレクタＥ１４０は、指定されたビット位置に累積した情報を選択する第２の選択部の一例である。
【０２１４】
ただし、すでに述べたように、実施形態３では、カウンタＥ１４３は、初期値（桁０）から最終値（桁３８）に向けてインクレメントしていく。したがって、比較器Ｅ１４５は、桁位置セレクタＥ１４０のカウンタ初期値に対応する下位桁からカウンタ最終値に対応する上位桁に向かって各桁のサンプル数を取得し、閾値と比較する。桁位置探索部１０４Ｅ１の他の構成および作用は実施形態２の桁位置探索部１０４Ｄ１と同様であるのでその説明を省略する。
【０２１５】
図５３は、図５２に例示するカウンタＥ１４３（および図５３に例示するカウンタＥ２４３）の動作を例示するＲＴＬの擬似コードである。実施形態１の図４１では、カウンタ１０４３は、計数値ｑをデクレメントしていたのに対して、実施形態３の図５３では、矩形枠で明示されるように、カウンタＥ１４３は、計数値ｑが３９に達するまで、計数値ｑをインクレメントする。
【０２１６】
図５４は、実施形態３の桁位置探索部１０４Ｅ１の各部の動作を例示するタイミングチャートである。実施形態３の桁位置探索部１０４Ｅ１の動作は、カウンタＥ１４３が下位桁から上位桁に向けてインクレメントされる点以外は、実施形態２の桁位置探索部１０４Ｄ１の動作と同様である。
【０２１７】
図５５は、実施形態３に係る統計情報集約部１０４Ｅの集約部１０４Ｅ２の構成を例示する図である。集約部１０４Ｅ２は、実施形態２の集約部１０４Ｄ２と比較して、実施形態２のカウンタＤ２４３がカウンタＥ２４３に変更される。実施形態１のカウンタ１０４３、実施形態２のカウンタＤ１４３は、計数値を上位桁に相当する値（桁位置保持信号＋
Ｍの位置）から下位桁（桁位置保持信号―Ｌの位置）に向けてデクレメントした。一方、実施形態３では、カウンタＥ１４３は、計数値を下位桁（桁位置保持信号―Ｌの位置）から上位桁に相当する値（桁位置保持信号＋Ｍの位置）に向けてインクレメントしていく。
【０２１８】
したがって、カウンタ初期値は、減算器（ＳＵＢ）Ｇ３により、桁位置保持信号―Ｌの値に設定される。また、カウンタ最終値は、加算器（ＡＤＤ）Ｇ２により、桁位置保持信号＋Ｍの値に設定される。統計情報集約部１０４Ｅの他の構成および作用は実施形態２の統計情報集約部１０４Ｄと同様であるので、その説明を省略する。
【０２１９】
また、図５６は、実施形態３の桁位置探索部１０４Ｅ１および集約部１０４Ｅ２の各部の動作を例示するタイムチャートである。実施形態３の集約部１０４Ｅ２の動作は、カウンタＥ１４３およびＥ２４３が下位桁から上位桁に向けてインクレメントされる点以外は、実施形態２の集約部１０４Ｄ２の動作と同様である。
＜実施形態３の効果＞
【０２２０】
実施形態３では、桁位置探索部１０４Ｅ１のカウンタＥ１４３および集約部１０４Ｅ２のカウンタＥ２４３は、下位桁から上位桁に向けてインクレメントする。そして、桁位置探索部１０４Ｅ１は、カウンタ初期値を桁位置保持信号―Ｌの位置とし、カウンタ最終値を桁位置保持信号＋Ｍの位置とすることで、統計情報のサンプル数／総サンプル数（すなわち、オーバーフロー率）がユーザ指定の閾値を以下となる桁を求めることができる。
【０２２１】
なお、逆に、桁位置探索部１０４Ｅ１は、アンダーフロー率がユーザ指定の閾値を以下となる桁を求める場合には、桁位置探索部１０４Ｅ１は、非符号となる最下位のビット位置の統計情報を取得すればよい。その場合に、桁位置探索部１０４Ｅ１のカウンタＥ１４３および集約部１０４Ｅ２のカウンタＥ２４３は、上位桁から下位桁に向けてデクレメントする。そして、桁位置探索部１０４Ｅ１は、カウンタ初期値を桁位置保持信号＋Ｍの位置とし、カウンタ最終値を桁位置保持信号−Ｌの位置とすることで、アンダーフロー率がユーザ指定の閾値を以下となる桁を求めることができる。
［実施形態４］
【０２２２】
上記実施形態２では、桁位置探索部１０４Ｄ１が統計情報の上位桁から下位桁に向けて、閾値とサンプル数を比較し、非符号となるビット値を持つ最上位のビット位置についてのサンプル数がユーザ指定の閾値を越える桁を求めた。また、上記実施形態３では、桁位置探索部１０４Ｅ１が統計情報の下位桁から上位桁に向けて、閾値とサンプル数を比較し、非符号となるビット値を持つ最上位のビット位置についてのサンプル数がユーザ指定の閾値以下となる桁を求めた。
【０２２３】
実施形態４では、演算処理装置３０の各演算コア３００は、実施形態２および実施形態３を併せて利用し特定の範囲のサンプル数を抽出する。実施形態４の他の構成および作用は実施形態１から３と同様である。そこで、同一の構成要素については、実施形態１から３と同一の符合を付してその説明を省略する。
【０２２４】
すなわち、実施形態４においても、実施形態１から３と同様、サーバ３として、図２７のサーバ３Ａまたは図２８のサーバ３Ｂの構成が例示できる。また、サーバ３Ｂの制御コア３８としては、図３６の構成が例示される。また、演算コア３００としては、実施形態１の図３４、図３５を例示できる。
【０２２５】
したがって、実施形態４でも、実施形態１と同様、各演算コア３００は取得したデータを累積分布として保存する。一方、制御コア３８（またはＣＰＵ３１）は、各演算コア３００に事前に閾値を２つ（例えば、閾値１＞閾値２）設定する。閾値は、例えば、ユーザ
が所望の値を指定可能とする。サーバ３は、ハイパーパラメータ、すなわち事前設定値として、閾値を保持すればよい。
そして、各演算コア３００は、閾値２を越え、かつ、閾値１以下の範囲に対応するサンプル数情報を抽出する。すなわち、各演算コア３００は、
｛閾値２＜（累積分布の桁位置のサンプル数／総サンプル数）＝＜閾値１｝
となる統計情報の桁位置の範囲を計算する。各演算コア３００は計算した桁位置の範囲でサンプル数と位置情報を抽出して、制御コア３８へ転送すればよい。
【０２２６】
図５７は実施形態４に係る統計情報集約部１０４Ｆの構成を例示する。図５７では、統計情報集約部１０４Ｆとともに、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９も記載されている。また、図５７では、２つの桁位置探索部１０４Ｄ１、１０４Ｅ１が統計情報集約部１０４Ｆに含めて記載されている。すなわち、図のように、統計情報集約部１０４Ｆは、第２実施形態で説明した桁位置探索部１０４Ｄ１および集約部１０４Ｄ２と、第３実施形態で説明した桁位置探索部１０４Ｅ１と、カウンタ値生成部Ｆ４９と、制御部Ｆ４１と、制御用カウンタＦ４２を有している。すなわち、実施形態４の統計情報集約部１０４Ｆは、実施形態２の特徴と実施形態３の特徴を併せて利用し、桁＃レジスタＡＲ０からＡＲ３９の特定の範囲のサンプル数を抽出する。なお、統計情報集約部１０４Ｆ内の桁位置探索部１０４Ｄ１、集約部１０４Ｄ２および桁位置探索部１０４Ｅ１は、それぞれ、制御部Ｆ４１、制御用カウンタＦ４２等と同様の構成を有する（図４７、図５０、および図５２参照）。
【０２２７】
制御部Ｆ４１は、実施形態１から３と同様、開始イネーブル信号により処理を開始、制御用カウンタＦ４２を起動し、制御用カウンタＦ４２の計数値にしたがって動作する。制御部Ｆ４１は、以下の３つの条件のときに、桁位置探索部１０４Ｄ１をイネーブルにする。
（条件Ｄ１）制御部Ｆ４１への開始イネーブルがＯＮである。
（条件Ｄ２）制御用カウンタＦ４２が計数動作を開始した（計数値が１以上である）。
【０２２８】
（条件Ｄ３）桁位置探索部１０４Ｄ１の比較結果保持信号が、１（真）になっていない。つまり、桁位置探索部１０４Ｄ１において、現在桁のサンプル数が閾値条件に達していない。
制御部Ｆ４１は、以下の３つの条件のときに、桁位置探索部１０４Ｅ１をイネーブルにする。
（条件Ｅ１）制御部Ｆ４１への開始イネーブルがＯＮである。
（条件Ｅ２）制御用カウンタＦ４２が計数動作を開始した（計数値が１以上である）。
【０２２９】
（条件Ｅ３）桁位置探索部１０４Ｅ１の比較結果保持信号が、１（真）になっていない。つまり、桁位置探索部１０４Ｅ１において、現在桁のサンプル数が閾値条件に達していない。
【０２３０】
桁位置探索部１０４Ｄ１の構成および作用は、実施形態２と同様である。桁位置探索部１０４Ｄ１の構成は実施形態２で説明済みであるのでその詳細は省略する。桁位置探索部１０４Ｄ１は、上位桁から順次、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９のサンプル数を読み出し、閾値２と比較する。そして、サンプル数／総サンプル数が閾値２を越えると、桁位置探索部１０４Ｄ１は、桁位置Ｋ２の桁位置保持信号をカウンタ値生成部Ｆ４９に出力するとともに、比較結果保持信号を１（真）にして制御部Ｆ４１に入力する。
【０２３１】
桁位置探索部１０４Ｄ１が上位桁から順次、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９のサンプル数を読み出し、閾値２と比較することは、保持部が保持
した統計情報の最上位桁から最下位桁に向かって順次各桁に累積した情報を第１の閾値と比較することの一例である。サンプル数／総サンプル数が閾値２を越えるときの桁位置Ｋ２は比較結果に基づき指定される第１の桁の一例である。したがって、桁位置探索部１０４Ｄ１は、第１の探索部の一例である。
【０２３２】
また、桁位置探索部１０４Ｅ１の構成および動作は、実施形態３と同様である。桁位置探索部１０４Ｅ１の構成は実施形態２で説明済みであるのでその詳細は省略する。桁位置探索部１０４Ｅ１は、下位桁から順次、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９のサンプル数を読み出し、閾値１と比較する。そして、サンプル数／総サンプル数が閾値１以下になると、桁位置探索部１０４Ｅ１は、桁位置Ｋ３の桁位置保持信号をカウンタ値生成部Ｆ４９に出力するとともに、比較結果保持信号を１（真）にして制御部Ｆ４１に入力する。
【０２３３】
桁位置探索部１０４Ｅ１が下位桁から順次、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９のサンプル数を読み出し、閾値１と比較することは、保持部が保持した統計情報の最下位桁から最上位桁に向かって順次各桁に累積した情報を第２の閾値と比較することの一例である。サンプル数／総サンプル数が閾値１以下になるときの桁位置Ｋ３は比較結果に基づき指定される第２の桁の一例である。したがって、桁位置探索部１０４Ｅ１は、第２の探索部の一例である。
【０２３４】
制御部Ｆ４１は、桁位置探索部１０４Ｄ１からの比較結果保持信号が１（真）になると、桁位置探索部１０４Ｄ１のイネーブルをＯＦＦにする。また、制御部Ｆ４１は、桁位置探索部１０４Ｅ１からの比較結果保持信号が１（真）になると、桁位置探索部１０４Ｅ１のイネーブルをＯＦＦにする。さらに、制御部Ｆ４１は、桁位置探索部１０４Ｄ１からの比較結果保持信号と桁位置探索部１０４Ｅ１からの比較結果保持信号の両方が１（真）になると、集約部イネーブル信号を１（真）とし、カウンタ値生成部Ｆ４９と集約部１０４Ｄ２を動作可能とさせる。
カウンタ値生成部Ｆ４９は、以下の論理でカウンタ初期値とカウンタ終了値を生成する。
カウンタ初期値＝ＭＡＸ（Ｋ２、Ｋ３）；（式１）
カウンタ終了値＝ＭＩＮ（Ｋ２、Ｋ３）；（式２）
ここで、Ｋ２は、桁位置探索部１０４Ｄ１からの桁位置保持信号の値である。また、Ｋ３は、桁位置探索部１０４Ｅ１からの桁位置保持信号の値である。
そして、カウンタ値生成部Ｆ４９は、以下の論理で集約部１０４Ｄ２に出力するパラメータである桁位置設定値とカウント数を算出する。
桁位置設定値＝カウンタ初期値＝ＭＡＸ（Ｋ２、Ｋ３）；（式３）
カウント数＝カウンタ初期値−カウンタ終了値＝ＭＡＸ（Ｋ２、Ｋ３）−ＭＩＮ（Ｋ２、Ｋ３）；（式４）
【０２３５】
集約部１０４Ｄ２の構成および作用は、実施形態２の集約部１０４Ｄ２の構成および作用と同様であるので、その構成の説明を省略する。集約部１０４Ｄ２は、実施形態２の集約部１０４Ｄ２と同様、カウンタ初期値からカウンタ終了値までの桁位置に対応する桁＃レジスタＡＲ０からＡＲ３９のサンプル数を出力する。カウンタ値生成部Ｆ４９と集約部１０４Ｄ２は、第１の桁と前記第２の桁とによって指定される範囲のそれぞれの桁に累積した情報を選択する第３の選択部の一例である。
【０２３６】
図５８は、制御部Ｆ４１の動作を例示するタイムチャートである。図５９は、統計情報集約部１０４Ｆの各部の動作を例示するタイムチャートである。制御部Ｆ４１の動作は、実施形態１の制御部１０４１等と同様、開始イネーブルによって開始する。開始イネーブルが”1”となると制御部Ｆ４１は制御用カウンタＦ４２を起動する。そして、制御部Ｆ
４１は、上述の条件Ｄ１からＤ３が充足されると桁位置探索部１０４Ｄ１のイネーブルを１（真）にする。また、制御部１０４１は、条件Ｅ１からＥ３が充足されると、桁位置探索部１０４Ｅ１のイネーブルを１（真）にする。
【０２３７】
すでに、実施形態２で述べたように、桁位置探索部１０４Ｄ１は、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９の値（サンプル数）／総サンプル数を最上位桁から順に閾値２と比較する。そして、桁位置探索部１０４Ｄ１は、桁＃レジスタＡＲ０からＡＲ３９の値（サンプル数）／総サンプル数が閾値２を越えた桁位置Ｋ２を桁位置保持信号として保持するとともに比較結果保持信号を１（真）にする。
【０２３８】
また、実施形態３で述べたように、桁位置探索部１０４Ｅ１は、桁ごとの統計情報格納部である桁＃レジスタＡＲ０からＡＲ３９の値（サンプル数）／総サンプル数を最下位桁から順に閾値１と比較する。そして、桁位置探索部１０４Ｅ１は、桁＃レジスタＡＲ０からＡＲ３９の値（サンプル数）／総サンプル数が閾値１以下となる桁位置Ｋ３を桁位置保持信号として保持するとともに比較結果保持信号を１（真）にする。
【０２３９】
制御部Ｆ４１は、桁位置探索部１０４Ｄ１からの比較結果保持信号が”1”となったこ
とをトリガに桁位置探索部１０４Ｄ１へのイネーブル信号を”0”に落とす。また、制御
部Ｆ４１は、桁位置探索部１０４Ｅ１からの比較結果保持信号が”1”となったことをト
リガに桁位置探索部１０４Ｅ１へのイネーブル信号を”0”に落とす。さらに、制御部Ｆ
４１は、両方の比較結果保持信号が”1”となったことをトリガにカウンタ値生成部Ｆ４
９および第２の実施形態の集約部１０４Ｄ２へのイネーブル信号を”1”とする。
【０２４０】
カウンタ値生成部Ｆ４９はカウンタ値生成部論理（上記（式１）（式２）および（式４））に従って桁位置探索部１０４Ｄ１および桁位置探索部１０４Ｅ１の桁位置保持信号の桁位置Ｋ２おおよびＫ３からカウンタ初期値および終了値を生成し、カウント数とともに集約部１０４Ｄ２へ送信する。集約部１０４Ｄ２は前述の通り出力データと、その桁位置情報と、出力イネーブルを出力する。集約部１０４Ｄ２はカウンタ初期値および終了値までの各桁位置の統計情報を出力すると、出力イネーブル信号を”0”に落とす。出力イネ
ーブル信号の立ち下がりをトリガとして実施形態１と同様、終了処理部１０４７（図４３参照）が動作を開始し初期化処理が行われる。
＜実施形態４の効果＞
【０２４１】
実施形態４では、統計情報集約部１０４Ｆは、閾値１と閾値２の指定を受け、閾値２を越え、かつ、閾値１以内となるサンプル数／総サンプル数の範囲で、統計情報を取得する。したがって、したがって、例えば、ユーザあるいはアプリケーションプログラムは、実施形態１よりも簡易で的確に、オーバーフロー率を望ましい範囲に納めるための統計情報の取得が可能となり、適切に小数点位置の設定をすることが可能となる。
【０２４２】
なお、上記実施形態４では、統計情報の各桁が非符号となるビット値を持つ最上位のビット位置についてのサンプル数である場合について説明した。しかし、統計情報の各桁が非符号となるビット値を持つ最下位のビット位置についてのサンプル数である場合にも、図５７に例示した統計情報集約部１０４Ｆによる処理が可能である。
【０２４３】
各演算コア３００は、統計情報の各桁が非符号となるビット値を持つ最上位のビット位置についてのサンプル数である場合と同様に、閾値１、閾値２による判定を実行する。すなわち、各演算コア３００は、
｛閾値２＜（累積分布の桁位置のサンプル数／総サンプル数）＝＜閾値１｝
となる位置を計算する。各演算コア３００は抽出したサンプル数と位置情報を制御コア３８へ転送すればよい。
【０２４４】
この場合、桁位置探索部１０４Ｅ１は上位桁から下位桁に向けて統計情報の各桁と閾値１とを比較して、サンプル数／総サンプル数が閾値１以下となる統計情報の桁位置Ｋ３を求めればよい。また、桁位置探索部１０４Ｄ１は下位桁から上位桁に向けて統計情報の各桁と閾値２とを比較して、サンプル数／総サンプル数が閾値２を越える桁位置Ｋ２を求めればよい。桁位置Ｋ２、Ｋ３に対するカウンタ値生成部Ｆ４９および集約部１０４Ｄ２の処理は、上記実施形態４と同様である。
［実施形態５］
【０２４５】
上記実施形態１から４では、例えばベクトル演算用の演算器１３１（図３４、図３５参照）の演算結果から統計情報の累積情報を収集し、演算処理装置３０内のレジスタ、あるいはメモリ３２等に出力する演算処理装置３０を含むサーバ３について説明した。このような統計情報により、ユーザ、あるいは、ＣＰＵ３１で実行されるアプリケーションプログラムは、次のアプリケーションプログラムの処理ステップ、例えば、深層学習における学習処理実行時の固定小数点データの小数点位置（有効桁の範囲）を設定できる。
【０２４６】
しかし、アプリケーションプログラムが固定小数点位置を指定する処理を実行する代わりに、演算処理装置３０等のハードウェアが取得された統計情報に基づき固定小数点位置を指定してもよい。例えば、演算処理装置３０の内部、あるいは、サーバ３の内部に取得された統計情報を基に固定小数点データの小数点位置を決定する回路が設けられてもよい。
【０２４７】
そこで、実施形態５では、小数点位置決定回路３８４を有する制御コア３８について説明する。制御コア３８が小数点位置決定回路３８４を持つこと、および小数点位置決定回路３８４によって決定された小数点位置を制御コア３８が各演算コア３００に設定すること以外の実施形態４における演算処理装置３０の構成および作用は実施形態１から４と同様である。そこで、実施形態４の構成要素のうち、実施形態１から４と同一の構成要素については同一の符号を付してその説明を省略する。
【０２４８】
すなわち、実施形態５においても、実施形態１から４と同様、サーバ３として、図２７のサーバ３Ａまたは図２８のサーバ３Ｂの構成が例示できる。また、サーバ３Ｂの制御コア３８としては、図３６の構成が例示される。また、演算コア３００としては、実施形態１の図３４、図３５を例示できる。
【０２４９】
図６０は、制御コア３８に設けられる小数点位置決定回路３８４の構成を例示する。制御コア３８の構成は、図２８、図３５に記載された通りであり、制御コア３８は制御処理回路の一例である。実施形態５では、実施形態２、３、または４の統計情報集約部１０４Ｄ、１０４Ｅまたは１０４Ｆと同様の統計情報集約部１０４からデータバス３５を介して統計情報が取得されるとする。なお、実施形態５では、統計情報集約部１０４Ｄ、１０４Ｅ、１０４Ｆを総称して単に統計情報集約部１０４という。図のように、統計情報集約部１０４は、各演算コア３００に設けられている。より具体的には、例えば、各演算コア３００は、実施形態２と同様の統計情報集約部１０４Ｄを有するものとする。また、実施形態５では、小数点位置決定回路３８４は、決定した小数点位置を各演算コア３００に設けられたデータ変換部１０３に設定し、次回演算において、固定小数点数の小数点位置として利用される。
【０２５０】
ユーザは、サーバ３でのアプリケーションプログラムの実行において、閾値に相当する値として、望ましいオーバーフロー率Ｒを設定する。実施形態５の各演算コア３００は、指定されたオーバーフロー率Ｒを閾値Ｓ０とし、統計情報のサンプル数／総サンプル数と比較する。そして、各演算コア３００は、閾値Ｓ０を越えるサンプル数／総サンプル数が
累積されている桁の桁位置と、その閾値を越えるサンプル数を収集する。
【０２５１】
ここで、閾値Ｓ０は、Ｓ０＝Ｒであり、サンプル数／総サンプル数が閾値Ｓ０を越える桁位置が決定される。また、総サンプル数は、例えば、１つの演算コア３００内のベクトル演算器での並列演算可能な演算数である。
【０２５２】
小数点位置決定回路３８４は、データバス３５（図２７、図２９、図３４、図３５）を介して各演算コア３００の統計情報（決定された桁位置と、当該桁のサンプル数）を取得し、桁位置毎にサンプル数を累積加算する。したがって小数点位置決定回路３８４は、複数の演算コア３００の統計情報のサンプル数を集め、桁位置毎に累積加算し、閾値越えが検出された回数が最大となる桁位置を次の演算の小数点位置に決定する。すなわち、いわば、演算コア３００の多数決で、次回の小数点位置が決定される。
【０２５３】
ここで、実施形態５の小数点位置決定回路３８４は、桁位置毎にサンプル数を累積加算するので、各演算コア３００から得られる閾値越えが検出された桁位置の回数は、演算コア３００の多数決を示すというよりも、桁位置毎にサンプル数で重み付けされた多数決となっている。ただし、小数点位置決定回路３８４は、サンプル数で重み付けする代わりに、単純に、閾値越えが検出された桁位置について、演算コア３００ごとに重み１で累積加算してもよい。重み１の累積加算の場合には、各演算コア３００から得られる閾値越えが検出された桁位置の回数は、各演算コア３００の単純な多数決を示すことになる。決定された小数点位置は、データバス３５を介して各演算コア３００のデータ変換部１０３に設定される。その結果、次回以降の演算において、オーバーフロー率が閾値未満となることが期待できる。
【０２５４】
各演算コア３００は、複数の演算処理回路の一例といえる。したがって、小数点位置決定回路３８４は、複数の演算処理回路のそれぞれにおいて選択される桁について、それぞれの桁を選択した前記複数の演算処理回路に対応する値を計数し、演算処理回路の多数決の処理を実行していると言える。ここで複数の演算処理回路に対応する値とは、サンプル数で重み付けされた値または重み１の値である。小数点位置決定回路３８４は、複数の演算部が次に実行する演算命令の演算結果となる固定小数点数データの小数点位置を指定する小数点位置指定部の一例ということができる。
【０２５５】
図６０のように、小数点位置決定回路３８４は、桁位置と、桁位置に対応する統計情報と、イネーブル信号を入力され、上記多数決で出力桁位置を選択して出力する。なお、図６０では、小数点位置決定回路３８４には、制御コア３８に接続される複数の演算コア３００から順次、各演算コアで取得された桁位置と、その桁位置に対応する統計情報が入力されるものとする。
【０２５６】
小数点位置決定回路３８４は、デコーダ３８４１と、マスク回路３８４２−０から３８４２−３９と、加算器３８４３−０から３８４３−３９と、桁＃レジスタ３８４４−０から３８４４−３９と最大値位置検出回路３８４５を有している。
【０２５７】
デコーダ３８４１は、イネーブルが１（真）のとき、桁位置を指定する入力信号（例えば６ビットの信号、０から３８の値）に対応して、マスク回路３８４２−０から３８４２−３９のいずれかをＯＮにする。マスク回路３８４２−０から３８４２−３９には、桁位置に対応する統計情報のサンプル数が入力される。
【０２５８】
また、各桁のサンプル数で重み付けした多数決が実行される場合には、入力される桁位置に対応する統計情報は、例えば、実施形態２の統計情報集約部１０４Ｄから出力される各桁位置の統計情報（例えば、３２ビット）の１桁分（＋Ｍ＝−Ｌ＝０の場合）である。
ただし、入力される桁位置に対応する統計情報は、実施形態３の統計情報集約部１０４Ｅから出力される各桁位置の統計情報の１桁分（＋Ｍ＝−Ｌ＝０の場合）であってもよい。ただし、重み１で多数決が実行される場合には、各演算コア３００から複数桁（＋Ｍから−Ｌまでの範囲）が入力されてもよい。また、重み１で多数決が実行される場合には、入力される桁位置に対応する統計情報は、実施形態４の統計情報集約部１０４Ｆから出力される各桁位置の統計情報であってもよい。最大値位置検出回路３８４５は、桁＃レジスタ３８４４−０から３８４４−３９のうち、最大の値を保持する桁位置を検出して、出力桁位置として出力する（例えば６ビット、０から３９の値）。
【０２５９】
加算器３８４３−０から３８４３−３９は、マスク回路３８４２−０から３８４２−３９のうち、デコーダ３８４１によってＯＮとなっている１つの回路の出力を桁＃レジスタ３８４４−０から３８４４−３９に積算する。積算された値は、閾値を超えた桁ごとに、当該桁で閾値を超えた各演算コア３００の数を集計したものであり、多数決を判定する回路と言える。ただし、図６０の回路では、統計情報の桁の値が積算されるので、図６０は、統計情報のサンプル値を重みとして、多数決を決定する回路ということができる。ただし、上述のように、１桁あたり３２ビットの統計情報の代わりに、１桁あたり１ビット（重み１）が入力されるようにしてもよい。１桁あたり１ビット（重み１）が入力される場合には、小数点位置決定回路３８４は、複数の演算コア３００の単純多数決によって出力桁位置を選択して出力することになる。
【０２６０】
図６１は、デコーダ３８４１の真理値表を例示する。図のように、イネーブルがＯＮのときに、桁位置を指定する入力情報６ビットの値に対応するビット位置をＯＮで出力し、他のビットを０で出力する。
【０２６１】
図６２は、最大値位置検出回路３８４５の詳細構成を例示する図である。図のように、最大値位置検出回路３８４５は、比較部３８５をバイナリツリー状に接続した構成を有する。比較部３８５は、桁位置と桁位置のレジスタ値を組みした２組について、レジスタ値の大小関係を判定し、値が大きい桁位置とレジスタ値を出力する。すなわち、バイナリツリーの１層目は、桁＃レジスタ３８４４−０から３８４４−３９を１対ずつ組にして、各組について大小関係を判定し、レジスタ値が大きい桁位置とレジスタ値を出力する。このようにして、桁＃レジスタ３８４４−０と桁＃レジスタ３８４４−１のうち、レジスタ値の大きい方の桁位置とレジスタ値が出力される。桁＃レジスタ３８４４−１と桁＃レジスタ３８４４−２についても同様である。また、桁＃レジスタ３８４４−２ｋと桁＃レジスタ３８４４−２ｋ＋１（ｋ＝２，．．．，１９）についても同様である。このようにして、１層目の比較部３８５に入力される４０桁分の桁位置とレジスタ値のうち、２０桁分の桁位置とレジスタ値が選択することが可能である。ただし、実施形態５では、４０桁から、まず、トーナメント方式で、まず、３２桁分を選択するようにすればよい。
【０２６２】
最大値位置検出回路３８４５は、比較部３８５をバイナリツリー状に接続されているので、同様に、第２層目で３２桁分の桁位置とレジスタ値から１６桁分の桁位置とレジスタ値を選択すればよい。さらに、最大値位置検出回路３８４５は、バイナリツリーの３層目で、１６桁分の桁位置とレジスタ値から、８桁分の桁位置とレジスタ値を選択すればよい。以上のような処理を繰り返し、最大値位置検出回路３８４５は、レジスタ値が最大の桁位置を決定し、出力する。
【０２６３】
図６３は、比較部３８５の具体的構成を例示する。図のように、比較部３８５は、減算部３８５１と、判定部３８５２と、選択部３８５３を有する。減算部３８５１には、第１の入力桁のレジスタ値と第２の入力桁のレジスタ値が入力され、減算（第１の入力桁のレジスタ値−第２の入力桁のレジスタ値）を実行する。判定部３８５２は、減算結果が正か否かを判定し、判定結果が正の場合に、選択部３８５３に、第１の入力桁の桁位置を出力
する選択信号を出力する。選択部３８５３は、判定結果にしたがって、第１の入力桁の桁位置または第２の入力桁の桁位置を出力する。
＜実施形態５の効果＞
【０２６４】
実施形態５の演算処理装置３０では、制御コア３８は、ユーザが指定した閾値に対応する統計情報の桁位置を複数の演算コア３００の多数決で決定できる。したがって、演算処理装置３０は、多数決で決定された桁位置を例えば、図３４、図３５に例示したデータ変換部１０３に設定し、次回演算の固定小数点位置とする。このような処理によって、複数の演算コア３００のうち最も多数の演算コア３００が閾値を充足する可能性の高い桁位置に小数点位置を決定し、次回演算で利用できる。したがって、実施形態５の演算処理装置３０を含むサーバ３は、ユーザが指定した閾値に相当するオーバーフロー率、アンダーフロー率等を充足する小数点位置を演算処理装置３０のハードウェア回路で設定できる。
【０２６５】
上記実施形態では、制御コア３８は多数決を決定するときに、図６０のように、閾値超えが検出された桁の統計情報（３２ビット）が積算される。したがって、図６０では、閾値超えを検出した桁を演算コア３００の多数決で決するときに、閾値超えが検出された桁の統計情報（３２ビット）で重みづけされた多数決が実行されるといえる。統計情報の桁の値で重み付けすると、閾値の前後で統計情報の累積値が不連続で変化する場合に、重みが有効に作用する。すなわち、閾値の前後で統計情報の累積値が不連続で変化する場合に、急激に統計情報の累積値が増加した桁が優先して決定されることになり、適切にオーバーフロー回数、あるいは、アンダーフロー回数を閾値の範囲に抑制するように小数点位置を決定できる。
【０２６６】
なお、図６０のように、「桁位置に対応する統計情報」を積算する代わりに、「桁位置に対応する１ビットの値１」を積算するようにしてもよい。このようにすることで、重みを均一の値１として、閾値超えが検出された桁を決定できる。
［その他の変形例］
【０２６７】
また、上記実施形態１から５では、総サンプル数の例として、ベクトル演算器である図３７の演算部Ａ−０からＡ−７を例に、１回のベクトル演算で並列に処理される固定小数点データの個数を用いた。しかし、本実施形態の演算処理装置３０の処理はこのような処理に限定される訳ではない。すなわち、ベクトル演算器に限定されず、スカラ演算器も含めて、所定の演算で実行される固定小数点データ数を総サンプル数とすればよい。例えば、制御コア３８からの指示で演算コア３００が起動される場合には、１回の起動で、ベクトルデータＮ個、スカラーデータがＭ個処理される場合、ベクトル演算の並列数が８の場合には、総サンプル数＝８＊Ｎ＋Ｍ；のように算出できる。
【０２６８】
上記実施形態１から５では、各演算コアで取得された統計情報が制御コア３８またはＣＰＵ３１等に転送され、アプリケーションプログラム等に引き渡されることを想定して説明がされている。そのため、図２９および図３０のような統計情報の転送に伴う課題が提示された。しかし、本実施形態１から５の演算処理装置３０、演算コア３００等の処理は、統計情報が制御コア３８またはＣＰＵ３１等に転送されるものに限定される訳ではない。すなわち、図３２または図３３に例示したような統計情報の累積分布の１桁分（または桁位置設定値＋Ｍから−Ｌ分）を演算コア３００内で処理するアプリケーションプログラムの実行においても、実施形態１から５の構成は適用可能である。すなわち、統計データの取得および集約をそれぞれの演算コア３００で行い、それぞれの演算コア３００が取得された統計情報の桁位置と、その桁位置のサンプル数から次の演算での固定小数点位置を決定してもよい。
【符号の説明】
【０２６９】
３、３Ａ、３Ｂ  サーバ
３０、３０Ａ、３０Ｂ  演算処理装置
３１  ＣＰＵ
３２  メモリ
３３  演算処理装置用メモリ
３４  バス
３５  データバス
３６  バスインターフェース
３７  メモリインターフェース
３８  制御コア
１０２、１０２Ｃ  統計情報取得部
１０４、１０４Ｃ、１０４Ｄ、１０４Ｅ、１０４Ｆ  統計情報集約部
３００  演算コア
３０１  データバスインターフェース
３８４  小数点位置決定回路
１０４０  Ｄ１４０、Ｄ２４０、Ｅ１４０、Ｅ２４０  桁位置セレクタ
１０４１  Ｄ１４１、Ｄ２４１、Ｅ１４１、Ｅ２４１、Ｆ４１  制御部
１０４２  Ｄ１４２、Ｄ２４２、Ｅ１４２、Ｅ２４２、Ｆ４２  制御用カウンタ
１０４３  Ｄ１４３、Ｄ２４３、Ｅ１４３、Ｅ２４３  カウンタ
１０４４  Ｄ１４４、Ｄ２４４、Ｅ１４４、Ｅ２４４  デコーダ
１０４７  終了部
３８４１  デコーダ
３８４２  マスク回路
３８４３  加算器
３８４４  桁＃レジスタ
３８４５  最大値位置検出回路
ＡＲ０−ＡＲ３９  桁＃レジスタ
Ｆ４９  カウンタ値生成部
【図１】
2019074951.tif 000003
【図２】
2019074951.tif 000004
【図３】
2019074951.tif 000005
【図４】
2019074951.tif 000006
【図５】
2019074951.tif 000007
【図６】
2019074951.tif 000008
【図７】
2019074951.tif 000009
【図８】
2019074951.tif 000010
【図９】
2019074951.tif 000011
【図１０】
2019074951.tif 000012
【図１１】
2019074951.tif 000013
【図１２】
2019074951.tif 000014
【図１３】
2019074951.tif 000015
【図１４】
2019074951.tif 000016
【図１５】
2019074951.tif 000017
【図１６】
2019074951.tif 000018
【図１７】
2019074951.tif 000019
【図１８】
2019074951.tif 000020
【図１９】
2019074951.tif 000021
【図２０】
2019074951.tif 000022
【図２１】
2019074951.tif 000023
【図２２】
2019074951.tif 000024
【図２３】
2019074951.tif 000025
【図２４】
2019074951.tif 000026
【図２５】
2019074951.tif 000027
【図２６】
2019074951.tif 000028
【図２７】
2019074951.tif 000029
【図２８】
2019074951.tif 000030
【図２９】
2019074951.tif 000031
【図３０】
2019074951.tif 000032
【図３１】
2019074951.tif 000033
【図３２】
2019074951.tif 000034
【図３３】
2019074951.tif 000035
【図３４】
2019074951.tif 000036
【図３５】
2019074951.tif 000037
【図３６】
2019074951.tif 000038
【図３７】
2019074951.tif 000039
【図３８】
2019074951.tif 000040
【図３９】
2019074951.tif 000041
【図４０】
2019074951.tif 000042
【図４１】
2019074951.tif 000043
【図４２】
2019074951.tif 000044
【図４３】
2019074951.tif 000045
【図４４】
2019074951.tif 000046
【図４５】
2019074951.tif 000047
【図４６】
2019074951.tif 000048
【図４７】
2019074951.tif 000049
【図４８】
2019074951.tif 000050
【図４９】
2019074951.tif 000051
【図５０】
2019074951.tif 000052
【図５１】
2019074951.tif 000053
【図５２】
2019074951.tif 000054
【図５３】
2019074951.tif 000055
【図５４】
2019074951.tif 000056
【図５５】
2019074951.tif 000057
【図５６】
2019074951.tif 000058
【図５７】
2019074951.tif 000059
【図５８】
2019074951.tif 000060
【図５９】
2019074951.tif 000061
【図６０】
2019074951.tif 000062
【図６１】
2019074951.tif 000063
【図６２】
2019074951.tif 000064
【図６３】
2019074951.tif 000065
【手続補正書】
【提出日】平成30年12月11日(2018.12.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
主記憶装置に接続されるとともに、複数の演算処理回路および制御処理回路を有する演算処理装置において、
前記複数の演算処理回路の各々は、
レジスタと、
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方を示す統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、前記制御処理回路に送信し、
前記制御処理回路は、前記複数の演算処理回路から送信された前記部分情報に基づいて、前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する演算処理装置。
【請求項２】
前記統計情報取得部は、
前記統計情報を保持する保持部と、
前記保持部が保持する前記統計情報のうちの前記部分情報を、前記特定のビットを指定する制御信号にしたがって選択する第１の選択部と、を有する請求項１記載の演算処理装置。
【請求項３】
前記保持部が保持する前記統計情報に含まれる各ビットに対応する前記累積加算された値と閾値とを比較する比較部と、
前記比較部の比較結果に基づいて、前記特定のビットを指定する制御部を有する請求項２に記載の演算処理装置。
【請求項４】
前記指定されたビットに対応する前記累積加算された値を選択する第２の選択部をさらに有する請求項３に記載の演算処理装置。
【請求項５】
前記統計情報は、前記複数の第１固定小数点数データに関し、前記最上位ビットの位置および前記最上位ビットよりも下位のビット位置、または前記最下位ビットの位置および前記最下位ビットよりも上位のビット位置にフラグビットを設定し、ビット毎の前記フラグビットの数を計数することによって生成される請求項１に記載の演算処理装置。
【請求項６】
主記憶装置に接続されるとともに、複数の演算処理回路および制御処理回路を有する演算処理装置において、
前記複数の演算処理回路の各々は、
レジスタと、
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方を示す統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記累積加算された値と所定の閾値との比較によって決定された特定ビットの位置を、前記制御処理回路に通知し、
前記制御処理回路は、前記複数の演算処理回路から通知された前記特定ビットの位置に基づいて、前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する
演算処理装置。
【請求項７】
レジスタと、 
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値、の少なくとも一方を示す統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、制御処理回路に送信し、
前記制御処理回路は、前記演算処理回路から送信された前記部分情報に基づいて、前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記演算処理回路に通知する演算処理回路。
【請求項８】
主記憶装置と、
前記主記憶装置に接続される処理装置と、
前記主記憶装置および前記処理装置に接続されるとともに、複数の演算処理回路および制御処理回路を有する演算処理装置と、を備える情報処理装置において、
前記複数の演算処理回路の各々は、
レジスタと、
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方の統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、前記制御処理回路に送信し、
前記制御処理回路は、前記演算処理回路から送信された前記部分情報に基づいて、前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際に
ビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記演算処理回路に通知する情報処理装置。
【請求項９】
主記憶装置に接続するとともに、複数の演算処理回路および制御処理回路を有する演算処理装置の制御方法において、
前記複数の演算処理回路の各々に含まれる演算部に演算命令をそれぞれ実行させ、
前記演算部が実行した演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方の統計情報を取得し、
前記複数の演算処理回路の各々が、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、制御処理回路に送信し、
前記制御処理回路が、前記演算処理回路から送信された前記部分情報に基づいて、前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記演算処理回路に通知する演算処理装置の制御方法。
【手続補正書】
【提出日】平成30年12月19日(2018.12.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の演算処理回路および制御処理回路を有する演算処理装置において、
前記複数の演算処理回路の各々は、
レジスタと、
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方を示す統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、前記制御処理回路がアクセス可能な記憶装置に送信し、
前記制御処理回路は、前記複数の演算処理回路から送信され前記記憶装置に格納された前記部分情報に基づいて、前記演算部による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する
ことを特徴とする演算処理装置。
【請求項２】
前記統計情報取得部は、
前記統計情報を保持する保持部と、
前記保持部が保持する前記統計情報のうちの前記部分情報を、前記特定のビットを指定する制御信号にしたがって選択する第１の選択部と
を有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記保持部が保持する前記統計情報に含まれる各ビットに対応する前記累積加算された値と閾値とを比較する比較部と、
前記比較部の比較結果に基づいて、前記特定のビットを指定する制御部と
を有することを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記指定されたビットに対応する前記累積加算された値を選択する第２の選択部をさらに有することを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記統計情報は、前記複数の第１固定小数点数データに関し、前記最上位ビットの位置および前記最上位ビットよりも下位のビット位置、または前記最下位ビットの位置および前記最下位ビットよりも上位のビット位置にフラグビットを設定し、ビット毎の前記フラグビットの数を計数することによって生成されることを特徴とする請求項１に記載の演算処理装置。
【請求項６】
複数の演算処理回路および制御処理回路を有する演算処理装置において、
前記複数の演算処理回路の各々は、
レジスタと、
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方を示す統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記累積加算された値と所定の閾値との比較によって決定された特定ビットの位置を、前記制御処理回路がアクセス可能な記憶装置に送信し、
前記制御処理回路は、前記複数の演算処理回路から送信され前記記憶装置に格納された前記特定ビットの位置に基づいて、前記演算部による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する
ことを特徴とする演算処理装置。
【請求項７】
複数の演算処理回路および制御処理回路を有し、前記複数の演算処理回路の各々がレジスタを有する演算処理装置に、
前記複数の演算処理回路の各々に含まれる演算部が演算命令をそれぞれ実行する処理と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方の統計情報を取得する処理と、
前記複数の演算処理回路の各々が、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、前記制御処理回路がアクセス可能な記憶装置に送信する処理と、
前記制御処理回路が、前記複数の演算処理回路から送信され前記記憶装置に格納された前記部分情報に基づいて、前記演算部による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する処理と
を実行させることを特徴とするプログラム。
【請求項８】
記憶装置と、
前記記憶装置に接続され、前記記憶装置にアクセス可能な処理装置と、
前記記憶装置および前記処理装置に接続されるとともに、複数の演算処理回路を有する演算処理装置と、を備える情報処理装置において、
前記複数の演算処理回路の各々は、
レジスタと、
演算命令を実行する演算部と、
前記演算部による演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計
値が上位ビット方向に累積加算された値の少なくとも一方の統計情報を取得する統計情報取得部と、を有し、
前記複数の演算処理回路の各々は、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、前記記憶装置に送信し、
前記処理装置は、前記複数の演算処理回路から送信され前記記憶装置に格納された前記部分情報に基づいて、前記演算部による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する
ことを特徴とする情報処理装置。
【請求項９】
複数の演算処理回路および制御処理回路を有し、前記複数の演算処理回路の各々がレジスタを有する演算処理装置の制御方法において、
前記複数の演算処理回路の各々に含まれる演算部が演算命令をそれぞれ実行し、
前記演算部が実行した演算結果である複数の第１固定小数点数データに関し、最上位ビットの位置の統計値が下位ビット方向に累積加算された値、または最下位ビットの位置の統計値が上位ビット方向に累積加算された値の少なくとも一方の統計情報を取得し、
前記複数の演算処理回路の各々が、前記統計情報のうち、特定のビットに対応する前記累積加算された値を示す部分情報を、前記制御処理回路がアクセス可能な記憶装置に送信し、
前記制御処理回路が、前記演算処理回路から送信され前記記憶装置に格納された前記部分情報に基づいて、前記演算部による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを特定し、特定された前記ビットレンジを前記複数の演算処理回路に通知する
ことを特徴とする演算処理装置の制御方法。