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

編集の要約なし
タグ: 差し戻し済み
 
== 融合積和演算 ==
積和の演算式において、途中の積算<math>b \times c</math>の演算段階では結果を[[浮動小数点数]]丸めずに<math>a</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) では含められて標準化されている
 
[[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> もありうる。
 
積和演算は科学技術計算分野で多用されるベクトルの内積計算や、ホーナー法による多項式の値を求める計算(たとえば関数の多項式近似による計算)などで有効に用いられる。
 
== 脚注 ==
匿名利用者