(57)【要約】【課題】深層学習等による演算を精度よく実行するとともに回路規模と消費電力を削減できるようにすることである。【解決手段】情報処理装置は、演算処理部で実行されるプログラムを生成する。演算処理部は、演算結果の値の分布を含む統計情報を取得可能である。情報処理装置は、演算処理部での演算で取得される統計情報のサンプル数が基準値より多いと判断した場合には、演算の対象データに使用可能なデータ型のうち、表現可能な値の最小値に対する最大値の比率がより小さいデータ型を前記対象データに設定し、サンプル数が基準値より少ないと判断した場合には、比率がより大きいデータ型を対象データに設定して、プログラムを生成する生成部を備える。【選択図】図３５
2019139338.tif 000002
【特許請求の範囲】
【請求項１】
演算処理部で実行されるプログラムを生成する情報処理装置であって、前記演算処理部
は、演算結果の値の分布を含む統計情報を取得可能であり、
前記情報処理装置は、前記演算処理部での演算で取得される統計情報のサンプル数が基準値より多いと判断した場合、前記演算の対象データに使用可能なデータ型のうち、表現可能な値の最小値に対する最大値の比率がより小さいデータ型を前記対象データに設定し、前記サンプル数が前記基準値より少ないと判断した場合には、前記比率がより大きいデータ型を前記対象データに設定して、プログラムを生成する生成部を備える情報処理装置。
【請求項２】
前記演算処理部は、固定小数点数の演算および浮動小数点数の演算の少なくとも一方を実行し、
前記生成部は、前記サンプル数が前記基準値より多いと判断した場合、固定小数点数のデータ型を前記対象データに設定し、前記サンプル数が前記基準値より少ないと判断した場合、浮動小数点数のデータ型を前記対象データに設定する請求項１に記載の情報処理装置。
【請求項３】
前記プログラムは複数階層のニューラルネットワークによる処理を実行するものであり、
前記ニューラルネットワークを定義する定義情報から前記ニューラルネットワークの各層における演算回数を取得する第１の取得部と、
前記ニューラルネットワークの各層における演算回数と前記演算処理部における演算回数に対する前記統計情報の取得割合とを基に前記統計情報のサンプル数を取得する第２の取得部と、をさらに備える請求項１または２に記載の情報処理装置。
【請求項４】
前記演算処理部による演算に基づき、前記基準値を決定する決定部をさらに備える請求項１から３のいずれか１項に記載の情報処理装置。
【請求項５】
前記決定部は、浮動小数点数を用いて深層学習を実行したときの学習誤差と、固定小数点数を用いて深層学習を実行したときの学習誤差との差に基づいて前記基準値を決定する請求項４に記載の情報処理装置。
【請求項６】
前記決定部は、所定の限定された回数の深層学習によって前記差を取得する請求項５に記載の情報処理装置。
【請求項７】
前記情報処理装置が前記演算処理部を有し、前記生成部の処理が前記演算処理部で実行される請求項１から６のいずれか１項に記載の情報処理装置。
【請求項８】
前記生成部の処理が前記演算処理部とは異なるプロセッサで実行される請求項１から６のいずれか１項に記載の情報処理装置。
【請求項９】
演算処理部で実行されるプログラムを生成する情報処理装置が実行する情報処理方法であって、前記演算処理部は、演算結果の値の分布を含む統計情報を取得可能であり、前記情報処理装置が、
前記演算処理部での演算で取得される統計情報のサンプル数が基準値より多いと判断した場合、前記演算の対象データに使用可能なデータ型のうち、表現可能な値の最小値に対する最大値の比率がより小さいデータ型を前記対象データに設定し、前記サンプル数が前記基準値より少ないと判断した場合、前記比率がより大きいデータ型を前記対象データに設定して、プログラムを生成する情報処理方法。
【請求項１０】
演算処理部で実行されるプログラムを生成する情報処理装置に実行させるプログラムであって、前記演算処理部は、演算結果の値の分布を含む統計情報を取得可能であり、前記情報処理装置に、
前記演算処理部での演算で取得される統計情報のサンプル数が基準値より多いと判断した場合、前記演算の対象データに使用可能なデータ型のうち、表現可能な値の最小値に対する最大値の比率がより小さいデータ型を前記対象データに設定し、前記サンプル数が前記基準値より少ないと判断した場合、前記比率がより大きいデータ型を前記対象データに設定して、プログラムを生成することを実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
今日、人工知能を用いた機械学習のうち、特に深層学習（ＤＬ）へのニーズが高まっている。深層学習は、多層ニューラルネットワーク（ＤＮＮ）を用いた機械学習の手法ということができる。図１は、ニューラルネットワークの構成を例示する図である。ニューラルネットワークは、神経細胞（ニューロン）をコンピュータ上にモデル化したものである。神経細胞は、細胞体と、他の細胞体から入力される信号を受ける樹状突起と、他の細胞体に信号を出力する軸索とを有する。また、信号を出力する軸索の末端と信号を受ける樹状突起との間にはシナプスと呼ばれる信号の伝達構造が形成されている。ニューラルネットワークでは、神経細胞間でのシナプスを介した情報伝達がモデル化されている。
【０００３】
ニューラルネットワーク全体は一つの関数になっている。ニューラルネットワークにある入力が与えられれば、ニューラルネットワークは、与えられた入力にしたがって決まった値を出力する。ニューラルネットワークが既存のプログラムと異なるところは、ある入力に対する目的の値（教師信号）が与えられれば、与えられた目的の値に合わせて出力する値を目的に近づけるように調整することができる点である。すなわち、ニューラルネットワークには内部に多数のパラメータが存在する。ニューラルネットワークは、内部に存在するパラメータの値を調整することにより、目的とする関数の形を実現していくことになる。
【０００４】
多層ニューラルネットワークは複数の階層から構成されている。それぞれの階層で行う計算の内容は異なっているが、おおよそ次のいずれかの演算に大別される。すなわち、多層ニューラルネットワークの演算としては、（ａ）畳み込み（Convolution）演算、（ｂ
）フルコネクト（FullConnect）演算（内積演算ともいう）、（ｃ）ReLU（ランプ関数）
演算（活性化演算ともいう）、（ｄ）プーリング（Pooling）演算、（ｅ）ソフトマック
ス（Softmax）演算、（ｆ）誤差評価演算が例示される。
【０００５】
例えば、画像分類の場合、初めのいくつかの層は畳み込み、ReLU、Pooling演算を行い
、上位の層がフルコネクト、ReLUの演算を行う。最後の層がソフトマックス演算を行って入力画像に対する分類カテゴリの確率を出力する。ニューラルネットワークの計算のうち、支配的になるのが畳み込み演算とフルコネクト演算である。
【０００６】
図２に、ニューラルネットワークにおける畳み込み演算の処理を例示する。畳み込み演算はフィルタ演算とも呼ばれ、主に画像データに対して実行される。演算は、入力パラメータＸ（ベクトル）の要素と、重みＷ（ベクトル）の要素の積和演算Σｘｗである。入力・出力のすべてのチャネルの組み合わせに対しフィルタが用意されている。畳み込み演算はすべての入力チャネルの結果の合計にバイアスを加えて出力値Ｚとしている。
【０００７】
図３に、フルコネクト演算の処理を例示する。フルコネクト演算は内積演算とも呼ばれる。フルコネクト演算では、入力、出力すべての組に対し重みが定義されている。フルコネクト演算は、すべての入力Ｘ｛ｘ０、ｘ１、・・・、ｘｃ｝とその重みＷ｛ｗ００、・・・、ｗｃｄ｝の積和演算を実行し、積和演算結果にバイアスｂ｛ｂ０、ｂ１、・・・、ｂｄ｝を加えて出力値Ｚ｛ｚ０、ｚ１、・・・、ｚｄ｝としている。
【０００８】
多層ニューラルネットワークでは、深層学習が実行される。そして、深層学習が実行さ
れる多層ニューラルネットワークの認識性能を高めるため、多層ニューラルネットワークが大規模化される傾向にある。例えば、多層ニューラルネットワークで処理されるパラメータ数は、数百万から１億数千万にも及ぶ。多層ニューラルネットワークが人の脳に近づくためには、究極的に、パラメータ数は１千数百億にも及ぶと考えられる。したがって、今後、深層学習における学習データは増加し、多層ニューラルネットワークにおける計算負荷、メモリ負荷が増大することが予想される。そのため、増え続ける学習データに対して、認識性能と学習効率の改善が望まれている。認識性能と学習効率を改善し、負荷を軽減するため、多層ニューラルネットワークが軽量化されることが望ましい。
【０００９】
ところで、深層学習においては、乗算、積和演算、ベクトル乗算を含む様々な演算が実行される。ただし、深層学習では、個々の演算精度への要求は、通常の演算処理ほど厳密ではない。例えば、通常の演算処理等では、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。深層学習では、複数の入力データを畳み込み演算するときの係数（重み）の調整が主な処理となり、入力データのうち、極端なデータは重視されないことが多いからである。また、大量のデータを繰り返し用いて係数を調整するため、一度飽和された値も、学習の進行に合わせて桁調整を行なうことで、飽和されずに係数の調整に反映できるようになるためである。
そこで、このような深層学習の特性を考慮し、深層学習用の演算処理装置のチップ面積の削減、電力効率の向上等を図るため、浮動小数点数を用いないで、固定小数点数による演算を用いることが考えられる。浮動小数点数演算よりも固定小数点演算の方が回路構成を簡素にできるからである。
【００１０】
図４にデータ表現に用いるビットの構成を例示する。３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数のように、深層学習で処理するデータ（重みとパラメータ）のデータ表現に用いるビット幅を縮小することで、多層ニューラルネットワークで扱うデータ量を削減できる。扱うデータ量が削減されることで、深層学習の処理量が削減され、学習時間が短縮されることが期待できる。
【００１１】
しかしながら、固定小数点数は、取りうる値のダイナミックレンジが狭いので、浮動小数点数より演算精度が劣化する場合がある。図５に、３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する。図では、「固定小数点数」が「整数」と記述されている。固定小数点数が整数に限定される訳ではない。固定小数点数は２進整数とも理解できるので、本明細書中では、固定小数点数を整数という場合がある。図のように、ビット幅を削減すると演算精度が低下することが予測される。演算精度が低下すると、深層学習がうまく実施できない場合もあり得る。すなわち、深層学習では、フォーワッド方向およびバックワード方向に積和演算が多数回繰り返され、演算結果が固定小数点数のダイナミックレンジを超えてしまうこともあるからである。そこで、演算精度を改善する技術により、ビット幅を削減することに起因する上記課題を克服することが望まれる。このため、固定小数点数を拡張した技術が提案されている。
【００１２】
例えば、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の演算子による演算結果から、正数最上位のビット１の位置（負数で最上位のビット０の位置）がレジスタに記録される。
【００１６】
なお、非特許文献１によるDynamic Fixed Point数による処理では、演算または変数の
代入ごとに、オーバーフローの有無を記録し、オーバーフロー率（全演算回数に対するオーバーフローした演算の回数、全代入回数に対するオーバーフローした代入回数等）が算出される。そして、この処理では、所定の期間ごとに、各変数の小数点位置を以下の手順１、２で変更する。
（手順１）オーバーフロー率が規定値（ｒｍａｘ）より大きい場合、小数点位置を１つ下げる。
（手順２）オーバーフロー率の２倍の値が規定値（ｒｍａｘ）以下の場合、小数点位置を１つ上げる。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開平７−８４９７５号公報
【非特許文献】
【００１８】
【非特許文献１】Courbariaux et al.， "TRAINING DEEP NEURAL NETWORKS WITH LOW PRECISION MULTIPLICATIONS" Accepted as a workshop contribution at ICLR 2015, International Conference on Learning Representations(ICLR)，2015年9月23日
【発明の概要】
【発明が解決しようとする課題】
【００１９】
上記従来の技術においては、オーバーフロー率を基に小数点位置を1ビットずつ調整す
るため学習精度が劣化する。例えば、ｋ個のデータの学習ごとに小数点位置を調整する場合、小数点位置が適正位置からn ビットずれている場合、小数点位置が適切な位置に調整されるまでに、(n * k)回の学習が進む。その結果、小数点位置が適正な位置になるまで
に、飽和するデータやアンダーフローするデータが増え、学習が収束しない、あるいは、学習精度の劣化につながるおそれがある。
１つの側面では本発明の目的は、深層学習等による演算を精度よく実行するとともに回路規模と消費電力を削減できるようにすることである。
【課題を解決するための手段】
【００２０】
開示の技術の一側面は、演算処理部で実行されるプログラムを生成する情報処理装置によって例示される。この演算処理部は、演算結果の値の分布を含む統計情報を取得可能である。本情報処理装置は、前記演算処理部での演算で取得される統計情報のサンプル数が基準値より多いと判断した場合には、前記演算の対象データに使用可能なデータ型のうち、表現可能な値の最小値に対する最大値の比率がより小さいデータ型を前記対象データに設定し、前記サンプル数が基準値より少ないと判断した場合には、前記比率がより大きいデータ型を前記対象データに設定して、プログラムを生成する生成部を備える。
【発明の効果】
【００２１】
本情報処理装置によれば、深層学習等による演算を精度よく実行するとともに回路規模と消費電力を削減できる。
【図面の簡単な説明】
【００２２】
【図１】ニューラルネットワークの構成を例示する図である。
【図２】ニューラルネットワークにおける畳み込み演算の処理を例示する図である。
【図３】フルコネクト演算の処理を例示する図である。
【図４】データ表現に用いるビットの構成を例示する図である。
【図５】３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する図である。
【図６】非符号となる最上位ビット位置の分布データを例示する図である。
【図７】プロセッサの構成を例示する図である。
【図８】プロセッサの回路ブロックを例示する図である。
【図９】ベクトルユニットの詳細を例示する図である。
【図１０】スカラユニットの構成を例示する図である。
【図１１】非符号最上位ビット位置を検出する統計情報取得部の真理値表を例示する図である。
【図１２】非符号となる最上位ビット位置を取得する統計情報取得部のハードウェア回路の構成を例示する図である。
【図１３】非符号最下位ビット位置を検出する統計情報取得部の真理値表を例示する図である。
【図１４】非符号となる最下位ビット位置を取得する統計情報取得部のハードウェア回路の構成を例示する図である。
【図１５】統計情報集約部の処理を例示する図である。
【図１６】統計情報集約部のハードウェア回路の構成を例示する図である。
【図１７】統計情報集約部の処理を例示する図である。
【図１８】統計情報集約部のハードウェア回路の構成を例示する図である。
【図１９】統計情報集約部の具体的な構成例である。
【図２０】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２１】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２２】学習ネットワークによる学習結果の例である。
【図２３】実施形態２に係る情報処理システムの構成を例示する図である。
【図２４】深層学習を実行するときのモジュールの構成を例示する図である。
【図２５】ホストマシンの構成を例示する図である。
【図２６】ＤＬ実行ハードウェアの構成を例示する図である。
【図２７】ＤＬ実行プロセッサの構成を例示する図である。
【図２８】プログラム生成に係るホストマシンの論理構成を例示する図である。
【図２９】テンプレートを例示する図である。
【図３０】ニューラルネットワーク記述データの構成を例示する図である。
【図３１】prototextにおけるtopとbottomの定義を例示する図である。
【図３２】ニューラルネットワークの入力データの定義を例示する図である。
【図３３】ニューラルネットワークの畳み込み層の定義を例示する図である。
【図３４】ニューラルネットワークのフルコネクト層の定義を例示する図である。
【図３５】実施形態２におけるプログラム生成の簡略フローを例示する図である。
【図３６】閾値決定の処理を例示する図である。
【図３７】閾値決定の処理の第１の変形を例示する図である。
【図３８】閾値決定の処理の第２の変形を例示する図である。
【図３９】プログラム生成処理を例示する図である。
【図４０】変数型決定部の処理の詳細を例示する図である。
【図４１】プログラム生成部の処理を例示する図である。
【図４２】型に合わせた型変換パラメータの設定処理を例示する図である。
【図４３】シフト幅の設定を例示する図である。
【図４４】最上位ビット位置を決定する処理を例示する図である。
【図４５】スケールファクタの決定方法を例示する図である。
【図４６】認識結果を例示する図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照して、一実施形態に係る情報処理装置について説明する。以下の実施形態の構成は例示であり、本情報処理装置は実施形態の構成には限定されない。
［実施形態１］
【００２４】
以下、図６から図２１により、実施形態１に係る情報処理装置１、情報処理装置１が実行する情報処理方法、および情報処理装置１で実行されるプログラムについて説明する。本実施形態は、一例であり、情報処理装置１は、本実施形態の構成に限定される訳ではない。
＜統計情報＞
【００２５】
本実施形態では、情報処理装置１のプロセッサが統計情報を取得することで、統計情報取得のためのプログラム中のオーバーヘッドが削減される。ここで、プロセッサが取得する統計情報は、例えば、以下のいずれか、または、これらの組み合わせをいう。情報処理装置１が実行するアプリケーションプログラムは、プロセッサから統計情報を取得することで、小数点位置を最適化する。アプリケーションプログラムの処理にしたがってプロセッサは、Dynamic Fixed Point演算のための命令を実行する。
（１）非符号となる最上位ビット位置の分布
【００２６】
図６に、非符号となる最上位ビット位置の分布データを例示する。図６は演算の途中結果が40bitで、固定小数点数の桁あわせのために14bit右シフトされるデータに対する例である。非符号となる最上位ビット位置とは、正数に対しては、ビットが１となっている最上位のビット位置をいう。また、負数に対しては、ビット０となっている最上位のビット位置をいう。非符号となる最上位ビット位置は、例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビットであるbit[0]としたとき、符号ビットbit[39]と異なるbit[k]のうち、インデックスkが最大のものをいう。非符号となる最上位ビット位置の分布が
得られると、絶対値としての値の分布範囲が把握可能となる。なお、統計情報は、演算結果の値の分布を含むものと言える。
【００２７】
図６で、縦軸は、非符号となる最上位ビット位置の出現個数であり、横軸は最上位のビットの位置 Count Leading Sign（ＣＬＳ）である。図６では、ビット０の右側に小数点
があると仮定する。本実施形態では、情報処理装置１のプロセッサの演算回路および演算回路内のレジスタは、命令のオペランドで指定されるレジスタのビット数（例えば、１６ビット）以上のビット幅（例えば、４０ビット）を有する。ただし、情報処理装置１のプロセッサの演算回路および演算回路内のレジスタのビット幅が４０ビットに限定される訳ではない。また、演算結果は、例えば、１６ビットのレジスタ等、演算回路よりも少ないビット幅のレジスタ（命令のオペランドで指定されるレジスタ）に格納される。その結果、演算結果は（例えば、４０ビット）、オペランドで指定されるシフト量でシフトし、ビット0未満に該当するビットは所定の丸め処理がなされ、オペランドで指定されるレジス
タのビット幅を越えるデータ（ビット１５を越えるデータ）は、飽和処理される。
【００２８】
また、図６の横軸に付与された数値は、固定小数点で表現可能な数値を示す。例えば、情報処理装置１がこの固定小数点数を−２ビットだけシフト（右方向に２ビットシフト）すると、最上位ビットが１４の位置にシフトし、飽和される領域が２ビット拡張され、アンダーフローが発生して0となる領域が２ビット減少する。すなわち、情報処理装置１が
小数点位置を２ビット左にシフトすると、飽和される領域が２ビット拡張され、アンダーフローが発生する領域が２ビット減少する。また、例えば、情報処理装置がこの固定小数点数を２ビットだけ正方向にシフト（左方向に２ビットシフト）すると、最上位ビットが１８の位置にシフトし、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。すなわち、情報処理装置１が小数点位置を２ビット右にシフトすると、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。
【００２９】
情報処理装置１は、学習実行中に、非符号となる最上位のビット位置の分布を得ることで、Dynamic Fixed Point演算における適正なシフト量、つまり、適切な固定小数点位置
を直ちに決定できる。例えば、情報処理装置１は、飽和されるデータが指定の割合以下になるように固定小数点位置を決定すればよい。つまり、一例としては、情報処理装置１は、データのアンダーフローが所定の程度となることよりもデータの飽和が所定の程度となること優先して、固定小数点位置を決定できる。
【００３０】
非符号となる最上位ビット位置の分布は、情報処理装置１のプロセッサ１０（図７参照）内の所定のレジスタ（統計情報レジスタともいう）内に積算される。プロセッサ１０は、当該統計情報レジスタからの分布データの読み出し、書き込み、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までに命令実行の対象となった１以上の固定小数点数についての分布データが蓄積される。蓄積された分布データは、読み出し命令によってメモリに読み出される。なお、プロセッサ１０は、クリア命令に代えて、統計情報レジスタへのロード命令の実行を可能とし、値０を統計情報レジスタにロードできるようにしてもよい。
（２）非符号となる最下位ビット位置の分布
【００３１】
非符号となる最下位ビット位置の分布とは、ビットが符号と異なる値となる最下位のビット位置をいう。例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビット
であるbit[0]までの並びとしたとき、符号ビットbit[39]と異なるbit[k]のうち、インデ
ックスkが最小のものをいう。また、非符号となる最下位ビット位置の分布では、有効な
データが含まれる最下位ビットが把握される。
（３）非符号となる最上位ビット位置の最大値
【００３２】
非符号となる最上位ビット位置の最大値は、前回クリア命令が実行されたときから現在に至るまでに、命令実行の対象となった１以上の固定小数点数について符号ビットの値と
異なる値となる最上位のビット位置のうちの最大値である。情報処理装置１は、非符号となる最上位のビット位置の最大値をDynamic Fixed Point演算における適正なシフト量、
つまり、適切な小数点位置の決定に利用できる。
【００３３】
プロセッサは、上記統計情報レジスタからの上記最大値の読み出し、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの最大値が蓄積され、読み出し命令によって最大値がメモリに読み出される。
（４）非符号となる最下位ビット位置の最小値
【００３４】
非符号となる最下位ビット位置の最小値は、前回クリア命令が実行されたときから現在に至るまでの１以上の固定小数点数について符号と異なる値となる最下位のビット位置のうちの最小値である。情報処理装置１は、非符号となる最下位ビット位置の最小値をDynamic Fixed Point演算における適正なシフト量、つまり、適切な小数点位置の決定に利用
できる。
【００３５】
プロセッサ１０は、統計情報レジスタからの上記最小値の読み出し、クリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの上記最小値が蓄積され、読み出し命令によってメモリに読み出される。
＜構成＞
【００３６】
図７に、情報処理装置１のプロセッサ１０の構成を例示する。図７では、プロセッサ１０とともに、命令用メモリ（ＩＲＡＭ）２１およびデータ用メモリ（ＤＲＡＭ）２２も例示されている。プロセッサ１０は、single instruction multiple data（ＳＩＭＤ）型の演算処理装置である。
【００３７】
プロセッサ１０は、プログラムカウンタ（ＰＣ）１１１およびデコーダ（Decoder）１
１２を含む制御ユニット１１、レジスタファイル１２、ベクトル演算用の演算器１３１、スカラ演算用の演算器（Arithmetic Logic Unit（ＡＬＵ））１４１、およびベクトル演
算用の演算器１３１の結果を加算するアキュムレータ１３２を有している。また、プロセッサ１０は、ベクトル演算用の演算器１３１、スカラ演算用の演算器１４１、アキュムレータ１３２等の演算結果、および、データ用メモリ２２からの読み出し結果を選択する複数のセレクタ１０１を有している。なお、図では、複数のセレクタを総称してセレクタ１０１と呼ぶ。また、複数のベクトル演算用の演算器を総称して演算器１３１と呼ぶ。
【００３８】
さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータからの統計情報を取得する統計情報取得部１０２、統計情報取得部１０２によって取得された統計情報を格納する統計情報格納部１０５を有している。統計情報取得部１０２と統計情報格納部１０５は、固定小数点数データに対する命令実行後の固定小数点数データ中のビットの分布についての統計情報を取得する取得回路の一例である。なお、図では、複数の統計情報取得部を総称して統計情報取得部１０２と呼ぶ。
【００３９】
さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータの固定小数点位置を変更するデータ変換部１０３を有している。また、図では、複数のデータ変換部を総称してデータ変換部１０３と呼ぶ。
【００４０】
図のように、プログラムカウンタ１１１の指す命令用メモリ２１のアドレスから、命令がフェッチされ、デコーダ１１２がフェッチされた命令をデコードする。なお、図では、命令のフェッチを実行する命令フェッチの制御部が省略されている。
【００４１】
デコーダ１１２が命令をデコードすると、デコード結果に応じて、プロセッサ１０の各部が制御される。例えば、デコードの結果がベクトル演算命令であった場合、レジスタファイル１２のベクトルレジスタのデータがベクトル演算用の演算器１３１に入力され、ベクトル演算が実行される。ベクトル演算用の演算器１３１の演算結果は、セレクタ１０１を介して統計情報取得部１０２およびデータ変換部１０３に供給される。また、ベクトル演算用の演算器１３１の演算結果は、アキュムレータ１３２に入力され、ベクトル演算用の演算器１３１の演算結果が例えば、カスケードに加算される。アキュムレータ１３２の演算結果は、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。
【００４２】
また、例えば、デコードの結果、命令がスカラ演算命令であった場合には、レジスタファイル１２のスカラ・レジスタのデータがスカラ演算用の演算器１４１に入力される。演算器１４１の演算結果は、アキュムレータ１３２の演算結果と同様、セレクタ１０１を介して統計情報取得部１０２およびデータ変換部１０３に供給される。
【００４３】
さらに、例えば、デコードの結果、命令がロード命令であった場合には、データ用メモリ２２からデータが読み出され、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。データ変換部１０３でデータ変換された結果は、レジスタファイル１２のレジスタに格納される。
【００４４】
また、デコードの結果、命令がDynamic Fixed Point演算を実行する命令であった場合
、デコーダ１１２は、シフト量がデータ変換部１０３に供給されるように指示する。シフト量は、例えば、命令のオペランド（即値）、オペランドで指定されたレジスタ、オペランドで指定されたアドレス・レジスタの示すアドレスのデータ用メモリ２２等から取得され、データ変換部１０３に供給される。図７の処理は、デコーダが命令から、固定小数点数データの小数点位置の指定（シフト量）を取得することの一例である。
【００４５】
データ変換部１０３は、ベクトル演算の結果、スカラ演算の結果、アキュムレータ１３２の演算結果、あるいは、データ用メモリ２２からの読み出し結果等で得られる固定小数点数データを、指定されたシフト量Sだけシフトする。また、データ変換部１０３は、シ
フトとともに、上位ビットの飽和処理および下位ビットの丸めを実行する。データ変換部１０３は、例えば入力を４０ビットの演算結果とし、下位Sビットを小数部として丸めを
行な丸め処理部と、算術シフトを実行するシフタと飽和処理を行なう飽和処理部を有する。
【００４６】
丸め処理部は、下位S bitを小数部として丸めを行なう。Sが負の場合には、丸め処理部は、何も行なわない。丸めとしては、最近接丸め、0への丸め、正の無限大への丸め、負
の無限大への丸め、乱数丸めなどが例示される。データ変換部１０３が固定小数点数データをシフトするときのシフト量は、例えば、図７に例示されるように、デコーダが命令から取得するシフト量である。
【００４７】
シフト部は、Sが正の場合はS bit算術右シフト、Sが負の場合は、算術左シフト、すな
わち、-S bit算術左シフトを行なう。飽和部は、シフト結果が 2E15-1（正の最大値）以
上の場合は 2E15、-2E15（負の最小値）以下の場合は -2E15、それ以外は入力の下位16bitを出力する。ここで、2E15は、２の１５乗を表す。
【００４８】
そして、データ変換部１０３は、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、上位ビット廃棄し、下位ビットに０を埋め込む。また、データ変換部１０３は、右シフト時、上位ビット（符号ビットより下位のビット）に符号ビットを埋め込む。そして、データ変換部１０３は、上記のように丸め、シフト、飽和処理によ
って得られるデータを、レジスタファイル１２のレジスタ等と同一のビット幅（例えば、１６ビットのレジスタ）で出力する。データ変換部は固定小数点数データの小数点位置を更新する更新回路の一例である。
【００４９】
したがって、プロセッサ１０で実行されるコンピュータプログラムがDynamic Fixed Point演算を実行する命令のオペランドにシフト量を指定することで、プロセッサ１０は、
プログラム実行中に、固定小数点数の小数点位置を指定されたシフト量だけ更新する。
【００５０】
また、デコードの結果、命令が統計情報取得を指示する命令（統計情報取得機能付き命令という）である場合、統計情報取得部１０２において、統計情報が取得され統計情報格納部１０５に格納される。ここで、統計情報は、上記で述べたように、（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、またはこれらの組み合わせである。
【００５１】
図８に、図７のプロセッサ１０の回路ブロックを例示する。プロセッサ１０は、制御ユニット１１、レジスタファイル１２、ベクトルユニット１３、スカラユニット１４を含む。制御ユニット１１は、プログラムカウンタ１１１とデコーダ１１２を含む。レジスタファイルは、ベクトルレジスタファイル、ベクトル演算用アキュミュレートレジスタ（Vector ACC）、スカラレジスタファイル、スカラ演算用アキュミュレートレジスタ（ACC）を
含む。ベクトルユニット１３は、ベクトル演算用の演算器１３１、統計情報取得部１０２、データ変換部１０３を含む。スカラユニット１４は、スカラ演算用の演算器１４１、統計情報取得部１０２、データ変換部１０３を含む。
【００５２】
また、図８の構成例では、複数の統計情報取得部１０２からの統計情報を集約する統計情報集約部１０４が追加されている。また、統計情報格納部１０５はレジスタファイル１２の一部となっている。また、命令用メモリ２１は、メモリインターフェース（Memory I/F）を介して制御ユニット１１に接続される。また、データ用メモリ２２は、メモリインターフェース（Memory I/F）を介してベクトルユニット１３およびスカラユニット１４に接続される。
【００５３】
図９にベクトルユニット１３の詳細を例示する。図では、統計情報集約部１０４も例示されている。ベクトルユニット１３は、ベクトル・レジスタVector Reg0、Vector Reg1のデータをベクトル演算用の演算器１３１−１で演算する。ベクトル演算用の演算器１３１−１の演算結果は、積和演算用のアキュムレータ１３２と、ベクトル演算用の演算器１３１−２に入力される。
【００５４】
積和演算用のアキュムレータ１３２は、ベクトル演算用の演算器１３１−１の演算結果をスカラ加算し、スカラ演算用アキュミュレートレジスタ（ACC）に格納する。ベクトル
演算用の演算器１３１−２は、命令によって指定される演算モードに従って、ベクトル演算用の演算器１３１−１の演算結果、あるいは、ベクトル演算用アキュミュレートレジスタ（Vector ACC）のデータ、あるいは、それらを加算した結果を出力する。
【００５５】
セレクタ１０１は、ベクトル演算用の演算器１３１−２の出力結果と、データ用メモリ２２からの読み出し結果（Read Data 0,…, Read Data 0）のいずれかを選択し、統計情
報取得部１０２およびデータ変換部１０３に入力する。統計情報取得部１０２で取得された統計情報は、統計情報集約部１０４に入力される。また、データ変換部１０３でデータ変換されたデータは、図示しないセレクタを介して、データ用メモリ２２（Write Data0,…, Write Data n）にストアされるか、ベクトルレジスタ（Vector Reg2）に保持される
。
【００５６】
図１０にスカラユニット１４の構成を例示する。スカラユニット１４は、即値（Immediate）オペランドで得られるデータとスカラ・レジスタScalar Reg1からのデータの一方を選択するセレクタ１４２と、セレクタ１４２の選択結果とスカラ・レジスタScalar Reg0
のデータを演算するスカラ用の演算器１４１を有する。スカラ用の演算器１４１の演算結果は、メモリインターフェース（Memory I/F）を介してデータ用メモリ２２のアドレス（例えば、Addr）にストアされる。また、スカラ用の演算器１４１の演算結果は、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に入力される。
【００５７】
セレクタ１０１は、スカラ用の演算器１４１の演算結果、スカラ・レジスタScalar Reg2のデータ、スカラ演算用アキュミュレートレジスタ（ACC）のデータ、およびメモリインターフェース（Memory I/F）を介して読み出されたデータ（Read Data）の１つを選択す
る。セレクタ１０１は、選択したデータを、統計情報取得部１０２およびデータ変換部１０３に入力する。統計情報取得部１０２は、セレクタ１０１から入力されたデータから統計情報を取得し、統計情報集約部１０４に入力する。
【００５８】
以下、統計情報取得部１０２のうち、非符号となる最上位ビット位置を取得するものを統計情報取得部１０２Ａと呼ぶことにする。また、統計情報取得部１０２のうち、非符号となる最下位ビット位置を取得するものを統計情報取得部１０２Ｂと呼ぶことにする。また、統計情報集約部１０４のうち、統計情報取得部１０２によって取得されてビット位置を計数してビット位置に対するビットの分布を取得するものを統計情報集約部１０４Ａと呼ぶことにする。また、統計情報集約部１０４のうち、ビット位置の最大値と最小値を取得するための前段階として統計情報取得部１０２によって取得されてビット位置を論理和演算するものを統計情報集約部１０４Ｂと呼ぶことにする。
【００５９】
図１１に非符号最上位ビット位置を検出する統計情報取得部１０２Ａの真理値表を例示する。図１１のように、統計情報取得部１０２Ａは、正数に対しては、ビットin[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[i](iは37以下)が出力されるANDゲートの論理否定付き入力は、in[39]とin[j](jはi+1以上、38以下)の排他的論理和が全て0の場合に0となり、in[39]とin[i](iは３７以下)の排他論理和値が１になると、out[i]には１が設定される。そのビット位
置（i）より下位のビットでは、out[i]が出力されるANDゲートの論理否定付き入力が1と
なるため、out[i]には０が設定される。したがって、図１２の回路によって、非符号となる最上位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)が取得される。図１１、図１２の非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａは、命令実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置を取得する回路の一例である。また、非符号となる最上位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)は、符号ビットと一致しない最上位のビットの位置を真値（１）で示すビット列の一例である。
【００６３】
図１３に非符号となる最下位ビット位置を検出する統計情報取得部１０２Ｂの真理値表を例示する。図１３のように、統計情報取得部１０２Ｂは、正数に対しては、in[0]から
上位ビット方向にビットをサーチして、最初に１になったビット位置を１に他のビット０に設定した２進数のビットパターンを出力する。また、統計情報取得部１０２Ｂは、負数に対しては、in[0]から上位ビット方向にビットをサーチして、最初に０になったビット
位置を１に他のビット０に設定した２進数のビットパターンを出力する。また、また、入力データが全ビット0、または、全ビット1の場合には、統計情報取得部１０２Ｂは、39bit目に1を、38bit以下に0を出力する。
【００６４】
図１４に、非符号となる最下位ビット位置を取得する統計情報取得部１０２Ｂのハードウェア回路の構成を例示する。符号ビットin[39]が０の場合には、統計情報取得部１０２Ｂは、最下位ビットin[0]から上位側に向かって、ビットが１であるビット位置を探索す
ればよい。一方、符号ビットin[39]が1の場合には、データは補数となっているので、統
計情報取得部１０２Ｂは、最下位ビットin[0]から上位側に向かって、ビットが０である
ビット位置を探索すればよい。
【００６５】
すなわち、この回路では、符号ビットin[39]と他のビット（in[0]からin[38]）との排
他論理和（EXOR）が実行される。そうすると、符号ビットin[39]と同じ値を有するビットによる排他論理和値は０となり、符号ビットin[39]と異なる値を有するビットによる排他論理和値は１となる。
【００６６】
今、仮にin[0]がin[39]と異なる値であった場合、排他論理和によって出力データのout[0]は１となる。一方、出力データのout[1]には、in[39]とin[1]の排他論理和値がANDゲ
ートを介して入力される。このANDゲートの一方の入力には、in[39]とin[0]の排他論理和値を反転したビット値が入力される。このため、in[39]とin[0]の排他論理和値が１の場
合、in[39]とin[1]の排他論理和値によらず、ANDゲートの出力は０となる。
【００６７】
以下、同様に、out[i](iは1以上)が出力されるANDゲートの論理否定付き入力は、in[39]とin[j](jは0以上、i-1以下)の排他的論理和が全て0の場合に0となり、in[39]とin[i](iは１以上)の排他論理和値が１になると、out[i]には１が設定される。また、そのビット
より上位の出力データout[i]には０が設定される。したがって、図１４の回路によって、非符号となる最下位ビット位置に１が設定され、他のビットが０の出力データout(40bit)が取得される。図１３、図１４の非符号となる最下位ビット位置を取得する統計情報取得部１０２Ｂは、符号ビットと一致しない最下位のビットの位置を取得する回路の一例である。また、非符号となる最下位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)は、符号ビットと一致しない最下位のビットの位置を真値（１）で示すビット列の一例である。
【００６８】
図１５は、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａの処理を例示する図である。図では、４０ビットのデータが８個並列に処理されるＳＩＭＤデータからビットの分布を取得する処理が例示される。図１５では、ハードウェア回路である統計情報集約部１０４Ａの処理が、擬似コードで記述されている
。
【００６９】
すなわち、入力データは、８（行）×４０（ビット）の配列データで例示されている。また、各行の４０ビットの入力データは、非符号となる最上位ビット位置（図１２の統計情報取得部１０２Ａの出力）または非符号となる最下位ビット位置（図１４の統計情報取得部１０２Ｂの出力）である。この処理では、４０ビットの出力データoutについて、ま
ず、全ビットがクリアされる。次に、入力データの配列in[j][i]の各列ｉの要素の値が、すべての行（ｊ＝０から７）に対して加算される。したがって、図１１、図１３とは異なり、図１５の擬似コードでは、出力データ（配列要素）out[j]は、log2(SIMDデータ数)ビット(図１５の例では３ビット)の整数である。なお、図１７では、ＳＩＭＤデータ数（並列処理されるデータ数）は８であると想定したが、ＳＩＭＤデータ数が８に限定される訳ではない。
【００７０】
図１６に、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得（ＳＩＭＤデータ数−１））が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は、統計情報格納部１０５に引き渡すデータである。図１５、図１６の統計情報集約部１０４Ａは符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例である。図１５、図１６の統計情報集約部１０４Ａは符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例でもある。
【００７３】
図１７は、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂの処理を例示する図である。図１７においても、図１５と同様、４０ビットのデータが８個並列に処理されるＳＩＭＤデータを処理が例示される。図１７では、ハードウェア回路である統計情報集約部１０４Ｂの処理が、擬似コードで記述されている。
【００７４】
この処理では、４０ビットの出力データout[i](i=0,…,39)には、入力データの配列in[
j][i]の各列をすべての行（j=0,…,7）について論理和演算（ＯＲ演算）した結果が入力
される。したがって、図１７の擬似コードでは、図１５とは異なり、出力データ（配列要素）out[i](i=0,…,39)はビット列である。以上の処理の結果、出力データout[i](i=0,…,39)では、out[38]から下位ビット方向に向かって最初に１となるビット位置が最大ビッ
ト位置である。また、out[0]から上位ビット方向に向かって最初に１となるビット位置が最小ビット位置である。
【００７５】
図１８に、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得ＳＩＭＤデータ数−１）がＯＲゲート（４０ビット）によってＯＲ演算される。また、図１８でセレクタ（ＳＥＬ）は、論理和演算（ＯＲ）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）されたデータが、出力データoutに出力される。したがって、統計情報取得部１０２がスカラユニット１４
で取得したデータは、一回の演算においては、論理和演算されることなくそのまま出力データoutに出力される。outは、統計情報格納部１０５に引き渡すデータである。
【００７６】
論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例である。論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例でもある。
【００７７】
図１９は、統計情報集約部１０４の具体的な構成例であり、統計情報の格納先がデコーダ１１２からのインデックスで指定される回路の構成例である。図では、例えば、sr[j][i](j=0,…,k, i=0,…,39)の領域が確保され、indexによって、レジスタファイルの行jが
指定される。
【００７８】
プロセッサ１０は、書き込み命令によってセレクタSELを介して、indexによって指定されるレジスタファイルの行jの1つあるいは複数のレジスタに初期値を書き込む。ただし、プロセッサ１０はデコーダ１１２からの制御信号により、indexによって指定されるレジ
スタファイルの行jをリセットしても良い。そして、プロセッサ１０は、in39からin0の統計情報を加算器で蓄積し、indexによって指定されるレジスタファイルの行jに格納する。また、プロセッサ１０は、デコーダ１１２からの制御信号により、indexによって指定さ
れるレジスタファイルの行jから統計情報を読み出す。また、プロセッサ１０は、indexによって指定されるレジスタファイルの行jのいずれかの1つあるいは複数の値を読み出し、読み出し命令で指定されたデータ用メモリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
【００７９】
図２０は、図１７、図１８で例示した統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するとともに蓄積された統計情報のビット位置の最大値を読み出す統計情報格納部１０５Ｃのハードウェア回路の構成を例示する図である。統計情報格納部１０５Ｃは、統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するレジスタ（sr）を有している。プロセッサ１０は、書き込み命令（write）によってセレクタ（ＳＥＬ）を介してレジスタ（sr）に初期値を書き込み可能である
。ただし、プロセッサ１０は、リセット信号によってレジスタ（sr）をリセットできるようにしてもよい。
【００８０】
また、統計情報格納部１０５Ｃは、統計情報集約部１０４Ｂの論理和演算結果（in）と
、すでにレジスタ（sr）に蓄積された統計情報の論理和演算を実行し、セレクタ（ＳＥＬ）を介してレジスタ（sr）に論理和演算の結果を蓄積する。
【００８１】
また、プロセッサ１０は、読み出し命令によってレジスタ（sr）の値を読み出し、読み出し命令で指定されたデータ用メモリあるいは読み出し命令で指定された汎用レジスタに保存する。また、統計情報格納部１０５Ｃは、Priority Encoder(MSB優先)を有してもよ
い。Priority Encoder(MSB優先)は、レジスタ（sr）に蓄積されたビット列中の最上位の
ビット１の位置（−１から３８）を２進数で出力する。例えば、入力データinとして全ビット０が入力されると、Priority Encoder(MSB優先)は、"111111"（−１）を出力する。
また、入力データinとしてin0=1、他のビットがすべて０のデータが入力されると、Priority Encoder(MSB優先)は、"000000"（０）を出力する。また、入力データinとしてin0=x
（0または1）、in1=1、他のビットがすべて０のデータが入力されると、Priority Encoder(MSB優先)は、"000001"（１）を出力する。同様に、入力データinとしてin0〜in37がx（0または1）、in38=1のデータが入力されると、Priority Encoder(MSB優先)は、"100110"
（３８）を出力する。プロセッサ１０は、Priority Encoder(MSB優先)を介して、統計情
報集約部１０４Ｂによって論理和演算されたビット位置の統計情報からビット位置の最大値を２進数値で取得できる。図１７、図１８の論理和演算によってビット位置を集約する統計情報集約部１０４Ｂ（図１７、図１８）と統計情報格納部１０５Ｃの組み合わせは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最上位の真値の位置を取得する回路の一例である。
【００８２】
図２１は、図１７、図１８で例示した統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するとともに蓄積された統計情報のビット位置の最小値を読み出す統計情報格納部１０５Ｄのハードウェア回路の構成を例示する図である。統計情報格納部１０５Ｄは、統計情報格納部１０５ＣのPriority Encoder(MSB優先)に代えてPriority Encoder(LSB優先)を有している。Priority Encoder(LSB優先)以外の統計情報格納
部１０５Ｄの構成は、統計情報格納部１０５Ｃと同様であるから説明を省略する。
【００８３】
Priority Encoder(MSB優先)は、レジスタ（sr）に蓄積されたビット列中の最下位のビ
ット１の位置（−１から３８）を２進数で出力する。例えば、入力データinとして全ビット０が入力されると、Priority Encoder(LSB優先)は、"111111"（−１）を出力する。ま
た、入力データinとしてin0=1、他のビットがx（0または1）のデータが入力されると、Priority Encoder(LSB優先)は、"000000"（０）を出力する。また、入力データinとしてin0=0、in1=1、他のビット（in2からin38）がx（0または1）のデータが入力されると、Priority Encoder(LSB優先)は、"000001"（１）を出力する。同様に、入力データinとしてin0
〜in37が0、in38=1のデータが入力されると、Priority Encoder(LSB優先)は、"100110"（３８）を出力する。プロセッサ１０は、Priority Encoder(LSB優先)を介して、統計情報
集約部１０４Ｂによって論理和演算されたビット位置の統計情報からビット位置の最小値を２進数値で取得できる。論理和演算によってビット位置を集約する統計情報集約部１０４Ｂ（図１７、図１８）と統計情報格納部１０５Ｄ（図２１）の組み合わせは、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最下位の真値の位置を取得する回路の一例である。
＜実施形態１の効果＞
【００８４】
情報処理装置１は、深層学習のミニバッチ実行時、各レイヤの各変数の統計情報をレジスタあるいはレジスタファイルに累積する。そして、情報処理装置１は、蓄積された統計情報を基に各レイヤの各変数の小数点位置を更新することができる。すなわち、プロセッサ１０が、ビット分布の統計上情報を取得する。ここで、統計情報は、命令実行時の（１
）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、またはこれらの組み合わせ等である。したがって、情報処理装置１が深層学習実行時に、データの統計情報取得のための深層学習プログラム中のオーバーヘッドがなくなるため、実用的な時間で動的固定小数点演算を実現可能となる。
【００８５】
すなわち、本実施形態では、情報処理装置１のプロセッサ１０が統計情報取得機能付き命令を実行するとともに、演算結果をビットシフトし、丸め・飽和を行なってレジスタに格納する命令を実行する。したがって、情報処理装置１はビット分布を示す統計情報を取得するオーバーヘッドを少なくできる。また、ビット分布を示す統計情報から直ちに適正なビットシフト、すなわち、小数点位置を決定できる。つまり、情報処理装置１のように、小数点位置を１ビットずつずらして適正な小数点位置を試行し、次の演算で結果を確認するという手順ではなく、ビット分布を示す統計情報から、直ちに小数点位置を決定できる。したがって、情報処理装置１は、小数点位置が不適切な状態で学習処理が繰り返される恐れがすくない。また、情報処理装置１は、学習精度の劣化につながり、深層学習の収束が遅くなる恐れが少ない。
【００８６】
また、プロセッサ１０は、統計情報取得部１０２Ａによって命令実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置を取得できる。また、プロセッサ１０は、統計情報集約部１０４Ａによって符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数することができる。また、プロセッサ１０は、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する。そして、プロセッサ１０は、累積したビット列中の最上位の真値の位置を取得することができる。
【００８７】
また、プロセッサ１０は、統計情報取得部１０２Ｂによって命令実行後の固定小数点数データ中の符号ビットと一致しない最下位のビットの位置を取得できる。また、プロセッサ１０は、統計情報集約部１０４Ａによって符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数することができる。また、プロセッサ１０は、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する。そして、プロセッサ１０は、累積したビット列中の最下位の真値の位置を取得することができる。以上のような構成により、プロセッサ１０は、上記統計情報を取得できる。
［実施形態２］
【００８８】
以下、図２２から図４６を参照し、実施形態２に係る情報処理システムおよびホストマシン３について説明する。上記実施形態１では、統計情報取得部１０２（１０２Ａ、１０２Ｂ）により統計情報を取得し、オーバーフロー回数等が所定の限度となるように固定小数点数データの小数点位置を調整することで、固定小数点数表現で深層学習を効率良く実行できるプロセッサ１０について説明した。なお、統計情報は、演算結果の値の分布を含むものと言える。
＜実施形態１における課題＞
【００８９】
実施形態１の構成では、以下のような課題が想定される。実施形態１のプロセッサ１０の構成では、各演算器が統計情報を取得するため、演算器の数が多いと回路規模が増大する。逆にプロセッサ１０において、統計情報取得機能を持つ演算器が限定できれば、回路規模の増加は抑えられる。しかし、統計情報取得機能を持つ演算器が限定されると、統計情報サンプル数が不足するため、プロセッサ１０で実行されるアプリケーションプログラムが適切でない小数点位置を推定してしまう場合も想定される。適切でない小数点位置を推定した場合には、演算結果が望ましくないものとなり、例えば、深層学習の認識精度あ
るいは正答率等が想定の範囲内に収まらない場合が増加することも生じ得る。特に、８ビット固定小数点表現など、演算ビット幅が小さい場合において想定通りに計算できないケースが増加することが予想される。したがって、回路規模の増大を抑えつつ、想定通りの計算を継続させるための手法が望まれる。
【００９０】
図２２は、ＶＧＧ１６という画像分類用の学習ネットワークを簡略化したＶＧＧ８というネットワークで１００００回学習を行った結果の例である。この例では、１６ビットの動的固定小数点数による演算を用いた方式では１００００回の学習において、認識精度は４０％程度になる（図でDLINT-16参照）。一方、８ビット動的固定小数点数による演算を用いた方式では、１００００回の学習において、認識精度が５％に低下してしまう（図でDLINT-8参照）。
【００９１】
深層学習では、変数（値の種類）によって変数値の生成回数（演算器による演算回数）が異なる。変数値の生成回数が少ないと小数点位置に関する統計情報の取得機会が少なくなり、正しく小数点位置を推定できなくなることが想定される。例えば、多層ニューラルネットワークの各層のノード（ニューロンともいう）に入力されるパラメータ値の計算および各ニューロンでの重みの計算では、計算回数が多く、固定小数点数の整数部桁数についての統計情報の取得機会、したがってサンプル数は多い。一方、各ニューロンにおける定数の計算および活性化関数等による分類のための確率計算は計算回数が少なく、固定小数点数の整数部桁数についての統計情報のサンプル数は少ない。
【００９２】
そこで、実施形態２では、統計情報を利用するアプリケーションプログラム（以下、単にプログラム）に以下のような改善が追加される。すなわち、実施形態２では、統計情報を利用するプログラムは、統計情報の取得機会が多い変数についてはビット幅を少なくし、統計情報の取得機会が少ない変数についてはビット幅を多めに確保する。例えば、プログラムは、統計情報の取得機会が少ない変数については浮動小数点数表現を利用するようにする。統計情報の取得機会の多寡は、統計情報の取得回数の多寡、したがって、統計情報のサンプル数の多寡と考えて良い。すなわち、実施形態２の情報処理システムおよびホストマシン３は、統計情報取得回数の多寡に応じて変数のデータ型を決定し、決定されたデータ型にしたがった変数が組み込まれたプログラムを生成する。
【００９３】
実施形態２の深層学習では、予めニューラルネットワークの構成を規定する情報が定義されているものとする。本情報処理システムおよびホストマシン３は、予め定義されたニューラルネットワークの構成を規定する情報（以下、ニューラルネットワーク記述情報）に基づいて実行するプログラムを生成する。例えば、ニューラルネットワーク記述情報としては、caffeと呼ばれるソフトウェアライブラリ（フレームワークともいう）におけるprototextファイル、tensorflowと呼ばれるソフトウェアライブラリにおけるグラフ表現、chainerと呼ばれるフトウェアライブラリにおけるpythonスクリプト等が知られている。
ニューラルネットワーク記述情報は、ニューラルネットワークを定義する定義情報の一例である。
【００９４】
変数値の生成回数はニューラルネットワーク記述情報から取得可能である。また、統計情報取得機能における間引き情報から統計情報の取得回数が得られる。間引き情報とは、統計情報取得機能において、変数値の生成Ｎ回あたり１回統計情報を取得する、という場合のＮをいう。間引き情報はハードウェアの構成から決定可能である。したがって、変数値の生成回数と間引き情報とから統計情報の取得回数を計算することが可能となる。
実施形態２の情報処理システムおよびホストマシン３は、動的固定小数点数演算および固定小数点数演算の機能を持つプロセッサで実行可能な深層学習のプログラムを生成する。プログラムの生成において、本情報処理システムおよびホストマシン３は、ニューラルネットワーク記述情報に定義された深層学習のネットワーク構造を参照し、統計情報の取
得回数が少ない（例：30回以下の）と判断される変数については固定小数点のビット幅を増加または浮動小数点数を使用するようにデータの型を決定する。一方、本情報処理システムおよびホストマシン３は、統計情報の取得回数が多い判断される変数については固定小数点のビット幅を削減するようにデータ型を決定する。
【００９５】
以上のように、実施形態２の情報処理システムおよびホストマシン３は、ニューラルネットワーク記述情報に基づき統計情報の取得回数を変数毎に解析し、統計情報の取得回数の多寡に応じて変数のデータ型を決定する点で、実施形態１の情報処理装置１と相違する。したがって、実施形態２の情報処理システムおよびホストマシン３は、実行するプログラムの処理が実施形態１と異なるものの、他の構成要素および作用は実施形態１と同様である。そこで、実施形態２の構成要素のうち、実施形態１の情報処理装置１の構成が適用される構成要素には実施形態１と同一の符合を付して参照し、その説明を省略する。
＜構成＞
【００９６】
図２３に、実施形態２に係る情報処理システムの構成を例示する。実施形態２では、ホストマシン３とＤＬ実行ハードウェア１Ａが専用インターフェース上で接続しているものを例にとり、情報処理システムを説明する。利用者はホストマシン３に接続し、ホストマシン３がＤＬ実行ハードウェア１Ａを制御し、深層学習（以下、単にＤＬ（Deep Learning）という）を実行する。ホストマシン３は利用者からの指示に従い、ＤＬ実行ハードウ
ェア１Ａが実行するプログラムを作成し、ＤＬ実行ハードウェア１Ａに送信する。ＤＬ実行ハードウェア１Ａは送信されたプログラムを実行し、結果のデータを生成する。図２３におけるホストマシン３は、演算処理部の一例であるＤＬ実行ハードウェア１Ａ（およびＤＬ実行プロセッサ１０Ａ）とは異なるプロセッサの一例である。実施形態２において、ホストマシン３は、プログラムを生成する生成部としての処理を実行する。
【００９７】
図２４は、ホストマシン３がＤＬ実行ハードウェア１Ａを用いて深層学習を実行するときのモジュールの構成を例示する図である。図のように、ホストマシン３は、アプリケーション５１、ライブラリ５２、ユーザモードドライバ５３、およびカーネルモードドライバ５４を有する。アプリケーション５１は、利用者とのユーザインターフェースを実装する。また、アプリケーション５１は、利用者からＤＬの設計情報を受け取り、結果を表示する。
【００９８】
ホストマシン３は、ライブラリ５２の機能を使ってＤＬ実行機能を実装している。ライブラリ５２は、ホストマシン３におけるアプリケーション５１の実装を補佐または支援する。すなわち、ＤＬの実行に関する機能はライブラリ５２で提供される。
【００９９】
ユーザモードドライバ５３は、通常はライブラリ５２から呼び出される。ただし、場合によっては、ユーザモードドライバ５３は、アプリケーション５１から直接呼び出される。
【０１００】
ユーザモードドライバ５３は、ＤＬ実行ハードウェア１Ａのためのプログラムコードを作成する。ユーザモードドライバ５３は、Operating System（ＯＳ）のユーザモードで実行されるドライバである。
【０１０１】
カーネルモードドライバ５４は、ユーザモードドライバから呼び出され、ＤＬ実行ハードウェア１Ａと通信する。すなわち、ＤＬ実行ハードウェア１Ａとの通信処理は、ハードウェアに直接アクセスするものであるため、カーネルモードドライバ５４として実装される。カーネルモードドライバ５４は、ＯＳのカーネルモードで実行されるドライバである。
【０１０２】
図２５は、ホストマシン３の構成を例示する。ホストマシン３は、プロセッサ３１、高速入出力インターフェース３４、ランダムアクセスメモリ（ＲＡＭ３２）、内部バス３５、外部記憶装置としてのハードディスクドライブ（ＨＤＤ３３）、低速入出力インターフェース３９等を有する。ホストマシン３は、プログラムを生成する情報処理装置の一例である。
【０１０３】
プロセッサ３１はＲＡＭ３２上に配置されているプログラムを実行する。高速入出力インターフェース３４はプロセッサ３１とプロセッサ３１外部にあるＤＬ実行ハードウェア１Ａとを接続する。高速入出力インターフェース３４の一例としてPeripheral Component
Interconnect（ＰＣＩ）  Ｅｘｐｒｅｓｓなどが挙げられる。ＲＡＭ３２はプロセッサ
３１が実行するプログラムやデータを配置する。ＲＡＭ３２の形式としては、ＤＤＲ４−ＳＤＲＡＭ等が例示される。内部バス３５はプロセッサ３１と比較して低速な周辺機器とプロセッサ３１とを接続して通信を中継する。ＨＤＤ３３は不揮発性の補助記憶装置として動作し、プロセッサ３１が実行するプログラムやデータを永続的に格納する。低速入出力インターフェース３９は利用者との通信を行う。低速入出力インターフェース３９は一例として、Universal Serial Bus（ＵＳＢ）によるキーボードあるいはマウスとの接続部が例示される。また、低速入出力インターフェース３９としては、Ethernet等によるネットワークを介した通信を実行する通信部も例示できる。
【０１０４】
図２６にＤＬ実行ハードウェア１Ａの構成を例示する。ＤＬ実行ハードウェア１Ａは、ＤＬ実行プロセッサ１０Ａ、ハードウェア（ＨＷ）制御部１Ａ１、高速入出力インターフェース１Ａ４、メモリアクセスコントローラ１Ａ３、および内部ＲＡＭ１Ａ２等を有する。
【０１０５】
ＤＬ実行プロセッサ１０Ａは、ホストマシン３から与えられたプログラム、データを基に深層学習の処理を実行する。ＤＬ実行プロセッサ１０Ａの一例は、例えば、実施形態１のプロセッサ１０である。ＤＬ実行プロセッサ１０Ａは、演算処理部の一例である。ＨＷ制御部１Ａ１はホストマシン３からの指令を基に、ＤＬ実行プロプロセッサ１０Ａを駆動させる。また、ＨＷ制御部１Ａ１はホストマシン３から指令を受け、内部ＲＡＭ１Ａ２にプログラムやデータを転送する。高速入出力インターフェース１Ａ４はホストマシン３と接続する。高速入出力インターフェース１Ａ４の具体的なプロトコルとしては先述のＰＣＩ  Ｅｘｐｒｅｓｓ等が例示される。メモリアクセスコントローラ１Ａ３はＤＬ実行プロセッサ１０ＡやＨＷ制御部１Ａ１からの信号を選択し、メモリアクセスのためのプロトコルにしたがって内部ＲＡＭ１Ａ２にアクセスする。内部ＲＡＭ１Ａ２はＤＬ実行プロセッサ１０Ａが実行するプログラムや処理対象のデータ、処理結果のデータを格納する。内部ＲＡＭ１Ａ２のとしてはDouble-Data-Rate（ＤＤＲ）４−Synchronous Dynamic Random Access Memory（ＳＤＲＡＭ）、あるいはより高速なGraphics Double Data Rate（ＧＤＤ
Ｒ）５やより高帯域のHigh Bandwidth Memory（ＨＢＭ）２等が挙げられる。
【０１０６】
図２７に実施形態２のＤＬ実行プロセッサ１０Ａの構成を例示する。図２７には、メモリインターフェースを介してＤＬ実行プロセッサ１０Ａに接続される命令用メモリ２１、およびデータ用メモリ２２も記載されている。このうち、命令用メモリ２１およびデータ用メモリ２２の構成は、実施形態１のプロセッサ１０と同様であるので、その説明を省略する。
【０１０７】
ＤＬ実行プロセッサ１０Ａは、制御ユニット１１、レジスタファイル１２、ベクトルユニット１３Ａ、スカラユニット１４を含む。このうち、制御ユニット１１は実施形態１と同様であるので、その説明を省略する。
【０１０８】
ベクトルユニット１３Ａは、ベクトル演算用の固定小数点数演算器１３Ｂ（図でＩＮＴ
と表記）、ベクトル演算用の浮動小数点数演算器１３Ｃ（図でＦＰと表記）、統計情報取得部１０２（図には「統計取得」として省略）、データ変換部１０３（図には「データ変換」として省略）およびセレクタ１０７の組を複数組有している。したがって、ＤＬ実行プロセッサ１０Ａはベクトルユニット１３Ａにより固定小数点数の演算および浮動小数点数の演算の少なくとも一方を実行する。なお、上記の複数組は、例えば、８組であるが、ベクトルユニット１３Ａ内の演算器の組数が８組に限定される訳ではない。また、図では、一例として、１組の固定小数点数演算器１３Ｂ、浮動小数点数演算器１３Ｃ、データ変換部１０３、セレクタ１０７に符号が付されている。ベクトルユニット１３Ａは、複数組の演算器によって、演算を並列に実行する。このうち、データ変換部１０３の構成は、実施形態１と同様であるので、その説明を省略する。
【０１０９】
例えば、ベクトル演算用の固定小数点数演算器１３Ｂは、上記の複数組用意され、並列に固定小数点数演算、例えば加算を実行する。ベクトル演算用の浮動小数点数演算器１３Ｃも、上記の複数組用意され、並列に浮動小数点数演算、例えば加算を実行する。以上のように、ベクトルユニット１３Ａは、ベクトル演算用の浮動小数点数演算器１３Ｃが追加された点を除いて、実施形態１のベクトルユニット１３と同様である。以下、図２７の構成をさらに具体的に説明するとともに、ＤＬ実行プロセッサ１０Ａの演算について説明する。
（レジスタ）
【０１１０】
図２７で、Scalar Register Fileは、３２ビットのレジスタを例えば３２個有する。Scalar Register Fileは、アドレス、またはパラメータを格納する。また、図２７で「ACC
」はスカラアキュミュレートレジスタである。
【０１１１】
Vector Register Fileは、３２ビットベクトルレジスタを例えば８セット有する。８セットの３２ビットベクトルレジスタは、並列にアクセス可能なレジスタ要素を８要素有する。ただし、Vector Register Fileは、１６ビットベクトルレジスタを例えば１６要素８セット有する構成として利用できる。さらに、Vector Register Fileは、８ビットベクトルレジスタを例えば３２要素８セット有する構成として利用できる。
【０１１２】
Vector Register Fileは、アセンブリ言語のオペランドとしては、simd0 からsimdで表記され、演算データを格納する。以下、レジスタの構成がＮビットで、並列にアクセス可能な要素数Ｍ、セット数ＳのレジスタファイルをＮビットｘＭ要素ｘＳセットと表記することにする。
（Vector Acc）
【０１１３】
図２７で、「Vector Acc」は、ベクトル演算用アキュミュレートレジスタを示す。Vector Accは、８０ビットx ８要素 x １ セット (３２ビット演算モード) 、４０ビット x 
１６要素 x 1 セット (１６ビット演算モード)、２０ビット x ３２ 要素 x 1 セット (
８ビット演算モード)で使用可能である。Vector Accは、アセンブリ言語のオペランドと
しては、例えば、accで表記され、ベクトルレジスタ同士の乗算結果やそれらの加算結果
を格納する。
（スカラ演算の種類）
プロセッサ１０Ａが実行可能なスカラ演算としては、四則演算（整数、浮動小数点）、シフト、分岐、ロード、ストア等が例示される。
（ベクトル演算（ＳＩＭＤ演算））
【０１１４】
プロセッサ１０Ａが実行可能なベクトル演算は、以下の通りである。まず、単精度浮動小数点演算としては、加減算および乗算等の演算、ロード、ストア、固定小数点表現への変換（指数部、仮数部の取得）が例示される。また、Vector Accを用いた演算（単精度浮
動小数点表現）としては、アキュミュレートレジスタのクリア、MAC(Multiply and ACcumulate)演算が例示される。MAC演算では、加算および出力のオペランドには暗黙的にVector Accが指定される。さらに、整数演算としては、加減算、乗算、シフト演算、浮動小数
点表現への生成（指数部、仮数部の設定）が例示される。
【０１１５】
MAC(Multiply and ACcumulate)演算の処理は以下の通りである。演算は、２つの変数（レジスタ値）の積をaccに積算する処理であり、以下の式で例示される。
【０１１６】
acc = 16bit x 16bit  + acc (16bit mode) または
acc = 8bit x 8bit + acc (8bit mode) 
演算では、2つのVector Registerが指定される。また、加算および出力のオペランドには暗黙的にVector Accが指定される。
累積加算の処理は以下の通りである。演算は、１つの変数（レジスタ値）をaccに積算
する処理であり、以下の式で例示される。
【０１１７】
acc = 16bit + acc(16bit mode)または
acc = 16bit + acc(8bit mode) または
acc = 8bit + acc(8bit mode)
【０１１８】
演算では、1つのVector Registerと1つのScalar Registerが指定される。ただし、16bit + acc(8bit mode)の場合は2つのVector Registerが読み込まれる。ＤＬ実行プロセッサ１０Ａは、１６要素の16bit Vector Registerを有しており、accは8bit modeでは、３２
要素利用可能であるため、2つの16bit Vector Registerの処理が可能となるのである。また、Scalar Registerは入力オペランドのシフト量が指定される。
【０１１９】
Vector Registerへの転送命令では、1つのVector Register、1つのScalar Registerが
指定される。Scalar RegisterにはVector Accのシフト量が指定される。
（ロード命令）
【０１２０】
ロード命令では、オペランドに、読み込みアドレス、ストライド、型変換、書き込み先Vector Registerが指定される。ストライド＝０ならば読み込みアドレスの1要素をすべてのVector Registerの要素に格納することを意味する。また、ストライド＝１は読み込み
アドレスから１要素ずつ読みこんで、Vector Registerの各要素に格納する。ストライド
＝Ｎ（任意の整数）は読み込みアドレス＋エレメント幅×Ｎ×エレメント番号のアドレスで指定される要素を順番に読み込んでVector Registerの各エレメントに格納する。型変
換の命令には読み込み元の型（8bit整数 or 16bit整数）とレジスタに格納する型（8bit
整数 or 16bit整数）が指定される。
（ストア命令）
書き込みアドレス、ストライド、読み込み元Vector Registerが指定される。ストライ
ドに関してはロードと同様である。
（統計情報取得部の処理）
【０１２１】
統計情報取得部１０２の構成は、実施形態１の統計情報取得部１０２（１０２Ａ、１０２Ｂ）と同様である。すなわち、統計情報取得部１０２は、アキュミュレートレジスタに格納されている各要素を解釈し、非符号となる最上位ビットの位置を取得して、その分布を統計情報集約部１０４に累積させる。なお、実施形態２において、ＬＳＢの位置を０として、ビット位置が定義される。
【０１２２】
統計情報は、複数系統格納可能で、系統は命令のオペランドに即値で指定される。例えば、演算結果が0x00_1000_0000という値の場合、符号ビットが０で、符号ビットと異なる
値1が現れる最上位ビット位置は２８となる。また、例えば、演算結果が0xFE_FFFF_FFFF
という値の場合、符号ビットが１で、符号ビットと異なる値０が現れる最上位ビット位置は３２となる。また、複数系統とは、統計情報の複数の格納先という意味である。複数の格納先があるため、例えば、第１の統計情報を第１の格納先に、第２の統計情報を第２の格納先に格納するようにオペランドの指定が可能となる。
＜プログラム生成処理＞
【０１２３】
実施形態２のホストマシン３は、ニューラルネットワークの計算に登場する処理のうち、積和演算と総和演算とを対象に変数の型を決定し、プログラム生成を行う。ホストマシン３は、プログラム生成を行うために、それぞれの処理のテンプレートを用意しておき、与えられたパラメータに従ってテンプレートの内容を修正することで、目的のプログラム（コードともいう）を生成する。
【０１２４】
図２８に、プログラム生成に係るホストマシン３の論理構成を例示する。ホストマシン３は、ＲＡＭ３２に実行可能に配置されたコンピュータプログラムにより図２８の処理を実行する。図のように、ホストマシン３は、論理構成としては、変数ごとの生成回数取得処理部３１１、変数ごとのサンプル数の取得処理部３１２、変数型決定部３１３、およびプログラム生成部３１４を有する。ここで、プログラム生成時には、ホストマシン３は、ニューラルネットワーク記述情報と、統計情報の間引き情報と、プログラム生成パラメータを入力から取得する。入力は例えば、プログラム起動に指定されるパラメータ、ＯＳから引き渡されるパラメータ、ファイルシステムの所定のファイルに記述されたパラメータ等である。
【０１２５】
ニューラルネットワーク記述データは、層数、それぞれの層の入力値の数、それぞれの層の重みの数、それぞれの層の定数加算値の数等を含む。統計情報の間引き情報Ｎは一般には1つの整数であり、Ｎ個に１個の割合で統計情報を取得する回路が実装されることを
表わす。すなわち、統計情報の間引き情報Ｎは、Ｎ回の演算に対して１回の割合で統計情報が取得されることを意味する。それぞれの変数の生成個数はニューラルネットワーク記述データから取得可能である。それぞれの変数の統計情報の取得回数（サンプル数）は、生成個数／間引き情報（ここで、／は除算）で求めることができる。間引き情報Ｎは、演算処理部の一例であるＤＬ実行プロセッサ１０Ａにおける演算回数に対する統計情報の取得割合ということができる。
【０１２６】
プログラム生成パラメータは、例えば、各変数のスケールファクタの初期値、あるいは変数のデータ型を決定するための変数ごとの取得回数（サンプル数）の閾値等を含む。スケールファクタの初期値は、処理開始時の固定小数点数の小数点位置を指定する情報である。
【０１２７】
変数ごとの生成回数取得処理部３１１は、ニューラルネットワーク記述データを入力として、変数ごとに変数値の生成回数を取得し、変数ごとのサンプル数の取得処理部３１２に引き渡す。変数ごとに変数値の生成回数は、ニューラルネットワークの各層における演算回数ということもできる。変数ごとの生成回数取得処理部３１１は第１の取得部の一例である。
【０１２８】
変数ごとのサンプル数の取得処理部３１２は、変数ごとの生成回数取得処理部３１１から引き渡された変数ごとの変数値の生成回数と、プログラムに入力される統計情報の間引き情報に基づいて、変数ごとの統計情報の取得回数（サンプル数）を取得し、変数型決定部３１３に引き渡す。変数ごとのサンプル数の取得処理部３１２は、第２の取得部の一例である。
【０１２９】
変数型決定部３１３は、ニューラルネットワーク記述データと、変数ごとのサンプル数の取得処理部３１２から引き渡された変数ごとの統計情報の取得回数（サンプル数）とに基づいて、変数の型情報を決定する。プログラム生成部３１４は、ニューラルネットワーク記述データと、プログラム生成パラメータと、変数型決定部３１３から引き渡された変数の型情報とに基づいて、テンプレートを修正することで深層学習等の処理を実行するプログラムを生成し、ＤＬ実行プロセッサ１０Ａに出力する。変数型決定部３１３とプログラム生成部３１４との組み合わせがプログラムを生成する生成部の一例である。
【０１３０】
図２９にフルコネクト層のプログラムを生成するためのテンプレートを例示する。このテンプレート例の処理は、データ数Ｄ／１６回のループと、Ｃ個のベクトルの積和演算を実行するループを含む。この処理では、データ数Ｄ／１６回のループ中で、アキュミュレートレジスタacc_cir_reg()の配列をクリアする処理と、Ｃ回のループ中で、入力値ｘを
ベクトルレジスタにロードする処理と、重みｗをロードする処理と、入力値ｘと重みｗの積和演算を実行する処理を含む。さらに、この処理は、Ｄ／１６回のループ中で、バイアスｂをロードする処理と、積和演算結果にバイアスｂを加算する処理と、統計情報（非符号最上位ビット位置分布）を取得する処理と、積和演算結果をメモリにストアする処理を含む。
【０１３１】
このうち、例えば、forループのループ回数を指定する値Ｄ／１６、Ｃ、およびi16_to_i16は、パラメータで設定可能な値である。したがって、プログラム生成部３１４は、こ
れらのパラメータを変更することで、テンプレ−トを変更してプログラムを生成できる。なお、i16_to_i16の代り、i16_to_i8、i8_to_i16、i16_to_f32、f32_to_i16等のパラメータが使用可能である。i16_to_i16は、１６ビット固定小数点数維持（型変更なし）、i16_to_i8は１６ビット固定小数点数から８ビット固定小数点数への変更、i8_to_i16は８ビット固定小数点数から１６ビット固定小数点数への変更を指定する。また、i16_to_f32は、１６ビット固定小数点数から３２ビット浮動小数点数への変更、f32_to_i16は３２ビット固定小数点数から１６ビット浮動小数点数への変更を指定する。図のプログラムで、８、１６等の数値は、プロセッサのアーキテクチャによって決まるパラメータである。Ｃは、入力データ数、Ｄは出力データ数である。Ｄ／１６は、１６データ並列に出力されることを意味する。
【０１３２】
図３０に、ニューラルネットワーク記述データの構成を例示する。ここで、Caffeと呼
ばれるライブラリが使用する形式（prototext）での記述データの例を示す。この記述デ
ータは各層それぞれの内容をlayer｛｝内に定義する。例えば、nameに層の名前が定義さ
れ、typeに層の種類が指定される。さらに、層の種類ごとの独自のデータが定義される。さらに、層数分だけlayer｛｝が設定される。
【０１３３】
図３１に、prototextにおけるtopとbottomの定義を例示する。prototext独特の表現と
して、topとbottomがある。topとはある層が出力する先の層のことであり、bottomとはある層が入力を得る層のことである。例えば、処理がLayer1, Layer2, Layer3の順に
実行される場合、Layer2のbottomがLayer1になり、Layer2のtopがLayer3になる。
【０１３４】
図３２に、prototextによるニューラルネットワークの入力データの定義を例示する。prototextでは、入力データも層の一つとして定義される。この時のtypeは "Data" となる。上述のように、データの出力先をtopで指定する。図３２の例は、conv1とlabelという
層に出力することを示す。conv1は畳み込み層への出力を示し、labelは、最終段階の正解判定への出力を示す。また、data_paramにさらに詳細な情報が記述される。この例では、入力ファイルの名前（sourceで指定）、バッチサイズ（batch_sizeで指定）、形式（backendで形式「LMBD」）を格納する。
【０１３５】
なお、プログラム生成部３１４は、入力の情報を格納したファイルを読むことにより、図３２に例示した情報以外のさらに詳しい情報を得ることができる。たとえば、画像ファイルの大きさ、画像ファイルの入力チャネル数（カラーチャネルの数）が取得される。これらの情報はサンプル取得数の計算に用いられる。
図３３は、prototextによるニューラルネットワークの畳み込み層の定義を例示する。
【０１３６】
畳み込み層は、 "Convolution"という文字列がtypeに指定される。また、入力先は、図３２の入力データ(nameが"input")となるので、"input" という文字列がtopに指定される。convolution_param []は畳み込み層のパラメータであり、num_outputで出力チャネル数を指定する。図３３の場合は、６４チャネルが指定されている。また、kernel_sizeで畳
み込みのフィルタサイズを指定する。図３３の場合は３ｘ３フィルタが指定されている。
【０１３７】
さらに、前段のinput層から画像サイズ、入力チャネル数、入力画像数（バッチサイズ
）を得ることにより、この層での変数値の生成回数を求めることができる。例えば、入力画像の大きさを９６ｘ９６とする。また、バッチサイズは３２とする。つまり３２枚分の入力画像に対する画像の統計情報を収集する。この層ではフィルタサイズ３ｘ３で６４チャネル出力する。簡単のため、畳み込みの際、ゼロパディングを用いると仮定すると入力画像の大きさと出力画像の大きさは等しくなる。したがって、畳み込み層の変数値の生成回数は次の通りである。
回数＝96x96x64x32 = 18874368
【０１３８】
図３４は、prototextによるニューラルネットワークのフルコネクト層の定義を例示す
る。フルコネクト層は "InnerProduct" という文字列がtypeに指定される。inner_product_param []はフルコネクト層のパラメータであり、num_outputで出力チャネル数が指定される。図３４の場合は4096が指定されている。フルコネクト層の場合、1チャネルにつき1データの生成であるため、4096個のデータを生成する。バッチサイズが32であるとすると4096x32 = 131072個のデータが生成される。
【０１３９】
＜プログラム生成の処理フロー＞
（プログラム生成の簡略フロー）
図３５に、実施形態２におけるプログラム生成の簡略フローを例示する。図３５は、実施形態２の処理を簡易に説明するために、詳細を省略して説明する処理フロー図である。この処理では、変数型決定部３１３が、変数の統計情報サンプル数が閾値より少ないか否かを判定する。変数の統計情報サンプル数が閾値に達している場合（Ｓ１でＮＯ）、変数型決定部３１３は、選択可能なデータ型のうち、ダイナミックレンジが狭い型を選択し、変数の型に設定する。そして、プログラム生成部３１４が決定された型にしたがってプログラムを生成する（Ｓ２）。ここで、ダイナミックレンジは、変数値の取り得る範囲を示す特性情報ということができ、例えば、表現可能な値の最小値に対する最大値の比率によって定義できる。Ｓ１の判定がＮＯの場合は、統計情報のサンプル数が基準値より多いと判断した場合の一例である。また、Ｓ２の処理は、生成部が、ダイナミックレンジがより小さいデータ型を対象データに設定することの一例である。
【０１４０】
一方、変数の統計情報サンプル数が閾値より少ない場合（Ｓ１でＹＥＳ）、変数型決定部３１３は、選択可能なデータ型のうち、ダイナミックレンジが広い型を選択し、変数の型に設定する。そして、プログラム生成部３１４が決定された型にしたがってプログラムを生成する（Ｓ３）。Ｓ１の判定がＹＥＳの場合は、統計情報のサンプル数が基準値より少ないと判断した場合の一例である。また、Ｓ３の処理は、生成部が、ダイナミックレンジがより大きいデータ型を対象データに設定することの一例である。
（閾値決定の処理）
【０１４１】
上述のように、実施形態２においては、変数型決定部３１３は、統計情報のサンプル数が閾値を超えるかどうかで変数の型を決定する。ここで、閾値の決定方法は以下の方法が考えられる。
【０１４２】
第１の方法は、ＤＬ実行プロセッサ１０Ａ用のプログラムを生成する生成プログラム内部のパラメータとして閾値を実装する方法である。すなわち、閾値自体を生成プログラム内部にハードコーディングする方法が例示できる。
第２の方法は、ＤＬ実行プロセッサ１０Ａ用のプログラムを生成する生成プログラムがファイル等から読み込む設定情報の１つに閾値を含める方法である。
【０１４３】
第３の方法として、ホストマシン３が試験的に学習を実行して閾値を決定してもよい。例えば、ホストマシン３は、３２ビット浮動小数点表現と、閾値初期値を用いて型を決定した型の固定小数点表現との両方で、目的とする回数よりも少ない回数Ｎで試験的に学習を実行する。そして、固定小数点表現での学習誤差が３２ビット浮動小数点表現を用いた場合の学習誤差に所定値δｅを加えた値よりも大きいならば、それぞれの型決定にかかわる閾値を、閾値の種類ごとに予め決められた差分ずつ増やす処理を実行する。この処理は、型決定の閾値を増加することで、よりダイナミックレンジが広い型が選ばれやすくする。ホストマシン３は、このような閾値の変更後、再度型を決定し、固定小数点の試験学習を再実行する。そして、固定小数点での学習誤差が３２ビット浮動小数点表現を用いた場合の学習誤差に所定値δｅを加えた値以下となる条件が充足されたときに、ホストマシン３は、試験的な学習を終了し、本来の処理に切り替えて学習を続行することで閾値を正式に設定すればよい。
【０１４４】
図３６に、閾値決定の処理を例示する。ここでは、仮決めされた閾値を基に、目的とする回数よりも少ない回数Ｎで試験的に学習を実行し、閾値を決定する処理を例示する。この処理では、ホストマシン３の変数型決定部３１３は、仮決めした閾値にしたがって型決定を行い、深層学習のプログラムを生成する（Ｓ１０）。次に、ホストマシン３は、ＤＬ実行プロセッサ１０Ａで３２ビット浮動小数点表現を用いて、Ｎ回事前学習を実行し、学習誤差を結果として受け取り、変数ｅｆに格納する（Ｓ１１）。変数ｅｆの値は、浮動小数点数を用いて深層学習を実行したときの学習誤差の一例である。次に、ホストマシン３は、ＤＬ実行プロセッサ１０Ａを用いて固定小数点表現でＮ回事前学習をし、学習誤差を結果として受け取り、変数ｅｉに格納する（Ｓ１２）。変数ｅｉの値は、固定小数点数を用いて深層学習を実行したときの学習誤差の一例である。Ｓ１１、Ｓ１２の処理は、所定の限定された回数の深層学習を実行することの一例である。
【０１４５】
次に、ホストマシン３は、変数ｅｉの誤差が変数ｅｆの誤差と事前に設定した基準値（δｅ）との和（判定値という）よりも小さいか否かを判定する（Ｓ１３）。変数ｅｉの誤差が上記判定値よりも小さい場合、ホストマシン３は、閾値を減少するための調整を実行する（Ｓ１４）。一方、変数ｅｉの誤差が上記判定値以上の場合、ホストマシン３は、閾値を増加するための調整を実行する（Ｓ１５）。個々で、閾値を減少することは、統計情報のサンプル数が閾値以上の値になりやすくなる。その結果、変数型決定部３１３がダイナミックレンジの狭い変数を選びやすくする結果となる。一方、閾値を増加することは、統計情報のサンプル数が閾値より小さい値になりやすくなる。その結果、変数型決定部３１３がダイナミックレンジの広い変数を選びやすくする結果となる。Ｓ１３からＳ１５の処理は、浮動小数点数を用いて深層学習を実行したときの学習誤差と、固定小数点数を用いて深層学習を実行したときの学習誤差との差に基づいて基準値を決定することの一例である。
【０１４６】
なお、図３６は、Ｓ１３の判定で、変数ｅｉの誤差が単一の判定値より小さいか否かで閾値を変更するが、閾値を増加する場合と、閾値を減少する場合とで、異なる判定値を用
いてもよい。例えば、変数ｅｆの誤差と事前に設定した基準値（δｅ）との和を第１の判定値し、変数ｅｆの誤差と事前に設定した基準値（δｅ）の１／２倍の値との和を第２の判定値としてもよい。そして、変数ｅｉの誤差が第１の判定値より小さい場合には、閾値を維持し、変数ｅｉの誤差が第２の判定値より小さい場合には、ホストマシン３は、閾値を減少するための調整を実行すればよい。また、ホストマシン３は、変数ｅｉの誤差が第２の判定値と第１の判定値の間に収まるまで図３６の処理を繰り返し実行してもよい。図３６の処理は、基準値を決定する決定部の処理の一例ということができる。ホストマシン３は、決定部の一例として図３６の処理を実行すると言える。
【０１４７】
図３７は、閾値決定の処理の第１の変形を例示する。この処理では、仮決めした閾値Ｔと浮動小数点表現で学習した時の学習誤差ｅｆが入力として与えられる。また、この処理では、仮決めした閾値Ｔは、想定より大きめの値として設定される。この場合に、当初は統計データのサンプル数が少ないと判定され、変数のダイナミックレンジが広く設定され、エラーが小さくなると想定される。ホストマシン３はエラーがある程度大きくなるまで閾値を減少させる。
【０１４８】
ホストマシン３の変数型決定部３１３は、閾値Ｔから一定値（δｔ）を減少する（Ｓ２１）。次に、ホストマシン３の変数型決定部３１３は、閾値にしたがって型決定を行い、深層学習のプログラムを生成する（Ｓ２２）。次に、ホストマシン３は、ＤＬ実行プロセッサ１０Ａを用いて固定小数点表現でＮ回事前学習を実行し、学習誤差を結果として受け取り、変数ｅｉに格納する（Ｓ２３）。Ｓ２２の処理は、所定の限定された回数の深層学習を実行することの一例である。
【０１４９】
次に、ホストマシン３は、変数ｅｉの誤差が変数ｅｆの誤差と事前に設定した基準値（δｅ）との和（判定値）よりも大きいか否かを判定する（Ｓ２４）。変数ｅｉの誤差が上記判定値以下の場合、ホストマシン３は、処理をＳ２１に戻し、閾値を減少するための調整を実行する。一方、ホストマシン３は、変数ｅｉの誤差が上記判定値より大きい場合、閾値Ｔを調整後の閾値として決定する（Ｓ２５）。Ｓ２５の処理は、浮動小数点数を用いて深層学習を実行したときの学習誤差と、固定小数点数を用いて深層学習を実行したときの学習誤差との差に基づいて基準値を決定することの一例である。
【０１５０】
この処理では、処理の初期段階では、仮決めした閾値Ｔは、想定より大きめの値として設定されるので、統計情報のサンプル数が閾値以下となりやすく、ダイナミックレンジの広い型の変数が選択される。その結果、Ｓ２４の判定はＮＯになりやすく、処理が進むと、Ｓ２４の判定はＹＥＳになる。図３７の処理は、基準値を決定する決定部の処理の一例ということができる。ホストマシン３は、決定部の一例として図３７の処理を実行すると言える。
【０１５１】
図３８は、閾値決定の処理の第２の変形を例示する。この処理では、仮決めした閾値Ｔと浮動小数点表現で学習した時の学習誤差ｅｆが入力として与えられる。また、この処理では、仮決めした閾値Ｔは、想定より小さめの値として設定される。ホストマシン３の変数型決定部３１３は、閾値Tに一定値（δt）を加算する（Ｓ３１）。次に、ホストマシン３の変数型決定部３１３は、閾値にしたがって型決定を行い、深層学習のプログラムを生成する（Ｓ３２）。次に、ホストマシン３は、ＤＬ実行プロセッサ１０Ａを用いて固定小数点表現でＮ回事前学習を実行し、学習誤差を結果として受け取り、変数ｅｉに格納する（Ｓ３３）。Ｓ３３の処理は、所定の限定された回数の深層学習を実行することの一例である。
【０１５２】
次に、ホストマシン３は、変数ｅｉの誤差が変数ｅｆの誤差と事前に設定した基準値（δｅ）との和（判定値）よりも小さいか否かを判定する（Ｓ３４）。変数ｅｉの誤差が上
記判定値以上の場合、ホストマシン３は、処理をＳ２１に戻し、閾値を増加するための調整を実行する。一方、ホストマシン３は、変数ｅｉの誤差が上記判定値より小さい場合、閾値Ｔを調整後の閾値として決定する（Ｓ３５）。Ｓ３５の処理は、浮動小数点数を用いて深層学習を実行したときの学習誤差と、固定小数点数を用いて深層学習を実行したときの学習誤差との差に基づいて基準値を決定することの一例である。
【０１５３】
この処理では、処理の初期段階では、仮決めした閾値Ｔは、想定より小さめの値として設定されるので、統計情報のサンプル数が閾値より大きくなりやすく、ダイナミックレンジの狭い型の変数が選択される。その結果、Ｓ３４の判定はＮＯになりやすく、処理が進むと、Ｓ３４の判定はＹＥＳになる。図３８の処理は、基準値を決定する決定部の処理の一例ということができる。ホストマシン３は、決定部の一例として図３８の処理を実行すると言える。
【０１５４】
図３９にプログラム生成処理を例示する。処理では、ホストマシン３は、生成対象のプログラムのニューラルネットワーク記述データを取得する（Ｓ４１）。次に、ホストマシン３は、入力から統計情報の間引き数を取得する（Ｓ４２）。次に、ホストマシン３は、それぞれの変数について生成回数と間引き数から、統計情報のサンプル数を取得する（Ｓ４３）。そして、ホストマシン３の変数型決定部３１３は、それぞれの変数の統計情報サンプル数に基づいて型を決定する（Ｓ４４）。次に、ホストマシン３のプログラム生成部３１４は、決定された変数の型に基づいてプログラムを生成する（Ｓ４５）。
【０１５５】
図４０は、変数型決定部３１３の処理（図３９のＳ４４）の詳細を例示する。この処理では、変数型決定部３１３は、変数の統計情報サンプル数が第１の基準値（sample1）以
下であるか否かを判定する（Ｓ４４１）。変数の統計情報サンプル数が第１の基準値（sample1）以下である場合、変数型決定部３１３は、変数の型を３２ビット浮動小数点数に
する（Ｓ４４２）。また、変数の統計情報サンプル数が第１の基準値（sample1）より大
きい場合、変数型決定部３１３は、変数の統計情報サンプル数が第２の基準値（sample2
＞sample1）以下であるか否かを判定する（Ｓ４４３）。変数の統計情報サンプル数が第
２の基準値（sample2）以下である場合、変数型決定部３１３は、変数の型を１６ビット
固定小数点数にする（Ｓ４４４）。また、変数の統計情報サンプル数が第２の基準値（sample2）より大きい場合、変数型決定部３１３は、変数の型を８ビット固定小数点数にす
る（Ｓ４４５）。Ｓ４４２の処理は、サンプル数が基準値より少ないと判断した場合には、浮動小数点数のデータ型を対象データに設定することの一例と言える。Ｓ４４４、Ｓ４４５の処理は、サンプル数が基準値より多いと判断した場合には、固定小数点数のデータ型を対象データに設定することの一例と言える。
【０１５６】
図４１は、プログラム生成部３１４の処理を例示する。この処理では、プログラム生成部３１４は、複数階層のニューラルネットワーク中の各層の依存関係を整理する。すなわち、プログラム生成部３１４は、ニューラルネットワークの各層を順伝播の順に並びかえ、Layer[0], Layer[1], …, Layer[L-1]として管理する（Ｓ４５１）。次に、プログラム生成部３１４は、Layer[0], Layer[1], …, Layer[L-1]それぞれについて、順伝播と逆伝播のプログラムを生成する（Ｓ４５２）。プログラム生成部３１４は、図２９に例示したテンプレート中の入力数、変数の型等を変更することでプログラムを生成する。さらに、プログラム生成部３１４は、Layer[0], Layer[1], …, Layer[L-1]の順伝播と逆伝播を呼び出すコードを生成する（Ｓ４５３）。以上の処理によって、深層学習を実行するプログラムが生成される。
＜生成されたプログラムの実行＞
【０１５７】
ホストマシン３は、生成したプログラムをＤＬ実行プロセッサ１０Ａに転送し、プログラムの実行を起動する。ＤＬ実行プロセッサ１０Ａは、実施形態１と同様の手順で、深層
学習等の処理を実行し、処理結果をホストマシン３に返す。
【０１５８】
図４２は、ＤＬ実行プロセッサ１０Ａで実行される処理のうちの型に合わせた型変換パラメータの設定処理を例示する図である。型に合わせた型変換パラメータの設定処理は、ＤＬ実行プロセッサ１０Ａにおいて演算が実行されるときに、演算対象のデータの型を合わせる処理である。型に合わせた型変換パラメータの設定処理では、ＤＬ実行プロセッサ１０Ａは、基本的にはビット幅の大きい変数に合わせて型変換を実行する。また、ＤＬ実行プロセッサ１０Ａは、浮動小数点数と固定小数点数の演算では、浮動小数点数に合わせて演算を実行するように型変換を実行する。ここで、演算の種類は、図２７のＤＬ実行プロセッサ１０Ａに関して、（スカラ演算の種類）と（ベクトル演算（SIMD演算））で述べたものである。
【０１５９】
図４２では、これらのうち、１６ビット固定小数点数と８ビット固定小数点数の積和演算の一部である乗算を変数（ベクトル）ＸとＷに対して行う場合の型変換の処理が例示される。また、この処理では、ＤＬ実行プロセッサ１０Ａで演算可能な固定小数点数は８ビットか１６ビットであると想定する。この処理では、ＤＬ実行プロセッサ１０Ａは、変数Ｘ、Ｗの型が両方とも８ビット固定小数点数であるか否かを判定する（Ｓ１０１）。変数Ｘ、Ｗの型が両方とも８ビット固定小数点数である場合、ＤＬ実行プロセッサ１０Ａは、変数Ｘ、Ｗのレジスタ格納型を８ビット固定小数点数にする（Ｓ１０２）。一方、変数Ｘ、Ｗの型が両方とも８ビット固定小数点数でない場合、プロセッサ１０Ａは、変数Ｘ、Ｗのレジスタ格納型を１６ビット固定小数点数にする（Ｓ１０３）。そして、ＤＬ実行プロセッサ１０Ａは、型変換後の変数に対して演算を実行する。
【０１６０】
図４３は、シフト幅の設定を例示する図である。いま、演算が例えば、ベクトルＸとベクトルＷの内積と、バイアスｂの加算として、Ｘ＊Ｗ＋ｂであり、演算結果がアキュミュレートレジスタaccに積算されるとする。また、ベクトルＸおよびベクトルＷの各要素の
スケールファクタ、すなわち、小数点位置のシフト量がそれぞれＳｘ、Ｓｗであると仮定する。すると、アキュミュレートレジスタAccのスケールファクタは、ベクトルＸおよび
ベクトルＷの各要素の乗算の結果であるため、Ｓｘ＋Ｓｗとなっている。したがって、バイアスｂのスケールファクタをＳｂとすると、ＤＬ実行プロセッサ１０Ａは、ΔＷｂ＝Ｓｘ＋Ｓｗ−Ｓｂだけ左シフトさせる必要がある。
【０１６１】
また、図４４は、非符号となる最上位ビットの位置の分布からオーバーフロー率を設定し、最上位ビット位置η（eta）を決定する処理を例示する図である。図４４は、実施形
態１同様の構成によって得られるプログラムのループ中での非符号である最上位ビットの位置分布のうち、オーバーフロー率がｒｍａｘとなる点の桁位置をηとする。
【０１６２】
図４５は、演算Ｚ＝Ｘ＊Ｗ＋ｂによる演算結果Ｚの次のミニバッチで使用するスケールファクタの決定方法を例示する図である。ＤＬ実行プロセッサ１０Ａは、ビット０からη（図４４で決定された桁位置）までを次のミニバッチにおける有効ビット幅とみなす。演算Ｚ＝Ｘ＊Ｗ＋ｂによる演算結果Ｚをレジスタに格納する際の右シフト量ΔＳｚは、ΔＳｚ＝η＋2−βで求められる。ここで、βは、格納先のレジスタのビット幅であり、例え
ば、１６ビット、８ビット等である。したがって、次のミニバッチで使用する演算結果格納先の変数Ｚのスケールファクタは、Ｓｚ＝Ｓｘ＋Ｓｗ−ΔＳｚで求めることができる。ＤＬ実行プロセッサ１０Ａは、このように決定されるスケールファクタを用いて、各固定小数点数の少数位置を設定し、次のミニバッチの各演算を実行すればよい。
【０１６３】
また、例えば、深層学習での各層の入力Ｘは、前の層（順方向伝播の下位層）の出力Ｚと同じであるので、ＤＬ実行プロセッサ１０Ａは、前の層の出力Ｚのスケールファクタをそのまま使用すればよい。また、ＤＬ実行プロセッサ１０Ａは、重み係数Ｗとバイアスｂ
のスケールファクタを逆方向伝播時に更新すればよい。
＜実施形態２の効果＞
【０１６４】
図４６は、インターネット上の画像データベースImageNetの８階層ネットワークVGG8による認識結果を例示する。この例では、統計情報は１／１６に間引かれている。図のように、大半の変数を８ビット固定小数点数表現で処理し、一部の変数（例えば、１つのミニバッチでのサンプル数６２以下、あるいはサンプル数３２以下の変数）を１６ビット固定小数点数のように、ビット幅を拡張して処理すると、認識精度が向上する。一部の変数を浮動小数点数表現で処理する場合も同様である。したがって、実施形態２の手順および情報処理方法によれば、ホストマシン３は、ＤＬ実行プロセッサ１０Ａのように回路規模を抑制した固定小数点数を用いて少ないビット幅でニューラルネットワーク等の学習処理を含む演算を行い、認識精度を向上できる。
【０１６５】
また、ホストマシン５は、実際の学習回数よりも少ない学習回数Ｎ回の学習の実行結果により、閾値Ｔを決定し、当該閾値Ｔを基に統計情報のサンプル数が十分か否かを判定し、変数の型を選択する。したがって、ホストマシン５は、学習結果を反映して、統計情報のサンプル数が十分か否かの閾値を決定できる。
【０１６６】
また、ホストマシン３は、ＤＬ実行プロセッサ１０Ａが実行した学習のエラーに基づいて閾値を決定するので、実際の学習に適した閾値で学習に使用する変数の型を決定できる。また、ホストマシン３は、型を決定する際、通常の学習より少ない回数ＮでＤＬ実行プロセッサ１０Ａに学習させるので、短時間低負荷で閾値を決定できる。
【０１６７】
また、ホストマシン５は、浮動小数点数を用いて学習したときの学習誤差（ｅｆ）と、固定小数点数を用いて学習したときの学習誤差（ｅｉ）を比較する。そして、学習誤差（ｅｉ）が学習誤差（ｅｆ）に十分近づくまで処理を繰り返し、閾値を決定するので、固定小数点数を用いる場合でも、固定小数点数での学習誤差（ｅｉ）が動小数点数での学習誤差（ｅｆ）に近づくように閾値Ｔ設定できる。
【０１６８】
また、実施形態２のホストマシン３は、ニューラルネットワーク記述データを取得し、統計情報のサンプル数を算出するので、精度良くサンプル数を取得し、変数の型を決定できる。また、実施形態２のホストマシン３は、変数の型を決定後、テンプレートを用いて変数の型を変更し、プログラムを生成するので、簡易にプログラムを生成できる。
＜変形例＞
【０１６９】
上記実施形態２では、ホストマシン３とＤＬ実行ハードウェア１Ａを含む情報システムにおいて、ホストマシンが３学習プログラムを生成した。しかし、ホストマシン３とＤＬ実行ハードウェア１Ａとが一体のコンピュータであってもよい。すなわち、実施形態１で述べたプロセッサ１０あるいは図２７のＤＬ実行プロセッサ１０Ａが学習プログラムを生成するとともに、生成した学習プログラムを実行するようにしてもよい。図２７のＤＬ実行プロセッサ１０Ａが学習プログラムを生成するとともに、生成した学習プログラムを実行する場合には、演算処理部の一例であるＤＬ実行プロセッサ１０Ａが同一のプロセッサでプログラムを生成する生成部としての処理を実行するといえる。なお、図２３で、ホストマシン３とＤＬ実行ハードウェア１Ａとは単一の筐体に収納されていてもよいし、異なる筐体に収納されていてもよい。
《コンピュータが読み取り可能な記録媒体》
【０１７０】
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させること
により、その機能を提供させることができる。
【０１７１】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コンピュータ
等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１７２】
１  情報処理装置
１Ａ  ＤＬ実行ハードウェア
３  ホストマシン
１０    プロセッサ
１０Ａ  ＤＬ実行プロセッサ
１１    制御ユニット
１２    レジスタファイル
１３、１３Ａ  ベクトルユニット
１３Ｂ  ベクトル演算用の整数演算器
１３Ｃ  ベクトル演算用の浮動小数点数演算器
１４    スカラユニット
２１    命令用メモリ
２２    データ用メモリ
１０１    セレクタ
１０２    統計情報取得部
１０３    データ変換部
１０４    統計情報集約部
１０５    統計情報格納部
１１１    プログラムカウンタ
１１２    デコーダ
１３１    ベクトル演算用の演算器
１３２    積和演算用のアキュムレータ
１４１    スカラ用の演算器
【図１】
2019139338.tif 000003
【図２】
2019139338.tif 000004
【図３】
2019139338.tif 000005
【図４】
2019139338.tif 000006
【図５】
2019139338.tif 000007
【図６】
2019139338.tif 000008
【図７】
2019139338.tif 000009
【図８】
2019139338.tif 000010
【図９】
2019139338.tif 000011
【図１０】
2019139338.tif 000012
【図１１】
2019139338.tif 000013
【図１２】
2019139338.tif 000014
【図１３】
2019139338.tif 000015
【図１４】
2019139338.tif 000016
【図１５】
2019139338.tif 000017
【図１６】
2019139338.tif 000018
【図１７】
2019139338.tif 000019
【図１８】
2019139338.tif 000020
【図１９】
2019139338.tif 000021
【図２０】
2019139338.tif 000022
【図２１】
2019139338.tif 000023
【図２２】
2019139338.tif 000024
【図２３】
2019139338.tif 000025
【図２４】
2019139338.tif 000026
【図２５】
2019139338.tif 000027
【図２６】
2019139338.tif 000028
【図２７】
2019139338.tif 000029
【図２８】
2019139338.tif 000030
【図２９】
2019139338.tif 000031
【図３０】
2019139338.tif 000032
【図３１】
2019139338.tif 000033
【図３２】
2019139338.tif 000034
【図３３】
2019139338.tif 000035
【図３４】
2019139338.tif 000036
【図３５】
2019139338.tif 000037
【図３６】
2019139338.tif 000038
【図３７】
2019139338.tif 000039
【図３８】
2019139338.tif 000040
【図３９】
2019139338.tif 000041
【図４０】
2019139338.tif 000042
【図４１】
2019139338.tif 000043
【図４２】
2019139338.tif 000044
【図４３】
2019139338.tif 000045
【図４４】
2019139338.tif 000046
【図４５】
2019139338.tif 000047
【図４６】
2019139338.tif 000048