「積和演算」の版間の差分
編集の要約なし タグ: 差し戻し済み ビジュアルエディター: 中途切替 |
編集の要約なし タグ: 差し戻し済み |
||
14行目: | 14行目: | ||
== 融合積和演算 == |
== 融合積和演算 == |
||
積和の演算式において、途中の積算<math>b \times c</math>の |
積和の演算式において、途中の積算<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 概要: インテル® Advanced Vector Extensions (インテル® AVX) 命令の組み込み関数]</ref><ref>[https://www.xlsoft.com/jp/products/intel/compilers/ccw/12/ug/intref_cls/common/intref_avx_details.htm インテル® Advanced Vector Extensions (インテル® 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 概要: インテル® Advanced Vector Extensions (インテル® AVX) 命令の組み込み関数]</ref><ref>[https://www.xlsoft.com/jp/products/intel/compilers/ccw/12/ug/intref_cls/common/intref_avx_details.htm インテル® Advanced Vector Extensions (インテル® 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]。CPUやDSPに限らず、GPU(NVIDIA製やAMD製やインテル製など)でもFMA命令がサポートされている[9][10][2][11]。
注:命令として上記の3オペランドの積和演算 以外にも,4オペランドの積和演算 を採用する場合もある。 その場合の積和演算は乗累算とは呼ばれない。また4オペランドの積減算であれば 以外にも もありうる。
積和演算は科学技術計算分野で多用されるベクトルの内積計算や、ホーナー法による多項式の値を求める計算(たとえば関数の多項式近似による計算)などで有効に用いられる。
脚注
- ^ 【後藤弘茂のWeekly海外ニュース】HaswellのGPUコア「Iris」はなぜ強力なのか - PC Watch
- ^ a b 科学技術計算向け演算能力が引き上げられたGPUアーキテクチャ「Fermi」 (2) 科学技術計算向けのさまざまな工夫 | マイナビニュース
- ^ 日本テキサス・インスツルメンツ (2012-06-29). “イチから学ぶDSP基礎の基礎(2):専用プロセッサとしてのDSPの特徴 (1-3)”. EDN Japan .
- ^ 2013年のプロセッサのFLOPS値計算方法 - トータル・ディスクロージャ・サイト(事実をありのままに)[リンク切れ]
- ^ HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備 | マイナビニュース
- ^ 概要: インテル® Advanced Vector Extensions (インテル® AVX) 命令の組み込み関数
- ^ インテル® Advanced Vector Extensions (インテル® AVX) 組み込み関数と FMA (Fused Multiply-Add) 組み込み関数の詳細
- ^ FMA(Fused Multiply Add)コンパイラ組み込み関数
- ^ 後藤弘茂のWeekly海外ニュース: GeForce GTX 280の倍精度浮動小数点演算
- ^ 4Gamer.net ― AMD,世界初のDX11 GPU「ATI Radeon HD 5800」を発表。HD 4800の大幅な進化形
- ^ GTC 2014 - GPUの浮動小数点演算の精度:理論と実践(前編) | マイナビニュース