説明

浮動小数点積和演算装置、浮動小数点積和演算方法、及び浮動小数点積和演算用プログラム

【課題】IEEE754R規格に準拠した浮動小数点積和演算を行う。
【解決手段】浮動小数点演算器において、浮動小数点乗算器と浮動小数点加算器を個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には、浮動小数点乗算器は、浮動小数点乗算の中間結果を浮動小数点加算器に受け渡し、浮動小数点加算器は、中間結果幅に対応した桁合わせシフト(左右シフト)と仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、浮動小数点積和演算装置に関し、特にスーパーコンピュータのベクトル計算機における浮動小数点積和演算装置に関する。
【背景技術】
【0002】
IEEE754浮動小数点数標準規格(IEEE 二進化浮動小数点数演算標準規格)について進行中の改訂版であるIEEE754R(IEEE Standard for Floating−Point Arithmetic)規格によれば、正式に積和演算が規定され、準拠する積和演算を最小のハードウェア(HW)構成で実施することが求められている。
【0003】
また、浮動小数点積和演算装置に関連する技術として、特開2006−338215号公報(特許文献1)にベクトル積和演算回路が開示されている。この関連技術では、ベクトル浮動小数点積和(A*B+C)構成で浮動小数点の加算、或いは乗算を行う場合、マスクによって「A*B+0」又は「A*1+C」の加算のみ乗算のみを可能としている。このため、浮動小数点の加算と乗算の同時動作できないという課題があった。
【0004】
特開2006−338215号公報(特許文献1)に開示されているベクトル積和演算回路では、ベクトル浮動小数点積和構成で、浮動小数点加算、或いは乗算を行う場合、マスクによって「A*B+0」又は「A*1+C」の加算のみ、或いは乗算のみを可能としているため、浮動小数点の加算と乗算の同時動作ができないという課題があった。
【0005】
また、図1を参照して、従来のベクトル浮動小数点演算器について説明する。
図1に示すように、従来のベクトル浮動小数点演算器は、浮動小数点乗算部100と、浮動小数点加算部200を含む。
【0006】
図1において、浮動小数点乗算部100と浮動小数点加算部200は、それぞれが独立して動作する。浮動小数点乗算部100と浮動小数点加算部200は、IEEE754に準拠した一般的な浮動小数点加算と浮動小数点乗算構成である。ここでは、浮動小数点乗算部100と浮動小数点加算部200は、それぞれが第1オペランドと第2オペランドを入力とし、1つの演算結果を算出する。
【0007】
浮動小数点乗算部100は、仮数部乗算部110と、指数部乗算部120を含む。
【0008】
仮数部乗算部110は、形式分解部111と、仮数部乗算部112と、仮数部加算部113と、丸め部114と、形式整列部115を含む。
【0009】
形式分解部111は、第1形式分解部1111と、第2形式分解部1112を含む。
【0010】
指数部乗算部120は、指数計算部121と、指数更新部122と、例外検出部123を含む。
【0011】
第1形式分解部1111は、第1オペランドを入力とし、第1オペランドを仮数部と指数部に分解して、指数部を指数計算部121に出力し、仮数部を仮数部乗算部112に出力する。
【0012】
第2形式分解部1112は、第2オペランドを入力とし、第2オペランドを仮数部と指数部に分解して、指数部を指数計算部121に出力し、仮数部を仮数部乗算部112に出力する。
【0013】
指数計算部121は、第1形式分解部1111の出力(指数部)と、第2形式分解部1112の出力(指数部)を入力とし、指数計算の結果を出力する。
【0014】
仮数部乗算部112は、第1形式分解部1111の出力(仮数部)と、第2形式分解部1112の出力(仮数部)を入力とし、ワレスツリーに基づいて、キャリ(Carry)「c」と加算値「s」を出力する。
【0015】
仮数部加算部113は、キャリ「c」と加算値「s」を入力とし、仮数部加算の結果(仮数部加算結果)を出力する。
【0016】
丸め部114は、仮数部加算部113の出力(仮数部)を入力とし、仮数部加算結果を丸めた結果を出力する。
【0017】
指数更新部122は、指数計算部121の出力(指数部)と仮数部加算部113の出力(仮数部加算結果)を入力とし、指数更新の結果(指数更新結果)を出力する。
【0018】
形式整列部115は、指数更新部122の出力(指数更新結果)と丸め部114の出力(仮数部加算結果)を入力とし、仮数部加算結果と指数更新結果を結合した演算結果を出力する。
【0019】
例外検出部123は、指数更新部122の出力(指数更新結果)を入力とし、例外を検出して出力する。
【0020】
浮動小数点加算部200は、仮数部加算部210と、指数部加算部220を含む。
【0021】
仮数部乗算部210は、形式分解部211と、仮数部選択部212と、桁合わせシフト部213と、LZA(Leading−Zero Anticipation:先頭ゼロ予想)部214と、仮数部絶対値加算部215と、正規化シフト部216と、丸め部217と、形式整列部218を含む。
【0022】
形式分解部211は、第1形式分解部2111と、第2形式分解部2112を含む。
【0023】
仮数部選択部212は、第1仮数部選択部2121と、第2仮数部選択部2122を含む。
【0024】
指数部乗算部220は、指数計算部221と、指数更新部222と、例外検出部223を含む。
【0025】
第1形式分解部2111は、第1オペランドを入力とし、第1オペランドを仮数部と指数部に分解して、指数部を指数計算部221に出力し、仮数部を仮数部選択部212に出力する。
【0026】
第2形式分解部2112は、第2オペランドを入力とし、第2オペランドを仮数部と指数部に分解して、指数部を指数計算部221に出力し、仮数部を仮数部選択部212に出力する。
【0027】
指数計算部221は、第1形式分解部2111の出力(指数部)と、第2形式分解部2112の出力(指数部)を入力とし、指数計算の結果を出力する。
【0028】
第1仮数部選択部2121及び第2仮数部選択部2122の各々は、第1形式分解部2111の出力(仮数部)と、第2形式分解部2112の出力(仮数部)を入力とし、いずれかを選択したものを出力する。
【0029】
桁合わせシフト部213は、第1仮数部選択部2121の出力(仮数部)を入力とし、指数計算部221の出力(指数部)に応じて、オペランドの指数の小さいほうの仮数部を指数差の分だけ右シフトして出力する。
【0030】
LZA部214は、第2仮数部選択部2122の出力(仮数部)と桁合わせシフト部213の出力(仮数部)を入力とし、浮動小数点加算器で使用されている「Leading One(絶対値表現したときの先頭ビット)」の予測方法に基づく結果(絶対値先頭ビット予測結果)を出力する。
【0031】
仮数部絶対値加算部215は、仮数部選択部212の出力(仮数部)と桁合わせシフト部213の出力(仮数部)を入力とし、仮数部絶対値加算を行った結果(仮数部絶対値加算結果)を出力する。
【0032】
正規化シフト部216は、仮数部絶対値加算部215の出力(仮数部絶対値加算結果)を入力とし、LZA部214の出力(絶対値先頭ビット予測結果)に応じて、仮数部絶対値加算結果の上位から「0」の続く値を求めた結果を出力する。
【0033】
丸め部217は、正規化シフト部216の出力(正規化された仮数部絶対値加算結果)を入力とし、丸めた結果を出力する。
【0034】
指数更新部222は、指数計算部221の出力(指数部)とLZA部214の出力(絶対値先頭ビット予測結果)を入力とし、指数更新の結果(指数更新結果)を出力する。
【0035】
形式整列部218は、指数更新部222の出力(指数更新結果)と丸め部217の出力(丸められた仮数部絶対値加算結果)を入力とし、仮数部絶対値加算結果と指数更新結果を結合した演算結果を出力する。
【0036】
例外検出部223は、指数更新部222の出力(指数更新結果)を入力とし、例外を検出して出力する。
【0037】
前述した従来のベクトル浮動小数点演算器では、浮動小数点積和演算は、機能としては成り立たず、例え浮動小数点乗算の結果を浮動小数点加算しても、IEE754R規定における「積和(x×y)+zに対して、無限の精度と範囲で一度に計算し、目的の形式に丸める演算を行い、乗算のみ、加算のみでアンダーフロー、オーバーフロー、精度落ち例外を検出しない」という規定に準拠できないという課題がある。
【0038】
関連する技術として、特開昭62−168228号公報(特許文献2)に浮動小数点積和演算器が開示されている。この関連技術では、浮動小数点積和演算器に入力された2つの単精度の浮動小数点データ同士の乗算結果の仮数部を、単精度に丸めることなく、倍精度のまま、倍精度桁合わせシフタに入力し、戻された倍精度レジスタの出力と桁合わせを行った後、桁合わせされた倍精度仮数部同士の加算を倍精度加算器によって行う。
【0039】
また、特開昭63−244268号公報(特許文献3)に浮動小数点積和演算装置が開示されている。この関連技術では、浮動小数点積和演算装置において、指数加算回路は、第1の被乗算データの指数値と第2の被乗算データの指数値を加算して積指数値を出力する。仮数乗算回路は、第1の被乗算データの仮数値と第2の被乗算データの仮数値を加算して積仮数値を出力する。第1の指数補正値算出回路は、積仮数値の最上位の有意ビットの位置を検出して積指数補正値を出力する。和指数値算出回路は、積指数値と積指数補正値と被加算データの指数値と被加算データの指数補正値を入力として、第1のシフト量と第2のシフト量と和指数値を出力する。第1のシフト回路は、第1のシフト量に応じて積仮数値をシフトする。第2のシフト回路は、第2のシフト量に応じて被加算データの仮数値をシフトする。仮数加算回路は、第1のシフト回路の出力と第2のシフト回路の出力を加算ずる。第2の指数補正値算出回路は、仮数加算回路の出力の最上位の有意ビットの位置を検出して和指数補正値を出力する。
【先行技術文献】
【特許文献】
【0040】
【特許文献1】特開2006−338215号公報
【特許文献2】特開昭62−168228号公報
【特許文献3】特開昭63−244268号公報
【発明の概要】
【発明が解決しようとする課題】
【0041】
本発明の目的は、浮動小数点乗算器と、浮動小数点加算器とを個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には、浮動小数点乗算器による浮動小数点乗算の中間結果を浮動小数点加算器に受け渡し、浮動小数点加算器により、中間結果幅に対応した桁合わせシフト(左右シフト)と、仮数部絶対値加算と、正規化シフトを行うことで、浮動小数点積和演算を行う演算器を提供することにある。
【課題を解決するための手段】
【0042】
本発明では、浮動小数点積和演算器が、2008年のIEEE754R(IEEE Standard for Floating−Point Arithmetic)規格に準拠した浮動小数点乗算機能と浮動小数点加算機能を個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には、浮動小数点乗算の中間結果の仮数部を浮動小数点加算に受け渡し、浮動小数点加算器は中間結果幅に対応した浮動小数点加算を行うことにより、IEEE754R規格に準拠した浮動小数点積和演算を行うことを特徴としている。
【0043】
本発明の浮動小数点積和演算装置は、第1オペランド及び第2オペランドを入力とし、浮動小数点乗算の中間結果を出力する浮動小数点乗算手段と、通常は浮動小数点乗算手段と独立して動作し、第1オペランド及び第2オペランドを入力とし、浮動小数点積和命令時には、中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う浮動小数点加算手段とを含む。
【0044】
本発明の浮動小数点積和演算方法では、浮動小数点乗算過程において、第1オペランド及び第2オペランドを入力とし、浮動小数点乗算の中間結果を出力する。また、通常は浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、第1オペランド及び第2オペランドを入力とし、浮動小数点積和命令時には、中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う。
【0045】
本発明の浮動小数点積和演算用プログラムは、浮動小数点乗算過程において、第1オペランド及び第2オペランドを入力とし、浮動小数点乗算の中間結果を出力するステップと、通常は浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、第1オペランド及び第2オペランドを入力とし、浮動小数点積和命令時には、中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行うステップとをコンピュータに実行させるためのプログラムである。
【発明の効果】
【0046】
IEEE754R準拠の浮動小数点積和演算において、浮動小数点積和演算、或いは浮動小数点加算と乗算の同時動作をすることができる。
【図面の簡単な説明】
【0047】
【図1】従来のベクトル浮動小数点演算器の構成例を示す概念図である。
【図2】本発明の浮動小数点積和演算装置の構成例を示す概念図である。
【図3】IEEE倍精度データ形式の例を説明するための図である。
【発明を実施するための形態】
【0048】
以下に、本発明の実施形態について添付図面を参照して説明する。
図2に示すように、本発明の浮動小数点積和演算装置は、浮動小数点乗算部100と、浮動小数点加算部300を含む。
【0049】
浮動小数点乗算部100は、仮数部乗算部110と、指数部乗算部120を含む。
【0050】
仮数部乗算部110は、形式分解部111と、仮数部乗算部112と、仮数部加算部113と、丸め部114と、形式整列部115を含む。
【0051】
形式分解部111は、第1形式分解部1111と、第2形式分解部1112を含む。
【0052】
指数部乗算部120は、指数計算部121と、指数更新部122と、例外検出部123を含む。
【0053】
第1形式分解部1111は、第1オペランドを入力とし、第1オペランドを仮数部と指数部に分解して、指数部を指数計算部121に出力し、仮数部を仮数部乗算部112に出力する。
【0054】
第2形式分解部1112は、第2オペランドを入力とし、第2オペランドを仮数部と指数部に分解して、指数部を指数計算部121に出力し、仮数部を仮数部乗算部112に出力する。
【0055】
指数計算部121は、第1形式分解部1111の出力(指数部)と、第2形式分解部1112の出力(指数部)を入力とし、指数計算の結果を出力する。
【0056】
仮数部乗算部112は、第1形式分解部1111の出力(仮数部)と、第2形式分解部1112の出力(仮数部)を入力とし、ワレスツリーに基づいて、キャリ(Carry)「c」と加算値「s」を出力する。
【0057】
仮数部加算部113は、キャリ「c」と加算値「s」を入力とし、仮数部加算の結果(仮数部加算結果)を出力する。
【0058】
丸め部114は、仮数部加算部113の出力(仮数部加算結果)を入力とし、仮数部加算結果を丸めた結果を出力する。
【0059】
指数更新部122は、指数計算部121の出力(指数部)と仮数部加算部113の出力(仮数部)を入力とし、指数更新の結果(指数更新結果)を出力する。
【0060】
形式整列部115は、指数更新部122の出力(指数更新結果)と丸め部114の出力(仮数部加算結果)を入力とし、仮数部加算結果と指数更新結果を結合した演算結果を出力する。
【0061】
例外検出部123は、指数更新部122の出力(指数更新結果)を入力とし、例外を検出して出力する。
【0062】
ここでは、浮動小数点乗算部100は、仮数部加算部113の出力と、指数計算部121の出力を、浮動小数点加算部300に送出する。
【0063】
仮数部加算部113の出力は、「中間積仮数」を含む。すなわち、「中間積仮数」は、仮数部乗算部112による仮数部乗算の直後の仮数部加算の結果(仮数部加算結果)である。
【0064】
指数計算部121の出力は、「乗算指数」と「特殊数情報」を含む。「乗算指数」とは、指数計算部121による指数計算結果である。「特殊数情報」とは、例えばIEEE倍精度規格の場合で「無限大」、「0」、「Not」等の情報を示す。ここでは、指数計算部121は、入力オペランド指数から「特殊数情報」を検出する。入力オペランド指数は、入力された第1オペランド及び第2オペランドの指数部である。
【0065】
浮動小数点加算部300は、浮動小数点乗算部100から送出された「中間積仮数」、「乗算指数」、及び「特殊数情報」を受け取る。
【0066】
浮動小数点加算部300は、仮数部加算部310と、指数部加算部320を含む。
【0067】
仮数部加算部310は、「加算仮数部」と「中間積仮数」とを絶対値加算し、正規化シフト、及び丸めを順に行うことにより、積和演算を行う。「加算仮数部」は、第1オペランドの仮数部を「乗算指数」と「加算指数」の差だけ左右シフトで予め桁合わせをしたものである。「加算指数」とは、「乗算指数」と「第1オペランドの指数部」のうち大きい方である。
【0068】
指数部加算部320は、浮動小数点積和命令時において、「乗算指数」と「第1オペランドの指数部」のいずれか大きい方を選び、正規化シフトによる正規化後の指数更新値を反映して指数結果を算出する。
【0069】
仮数部乗算部310は、形式分解部311と、指数部選択部312と、左右シフト部313と、仮数部選択部314と、LZA(Leading−Zero Anticipation)部315と、仮数部絶対値加算部316と、正規化シフト部317と、丸め部318と、形式整列部319を含む。
【0070】
形式分解部311は、第1形式分解部3111と、第2形式分解部3112を含む。
【0071】
指数部乗算部320は、指数計算部321と、指数更新部322と、例外検出部323を含む。
【0072】
第1形式分解部3111は、第1オペランドを入力とし、第1オペランドを仮数部と指数部に分解して、指数部を指数計算部321に出力し、仮数部を左右シフト部313に出力する。
【0073】
第2形式分解部3112は、第2オペランドを入力とし、第2オペランドを仮数部と指数部に分解して、指数部を指数部選択部312に出力し、仮数部を仮数部選択部314に出力する。
【0074】
指数部選択部312は、浮動小数点乗算部100の指数計算部121の出力(指数部)と、第2形式分解部3112の出力(指数部)を入力として、浮動小数積和命令に応じて、いずれかを選択したものを出力する。
【0075】
指数計算部321は、第1形式分解部3111の出力(指数部)と、指数部選択部312の出力(指数部)を入力とし、指数計算の結果を出力する。浮動小数点積和命令時には、指数計算部321は、「乗算指数」と「第1オペランドの指数部」の大きい方を「加算指数」として選び、「乗算指数」と「加算指数」の指数差分を桁合わせシフト量として算出する指数計算を行う。
【0076】
左右シフト部313は、第1形式分解部3111の出力(仮数部)を入力とし、「乗算指数」と「加算指数」の差だけ左右シフトで予め桁合わせをして出力する。ここでは、「加算指数」とは、「乗算指数」と「第1オペランドの指数部」のうち大きい方である。左右シフト部313は、第1オペランドの仮数部を入力とし、第1オペランドの仮数部に対して、「乗算指数」と「加算指数」の差だけ左右シフトで桁合わせをした「加算仮数部」を出力する。
【0077】
仮数部選択部314は、浮動小数点乗算部100の仮数部加算部113の出力(仮数部)と、第2形式分解部3112の出力(仮数部)を入力とし、浮動小数積和命令に応じて、いずれかを選択したものを出力する。ここでは、仮数部加算部310は、浮動小数積和命令時には、「中間積仮数」を演算対象とし、浮動小数点加算命令時には、「第2オペランドの仮数部」を演算対象とする。すなわち、仮数部選択部314は、浮動小数積和命令時には、浮動小数点乗算部100から送出された「中間積仮数」を出力し(通過させ)、浮動小数点加算命令時には、第2形式分解部3112から出力された「第2オペランドの仮数部」を出力する(通過させる)。
【0078】
LZA部315は、左右シフト部313の出力(仮数部)と、仮数部選択部314の出力(仮数部)を入力とし、浮動小数点加算器で使用されている「Leading One(絶対値表現したときの先頭ビット)」の予測方法に基づく結果(絶対値先頭ビット予測結果)を出力する。
【0079】
仮数部絶対値加算部316は、左右シフト部313の出力(仮数部)と、仮数部選択部314の出力(仮数部)を入力とし、仮数部絶対値加算を行った結果(仮数部絶対値加算結果)を出力する。ここでは、仮数部絶対値加算部316は、「加算仮数部」と「中間積仮数」とを絶対値加算し、仮数部絶対値加算結果を出力する。
【0080】
正規化シフト部317は、仮数部絶対値加算部316の出力(仮数部絶対値加算結果)を入力とし、LZA部315の出力(絶対値先頭ビット予測結果)に応じて、仮数部絶対値加算結果の上位から「0」の続く値を求めた結果を出力する。ここでは、正規化シフト部317は、仮数部絶対値加算結果を正規化する。
【0081】
丸め部318は、正規化シフト部317の出力(正規化された仮数部絶対値加算結果)を入力とし、仮数部絶対値加算結果を丸めた結果を出力する。ここでは、丸め部318は、正規化された仮数部絶対値加算結果を丸める。
【0082】
指数更新部322は、指数計算部321の出力(指数部)とLZA部315の出力(絶対値先頭ビット予測結果)を入力とし、指数更新の結果(指数更新結果)を出力する。
【0083】
形式整列部319は、指数更新部322の出力(指数更新結果)と丸め部318の出力(丸められた仮数部絶対値加算結果)を入力とし、仮数部絶対値加算結果と指数更新結果を結合した演算結果を出力する。
【0084】
例外検出部323は、指数更新部322の出力(指数更新結果)を入力とし、例外を検出して出力する。
【0085】
このように、本発明の浮動小数点積和演算装置は、浮動小数点乗算部200と浮動小数点加算部300を個別に有するが、浮動小数点加算部300は、浮動小数点乗算部200による浮動小数点乗算の中間結果に対応する仮数部絶対値加算と、正規化シフトを行うので、IEEE754R規格に準拠する浮動小数点積和演算が可能となる。
【0086】
また、本発明の浮動小数点積和演算装置では、IEEE754R準拠の浮動小数点積和演算、又は、浮動小数点乗算演算と浮動小数点加算演算の同時動作が可能である。
【0087】
<詳細>
次に、本発明の浮動小数点積和演算装置の詳細について説明する。
【0088】
本発明の浮動小数点積和演算装置では、浮動小数点乗算部100と浮動小数点加算部300は、浮動小数点加算命令と浮動小数点乗算命令時には、それぞれが独立して、第1オペランドと第2オペランドを入力とした演算を行い、演算結果をそれぞれに算出する。
【0089】
例えば、IEEE754R規格の倍精度データ形式は、図3に示す通りに、符号「S」と、指数部「E」と、仮数部「F」に分けられている。
【0090】
ここでは、符号「S」は、先頭の「0」ビット目の領域である。指数部「E」は、「1」ビット目から「11」ビット目までの領域である。仮数部「F」は、「12」ビット目から「63」ビット目までの領域である。
【0091】
このとき、「E=2047」かつ「F≠0」ならば、「NaN」とする。
【0092】
また、「E=2047」かつ「F=0」ならば、「(−1)S×∞」とする。
【0093】
また、「0<E<2047」ならば、「(−1)S×2E−1023×(1.F)」とする。
【0094】
また、「E=0」ならば、「(−1)S×0 :符号付き0」とする。
【0095】
但し、実際には、これらの例に限定されない。
【0096】
浮動小数点乗算部100は、浮動小数点積和命令の場合、第1オペランドと第2オペランドを入力とした浮動小数点乗算演算を行うが、乗算算出過程で、仮数部乗算後の仮数部加算の結果(仮数部加算部113の出力)の「中間積仮数」を浮動小数点加算部300に供給する。「中間積仮数」は、倍精度の仮数幅の2倍幅となる。
【0097】
また、浮動小数点乗算部100は、指数部乗算部120の指数計算結果(指数計算部121の出力)の「乗算指数」と、入力オペランド指数から「特殊数情報」を検出して、浮動小数点加算部300に供給する。「特殊数情報」とは、例えばIEEE倍精度規格の場合で「無限大」、「0」、「Not」等の情報を示す。
【0098】
浮動小数点加算部300において、指数部加算部320は、指数部選択部312によって浮動小数点乗算部100からの「乗算指数」及び「特殊数情報」を受け取る。また、仮数部加算部310は、仮数部選択部314によって浮動小数点乗算部100からの「中間積仮数」を受け取る。これにより、浮動小数点加算部300は、「中間積仮数」と「第1オペランド」の2値を、浮動小数点加算対象として演算する。
【0099】
指数部加算部320は、「乗算指数」と「第1オペランドの指数部」の大きい方を「加算指数」として選び、「乗算指数」と「加算指数」の指数差分を桁合わせシフト量として算出する指数計算を行い、正規化シフト部317による正規化時の指数更新値を反映して積和指数結果を算出する。
【0100】
仮数部加算部310は、指数計算の「乗算指数」と「加算指数」の指数差分(桁合わせシフト量)に従い、第1オペランドの仮数部側を左右シフト部313で桁合わせする。仮数部絶対値加算部316は、仮数部選択部314の出力である仮数部の2倍幅の「中間積仮数」と、左右シフト部313で桁合わせした第1オペランドの仮数部を絶対値加算し、仮数部加算結果を求める。
【0101】
以降、LZA部315と正規化シフト部317は、仮数部加算結果を上位から最初の数値が「1」の位置が先頭ビットとなるように正規化する。
【0102】
また、丸め部318は、上位から仮数部幅に対し丸めモードに従って丸め、積和仮数部結果が得られることになる。
【0103】
形式整列部319は、積和指数結果と積和仮数部結果を整列させて、IEEE倍精度の積和演算結果が得られる。
【0104】
以上説明したように、本発明においては、浮動小数点加算にて、仮数部の2倍幅に対して絶対値加算及び正規化を行うハードウェア(HW)を追加するだけで、IEEE754R準拠の浮動小数点積和演算を求めることができる。
【0105】
また、浮動小数点乗算と浮動小数点加算を独立して備えるので、浮動小数点積和演算、或いは、浮動小数点加算と乗算が同時動作することができる。
【0106】
更に、ベクトル演算器は浮動小数点の加算と乗算から構成されているが、従来構成の浮動小数点加算と乗算の独立動作により、従来プログラム資産が活用できる。
【0107】
このように、本発明の浮動小数点積和演算装置は、浮動小数点乗算機能と浮動小数点加算機能を個別に有しそれぞれが独立動作するか、又は浮動小数点積和を行う。
【0108】
また、本発明の浮動小数点積和演算装置では、浮動小数点加算機能に加えて、中間結果幅に対応した桁合わせシフト(左右シフト)と仮数部絶対値加算と正規化シフトを設け、浮動小数点積和演算も行う。
【0109】
以上のように、本発明は、浮動小数点乗算器と、浮動小数点加算器を個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には浮動小数点乗算器の中間結果を浮動小数点加算器に受け渡し、浮動小数点加算器は中間結果幅に対応した桁合わせシフト(左右シフト)と仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う。これにより、浮動小数点積和演算器において、IEEE754R規格に準拠した浮動小数点積和演算を行うことを可能にした。
【0110】
本発明の浮動小数点積和演算装置では、浮動小数点積和動作時には、浮動小数点乗算結果の仮数部(中間積仮数)側は桁合わせシフトせず、浮動小数点加算対象側のみを「中間積仮数」の幅に対応して桁あわせシフトする。
【0111】
これにより、浮動小数点積和動作時(A*B+C)に、乗算対象(A*B)は、シフト回路としては、正規化シフトの一回を通過するだけで積和結果を取得でき、一回の浮動小数点積和動作を高速化できる。
【0112】
本発明は、スーパーコンピュータのベクトル計算機におけるベクトル演算装置に適用できる。
【0113】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものでは、なく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【0114】
100… 浮動小数点乗算部
200,300… 浮動小数点加算部
110… 仮数部乗算部
210,310… 仮数部加算部
111,211,311… 形式分解部
1111,2111,3111… 第1形式分解部
1112,2112,3112… 第2形式分解部
112… 仮数部乗算部
212… 仮数部選択部
2121… 第1仮数部選択部
2122… 第2仮数部選択部
312… 指数部選択部
113… 仮数部加算部
213… 桁合わせシフト部
313… 左右シフト部
314… 仮数部選択部
214,315… LZA(Leading−Zero Anticipation:先頭ゼロ予想)部
215,316… 仮数部絶対値加算部
216,317… 正規化シフト部
114,217,318… 丸め部
115,218,319… 形式整列部
120,220,320… 指数部乗算部
121,221,321… 指数計算部
122,222,322… 指数更新部
123,223,323… 例外検出部

【特許請求の範囲】
【請求項1】
第1オペランド及び第2オペランドを入力とし、浮動小数点乗算の中間結果を出力する浮動小数点乗算手段と、
通常は前記浮動小数点乗算手段と独立して動作し、前記第1オペランド及び前記第2オペランドを入力とし、浮動小数点積和命令時には、前記中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う浮動小数点加算手段と
を含む
浮動小数点積和演算装置。
【請求項2】
請求項1に記載の浮動小数点積和演算装置であって、
前記浮動小数点乗算手段は、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解して、前記分解された各々の仮数部の乗算直後の仮数部加算の結果である中間積仮数を前記浮動小数点加算手段に送出する仮数部乗算手段と、
前記分解された各々の指数部に基づく指数計算からの乗算指数と、入力オペランド指数から検出する特殊数情報とを前記浮動小数点加算手段に送出する指数部乗算手段と
を含む
浮動小数点積和演算装置。
【請求項3】
請求項2に記載の浮動小数点積和演算装置であって、
前記仮数部乗算手段は、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解する形式分解手段と、
前記分解された各々の仮数部の乗算を行い、乗算結果を出力する仮数部乗算手段と、
前記乗算結果に基づいて仮数部加算を行い、前記中間積仮数を前記浮動小数点加算手段に送出する仮数部加算手段と、
前記中間積仮数に対して丸めを行う丸め手段と、
前記丸めが行われた中間積仮数と、前記指数部乗算手段からの指数更新結果とを結合した演算結果を出力する形式整列手段と
を含み、
前記指数部乗算手段は、
前記分解された各々の指数部に基づく指数計算を行い、前記乗算指数と前記特殊数情報とを前記浮動小数点加算手段に送出する指数計算手段と、
前記乗算指数、前記特殊数情報、及び前記中間積仮数に基づいて、前記指数更新結果を出力する指数更新手段と、
前記指数更新結果から例外を検出する例外検出手段と
を含む
浮動小数点積和演算装置。
【請求項4】
請求項2又は3に記載の浮動小数点積和演算装置であって、
前記浮動小数点加算手段は、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部に分解し、前記浮動小数点乗算手段から前記中間積仮数、前記乗算指数、及び前記特殊数情報を受け取り、前記浮動小数積和命令時には、前記中間積仮数を演算対象とし、前記浮動小数点加算命令時には、前記第2オペランドを演算対象とし、桁合わせシフト量だけ前記第1オペランドの仮数部を左右シフトで桁合わせをした加算仮数部と前記中間積仮数とを絶対値加算し、正規化シフト、丸めを順に行い、積和演算を行う仮数部加算手段と、
前記浮動小数点積和命令時において、前記乗算指数と前記第1オペランドの指数部のうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行い、前記仮数部加算手段での正規化シフトによる正規化後の指数更新値を反映して指数結果を算出する指数部加算手段と
を含む
浮動小数点積和演算装置。
【請求項5】
請求項4に記載の浮動小数点積和演算装置であって、
前記仮数部加算手段は、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解する形式分解手段と、
前記第2オペランドの指数部、前記乗算指数、及び前記特殊数情報を入力とし、前記浮動小数積和命令時には、前記乗算指数と前記特殊数情報とを出力し、前記浮動小数積和命令時以外には、前記第2オペランドの指数部を出力する指数部選択手段と、
前記桁合わせシフト量だけ前記第1オペランドの仮数部を左右シフトで桁合わせを行い、加算仮数部を出力する左右シフト手段と、
前記第2オペランドの仮数部と前記中間積仮数とを入力とし、前記浮動小数積和命令時には、前記中間積仮数を出力し、前記浮動小数積和命令時以外には、前記第2オペランドの仮数部を出力する仮数部選択手段と、
前記加算仮数部と前記中間積仮数とを参照し、LZA(Leading−Zero Anticipation:先頭ゼロ予想)により「Leading One(絶対値表現したときの先頭ビット)」に基づく予測結果を出力するLZA手段と、
前記加算仮数部と前記中間積仮数とを絶対値加算し、仮数部絶対値加算結果を出力する仮数部絶対値加算手段と、
前記予測結果に応じて、前記仮数部絶対値加算結果の上位から「0」の続く値を求めた正規化後仮数部絶対値加算結果を出力する正規化シフト手段と、
前記正規化後仮数部絶対値加算結果に対して丸めを行う丸め手段と、
前記丸めが行われた正規化後仮数部絶対値加算結果と、前記指数部加算手段からの指数更新結果とを結合した演算結果を出力する形式整列手段と
を含み、
前記指数部加算手段は、
前記第1オペランドの指数部、及び前記指数部選択手段の出力を入力とし、前記第1オペランドの指数部と前記指数部選択手段の出力とのうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行う指数計算手段と、
前記桁合わせシフト量と前記予測結果とを入力とし、前記指数更新結果を出力する指数更新手段と、
前記指数更新結果から例外を検出する例外検出手段と
を含む
浮動小数点積和演算装置。
【請求項6】
浮動小数点乗算過程において、第1オペランド及び第2オペランドを入力とし、浮動小数点乗算の中間結果を出力することと、
通常は前記浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、前記第1オペランド及び前記第2オペランドを入力とし、浮動小数点積和命令時には、前記中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行うことと
を含む
浮動小数点積和演算方法。
【請求項7】
請求項6に記載の浮動小数点積和演算方法であって、
前記浮動小数点乗算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解して、前記分解された各々の仮数部の乗算直後の仮数部加算の結果である中間積仮数を前記浮動小数点加算過程において使用することと、
前記分解された各々の指数部に基づく指数計算からの乗算指数と、入力オペランド指数から検出する特殊数情報とを前記浮動小数点加算過程において使用することと
を更に含む
浮動小数点積和演算方法。
【請求項8】
請求項7に記載の浮動小数点積和演算方法であって、
前記浮動小数点乗算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解することと、
前記分解された各々の仮数部の乗算を行い、乗算結果を出力することと、
前記乗算結果に基づいて仮数部加算を行い、前記中間積仮数を前記浮動小数点加算過程において使用することと、
前記中間積仮数に対して丸めを行うことと、
前記丸めが行われた中間積仮数と、指数更新結果とを結合した演算結果を出力することと、
前記分解された各々の指数部に基づく指数計算を行い、前記乗算指数と前記特殊数情報とを前記浮動小数点加算過程において使用することと、
前記乗算指数、前記特殊数情報、及び前記中間積仮数に基づいて、前記指数更新結果を出力することと、
前記指数更新結果から例外を検出することと
を更に含む
浮動小数点積和演算方法。
【請求項9】
請求項7又は8に記載の浮動小数点積和演算方法であって、
前記浮動小数点加算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部に分解し、前記中間積仮数、前記乗算指数、及び前記特殊数情報を受け取り、前記浮動小数積和命令時には、前記中間積仮数を演算対象とし、前記浮動小数点加算命令時には、前記第2オペランドを演算対象とし、桁合わせシフト量だけ前記第1オペランドの仮数部を左右シフトで桁合わせをした加算仮数部と前記中間積仮数とを絶対値加算し、正規化シフト、丸めを順に行い、積和演算を行うことと、
前記浮動小数点積和命令時において、前記乗算指数と前記第1オペランドの指数部のうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行い、正規化シフトによる正規化後の指数更新値を反映して指数結果を算出することと
を更に含む
浮動小数点積和演算方法。
【請求項10】
請求項9に記載の浮動小数点積和演算方法であって、
前記浮動小数点加算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解することと、
前記第2オペランドの指数部、前記乗算指数、及び前記特殊数情報を入力とし、前記浮動小数積和命令時には、前記乗算指数と前記特殊数情報とを出力し、前記浮動小数積和命令時以外には、前記第2オペランドの指数部を出力することと、
前記桁合わせシフト量だけ前記第1オペランドの仮数部を左右シフトで桁合わせを行い、加算仮数部を出力することと、
前記第2オペランドの仮数部と前記中間積仮数とに基づいて、前記浮動小数積和命令時には、前記中間積仮数を出力し、前記浮動小数積和命令時以外には、前記第2オペランドの仮数部を出力することと、
前記加算仮数部と前記中間積仮数とを参照し、LZA(Leading−Zero Anticipation:先頭ゼロ予想)により「Leading One(絶対値表現したときの先頭ビット)」に基づく予測結果を出力することと、
前記加算仮数部と前記中間積仮数とを絶対値加算し、仮数部絶対値加算結果を出力することと、
前記予測結果に応じて、前記仮数部絶対値加算結果の上位から「0」の続く値を求めた正規化後仮数部絶対値加算結果を出力することと、
前記正規化後仮数部絶対値加算結果に対して丸めを行うことと、
前記丸めが行われた正規化後仮数部絶対値加算結果と、指数更新結果とを結合した演算結果を出力することと、
前記第1オペランドの指数部と前記乗算指数とのうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行うことと、
前記桁合わせシフト量と前記予測結果とに基づいて、前記指数更新結果を出力することと、
前記指数更新結果から例外を検出することと
を更に含む
浮動小数点積和演算方法。
【請求項11】
浮動小数点乗算過程において、第1オペランド及び第2オペランドを入力とし、浮動小数点乗算の中間結果を出力するステップと、
通常は前記浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、前記第1オペランド及び前記第2オペランドを入力とし、浮動小数点積和命令時には、前記中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行うステップと
をコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項12】
請求項11に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点乗算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解して、前記分解された各々の仮数部の乗算直後の仮数部加算の結果である中間積仮数を前記浮動小数点加算過程において使用するステップと、
前記分解された各々の指数部に基づく指数計算からの乗算指数と、入力オペランド指数から検出する特殊数情報とを前記浮動小数点加算過程において使用するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項13】
請求項12に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点乗算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解するステップと、
前記分解された各々の仮数部の乗算を行い、乗算結果を出力するステップと、
前記乗算結果に基づいて仮数部加算を行い、前記中間積仮数を前記浮動小数点加算過程において使用するステップと、
前記中間積仮数に対して丸めを行うステップと、
前記丸めが行われた中間積仮数と、指数更新結果とを結合した演算結果を出力するステップと、
前記分解された各々の指数部に基づく指数計算を行い、前記乗算指数と前記特殊数情報とを前記浮動小数点加算過程において使用するステップと、
前記乗算指数、前記特殊数情報、及び前記中間積仮数に基づいて、前記指数更新結果を出力するステップと、
前記指数更新結果から例外を検出するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項14】
請求項12又は13に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点加算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部に分解し、前記中間積仮数、前記乗算指数、及び前記特殊数情報を受け取り、前記浮動小数積和命令時には、前記中間積仮数を演算対象とし、前記浮動小数点加算命令時には、前記第2オペランドを演算対象とし、桁合わせシフト量だけ前記第1オペランドの仮数部を左右シフトで桁合わせをした加算仮数部と前記中間積仮数とを絶対値加算し、正規化シフト、丸めを順に行い、積和演算を行うステップと、
前記浮動小数点積和命令時において、前記乗算指数と前記第1オペランドの指数部のうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行い、正規化シフトによる正規化後の指数更新値を反映して指数結果を算出するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項15】
請求項14に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点加算過程において、
前記第1オペランド及び前記第2オペランドの各々を指数部と仮数部とに分解するステップと、
前記第2オペランドの指数部、前記乗算指数、及び前記特殊数情報を入力とし、前記浮動小数積和命令時には、前記乗算指数と前記特殊数情報とを出力し、前記浮動小数積和命令時以外には、前記第2オペランドの指数部を出力するステップと、
前記桁合わせシフト量だけ前記第1オペランドの仮数部を左右シフトで桁合わせを行い、加算仮数部を出力するステップと、
前記第2オペランドの仮数部と前記中間積仮数とに基づいて、前記浮動小数積和命令時には、前記中間積仮数を出力し、前記浮動小数積和命令時以外には、前記第2オペランドの仮数部を出力するステップと、
前記加算仮数部と前記中間積仮数とを参照し、LZA(Leading−Zero Anticipation:先頭ゼロ予想)により「Leading One(絶対値表現したときの先頭ビット)」に基づく予測結果を出力するステップと、
前記加算仮数部と前記中間積仮数とを絶対値加算し、仮数部絶対値加算結果を出力するステップと、
前記予測結果に応じて、前記仮数部絶対値加算結果の上位から「0」の続く値を求めた正規化後仮数部絶対値加算結果を出力するステップと、
前記正規化後仮数部絶対値加算結果に対して丸めを行うステップと、
前記丸めが行われた正規化後仮数部絶対値加算結果と、指数更新結果とを結合した演算結果を出力するステップと、
前記第1オペランドの指数部と前記乗算指数とのうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行うステップと、
前記桁合わせシフト量と前記予測結果とに基づいて、前記指数更新結果を出力するステップと、
前記指数更新結果から例外を検出するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate