(57)【要約】【課題】Ｄｅｋｋｅｒの方法をＳＩＭＤ方式の演算において高速に実行すること。【解決手段】演算処理装置は、加算誤差を使用するプログラムをコンパイルするコンパイラと、コンパイラからの複数の命令を格納する記憶手段と、記憶手段から読み出した命令に基づき、複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器とを有し、演算器は、複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群を有するＳＩＭＤ用レジスタと、第１のレジスタ群及び第２のレジスタ群から入力される２つの入力値をＳＩＭＤ方式に基づいて演算する演算手段とを有し、演算手段は、２つの入力値の絶対値を比較し、絶対値の大きい値又は等しい値を第１の値として出力する第１の演算手段と、２つの入力値の絶対値を比較し、絶対値の小さい値又は等しい値を第２の値として出力する第２の演算手段と、第１の値及び第２の値を使用した加減算を実行する第３の演算手段とを有する。【選択図】図１
2010049611.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器であって、
複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群を有するＳＩＭＤ用レジスタと、
前記第１のレジスタ群及び前記第２のレジスタ群から入力される２つの入力値をＳＩＭＤ方式に基づいて演算する演算手段とを有し、
前記演算手段は、
前記２つの入力値の絶対値を比較し、絶対値の大きい値又は等しい値を第１の値として出力する第１の演算手段と、
前記２つの入力値の絶対値を比較し、絶対値の小さい値又は等しい値を第２の値として出力する第２の演算手段と、
前記第１の値及び前記第２の値を使用した加減算を実行する第３の演算手段と、を有する演算器。
【請求項２】
前記第１及び第２の演算手段による演算結果を前記ＳＩＭＤ用レジスタに入力するレジスタ用入力手段と、
前記レジスタ用入力手段を制御する命令制御手段とを有し、
前記ＳＩＭＤ用レジスタは、複数のレジスタからなる第３のレジスタ群をさらに有し、
前記命令制御手段は、前記第１の値を前記第３のレジスタ群に入力し、前記第２の値を前記第１のレジスタ群に入力するよう前記レジスタ用入力手段を制御する
ことを特徴とする請求項１記載の演算器。
【請求項３】
前記ＳＩＭＤ用レジスタからのデータを前記第１乃至第３の演算手段に出力するレジスタ用出力手段を有し、
前記命令制御手段は、前記第３の演算手段の加減算結果を前記第３のレジスタ群に入力するよう前記レジスタ用入力手段を制御し、前記第１乃至第３のレジスタ群からの出力を前記第１乃至第３の演算手段のいずれかに入力するよう前記レジスタ用出力手段を制御する
ことを特徴とする請求項２記載の演算器。
【請求項４】
ＩＥＥＥ７５４規格で定義される浮動小数点演算を行うものであって、前記第１及び第２のレジスタ群に格納される値は、符号ビット、指数部及び仮数部からなり、
前記第１及び第２のレジスタ群から入力される２つの入力の符号ビットを除き指数部及び仮数部を比較する比較手段と、
前記比較手段の比較結果に基づき、前記２つの入力値のいずれかを前記第１の値又は前記第２の値として出力する選択手段と
を有することを特徴とする請求項１乃至３のいずれか１項記載の演算器。
【請求項５】
前記命令制御手段からの指示に応じて、前記比較手段の比較結果を変換せずに出力するか若しくは反対の値に変換して出力する処理手段をさらに有し、
前記選択手段は、前記処理手段により出力された前記比較結果に基づき、前記２つの入力値のいずれかを前記第１の値又は前記第２の値として出力する
ことを特徴とする請求項２又は３に従属する請求項４記載の演算器。
【請求項６】
前記第３の演算手段は、前記第１の値と前記第２の値を加算し、当該加算結果から前記第１の値を減算し、前記第２の値から当該減算結果を減算する
ことを特徴とする請求項１乃至５のいずれか１項記載の演算器。
【請求項７】
倍精度加算結果の計算誤差を算出するものである
ことを特徴とする請求項１乃至６のいずれか１項記載の演算器。
【請求項８】
加算誤差を使用するプログラムをコンパイルするコンパイラと、
前記コンパイラからの複数の命令を格納する記憶手段と、
前記記憶手段から読み出した命令に基づき、複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器とを有し、
前記演算器は、
複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群を有するＳＩＭＤ用レジスタと、
前記第１のレジスタ群及び前記第２のレジスタ群から入力される２つの入力値をＳＩＭＤ方式に基づいて演算する演算手段とを有し、
前記演算手段は、
前記２つの入力値の絶対値を比較し、絶対値の大きい値又は等しい値を第１の値として出力する第１の演算手段と、
前記２つの入力値の絶対値を比較し、絶対値の小さい値又は等しい値を第２の値として出力する第２の演算手段と、
前記第１の値及び前記第２の値を使用した加減算を実行する第３の演算手段と、を有する演算処理装置。
【請求項９】
前記演算器は、
前記第１及び第２の演算手段による演算結果を前記ＳＩＭＤ用レジスタに入力するレジスタ用入力手段と、
前記レジスタ用入力手段を制御する命令制御手段とを有し、
前記ＳＩＭＤ用レジスタは、複数のレジスタからなる第３のレジスタ群をさらに有し、
前記命令制御手段は、前記第１の値を前記第３のレジスタ群に入力し、前記第２の値を前記第１のレジスタ群に入力するよう前記レジスタ用入力手段を制御する
ことを特徴とする請求項８記載の演算処理装置。
【請求項１０】
前記コンパイラは、前記２つの入力値の絶対値を比較させ、絶対値の大きい値又は等しい値を前記第１の値として前記第３のレジスタ群に格納させる第１の命令と、前記２つの入力値の絶対値を比較させ、絶対値の小さい値又は等しい値を前記第２の値として前記第１のレジスタ群に格納させる第２の命令と、前記第１の値及び第２の値を使用して前記演算手段により演算を実行させる第３の命令とを生成し、前記記憶手段へ格納し、
前記演算器は、命令判定手段を有し、前記記憶手段から読み出した前記第１乃至第５の命令を前記命令制御手段に入力する
ことを特徴とする請求項９記載の演算処理装置。
【請求項１１】
前記演算器は、前記ＳＩＭＤ用レジスタからのデータを前記第１乃至第３の演算手段に出力するレジスタ用出力手段を有し、
前記命令制御手段は、前記第３の演算手段の加減算結果を前記第３のレジスタ群に入力するよう前記レジスタ用入力手段を制御し、前記第１乃至第３のレジスタ群からの出力を前記第１乃至第３の演算手段のいずれかに入力するよう前記レジスタ用出力手段を制御する
ことを特徴とする請求項９記載の演算処理装置。
【請求項１２】
前記演算器は、
ＩＥＥＥ７５４規格で定義される浮動小数点演算を行うものであって、前記第１及び第２のレジスタ群に格納される値は、符号ビット、指数部及び仮数部からなり、
前記第１及び第２のレジスタ群から入力される２つの入力の符号ビットを除き指数部及び仮数部を比較する比較手段と、
前記比較手段の比較結果に基づき、前記２つの入力値のいずれかを前記第１の値又は前記第２の値として出力する選択手段と
を有することを特徴とする請求項７乃至１０のいずれか１項記載の演算処理装置。
【請求項１３】
前記演算器は、
前記命令制御手段からの指示に応じて、前記比較手段の比較結果を変換せずに出力するか若しくは反対の値に変換して出力する処理手段をさらに有し、
前記選択手段は、前記処理手段により出力された前記比較結果に基づき、前記２つの入力値のいずれかを前記第１の値又は前記第２の値として出力する
ことを特徴とする請求項９乃至１１のいずれか１項に従属する請求項１２記載の演算器。
【請求項１４】
倍精度加算結果の計算誤差を算出するものである
ことを特徴とする請求項７乃至１３のいずれか１項記載の演算処理装置。
【請求項１５】
複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器の演算方法であって、
複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群からの２つの入力の絶対値を比較し、絶対値が大きい値又は等しい値を第１の値として複数のレジスタからなる第３のレジスタ群へ格納する第１のステップと、
前記第１のレジスタ群及び前記第２のレジスタ群からの２つの入力の絶対値を比較し、絶対値が小さい値又は等しい値を第２の値として第１のレジスタ群へ格納する第２のステップと、
前記第３のレジスタ群に格納された第１の値及び前記第１のレジスタ群に格納された第２の値を使用して演算を実行する第３のステップと、を含む演算方法。
【請求項１６】
前記第３のステップは、前記第３のレジスタ群からの前記第１の値と前記第１のレジスタ群からの前記第２の値を加算し、当該加算結果を前記第２のレジスタ群に格納し、
前記第２のレジスタ群からの当該加算結果から前記第３のレジスタ群からの前記第１の値を減算し、当該減算結果を前記第３のレジスタ群に格納する第４のステップと、
前記第１のレジスタ群からの前記第２の値から前記第３のレジスタ群からの当該減算結果を減算する第５のステップと、
をさらに含むことを特徴とする請求項１５記載の演算方法。
【請求項１７】
複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器の命令列を生成するコンパイラであって、
複数のレジスタからなる第１のレジスタ群、第２のレジスタ群及び第３のレジスタ群を有するＳＩＭＤ用レジスタの前記第１のレジスタ群及び前記第２のレジスタ群から出力される２つのデータを演算手段に入力し、絶対値を比較させ、絶対値が大きい値又は等しい値を第１の値として前記第３のレジスタ群に格納させる第１の命令と、
前記第１のレジスタ群及び前記第２のレジスタ群から出力される２つのデータを演算手段に入力し、絶対値を比較させ、絶対値が小さい値又は等しい値を第２の値として前記第１のレジスタ群に格納させる第２の命令と、
前記第１の値及び第２の値を使用して前記演算手段により演算を実行させる第３の命令と、を生成するコンパイラ。
【請求項１８】
前記第３の命令は、前記第３のレジスタ群からの前記第１の値と前記第１のレジスタ群からの前記第２の値を前記演算手段に入力し、加算させ、当該加算結果を前記第２のレジスタ群に格納させ、
前記第２のレジスタ群からの当該加算結果から前記第３のレジスタ群からの前記第１の値を減算させ、当該減算結果を前記第３のレジスタ群に格納させる第４の命令と、
前記第１のレジスタ群からの前記第２の値から前記第３のレジスタ群からの当該減算結果を減算させる第５の命令とを更に生成する
ことを特徴とする請求項１７記載のコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算を一の命令で実行するシングル命令マルチデータ（ＳＩＭＤ（Single Instruction Multiple Data））方法の演算で計算誤差を求めるＳＩＭＤ演算器、ＳＩＭＤ演算器の演算方法、演算処理装置及びコンパイラに関する。
【背景技術】
【０００２】
ハードウェアの倍精度演算器を利用した高精度演算方法として、Double-Double形式の演算がある。Double-double形式とは倍精度形式６４ビットを２ワード使用した浮動小数点形式の演算である。ｈｉ（ＭＳＢ側）、ｌｏ（ＬＳＢ側）として２つのワードを用いた１０６ビットの精度で演算が可能である。
Double-double形式の加算：（ｃ．ｈｉ，ｃ．ｌｏ）＝（ａ．ｈｉ，ａ．ｌｏ）+（ｂ．ｈｉ，ｂ．ｌｏ）
ここで、下記のようにおく。ｆｌ（ｏｐ（Ａ））は、ｏｐ（Ａ）を正規化した結果、ｅｒｒ（ｏｐ（Ａ））は、ｏｐ（Ａ）の演算誤差を示す。
ａ．ｈｉ＋ｂ．ｈｉ＝ｆｌ（ａ．ｈｉ＋ｂ．ｈｉ）＋ｅｒｒ（ａ．ｈｉ＋ｂ．ｈｉ）＝ｆｌ．ｈｉ＋ｅｒｒ．ｈｉ
ａ．ｌｏ＋ｂ．ｌｏ＝ｆｌ（ａ．ｌｏ＋ｂ．ｌｏ）＋ｅｒｒ（ａ．ｌｏ＋ｂ．ｌｏ）＝ｆｌ．ｌｏ＋ｅｒｒ．ｌｏ
この形式で加算をするためには、倍精度加算結果の計算誤差を算出する必要がある。この方法として、Ｄｅｋｋｅｒの方法と、Ｋｎｕｔｈの方法が知られている（非特許文献１）。
【０００３】
Ｋｎｕｔｈの方法は下記の６命令からなる。ａ、ｂの２つの入力から計算誤差ｙが求まる。＋は加算、−は減算を示す。
ｘ←ａ＋ｂ
ｂｖｉｒｔｕａｌ←ｘ−ａ
ａｖｉｒｔｕａｌ←ｘ−ｂｖｉｒｔｕａｌ
ｂｒｏｕｎｄｏｆｆ←ｂ−ｂｖｉｒｔｕａｌ
ａｒｏｕｎｄｏｆｆ←ａ−ａｖｉｒｔｕａｌ
ｙ←ａｒｏｕｎｄｏｆｆ＋ｂｒｏｕｎｄｏｆｆ
しかしながら、Ｋｎｕｔｈの方法では計算誤差算出に必要な演算数が多いという問題点がある。
【０００４】
これに対し、Ｄｅｋｋｅｒの方法であると、下記の３命令で演算することができる。
ｘ←ａ＋ｂ
ｂｖｉｒｔｕａｌ←ｘ−ａ
ｙ←ｂ−ｂｖｉｒｔｕａｌ
ここで、Ｄｅｋｋｅｒの方法では、|ａ|＞|ｂ|が前提となっている。
【０００５】
このように、Ｄｅｋｋｅｒの方法は、Ｋｎｕｔｈの方法と比べると計算誤差算出に必要な演算数が少ないというメリットがある。
【０００６】
ところで、関連する技術として特許文献１には、複数のデータを処理するための複数のプロセッサエレメント（ＰＥ）を有するＳＩＭＤ型マイクロプロセッサが開示されている。特許文献１にかかるＳＩＭＤ型マイクロプロセッサの各ＰＥは、各々が複数の比較手段と、各比較手段にそれぞれ接続される複数の演算レジスタを有し、前記比較手段においては、前記演算レジスタの値と単一の即値との比較が行われ、各々の比較結果の論理演算結果を各ＰＥの演算の実行、非実行を制御する条件レジスタに格納するものである。これにより、簡単な構成でかつ高速にパターンマッチングを行うことができる。
【０００７】
同様に、関連する技術として特許文献２には、ＳＩＭＤ型の並列データ処理装置における基本演算要素が開示されている。
【非特許文献１】Jonathan Richard Shewchuk, "Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates", School of Computer Science Carnegie Mellon University Pittsburgh, PA 15213
【特許文献１】特開２００４−１９２４０５号公報
【特許文献２】特公平０７−０６０４３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、非特許文献１にかかるＤｅｋｋｅｒの方法では、倍精度加算する２変数の絶対値の大小が演算前に自明である必要がある。従って、Ｄｅｋｋｅｒの方法では、大小比較を行い、その結果を元に動作を決定する（条件判定する）ため、ＣＰＵ（Central Processing Unit）の命令パイプラインをストール（停止）させる可能性がある。また、ベクトル演算のようにＳＩＭＤで実行される倍精度加算においては、ＳＩＭＤの２つの入力レジスタセット毎に大小関係の一致をとる必要があるため、Ｄｅｋｋｅｒの方法では演算することができないという問題点がある。
【０００９】
また、特許文献１及び２は、ＳＩＭＤ型プロセッサの一般的な技術が開示されているが、倍精度加算する２変数の絶対値の大小の判定については、何ら示唆されていない。
【００１０】
本発明は、このような問題点を解決するためになされたものであり、Dekkerの方法をＳＩＭＤ方式の演算において高速に実行することを可能とするＳＩＭＤ演算器、ＳＩＭＤ演算器の演算方法、演算処理装置及びコンパイラを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明にかかる演算器は、複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器であって、複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群を有するＳＩＭＤ用レジスタと、前記第１のレジスタ群及び前記第２のレジスタ群から入力される２つの入力値をＳＩＭＤ方式に基づいて演算する演算手段とを有し、前記演算手段は、前記２つの入力値の絶対値を比較し、絶対値の大きい値又は等しい値を第１の値として出力する第１の演算手段と、前記２つの入力値の絶対値を比較し、絶対値の小さい値又は等しい値を第２の値として出力する第２の演算手段と、前記第１の値及び前記第２の値を使用した加減算を実行する第３の演算手段と、を有する。
【００１２】
本発明にかかる演算処理装置は、加算誤差を使用するプログラムをコンパイルするコンパイラと、前記コンパイラからの複数の命令を格納する記憶手段と、前記記憶手段から読み出した命令に基づき、複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器とを有し、前記演算器は、複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群を有するＳＩＭＤ用レジスタと、前記第１のレジスタ群及び前記第２のレジスタ群から入力される２つの入力値をＳＩＭＤ方式に基づいて演算する演算手段とを有し、前記演算手段は、前記２つの入力値の絶対値を比較し、絶対値の大きい値又は等しい値を第１の値として出力する第１の演算手段と、前記２つの入力値の絶対値を比較し、絶対値の小さい値又は等しい値を第２の値として出力する第２の演算手段と、前記第１の値及び前記第２の値を使用した加減算を実行する第３の演算手段と、を有する。
【００１３】
本発明にかかる演算方法は、複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器の演算方法であって、複数のレジスタからなる第１のレジスタ群及び第２のレジスタ群からの２つの入力の絶対値を比較し、絶対値が大きい値又は等しい値を第１の値として複数のレジスタからなる第３のレジスタ群へ格納する第１のステップと、前記第１のレジスタ群及び前記第２のレジスタ群からの２つの入力の絶対値を比較し、絶対値が小さい値又は等しい値を第２の値として第１のレジスタ群へ格納する第２のステップと、前記第３のレジスタ群に格納された第１の値及び前記第１のレジスタ群に格納された第２の値を使用して演算を実行する第３のステップと、を含む。
【００１４】
本発明にかかるコンパイラは、複数の演算を単一の命令（ＳＩＭＤ）で実行する演算器の命令列を生成するコンパイラであって、複数のレジスタからなる第１のレジスタ群、第２のレジスタ群及び第３のレジスタ群を有するＳＩＭＤ用レジスタの前記第１のレジスタ群及び前記第２のレジスタ群から出力される２つのデータを演算手段に入力し、絶対値を比較させ、絶対値が大きい値又は等しい値を第１の値として前記第３のレジスタ群に格納させる第１の命令と、前記第１のレジスタ群及び前記第２のレジスタ群から出力される２つのデータを演算手段に入力し、絶対値を比較させ、絶対値が小さい値又は等しい値を第２の値として前記第１のレジスタ群に格納させる第２の命令と、前記第１の値及び第２の値を使用して前記演算手段により演算を実行させる第３の命令と、を生成する。
【発明の効果】
【００１５】
本発明によれば、Ｄｅｋｋｅｒの方法をＳＩＭＤ方式の演算において高速に実行することを可能とするＳＩＭＤ演算器、ＳＩＭＤ演算器の演算方法、演算処理装置及びコンパイラを提供することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。この実施の形態は、本発明を、複数の演算を一の命令で実行するシングル命令マルチデータ（ＳＩＭＤ）方法の演算で計算誤差を求める演算処理装置に適用したものである。本実施の形態においては、ＩＥＥＥ７５４浮動小数点形式の加算をするときに生じる加算誤差算出を、ＳＩＭＤ命令実行部で関連技術にかかる方式より少ない実行ステップ数で行うためのものである。
【００１７】
発明の実施の形態１．
図１は、本発明の実施の形態にかかる演算処理装置を示す図である。図１に示すように、加算誤差を使用するプログラム１をコンパイルするコンパイラ（翻訳装置）２と、コンパイラ２からの複数の命令を格納する主記憶部４と、主記憶部４から読み出した命令に基づき、複数の演算を一の命令で実行するシングル命令マルチデータ（ＳＩＭＤ）方法の演算で計算誤差を求めるＳＩＭＤ演算手段としてのＳＩＭＤ命令実行部６とを有する。
【００１８】
ＳＩＭＤ命令実行部６は、ＳＩＭＤ用レジスタ１７０と、演算部１８０とを備える。ＳＩＭＤ用レジスタ１７０は、複数のレジスタからなる第１のレジスタ群１７１及び第２のレジスタ群１７２を有する。また、演算部１８０は、第１の演算部１８１と、第２の演算部１８２と、第３の演算部１８３とを有する。
【００１９】
演算部１８０は、第１のレジスタ群１７１及び第２のレジスタ群１７２から入力される２つの入力値をＳＩＭＤ方式に基づいて演算する。その際、第１の演算部１８１は、２つの入力値の絶対値を比較し、絶対値の大きい値又は等しい値を第１の値として出力する。また、第２の演算部１８２は、２つの入力値の絶対値を比較し、絶対値の小さい値又は等しい値を第２の値として出力する。そして、第３の演算部１８３は、第１の値及び第２の値を使用した加減算を実行する。
【００２０】
本発明の実施の形態にかかる演算処理装置においては、加算誤差を使用するプログラム（プログラムコード）１が、コンパイラ２に入力され、実行可能な命令形式に変換される。この変換結果が主記憶部４に格納される。主記憶部４は、ＳＩＭＤ命令実行部６の指示に応じて、命令を送出する。ＳＩＭＤ命令実行部６は、必要あれば、主記憶部４に入力データを要求した後、命令に従って、ＳＩＭＤ方式で、比較や加減算処理を実行する。ＳＩＭＤ命令実行部６は、必要あれば、適宜、主記憶部４に、演算結果を出力する。
【００２１】
本実施の形態においては、第１の演算部１８１が第１のレジスタ群１７１及び第２のレジスタ群１７２のレジスタ値の絶対値の大小関係を判定し、入力データの絶対値の大きい値又は等しい値を、第１のレジスタ群１７１に出力する。同様に、第２の演算部１８２が第１のレジスタ群１７１及び第２のレジスタ群１７２のレジスタ値の絶対値の大小関係を判定し、入力データの絶対値の小さい値又は等しい値を、第２のレジスタ群１７２に出力する。このように大小関係が特定された第１のレジスタ群１７１の値と第２のレジスタ群１７２の値を使用すれば、ＳＩＭＤ方式の演算において上述したＤｅｋｋｅｒの方法により、倍精度加算結果の計算誤差を高速に算出することができる。
【００２２】
発明の実施の形態２．
次に、本発明の第２の実施の形態について説明する。図２は、本発明の実施の形態にかかる演算処理装置１０の構成を示すブロック図である。図２に示すように、演算処理装置１０は、プログラム１が入力される翻訳装置（コンパイラ）２と、演算装置３と、主記憶部４とを有する。演算装置３は、命令判定部５と、複数の演算を一の命令で実行するシングル命令マルチデータ（ＳＩＭＤ）方法の演算で計算誤差を求めるＳＩＭＤ演算器として機能するＳＩＭＤ命令実行部６とを有する。
【００２３】
このように構成された演算処理装置１０においては、加算誤差を使用するプログラム１が、プログラムの入力により翻訳装置２に入力され、実行可能な命令形式に変換される。この変換結果が、命令の格納Ｓ１により、主記憶部４に格納される。主記憶部４は、演算装置３の指示に応じて、演算装置３の命令判定部５に、命令の入力Ｓ２を送出する。命令判定部５は、命令の入力Ｓ２に応じ、ＳＩＭＤ命令実行部６に、命令実行制御Ｓ３を送出する。
【００２４】
ＳＩＭＤ命令実行部６は、必要あれば、主記憶部４に入力データ要求をし、演算データ入力Ｓ４を主記憶部４から受信した後、命令実行制御Ｓ３によって指示された命令を実行する。ＳＩＭＤ命令実行部６は、必要あれば、適宜、主記憶部４に、演算結果出力Ｓ５を送出する。
【００２５】
図３は、ＳＩＭＤ命令実行部６の詳細を示す図である。図３に示すように、ＳＩＭＤ命令実行部６は、レジスタ入力部クロスバ１６、ＳＩＭＤ用レジスタ１７、レジスタ出力部クロスバ１１、演算部１８、命令制御部３０を有する。
【００２６】
また、ＳＩＭＤ命令実行部６が実行する命令について予め説明する。下記はその命令列を示す。
ＶＦＣＲＧ  Ｖ２，Ｖ０，Ｖ１    ：Ｖ２（ｉ）←｛Ｖ０（ｉ）,Ｖ１（ｉ）｝
ＶＦＣＲＬ  Ｖ０，Ｖ０，Ｖ１    ：Ｖ０（ｉ）←｛Ｖ０（ｉ）,Ｖ１（ｉ）｝
ＶＦＡＤ  Ｖ１，Ｖ０，Ｖ２    ：Ｖ１（ｉ）←Ｖ０（ｉ）＋Ｖ２（ｉ）
ＶＦＳＢ  Ｖ２，Ｖ１，Ｖ２    ：Ｖ２（ｉ）←Ｖ１（ｉ）−Ｖ２（ｉ）
ＶＦＳＢ  Ｖ２，Ｖ０，Ｖ２    ：Ｖ２（ｉ）←Ｖ０（ｉ）−Ｖ２（ｉ）
【００２７】
まず、ＶＦＣＲＧでは、２つのデータ（Ｖ０（ｉ）、Ｖ１（ｉ））の絶対値の大小関係を調べ、絶対値の大きい値又は等しい値をＶ２（ｉ）に出力する。このとき、２つのデータ（Ｖ０、Ｖ１）の絶対値が等しい場合には、Ｖ０（ｉ）の値をＶ２（ｉ）に出力する。次に、ＶＦＣＲＬでは、２つのデータ（Ｖ０（ｉ）、Ｖ１（ｉ））の絶対値の大小関係を調べ、絶対値の小さい値又は等しい値をＶ０（ｉ）に出力する。このとき、２つのデータ（Ｖ０、Ｖ１）の絶対値が等しい場合には、Ｖ１（ｉ）の値をＶ０（ｉ）に出力する。そして、ＶＦＡＤでは、Ｖ０（ｉ）とＶ２（ｉ）を加算する。次に、ＶＦＳＢで、前述の加算結果Ｖ１（ｉ）からＶ２（ｉ）を減算する。最後に、Ｖ０（ｉ）から前述の減算結果Ｖ２（ｉ）を減算する。この５命令により、加算誤差を求めるものである。次に、この演算を行う各ブロックについて詳細に説明する。
【００２８】
ＳＩＭＤ用レジスタ１７は、複数のレジスタ（レジスタ番号０、１、・・・、Ｎ−２、Ｎ−１）を有する第１のレジスタ群１７１、第２のレジスタ群１７２及び第３のレジスタ群１７３を有する。第１のレジスタ群１７１、第２のレジスタ群１７２及び第３のレジスタ群１７３には、それぞれ、レジスタ番号ｉに対応する任意の演算対象値であるＶ０（ｉ）、Ｖ１（ｉ）及びＶ２（ｉ）が格納される。尚、ＳＩＭＤ用レジスタ１７は、本実施の形態においては、ＳＩＭＤ演算に使用するが、レジスタとして他の用途で使用することも可能である。
【００２９】
レジスタ出力部クロスバ１１は、ＳＩＭＤ用レジスタ１７からのデータを演算部１８に出力する。レジスタ入力部クロスバ１６は、演算部１８による演算結果をＳＩＭＤ用レジスタ１７に入力する。
【００３０】
尚、レジスタ入力部クロスバ１６及びレジスタ出力部クロスバ１１は、クロスバスイッチにより実現される。すなわち、縦方向に並行した複数の通信路と横方向の同様な通信路の交点にスイッチを設け、これらのスイッチ群を制御することで、対向する通信路との専有経路を動的に構築する構造を有する。
【００３１】
演算部１８は、第１の演算手段として機能するＶＦＣＲＧ（Vector Floating Compare to Return Greater values）演算実行部１２、第２の演算手段として機能するＶＦＣＲＬ（Vector Floating Compare to Return Less values）演算実行部１３、第３の演算手段として機能する浮動小数点加算器１４を有し、ＳＩＭＤ方式の演算を実行する。このＳＩＭＤ命令実行部６は、ＩＥＥＥ７５４（ＩＥＥＥ二進化浮動小数点数演算標準）規格で定義される浮動小数点演算を行うものであって、倍精度加算結果の計算誤差を算出するものである。
【００３２】
ＶＦＣＲＧ演算実行部１２は、第１のレジスタ群１７１及び第２のレジスタ群１７２から入力される２つの入力の絶対値を比較し、絶対値の大きい又は等しい方を第１の値Ｖ２（ｉ）として出力する。このとき、ＶＦＣＲＧ演算実行部１２は、絶対値の大きさが判断された結果であるＶ２（ｉ）を、レジスタ入力部クロスバ１６へ出力する。尚、２つの入力の絶対値が等しい場合、ＶＦＣＲＧ演算実行部１２は、第１のレジスタ群１７１から入力される値を第１の値Ｖ２（ｉ）として出力する。
【００３３】
ＶＦＣＲＬ演算実行部１３は、第１のレジスタ群１７１及び第２のレジスタ群１７２から入力される２つの入力の絶対値を比較し、絶対値の大きい又は等しい方を第２の値Ｖ０（ｉ）として出力する。このとき、ＶＦＣＲＬ演算実行部１３は、絶対値の大きさが判断された結果であるＶ０（ｉ）を、レジスタ入力部クロスバ１６へ出力する。尚、２つの入力の絶対値が等しい場合、ＶＦＣＲＬ演算実行部１３は、第２のレジスタ群１７２から入力される値を第２の値Ｖ０（ｉ）として出力する。
【００３４】
浮動小数点加算器１４は、Ｖ０（ｉ）、Ｖ１（ｉ）及びＶ２（ｉ）を使用して加減算をする。すなわち、上述のＶＦＡＤ及びＶＦＳＢの演算を実行する。具体的には、Ｖ０（ｉ）とＶ２（ｉ）を加算し、当該加算結果Ｖ１（ｉ）からＶ２（ｉ）を減算し、Ｖ０（ｉ）から当該減算結果Ｖ２（ｉ）を減算する。
【００３５】
命令制御部３０は、ＶＦＣＲＧ演算実行部１２の演算結果Ｖ２（ｉ）を第３のレジスタ群１７３に入力し、ＶＦＣＲＬ演算実行部１３の演算結果Ｖ０（ｉ）を第１のレジスタ群１７１に入力するようレジスタ入力部クロスバ１６を制御する。また、命令制御部３０は、浮動小数点加算器１４の加減算結果Ｖ１（ｉ）及びＶ２（ｉ）を第２のレジスタ群１７２及び第３のレジスタ群１７３に入力するようレジスタ入力部クロスバ１６を制御する。
【００３６】
また、命令制御部３０は、第１のレジスタ群１７１及び第２のレジスタ群１７２からの出力をＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３に入力するようレジスタ出力部クロスバ１１を制御する。さらに、命令制御部３０は、第１のレジスタ群１７１、第２のレジスタ群１７２及び第３のレジスタ群１７３からの出力を浮動小数点加算器１４に入力するようレジスタ出力部クロスバ１１を制御する。
【００３７】
このため、図２に戻って、コンパイラ２は、第１のレジスタ群１７１及び第２のレジスタ群１７２から出力される２つのデータを演算部１８に入力し、絶対値を比較させ、絶対値が大きい値又は等しい値である第１の値Ｖ２（ｉ）を第３のレジスタ群１７３に格納させる第１の命令と、第１のレジスタ群１７１及び第２のレジスタ群１７２から出力される２つのデータを演算部１８に入力し、絶対値を比較させ、絶対値が小さい値又は等しい値である第２の値Ｖ０（ｉ）を第１のレジスタ群１７１に格納させる第２の命令と、第３のレジスタ群１７３からの第１の値Ｖ２（ｉ）と第１のレジスタ群１７１からの第２の値Ｖ０（ｉ）を演算部１８に入力し、加算させ、当該加算結果Ｖ１（ｉ）を第２のレジスタ群１７２に格納させる第３の命令と、第２のレジスタ群１７２からの当該加算結果Ｖ１（ｉ）から第３のレジスタ群１７３からの第１の値Ｖ２（ｉ）を減算させ、当該減算結果Ｖ２（ｉ）を第３のレジスタ群１７３に格納させる第４の命令と、第１のレジスタ群１７１からの第２の値Ｖ０（ｉ）から第３のレジスタ群１７３からの当該減算結果Ｖ２（ｉ）を減算させる第５の命令とを生成する。これらの命令Ｓ１は、主記憶部４に格納され、命令の入力Ｓ２により命令判定部５に入力され、命令実行制御Ｓ３によりＳＩＭＤ命令実行部６の命令制御部３０に入力される。
【００３８】
次に、ＳＩＭＤ命令実行部６の動作について説明する。図４は、本発明の実施の形態にかかるＳＩＭＤ命令実行部６の動作を示すフローチャート図である。まず、ＳＩＭＤ命令実行部６の命令制御部３０は、命令実行制御Ｓ３を受信すると、ＳＩＭＤ用レジスタ１７にレジスタ制御Ｓ１７を送出し、レジスタ出力部クロスバ１１に出力部クロスバ制御Ｓ１８を送出し、レジスタ入力部クロスバ１６に入力部クロスバ制御Ｓ１９を送出し、演算部１８に演算部制御Ｓ１６を送出する。
【００３９】
そして、ＳＩＭＤ用レジスタ１７は、レジスタ制御Ｓ１７を受信すると、Ｖ０、Ｖ１及びＶ２の各レジスタセットから、指定されたレジスタセットの０番のレジスタに格納されている値をＶ０出力Ｓ１３、Ｖ１出力Ｓ１４及びＶ２出力Ｓ１５に送出する。例えば、Ｖ０出力Ｓ１３にＶ０の０番のレジスタを出力し、Ｖ１出力Ｓ１４にＶ１の０番のレジスタを出力する等である。以降、ＳＩＭＤ用レジスタ１７は、１サイクル毎に、１番からＮ−１番までのレジスタの値を出力する。ここでは、ＳＩＭＤ用レジスタ１７は、レジスタ制御Ｓ１７を受信し、第１のレジスタ群１７１から０番のレジスタに格納された値をＶ０出力Ｓ１３へ出力し、第２のレジスタ群１７２から０番のレジスタに格納された値をＶ１出力Ｓ１４へ出力する（ステップＳＰ１）。
【００４０】
その後、レジスタ出力部クロスバ１１は、演算部１８への入力を切り替える。レジスタ出力部クロスバ１１は、命令実行制御Ｓ３を受信した命令制御部３０が出力した出力部クロスバ制御Ｓ１８を受信すると、出力部クロスバ制御Ｓ１８によってレジスタセット番号を判定し、Ｖ０出力Ｓ１３をＶＦＣＲＧ入力Ｓ６ａに、Ｖ１出力Ｓ１４をＶＦＣＲＧ入力Ｓ７ａに送出する。
【００４１】
ＶＦＣＲＧ演算実行部１２は、ＶＦＣＲＧ入力Ｓ６ａ及びＶＦＣＲＧ入力Ｓ７ａを受信すると、すなわち、Ｖ０（ｉ）及びＶ１（ｉ）を入力すると、ＶＦＣＲＧ演算を実行し、Ｖ２（ｉ）となるＶＦＣＲＧ出力Ｓ１０を出力する（ステップＳＰ２）。ここで、ＶＦＣＲＧ出力Ｓ１０は、６４ビットデータである。そして、ＶＦＣＲＧ出力Ｓ１０は、レジスタ入力部クロスバ１６へ入力される。
【００４２】
レジスタ入力部クロスバ１６は、ＳＩＭＤ用レジスタ１７への入力を切り替える。レジスタ入力部クロスバ１６は、命令実行制御Ｓ３を受信した命令制御部３０が出力した入力部クロスバ制御Ｓ１９を受信すると、入力部クロスバ制御Ｓ１９から入力先がＶ２入力Ｓ２３であると判定する。そして、レジスタ入力部クロスバ１６は、ＶＦＣＲＧ出力Ｓ１０を受信すると、ＳＩＭＤ用レジスタ１７への入力を切り替えて、Ｖ２入力Ｓ２３へＶＦＣＲＧ出力Ｓ１０の６４ビットデータを出力する。
【００４３】
ＳＩＭＤ用レジスタ１７は、Ｖ２入力Ｓ２３の入力を、ＶＦＣＲＧ演算の入力となった番号と同じ番号のレジスタセットＶ２のレジスタに格納する。すなわち、ＳＩＭＤ用レジスタ１７は、Ｖ２（ｉ）として第３のレジスタ群１７３へ格納する（ステップＳＰ３）。例えば、ＳＩＭＤ用レジスタ１７は、最初に受信したＶ２入力Ｓ２３をＶ２の０番のレジスタに格納し、次に受信したＶ２入力Ｓ２３をＶ２の１番に格納する。つまり、ＳＩＭＤ用レジスタ１７は、Ｖ２入力Ｓ２３を受信する毎に格納先レジスタ番号を＋１し、Ｖ２入力Ｓ２３を第３のレジスタ群１７３のＮ個のレジスタに格納する。
【００４４】
続いて、ＳＩＭＤ用レジスタ１７は、レジスタ制御Ｓ１７を受信すると、ステップＳＰ１と同様に、第１のレジスタ群１７１から０番のレジスタに格納された値をＶ０出力Ｓ１３へ出力し、第２のレジスタ群１７２から０番のレジスタに格納された値をＶ１出力Ｓ１４へ出力する。
【００４５】
そして、レジスタ出力部クロスバ１１は、Ｖ０出力Ｓ１３をＶＦＣＲＬ入力Ｓ６ｂに、Ｖ１出力Ｓ１４をＶＦＣＲＬ入力Ｓ７ｂに送出する。ＶＦＣＲＬ演算実行部１３は、ＶＦＣＲＬ入力Ｓ６ｂ及びＶＦＣＲＬ入力Ｓ７ｂを受信すると、すなわち、Ｖ０（ｉ）及びＶ１（ｉ）を入力すると、ＶＦＣＲＬ演算を実行し、Ｖ０（ｉ）となるＶＦＣＲＬ出力Ｓ１１を出力する（ステップＳＰ４）。ここで、ＶＦＣＲＬ出力Ｓ１１は、６４ビットデータである。
【００４６】
そして、レジスタ入力部クロスバ１６は、ＶＦＣＲＬ出力Ｓ１１を受信すると、ＳＩＭＤ用レジスタ１７への入力を切り替えて、Ｖ０入力Ｓ２１へＶＦＣＲＬ出力Ｓ１１の６４ビットデータを出力する。その後、ＳＩＭＤ用レジスタ１７は、Ｖ０入力Ｓ２１の入力を、ＶＦＣＲＬ演算の入力となった番号と同じ番号のレジスタセットＶ０のレジスタに格納する。すなわち、ＳＩＭＤ用レジスタ１７は、Ｖ０（ｉ）として第１のレジスタ群１７１へ格納する（ステップＳＰ５）。
【００４７】
この後は、命令に従って、浮動小数点加算器１４は、演算部制御Ｓ１６に応じて加算及び減算を行う。まず、レジスタ出力部クロスバ１１は、ＳＩＭＤ用レジスタ１７のＶ０出力Ｓ１３を加算器入力Ｓ８へ、Ｖ２出力Ｓ１５を加算器入力Ｓ９へ入力する。そして、浮動小数点加算器１４は、Ｖ０（ｉ）である加算器入力Ｓ８とＶ２（ｉ）である加算器入力Ｓ９との加算を実行し、Ｖ１（ｉ）となる加算器出力Ｓ１２を出力する（ステップＳＰ６）。ここで、加算器出力Ｓ１２は、６４ビットデータである。その後、レジスタ入力部クロスバ１６は、加算器出力Ｓ１２を受信すると、ＳＩＭＤ用レジスタ１７への入力を切り替えて、Ｖ１入力Ｓ２２へ加算器出力Ｓ１２の６４ビットデータを出力する。その後、ＳＩＭＤ用レジスタ１７は、Ｖ１入力Ｓ２２の入力を、Ｖ１（ｉ）として第２のレジスタ群１７２へ格納する（ステップＳＰ７）。
【００４８】
次に、レジスタ出力部クロスバ１１は、ＳＩＭＤ用レジスタ１７のＶ１出力Ｓ１４を加算器入力Ｓ８へ、Ｖ２出力Ｓ１５を加算器入力Ｓ９へ入力する。そして、浮動小数点加算器１４は、Ｖ１（ｉ）である加算器入力Ｓ８からＶ２（ｉ）である加算器入力Ｓ９の減算を実行し、Ｖ２（ｉ）となる加算器出力Ｓ１２を出力する（ステップＳＰ８）。その後、レジスタ入力部クロスバ１６は、加算器出力Ｓ１２を受信すると、ＳＩＭＤ用レジスタ１７への入力を切り替えて、Ｖ２入力Ｓ２３へ加算器出力Ｓ１２の６４ビットデータを出力する。その後、ＳＩＭＤ用レジスタ１７は、Ｖ２入力Ｓ２３の入力を、Ｖ２（ｉ）として第３のレジスタ群１７３へ格納する（ステップＳＰ９）。
【００４９】
そして、レジスタ出力部クロスバ１１は、ＳＩＭＤ用レジスタ１７のＶ０出力Ｓ１３を加算器入力Ｓ８へ、Ｖ２出力Ｓ１５を加算器入力Ｓ９へ入力する。そして、浮動小数点加算器１４は、Ｖ０（ｉ）である加算器入力Ｓ８からＶ２（ｉ）である加算器入力Ｓ９の減算を実行し、Ｖ２（ｉ）となる加算器出力Ｓ１２を出力する（ステップＳＰ１０）。その後、レジスタ入力部クロスバ１６は、加算器出力Ｓ１２を受信すると、ＳＩＭＤ用レジスタ１７への入力を切り替えて、Ｖ２入力Ｓ２３へ加算器出力Ｓ１２の６４ビットデータを出力する。その後、ＳＩＭＤ用レジスタ１７は、Ｖ２入力Ｓ２３の入力を、Ｖ２（ｉ）として第３のレジスタ群１７３へ格納する（ステップＳＰ１１）。
【００５０】
このようにして、加算誤差が得られる。加算誤差は、第３のレジスタ群１７３に格納されるため、必要な場合に読み出すようにしてもよい。
【００５１】
次に、ＶＦＣＲＧ演算実行部１２について更に詳細に説明する。図５は、ＶＦＣＲＧ演算実行部１２の構成を示すブロック図である。ＶＦＣＲＧ演算実行部１２は、ＶＦＣＲＧ入力Ｓ６ａ及びＶＦＣＲＧ入力Ｓ７ａが入力され、ＶＦＣＲＧ入力Ｓ６ａ及びＶＦＣＲＧ入力Ｓ７ａの内、絶対値が大きい値又は等しい値をＶＦＣＲＧ出力Ｓ１０へ出力する。ＶＦＣＲＧ演算実行部１２は、ＶＦＣＲＧ入力Ｓ６ａ及びＶＦＣＲＧ入力Ｓ７ａが入力されるバッファ４１及びバッファ４２と、インバータ４３と、比較手段として機能する加算器４４と、選択手段として機能するセレクタ４５とを有する。
【００５２】
バッファ４１及び４２は、符号ビット、指数部及び仮数部からなる６４ビットのデータの格納するものである。
【００５３】
インバータ４３は、入力される６３ビットのデータの全ビットの反転を行い、加算器４４へ出力する全ビット反転部である。
【００５４】
加算器４４は、３入力の６３ビット幅加算器で、２つの６３ビットデータと、桁上がりを表わすフラグ値である＋１を入力し、２つの６３ビットデータを加算する。つまり、加算器４４は、一方が反転したデータを加算することで、減算を行うことができる。また、加算器４４は、加算及び減算の結果である演算結果に応じて、桁上がり信号を出力する。加算器４４は、例えば、演算結果がマイナスであれば０、プラス又は０であれば１を出力する比較手段として機能する。尚、演算結果が０の場合は、０を出力するようにしても構わない。
【００５５】
セレクタ４５は、２つの６４ビットデータ及び桁上がり信号を入力し、桁上がり信号の値に応じて、当該２つの６４ビットデータのいずれかをＶＦＣＲＧ出力Ｓ１０へ出力する選択手段として機能する。
【００５６】
次に、ＶＦＣＲＧ演算実行部１２の動作について説明する。ＶＦＣＲＧ演算実行部１２は、ＶＦＣＲＧ入力Ｓ６ａを受信すると、バッファ４１に格納し、符号ビットを除いて６３ビットデータＳ３２を加算器４４へ入力する。また、ＶＦＣＲＧ演算実行部１２は、ＶＦＣＲＧ入力Ｓ７ａを受信すると、バッファ４２に格納し、符号ビットを除いて６３ビットデータＳ３４をインバータ４３へ入力する。そして、インバータ４３は、６３ビットデータＳ３４の全ビットを反転し、反転６３ビットデータＳ３５として加算器４４へ入力する。
【００５７】
加算器４４は、バッファ４１から６３ビットデータＳ３２及びバッファ４２からインバータ４３を経由した反転６３ビットデータＳ３５を入力し、６３ビットデータＳ３２及び反転６３ビットデータＳ３５を加算する演算を行う。そして、加算器４４は、演算結果に応じて、ｂｉｔ６３の桁上がり信号Ｓ３６を出力する。
【００５８】
セレクタ４５は、バッファ４１から６４ビットデータＳ３１、バッファ４２から６４ビットデータＳ３３及び加算器４４から桁上がり信号Ｓ３６を入力する。そして、セレクタ４５は、桁上がり信号Ｓ３６がマイナス（０）の場合（Ｓ６ａの絶対値＜Ｓ７ａの絶対値）、６４ビットデータＳ３３をＶＦＣＲＧ出力Ｓ１０へ出力する。これにより、ＶＦＣＲＧ入力Ｓ７ａ、つまり、Ｖ１（ｉ）の方が絶対値が大きい場合に、ＶＦＣＲＧ演算実行部１２は、Ｖ１（ｉ）を選択して出力することができる。
【００５９】
また、セレクタ４５は、桁上がり信号Ｓ３６がプラス（１）の場合（Ｓ６ａの絶対値≧Ｓ７ａの絶対値）、６４ビットデータＳ３１をＶＦＣＲＧ出力Ｓ１０へ出力する。これにより、ＶＦＣＲＧ入力Ｓ６ａ、つまり、Ｖ０（ｉ）の方が絶対値が大きい場合に、ＶＦＣＲＧ演算実行部１２は、Ｖ０（ｉ）を選択して出力することができる。また、ＶＦＣＲＧ入力Ｓ６ａとＶＦＣＲＧ入力Ｓ７ａとが等しい値、つまり、Ｖ０（ｉ）とＶ１（ｉ）とが等しい値である場合、ＶＦＣＲＧ演算実行部１２は、Ｖ０（ｉ）を選択して出力することができる。
【００６０】
続いて、ＶＦＣＲＬ演算実行部１３について説明する。図６は、ＶＦＣＲＬ演算実行部１３の構成を示すブロック図である。尚、図６において、図５と同様の構成について同符号を付けており、詳細な説明は省略する。
【００６１】
ＶＦＣＲＬ演算実行部１３は、ＶＦＣＲＬ入力Ｓ６ｂ及びＶＦＣＲＬ入力Ｓ７ｂが入力され、ＶＦＣＲＬ入力Ｓ６ｂ及びＶＦＣＲＬ入力Ｓ７ｂの内、絶対値が小さい値又は等しい値をＶＦＣＲＬ出力Ｓ１１へ出力する。ＶＦＣＲＬ演算実行部１３は、ＶＦＣＲＧ演算実行部１２に比べ、加算器４４とセレクタ４５との間にインバータ４６が追加されたものである。
【００６２】
インバータ４６は、加算器４４から入力される１ビットのデータである桁上がり信号Ｓ３６のビットの反転を行い、変換後桁上がり信号Ｓ３７としてセレクタ４５へ出力するビット反転部である。
【００６３】
そのため、桁上がり信号Ｓ３６がマイナス（０）の場合（Ｓ６ｂの絶対値＜Ｓ７ｂの絶対値）、インバータ４６は、変換後桁上がり信号Ｓ３７をプラス（１）としてセレクタ４５へ出力する。そして、セレクタ４５は、プラス（１）である変換後桁上がり信号Ｓ３７を入力し、６４ビットデータＳ３１をＶＦＣＲＬ出力Ｓ１１へ出力する。これにより、ＶＦＣＲＬ入力Ｓ６ｂ、つまり、Ｖ０（ｉ）の方が絶対値が小さい場合に、ＶＦＣＲＬ演算実行部１３は、Ｖ０（ｉ）を選択して出力することができる。
【００６４】
また、桁上がり信号Ｓ３６がプラス（１）の場合（Ｓ６ｂの絶対値≧Ｓ７ｂの絶対値）、インバータ４６は、変換後桁上がり信号Ｓ３７をマイナス（０）としてセレクタ４５へ出力する。そして、セレクタ４５は、マイナス（０）である変換後桁上がり信号Ｓ３７を入力し、６４ビットデータＳ３３をＶＦＣＲＬ出力Ｓ１１へ出力する。これにより、ＶＦＣＲＬ入力Ｓ７ｂ、つまり、Ｖ１（ｉ）の方が絶対値が小さい場合に、ＶＦＣＲＬ演算実行部１３は、Ｖ１（ｉ）を選択して出力することができる。また、ＶＦＣＲＬ入力Ｓ６ｂとＶＦＣＲＬ入力Ｓ７ｂとが等しい値、つまり、Ｖ０（ｉ）とＶ１（ｉ）とが等しい値である場合、ＶＦＣＲＬ演算実行部１３は、Ｖ１（ｉ）を選択して出力することができる。
【００６５】
上述したＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３の動作により、浮動小数点データとしたときのＶＦＣＲＧ出力Ｓ１０及びＶＦＣＲＬ出力Ｓ１１の関係は、Ｓ１０の絶対値≧Ｓ１１の絶対値となる。これにより、絶対値の大小判定が行われたこととなる。そして、この後、浮動小数点加算器１４により加減算を継続することができる。そのため、本発明の実施の形態により、Ｄｅｋｋｅｒの方法をＳＩＭＤ方式の演算において高速に実行することができる。
【００６６】
その他の発明の実施の形態．
尚、上述した本発明の実施の形態１及び２では、ＩＥＥＥ７５４浮動小数点データ形式の倍精度形式（バイナリ６４）を前提として記述しているので、扱うデータ幅を６４ビットとしているが、このデータ幅に依存するものではない。単精度形式（バイナリ３２）等々、他の形式でも実現できることは勿論である。
【００６７】
尚、本発明の実施の形態２において、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３は、それぞれ別々の演算実行部としているが、これに限定されない。つまり、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３は、一つの演算実行部によりＶＦＣＲＧ演算及びＶＦＣＲＬ演算を選択的に実行可能なＶＦＣＲ演算実行部として実現しても構わない。例えば、図７に、ＶＦＣＲ演算実行部の一例をブロック図により示す。尚、図７において、図５及び図６と同様の構成について同符号を付けており、詳細な説明は省略する。
【００６８】
図７に示すＶＦＣＲ演算実行部１５は、ＶＦＣＲＧ演算実行部１２に比べ、加算器４４とセレクタ４５との間に排他的論理和４７が追加されたものである。そして、排他的論理和４７は、加算器４４から入力される桁上がり信号Ｓ３６及び命令制御部３０から入力されるＶＦＣＲ制御Ｓ３９について排他的論理和演算を行い、変換後桁上がり信号Ｓ３８をセレクタ４５へ出力する。
【００６９】
つまり、ＶＦＣＲ演算実行部１５は、第１のレジスタ群１７１及び第２のレジスタ群１７２から入力される２つの入力ＶＦＣＲ入力Ｓ６であるＶ０（ｉ）及びＶＦＣＲ入力Ｓ７であるＶ１（ｉ）の絶対値を比較し、比較結果である桁上がり信号Ｓ３６に基づき、Ｖ０（ｉ）及びＶ１（ｉ）のいずれかを絶対値の大きい値又は小さい値として出力する。そして、ＶＦＣＲ演算実行部１５は、図３の命令制御部３０から入力される指示であるＶＦＣＲ制御Ｓ３９に応じて、桁上がり信号Ｓ３６を変換せずに出力するか若しくは反対の値に変換して出力する処理手段である排他的論理和４７をさらに有し、当該処理手段により出力された比較結果である変換後桁上がり信号Ｓ３８に基づき、Ｖ０（ｉ）及びＶ１（ｉ）のいずれかを絶対値の大きい値又は小さい値として出力するものである。
【００７０】
ここで、ＶＦＣＲ制御Ｓ３９は、図３の命令制御部３０から入力される演算部制御Ｓ１６に含まれ、絶対値の大きい値又は小さい値のいずれかを出力するかを指示する１ビットのデータである。そのため、排他的論理和４７は、ＶＦＣＲ制御Ｓ３９が"０"の場合、桁上がり信号Ｓ３６の値を変換せずに変換後桁上がり信号Ｓ３８として出力する。また、排他的論理和４７は、ＶＦＣＲ制御Ｓ３９が"１"の場合、桁上がり信号Ｓ３６の値を反対の値に変換して、変換後桁上がり信号Ｓ３８として出力する。
【００７１】
これにより、ＶＦＣＲ演算実行部１５は、ＶＦＣＲＧ演算及びＶＦＣＲＬ演算をＶＦＣＲ制御Ｓ３９により選択的に実行することができる。そのため、演算部１８は、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３という２つの演算手段をＶＦＣＲ演算実行部１５の１つの演算手段で実現することができ、演算部１８の規模を抑えることができる。
【００７２】
また、本発明の実施の形態２において、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３は、浮動小数点加算器１４と別に記述しているが、浮動小数点加算器１４が有する加算器を利用することで、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３を浮動小数点加算器１４の機能の一部として実装されることも可能である。その際、命令制御部３０からの演算部制御Ｓ１６により演算部１８の演算処理を切り替えてもよい。また、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３は、固定小数点加算器、ＡＬＵ（Arithmetic and Logic Unit）など６４ビットの加算器を有する演算器の機能の一部として実装されることも可能である。
【００７３】
さらに、本発明の実施の形態１及び２では、１つの演算器で、Ｎ個のデータを処理するＳＩＭＤ命令実行部が記述されているが、演算器数をＭ個に増やした実装も可能である。
【００７４】
尚、本発明の実施の形態１において、第１の演算部１８１及び第２の演算部１８２の処理順序は、限定しない。同様に、本発明の実施の形態２において、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３の処理順序は、上述した順番と逆であっても構わない。
【００７５】
また、本発明の実施の形態１において、第１の演算部１８１及び第２の演算部１８２は、それぞれ等しい値の場合も出力することで、２つの入力値の絶対値の大小を確実に振り分けることができる。これは、本発明の実施の形態２において、ＶＦＣＲＧ演算実行部１２及びＶＦＣＲＬ演算実行部１３においても同様である。
【００７６】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【００７７】
例えば、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、ＣＰＵにコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
【図面の簡単な説明】
【００７８】
【図１】本発明の実施の形態にかかる演算処理装置を示す図である。
【図２】本発明の実施の形態にかかる演算処理装置を示す図である。
【図３】本発明の実施の形態にかかるＳＩＭＤ命令実行部の詳細を示す図である。
【図４】本発明の実施の形態にかかるＳＩＭＤ命令実行部の動作を示すフローチャートである。
【図５】本発明の実施の形態にかかるＶＦＣＲＧ演算実行部を示すブロック図である。
【図６】本発明の実施の形態にかかるＶＦＣＲＬ演算実行部を示すブロック図である。
【図７】本発明の実施の形態にかかるＶＦＣＲ演算実行部を示すブロック図である。
【符号の説明】
【００７９】
１  プログラム
２  コンパイラ
３  演算装置
４  主記憶部
５  命令判定部
６  ＳＩＭＤ命令実行部
１０  演算処理装置
１１  レジスタ出力部クロスバ
１２  ＶＦＣＲＧ演算実行部
１３  ＶＦＣＲＬ演算実行部
１４  浮動小数点加算器
１５  ＶＦＣＲ演算実行部
１６  レジスタ入力部クロスバ
１７  ＳＩＭＤ用レジスタ
１８  演算部
３０  命令制御部
４１  バッファ
４２  バッファ
４３  インバータ
４４  加算器
４５  セレクタ
４６  インバータ
４７  排他的論理和
１７０  ＳＩＭＤ用レジスタ
１７１  第１のレジスタ群
１７２  第２のレジスタ群
１７３  第３のレジスタ群
１７４  第４のレジスタ群
１８０  演算部
１８１  第１の演算部
１８２  第２の演算部
１８３  第３の演算部
Ｓ１  命令の格納
Ｓ２  命令の入力
Ｓ３  命令実行制御
Ｓ４  演算データ入力
Ｓ５  演算結果出力
Ｓ６  ＶＦＣＲ入力
Ｓ７  ＶＦＣＲ入力
Ｓ６ａ  ＶＦＣＲＧ入力
Ｓ７ａ  ＶＦＣＲＧ入力
Ｓ６ｂ  ＶＦＣＲＬ入力
Ｓ７ｂ  ＶＦＣＲＬ入力
Ｓ８  加算器入力
Ｓ９  加算器入力
Ｓ１０  ＶＦＣＲＧ出力
Ｓ１１  ＶＦＣＲＬ出力
Ｓ１２  加算器出力
Ｓ１３  Ｖ０出力
Ｓ１４  Ｖ１出力
Ｓ１５  Ｖ２出力
Ｓ１６  演算部制御
Ｓ１７  レジスタ制御
Ｓ１８  出力部クロスバ制御
Ｓ１９  入力部クロスバ制御
Ｓ２１  Ｖ０入力
Ｓ２２  Ｖ１入力
Ｓ２３  Ｖ２入力
Ｓ３１  ６４ビットデータ
Ｓ３２  ６３ビットデータ
Ｓ３３  ６４ビットデータ
Ｓ３４  ６３ビットデータ
Ｓ３５  反転６３ビットデータ
Ｓ３６  桁上がり信号
Ｓ３７  変換後桁上がり信号
Ｓ３８  変換後桁上がり信号
Ｓ３９  ＶＦＣＲ制御
【図１】
2010049611.tif 000003
【図２】
2010049611.tif 000004
【図３】
2010049611.tif 000005
【図４】
2010049611.tif 000006
【図５】
2010049611.tif 000007
【図６】
2010049611.tif 000008
【図７】
2010049611.tif 000009