(57)【要約】【課題】ニューラルネットワークによる推論処理の認識精度を維持しつつ、演算効率を向上する。【解決手段】演算処理装置は、複数の固定小数点数データを格納するレジスタと、演算命令にしたがって固定小数点数データの演算を実行する演算回路と、前記レジスタが保持する複数の固定小数点数データの最上位ビットの位置の分布についての統計情報を取得する取得回路と、前記統計情報に基づいて最も数の多い最上位ビットの位置である最多ビット位置を特定し、特定した前記最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定する特定回路と、を備え、前記演算回路は、前記レジスタから出力される固定小数点数データのビットのうち、前記特定回路が特定したビット幅に対応するビットを使用して演算を実行する。【選択図】図１
2020135549.tif 000002
【特許請求の範囲】
【請求項１】
複数の固定小数点数データを格納するレジスタと、
演算命令にしたがって固定小数点数データの演算を実行する演算回路と、
前記レジスタが保持する複数の固定小数点数データの最上位ビットの位置の分布についての統計情報を取得する取得回路と、
前記統計情報に基づいて最も数の多い最上位ビットの位置である最多ビット位置を特定し、特定した前記最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定する特定回路と、
を備え、
前記演算回路は、前記レジスタから出力される固定小数点数データのビットのうち、前記特定回路が特定したビット幅に対応するビットを使用して演算を実行する
演算処理装置。
【請求項２】
前記特定回路は、前記最多ビット位置の下位ビット側に、２番目に数の多い最上位ビットの位置である第２ビット位置がある場合、前記第２ビット位置を前記最多ビット位置として前記ビット幅を特定する
請求項１に記載の演算処理装置。
【請求項３】
前記特定回路は、前記最多ビット位置の１ビット下位側に、前記第２ビット位置がある場合のみ、前記第２ビット位置を前記最多ビット位置として前記ビット幅を特定する
請求項２に記載の演算処理装置。
【請求項４】
前記特定回路は、前記統計情報の取得に使用した複数の固定小数点数データの最大値の最上位ビットから前記最多ビット位置までを前記ビット幅に特定し、
前記演算回路は、前記最多ビット位置の値を丸めたデータを使用して演算を実行する
請求項１ないし請求項３のいずれか１項に記載の演算処理装置。
【請求項５】
前記レジスタから出力される所定数の固定小数点数データを、圧縮後のデータの総ビット数が前記演算回路の入力ビット数以下になるように、前記ビット幅に基づいて圧縮するデータ変換部を備え、
前記演算回路は、前記データ変換部が圧縮した複数のデータを並列に実行する
請求項１ないし請求項４のいずれか１項に記載の演算処理装置。
【請求項６】
前記取得回路は、所定数の固定小数点数データのグループ毎に前記統計情報を取得し、
前記特定回路は、前記統計情報に基づいて前記グループ毎に前記ビット幅を特定し、
前記演算回路は、前記グループの１つで特定された前記ビット幅に対応するビットを使用して次のグループの演算を実行する
請求項１ないし請求項５のいずれか１項に記載の演算処理装置。
【請求項７】
複数の前記演算回路と、前記演算回路の各々に対応する前記取得回路および前記特定回路とを備え、
前記取得回路および前記特定回路は、前記演算回路毎に設けられる
請求項１ないし請求項６のいずれか１項に記載の演算処理装置。
【請求項８】
複数の前記演算回路を備え、
前記取得回路および前記特定回路は、複数の前記演算回路に共通に設けられる
請求項１ないし請求項６のいずれか１項に記載の演算処理装置。
【請求項９】
演算処理装置と、前記演算処理装置を制御する制御装置とを備え、ニューラルネットワークによる推論処理を実行する情報処理装置であって、
前記演算処理装置は、
複数の固定小数点数データを格納するレジスタと、
演算命令にしたがって固定小数点数データの演算を実行する演算回路と、
前記レジスタが保持する複数の固定小数点数データの最上位ビットの位置の分布についての統計情報を取得する取得回路と、
前記統計情報に基づいて最も数の多い最上位ビットの位置である最多ビット位置を特定し、特定した前記最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定する特定回路と、
を備え、
前記演算回路は、前記レジスタから出力される固定小数点数データのビットのうち、前記特定回路が特定したビット幅に対応するビットを使用して演算を実行する
情報処理装置。
【請求項１０】
複数の固定小数点数データを格納するレジスタと、演算命令にしたがって固定小数点数データの演算を実行する演算回路と、を備える演算処理装置の演算処理方法であって、
前記演算処理装置が有する取得回路が、前記レジスタが保持する複数の固定小数点数データの最上位ビットの位置の分布についての統計情報を取得し、
前記演算処理装置が有する特定回路が、前記統計情報に基づいて最も数の多い最上位ビットの位置である最多ビット位置を特定し、特定した前記最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定し、
前記演算回路が、前記レジスタから出力される固定小数点数データのビットのうち、前記特定回路が特定したビット幅に対応するビットを使用して演算を実行する
演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置および演算処理方法に関する。
【背景技術】
【０００２】
深層学習等に使用される演算処理装置において、演算命令の実行により得られた固定小数点数データのビット位置の分布に基づいて固定小数点数データの小数点位置を更新することで、深層学習の精度を向上する手法が提案されている（例えば、特許文献１参照）。
【０００３】
複数のデータを最大値に合わせて正規化する場合に、値が小さいデータが失われることを抑止するために、正規化の対象データと対象外データとを判定し、対象外データを、正規化の範囲の境界値に置き換える手法が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１８−１２４６８１号公報
【特許文献２】特開２００６−４８５９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ニューラルネットワークを用いた画像認識等の推論処理は、リアルタイム性が求められている。リアルタイム性を実現するために、例えば、３２ビットの浮動小数点数データを１６ビットの固定小数点数データに変換するなど、演算に使用するデータを圧縮して演算効率を向上することが考えられる。一方、データの圧縮によりデータの有効桁数が減る場合にも、認識精度は維持される必要がある。
【０００６】
１つの側面では、本発明は、ニューラルネットワークによる推論処理の認識精度を維持しつつ、演算効率を向上することを目的とする。
【課題を解決するための手段】
【０００７】
一つの観点によれば、演算処理装置は、複数の固定小数点数データを格納するレジスタと、演算命令にしたがって固定小数点数データの演算を実行する演算回路と、前記レジスタが保持する複数の固定小数点数データの最上位ビットの位置の分布についての統計情報を取得する取得回路と、前記統計情報に基づいて最も数の多い最上位ビットの位置である最多ビット位置を特定し、特定した前記最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定する特定回路と、を備え、前記演算回路は、前記レジスタから出力される固定小数点数データのビットのうち、前記特定回路が特定したビット幅に対応するビットを使用して演算を実行する。
【発明の効果】
【０００８】
１つの側面では、本発明は、ニューラルネットワークの認識精度を維持しつつ、演算効率を向上することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態における演算処理装置の一例を示す図である。
【図２】図１の演算処理装置の推論処理時の動作の一例を示す図である。
【図３】図１の演算処理装置の推論処理時の動作フローの一例を示す図である。
【図４】別の実施形態における演算処理装置の一例を示す図である。
【図５】図４の演算処理装置が実装される情報処理装置の一例を示す図である。
【図６】ニューラルネットワークの推論モデルで使用する所定数の固定小数点数データの最上位ビットの分布の一例を示す図である。
【図７】ニューラルネットワークの推論モデルで使用する所定数の固定小数点数データの最上位ビットの分布の変化の例を示す図である。
【図８】量子化部が特定した最多ビット位置から所定ビットずらしてビット幅を設定する場合の推論処理での認識精度の変化の一例を示す図である。
【図９】閾値を変えた場合の認識精度の変化の一例を示す図である。
【図１０】データのビット幅の変更前後における固定小数点数データの最上位ビットの分布の一例を示す図である。
【図１１】推論処理に使用するデータに応じた認識精度の一例を示す図である。
【図１２】図４の演算処理装置の推論処理時の動作フローの一例を示す図である。
【図１３】他の演算処理装置において、ニューラルネットワークの学習処理後に実施されるデータのビット幅の圧縮フローの一例を示す図である。
【図１４】図１３で決定したビット幅に合わせて設計されたニューラルネットワークの推論モデルの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を用いて実施形態が説明される。
【００１１】
図１は、一実施形態における演算処理装置の一例を示す。図１に示す演算処理装置１００は、ニューラルネットワークにおける画像処理等の推論に使用される専用のプロセッサでもよく、ＧＰＵ（Graphics  Processing  Unit）またはＣＰＵ（Central  Processing  Unit）等のプロセッサでもよい。
【００１２】
演算処理装置１００は、レジスタ２、演算回路４、取得回路６および特定回路８を有する。レジスタ２には、複数の固定小数点数データが格納される。演算回路４は、演算命令に基づいてレジスタ２から出力される固定小数点数データを使用して演算を実行し、演算結果を出力する。演算結果は、レジスタ２に格納されてもよく、図示しないメモリに格納されてもよい。
【００１３】
例えば、演算回路４の入力ビット数は１６ビットであり、演算回路４により演算可能な固定小数点数データのビット数は、１ビットの符号ビットを含めて１６ビット、８ビット、５ビット、４ビット、３ビットまたは２ビットである。すなわち、演算回路４は、１６ビットの演算以外に、２つの８ビットの固定小数点数データの演算を並列に実行可能であり、３つの５ビットの固定小数点数データの演算を並列に実行可能である。
【００１４】
また、演算回路４は、４つの４ビットの固定小数点数データの演算を並列に実行可能であり、５つの３ビットの固定小数点数データの演算を並列に実行可能であり、８つの２ビットの固定小数点数データの演算を並列に実行可能である。演算回路４は、特定回路８が特定したビット幅に応じて設定される数の固定小数点数データを使用して演算を実行する。演算結果は、例えば、レジスタ２に格納される。
【００１５】
なお、演算回路４は、ＳＩＭＤ（Single  Instruction  Multiple  Data）命令を実行するＳＩＭＤ演算回路でもよい。この場合、演算回路４は、１６ビットの演算を単独に実行でき、または８ビット、４ビット、２ビットのいずれかの演算を並列に実行できる。
【００１６】
取得回路６は、演算命令に基づいてレジスタ２から出力される複数の固定小数点数データを受信し、受信した複数の固定小数点数データの最上位ビットの位置の分布を示す統計情報を取得する。特定回路８は、取得回路６が取得した統計情報に基づいて、最も数の多い最上位ビットの位置である最多ビット位置を特定する。特定回路８は、特定した最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定し、特定したビット幅を示すビット幅情報を演算回路４に出力する。なお、特定したビット幅の最下位ビットは、丸め対象のビットであってもよい。この場合、演算回路４は、ビット幅より１ビット少ないビット数のデータを使用して演算を実行する。１ビットの符号ビットがデータに付加される場合、演算回路４が演算に使用する符号ビットを含むデータのビット幅は、特定回路８が特定したビット幅と同じである。
【００１７】
例えば、取得回路６および特定回路８は、演算回路４と並列に動作し、演算回路４は、演算命令に基づく演算の実行中に特定回路８により特定されたビット幅に基づいて、次の演算命令を実行する。なお、取得回路６および特定回路８は、演算命令の実行前にレジスタ２から出力されるデータのグループに基づいて統計情報を取得し、ビット幅を特定してもよい。演算回路４は、特定回路８により特定されたビット幅のデータを使用して、当該演算命令を実行してもよい。この場合、演算に使用するデータの統計情報を用いて特定されたビット幅のデータの演算を実行することができ、後述する認識処理の認識精度をさらに向上することができる。
【００１８】
なお、推論処理を実行するデータを、所定数のデータを含む複数のグループに分け、取得回路６は、データのグループ毎に統計情報を取得してもよい。この場合、特定回路８は、統計情報に基づいてグループ毎にビット幅を特定する。演算回路４は、グループの１つで特定されたビット幅に対応するビットを使用して次のグループの演算を実行する。
【００１９】
図２は、図１の演算処理装置１００の推論処理時の動作の一例を示す。すなわち、図２は、演算処理装置１００による演算処理方法を示す。図２において、網掛けの細長い矩形の各々は、固定小数点数データを示し、矩形の左端が最上位ビットを示す。１６ビットの固定小数点数データにおいて、符号ビットを除くデータ部は１５ビットである。入力データの左右の太い縦線は、１５ビットのデータ部の最上位ビットと最下位ビットとを示し、図２の上側の１４から０までの数値は、ビット番号を示す。
【００２０】
図２に示す例では、演算を実行するためにレジスタ２に保持されるデータは、１６ビットの固定小数点数データであり、取得回路６が１回の統計情報の取得に使用するデータの数は１２個であるとする。また、各固定小数点数データは、絶対値を示し、正値または負値のいずれである。各固定小数点データの最上位ビットは、正値では符号ビットを除いて上位側に最初に”１”が現れるビットであり、負値では符号ビットを除いて上位側に最初に”０”が現れるビットである。
【００２１】
取得回路６は、折れ線グラフのヒストグラムで示すように、演算命令に基づいてレジスタ２から出力される固定小数点数データの最上位ビットの位置の分布（度数）を示す統計情報を取得する。図２の統計情報は、最上位ビットがビット１３、１２、１１である固定小数点数データがそれぞれ１つずつあり、最上位ビットがビット１０である固定小数点データが２つあり、最上位ビットがビット９である固定小数点データが３つあることを示す。また、統計情報は、最上位ビットがビット８である固定小数点数データが１つあり、最上位ビットがビット７である固定小数点数データが２つあることを示し、最上位ビットがビット６である固定小数点データが１つあることを示す。最上位ビットがビット１４である固定小数点数データと、ビット５からビット０である固定小数点数データとは存在しない。
【００２２】
特定回路８は、統計情報に基づいて、度数が最も多い最上位ビットの位置（最多ビット位置）を特定し、特定した最多ビット位置に基づいて、演算回路４が演算に使用するデータのビット幅を特定する。図２に示す例では、特定回路８は、１２個の入力データのうちの最大値の最上位ビットであるビット１４から最多ビット位置のビット９までの６ビットをビット幅に特定し、特定したビット幅を示すビット幅情報を出力する。例えば、ビット幅情報は、ビット幅を示す値（例えば、”６”）を含んでもよく、最多ビット位置のビット番号（例えば、”９”）を含んでもよい。
【００２３】
演算回路４は、特定回路８から受信するビット幅情報により決まる演算の並列数に応じた演算を実行し、演算結果を出力する。例えば、演算回路４は、ビット幅情報が７ビット、６ビットまたは５ビットを示す場合、２つのデータを使用した演算を並列に実行する（１６≧（７＋１）×２、１６≧（６＋１）×２、１６≧（５＋１）×２）。演算回路４は、ビット幅情報が４ビットを示す場合、３つのデータを使用した演算を並列に実行する（１６≧（４＋１）×３）。演算回路４は、ビット幅情報が３ビットを示す場合、４つのデータを使用した演算を並列に実行する（１６≧（３＋１）×４）。演算回路４は、ビット幅情報が２ビットを示す場合、５つのデータを使用した演算を並列に実行する（１６≧（２＋１）×５）。演算回路４は、ビット幅情報が１ビットを示す場合、８つのデータを使用した演算を並列に実行する（１６≧（１＋１）×８）。なお、演算回路４は、ビット幅情報が８ビットから１５ビットを示す場合、１つのデータを使用した演算を単独で実行する。
【００２４】
ビット幅は、演算回路４が実行する演算に使用されるデータのビット数に対応しており、元の１５ビットのデータのビット数より少ない。すなわち、特定回路８により特定されたビット幅に応じて、演算回路４は、データを圧縮（量子化）し、圧縮した複数のデータの演算を並列に実行する。なお、データの圧縮は、レジスタ２と演算回路４との間に設けられるデータ圧縮回路により実行されてもよい。この場合、ビット幅情報は、データ圧縮回路にも供給される。
【００２５】
なお、演算回路４は、ビット幅情報で示されるビット幅の固定小数点数データの最下位ビットを丸め処理することで、演算対象ビットから除いてもよい。この場合、演算回路４は、ビット幅情報が６ビットを示す場合、２つのデータを使用した演算を並列に実行する（１６≧６×２）。演算回路４は、ビット幅情報が５ビットを示す場合、３つのデータを使用した演算を並列に実行する（１６≧５×３）。演算回路４は、ビット幅情報が４ビットを示す場合、４つのデータを使用した演算を並列に実行する（１６≧４×４）。演算回路４は、ビット幅情報が３ビットを示す場合、５つのデータを使用した演算を並列に実行する（１６≧３×５）。演算回路４は、ビット幅情報が２ビットを示す場合、８つのデータを使用した演算を並列に実行する（１６≧２×８）。
【００２６】
以上のように、演算に使用するデータの最上位ビットの位置の分布に基づいて、演算に使用するデータのビット幅を決めることで、データを圧縮（量子化）できるため、データをそのまま使用して演算する場合に比べて、演算の並列数を増やすことができる。ニューラルネットワークによる推論処理の精度に与える影響は、推論処理に使用する固定小数点数データの上位側のビットほど大きい。一方、下位ビット側が推論処理の精度に与える影響は小さいため、下位ビット側を演算対象から外しても、認識精度は変わらない場合が多い。したがって、図２に示す手法を演算処理装置１００に適用することで、ニューラルネットワークによる推論処理の認識精度を維持しつつ、演算効率を向上することができる。
【００２７】
図３は、図１の演算処理装置１００の推論処理時の動作フローの一例を示す。すなわち、図３は、演算処理装置１００による演算処理方法を示す。
【００２８】
まず、ステップＳ１０において、演算処理装置１００は、図示しない命令デコーダにより演算命令をデコードする。次に、ステップＳ１２において、演算命令のデコード結果に基づいて、演算に使用可能な複数のデータがレジスタ２から出力される。ステップＳ１２の後、ステップＳ１４、Ｓ１６では、演算回路４による演算が実行され、ステップＳ２０、Ｓ２２、Ｓ２４、Ｓ２６では、取得回路６による統計情報の取得と、特定回路８によるビット幅の特定が実行される。
【００２９】
ステップＳ１４において、演算回路４は、特定回路８からのビット幅情報に基づいて、レジスタ２から出力された複数のデータのうち、演算に使用可能な数のデータを選択する。演算回路４は、選択した所定数のデータの各々について、演算に使用するビットをビット幅情報に基づいて選択し、選択したビットを使用して演算を実行する。
【００３０】
例えば、演算回路４が選択するビットは、符号ビットを除く最上位ビットからビット幅情報で示される最多ビット位置までのビットである。なお、演算回路４は、選択したビットの最下位ビットの丸め処理を実行した後、データの演算を実行してもよい。次に、ステップＳ１６において、演算回路４は、演算結果を出力し、動作を終了する。
【００３１】
例えば、特定回路８は、データのビット幅を特定した後、ビット幅情報を示す信号を出力し続ける（レベル固定）。このため、ステップＳ１４で演算回路４が受信するビット幅情報は、既に実行した演算命令で使用したデータから特定されたものでもよい。
【００３２】
一方、ステップＳ２０において、取得回路６は、ステップＳ１２でレジスタ２から出力されたデータの統計情報を取得する。なお、ステップＳ２０による統計情報の取得は、所定数のデータを含むグループ毎に実行されてもよい。この場合、ステップＳ２２、Ｓ２４、Ｓ２６の動作は、グループ毎に取得された統計情報に基づいて実行される。
【００３３】
次に、ステップＳ２２において、特定回路８は、統計情報に基づいて、最上位ビットの位置の分布において、最も数が多い最上位ビットの位置である最多ビット位置を特定する。
【００３４】
次に、ステップＳ２４において、特定回路８は、最大のデータの最上位ビットの位置と、最多ビット位置とに基づいて、演算に使用するデータのビット幅を特定する。次に、ステップＳ２６において、特定回路８は、特定したビット幅を示すビット幅情報を出力し、動作を終了する。ビット幅情報が出力されたとき、演算回路４が、デコードされた演算命令の実行を開始している場合、ビット幅情報は、ビット幅情報が出力された後の演算命令で使用されてもよい。
【００３５】
以上、図１から図３に示す実施形態では、ニューラルネットワークによる推論処理の認識精度を維持しつつ、演算効率を向上することができる。
【００３６】
図４は、別の実施形態における演算処理装置の一例を示す。図４に示す演算処理装置１０２は、命令制御部１０、レジスタ部２０、ベクトルユニット３０およびスカラユニット４０を有する。命令制御部１０は、メモリインタフェース５０を介して命令メモリ５２に接続される。ベクトルユニット３０およびスカラユニット４０は、メモリインタフェース６０を介してデータメモリ６２に接続される。例えば、メモリインタフェース５０、６０に、メモリアクセスコントローラ（ＭＡＣ）が使用されてもよい。
【００３７】
命令制御部１０は、例えば、プログラムカウンタＰＣおよび命令デコーダＤＥＣ等を有する。命令制御部１０は、プログラムカウンタＰＣが示すアドレスに基づいて命令メモリ５２から命令をフェッチし、フェッチした命令を命令デコーダＤＥＣに供給する。命令デコーダＤＥＣは、フェッチされた命令をデコードし、デコード結果を演算ユニットであるレジスタ部２０、ベクトルユニット３０およびスカラユニット４０に発行する。なお、命令制御部１０は、命令をプリフェッチしておく命令バッファや命令キャッシュを有してもよい。
【００３８】
レジスタ部２０は、ベクトルユニット３０が使用するベクトルレジスタＲＥＧ（ＲＥＧ００−ＲＥＧ７７）およびベクトルアキュムレートレジスタＡ＿ＲＥＧ（Ａ＿ＲＥＧ０−ＡＲＥＧ＿７）を有する。例えば、各ベクトルレジスタＲＥＧは、１６ビットであり、８個のベクトルレジスタＲＥＧｎ０−ＲＥＧｎ７（ｎは０から７の整数のいずれか）を含む８セットのレジスタ群（ＲＥＧ００−ＲＥＧ０７〜ＲＥＧ７０−ＲＥＧ７７）のいずれかに割り当てられる。例えば、８個のベクトルアキュムレートレジスタＡ＿ＲＥＧの各々は、１６ビットに所定数のビットを追加している。
【００３９】
ベクトルレジスタＲＥＧｎ０−ＲＥＧｎ７およびベクトルアキュムレートレジスタＡ＿ＲＥＧ０〜Ａ＿ＲＥＧ７は、１ビットの符号ビットを含む演算対象データのビット数に応じて、演算エレメント数が変化する。例えば、演算対象データが９ビットから１６ビットの場合、演算エレメント数は１であり、演算対象データが６ビットから８ビットの場合、演算エレメント数は２である。演算対象データが５ビットの場合、演算エレメント数は３であり、演算対象データが４ビットの場合、演算エレメント数は４である。演算対象データが３ビットの場合、演算エレメント数は５であり、演算対象データが２ビットの場合、演算エレメント数は８である。
【００４０】
また、レジスタ部２０は、スカラユニット４０が使用するスカラレジスタＳＲ（ＳＲ０−ＳＲ３１）と、スカラアキュムレートレジスタＳＡとを有する。例えば、各スカラレジスタＳＲは、１６ビットであり、スカラアキュムレートレジスタＳＡは、１６ビットに所定数のビットを追加している。なお、レジスタ部２０が有するレジスタの数、ビット数および種類は、図４に限定されない。以下では、レジスタ部２０内の各種レジスタは、単にレジスタとも称される。
【００４１】
ベクトルユニット３０は、例えば、８要素の演算ユニットを有する。ベクトルユニット３０は、整数演算、ベクトルアキュムレートレジスタＡ＿ＲＥＧを用いた積和演算などを実行する機能を有する。また、ベクトルユニット３０は、ベクトルアキュムレートレジスタＡ＿ＲＥＧのクリア、積和演算（ＭＡＣ：Multiply  and  Accumulate）、累積加算、ベクトルレジスタＲＥＧへのデータの転送などを実行する。さらに、ベクトルユニット３０は、データメモリ６２からのデータのロードと、データメモリ６２へのデータのストアを実行する。
【００４２】
ベクトルユニット３０の各演算ユニットは、統計取得部３２、量子化部３４、データ変換部３６および整数演算器（ＯＰ）３８を有する。統計取得部３２、量子化部３４およびデータ変換部３６は、整数演算器３８毎に設けられる。統計取得部３２は取得回路の一例であり、量子化部３４は特定回路の一例であり、整数演算器３８は演算回路の一例である。なお、データ変換部３６の機能は、整数演算器３８に含まれてもよい。ベクトルユニット３０は、例えば、ベクトルレジスタＲＥＧｎ０−ＲＥＧｎ７に保持されるデータを入力し、８要素の演算ユニットの整数演算器３８で演算を並列に実行する。そして、ベクトルユニット３０は、演算結果である出力データを他のセットのベクトルレジスタＲＥＧｎ０−ＲＥＧｎ７に格納する。また、ベクトルユニット３０は、８要素の整数演算器３８でそれぞれ積和演算を実行し、積和演算結果の累積加算値をベクトルアキュムレートレジスタＡ＿ＲＥＧ０〜Ａ＿ＲＥＧ７にそれぞれ格納する。
【００４３】
スカラユニット４０は、統計取得部４２、量子化部４４、データ変換部４６および整数演算器（ＯＰ）４８を有する。統計取得部４２は取得回路の一例であり、量子化部４４は特定回路の一例であり、整数演算器４８は演算回路の一例である。なお、データ変換部４６の機能は、整数演算器４８に含まれてもよい。スカラユニット４０は、四則演算、シフト演算、分岐、ロード・ストアなどを実行する機能を有する。スカラユニット４０は、スカラレジスタＳＲとスカラアキュムレートレジスタＳＡとを使用して演算を実行する。例えば、整数演算器４８は、スカラレジスタＳＲのいずれかに格納されている入力データを演算し、演算結果である出力データを別のスカラレジスタＳＲに格納する。整数演算器４８は、積和演算を実行する場合、積和演算の結果をスカラアキュムレートレジスタＳＡに格納する。スカラユニット４０による演算結果は、スカラレジスタＳＲ、スカラアキュムレートレジスタＳＡまたはデータメモリ６２のいずれかに格納される。
【００４４】
各統計取得部３２、４２の機能は、図１に示す取得回路６の機能と同様である。すなわち、各統計取得部３２、４２は、演算命令に基づいてレジスタ部２０から出力される複数の固定小数点数データを受信し、受信した複数の固定小数点数データの最上位ビットの位置の分布を示す統計情報を取得する。なお、各統計取得部３２、４２は、複数の演算命令で使用される数百または数千から数万のデータの統計情報を取得してもよい。
【００４５】
量子化部３４、４４の機能は、図１に示す特定回路８の機能と同様である。すなわち、各量子化部３４、４４は、対応する統計取得部４２が取得した統計情報に基づいて、最も度数が多い最上位ビットの位置である最多ビット位置を特定する。各量子化部３４、４４は、特定した最多ビット位置に基づいて、演算に使用する固定小数点数データのビット幅を特定し、ビット幅情報として出力する。各量子化部３４は、特定したビット幅を示すビット幅情報を、対応するデータ変換部３６に出力する。量子化部４４は、特定したビット幅を示すビット幅情報をデータ変換部４６に出力する。
【００４６】
なお、ビット幅情報は、最大のデータの最上位ビットからのビット数を示す情報でもよく、ビット幅で示されるデータの最下位ビットを示すビット番号でもよい。例えば、符号ビットを除くデータ部が１５ビットでありデータ部の最上位ビットのビット番号が”１４”であるとする。この場合、量子化部３４は、特定したビット幅（＝５ビット）に基づいて、ビット番号１０を示すビット幅情報を出力してもよい。
【００４７】
各データ変換部３６は、演算命令に基づいてレジスタ部２０から出力される複数のデータの中から整数演算器３８で演算可能な数のデータを、ビット幅情報に基づいて選択する。各データ変換部３６は、選択した所定数のデータのビット数を、ビット幅情報に基づいて圧縮（量子化）する。例えば、データ変換部３６は、ビット幅情報に基づいて、圧縮後のデータの総ビット数が整数演算器３８の入力ビット数以下になるように、レジスタ部２０から出力される所定数の固定小数点数データを圧縮する。
【００４８】
各データ変換部３６は、圧縮したデータの最下位ビットの丸め処理を実行し、丸め処理を実行した所定数のデータを整数演算器３８に出力する。丸め処理に最下位ビットの情報を、最下位ビットより上位のビットに含ませることでより、整数演算器３８に出力するデータのビット数を削減することができ、整数演算器３８に出力するデータ数を増加することができる。この結果、整数演算器３８が実行する演算の並列数を増加させることができ、演算効率を向上することができる。
【００４９】
データ変換部４６の機能は、データ変換部３６の機能と同様である。すなわち、データ変換部４６は、レジスタ部２０から出力される複数のデータの中から整数演算器４８で演算可能な数のデータを、ビット幅情報に基づいて選択し、選択した所定数のデータのビット数を、ビット幅情報に基づいて圧縮（量子化）する。例えば、データ変換部３６は、ビット幅情報に基づいて、圧縮後のデータの総ビット数が整数演算器４８の入力ビット数以下になるように、レジスタ部２０から出力される所定数の固定小数点数データを圧縮する。また、データ変換部４６は、圧縮したデータの最下位ビットの丸め処理を実行し、丸め処理を実行した所定数のデータを整数演算器４８に出力する。各データ変換部３６、４６において、選択されなかったデータは、後続の演算命令の実行時に順次使用される。
【００５０】
各統計取得部３２、各量子化部３４および各データ変換部３６は、整数演算器３８毎に設けられる。なお、１つの統計取得部３２、１つの量子化部３４および１つのデータ変換部３６が、複数の整数演算器３８に共通に設けられてもよい。この場合、統計取得部３２は、レジスタ部２０から各整数演算器３８に供給される複数のデータの統計情報を取得する。量子化部３４は、統計情報に基づいて特定したビット幅を示すビット幅情報を複数のデータ変換部３６に出力する。データ変換部３６は、ビット幅情報に基づいて、各整数演算器３８に供給する固定小数点数データのビット数を圧縮（量子化）する。統計取得部３２、量子化部３４およびデータ変換部３６を共通化することで、共通化しない場合に比べて、ベクトルユニット３０の回路規模を削減することができる。
【００５１】
整数演算器３８は、１６ビットの演算器である。整数演算器３８は、１６ビットデータの演算だけでなく、２つの８ビットデータの並列演算、３つの５ビットデータの並列演算、４つの４ビットデータの並列演算、５つの３ビットデータの並列演算または８つの２ビットデータの並列演算を実行可能である。なお、各データは、符号ビットを含むため、演算に使用されるデータ値を表すビット数は、データのビット数より１ビット少ない。
【００５２】
整数演算器４８は、１６ビットの演算器である。整数演算器４８は、１６ビットデータの演算だけでなく、２つの８ビットデータの並列演算、３つの５ビットデータの並列演算、４つの４ビットデータの並列演算、５つの３ビットデータの並列演算または８つの２ビットデータの並列演算を実行可能である。なお、各データは、符号ビットを含むため、演算に使用されるデータ値を表すビット数は、データのビット数より１ビット少ない。
【００５３】
なお、整数演算器３８は、演算を実行するデータの並列数の認識が必要な場合、量子化部３４から出力されるビット幅情報を受けてもよい。同様に、整数演算器４８は、演算を実行するデータの並列数の認識が必要な場合、量子化部４４から出力されるビット幅情報を受けてもよい。また、整数演算器３８、４８は、ＳＩＭＤ演算器でもよい。この場合、各整数演算器３８、４８は、１６ビットの演算を単独に実行でき、または８ビット、４ビット、２ビットのいずれかの演算を並列に実行できる。
【００５４】
図５は、図４の演算処理装置１０２が実装される情報処理装置の一例を示す。図５に示す情報処理装置２００は、例えば、サーバであり、ホストマシン７０と、ホストマシン７０にアクセス可能に接続された端末装置８０と、専用インターフェースを介してホストマシン７０に接続された演算処理装置１０２（図４）とを有する。なお、演算処理装置１０２は、ホストマシン７０のマザーボードに実装されてもよい。また、演算処理装置１０２の変わりに、図１に示した演算処理装置１００がホストマシン７０に接続されてもよい。情報処理装置２００は、演算処理装置１０２を動作させて、ニューラルネットワークによる推論処理を実行する。
【００５５】
ホストマシン７０は、ＣＰＵ等のプロセッサ７１と、演算処理装置１０２と接続するための高速入出力インターフェース７２と、メインメモリ７３と、内部バス７４とを有する。さらに、ホストマシン７０は、内部バス７４に接続された大容量のＨＤＤ（Hard  Disk  Drive）などの補助記憶装置７５と、端末装置８０と接続するために内部バス７４に接続された低速入出力インターフェース７６とを有する。ホストマシン７０は、演算処理装置１０２を制御する制御装置の一例である。
【００５６】
プロセッサ７１は、補助記憶装置７５に記憶されているプログラムをメインメモリ７３に展開したプログラムを実行する。高速入出力インターフェース７２は、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓインターフェースである。メインメモリ７３は、例えば、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）やＨＢＭ（High  Bandwidth  Memory）であり、プロセッサ７１が実行するプログラムやデータを記憶する。
【００５７】
内部バス７４は、プロセッサ７１の動作速度に比べて低速の周辺機器とプロセッサ７１とを接続し、両者の通信を中継する。低速入出力インターフェース７６は、例えば、ＵＳＢ（Universal  Serial  Bus）インターフェースであり、端末装置８０のキーボードやマウスとの接続を行い、または、イーサーネットのネットワークとの接続を行う。補助記憶装置７５には、推論処理用プログラムと、推論処理用データ等とが記憶される。
【００５８】
情報処理装置２００の利用者は、端末装置８０からホストマシン７０にアクセスし、演算処理装置１０２に推論処理等を実行させる。ホストマシン７０は、端末装置８０からの指示にしたがい、演算処理装置１０２に実行させる推論処理用プログラムを演算処理装置１０２に送信する。そして、演算処理装置１０２は、受信したプログラムを実行し、ホストマシン７０から送信される画像データ等の推論処理を実行する。
【００５９】
図６は、ニューラルネットワークの推論モデルで使用する所定数の固定小数点数データの最上位ビットの分布の一例を示す。例えば、図６に示す分布は、図４の統計取得部３２または統計取得部４２により取得される。図６に示す分布は、上述した図２と同様に、正値および負値の両方（絶対値）を示しており、最上位ビットは、正値では符号ビットを除いて上位側に最初に”１”が現れるビットであり、負値では符号ビットを除いて上位側に最初に”０”が現れるビットである。統計取得部４２および量子化部４４の動作は、統計取得部３２および量子化部３４の動作と同様であるため、以下では、統計取得部３２および量子化部３４の動作が説明される。
【００６０】
図６は、量子化（圧縮）する前のデータ（例えば、符号ビットを除く１５ビット；ビット１５からビット０）を示す。本実施形態では、ニューラルネットワークの推論モデルにおいて、各レイヤーで使用するデータのビット幅の最大値は、推論に使用する全データのうち、最大データを最上位ビットとする１５ビットであるとする。
【００６１】
図６の分布において、量子化部３４は、統計情報において最も度数が多い最上位ビットの位置である最多ビット位置をビット１０に特定する。また、量子化部３４は、統計情報において最も度数が２番目に多い最上位ビットの位置である第２ビット位置をビット９に特定する。また、量子化部３４は、第２ビット位置が最多ビット位置に対して１ビット下位側であることを検出し、最多ビット位置での度数と第２位置での度数との差が、閾値未満であるか判定する。
【００６２】
図６の例では、度数の差が閾値未満であるため、量子化部３４は、第２ビット位置（ビット９）を丸め対象のビット位置に特定する。すなわち、量子化部３４は、第２ビット位置を最多ビット位置として特定する。そして、量子化部３４は、最上位ビット（ビット１４）から丸め対象ビット（ビット９）までのビット幅（６ビット）を示すビット幅情報を出力する。なお、量子化部３４は、丸め対象ビットのビット番号９をビット幅情報として出力してもよい。
【００６３】
なお、量子化部３４は、第２ビット位置が最多ビット位置の１ビット下位側でない場合、最多ビット位置を丸め対象のビット位置に特定する。また、量子化部３４は、第２ビット位置が最多ビット位置の１ビット下位側であり、最多ビット位置の度数と第２ビット位置の度数との差が閾値以上の場合、最多ビット位置を丸め対象のビット位置に特定する。そして、量子化部３４は、最上位ビット（ビット１４）から丸め対象ビット（ビット１０）までのビット幅（５ビット）を示すビット幅情報を出力する。
【００６４】
また、量子化部３４は、第２ビット位置が最多ビット位置のｎビット下位側にあり（例えば、ｎは、１、２、３のいずれか）、最多ビット位置の度数と第２ビット位置の度数との差が閾値未満の場合、第２ビット位置を最多ビット位置として特定してもよい。
【００６５】
例えば、データの最上位ビットの度数は、隣接する複数ビットにまたがって分布する場合がある。この場合、最多ビット位置が丸め対象ビットになると、最多ビット位置の下位ビット側に位置する第２ビット位置のデータが切り捨てられてしまい、認識精度が低下するおそれがある。最多ビット位置の下位側に２番目に度数の多い第２ビット位置がある場合、第２ビット位置を最多ビット位置として丸め対象ビットに特定することで、認識精度の低下を抑止することができる。したがって、認識精度を低下させることなく、整数演算器３８が演算に使用するデータのビット数を削減することができる。この結果、整数演算器３８で並列に実行するデータ数を増加させることができ、演算処理装置１０２の演算効率を向上することができる。
【００６６】
なお、図６に破線の矢印で示す範囲に最上位ビットがあるデータは”０”として切り捨てられる。しかし、推論処理では、値が小さいデータは推論結果に与える影響が小さいため、”０”として切り捨てても認識精度は劣化しない。
【００６７】
図７は、ニューラルネットワークの推論モデルで使用する所定数の固定小数点数データの最上位ビットの分布の変化の一例を示す。図７に示すように、統計情報は、演算対象のデータのグループ毎に異なる。統計情報に応じて最多ビット位置が変わると、量子化部３４、４４が出力するビット幅情報も変わる。
【００６８】
例えば、カメラで撮影した動画像に含まれる各画像を用いて、演算処理装置１０２により推論処理を実行する場合、時間的に隣接する画像の特徴は互いに似ているため、最上位ビットの位置の分布は互いに似たものになる。このため、例えば、画像毎のデータを１つのグループとして、グループ毎に推論処理を実行する場合、隣接するグループの最上位ビットの位置の分布は互いに似たものになる。
【００６９】
したがって、１つの前のグループのデータの統計情報から得られたビット幅を、次のグループの演算の実行時に使用する場合、推論処理の認識精度を、低下させることなく維持することができる。例えば、動画像に含まれる時間的に連続した３つの画像の最上位ビットの位置の分布が、時間の早い順に図７の（Ａ）、（Ｂ）、（Ｃ）であるとする。分布（Ａ）、（Ｂ）、（Ｃ）は、互いに似ているため、例えば、分布（Ａ）から得られるビット幅を使用して、分布（Ｂ）のデータの演算を実行しても、推論処理での認識精度を維持することができる。同様に、分布（Ｂ）から得られるビット幅を使用して、分布（Ｃ）のデータの演算を実行しても、推論処理での認識精度を維持することができる。
【００７０】
一方、動画像に含まれる撮影時間が離れた２つの画像は、類似度が低いため、それぞれの画像の統計情報から得られる最多ビット位置は大きくずれやすく、最多ビット位置から特定されるビット幅も異なりやすい。したがって、後述する図１３および図１４で説明する手法を用いて、分布（Ａ）、（Ｂ）、（Ｃ）に対して最適なビット幅を設定した場合、分布（Ａ）、（Ｂ）、（Ｃ）の画像と撮影時間が異なる画像の推論処理の認識精度は低下するおそれがある。
【００７１】
これに対して、この実施形態では、１つ前のグループのデータの統計情報に基づいて特定されたビット幅を使用して、次のグループのデータの演算処理を実行する。撮影時間が隣接した類似度が高い画像データの統計情報に基づいてビット幅を特定し、特定したビット幅を使用して推論処理を実行することで、動画像の各画像の認識精度を維持することができる。
【００７２】
図８は、量子化部３４、４４が特定した最多ビット位置から所定ビットずらしてビット幅を設定する場合の推論処理での認識精度の変化の一例を示す。特定した最多ビット位置に対して上位ビット側にずらしてビット幅情報を設定する場合、最多ビット位置のデータが欠落するため、認識精度は著しく低下する。このため、最多ビット位置は、ビット幅情報に含める必要がある。
【００７３】
一方、特定した最多ビット位置に対して下位ビット側にずらしてビット幅情報を設定する場合、認識精度は僅かに向上する。しかし、ビット幅が増えることで、整数演算器３８、４８での演算の並列数が減ると、演算効率が低下する。このため、下位ビット側へのずらし量は、図６で説明したように、最多ビット位置に対して１ビット程度にすることが好ましい。これにより、推論処理の認識精度を維持しつつ、演算効率を向上することができる。
【００７４】
図９は、閾値を変えた場合の認識精度の変化の一例を示す。閾値は、図６で説明したように、度数が２番目に多い第２ビット位置が最多ビット位置に対して１ビット下位側である場合、第２ビット位置を丸め対象ビットとするかの判定に使用される。閾値は、最多ビット位置での度数と、最多ビット位置に対して１つ下位側のビットの度数との差を示し、例えば、最多ビット位置での度数を１００％とした場合の比率で示される。図９において、０％の閾値は、最多ビット位置を常に丸め対象ビットとすることを示す。
【００７５】
図９の右側の縦軸は、閾値を変えた場合のビット幅の変化（平均値）の例を示す。ここで、ビット幅は、演算に使用するデータのビット数を決めるために量子化部３４または量子化部４４により特定される。例えば、ビット幅の変化の平均値は、推論処理用のニューラルネットワークの全レイヤーの平均値である。
【００７６】
図９では、閾値を５％以上に設定する場合、認識精度がほぼ最大になり、閾値を５％未満に設定する場合、閾値が０％に近づくにしたがって認識精度は低下していく。このため、閾値は、５％以上に設定することが好ましい。また、閾値が５％の場合、閾値が１０％以上の場合に比べて、ビット幅の平均を少なくできる。ビット幅が増えると並列に演算できるデータの数が減るため、ビット幅は小さい方が好ましい。以上より、５％の閾値が、認識精度および演算の並列数の両方に取って好ましいことが分かる。
【００７７】
図１０は、データのビット幅の変更前後における固定小数点数データの最上位ビットの分布の一例を示す。統計取得部４２、量子化部４４およびデータ変換部４６の動作は、統計取得部３２、量子化部３４およびデータ変換部３６の動作と同様であるため、以下では、統計取得部３２、量子化部３４およびデータ変換部３６の動作が説明される。なお、元のデータのヒストグラム以外のヒストグラムは、説明のためのものであり、統計取得部３２等により生成されるものではない。ビット幅の変更前のヒストグラムは、図６と同様であり、統計取得部３２により取得される統計情報である。
【００７８】
図１０に示す例では、最多ビット位置での度数と、最多ビット位置に対して１つ下位側の度数が２番目に多い第２ビット位置の度数との差は、図６で説明したように、閾値未満（例えば、５％未満）である。このため、量子化部３４は、最多ビット位置に対して１つ下位側のビットを丸め対象ビットに設定する。これにより、丸め対象ビットより下位側の最上位ビットがあるデータは、”０”に設定され、ヒストグラムの度数から取り除かれる。
【００７９】
量子化部３４から出力されるビット幅情報に基づいて、データ変換部３６が丸め対象ビットの丸め処理を実行した後、丸め対象ビットに最上位ビットがあるデータの最上位ビットは、丸め対象ビットより１ビット上位側に移動する。そして、ビット１４からビット１０の５ビットに符号ビットをそれぞれ付加したデータを使用して２つの演算が並列に実行される。
【００８０】
図１１は、推論処理に使用するデータに応じた認識精度の一例を示す。図１１（Ａ）は、図６に示した手法を用いて、図４の演算処理装置１０２によりデータの最上位ビットの分布に応じてデータのビット幅を変更する場合であって、ビット幅の平均が４ビットの場合の認識精度を示す。図１１（Ｂ）は、データのビット幅を４ビットに固定した場合の認識精度を示す。図１１（Ｃ）は、浮動小数点演算器を有する他の演算処理装置により、３２ビットの浮動小数点数データを使用して推論処理を実行した場合の認識精度を示す。
【００８１】
図１１（Ａ）は、ニューラルネットワークの全てのレイヤーでの推論処理に使用した固定小数点数データのビット幅の平均が４ビットである例を示す。例えば、図１１（Ａ）では、図１１（Ｂ）と比較するために、データのビット幅の平均が４ビットになるような画像データを使用して推論処理が実行される。図１１（Ｂ）は、ニューラルネットワークの全てのレイヤーでの推論処理に使用した固定小数点数のデータのビット幅を４ビットに固定した例を示す。図１１（Ｃ）は、ニューラルネットワークの全てのレイヤーでの推論処理に使用したデータが３２ビットの浮動小数点数データである例を示す。
【００８２】
図１１では、推論に使用するデータのビット幅の平均が４ビットの場合、データのビット幅を４ビットに固定する場合に比べて、推論処理の認識精度を向上することができ、３２ビット浮動小数点数データを使用する場合と同等以上の認識精度を得ることができる。データのビット幅を４ビットに固定する場合も、ビット幅の平均は４ビットである。ビット幅の平均が同じ場合、整数演算器３８、４８による命令の実行効率は、ほぼ同じになる。したがって、図６に示した手法を用いることで、整数演算器３８、４８による命令の実行効率が同等の場合にも、認識精度を向上することができる。
【００８３】
図１２は、図４の演算処理装置１０２の推論処理時の動作フローの一例を示す。すなわち、図１２は、演算処理装置１０２による演算処理方法を示す。図３と同様の動作については、詳細な説明は省略する。なお、ベクトルユニット３０とスカラユニット４０は、演算に使用するデータの数が異なることを除き同様に動作するため、以下では、ベクトルユニット３０の動作について説明される。
【００８４】
まず、ステップＳ３０において、図４の命令デコーダＤＥＣは、演算命令をデコードする。次に、ステップＳ３２において、演算命令のデコード結果に基づいてレジスタ部２０から演算に使用可能な複数のデータが出力される。ステップＳ３２の後、ステップＳ３４からステップＳ４４では、データ変換部３６によるデータのビット幅の変換と、整数演算器３８による演算が実行される。また、ステップＳ５０からステップＳ５８では、統計取得部３２による統計情報の取得と、量子化部３４によるビット幅の特定が実行される。
【００８５】
ステップＳ３４において、データ変換部３６は、量子化部３４からのビット幅情報に基づいて、レジスタ部２０から出力された複数のデータのうち、演算に使用可能な数のデータを選択する。すなわち、量子化部３４は、演算に使用するデータの総ビット数が１６ビット以下になるようにデータを選択する。
【００８６】
例えば、ビット幅情報が２ビットを示すとき、最下位ビットの丸め処理後の１ビットのデータに符号ビットを加えたデータのビット数は２ビットであるため、データ変換部３６は、８個のデータを選択する。ビット幅情報が３ビットを示すとき、最下位ビットの丸め処理後の２ビットのデータに符号ビットを加えたデータのビット数は３ビットであるため、データ変換部３６は、５個のデータを選択する。同様にして、ビット幅情報が４ビットを示すとき、データ変換部３６は、４個のデータを選択し、ビット幅情報が５ビットを示すとき、データ変換部３６は、３個のデータを選択する。ビット幅情報が６ビット、７ビット、８ビットを示すとき、最下位ビットの丸め処理後のデータに符号ビットを加えたデータのビット数は、それぞれ６ビット、７ビット、８ビットであるため、データ変換部３６は、２個のデータを選択する。ビット幅情報が９ビット以上１５ビット以下を示すとき、データ変換部３６は、１つの１６ビットデータを選択する。
【００８７】
次に、ステップＳ３６において、データ変換部３６は、ステップＳ３４で選択したデータの各々から、ビット幅情報に対応するビット数を、符号ビットを除く上位ビット側から抽出することで、データを量子化（圧縮）する。次に、ステップＳ３８において、データ変換部３６は、量子化したデータの最下位ビットの丸め処理を実行し、丸め処理後のデータを整数演算器３８に出力する。なお、ステップＳ３６、Ｓ３８の動作の順序は逆にされてもよい。次に、ステップＳ４０において、整数演算器３８は、受信したデータを使用して演算を実行し、演算結果を出力する。
【００８８】
次に、ステップＳ４２において、データ変換部３６は、レジスタ部２０から出力されたデータのうち、演算に使用しない未使用データがある場合、動作をステップＳ４４に移行し、未使用データがない場合、動作を終了する。ステップＳ４４において、データ変換部３６は、未使用データの情報をレジスタ部２０に出力し、動作を終了する。レジスタ部２０は、未使用データを次の演算で使用するために、破棄することなく保持する。なお、ステップＳ４２、Ｓ４４の動作は、ステップＳ３４からステップＳ４０の間に実行されてもよい。
【００８９】
一方、ステップＳ５０において、統計取得部３２は、ステップＳ３２でレジスタ部２０から出力されたデータの統計情報を取得する。なお、統計取得部３２は、演算に使用されなかった未使用データがレジスタ部２０から出力された場合、未使用データの統計情報は取得しない。これは、未使用データの統計情報は、レジスタ部２０から最初に出力されたときに取得しているためである。これにより、同一のデータが重複して統計情報として取得されることを抑止することができる。統計情報の取得に使用するか否かを判定するために、レジスタ部２０から出力されるデータは、未使用データであることを示す未使用フラグが付加されてもよい。
【００９０】
次に、ステップＳ５２において、統計取得部３２は、統計情報の取得に使用したデータが規定のデータ数に到達した場合、量子化部３４に動作の開始を指示し、動作をステップＳ５４に移行し、規定のデータ数に到達していない場合、動作を終了する。規定のデータ数とは、図７で説明したグループに含まれるデータ数でもよい。
【００９１】
次に、ステップＳ５４において、量子化部３４は、統計取得部３２が取得した統計情報を用いて、最も度数が多い最上位ビットの位置である最多ビット位置を検出する。なお、２番目に度数が多い第２ビット位置が最多ビット位置に対して１ビット下位側にあり、最多ビット位置の度数と第２ビット位置の度数との差が閾値未満の場合、量子化部３４は、第２ビット位置を最多ビット位置として設定する。次に、ステップＳ５６において、量子化部３４は、演算に使用するデータのビット幅を特定する。なお、演算に使用するデータは、丸め処理により失われるビットを含む。次に、ステップＳ５８において、量子化部３４は、ステップＳ５６で決定したビット幅情報をデータ変換部３６に出力し、動作を終了する。
【００９２】
図１３は、他の演算処理装置において、ニューラルネットワークの学習処理後に実施されるデータのビット幅の圧縮フローの一例を示す。例えば、図１３に示すフローは、推論処理用のニューラルネットワークのレイヤー毎に実行される。
【００９３】
まず、ステップＳ６０において、演算処理装置は、学習結果に基づいて、ニューラルネットワークの所定のレイヤーでの演算に使用する固定小数点数データのビット幅を仮設定する。次に、ステップＳ６２において、演算処理装置は、ステップＳ６０で仮設定したビット幅のデータを使用して演算を実行することで、推論処理を行う。
【００９４】
次に、ステップＳ６４において、演算処理装置は、推論処理用のニューラルネットワークの出力を期待値と比較することで、認識精度を判定する。認識精度が劣化している場合、動作はステップＳ３０に戻され、演算に使用するデータのビット幅の再設定が行われる。認識精度の劣化がない場合、処理はステップＳ６６に移行される。例えば、ステップＳ６０では、初期のビット幅は、設定可能なビット幅のうち最も小さいビット幅に設定され、ビット幅は、ステップＳ６４から戻る毎に順次増加される。すなわち、データの圧縮率は、初期が高く、ステップＳ６４から戻る毎に順次低下する。このため、ステップＳ６４において、認識精度の劣化がないと判定されたビット幅は、認識精度が劣化しない最小のビット幅（最大の圧縮率）である。
【００９５】
ステップＳ６６において、演算処理装置は、認識精度が劣化しないと判定したビット幅を推論処理用のニューラルネットワークで使用するデータのビット幅に決定し、動作を終了する。例えば、図１３に示す動作は、大量のサンプルデータを用いて、全てのサンプルデータで認識精度が維持できるデータのビット幅を決定する。
【００９６】
図１４は、図１３で決定したビット幅に合わせて設計されたニューラルネットワークの推論モデルの一例を示す。例えば、推論モデルによる推論処理用の演算は、推論処理用の演算処理装置により実行される。図１４に示す推論処理用のニューラルネットワークは、入力から出力に向けてレイヤー１、レイヤー２、レイヤー３、レイヤー４が順に接続され、レイヤー４から推論結果が出力される。なお、推論モデルに含まれるレイヤーの数は、図１４に限定されない。レイヤー１からレイヤー４に示すＮビット、Ｍビット、Ｌビット、Ｋビットのデータは、図１３のステップＳ６６で決定したビット幅であり、丸め処理により最下位ビットが取り除かれ、符号ビットが最上位ビットに付加されたデータである。
【００９７】
図１４に示す例では、レイヤー１では、入力データのうち、上位のＮビットの固定小数点数データと重みデータ等とを使用して演算処理が実行され、Ｎビットよりビット幅が大きい出力データがレイヤー２に出力される。レイヤー２では、レイヤー１からのデータのうち、上位のＭビットの固定小数点数データと重みデータ等とを使用して演算処理が実行され、Ｍビットよりビット幅が大きい出力データがレイヤー３に出力される。
【００９８】
レイヤー３では、レイヤー２からのデータのうち、上位のＬビットの固定小数点数データと重みデータ等とを使用して演算処理が実行され、Ｌビットよりビット幅が大きい出力データがレイヤー４に出力される。レイヤー４では、レイヤー３からのデータのうち、上位のＫビットの固定小数点数データと重みデータ等とを使用して演算処理が実行され、演算結果が推論結果として出力される。
【００９９】
例えば、演算処理装置が１６ビットの演算器を有し、Ｎが”４”である場合、４つのデータの演算を並列に実行可能である。Ｍが”３”の場合、５つのデータの演算を並列に実行可能であり、Ｌが”５”の場合、３つのデータの演算を並列に実行可能である。
【０１００】
なお、Ｎビット、Ｍビット、Ｌビット、Ｋビットは、図１３で説明したように、大量のサンプルデータを使用して求めたレイヤー毎の平均的なビット幅であり、推論処理を実行する実際のデータの特徴に依存するものではない。このため、各レイヤーのデータのビットが、Ｎビット、Ｍビット、Ｌビット、Ｋビットにそれぞれ固定される場合、図７で説明したように、推論処理による認識精度は低下するおそれがある。
【０１０１】
以上、図４から図１２に示す実施形態においても、図１から図３に示した実施形態を同様の効果を得ることができる。さらに、図４から図１２に示す実施形態では、最多ビット位置の下位側に２番目に度数の多い第２ビット位置がある場合、第２ビット位置を最多ビット位置として丸め対象ビットに特定することで、認識精度の低下を抑止することができる。したがって、認識精度を低下させることなく、整数演算器３８、４８が演算に使用するデータのビット数を削減することができる。この結果、整数演算器３８、４８で並列に実行するデータ数を増加させることができ、演算処理装置１０２の演算効率を向上することができる。
【０１０２】
丸め処理に最下位ビットの情報を、最下位ビットより上位のビットに含ませることでより、整数演算器３８に出力するデータのビット数を削減することができ、整数演算器３８に出力するデータ数を増加することができる。この結果、整数演算器３８が実行する演算の並列数を増加させることができ、演算効率を向上することができる。
【０１０３】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１０４】
２          レジスタ
４          演算回路
６          取得回路
８          特定回路
１０        命令制御部
２０        レジスタ部
３０        ベクトルユニット
３２        統計取得部
３４        量子化部
３６        データ変換部
３８        整数演算器
４０        スカラユニット
４２        統計取得部
４４        量子化部
４６        データ変換部
４８        整数演算器
５０        メモリインタフェース
５２        命令メモリ
６０        メモリインタフェース
６２        データメモリ
７０        ホストマシン
１００、１０２  演算処理装置
２００      情報処理装置
ＤＥＣ      命令デコーダ
ＰＣ        プログラムカウンタ
【図１】
2020135549.tif 000003
【図２】
2020135549.tif 000004
【図３】
2020135549.tif 000005
【図４】
2020135549.tif 000006
【図５】
2020135549.tif 000007
【図６】
2020135549.tif 000008
【図７】
2020135549.tif 000009
【図８】
2020135549.tif 000010
【図９】
2020135549.tif 000011
【図１０】
2020135549.tif 000012
【図１１】
2020135549.tif 000013
【図１２】
2020135549.tif 000014
【図１３】
2020135549.tif 000015
【図１４】
2020135549.tif 000016