以下、実施形態について、図面を用いて説明する。
図1は、演算器および演算器の制御方法の一実施形態を示す。図1に示す演算器100は、CPU等のプロセッサである演算処理装置10に含まれ、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を実行する。演算の対象となる複数の入力データDIは、図示しない保持部に保持される。なお、入力データDIの数は、6つに限定されない。演算処理装置10は、命令に応じた演算を、演算器100を用いて実行する。演算器100は、乗算部121、122、加算部141、142、143および演算選択部161、162を有する。
乗算部121は、複数の入力データDIのうちの入力データDI3、DI5を受ける。そして、乗算部121は、入力データDI3と入力データDI5とを乗算し、乗算結果DA1(以下、演算データDA1とも称する)を加算部141および演算選択部161に出力する。乗算部121は、2つの入力データDIを乗算して第1の演算データDA1を算出する第1の乗算部の一例である。
乗算部122は、複数の入力データDIのうちの入力データDI4、DI6を受ける。そして、乗算部122は、入力データDI4と入力データDI6とを乗算し、乗算結果DA2(以下、演算データDA2とも称する)を加算部141および演算選択部162に出力する。乗算部122は、2つの入力データDIを乗算して第2の演算データDA2を算出する第2の乗算部の一例である。
加算部141は、演算データDA1と演算データDA2とを加算し、加算結果DA3(以下、演算データDA3とも称する)を演算選択部161、162に出力する。加算部141は、第1の演算データDA1と第2の演算データDA2とを加算して第3の演算データDA3を算出する第1の加算部の一例である。なお、加算部141、142、143が実行する加算は、2つのデータを加算する加算と、2つのデータの他方から一方を減算する減算の両方を含む。例えば、2つのデータの一方を負にして加算することにより、2つのデータの他方から一方を減算した結果が得られる。加算部141は、演算器100が実行する演算の内容に基づいて、加算および減算のいずれかを実行する。以下では、“加算”および“減算”を特に区別せずに“加算”と称する場合もある。
演算選択部161は、演算器100が実行する演算の内容に基づいて、演算データDA1、DA3のいずれかを選択し、選択した演算データDAを加算部142に出力する。演算選択部161は、第1の演算データDA1および第3の演算データDA3のいずれかを選択する第1の演算選択部の一例である。
例えば、演算器100がFFTにおける基本演算であるバタフライ演算を実行する場合、演算選択部161は、演算データDA1、DA3のうち、演算データDA3を加算部142に出力する。なお、バタフライ演算は、例えば、後述する式(1)および式(2)で表される単位演算対Fp、Fmを算出する演算である。
また、例えば、演算器100がバタフライ演算以外の演算(例えば、積和演算)を実行する場合、演算選択部161は、演算データDA1、DA3のうち、演算データDA1を加算部142に出力する。この場合、乗算部121および加算部142を含む演算部は、積和演算を実行する演算器として機能する。
演算選択部162は、演算器100が実行する演算の内容に基づいて、演算データDA2、DA3のいずれかを選択し、選択した演算データDAを加算部143に出力する。演算選択部162は、第2の演算データDA2および第3の演算データDA3のいずれかを選択する第2の演算選択部の一例である。
例えば、演算選択部162は、演算器100がバタフライ演算を実行する場合、演算データDA3を加算部142に出力し、演算器100がバタフライ演算以外の演算を実行する場合、演算データDA2を加算部143に出力する。演算選択部162が演算データDA2を加算部143に出力する場合、乗算部122および加算部143を含む演算部は、積和演算を実行する演算器として機能する。すなわち、演算器100は、乗算部121、122および加算部142、143を用いて、2つの積和演算を並列に実行できる。
加算部142は、複数の入力データDIのうちの入力データDI1と演算選択部161から受ける演算データDAとを加算し、加算結果DR1(以下、演算結果データDR1とも称する)を図示しないレジスタ等に出力する。加算部142は、入力データDI1と第1の演算選択部161が選択した演算データDAとを加算して第1の演算結果データDR1を算出する第2の加算部の一例である。なお、加算部142は、加算部141と同様に、演算器100が実行する演算の内容に基づいて、加算および減算のいずれかを実行する。
加算部143は、複数の入力データDIのうちの入力データDI2と演算選択部162から受ける演算データDAとを加算し、加算結果DR2(以下、演算結果データDR2とも称する)を図示しないレジスタ等に出力する。加算部143は、入力データDI2と第2の演算選択部162が選択した演算データDAとを加算して第2の演算結果データDR2を算出する第3の加算部の一例である。なお、加算部143は、加算部141、42と同様に、演算器100が実行する演算の内容に基づいて、加算および減算のいずれかを実行する。
ここで、バタフライ演算を実行する場合を例にして、演算器100の動作を説明する。バタフライ演算における単位演算対Fp、Fmは、複素数c1、c2と、回転子Wtを用いて、式(1)および式(2)で表される。
Fp=c1+c2×Wt ‥(1)
Fm=c1−c2×Wt ‥(2)
N点(Nは、例えば、2の累乗)のFFTにおけるバタフライ演算では、回転子Wtは、“exp((−2πt/N)i)”で表される。したがって、式(1)および式(2)は、c1=a1+b1・i、c2=a2+b2・i、Wt=c3=a3+b3・iとすると、式(3)および式(4)に変形される。なお、c3は、複素数であり、a1、a2、a3、b1、b2、b3は、浮動小数点数または固定小数点数等のコンピュータの数値表現で表される実数である。
Fp=(a1+(a2・a3−b2・b3))+i(b1+(a2・b3+a3・b2))
‥(3)
Fm=(a1−(a2・a3−b2・b3))+i(b1−(a2・b3+a3・b2))
‥(4)
例えば、単位演算対Fp、Fmの実部を算出する場合、演算器100の図示しない保持部は、実数a1、a1、a3、b3、a2、b2をそれぞれ入力データDI1、DI2、DI3、DI4、DI5、DI6として保持する。この場合、乗算部121は、“a2・a3”を演算データDA1として算出し、乗算部122は、“b2・b3”を演算データDA2として算出する。加算部141は、“a2・a3−b2・b3”を演算データDA3として算出する。また、演算選択部161、162は、演算データDA3を選択する。これにより、加算部142は、“a1+(a2・a3−b2・b3)”を演算結果データDR1として算出する。また、加算部143は、“a1−(a2・a3−b2・b3)”を演算結果データDR2として算出する。このように、単位演算対Fp、Fmの実部が演算結果データDR1、DR2としてそれぞれ算出される。
また、単位演算対Fp、Fmの虚部を算出する場合、演算器100の図示しない保持部は、実数b1、b1、b3、a3、a2、b2をそれぞれ入力データDI1、DI2、DI3、DI4、DI5、DI6として保持する。この場合、乗算部121は、“a2・b3”を演算データDA1として算出し、乗算部122は、“a3・b2”を演算データDA2として算出する。加算部141は、“a2・b3+a3・b2”を演算データDA3として算出する。また、演算選択部161、162は、演算データDA3を選択する。これにより、加算部142は、“b1+(a2・b3+a3・b2)”を演算結果データDR1として算出する。また、加算部143は、“b1−(a2・b3+a3・b2)”を演算結果データDR2として算出する。このように、単位演算対Fp、Fmの虚部が演算結果データDR1、DR2としてそれぞれ算出される。
このように、演算器100は、乗算部121、122、加算部141、142、143を用いた演算を、入力データDIを入れ替えて2回実行することにより、単位演算対Fp、Fmを算出できる。
これに対し、加算部141および演算選択部161、162が省かれた演算器は、例えば、単位演算対Fp、Fmの実部の一部である“a2・a3−b2・b3”を算出する場合、“a2・a3”および“b2・b3”の一方を先に算出する。そして、演算器は、算出した乗算結果(“a2・a3”および“b2・b3”の一方)を入力データDI1等にフィードバックして、“a2・a3−b2・b3”を算出する。このため、加算部141および演算選択部161、162が省かれた演算器では、演算器100に比べて、バタフライ演算を実行する際の演算効率(例えば、スループット等)が低下する。換言すれば、演算器100は、加算部141および演算選択部161、162が省かれた演算器に比べて、バタフライ演算を実行する際の演算効率を向上できる。
なお、演算器100の構成は、図1に示す例に限定されない。例えば、演算器100は、入力データDI1、DI2のいずれかを加算部142に出力する入力選択部を有してもよい。また、演算器100は、入力データDI1、DI2のいずれかを加算部143に出力する入力選択部を有してもよい。
図2は、図1に示した演算器100の動作の一例を示す。図2に示す動作は、演算器の制御方法の一態様である。なお、演算器100の動作は、図2に示す例に限定されない。
ステップS10では、乗算部121は、入力データDI3、DI5を乗算して演算データDA1を算出し、乗算部122は、入力データDI4、DI6を乗算して演算データDA2を算出する。
次に、ステップS12では、加算部141は、演算データDA1と演算データDA2とを加算して演算データDA3を算出する。
次に、ステップS14では、演算器100が実行する演算の内容に基づいて、演算選択部161は演算データDA1、DA3のいずれかを選択し、演算選択部162は演算データDA2、DA3のいずれかを選択する。例えば、演算器100がバタフライ演算を実行する場合、演算選択部161、162は、演算データDA3を選択する。また、演算器100がバタフライ演算以外の演算を実行する場合、演算選択部161は、演算データDA1を選択し、演算選択部162は、演算データDA2を選択する。
次に、ステップS16では、加算部142は、演算選択部161が演算データDA1、DA3から選択した演算データDAと、入力データDI1とを加算して演算結果データDR1を算出する。また、加算部143は、演算選択部162が演算データDA2、DA3から選択した演算データDAと、入力データDI2とを加算して演算結果データDR2を算出する。
例えば、演算器100がバタフライ演算を実行する場合、加算部142は、入力データDI1および演算データDA3を受け、加算部143は、入力データDI2および演算データDA3を受ける。そして、加算部142は、入力データDI1と演算データDA3とを加算して演算結果データDR1を算出し、加算部143は、入力データDI2と演算データDA3とを加算して演算結果データDR2を算出する。このように、演算器100は、演算選択部161、162が演算データDA3を選択することにより、乗算部121等の乗算結果を入力にフィードバックしなくてよいため、バタフライ演算を効率よく実行できる。
また、演算器100がバタフライ演算以外の演算を実行する場合、加算部142は、入力データDI1および演算データDA1を受け、加算部143は、入力データDI2および演算データDA2を受ける。そして、加算部142は、入力データDI1と演算データDA1とを加算して演算結果データDR1を算出し、加算部143は、入力データDI2と演算データDA2とを加算して演算結果データDR2を算出する。このように、演算器100は、演算選択部161、162が演算データDA1、DA2をそれぞれ選択することにより、バタフライ演算以外の演算も効率よく実行できる。例えば、演算器100は、2つの積和演算を並列に実行できる。
以上、図1および図2に示す実施形態では、加算部141は、乗算部121の乗算結果である演算データDA1と乗算部122の乗算結果である演算データDA2とを加算して演算データDA3を算出する。そして、演算器100が実行する演算の内容に基づいて、演算選択部161は演算データDA1、DA3のいずれかを加算部142に出力し、演算選択部162は演算データDA2、DA3のいずれかを加算部143に出力する。加算部142は、入力データDI1と演算選択部161から受ける演算データDAとを加算して演算結果データDR1を算出する。また、加算部143は、入力データDI2と演算選択部162から受ける演算データDAとを加算して演算結果データDR2を算出する。
このように、加算部142、143は、演算器100が実行する演算の内容に応じた演算データDAを演算選択部161、162からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器100の演算効率を向上することができる。
図3は、演算器および演算器の制御方法の別の実施形態を示す。図1で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図3に示す演算器100Aは、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を実行する。なお、演算器100Aは、図2には図示していないが、図1に示した演算器100と同様に、CPU等のプロセッサである演算処理装置10に含まれる。
演算器100Aは、制御部110A、入力選択部182および保持部201、202、203、204、205、206、231、232が図1に示した演算器100に追加されることを除いて、図1に示した演算器100と同一または同様である。演算器100Aは、制御部110A、乗算部121、122、加算部141、142、143、演算選択部161、162、入力選択部182および保持部201−206、231、232を有する。
複数の保持部201−206は、演算の対象となる複数の入力データDIをそれぞれ保持する。保持部201は第1の保持部の一例であり、保持部202は第2の保持部の一例であり、保持部203は第3の保持部の一例であり、保持部204は第4の保持部の一例であり、保持部205は第5の保持部の一例であり、保持部206は第6の保持部の一例である。図3に示す例では、保持部201が保持する入力データDI1は、加算部142および入力選択部182に出力され、保持部202が保持する入力データDI2は、入力選択部182に出力される。また、保持部203が保持する入力データDI3および保持部205が保持する入力データDI5は、乗算部121に出力され、保持部204が保持する入力データDI4および保持部206が保持する入力データDI6は、乗算部122に出力される。
制御部110Aは、演算器100Aが実行する演算の内容に基づいて、加算部141、142、143、演算選択部161、162および入力選択部182の動作を制御する。例えば、制御部110Aは、演算器100Aが実行する演算の内容に基づいて、2つのデータを加算する加算と、2つのデータの他方から一方を減算する減算のどちらを実行するかを、加算部141、142、143の各々に指示する。これにより、加算部141、142、143は、演算器100Aが実行する演算の内容に基づいて、加算および減算のいずれかを実行する。また、制御部110Aは、演算器100Aが実行する演算の内容に基づいて、入力選択部182および演算選択部161、162の各々による選択動作を制御する。
入力選択部182は、制御部110Aからの制御に基づいて、入力データDI1、DI2のいずれかを選択し、選択した入力データDIを加算部143に出力する。例えば、演算器100AがFFTにおける基本演算であるバタフライ演算を実行する場合、入力選択部182は、制御部110Aからの制御に基づいて、入力データDI1、DI2のうち、入力データDI1を加算部143に出力する。これにより、加算部143は、加算部142と同じ入力データDI1を受ける。この場合、保持部202が保持する入力データDI2は演算に使用されないため、保持部202に入力データDI2を格納する処理を省くことができる。なお、演算器100Aがバタフライ演算以外の演算を実行する場合、入力選択部182は、制御部110Aからの制御に基づいて、入力データDI1、DI2のうち、入力データDI2を加算部143に出力する。
すなわち、入力選択部182は、演算器100Aが実行する演算の内容に基づいて、入力データDI1、DI2のいずれかを加算部143に出力する。これにより、入力データDI1、DI2のうち、加算部143で使用される入力データDIが加算部143に転送される。このように、入力選択部182は、複数の保持部201−206のうちの2つの保持部201、202からそれぞれ受ける2つの入力データDI1、DI2のうち、第3の加算部143で使用する入力データDIを選択する。
乗算部121は、保持部203から受ける入力データDI3と保持部205から受ける入力データDI5とを乗算する。乗算部122は、保持部204から受ける入力データDI4と保持部206から受ける入力データDI6とを乗算する。加算部141は、演算データDA1と演算データDA2とを、制御部110Aからの制御に基づいて加算する。演算選択部161は、制御部110Aからの制御に基づいて、演算データDA1、DA3のいずれかを加算部142に出力する。演算選択部162は、制御部110Aからの制御に基づいて、演算データDA2、DA3のいずれかを加算部143に出力する。
加算部142は、保持部201から受ける入力データDI1と演算選択部161から受ける演算データDAとを、制御部110Aからの制御に基づいて加算する。加算部143は、入力選択部182から受ける入力データDIと演算選択部162から受ける演算データDAとを、制御部110Aからの制御に基づいて加算する。保持部231は、加算部142の加算結果である演算結果データDR1を保持し、保持部232は、加算部143の加算結果である演算結果データDR2を保持する。
このように、演算器100Aでは、制御部110Aが加算部141、142、143、演算選択部161、162および入力選択部182の動作を制御し、入力選択部182が加算部143に出力する入力データDIを選択する。演算器100Aのその他の動作は、図2に示した動作(図1に示した演算器100の動作)と同一または同様である。
なお、演算器100Aの構成は、図1に示す例に限定されない。例えば、演算器100Aは、入力データDI1、DI2のいずれかを加算部142に出力する入力選択部を有してもよい。
以上、図3に示す実施形態においても、図1および図2に示した実施形態と同様の効果を得ることができる。例えば、加算部142、143は、演算器100Aが実行する演算の内容に応じた演算データDAを演算選択部161、162からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器100Aの演算効率を向上することができる。
さらに、入力選択部182は、演算器100AがFFTにおける基本演算であるバタフライ演算を実行する場合、入力データDI1、DI2のうちの入力データDI1を加算部143に出力する。これにより、演算器100Aがバタフライ演算を実行する場合、保持部202に入力データDI2を格納する処理を省くことができる。
図4は、演算器および演算器の制御方法の別の実施形態を示す。図1から図3で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図4に示す演算器100Bは、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を実行する。なお、演算器100Bは、図4には図示していないが、図1に示した演算器100と同様に、CPU等のプロセッサである演算処理装置10に含まれる。
演算器100Bは、図3に示した制御部110Aの代わりに制御部110Bを有し、入力選択部181、183、184が図3に示した演算器100Aに追加される。演算器100Bのその他の構成は、図3に示した演算器100Aと同一または同様である。
演算器100Bは、制御部110B、乗算部121、122、加算部141、142、143、演算選択部161、162、入力選択部181、182、183、184および保持部201−206、231、232を有する。図4に示す例では、保持部201が保持する入力データDI1と保持部202が保持する入力データDI2との両方が、入力選択部181、182に出力される。また、保持部203が保持する入力データDI3と保持部204が保持する入力データDI4との両方が、入力選択部181、182に出力される。そして、保持部205が保持する入力データDI5は、乗算部121に出力され、保持部206が保持する入力データDI6は、乗算部122に出力される。
制御部110Bは、演算器100Bが実行する演算の内容に基づいて入力選択部181、183、184の各々の選択動作を制御することを除いて、図2に示した制御部110Aと同一または同様である。すなわち、制御部110Bは、演算器100Bが実行する演算の内容に基づいて、加算部141、142、143、演算選択部161、162および入力選択部181、182、183、184の動作を制御する。
入力選択部181は、制御部110Bからの制御に基づいて、入力データDI1、DI2のいずれかを選択し、選択した入力データDIを加算部142に出力する。入力選択部181は、複数の保持部201−206のうちの第1の保持部201および第2の保持部202からそれぞれ受ける2つの入力データDI1、DI2のうち、第2の加算部142で使用する入力データDIを選択する第1の入力選択部の一例である。
入力選択部182は、制御部110Bからの制御に基づいて、入力データDI1、DI2のいずれかを選択し、選択した入力データDIを加算部143に出力する。入力選択部182は、第1の保持部201および第2の保持部202からそれぞれ受ける2つの入力データDI1、DI2のうち、第3の加算部143で使用する入力データDIを選択する第2の入力選択部の一例である。
入力選択部183は、制御部110Bからの制御に基づいて、入力データDI3、DI4のいずれかを選択し、選択した入力データDIを乗算部121に出力する。入力選択部183は、複数の保持部201−206のうちの第3の保持部203および第4の保持部204からそれぞれ受ける2つの入力データDI3、DI4のうち、第1の乗算部121で使用する入力データDIを選択する第3の入力選択部の一例である。
入力選択部184は、制御部110Bからの制御に基づいて、入力データDI3、DI4のいずれかを選択し、選択した入力データDIを乗算部122に出力する。入力選択部184は、第3の保持部203および第4の保持部204からそれぞれ受ける2つの入力データDI3、DI4のうち、第2の乗算部121で使用する入力データDIを選択する第4の入力選択部の一例である。
演算選択部161は、制御部110Bからの制御に基づいて、演算データDA1、DA3のいずれかを加算部142に出力する。演算選択部162は、制御部110Bからの制御に基づいて、演算データDA2、DA3のいずれかを加算部143に出力する。
例えば、演算器100BがFFTにおける基本演算である1つのバタフライ演算を2回に分けて実行する場合、入力選択部181、182、183、184および演算選択部161、162は、以下に示すように動作する。
入力選択部181は、1回目の演算と2回目の演算とで、保持部201から受ける入力データDI1および保持部202から受ける入力データDI2を交互に加算部142に出力する。例えば、入力選択部181は、1回目の演算では、保持部201から受ける入力データDI1を加算部142に出力し、2回目の演算では、保持部202から受ける入力データDI2を加算部142に出力する。
入力選択部182は、保持部201から受ける入力データDI1および保持部202から受ける入力データDI2のうち、入力選択部181が加算部142に出力する入力データDIと同じ入力データDIを、加算部143に出力する。例えば、入力選択部182は、1回目の演算では、保持部201から受ける入力データDI1を加算部143に出力し、2回目の演算では、保持部202から受ける入力データDI2を加算部143に出力する。
入力選択部183は、1回目の演算と2回目の演算とで、保持部203から受ける入力データDI3および保持部204から受ける入力データDI4を交互に乗算部121に出力する。例えば、入力選択部183は、1回目の演算では、保持部203から受ける入力データDI3を乗算部121に出力し、2回目の演算では、保持部204から受ける入力データDI4を乗算部121に出力する。
入力選択部184は、保持部203から受ける入力データDI3および保持部204から受ける入力データDI4のうち、入力選択部183が乗算部121に出力する入力データDIと異なる入力データDIを、乗算部122に出力する。例えば、入力選択部184は、1回目の演算では、保持部204から受ける入力データDI4を乗算部122に出力し、2回目の演算では、保持部203から受ける入力データDI3を乗算部122に出力する。
演算選択部161は、加算部141から受ける演算データDA3を加算部142に出力し、演算選択部162は、加算部141から受ける演算データDA3を加算部143に出力する。これにより、保持部201−206が保持する入力データDIを、1回目の演算と2回目の演算とで入れ替えることなく、演算器100Bを2回動作させることで、バタフライ演算を実現できる。したがって、保持部201−206が保持する入力データDIを入れ替える処理を省くことができ、保持部201−206が保持する入力データDIを1回目の演算と2回目の演算とで入れ替える場合に比べて、演算効率を向上することができる。
また、例えば、演算器100Bが積和演算を実行する場合、入力選択部181、182、183、184および演算選択部161、162は、以下に示すように動作する。入力選択部181は、保持部201から受ける入力データDI1を加算部142に出力し、入力選択部182は、保持部202から受ける入力データDI2を加算部143に出力する。入力選択部183は、保持部203から受ける入力データDI3を乗算部121に出力し、入力選択部184は、保持部204から受ける入力データDI4を乗算部122に出力する。演算選択部161は、乗算部121から受ける演算データDA1を加算部42に出力し、演算選択部162は、乗算部122から受ける演算データDA2を加算部143に出力する。
乗算部121は、入力選択部183から受ける入力データDIと保持部205から受ける入力データDI5とを乗算する。乗算部122は、入力選択部184から受ける入力データDIと保持部206から受ける入力データDI6とを乗算する。加算部141は、演算データDA1と演算データDA2とを、制御部110Bからの制御に基づいて加算する。
加算部142は、入力選択部181から受ける入力データDIと演算選択部161から受ける演算データDAとを、制御部110Bからの制御に基づいて加算する。加算部143は、入力選択部182から受ける入力データDIと演算選択部162から受ける演算データDAとを、制御部110Bからの制御に基づいて加算する。保持部231は、加算部142の加算結果である演算結果データDR1を保持し、保持部232は、加算部143の加算結果である演算結果データDR2を保持する。なお、演算器100Bの構成は、図4に示す例に限定されない。
図5は、図4に示した演算器100Bの動作の一例を示す。図5に示す動作は、演算器の制御方法の一態様である。図5に示すa1、a2、a3、b1、b2、b3は、図1に示した演算器100の説明で示したバタフライ演算における単位演算対Fp、Fmの式(3)および式(4)の実数a1、a2、a3、b1、b2、b3である。また、図5に示すd1、d2、d3、e1、e2、e3は、実数a1等と同様に、浮動小数点数または固定小数点数等のコンピュータの数値表現で表される実数である。例えば、ステップS200からステップS228までの一連の処理は、バタフライ演算を実行する際に実行され、ステップS300からステップS318までの一連の処理は、バタフライ演算以外の演算(例えば、積和演算)を実行する際に実行される。
ステップS100では、制御部110Bは、演算器100Bが実行する演算がバタフライ演算か否かを判定する。演算器100Bが実行する演算がバタフライ演算の場合、演算器100Bの動作は、ステップS200に移る。一方、演算器100Bが実行する演算がバタフライ演算以外の演算の場合、演算器100Bの動作は、ステップS300に移る。
ステップS200では、保持部201−206は、バタフライ演算の入力データDI1−DI6をそれぞれ保持する。例えば、入力データDI1は、図1に示した演算器100の説明で示したバタフライ演算における単位演算対Fp、Fmの式(3)および式(4)の実数a1であり、入力データDI2は、式(3)および式(4)の実数b1である。また、入力データDI3は、式(3)および式(4)の実数a3であり、入力データDI4は、式(3)および式(4)の実数b3である。そして、入力データDI5は、式(3)および式(4)の実数a2であり、入力データDI6は、式(3)および式(4)の実数b2である。
次に、ステップS210では、入力選択部183は、保持部203から受ける入力データDI3を乗算部121に出力し、入力選択部184は、保持部204から受ける入力データDI4を乗算部122に出力する。
次に、ステップS212では、乗算部121は演算データDA1を算出し、乗算部122は演算データDA2を算出する。例えば、乗算部121は、入力選択部183から受ける入力データDI3(=a3)と保持部205から受ける入力データDI5(=a2)とを乗算して演算データDA1(=a2・a3)を算出する。また、乗算部122は、入力選択部184から受ける入力データDI4(=b3)と保持部206から受ける入力データDI6(=b2)とを乗算して演算データDA2(=b2・b3)を算出する。
次に、ステップS214では、加算部141は、演算データDA1(=a2・a3)から演算データDA2(=b2・b3)を減算して演算データDA3(=a2・a3−b2・b3)を算出する。
次に、ステップS216では、入力選択部181は、保持部201から受ける入力データDI1を加算部142に出力し、演算選択部161は、加算部141から受ける演算データDA3を加算部142に出力する。また、入力選択部182は、保持部201から受ける入力データDI1を加算部143に出力し、演算選択部162は、加算部141から受ける演算データDA3を加算部143に出力する。これにより、加算部142、143は、一対のデータ(入力データDI1および演算データDA3)を共通に受ける。
次に、ステップS218では、加算部142は演算結果データDR1を算出し、加算部143は演算結果データDR2を算出する。例えば、加算部142は、入力選択部181から受ける入力データDI1(=a1)と演算選択部161から受ける演算データDA3(=a2・a3−b2・b3)とを加算して演算結果データDR1(=a1+(a2・a3−b2・b3))を算出する。これにより、単位演算対Fp、FmのうちのFpの実部(=a1+(a2・a3−b2・b3))が算出される。
また、加算部143は、入力選択部182から受ける入力データDI1(=a1)から、演算選択部162から受ける演算データDA3(=a2・a3−b2・b3)を減算して演算結果データDR2(=a1−(a2・a3−b2・b3))を算出する。これにより、単位演算対Fp、FmのうちのFmの実部(=a1−(a2・a3−b2・b3))が算出される。
そして、加算部142は、演算結果データDR1を保持部231に出力し、加算部143は、演算結果データDR2を保持部232に出力する。これにより、保持部231は、演算結果データDR1(Fpの実部)を保持し、保持部232は、演算結果データDR2(Fmの実部)を保持する。なお、保持部231、232が保持した演算結果データDR1、DR2は、後述するステップS228の処理が実行される前に、演算器100Bの外部のレジスタファイル等に転送される。
次に、ステップS220では、入力選択部183は、保持部204から受ける入力データDI4を乗算部121に出力し、入力選択部184は、保持部203から受ける入力データDI3を乗算部122に出力する。このように、入力選択部183は、1回目の演算と2回目の演算とで、保持部203から受ける入力データDI3および保持部204から受ける入力データDI4を交互に乗算部121に出力する。そして、入力選択部184は、保持部203から受ける入力データDI3および保持部204から受ける入力データDI4のうち、入力選択部183が乗算部121に出力する入力データDIと異なる入力データDIを、乗算部122に出力する。
次に、ステップS222では、乗算部121は演算データDA1を算出し、乗算部122は演算データDA2を算出する。例えば、乗算部121は、入力選択部183から受ける入力データDI4(=b3)と保持部205から受ける入力データDI5(=a2)とを乗算して演算データDA1(=a2・b3)を算出する。また、乗算部122は、入力選択部184から受ける入力データDI3(=a3)と保持部206から受ける入力データDI6(=b2)とを乗算して演算データDA2(=a3・b2)を算出する。
次に、ステップS224では、加算部141は、演算データDA1(=a2・b3)と演算データDA2(=a3・b2)とを加算して演算データDA3(=a2・b3+a3・b2)を算出する。なお、加算部141は、ステップS214では、演算データDA1から演算データDA2を減算したが、ステップS224では、演算データDA1、DA2を加算する。
次に、ステップS226では、入力選択部181は、保持部202から受ける入力データDI2を加算部142に出力し、演算選択部161は、加算部141から受ける演算データDA3を加算部142に出力する。また、入力選択部182は、保持部202から受ける入力データDI2を加算部143に出力し、演算選択部162は、加算部141から受ける演算データDA3を加算部143に出力する。これにより、加算部142、143は、一対のデータ(入力データDI2および演算データDA3)を共通に受ける。
このように、入力選択部181は、1回目の演算と2回目の演算とで、保持部201から受ける入力データDI1および保持部202から受ける入力データを交互に加算部142に出力する。そして、入力選択部182は、保持部201から受ける入力データDI1および保持部202から受ける入力データDI2のうち、入力選択部181が加算部142に出力する入力データDIと同じ入力データDIを、加算部143に出力する。
次に、ステップS228では、加算部142は演算結果データDR1を算出し、加算部143は演算結果データDR2を算出する。例えば、加算部142は、入力選択部181から受ける入力データDI2(=b1)と演算選択部161から受ける演算データDA3(=a2・b3+a3・b2)とを加算して演算結果データDR1(=b1+(a2・b3+a3・b2))を算出する。これにより、単位演算対Fp、FmのうちのFpの虚部(=b1+(a2・b3+a3・b2))が算出される。
また、加算部143は、入力選択部182から受ける入力データDI2(=a2)から、演算選択部162から受ける演算データDA3(=a2・b3+a3・b2)を減算して演算結果データDR2(=b1−(a2・b3+a3・b2))を算出する。これにより、単位演算対Fp、FmのうちのFmの虚部(=b1−(a2・b3+a3・b2))が算出される。
そして、加算部142は、演算結果データDR1を保持部231に出力し、加算部143は、演算結果データDR2を保持部232に出力する。これにより、保持部231は、演算結果データDR1(Fpの虚部)を保持し、保持部232は、演算結果データDR2(Fmの虚部)を保持する。
このように、ステップS200からステップS218までの一連の処理により、単位演算対Fp、Fmの実部が算出され、ステップS220からステップS228までの一連の処理により、単位演算対Fp、Fmの虚部が算出される。すなわち、演算器100Bは、保持部201−206が保持する入力データDIを1回目の演算と2回目の演算とで入れ替えることなく、乗算部121、122、加算部141、142、143を用いた演算を2回実行することにより、バタフライ演算を実現できる。このように、演算器100Bは、バタフライ演算を効率よく実行できる。なお、演算器100Bは、バタフライ演算以外の演算を実行する場合(ステップS100のNo)、ステップS300からステップS318までの一連の処理を実行する。
ステップS300では、保持部201−206は、2つの演算(例えば、2つの積和演算等)の入力データDI1−DI6をそれぞれ保持する。例えば、入力データDI1は、実数d1であり、入力データDI3は、実数d3であり、入力データDI5は、実数d2であり、入力データDI2は、実数e1であり、入力データDI4は、実数e3であり、入力データDI6は、実数e2である。
次に、ステップS310では、入力選択部183は、保持部203から受ける入力データDI3を乗算部121に出力し、入力選択部184は、保持部204から受ける入力データDI4を乗算部122に出力する。
次に、ステップS312では、乗算部121は演算データDA1を算出し、乗算部122は演算データDA2を算出する。例えば、乗算部121は、入力選択部183から受ける入力データDI3(=d3)と保持部205から受ける入力データDI5(=d2)とを乗算して演算データDA1(=d2・d3)を算出する。また、乗算部122は、入力選択部184から受ける入力データDI4(=e3)と保持部206から受ける入力データDI6(=e2)とを乗算して演算データDA2(=e2・e3)を算出する。
図5に示す例では、バタフライ演算以外の演算が実行される場合、演算データDA3は使用されないため、演算データDA3を算出する処理は省かれる。したがって、演算器100Bは、ステップS312の処理を実行した後、ステップS316の処理を実行する。なお、演算器100Bは、バタフライ演算以外の演算においても、演算データDA1、DA2を加算して演算データDA3を算出する処理を実行してもよい。
ステップS316では、入力選択部181は、保持部201から受ける入力データDI1を加算部142に出力し、演算選択部161は、乗算部121から受ける演算データDA1を加算部142に出力する。また、入力選択部182は、保持部202から受ける入力データDI2を加算部143に出力し、演算選択部162は、乗算部122から受ける演算データDA2を加算部143に出力する。これにより、加算部142は、入力データDI1および演算データDA1を受け、加算部143は、入力データDI2および演算データDA2を受ける。
次に、ステップS318では、加算部142は演算結果データDR1を算出し、加算部143は演算結果データDR2を算出する。例えば、加算部142は、入力選択部181から受ける入力データDI1(=d1)と演算選択部161から受ける演算データDA1(=d2・d3)とを加算して演算結果データDR1(=d1+d2・d3)を算出する。これにより、2つの積和演算のうちの一方の結果(=d1+d2・d3)が得られる。
また、加算部143は、入力選択部182から受ける入力データDI2(=e1)と演算選択部162から受ける演算データDA1(=e2・e3)とを加算して演算結果データDR2(=e1+e2・e3)を算出する。これにより、2つの積和演算のうちの他方の結果(=e1+e2・e3)が得られる。
そして、加算部142は、演算結果データDR1を保持部231に出力し、加算部143は、演算結果データDR2を保持部232に出力する。これにより、保持部231は、演算結果データDR1を保持し、保持部232は、演算結果データDR2を保持する。このように、演算器100Bは、2つの積和演算を並列に実行でき、バタフライ演算以外の演算も効率よく実行できる。
また、バタフライ演算以外の演算では、例えば、演算器100Bは、入力データDI3、DI5の一方を“1”に設定することにより、入力データDI3、DI5の他方と入力データDI1との加算を実行できる。同様に、演算器100Bは、入力データDI4、DI6の一方を“1”に設定することにより、入力データDI4、DI6の他方と入力データDI2との加算を実行できる。また、演算器100Bは、入力データDI1を“0”に設定することにより、入力データDI3、DI5の乗算を実行でき、入力データDI2を“0”に設定することにより、入力データDI4、DI6の乗算を実行できる。
なお、演算器100Bの動作は、図5に示す例に限定されない。例えば、演算器100Bは、単位演算対Fp、Fmの実部より先に、単位演算対Fp、Fmの虚部を算出してもよい。すなわち、ステップS210からステップS218までの一連の処理と、ステップS220からステップS228までの一連の処理との実行順は、図5に示した例と逆でもよい。
以上、図4および図5に示す実施形態においても、図1から図3に示した実施形態と同様の効果を得ることができる。例えば、加算部142、143は、演算器100Bが実行する演算の内容に応じた演算データDAを演算選択部161、162からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器100Bの演算効率を向上することができる。
さらに、入力選択部181、182、183、184は、バタフライ演算における単位演算対Fp、Fmの実部を算出する演算と虚部を算出する演算とで、次段(例えば、加算部142、143、乗算部121、122)に出力するデータを切り替える。これにより、保持部201−206が保持する入力データDIを1回目の演算と2回目の演算とで入れ替えることなく、バタフライ演算における単位演算対Fp、Fmの実部と虚部を算出することができ、バタフライ演算を効率よく実行することができる。
図6は、演算器および演算器の制御方法の別の実施形態を示す。図1から図5で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図6に示す演算器100Cは、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を、複数のステージに分けて実行する。すなわち、演算器100Cは、パイプライン処理方式を採用している。なお、演算器100Cは、図6には図示していないが、図1に示した演算器100と同様に、CPU等のプロセッサである演算処理装置10に含まれる。
演算器100Cは、パイプライン処理方式を採用していることを除いて、図4に示した演算器100Bと同一または同様である。例えば、演算器100Cは、図4に示した制御部110Bの代わりに制御部110Cを有し、保持部211、212、213、214、221、222、223、224が図4に示した演算器100Bに追加される。演算器100Cのその他の構成は、図4に示した演算器100Bと同一または同様である。
演算器100Cは、制御部110C、乗算部121、122、加算部141、142、143、演算選択部161、162、入力選択部181、182、183、184および保持部201−206、211−214、221−224、231−232を有する。演算器100Cが実行する演算は、保持部211−214と保持部221−224とにより、3つのステージに分けられる。
制御部110Cは、パイプライン処理の制御を実行することを除いて、図4に示した制御部110Bと同一または同様である。すなわち、制御部110Cは、パイプライン処理の制御を実行するとともに、演算器100Cが実行する演算の内容に基づいて、加算部141、142、143、演算選択部161、162および入力選択部181、182、183、184の動作を制御する。
保持部211は、入力データDI1、DI2のうち、入力選択部181が選択した入力データDIを保持する。保持部211が保持する入力データDIは、保持部221に転送される。保持部212は、入力データDI1、DI2のうち、入力選択部182が選択した入力データDIを保持する。保持部212が保持する入力データDIは、保持部222に転送される。
保持部213は、乗算部121の乗算結果である演算データDA1を保持する。保持部213が保持する演算データDA1は、加算部141および演算選択部161に転送される。保持部214は、乗算部122の乗算結果である演算データDA2を保持する。保持部214が保持する演算データDA2は、加算部141および演算選択部162に転送される。
保持部221は、保持部211から受ける入力データDIを保持する。保持部221が保持する入力データDIは、加算部142に転送される。保持部222は、保持部212から受ける入力データDIを保持する。保持部222が保持する入力データDIは、加算部143に転送される。
保持部223は、演算データDA1、DA3のうち、演算選択部161が選択した演算データDAを保持する。保持部223が保持する演算データDAは、加算部142に転送される。保持部224は、演算データDA2、DA3のうち、演算選択部162が選択した演算データDAを保持する。保持部224が保持する演算データDAは、加算部143に転送される。
なお、演算器100Cの構成は、図6に示す例に限定されない。例えば、保持部211−214が演算器100Cから省かれてもよいし、保持部221−224が演算器100Cから省かれてもよい。この場合、演算器100Cが実行する演算は、2つのステージに分けられる。また、演算器100Cが実行する演算は、4つ以上のステージに分けられてもよい。
図7は、図6に示した演算器100Cの動作の一例を示す。図7に示す動作は、演算器の制御方法の一態様である。なお、図7は、1つのバタフライ演算を2回に分けて実行する場合の演算器100Cの動作の一例を示す。図7に示すa1、a2、a3、b1、b2、b3の意味は、図5に示したa1、a2、a3、b1、b2、b3の意味と同じである。すなわち、実数a1、a2、a3、b1、b2、b3は、図1に示した演算器100の説明で示したバタフライ演算における単位演算対Fp、Fmの式(3)および式(4)の実数a1、a2、a3、b1、b2、b3である。また、図7に示すクロックは、パイプライン処理の動作クロックである。
1サイクル目では、保持部205は、実数a2の入力データDI5を保持し、保持部203は、実数a3の入力データDI3を保持し、保持部201は、実数a1の入力データDI1を保持する。また、保持部206は、実数b2の入力データDI6を保持し、保持部204は、実数b3の入力データDI4を保持し、保持部202は、実数b1の入力データDI2を保持する。
これにより、乗算部121は、保持部203が保持する入力データDI3(=a3)を、入力選択部183を介して受け、保持部205が保持する入力データDI5(=a2)を受ける。また、乗算部122は、保持部204が保持する入力データDI4(=b3)を、入力選択部184を介して受け、保持部206が保持する入力データDI6(=b2)を受ける。そして、乗算部121は、入力データDI3、DI5を乗算して演算データDA1(=a2・a3)を算出し、乗算部122は、入力データDI4、DI6を乗算して演算データDA2(=b2・b3)を算出する。
2サイクル目では、保持部201−206は、1サイクル目に保持した入力データDIを継続して保持する。保持部213は、入力データDI3、DI5の乗算結果である演算データDA1(=a2・a3)を保持し、保持部214は、入力データDI4、DI6の乗算結果である演算データDA2(=b2・b3)を保持する。保持部211は、保持部201から入力選択部181を介して受ける入力データDI1(=a1)を保持し、保持部212は、保持部201から入力選択部182を介して受ける入力データDI1(=a1)を保持する。
また、乗算部121は、保持部204が保持する入力データDI4(=b3)を、入力選択部183を介して受け、保持部205が保持する入力データDI5(=a2)を受ける。乗算部122は、保持部203が保持する入力データDI3(=a3)を、入力選択部184を介して受け、保持部206が保持する入力データDI6(=b2)を受ける。そして、乗算部121は、入力データDI4、DI5を乗算して演算データDA1(=a2・b3)を算出し、乗算部122は、入力データDI3、DI6を乗算して演算データDA2(=a3・b2)を算出する。
また、加算部141は、保持部213が保持する演算データDA1(=a2・a3)から、保持部214が保持する演算データDA2(=b2・b3)を減算して演算データDA3(=a2・a3−b2・b3)を算出する。
3サイクル目では、保持部213は、入力データDI4、DI5の乗算結果である演算データDA1(=a2・b3)を保持し、保持部214は、入力データDI3、DI6の乗算結果である演算データDA2(=a3・b2)を保持する。保持部211は、保持部202から入力選択部181を介して受ける入力データDI2(=b1)を保持し、保持部212は、保持部202から入力選択部182を介して受ける入力データDI2(=b1)を保持する。
また、保持部223、224は、演算データDA1から演算データDA2を減算した結果である演算データDA3(=a2・a3−b2・b3)を保持する。すなわち、保持部223は、演算データDA1、DA3のうち演算データDA3を保持し、保持部224は、演算データDA2、DA3のうち演算データDA3を保持する。また、保持部221は、保持部211から受ける入力データDI1(=a1)を保持し、保持部222は、保持部212から受ける入力データDI1(=a1)を保持する。
また、加算部141は、保持部213が保持する演算データDA1(=a2・b3)と保持部214が保持する演算データDA2(=a3・b2)とを加算して演算データDA3(=a2・b3+a3・b2)を算出する。
加算部142は、保持部221が保持する入力データDI1(=a1)と保持部223が保持する演算データDA3(=a2・a3−b2・b3)とを加算して演算結果データDR1(=a1+a2・a3−b2・b3)を算出する。加算部143は、保持部222が保持する入力データDI1(=a1)から、保持部224が保持する演算データDA3(=a2・a3−b2・b3)を減算して演算結果データDR2(=a1−a2・a3+b2・b3)を算出する。
4サイクル目では、保持部223、224は、演算データDA1、DA2の加算結果である演算データDA3(=a2・b3+a3・b2)を保持する。すなわち、保持部223は、演算データDA1、DA3のうち演算データDA3を保持し、保持部224は、演算データDA2、DA3のうち演算データDA3を保持する。保持部221は、保持部211から受ける入力データDI2(=b1)を保持し、保持部222は、保持部212から受ける入力データDI2(=b1)を保持する。
また、保持部231は、入力データDI1と演算データDA3との加算結果である演算結果データDR1(=a1+a2・a3−b2・b3)を保持する。保持部232は、入力データDI1から演算データDA3を減算した結果である演算結果データDR2(=a1−a2・a3+b2・b3)を保持する。これにより、単位演算対Fp、Fmのそれぞれの実部が保持部231、232にそれぞれ保持される。
また、加算部142は、保持部221が保持する入力データDI2(=b1)と保持部223が保持する演算データDA3(=a2・b3+a3・b2)とを加算して演算結果データDR1(=b1+a2・b3+a3・b2)を算出する。加算部143は、保持部222が保持する入力データDI2(=b1)から、保持部224が保持する演算データDA3(=a2・b3+a3・b2)を減算して演算結果データDR2(=b1−a2・b3−a3・b2)を算出する。
5サイクル目では、保持部231は、入力データDI2と演算データDA3との加算結果である演算結果データDR1(=b1+a2・b3+a3・b2)を保持する。保持部232は、入力データDI2から演算データDA3を減算した結果である演算結果データDR2(=b1−a2・b3−a3・b2)を保持する。これにより、単位演算対Fp、Fmのそれぞれの虚部が保持部231、232にそれぞれ保持される。なお、保持部231、232が4サイクル目に保持した演算結果データDR1、DR2は、演算器100Cの外部のレジスタファイル等に転送される。
このように、演算器100Cは、4サイクルのレイテンシでバタフライ演算を実行できる。また、演算器100Cは、2サイクルピッチでバタフライ演算を連続して実行できる。なお、1つのバタフライ演算を2回に分けて実行する場合の演算器100Cの動作は、図7に示す例に限定されない。ここで、例えば、入力選択部181−184が省かれた演算器では、保持部201−206がそれぞれ保持する入力データDIは、2サイクル目に、単位演算対Fp、Fmのそれぞれの虚部を算出するための入力データDIにそれぞれ更新される。
図8は、図6に示した演算器100Cの動作の別の例を示す。図8に示す動作は、演算器の制御方法の一態様である。なお、図8は、2つの積和演算を実行する場合の演算器100Cの動作の一例を示す。図8に示すd1、d2、d3、e1、e2、e3の意味は、図5に示したd1、d2、d3、e1、e2、e3の意味と同じである。すなわち、実数d1、d2、d3は、2つの積和演算のうちの一方の入力データDIであり、実数e1、e2、e3は、2つの積和演算のうちの他方の入力データDIである。また、図8に示すクロックは、パイプライン処理の動作クロックである。
1サイクル目では、保持部205は、実数d2の入力データDI5を保持し、保持部203は、実数d3の入力データDI3を保持し、保持部201は、実数d1の入力データDI1を保持する。また、保持部206は、実数e2の入力データDI6を保持し、保持部204は、実数e3の入力データDI4を保持し、保持部202は、実数e1の入力データDI2を保持する。
これにより、乗算部121は、保持部203が保持する入力データDI3(=d3)を、入力選択部183を介して受け、保持部205が保持する入力データDI5(=d2)を受ける。また、乗算部122は、保持部204が保持する入力データDI4(=e3)を、入力選択部184を介して受け、保持部206が保持する入力データDI6(=e2)を受ける。そして、乗算部121は、入力データDI3、DI5を乗算して演算データDA1(=d2・d3)を算出し、乗算部122は、入力データDI4、DI6を乗算して演算データDA2(=e2・e3)を算出する。
2サイクル目では、保持部213は、入力データDI3、DI5の乗算結果である演算データDA1(=d2・d3)を保持し、保持部214は、入力データDI4、DI6の乗算結果である演算データDA2(=e2・e3)を保持する。保持部211は、保持部201から入力選択部181を介して受ける入力データDI1(=d1)を保持し、保持部212は、保持部202から入力選択部182を介して受ける入力データDI2(=e1)を保持する。
3サイクル目では、保持部223は、保持部213から演算選択部161を介して受ける演算データDA1(=d2・d3)を保持し、保持部224は、保持部214から演算選択部162を介して受ける演算データDA2(=e2・e3)を保持する。すなわち、保持部223は、演算データDA1、DA3のうち演算データDA1を保持し、保持部224は、演算データDA2、DA3のうち演算データDA2を保持する。また、保持部221は、保持部211から受ける入力データDI1(=d1)を保持し、保持部222は、保持部212から受ける入力データDI2(=e1)を保持する。
また、加算部142は、保持部221が保持する入力データDI1(=d1)と保持部223が保持する演算データDA1(=d2・d3)とを加算して演算結果データDR1(=d1+d2・d3)を算出する。加算部143は、保持部222が保持する入力データDI2(=e1)と保持部224が保持する演算データDA2(=e2・e3)とを加算して演算結果データDR2(=e1+e2・e3)を算出する。
4サイクル目では、保持部231は、入力データDI1と演算データDA1との加算結果である演算結果データDR1(=d1+d2・d3)を保持する。保持部232は、入力データDI2と演算データDA2との加算結果である演算結果データDR2(=e1+e2・e3)を保持する。これにより、2つの積和演算の結果が保持部231、232にそれぞれ保持される。
このように、演算器100Cは、2つの積和演算を並列に実行できる。なお、2つの積和演算を実行する場合の演算器100Cの動作は、図8に示す例に限定されない。
図9は、図6に示した演算器100Cの比較例を示す。比較例の演算器100exでは、図6に示した加算部141、演算選択部161、162、入力選択部181−184、保持部221−224が演算器100Cから省かれる。また、演算器100exは、図6に示した制御部110Cの代わりに、制御部110exを有する。演算器100exのその他の構成は、図6に示した演算器100Cと同一または同様である。
演算器100exは、制御部110ex、乗算部121、122、加算部142、143および保持部201−206、211−214、231−232を有する。乗算部121、加算部142および保持部201、203、205、211、213、231を含むブロックは、積和演算を実行する積和演算器として動作する。同様に、乗算部122、加算部143および保持部202、204、206、212、214、232を含むブロックは、積和演算を実行する積和演算器として動作する。すなわち、演算器100exは、2つの積和演算器を有する。
演算器100exが実行する演算は、保持部211−214により、2つのステージに分けられる。すなわち、演算器100exは、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を、2つのステージに分けて実行する。制御部110exは、パイプライン処理の制御を実行するとともに、加算部142、143の動作を制御する。演算器100exでは、バタフライ演算を実行する場合の演算効率は、図10に示すように、演算器100Cに比べて低下する。
図10は、図9に示した比較例の演算器100exの動作の一例を示す。なお、図10は、バタフライ演算を実行する場合の演算器100exの動作の一例を示す。図10に示すa1、a2、a3、b1、b2、b3の意味は、図7に示したa1、a2、a3、b1、b2、b3の意味と同じである。すなわち、実数a1、a2、a3、b1、b2、b3は、図1に示した演算器100の説明で示したバタフライ演算における単位演算対Fp、Fmの式(3)および式(4)の実数a1、a2、a3、b1、b2、b3である。また、図10に示すクロックは、パイプライン処理の動作クロックである。
1サイクル目では、保持部205は、実数a2の入力データDI5を保持し、保持部203は、実数a3の入力データDI3を保持し、保持部201は、実数“0”の入力データDI1を保持する。また、保持部206は、実数a2の入力データDI6を保持し、保持部204は、実数b3の入力データDI4を保持し、保持部202は、実数“0”の入力データDI2を保持する。
これにより、乗算部121は、保持部203が保持する入力データDI3(=a3)と保持部205が保持する入力データDI5(=a2)とを乗算して演算データDA1(=a2・a3)を算出する。また、乗算部122は、保持部204が保持する入力データDI4(=b3)と保持部206が保持する入力データDI6(=a2)とを乗算して演算データDA2(=a2・b3)を算出する。
2サイクル目では、保持部213は、入力データDI3、DI5の乗算結果である演算データDA1(=a2・a3)を保持し、保持部214は、入力データDI4、DI6の乗算結果である演算データDA2(=a2・b3)を保持する。保持部211は、保持部201から受ける入力データDI1(=0)を保持し、保持部212は、保持部202から受ける入力データDI2(=0)を保持する。
また、加算部142は、保持部211が保持する入力データDI1(=0)と保持部213が保持する演算データDA1(=a2・a3)とを加算して演算結果データDR1(=a2・a3)を算出する。加算部143は、保持部212が保持する入力データDI2(=0)と保持部214が保持する演算データDA2(=a2・b3)とを加算して演算結果データDR2(=a2・b3)を算出する。
3サイクル目では、保持部231は、入力データDI1と演算データDA1との加算結果である演算結果データDR1(=a2・a3)を保持する。保持部232は、入力データDI2と演算データDA2の加算結果である演算結果データDR2(=a2・b3)を保持する。演算結果データDR1、DR2は、次のサイクル(4サイクル目)の入力データDI1、DI2として保持部201、202にフィードバックされる。
4サイクル目では、保持部205は、実数b2の入力データDI5を保持し、保持部203は、実数b3の入力データDI3を保持し、保持部201は、保持部231から受ける演算結果データDR1(=a2・a3)を入力データDI1として保持する。また、保持部206は、実数b2の入力データDI6を保持し、保持部204は、実数a3の入力データDI4を保持し、保持部202は、保持部232から受ける演算結果データDR2(=a2・b3)を入力データDI2として保持する。
これにより、乗算部121は、保持部203が保持する入力データDI3(=b3)と保持部205が保持する入力データDI5(=b2)とを乗算して演算データDA1(=b2・b3)を算出する。また、乗算部122は、保持部204が保持する入力データDI4(=a3)と保持部206が保持する入力データDI6(=b2)とを乗算して演算データDA2(=b2・a3)を算出する。
5サイクル目では、保持部213は、入力データDI3、DI5の乗算結果である演算データDA1(=b2・b3)を保持し、保持部214は、入力データDI4、DI6の乗算結果である演算データDA2(=b2・a3)を保持する。保持部211は、保持部201から受ける入力データDI1(=a2・a3)を保持し、保持部212は、保持部202から受ける入力データDI2(=a2・b3)を保持する。
また、加算部142は、保持部213が保持する演算データDA1(=b2・b3)から保持部211が保持する入力データDI1(=a2・a3)を減算して演算結果データDR1(=b2・b3−a2・a3)を算出する。加算部143は、保持部214が保持する演算データDA2(=b2・a3)と保持部212が保持する入力データDI2(=a2・b3)とを加算して演算結果データDR2(=b2・a3+a2・b3)を算出する。
6サイクル目では、保持部231は、演算データDA1から入力データDI1を減算した結果である演算結果データDR1(=b2・b3−a2・a3)を保持する。保持部232は、演算データDA2と入力データDI2との加算結果である演算結果データDR2(=b2・a3+a2・b3)を保持する。演算結果データDR1、DR2は、次のサイクル(7サイクル目)の入力データDI1、DI2として保持部201、202にフィードバックされる。
7サイクル目では、保持部205は、実数a1の入力データDI5を保持し、保持部203は、実数“1”の入力データDI3を保持する。そして、保持部201は、保持部231から受ける演算結果データDR1(=b2・b3−a2・a3)を入力データDI1として保持する。また、保持部206は、実数b1の入力データDI6を保持し、保持部204は、実数“1”の入力データDI4を保持し、保持部202は、保持部232から受ける演算結果データDR2(=b2・a3+a2・b3)を入力データDI2として保持する。
これにより、乗算部121は、保持部203が保持する入力データDI3(=1)と保持部205が保持する入力データDI5(=a1)とを乗算して演算データDA1(=a1)を算出する。また、乗算部122は、保持部204が保持する入力データDI4(=1)と保持部206が保持する入力データDI6(=b1)とを乗算して演算データDA2(=b1)を算出する。
8サイクル目では、保持部201−206は、1サイクル目に保持した入力データDIを継続して保持する。保持部213は、入力データDI3、DI5の乗算結果である演算データDA1(=a1)を保持し、保持部214は、入力データDI4、DI6の乗算結果である演算データDA2(=b1)を保持する。保持部211は、保持部201から受ける入力データDI1(=b2・b3−a2・a3)を保持し、保持部212は、保持部202から受ける入力データDI2(=b2・a3+a2・b3)を保持する。
また、加算部142は、保持部213が保持する演算データDA1(=a1)と保持部211が保持する入力データDI1(=b2・b3−a2・a3)とを加算して演算結果データDR1(=a1+b2・b3−a2・a3)を算出する。加算部143は、保持部214が保持する演算データDA2(=b1)と保持部212が保持する入力データDI2(=b2・a3+a2・b3)とを加算して演算結果データDR2(=b1+b2・a3+a2・b3)を算出する。
9サイクル目では、保持部213は、入力データDI3、DI5の乗算結果である演算データDA1(=a1)を保持し、保持部214は、入力データDI4、DI6の乗算結果である演算データDA2(=b1)を保持する。保持部211は、保持部201から受ける入力データDI1(=b2・b3−a2・a3)を保持し、保持部212は、保持部202から受ける入力データDI2(=b2・a3+a2・b3)を保持する。
保持部231は、演算データDA1と入力データDI1との加算結果である演算結果データDR1(=a1+b2・b3−a2・a3)を保持する。保持部232は、演算データDA2と入力データDI2との加算結果である演算結果データDR2(=b1+b2・a3+a2・b3)を保持する。これにより、単位演算対Fp、FmのうちのFmの実部が保持部231に保持され、単位演算対Fp、FmのうちのFpの虚部が保持部232に保持される。
また、加算部142は、保持部213が保持する演算データDA1(=a1)から保持部211が保持する入力データDI1(=b2・b3−a2・a3)を減算して演算結果データDR1(=a1−b2・b3+a2・a3)を算出する。加算部143は、保持部214が保持する演算データDA2(=b1)から保持部212が保持する入力データDI2(=b2・a3+a2・b3)を減算して演算結果データDR2(=b1−b2・a3−a2・b3)を算出する。
10サイクル目では、保持部231は、演算データDA1から入力データDI1を減算した結果である演算結果データDR1(=a1−b2・b3+a2・a3)を保持する。保持部232は、演算データDA2から入力データDI2を減算した結果である演算結果データDR2(=b1−b2・a3−a2・b3)を保持する。これにより、単位演算対Fp、FmのうちのFpの実部が保持部231に保持され、単位演算対Fp、FmのうちのFmの虚部が保持部232に保持される。なお、保持部231、232が9サイクル目に保持した演算結果データDR1、DR2は、演算器100Cの外部のレジスタファイル等に転送される。
このように、比較例の演算器100exは、演算器100Cのレイテンシ(4サイクル)の約2倍のレイテンシ(9サイクル)でバタフライ演算を実行する。また、演算器100exがバタフライ演算を連続して実行する際のサイクルピッチは、演算器100exがバタフライ演算を連続して実行する際のサイクルピッチ(2サイクル)の4倍(8サイクル)である。すなわち、演算器100Cは、演算器100exに比べて、バタフライ演算のレイテンシを約半分に低減でき、さらに、バタフライ演算を連続して実行する際のサイクルピッチを約1/4に低減できる。このように、演算器100Cでは、演算器100exに比べて、バタフライ演算のスループットを向上することができる。
また、例えば、比較例の演算器100exでは、保持部201−206がそれぞれ保持する入力データDIは、1つのバタフライ演算で2回更新される。保持部203−206がそれぞれ保持する入力データDIの更新では、レジスタファイルから入力データDIを読み出す処理等が実行される。レジスタファイルから入力データDIを読み出す処理の実行回数が増えるほど、消費電力は増加する。
これに対し、演算器100Cは、図7に示したように、保持部201−206がそれぞれ保持する入力データDIを更新することなく、1つのバタフライ演算を実行できる。このため、演算器100Cは、演算器100exに比べて、バタフライ演算を実行する際の消費電力を低減できる。
以上、図6から図8に示す実施形態においても、図1から図5に示した実施形態と同様の効果を得ることができる。例えば、加算部142、143は、演算器100Cが実行する演算の内容に応じた演算データDAを演算選択部161、162からそれぞれ受ける。このため、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。この結果、演算器100Cの演算効率を向上することができる。
さらに、入力選択部181、182、183、184は、バタフライ演算における単位演算対Fp、Fmの実部を算出する演算と虚部を算出する演算とで、次段(例えば、加算部142、143、乗算部121、122)に出力するデータを切り替える。これにより、保持部201−206が保持する入力データDIを1回目の演算と2回目の演算とで入れ替えることなく、バタフライ演算における単位演算対Fp、Fmの実部と虚部を算出することができ、バタフライ演算を効率よく実行することができる。
また、演算器100Cは、パイプライン処理方式を採用し、2サイクルピッチでバタフライ演算を連続して実行できる。これにより、バタフライ演算を連続して実行する際の演算効率を図9に示した比較例の演算器100exに比べて向上することができる。
図11は、演算器および演算器の制御方法の別の実施形態を示す。図1から図10で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図11に示す演算器100Dは、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を、複数のステージに分けて実行する。すなわち、演算器100Dは、演算器100Cと同様に、パイプライン処理方式を採用している。なお、演算器100Dは、図11には図示していないが、図1に示した演算器100と同様に、CPU等のプロセッサである演算処理装置10に含まれる。
演算器100Dは、丸め部190、191、192が図6に示した演算器100Cに追加されることを除いて、図6に示した演算器100Cと同一または同様である。また、演算器100Dの動作は、丸め部190、191、192の丸め処理を除いて、図6に示した演算器100Cの動作と同一または同様であり、図5、図7、図8等により説明される。
例えば、演算器100Dは、制御部110C、乗算部121、122、加算部141、142、143、演算選択部161、162、入力選択部181、182、183、184および保持部201−206、211−214、221−224、231−232を有する。さらに、演算器100Dは、丸め部190、191、192を有する。
丸め部190は、加算部141の加算結果である演算データDA3の仮数部の精度を入力データDIの仮数部の精度に基づいて丸める。したがって、演算選択部161、162等は、丸め部190により丸められた演算データDA3を受ける。
例えば、入力データDIがIEEE(The Institute of Electrical and Electronics Engineers)754に準拠した単精度浮動小数点数の場合、仮数部の精度は、24ビットである。この場合、乗算部121等の乗算結果の精度は、最大で48ビットである。したがって、演算器100Dが積和演算を実行する場合、例えば、加算部142が受ける演算データDA1は48ビット精度になり、加算部142が受ける入力データDI1は24ビット精度になる。この場合、加算部141の出力である演算データDA3は、加算部141、142の入力であるため、演算データDA3の仮数部の精度を48ビットに丸めると、コストに対する効果を効率よく得ることができる。したがって、丸め部190は、入力データDIがIEEE754に準拠した単精度浮動小数点数の場合、演算データDA3の仮数部の精度を48ビットに丸める。
なお、丸め部190は、入力データDIがIEEE754に準拠した単精度浮動小数点数の場合、演算データDA3の仮数部の精度を24ビットに丸めてもよい。この場合、丸め部191、192等の丸めの結果が丸め部190による丸めの有無によって異なる二重丸めが発生することを防止できる。
丸め部191は、加算部142の加算結果である演算結果データDR1の仮数部の精度を、IEEE754に準拠した浮動小数点数の精度に基づいて、丸める。同様に、丸め部192は、加算部143の加算結果である演算結果データDR2の仮数部の精度を、IEEE754に準拠した浮動小数点数の精度に基づいて、丸める。したがって、保持部231は、丸め部191により丸められた演算結果データDR1を保持し、保持部232は、丸め部192により丸められた演算結果データDR2を保持する。このように、演算器100Dは、IEEE754に準拠した浮動小数点数の精度で積和演算等を実行できる。
なお、演算器100Dの構成は、図11に示す例に限定されない。例えば、丸め部190、191、192は、図1、図3、図4に示した演算器100、100A、100Bのいずれかに追加されてもよい。
以上、図11に示す実施形態においても、図1から図8に示した実施形態と同様の効果を得ることができる。例えば、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。すなわち、演算器100Dの演算効率を向上することができる。さらに、演算器100Dは、丸め部190、191、192による丸め処理により、積和演算等をIEEE754に準拠した浮動小数点数の精度で実行できる。
図12は、演算器および演算器の制御方法の別の実施形態を示す。図1から図11で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図12に示す演算器100Eは、1つの命令に基づいて演算を同時に実行するSIMD(Single Instruction Multiple Data)演算器である。なお、演算器100Eは、図12には図示していないが、図1に示した演算器100と同様に、CPU等のプロセッサである演算処理装置10に含まれる。
演算器100Eは、複数の入力データDI(DI1、DI2、DI3、DI4、DI5、DI6)を用いる演算を実行する複数の単位演算部102と、保持部201、202、203、204、205、206と、並び替え部240とを有する。さらに、演算器100Eは、複数の単位演算部102のそれぞれの演算結果データDR1、DR2を保持するレジスタファイル250を有する。
各単位演算部102は、例えば、図11に示した演算器100Dから保持部201−206を除いた部分と同一または同様である。例えば、単位演算部102は、図11に示した制御部110Cと乗算部121、122と加算部141、142、143と演算選択部161、162と入力選択部181、182、183、184と丸め部190、191、192と保持部231、232とを有する。なお、図11に示した演算器100Dが有する保持部201、202、203、204、205、206は、図12に示す保持部201、202、203、204、205、206である。保持部201、202、203、204、205、206を含む保持部群は、単位演算部102毎に設けられる。すなわち、演算器100Eは、複数の演算器100Dと並び替え部240とレジスタファイル250とを有する。
並び替え部240は、複数の単位演算部102のそれぞれの演算結果データDR1、DR2を受ける。そして、並び替え部240は、単位演算部102から受けた演算結果データDR1、DR2を、レジスタファイル250が有するレジスタ251、252の対応する領域に格納する。例えば、並び替え部240は、複数のセレクタ241(例えば、複数の単位演算部102の数の2倍の数のセレクタ241)を有する。各セレクタ241は、複数の単位演算部102のそれぞれの演算結果データDR1、DR2を受け、受けた演算結果データDR1、DR2のいずれかをレジスタ251、252の対応する領域に格納する。なお、図12では、図を見やすくするために、並び替え部240内の一部の信号線の記載を省略している。
例えば、並び替え部240は、セレクタ241による演算結果データDRの選択動作を制御することにより、単位演算部102から受けた演算結果データDR1、DR2を並べ替えてレジスタ251、252の対応する領域に格納できる。図12に示す括弧内の“Re”は、複素数の実部を示し、“Im”は、複素数の虚部を示す。並び替え部240は、バタフライ演算を繰り返して実行する場合、実部(Re)と虚部(Im)との配置が、入力と出力で同じになるように、複数の単位演算部102のそれぞれの演算結果データDR1、DR2を並べ替えてレジスタファイル250に格納する。
例えば、図7で説明したように、保持部231、232がそれぞれ保持するデータのペアは、4サイクル目では、単位演算対Fp、FmのうちのFpの実部とFmの実部とのペアであり、5サイクル目では、Fpの虚部とFmの虚部とのペアである。この場合、単位演算部102の入力と出力とで、複素数の実部と虚部との配置が異なる。このため、並び替え部240は、単位演算対Fp、Fmのそれぞれの実部と虚部とがペアになるように、演算結果データDR1、DR2を並べ替えてレジスタファイル250に格納する。
また、N点(Nは、例えば、2の累乗)のFFTにおけるバタフライ演算では、次段のバタフライ演算における単位演算部102の入力データDIは、図14に示すように、隣接しない単位演算部102の演算結果データDRになる場合がある。このため、演算器100Eでは、次段の入力に備えて、並び替え部240が演算結果データDR1、DR2を並び替える。これにより、バタフライ演算を繰り返して実行する際の演算効率を向上することができる。
このように、並び替え部240は、レジスタファイル250が保持する演算結果データDR1、DR2を複数の単位演算部102のいずれかにフィードバックする場合、演算結果データDR1、DR2をフィードバック経路に応じて並べ替える。これにより、演算結果データDRをフィードバックして複数の単位演算部102が演算を繰り返し実行する場合、複数の単位演算部102のそれぞれの演算結果データDR1、DR2は、フィードバック経路に応じて並べ替えてレジスタファイル250に格納される。
なお、並び替え部240による演算結果データDR1、DR2の並び替えは、例えば、演算器100Eを含む演算処理装置10に実装される並び替えを実行する命令を用いることにより、実現される。
演算器100Eの構成は、図12に示す例に限定されない。例えば、各単位演算部102は、図1に示した演算器100でもよいし、図3、図4および図6に示した演算器100A、100B、100Cのいずれかから保持部201−206を除いた構成でもよい。また、各単位演算部102は、図3、図4、図6および図11に示した演算器100A、100B、100C、100Dのいずれかから保持部201−206、231、232を除いた構成でもよい。また、単位演算部102の数は、8つに限定されない。
図13は、図12に示した並び替え部240によるデータの並び替えの一例を示す。図13に示す“Re”、“Im”の意味は、図12に示した“Re”、“Im”の意味と同じである。
演算器100Eは、バタフライ演算を実行する場合、図7等で説明したように、保持部201、203、205に複素数の実部(Re)を格納し、保持部202、204、206に複素数の虚部(Im)を格納する。このため、演算結果データDR1、DR2をレジスタファイル250に格納する場合、並び替え部240は、単位演算対Fp、Fmのそれぞれの実部と虚部とがペアになるように、演算結果データDR1、DR2を並べ替えてレジスタファイル250に格納する。
例えば、図7で説明したように、単位演算部102が有する保持部231は、単位演算対Fp、FmのうちのFpの実部と虚部とを演算結果データDR1として順次保持する。同様に、単位演算部102が有する保持部232は、単位演算対Fp、FmのうちのFmの実部と虚部とを演算結果データDR2として順次保持する。このため、並び替え部240は、図13に示すように、単位演算対Fp、Fmのそれぞれの実部と虚部とがペアになるように、演算結果データDR1、DR2を並べ替えてレジスタファイル250に格納する。これにより、次のバタフライ演算等に演算結果データDRを容易に用いることができる。
図14は、16点のFFTにおけるバタフライ演算のデータの流れの一例を示す。図14に示す“Re”、“Im”の意味は、図12に示した“Re”、“Im”の意味と同じである。図14に示す例では、演算器100Eは、8つのバタフライ演算の実行により2回に分けて出力する16個の演算結果データDRのうち、前半8つ分と後半8つ分とをそれぞれレジスタ251、252に割り当てる。例えば、演算器100Eは、演算結果データDRの転送経路(図の矢印の経路)を並び替え部240で制御して演算結果データDRをレジスタファイル250のレジスタ251、252に格納する。そして、演算器100Eは、レジスタファイル250のレジスタ251、252に格納した演算結果データDRを、次のバタフライ演算の保持部201−206等に投入する。あるいは、演算器100Eは、並び替え部240からの出力を経路分岐して、演算結果データDRを次のバタフライ演算の保持部201−206等に投入する。
図14に示すように、例えば、1段目のバタフライ演算(図14の一番上に記載したバタフライ演算)から2段目のバタフライ演算にわたる部分におけるデータの入出力でねじれが発生する。このため、並び替え部240は、図15に示すように、演算結果データDRを並べ替えることにより、1段目のバタフライ演算から2段目のバタフライ演算にわたる部分におけるデータの入出力のねじれを解消する。
なお、レジスタ251、252のレジスタ長が複素数で8対のデータを格納する大きさの場合、レジスタ251、252の要素位置(記憶領域)としては、3段目のバタフライ演算から4段目のバタフライ演算にわたる部分は、ねじれていない場合と変わらない。このため、図14に示すデータの流れでは、3段目のバタフライ演算から4段目のバタフライ演算にわたる部分において、データの入出力にねじれが発生しているが、図13に示したように、演算結果データDR1、DR2を並べ替えればよい。例えば、4段目のバタフライ演算の入力として指示するレジスタの番号を対応する番号に設定すれば、図13に示したデータの並び替えでよい。
図14に示す最初の2つのねじれを別扱いとすれば、N点(Nは、例えば、2の累乗)のFFTにおけるバタフライ演算では、Nが大きくなるほど、図13に示したデータの並び替えで対応できるケースが増加する。
図15は、図12に示した並び替え部240によるデータの並び替えの別の例を示す。図15に示す“Re”、“Im”の意味は、図12に示した“Re”、“Im”の意味と同じである。図14に示したように、バタフライ演算の段階によっては、次のバタフライ演算に必要なデータが前段のバタフライ演算の結果と同じレジスタ251、252に格納されてしまう離れた要素である場合がある。このため、演算器100Eは、単位演算部102の演算結果DR1、DR2(演算結果データDR1、DR2)を、並び替え部240を用いて並び替え、データの入出力のねじれを解消する。図15に示すデータ経路は、図14に示した1段目のバタフライ演算から2段目のバタフライ演算にわたる部分におけるデータの入出力のねじれを解消するように、演算結果データDR1、DR2を並び替えた場合を示す。
以上、図12から図15に示す実施形態においても、図1から図11に示した実施形態と同様の効果を得ることができる。例えば、バタフライ演算以外の演算を実行する際の演算効率の低下を抑制しつつ、バタフライ演算を実行する際の演算効率を向上することができる。すなわち、演算器100Eの演算効率を向上することができる。さらに、演算器100Eは、N点(Nは、例えば、2の累乗)のFFTにおけるバタフライ演算を実行する場合等、演算結果データDR1、DR2を並び替え部240で並べ替えてレジスタファイル250に格納する。これにより、次のバタフライ演算等に演算結果データDRを容易に用いることができる。
図16は、演算器を含む演算処理装置10の一例を示す。演算処理装置10は、命令制御部300、実行部310、ロードストア部320、入出力装置330およびメモリ340を有する。
命令制御部300は、例えば、命令をデコードして、デコードした命令を実行部310およびロードストア部320に出力する。実行部310は、命令制御部300から受ける命令(デコード後の命令)を実行する。例えば、実行部310は、レジスタファイル312、固定小数点演算部100FXおよび浮動小数点演算部100FLを有する。
レジスタファイル312は、固定小数点演算部100FXおよび浮動小数点演算部100FL等で使用するデータ(例えば、入力データDI)を保持する。固定小数点演算部100FXは、固定小数点数の演算を実行する。例えば、固定小数点演算部100FXは、図1、図3、図4、図6および図12に示した演算器100、100A、100B、100C、100Eのいずれかである。この場合、図1等に示した乗算部121、122、加算部141、142、143の各々は、固定小数点数の演算を実行する。浮動小数点演算部100FLは、浮動小数点数の演算を実行する。例えば、浮動小数点演算部100FLは、図1、図3、図4、図6、図11および図12に示した演算器100、100A、100B、100C、100D、100Eのいずれかである。この場合、図1等に示した乗算部121、122、加算部141、142、143の各々は、浮動小数点数の演算を実行する。
ここで、例えば、固定小数点演算部100FXおよび浮動小数点演算部100FLのいずれかが図12に示した演算器100Eの場合、レジスタファイル312の一部が図12に示したレジスタファイル250に対応する。
ロードストア部320は、命令制御部300から受ける命令(デコード後の命令)に基づいて、入出力装置330およびメモリ340のそれぞれに対するデータのロードまたはストアを実行する。例えば、ロードストア部320は、キャッシュメモリ322を有する。キャッシュメモリ322は、メモリ340が記憶するデータの一部を保持する。キャッシュメモリ322が保持するデータは、実行部310に使用される。
入出力装置330は、例えば、演算処理装置10にデータを入力するキーボード等の入力装置および演算処理装置10の処理結果を外部に出力するディスプレイ等の出力装置である。メモリ340は、例えば、キャッシュメモリ322より下位の階層の主記憶装置である。
このように、演算処理装置10では、固定小数点演算部100FXおよび浮動小数点演算部100FL等の演算器は、レジスタファイル312等にアクセスして、積和演算、バタフライ演算等を実行する。ここで、半導体集積回路における微細化において、配線の縮小率がトランジスタの縮小率より悪いため、演算器の周辺の実装設計では、配線、特にレジスタファイル312等と演算器とを接続するバスが小型化の際のボトルネックになる。換言すると、図1等に示す加算部141および演算選択部161、162を図9に示す演算器100exに追加しても、演算器の入出力の配線が増加しないため、面積コストにほとんど影響を与えない。すなわち、図1、図3、図4、図6、図11および図12に示した演算器100、100A、100B、100C、100D、100Eは、演算処理装置10の面積コストにほとんど影響を与えずに、従来の演算器に比べて演算効率を向上できる。なお、演算器を含む演算処理装置10の構成は、図16に示す例に限定されない。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。