(57)【要約】  複数の演算器（３１０〜３２５）は、所定数毎に組にされ、固定小数点データに対する演算命令をそれぞれ実行する。マルチプレクサ（２３０〜２３７）は、各組に対応して配置され、対応する組に含まれる各演算器（３１０〜３２５）から演算結果を順番に取得する。フラグビット生成部（２４０〜２４７）は、マルチプレクサ（２３０〜２３７）により取得された演算結果の最下位ビット位置から最上位ビットと異なるビット値を持つビット位置のうちの最上位ビット位置又は最下位ビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを生成する。加算器（ＡＤ０〜ＡＤ３９）は、前記ビットパターン生成部により生成されたビットパターンを各ビット位置に対応する桁ごとに累積した統計情報を取得する。
2020084723.tif 000002
【特許請求の範囲】
【請求項１】
固定小数点データに対する演算命令をそれぞれ実行する、所定数毎に組にされた複数の演算器と、
各前記組に対応して配置され、対応する組に含まれる各前記演算器から演算結果を順番に取得する取得部と、
前記取得部により取得された前記演算結果の最下位ビット位置から最上位ビットと異なるビット値を持つビット位置のうちの最上位ビット位置又は最下位ビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを生成するビットパターン生成部と、
前記ビットパターン生成部により生成されたビットパターンを各ビット位置に対応する桁ごとに累積した統計情報を取得する統計情報取得部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記取得部により取得された前記演算結果の最上位ビットと異なるビット値を持つビット位置のうちの最上位ビット位置又は最下位ビット位置を示す位置情報を生成する位置情報生成部をさらに備え、
前記ビットパターン生成部は、前記位置情報を前記位置情報生成部から取得し、取得した前記位置情報を基に前記ビットパターンを生成する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記演算器により算出された前記演算結果を格納する、所定長を有する格納領域をさらに備え、
前記取得部は、前記格納領域から前記演算結果を取得し、
前記取得部と前記位置情報生成部とは、前記所定長の幅を有する第１信号経路で接続され、
前記位置情報生成部と前記ビットパターン生成部とは、前記所定長より短い前記位置情報の幅を有する第２信号経路で接続される
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記取得部は、前記対応する組に含まれる各前記演算器のうちのいずれに接続するかを選択可能な信号経路により前記対応する組に含まれる各前記演算器と接続されることを特徴とする請求項１に記載の演算処理装置。
【請求項５】
固定小数点データに対する演算命令をそれぞれ実行する、所定数毎に組にされた複数の演算器を有する演算処理装置の制御方法であって、
前記組毎に含まれる各前記演算器から演算結果を順番に取得し、
取得した前記演算結果の最下位ビット位置から最上位ビットと異なるビット値を持つビット位置のうちの最上位ビット位置又は最下位ビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを生成し、
生成したビットパターンを各ビット位置に対応する桁ごとに累積した統計情報を取得する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
今日、人工知能を用いた機械学習のうち、特に深層学習（ＤＬ：Deep  Learning）へのニーズが高まっている。深層学習は、多層ニューラルネットワーク（ＤＮＮ：Deep  Neural  Network）を用いた機械学習の手法ということができる。ニューラルネットワークは、神経細胞（ニューロン）をコンピュータ上にモデル化したものである。神経細胞は、細胞体と、他の細胞体から入力される信号を受ける樹状突起と、他の細胞体に信号を出力する軸索とを有する。また、信号を出力する軸索の末端と信号を受ける樹状突起との間にはシナプスと呼ばれる信号の伝達構造が形成されている。ニューラルネットワークでは、神経細胞間でのシナプスを介した情報伝達がモデル化されている。【０００３】
さらに、ニューラルネットワークが多層化された多層ニューラルネットワークでは、深層学習が実行される。そして、深層学習が実行される多層ニューラルネットワークの認識性能を高めるため、多層ニューラルネットワークが大規模化される傾向にある。例えば、多層ニューラルネットワークで処理されるパラメータ数は、数百万から１億数千万にも及ぶ。多層ニューラルネットワークが人の脳に近づくためには、究極的に、パラメータ数は１千数百億にも及ぶと考えられる。したがって、今後、深層学習における学習データは増加し、多層ニューラルネットワークにおける計算負荷、メモリ負荷が増大することが予想される。そのため、増え続ける学習データに対して、認識性能と学習効率の改善が望まれている。認識性能と学習効率を改善し、負荷を軽減するため、多層ニューラルネットワークが軽量化されることが望ましい。【０００４】
ところで、深層学習においては、乗算、積和演算、ベクトル乗算を含む様々な演算が実行される。ただし、深層学習では、個々の演算精度への要求は、通常の演算処理ほど厳密ではない。例えば、通常の演算処理等では、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。深層学習では、複数の入力データを畳み込み演算するときの係数（重み）の調整が主な処理となり、入力データのうち、極端なデータは重視されないことが多いからである。また、大量のデータを繰り返し用いて係数を調整するため、一度飽和された値も、学習の進行に合わせて桁調整を行なうことで、飽和されずに係数の調整に反映できるようになるためである。【０００５】
そこで、このような深層学習の特性を考慮し、深層学習用の演算処理装置のチップ面積の削減、電力効率の向上等を図るため、浮動小数点数を用いないで、固定小数点数による演算を用いることが考えられる。浮動小数点数演算よりも固定小数点演算の方が回路構成を簡素にできるからである。【０００６】
ここで、深層学習で処理する重みやパラメータなどのデータのデータ表現としては、例えば、３２ビット浮動小数点数、１６ビット固定小数点数及び８ビット固定小数点数などがある。深層学習で処理するデータのデータ表現に用いるビット幅を縮小することで、多層ニューラルネットワークで扱うデータ量を削減できる。扱うデータ量が削減されることで、深層学習の処理量が削減され、学習時間が短縮されることが期待できる。【０００７】
しかしながら、固定小数点数は、取りうる値のダイナミックレンジが狭いので、浮動小数点数より演算精度が劣化する場合がある。演算精度が低下すると、深層学習がうまく実施できない場合もあり得る。すなわち、深層学習では、フォーワッド方向およびバックワード方向に積和演算が多数回繰り返され、演算結果が固定小数点数のダイナミックレンジを超えてしまうこともあるからである。そこで、演算精度を改善する技術により、ビット幅を削減することに起因する上記課題を克服することが望まれる。【０００８】
例えば、固定小数点を用いた深層学習の技術として、固定小数点演算の演算後のデータのビット位置の分布の統計を取得して動的に小数点位置を指定する従来技術がある。また、畳み込み演算を固定小数点演算で行う場合に、畳み込み演算時のマスクサイズで小数点位置を決定する従来技術がある。また、入力信号の大きさの平均値を求めて小数点位置を決めて固定小数点演算を行う従来技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１８−１２４６８１号公報
【特許文献２】特開２００８−０５９２８７号公報
【特許文献３】特開平０４−１９０３９９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述のように、従来の技術において、固定小数点演算の演算精度劣化を低減するための工夫が提案されている。しかしながら、従来の技術では、演算を実行する演算処理装置が、固定小数点演算の演算精度劣化を低減するための判断材料を効率よく取得できていない。このため、固定小数点数演算の精度の向上が効率的に実施できないおそれがある。さらに、固定小数点演算の演算精度劣化を低減するための判断材料を効率よく取得するとしても、深層学習では多数の演算器が用いられるため、各演算器からの情報収集のための配線が膨大になるおそれがある。そのため、回路実装面積が大きくなるおそれがあり、実装が困難になる。【００１１】
また、データのビット位置の分布の統計を取得して小数点位置を指定する従来技術では、回路規模を抑えることは考慮されておらず、回路規模を抑えて固定小数点演算の精度を向上させることは困難である。また、畳み込み演算時のマスクサイズで小数点位置を決定する従来技術や入力信号の大きさの平均値を求めて小数点位置を決めて固定小数点演算を行う従来技術でも同様に、回路規模を抑えて固定小数点演算の精度を向上させることは困難である。【００１２】
開示の技術は、上記に鑑みてなされたものであって、回路規模を抑えて固定小数点演算の精度を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する演算処理装置及び演算処理装置の制御方法は、一つの態様において、複数の演算器は、所定数毎に組にされ、固定小数点データに対する演算命令をそれぞれ実行する。取得部は、各前記組に対応して配置され、対応する組に含まれる各前記演算器から演算結果を順番に取得する。ビットパターン生成部は、前記取得部により取得された前記演算結果の最下位ビット位置から最上位ビットと異なるビット値を持つビット位置のうちの最上位ビット位置又は最下位ビット位置までの範囲に対応するそれぞれのビット位置にフラグビットを設定することで得られるビットパターンを生成する。統計情報取得部は、前記ビットパターン生成部により生成されたビットパターンを各ビット位置に対応する桁ごとに累積した統計情報を取得する。
【発明の効果】
【００１４】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、回路規模を抑えて固定小数点演算の精度を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、サーバの構成の一例を示す図である。
【図２】図２は、実施例１に係る演算コアの構成の一例を示す図である。
【図３】図３は、実施例１に係る演算部及び統計情報取得部の構成の一例の図である。
【図４】図４は、実施例１に係る状態管理を説明するための図である。
【図５】図５は、実施例１における有効桁位置情報の生成の一例について説明するための図である。
【図６】図６は、ビットパターン生成処理の一例を説明するための図である。
【図７】図７は、有効桁位置情報の算出処理のフローチャートである。
【図８】図８は、統計情報取得部による統計情報収集の処理のフローチャートである。
【図９】図９は、アキュムレータと演算部とを１対１に接続した場合の接続を表す図である。
【図１０】図１０は、実施例２に係る演算部及び統計情報取得部の構成の一例の図である。
【図１１】図１１は、実施例２に係る状態管理を説明するための図である。
【図１２】図１２は、実施例２における有効桁位置情報の生成の一例を説明するための図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００１７】
図１は、サーバの構成の一例を示す図である。サーバ３は、Central  Processing  Unit（ＣＰＵ）３１、演算処理装置３０及び演算処理装置用メモリ３３をPeripheral  Component  Interconnect  Express（ＰＣＩｅ）等のバス３４で接続し、ＣＰＵ３１にはメモリ３２が直接接続された構成を有する。【００１８】
ＣＰＵ３１は、メモリ３２に実行可能に展開されたプログラムにしたがって、演算処理装置３０内の複数の演算コア３００−１〜３００−１６を制御する。【００１９】
ここで、本実施例では、演算コア３００の制御をＣＰＵ３１が実行するが、データバス３５に制御コアを接続し、その制御コアにより演算コア３００−１〜３００−１６の制御が行われてもよい。【００２０】
演算処理装置３０は、専用の演算処理装置用メモリ３３に接続され、演算処理装置用メモリ３３を使って演算を実行する。演算処理装置３０は、例えば、ＰＣＩカードである。【００２１】
演算処理装置３０は、ＳＩＭＤ（Single  Instruction  Multiple  data）命令を基本とした演算コア３００−１〜３００−１６を有する。ただし、演算コア３００の数に特に制限は無い。以下の説明では、演算コア３００−１〜３００−１６のそれぞれを区別しない場合、単に「演算コア３００」という。【００２２】
演算処理装置３０は、バス３４、バスインターフェース３６及びデータバス３５経由でＣＰＵ３１の指示を受け、複数の演算コア３００により並列に演算を実行する。【００２３】
各演算コア３００は、データバス３５を介して相互に通信可能である。また、各演算コア３００は、データバス３５およびＰＣＩｅインターフェース等の上位側とのバスインターフェース３６を介して、バス３４に接続されたＣＰＵ３１等と接続される。また、各演算コア３００は、データバス３５及びメモリインターフェース３７を介して、演算処理装置用メモリ３３に接続される。【００２４】
図２は、実施例１に係る演算コアの構成の一例を示す図である。図２では、演算コア３００とともに、データバスインターフェース３０１、データバス３５、バスインターフェース３６及びメモリインターフェース３７も記載されている。なお、データバスインターフェース３０１は、演算コア３００に含まれてもよい。【００２５】
演算コア３００は、ＰＣ（Program  Counter）１１１、デコーダ１１２、レジスタファイル１２を有する。さらに、演算コア３００は、ベクトル演算用の演算部１３１、スカラ演算用の演算部１４１及びアキュムレータ（ＡＣＣ：Accumulator）１３２を有する。また、演算コア３００は、複数のセレクタ（ＳＥＬ：selector）１０１を有する。【００２６】
さらに、演算コア３００は、統計情報取得部１０２、統計情報集約部１０４及びデータ変換部１０３を有する。なお、ここでは、複数の統計情報取得部１０２を総称して統計情報取得部１０２と呼ぶ場合がある。また、複数のデータ変換部１０３を総称してデータ変換部１０３と呼ぶ場合がある。【００２７】
演算コア３００は、演算処理装置３０内に複数設けられ、データバス３５を介して相互に接続され、並列に演算を実行する。各演算コア３００は、入力された命令で指定されたベクトル演算及びスカラ演算を実行する。また、各演算コア３００は、統計情報取得部１０２で取得したビットパターンを累積分布として取得する。以下、本実施形態では、統計情報取得部１０２が取得したビットパターンの累積分布を統計情報と呼ぶ。【００２８】
各演算コア３００には、統計情報（累積分布）から取得する桁位置が設定される。ここで、桁位置とは、例えば固定小数点データの演算がなされたときに、固定小数点データの各ビット位置に対応して設けられる桁位置であって、統計情報が累積される桁位置をいう。桁位置はユーザがハイパーパラメータとして任意に指定してもよい。演算コア３００は、取得した累積分布のうちの指定された桁の累積分布データを取得する。そして、各演算コア３００は、累積分布データをＣＰＵ３１へ転送する。以下に、演算コア３００が有する各部の詳細を説明する。【００２９】
データバスインターフェース３０１は、演算コア３００をデータバス３５に接続するインターフェースである。ＰＣ１１１は、取得する命令の命令用メモリ２１におけるアドレスを指定する。【００３０】
デコーダ１１２は、ＰＣ１１１の指す命令用メモリ２１のアドレスからフェッチされた命令をデコードする。デコーダ１１２が命令をデコードすると、デコード結果に応じて、演算コア３００の各部が制御される。【００３１】
例えば、デコードの結果、命令がロード命令である場合には、演算処理装置用メモリ３３からデータが読み出され、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。【００３２】
また、デコードの結果、命令が固定小数点演算を実行する命令であった場合、デコーダ１１２は、シフト量がデータ変換部１０３に供給されるように指示する。シフト量は、例えば、命令のオペランド、オペランドで指定されたレジスタ、オペランドで指定されたアドレス、レジスタの示すアドレスなどであり、演算処理装置用メモリ３３等から取得され、データ変換部１０３に供給される。【００３３】
演算部１３１は、ベクトル演算用の演算器を有する。デコーダ１１２によるデコードの結果がベクトル演算命令であった場合、演算部１３１は、レジスタファイル１２のベクタレジスタのデータの入力を受ける。そして、演算部１３１は、入力されたデータを用いてベクトル演算を実行する。演算部１３１は、セレクタ１０１を介して統計情報取得部１０２及びデータ変換部１０３へ演算結果を供給する。また、演算部１３１は、演算結果をアキュムレータ１３２へ出力する。【００３４】
演算部１４１は、スカラ演算用の演算器を有する。デコーダ１１２によるデコードの結果、命令がスカラ演算命令であった場合、演算部１４１は、レジスタファイル１２のスカラ・レジスタのデータの入力を受ける。そして、演算部１４１は、入力されたデータを用いてスカラ演算を実行する。その後、演算部１４１は、セレクタ１０１を介して統計情報取得部１０２及びデータ変換部１０３に演算結果を供給する。演算部１３１及び１４１については後で詳細に説明する。【００３５】
セレクタ１０１は、ベクトル演算用の演算部１３１、スカラ演算用の演算部１４１及びアキュムレータ１３２等の演算結果、並びに、データバスインターフェース３０１からの読み出し結果の中から出力するデータを選択する。なお、ここでは、複数のセレクタを総称してセレクタ１０１と呼ぶ場合がある。また、複数のベクトル演算用の演算部を総称して演算部１３１と呼ぶ場合がある。【００３６】
データ変換部１０３は、セレクタ１０１によって選択されたデータの固定小数点位置を変更する。具体的には、データ変換部１０３は、ベクトル演算の結果、スカラ演算の結果、アキュムレータ１３２の演算結果、あるいは、データバスインターフェース３０１からの読み出し結果等で得られるセレクタ１０１により選択された固定小数点データの入力を受ける。そして、データ変換部１０３は、取得した固定小数点数データを指定されたシフト量だけシフトする。また、データ変換部１０３は、シフトとともに、上位ビットの飽和処理および下位ビットの丸めを実行する。データ変換部１０３は、例えば、丸め処理部及び飽和処理部（不図示）を有する。【００３７】
丸め処理部は、入力を４０ビットの演算結果とし、下位の所定数のビットを小数部として丸めを行なう。具体的には、丸め処理部は、所定数の下位ビットを小数部として丸めを行なう。シフト量が負の場合には、丸め処理部は、何も行なわない。丸めとしては、最近接丸め、０への丸め、正の無限大への丸め、負の無限大への丸め、乱数丸めなどが例示される。シフト量は、例えば、図２に示すように、デコーダ１１２が命令から取得して送信するシフト量である。【００３８】
シフト部は、シフト量だけ算術シフトを実行する。具体的には、シフト部は、シフト量が正の場合はシフト量分の算術右シフトを行う。また、シフト量が負の場合は、シフト部はシフト量分の算術左シフトを行なう。飽和処理部は、シフト結果が正の最大値以上の場合は正の最大値を出力し、負の最小値以下の場合は負の最小値を出力し、それ以外は入力値の下位１６ビットを出力する。【００３９】
データ変換部１０３は、セレクタ１０１を介して、演算部１３１又は１４１による演算結果の入力を受ける。そして、データ変換部１０３は、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、上位ビットを廃棄し、下位ビットに０を埋め込む。ただし廃棄される上位ビットに符号ビットと異なる値が含まれる場合は、シフト結果を、同符号で表現可能な絶対値最大の数に置き換える（飽和処理）。また、データ変換部１０３は、右シフト時、上位ビット（符号ビットより下位のビット）に符号ビットを埋め込む。そして、データ変換部１０３は、上記のように丸め、シフト、飽和処理によって得られるデータを、レジスタファイル１２のレジスタ等と同一のビット幅（例えば、１６ビットのレジスタ）で出力する。【００４０】
したがって、演算コア３００で実行されるコンピュータプログラムが固定小数点演算を実行する命令のオペランドにシフト量を指定することで、演算コア３００は、プログラム実行中に、固定小数点数の小数点位置を指定されたシフト量だけ更新する。【００４１】
データ変換部１０３でデータ変換された結果は、レジスタファイル１２のレジスタに格納される。【００４２】
アキュムレータ１３２は、ベクトル演算用の演算部１３１の演算結果の入力を受ける。そして、アキュムレータ１３２は、演算結果を加算する。アキュムレータ１３２は、セレクタ１０１を介して統計情報取得部１０２及びデータ変換部１０３に演算結果を供給する。【００４３】
統計情報取得部１０２は、セレクタ１０１によって選択されたデータからの統計情報を取得する。統計情報取得部１０２は、デコーダ１１２によるデコードの結果、命令に統計情報採取命令が付加されている場合、フラグビットのビットパターンの累積分布を取得する。そして、統計情報取得部１０２は、フラグビットのビットパターンの累積分布を統計情報集約部１０４へ出力する。フラグビットのビットパターンとは、演算部１３１又は１４１の演算結果である固定小数点数の最上位のビット位置から最上位のビットと異なる値を有するビット位置のうち最上位ビット位置までフラグを設定して得られるビットパターンである。統計情報取得部１０２については後で詳細に説明する。【００４４】
統計情報集約部１０４は、統計情報取得部１０２によって取得された統計情報であるフラグビットのビットパターンの累積分布を集約する。そして、統計情報集約部１０４は、フラグビットのビットパターンの累積分布を格納する。統計情報集約部１０４は、取得した累積分布のうちの指定された桁の累積分布データ（サンプル数ともいう）を出力する。より具体的には、統計情報集約部１０４は、指定された桁位置の前後−Ｌ〜＋Ｍ桁（Ｌ、Ｍは整数）の区間の統計情報のサンプル数情報を抽出する。【００４５】
次に、図３を参照して、演算部１３１及び１４１、並びに、統計情報取得部１０２の詳細について説明する。図３は、実施例１に係る演算部及び統計情報取得部の構成の一例の図である。ここで、演算部１３１及び１４１はベクトル演算とスカラ演算との違いはあるものの同一の機能を有する。以下では、演算部１３１を例に説明するが、演算部１４１についても同様である。【００４６】
演算部１３１は、バンク＃０のレジスタＲ０〜Ｒ１５、バンク＃１のレジスタＲ１００〜Ｒ１１５、演算器３１０〜３２５、アキュムレータＡＣ０〜ＡＣ１５、マルチプレクサ２３０〜２３７、状態管理部２２０〜２２７及び演算器２００〜２０７を含む。なお、アキュムレータＡＣ０〜ＡＣ１５、演算器３１０〜３２５、バンク＃０のレジスタＲ０〜Ｒ１５、バンク＃１のレジスタＲ１００〜Ｒ１１５は、Single  Instruction/Multiple  Data（ＳＩＭＤ）プロセッサの一部である。レジスタＲ０〜Ｒ１５及びＲ１００〜Ｒ１１５は、ＳＩＭＤ並列幅分のバンク数に応じて配置される。【００４７】
統計情報取得部１０２は、フラグビット生成部２４０〜２４７、加算器ＡＤ０〜ＡＤ３９及び桁レジスタＡＲ０〜ＡＲ３９を有する。ここで、加算器ＡＤ０〜ＡＤ３９及び桁レジスタＡＲ０〜ＡＲ３９は、演算に用いるデータの各桁（０〜３９）に対応させて配置される。【００４８】
演算器３１０〜３２５は、バンク＃０のレジスタＲ０〜Ｒ１５とバンク＃１のレジスタＲ１００〜Ｒ１１５から同一のタイミングでデータを取得する。演算器３１０〜３２５は、デコーダ１１２で解読された命令にしたがった演算を並列に実行する。図３では、分かり易いように、デコーダ１１２から演算器３１０及びアキュムレータＡＣ０に延びる信号線を記載したが、実際には、デコーダ１１２は、演算器３１０〜３２５及びアキュムレータＡＣ０〜ＡＣ１５に接続される。【００４９】
ここでは、演算器３１０〜３２５が積和命令を実行することを想定する。演算器３１０〜３２５は、バンク＃０のレジスタＲ０〜Ｒ１５の値とバンク＃１のレジスタＲ１００〜Ｒ１１５の値の積にアキュムレータＡＣ０〜ＡＣ１５に蓄積済みの累積和を加算する。そして、演算器３１０〜３２５は、演算結果をアキュムレータＡＣ０〜Ｃ１５に格納する。積和命令では、通常複数回の積和が実行され最終回は演算結果がレジスタファイル１２に返される。これに加えて、アキュムレータＡＣ０〜ＡＣ１５は、演算結果をマルチプレクサ２３０〜２３７を介して演算器２００〜２０７に向けて送出する。アキュムレータＡＣ０〜ＡＣ１５は、「格納領域」の一例にあたる。【００５０】
アキュムレータＡＣ０〜ＡＣ１５と演算器２００〜２０７との間には、マルチプレクサ２３０〜２３７が配置される。マルチプレクサ２３０〜２３７は、アキュムレータＡＣ０〜ＡＣ１５を２つずつ組にしたそれぞれが接続される。例えば、アキュムレータＡＣ０とアキュムレータＡＣ１とが組となり、マルチプレクサ２３０に接続される。また、アキュムレータＡＣ２とアキュムレータＡＣ３とが組となり、マルチプレクサ２３１に接続される。また、アキュムレータＡＣ１４とアキュムレータＡＣ１５とが組となり、マルチプレクサ２３７に接続される。そして、各マルチプレクサ２３０〜２３７は、それぞれ演算器２００〜２０７に接続される。アキュムレータＡＣ０〜ＡＣ１５と演算器２００〜２０７とは１対１に対応しているので、アキュムレータＡＣ０〜ＡＣ１５の組は、演算器２００〜２０７の組と言える。【００５１】
ここで、本実施例では、アキュムレータＡＣ〜ＡＣ１５における組とされた２つは、一方が演算で用いる３２ビットのデータの上位１６ビット部分のデータの演算結果を格納し、他方が下位１６ビット部分のデータの演算結果を格納する。具体的には、アキュムレータＡＣ０、ＡＣ２、・・・、ＡＣ１４が上位１６ビットのデータを取扱い、アキュムレータＡＣ１、ＡＣ３、・・・、ＡＣ１５が下位１６ビットのデータを取り扱う。ここでは、上位１６ビットのデータを取り扱うアキュムレータＡＣ０、ＡＣ２、・・・、ＡＣ１４を上位側アキュムレータといい、下位１６ビットのデータを取り扱うアキュムレータＡＣ１、ＡＣ３、・・・、ＡＣ１５を下位側アキュムレータと言う。【００５２】
マルチプレクサ２３０〜２３７は、状態管理部２２０からの選択信号の入力を受ける。ここで、選択順は特に制限は無いが、本実施例では上位側アキュムレータを先に選択し、次に、下位側アキュムレータを選択する場合で説明する。入力された選択信号がＬｏｗの場合、マルチプレクサ２３０〜２３７は、下位側アキュムレータを選択する。また、入力された選択信号がＨｉｇｈの場合、マルチプレクサ２３０〜２３７は、上位側アキュムレータを選択する。【００５３】
状態管理部２２０〜２２７は、図４に示す状態管理を行うことで選択するアキュムレータＡＣ〜ＡＣ１５を決定する。図４は、実施例１に係る状態管理を説明するための図である。状態管理部２２０〜２２７は、保留状態４１及び実行状態４２という２つの状態のいずれかの状態に遷移する。デコーダ１１２から命令が入力されていない初期状態で、状態管理部２２０〜２２７は、保留状態４１となる。【００５４】
保留状態４１では、状態管理部２２０〜２２７は、選択信号としてＬｏｗの信号をマルチプレクサ２３０〜２３７へ出力する。この場合、状態管理部２２０〜２２７は、イネーブル信号として０の値を有する信号を演算器２００〜２０７へ出力する。０の値のイネーブル信号は、無効を表す信号にあたる。保留状態４１で、デコーダ１１２から統計情報採取命令以外の命令の入力を受けた場合、状態管理部２２０〜２２７は、状態遷移４３により保留状態を維持する。【００５５】
これに対して、保留状態４１でデコーダ１１２から統計情報採取命令の入力を受けると状態遷移４４が発生し、状態管理部２２０〜２２７は、イネーブル信号として１の値を有する信号を演算器２００〜２０７へ出力するとともに、実行状態４２へ遷移する。統計情報採取命令は、アキュムレータＡＣ０〜ＡＣ１５からレジスタファイル１２のベクタレジスタへのデータコピーの命令に付加される命令である。１の値を有するイネーブル信号は、有効を表す信号にあたる。【００５６】
実行状態４２では、状態管理部２２０〜２２７は、選択信号としてＨｉｇｈの信号をマルチプレクサ２３０〜２３７へ出力する。この場合、状態管理部２２０〜２２７は、イネーブル信号として１の値を有する信号を演算器２００〜２０７へ出力する。【００５７】
信号出力後に、統計情報採取命令以外の命令が入力されると状態遷移４５が発生し、状態管理部２２０〜２２７は、保留状態４１に遷移する。状態管理部２２０〜２２７は、保留状態４１への遷移後は、イネーブル信号として０の値を有する信号を演算器２００〜２０７へ出力する。ここで、統計情報命令は連続で入力されることはないことが前提であるが、何らかの理由により統計情報命令が続けて入力された場合、実行状態４２にある状態管理部２２０〜２２７は、エラーを出力して保留状態４１に遷移するように構成してもよい。このマルチプレクサ２３０〜２３７及び状態管理部２２０〜２２７が、「取得部」の一例にあたる。【００５８】
図３に戻って説明を続ける。演算器２００〜２０７は、マルチプレクサ２３０〜２３７を介してアキュムレータＡＣ０〜ＡＣ１５から出力された４０ビットのデータを取得する。そして、演算器２００〜２０７は、入力されたデータにおける非符号となる最上位ビットの位置を示す有効桁位置情報をフラグビット生成部２４０〜２４７へ出力する。非符号となる最上位ビットとは、符号ビットの値と異なるビット値を有するビットのうち、符号ビット（Most  Significant  Bit(ＭＳＢ)）に最も近い位置のビットである。すなわち、有効桁位置情報は、ＭＳＢから符号ビットと同じ値が何ビット続くかを表す情報である。【００５９】
ここで、図５を参照して、有効桁位置情報の算出の詳細について説明する。図５は、有効桁位置情報の生成の一例について説明するための図である。ここでは、演算器２００を例に説明する。【００６０】
状態管理部２２０からＬｏｗの選択信号を受けてマルチプレクサ２３０を介してアキュムレータＡＣ１から出力された４０ビットのデータ５１が、演算器２００に入力される。演算器２００は、入力されたデータ５１の隣り合うビットの値を比較し、同じ値であれば１を出力し、異なる値であれば０を出力することで、３９ビットのデータ５２を生成する。【００６１】
次に、演算器２００は、疑似コード５３に示すように各データ５２に応じた０〜３９を表す値を取得して６ビットの有効桁位置情報として出力する。具体的には、非符号となる最上位ビットがデータ５１の０ビット目（すなわち最下位ビット）にある場合、演算器２００は、３８を６ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータ５２の８ビット目にある場合、演算器２００は、３０を６ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータ５２の３８ビット目にある場合（すなわち符号ビットのすぐ下位が符号ビットと異なる値の場合）、演算器２００は、０を６ビットで表した有効桁位置情報を出力する。【００６２】
その後、演算器２００は、有効桁位置情報の６ビットのそれぞれの値と状態管理部２２０から入力されたイネーブル情報の反転値との論理和５４を求めてフラグビット生成部２４０へ出力する。すなわち、イネーブル信号の値が１の場合、演算器２００は、有効桁位置情報をそのままフラグビット生成部２４０へ出力する。また、イネーブル信号の値が０の場合、すなわち、状態管理部２２０において、保留状態４１にあり状態遷移４４が発生していないと、演算器２００は、全ての値が１である６ビットのデータを有効桁位置情報としてフラグビット生成部２４０へ出力する。【００６３】
次に、状態管理部２２０が実行状態４２に遷移すると、Ｈｉｇｈの選択信号を受けてマルチプレクサ２３０を介してアキュムレータＡＣ０から出力された４０ビットのデータ５１が、演算器２００に入力される。その後、演算器２００は、上述した有効桁位置情報の算出処理をアキュムレータＡＣ０から出力された４０ビットのデータ５１に対して実行する。【００６４】
ここで、統計情報命令が付加される命令は、アキュムレータＡＣ０〜ＡＣ１５からレジスタファイル１２のベクタレジスタへのデータコピーの命令であり、アキュムレータＡＣ０〜ＡＣ１５の内容に変化はしない。そこで、統計情報命令後の次のサイクルでもアキュムレータＡＣ０〜ＡＣ１５の値は維持されており、演算器２００は、同じタイミングのアキュムレータＡＣ０及びＡＣ１のデータを取得することができる。【００６５】
演算器２００は、組となったアキュムレータＡＣ０及びＡＣ１から演算結果を順番に取得し、取得した演算結果から得られた有効桁位置情報を順次出力する。すなわち、アキュムレータＡＣ０及びＡＣ１のそれぞれを１対１で演算器２００に対応させた場合に比べて、本実施例に係る演算コア３００は、演算器２００と統計情報取得部１０２とを繋ぐ信号経路を半分に抑えることができる。この演算器２００〜２０７が、「位置情報生成部」の一例にあたる。そして、マルチプレクサ２３０〜２３７と演算器２００〜２０７とを結ぶ信号経路が、「第１信号経路」の一例にあたる。【００６６】
図３に戻って説明を続ける。フラグビット生成部２４０〜２４７と演算器２００〜２０７とは、有効桁位置情報のビット数の信号線により接続される。例えば、本実施例では有効桁位置情報が６ビットであるので、フラグビット生成部２４０〜２４７と演算器２００〜２０７とを結ぶ信号線は６本となる。【００６７】
フラグビット生成部２４０〜２４７は、有効桁位置情報の入力を演算器２００〜２０７から受ける。そして、フラグビット生成部２４０〜２４７は、有効桁位置情報を用いて、非符号となる最上位ビット以下ＬＳＢ（Least  Significant  Bit）までの範囲に対応するビット位置にフラグビットとして「１」を設定したデータを生成するフラグビット生成処理を行う。フラグビット生成部２１０〜２１３の処理により、最下位ビット位置から、非符号となる最上位ビットのビット位置までの範囲のそれぞれのビット位置にフラグビットを設定することで得られるフラグビットのビットパターンが生成される。【００６８】
ここで、図６を参照して、フラグビットのビットパターン生成処理の一例について説明する。図６は、ビットパターン生成処理の一例を説明するための図である。【００６９】
フラグビット生成部２４０は、６ビットで表される有効桁位置情報を演算器２００から取得する。次に、フラグビット生成部２４０は、有効桁位置情報の上位４ビットのデータを演算回路６１へ入力する。また、フラグビット生成部２４０は、有効桁位置情報の下位２ビットのデータを演算回路６１へ入力する。【００７０】
演算回路６１は、上位４ビットのデータが０〜９のいずれの値以下かを判定する。そして、演算回路６１は、判定結果に応じてＧＲＰ＿ＬＥ＿０〜９及びＧＲＰ＿ＬＴ＿０〜９のいずれのグループに含まれるかを決定し、含まれるグループの値を１とする。ＧＲＰ＿ＬＥ＿Ｎ（Ｎ＝０〜９）は、値がｎ以下であるグループである。また、ＧＲＰ＿ＬＴ＿Ｎ（Ｎ＝０〜９）は、値がより小さいグループである。例えば、上位４ビットのデータが、“０，０，１，１”であれば、演算回路６１は、ＧＲＰ＿ＬＥ＿３〜９の値を１とし、ＧＲＰ＿ＬＴ＿４〜９の値を１とし、それ以外のグループの値は０とする。これにより、演算回路６１は、有効桁位置情報を４で割った時の値が０〜９の何れの値以下かを区別できる。【００７１】
一方、演算回路６２は、下位２ビットのデータが０〜２のいずれの値以下かを判定する。演算回路６２は、下位２ビットのデータが、ＭＯＤ４＿ＬＥ０、ＭＯＤ４＿ＬＥ１又はＭＯＤ４＿ＬＥ２のいずれのグループに含まれるかを判定し、属するグループの値を１とし、他のグループの値を０とする。ＭＯＤ４＿ＬＥ０は、割った時の余りが０のグループである。ＭＯＤ４＿ＬＥ１は、割った時の余りが１か０のグループである。ＭＯＤ４＿ＬＥ２は、割った時の余りが２か１か０のグループである。【００７２】
次に、演算回路６２は、ＧＲＰ＿ＬＥ＿０〜９及びＧＲＰ＿ＬＴ＿０〜９の値、並びに、ＭＯＤ４＿ＬＥ０〜ＬＥ２の値を演算回路６３に入力する。演算回路６３は、ＧＲＰ＿ＬＥ＿Ｎ及びＧＲＰ＿ＬＴ＿Ｎ（Ｎ＝０〜９）のそれぞれについて演算を行う。【００７３】
具体的には、演算回路６３は、ＧＲＰ＿ＬＥ＿Ｎの値とＭＯＤ４＿ＬＥ０〜ＬＥ２の値のそれぞれの論理積を求める。そして、演算回路６３は、各論理積とＧＲＰ＿ＬＴ＿Ｎの値の論理和を求める。次に、演算回路６３は、各論理和の結果をＬＡＮＥ＿ＩＮＣ［Ｎ＊４＋０］〜［Ｎ＊４＋２］とし、ＧＲＰ＿ＬＥ＿Ｎの値をＬＡＮＥ＿ＩＮＣ［Ｎ＊４＋３］とする。そして、演算回路６３は、４０ビットのデータにおけるＮ×４＋０〜３番目のビットの位置の値を、ＬＡＮＥ＿ＩＮＣ［Ｎ＊４＋０］〜［Ｎ＊４＋３］とする。これにより、演算回路６３は、最下位ビット位置から非符号となる最上位ビットのビット位置までの範囲のそれぞれのビット位置に、フラグビットとして「１」を設定することで得られるビットパターンを生成する。【００７４】
なお、フラグビット生成部２４０〜２４７は非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビットである「１」を設定する処理を行うものであってもよい。非符号となる最下位ビットとは、符号ビットの値と異なるビット値を有するビットのうち、符号ビットから最も遠い位置（ＬＳＢに最も近い位置）のビットをいう。この場合、フラグビット生成部２４０〜２４７の処理により、符号ビット（ＭＳＢ）の位置から、非符号となる最下位ビットのビット位置までの範囲のそれぞれのビット位置にフラグビットを設定することで得られるビットパターンが生成される。【００７５】
フラグビット生成部２４０〜２４７が、「ビットパターン生成部」の一例にあたる。そして、演算器２００〜２０７とフラグビット生成部２４０〜２４７を接続する信号経路が、「第２信号経路」の一例にあたる。【００７６】
図３に戻って説明を続ける。加算器ＡＤ０〜ＡＤ３９は、桁レジスタＡＲ０〜ＡＲ３９のそれぞれのビット幅と同じビット幅を有し、フラグビット生成部２４０〜２４７の結果の桁ごとの加算を行う。加算器ＡＤ０〜ＡＤ３９は、フラグビット生成部２４０〜２４７の演算結果の桁ごとの加算結果と、桁レジスタＡＲ０〜ＡＲ３９に保存した各桁の値と加算して桁レジスタＡＲ０〜ＡＲ３９を更新する。【００７７】
桁レジスタＡＲ０〜ＡＲ３９は、桁ごとの統計情報を格納する。桁レジスタＡＲ０〜ＡＲ３９の値は、加算器ＡＤ０〜ＡＤ３９の出力値により更新される。【００７８】
加算器ＡＤ０〜ＡＤ３９と桁レジスタＡＲ０〜ＡＲ３９との処理によって、フラグビットを設定することで得られるビットパターンをビット位置毎に累積した統計情報が生成される。以上の構成によって、演算器３１０〜３１７は、演算結果である複数の固定小数点数データに関し、統計情報取得部１０２によって小数点位置判定用統計情報が収集される。この小数点位置判定用統計情報は、最上位からどの範囲のビットが未使用となっているかを表す指標となる。この加算器ＡＤ０〜ＡＤ３９が、「統計情報取得部」の一例にあたる。【００７９】
また、フラグビット生成部２４０〜２４７は非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビット「１」を設定する処理を行うものである場合について説明する。この場合、加算器ＡＤ０〜ＡＤ３９と桁レジスタＡＲ０〜ＡＲ３９との処理によって、非符号となる最下位ビット以上ＭＳＢまでの範囲に対応するビット位置にフラグビット「１」を設定して得られるビットパターンを累積した他の統計情報が生成される。この統計情報は、最下位からどの範囲のビットが未使用となっているかを表す指標となる。【００８０】
ここで、統計情報集約部１０４により収集された統計情報の利用方法について説明する。例えば、演算処理装置３０は、統計情報集約部１０４に格納された非符号となるビット値を持つ最上位のビット位置から最下位ビットまでフラグビットを設定することで得られるビットパターンを累積した情報を取得する。演算処理装置３０は、例えば、ベクトル演算の実行ごとに、ベクトル演算器に含まれるそれぞれの演算器からビットパターンを収集し、累積し、累積分布を生成する。【００８１】
累積分布の各桁が表すサンプル数は、最上位桁（ＭＳＢ）からその桁までの累積サンプル数であるため、累積分布のＡ％を超えた桁位置のサンプル数が、「Ａ％を超えるまでの全桁のサンプル数」に相当する。このため、演算処理装置３０は、一桁分のサンプル数情報とその桁位置情報を転送するだけで、所定の閾値を越えた桁位置を特定する情報を得ることが可能である。【００８２】
なお、累積分布全体に対する所定の閾値を越えた桁位置以上の分布の割合（Ａ％）を算出するためには、分母となる累積分布全体の総サンプル数が要求される。しかしながら、累積分布全体の総サンプル数は、回路構成から既知となる。例えば、演算コア３００内で１回のベクトル演算では、ベクトル演算器の並列数だけ演算が実行される。したがって、１回のベクトル演算当りの総サンプル数は、ベクトル演算器の並列数となる。仮に、累積分布全体のサンプル数に、スカラ演算も含める場合には、累積分布の集計対象である各演算器の回数分だけ積算すればよい。【００８３】
次に、図７を参照して、有効桁位置情報の算出処理の流れについて説明する。図７は、有効桁位置情報の算出処理のフローチャートである。図７は、保留状態４１と実行状態４２との間の状態遷移が完了する間のサイクルを表す。【００８４】
状態管理部２２０〜２２７は、現在の状態が保留状態４１か否かを判定する（ステップＳ１）。【００８５】
現在の状態が保留状態の場合（ステップＳ１：肯定）、状態管理部２２０〜２２７は、統計情報採取命令を取得したか否かを判定する（ステップＳ２）。統計情報採取命令を取得していない場合（ステップＳ２：否定）、状態管理部２２０〜２２７は、０の値を有するイネーブル信号を演算器２００〜２０７へ出力する。演算器２００〜２０７は、０値を有するイネーブル信号の入力を受けて、全ての値が１の有効桁位置情報をフラグビット生成部２４０〜２４７へ出力する（ステップＳ３）。【００８６】
これに対して、統計情報採取命令を取得した場合（ステップＳ２：肯定）、状態管理部２２０〜２２７は、１の値を有するイネーブル信号を演算器２００〜２０７へ出力する（ステップＳ４）。また、状態管理部２２０〜２２７は、マルチプレクサ２３０〜２３７にＬｏｗの信号を出力する。【００８７】
マルチプレクサ２３０〜２３７は、Ｌｏｗの信号の入力を受けて、下位側のアキュムレータの格納値を選択する（ステップＳ５）。【００８８】
演算器２００〜２０７は、下位側のアキュムレータの格納値の入力を受ける。そして、演算器２００〜２０７は、入力値に応じた有効桁位置情報を算出する（ステップＳ６）。【００８９】
その後、演算器２００〜２０７は、１の値を有するイネーブル信号の入力を状態管理部２２０〜２２７から受けて、入力値に対応する有効桁位置情報をフラグビット生成部２４０〜２４７へ出力する（ステップＳ７）。【００９０】
その後、状態管理部２２０〜２２７は、実行状態４２に遷移する（ステップＳ８）。【００９１】
一方、現在の状態が保留状態でない場合（ステップＳ１：否定）、すなわち現在の状態が実行状態の場合、マルチプレクサ２３０〜２３７にＨｉｇｈの信号を出力する。マルチプレクサ２３０〜２３７は、Ｈｉｇｈの信号の入力を受けて、上位側のアキュムレータの格納値を選択する（ステップＳ９）。【００９２】
演算器２００〜２０７は、上位側のアキュムレータの格納値の入力を受ける。そして、演算器２００〜２０７は、入力値に応じた有効桁位置情報を算出する（ステップＳ１０）。【００９３】
その後、演算器２００〜２０７は、１の値を有するイネーブル信号の入力を状態管理部２２０〜２２７から受けて、入力値に対応する有効桁位置情報をフラグビット生成部２４０〜２４７へ出力する（ステップＳ１１）。【００９４】
次に、状態管理部２２０〜２２７は、０の値のイネーブル信号を出力し、且つ、保留状態４１に遷移する（ステップＳ１２）。【００９５】
次に、図８を参照して、統計情報取得部１０２の統計情報収集の処理の流れについて説明する。図８は、統計情報取得部による統計情報収集の処理のフローチャートである。【００９６】
フラグビット生成部２４０〜２４７は、有効桁位置情報の入力を演算器２００〜２０３から受ける（ステップＳ２１）。【００９７】
次に、フラグビット生成部２４０〜２４７は、入力された有効桁位置情報の全ての桁の値が１か否かを判定する（ステップＳ２２）。全ての桁の値が１の場合（ステップＳ２２：肯定）、フラグビット生成部２４０〜２４７は、有効桁位置情報が無効であると判定して処理を終了する。【００９８】
これに対して、１以外の値の桁が存在する場合（ステップＳ２２：否定）、フラグビット生成部２４０〜２４７は、有効桁位置情報からビットパターンを生成する（ステップＳ２３）。そして、フラグビット生成部２４０〜２４７は、生成したビットパターンの各桁の値をそれぞれ加算器ＡＤ０〜ＡＤ３９へ出力する。加算器ＡＤ０〜ＡＤ３９は、各フラグビット生成部２４０〜２４７から送られてきた値を集計し、桁レジスタＡＲ０〜ＡＲ３９それぞれが有する各桁のカウンタに集計値を加算する（ステップＳ２４）。その後、統計情報集約部１０４は、桁レジスタＡＲ０〜ＡＲ３９のそれぞれが保持する集計値を集約する。【００９９】
ここで、他の接続形態と本実施例に係る演算コアにおける接続形態とを比較する。各アキュムレータＡＣ０〜ＡＣ１５に格納されたデータにおける、非符号となる最下位ビット以上ＭＳＢまでの範囲のビット位置にフラグビット「１」を設定して得られるビットパターンを取得するには、他の接続方法が考えられる。例えば、最も簡単な方法として、図７に示すように、個々のアキュムレータＡＣ０〜ＡＣ１５と演算器２００〜２１５とを１対１に接続する方法が考えられる。図９は、アキュムレータと演算部とを１対１に接続した場合の接続を表す図である。こでは、演算器２００〜演算器２１５が加算器ＡＤ０〜ＡＤ３９へ各桁のデータを配布する役割を有することから、図９では演算器２００〜演算器２１５が統計情報取得部１０２の一部に含まれる。【０１００】
この場合、演算器３１０〜３２５及びアキュムレータＡＣ０〜ＡＣ１５は、４０ビットのデータを取り扱う。そのため、アキュムレータＡＣ０〜ＡＣ１５から統計情報取得部１０２の間に、フラグビットを出力する４０本の信号線が配線される。例えば、統計情報取得部１０２に、２５６ビット長のベクトル処理にあたる１６個分の１６ビットの積和演算器の情報を集約する場合がある。そのような場合、アキュムレータＡＣ０〜ＡＣ１５から統計情報取得部１０２の間に、６４０本の信号線が配線されることになる。このように信号線が多くなると、回路自体に加えて信号線のひき込み用の領域の確保により回路実装面積が大きくなってしまう。【０１０１】
例えば、典型的な例として、ベクトル長が２５６ビットのベクトルレジスタに対するメモリからのリード及びメモリへのライトのパスとして、ベクトル長に合わせて２５６本の信号線が配線される場合を考える。レジスタへの読み書きの信号の量は、ベクトルレジスタへの読み書きのスループットを決定することになるため、なるべく多くの信号線が確保されることが好ましい。一方、フラグビット用の信号線は、リード及びライトの性能や、演算性能には直接的には寄与しないにも拘らず、性能を決める信号の２．５倍もの配線量を占めることになり、実際の実装には不適である。【０１０２】
これに対して、本実施例に係る演算コア３００では、例えば１６個の演算器３１０〜３２５及びアキュムレータＡＣ０〜ＡＣ１５を２つずつの組にした場合、８つの組となる。この場合、アキュムレータＡＣ０〜ＡＣ１５と演算器２００〜２０７とを結ぶ信号線は、図９の場合に比べて半分になる。さらに、演算器２００〜２０７は、６ビットの情報を取り扱うため、演算器２００〜２０７と統計情報取得部１０２との間の信号線は、４８本となり、直接接続した場合に比べて格段に少なく抑えることができる。【０１０３】
ここで、本実施例では、統計情報採取命令の発行頻度を最高で２サイクルに１回とした場合として、演算器３１０〜３２５及びアキュムレータＡＣ０〜ＡＣ１５を２個ずつ組とした。ただし、統計情報採取命令を制約しても問題のないレベルまで最大限制限して、統計情報採取命令の許容発行頻度をｎサイクルに１回まで減らしてもよい。その場合、それに合わせて、演算器３１０〜３２５及びアキュムレータＡＣ０〜ＡＣ１５のｎ個ずつを組として、それらの間で順番に信号線を使用する構成にしてもよい。ｎ個ずつ組にすることで、アキュムレータＡＣ０〜ＡＣ１５と演算器２００〜２１５とを結ぶ信号線は、図９の場合に比べてｎ分の１になる。【０１０４】
以上に説明したように、本実施例に係る演算コアは、演算器とアキュムレータとのまとまりの複数個を組として１つの演算器に接続し、順番にデータを演算器に供給させる。これにより、アキュムレータとサンプルデータを算出する演算器との間の信号線を低減できる。また、本実施例に係る演算コアは、演算部は統計処理部に向けてサンプルデータとして６ビットの有効桁位置情報を送信する。これにより、実際の演算を行う演算部と、補助的な統計処理を行う統計情報取得部との間の信号線の数を低減できる。したがって、回路規模を抑えて固定小数点演算の精度を向上させることができる。
【実施例２】
【０１０５】
図１０は、実施例２に係る演算部及び統計情報取得部の構成の一例の図である。本実施例に係る演算器３１０は、８ビットデータと８ビットデータとを乗算して、アキュムレータＡＣ０〜ＡＣ３１に格納された２４ビットデータに加算し、アキュムレータＡＣ０〜ＡＣ３１に格納する積和演算を行う。この場合も、２５６ビット長ベクトル同士の演算として、各演算器３１０〜３４１及び各アキュムレータＡＣ０〜ＡＣ３１は、３２個ずつ配置される。以下の説明では、実施例１と同様の各部の動作については説明を省略する場合がある。【０１０６】
演算器３１０〜３４１は、３２ビットデータと３２ビットデータとを乗算する処理を単位としてグループ分けされる。この単位はＦＭＡ（Fused  Multiply  Adder）と呼ばれる場合がある。すなわち、１つのＦＭＡには、演算器３１０〜３４１のうちの４つと、アキュムレータＡＣ０〜ＡＣ３１のうちの４つが含まれる。各演算器３１０〜３４１は、３２ビットデータにおける異なるバイト位置のデータを処理する。例えば、演算器３１０は、３２ビットデータのうちの０バイト目のデータを処理する。また、演算器３１１は、３２ビットデータの内の２バイト目のデータを処理する。演算器３１２は、３２ビットデータの内の３バイト目のデータを処理する。演算器３１３は、３２ビットデータの内の１バイト目のデータを処理する。【０１０７】
この場合も、統計情報採取命令は、アキュムレータＡＣ０〜ＡＣ３１からベクタレジスタへのデータの移動を実行させる命令に付加される。この命令は、飽和処理、丸め及び出力などを実行させることもできる。この命令は、例えば、アキュムレータＡＣ０〜ＡＣ３を含むＦＭＡを例に説明すると、１つの命令毎に、アキュムレータＡＣ０〜ＡＣ３のうちの２組ずつに処理を行わせる。ここで、本実施例では、アキュムレータＡＣ０とアキュムレータＡＣ１とを組とし、アキュムレータＡＣ２とアキュムレータＡＣ３とを組とするように、各ＦＭＡにおいて上位側のバイトのデータを処理する組と、下位側のバイトのデータを処理する組とに分ける。ここでは、上位側のバイトのデータを処理する組に処理を行わせる命令をバイトハイ命令とよび、下位側のバイトのデータを処理する組に処理を行わせるバイトロー命令と呼ぶ。バイトハイ命令とバイトロー命令とはいずれも、それぞれ１度発行されると以後３サイクルは発行が停止されるという制限が設けられる。すなわち、バイトハイ命令とバイトロー命令とはいずれも、４サイクルに１度の頻度で発行される。【０１０８】
状態管理部２２０〜２２７はいずれも同様の動作を行うので、状態管理部２２０を例に説明する。状態管理部２２０は、４サイクルの間にアキュムレータＡＣ０〜ＡＣ３が順次演算器２００へのデータの入力元として選択され且つ全てが選択されるようにマルチプレクサ２３０に選択信号を送信する。【０１０９】
状態管理部２２０は、図１１に示す状態管理を行うことで選択するアキュムレータＡＣ〜ＡＣ３を決定する。図１１は、実施例２に係る状態管理を説明するための図である。図１１において枠内の＃＃０〜＃＃３は、アキュムレータＡＣ０〜ＡＣ３が処理するデータのバイト番号を表す。さらに、各状態７１〜７６に記載された枠内の＃＃０〜＃＃３は、その状態に遷移した時点における少なくとも選択が完了していないアキュムレータＡＣ０〜ＡＣ３に対応するバイト番号である。例えば、状態７２に遷移した時点では、少なくともアキュムレータＡＣ１及びＡＣ０の選択が完了していないことを表す。【０１１０】
状態管理部２２０は、命令が発行されていない場合、初期状態７０の状態を維持する。そして、初期状態７０でバイトハイ命令又はバイトロー命令以外の命令が発行されると状態遷移１７０が発生する。この場合、状態管理部２２０は、初期状態７０を維持して無効を表す値が「０」のイネーブル信号を演算器２００へ出力する。【０１１１】
これに対して、初期状態７０でバイトロー命令が発行されると、状態遷移１７１が発生し、状態管理部２２０は、状態７２に遷移する。また、初期状態７０でバイトハイ命令が発行されると、状態遷移１７２が発生し、状態管理部２２０は、状態７５に遷移する。【０１１２】
状態７２に遷移した場合、状態管理部２２０は、状態７２として記載した左端の枠内の＃＃１のバイトを処理するアキュムレータＡＣ１を選択する選択信号をマルチプレクサ２３０へ送信する。状態７２では、既に４サイクル以前にバイトロー命令が発行されているので、バイトロー命令が発行されることはない。そして、状態７２に遷移した次のサイクルでバイトハイ命令が発行されると状態遷移１７５が発生し、状態管理部２２０は、状態７６へ遷移する。これに対して、状態７２に遷移した次のサイクルでバイトハイ命令が発行されないと状態遷移１７９が発生し、状態管理部２２０は、状態７１へ遷移する。【０１１３】
状態７６に遷移した場合、状態管理部２２０は、状態７６として記載した左端の枠内の＃＃０のバイトを処理するアキュムレータＡＣ０を選択する選択信号をマルチプレクサ２３０へ送信する。状態７２では、既に４サイクル以前にバイトロー命令及びバイトハイ命令の両方が発行されているので、いずれの命令も発行されることはない。そこで、状態７６に遷移した次のサイクルで状態遷移１７８が発生し、状態管理部２２０は、状態７５へ遷移する。【０１１４】
状態７１に遷移した場合、状態管理部２２０は、状態７１として記載した枠内の＃＃０のバイトを処理するアキュムレータＡＣ０を選択する選択信号をマルチプレクサ２３０へ送信する。状態７１では、既に４サイクル以前にバイトロー命令が発行されているので、バイトロー命令が発行されることはない。そして、状態７１に遷移した次のサイクルでバイトハイ命令が発行されると状態遷移１７３が発生し、状態管理部２２０は、状態７５へ遷移する。これに対して、状態７１に遷移した次のサイクルでバイトハイ命令が発行されないと状態遷移１８１が発生し、状態管理部２２０は、初期状態７０へ遷移する。状態遷移１８１が発生するということは、状態管理部２２０がアキュムレータＡＣ０〜ＡＣ３の全ての選択を完了したということを表す。【０１１５】
状態７５に遷移した場合、状態管理部２２０は、状態７５として記載した左端の枠内の＃＃３のバイトを処理するアキュムレータＡＣ３を選択する選択信号をマルチプレクサ２３０へ送信する。状態７５では、既に４サイクル以前にバイトハイ命令が発行されているので、バイトハイ命令が発行されることはない。そして、状態７５に遷移した次のサイクルでバイトロー命令が発行されると状態遷移１７６が発生し、状態管理部２２０は、状態７３へ遷移する。これに対して、状態７５に遷移した次のサイクルでバイトロー命令が発行されないと状態遷移１８０が発生し、状態管理部２２０は、状態７４へ遷移する。【０１１６】
状態７３に遷移した場合、状態管理部２２０は、状態７３として記載した左端の枠内の＃＃２のバイトを処理するアキュムレータＡＣ２を選択する選択信号をマルチプレクサ２３０へ送信する。状態７２では、既に４サイクル以前にバイトロー命令及びバイトハイ命令の両方が発行されているので、いずれの命令も発行されることはない。そこで、状態７３に遷移した次のサイクルで状態遷移１７７が発生し、状態管理部２２０は、状態７２へ遷移する。【０１１７】
状態７４に遷移した場合、状態管理部２２０は、状態７４として記載した枠内の＃＃２のバイトを処理するアキュムレータＡＣ２を選択する選択信号をマルチプレクサ２３０へ送信する。状態７４では、既に４サイクル以前にバイトハイ命令が発行されているので、バイトハイ命令が発行されることはない。そして、状態７４に遷移した次のサイクルでバイトロー命令が発行されると状態遷移１７４が発生し、状態管理部２２０は、状態７２へ遷移する。これに対して、状態７４に遷移した次のサイクルでバイトハイ命令が発行されないと状態遷移１８２が発生し、状態管理部２２０は、初期状態７０へ遷移する。状態遷移１８２が発生するということは、状態管理部２２０がアキュムレータＡＣ０〜ＡＣ３の全ての選択を完了したということを表す。【０１１８】
また、状態７１〜７６のいずれに遷移した場合でも、状態管理部２２０は、有効を表す値が「１」のイネーブル信号を演算器２００へ出力する。【０１１９】
演算器２００〜２０７について、いずれも同じ動作を行うので、演算器２００を例に説明する。演算器２００は、アキュムレータＡＣ０〜ＡＣ３に格納された情報の入力を順次受ける。そして、演算器２００は、以下に説明する方法で２４ビットにおける有効桁位置情報を生成してフラグビット生成部２４０へ出力する。【０１２０】
以下に、演算器２００による有効桁位置情報の生成を説明する。演算器２００は、２４ビットのデータの入力を受ける。そして、演算器２００は、入力された２４ビットのデータの隣り合うビットの値を比較し、同じ値であれば１を出力し、異なる値であれば０を出力することで、２３ビットのデータを生成する。【０１２１】
次に、演算器２００は、図１２における疑似コード５５に示すように各データに応じた０〜２９を表す値を取得して５ビットの有効桁位置情報として出力する。図１２は、実施例２における有効桁位置情報の生成の一例を説明するための図である。具体的には、非符号となる最上位ビットがデータの０ビット目（すなわち最下位ビット）にある場合、演算器２００は、２２を５ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータの８ビット目にある場合、演算器２００は、１４を５ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータ５２の２２ビット目（すなわち符号ビットのすぐ下位が符号ビットと異なる値の場合）にある場合、演算器２００は、０を５ビットで表した有効桁位置情報を出力する。【０１２２】
フラグビット生成部２４０〜２４７は、演算器２００〜２０７から入力された有効桁位置情報をフラグビットが設定された２４ビットのビットパターンに変換する。そして、フラグビット生成部２４０〜２４７は、生成したビットパターンを用いて、桁レジスタＡＲ０〜ＡＲ２３への加算処理を行いカウンタを更新して統計情報を生成する。【０１２３】
以上に説明したように、本実施例に係る演算コアは、８ビットデータと８ビットデータとを用いて積和演算を行う場合の統計情報を収集する。そして、本実施例に係る演算コアでは、演算器とアキュムレータをまとめたものの４つを１つの組として１つの演算器で有効桁を表す情報を収集する。これにより、アキュムレータと有効桁を表す情報を収集する演算器とを１対１で組み合わせた場合よりも、４分の１の信号線でアキュムレータと演算器とが接続される。さらに、演算器は有効桁位置を表す情報として５ビットの情報をフラグビット生成部へ送信する。【０１２４】
アキュムレータと有効桁を表す情報を収集する演算器とを１対１で組み合わせた場合、演算部と統計情報取得部とを結ぶ信号線は、例えば、演算部が２５６ビット長ベクトル同士の演算を行うとすると７６８本配置される。すなわち、本実施例に係る演算コアは、アキュムレータと有効桁を表す情報を収集する演算器とを１対１で組み合わせた場合に比較して演算部と統計情報取得部とを結ぶ信号線を低減することができる。このように、ビットデータと８ビットデータとを用いて積和演算を行う場合の統計情報を収集する場合であっても、回路規模を抑えて固定小数点演算の精度を向上させることができる。
【符号の説明】
【０１２５】
３  サーバ
１２  レジスタファイル
２１  命令用メモリ
３０  演算処理装置
３１  ＣＰＵ
３２  メモリ
３３  演算処理装置用メモリ
３４  バス
３５  データバス
３６  バスインターフェース
３７  メモリインターフェース
１０１  セレクタ
１０２  統計情報取得部
１０３  データ変換部
１０４  統計情報集約部
１１１  ＰＣ
１１２  デコーダ
１３１  演算部
１３２  アキュムレータ
１４１  演算部
２００〜２１５  演算器
２２０〜２２７  状態管理部
２３０〜２３７  マルチプレクサ
２４０〜２４７  フラグビット生成部
３００，３００−１〜３００−１６  演算コア
３０１  データバスインターフェース
３１０〜３４１  演算器
ＡＣ０〜ＡＣ３１  アキュムレータ
ＡＤ０〜ＡＤ３９  加算器
ＡＲ０〜ＡＲ３９  桁レジスタ
【図１】
2020084723.tif 000003
【図２】
2020084723.tif 000004
【図３】
2020084723.tif 000005
【図４】
2020084723.tif 000006
【図５】
2020084723.tif 000007
【図６】
2020084723.tif 000008
【図７】
2020084723.tif 000009
【図８】
2020084723.tif 000010
【図９】
2020084723.tif 000011
【図１０】
2020084723.tif 000012
【図１１】
2020084723.tif 000013
【図１２】
2020084723.tif 000014
【国際調査報告】
2020084723.tif 000015
2020084723.tif 000016