(57)【要約】【課題】  演算器の演算効率を向上する。【解決手段】  演算器は、第１の乗算部、第２の乗算部、第１の加算部、第１の演算選択部、第２の演算選択部、第２の加算部、第３の加算部を有する。第１の乗算部は、２つの入力データを乗算して第１の演算データを算出し、第２の乗算部は、２つの入力データを乗算して第２の演算データを算出し、第１の加算部は、第１の演算データと第２の演算データとを加算して第３の演算データを算出する。第１の演算選択部は、第１の演算データおよび第３の演算データのいずれかを選択し、第２の演算選択部は、第２の演算データおよび第３の演算データのいずれかを選択する。第２の加算部は、入力データと第１の演算選択部が選択した演算データとを加算して第１の演算結果データを算出し、第３の加算部は、入力データと第２の演算選択部が選択した演算データとを加算して第２の演算結果データを算出する。【選択図】  図１
2018156266.tif 000002
【特許請求の範囲】
【請求項１】
２つの入力データを乗算して第１の演算データを算出する第１の乗算部と、
２つの入力データを乗算して第２の演算データを算出する第２の乗算部と、
前記第１の演算データと前記第２の演算データとを加算して第３の演算データを算出する第１の加算部と、
前記第１の演算データおよび前記第３の演算データのいずれかを選択する第１の演算選択部と、
前記第２の演算データおよび前記第３の演算データのいずれかを選択する第２の演算選択部と、
入力データと前記第１の演算選択部が選択した演算データとを加算して第１の演算結果データを算出する第２の加算部と、
入力データと前記第２の演算選択部が選択した演算データとを加算して第２の演算結果データを算出する第３の加算部と
を有することを特徴とする演算器。
【請求項２】
請求項１に記載の演算器において、
複数の入力データをそれぞれ保持する複数の保持部と、
前記複数の保持部のうちの２つの保持部からそれぞれ受ける２つの入力データのうち、前記第３の加算部で使用する入力データを選択する入力選択部をさらに有し、
前記第２の加算部は、前記２つの保持部の一方が保持する入力データと前記第１の演算選択部が選択した演算データとを加算して前記第１の演算結果データを算出する
ことを特徴とする演算器。
【請求項３】
請求項２に記載の演算器において、
バタフライ演算を実行する場合、
前記第１の演算選択部は、前記第１の加算部から受ける前記第３の演算データを前記第２の加算部に出力し、
前記第２の演算選択部は、前記第１の加算部から受ける前記第３の演算データを前記第３の加算部に出力し、
前記入力選択部は、前記２つの保持部の一方から受ける入力データを前記第３の加算部に出力し、
積和演算を実行する場合、
前記第１の演算選択部は、前記第１の乗算部から受ける前記第１の演算データを前記第２の加算部に出力し、
前記第２の演算選択部は、前記第２の乗算部から受ける前記第２の演算データを前記第３の加算部に出力し、
前記入力選択部は、前記２つの保持部の他方から受ける入力データを前記第３の加算部に出力する
ことを特徴とする演算器。
【請求項４】
請求項１に記載の演算器において、
複数の入力データをそれぞれ保持する複数の保持部と、
前記複数の保持部のうちの第１の保持部および第２の保持部からそれぞれ受ける２つの入力データのうち、前記第２の加算部で使用する入力データを選択する第１の入力選択部と、
前記第１の保持部および前記第２の保持部からそれぞれ受ける２つの入力データのうち、前記第３の加算部で使用する入力データを選択する第２の入力選択部と、
前記複数の保持部のうちの第３の保持部および第４の保持部からそれぞれ受ける２つの入力データのうち、前記第１の乗算部で使用する入力データを選択する第３の入力選択部と、
前記第３の保持部および前記第４の保持部からそれぞれ受ける２つの入力データのうち、前記第２の乗算部で使用する入力データを選択する第４の入力選択部とをさらに有し、
前記第１の乗算部は、前記複数の保持部のうちの第５の保持部から受ける入力データと前記第３の入力選択部から受ける入力データとを乗算して前記第１の演算データを算出し、
前記第２の乗算部は、前記複数の保持部のうちの第６の保持部から受ける入力データと前記第４の入力選択部から受ける入力データとを乗算して前記第２の演算データを算出し、
前記第２の加算部は、前記第１の入力選択部から受ける入力データと前記第１の演算選択部から受ける演算データとを加算して前記第１の演算結果データを算出し、
前記第３の加算部は、前記第２の入力選択部から受ける入力データと前記第１の演算選択部から受ける演算データとを加算して前記第２の演算結果データを算出する
ことを特徴とする演算器。
【請求項５】
請求項４に記載の演算器において、
１つのバタフライ演算を２回に分けて実行する場合、
前記第１の入力選択部は、１回目の演算と２回目の演算とで、前記第１の保持部から受ける入力データおよび前記第２の保持部から受ける入力データを交互に前記第２の加算部に出力し、
前記第２の入力選択部は、前記第１の保持部から受ける入力データおよび前記第２の保持部から受ける入力データのうち、前記第１の入力選択部が前記第２の加算部に出力する入力データと同じ入力データを、前記第３の加算部に出力し、
前記第３の入力選択部は、１回目の演算と２回目の演算とで、前記第３の保持部から受ける入力データおよび前記第４の保持部から受ける入力データを交互に前記第１の乗算部に出力し、
前記第４の入力選択部は、前記第３の保持部から受ける入力データおよび前記第４の保持部から受ける入力データのうち、前記第３の入力選択部が前記第１の乗算部に出力する入力データと異なる入力データを、前記第２の乗算部に出力し、
前記第１の演算選択部は、前記第１の加算部から受ける前記第３の演算データを前記第２の加算部に出力し、
前記第２の演算選択部は、前記第１の加算部から受ける前記第３の演算データを前記第３の加算部に出力し、
積和演算を実行する場合、
前記第１の入力選択部は、前記第１の保持部から受ける入力データを前記第２の加算部に出力し、
前記第２の入力選択部は、前記第２の保持部から受ける入力データを前記第３の加算部に出力し、
前記第３の入力選択部は、前記第３の保持部から受ける入力データを前記第１の乗算部に出力し、
前記第４の入力選択部は、前記第４の保持部から受ける入力データを前記第２の乗算部に出力し、
前記第１の演算選択部は、前記第１の乗算部から受ける前記第１の演算データを前記第２の加算部に出力し、
前記第２の演算選択部は、前記第２の乗算部から受ける前記第２の演算データを前記第３の加算部に出力する
ことを特徴とする演算器。
【請求項６】
請求項１ないし請求項５のいずれか１項に記載の演算器において、
前記第１の乗算部、前記第２の乗算部、前記第１の加算部、前記第２の加算部および前記第３の加算部の各々は、浮動小数点数の演算を実行する
ことを特徴とする演算器。
【請求項７】
請求項６に記載の演算器において、
前記第１の加算部の加算結果の仮数部の精度を入力データの仮数部の精度に基づいて丸める丸め部をさらに有する
ことを特徴とする演算器。
【請求項８】
請求項１ないし請求項７のいずれか１項に記載の演算器において、
前記第１の乗算部、前記第２の乗算部、前記第１の加算部、前記第２の加算部および前記第３の加算部を含む複数の単位演算部と、
前記複数の単位演算部のそれぞれの前記第１の演算結果データと前記第２の演算結果データとを保持するレジスタファイルと、
前記レジスタファイルが保持する前記第１の演算結果データおよび前記第２の演算結果データを前記複数の単位演算部のいずれかにフィードバックして前記複数の単位演算部が演算を繰り返して実行する場合、前記複数の単位演算部のそれぞれの前記第１の演算結果データと前記第２の演算結果データとを、フィードバック経路に応じて並べ替えて前記レジスタファイルに格納する並び替え部とをさらに有する
ことを特徴とする演算器。
【請求項９】
演算器の制御方法において、
前記演算器が有する第１の乗算部が、２つの入力データを乗算して第１の演算データを算出し、
前記演算器が有する第２の乗算部が、２つの入力データを乗算して第２の演算データを算出し、
前記演算器が有する第１の加算部が、前記第１の演算データと前記第２の演算データとを加算して第３の演算データを算出し、
前記演算器が有する第１の演算選択部が、前記第１の演算データおよび前記第３の演算データのいずれかを選択し、
前記演算器が有する第２の演算選択部が、前記第２の演算データおよび前記第３の演算データのいずれかを選択し、
前記演算器が有する第２の加算部が、入力データと前記第１の演算選択部が選択した演算データとを加算して第１の演算結果データを算出し、
前記演算器が有する第３の加算部が、入力データと前記第２の演算選択部が選択した演算データとを加算して第２の演算結果データを算出する
ことを特徴とする演算器の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算器および演算器の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等のプロセッサは、演算を実行する演算器を有する（例えば、特許文献１参照）。例えば、汎用プロセッサは、積和演算等を実行する演算器を有し、ＦＦＴ（Fast Fourier Transform）を使用する信号処理等を、積和演算を利用して実行する。また、ＦＦＴの実行に特化した演算器を有するプロセッサが提案されている（例えば、特許文献２、３参照）。この種の演算器は、ＦＦＴにおける基本演算であるバタフライ演算を実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】再表２００７／０９４０４７号公報
【特許文献２】特開平１１−８５４６６号公報
【特許文献３】特開２００３−１６０５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
汎用プロセッサが有する演算器では、ＦＦＴの実行に特化した演算器に比べて、バタフライ演算を実行する際の演算効率が低下する。なお、ＦＦＴの実行に特化した演算器では、汎用プロセッサが有する演算器に比べて、演算の汎用性が低下する。例えば、ＦＦＴの実行に特化した演算器は、バタフライ演算以外の演算に適していない場合がある。この場合、バタフライ演算以外の演算を実行する際の演算効率は低下する。
【０００５】
１つの側面では、本発明は、演算器の演算効率を向上することを目的とする。
【課題を解決するための手段】
【０００６】
１つの実施態様では、演算器は、第１の乗算部、第２の乗算部、第１の加算部、第１の演算選択部、第２の演算選択部、第２の加算部および第３の加算部を有する。第１の乗算部は、２つの入力データを乗算して第１の演算データを算出する。第２の乗算部は、２つの入力データを乗算して第２の演算データを算出する。第１の加算部は、第１の演算データと第２の演算データとを加算して第３の演算データを算出する。第１の演算選択部は、第１の演算データおよび第３の演算データのいずれかを選択する。第２の演算選択部は、第２の演算データおよび第３の演算データのいずれかを選択する。第２の加算部は、入力データと第１の演算選択部が選択した演算データとを加算して第１の演算結果データを算出する。第３の加算部は、入力データと第２の演算選択部が選択した演算データとを加算して第２の演算結果データを算出する。
【発明の効果】
【０００７】
１つの側面では、本発明は、演算器の演算効率を向上することができる。
【図面の簡単な説明】
【０００８】
【図１】演算器および演算器の制御方法の一実施形態を示す図である。
【図２】図１に示した演算器の動作の一例を示す図である。
【図３】演算器および演算器の制御方法の別の実施形態を示す図である。
【図４】演算器および演算器の制御方法の別の実施形態を示す図である。
【図５】図４に示した演算器の動作の一例を示す図である。
【図６】演算器および演算器の制御方法の別の実施形態を示す図である。
【図７】図６に示した演算器の動作の一例を示す図である。
【図８】図６に示した演算器の動作の別の例を示す図である。
【図９】図６に示した演算器の比較例を示す図である。
【図１０】図９に示した比較例の演算器の動作の一例を示す図である。
【図１１】演算器および演算器の制御方法の別の実施形態を示す図である。
【図１２】演算器および演算器の制御方法の別の実施形態を示す図である。
【図１３】図１２に示した並び替え部によるデータの並び替えの一例を示す図である。
【図１４】１６点のＦＦＴにおけるバタフライ演算のデータの流れの一例を示す図である。
【図１５】図１２に示した並び替え部によるデータの並び替えの別の例を示す図である。
【図１６】演算器を含む演算処理装置の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、実施形態について、図面を用いて説明する。
【００１０】
図１は、演算器および演算器の制御方法の一実施形態を示す。図１に示す演算器１００は、ＣＰＵ等のプロセッサである演算処理装置１０に含まれ、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を実行する。演算の対象となる複数の入力データＤＩは、図示しない保持部に保持される。なお、入力データＤＩの数は、６つに限定されない。演算処理装置１０は、命令に応じた演算を、演算器１００を用いて実行する。演算器１００は、乗算部１２１、１２２、加算部１４１、１４２、１４３および演算選択部１６１、１６２を有する。
【００１１】
乗算部１２１は、複数の入力データＤＩのうちの入力データＤＩ３、ＤＩ５を受ける。そして、乗算部１２１は、入力データＤＩ３と入力データＤＩ５とを乗算し、乗算結果ＤＡ１（以下、演算データＤＡ１とも称する）を加算部１４１および演算選択部１６１に出力する。乗算部１２１は、２つの入力データＤＩを乗算して第１の演算データＤＡ１を算出する第１の乗算部の一例である。
【００１２】
乗算部１２２は、複数の入力データＤＩのうちの入力データＤＩ４、ＤＩ６を受ける。そして、乗算部１２２は、入力データＤＩ４と入力データＤＩ６とを乗算し、乗算結果ＤＡ２（以下、演算データＤＡ２とも称する）を加算部１４１および演算選択部１６２に出力する。乗算部１２２は、２つの入力データＤＩを乗算して第２の演算データＤＡ２を算出する第２の乗算部の一例である。
【００１３】
加算部１４１は、演算データＤＡ１と演算データＤＡ２とを加算し、加算結果ＤＡ３（以下、演算データＤＡ３とも称する）を演算選択部１６１、１６２に出力する。加算部１４１は、第１の演算データＤＡ１と第２の演算データＤＡ２とを加算して第３の演算データＤＡ３を算出する第１の加算部の一例である。なお、加算部１４１、１４２、１４３が実行する加算は、２つのデータを加算する加算と、２つのデータの他方から一方を減算する減算の両方を含む。例えば、２つのデータの一方を負にして加算することにより、２つのデータの他方から一方を減算した結果が得られる。加算部１４１は、演算器１００が実行する演算の内容に基づいて、加算および減算のいずれかを実行する。以下では、“加算”および“減算”を特に区別せずに“加算”と称する場合もある。
【００１４】
演算選択部１６１は、演算器１００が実行する演算の内容に基づいて、演算データＤＡ１、ＤＡ３のいずれかを選択し、選択した演算データＤＡを加算部１４２に出力する。演算選択部１６１は、第１の演算データＤＡ１および第３の演算データＤＡ３のいずれかを選択する第１の演算選択部の一例である。
【００１５】
例えば、演算器１００がＦＦＴにおける基本演算であるバタフライ演算を実行する場合、演算選択部１６１は、演算データＤＡ１、ＤＡ３のうち、演算データＤＡ３を加算部１４２に出力する。なお、バタフライ演算は、例えば、後述する式（１）および式（２）で表される単位演算対Ｆｐ、Ｆｍを算出する演算である。
【００１６】
また、例えば、演算器１００がバタフライ演算以外の演算（例えば、積和演算）を実行する場合、演算選択部１６１は、演算データＤＡ１、ＤＡ３のうち、演算データＤＡ１を加算部１４２に出力する。この場合、乗算部１２１および加算部１４２を含む演算部は、積和演算を実行する演算器として機能する。
【００１７】
演算選択部１６２は、演算器１００が実行する演算の内容に基づいて、演算データＤＡ２、ＤＡ３のいずれかを選択し、選択した演算データＤＡを加算部１４３に出力する。演算選択部１６２は、第２の演算データＤＡ２および第３の演算データＤＡ３のいずれかを選択する第２の演算選択部の一例である。
【００１８】
例えば、演算選択部１６２は、演算器１００がバタフライ演算を実行する場合、演算データＤＡ３を加算部１４２に出力し、演算器１００がバタフライ演算以外の演算を実行する場合、演算データＤＡ２を加算部１４３に出力する。演算選択部１６２が演算データＤＡ２を加算部１４３に出力する場合、乗算部１２２および加算部１４３を含む演算部は、積和演算を実行する演算器として機能する。すなわち、演算器１００は、乗算部１２１、１２２および加算部１４２、１４３を用いて、２つの積和演算を並列に実行できる。
【００１９】
加算部１４２は、複数の入力データＤＩのうちの入力データＤＩ１と演算選択部１６１から受ける演算データＤＡとを加算し、加算結果ＤＲ１（以下、演算結果データＤＲ１とも称する）を図示しないレジスタ等に出力する。加算部１４２は、入力データＤＩ１と第１の演算選択部１６１が選択した演算データＤＡとを加算して第１の演算結果データＤＲ１を算出する第２の加算部の一例である。なお、加算部１４２は、加算部１４１と同様に、演算器１００が実行する演算の内容に基づいて、加算および減算のいずれかを実行する。
【００２０】
加算部１４３は、複数の入力データＤＩのうちの入力データＤＩ２と演算選択部１６２から受ける演算データＤＡとを加算し、加算結果ＤＲ２（以下、演算結果データＤＲ２とも称する）を図示しないレジスタ等に出力する。加算部１４３は、入力データＤＩ２と第２の演算選択部１６２が選択した演算データＤＡとを加算して第２の演算結果データＤＲ２を算出する第３の加算部の一例である。なお、加算部１４３は、加算部１４１、４２と同様に、演算器１００が実行する演算の内容に基づいて、加算および減算のいずれかを実行する。
【００２１】
ここで、バタフライ演算を実行する場合を例にして、演算器１００の動作を説明する。バタフライ演算における単位演算対Ｆｐ、Ｆｍは、複素数ｃ１、ｃ２と、回転子Ｗｔを用いて、式（１）および式（２）で表される。
【００２２】
Ｆｐ＝ｃ１＋ｃ２×Ｗｔ  ‥（１）
Ｆｍ＝ｃ１−ｃ２×Ｗｔ  ‥（２）
Ｎ点（Ｎは、例えば、２の累乗）のＦＦＴにおけるバタフライ演算では、回転子Ｗｔは、“ｅｘｐ（（−２πｔ／Ｎ）ｉ）”で表される。したがって、式（１）および式（２）は、ｃ１＝ａ１＋ｂ１・ｉ、ｃ２＝ａ２＋ｂ２・ｉ、Ｗｔ＝ｃ３＝ａ３＋ｂ３・ｉとすると、式（３）および式（４）に変形される。なお、ｃ３は、複素数であり、ａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３は、浮動小数点数または固定小数点数等のコンピュータの数値表現で表される実数である。
【００２３】
Ｆｐ＝（ａ１＋(ａ２・ａ３−ｂ２・ｂ３)）＋ｉ（ｂ１＋(ａ２・ｂ３＋ａ３・ｂ２)）
‥（３）
Ｆｍ＝（ａ１−(ａ２・ａ３−ｂ２・ｂ３)）＋ｉ（ｂ１−(ａ２・ｂ３＋ａ３・ｂ２)）
‥（４）
例えば、単位演算対Ｆｐ、Ｆｍの実部を算出する場合、演算器１００の図示しない保持部は、実数ａ１、ａ１、ａ３、ｂ３、ａ２、ｂ２をそれぞれ入力データＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６として保持する。この場合、乗算部１２１は、“ａ２・ａ３”を演算データＤＡ１として算出し、乗算部１２２は、“ｂ２・ｂ３”を演算データＤＡ２として算出する。加算部１４１は、“ａ２・ａ３−ｂ２・ｂ３”を演算データＤＡ３として算出する。また、演算選択部１６１、１６２は、演算データＤＡ３を選択する。これにより、加算部１４２は、“ａ１＋（ａ２・ａ３−ｂ２・ｂ３）”を演算結果データＤＲ１として算出する。また、加算部１４３は、“ａ１−（ａ２・ａ３−ｂ２・ｂ３）”を演算結果データＤＲ２として算出する。このように、単位演算対Ｆｐ、Ｆｍの実部が演算結果データＤＲ１、ＤＲ２としてそれぞれ算出される。
【００２４】
また、単位演算対Ｆｐ、Ｆｍの虚部を算出する場合、演算器１００の図示しない保持部は、実数ｂ１、ｂ１、ｂ３、ａ３、ａ２、ｂ２をそれぞれ入力データＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６として保持する。この場合、乗算部１２１は、“ａ２・ｂ３”を演算データＤＡ１として算出し、乗算部１２２は、“ａ３・ｂ２”を演算データＤＡ２として算出する。加算部１４１は、“ａ２・ｂ３＋ａ３・ｂ２”を演算データＤＡ３として算出する。また、演算選択部１６１、１６２は、演算データＤＡ３を選択する。これにより、加算部１４２は、“ｂ１＋（ａ２・ｂ３＋ａ３・ｂ２）”を演算結果データＤＲ１として算出する。また、加算部１４３は、“ｂ１−（ａ２・ｂ３＋ａ３・ｂ２）”を演算結果データＤＲ２として算出する。このように、単位演算対Ｆｐ、Ｆｍの虚部が演算結果データＤＲ１、ＤＲ２としてそれぞれ算出される。
【００２５】
このように、演算器１００は、乗算部１２１、１２２、加算部１４１、１４２、１４３を用いた演算を、入力データＤＩを入れ替えて２回実行することにより、単位演算対Ｆｐ、Ｆｍを算出できる。
【００２６】
これに対し、加算部１４１および演算選択部１６１、１６２が省かれた演算器は、例えば、単位演算対Ｆｐ、Ｆｍの実部の一部である“ａ２・ａ３−ｂ２・ｂ３”を算出する場合、“ａ２・ａ３”および“ｂ２・ｂ３”の一方を先に算出する。そして、演算器は、算出した乗算結果（“ａ２・ａ３”および“ｂ２・ｂ３”の一方）を入力データＤＩ１等にフィードバックして、“ａ２・ａ３−ｂ２・ｂ３”を算出する。このため、加算部１４１および演算選択部１６１、１６２が省かれた演算器では、演算器１００に比べて、バタフライ演算を実行する際の演算効率（例えば、スループット等）が低下する。換言すれば、演算器１００は、加算部１４１および演算選択部１６１、１６２が省かれた演算器に比べて、バタフライ演算を実行する際の演算効率を向上できる。
【００２７】
なお、演算器１００の構成は、図１に示す例に限定されない。例えば、演算器１００は、入力データＤＩ１、ＤＩ２のいずれかを加算部１４２に出力する入力選択部を有してもよい。また、演算器１００は、入力データＤＩ１、ＤＩ２のいずれかを加算部１４３に出力する入力選択部を有してもよい。
【００２８】
図２は、図１に示した演算器１００の動作の一例を示す。図２に示す動作は、演算器の制御方法の一態様である。なお、演算器１００の動作は、図２に示す例に限定されない。
【００２９】
ステップＳ１０では、乗算部１２１は、入力データＤＩ３、ＤＩ５を乗算して演算データＤＡ１を算出し、乗算部１２２は、入力データＤＩ４、ＤＩ６を乗算して演算データＤＡ２を算出する。
【００３０】
次に、ステップＳ１２では、加算部１４１は、演算データＤＡ１と演算データＤＡ２とを加算して演算データＤＡ３を算出する。
【００３１】
次に、ステップＳ１４では、演算器１００が実行する演算の内容に基づいて、演算選択部１６１は演算データＤＡ１、ＤＡ３のいずれかを選択し、演算選択部１６２は演算データＤＡ２、ＤＡ３のいずれかを選択する。例えば、演算器１００がバタフライ演算を実行する場合、演算選択部１６１、１６２は、演算データＤＡ３を選択する。また、演算器１００がバタフライ演算以外の演算を実行する場合、演算選択部１６１は、演算データＤＡ１を選択し、演算選択部１６２は、演算データＤＡ２を選択する。
【００３２】
次に、ステップＳ１６では、加算部１４２は、演算選択部１６１が演算データＤＡ１、ＤＡ３から選択した演算データＤＡと、入力データＤＩ１とを加算して演算結果データＤＲ１を算出する。また、加算部１４３は、演算選択部１６２が演算データＤＡ２、ＤＡ３から選択した演算データＤＡと、入力データＤＩ２とを加算して演算結果データＤＲ２を算出する。
【００３３】
例えば、演算器１００がバタフライ演算を実行する場合、加算部１４２は、入力データＤＩ１および演算データＤＡ３を受け、加算部１４３は、入力データＤＩ２および演算データＤＡ３を受ける。そして、加算部１４２は、入力データＤＩ１と演算データＤＡ３とを加算して演算結果データＤＲ１を算出し、加算部１４３は、入力データＤＩ２と演算データＤＡ３とを加算して演算結果データＤＲ２を算出する。このように、演算器１００は、演算選択部１６１、１６２が演算データＤＡ３を選択することにより、乗算部１２１等の乗算結果を入力にフィードバックしなくてよいため、バタフライ演算を効率よく実行できる。
【００３４】
また、演算器１００がバタフライ演算以外の演算を実行する場合、加算部１４２は、入力データＤＩ１および演算データＤＡ１を受け、加算部１４３は、入力データＤＩ２および演算データＤＡ２を受ける。そして、加算部１４２は、入力データＤＩ１と演算データＤＡ１とを加算して演算結果データＤＲ１を算出し、加算部１４３は、入力データＤＩ２と演算データＤＡ２とを加算して演算結果データＤＲ２を算出する。このように、演算器１００は、演算選択部１６１、１６２が演算データＤＡ１、ＤＡ２をそれぞれ選択することにより、バタフライ演算以外の演算も効率よく実行できる。例えば、演算器１００は、２つの積和演算を並列に実行できる。
【００３５】
以上、図１および図２に示す実施形態では、加算部１４１は、乗算部１２１の乗算結果である演算データＤＡ１と乗算部１２２の乗算結果である演算データＤＡ２とを加算して演算データＤＡ３を算出する。そして、演算器１００が実行する演算の内容に基づいて、演算選択部１６１は演算データＤＡ１、ＤＡ３のいずれかを加算部１４２に出力し、演算選択部１６２は演算データＤＡ２、ＤＡ３のいずれかを加算部１４３に出力する。加算部１４２は、入力データＤＩ１と演算選択部１６１から受ける演算データＤＡとを加算して演算結果データＤＲ１を算出する。また、加算部１４３は、入力データＤＩ２と演算選択部１６２から受ける演算データＤＡとを加算して演算結果データＤＲ２を算出する。
【００３６】
このように、加算部１４２、１４３は、演算器１００が実行する演算の内容に応じた演算データＤＡを演算選択部１６１、１６２からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器１００の演算効率を向上することができる。
【００３７】
図３は、演算器および演算器の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図３に示す演算器１００Ａは、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を実行する。なお、演算器１００Ａは、図２には図示していないが、図１に示した演算器１００と同様に、ＣＰＵ等のプロセッサである演算処理装置１０に含まれる。
【００３８】
演算器１００Ａは、制御部１１０Ａ、入力選択部１８２および保持部２０１、２０２、２０３、２０４、２０５、２０６、２３１、２３２が図１に示した演算器１００に追加されることを除いて、図１に示した演算器１００と同一または同様である。演算器１００Ａは、制御部１１０Ａ、乗算部１２１、１２２、加算部１４１、１４２、１４３、演算選択部１６１、１６２、入力選択部１８２および保持部２０１−２０６、２３１、２３２を有する。
【００３９】
複数の保持部２０１−２０６は、演算の対象となる複数の入力データＤＩをそれぞれ保持する。保持部２０１は第１の保持部の一例であり、保持部２０２は第２の保持部の一例であり、保持部２０３は第３の保持部の一例であり、保持部２０４は第４の保持部の一例であり、保持部２０５は第５の保持部の一例であり、保持部２０６は第６の保持部の一例である。図３に示す例では、保持部２０１が保持する入力データＤＩ１は、加算部１４２および入力選択部１８２に出力され、保持部２０２が保持する入力データＤＩ２は、入力選択部１８２に出力される。また、保持部２０３が保持する入力データＤＩ３および保持部２０５が保持する入力データＤＩ５は、乗算部１２１に出力され、保持部２０４が保持する入力データＤＩ４および保持部２０６が保持する入力データＤＩ６は、乗算部１２２に出力される。
【００４０】
制御部１１０Ａは、演算器１００Ａが実行する演算の内容に基づいて、加算部１４１、１４２、１４３、演算選択部１６１、１６２および入力選択部１８２の動作を制御する。例えば、制御部１１０Ａは、演算器１００Ａが実行する演算の内容に基づいて、２つのデータを加算する加算と、２つのデータの他方から一方を減算する減算のどちらを実行するかを、加算部１４１、１４２、１４３の各々に指示する。これにより、加算部１４１、１４２、１４３は、演算器１００Ａが実行する演算の内容に基づいて、加算および減算のいずれかを実行する。また、制御部１１０Ａは、演算器１００Ａが実行する演算の内容に基づいて、入力選択部１８２および演算選択部１６１、１６２の各々による選択動作を制御する。
【００４１】
入力選択部１８２は、制御部１１０Ａからの制御に基づいて、入力データＤＩ１、ＤＩ２のいずれかを選択し、選択した入力データＤＩを加算部１４３に出力する。例えば、演算器１００ＡがＦＦＴにおける基本演算であるバタフライ演算を実行する場合、入力選択部１８２は、制御部１１０Ａからの制御に基づいて、入力データＤＩ１、ＤＩ２のうち、入力データＤＩ１を加算部１４３に出力する。これにより、加算部１４３は、加算部１４２と同じ入力データＤＩ１を受ける。この場合、保持部２０２が保持する入力データＤＩ２は演算に使用されないため、保持部２０２に入力データＤＩ２を格納する処理を省くことができる。なお、演算器１００Ａがバタフライ演算以外の演算を実行する場合、入力選択部１８２は、制御部１１０Ａからの制御に基づいて、入力データＤＩ１、ＤＩ２のうち、入力データＤＩ２を加算部１４３に出力する。
【００４２】
すなわち、入力選択部１８２は、演算器１００Ａが実行する演算の内容に基づいて、入力データＤＩ１、ＤＩ２のいずれかを加算部１４３に出力する。これにより、入力データＤＩ１、ＤＩ２のうち、加算部１４３で使用される入力データＤＩが加算部１４３に転送される。このように、入力選択部１８２は、複数の保持部２０１−２０６のうちの２つの保持部２０１、２０２からそれぞれ受ける２つの入力データＤＩ１、ＤＩ２のうち、第３の加算部１４３で使用する入力データＤＩを選択する。
【００４３】
乗算部１２１は、保持部２０３から受ける入力データＤＩ３と保持部２０５から受ける入力データＤＩ５とを乗算する。乗算部１２２は、保持部２０４から受ける入力データＤＩ４と保持部２０６から受ける入力データＤＩ６とを乗算する。加算部１４１は、演算データＤＡ１と演算データＤＡ２とを、制御部１１０Ａからの制御に基づいて加算する。演算選択部１６１は、制御部１１０Ａからの制御に基づいて、演算データＤＡ１、ＤＡ３のいずれかを加算部１４２に出力する。演算選択部１６２は、制御部１１０Ａからの制御に基づいて、演算データＤＡ２、ＤＡ３のいずれかを加算部１４３に出力する。
【００４４】
加算部１４２は、保持部２０１から受ける入力データＤＩ１と演算選択部１６１から受ける演算データＤＡとを、制御部１１０Ａからの制御に基づいて加算する。加算部１４３は、入力選択部１８２から受ける入力データＤＩと演算選択部１６２から受ける演算データＤＡとを、制御部１１０Ａからの制御に基づいて加算する。保持部２３１は、加算部１４２の加算結果である演算結果データＤＲ１を保持し、保持部２３２は、加算部１４３の加算結果である演算結果データＤＲ２を保持する。
【００４５】
このように、演算器１００Ａでは、制御部１１０Ａが加算部１４１、１４２、１４３、演算選択部１６１、１６２および入力選択部１８２の動作を制御し、入力選択部１８２が加算部１４３に出力する入力データＤＩを選択する。演算器１００Ａのその他の動作は、図２に示した動作（図１に示した演算器１００の動作）と同一または同様である。
【００４６】
なお、演算器１００Ａの構成は、図１に示す例に限定されない。例えば、演算器１００Ａは、入力データＤＩ１、ＤＩ２のいずれかを加算部１４２に出力する入力選択部を有してもよい。
【００４７】
以上、図３に示す実施形態においても、図１および図２に示した実施形態と同様の効果を得ることができる。例えば、加算部１４２、１４３は、演算器１００Ａが実行する演算の内容に応じた演算データＤＡを演算選択部１６１、１６２からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器１００Ａの演算効率を向上することができる。
【００４８】
さらに、入力選択部１８２は、演算器１００ＡがＦＦＴにおける基本演算であるバタフライ演算を実行する場合、入力データＤＩ１、ＤＩ２のうちの入力データＤＩ１を加算部１４３に出力する。これにより、演算器１００Ａがバタフライ演算を実行する場合、保持部２０２に入力データＤＩ２を格納する処理を省くことができる。
【００４９】
図４は、演算器および演算器の制御方法の別の実施形態を示す。図１から図３で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図４に示す演算器１００Ｂは、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を実行する。なお、演算器１００Ｂは、図４には図示していないが、図１に示した演算器１００と同様に、ＣＰＵ等のプロセッサである演算処理装置１０に含まれる。
【００５０】
演算器１００Ｂは、図３に示した制御部１１０Ａの代わりに制御部１１０Ｂを有し、入力選択部１８１、１８３、１８４が図３に示した演算器１００Ａに追加される。演算器１００Ｂのその他の構成は、図３に示した演算器１００Ａと同一または同様である。
【００５１】
演算器１００Ｂは、制御部１１０Ｂ、乗算部１２１、１２２、加算部１４１、１４２、１４３、演算選択部１６１、１６２、入力選択部１８１、１８２、１８３、１８４および保持部２０１−２０６、２３１、２３２を有する。図４に示す例では、保持部２０１が保持する入力データＤＩ１と保持部２０２が保持する入力データＤＩ２との両方が、入力選択部１８１、１８２に出力される。また、保持部２０３が保持する入力データＤＩ３と保持部２０４が保持する入力データＤＩ４との両方が、入力選択部１８１、１８２に出力される。そして、保持部２０５が保持する入力データＤＩ５は、乗算部１２１に出力され、保持部２０６が保持する入力データＤＩ６は、乗算部１２２に出力される。
【００５２】
制御部１１０Ｂは、演算器１００Ｂが実行する演算の内容に基づいて入力選択部１８１、１８３、１８４の各々の選択動作を制御することを除いて、図２に示した制御部１１０Ａと同一または同様である。すなわち、制御部１１０Ｂは、演算器１００Ｂが実行する演算の内容に基づいて、加算部１４１、１４２、１４３、演算選択部１６１、１６２および入力選択部１８１、１８２、１８３、１８４の動作を制御する。
【００５３】
入力選択部１８１は、制御部１１０Ｂからの制御に基づいて、入力データＤＩ１、ＤＩ２のいずれかを選択し、選択した入力データＤＩを加算部１４２に出力する。入力選択部１８１は、複数の保持部２０１−２０６のうちの第１の保持部２０１および第２の保持部２０２からそれぞれ受ける２つの入力データＤＩ１、ＤＩ２のうち、第２の加算部１４２で使用する入力データＤＩを選択する第１の入力選択部の一例である。
【００５４】
入力選択部１８２は、制御部１１０Ｂからの制御に基づいて、入力データＤＩ１、ＤＩ２のいずれかを選択し、選択した入力データＤＩを加算部１４３に出力する。入力選択部１８２は、第１の保持部２０１および第２の保持部２０２からそれぞれ受ける２つの入力データＤＩ１、ＤＩ２のうち、第３の加算部１４３で使用する入力データＤＩを選択する第２の入力選択部の一例である。
【００５５】
入力選択部１８３は、制御部１１０Ｂからの制御に基づいて、入力データＤＩ３、ＤＩ４のいずれかを選択し、選択した入力データＤＩを乗算部１２１に出力する。入力選択部１８３は、複数の保持部２０１−２０６のうちの第３の保持部２０３および第４の保持部２０４からそれぞれ受ける２つの入力データＤＩ３、ＤＩ４のうち、第１の乗算部１２１で使用する入力データＤＩを選択する第３の入力選択部の一例である。
【００５６】
入力選択部１８４は、制御部１１０Ｂからの制御に基づいて、入力データＤＩ３、ＤＩ４のいずれかを選択し、選択した入力データＤＩを乗算部１２２に出力する。入力選択部１８４は、第３の保持部２０３および第４の保持部２０４からそれぞれ受ける２つの入力データＤＩ３、ＤＩ４のうち、第２の乗算部１２１で使用する入力データＤＩを選択する第４の入力選択部の一例である。
【００５７】
演算選択部１６１は、制御部１１０Ｂからの制御に基づいて、演算データＤＡ１、ＤＡ３のいずれかを加算部１４２に出力する。演算選択部１６２は、制御部１１０Ｂからの制御に基づいて、演算データＤＡ２、ＤＡ３のいずれかを加算部１４３に出力する。
【００５８】
例えば、演算器１００ＢがＦＦＴにおける基本演算である１つのバタフライ演算を２回に分けて実行する場合、入力選択部１８１、１８２、１８３、１８４および演算選択部１６１、１６２は、以下に示すように動作する。
【００５９】
入力選択部１８１は、１回目の演算と２回目の演算とで、保持部２０１から受ける入力データＤＩ１および保持部２０２から受ける入力データＤＩ２を交互に加算部１４２に出力する。例えば、入力選択部１８１は、１回目の演算では、保持部２０１から受ける入力データＤＩ１を加算部１４２に出力し、２回目の演算では、保持部２０２から受ける入力データＤＩ２を加算部１４２に出力する。
【００６０】
入力選択部１８２は、保持部２０１から受ける入力データＤＩ１および保持部２０２から受ける入力データＤＩ２のうち、入力選択部１８１が加算部１４２に出力する入力データＤＩと同じ入力データＤＩを、加算部１４３に出力する。例えば、入力選択部１８２は、１回目の演算では、保持部２０１から受ける入力データＤＩ１を加算部１４３に出力し、２回目の演算では、保持部２０２から受ける入力データＤＩ２を加算部１４３に出力する。
【００６１】
入力選択部１８３は、１回目の演算と２回目の演算とで、保持部２０３から受ける入力データＤＩ３および保持部２０４から受ける入力データＤＩ４を交互に乗算部１２１に出力する。例えば、入力選択部１８３は、１回目の演算では、保持部２０３から受ける入力データＤＩ３を乗算部１２１に出力し、２回目の演算では、保持部２０４から受ける入力データＤＩ４を乗算部１２１に出力する。
【００６２】
入力選択部１８４は、保持部２０３から受ける入力データＤＩ３および保持部２０４から受ける入力データＤＩ４のうち、入力選択部１８３が乗算部１２１に出力する入力データＤＩと異なる入力データＤＩを、乗算部１２２に出力する。例えば、入力選択部１８４は、１回目の演算では、保持部２０４から受ける入力データＤＩ４を乗算部１２２に出力し、２回目の演算では、保持部２０３から受ける入力データＤＩ３を乗算部１２２に出力する。
【００６３】
演算選択部１６１は、加算部１４１から受ける演算データＤＡ３を加算部１４２に出力し、演算選択部１６２は、加算部１４１から受ける演算データＤＡ３を加算部１４３に出力する。これにより、保持部２０１−２０６が保持する入力データＤＩを、１回目の演算と２回目の演算とで入れ替えることなく、演算器１００Ｂを２回動作させることで、バタフライ演算を実現できる。したがって、保持部２０１−２０６が保持する入力データＤＩを入れ替える処理を省くことができ、保持部２０１−２０６が保持する入力データＤＩを１回目の演算と２回目の演算とで入れ替える場合に比べて、演算効率を向上することができる。
【００６４】
また、例えば、演算器１００Ｂが積和演算を実行する場合、入力選択部１８１、１８２、１８３、１８４および演算選択部１６１、１６２は、以下に示すように動作する。入力選択部１８１は、保持部２０１から受ける入力データＤＩ１を加算部１４２に出力し、入力選択部１８２は、保持部２０２から受ける入力データＤＩ２を加算部１４３に出力する。入力選択部１８３は、保持部２０３から受ける入力データＤＩ３を乗算部１２１に出力し、入力選択部１８４は、保持部２０４から受ける入力データＤＩ４を乗算部１２２に出力する。演算選択部１６１は、乗算部１２１から受ける演算データＤＡ１を加算部４２に出力し、演算選択部１６２は、乗算部１２２から受ける演算データＤＡ２を加算部１４３に出力する。
【００６５】
乗算部１２１は、入力選択部１８３から受ける入力データＤＩと保持部２０５から受ける入力データＤＩ５とを乗算する。乗算部１２２は、入力選択部１８４から受ける入力データＤＩと保持部２０６から受ける入力データＤＩ６とを乗算する。加算部１４１は、演算データＤＡ１と演算データＤＡ２とを、制御部１１０Ｂからの制御に基づいて加算する。
【００６６】
加算部１４２は、入力選択部１８１から受ける入力データＤＩと演算選択部１６１から受ける演算データＤＡとを、制御部１１０Ｂからの制御に基づいて加算する。加算部１４３は、入力選択部１８２から受ける入力データＤＩと演算選択部１６２から受ける演算データＤＡとを、制御部１１０Ｂからの制御に基づいて加算する。保持部２３１は、加算部１４２の加算結果である演算結果データＤＲ１を保持し、保持部２３２は、加算部１４３の加算結果である演算結果データＤＲ２を保持する。なお、演算器１００Ｂの構成は、図４に示す例に限定されない。
【００６７】
図５は、図４に示した演算器１００Ｂの動作の一例を示す。図５に示す動作は、演算器の制御方法の一態様である。図５に示すａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３は、図１に示した演算器１００の説明で示したバタフライ演算における単位演算対Ｆｐ、Ｆｍの式（３）および式（４）の実数ａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３である。また、図５に示すｄ１、ｄ２、ｄ３、ｅ１、ｅ２、ｅ３は、実数ａ１等と同様に、浮動小数点数または固定小数点数等のコンピュータの数値表現で表される実数である。例えば、ステップＳ２００からステップＳ２２８までの一連の処理は、バタフライ演算を実行する際に実行され、ステップＳ３００からステップＳ３１８までの一連の処理は、バタフライ演算以外の演算（例えば、積和演算）を実行する際に実行される。
【００６８】
ステップＳ１００では、制御部１１０Ｂは、演算器１００Ｂが実行する演算がバタフライ演算か否かを判定する。演算器１００Ｂが実行する演算がバタフライ演算の場合、演算器１００Ｂの動作は、ステップＳ２００に移る。一方、演算器１００Ｂが実行する演算がバタフライ演算以外の演算の場合、演算器１００Ｂの動作は、ステップＳ３００に移る。
【００６９】
ステップＳ２００では、保持部２０１−２０６は、バタフライ演算の入力データＤＩ１−ＤＩ６をそれぞれ保持する。例えば、入力データＤＩ１は、図１に示した演算器１００の説明で示したバタフライ演算における単位演算対Ｆｐ、Ｆｍの式（３）および式（４）の実数ａ１であり、入力データＤＩ２は、式（３）および式（４）の実数ｂ１である。また、入力データＤＩ３は、式（３）および式（４）の実数ａ３であり、入力データＤＩ４は、式（３）および式（４）の実数ｂ３である。そして、入力データＤＩ５は、式（３）および式（４）の実数ａ２であり、入力データＤＩ６は、式（３）および式（４）の実数ｂ２である。
【００７０】
次に、ステップＳ２１０では、入力選択部１８３は、保持部２０３から受ける入力データＤＩ３を乗算部１２１に出力し、入力選択部１８４は、保持部２０４から受ける入力データＤＩ４を乗算部１２２に出力する。
【００７１】
次に、ステップＳ２１２では、乗算部１２１は演算データＤＡ１を算出し、乗算部１２２は演算データＤＡ２を算出する。例えば、乗算部１２１は、入力選択部１８３から受ける入力データＤＩ３（＝ａ３）と保持部２０５から受ける入力データＤＩ５（＝ａ２）とを乗算して演算データＤＡ１（＝ａ２・ａ３）を算出する。また、乗算部１２２は、入力選択部１８４から受ける入力データＤＩ４（＝ｂ３）と保持部２０６から受ける入力データＤＩ６（＝ｂ２）とを乗算して演算データＤＡ２（＝ｂ２・ｂ３）を算出する。
【００７２】
次に、ステップＳ２１４では、加算部１４１は、演算データＤＡ１（＝ａ２・ａ３）から演算データＤＡ２（＝ｂ２・ｂ３）を減算して演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）を算出する。
【００７３】
次に、ステップＳ２１６では、入力選択部１８１は、保持部２０１から受ける入力データＤＩ１を加算部１４２に出力し、演算選択部１６１は、加算部１４１から受ける演算データＤＡ３を加算部１４２に出力する。また、入力選択部１８２は、保持部２０１から受ける入力データＤＩ１を加算部１４３に出力し、演算選択部１６２は、加算部１４１から受ける演算データＤＡ３を加算部１４３に出力する。これにより、加算部１４２、１４３は、一対のデータ（入力データＤＩ１および演算データＤＡ３）を共通に受ける。
【００７４】
次に、ステップＳ２１８では、加算部１４２は演算結果データＤＲ１を算出し、加算部１４３は演算結果データＤＲ２を算出する。例えば、加算部１４２は、入力選択部１８１から受ける入力データＤＩ１（＝ａ１）と演算選択部１６１から受ける演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）とを加算して演算結果データＤＲ１（＝ａ１＋（ａ２・ａ３−ｂ２・ｂ３））を算出する。これにより、単位演算対Ｆｐ、ＦｍのうちのＦｐの実部（＝ａ１＋（ａ２・ａ３−ｂ２・ｂ３））が算出される。
【００７５】
また、加算部１４３は、入力選択部１８２から受ける入力データＤＩ１（＝ａ１）から、演算選択部１６２から受ける演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）を減算して演算結果データＤＲ２（＝ａ１−（ａ２・ａ３−ｂ２・ｂ３））を算出する。これにより、単位演算対Ｆｐ、ＦｍのうちのＦｍの実部（＝ａ１−（ａ２・ａ３−ｂ２・ｂ３））が算出される。
【００７６】
そして、加算部１４２は、演算結果データＤＲ１を保持部２３１に出力し、加算部１４３は、演算結果データＤＲ２を保持部２３２に出力する。これにより、保持部２３１は、演算結果データＤＲ１（Ｆｐの実部）を保持し、保持部２３２は、演算結果データＤＲ２（Ｆｍの実部）を保持する。なお、保持部２３１、２３２が保持した演算結果データＤＲ１、ＤＲ２は、後述するステップＳ２２８の処理が実行される前に、演算器１００Ｂの外部のレジスタファイル等に転送される。
【００７７】
次に、ステップＳ２２０では、入力選択部１８３は、保持部２０４から受ける入力データＤＩ４を乗算部１２１に出力し、入力選択部１８４は、保持部２０３から受ける入力データＤＩ３を乗算部１２２に出力する。このように、入力選択部１８３は、１回目の演算と２回目の演算とで、保持部２０３から受ける入力データＤＩ３および保持部２０４から受ける入力データＤＩ４を交互に乗算部１２１に出力する。そして、入力選択部１８４は、保持部２０３から受ける入力データＤＩ３および保持部２０４から受ける入力データＤＩ４のうち、入力選択部１８３が乗算部１２１に出力する入力データＤＩと異なる入力データＤＩを、乗算部１２２に出力する。
【００７８】
次に、ステップＳ２２２では、乗算部１２１は演算データＤＡ１を算出し、乗算部１２２は演算データＤＡ２を算出する。例えば、乗算部１２１は、入力選択部１８３から受ける入力データＤＩ４（＝ｂ３）と保持部２０５から受ける入力データＤＩ５（＝ａ２）とを乗算して演算データＤＡ１（＝ａ２・ｂ３）を算出する。また、乗算部１２２は、入力選択部１８４から受ける入力データＤＩ３（＝ａ３）と保持部２０６から受ける入力データＤＩ６（＝ｂ２）とを乗算して演算データＤＡ２（＝ａ３・ｂ２）を算出する。
【００７９】
次に、ステップＳ２２４では、加算部１４１は、演算データＤＡ１（＝ａ２・ｂ３）と演算データＤＡ２（＝ａ３・ｂ２）とを加算して演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）を算出する。なお、加算部１４１は、ステップＳ２１４では、演算データＤＡ１から演算データＤＡ２を減算したが、ステップＳ２２４では、演算データＤＡ１、ＤＡ２を加算する。
【００８０】
次に、ステップＳ２２６では、入力選択部１８１は、保持部２０２から受ける入力データＤＩ２を加算部１４２に出力し、演算選択部１６１は、加算部１４１から受ける演算データＤＡ３を加算部１４２に出力する。また、入力選択部１８２は、保持部２０２から受ける入力データＤＩ２を加算部１４３に出力し、演算選択部１６２は、加算部１４１から受ける演算データＤＡ３を加算部１４３に出力する。これにより、加算部１４２、１４３は、一対のデータ（入力データＤＩ２および演算データＤＡ３）を共通に受ける。
【００８１】
このように、入力選択部１８１は、１回目の演算と２回目の演算とで、保持部２０１から受ける入力データＤＩ１および保持部２０２から受ける入力データを交互に加算部１４２に出力する。そして、入力選択部１８２は、保持部２０１から受ける入力データＤＩ１および保持部２０２から受ける入力データＤＩ２のうち、入力選択部１８１が加算部１４２に出力する入力データＤＩと同じ入力データＤＩを、加算部１４３に出力する。
【００８２】
次に、ステップＳ２２８では、加算部１４２は演算結果データＤＲ１を算出し、加算部１４３は演算結果データＤＲ２を算出する。例えば、加算部１４２は、入力選択部１８１から受ける入力データＤＩ２（＝ｂ１）と演算選択部１６１から受ける演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）とを加算して演算結果データＤＲ１（＝ｂ１＋（ａ２・ｂ３＋ａ３・ｂ２））を算出する。これにより、単位演算対Ｆｐ、ＦｍのうちのＦｐの虚部（＝ｂ１＋（ａ２・ｂ３＋ａ３・ｂ２））が算出される。
【００８３】
また、加算部１４３は、入力選択部１８２から受ける入力データＤＩ２（＝ａ２）から、演算選択部１６２から受ける演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）を減算して演算結果データＤＲ２（＝ｂ１−（ａ２・ｂ３＋ａ３・ｂ２））を算出する。これにより、単位演算対Ｆｐ、ＦｍのうちのＦｍの虚部（＝ｂ１−（ａ２・ｂ３＋ａ３・ｂ２））が算出される。
【００８４】
そして、加算部１４２は、演算結果データＤＲ１を保持部２３１に出力し、加算部１４３は、演算結果データＤＲ２を保持部２３２に出力する。これにより、保持部２３１は、演算結果データＤＲ１（Ｆｐの虚部）を保持し、保持部２３２は、演算結果データＤＲ２（Ｆｍの虚部）を保持する。
【００８５】
このように、ステップＳ２００からステップＳ２１８までの一連の処理により、単位演算対Ｆｐ、Ｆｍの実部が算出され、ステップＳ２２０からステップＳ２２８までの一連の処理により、単位演算対Ｆｐ、Ｆｍの虚部が算出される。すなわち、演算器１００Ｂは、保持部２０１−２０６が保持する入力データＤＩを１回目の演算と２回目の演算とで入れ替えることなく、乗算部１２１、１２２、加算部１４１、１４２、１４３を用いた演算を２回実行することにより、バタフライ演算を実現できる。このように、演算器１００Ｂは、バタフライ演算を効率よく実行できる。なお、演算器１００Ｂは、バタフライ演算以外の演算を実行する場合（ステップＳ１００のＮｏ）、ステップＳ３００からステップＳ３１８までの一連の処理を実行する。
【００８６】
ステップＳ３００では、保持部２０１−２０６は、２つの演算（例えば、２つの積和演算等）の入力データＤＩ１−ＤＩ６をそれぞれ保持する。例えば、入力データＤＩ１は、実数ｄ１であり、入力データＤＩ３は、実数ｄ３であり、入力データＤＩ５は、実数ｄ２であり、入力データＤＩ２は、実数ｅ１であり、入力データＤＩ４は、実数ｅ３であり、入力データＤＩ６は、実数ｅ２である。
【００８７】
次に、ステップＳ３１０では、入力選択部１８３は、保持部２０３から受ける入力データＤＩ３を乗算部１２１に出力し、入力選択部１８４は、保持部２０４から受ける入力データＤＩ４を乗算部１２２に出力する。
【００８８】
次に、ステップＳ３１２では、乗算部１２１は演算データＤＡ１を算出し、乗算部１２２は演算データＤＡ２を算出する。例えば、乗算部１２１は、入力選択部１８３から受ける入力データＤＩ３（＝ｄ３）と保持部２０５から受ける入力データＤＩ５（＝ｄ２）とを乗算して演算データＤＡ１（＝ｄ２・ｄ３）を算出する。また、乗算部１２２は、入力選択部１８４から受ける入力データＤＩ４（＝ｅ３）と保持部２０６から受ける入力データＤＩ６（＝ｅ２）とを乗算して演算データＤＡ２（＝ｅ２・ｅ３）を算出する。
【００８９】
図５に示す例では、バタフライ演算以外の演算が実行される場合、演算データＤＡ３は使用されないため、演算データＤＡ３を算出する処理は省かれる。したがって、演算器１００Ｂは、ステップＳ３１２の処理を実行した後、ステップＳ３１６の処理を実行する。なお、演算器１００Ｂは、バタフライ演算以外の演算においても、演算データＤＡ１、ＤＡ２を加算して演算データＤＡ３を算出する処理を実行してもよい。
【００９０】
ステップＳ３１６では、入力選択部１８１は、保持部２０１から受ける入力データＤＩ１を加算部１４２に出力し、演算選択部１６１は、乗算部１２１から受ける演算データＤＡ１を加算部１４２に出力する。また、入力選択部１８２は、保持部２０２から受ける入力データＤＩ２を加算部１４３に出力し、演算選択部１６２は、乗算部１２２から受ける演算データＤＡ２を加算部１４３に出力する。これにより、加算部１４２は、入力データＤＩ１および演算データＤＡ１を受け、加算部１４３は、入力データＤＩ２および演算データＤＡ２を受ける。
【００９１】
次に、ステップＳ３１８では、加算部１４２は演算結果データＤＲ１を算出し、加算部１４３は演算結果データＤＲ２を算出する。例えば、加算部１４２は、入力選択部１８１から受ける入力データＤＩ１（＝ｄ１）と演算選択部１６１から受ける演算データＤＡ１（＝ｄ２・ｄ３）とを加算して演算結果データＤＲ１（＝ｄ１＋ｄ２・ｄ３）を算出する。これにより、２つの積和演算のうちの一方の結果（＝ｄ１＋ｄ２・ｄ３）が得られる。
【００９２】
また、加算部１４３は、入力選択部１８２から受ける入力データＤＩ２（＝ｅ１）と演算選択部１６２から受ける演算データＤＡ１（＝ｅ２・ｅ３）とを加算して演算結果データＤＲ２（＝ｅ１＋ｅ２・ｅ３）を算出する。これにより、２つの積和演算のうちの他方の結果（＝ｅ１＋ｅ２・ｅ３）が得られる。
【００９３】
そして、加算部１４２は、演算結果データＤＲ１を保持部２３１に出力し、加算部１４３は、演算結果データＤＲ２を保持部２３２に出力する。これにより、保持部２３１は、演算結果データＤＲ１を保持し、保持部２３２は、演算結果データＤＲ２を保持する。このように、演算器１００Ｂは、２つの積和演算を並列に実行でき、バタフライ演算以外の演算も効率よく実行できる。
【００９４】
また、バタフライ演算以外の演算では、例えば、演算器１００Ｂは、入力データＤＩ３、ＤＩ５の一方を“１”に設定することにより、入力データＤＩ３、ＤＩ５の他方と入力データＤＩ１との加算を実行できる。同様に、演算器１００Ｂは、入力データＤＩ４、ＤＩ６の一方を“１”に設定することにより、入力データＤＩ４、ＤＩ６の他方と入力データＤＩ２との加算を実行できる。また、演算器１００Ｂは、入力データＤＩ１を“０”に設定することにより、入力データＤＩ３、ＤＩ５の乗算を実行でき、入力データＤＩ２を“０”に設定することにより、入力データＤＩ４、ＤＩ６の乗算を実行できる。
【００９５】
なお、演算器１００Ｂの動作は、図５に示す例に限定されない。例えば、演算器１００Ｂは、単位演算対Ｆｐ、Ｆｍの実部より先に、単位演算対Ｆｐ、Ｆｍの虚部を算出してもよい。すなわち、ステップＳ２１０からステップＳ２１８までの一連の処理と、ステップＳ２２０からステップＳ２２８までの一連の処理との実行順は、図５に示した例と逆でもよい。
【００９６】
以上、図４および図５に示す実施形態においても、図１から図３に示した実施形態と同様の効果を得ることができる。例えば、加算部１４２、１４３は、演算器１００Ｂが実行する演算の内容に応じた演算データＤＡを演算選択部１６１、１６２からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器１００Ｂの演算効率を向上することができる。
【００９７】
さらに、入力選択部１８１、１８２、１８３、１８４は、バタフライ演算における単位演算対Ｆｐ、Ｆｍの実部を算出する演算と虚部を算出する演算とで、次段（例えば、加算部１４２、１４３、乗算部１２１、１２２）に出力するデータを切り替える。これにより、保持部２０１−２０６が保持する入力データＤＩを１回目の演算と２回目の演算とで入れ替えることなく、バタフライ演算における単位演算対Ｆｐ、Ｆｍの実部と虚部を算出することができ、バタフライ演算を効率よく実行することができる。
【００９８】
図６は、演算器および演算器の制御方法の別の実施形態を示す。図１から図５で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図６に示す演算器１００Ｃは、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を、複数のステージに分けて実行する。すなわち、演算器１００Ｃは、パイプライン処理方式を採用している。なお、演算器１００Ｃは、図６には図示していないが、図１に示した演算器１００と同様に、ＣＰＵ等のプロセッサである演算処理装置１０に含まれる。
【００９９】
演算器１００Ｃは、パイプライン処理方式を採用していることを除いて、図４に示した演算器１００Ｂと同一または同様である。例えば、演算器１００Ｃは、図４に示した制御部１１０Ｂの代わりに制御部１１０Ｃを有し、保持部２１１、２１２、２１３、２１４、２２１、２２２、２２３、２２４が図４に示した演算器１００Ｂに追加される。演算器１００Ｃのその他の構成は、図４に示した演算器１００Ｂと同一または同様である。
【０１００】
演算器１００Ｃは、制御部１１０Ｃ、乗算部１２１、１２２、加算部１４１、１４２、１４３、演算選択部１６１、１６２、入力選択部１８１、１８２、１８３、１８４および保持部２０１−２０６、２１１−２１４、２２１−２２４、２３１−２３２を有する。演算器１００Ｃが実行する演算は、保持部２１１−２１４と保持部２２１−２２４とにより、３つのステージに分けられる。
【０１０１】
制御部１１０Ｃは、パイプライン処理の制御を実行することを除いて、図４に示した制御部１１０Ｂと同一または同様である。すなわち、制御部１１０Ｃは、パイプライン処理の制御を実行するとともに、演算器１００Ｃが実行する演算の内容に基づいて、加算部１４１、１４２、１４３、演算選択部１６１、１６２および入力選択部１８１、１８２、１８３、１８４の動作を制御する。
【０１０２】
保持部２１１は、入力データＤＩ１、ＤＩ２のうち、入力選択部１８１が選択した入力データＤＩを保持する。保持部２１１が保持する入力データＤＩは、保持部２２１に転送される。保持部２１２は、入力データＤＩ１、ＤＩ２のうち、入力選択部１８２が選択した入力データＤＩを保持する。保持部２１２が保持する入力データＤＩは、保持部２２２に転送される。
【０１０３】
保持部２１３は、乗算部１２１の乗算結果である演算データＤＡ１を保持する。保持部２１３が保持する演算データＤＡ１は、加算部１４１および演算選択部１６１に転送される。保持部２１４は、乗算部１２２の乗算結果である演算データＤＡ２を保持する。保持部２１４が保持する演算データＤＡ２は、加算部１４１および演算選択部１６２に転送される。
【０１０４】
保持部２２１は、保持部２１１から受ける入力データＤＩを保持する。保持部２２１が保持する入力データＤＩは、加算部１４２に転送される。保持部２２２は、保持部２１２から受ける入力データＤＩを保持する。保持部２２２が保持する入力データＤＩは、加算部１４３に転送される。
【０１０５】
保持部２２３は、演算データＤＡ１、ＤＡ３のうち、演算選択部１６１が選択した演算データＤＡを保持する。保持部２２３が保持する演算データＤＡは、加算部１４２に転送される。保持部２２４は、演算データＤＡ２、ＤＡ３のうち、演算選択部１６２が選択した演算データＤＡを保持する。保持部２２４が保持する演算データＤＡは、加算部１４３に転送される。
【０１０６】
なお、演算器１００Ｃの構成は、図６に示す例に限定されない。例えば、保持部２１１−２１４が演算器１００Ｃから省かれてもよいし、保持部２２１−２２４が演算器１００Ｃから省かれてもよい。この場合、演算器１００Ｃが実行する演算は、２つのステージに分けられる。また、演算器１００Ｃが実行する演算は、４つ以上のステージに分けられてもよい。
【０１０７】
図７は、図６に示した演算器１００Ｃの動作の一例を示す。図７に示す動作は、演算器の制御方法の一態様である。なお、図７は、１つのバタフライ演算を２回に分けて実行する場合の演算器１００Ｃの動作の一例を示す。図７に示すａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３の意味は、図５に示したａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３の意味と同じである。すなわち、実数ａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３は、図１に示した演算器１００の説明で示したバタフライ演算における単位演算対Ｆｐ、Ｆｍの式（３）および式（４）の実数ａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３である。また、図７に示すクロックは、パイプライン処理の動作クロックである。
【０１０８】
１サイクル目では、保持部２０５は、実数ａ２の入力データＤＩ５を保持し、保持部２０３は、実数ａ３の入力データＤＩ３を保持し、保持部２０１は、実数ａ１の入力データＤＩ１を保持する。また、保持部２０６は、実数ｂ２の入力データＤＩ６を保持し、保持部２０４は、実数ｂ３の入力データＤＩ４を保持し、保持部２０２は、実数ｂ１の入力データＤＩ２を保持する。
【０１０９】
これにより、乗算部１２１は、保持部２０３が保持する入力データＤＩ３（＝ａ３）を、入力選択部１８３を介して受け、保持部２０５が保持する入力データＤＩ５（＝ａ２）を受ける。また、乗算部１２２は、保持部２０４が保持する入力データＤＩ４（＝ｂ３）を、入力選択部１８４を介して受け、保持部２０６が保持する入力データＤＩ６（＝ｂ２）を受ける。そして、乗算部１２１は、入力データＤＩ３、ＤＩ５を乗算して演算データＤＡ１（＝ａ２・ａ３）を算出し、乗算部１２２は、入力データＤＩ４、ＤＩ６を乗算して演算データＤＡ２（＝ｂ２・ｂ３）を算出する。
【０１１０】
２サイクル目では、保持部２０１−２０６は、１サイクル目に保持した入力データＤＩを継続して保持する。保持部２１３は、入力データＤＩ３、ＤＩ５の乗算結果である演算データＤＡ１（＝ａ２・ａ３）を保持し、保持部２１４は、入力データＤＩ４、ＤＩ６の乗算結果である演算データＤＡ２（＝ｂ２・ｂ３）を保持する。保持部２１１は、保持部２０１から入力選択部１８１を介して受ける入力データＤＩ１（＝ａ１）を保持し、保持部２１２は、保持部２０１から入力選択部１８２を介して受ける入力データＤＩ１（＝ａ１）を保持する。
【０１１１】
また、乗算部１２１は、保持部２０４が保持する入力データＤＩ４（＝ｂ３）を、入力選択部１８３を介して受け、保持部２０５が保持する入力データＤＩ５（＝ａ２）を受ける。乗算部１２２は、保持部２０３が保持する入力データＤＩ３（＝ａ３）を、入力選択部１８４を介して受け、保持部２０６が保持する入力データＤＩ６（＝ｂ２）を受ける。そして、乗算部１２１は、入力データＤＩ４、ＤＩ５を乗算して演算データＤＡ１（＝ａ２・ｂ３）を算出し、乗算部１２２は、入力データＤＩ３、ＤＩ６を乗算して演算データＤＡ２（＝ａ３・ｂ２）を算出する。
【０１１２】
また、加算部１４１は、保持部２１３が保持する演算データＤＡ１（＝ａ２・ａ３）から、保持部２１４が保持する演算データＤＡ２（＝ｂ２・ｂ３）を減算して演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）を算出する。
【０１１３】
３サイクル目では、保持部２１３は、入力データＤＩ４、ＤＩ５の乗算結果である演算データＤＡ１（＝ａ２・ｂ３）を保持し、保持部２１４は、入力データＤＩ３、ＤＩ６の乗算結果である演算データＤＡ２（＝ａ３・ｂ２）を保持する。保持部２１１は、保持部２０２から入力選択部１８１を介して受ける入力データＤＩ２（＝ｂ１）を保持し、保持部２１２は、保持部２０２から入力選択部１８２を介して受ける入力データＤＩ２（＝ｂ１）を保持する。
【０１１４】
また、保持部２２３、２２４は、演算データＤＡ１から演算データＤＡ２を減算した結果である演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）を保持する。すなわち、保持部２２３は、演算データＤＡ１、ＤＡ３のうち演算データＤＡ３を保持し、保持部２２４は、演算データＤＡ２、ＤＡ３のうち演算データＤＡ３を保持する。また、保持部２２１は、保持部２１１から受ける入力データＤＩ１（＝ａ１）を保持し、保持部２２２は、保持部２１２から受ける入力データＤＩ１（＝ａ１）を保持する。
【０１１５】
また、加算部１４１は、保持部２１３が保持する演算データＤＡ１（＝ａ２・ｂ３）と保持部２１４が保持する演算データＤＡ２（＝ａ３・ｂ２）とを加算して演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）を算出する。
【０１１６】
加算部１４２は、保持部２２１が保持する入力データＤＩ１（＝ａ１）と保持部２２３が保持する演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）とを加算して演算結果データＤＲ１（＝ａ１＋ａ２・ａ３−ｂ２・ｂ３）を算出する。加算部１４３は、保持部２２２が保持する入力データＤＩ１（＝ａ１）から、保持部２２４が保持する演算データＤＡ３（＝ａ２・ａ３−ｂ２・ｂ３）を減算して演算結果データＤＲ２（＝ａ１−ａ２・ａ３＋ｂ２・ｂ３）を算出する。
【０１１７】
４サイクル目では、保持部２２３、２２４は、演算データＤＡ１、ＤＡ２の加算結果である演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）を保持する。すなわち、保持部２２３は、演算データＤＡ１、ＤＡ３のうち演算データＤＡ３を保持し、保持部２２４は、演算データＤＡ２、ＤＡ３のうち演算データＤＡ３を保持する。保持部２２１は、保持部２１１から受ける入力データＤＩ２（＝ｂ１）を保持し、保持部２２２は、保持部２１２から受ける入力データＤＩ２（＝ｂ１）を保持する。
【０１１８】
また、保持部２３１は、入力データＤＩ１と演算データＤＡ３との加算結果である演算結果データＤＲ１（＝ａ１＋ａ２・ａ３−ｂ２・ｂ３）を保持する。保持部２３２は、入力データＤＩ１から演算データＤＡ３を減算した結果である演算結果データＤＲ２（＝ａ１−ａ２・ａ３＋ｂ２・ｂ３）を保持する。これにより、単位演算対Ｆｐ、Ｆｍのそれぞれの実部が保持部２３１、２３２にそれぞれ保持される。
【０１１９】
また、加算部１４２は、保持部２２１が保持する入力データＤＩ２（＝ｂ１）と保持部２２３が保持する演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）とを加算して演算結果データＤＲ１（＝ｂ１＋ａ２・ｂ３＋ａ３・ｂ２）を算出する。加算部１４３は、保持部２２２が保持する入力データＤＩ２（＝ｂ１）から、保持部２２４が保持する演算データＤＡ３（＝ａ２・ｂ３＋ａ３・ｂ２）を減算して演算結果データＤＲ２（＝ｂ１−ａ２・ｂ３−ａ３・ｂ２）を算出する。
【０１２０】
５サイクル目では、保持部２３１は、入力データＤＩ２と演算データＤＡ３との加算結果である演算結果データＤＲ１（＝ｂ１＋ａ２・ｂ３＋ａ３・ｂ２）を保持する。保持部２３２は、入力データＤＩ２から演算データＤＡ３を減算した結果である演算結果データＤＲ２（＝ｂ１−ａ２・ｂ３−ａ３・ｂ２）を保持する。これにより、単位演算対Ｆｐ、Ｆｍのそれぞれの虚部が保持部２３１、２３２にそれぞれ保持される。なお、保持部２３１、２３２が４サイクル目に保持した演算結果データＤＲ１、ＤＲ２は、演算器１００Ｃの外部のレジスタファイル等に転送される。
【０１２１】
このように、演算器１００Ｃは、４サイクルのレイテンシでバタフライ演算を実行できる。また、演算器１００Ｃは、２サイクルピッチでバタフライ演算を連続して実行できる。なお、１つのバタフライ演算を２回に分けて実行する場合の演算器１００Ｃの動作は、図７に示す例に限定されない。ここで、例えば、入力選択部１８１−１８４が省かれた演算器では、保持部２０１−２０６がそれぞれ保持する入力データＤＩは、２サイクル目に、単位演算対Ｆｐ、Ｆｍのそれぞれの虚部を算出するための入力データＤＩにそれぞれ更新される。
【０１２２】
図８は、図６に示した演算器１００Ｃの動作の別の例を示す。図８に示す動作は、演算器の制御方法の一態様である。なお、図８は、２つの積和演算を実行する場合の演算器１００Ｃの動作の一例を示す。図８に示すｄ１、ｄ２、ｄ３、ｅ１、ｅ２、ｅ３の意味は、図５に示したｄ１、ｄ２、ｄ３、ｅ１、ｅ２、ｅ３の意味と同じである。すなわち、実数ｄ１、ｄ２、ｄ３は、２つの積和演算のうちの一方の入力データＤＩであり、実数ｅ１、ｅ２、ｅ３は、２つの積和演算のうちの他方の入力データＤＩである。また、図８に示すクロックは、パイプライン処理の動作クロックである。
【０１２３】
１サイクル目では、保持部２０５は、実数ｄ２の入力データＤＩ５を保持し、保持部２０３は、実数ｄ３の入力データＤＩ３を保持し、保持部２０１は、実数ｄ１の入力データＤＩ１を保持する。また、保持部２０６は、実数ｅ２の入力データＤＩ６を保持し、保持部２０４は、実数ｅ３の入力データＤＩ４を保持し、保持部２０２は、実数ｅ１の入力データＤＩ２を保持する。
【０１２４】
これにより、乗算部１２１は、保持部２０３が保持する入力データＤＩ３（＝ｄ３）を、入力選択部１８３を介して受け、保持部２０５が保持する入力データＤＩ５（＝ｄ２）を受ける。また、乗算部１２２は、保持部２０４が保持する入力データＤＩ４（＝ｅ３）を、入力選択部１８４を介して受け、保持部２０６が保持する入力データＤＩ６（＝ｅ２）を受ける。そして、乗算部１２１は、入力データＤＩ３、ＤＩ５を乗算して演算データＤＡ１（＝ｄ２・ｄ３）を算出し、乗算部１２２は、入力データＤＩ４、ＤＩ６を乗算して演算データＤＡ２（＝ｅ２・ｅ３）を算出する。
【０１２５】
２サイクル目では、保持部２１３は、入力データＤＩ３、ＤＩ５の乗算結果である演算データＤＡ１（＝ｄ２・ｄ３）を保持し、保持部２１４は、入力データＤＩ４、ＤＩ６の乗算結果である演算データＤＡ２（＝ｅ２・ｅ３）を保持する。保持部２１１は、保持部２０１から入力選択部１８１を介して受ける入力データＤＩ１（＝ｄ１）を保持し、保持部２１２は、保持部２０２から入力選択部１８２を介して受ける入力データＤＩ２（＝ｅ１）を保持する。
【０１２６】
３サイクル目では、保持部２２３は、保持部２１３から演算選択部１６１を介して受ける演算データＤＡ１（＝ｄ２・ｄ３）を保持し、保持部２２４は、保持部２１４から演算選択部１６２を介して受ける演算データＤＡ２（＝ｅ２・ｅ３）を保持する。すなわち、保持部２２３は、演算データＤＡ１、ＤＡ３のうち演算データＤＡ１を保持し、保持部２２４は、演算データＤＡ２、ＤＡ３のうち演算データＤＡ２を保持する。また、保持部２２１は、保持部２１１から受ける入力データＤＩ１（＝ｄ１）を保持し、保持部２２２は、保持部２１２から受ける入力データＤＩ２（＝ｅ１）を保持する。
【０１２７】
また、加算部１４２は、保持部２２１が保持する入力データＤＩ１（＝ｄ１）と保持部２２３が保持する演算データＤＡ１（＝ｄ２・ｄ３）とを加算して演算結果データＤＲ１（＝ｄ１＋ｄ２・ｄ３）を算出する。加算部１４３は、保持部２２２が保持する入力データＤＩ２（＝ｅ１）と保持部２２４が保持する演算データＤＡ２（＝ｅ２・ｅ３）とを加算して演算結果データＤＲ２（＝ｅ１＋ｅ２・ｅ３）を算出する。
【０１２８】
４サイクル目では、保持部２３１は、入力データＤＩ１と演算データＤＡ１との加算結果である演算結果データＤＲ１（＝ｄ１＋ｄ２・ｄ３）を保持する。保持部２３２は、入力データＤＩ２と演算データＤＡ２との加算結果である演算結果データＤＲ２（＝ｅ１＋ｅ２・ｅ３）を保持する。これにより、２つの積和演算の結果が保持部２３１、２３２にそれぞれ保持される。
【０１２９】
このように、演算器１００Ｃは、２つの積和演算を並列に実行できる。なお、２つの積和演算を実行する場合の演算器１００Ｃの動作は、図８に示す例に限定されない。
【０１３０】
図９は、図６に示した演算器１００Ｃの比較例を示す。比較例の演算器１００ｅｘでは、図６に示した加算部１４１、演算選択部１６１、１６２、入力選択部１８１−１８４、保持部２２１−２２４が演算器１００Ｃから省かれる。また、演算器１００ｅｘは、図６に示した制御部１１０Ｃの代わりに、制御部１１０ｅｘを有する。演算器１００ｅｘのその他の構成は、図６に示した演算器１００Ｃと同一または同様である。
【０１３１】
演算器１００ｅｘは、制御部１１０ｅｘ、乗算部１２１、１２２、加算部１４２、１４３および保持部２０１−２０６、２１１−２１４、２３１−２３２を有する。乗算部１２１、加算部１４２および保持部２０１、２０３、２０５、２１１、２１３、２３１を含むブロックは、積和演算を実行する積和演算器として動作する。同様に、乗算部１２２、加算部１４３および保持部２０２、２０４、２０６、２１２、２１４、２３２を含むブロックは、積和演算を実行する積和演算器として動作する。すなわち、演算器１００ｅｘは、２つの積和演算器を有する。
【０１３２】
演算器１００ｅｘが実行する演算は、保持部２１１−２１４により、２つのステージに分けられる。すなわち、演算器１００ｅｘは、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を、２つのステージに分けて実行する。制御部１１０ｅｘは、パイプライン処理の制御を実行するとともに、加算部１４２、１４３の動作を制御する。演算器１００ｅｘでは、バタフライ演算を実行する場合の演算効率は、図１０に示すように、演算器１００Ｃに比べて低下する。
【０１３３】
図１０は、図９に示した比較例の演算器１００ｅｘの動作の一例を示す。なお、図１０は、バタフライ演算を実行する場合の演算器１００ｅｘの動作の一例を示す。図１０に示すａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３の意味は、図７に示したａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３の意味と同じである。すなわち、実数ａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３は、図１に示した演算器１００の説明で示したバタフライ演算における単位演算対Ｆｐ、Ｆｍの式（３）および式（４）の実数ａ１、ａ２、ａ３、ｂ１、ｂ２、ｂ３である。また、図１０に示すクロックは、パイプライン処理の動作クロックである。
【０１３４】
１サイクル目では、保持部２０５は、実数ａ２の入力データＤＩ５を保持し、保持部２０３は、実数ａ３の入力データＤＩ３を保持し、保持部２０１は、実数“０”の入力データＤＩ１を保持する。また、保持部２０６は、実数ａ２の入力データＤＩ６を保持し、保持部２０４は、実数ｂ３の入力データＤＩ４を保持し、保持部２０２は、実数“０”の入力データＤＩ２を保持する。
【０１３５】
これにより、乗算部１２１は、保持部２０３が保持する入力データＤＩ３（＝ａ３）と保持部２０５が保持する入力データＤＩ５（＝ａ２）とを乗算して演算データＤＡ１（＝ａ２・ａ３）を算出する。また、乗算部１２２は、保持部２０４が保持する入力データＤＩ４（＝ｂ３）と保持部２０６が保持する入力データＤＩ６（＝ａ２）とを乗算して演算データＤＡ２（＝ａ２・ｂ３）を算出する。
【０１３６】
２サイクル目では、保持部２１３は、入力データＤＩ３、ＤＩ５の乗算結果である演算データＤＡ１（＝ａ２・ａ３）を保持し、保持部２１４は、入力データＤＩ４、ＤＩ６の乗算結果である演算データＤＡ２（＝ａ２・ｂ３）を保持する。保持部２１１は、保持部２０１から受ける入力データＤＩ１（＝０）を保持し、保持部２１２は、保持部２０２から受ける入力データＤＩ２（＝０）を保持する。
【０１３７】
また、加算部１４２は、保持部２１１が保持する入力データＤＩ１（＝０）と保持部２１３が保持する演算データＤＡ１（＝ａ２・ａ３）とを加算して演算結果データＤＲ１（＝ａ２・ａ３）を算出する。加算部１４３は、保持部２１２が保持する入力データＤＩ２（＝０）と保持部２１４が保持する演算データＤＡ２（＝ａ２・ｂ３）とを加算して演算結果データＤＲ２（＝ａ２・ｂ３）を算出する。
【０１３８】
３サイクル目では、保持部２３１は、入力データＤＩ１と演算データＤＡ１との加算結果である演算結果データＤＲ１（＝ａ２・ａ３）を保持する。保持部２３２は、入力データＤＩ２と演算データＤＡ２の加算結果である演算結果データＤＲ２（＝ａ２・ｂ３）を保持する。演算結果データＤＲ１、ＤＲ２は、次のサイクル（４サイクル目）の入力データＤＩ１、ＤＩ２として保持部２０１、２０２にフィードバックされる。
【０１３９】
４サイクル目では、保持部２０５は、実数ｂ２の入力データＤＩ５を保持し、保持部２０３は、実数ｂ３の入力データＤＩ３を保持し、保持部２０１は、保持部２３１から受ける演算結果データＤＲ１（＝ａ２・ａ３）を入力データＤＩ１として保持する。また、保持部２０６は、実数ｂ２の入力データＤＩ６を保持し、保持部２０４は、実数ａ３の入力データＤＩ４を保持し、保持部２０２は、保持部２３２から受ける演算結果データＤＲ２（＝ａ２・ｂ３）を入力データＤＩ２として保持する。
【０１４０】
これにより、乗算部１２１は、保持部２０３が保持する入力データＤＩ３（＝ｂ３）と保持部２０５が保持する入力データＤＩ５（＝ｂ２）とを乗算して演算データＤＡ１（＝ｂ２・ｂ３）を算出する。また、乗算部１２２は、保持部２０４が保持する入力データＤＩ４（＝ａ３）と保持部２０６が保持する入力データＤＩ６（＝ｂ２）とを乗算して演算データＤＡ２（＝ｂ２・ａ３）を算出する。
【０１４１】
５サイクル目では、保持部２１３は、入力データＤＩ３、ＤＩ５の乗算結果である演算データＤＡ１（＝ｂ２・ｂ３）を保持し、保持部２１４は、入力データＤＩ４、ＤＩ６の乗算結果である演算データＤＡ２（＝ｂ２・ａ３）を保持する。保持部２１１は、保持部２０１から受ける入力データＤＩ１（＝ａ２・ａ３）を保持し、保持部２１２は、保持部２０２から受ける入力データＤＩ２（＝ａ２・ｂ３）を保持する。
【０１４２】
また、加算部１４２は、保持部２１３が保持する演算データＤＡ１（＝ｂ２・ｂ３）から保持部２１１が保持する入力データＤＩ１（＝ａ２・ａ３）を減算して演算結果データＤＲ１（＝ｂ２・ｂ３−ａ２・ａ３）を算出する。加算部１４３は、保持部２１４が保持する演算データＤＡ２（＝ｂ２・ａ３）と保持部２１２が保持する入力データＤＩ２（＝ａ２・ｂ３）とを加算して演算結果データＤＲ２（＝ｂ２・ａ３＋ａ２・ｂ３）を算出する。
【０１４３】
６サイクル目では、保持部２３１は、演算データＤＡ１から入力データＤＩ１を減算した結果である演算結果データＤＲ１（＝ｂ２・ｂ３−ａ２・ａ３）を保持する。保持部２３２は、演算データＤＡ２と入力データＤＩ２との加算結果である演算結果データＤＲ２（＝ｂ２・ａ３＋ａ２・ｂ３）を保持する。演算結果データＤＲ１、ＤＲ２は、次のサイクル（７サイクル目）の入力データＤＩ１、ＤＩ２として保持部２０１、２０２にフィードバックされる。
【０１４４】
７サイクル目では、保持部２０５は、実数ａ１の入力データＤＩ５を保持し、保持部２０３は、実数“１”の入力データＤＩ３を保持する。そして、保持部２０１は、保持部２３１から受ける演算結果データＤＲ１（＝ｂ２・ｂ３−ａ２・ａ３）を入力データＤＩ１として保持する。また、保持部２０６は、実数ｂ１の入力データＤＩ６を保持し、保持部２０４は、実数“１”の入力データＤＩ４を保持し、保持部２０２は、保持部２３２から受ける演算結果データＤＲ２（＝ｂ２・ａ３＋ａ２・ｂ３）を入力データＤＩ２として保持する。
【０１４５】
これにより、乗算部１２１は、保持部２０３が保持する入力データＤＩ３（＝１）と保持部２０５が保持する入力データＤＩ５（＝ａ１）とを乗算して演算データＤＡ１（＝ａ１）を算出する。また、乗算部１２２は、保持部２０４が保持する入力データＤＩ４（＝１）と保持部２０６が保持する入力データＤＩ６（＝ｂ１）とを乗算して演算データＤＡ２（＝ｂ１）を算出する。
【０１４６】
８サイクル目では、保持部２０１−２０６は、１サイクル目に保持した入力データＤＩを継続して保持する。保持部２１３は、入力データＤＩ３、ＤＩ５の乗算結果である演算データＤＡ１（＝ａ１）を保持し、保持部２１４は、入力データＤＩ４、ＤＩ６の乗算結果である演算データＤＡ２（＝ｂ１）を保持する。保持部２１１は、保持部２０１から受ける入力データＤＩ１（＝ｂ２・ｂ３−ａ２・ａ３）を保持し、保持部２１２は、保持部２０２から受ける入力データＤＩ２（＝ｂ２・ａ３＋ａ２・ｂ３）を保持する。
【０１４７】
また、加算部１４２は、保持部２１３が保持する演算データＤＡ１（＝ａ１）と保持部２１１が保持する入力データＤＩ１（＝ｂ２・ｂ３−ａ２・ａ３）とを加算して演算結果データＤＲ１（＝ａ１＋ｂ２・ｂ３−ａ２・ａ３）を算出する。加算部１４３は、保持部２１４が保持する演算データＤＡ２（＝ｂ１）と保持部２１２が保持する入力データＤＩ２（＝ｂ２・ａ３＋ａ２・ｂ３）とを加算して演算結果データＤＲ２（＝ｂ１＋ｂ２・ａ３＋ａ２・ｂ３）を算出する。
【０１４８】
９サイクル目では、保持部２１３は、入力データＤＩ３、ＤＩ５の乗算結果である演算データＤＡ１（＝ａ１）を保持し、保持部２１４は、入力データＤＩ４、ＤＩ６の乗算結果である演算データＤＡ２（＝ｂ１）を保持する。保持部２１１は、保持部２０１から受ける入力データＤＩ１（＝ｂ２・ｂ３−ａ２・ａ３）を保持し、保持部２１２は、保持部２０２から受ける入力データＤＩ２（＝ｂ２・ａ３＋ａ２・ｂ３）を保持する。
【０１４９】
保持部２３１は、演算データＤＡ１と入力データＤＩ１との加算結果である演算結果データＤＲ１（＝ａ１＋ｂ２・ｂ３−ａ２・ａ３）を保持する。保持部２３２は、演算データＤＡ２と入力データＤＩ２との加算結果である演算結果データＤＲ２（＝ｂ１＋ｂ２・ａ３＋ａ２・ｂ３）を保持する。これにより、単位演算対Ｆｐ、ＦｍのうちのＦｍの実部が保持部２３１に保持され、単位演算対Ｆｐ、ＦｍのうちのＦｐの虚部が保持部２３２に保持される。
【０１５０】
また、加算部１４２は、保持部２１３が保持する演算データＤＡ１（＝ａ１）から保持部２１１が保持する入力データＤＩ１（＝ｂ２・ｂ３−ａ２・ａ３）を減算して演算結果データＤＲ１（＝ａ１−ｂ２・ｂ３＋ａ２・ａ３）を算出する。加算部１４３は、保持部２１４が保持する演算データＤＡ２（＝ｂ１）から保持部２１２が保持する入力データＤＩ２（＝ｂ２・ａ３＋ａ２・ｂ３）を減算して演算結果データＤＲ２（＝ｂ１−ｂ２・ａ３−ａ２・ｂ３）を算出する。
【０１５１】
１０サイクル目では、保持部２３１は、演算データＤＡ１から入力データＤＩ１を減算した結果である演算結果データＤＲ１（＝ａ１−ｂ２・ｂ３＋ａ２・ａ３）を保持する。保持部２３２は、演算データＤＡ２から入力データＤＩ２を減算した結果である演算結果データＤＲ２（＝ｂ１−ｂ２・ａ３−ａ２・ｂ３）を保持する。これにより、単位演算対Ｆｐ、ＦｍのうちのＦｐの実部が保持部２３１に保持され、単位演算対Ｆｐ、ＦｍのうちのＦｍの虚部が保持部２３２に保持される。なお、保持部２３１、２３２が９サイクル目に保持した演算結果データＤＲ１、ＤＲ２は、演算器１００Ｃの外部のレジスタファイル等に転送される。
【０１５２】
このように、比較例の演算器１００ｅｘは、演算器１００Ｃのレイテンシ（４サイクル）の約２倍のレイテンシ（９サイクル）でバタフライ演算を実行する。また、演算器１００ｅｘがバタフライ演算を連続して実行する際のサイクルピッチは、演算器１００ｅｘがバタフライ演算を連続して実行する際のサイクルピッチ（２サイクル）の４倍（８サイクル）である。すなわち、演算器１００Ｃは、演算器１００ｅｘに比べて、バタフライ演算のレイテンシを約半分に低減でき、さらに、バタフライ演算を連続して実行する際のサイクルピッチを約１／４に低減できる。このように、演算器１００Ｃでは、演算器１００ｅｘに比べて、バタフライ演算のスループットを向上することができる。
【０１５３】
また、例えば、比較例の演算器１００ｅｘでは、保持部２０１−２０６がそれぞれ保持する入力データＤＩは、１つのバタフライ演算で２回更新される。保持部２０３−２０６がそれぞれ保持する入力データＤＩの更新では、レジスタファイルから入力データＤＩを読み出す処理等が実行される。レジスタファイルから入力データＤＩを読み出す処理の実行回数が増えるほど、消費電力は増加する。
【０１５４】
これに対し、演算器１００Ｃは、図７に示したように、保持部２０１−２０６がそれぞれ保持する入力データＤＩを更新することなく、１つのバタフライ演算を実行できる。このため、演算器１００Ｃは、演算器１００ｅｘに比べて、バタフライ演算を実行する際の消費電力を低減できる。
【０１５５】
以上、図６から図８に示す実施形態においても、図１から図５に示した実施形態と同様の効果を得ることができる。例えば、加算部１４２、１４３は、演算器１００Ｃが実行する演算の内容に応じた演算データＤＡを演算選択部１６１、１６２からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器１００Ｃの演算効率を向上することができる。
【０１５６】
さらに、入力選択部１８１、１８２、１８３、１８４は、バタフライ演算における単位演算対Ｆｐ、Ｆｍの実部を算出する演算と虚部を算出する演算とで、次段（例えば、加算部１４２、１４３、乗算部１２１、１２２）に出力するデータを切り替える。これにより、保持部２０１−２０６が保持する入力データＤＩを１回目の演算と２回目の演算とで入れ替えることなく、バタフライ演算における単位演算対Ｆｐ、Ｆｍの実部と虚部を算出することができ、バタフライ演算を効率よく実行することができる。
【０１５７】
また、演算器１００Ｃは、パイプライン処理方式を採用し、２サイクルピッチでバタフライ演算を連続して実行できる。これにより、バタフライ演算を連続して実行する際の演算効率を図９に示した比較例の演算器１００ｅｘに比べて向上することができる。
【０１５８】
図１１は、演算器および演算器の制御方法の別の実施形態を示す。図１から図１０で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図１１に示す演算器１００Ｄは、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を、複数のステージに分けて実行する。すなわち、演算器１００Ｄは、演算器１００Ｃと同様に、パイプライン処理方式を採用している。なお、演算器１００Ｄは、図１１には図示していないが、図１に示した演算器１００と同様に、ＣＰＵ等のプロセッサである演算処理装置１０に含まれる。
【０１５９】
演算器１００Ｄは、丸め部１９０、１９１、１９２が図６に示した演算器１００Ｃに追加されることを除いて、図６に示した演算器１００Ｃと同一または同様である。また、演算器１００Ｄの動作は、丸め部１９０、１９１、１９２の丸め処理を除いて、図６に示した演算器１００Ｃの動作と同一または同様であり、図５、図７、図８等により説明される。
【０１６０】
例えば、演算器１００Ｄは、制御部１１０Ｃ、乗算部１２１、１２２、加算部１４１、１４２、１４３、演算選択部１６１、１６２、入力選択部１８１、１８２、１８３、１８４および保持部２０１−２０６、２１１−２１４、２２１−２２４、２３１−２３２を有する。さらに、演算器１００Ｄは、丸め部１９０、１９１、１９２を有する。
【０１６１】
丸め部１９０は、加算部１４１の加算結果である演算データＤＡ３の仮数部の精度を入力データＤＩの仮数部の精度に基づいて丸める。したがって、演算選択部１６１、１６２等は、丸め部１９０により丸められた演算データＤＡ３を受ける。
【０１６２】
例えば、入力データＤＩがＩＥＥＥ（The Institute of Electrical and Electronics Engineers）７５４に準拠した単精度浮動小数点数の場合、仮数部の精度は、２４ビットである。この場合、乗算部１２１等の乗算結果の精度は、最大で４８ビットである。したがって、演算器１００Ｄが積和演算を実行する場合、例えば、加算部１４２が受ける演算データＤＡ１は４８ビット精度になり、加算部１４２が受ける入力データＤＩ１は２４ビット精度になる。この場合、加算部１４１の出力である演算データＤＡ３は、加算部１４１、１４２の入力であるため、演算データＤＡ３の仮数部の精度を４８ビットに丸めると、コストに対する効果を効率よく得ることができる。したがって、丸め部１９０は、入力データＤＩがＩＥＥＥ７５４に準拠した単精度浮動小数点数の場合、演算データＤＡ３の仮数部の精度を４８ビットに丸める。
【０１６３】
なお、丸め部１９０は、入力データＤＩがＩＥＥＥ７５４に準拠した単精度浮動小数点数の場合、演算データＤＡ３の仮数部の精度を２４ビットに丸めてもよい。この場合、丸め部１９１、１９２等の丸めの結果が丸め部１９０による丸めの有無によって異なる二重丸めが発生することを防止できる。
【０１６４】
丸め部１９１は、加算部１４２の加算結果である演算結果データＤＲ１の仮数部の精度を、ＩＥＥＥ７５４に準拠した浮動小数点数の精度に基づいて、丸める。同様に、丸め部１９２は、加算部１４３の加算結果である演算結果データＤＲ２の仮数部の精度を、ＩＥＥＥ７５４に準拠した浮動小数点数の精度に基づいて、丸める。したがって、保持部２３１は、丸め部１９１により丸められた演算結果データＤＲ１を保持し、保持部２３２は、丸め部１９２により丸められた演算結果データＤＲ２を保持する。このように、演算器１００Ｄは、ＩＥＥＥ７５４に準拠した浮動小数点数の精度で積和演算等を実行できる。
【０１６５】
なお、演算器１００Ｄの構成は、図１１に示す例に限定されない。例えば、丸め部１９０、１９１、１９２は、図１、図３、図４に示した演算器１００、１００Ａ、１００Ｂのいずれかに追加されてもよい。
【０１６６】
以上、図１１に示す実施形態においても、図１から図８に示した実施形態と同様の効果を得ることができる。例えば、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。すなわち、演算器１００Ｄの演算効率を向上することができる。さらに、演算器１００Ｄは、丸め部１９０、１９１、１９２による丸め処理により、積和演算等をＩＥＥＥ７５４に準拠した浮動小数点数の精度で実行できる。
【０１６７】
図１２は、演算器および演算器の制御方法の別の実施形態を示す。図１から図１１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図１２に示す演算器１００Ｅは、１つの命令に基づいて演算を同時に実行するＳＩＭＤ（Single Instruction Multiple Data）演算器である。なお、演算器１００Ｅは、図１２には図示していないが、図１に示した演算器１００と同様に、ＣＰＵ等のプロセッサである演算処理装置１０に含まれる。
【０１６８】
演算器１００Ｅは、複数の入力データＤＩ（ＤＩ１、ＤＩ２、ＤＩ３、ＤＩ４、ＤＩ５、ＤＩ６）を用いる演算を実行する複数の単位演算部１０２と、保持部２０１、２０２、２０３、２０４、２０５、２０６と、並び替え部２４０とを有する。さらに、演算器１００Ｅは、複数の単位演算部１０２のそれぞれの演算結果データＤＲ１、ＤＲ２を保持するレジスタファイル２５０を有する。
【０１６９】
各単位演算部１０２は、例えば、図１１に示した演算器１００Ｄから保持部２０１−２０６を除いた部分と同一または同様である。例えば、単位演算部１０２は、図１１に示した制御部１１０Ｃと乗算部１２１、１２２と加算部１４１、１４２、１４３と演算選択部１６１、１６２と入力選択部１８１、１８２、１８３、１８４と丸め部１９０、１９１、１９２と保持部２３１、２３２とを有する。なお、図１１に示した演算器１００Ｄが有する保持部２０１、２０２、２０３、２０４、２０５、２０６は、図１２に示す保持部２０１、２０２、２０３、２０４、２０５、２０６である。保持部２０１、２０２、２０３、２０４、２０５、２０６を含む保持部群は、単位演算部１０２毎に設けられる。すなわち、演算器１００Ｅは、複数の演算器１００Ｄと並び替え部２４０とレジスタファイル２５０とを有する。
【０１７０】
並び替え部２４０は、複数の単位演算部１０２のそれぞれの演算結果データＤＲ１、ＤＲ２を受ける。そして、並び替え部２４０は、単位演算部１０２から受けた演算結果データＤＲ１、ＤＲ２を、レジスタファイル２５０が有するレジスタ２５１、２５２の対応する領域に格納する。例えば、並び替え部２４０は、複数のセレクタ２４１（例えば、複数の単位演算部１０２の数の２倍の数のセレクタ２４１）を有する。各セレクタ２４１は、複数の単位演算部１０２のそれぞれの演算結果データＤＲ１、ＤＲ２を受け、受けた演算結果データＤＲ１、ＤＲ２のいずれかをレジスタ２５１、２５２の対応する領域に格納する。なお、図１２では、図を見やすくするために、並び替え部２４０内の一部の信号線の記載を省略している。
【０１７１】
例えば、並び替え部２４０は、セレクタ２４１による演算結果データＤＲの選択動作を制御することにより、単位演算部１０２から受けた演算結果データＤＲ１、ＤＲ２を並べ替えてレジスタ２５１、２５２の対応する領域に格納できる。図１２に示す括弧内の“Ｒｅ”は、複素数の実部を示し、“Ｉｍ”は、複素数の虚部を示す。並び替え部２４０は、バタフライ演算を繰り返して実行する場合、実部（Ｒｅ）と虚部（Ｉｍ）との配置が、入力と出力で同じになるように、複数の単位演算部１０２のそれぞれの演算結果データＤＲ１、ＤＲ２を並べ替えてレジスタファイル２５０に格納する。
【０１７２】
例えば、図７で説明したように、保持部２３１、２３２がそれぞれ保持するデータのペアは、４サイクル目では、単位演算対Ｆｐ、ＦｍのうちのＦｐの実部とＦｍの実部とのペアであり、５サイクル目では、Ｆｐの虚部とＦｍの虚部とのペアである。この場合、単位演算部１０２の入力と出力とで、複素数の実部と虚部との配置が異なる。このため、並び替え部２４０は、単位演算対Ｆｐ、Ｆｍのそれぞれの実部と虚部とがペアになるように、演算結果データＤＲ１、ＤＲ２を並べ替えてレジスタファイル２５０に格納する。
【０１７３】
また、Ｎ点（Ｎは、例えば、２の累乗）のＦＦＴにおけるバタフライ演算では、次段のバタフライ演算における単位演算部１０２の入力データＤＩは、図１４に示すように、隣接しない単位演算部１０２の演算結果データＤＲになる場合がある。このため、演算器１００Ｅでは、次段の入力に備えて、並び替え部２４０が演算結果データＤＲ１、ＤＲ２を並び替える。これにより、バタフライ演算を繰り返して実行する際の演算効率を向上することができる。
【０１７４】
このように、並び替え部２４０は、レジスタファイル２５０が保持する演算結果データＤＲ１、ＤＲ２を複数の単位演算部１０２のいずれかにフィードバックする場合、演算結果データＤＲ１、ＤＲ２をフィードバック経路に応じて並べ替える。これにより、演算結果データＤＲをフィードバックして複数の単位演算部１０２が演算を繰り返し実行する場合、複数の単位演算部１０２のそれぞれの演算結果データＤＲ１、ＤＲ２は、フィードバック経路に応じて並べ替えてレジスタファイル２５０に格納される。
【０１７５】
なお、並び替え部２４０による演算結果データＤＲ１、ＤＲ２の並び替えは、例えば、演算器１００Ｅを含む演算処理装置１０に実装される並び替えを実行する命令を用いることにより、実現される。
【０１７６】
演算器１００Ｅの構成は、図１２に示す例に限定されない。例えば、各単位演算部１０２は、図１に示した演算器１００でもよいし、図３、図４および図６に示した演算器１００Ａ、１００Ｂ、１００Ｃのいずれかから保持部２０１−２０６を除いた構成でもよい。また、各単位演算部１０２は、図３、図４、図６および図１１に示した演算器１００Ａ、１００Ｂ、１００Ｃ、１００Ｄのいずれかから保持部２０１−２０６、２３１、２３２を除いた構成でもよい。また、単位演算部１０２の数は、８つに限定されない。
【０１７７】
図１３は、図１２に示した並び替え部２４０によるデータの並び替えの一例を示す。図１３に示す“Ｒｅ”、“Ｉｍ”の意味は、図１２に示した“Ｒｅ”、“Ｉｍ”の意味と同じである。
【０１７８】
演算器１００Ｅは、バタフライ演算を実行する場合、図７等で説明したように、保持部２０１、２０３、２０５に複素数の実部（Ｒｅ）を格納し、保持部２０２、２０４、２０６に複素数の虚部（Ｉｍ）を格納する。このため、演算結果データＤＲ１、ＤＲ２をレジスタファイル２５０に格納する場合、並び替え部２４０は、単位演算対Ｆｐ、Ｆｍのそれぞれの実部と虚部とがペアになるように、演算結果データＤＲ１、ＤＲ２を並べ替えてレジスタファイル２５０に格納する。
【０１７９】
例えば、図７で説明したように、単位演算部１０２が有する保持部２３１は、単位演算対Ｆｐ、ＦｍのうちのＦｐの実部と虚部とを演算結果データＤＲ１として順次保持する。同様に、単位演算部１０２が有する保持部２３２は、単位演算対Ｆｐ、ＦｍのうちのＦｍの実部と虚部とを演算結果データＤＲ２として順次保持する。このため、並び替え部２４０は、図１３に示すように、単位演算対Ｆｐ、Ｆｍのそれぞれの実部と虚部とがペアになるように、演算結果データＤＲ１、ＤＲ２を並べ替えてレジスタファイル２５０に格納する。これにより、次のバタフライ演算等に演算結果データＤＲを容易に用いることができる。
【０１８０】
図１４は、１６点のＦＦＴにおけるバタフライ演算のデータの流れの一例を示す。図１４に示す“Ｒｅ”、“Ｉｍ”の意味は、図１２に示した“Ｒｅ”、“Ｉｍ”の意味と同じである。図１４に示す例では、演算器１００Ｅは、８つのバタフライ演算の実行により２回に分けて出力する１６個の演算結果データＤＲのうち、前半８つ分と後半８つ分とをそれぞれレジスタ２５１、２５２に割り当てる。例えば、演算器１００Ｅは、演算結果データＤＲの転送経路（図の矢印の経路）を並び替え部２４０で制御して演算結果データＤＲをレジスタファイル２５０のレジスタ２５１、２５２に格納する。そして、演算器１００Ｅは、レジスタファイル２５０のレジスタ２５１、２５２に格納した演算結果データＤＲを、次のバタフライ演算の保持部２０１−２０６等に投入する。あるいは、演算器１００Ｅは、並び替え部２４０からの出力を経路分岐して、演算結果データＤＲを次のバタフライ演算の保持部２０１−２０６等に投入する。
【０１８１】
図１４に示すように、例えば、１段目のバタフライ演算（図１４の一番上に記載したバタフライ演算）から２段目のバタフライ演算にわたる部分におけるデータの入出力でねじれが発生する。このため、並び替え部２４０は、図１５に示すように、演算結果データＤＲを並べ替えることにより、１段目のバタフライ演算から２段目のバタフライ演算にわたる部分におけるデータの入出力のねじれを解消する。
【０１８２】
なお、レジスタ２５１、２５２のレジスタ長が複素数で８対のデータを格納する大きさの場合、レジスタ２５１、２５２の要素位置（記憶領域）としては、３段目のバタフライ演算から４段目のバタフライ演算にわたる部分は、ねじれていない場合と変わらない。このため、図１４に示すデータの流れでは、３段目のバタフライ演算から４段目のバタフライ演算にわたる部分において、データの入出力にねじれが発生しているが、図１３に示したように、演算結果データＤＲ１、ＤＲ２を並べ替えればよい。例えば、４段目のバタフライ演算の入力として指示するレジスタの番号を対応する番号に設定すれば、図１３に示したデータの並び替えでよい。
【０１８３】
図１４に示す最初の２つのねじれを別扱いとすれば、Ｎ点（Ｎは、例えば、２の累乗）のＦＦＴにおけるバタフライ演算では、Ｎが大きくなるほど、図１３に示したデータの並び替えで対応できるケースが増加する。
【０１８４】
図１５は、図１２に示した並び替え部２４０によるデータの並び替えの別の例を示す。図１５に示す“Ｒｅ”、“Ｉｍ”の意味は、図１２に示した“Ｒｅ”、“Ｉｍ”の意味と同じである。図１４に示したように、バタフライ演算の段階によっては、次のバタフライ演算に必要なデータが前段のバタフライ演算の結果と同じレジスタ２５１、２５２に格納されてしまう離れた要素である場合がある。このため、演算器１００Ｅは、単位演算部１０２の演算結果ＤＲ１、ＤＲ２（演算結果データＤＲ１、ＤＲ２）を、並び替え部２４０を用いて並び替え、データの入出力のねじれを解消する。図１５に示すデータ経路は、図１４に示した１段目のバタフライ演算から２段目のバタフライ演算にわたる部分におけるデータの入出力のねじれを解消するように、演算結果データＤＲ１、ＤＲ２を並び替えた場合を示す。
【０１８５】
以上、図１２から図１５に示す実施形態においても、図１から図１１に示した実施形態と同様の効果を得ることができる。例えば、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。すなわち、演算器１００Ｅの演算効率を向上することができる。さらに、演算器１００Ｅは、Ｎ点（Ｎは、例えば、２の累乗）のＦＦＴにおけるバタフライ演算を実行する場合等、演算結果データＤＲ１、ＤＲ２を並び替え部２４０で並べ替えてレジスタファイル２５０に格納する。これにより、次のバタフライ演算等に演算結果データＤＲを容易に用いることができる。
【０１８６】
図１６は、演算器を含む演算処理装置１０の一例を示す。演算処理装置１０は、命令制御部３００、実行部３１０、ロードストア部３２０、入出力装置３３０およびメモリ３４０を有する。
【０１８７】
命令制御部３００は、例えば、命令をデコードして、デコードした命令を実行部３１０およびロードストア部３２０に出力する。実行部３１０は、命令制御部３００から受ける命令（デコード後の命令）を実行する。例えば、実行部３１０は、レジスタファイル３１２、固定小数点演算部１００ＦＸおよび浮動小数点演算部１００ＦＬを有する。
【０１８８】
レジスタファイル３１２は、固定小数点演算部１００ＦＸおよび浮動小数点演算部１００ＦＬ等で使用するデータ（例えば、入力データＤＩ）を保持する。固定小数点演算部１００ＦＸは、固定小数点数の演算を実行する。例えば、固定小数点演算部１００ＦＸは、図１、図３、図４、図６および図１２に示した演算器１００、１００Ａ、１００Ｂ、１００Ｃ、１００Ｅのいずれかである。この場合、図１等に示した乗算部１２１、１２２、加算部１４１、１４２、１４３の各々は、固定小数点数の演算を実行する。浮動小数点演算部１００ＦＬは、浮動小数点数の演算を実行する。例えば、浮動小数点演算部１００ＦＬは、図１、図３、図４、図６、図１１および図１２に示した演算器１００、１００Ａ、１００Ｂ、１００Ｃ、１００Ｄ、１００Ｅのいずれかである。この場合、図１等に示した乗算部１２１、１２２、加算部１４１、１４２、１４３の各々は、浮動小数点数の演算を実行する。
【０１８９】
ここで、例えば、固定小数点演算部１００ＦＸおよび浮動小数点演算部１００ＦＬのいずれかが図１２に示した演算器１００Ｅの場合、レジスタファイル３１２の一部が図１２に示したレジスタファイル２５０に対応する。
【０１９０】
ロードストア部３２０は、命令制御部３００から受ける命令（デコード後の命令）に基づいて、入出力装置３３０およびメモリ３４０のそれぞれに対するデータのロードまたはストアを実行する。例えば、ロードストア部３２０は、キャッシュメモリ３２２を有する。キャッシュメモリ３２２は、メモリ３４０が記憶するデータの一部を保持する。キャッシュメモリ３２２が保持するデータは、実行部３１０に使用される。
【０１９１】
入出力装置３３０は、例えば、演算処理装置１０にデータを入力するキーボード等の入力装置および演算処理装置１０の処理結果を外部に出力するディスプレイ等の出力装置である。メモリ３４０は、例えば、キャッシュメモリ３２２より下位の階層の主記憶装置である。
【０１９２】
このように、演算処理装置１０では、固定小数点演算部１００ＦＸおよび浮動小数点演算部１００ＦＬ等の演算器は、レジスタファイル３１２等にアクセスして、積和演算、バタフライ演算等を実行する。ここで、半導体集積回路における微細化において、配線の縮小率がトランジスタの縮小率より悪いため、演算器の周辺の実装設計では、配線、特にレジスタファイル３１２等と演算器とを接続するバスが小型化の際のボトルネックになる。換言すると、図１等に示す加算部１４１および演算選択部１６１、１６２を図９に示す演算器１００ｅｘに追加しても、演算器の入出力の配線が増加しないため、面積コストにほとんど影響を与えない。すなわち、図１、図３、図４、図６、図１１および図１２に示した演算器１００、１００Ａ、１００Ｂ、１００Ｃ、１００Ｄ、１００Ｅは、演算処理装置１０の面積コストにほとんど影響を与えずに、従来の演算器に比べて演算効率を向上できる。なお、演算器を含む演算処理装置１０の構成は、図１６に示す例に限定されない。
【０１９３】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１９４】
１０‥演算処理装置；１００、１００Ａ、１００Ｂ、１００Ｃ、１００Ｄ、１００Ｅ、１００ｅｘ‥演算器；１００ＦＸ‥固定小数点演算部；１００ＦＬ‥浮動小数点演算部；１０２‥単位演算部；１１０Ａ、１１０Ｂ、１１０Ｃ‥制御部；１２１、１２２‥乗算部；１４１、１４２、１４３‥加算部；１６１、１６２‥演算選択部；１８１、１８２、１８３、１８４‥入力選択部；１９０、１９１、１９２‥丸め部；２０１−２０６、２１１−２１４、２２１−２２４、２３１−２３２‥保持部；２４０‥並び替え部；２４１‥セレクタ；２５０‥レジスタファイル；２５１、２５２‥レジスタ；３００‥命令制御部；３１０‥実行部；３２０‥ロードストア部；３２２‥キャッシュメモリ；３３０‥入出力装置；３４０‥メモリ；３１２‥レジスタファイル
【図１】
2018156266.tif 000003
【図２】
2018156266.tif 000004
【図３】
2018156266.tif 000005
【図４】
2018156266.tif 000006
【図５】
2018156266.tif 000007
【図６】
2018156266.tif 000008
【図７】
2018156266.tif 000009
【図８】
2018156266.tif 000010
【図９】
2018156266.tif 000011
【図１０】
2018156266.tif 000012
【図１１】
2018156266.tif 000013
【図１２】
2018156266.tif 000014
【図１３】
2018156266.tif 000015
【図１４】
2018156266.tif 000016
【図１５】
2018156266.tif 000017
【図１６】
2018156266.tif 000018