(57)【特許請求の範囲】
【請求項１】
３つ以上の浮動小数点データの総和を、コンピュータを用いて演算する浮動小数点データの総和演算処理方法において、
前記浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和とをコンピュータの演算回路が計算するステップと、
前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和との加算を行う処理をコンピュータの演算回路が実行するステップとを有する
ことを特徴とする浮動小数点データの総和演算処理方法。
【請求項２】
複数のノードと、
前記各ノードから浮動小数点データを受信し、受信した浮動小数点データの総和を演算するリダクション機構とを有し、
前記リダクション機構は、前記受信した浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和とを計算し、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行う
ことを特徴とするコンピュータシステム。
【請求項３】
複数のノードと、
前記各ノードから浮動小数点データを受信し、受信した浮動小数点データの総和を演算するリダクション機構とを有し、
前記各ノードは、ノード内の前記浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和とを計算し、前記各グループ毎に計算された計算結果を前記リダクション機構に送り、
前記リダクション機構は、複数ノードから受信した浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの中で、複数ノードから受信した浮動小数点データの指数部の上位ビットが最大値のグループの仮数部の総和と、前記複数ノードから受信した浮動小数点データの指数部の上位ビットが２番目に最大値のグループの仮数部の総和とを計算し、前記リダクション機構における各グループ毎に計算された計算結果を各ノードに返し、
前記各ノードは、前記リダクション機構から返ってきた前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行う
ことを特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点データの総和を演算する浮動小数点データの総和演算処理方法及びコンピュータシステムに関し、特に、複数のコンピュータノードの浮動小数点データの総和を演算する浮動小数点データの総和演算処理方法及びコンピュータシステムに関する。
【背景技術】
【０００２】
コンピュータを含むノードを複数設け、これら複数のノードをネットワークで接続した並列計算型コンピュータシステムが提供されている。このような並列計算機では、１ジョブを複数のノードで並列に計算処理し、これらの処理データを、ネットワークを介し、やりとりする。このような並列計算機においては、大規模なものでは、数百〜数千ノードで構成される。
【０００３】
このような並列計算機においては、複数のノードの持つデータを集めて、指定された演算を実行する。これをリダクション処理という。このようなリダクション処理としては、全ノードのデータの総和を求める演算や、全ノードのデータの最大値や最小値を求める演算などがある。
【０００４】
一方、コンピュータの取り扱うデータ形式として、指数部と仮数部で数値を表現する浮動小数点形式は、小数点の位置が一定のところにある固定小数点形式による表現よりも広い範囲の数値が表現できる。図１９は、浮動小数点形式の説明図であり、ＩＥＥＥ規格の浮動小数点形式を示す。
【０００５】
図１９には、３２ビットの単精度浮動小数点データと、６４ビットの倍精度浮動小数点データを示す。いずれも、符号ビットと、指数部と、仮数部とからなる。符号ビットは、数値の符号を示し、「１」は負数、「０」は正数を表す。又、指数部は、２のべき乗の整数値を表し、仮数部は、１．０以上〜２．０未満の値（正規化数）を表す。そして、指数表現の結果が、仮数部と乗算され、実際の数値を表す。
【０００６】
このような浮動小数点データの総和演算では、３個以上の浮動小数点データを加算した場合に、３個のデータの加算順序によって、演算結果の数値が異なる。図２０及び図２１は、総和演算の説明図である。ここでは、倍精度浮動小数点データの値を、１６進表示で示してある。
【０００７】
図２０に示すように、指数部と仮数部からなる浮動少数点データ１，２，３，４を加算する場合に、データ１，２，３，４の順で加算すると、データ１とデータ２の加算を行い、その加算結果１とデータ３の加算を行い、更に、その加算結果２とデータ４の加算を行う。
【０００８】
一方、図２１に示すように、データ１，３，４，２の順で加算すると、データ１とデータ３の加算を行い、その加算結果１とデータ４の加算を行い、更に、その加算結果２とデータ２の加算を行う。
【０００９】
図２０、図２１の数値例で示されるように、４個のデータの加算結果に相違が現れる。この原因は、１回毎の演算結果が正規化されるため、仮数部の桁落ちが発生するためである。
【００１０】
並列計算機では、１つのジョブを、複数の計算機で並列に実行するため、その並列に実行された途中結果や最終結果を集めて、総和を求める等の演算が必要になる場合がある。この時、データの形式が浮動小数点形式であると、演算順序によって、演算結果が異なることは、並列計算の正確さに影響を与える。このため、演算順序を守らなくても、演算結果の同一性を保証する方法が提案されている。
【００１１】
図２２は、かかる従来の浮動小数点データの総和演算の説明図であり、演算順序を守らなくても、演算結果の同一性を保証する方法を示す。
【００１２】
図２２に示すように、複数のノードの浮動小数点データの総和演算等を行うリダクション機構を、各ノードと別に設けることが、処理効率の上で、有効である。先ず、ノードの各々は、浮動小数点データの指数部のみを取り出し、その指数部の最大値を求めるように、リダクション機構に指示する。
【００１３】
リダクション機構は、各ノードから送られてくる指数部データを比較し、最大値の指数部のみを保持し、全ノードからの指数部データの比較が終了すると、その最大値の指数部を全ノードに返す。
【００１４】
各ノードは、リダクション機構から返ってきた最大値の指数部に合わせて、仮数部の桁合わせを実行する。そして、各ノードは、その桁合わせした仮数部データの総和を求めるように、リダクション機構に指示する。
【００１５】
リダクション機構は、各ノードから送られてくる仮数部データを加算して、全ノードからの仮数部データの加算が終了すると、その結果を全ノードに返す。
【００１６】
各ノードは、最大値の指数部データと仮数部データの総和から、正規化した浮動小数点データを作成する。
【００１７】
このように、従来技術では、各ノードで、指数部の最大値に合わせて、仮数部データの桁合わせが実行され、その桁合わせ済みのデータが、リダクション機構に送られるため、総和演算の計算順序を気にすることなく、総和演算できる（例えば、特許文献１）。
【特許文献１】特表２００５−５０６５９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、従来技術では、浮動小数点データの総和を求める場合に、指数部の大小比較と仮数部の加算の２回の演算が必要となる。このため、各ノードとリダクション機構とのデータのやりとりも２回必要であり、リダクション処理の時間が長くなる。特に、ノード数が数百〜数千に増えると、その処理時間が長くなり、並列処理の高速化の阻害要因となる。
【００１９】
一方、演算順序を守るため、リダクション機構に、全ノードのデータを記憶する記憶回路を設け、全ノードのデータを受信後、順番に加算を行う方法が考えられる。しかし、ノード数が増加すると、記憶回路の規模が増大し、コスト上昇の原因となる。しかも、全てのノードのデータを受け取ってから計算を開始すると、それだけ、処理時間が長くなる。特に、ノード数が数百〜数千に増えると、その回路規模が大きくなり、且つ処理時間の長さが顕著となる。
【００２０】
本発明の目的は、多数のノードの浮動小数点データの総和演算を高速化するための浮動小数点データの総和演算処理方法及びコンピュータシステムを提供することにある。
【００２１】
又、本発明の他の目的は、演算順序を守ることなく、多数のノードの浮動小数点データの総和演算を高速化し、並列処理に有効な浮動小数点データの総和演算処理方法及びコンピュータシステムを提供することにある。
【００２２】
更に、本発明の他の目的は、不必要な記憶回路を設けることなく、多数のノードの浮動小数点データの総和演算を高速化するための浮動小数点データの総和演算処理方法及びコンピュータシステムを提供することにある。
【課題を解決するための手段】
【００２３】
この目的の達成のため、本発明は、３つ以上の浮動小数点データの総和を、コンピュータを用いて演算する浮動小数点データの総和演算処理方法において、前記浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和とをコンピュータの演算回路が計算するステップと、  前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和との加算を行う処理をコンピュータの演算回路が実行するステップとを有する
【００２４】
又、本発明のコンピュータシステムは、複数のノードと、前記各ノードから浮動小数点データを受信し、受信した浮動小数点データの総和を演算するリダクション機構とを有し、  前記リダクション機構は、前記受信した浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和とを計算し、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行う。
【００２５】
又、複数のノードと、前記各ノードから浮動小数点データを受信し、受信した浮動小数点データの総和を演算するリダクション機構とを有し、前記各ノードは、ノード内の前記浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの前記指数部の上位ビットが最大値のグループの仮数部の総和と、前記指数部の上位ビットが２番目に最大値のグループの仮数部の総和とを計算し、前記各グループ毎に計算された計算結果を前記リダクション機構に送り、前記リダクション機構は、複数ノードから受信した浮動小数点データの指数部の上位ビットの大きさにより分けた複数のグループの中で、複数ノードから受信した浮動小数点データの指数部の上位ビットが最大値のグループの仮数部の総和と、前記複数ノードから受信した浮動小数点データの指数部の上位ビットが２番目に最大値のグループの仮数部の総和とを計算し、前記リダクション機構における各グループ毎に計算された計算結果を各ノードに返し、前記各ノードは、前記リダクション機構から返ってきた前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行う。
【００２６】
更に、本発明は、好ましくは、前記計算ステップは、前記指数部の上位ビットを比較して、前記比較結果により、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算するステップからなる。
【００２７】
更に、本発明は、好ましくは、前記計算ステップは、前記指数部の下位ビットの値に応じて、前記仮数部をシフトして、データ幅を拡張した仮数部を作成するステップと、前記データ幅を拡張した仮数部を用いて、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算するステップとを有する。
【００２８】
更に、本発明は、好ましくは、前記加算ステップは、前記指数部が２番目に最大値のグループの仮数部の総和結果と、前記指数部が最大値のグループの仮数部の総和結果との桁合わせを行うステップと、前記指数部が最大値のグループの総和結果と、前記桁合わせされた前記指数部が２番目に最大値のグループの仮数部の総和結果とを加算するステップを有する。
【００２９】
更に、本発明は、好ましくは、前記仮数部の加算結果と、前記指数部の上位ビットとから前記浮動小数点データを作成するステップを有する。
【発明の効果】
【００３０】
本発明では、指数部が最大値のグループの演算結果には、指数値が２以上小さいグループの演算結果が、影響しないことから、指数部が最大値のグループと、指数部が２番目に最大値のグループのみの総和を演算し、指数部が最大値のグループと、指数部が２番目に最大値のグループの総和同士を加算することにより、数値の計算順序に関係なく計算しても、計算結果の同一性を保証できる。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施の形態を、コンピュータシステムの構成、リダクション機構の構成、第１の実施の形態、第２の実施の形態、他の実施の形態の順で説明するが、本発明は、この実施の形態に限られない。
【００３２】
――コンピュータシステムの構成――
図１は、本発明のコンピュータシステムの一実施の形態の構成図、図２は、図１のノードのブロック図、図３は、図１のネットワークアダプタのブロック図、図４は、図１の転送データのフレームフォーマット図である。
【００３３】
図１は、コンピュータシステムとして、並列計算機を示す。図１に示すように、並列計算機は、複数（ここでは、４つ）のノード１０，１１，１２，１３と、２つのクロスバースイッチ（図中、ＳＷＡ，ＳＷＢ）２０，２１と，リダクション機構２２とを有する。各ノード１０，１１，１２，１３は、３つのネットワークアダプタ（図中、Ａ，Ｂ，Ｃで示す）１４Ａ，１４Ｂ，１４Ｃを有する。各ノード１０，１１，１２，１３のネットワークアダプタ１４Ａ，１４Ｂは、各々クロスバースイッチ２０，２１を介して、相互に通信する。又、各ノード１０，１１，１２，１３のネットワークアダプタ１４Ｃは、リダクション機構２２と通信する。即ち、各ノード１０，１１，１２，１３のネットワークアダプタ１４Ａ，１４Ｂ，１４Ｃのそれぞれは、Ｅｔｈｅｒｎｅｔ（登録商標）等のインターフェースで、伝送路を介し、クロスバースイッチ２０，２１，リダクション機構２２に接続される。
【００３４】
このノード１０（１１，１２，１３）は、図２に示すように、ＣＰＵ４０と、メモリ４４と、ＩＯアダプタ４６と、前述のネットワークアダプタ１４Ａ〜１４Ｃとが、システムコントローラ４２を介して接続された計算機である。又、このＣＰＵ４０，メモリ４４、ＩＯアダプタ４６の数は、このノードに必要な処理能力に応じて、複数設けても良い。
【００３５】
図１及び図２のネットワークアダプタ１４Ａ（１４Ｂ，１４Ｃ）は、図３に示すように、システムコントローラ４２と接続するホストインターフェイス制御回路５０と、送信制御回路５２と、伝送路に接続されるネットワークインターフェイス制御回路５４と、受信制御回路５６とで構成される。このネットワークアダプタ１４Ａ（１４Ｂ，１４Ｃ）は、ノード間やリダクション機構２２とのデータ通信を担当する。
【００３６】
ネットワークアダプタ１４Ａ（１４Ｂ，１４Ｃ）を介してデータ転送をする場合には、図４に示すようなフレーム形式で通信する。図４に示すフレーム形式は、Ｅｔｈｅｒｎｅｔ（登録商標）で使用されるフレーム形式を示しており、宛先アドレスと、送信元アドレスと、フレームタイプ（例えば、コマンド種別、データサイズ等）と、データ、フレームチエックサム（例えば、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｏｄｅ））とからなる。データ領域のデータ長（データサイズ）は、可変であり、転送データは、必要に応じて、複数個のフレームに分割して転送する。
【００３７】
――リダクション機構の構成――
図５は、図１のリダクション機構の構成図である。図５に示すように、リダクション機構２２の主要部は、各ノードからの送受信を制御するネットワーク制御部２２−１と、後述する各ノードからの浮動小数点データを所定のデータ形式に変換し、且つ演算結果を浮動小数点データに変換するデータ変換部２２−２と、データ変換後の受信データを保持するレジスタ２２−３と、リダクションの各種演算を実行する演算回路（ＡＬＵ１，ＡＬＵ２）２２−４，２２−７と、演算結果を保持するレジスタ（Ｒ１，Ｒ２）２２−５，２２−８と、データの比較を行う比較回路（ＣＭＰ）２２−６と、レジスタ２２−５，２２−８を選択するマルチプレクサ２２−９とを有する。
【００３８】
データ変換部２２−２で変換された受信データは、第１のレジスタ２２−３に保持され、第１の演算回路２２−４，第２の演算回路２２−７、比較回路２２−６に入力される。比較回路２２−６は、後述するように、指数部の上位ビットを比較する。又、第１の演算回路２２−４の演算結果は、第２のレジスタ２２−５に保持され、第１の演算回路２２−４、比較回路２２−６、第３のレジスタ２２−８に入力される。
【００３９】
更に、第３のレジスタ２２−８の保持データは、第２の演算回路２２−７に入力される。比較回路２２−６の比較結果に応じて、第１、第２の演算回路２２−４，２２−７が、加算を行う。第２のレジスタ２２−５が、指数部が最大値のグループに対応した仮数部の演算結果を保持し、第３のレジスタ２２−８が、指数部が２番目に最大値のグループに対応した仮数部の演算結果を保持する。
【００４０】
この実施の形態では、従来のリダクション機構の構成に、データ変換部２２−２、演算回路２２−７、レジスタ２２−８、マルチプレクサ２２−９が付加されている。
【００４１】
――第１の実施の形態――
図６は、本発明の浮動小数点総和演算処理の第１の実施の形態の説明図、図７は、図６のデータ変換処理の説明図、図８は、図６のデータ変換処理で補数をとる場合の処理の説明図、図９は、図５、図６の比較結果による演算処理の説明図、図１０と図１１は、演算結果を浮動小数点データに変換する処理の説明図、図１２は、指数部上位ビットと仮数部の絶対値の関係図である。
【００４２】
図６に示すように、ノード１０，１１，１２，１３は、リダクション処理すべき浮動小数点データをそのままリダクション機構２２に送り、総和の計算を指示する。
【００４３】
リダクション機構２２は、全ノードからの浮動小数点データを到着順に加算して、演算結果を全ノードに返す。この加算処理では、図７、図８で後述するデータ変換処理と、図９で後述する大小比較による加算処理と、図１０、図１１で後述する演算結果を浮動小数点データに変換する処理を実行する。そして、ノード１０，１１，１２，１３は、演算結果をリダクション機構２２から受け取る。
【００４４】
次に、このリダクション機構２２の総和演算処理を説明する。尚、以下の説明では、図１９に示した６４ビットの倍精度浮動小数点データを例に説明するが、３２ビットの単精度浮動小数点データも同様に処理できる。
【００４５】
図７に示すように、総和演算のデータ幅を決める。演算するデータの最大個数を１２７個までとする場合には、総和を求める演算では、最大７桁（２の７乗＝１２８）まで、有効桁が増大する可能性がある。そこで、先ず、浮動小数点データの仮数部の桁数（倍精度では、５２ビット）と、この桁数（７ビット）とを合計する。即ち、５２＋７＝５９ビットとなる。
【００４６】
次に、指数部の下位ビットの削減するビット数を決める。削減するビット数で表現できる桁数が、前記した合計の桁数より大きいことが条件となる。削減するビット数が、５ビットで３１桁、６ビットで６３桁（２の６乗＝６４）となる。倍精度では、前記した合計の桁数が５９ビットであり、合計値以上の削減ビット数は、指数部の下位６ビットで条件を満足する。
【００４７】
従って、必要なデータ幅は、５２（仮数部）＋７（増加桁数）＋６３（シフト量）＋２（その他）＝１２４ビットとなる。尚、その他は、仮数部の省略されている最上位桁と符号ビットの２ビットである。
【００４８】
このように、演算データ幅を決定すると、図７のように、浮動小数点データを、このデータ幅の変換データに変換する。即ち、倍精度浮動小数点データの１２４ビット幅で説明すると、仮数部の最上位桁を補填し、指数部の下位６ビットの値分、シフトした位置に、仮数部をセットする。又、仮数部以外は、「０」をセットする。尚、浮動小数点では、値がゼロ以外の場合、最上位桁の「１」が省略されているため、上述の補填が必要となる。
【００４９】
又、符号が負数を示している場合には、図８のように、１２４ビット幅に変換した後、２の補数表現に変換する。この仮数部の変換は、図５のデータ変換部２２−２が実行し、第１のレジスタ２２−３には、指数部上位ビット、変換された仮数部がセットされる。
【００５０】
次に、図９により、総和演算処理を説明する。図９において、指数１、仮数１は、新規に受信した指数部上位ビットと仮数部を表し、指数３、仮数３は、演算結果の指数部上位ビットの最大値とその仮数部を表し、仮数４は、演算結果の指数部上位ビットが２番目の最大値に対応した仮数部を表す。
【００５１】
尚、図５では、指数１、仮数１は、第１のレジスタ２２−３に、指数３、仮数３は、第２のレジスタ２２−５に、仮数４は、第３のレジスタ２２−８にセットされる。第１のレジスタ２２−３に、新規に受信した浮動小数点データの指数部上位ビットと仮数部がセットされると、比較回路２２−６は、指数１と第２のレジスタ２２−５の指数３とを比較する。
【００５２】
図９に示すように、比較回路２２−６の比較結果が指数１＞指数３＋１である場合には、指数１が最大となるため、演算回路２２−４を介し、第２のレジスタ２２−５に、指数１、仮数１を、新指数３、新仮数３としてセットし、第３のレジスタ２２−８には、指数３が、２番目の最大値でないため、「０」をセットする。
【００５３】
又、比較回路２２−６の比較結果が指数１＝指数３＋１である場合には、指数１が最大となるため、演算回路２２−４を介し、第２のレジスタ２２−５に、指数１、仮数１を、新指数３、新仮数３としてセットし、第３のレジスタ２２−８には、指数３が２番目の最大値であるため、第２のレジスタ２２−５の仮数３をセットする。
【００５４】
比較回路２２−６の比較結果が指数１＝指数３である場合には、指数１と指数３が同一の最大値グループとなるため、演算回路２２−４に、第２のレジスタ２２−５の仮数３に、仮数１を加算するよう指示し、第２のレジスタ２２−５に、指数３、仮数１＋仮数３を、新指数３、新仮数３としてセットし、第３のレジスタ２２−８の値（仮数４）は変更しない。
【００５５】
比較回路２２−６の比較結果が指数１＋１＝指数３である場合には、指数３が最大となるため、第２のレジスタ２２−５の指数３、仮数３は変更せず、指数１が、２番目の最大値であるため、演算回路２２−７に、第３のレジスタ２２−８の仮数４と、仮数１との加算を指示し、第３のレジスタ２２−８には、仮数１＋仮数４を、新仮数４としてセットする。
【００５６】
比較回路２２−６の比較結果が指数１＋１＜指数３である場合には、指数３が最大となり、指数１が２番目の最大値でないため、第２のレジスタ２２−５の指数３、仮数３、第３のレジスタ２２−８の仮数４を変更しない。
【００５７】
このようにして、指数部の上位ビットの値が最大値の指数（新指数３）と、指数部の上位ビットが最大の仮数部の演算結果（新仮数３）と、指数部の上位ビットの値が２番目に最大である仮数部の演算結果（新仮数４）が得られる。
【００５８】
次に、この得られた新指数３、新仮数３、新仮数４の３つの値から、正規化した浮動小数点データへの変換処理を図１０、図１１で説明する。
【００５９】
先ず、図１０に示すように、指数部の上位ビットの値が２番目に最大である仮数部の演算結果である仮数４を、指数部の上位ビットの値が最大である仮数部に桁合わせするため６４ビット右にシフトし、上位ビットには、ビット１２３の値（オール“０”又は“１”）を補填する。次に、この桁合わせした仮数４の値と仮数３の値とを加算して、総和を求める。
【００６０】
次に、図１１に示すように、指数部上位ビットの最大値である指数３と図１０で求めた仮数の総和から、倍精度浮動小数点データに変換する。例えば、５ビット（ビット６２〜５８）の指数と、１２４ビットの仮数部とから、後述するように、１ビットの符号と、１１ビットの指数部と、５２ビットの仮数部を作成する。
【００６１】
図５では、データ変換部２２−２が、第２のレジスタ２２−５、第３のレジスタ２２−８の保持値を得て、前述の桁合わせ、総和、変換を行う。
【００６２】
図１２は、指数上位ビットと、仮数部で示される絶対値の範囲の関係図である。先ず、前述のように、指数部の下位ビットを削除し、仮数部に反映することにより、５ビット（ビット６２〜５８）の指数部と、１２４ビットの仮数部で、演算データを表現する。この仮数部は、全体の総和を求めた時にも、オーバーフローしないように、演算する最大データ数（前述の図７では、１２７個）を考慮して、決定する。
【００６３】
図１２に示すように、指数の上位ビットの値が同じグループと、グループ毎の総和を演算した結果の指数部と仮数部で表される数値の絶対値の範囲から、ある指数数グループ（ここでは、ｎ）の最下位ビットは、指数値が、２つ離れた指数値グループ（ここでは、ｎ−２）の最上位ビットより、大きい値を示す。
【００６４】
即ち、指数部が最大値のグループの演算結果には、指数値が２以上小さいグループの演算結果が、影響しないことが分かる。これは、指数部の差分により、仮数部の桁合わせを実行した時に、有効桁が無くなり、ゼロを加算する場合と同じ意味である。
【００６５】
そして、指数部が同じグループの総和を求める演算では、指数部の下位ビット（ここでは、６ビット）に応じて、仮数部をシフトして、有効桁を増やしているため、仮数部の桁落ちが生じない。このため、図９に示した指数部が同じグループ同士の演算では、演算順序に関係なく、同じ演算結果となる。
【００６６】
更に、前述のように、指数部が最大値のグループの演算結果には、指数値が２以上小さいグループの演算結果が、影響しないため、指数部が最大値のグループと、２番目に最大値のグループのみの総和を演算する。そして、指数部が最大値のグループと、２番目に最大値のグループの総和を別々に計算して、最後に、桁合わせして、両方の総和を計算することにより、数値の計算順序に関係なく計算しても、計算結果の同一性を保証できる。
【００６７】
次に、図１３、図１４、図１５により、実際の数値を入れた実施例を説明する。ここでは、ＩＥＥＥ規格の倍精度浮動小数点形式データで、指数部の下位６ビットを削除し、仮数部を拡張し、演算データが４個の例で説明する。又、数値の表現は、全て１６進数値で表現し、ビット数が「４」に満たない場合は、右つめで表現する。
【００６８】
図１３は、データ１，２，３，４の指数部の下位６ビットを削除し、仮数部を拡張した変換データを示す。尚、データ１，２，３，４は、おのおの、１０進数値表現で、「２．５９４０７３３８５３６５４１Ｅ＋１８」、「２．８８２３０３７６１５１７１２Ｅ＋１８」、「−２．２６６７３５９１１７７７４３Ｅ＋２３」、「２．２６６７７０４９９４２２５７Ｅ＋２３」である。尚、「Ｅ＋１８」は、１０の１８乗を示す。
【００６９】
図１３のように、データ１は、変換前は、指数＝４４Ｃであり、仮数＝８  ００１８  ００００  ００００であり、符号は、＋である。途中１で、省略されている最上位桁「１」を補填し、仮数部を１２４ビットに拡張する。次に、指数部の下位６ビット（＝０Ｃ）により、１２４ビットの仮数部を、左に１２ビットシフトする。指数部は、上位５ビットを記憶する。この５ビットの指数値が指数グループを示す。
【００７０】
データ２も同様であり、符号が負数を示すため、変換データの補数演算を追加している。以下、同様にして、データ３，４の変換データを得る。
【００７１】
次に、データ１，２，３，４は、それぞれ、指数値グループ毎に、演算される。図１３から理解されるように、データ１と２は、同じ指数値グループであり、データ３，４は、別の同じ指数値グループである。図１４に示すように、データ１の仮数部とデータ２の仮数部を加算して、指数値グループ（指数＝１１）の仮数３（図９参照）を得る。
【００７２】
次に、同様に、データ３の仮数部とデータ４の仮数部を加算して、指数値グループ（指数＝１０）の仮数４（図９参照）を得る。そして、仮数４は、仮数３に比べて、指数部が、６４（＝６ビット）違うので、図１０の原理で、指数部を合わせるため、仮数４を右に６４ビットシフトする。そして、そのシフトした値を、仮数３に加算して、最終演算結果を求める。
【００７３】
この最終演算結果を、図１５のように、倍精度浮動小数点形式に変換する。途中１では、指数グループが上位５ビットで示されているため、省略されている下位６ビットにゼロを補填する。次に、途中２では、倍精度浮動小数点の仮数部の有効桁数が、５３ビットのため、５３ビットの仮数部に変換する。この時、仮数部の５３ビットの左端が「１」になるように変換する。図１５では、下位５３ビットを左に、３ビットシフトした値が、仮数部となり、左に３ビットシフトしたので、指数部を「−３」の値に変更する。変換後の符号は、１２４ビットの仮数部の左端の値がそのまま符合ビットとなる。
【００７４】
途中３では、５３ビットの仮数部の中で、左端の１ビットは省略するので、浮動小数点形式で使用するのは、５２ビットとなる。変換後は、１ビットの符号ビットと、１１ビットの指数部と、５２ビットの仮数部からなる倍精度浮動小数点形式のデータが得られる。
【００７５】
――第２の実施の形態――
図１６は、本発明の第２の実施の形態の浮動小数点総和演算処理の説明図、図１７は、そのリダクション機構の構成図、図１８は、図１７の比較結果と演算処理の関係図である。この実施の形態は、ノード内に複数のＣＰＵ４０が存在し、最初にノード内で、ノード内の浮動小数点総和演算を実施してから、次に、リダクション機構２２で、全ノードの浮動小数点総和演算を実施する例である。
【００７６】
図１６に示すように、各ノード１０，１１，１２，１３は、複数のＣＰＵの浮動小数点データ総和演算を、前述の図7〜図９の処理により、指数値グループ毎の総和を求める。そして、求められ指数部と仮数部を、リダクション機構２２に送り、ノード間の総和の計算を指示する。
【００７７】
リダクション機構２２は、図１７に示すように、図５の構成に比し、データ変換部２２−２を備えていない。即ち、変換された指数部と仮数部とが送られるため、変換動作は必要ない。そして、リダクション機構２２は、全ノードからの指数部と仮数部のデータを到着順に加算して、演算結果を全ノードに返す。この加算処理では、図１８で後述する大小比較による加算処理を実行する。そして、ノード１０，１１，１２，１３は、演算結果をリダクション機構２２から受け取り、図１０と図１１で示した正規化した浮動小数点データを作成する。
【００７８】
次に、リダクション機構２２の総和演算処理を、図１８で説明する。図１８において、図９と同様に、指数１、仮数１は、新規に受信した指数部上位ビットと仮数部を表し、仮数２は、新規に受信したデータの指数部上位ビットが２番目の最大値に対応した仮数部、指数３、仮数３は、演算結果の指数部上位ビットの最大値とその仮数部を表し、仮数４は、演算結果の指数部上位ビットが２番目の最大値に対応した仮数部を表す。
【００７９】
又、図１７では、指数１、仮数１、仮数２は、第１のレジスタ２２−３に、指数３、仮数３は、第２のレジスタ２２−５に、仮数４は、第３のレジスタ２２−８にセットされる。第１のレジスタ２２−３に、新規に受信した浮動小数点データの指数部上位ビットと仮数部がセットされると、比較回路２２−６は、指数１と第２のレジスタ２２−５の指数３とを比較する。
【００８０】
図１８に示すように、比較回路２２−６の比較結果が指数１＞指数３＋１である場合には、指数１が最大となるため、演算回路２２−４を介し、第２のレジスタ２２−５に、指数１、仮数１を、新指数３、新仮数３として、セットし、第３のレジスタ２２−８には、仮数２をセットする。
【００８１】
又、比較回路２２−６の比較結果が指数１＝指数３＋１である場合には、指数１が最大となるため、演算回路２２−４を介し、第２のレジスタ２２−５に、指数１、仮数１を、新指数３、新仮数３として、セットし、第３のレジスタ２２−８には、２番目の最大値が指数３であるため、演算回路２２−７で、仮数２＋仮数３を演算し、仮数２＋仮数３がセットされる。
【００８２】
比較回路２２−６の比較結果が指数１＝指数３である場合には、指数１と指数３が同一の最大値グループとなるため、演算回路２２−４に、第２のレジスタ２２−５の仮数３に、仮数１を加算するよう指示し、第２のレジスタ２２−５に、指数３、仮数１＋仮数３を、新指数３、新仮数３としてセットし、第３のレジスタ２２−８には、演算回路２２−７で、仮数２＋仮数４を演算し、仮数２＋仮数４がセットされる。
【００８３】
比較回路２２−６の比較結果が指数１＋１＝指数３である場合には、指数３が最大となるため、第２のレジスタ２２−５の指数３、仮数３を変更せず、指数１が、２番目の最大値であるため、演算回路２２−４に、第３のレジスタ２２−８の仮数４と、仮数１との加算を指示し、第３のレジスタ２２−８に、仮数１＋仮数４を、新仮数４としセットする。
【００８４】
比較回路２２−６の比較結果が指数１＋１＜指数３である場合には、指数３が最大となり、指数１が２番目の最大値でないため、第２のレジスタ２２−５の指数３、仮数３、第３のレジスタ２２−８の仮数４を変更しない。
【００８５】
このようにして、指数部の上位ビットの値が最大値の指数（新指数３）と、指数部の上位ビットが最大の仮数部の演算結果（新仮数３）と、指数部の上位ビットの値が２番目に最大である仮数部の演算結果（新仮数４）が得られる。
【００８６】
最後に、指数３、仮数３、仮数４の３つのデータを全ノードへ返す。全ノードは、受け取った指数３、仮数３、仮数４から正規化した浮動小数点データを作成する。
【００８７】
このように、ノード内で、ノード内の浮動小数点総和演算を行い、リダクション機構で、ノード間の浮動小数点総和演算を行うこともできる。
【００８８】
――他の実施の形態――
前述の実施の形態では、６４ビットの倍精度浮動小数点データで説明したが、３２ビットの単精度浮動小数点データにも適用できる。この場合には、増加桁数は、データ最大個数に依存するため、７ビットと同じであるが、シフト量は、削減するビット数が５ビットで良いため、データ幅は、２３（仮数部）＋７＋３１＋２＝６３ビットとなる。
【００８９】
又、４ノードの並列計算機で説明したが、２ノード以上の並列計算機に適用できる。又、ノードの構成を、ＣＰＵ，メモリ等のコンピュータユニットで説明したが、他のコンピュータ構成のものでも良い。更に、伝送路のフォーマットは、Ｅｔｈｅｒｎｅｔ（登録商標）に限らず、他のネットワークプロトコルを適用できる。
【００９０】
（付記１）３つ以上の浮動小数点データの総和を演算する浮動小数点データの総和演算処理方法において、前記浮動小数点データの指数部の大きさにより分けた複数のグループの前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算するステップと、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行うステップとを有することを特徴とする浮動小数点データの総和演算処理方法。
【００９１】
（付記２）前記計算ステップは、前記指数部の上位ビットを比較して、前記比較結果により、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算するステップからなることを特徴とする付記１の浮動小数点データの総和演算処理方法。
【００９２】
（付記３）前記計算ステップは、前記指数部の下位ビットの値に応じて、前記仮数部をシフトして、データ幅を拡張した仮数部を作成するステップと、前記データ幅を拡張した仮数部を用いて、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算するステップとを有することを特徴とする付記１の浮動小数点データの総和演算処理方法。
【００９３】
（付記４）前記加算ステップは、前記指数部が２番目に最大値のグループの仮数部の総和結果と、前記指数部が最大値のグループの仮数部の総和結果との桁合わせを行うステップと、前記指数部が最大値のグループの総和結果と、前記桁合わせされた前記指数部が２番目に最大値のグループの仮数部の総和結果とを加算するステップを有することを特徴とする付記１の浮動小数点データの総和演算処理方法。
【００９４】
（付記５）前記仮数部の加算結果と、前記指数部の上位ビットとから前記浮動小数点データを作成するステップを更に有することを特徴とする付記１の浮動小数点データの総和演算処理方法。
【００９５】
（付記６）複数のノードと、前記各ノードの浮動小数点データの総和を演算するリダクション機構とを有し、前記リダクション機構は、前記浮動小数点データの指数部の大きさにより分けた複数のグループの前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算し、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行うことを特徴とするコンピュータシステム。
【００９６】
（付記７）前記リダクション機構は、前記指数部の上位ビットを比較して、前記比較結果により、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算することを特徴とする付記６のコンピュータシステム。
【００９７】
（付記８）前記リダクション機構は、前記指数部の下位ビットの値に応じて、前記仮数部をシフトして、データ幅を拡張した仮数部を作成し、前記データ幅を拡張した仮数部を用いて、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算することを特徴とする付記６のコンピュータシステム。
【００９８】
（付記９）前記リダクション機構は、前記指数部が２番目に最大値のグループの仮数部の総和結果と、前記指数部が最大値のグループの仮数部の総和結果との桁合わせを行い、前記指数部が最大値のグループの総和結果と、前記桁合わせされた前記指数部が２番目に最大値のグループの仮数部の総和結果とを加算することを特徴とする付記６のコンピュータシステム。
【００９９】
（付記１０）前記リダクション機構は、前記仮数部の加算結果と、前記指数部の上位ビットとから前記浮動小数点データを作成することを特徴とする付記６のコンピュータシステム。
【０１００】
（付記１１）複数のノードと、前記各ノードの浮動小数点データの総和を演算するリダクション機構とを有し、前記各ノードは、ノード内の前記浮動小数点データの指数部の大きさにより分けた複数のグループの前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和を計算し、計算結果を前記リダクション機構に送り、前記リダクション機構は、複数ノードの指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和を計算し、計算結果を各ノードに返し、前記各ノードは、前記リダクション機構から返ってきた前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行うことを特徴とするコンピュータシステム。
【０１０１】
（付記１２）前記各ノードは、前記指数部の上位ビットを比較して、前記比較結果により、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算することを特徴とする付記１１のコンピュータシステム。
【０１０２】
（付記１３）前記各ノードは、前記指数部の下位ビットの値に応じて、前記仮数部をシフトして、データ幅を拡張した仮数部を作成し、前記データ幅を拡張した仮数部を用いて、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算することを特徴とする付記１１のコンピュータシステム。
【０１０３】
（付記１４）前記各ノードは、前記指数部が２番目に最大値のグループの仮数部の総和結果と、前記指数部が最大値のグループの仮数部の総和結果との桁合わせを行い、前記指数部が最大値のグループの総和結果と、前記桁合わせされた前記指数部が２番目に最大値のグループの仮数部の総和結果とを加算することを特徴とする付記１１のコンピュータシステム。
【０１０４】
（付記１５）前記各ノードは、前記仮数部の加算結果と、前記指数部の上位ビットとから前記浮動小数点データを作成することを特徴とする付記１１のコンピュータシステム。
【０１０５】
（付記１６）複数のノードと、前記各ノードの浮動小数点データの総和を演算するリダクション機構とを有し、前記各ノードは、ノード内の前記浮動小数点データの指数部の大きさにより分けた複数のグループの前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和を計算し、その計算結果を前記リダクション機構に送り、前記リダクション機構は、複数ノードの指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和を計算し、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行う、ことを特徴とするコンピュータシステム。
【０１０６】
（付記１７）コンピュータに、３つ以上の浮動小数点データの総和を演算させるプログラムであって、前記浮動小数点データの指数部の大きさにより分けた複数のグループの前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和とを計算するステップと、前記指数部が最大値のグループの仮数部の総和と、前記指数部が２番目に最大値のグループの仮数部の総和との加算を行うステップとを、前記コンピュータに実行させることを特徴とするプログラム。
【産業上の利用可能性】
【０１０７】
指数部が最大値のグループの演算結果には、指数値が２以上小さいグループの演算結果が、影響しないことから、指数部が最大値のグループと、２番目に最大値のグループのみの総和を演算し、指数部が最大値のグループと、２番目に最大値のグループの総和同士を加算することにより、数値の計算順序に関係なく計算しても、計算結果の同一性を保証できる。
【図面の簡単な説明】
【０１０８】
【図１】本発明の一実施の形態のコンピュータシステムの構成図である。
【図２】図１のノードの構成図である。
【図３】図１及び図２のネットワークアダプタの構成図である。
【図４】図１の伝送フレームのフォーマット図である。
【図５】図１のリダクション機構の構成図である。
【図６】本発明の第１の実施の形態の浮動小数点データの総和演算処理の説明図である。
【図７】図６のデータ変換処理の説明図である。
【図８】図７の補数データ作成処理の説明図である。
【図９】図５の比較結果と演算処理の関係図である。
【図１０】図６の総和加算処理の説明図である。
【図１１】図６の浮動小数点データへの変換処理の説明図である。
【図１２】図６の指数の上位ビットと、仮数部の絶対値の関係図である。
【図１３】図６のデータ変換処理の実施例の説明図である。
【図１４】図６の総和加算処理の実施例の説明図である。
【図１５】図６の浮動小数点データへの変換処理の実施例の説明図である。
【図１６】本発明の第２の実施の形態の浮動小数点データの総和演算処理の説明図である。
【図１７】図１６のリダクション機構の構成図である。
【図１８】図１７の比較結果と演算処理の関係図である。
【図１９】浮動小数点データのフォーマットの説明図である。
【図２０】従来の浮動小数点データの総和演算処理の説明図である。
【図２１】図２０の計算順序を入れ替えた、従来の浮動小数点データの総和演算処理の説明図である。
【図２２】従来の計算順序を守らなくても良い浮動小数点データの総和演算処理の説明図である。
【符号の説明】
【０１０９】
１０，１１，１２，１３  ノード
１４Ａ，１４Ｂ，１４Ｃ  ネットワークアダプタ
２０，２１  クロスバースイッチ
２２  リダクション機構（浮動小数点総和演算回路）
４０  ＣＰＵ
４２  システムコントローラ
４４  メモリ
４６  ＩＯアダプタ
５０  ホスト  インターフェイス制御回路
５２  送信制御回路
５４  ネットワーク  インターフェイス制御回路
５６  受信制御回路
【図１】
0004413198.tif 000002
【図２】
0004413198.tif 000003
【図３】
0004413198.tif 000004
【図４】
0004413198.tif 000005
【図５】
0004413198.tif 000006
【図６】
0004413198.tif 000007
【図７】
0004413198.tif 000008
【図８】
0004413198.tif 000009
【図９】
0004413198.tif 000010
【図１０】
0004413198.tif 000011
【図１１】
0004413198.tif 000012
【図１２】
0004413198.tif 000013
【図１３】
0004413198.tif 000014
【図１４】
0004413198.tif 000015
【図１５】
0004413198.tif 000016
【図１６】
0004413198.tif 000017
【図１７】
0004413198.tif 000018
【図１８】
0004413198.tif 000019
【図１９】
0004413198.tif 000020
【図２０】
0004413198.tif 000021
【図２１】
0004413198.tif 000022
【図２２】
0004413198.tif 000023