「積和演算」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
編集の要約なし
タグ: 差し戻し済み
14行目: 14行目:


== 融合積和演算 ==
== 融合積和演算 ==
積和の演算式において、途中の積算<math>b \times c</math>の演算結果を[[浮動小数点数]]していったん丸めてしまうと、最終演算結果大きな誤差が発生する。途中の積算を丸めず、積和演算1命令でなってしまうことで、最終演算結果の誤差を小さくするのが融合積和演算 (fused multiply-add, '''FMA'''/'''FMAD''') である<ref>[https://news.mynavi.jp/articles/2012/10/03/idf_haswell_hpc_01/ HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備 | マイナビニュース]</ref>。FMAは[[IEEE 754]]規格2008年改訂版 (IEEE 754-2008) で標準化されている
積和の演算式において、途中の積算<math>b \times c</math>の段階では結果を丸めずに<math>a</math>と和をとったに丸めを行うことで、演算結果の丸め誤差を小さくするのが融合積和演算 (fused multiply-add, '''FMA'''/'''FMAD''') である<ref>[https://news.mynavi.jp/articles/2012/10/03/idf_haswell_hpc_01/ HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備 | マイナビニュース]</ref>。FMAは[[IEEE 754]]規格には含まれていなかったが、2008年改訂版 (IEEE 754-2008) では含められて標準化され


[[CPU]]では、[[インテル]][[x86]]系プロセッサの拡張命令である[[ストリーミングSIMD拡張命令#Intel AVX2|Intel AVX2]]命令セット、[[ARMアーキテクチャ|ARM]]の拡張命令であるVFPv4やNEONv2で、このFMA命令が実装されている<ref>[https://www.xlsoft.com/jp/products/intel/compilers/ccw/12/ug/intref_cls/common/intref_avx_overview.htm 概要: インテル&#x00ae; Advanced Vector Extensions (インテル&#x00ae; AVX) 命令の組み込み関数]</ref><ref>[https://www.xlsoft.com/jp/products/intel/compilers/ccw/12/ug/intref_cls/common/intref_avx_details.htm インテル&#x00ae; Advanced Vector Extensions (インテル&#x00ae; AVX) 組み込み関数と FMA (Fused Multiply-Add) 組み込み関数の詳細]</ref><ref>[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491bj/CJAEGAJB.html FMA(Fused Multiply Add)コンパイラ組み込み関数]</ref>。[[CPU]]や[[デジタルシグナルプロセッサ|DSP]]に限らず、[[GPU]]([[NVIDIA]]製や[[アドバンスト・マイクロ・デバイセズ|AMD]]製や[[Intel HD Graphics|インテル]]製など)でもFMA命令がサポートされている<ref>[https://pc.watch.impress.co.jp/docs/2008/0620/kaigai449.htm 後藤弘茂のWeekly海外ニュース: GeForce GTX 280の倍精度浮動小数点演算]</ref><ref>[https://www.4gamer.net/games/085/G008506/20090921001/ 4Gamer.net ― AMD,世界初のDX11 GPU「ATI Radeon HD 5800」を発表。HD 4800の大幅な進化形]</ref><ref name="gpu_fermi"/><ref>[https://news.mynavi.jp/articles/2014/04/14/gtc2014_floatingpoint_01/ GTC 2014 - GPUの浮動小数点演算の精度:理論と実践(前編) | マイナビニュース]</ref>。
[[CPU]]では、[[インテル]][[x86]]系プロセッサの拡張命令である[[ストリーミングSIMD拡張命令#Intel AVX2|Intel AVX2]]命令セット、[[ARMアーキテクチャ|ARM]]の拡張命令であるVFPv4やNEONv2で、このFMA命令が実装されている<ref>[https://www.xlsoft.com/jp/products/intel/compilers/ccw/12/ug/intref_cls/common/intref_avx_overview.htm 概要: インテル&#x00ae; Advanced Vector Extensions (インテル&#x00ae; AVX) 命令の組み込み関数]</ref><ref>[https://www.xlsoft.com/jp/products/intel/compilers/ccw/12/ug/intref_cls/common/intref_avx_details.htm インテル&#x00ae; Advanced Vector Extensions (インテル&#x00ae; AVX) 組み込み関数と FMA (Fused Multiply-Add) 組み込み関数の詳細]</ref><ref>[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491bj/CJAEGAJB.html FMA(Fused Multiply Add)コンパイラ組み込み関数]</ref>。[[CPU]]や[[デジタルシグナルプロセッサ|DSP]]に限らず、[[GPU]]([[NVIDIA]]製や[[アドバンスト・マイクロ・デバイセズ|AMD]]製や[[Intel HD Graphics|インテル]]製など)でもFMA命令がサポートされている<ref>[https://pc.watch.impress.co.jp/docs/2008/0620/kaigai449.htm 後藤弘茂のWeekly海外ニュース: GeForce GTX 280の倍精度浮動小数点演算]</ref><ref>[https://www.4gamer.net/games/085/G008506/20090921001/ 4Gamer.net ― AMD,世界初のDX11 GPU「ATI Radeon HD 5800」を発表。HD 4800の大幅な進化形]</ref><ref name="gpu_fermi"/><ref>[https://news.mynavi.jp/articles/2014/04/14/gtc2014_floatingpoint_01/ GTC 2014 - GPUの浮動小数点演算の精度:理論と実践(前編) | マイナビニュース]</ref>。

注:命令として上記の3オペランドの積和演算 <math>a \leftarrow a + b \times c</math> 以外にも,4オペランドの積和演算 <math>d \leftarrow a + b \times c</math> を採用する場合もある。
その場合の積和演算は乗累算とは呼ばれない。また4オペランドの積減算であれば <math>d \leftarrow a - b \times c</math> 以外にも <math>d \leftarrow b \times c - a</math> もありうる。

積和演算は科学技術計算分野で多用されるベクトルの内積計算や、ホーナー法による多項式の値を求める計算(たとえば関数の多項式近似による計算)などで有効に用いられる。


== 脚注 ==
== 脚注 ==

2020年8月16日 (日) 19:42時点における版

積和演算 (せきわえんざん) は、演算のひとつで、を求める、つまり乗算の結果を順次加算する演算である。乗累算 (じょうるいざん) とも言う。MAD/MADD (multiply-add) [1][2]もしくは MAC/MACC (multiply-accumulate) と呼ばれることもある。演算式は以下のように表される。

積和演算はデジタル信号処理において非常に多く使用される演算で、デジタルシグナルプロセッサでは積和演算命令を1クロックで実行できる[3]専用の回路を持つ。また、1秒間にこの積和演算を実行できる回数がプロセッサの性能指標として使われることもある[4]

なお、和ではなくを用いる場合は、積差演算と呼ばれる。

融合積和演算

積和の演算式において、途中の積算の段階では結果を丸めずにとの和をとった後に丸めを行うことで、演算結果の丸め誤差を小さくするのが融合積和演算 (fused multiply-add, FMA/FMAD) である[5]。FMAはIEEE 754規格には含まれていなかったが、2008年の改訂版 (IEEE 754-2008) では含められて標準化された。

CPUでは、インテルx86系プロセッサの拡張命令であるIntel AVX2命令セット、ARMの拡張命令であるVFPv4やNEONv2で、このFMA命令が実装されている[6][7][8]CPUDSPに限らず、GPUNVIDIA製やAMD製やインテル製など)でもFMA命令がサポートされている[9][10][2][11]

注:命令として上記の3オペランドの積和演算 以外にも,4オペランドの積和演算 を採用する場合もある。 その場合の積和演算は乗累算とは呼ばれない。また4オペランドの積減算であれば 以外にも もありうる。

積和演算は科学技術計算分野で多用されるベクトルの内積計算や、ホーナー法による多項式の値を求める計算(たとえば関数の多項式近似による計算)などで有効に用いられる。

脚注

関連項目