(57)【要約】【課題】深層学習を固定小数点数で精度よく実行することで、回路規模と消費電力を削減する。【解決手段】演算処理装置は、演算命令にしたがって演算を実行する演算回路と、固定小数点数データに対する演算実行後の固定小数点数データ中のビットの分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を備える。そして、取得回路は、取得命令で指定されるレジスタに統計情報を出力する。【選択図】図２８
2019148972.tif 000002
【特許請求の範囲】
【請求項１】
演算命令にしたがって演算を実行する演算回路と、
固定小数点数データに対する演算実行後の前記固定小数点数データ中のビットの分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を備え、
前記取得回路は、前記取得命令で指定されるレジスタに前記統計情報を出力する演算処理装置。
【請求項２】
前記演算回路と前記取得回路とが少なくとも１つの共通の演算器または少なくとも１つの共通のレジスタを有する請求項１に記載の演算処理装置。
【請求項３】
前記取得回路は、前記演算実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置にフラグビットを設定する回路および前記演算実行後の固定小数点数データ中の符号ビットと一致しない最下位のビットの位置にフラグビットを設定する回路の少なくとも１つを有する請求項１または２に記載の演算処理装置。
【請求項４】
前記取得回路は、前記固定小数点数データに関し、最下位ビット位置から、符号ビットと異なるビット値を持つビット位置のうちの最上位のビット位置までの範囲に対応するそれぞれのビット位置に前記フラグビットを設定する回路、または最上位ビット位置から、前記符号ビットと異なるビット値を持つビット位置のうちの最下位のビット位置までの範囲に対応するそれぞれのビット位置に前記フラグビットを設定する回路の少なくとも１つを有する請求項１から３のいずれか１項に記載の演算処理装置。
【請求項５】
前記取得回路は、
複数の演算回路がそれぞれ並列に実行した演算結果である複数の固定小数点数データに関して設定された前記フラグビットをそれぞれのビット位置毎に加算する回路と、
前記加算されたフラグビットをそれぞれのビット位置毎に積算する積算回路と、を有し、
前記積算回路は、前記演算命令で用いられる加算回路により前記フラグビットをそれぞれのビット位置毎に積算する請求項３または４に記載の演算処理装置。
【請求項６】
前記取得命令は、前記固定小数点数データ中のビットの分布中で取得対象のビット部分を指定可能である請求項１から５のいずれか１項に記載の演算処理装置。
【請求項７】
前記統計情報は、積和演算結果を保持するアキュムレータ中の固定小数点データのビット分布に対する統計情報である請求項１から６のいずれか１項に記載の演算処理装置。
【請求項８】
演算命令にしたがって演算を実行する演算回路と、
固定小数点数データに対する演算実行後の前記固定小数点数データ中のビットの分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を備える複数の演算処理装置と、
前記複数の演算処理装置に処理の実行を指示する制御装置と、を有し、
前記取得回路は、前記取得命令で指定されるレジスタに前記統計情報を出力する情報処理装置。
【請求項９】
前記演算回路と前記取得回路とが少なくとも１つの共通の演算器または少なくとも１つの共通のレジスタを有する請求項８に記載の情報処理装置。
【請求項１０】
演算命令にしたがって演算を実行する演算回路を有する情報処理装置が、
固定小数点数データに対する演算実行後の前記固定小数点数データ中のビットの分布に
ついての統計情報の取得を取得命令にしたがって実行し、前記取得命令で指定されるレジスタに前記統計情報を出力する情報処理方法。
【請求項１１】
前記演算命令と前記取得命令とが少なくとも１つの共通の演算器または少なくとも１つの共通のレジスタを用いて実行される請求項１０に記載の情報処理方法。
【請求項１２】
演算命令にしたがって演算を実行する演算回路を有する情報処理装置に、
固定小数点数データに対する演算実行後の前記固定小数点数データ中のビットの分布についての統計情報の取得を取得命令にしたがって実行し、前記取得命令で指定されるレジスタに前記統計情報を出力することを実行させるためのプログラム。
【請求項１３】
前記演算命令と前記取得命令とが少なくとも１つの共通の演算器または少なくとも１つの共通のレジスタを用いて実行される請求項１２に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、この演算処理装置を含む情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
今日、人工知能を用いた機械学習のうち、特に深層学習（ＤＬ：Deep Learning）への
ニーズが高まっている。深層学習は、多層ニューラルネットワーク（ＤＮＮ：Deep Neural Network）を用いた機械学習の手法ということができる。図１は、ニューラルネットワ
ークの構成を例示する図である。ニューラルネットワークは、神経細胞（ニューロン）をコンピュータ上にモデル化したものである。神経細胞は、細胞体と、他の細胞体から入力される信号を受ける樹状突起と、他の細胞体に信号を出力する軸索とを有する。また、信号を出力する軸索の末端と信号を受ける樹状突起との間にはシナプスと呼ばれる信号の伝達構造が形成されている。ニューラルネットワークでは、神経細胞間でのシナプスを介した情報伝達がモデル化されている。
【０００３】
さらに、ニューラルネットワークが多層化された多層ニューラルネットワークでは、深層学習が実行される。そして、深層学習が実行される多層ニューラルネットワークの認識性能を高めるため、多層ニューラルネットワークが大規模化される傾向にある。例えば、多層ニューラルネットワークで処理されるパラメータ数は、数百万から１億数千万にも及ぶ。多層ニューラルネットワークが人の脳に近づくためには、究極的に、パラメータ数は１千数百億にも及ぶと考えられる。したがって、今後、深層学習における学習データは増加し、多層ニューラルネットワークにおける計算負荷、メモリ負荷が増大することが予想される。そのため、増え続ける学習データに対して、認識性能と学習効率の改善が望まれている。認識性能と学習効率を改善し、負荷を軽減するため、多層ニューラルネットワークが軽量化されることが望ましい。
【０００４】
ところで、深層学習においては、乗算、積和演算、ベクトル乗算を含む様々な演算が実行される。ただし、深層学習では、個々の演算精度への要求は、通常の演算処理ほど厳密ではない。例えば、通常の演算処理等では、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。深層学習では、複数の入力データを畳み込み演算するときの係数（重み）の調整が主な処理となり、入力データのうち、極端なデータは重視されないことが多いからである。また、大量のデータを繰り返し用いて係数を調整するため、一度飽和された値も、学習の進行に合わせて桁調整を行なうことで、飽和されずに係数の調整に反映できるようになるためである。
そこで、このような深層学習の特性を考慮し、深層学習用の演算処理装置のチップ面積の削減、電力効率の向上等を図るため、浮動小数点数を用いないで、固定小数点数による演算を用いることが考えられる。浮動小数点数演算よりも固定小数点演算の方が回路構成を簡素にできるからである。
【０００５】
図２にデータ表現に用いるビットの構成を例示する。３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数のように、深層学習で処理するデータ（重みとパラメータ）のデータ表現に用いるビット幅を縮小することで、多層ニューラルネットワークで扱うデータ量を削減できる。扱うデータ量が削減されることで、深層学習の処理量が削減され、学習時間が短縮されることが期待できる。
【０００６】
しかしながら、固定小数点数は、取りうる値のダイナミックレンジが狭いので、浮動小
数点数より演算精度が劣化する場合がある。図３に、３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する。図では、「固定小数点数」が「整数」と記述されている。固定小数点数が整数に限定される訳ではない。固定小数点数は２進整数とも理解できるので、本明細書中では、固定小数点数を整数という場合がある。図のように、ビット幅を削減すると演算精度が低下することが予測される。演算精度が低下すると、深層学習がうまく実施できない場合もあり得る。すなわち、深層学習では、フォーワッド方向およびバックワード方向に積和演算が多数回繰り返され、演算結果が固定小数点数のダイナミックレンジを超えてしまうこともあるからである。そこで、演算精度を改善する技術により、ビット幅を削減することに起因する上記課題を克服することが望まれる。
【０００７】
ビット幅を削減することに起因する課題を考察するため、まず、深層学習の手順を説明する。図４に、深層学習における処理手順を例示する。また、図５に、図４の処理手順のうち、Ｃｏｎｖ＿１の順方向処理とＦＣ２の逆方向処理を詳細化したものを例示する。深層学習の処理の流れは図４のとおりである。深層学習の処理では、それぞれの入力データに対応した正解データが存在する。深層学習を実行するネットワークの構成は人が決定する。
【０００８】
ネットワークは、入力データを左から入力し、各層の処理結果を右方向へ伝播させ（順伝播）、正解データと結果を比較し、結果の差分を左方向へ伝播させる(逆伝播)。例えば、図５の例では、入力パラメータｘｊに、係数Ｗｉｊの積和演算を実行することで、Ｃｏｎｖ＿１層の畳み込み演算が実行される。各階層は係数（Ｗｉｊ）を持っており、多層ニューラルネットワークの最上位の層（図４で、ＦＣ２）まで演算がなされると、演算結果が正解データと比較され、比較結果を基に各層の係数が更新される。この係数の変化（ΔＷｉｊ）によりニューラルネットワークが最適化される。なお、多層ニューラルネットワークは、１データごとに上記の係数の更新を行ってもよい。あるいは多層ニューラルネットワークは、複数データ(例えば２５６データ)について並列に同時に計算を行い、２５６通りの係数の更新情報を平均した結果を元に重みを更新しても良い。このとき、重み更新に用いる複数データの集合をミニバッチという。複数データの集合を並列に処理して重み更新が行われる場合、並列同時処理されるデータの集合をミニバッチということもできる。
【０００９】
図６に、深層学習におけるパラメータと重みのビット幅を縮小することによる課題を例示する。ビット幅を縮小することでデータ量は削減可能である。しかし深層学習では、図４に例示した処理を多数回繰り返す。例えば入力データが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ビット調整するため学習結果の精度が劣化する。例えば、ｋ個
のデータの学習ごとに小数点位置を調整する場合、小数点位置が適正位置からn ビットずれている場合、小数点位置が適切な位置に調整されるまでに、(n * k)回の学習が進む。
その結果、小数点位置が適正な位置になるまでに、飽和するデータやアンダーフローするデータが増え、学習が収束しない、あるいは、学習結果の精度劣化につながるおそれがある。
１つの側面では本発明の目的は、深層学習を固定小数点数で精度よく実行し、回路規模と消費電力を削減できるようにすることである。
【課題を解決するための手段】
【００１８】
本発明の一側面は、以下の演算処理装置によって例示される。すなわち、本演算処理装置は、演算命令にしたがって演算を実行する演算回路と、固定小数点数データに対する演算実行後の前記固定小数点数データ中のビットの分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を備える。そして、前記取得回路は、前記取得命令で指定されるレジスタに前記統計情報を出力する。
【発明の効果】
【００１９】
本実施形態によれば、深層学習を固定小数点数で精度よく実行することで、回路規模と消費電力を削減することができる。
【図面の簡単な説明】
【００２０】
【図１】ニューラルネットワークの構成を例示する図である。
【図２】データ表現に用いるビットの構成を例示する図である。
【図３】３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する図である。
【図４】深層学習における処理手順を例示する図である。
【図５】図４の処理手順のを詳細化した図である。
【図６】深層学習におけるパラメータと重みのビット幅を縮小することによる課題を例示する図である。
【図７】深層学習において、単精度浮動小数点数、半精度浮動小数点数、固定小数点数、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を算出する。また、差分値ΔWijを用いて重みWijを更新する。このとき、情報処理装置は、エラーδ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となる領域が２ビット減少する。すなわち、情報処理装置１
が小数点位置を２ビット左にシフトすると、飽和される領域が２ビット拡張され、アンダーフローが発生する領域が２ビット減少する。また、例えば、情報処理装置がこの固定小数点数を２ビットだけ正方向にシフト（固定小数点数を左方向に２ビットシフト）すると、最上位ビットが１８の位置にシフトし、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。すなわち、情報処理装置１が小数点位置を２ビット右にシフトすると、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。
【００４０】
情報処理装置１は、学習実行中に、非符号となる最上位のビット位置の分布を得ることで、Dynamic Fixed Point演算における適正なシフト量、つまり、適切な固定小数点位置
を直ちに決定できる。例えば、情報処理装置１は、飽和されるデータが指定の割合以下になるように固定小数点位置を決定すればよい。つまり、一例としては、情報処理装置１は、データのアンダーフローが所定の程度となることよりもデータの飽和が所定の程度となること優先して、固定小数点位置を決定できる。
【００４１】
非符号となる最上位ビット位置の分布は、情報処理装置１のプロセッサ１０（図１２参照）内の所定のレジスタ（統計情報レジスタともいう）内に積算される。プロセッサ１０は、当該統計情報レジスタからの分布データの読み出し、書き込み、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までに命令実行の対象となった１以上の固定小数点数についての分布データが蓄積される。蓄積された分布データは、読み出し命令によってメモリに読み出される。なお、プロセッサ１０は、クリア命令に代えて、統計情報レジスタへのロード命令の実行を可能とし、値０を統計情報レジスタにロードできるようにしてもよい。
（２）非符号となる最下位ビット位置の分布
【００４２】
非符号となる最下位ビット位置の分布とは、ビットが符号と異なる値となる最下位のビット位置をいう。例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビット
であるbit[0]までの並びとしたとき、符号ビットbit[39]と異なるbit[k]のうち、インデ
ックスkが最小のものをいう。また、非符号となる最下位ビット位置の分布では、データ
の桁数が把握される。
（３）非符号となる最上位ビット位置の最大値
【００４３】
非符号となる最上位ビット位置の最大値は、前回クリア命令が実行されたときから現在に至るまでに、命令実行の対象となった１以上の固定小数点数について符号ビットの値と異なる値となる最上位のビット位置のうちの最大値である。情報処理装置１は、非符号となる最上位のビット位置の最大値をDynamic Fixed Point演算における適正なシフト量、
つまり、適切な小数点位置の決定に利用できる。
【００４４】
プロセッサ１０は、上記統計情報レジスタからの上記最大値の読み出し、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの最大値が蓄積され、読み出し命令によって最大値がメモリに読み出される。
（４）非符号となる最下位ビット位置の最小値
【００４５】
非符号となる最下位ビット位置の最小値は、前回クリア命令が実行されたときから現在に至るまでの１以上の固定小数点数について符号と異なる値となる最下位のビット位置のうちの最小値である。情報処理装置１は、非符号となる最下位ビット位置の最小値を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[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ゲートの出力は０となる。図１６は、演算実行後
の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置にフラグビットを設定する回路の一例である。
【００５７】
図１７は、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａの処理を例示する図である。図では、４０ビットのデータが８個並列に処理されるSingle Instruction Multiple Data stream（ＳＩＭＤ）データからビットの
分布を取得する処理が例示される。図１７では、ハードウェア回路である統計情報集約部１０４Ａの処理が、擬似コードで記述されている。
【００５８】
すなわち、入力データは、８（行）×４０（ビット）の配列データで例示されている。また、各行の４０ビットの入力データは、非符号となる最上位ビット位置（図１６の統計情報取得部１０２Ａの出力）または非符号となる最下位ビット位置である。この処理では、４０ビットの出力データoutについて、まず、全ビットがクリアされる。次に、入力デ
ータの配列in[j][i]の各列ｉの要素の値が、すべての行（ｊ＝０から７）に対して加算される。したがって、図１５とは異なり、図１７の擬似コードでは、出力データ（配列要素）out[j]は、log2(SIMDデータ数)ビット(図17の例では3ビット)の整数である。なお、図
１７では、ＳＩＭＤデータ数（並列処理されるデータ数）は８であると想定したが、ＳＩＭＤデータ数が８に限定される訳ではない。
【００５９】
図１８に、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得（ＳＩＭＤデータ数−１））がbit population count演算によって、8個の統計情報のiビット目(i=0から39)における1の個数がそれぞれカウントされる。入力データは、統計情報取得部１０２Ａ（図１５）によって取得された非符号となる最上位ビット位置である。したがって、統計情報集約部１０４Ａは、統計情報取得部１０２Ａによって取得された非符号となるＳＩＭＤデータ個数分の最上位ビット位置に対して、各ビットの’1’の発生回数をカウントすることで最上位ビット位置
の発生回数を計数する。統計情報集約部１０４Ａは、計数結果を出力データout0からout39にそれぞれ格納する。
【００６０】
図１９に、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得ＳＩＭＤデータ数−１）がＯＲゲート（４０ビット）によってＯＲ演算される。また、図１８でセレクタ（ＳＥＬ）は、論理和演算（ＯＲ）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）されたデータが、出力データoutに出力される。したがって、統計情報取得部１０２がスカラユニット１４
で取得したデータは、一回の演算においては、論理和演算されることなくそのまま出力データoutに出力される。outは、統計情報格納部１０５に引き渡すデータである。
【００６１】
論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例である。論理和演算によってビット位置を集約
する統計情報集約部１０４Ｂは、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例でもある。
【００６２】
図２０に、統計情報格納部１０５（図１２参照）の具体例として、統計情報集約部１０４Ａからの統計情報を専用レジスタに格納する統計情報格納部１０５Ａの構成を例示する。図で、in39からin0は、図１８のout39からout0に相当する統計情報集約部１０４からの統計情報を示す。また、sr39からsr0は、統計情報を格納するレジスタ値である。プロセ
ッサ１０は、書き込み命令によってセレクタSELを介して、レジスタ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つあるいは複数の値を読み出し、読み出し命令で指定されたデータ用メモリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
【００６５】
図２２に実施形態１における統計情報取得を指示する命令の命令フォーマットを例示する。図２２のように、既存の命令フォーマットを拡張し、統計情報を取得するか否かを指定するビットを追加するようにしてもよい。図２２の例にしたがって、例えば、全命令について統計情報取得機能を追加してもよい。図のように、ＦＬＧ＝１は、統計情報の取得を指定する。一方、ＦＬＧ＝０は、統計情報の取得を指定せず、従来と同じ命令を示す。
【００６６】
図２３に命令フォーマットの変形を例示する。図２３のように、命令フォーマットを拡張し、統計情報を格納するレジスタ・インデックスを指定するようにしてもよい。図でＩＤＸは、レジスタ・インデックス（図２１等のindex）を示す。ただし、ＩＤＸ=000 の場合には、プロセッサ１０は統計情報を取得しない。図２３の命令フォーマットをデコードし、レジスタ・インデックスＩＤＸを取得する図１２のデコーダ１１２は、統計情報の格
納先の指定を取得するデコーダの一例である。
【００６７】
図２４に、実施形態１の情報処理装置１による学習処理のフローチャートを例示する。この処理では、情報処理装置１は、初期小数点位置を決定する（ＷＥ１）。情報処理装置１は、過去の実験値、実績値、あるいは、ユーザ指定により各変数の初期小数点位置を決定すればよい。
【００６８】
そして、情報処理装置１は、回数kを0に初期化する。また、情報処理装置１は、プログラム内の統計情報を格納する変数を初期化する（ＷＥ２）。そして、情報処理装置１は学習終了の条件が充足されたか否かを判定する（ＷＥ３）。学習が終了するのは、全結合層(fc2)でのエラーが基準値以下となるか、または、学習回数が規定の最大値に達した場合
である。
【００６９】
学習終了の条件が充足されない場合、情報処理装置１は、次のミニバッチを実行する。このとき、情報処理装置１は、各レイヤの各変数の統計情報を統計情報レジスタあるいは統計情報レジスタファイルに累積する。統計情報を累積は、上記で説明したように、プロセッサ１０のハードウェアで実行される。そして、情報処理装置１は、変数ｋをカウントアップする（ＷＥ４）。
【００７０】
そして、情報処理装置１は、回数ｋが更新間隔に達したか否かを判定する（ＷＥ５）。回数ｋが更新間隔に達していない場合、情報処理装置１は、ＷＥ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置１は、各種の統計情報が蓄積された統計情報を統計情報レジスタあるいは統計情報レジスタファイルあるいは統計情報をメモリに退避した領域から統計情報を読み出す。そして、情報処理装置１は、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新する（ＷＥ６）。
【００７１】
このとき、情報処理装置１は、例えば、飽和するデータとアンダーフローするデータの全体のデータ数に対する比率が目標条件を充足するように、小数点位置を決定すればよい。また、情報処理装置１は、飽和するデータの全体のデータに対する比率とアンダーフローするデータの全体のデータに対する比率の両方が目標条件を充足することが困難である場合、一方を優先してもよい。また、情報処理装置１は、飽和が発生しない上限のビット位置と、有効なデータが存在する下限のビット位置の平均を、固定小数点数で表現可能な範囲の中央を位置づけて、小数点位置を設定してもよい。さらに、情報処理装置１は、回数kを0に初期化し、さらに統計情報を格納するレジスタをリセットする。そして、情報処理装置１は、Ｃ３の処理に戻る。
【００７２】
ＷＥ４で各レイヤの各変数の統計情報を累積することと、ＷＥ６で各種の統計情報が蓄積されたレジスタあるいはレジスタファイルから統計情報を読み出すことは、１以上の層の少なくとも１つの層において前記演算の命令を含む命令実行時の固定小数点数データ中のビットの分布についての統計情報を取得することの一例である。また、ＷＥ６で、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新することは、ビットの分布についての統計情報に基づいて固定小数点数データの小数点位置を更新することの一例である。
［実施形態２］
【００７３】
図２５から図３５を参照して実施形態２に係る情報処理装置１Ａを説明する。上記実施形態１では、図１３に例示のように、セレクタ１０１がベクトル演算用の演算器１３１−２の出力結果と、データ用メモリ２２からの読み出し結果（Read Data 0,…, Read Data 0）のいずれかを選択し、統計情報取得部１０２およびデータ変換部１０３に入力する。
そして、統計情報取得部１０２で取得された統計情報は、統計情報集約部１０４に入力さ
れる。一方、小数点位置調整のためデータ変換部１０３でデータ変換されたデータは、図示しないセレクタを介して、データ用メモリ２２（Write Data0,…, Write Data n）にストアされるか、ベクトルレジスタ（Vector Reg2）に保持される。統計情報取得部１０２
は、プロセッサ１０の演算命令が実行される各種の演算器とは別経路で用意されている。データ変換部１０３は、デコーダ１１２からの指令により、入力されるビットパターンを指令で指定されたビット数だけシフトする。データ変換部１０３は、更新回路の一例である。
【００７４】
より具体的には、図１３で統計情報は、例えばベクトル演算用の演算器１３１が出力するデータの経路であるデータ変換部１０３、メモリインターフェースとは別経路で用意されている統計情報取得部１０２および統計情報集約部１０４によって取得される。なお、統計情報取得部１０２および統計情報集約部１０４は、他の演算命令、例えば、積和演算用のアキュムレータ１３２あるいは図示しない他の加算器とも別経路で用意されている。すなわち、実施形態１では、統計情報取得部１０２および統計情報集約部１０４は、プロセッサ１０のデコーダ１１２でデコードされた命令にしたがって演算が実行される演算器の出力のデータパスから分岐した回路で実現されている。したがって、実施形態のプロセッサ１０では、例えば、１回のベクトル演算実行時に、ベクトル演算の結果とともに図１１のような統計情報を取得することが可能となる。
【００７５】
図２５は、実施形態１におけるさらなる課題を説明する図である。実施形態１で説明したプロセッサ１０の構成をマルチコアに拡張して適用し、各コアから統計情報を取得しようとした場合、各コアにおいて統計情報を取得し、さらに集約するための回路が設けられる結果、プロセッサ１０の回路規模が大きくなる。図２５は、マルチコア構成の情報処理装置５０１の構成を例示する図である。情報処理装置５０１は、Ｈｏｓｔ  ＣＰＵ５０２と、制御ＣＰＵ５０３と、複数の処理部（Processor Element、ＰＥともいう）５１０−
１から５１０−Ｎを有している。以下、処理部５１０−１等をここに区別しないで総称するときは、処理部５１０という。制御ＣＰＵ５０３と、各処理部５１０とはバス３４で接続される。処理部５１０は、実施形態１のプロセッサ１０と同様の構成であり、制御ユニット１１、レジスタファイル１２、ベクトル演算用の演算器１３１、および積和演算用のアキュムレータ１３２等を有する。なお、制御ユニット１１は処理部５１０になくても構わない。制御ユニット１１がない場合に、実施形態１のデコーダ１１２は、例えば、制御ＣＰＵ５０３に設けられ、制御ＣＰＵ５０３がデコードされた命令にしたがって、各処理部５１０に制御信号を発すればよい。
【００７６】
図２６は、実施形態１のプロセッサ１０の構成を単純に情報処理装置５０１の処理部５１０に適用した場合の構成例である。図２６では、各処理部５１０に実施形態１と同様の統計情報取得部１０２と統計情報集約部１０４（集計回路とも呼ぶ）が追加される。図２６では、処理部５１０内の統計情報集約部１０４は、「集約部」と記述されている。統計情報取得部１０２と統計情報集約部１０４の構成および作用は、実施形態１と同様であるので、その説明を省略する。図２６では、さらに、各処理部５１０の統計情報集約部１０４で集計された統計情報を全体で集計する全体集計回路５０６が追加されている。このように、実施形態１のプロセッサ１０の構成を単純にマルチコア構成で複数の処理部５１０を有する情報処理装置５０１に適用すると、統計情報の取得、集約、および全体集計のための回路、さらにこれらの回路を接続する専用のバスが増加し、回路規模が大きくなる。
【００７７】
そのため、実施形態２では、図２６の処理部５１０に代えて、統計情報を取得するための専用命令を追加した処理部１０Ａが採用される。この専用命令は、専用命令を追加前の既存の命令を実行するための既存のレジスタ、バス、および演算器等を用いて処理を実行する。既存のレジスタ、バス、および演算器等を用いることで、図２６に例示した統計情報の集約、および全体集計のための回路、さらにこれらの回路を接続する専用のバス等を
含む回路を削減する。したがって、実施形態１のような専用のハードウェアである統計情報集約部１０４および全体集計回路５０６を用いる場合と比較して、オーバーヘッドが発生する可能性がある。しかしながら、深層学習を処理の対象とするマシンでは、実行される処理は積和演算が主体となり、既存のレジスタ、バス、および演算器等を用いて統計情報を取得し、集約することによるオーバーヘッドは、深層学習全体の処理と比較すると極めて小さいか無視できる程度になることが予測される。
【００７８】
図２７に、実施形態２に係る情報処理装置１Ａの構成を例示する。情報処理装置１Ａは、情報処理装置５０１は、Ｈｏｓｔ  ＣＰＵ５０２と、制御ＣＰＵ５０３と、複数の処理部１０Ａ−１から１０Ａ−Ｎを有している。図では、処理部１０ＡはＰＥと記述されている。制御ＣＰＵ５０３と、各処理部１０Ａとはバス３４で接続される。さらに、図２７では、バス３４に、バスインターフェース３６、メモリメモリインターフェースを介して接続される命令用メモリ２１およびデータ用メモリ２２が記載されている。
【００７９】
図２８に、情報処理装置１Ａ内の処理部１０Ａの回路ブロックを例示する。図２８では、処理部１０Ａとともに、メモリインターフェース、命令用メモリ２１およびデータ用メモリ２２も例示されている。処理部１０Ａは、制御ユニット１１、レジスタファイル１２、ベクトルユニット１３、スカラユニット１４を含む。制御ユニット１１は、プログラムカウンタ１１１とデコーダ１１２を含む。レジスタファイル１２は、ベクトルレジスタファイル、ベクトル演算用アキュムレータレジスタ（Vector ACC）、スカラレジスタファイル、スカラ演算用アキュムレータレジスタ（ACC）を含む。以降、説明のため、ベクトル
レジスタファイル(vReg)は16-bit x 8-way = 128-bitとし、ベクトル演算用アキュムレータレジスタ(Vector ACC)は、40-bit x 8-way = 320-bitと仮定する。なお、本実施形態では、処理部１０Ａは、図２７の複数の処理部１０Ａとして採用される。したがって、図２８の処理部１０Ａは、複数の演算処理装置の一例である。なお、ベクトル演算用の演算器１３１、スカラ用の演算器１４１等は実施形態１と同様であるので、その説明を省略する。ベクトル演算用の演算器１３１は、複数の演算回路の一例である。
【００８０】
ベクトルユニット１３は実施形態１と同様、ベクトル演算用の演算器１３１を含む。また、スカラユニット１４は、実施形態１と同様、スカラ演算器１４１を含む。ベクトル演算用の演算器１３１は、複数の演算回路の一例である。
【００８１】
ただし、実施形態１では、プロセッサ１０は、専用の統計情報集約部１０４、統計情報格納部１０５を有し、既存演算回路の演算と並列にハードウェアで統計情報を取得していた。実施形態２では、図２８のように、統計取得処理は、処理部１０Ａの命令（統計情報取得命令という）により実行される。統計情報取得命令にしたがって統計取得処理を実行するハードウェア回路は、既存命令により実行される演算回路のデータパスに統合される。その結果、統計情報取得命令は、処理部１０Ａ内の演算器、レジスタ、バスといった資源を他の既存命令と共有する。
【００８２】
図２８のように、実施形態２の処理部１０Ａは、セレクタ１０７を有する。そして、ベクトル演算用の演算器１３１からの出力は、セレクタ１０７に直接入力されるパスと、統計情報取得部１０２に入力されるパスを通る。ベクトルユニット１３内のセレクタ１０７は、ベクトル演算用の演算器１３１から出力される信号と統計情報取得部１０２から出力される信号を選択して、既存命令の演算器１０８に入力する。同様に、スカラ演算用の演算器１４１からの出力は、スカラユニット１４内のセレクタ１０７に直接入力されるパスと、統計情報取得部１０２に入力されるパスを通る。スカラユニット１４のセレクタ１０７はスカラ演算用の演算器１４１から出力される信号と統計情報取得部１０２から出力される信号を選択して、既存命令の演算器１０８に入力する。既存命令の演算器１０８は、加算命令で実行される加算回路等である。データ変換部１０３は、既存の加算命令による
演算器１０８の演算結果の固定小数点位置を調整し、メモリインターフェースを介してデータ用メモリ２２に保存する。
【００８３】
図２９は、統計情報取得命令による統計情報取得処理を実行する演算回路の詳細を例示する図である。図２９の回路は、取得回路の一例である。図２９は、図２８のベクトル演算用のアキュムレータレジスタ(Vector ACC)と、ベクトルユニット１３とを含む演算回路内の統計情報取得処理を実行する回路の詳細構成例ということができる。上述のように、処理部１０Ａは、40-bitのベクトル演算用のアキュムレータレジスタ  ＡＣＣ０からＡＣＣ７（合わせて8-way）を有している。各ベクトル演算用のアキュムレータレジスタ  Ａ
ＣＣ０からＡＣＣ７の出力は、1-hot-vector converter  ＨＶＣ０からＨＶＣ７に出力される。1-hot-vector converterは、入力される数値（例えば、４０ビット）のうち、非符号となる最上位ビットを１とし、他のビットを０とするビット列に変換して出力する。1-hot-vector converterの構成は、例えば、実施形態１の図１６と同様である。また、図１６と同様、全ビット０または全ビット１の入力に対して、1-hot-vector converter  ＨＶＣ０からＨＶＣ７は、符号ビットを１に、他のビットを０に変換して出力する。1-hot-vector converter  ＨＶＣ０からＨＶＣ７は、演算実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置にフラグビットを設定する回路の一例である。
【００８４】
1-hot-vector converter  ＨＶＣ０からＨＶＣ７による変換結果は、ＣＬＳ０からＣＬＳ７として出力される。ＣＬＳ０からＣＬＳ７は、ベクトル演算用アキュムレータレジスタ  ＡＣＣ０からＡＣＣ７それぞれにおける演算結果のCount Leading Signの信号である。ただし、図２９の回路内に、ＣＬＳ０からＣＬＳ７の信号を格納するレジスタを設けてもよい。1-hot-vector converter  ＨＶＣ０からＨＶＣ７による変換結果によって設定される１のビットはフラグビットの一例である。
【００８５】
ＣＬＳ０からＣＬＳ７の出力先には、Bit Population Count回路ＢＰＣ０からＢＰＣ３が４回路並列に設けられる。Bit Population Count回路ＢＰＣ０からＢＰＣ3は、それぞ
れ、ＣＬＳ０からＣＬＳ７の信号のビット列中の指定されたビットを加算する回路である。すなわち、Bit Population Count回路ＢＰＣ０からＢＰＣ３のそれぞれには、ＣＬＳ０からＣＬＳ７中の指定ビットが入力される。指定ビットは、図示しないビット位置指定（Ｎ）の信号で指定される。例えば、ビット位置指定Ｎ＝０とき、ＣＬＳ０からＣＬＳ７の８列のビット列のビット０（ＣＬＳ０［０］からＣＬＳ７［０］）がBit Population Count回路ＢＰＣ０に入力される。また、上記ビット位置指定Ｎ＝０とき、ＣＬＳ０からＣＬＳ７の８列のビット列のビット３（ＣＬＳ０［３］からＣＬＳ７［３］）がBit Population Count回路ＢＰＣ３に入力される。
【００８６】
すなわち、一般化すると、ＣＬＳ０からＣＬＳ７の８列のビット列のビットｋ＋Ｎ（ＣＬＳ０［ｋ＋Ｎ］からＣＬＳ７［ｋ＋Ｎ］）がBit Population Count回路ＢＰＣｋ＋Ｎに入力される（ｋ＝０，１，２，３）。したがって、Bit Population Count回路ＢＰＣ０からＢＰＣ３は、４ビット並列にＣＬＳ０からＣＬＳ７の各ビットを合計する。処理部１０Ａの図示しない制御回路は、統計情報取得命令のビット位置指定オペランドによって指定されるビット位置指定信号（Ｎ）に対して、Bit Population Count回路ＢＰＣ０からＢＰＣ３による演算を行なうことで、ＣＬＳ０からＣＬＳ７の８列のビット列の連続した４つの同一ビット位置のビットを並列に加算する。例えば、ＣＬＳ０からＣＬＳ７のビット幅が４０ビットの場合には、統計情報取得命令のビット位置指定オペランドを０、４、・・・、３６と変更して、統計情報取得命令を繰り返し実行することで、４０ビットの統計情報を得ることができる。Bit Population Count回路ＢＰＣ０からＢＰＣ３は、複数の固定小数点数データに関して設定されたフラグビットをそれぞれのビット位置毎に加算する回路の一例である。ビット位置指定オペランドは、０、４、・・・、３６の４刻みでも、０から３６までの任意としてもよい。また、ＣＬＳの数が、ＣＬＳ０からＣＬＳ７の８列に
限定される訳ではなく、設計に応じて望ましい数（４列、１６列等）が選択可能である。また、ＣＬＳのビット数が４０ビットに限定される訳ではなく、設計に応じて望ましい数が選択可能である。また、図２９では、Bit Population Count回路が４個設けられ、４ビット並列に加算が実行されるが、Bit Population Count回路の数が４個に限定される訳ではなく、設計に応じて望ましい個数が選択可能である。
【００８７】
Bit Population Count回路ＢＰＣ０からＢＰＣ３の出力は、セレクタ１０７を介して加算器１０８Ａに入力される。加算器１０８Ａも４個並列に設けられる。４個の加算器１０８Ａは、それぞれ、Ｂｉｔ  Ｐｏｐｕｌａｔｉｏｎ  Ｃｏｕｎｔ回路ＢＰＣ０からＢＰＣ３の出力のそれぞれとソースレジスタのそれぞれに蓄積済みの積算結果とを加算し、デスティネーションレジスタに出力する。ここで、ソースレジスタおよびデスティネーションレジスタは、ベクトルレジスタファイルvRegの要素であり、統計情報取得命令のオペランドとしてインデックスが指定される。ソースレジスタとデスティネーションレジスタがベクトルレジスタファイルvRegの同一の要素の場合には、加算器１０８Ａは、ソースレジスタおよびデスティネーションレジスタとともにアキュムレータを形成し、統計情報を積算する。加算器１０８Ａ、ソースレジスタおよびデスティネーションレジスタであるベクトルレジスタファイルvRegの上記要素は、累積回路の一例である。図２９では、加算器１０８Ａが４個設けられ、４個の加算器１０８Ａが並列に加算を実行するが、加算器１０８Ａの数が４個に限定される訳ではなく、設計に応じて望ましい個数が選択可能である。
【００８８】
ソースレジスタおよびデスティネーションレジスタのそれぞれは、例えば、それぞれＣＬＳ０からＣＬＳ７内の各ビット（４ビットを１組にして１０組）に対応して、ベクトルレジスタファイルから４個の要素を１組にして１０組用いられ、各要素は、例えば、それぞれ３２ビットのビット幅を有する。ただし、３２ビットのビット幅に限定がある訳ではなく、ソースレジスタおよびデスティネーションレジスタのそれぞれは、８ビット、１６ビット等であってもよい。また、上述のように、図２９に例示されたＣＬＳ[0:39]は、４０ビットの信号線である。ただし、４０ビットの信号線からの信号を受けるレジスタが設けられてもよい。そして、ソースレジスタおよびデスティネーションレジスタのそれぞれは、ビット位置指定信号（Ｎ＝０、４、・・・、３６）によりアクセスされる４個の要素が１組指定され、４個並列にアクセスされる。また、ＣＬＳについては、例えば、ビット位置指定信号（Ｎ）のとき、CLS[N]、 CLS[N+1]、CLS[N+2]、 CLS[N+3]の４つの信号が並列にアクセスされる。したがって、Bit Population Count回路ＢＰＣ０からＢＰＣ４および４個の加算器１０８Ａは、１０回の統計情報取得命令（cls_cnt）の実行で、ＣＬＳ０
からＣＬＳ７の各ビットを合計し、ベクトルレジスタファイルVregの１０組それぞれの４個の要素に格納する。以上の結果、ベクトルレジスタファイルVregには、ベクトル演算用のアキュムレータレジスタ  ＡＣＣ０からＡＣＣ７における非符号となる最上位ビット位置の分布が格納される。４個の加算器１０８Ａは、ビット位置指定信号（Ｎ＝０、４、・・・、３６）の変更にしたがってフラグビットを積算する。したがって、４個の加算器１０８Ａは、加算されたフラグビットをそれぞれのビット位置毎に積算する積算回路の一例である。したがって、図３３で後述するように、４個の加算器１０８Ａは、統計情報取得命令（cls_cnt）にしたがって、上記積算を実行する。ここで、加算器１０８Ａは、既存
の積和演算命令（mac）あるいは加算命令等によって実行される演算回路である。したが
って、上記積算回路は、演算命令で用いられる加算回路１０８Ａにより前記フラグビットをそれぞれのビット位置毎に積算するといえる。
【００８９】
さらに、処理部１０Ａは、ベクトルレジスタファイルに保存された統計情報を、ストア命令等の既存命令によってデータ用メモリ２２に保存すればよい。Ｈｏｓｔ  ＣＰＵ５０２または制御ＣＰＵ５０３は、データ用メモリ２２に保存された統計情報を、深層学習等を実行するアプリケーションプログラムに引き渡せばよい。
【００９０】
なお、図２９で、セレクタ１０７には、Bit Population Count回路ＢＰＣ０からＢＰＣ3からの出力と、他のパスからの出力が入力される。したがって、デコーダ１１２（図２
８）のデコード結果にしたがって、セレクタ１０７による選択を制御することで、既存の加算命令による加算器１０８Ａでの加算と、統計情報取得命令による1-hot-vector converter  ＨＶＣ０からＨＶＣ７による変換処理およびPopulation Count回路ＢＰＣ０からＢＰＣ４による処理を介して取得される統計情報の積算と、を切り替えて実行できる。すなわち、実施形態２の処理部１０Ａは、実施形態１とは異なり、処理部１０Ａの既存命令、例えば、加算命令等で使用される既存のレジスタ、バス、および演算器等を用いて統計情報を取得できる。すなわち、統計情報取得命令による1-hot-vector converter  ＨＶＣ０からＨＶＣ７による変換処理およびPopulation Count回路ＢＰＣ０からＢＰＣ3による処
理を介して取得される統計情報の積算は、取得回路による統計情報の取得ということができる。また、加算器１０８Ａからデスティネーションレジスタ（ベクトルレジスタファイルVregの要素）に至る回路は既存の積和演算命令（mac命令という）、あるいは加算命令
を実行する演算回路の一例ということができる。ベクトルレジスタファイルVregの要素は、既存の演算命令の結果を出力するレジスタということができる。したがって、1-hot-vector converter  ＨＶＣ０からＨＶＣ７による変換処理、Population Count回路ＢＰＣ０からＢＰＣ３、加算器１０８Ａ、およびベクトルレジスタファイルを含む回路は、既存命令に対応する演算回路と取得命令にしたがって実行される取得回路とが少なくとも１つの共通の演算器または少なくとも１つの共通のレジスタを有している構成の一例ということができる。
【００９１】
図３３に例示するように、アセンブリ言語等のプログラムから指定される取得命令にしたがって、1-hot-vector converter  ＨＶＣ０からＨＶＣ７、Population Count回路ＢＰＣ０からＢＰＣ３、及び４個の加算器１０８Ａが起動される。そして、加算器１０８Ａは、統計情報を取得し、取得命令で指定される汎用のベクトルレジスタファイルvRegの要素に統計情報を出力する。また、加算器１０８Ａと汎用のベクトルレジスタファイルvRegとは、積和演算（mac）、加算(add)等の演算命令にしたがって演算を実行する演算回路の一例である。なお、図２８のベクトルユニット、スカラユニット１４、既存命令の演算器１０８も演算器の一例である。1-hot-vector converter  ＨＶＣ０からＨＶＣ７、Population Count回路ＢＰＣ０からＢＰＣ３、及び４個の加算器１０８Ａは、取得回路に含まれる演算回路の一例である。なお、積和演算、加算等の既存の演算命令、および取得命令は、いずれもデコーダ１１２でデコードされ、処理部１０Ａで実行される。
【００９２】
図３０は、非符号となる最上位ビットの分布に代えて、非符号となる最上位ビットからビット０までをビット１に設定したビット列（以下、非符号となる最上位ビットの累積分布と呼ぶ）を取得する回路の詳細構成例である。図３０の回路も、取得回路の一例である。図３０は、図２９の1-hot-vector converter  ＨＶＣ０からＨＶＣ７に代えて、累積分布生成回路（1-hot-vector converter + copy）ＨＶＣＣ０からＨＶＣＣ７を有する点で
図２９と相違する。
【００９３】
図３１に、累積分布生成回路の構成を例示する。図のように、累積分布生成回路は、符号ビット（bit[39]）と、ビット３８（bit[38]）からビット０(bit[0])の排他論理和を実行する３９桁分の排他論理和回路（ＸＯＲ）と、ビット３７(bit[37])以下のビットにつ
いて、上位ビットとのＯＲ演算を実行する３８桁分のＯＲ回路(or)とを有する。図３１の回路により、ビット３９からビットｋ＋１までが０で、ビットｋにおいて１となるデータについては、出力ビット（output[38]〜output[0]）のうち、ビットｋ＋１以上（output[38]からoutput[k+1]）は０が設定され、ビットｋ以下（output[k]からoutput[0]）は１に設定される。また、図３１の回路で、最上位ビットに対応する出力ビットは０固定である。以上によって、非符号となる最上位ビット以下Least Significant Bit（ＬＳＢ）まで
の範囲に対応するビット位置にフラグビット”1”を設定する処理がハードウェアで実行
される。したがって、図２９の構成に代えて、図３０の構成を用いることで、非符号となる最上位ビット以下ＬＳＢまでの範囲に対応するビット位置にフラグビット”1”が設定
された、累積分布と呼ばれる統計情報を収集することができる。処理部１０Ａは、図３０の構成においても、図２９と同様、処理部１０Ａの既存命令、例えば、加算命令等で使用される既存のレジスタ、バス、および演算器等を用いて統計情報を取得できる。
【００９４】
なお、図２９において、1-hot-vector converterとして、非符号となる最下位ビットの位置に１を出力する回路を用いることで、処理部１０Ａは、非符号となる最下位ビットの統計情報を図２９と同様に取得できることは明らかである。また、図３０において、累積分布生成回路として、非符号となる最下位ビット以上Most Significant Bit (ＭＳＢ)ま
での範囲に対応するビット位置にフラグビット”1”を設定した累積分布による統計情報
を取得できることは明らかである。
＜アセンブリイメージ＞
【００９５】
図３２に、実施形態１で説明したプロセッサ１０で統計情報を取得するアセンブリ言語によるプログラムのイメージを例示する。また、図３２には、ベクトルレジスタファイルのベクトルレジスタvRegの構成も記載されている。ベクトルレジスタvReg[addr]は、各アドレスaddrにおいて、１２８ビットであり、16-bit x 8-wayまたは32-bit x 4-wayでアクセスされる。
【００９６】
図では、まず、ベクトルデータをロードするvls命令によって、アドレスレジスタa[0]
で指定される係数ベクトルがベクトルレジスタvReg[11]にロードされる。そして、アドレスレジスタa[1]を変数iでインクリメントしながら、ベクトルデータがベクトルレジスタvReg[11]にロードされる。そして、積和演算macが、ベクトルレジスタvReg[10]とvReg[11]との間で、インデックスｉを１から４０９５まで変更して実行される。
【００９７】
ここで、mac命令の末尾のパラメータは、０が統計情報取得なしを指示し、１が統計情
報取得ありを指示する。したがって、図３２のプログラム例では、４０９５回の統計情報取得なしの積和演算の後の積和演算macで統計情報が取得される。実施形態１のプロセッ
サ１０の場合には、既存命令のパスとは独立のハードウェアで統計情報が取得されるため、命令の末尾のパラメータで計情報取得あり、なしを指示し、１命令で統計情報を取得できる。なお、図３２の最後の命令は、ベクタストア命令であり、積和演算の結果がアドレスレジスタa[2]で指定されるデータ用メモリ２２のアドレスに格納される。
【００９８】
図３３に、実施形態２の処理部１０Ａで統計情報を取得するアセンブリ言語によるプログラムのイメージを例示する。図のように、ベクトルデータのロードするvls命令、積和
演算macの処理は、図３２と同様である。ただし、実施形態２の処理部１０Ａでは、積和
演算を実行するmac命令のパラメータで統計情報取得の有無を指定する訳ではない。すな
わち、実施形態２の処理部１０Ａでは、mac命令と並列に統計情報の取得が実行されるの
ではなく、mac命令の終了後、統計情報取得命令cls_cntの実行により、図２９、図３０で説明したように、４ビット並列にCLS[0]からCLS[39]の統計情報が、例えば、32-bit x 4-wayのベクトルレジスタvReg[0]からvReg[9]に格納される。
【００９９】
図３３には、cls_cntの命令フォーマットも例示されている。cls_cntの命令フォーマットは、cls_cnt  cnt（ビット位置指定Ｎ）、src(ソースレジスタ)、dst(デェスティネー
ションレジスタ)である。ここで、実施形態２では、cnt（ビット位置指定Ｎ）は、図２９、図３０で説明したＣＬＳ０からＣＬＳ７内のビット位置を４ビットずつずらして指定する。cls_cntは、固定小数点数データ中のビットの分布中で取得対象のビット部分を指定
可能である命令の一例と言える。
【０１００】
したがって，実施形態２の処理部１０Ａでは、例えば、積和演算の終了後、４０ビットのＣＬＳ０からＣＬＳ７に対して、１０回の統計情報取得命令cls_cntが実行される。た
だし、実施形態２の統計情報取得処理を実行する演算回路が４ビット並列の回路に限定される訳ではない。統計情報取得処理を実行する演算回路は、２ビット並列、８ビット並列、１６ビット並列の回路であってもよい。
＜統計情報取得命令の実行タイムチャート＞
【０１０１】
図３４に、実施形態１のプロセッサ１０における積和演算命令と統計情報取得処理の実行タイムチャートを例示する。図で、１つの枠がクロックサイクル（ＣＬＯＣＫ）に対応している。実施形態１のプロセッサ１０では、命令フェッチの後、デコードと並列に、レジスタからのデータ読み出しおよび統計情報のレジスタからの読み出しが実行される。そして、積和演算命令（mac）の実行後、統計情報が１クロックサイクルで取得され、積和
演算結果のレジスタへの書込と並列に統計情報がレジスタに格納される。
【０１０２】
図３５に、実施形態２の処理部１０Ａにおける積和演算命令と統計情報取得処理の実行タイムチャートを例示する。実施形態２の処理部１０Ａでは、積和演算命令（mac）の命
令フェッチからレジスタ書込までが完了後、統計情報取得命令cls_cntの命令フェッチ、
命令のデコードとレジスタからのデータ読み出し、統計情報取得、およびレジスタへの書込が実行される。なお、cls_cnt命令で統計情報を取得する対象は直前mac命令の演算結果のため、レジスタ・バイパスを用いて参照する。ただし、実施形態２の処理部１０Ａでは、統計情報取得命令cls_cntは、例えば、オペランドのビット位置指定（Ｎ）で指定され
るビット位置での４ビット分の処理であるため、４０ビットの統計情報を取得するには、命令が１０回実行されることになる。
＜実施形態２の効果＞
【０１０３】
以上述べたように、実施形態２の処理部１０Ａは、例えば、ベクトルユニット１３による固定小数点数データについての演算結果が出力されるベクトル演算用のアキュムレータレジスタ  ＡＣＣ０からＡＣＣ７から、固定小数点数データ中のビットの分布についての統計情報を取得する。取得された統計情報は、汎用レジスタであるvRegに出力される。したがって、処理部１０Ａは、既存の演算命令と少なくとも一部の回路を共通にして統計情報を取得できるので、回路規模を削減して統計情報を取得できる。
【０１０４】
また、処理部１０Ａは、統計情報取得命令により1-hot-vector converter  ＨＶＣ０からＨＶＣ７、Population Count回路ＢＰＣ０からＢＰＣ３、加算器１０８Ｆにより、既存の演算命令を実行する回路と少なくとも一部の回路を共通にして統計情報を取得できるので、回路規模を削減して統計情報を取得できる。
【０１０５】
ここで、既存の加算器１０８Ａは、デコーダ１１２の加算命令により加算を実行する回路である。したがって、実施形態２においては、統計情報取得部１０２は、既存の命令を実行するための既存のレジスタ、バス、および演算器等を用いて処理を実行する。このため、実施形態２の処理部１０Ａは、実施形態１のプロセッサ１０と比較して、簡素な回路構成で統計情報を取得し、集約できる。
【０１０６】
より具体的には、Bit Population Count回路ＢＰＣ０からＢＰＣ３は、ベクトル演算用の演算器１３１での演算結果をベクトル演算用のアキュムレータレジスタ  ＡＣＣ０からＡＣＣ７を介して取得し、統計情報（符号ビットと異なる値となる最上位のビット位置等）をビット位置ごとに加算して統計情報の分布を生成する。そして、既存の加算器１０８Ａは、生成された統計情報の各ビットをデスティネーションレジスタに累積する。このため、実施形態２の処理部１０Ａは、実施形態１のプロセッサ１０と比較して、簡素な回路構成で統計情報を累積できる。
【０１０７】
ここで、ビットの分布についての統計情報としては、例えば、符号ビットと異なる値（非符号のビット）となる最上位のビット位置の分布、符号ビットと異なる値となる最上位ビットの位置からビット０（ＬＳＢ）までをビット１に設定したビット列の分布（累積分布）が例示される。さらに、統計情報としては、符号ビットと異なる値となる最下位ビットの分布、符号ビットと異なる値となる最下位ビットの位置からから最上位ビット（ＭＳＢ）までをビット１に設定したビット列の分布（累積分布）が例示される。したがって、処理部１０Ａは、オーバーフロー回数、アンダーフロー回数等の統計情報を取得できる。
【０１０８】
そして、処理部１０Ａが符号ビットと異なる値となる最上位のビット位置の分布を取得する場合には、オーバーフロー回数の発生とアンダーフロー回数の発生を適切に制御できる。
【０１０９】
また、処理部１０Ａが符号ビットと異なる値となる最上位のビット位置の累積分布を取得する場合にも、オーバーフロー回数とアンダーフロー回数の発生を適切に制御できる。
【０１１０】
実施形態２の処理部１０Ａおよび処理部１０Ａを複数有する情報処理装置１Ａは、実施形態１のプロセッサ１０およびプロセッサ１０を有する情報処理装置１と同様、統計情報を少なくとも１回のベクトル演算において、統計情報取得命令で取得し、アプリケーションプログラムに提供できる。したがって、深層学習を実行する情報処理装置１Ａは、取得した統計情報を基に迅速、早期にデータ変換部１０３において、固定小数点位置を調整できる。
【０１１１】
累積分布の各桁が表すサンプル数は、最上位桁（ＭＳＢ）からその桁までの累積サンプル数である。このため、情報処理装置１Ａは、２進数で一桁分のサンプル数情報とその桁位置情報を転送するだけで、累積分布全体に対する分布の割合を算出できる。累積分布全体に対する分布の割合を算出するためには、分母となる累積分布全体の総サンプル数が要求される。しかしながら、累積分布全体の総サンプル数は、回路構成から既知となる。例えば、処理部１０Ａ内で１回のベクトル演算では、ベクトル演算器の並列数だけ演算が実行される。したがって、１回のベクトル演算当りの総サンプル数は、ベクトル演算器の並列数となる。
【０１１２】
仮に、累積分布全体のサンプル数に、スカラ演算も含める場合には、累積分布の集計対象である各演算器の回数分を積算すればよい。したがって、各処理部１０Ａにおいては、演算回路の構造から、累積分布全体に対する分布の割合（Ａ％）を算出し、分布の割合が所定の閾値（所定のオーバーフロー率等）を越えた桁でのサンプル数を上位装置、例えば、Ｈｏｓｔ  ＣＰＵ５０２、制御ＣＰＵ５０３等に転送すればよい。Ｈｏｓｔ  ＣＰＵ５０２、制御ＣＰＵ５０３等は、処理部１０Ａから転送された桁のサンプル数を基に、情報処理装置１Ａ全体で、各変数の小数点位置を調整すればよい。各変数の小数点位置を調整の仕方は、実施形態１の図２４と同様である。
【０１１３】
また、実施形態２においては、統計情報取得部１０２は、統計情報取得命令にしたがって処理を実行する。統計情報取得命令は、固定小数点数データ中のビット部分を指定され、指定されるビット部分の統計情報をレジスタに格納する。処理部１０Ａを制御する上位装置のプログラムは、統計情報取得命令において、統計情報中のビット分を選択して取得できる。
【０１１４】
また、実施形態２においては、情報処理装置１Ａは、Ｈｏｓｔ  ＣＰＵ５０２および制御ＣＰＵ５０３と、複数の処理部１０Ａを有する。Ｈｏｓｔ  ＣＰＵ５０２および制御ＣＰＵ５０３の少なくとも一方は、制御装置として処理の実行を指示する。このため、情報
処理装置１Ａは、実施形態１よりも複雑な処理を高速に実行できる。
【０１１５】
［コンピュータが読み取り可能な記録媒体］
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１１６】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コンピュータ
等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１１７】
１    情報処理装置
１０    プロセッサ
１１    制御ユニット
１２    レジスタファイル
１３    ベクトルユニット
１４    スカラユニット
２１    命令用メモリ
２２    データ用メモリ
１０１    セレクタ
１０２    統計情報取得部
１０３    データ変換部
１０４    統計情報集約部
１０５    統計情報格納部
１０７    セレクタ
１０８Ａ  加算器
１１１    プログラムカウンタ
１１２    デコーダ
１３１    ベクトル演算用の演算器
１３２    積和演算用のアキュムレータ
１４１    スカラ用の演算器
５０２    Ｈｏｓｔ  ＣＰＵ
５０３    制御ＣＰＵ
ＡＣＣ０〜ＡＣＣ７  ベクトル演算用アキュムレータレジスタ
ＢＰＣ０〜ＢＰＣ４  Bit Population Count回路
ＨＶＣ０〜ＨＶＣ７  1-hot-vector converter
【図１】
2019148972.tif 000003
【図２】
2019148972.tif 000004
【図３】
2019148972.tif 000005
【図４】
2019148972.tif 000006
【図５】
2019148972.tif 000007
【図６】
2019148972.tif 000008
【図７】
2019148972.tif 000009
【図８】
2019148972.tif 000010
【図９】
2019148972.tif 000011
【図１０】
2019148972.tif 000012
【図１１】
2019148972.tif 000013
【図１２】
2019148972.tif 000014
【図１３】
2019148972.tif 000015
【図１４】
2019148972.tif 000016
【図１５】
2019148972.tif 000017
【図１６】
2019148972.tif 000018
【図１７】
2019148972.tif 000019
【図１８】
2019148972.tif 000020
【図１９】
2019148972.tif 000021
【図２０】
2019148972.tif 000022
【図２１】
2019148972.tif 000023
【図２２】
2019148972.tif 000024
【図２３】
2019148972.tif 000025
【図２４】
2019148972.tif 000026
【図２５】
2019148972.tif 000027
【図２６】
2019148972.tif 000028
【図２７】
2019148972.tif 000029
【図２８】
2019148972.tif 000030
【図２９】
2019148972.tif 000031
【図３０】
2019148972.tif 000032
【図３１】
2019148972.tif 000033
【図３２】
2019148972.tif 000034
【図３３】
2019148972.tif 000035
【図３４】
2019148972.tif 000036
【図３５】
2019148972.tif 000037
【手続補正書】
【提出日】平成30年12月11日(2018.12.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算命令にしたがって演算を実行する演算回路と、
前記演算回路による演算結果を格納するレジスタと、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、
を備え、
前記取得命令は、前記統計情報の格納先として前記レジスタを指定し、
前記取得命令で指定される前記レジスタに前記統計情報が格納され、
前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジが前記統計情報に基づいて特定される演算処理装置。
【請求項２】
前記演算回路と前記取得回路とが、少なくとも１つの共通の演算器を用いて、前記演算および前記統計情報の前記取得をそれぞれ実行する請求項１に記載の演算処理装置。
【請求項３】
前記取得回路は、前記複数の第１固定小数点数データに関し、前記最上位ビットまたは前記最下位ビットの位置にフラグビットを設定する回路を有する請求項１または２に記載の演算処理装置。
【請求項４】
前記取得回路は、前記複数の第１固定小数点数データに関し、前記最上位ビットの位置および前記最上位ビットよりも下位のビット位置、または前記最下位ビットの位置および前記最下位ビットよりも上位のビット位置にフラグビットを設定する回路を有する請求項１または２に記載の演算処理装置。
【請求項５】
前記取得回路は、
前記演算回路による演算結果である前記複数の第１固定小数点数データに関して設定された前記フラグビットをそれぞれのビット位置毎に加算する加算回路を有し、
前記加算回路は、前記演算命令に基づく前記演算において使用される請求項３または４に記載の演算処理装置。
【請求項６】
前記取得命令は、前記複数の第１固定小数点数データ中のビットのうち特定のビットを指定し、
前記取得回路は、指定された前記特定のビットに基づいて、前記統計情報を取得する請求項１から５のいずれか１項に記載の演算処理装置。
【請求項７】
前記統計情報は、積和演算結果を保持するアキュムレータ中の前記複数の第１固定小数点データの前記最上位ビットまたは前記最下位ビットの位置の分布に対する統計情報である請求項１から６のいずれか１項に記載の演算処理装置。
【請求項８】
演算命令にしたがって演算を実行する演算回路と、
前記演算回路による演算結果を格納するレジスタと、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を夫々が備える複数の演算処理装置と、
前記複数の演算処理装置に処理の実行を指示する制御装置と、を有し、
前記取得命令は、前記統計情報の格納先として前記レジスタを指定し、
前記取得命令で指定される前記レジスタに前記統計情報が格納され、
前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジが前記統計情報に基づいて特定される情報処理装置。
【請求項９】
前記演算回路と前記取得回路とが、少なくとも１つの共通の演算器を用いて、前記演算および前記統計情報の前記取得をそれぞれ実行する請求項８に記載の情報処理装置。
【請求項１０】
演算命令にしたがって演算を実行する演算回路と、前記演算回路による演算結果を格納するレジスタと、を有する情報処理装置が、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行し、
前記取得命令において前記統計情報の格納先として指定される前記レジスタに前記統計情報を格納し、
前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを前記統計情報に基づいて特定する情報処理方法。
【請求項１１】
前記演算および前記統計情報の前記取得において、前記演算命令と前記取得命令とが少なくとも１つの共通の演算器を用いてそれぞれ実行される請求項１０に記載の情報処理方法。
【請求項１２】
演算命令にしたがって演算を実行する演算回路と、前記演算回路による演算結果を格納するレジスタと、を有する情報処理装置に、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行し、
前記取得命令において前記統計情報の格納先として指定される前記レジスタに前記統計情報を格納し、
前記演算回路による演算実結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを前記統計情報に基づいて特定することを実行させるためのプログラム。
【請求項１３】
前記演算および前記統計情報の前記取得において、前記演算命令と前記取得命令とが少なくとも１つの共通の演算器を用いてそれぞれ実行される請求項１２に記載のプログラム。
【手続補正書】
【提出日】平成30年12月19日(2018.12.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算命令にしたがって演算を実行する演算回路と、
前記演算回路による演算結果を格納するレジスタと、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、
を備え、
前記取得命令は、前記統計情報の格納先として前記レジスタを指定し、
前記取得命令で指定される前記レジスタに前記統計情報が格納され、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジが前記統計情報に基づいて特定される演算処理装置。
【請求項２】
前記演算回路と前記取得回路とが、少なくとも１つの共通の演算器を用いて、前記演算および前記統計情報の前記取得をそれぞれ実行する請求項１に記載の演算処理装置。
【請求項３】
前記取得回路は、前記複数の第１固定小数点数データに関し、前記最上位ビットまたは前記最下位ビットの位置にフラグビットを設定する回路を有する請求項１または２に記載の演算処理装置。
【請求項４】
前記取得回路は、前記複数の第１固定小数点数データに関し、前記最上位ビットの位置および前記最上位ビットよりも下位のビット位置、または前記最下位ビットの位置および前記最下位ビットよりも上位のビット位置にフラグビットを設定する回路を有する請求項１または２に記載の演算処理装置。
【請求項５】
前記取得回路は、
前記演算回路による演算結果である前記複数の第１固定小数点数データに関して設定された前記フラグビットをそれぞれのビット位置毎に加算する加算回路を有し、
前記加算回路は、前記演算命令に基づく前記演算において使用される請求項３または４に記載の演算処理装置。
【請求項６】
前記取得命令は、前記複数の第１固定小数点数データ中のビットのうち特定のビットを指定し、
前記取得回路は、指定された前記特定のビットに基づいて、前記統計情報を取得する請求項１から５のいずれか１項に記載の演算処理装置。
【請求項７】
前記統計情報は、積和演算結果を保持するアキュムレータ中の前記複数の第１固定小数点データの前記最上位ビットまたは前記最下位ビットの位置の分布に対する統計情報である請求項１から６のいずれか１項に記載の演算処理装置。
【請求項８】
演算命令にしたがって演算を実行する演算回路と、
前記演算回路による演算結果を格納するレジスタと、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を夫々が備える複数の演算処理装置と、
前記複数の演算処理装置に処理の実行を指示する制御装置と、を有し、
前記取得命令は、前記統計情報の格納先として前記レジスタを指定し、
前記取得命令で指定される前記レジスタに前記統計情報が格納され、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジが前記統計情報に基づいて特定される情報処理装置。
【請求項９】
前記演算回路と前記取得回路とが、少なくとも１つの共通の演算器を用いて、前記演算および前記統計情報の前記取得をそれぞれ実行する請求項８に記載の情報処理装置。
【請求項１０】
演算命令にしたがって演算を実行する演算回路と、前記演算回路による演算結果を格納するレジスタと、を有する情報処理装置が、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行し、
前記取得命令において前記統計情報の格納先として指定される前記レジスタに前記統計情報を格納し、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを前記統計情報に基づいて特定する情報処理方法。
【請求項１１】
前記演算および前記統計情報の前記取得において、前記演算命令と前記取得命令とが少なくとも１つの共通の演算器を用いてそれぞれ実行される請求項１０に記載の情報処理方法。
【請求項１２】
演算命令にしたがって演算を実行する演算回路と、前記演算回路による演算結果を格納するレジスタと、を有する情報処理装置に、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の最上位ビットまたは最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行し、
前記取得命令において前記統計情報の格納先として指定される前記レジスタに前記統計情報を格納し、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタに格納する際にビット幅を制限するためのビットレンジを前記統計情報に基づいて特定することを実行させるためのプログラム。
【請求項１３】
前記演算および前記統計情報の前記取得において、前記演算命令と前記取得命令とが少なくとも１つの共通の演算器を用いてそれぞれ実行される請求項１２に記載のプログラム。
【手続補正書】
【提出日】平成31年3月29日(2019.3.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算命令にしたがって演算を実行する演算回路と、
前記演算回路による演算結果を格納するレジスタファイルと、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の非符号となる最上位ビットまたは非符号となる最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、
を備え、
前記取得命令は、前記統計情報の格納先として前記レジスタファイルの中の格納場所を指定し、
前記取得命令で指定される前記格納場所に前記統計情報が格納され、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタファイルに格納する際にビット幅を制限するためのビットレンジが前記統計情報に基づいて特定される演算処理装置。
【請求項２】
前記演算回路と前記取得回路とが、少なくとも１つの共通の演算器を用いて、前記演算および前記統計情報の前記取得をそれぞれ実行する請求項１に記載の演算処理装置。
【請求項３】
前記取得回路は、前記複数の第１固定小数点数データに関し、前記非符号となる最上位ビットまたは前記非符号となる最下位ビットの位置にフラグビットを設定する回路を有する請求項１または２に記載の演算処理装置。
【請求項４】
前記取得回路は、前記複数の第１固定小数点数データに関し、前記非符号となる最上位ビットの位置および前記非符号となる最上位ビットよりも下位のビット位置、または前記非符号となる最下位ビットの位置および前記非符号となる最下位ビットよりも上位のビット位置にフラグビットを設定する回路を有する請求項１または２に記載の演算処理装置。
【請求項５】
前記取得回路は、
前記演算回路による演算結果である前記複数の第１固定小数点数データに関して設定された前記フラグビットをそれぞれのビット位置毎に加算する加算回路を有し、
前記加算回路は、前記演算命令に基づく前記演算において使用される請求項３または４
に記載の演算処理装置。
【請求項６】
前記取得命令は、前記複数の第１固定小数点数データ中のビットのうち特定のビットを指定し、
前記取得回路は、指定された前記特定のビットに基づいて、前記統計情報を取得する請求項１から５のいずれか１項に記載の演算処理装置。
【請求項７】
前記統計情報は、積和演算結果を保持するアキュムレータ中の前記複数の第１固定小数点データの前記非符号となる最上位ビットまたは前記非符号となる最下位ビットの位置の分布に対する統計情報である請求項１から６のいずれか１項に記載の演算処理装置。
【請求項８】
演算命令にしたがって演算を実行する演算回路と、
前記演算回路による演算結果を格納するレジスタファイルと、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の非符号となる最上位ビットまたは非符号となる最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行する取得回路と、を夫々が備える複数の演算処理装置と、
前記複数の演算処理装置に処理の実行を指示する制御装置と、を有し、
前記取得命令は、前記統計情報の格納先として前記レジスタファイルの中の格納場所を指定し、
前記取得命令で指定される前記格納場所に前記統計情報が格納され、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタファイルに格納する際にビット幅を制限するためのビットレンジが前記統計情報に基づいて特定される情報処理装置。
【請求項９】
前記演算回路と前記取得回路とが、少なくとも１つの共通の演算器を用いて、前記演算および前記統計情報の前記取得をそれぞれ実行する請求項８に記載の情報処理装置。
【請求項１０】
演算命令にしたがって演算を実行する演算回路と、前記演算回路による演算結果を格納するレジスタファイルと、を有する情報処理装置が、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の非符号となる最上位ビットまたは非符号となる最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行し、
前記取得命令において前記統計情報の格納先として指定される前記レジスタファイルの中の格納場所に前記統計情報を格納し、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタファイルに格納する際にビット幅を制限するためのビットレンジを前記統計情報に基づいて特定する情報処理方法。
【請求項１１】
前記演算および前記統計情報の前記取得において、前記演算命令と前記取得命令とが少なくとも１つの共通の演算器を用いてそれぞれ実行される請求項１０に記載の情報処理方法。
【請求項１２】
演算命令にしたがって演算を実行する演算回路と、前記演算回路による演算結果を格納するレジスタファイルと、を有する情報処理装置に、
前記演算回路による演算結果である複数の第１固定小数点数データの各々の非符号となる最上位ビットまたは非符号となる最下位ビットの位置の分布についての統計情報の取得を取得命令にしたがって実行し、
前記取得命令において前記統計情報の格納先として指定される前記レジスタファイルの中の格納場所に前記統計情報を格納し、
前記演算回路による演算結果である第２固定小数点数データを前記レジスタファイルに
格納する際にビット幅を制限するためのビットレンジを前記統計情報に基づいて特定することを実行させるためのプログラム。
【請求項１３】
前記演算および前記統計情報の前記取得において、前記演算命令と前記取得命令とが少なくとも１つの共通の演算器を用いてそれぞれ実行される請求項１２に記載のプログラム。