(57)【要約】【課題】ＩＥＥＥ７５４Ｒ規格に準拠した浮動小数点積和演算を行う。【解決手段】浮動小数点演算器において、浮動小数点乗算器と浮動小数点加算器を個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には、浮動小数点乗算器は、浮動小数点乗算の中間結果を浮動小数点加算器に受け渡し、浮動小数点加算器は、中間結果幅に対応した桁合わせシフト（左右シフト）と仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う。【選択図】図２
2010218197.tif 000002
【特許請求の範囲】
【請求項１】
第１オペランド及び第２オペランドを入力とし、浮動小数点乗算の中間結果を出力する浮動小数点乗算手段と、
通常は前記浮動小数点乗算手段と独立して動作し、前記第１オペランド及び前記第２オペランドを入力とし、浮動小数点積和命令時には、前記中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う浮動小数点加算手段と
を含む
浮動小数点積和演算装置。
【請求項２】
請求項１に記載の浮動小数点積和演算装置であって、
前記浮動小数点乗算手段は、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解して、前記分解された各々の仮数部の乗算直後の仮数部加算の結果である中間積仮数を前記浮動小数点加算手段に送出する仮数部乗算手段と、
前記分解された各々の指数部に基づく指数計算からの乗算指数と、入力オペランド指数から検出する特殊数情報とを前記浮動小数点加算手段に送出する指数部乗算手段と
を含む
浮動小数点積和演算装置。
【請求項３】
請求項２に記載の浮動小数点積和演算装置であって、
前記仮数部乗算手段は、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解する形式分解手段と、
前記分解された各々の仮数部の乗算を行い、乗算結果を出力する仮数部乗算手段と、
前記乗算結果に基づいて仮数部加算を行い、前記中間積仮数を前記浮動小数点加算手段に送出する仮数部加算手段と、
前記中間積仮数に対して丸めを行う丸め手段と、
前記丸めが行われた中間積仮数と、前記指数部乗算手段からの指数更新結果とを結合した演算結果を出力する形式整列手段と
を含み、
前記指数部乗算手段は、
前記分解された各々の指数部に基づく指数計算を行い、前記乗算指数と前記特殊数情報とを前記浮動小数点加算手段に送出する指数計算手段と、
前記乗算指数、前記特殊数情報、及び前記中間積仮数に基づいて、前記指数更新結果を出力する指数更新手段と、
前記指数更新結果から例外を検出する例外検出手段と
を含む
浮動小数点積和演算装置。
【請求項４】
請求項２又は３に記載の浮動小数点積和演算装置であって、
前記浮動小数点加算手段は、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部に分解し、前記浮動小数点乗算手段から前記中間積仮数、前記乗算指数、及び前記特殊数情報を受け取り、前記浮動小数積和命令時には、前記中間積仮数を演算対象とし、前記浮動小数点加算命令時には、前記第２オペランドを演算対象とし、桁合わせシフト量だけ前記第１オペランドの仮数部を左右シフトで桁合わせをした加算仮数部と前記中間積仮数とを絶対値加算し、正規化シフト、丸めを順に行い、積和演算を行う仮数部加算手段と、
前記浮動小数点積和命令時において、前記乗算指数と前記第１オペランドの指数部のうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行い、前記仮数部加算手段での正規化シフトによる正規化後の指数更新値を反映して指数結果を算出する指数部加算手段と
を含む
浮動小数点積和演算装置。
【請求項５】
請求項４に記載の浮動小数点積和演算装置であって、
前記仮数部加算手段は、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解する形式分解手段と、
前記第２オペランドの指数部、前記乗算指数、及び前記特殊数情報を入力とし、前記浮動小数積和命令時には、前記乗算指数と前記特殊数情報とを出力し、前記浮動小数積和命令時以外には、前記第２オペランドの指数部を出力する指数部選択手段と、
前記桁合わせシフト量だけ前記第１オペランドの仮数部を左右シフトで桁合わせを行い、加算仮数部を出力する左右シフト手段と、
前記第２オペランドの仮数部と前記中間積仮数とを入力とし、前記浮動小数積和命令時には、前記中間積仮数を出力し、前記浮動小数積和命令時以外には、前記第２オペランドの仮数部を出力する仮数部選択手段と、
前記加算仮数部と前記中間積仮数とを参照し、ＬＺＡ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ：先頭ゼロ予想）により「Ｌｅａｄｉｎｇ  Ｏｎｅ（絶対値表現したときの先頭ビット）」に基づく予測結果を出力するＬＺＡ手段と、
前記加算仮数部と前記中間積仮数とを絶対値加算し、仮数部絶対値加算結果を出力する仮数部絶対値加算手段と、
前記予測結果に応じて、前記仮数部絶対値加算結果の上位から「０」の続く値を求めた正規化後仮数部絶対値加算結果を出力する正規化シフト手段と、
前記正規化後仮数部絶対値加算結果に対して丸めを行う丸め手段と、
前記丸めが行われた正規化後仮数部絶対値加算結果と、前記指数部加算手段からの指数更新結果とを結合した演算結果を出力する形式整列手段と
を含み、
前記指数部加算手段は、
前記第１オペランドの指数部、及び前記指数部選択手段の出力を入力とし、前記第１オペランドの指数部と前記指数部選択手段の出力とのうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行う指数計算手段と、
前記桁合わせシフト量と前記予測結果とを入力とし、前記指数更新結果を出力する指数更新手段と、
前記指数更新結果から例外を検出する例外検出手段と
を含む
浮動小数点積和演算装置。
【請求項６】
浮動小数点乗算過程において、第１オペランド及び第２オペランドを入力とし、浮動小数点乗算の中間結果を出力することと、
通常は前記浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、前記第１オペランド及び前記第２オペランドを入力とし、浮動小数点積和命令時には、前記中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行うことと
を含む
浮動小数点積和演算方法。
【請求項７】
請求項６に記載の浮動小数点積和演算方法であって、
前記浮動小数点乗算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解して、前記分解された各々の仮数部の乗算直後の仮数部加算の結果である中間積仮数を前記浮動小数点加算過程において使用することと、
前記分解された各々の指数部に基づく指数計算からの乗算指数と、入力オペランド指数から検出する特殊数情報とを前記浮動小数点加算過程において使用することと
を更に含む
浮動小数点積和演算方法。
【請求項８】
請求項７に記載の浮動小数点積和演算方法であって、
前記浮動小数点乗算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解することと、
前記分解された各々の仮数部の乗算を行い、乗算結果を出力することと、
前記乗算結果に基づいて仮数部加算を行い、前記中間積仮数を前記浮動小数点加算過程において使用することと、
前記中間積仮数に対して丸めを行うことと、
前記丸めが行われた中間積仮数と、指数更新結果とを結合した演算結果を出力することと、
前記分解された各々の指数部に基づく指数計算を行い、前記乗算指数と前記特殊数情報とを前記浮動小数点加算過程において使用することと、
前記乗算指数、前記特殊数情報、及び前記中間積仮数に基づいて、前記指数更新結果を出力することと、
前記指数更新結果から例外を検出することと
を更に含む
浮動小数点積和演算方法。
【請求項９】
請求項７又は８に記載の浮動小数点積和演算方法であって、
前記浮動小数点加算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部に分解し、前記中間積仮数、前記乗算指数、及び前記特殊数情報を受け取り、前記浮動小数積和命令時には、前記中間積仮数を演算対象とし、前記浮動小数点加算命令時には、前記第２オペランドを演算対象とし、桁合わせシフト量だけ前記第１オペランドの仮数部を左右シフトで桁合わせをした加算仮数部と前記中間積仮数とを絶対値加算し、正規化シフト、丸めを順に行い、積和演算を行うことと、
前記浮動小数点積和命令時において、前記乗算指数と前記第１オペランドの指数部のうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行い、正規化シフトによる正規化後の指数更新値を反映して指数結果を算出することと
を更に含む
浮動小数点積和演算方法。
【請求項１０】
請求項９に記載の浮動小数点積和演算方法であって、
前記浮動小数点加算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解することと、
前記第２オペランドの指数部、前記乗算指数、及び前記特殊数情報を入力とし、前記浮動小数積和命令時には、前記乗算指数と前記特殊数情報とを出力し、前記浮動小数積和命令時以外には、前記第２オペランドの指数部を出力することと、
前記桁合わせシフト量だけ前記第１オペランドの仮数部を左右シフトで桁合わせを行い、加算仮数部を出力することと、
前記第２オペランドの仮数部と前記中間積仮数とに基づいて、前記浮動小数積和命令時には、前記中間積仮数を出力し、前記浮動小数積和命令時以外には、前記第２オペランドの仮数部を出力することと、
前記加算仮数部と前記中間積仮数とを参照し、ＬＺＡ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ：先頭ゼロ予想）により「Ｌｅａｄｉｎｇ  Ｏｎｅ（絶対値表現したときの先頭ビット）」に基づく予測結果を出力することと、
前記加算仮数部と前記中間積仮数とを絶対値加算し、仮数部絶対値加算結果を出力することと、
前記予測結果に応じて、前記仮数部絶対値加算結果の上位から「０」の続く値を求めた正規化後仮数部絶対値加算結果を出力することと、
前記正規化後仮数部絶対値加算結果に対して丸めを行うことと、
前記丸めが行われた正規化後仮数部絶対値加算結果と、指数更新結果とを結合した演算結果を出力することと、
前記第１オペランドの指数部と前記乗算指数とのうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行うことと、
前記桁合わせシフト量と前記予測結果とに基づいて、前記指数更新結果を出力することと、
前記指数更新結果から例外を検出することと
を更に含む
浮動小数点積和演算方法。
【請求項１１】
浮動小数点乗算過程において、第１オペランド及び第２オペランドを入力とし、浮動小数点乗算の中間結果を出力するステップと、
通常は前記浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、前記第１オペランド及び前記第２オペランドを入力とし、浮動小数点積和命令時には、前記中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行うステップと
をコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項１２】
請求項１１に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点乗算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解して、前記分解された各々の仮数部の乗算直後の仮数部加算の結果である中間積仮数を前記浮動小数点加算過程において使用するステップと、
前記分解された各々の指数部に基づく指数計算からの乗算指数と、入力オペランド指数から検出する特殊数情報とを前記浮動小数点加算過程において使用するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項１３】
請求項１２に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点乗算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解するステップと、
前記分解された各々の仮数部の乗算を行い、乗算結果を出力するステップと、
前記乗算結果に基づいて仮数部加算を行い、前記中間積仮数を前記浮動小数点加算過程において使用するステップと、
前記中間積仮数に対して丸めを行うステップと、
前記丸めが行われた中間積仮数と、指数更新結果とを結合した演算結果を出力するステップと、
前記分解された各々の指数部に基づく指数計算を行い、前記乗算指数と前記特殊数情報とを前記浮動小数点加算過程において使用するステップと、
前記乗算指数、前記特殊数情報、及び前記中間積仮数に基づいて、前記指数更新結果を出力するステップと、
前記指数更新結果から例外を検出するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項１４】
請求項１２又は１３に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点加算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部に分解し、前記中間積仮数、前記乗算指数、及び前記特殊数情報を受け取り、前記浮動小数積和命令時には、前記中間積仮数を演算対象とし、前記浮動小数点加算命令時には、前記第２オペランドを演算対象とし、桁合わせシフト量だけ前記第１オペランドの仮数部を左右シフトで桁合わせをした加算仮数部と前記中間積仮数とを絶対値加算し、正規化シフト、丸めを順に行い、積和演算を行うステップと、
前記浮動小数点積和命令時において、前記乗算指数と前記第１オペランドの指数部のうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行い、正規化シフトによる正規化後の指数更新値を反映して指数結果を算出するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【請求項１５】
請求項１４に記載の浮動小数点積和演算用プログラムであって、
前記浮動小数点加算過程において、
前記第１オペランド及び前記第２オペランドの各々を指数部と仮数部とに分解するステップと、
前記第２オペランドの指数部、前記乗算指数、及び前記特殊数情報を入力とし、前記浮動小数積和命令時には、前記乗算指数と前記特殊数情報とを出力し、前記浮動小数積和命令時以外には、前記第２オペランドの指数部を出力するステップと、
前記桁合わせシフト量だけ前記第１オペランドの仮数部を左右シフトで桁合わせを行い、加算仮数部を出力するステップと、
前記第２オペランドの仮数部と前記中間積仮数とに基づいて、前記浮動小数積和命令時には、前記中間積仮数を出力し、前記浮動小数積和命令時以外には、前記第２オペランドの仮数部を出力するステップと、
前記加算仮数部と前記中間積仮数とを参照し、ＬＺＡ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ：先頭ゼロ予想）により「Ｌｅａｄｉｎｇ  Ｏｎｅ（絶対値表現したときの先頭ビット）」に基づく予測結果を出力するステップと、
前記加算仮数部と前記中間積仮数とを絶対値加算し、仮数部絶対値加算結果を出力するステップと、
前記予測結果に応じて、前記仮数部絶対値加算結果の上位から「０」の続く値を求めた正規化後仮数部絶対値加算結果を出力するステップと、
前記正規化後仮数部絶対値加算結果に対して丸めを行うステップと、
前記丸めが行われた正規化後仮数部絶対値加算結果と、指数更新結果とを結合した演算結果を出力するステップと、
前記第１オペランドの指数部と前記乗算指数とのうち大きい方を加算指数として選択し、前記乗算指数と前記加算指数との指数差分を前記桁合わせシフト量として算出する指数計算を行うステップと、
前記桁合わせシフト量と前記予測結果とに基づいて、前記指数更新結果を出力するステップと、
前記指数更新結果から例外を検出するステップと
を更にコンピュータに実行させるための
浮動小数点積和演算用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点積和演算装置に関し、特にスーパーコンピュータのベクトル計算機における浮動小数点積和演算装置に関する。
【背景技術】
【０００２】
ＩＥＥＥ７５４浮動小数点数標準規格（ＩＥＥＥ  二進化浮動小数点数演算標準規格）について進行中の改訂版であるＩＥＥＥ７５４Ｒ（ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ｆｏｒ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ａｒｉｔｈｍｅｔｉｃ）規格によれば、正式に積和演算が規定され、準拠する積和演算を最小のハードウェア（ＨＷ）構成で実施することが求められている。
【０００３】
また、浮動小数点積和演算装置に関連する技術として、特開２００６−３３８２１５号公報（特許文献１）にベクトル積和演算回路が開示されている。この関連技術では、ベクトル浮動小数点積和（Ａ＊Ｂ＋Ｃ）構成で浮動小数点の加算、或いは乗算を行う場合、マスクによって「Ａ＊Ｂ＋０」又は「Ａ＊１＋Ｃ」の加算のみ乗算のみを可能としている。このため、浮動小数点の加算と乗算の同時動作できないという課題があった。
【０００４】
特開２００６−３３８２１５号公報（特許文献１）に開示されているベクトル積和演算回路では、ベクトル浮動小数点積和構成で、浮動小数点加算、或いは乗算を行う場合、マスクによって「Ａ＊Ｂ＋０」又は「Ａ＊１＋Ｃ」の加算のみ、或いは乗算のみを可能としているため、浮動小数点の加算と乗算の同時動作ができないという課題があった。
【０００５】
また、図１を参照して、従来のベクトル浮動小数点演算器について説明する。
図１に示すように、従来のベクトル浮動小数点演算器は、浮動小数点乗算部１００と、浮動小数点加算部２００を含む。
【０００６】
図１において、浮動小数点乗算部１００と浮動小数点加算部２００は、それぞれが独立して動作する。浮動小数点乗算部１００と浮動小数点加算部２００は、ＩＥＥＥ７５４に準拠した一般的な浮動小数点加算と浮動小数点乗算構成である。ここでは、浮動小数点乗算部１００と浮動小数点加算部２００は、それぞれが第１オペランドと第２オペランドを入力とし、１つの演算結果を算出する。
【０００７】
浮動小数点乗算部１００は、仮数部乗算部１１０と、指数部乗算部１２０を含む。
【０００８】
仮数部乗算部１１０は、形式分解部１１１と、仮数部乗算部１１２と、仮数部加算部１１３と、丸め部１１４と、形式整列部１１５を含む。
【０００９】
形式分解部１１１は、第１形式分解部１１１１と、第２形式分解部１１１２を含む。
【００１０】
指数部乗算部１２０は、指数計算部１２１と、指数更新部１２２と、例外検出部１２３を含む。
【００１１】
第１形式分解部１１１１は、第１オペランドを入力とし、第１オペランドを仮数部と指数部に分解して、指数部を指数計算部１２１に出力し、仮数部を仮数部乗算部１１２に出力する。
【００１２】
第２形式分解部１１１２は、第２オペランドを入力とし、第２オペランドを仮数部と指数部に分解して、指数部を指数計算部１２１に出力し、仮数部を仮数部乗算部１１２に出力する。
【００１３】
指数計算部１２１は、第１形式分解部１１１１の出力（指数部）と、第２形式分解部１１１２の出力（指数部）を入力とし、指数計算の結果を出力する。
【００１４】
仮数部乗算部１１２は、第１形式分解部１１１１の出力（仮数部）と、第２形式分解部１１１２の出力（仮数部）を入力とし、ワレスツリーに基づいて、キャリ（Ｃａｒｒｙ）「ｃ」と加算値「ｓ」を出力する。
【００１５】
仮数部加算部１１３は、キャリ「ｃ」と加算値「ｓ」を入力とし、仮数部加算の結果（仮数部加算結果）を出力する。
【００１６】
丸め部１１４は、仮数部加算部１１３の出力（仮数部）を入力とし、仮数部加算結果を丸めた結果を出力する。
【００１７】
指数更新部１２２は、指数計算部１２１の出力（指数部）と仮数部加算部１１３の出力（仮数部加算結果）を入力とし、指数更新の結果（指数更新結果）を出力する。
【００１８】
形式整列部１１５は、指数更新部１２２の出力（指数更新結果）と丸め部１１４の出力（仮数部加算結果）を入力とし、仮数部加算結果と指数更新結果を結合した演算結果を出力する。
【００１９】
例外検出部１２３は、指数更新部１２２の出力（指数更新結果）を入力とし、例外を検出して出力する。
【００２０】
浮動小数点加算部２００は、仮数部加算部２１０と、指数部加算部２２０を含む。
【００２１】
仮数部乗算部２１０は、形式分解部２１１と、仮数部選択部２１２と、桁合わせシフト部２１３と、ＬＺＡ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ：先頭ゼロ予想）部２１４と、仮数部絶対値加算部２１５と、正規化シフト部２１６と、丸め部２１７と、形式整列部２１８を含む。
【００２２】
形式分解部２１１は、第１形式分解部２１１１と、第２形式分解部２１１２を含む。
【００２３】
仮数部選択部２１２は、第１仮数部選択部２１２１と、第２仮数部選択部２１２２を含む。
【００２４】
指数部乗算部２２０は、指数計算部２２１と、指数更新部２２２と、例外検出部２２３を含む。
【００２５】
第１形式分解部２１１１は、第１オペランドを入力とし、第１オペランドを仮数部と指数部に分解して、指数部を指数計算部２２１に出力し、仮数部を仮数部選択部２１２に出力する。
【００２６】
第２形式分解部２１１２は、第２オペランドを入力とし、第２オペランドを仮数部と指数部に分解して、指数部を指数計算部２２１に出力し、仮数部を仮数部選択部２１２に出力する。
【００２７】
指数計算部２２１は、第１形式分解部２１１１の出力（指数部）と、第２形式分解部２１１２の出力（指数部）を入力とし、指数計算の結果を出力する。
【００２８】
第１仮数部選択部２１２１及び第２仮数部選択部２１２２の各々は、第１形式分解部２１１１の出力（仮数部）と、第２形式分解部２１１２の出力（仮数部）を入力とし、いずれかを選択したものを出力する。
【００２９】
桁合わせシフト部２１３は、第１仮数部選択部２１２１の出力（仮数部）を入力とし、指数計算部２２１の出力（指数部）に応じて、オペランドの指数の小さいほうの仮数部を指数差の分だけ右シフトして出力する。
【００３０】
ＬＺＡ部２１４は、第２仮数部選択部２１２２の出力（仮数部）と桁合わせシフト部２１３の出力（仮数部）を入力とし、浮動小数点加算器で使用されている「Ｌｅａｄｉｎｇ  Ｏｎｅ（絶対値表現したときの先頭ビット）」の予測方法に基づく結果（絶対値先頭ビット予測結果）を出力する。
【００３１】
仮数部絶対値加算部２１５は、仮数部選択部２１２の出力（仮数部）と桁合わせシフト部２１３の出力（仮数部）を入力とし、仮数部絶対値加算を行った結果（仮数部絶対値加算結果）を出力する。
【００３２】
正規化シフト部２１６は、仮数部絶対値加算部２１５の出力（仮数部絶対値加算結果）を入力とし、ＬＺＡ部２１４の出力（絶対値先頭ビット予測結果）に応じて、仮数部絶対値加算結果の上位から「０」の続く値を求めた結果を出力する。
【００３３】
丸め部２１７は、正規化シフト部２１６の出力（正規化された仮数部絶対値加算結果）を入力とし、丸めた結果を出力する。
【００３４】
指数更新部２２２は、指数計算部２２１の出力（指数部）とＬＺＡ部２１４の出力（絶対値先頭ビット予測結果）を入力とし、指数更新の結果（指数更新結果）を出力する。
【００３５】
形式整列部２１８は、指数更新部２２２の出力（指数更新結果）と丸め部２１７の出力（丸められた仮数部絶対値加算結果）を入力とし、仮数部絶対値加算結果と指数更新結果を結合した演算結果を出力する。
【００３６】
例外検出部２２３は、指数更新部２２２の出力（指数更新結果）を入力とし、例外を検出して出力する。
【００３７】
前述した従来のベクトル浮動小数点演算器では、浮動小数点積和演算は、機能としては成り立たず、例え浮動小数点乗算の結果を浮動小数点加算しても、ＩＥＥ７５４Ｒ規定における「積和（ｘ×ｙ）＋ｚに対して、無限の精度と範囲で一度に計算し、目的の形式に丸める演算を行い、乗算のみ、加算のみでアンダーフロー、オーバーフロー、精度落ち例外を検出しない」という規定に準拠できないという課題がある。
【００３８】
関連する技術として、特開昭６２−１６８２２８号公報（特許文献２）に浮動小数点積和演算器が開示されている。この関連技術では、浮動小数点積和演算器に入力された２つの単精度の浮動小数点データ同士の乗算結果の仮数部を、単精度に丸めることなく、倍精度のまま、倍精度桁合わせシフタに入力し、戻された倍精度レジスタの出力と桁合わせを行った後、桁合わせされた倍精度仮数部同士の加算を倍精度加算器によって行う。
【００３９】
また、特開昭６３−２４４２６８号公報（特許文献３）に浮動小数点積和演算装置が開示されている。この関連技術では、浮動小数点積和演算装置において、指数加算回路は、第１の被乗算データの指数値と第２の被乗算データの指数値を加算して積指数値を出力する。仮数乗算回路は、第１の被乗算データの仮数値と第２の被乗算データの仮数値を加算して積仮数値を出力する。第１の指数補正値算出回路は、積仮数値の最上位の有意ビットの位置を検出して積指数補正値を出力する。和指数値算出回路は、積指数値と積指数補正値と被加算データの指数値と被加算データの指数補正値を入力として、第１のシフト量と第２のシフト量と和指数値を出力する。第１のシフト回路は、第１のシフト量に応じて積仮数値をシフトする。第２のシフト回路は、第２のシフト量に応じて被加算データの仮数値をシフトする。仮数加算回路は、第１のシフト回路の出力と第２のシフト回路の出力を加算ずる。第２の指数補正値算出回路は、仮数加算回路の出力の最上位の有意ビットの位置を検出して和指数補正値を出力する。
【先行技術文献】
【特許文献】
【００４０】
【特許文献１】特開２００６−３３８２１５号公報
【特許文献２】特開昭６２−１６８２２８号公報
【特許文献３】特開昭６３−２４４２６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００４１】
本発明の目的は、浮動小数点乗算器と、浮動小数点加算器とを個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には、浮動小数点乗算器による浮動小数点乗算の中間結果を浮動小数点加算器に受け渡し、浮動小数点加算器により、中間結果幅に対応した桁合わせシフト（左右シフト）と、仮数部絶対値加算と、正規化シフトを行うことで、浮動小数点積和演算を行う演算器を提供することにある。
【課題を解決するための手段】
【００４２】
本発明では、浮動小数点積和演算器が、２００８年のＩＥＥＥ７５４Ｒ（ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ｆｏｒ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ａｒｉｔｈｍｅｔｉｃ）規格に準拠した浮動小数点乗算機能と浮動小数点加算機能を個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には、浮動小数点乗算の中間結果の仮数部を浮動小数点加算に受け渡し、浮動小数点加算器は中間結果幅に対応した浮動小数点加算を行うことにより、ＩＥＥＥ７５４Ｒ規格に準拠した浮動小数点積和演算を行うことを特徴としている。
【００４３】
本発明の浮動小数点積和演算装置は、第１オペランド及び第２オペランドを入力とし、浮動小数点乗算の中間結果を出力する浮動小数点乗算手段と、通常は浮動小数点乗算手段と独立して動作し、第１オペランド及び第２オペランドを入力とし、浮動小数点積和命令時には、中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う浮動小数点加算手段とを含む。
【００４４】
本発明の浮動小数点積和演算方法では、浮動小数点乗算過程において、第１オペランド及び第２オペランドを入力とし、浮動小数点乗算の中間結果を出力する。また、通常は浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、第１オペランド及び第２オペランドを入力とし、浮動小数点積和命令時には、中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う。
【００４５】
本発明の浮動小数点積和演算用プログラムは、浮動小数点乗算過程において、第１オペランド及び第２オペランドを入力とし、浮動小数点乗算の中間結果を出力するステップと、通常は浮動小数点乗算過程と独立して行われる浮動小数点加算過程において、第１オペランド及び第２オペランドを入力とし、浮動小数点積和命令時には、中間結果を受け取り、中間結果幅に対応した左右シフトと仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行うステップとをコンピュータに実行させるためのプログラムである。
【発明の効果】
【００４６】
ＩＥＥＥ７５４Ｒ準拠の浮動小数点積和演算において、浮動小数点積和演算、或いは浮動小数点加算と乗算の同時動作をすることができる。
【図面の簡単な説明】
【００４７】
【図１】従来のベクトル浮動小数点演算器の構成例を示す概念図である。
【図２】本発明の浮動小数点積和演算装置の構成例を示す概念図である。
【図３】ＩＥＥＥ倍精度データ形式の例を説明するための図である。
【発明を実施するための形態】
【００４８】
以下に、本発明の実施形態について添付図面を参照して説明する。
図２に示すように、本発明の浮動小数点積和演算装置は、浮動小数点乗算部１００と、浮動小数点加算部３００を含む。
【００４９】
浮動小数点乗算部１００は、仮数部乗算部１１０と、指数部乗算部１２０を含む。
【００５０】
仮数部乗算部１１０は、形式分解部１１１と、仮数部乗算部１１２と、仮数部加算部１１３と、丸め部１１４と、形式整列部１１５を含む。
【００５１】
形式分解部１１１は、第１形式分解部１１１１と、第２形式分解部１１１２を含む。
【００５２】
指数部乗算部１２０は、指数計算部１２１と、指数更新部１２２と、例外検出部１２３を含む。
【００５３】
第１形式分解部１１１１は、第１オペランドを入力とし、第１オペランドを仮数部と指数部に分解して、指数部を指数計算部１２１に出力し、仮数部を仮数部乗算部１１２に出力する。
【００５４】
第２形式分解部１１１２は、第２オペランドを入力とし、第２オペランドを仮数部と指数部に分解して、指数部を指数計算部１２１に出力し、仮数部を仮数部乗算部１１２に出力する。
【００５５】
指数計算部１２１は、第１形式分解部１１１１の出力（指数部）と、第２形式分解部１１１２の出力（指数部）を入力とし、指数計算の結果を出力する。
【００５６】
仮数部乗算部１１２は、第１形式分解部１１１１の出力（仮数部）と、第２形式分解部１１１２の出力（仮数部）を入力とし、ワレスツリーに基づいて、キャリ（Ｃａｒｒｙ）「ｃ」と加算値「ｓ」を出力する。
【００５７】
仮数部加算部１１３は、キャリ「ｃ」と加算値「ｓ」を入力とし、仮数部加算の結果（仮数部加算結果）を出力する。
【００５８】
丸め部１１４は、仮数部加算部１１３の出力（仮数部加算結果）を入力とし、仮数部加算結果を丸めた結果を出力する。
【００５９】
指数更新部１２２は、指数計算部１２１の出力（指数部）と仮数部加算部１１３の出力（仮数部）を入力とし、指数更新の結果（指数更新結果）を出力する。
【００６０】
形式整列部１１５は、指数更新部１２２の出力（指数更新結果）と丸め部１１４の出力（仮数部加算結果）を入力とし、仮数部加算結果と指数更新結果を結合した演算結果を出力する。
【００６１】
例外検出部１２３は、指数更新部１２２の出力（指数更新結果）を入力とし、例外を検出して出力する。
【００６２】
ここでは、浮動小数点乗算部１００は、仮数部加算部１１３の出力と、指数計算部１２１の出力を、浮動小数点加算部３００に送出する。
【００６３】
仮数部加算部１１３の出力は、「中間積仮数」を含む。すなわち、「中間積仮数」は、仮数部乗算部１１２による仮数部乗算の直後の仮数部加算の結果（仮数部加算結果）である。
【００６４】
指数計算部１２１の出力は、「乗算指数」と「特殊数情報」を含む。「乗算指数」とは、指数計算部１２１による指数計算結果である。「特殊数情報」とは、例えばＩＥＥＥ倍精度規格の場合で「無限大」、「０」、「Ｎｏｔ」等の情報を示す。ここでは、指数計算部１２１は、入力オペランド指数から「特殊数情報」を検出する。入力オペランド指数は、入力された第１オペランド及び第２オペランドの指数部である。
【００６５】
浮動小数点加算部３００は、浮動小数点乗算部１００から送出された「中間積仮数」、「乗算指数」、及び「特殊数情報」を受け取る。
【００６６】
浮動小数点加算部３００は、仮数部加算部３１０と、指数部加算部３２０を含む。
【００６７】
仮数部加算部３１０は、「加算仮数部」と「中間積仮数」とを絶対値加算し、正規化シフト、及び丸めを順に行うことにより、積和演算を行う。「加算仮数部」は、第１オペランドの仮数部を「乗算指数」と「加算指数」の差だけ左右シフトで予め桁合わせをしたものである。「加算指数」とは、「乗算指数」と「第１オペランドの指数部」のうち大きい方である。
【００６８】
指数部加算部３２０は、浮動小数点積和命令時において、「乗算指数」と「第１オペランドの指数部」のいずれか大きい方を選び、正規化シフトによる正規化後の指数更新値を反映して指数結果を算出する。
【００６９】
仮数部乗算部３１０は、形式分解部３１１と、指数部選択部３１２と、左右シフト部３１３と、仮数部選択部３１４と、ＬＺＡ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ）部３１５と、仮数部絶対値加算部３１６と、正規化シフト部３１７と、丸め部３１８と、形式整列部３１９を含む。
【００７０】
形式分解部３１１は、第１形式分解部３１１１と、第２形式分解部３１１２を含む。
【００７１】
指数部乗算部３２０は、指数計算部３２１と、指数更新部３２２と、例外検出部３２３を含む。
【００７２】
第１形式分解部３１１１は、第１オペランドを入力とし、第１オペランドを仮数部と指数部に分解して、指数部を指数計算部３２１に出力し、仮数部を左右シフト部３１３に出力する。
【００７３】
第２形式分解部３１１２は、第２オペランドを入力とし、第２オペランドを仮数部と指数部に分解して、指数部を指数部選択部３１２に出力し、仮数部を仮数部選択部３１４に出力する。
【００７４】
指数部選択部３１２は、浮動小数点乗算部１００の指数計算部１２１の出力（指数部）と、第２形式分解部３１１２の出力（指数部）を入力として、浮動小数積和命令に応じて、いずれかを選択したものを出力する。
【００７５】
指数計算部３２１は、第１形式分解部３１１１の出力（指数部）と、指数部選択部３１２の出力（指数部）を入力とし、指数計算の結果を出力する。浮動小数点積和命令時には、指数計算部３２１は、「乗算指数」と「第１オペランドの指数部」の大きい方を「加算指数」として選び、「乗算指数」と「加算指数」の指数差分を桁合わせシフト量として算出する指数計算を行う。
【００７６】
左右シフト部３１３は、第１形式分解部３１１１の出力（仮数部）を入力とし、「乗算指数」と「加算指数」の差だけ左右シフトで予め桁合わせをして出力する。ここでは、「加算指数」とは、「乗算指数」と「第１オペランドの指数部」のうち大きい方である。左右シフト部３１３は、第１オペランドの仮数部を入力とし、第１オペランドの仮数部に対して、「乗算指数」と「加算指数」の差だけ左右シフトで桁合わせをした「加算仮数部」を出力する。
【００７７】
仮数部選択部３１４は、浮動小数点乗算部１００の仮数部加算部１１３の出力（仮数部）と、第２形式分解部３１１２の出力（仮数部）を入力とし、浮動小数積和命令に応じて、いずれかを選択したものを出力する。ここでは、仮数部加算部３１０は、浮動小数積和命令時には、「中間積仮数」を演算対象とし、浮動小数点加算命令時には、「第２オペランドの仮数部」を演算対象とする。すなわち、仮数部選択部３１４は、浮動小数積和命令時には、浮動小数点乗算部１００から送出された「中間積仮数」を出力し（通過させ）、浮動小数点加算命令時には、第２形式分解部３１１２から出力された「第２オペランドの仮数部」を出力する（通過させる）。
【００７８】
ＬＺＡ部３１５は、左右シフト部３１３の出力（仮数部）と、仮数部選択部３１４の出力（仮数部）を入力とし、浮動小数点加算器で使用されている「Ｌｅａｄｉｎｇ  Ｏｎｅ（絶対値表現したときの先頭ビット）」の予測方法に基づく結果（絶対値先頭ビット予測結果）を出力する。
【００７９】
仮数部絶対値加算部３１６は、左右シフト部３１３の出力（仮数部）と、仮数部選択部３１４の出力（仮数部）を入力とし、仮数部絶対値加算を行った結果（仮数部絶対値加算結果）を出力する。ここでは、仮数部絶対値加算部３１６は、「加算仮数部」と「中間積仮数」とを絶対値加算し、仮数部絶対値加算結果を出力する。
【００８０】
正規化シフト部３１７は、仮数部絶対値加算部３１６の出力（仮数部絶対値加算結果）を入力とし、ＬＺＡ部３１５の出力（絶対値先頭ビット予測結果）に応じて、仮数部絶対値加算結果の上位から「０」の続く値を求めた結果を出力する。ここでは、正規化シフト部３１７は、仮数部絶対値加算結果を正規化する。
【００８１】
丸め部３１８は、正規化シフト部３１７の出力（正規化された仮数部絶対値加算結果）を入力とし、仮数部絶対値加算結果を丸めた結果を出力する。ここでは、丸め部３１８は、正規化された仮数部絶対値加算結果を丸める。
【００８２】
指数更新部３２２は、指数計算部３２１の出力（指数部）とＬＺＡ部３１５の出力（絶対値先頭ビット予測結果）を入力とし、指数更新の結果（指数更新結果）を出力する。
【００８３】
形式整列部３１９は、指数更新部３２２の出力（指数更新結果）と丸め部３１８の出力（丸められた仮数部絶対値加算結果）を入力とし、仮数部絶対値加算結果と指数更新結果を結合した演算結果を出力する。
【００８４】
例外検出部３２３は、指数更新部３２２の出力（指数更新結果）を入力とし、例外を検出して出力する。
【００８５】
このように、本発明の浮動小数点積和演算装置は、浮動小数点乗算部２００と浮動小数点加算部３００を個別に有するが、浮動小数点加算部３００は、浮動小数点乗算部２００による浮動小数点乗算の中間結果に対応する仮数部絶対値加算と、正規化シフトを行うので、ＩＥＥＥ７５４Ｒ規格に準拠する浮動小数点積和演算が可能となる。
【００８６】
また、本発明の浮動小数点積和演算装置では、ＩＥＥＥ７５４Ｒ準拠の浮動小数点積和演算、又は、浮動小数点乗算演算と浮動小数点加算演算の同時動作が可能である。
【００８７】
＜詳細＞
次に、本発明の浮動小数点積和演算装置の詳細について説明する。
【００８８】
本発明の浮動小数点積和演算装置では、浮動小数点乗算部１００と浮動小数点加算部３００は、浮動小数点加算命令と浮動小数点乗算命令時には、それぞれが独立して、第１オペランドと第２オペランドを入力とした演算を行い、演算結果をそれぞれに算出する。
【００８９】
例えば、ＩＥＥＥ７５４Ｒ規格の倍精度データ形式は、図３に示す通りに、符号「Ｓ」と、指数部「Ｅ」と、仮数部「Ｆ」に分けられている。
【００９０】
ここでは、符号「Ｓ」は、先頭の「０」ビット目の領域である。指数部「Ｅ」は、「１」ビット目から「１１」ビット目までの領域である。仮数部「Ｆ」は、「１２」ビット目から「６３」ビット目までの領域である。
【００９１】
このとき、「Ｅ＝２０４７」かつ「Ｆ≠０」ならば、「ＮａＮ」とする。
【００９２】
また、「Ｅ＝２０４７」かつ「Ｆ＝０」ならば、「（−１）Ｓ×∞」とする。
【００９３】
また、「０＜Ｅ＜２０４７」ならば、「（−１）Ｓ×２Ｅ−１０２３×（１．Ｆ）」とする。
【００９４】
また、「Ｅ＝０」ならば、「（−１）Ｓ×０  ：符号付き０」とする。
【００９５】
但し、実際には、これらの例に限定されない。
【００９６】
浮動小数点乗算部１００は、浮動小数点積和命令の場合、第１オペランドと第２オペランドを入力とした浮動小数点乗算演算を行うが、乗算算出過程で、仮数部乗算後の仮数部加算の結果（仮数部加算部１１３の出力）の「中間積仮数」を浮動小数点加算部３００に供給する。「中間積仮数」は、倍精度の仮数幅の２倍幅となる。
【００９７】
また、浮動小数点乗算部１００は、指数部乗算部１２０の指数計算結果（指数計算部１２１の出力）の「乗算指数」と、入力オペランド指数から「特殊数情報」を検出して、浮動小数点加算部３００に供給する。「特殊数情報」とは、例えばＩＥＥＥ倍精度規格の場合で「無限大」、「０」、「Ｎｏｔ」等の情報を示す。
【００９８】
浮動小数点加算部３００において、指数部加算部３２０は、指数部選択部３１２によって浮動小数点乗算部１００からの「乗算指数」及び「特殊数情報」を受け取る。また、仮数部加算部３１０は、仮数部選択部３１４によって浮動小数点乗算部１００からの「中間積仮数」を受け取る。これにより、浮動小数点加算部３００は、「中間積仮数」と「第１オペランド」の２値を、浮動小数点加算対象として演算する。
【００９９】
指数部加算部３２０は、「乗算指数」と「第１オペランドの指数部」の大きい方を「加算指数」として選び、「乗算指数」と「加算指数」の指数差分を桁合わせシフト量として算出する指数計算を行い、正規化シフト部３１７による正規化時の指数更新値を反映して積和指数結果を算出する。
【０１００】
仮数部加算部３１０は、指数計算の「乗算指数」と「加算指数」の指数差分（桁合わせシフト量）に従い、第１オペランドの仮数部側を左右シフト部３１３で桁合わせする。仮数部絶対値加算部３１６は、仮数部選択部３１４の出力である仮数部の２倍幅の「中間積仮数」と、左右シフト部３１３で桁合わせした第１オペランドの仮数部を絶対値加算し、仮数部加算結果を求める。
【０１０１】
以降、ＬＺＡ部３１５と正規化シフト部３１７は、仮数部加算結果を上位から最初の数値が「１」の位置が先頭ビットとなるように正規化する。
【０１０２】
また、丸め部３１８は、上位から仮数部幅に対し丸めモードに従って丸め、積和仮数部結果が得られることになる。
【０１０３】
形式整列部３１９は、積和指数結果と積和仮数部結果を整列させて、ＩＥＥＥ倍精度の積和演算結果が得られる。
【０１０４】
以上説明したように、本発明においては、浮動小数点加算にて、仮数部の２倍幅に対して絶対値加算及び正規化を行うハードウェア（ＨＷ）を追加するだけで、ＩＥＥＥ７５４Ｒ準拠の浮動小数点積和演算を求めることができる。
【０１０５】
また、浮動小数点乗算と浮動小数点加算を独立して備えるので、浮動小数点積和演算、或いは、浮動小数点加算と乗算が同時動作することができる。
【０１０６】
更に、ベクトル演算器は浮動小数点の加算と乗算から構成されているが、従来構成の浮動小数点加算と乗算の独立動作により、従来プログラム資産が活用できる。
【０１０７】
このように、本発明の浮動小数点積和演算装置は、浮動小数点乗算機能と浮動小数点加算機能を個別に有しそれぞれが独立動作するか、又は浮動小数点積和を行う。
【０１０８】
また、本発明の浮動小数点積和演算装置では、浮動小数点加算機能に加えて、中間結果幅に対応した桁合わせシフト（左右シフト）と仮数部絶対値加算と正規化シフトを設け、浮動小数点積和演算も行う。
【０１０９】
以上のように、本発明は、浮動小数点乗算器と、浮動小数点加算器を個別に有し、通常はそれぞれが独立で動作するが、浮動小数点積和命令時には浮動小数点乗算器の中間結果を浮動小数点加算器に受け渡し、浮動小数点加算器は中間結果幅に対応した桁合わせシフト（左右シフト）と仮数部絶対値加算と正規化シフトを行い、浮動小数点加算を行う。これにより、浮動小数点積和演算器において、ＩＥＥＥ７５４Ｒ規格に準拠した浮動小数点積和演算を行うことを可能にした。
【０１１０】
本発明の浮動小数点積和演算装置では、浮動小数点積和動作時には、浮動小数点乗算結果の仮数部（中間積仮数）側は桁合わせシフトせず、浮動小数点加算対象側のみを「中間積仮数」の幅に対応して桁あわせシフトする。
【０１１１】
これにより、浮動小数点積和動作時（Ａ＊Ｂ＋Ｃ）に、乗算対象（Ａ＊Ｂ）は、シフト回路としては、正規化シフトの一回を通過するだけで積和結果を取得でき、一回の浮動小数点積和動作を高速化できる。
【０１１２】
本発明は、スーパーコンピュータのベクトル計算機におけるベクトル演算装置に適用できる。
【０１１３】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものでは、なく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【０１１４】
１００…  浮動小数点乗算部
２００，３００…  浮動小数点加算部
１１０…  仮数部乗算部
２１０，３１０…  仮数部加算部
１１１，２１１，３１１…  形式分解部
１１１１，２１１１，３１１１…  第１形式分解部
１１１２，２１１２，３１１２…  第２形式分解部
１１２…  仮数部乗算部
２１２…  仮数部選択部
２１２１…  第１仮数部選択部
２１２２…  第２仮数部選択部
３１２…  指数部選択部
１１３…  仮数部加算部
２１３…  桁合わせシフト部
３１３…  左右シフト部
３１４…  仮数部選択部
２１４，３１５…  ＬＺＡ（Ｌｅａｄｉｎｇ−Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ：先頭ゼロ予想）部
２１５，３１６…  仮数部絶対値加算部
２１６，３１７…  正規化シフト部
１１４，２１７，３１８…  丸め部
１１５，２１８，３１９…  形式整列部
１２０，２２０，３２０…  指数部乗算部
１２１，２２１，３２１…  指数計算部
１２２，２２２，３２２…  指数更新部
１２３，２２３，３２３…  例外検出部
【図１】
2010218197.tif 000003
【図２】
2010218197.tif 000004
【図３】
2010218197.tif 000005