以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図1は、サーバの構成の一例を示す図である。サーバ3は、Central Processing Unit(CPU)31、演算処理装置30及び演算処理装置用メモリ33をPeripheral Component Interconnect Express(PCIe)等のバス34で接続し、CPU31にはメモリ32が直接接続された構成を有する。
CPU31は、メモリ32に実行可能に展開されたプログラムにしたがって、演算処理装置30内の複数の演算コア300-1~300-16を制御する。
ここで、本実施例では、演算コア300の制御をCPU31が実行するが、データバス35に制御コアを接続し、その制御コアにより演算コア300-1~300-16の制御が行われてもよい。
演算処理装置30は、専用の演算処理装置用メモリ33に接続され、演算処理装置用メモリ33を使って演算を実行する。演算処理装置30は、例えば、PCIカードである。
演算処理装置30は、SIMD(Single Instruction Multiple data)命令を基本とした演算コア300-1~300-16を有する。ただし、演算コア300の数に特に制限は無い。以下の説明では、演算コア300-1~300-16のそれぞれを区別しない場合、単に「演算コア300」という。
演算処理装置30は、バス34、バスインターフェース36及びデータバス35経由でCPU31の指示を受け、複数の演算コア300により並列に演算を実行する。
各演算コア300は、データバス35を介して相互に通信可能である。また、各演算コア300は、データバス35およびPCIeインターフェース等の上位側とのバスインターフェース36を介して、バス34に接続されたCPU31等と接続される。また、各演算コア300は、データバス35及びメモリインターフェース37を介して、演算処理装置用メモリ33に接続される。
図2は、実施例1に係る演算コアの構成の一例を示す図である。図2では、演算コア300とともに、データバスインターフェース301、データバス35、バスインターフェース36及びメモリインターフェース37も記載されている。なお、データバスインターフェース301は、演算コア300に含まれてもよい。
演算コア300は、PC(Program Counter)111、デコーダ112、レジスタファイル12を有する。さらに、演算コア300は、ベクトル演算用の演算部131、スカラ演算用の演算部141及びアキュムレータ(ACC:Accumulator)132を有する。また、演算コア300は、複数のセレクタ(SEL:selector)101を有する。
さらに、演算コア300は、統計情報取得部102、統計情報集約部104及びデータ変換部103を有する。なお、ここでは、複数の統計情報取得部102を総称して統計情報取得部102と呼ぶ場合がある。また、複数のデータ変換部103を総称してデータ変換部103と呼ぶ場合がある。
演算コア300は、演算処理装置30内に複数設けられ、データバス35を介して相互に接続され、並列に演算を実行する。各演算コア300は、入力された命令で指定されたベクトル演算及びスカラ演算を実行する。また、各演算コア300は、統計情報取得部102で取得したビットパターンを累積分布として取得する。以下、本実施形態では、統計情報取得部102が取得したビットパターンの累積分布を統計情報と呼ぶ。
各演算コア300には、統計情報(累積分布)から取得する桁位置が設定される。ここで、桁位置とは、例えば固定小数点データの演算がなされたときに、固定小数点データの各ビット位置に対応して設けられる桁位置であって、統計情報が累積される桁位置をいう。桁位置はユーザがハイパーパラメータとして任意に指定してもよい。演算コア300は、取得した累積分布のうちの指定された桁の累積分布データを取得する。そして、各演算コア300は、累積分布データをCPU31へ転送する。以下に、演算コア300が有する各部の詳細を説明する。
データバスインターフェース301は、演算コア300をデータバス35に接続するインターフェースである。PC111は、取得する命令の命令用メモリ21におけるアドレスを指定する。
デコーダ112は、PC111の指す命令用メモリ21のアドレスからフェッチされた命令をデコードする。デコーダ112が命令をデコードすると、デコード結果に応じて、演算コア300の各部が制御される。
例えば、デコードの結果、命令がロード命令である場合には、演算処理装置用メモリ33からデータが読み出され、セレクタ101を介して、統計情報取得部102およびデータ変換部103に供給される。
また、デコードの結果、命令が固定小数点演算を実行する命令であった場合、デコーダ112は、シフト量がデータ変換部103に供給されるように指示する。シフト量は、例えば、命令のオペランド、オペランドで指定されたレジスタ、オペランドで指定されたアドレス、レジスタの示すアドレスなどであり、演算処理装置用メモリ33等から取得され、データ変換部103に供給される。
演算部131は、ベクトル演算用の演算器を有する。デコーダ112によるデコードの結果がベクトル演算命令であった場合、演算部131は、レジスタファイル12のベクタレジスタのデータの入力を受ける。そして、演算部131は、入力されたデータを用いてベクトル演算を実行する。演算部131は、セレクタ101を介して統計情報取得部102及びデータ変換部103へ演算結果を供給する。また、演算部131は、演算結果をアキュムレータ132へ出力する。
演算部141は、スカラ演算用の演算器を有する。デコーダ112によるデコードの結果、命令がスカラ演算命令であった場合、演算部141は、レジスタファイル12のスカラ・レジスタのデータの入力を受ける。そして、演算部141は、入力されたデータを用いてスカラ演算を実行する。その後、演算部141は、セレクタ101を介して統計情報取得部102及びデータ変換部103に演算結果を供給する。演算部131及び141については後で詳細に説明する。
セレクタ101は、ベクトル演算用の演算部131、スカラ演算用の演算部141及びアキュムレータ132等の演算結果、並びに、データバスインターフェース301からの読み出し結果の中から出力するデータを選択する。なお、ここでは、複数のセレクタを総称してセレクタ101と呼ぶ場合がある。また、複数のベクトル演算用の演算部を総称して演算部131と呼ぶ場合がある。
データ変換部103は、セレクタ101によって選択されたデータの固定小数点位置を変更する。具体的には、データ変換部103は、ベクトル演算の結果、スカラ演算の結果、アキュムレータ132の演算結果、あるいは、データバスインターフェース301からの読み出し結果等で得られるセレクタ101により選択された固定小数点データの入力を受ける。そして、データ変換部103は、取得した固定小数点数データを指定されたシフト量だけシフトする。また、データ変換部103は、シフトとともに、上位ビットの飽和処理および下位ビットの丸めを実行する。データ変換部103は、例えば、丸め処理部及び飽和処理部(不図示)を有する。
丸め処理部は、入力を40ビットの演算結果とし、下位の所定数のビットを小数部として丸めを行なう。具体的には、丸め処理部は、所定数の下位ビットを小数部として丸めを行なう。シフト量が負の場合には、丸め処理部は、何も行なわない。丸めとしては、最近接丸め、0への丸め、正の無限大への丸め、負の無限大への丸め、乱数丸めなどが例示される。シフト量は、例えば、図2に示すように、デコーダ112が命令から取得して送信するシフト量である。
シフト部は、シフト量だけ算術シフトを実行する。具体的には、シフト部は、シフト量が正の場合はシフト量分の算術右シフトを行う。また、シフト量が負の場合は、シフト部はシフト量分の算術左シフトを行なう。飽和処理部は、シフト結果が正の最大値以上の場合は正の最大値を出力し、負の最小値以下の場合は負の最小値を出力し、それ以外は入力値の下位16ビットを出力する。
データ変換部103は、セレクタ101を介して、演算部131又は141による演算結果の入力を受ける。そして、データ変換部103は、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、上位ビットを廃棄し、下位ビットに0を埋め込む。ただし廃棄される上位ビットに符号ビットと異なる値が含まれる場合は、シフト結果を、同符号で表現可能な絶対値最大の数に置き換える(飽和処理)。また、データ変換部103は、右シフト時、上位ビット(符号ビットより下位のビット)に符号ビットを埋め込む。そして、データ変換部103は、上記のように丸め、シフト、飽和処理によって得られるデータを、レジスタファイル12のレジスタ等と同一のビット幅(例えば、16ビットのレジスタ)で出力する。
したがって、演算コア300で実行されるコンピュータプログラムが固定小数点演算を実行する命令のオペランドにシフト量を指定することで、演算コア300は、プログラム実行中に、固定小数点数の小数点位置を指定されたシフト量だけ更新する。
データ変換部103でデータ変換された結果は、レジスタファイル12のレジスタに格納される。
アキュムレータ132は、ベクトル演算用の演算部131の演算結果の入力を受ける。そして、アキュムレータ132は、演算結果を加算する。アキュムレータ132は、セレクタ101を介して統計情報取得部102及びデータ変換部103に演算結果を供給する。
統計情報取得部102は、セレクタ101によって選択されたデータからの統計情報を取得する。統計情報取得部102は、デコーダ112によるデコードの結果、命令に統計情報採取命令が付加されている場合、フラグビットのビットパターンの累積分布を取得する。そして、統計情報取得部102は、フラグビットのビットパターンの累積分布を統計情報集約部104へ出力する。フラグビットのビットパターンとは、演算部131又は141の演算結果である固定小数点数の最上位のビット位置から最上位のビットと異なる値を有するビット位置のうち最上位ビット位置までフラグを設定して得られるビットパターンである。統計情報取得部102については後で詳細に説明する。
統計情報集約部104は、統計情報取得部102によって取得された統計情報であるフラグビットのビットパターンの累積分布を集約する。そして、統計情報集約部104は、フラグビットのビットパターンの累積分布を格納する。統計情報集約部104は、取得した累積分布のうちの指定された桁の累積分布データ(サンプル数ともいう)を出力する。より具体的には、統計情報集約部104は、指定された桁位置の前後-L~+M桁(L、Mは整数)の区間の統計情報のサンプル数情報を抽出する。
次に、図3を参照して、演算部131及び141、並びに、統計情報取得部102の詳細について説明する。図3は、実施例1に係る演算部及び統計情報取得部の構成の一例の図である。ここで、演算部131及び141はベクトル演算とスカラ演算との違いはあるものの同一の機能を有する。以下では、演算部131を例に説明するが、演算部141についても同様である。
演算部131は、バンク#0のレジスタR0~R15、バンク#1のレジスタR100~R115、演算器310~325、アキュムレータAC0~AC15、マルチプレクサ230~237、状態管理部220~227及び演算器200~207を含む。なお、アキュムレータAC0~AC15、演算器310~325、バンク#0のレジスタR0~R15、バンク#1のレジスタR100~R115は、Single Instruction/Multiple Data(SIMD)プロセッサの一部である。レジスタR0~R15及びR100~R115は、SIMD並列幅分のバンク数に応じて配置される。
統計情報取得部102は、フラグビット生成部240~247、加算器AD0~AD39及び桁レジスタAR0~AR39を有する。ここで、加算器AD0~AD39及び桁レジスタAR0~AR39は、演算に用いるデータの各桁(0~39)に対応させて配置される。
演算器310~325は、バンク#0のレジスタR0~R15とバンク#1のレジスタR100~R115から同一のタイミングでデータを取得する。演算器310~325は、デコーダ112で解読された命令にしたがった演算を並列に実行する。図3では、分かり易いように、デコーダ112から演算器310及びアキュムレータAC0に延びる信号線を記載したが、実際には、デコーダ112は、演算器310~325及びアキュムレータAC0~AC15に接続される。
ここでは、演算器310~325が積和命令を実行することを想定する。演算器310~325は、バンク#0のレジスタR0~R15の値とバンク#1のレジスタR100~R115の値の積にアキュムレータAC0~AC15に蓄積済みの累積和を加算する。そして、演算器310~325は、演算結果をアキュムレータAC0~C15に格納する。積和命令では、通常複数回の積和が実行され最終回は演算結果がレジスタファイル12に返される。これに加えて、アキュムレータAC0~AC15は、演算結果をマルチプレクサ230~237を介して演算器200~207に向けて送出する。アキュムレータAC0~AC15は、「格納領域」の一例にあたる。
アキュムレータAC0~AC15と演算器200~207との間には、マルチプレクサ230~237が配置される。マルチプレクサ230~237は、アキュムレータAC0~AC15を2つずつ組にしたそれぞれが接続される。例えば、アキュムレータAC0とアキュムレータAC1とが組となり、マルチプレクサ230に接続される。また、アキュムレータAC2とアキュムレータAC3とが組となり、マルチプレクサ231に接続される。また、アキュムレータAC14とアキュムレータAC15とが組となり、マルチプレクサ237に接続される。そして、各マルチプレクサ230~237は、それぞれ演算器200~207に接続される。アキュムレータAC0~AC15と演算器200~207とは1対1に対応しているので、アキュムレータAC0~AC15の組は、演算器200~207の組と言える。
ここで、本実施例では、アキュムレータAC~AC15における組とされた2つは、一方が演算で用いる32ビットのデータの上位16ビット部分のデータの演算結果を格納し、他方が下位16ビット部分のデータの演算結果を格納する。具体的には、アキュムレータAC0、AC2、・・・、AC14が上位16ビットのデータを取扱い、アキュムレータAC1、AC3、・・・、AC15が下位16ビットのデータを取り扱う。ここでは、上位16ビットのデータを取り扱うアキュムレータAC0、AC2、・・・、AC14を上位側アキュムレータといい、下位16ビットのデータを取り扱うアキュムレータAC1、AC3、・・・、AC15を下位側アキュムレータと言う。
マルチプレクサ230~237は、状態管理部220からの選択信号の入力を受ける。ここで、選択順は特に制限は無いが、本実施例では上位側アキュムレータを先に選択し、次に、下位側アキュムレータを選択する場合で説明する。入力された選択信号がLowの場合、マルチプレクサ230~237は、下位側アキュムレータを選択する。また、入力された選択信号がHighの場合、マルチプレクサ230~237は、上位側アキュムレータを選択する。
状態管理部220~227は、図4に示す状態管理を行うことで選択するアキュムレータAC~AC15を決定する。図4は、実施例1に係る状態管理を説明するための図である。状態管理部220~227は、保留状態41及び実行状態42という2つの状態のいずれかの状態に遷移する。デコーダ112から命令が入力されていない初期状態で、状態管理部220~227は、保留状態41となる。
保留状態41では、状態管理部220~227は、選択信号としてLowの信号をマルチプレクサ230~237へ出力する。この場合、状態管理部220~227は、イネーブル信号として0の値を有する信号を演算器200~207へ出力する。0の値のイネーブル信号は、無効を表す信号にあたる。保留状態41で、デコーダ112から統計情報採取命令以外の命令の入力を受けた場合、状態管理部220~227は、状態遷移43により保留状態を維持する。
これに対して、保留状態41でデコーダ112から統計情報採取命令の入力を受けると状態遷移44が発生し、状態管理部220~227は、イネーブル信号として1の値を有する信号を演算器200~207へ出力するとともに、実行状態42へ遷移する。統計情報採取命令は、アキュムレータAC0~AC15からレジスタファイル12のベクタレジスタへのデータコピーの命令に付加される命令である。1の値を有するイネーブル信号は、有効を表す信号にあたる。
実行状態42では、状態管理部220~227は、選択信号としてHighの信号をマルチプレクサ230~237へ出力する。この場合、状態管理部220~227は、イネーブル信号として1の値を有する信号を演算器200~207へ出力する。
信号出力後に、統計情報採取命令以外の命令が入力されると状態遷移45が発生し、状態管理部220~227は、保留状態41に遷移する。状態管理部220~227は、保留状態41への遷移後は、イネーブル信号として0の値を有する信号を演算器200~207へ出力する。ここで、統計情報命令は連続で入力されることはないことが前提であるが、何らかの理由により統計情報命令が続けて入力された場合、実行状態42にある状態管理部220~227は、エラーを出力して保留状態41に遷移するように構成してもよい。このマルチプレクサ230~237及び状態管理部220~227が、「取得部」の一例にあたる。
図3に戻って説明を続ける。演算器200~207は、マルチプレクサ230~237を介してアキュムレータAC0~AC15から出力された40ビットのデータを取得する。そして、演算器200~207は、入力されたデータにおける非符号となる最上位ビットの位置を示す有効桁位置情報をフラグビット生成部240~247へ出力する。非符号となる最上位ビットとは、符号ビットの値と異なるビット値を有するビットのうち、符号ビット(Most Significant Bit(MSB))に最も近い位置のビットである。すなわち、有効桁位置情報は、MSBから符号ビットと同じ値が何ビット続くかを表す情報である。
ここで、図5を参照して、有効桁位置情報の算出の詳細について説明する。図5は、有効桁位置情報の生成の一例について説明するための図である。ここでは、演算器200を例に説明する。
状態管理部220からLowの選択信号を受けてマルチプレクサ230を介してアキュムレータAC1から出力された40ビットのデータ51が、演算器200に入力される。演算器200は、入力されたデータ51の隣り合うビットの値を比較し、同じ値であれば1を出力し、異なる値であれば0を出力することで、39ビットのデータ52を生成する。
次に、演算器200は、疑似コード53に示すように各データ52に応じた0~39を表す値を取得して6ビットの有効桁位置情報として出力する。具体的には、非符号となる最上位ビットがデータ51の0ビット目(すなわち最下位ビット)にある場合、演算器200は、38を6ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータ52の8ビット目にある場合、演算器200は、30を6ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータ52の38ビット目にある場合(すなわち符号ビットのすぐ下位が符号ビットと異なる値の場合)、演算器200は、0を6ビットで表した有効桁位置情報を出力する。
その後、演算器200は、有効桁位置情報の6ビットのそれぞれの値と状態管理部220から入力されたイネーブル情報の反転値との論理和54を求めてフラグビット生成部240へ出力する。すなわち、イネーブル信号の値が1の場合、演算器200は、有効桁位置情報をそのままフラグビット生成部240へ出力する。また、イネーブル信号の値が0の場合、すなわち、状態管理部220において、保留状態41にあり状態遷移44が発生していないと、演算器200は、全ての値が1である6ビットのデータを有効桁位置情報としてフラグビット生成部240へ出力する。
次に、状態管理部220が実行状態42に遷移すると、Highの選択信号を受けてマルチプレクサ230を介してアキュムレータAC0から出力された40ビットのデータ51が、演算器200に入力される。その後、演算器200は、上述した有効桁位置情報の算出処理をアキュムレータAC0から出力された40ビットのデータ51に対して実行する。
ここで、統計情報命令が付加される命令は、アキュムレータAC0~AC15からレジスタファイル12のベクタレジスタへのデータコピーの命令であり、アキュムレータAC0~AC15の内容に変化はしない。そこで、統計情報命令後の次のサイクルでもアキュムレータAC0~AC15の値は維持されており、演算器200は、同じタイミングのアキュムレータAC0及びAC1のデータを取得することができる。
演算器200は、組となったアキュムレータAC0及びAC1から演算結果を順番に取得し、取得した演算結果から得られた有効桁位置情報を順次出力する。すなわち、アキュムレータAC0及びAC1のそれぞれを1対1で演算器200に対応させた場合に比べて、本実施例に係る演算コア300は、演算器200と統計情報取得部102とを繋ぐ信号経路を半分に抑えることができる。この演算器200~207が、「位置情報生成部」の一例にあたる。そして、マルチプレクサ230~237と演算器200~207とを結ぶ信号経路が、「第1信号経路」の一例にあたる。
図3に戻って説明を続ける。フラグビット生成部240~247と演算器200~207とは、有効桁位置情報のビット数の信号線により接続される。例えば、本実施例では有効桁位置情報が6ビットであるので、フラグビット生成部240~247と演算器200~207とを結ぶ信号線は6本となる。
フラグビット生成部240~247は、有効桁位置情報の入力を演算器200~207から受ける。そして、フラグビット生成部240~247は、有効桁位置情報を用いて、非符号となる最上位ビット以下LSB(Least Significant Bit)までの範囲に対応するビット位置にフラグビットとして「1」を設定したデータを生成するフラグビット生成処理を行う。フラグビット生成部210~213の処理により、最下位ビット位置から、非符号となる最上位ビットのビット位置までの範囲のそれぞれのビット位置にフラグビットを設定することで得られるフラグビットのビットパターンが生成される。
ここで、図6を参照して、フラグビットのビットパターン生成処理の一例について説明する。図6は、ビットパターン生成処理の一例を説明するための図である。
フラグビット生成部240は、6ビットで表される有効桁位置情報を演算器200から取得する。次に、フラグビット生成部240は、有効桁位置情報の上位4ビットのデータを演算回路61へ入力する。また、フラグビット生成部240は、有効桁位置情報の下位2ビットのデータを演算回路61へ入力する。
演算回路61は、上位4ビットのデータが0~9のいずれの値以下かを判定する。そして、演算回路61は、判定結果に応じてGRP_LE_0~9及びGRP_LT_0~9のいずれのグループに含まれるかを決定し、含まれるグループの値を1とする。GRP_LE_N(N=0~9)は、値がn以下であるグループである。また、GRP_LT_N(N=0~9)は、値がより小さいグループである。例えば、上位4ビットのデータが、“0,0,1,1”であれば、演算回路61は、GRP_LE_3~9の値を1とし、GRP_LT_4~9の値を1とし、それ以外のグループの値は0とする。これにより、演算回路61は、有効桁位置情報を4で割った時の値が0~9の何れの値以下かを区別できる。
一方、演算回路62は、下位2ビットのデータが0~2のいずれの値以下かを判定する。演算回路62は、下位2ビットのデータが、MOD4_LE0、MOD4_LE1又はMOD4_LE2のいずれのグループに含まれるかを判定し、属するグループの値を1とし、他のグループの値を0とする。MOD4_LE0は、割った時の余りが0のグループである。MOD4_LE1は、割った時の余りが1か0のグループである。MOD4_LE2は、割った時の余りが2か1か0のグループである。
次に、演算回路62は、GRP_LE_0~9及びGRP_LT_0~9の値、並びに、MOD4_LE0~LE2の値を演算回路63に入力する。演算回路63は、GRP_LE_N及びGRP_LT_N(N=0~9)のそれぞれについて演算を行う。
具体的には、演算回路63は、GRP_LE_Nの値とMOD4_LE0~LE2の値のそれぞれの論理積を求める。そして、演算回路63は、各論理積とGRP_LT_Nの値の論理和を求める。次に、演算回路63は、各論理和の結果をLANE_INC[N*4+0]~[N*4+2]とし、GRP_LE_Nの値をLANE_INC[N*4+3]とする。そして、演算回路63は、40ビットのデータにおけるN×4+0~3番目のビットの位置の値を、LANE_INC[N*4+0]~[N*4+3]とする。これにより、演算回路63は、最下位ビット位置から非符号となる最上位ビットのビット位置までの範囲のそれぞれのビット位置に、フラグビットとして「1」を設定することで得られるビットパターンを生成する。
なお、フラグビット生成部240~247は非符号となる最下位ビット以上MSBまでの範囲に対応するビット位置にフラグビットである「1」を設定する処理を行うものであってもよい。非符号となる最下位ビットとは、符号ビットの値と異なるビット値を有するビットのうち、符号ビットから最も遠い位置(LSBに最も近い位置)のビットをいう。この場合、フラグビット生成部240~247の処理により、符号ビット(MSB)の位置から、非符号となる最下位ビットのビット位置までの範囲のそれぞれのビット位置にフラグビットを設定することで得られるビットパターンが生成される。
フラグビット生成部240~247が、「ビットパターン生成部」の一例にあたる。そして、演算器200~207とフラグビット生成部240~247を接続する信号経路が、「第2信号経路」の一例にあたる。
図3に戻って説明を続ける。加算器AD0~AD39は、桁レジスタAR0~AR39のそれぞれのビット幅と同じビット幅を有し、フラグビット生成部240~247の結果の桁ごとの加算を行う。加算器AD0~AD39は、フラグビット生成部240~247の演算結果の桁ごとの加算結果と、桁レジスタAR0~AR39に保存した各桁の値と加算して桁レジスタAR0~AR39を更新する。
桁レジスタAR0~AR39は、桁ごとの統計情報を格納する。桁レジスタAR0~AR39の値は、加算器AD0~AD39の出力値により更新される。
加算器AD0~AD39と桁レジスタAR0~AR39との処理によって、フラグビットを設定することで得られるビットパターンをビット位置毎に累積した統計情報が生成される。以上の構成によって、演算器310~317は、演算結果である複数の固定小数点数データに関し、統計情報取得部102によって小数点位置判定用統計情報が収集される。この小数点位置判定用統計情報は、最上位からどの範囲のビットが未使用となっているかを表す指標となる。この加算器AD0~AD39が、「統計情報取得部」の一例にあたる。
また、フラグビット生成部240~247は非符号となる最下位ビット以上MSBまでの範囲に対応するビット位置にフラグビット「1」を設定する処理を行うものである場合について説明する。この場合、加算器AD0~AD39と桁レジスタAR0~AR39との処理によって、非符号となる最下位ビット以上MSBまでの範囲に対応するビット位置にフラグビット「1」を設定して得られるビットパターンを累積した他の統計情報が生成される。この統計情報は、最下位からどの範囲のビットが未使用となっているかを表す指標となる。
ここで、統計情報集約部104により収集された統計情報の利用方法について説明する。例えば、演算処理装置30は、統計情報集約部104に格納された非符号となるビット値を持つ最上位のビット位置から最下位ビットまでフラグビットを設定することで得られるビットパターンを累積した情報を取得する。演算処理装置30は、例えば、ベクトル演算の実行ごとに、ベクトル演算器に含まれるそれぞれの演算器からビットパターンを収集し、累積し、累積分布を生成する。
累積分布の各桁が表すサンプル数は、最上位桁(MSB)からその桁までの累積サンプル数であるため、累積分布のA%を超えた桁位置のサンプル数が、「A%を超えるまでの全桁のサンプル数」に相当する。このため、演算処理装置30は、一桁分のサンプル数情報とその桁位置情報を転送するだけで、所定の閾値を越えた桁位置を特定する情報を得ることが可能である。
なお、累積分布全体に対する所定の閾値を越えた桁位置以上の分布の割合(A%)を算出するためには、分母となる累積分布全体の総サンプル数が要求される。しかしながら、累積分布全体の総サンプル数は、回路構成から既知となる。例えば、演算コア300内で1回のベクトル演算では、ベクトル演算器の並列数だけ演算が実行される。したがって、1回のベクトル演算当りの総サンプル数は、ベクトル演算器の並列数となる。仮に、累積分布全体のサンプル数に、スカラ演算も含める場合には、累積分布の集計対象である各演算器の回数分だけ積算すればよい。
次に、図7を参照して、有効桁位置情報の算出処理の流れについて説明する。図7は、有効桁位置情報の算出処理のフローチャートである。図7は、保留状態41と実行状態42との間の状態遷移が完了する間のサイクルを表す。
状態管理部220~227は、現在の状態が保留状態41か否かを判定する(ステップS1)。
現在の状態が保留状態の場合(ステップS1:肯定)、状態管理部220~227は、統計情報採取命令を取得したか否かを判定する(ステップS2)。統計情報採取命令を取得していない場合(ステップS2:否定)、状態管理部220~227は、0の値を有するイネーブル信号を演算器200~207へ出力する。演算器200~207は、0値を有するイネーブル信号の入力を受けて、全ての値が1の有効桁位置情報をフラグビット生成部240~247へ出力する(ステップS3)。
これに対して、統計情報採取命令を取得した場合(ステップS2:肯定)、状態管理部220~227は、1の値を有するイネーブル信号を演算器200~207へ出力する(ステップS4)。また、状態管理部220~227は、マルチプレクサ230~237にLowの信号を出力する。
マルチプレクサ230~237は、Lowの信号の入力を受けて、下位側のアキュムレータの格納値を選択する(ステップS5)。
演算器200~207は、下位側のアキュムレータの格納値の入力を受ける。そして、演算器200~207は、入力値に応じた有効桁位置情報を算出する(ステップS6)。
その後、演算器200~207は、1の値を有するイネーブル信号の入力を状態管理部220~227から受けて、入力値に対応する有効桁位置情報をフラグビット生成部240~247へ出力する(ステップS7)。
その後、状態管理部220~227は、実行状態42に遷移する(ステップS8)。
一方、現在の状態が保留状態でない場合(ステップS1:否定)、すなわち現在の状態が実行状態の場合、マルチプレクサ230~237にHighの信号を出力する。マルチプレクサ230~237は、Highの信号の入力を受けて、上位側のアキュムレータの格納値を選択する(ステップS9)。
演算器200~207は、上位側のアキュムレータの格納値の入力を受ける。そして、演算器200~207は、入力値に応じた有効桁位置情報を算出する(ステップS10)。
その後、演算器200~207は、1の値を有するイネーブル信号の入力を状態管理部220~227から受けて、入力値に対応する有効桁位置情報をフラグビット生成部240~247へ出力する(ステップS11)。
次に、状態管理部220~227は、0の値のイネーブル信号を出力し、且つ、保留状態41に遷移する(ステップS12)。
次に、図8を参照して、統計情報取得部102の統計情報収集の処理の流れについて説明する。図8は、統計情報取得部による統計情報収集の処理のフローチャートである。
フラグビット生成部240~247は、有効桁位置情報の入力を演算器200~203から受ける(ステップS21)。
次に、フラグビット生成部240~247は、入力された有効桁位置情報の全ての桁の値が1か否かを判定する(ステップS22)。全ての桁の値が1の場合(ステップS22:肯定)、フラグビット生成部240~247は、有効桁位置情報が無効であると判定して処理を終了する。
これに対して、1以外の値の桁が存在する場合(ステップS22:否定)、フラグビット生成部240~247は、有効桁位置情報からビットパターンを生成する(ステップS23)。そして、フラグビット生成部240~247は、生成したビットパターンの各桁の値をそれぞれ加算器AD0~AD39へ出力する。加算器AD0~AD39は、各フラグビット生成部240~247から送られてきた値を集計し、桁レジスタAR0~AR39それぞれが有する各桁のカウンタに集計値を加算する(ステップS24)。その後、統計情報集約部104は、桁レジスタAR0~AR39のそれぞれが保持する集計値を集約する。
ここで、他の接続形態と本実施例に係る演算コアにおける接続形態とを比較する。各アキュムレータAC0~AC15に格納されたデータにおける、非符号となる最下位ビット以上MSBまでの範囲のビット位置にフラグビット「1」を設定して得られるビットパターンを取得するには、他の接続方法が考えられる。例えば、最も簡単な方法として、図7に示すように、個々のアキュムレータAC0~AC15と演算器200~215とを1対1に接続する方法が考えられる。図9は、アキュムレータと演算部とを1対1に接続した場合の接続を表す図である。こでは、演算器200~演算器215が加算器AD0~AD39へ各桁のデータを配布する役割を有することから、図9では演算器200~演算器215が統計情報取得部102の一部に含まれる。
この場合、演算器310~325及びアキュムレータAC0~AC15は、40ビットのデータを取り扱う。そのため、アキュムレータAC0~AC15から統計情報取得部102の間に、フラグビットを出力する40本の信号線が配線される。例えば、統計情報取得部102に、256ビット長のベクトル処理にあたる16個分の16ビットの積和演算器の情報を集約する場合がある。そのような場合、アキュムレータAC0~AC15から統計情報取得部102の間に、640本の信号線が配線されることになる。このように信号線が多くなると、回路自体に加えて信号線のひき込み用の領域の確保により回路実装面積が大きくなってしまう。
例えば、典型的な例として、ベクトル長が256ビットのベクトルレジスタに対するメモリからのリード及びメモリへのライトのパスとして、ベクトル長に合わせて256本の信号線が配線される場合を考える。レジスタへの読み書きの信号の量は、ベクトルレジスタへの読み書きのスループットを決定することになるため、なるべく多くの信号線が確保されることが好ましい。一方、フラグビット用の信号線は、リード及びライトの性能や、演算性能には直接的には寄与しないにも拘らず、性能を決める信号の2.5倍もの配線量を占めることになり、実際の実装には不適である。
これに対して、本実施例に係る演算コア300では、例えば16個の演算器310~325及びアキュムレータAC0~AC15を2つずつの組にした場合、8つの組となる。この場合、アキュムレータAC0~AC15と演算器200~207とを結ぶ信号線は、図9の場合に比べて半分になる。さらに、演算器200~207は、6ビットの情報を取り扱うため、演算器200~207と統計情報取得部102との間の信号線は、48本となり、直接接続した場合に比べて格段に少なく抑えることができる。
ここで、本実施例では、統計情報採取命令の発行頻度を最高で2サイクルに1回とした場合として、演算器310~325及びアキュムレータAC0~AC15を2個ずつ組とした。ただし、統計情報採取命令を制約しても問題のないレベルまで最大限制限して、統計情報採取命令の許容発行頻度をnサイクルに1回まで減らしてもよい。その場合、それに合わせて、演算器310~325及びアキュムレータAC0~AC15のn個ずつを組として、それらの間で順番に信号線を使用する構成にしてもよい。n個ずつ組にすることで、アキュムレータAC0~AC15と演算器200~215とを結ぶ信号線は、図9の場合に比べてn分の1になる。
以上に説明したように、本実施例に係る演算コアは、演算器とアキュムレータとのまとまりの複数個を組として1つの演算器に接続し、順番にデータを演算器に供給させる。これにより、アキュムレータとサンプルデータを算出する演算器との間の信号線を低減できる。また、本実施例に係る演算コアは、演算部は統計処理部に向けてサンプルデータとして6ビットの有効桁位置情報を送信する。これにより、実際の演算を行う演算部と、補助的な統計処理を行う統計情報取得部との間の信号線の数を低減できる。したがって、回路規模を抑えて固定小数点演算の精度を向上させることができる。
図10は、実施例2に係る演算部及び統計情報取得部の構成の一例の図である。本実施例に係る演算器310は、8ビットデータと8ビットデータとを乗算して、アキュムレータAC0~AC31に格納された24ビットデータに加算し、アキュムレータAC0~AC31に格納する積和演算を行う。この場合も、256ビット長ベクトル同士の演算として、各演算器310~341及び各アキュムレータAC0~AC31は、32個ずつ配置される。以下の説明では、実施例1と同様の各部の動作については説明を省略する場合がある。
演算器310~341は、32ビットデータと32ビットデータとを乗算する処理を単位としてグループ分けされる。この単位はFMA(Fused Multiply Adder)と呼ばれる場合がある。すなわち、1つのFMAには、演算器310~341のうちの4つと、アキュムレータAC0~AC31のうちの4つが含まれる。各演算器310~341は、32ビットデータにおける異なるバイト位置のデータを処理する。例えば、演算器310は、32ビットデータのうちの0バイト目のデータを処理する。また、演算器311は、32ビットデータの内の2バイト目のデータを処理する。演算器312は、32ビットデータの内の3バイト目のデータを処理する。演算器313は、32ビットデータの内の1バイト目のデータを処理する。
この場合も、統計情報採取命令は、アキュムレータAC0~AC31からベクタレジスタへのデータの移動を実行させる命令に付加される。この命令は、飽和処理、丸め及び出力などを実行させることもできる。この命令は、例えば、アキュムレータAC0~AC3を含むFMAを例に説明すると、1つの命令毎に、アキュムレータAC0~AC3のうちの2組ずつに処理を行わせる。ここで、本実施例では、アキュムレータAC0とアキュムレータAC1とを組とし、アキュムレータAC2とアキュムレータAC3とを組とするように、各FMAにおいて上位側のバイトのデータを処理する組と、下位側のバイトのデータを処理する組とに分ける。ここでは、上位側のバイトのデータを処理する組に処理を行わせる命令をバイトハイ命令とよび、下位側のバイトのデータを処理する組に処理を行わせるバイトロー命令と呼ぶ。バイトハイ命令とバイトロー命令とはいずれも、それぞれ1度発行されると以後3サイクルは発行が停止されるという制限が設けられる。すなわち、バイトハイ命令とバイトロー命令とはいずれも、4サイクルに1度の頻度で発行される。
状態管理部220~227はいずれも同様の動作を行うので、状態管理部220を例に説明する。状態管理部220は、4サイクルの間にアキュムレータAC0~AC3が順次演算器200へのデータの入力元として選択され且つ全てが選択されるようにマルチプレクサ230に選択信号を送信する。
状態管理部220は、図11に示す状態管理を行うことで選択するアキュムレータAC~AC3を決定する。図11は、実施例2に係る状態管理を説明するための図である。図11において枠内の##0~##3は、アキュムレータAC0~AC3が処理するデータのバイト番号を表す。さらに、各状態71~76に記載された枠内の##0~##3は、その状態に遷移した時点における少なくとも選択が完了していないアキュムレータAC0~AC3に対応するバイト番号である。例えば、状態72に遷移した時点では、少なくともアキュムレータAC1及びAC0の選択が完了していないことを表す。
状態管理部220は、命令が発行されていない場合、初期状態70の状態を維持する。そして、初期状態70でバイトハイ命令又はバイトロー命令以外の命令が発行されると状態遷移170が発生する。この場合、状態管理部220は、初期状態70を維持して無効を表す値が「0」のイネーブル信号を演算器200へ出力する。
これに対して、初期状態70でバイトロー命令が発行されると、状態遷移171が発生し、状態管理部220は、状態72に遷移する。また、初期状態70でバイトハイ命令が発行されると、状態遷移172が発生し、状態管理部220は、状態75に遷移する。
状態72に遷移した場合、状態管理部220は、状態72として記載した左端の枠内の##1のバイトを処理するアキュムレータAC1を選択する選択信号をマルチプレクサ230へ送信する。状態72では、既に4サイクル以前にバイトロー命令が発行されているので、バイトロー命令が発行されることはない。そして、状態72に遷移した次のサイクルでバイトハイ命令が発行されると状態遷移175が発生し、状態管理部220は、状態76へ遷移する。これに対して、状態72に遷移した次のサイクルでバイトハイ命令が発行されないと状態遷移179が発生し、状態管理部220は、状態71へ遷移する。
状態76に遷移した場合、状態管理部220は、状態76として記載した左端の枠内の##0のバイトを処理するアキュムレータAC0を選択する選択信号をマルチプレクサ230へ送信する。状態72では、既に4サイクル以前にバイトロー命令及びバイトハイ命令の両方が発行されているので、いずれの命令も発行されることはない。そこで、状態76に遷移した次のサイクルで状態遷移178が発生し、状態管理部220は、状態75へ遷移する。
状態71に遷移した場合、状態管理部220は、状態71として記載した枠内の##0のバイトを処理するアキュムレータAC0を選択する選択信号をマルチプレクサ230へ送信する。状態71では、既に4サイクル以前にバイトロー命令が発行されているので、バイトロー命令が発行されることはない。そして、状態71に遷移した次のサイクルでバイトハイ命令が発行されると状態遷移173が発生し、状態管理部220は、状態75へ遷移する。これに対して、状態71に遷移した次のサイクルでバイトハイ命令が発行されないと状態遷移181が発生し、状態管理部220は、初期状態70へ遷移する。状態遷移181が発生するということは、状態管理部220がアキュムレータAC0~AC3の全ての選択を完了したということを表す。
状態75に遷移した場合、状態管理部220は、状態75として記載した左端の枠内の##3のバイトを処理するアキュムレータAC3を選択する選択信号をマルチプレクサ230へ送信する。状態75では、既に4サイクル以前にバイトハイ命令が発行されているので、バイトハイ命令が発行されることはない。そして、状態75に遷移した次のサイクルでバイトロー命令が発行されると状態遷移176が発生し、状態管理部220は、状態73へ遷移する。これに対して、状態75に遷移した次のサイクルでバイトロー命令が発行されないと状態遷移180が発生し、状態管理部220は、状態74へ遷移する。
状態73に遷移した場合、状態管理部220は、状態73として記載した左端の枠内の##2のバイトを処理するアキュムレータAC2を選択する選択信号をマルチプレクサ230へ送信する。状態72では、既に4サイクル以前にバイトロー命令及びバイトハイ命令の両方が発行されているので、いずれの命令も発行されることはない。そこで、状態73に遷移した次のサイクルで状態遷移177が発生し、状態管理部220は、状態72へ遷移する。
状態74に遷移した場合、状態管理部220は、状態74として記載した枠内の##2のバイトを処理するアキュムレータAC2を選択する選択信号をマルチプレクサ230へ送信する。状態74では、既に4サイクル以前にバイトハイ命令が発行されているので、バイトハイ命令が発行されることはない。そして、状態74に遷移した次のサイクルでバイトロー命令が発行されると状態遷移174が発生し、状態管理部220は、状態72へ遷移する。これに対して、状態74に遷移した次のサイクルでバイトハイ命令が発行されないと状態遷移182が発生し、状態管理部220は、初期状態70へ遷移する。状態遷移182が発生するということは、状態管理部220がアキュムレータAC0~AC3の全ての選択を完了したということを表す。
また、状態71~76のいずれに遷移した場合でも、状態管理部220は、有効を表す値が「1」のイネーブル信号を演算器200へ出力する。
演算器200~207について、いずれも同じ動作を行うので、演算器200を例に説明する。演算器200は、アキュムレータAC0~AC3に格納された情報の入力を順次受ける。そして、演算器200は、以下に説明する方法で24ビットにおける有効桁位置情報を生成してフラグビット生成部240へ出力する。
以下に、演算器200による有効桁位置情報の生成を説明する。演算器200は、24ビットのデータの入力を受ける。そして、演算器200は、入力された24ビットのデータの隣り合うビットの値を比較し、同じ値であれば1を出力し、異なる値であれば0を出力することで、23ビットのデータを生成する。
次に、演算器200は、図12における疑似コード55に示すように各データに応じた0~29を表す値を取得して5ビットの有効桁位置情報として出力する。図12は、実施例2における有効桁位置情報の生成の一例を説明するための図である。具体的には、非符号となる最上位ビットがデータの0ビット目(すなわち最下位ビット)にある場合、演算器200は、22を5ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータの8ビット目にある場合、演算器200は、14を5ビットで表した有効桁位置情報を出力する。また、非符号となる最上位ビットがデータ52の22ビット目(すなわち符号ビットのすぐ下位が符号ビットと異なる値の場合)にある場合、演算器200は、0を5ビットで表した有効桁位置情報を出力する。
フラグビット生成部240~247は、演算器200~207から入力された有効桁位置情報をフラグビットが設定された24ビットのビットパターンに変換する。そして、フラグビット生成部240~247は、生成したビットパターンを用いて、桁レジスタAR0~AR23への加算処理を行いカウンタを更新して統計情報を生成する。
以上に説明したように、本実施例に係る演算コアは、8ビットデータと8ビットデータとを用いて積和演算を行う場合の統計情報を収集する。そして、本実施例に係る演算コアでは、演算器とアキュムレータをまとめたものの4つを1つの組として1つの演算器で有効桁を表す情報を収集する。これにより、アキュムレータと有効桁を表す情報を収集する演算器とを1対1で組み合わせた場合よりも、4分の1の信号線でアキュムレータと演算器とが接続される。さらに、演算器は有効桁位置を表す情報として5ビットの情報をフラグビット生成部へ送信する。
アキュムレータと有効桁を表す情報を収集する演算器とを1対1で組み合わせた場合、演算部と統計情報取得部とを結ぶ信号線は、例えば、演算部が256ビット長ベクトル同士の演算を行うとすると768本配置される。すなわち、本実施例に係る演算コアは、アキュムレータと有効桁を表す情報を収集する演算器とを1対1で組み合わせた場合に比較して演算部と統計情報取得部とを結ぶ信号線を低減することができる。このように、ビットデータと8ビットデータとを用いて積和演算を行う場合の統計情報を収集する場合であっても、回路規模を抑えて固定小数点演算の精度を向上させることができる。