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