積和演算
積和演算 (せきわえんざん) は、演算のひとつで、積の和を求める、つまり乗算の結果を順次加算する演算である。乗累算 (じょうるいざん) とも言う。MAD/MADD (multiply-add) [1][2]もしくは MAC/MACC (multiply-accumulate) と呼ばれることもある。演算式は以下のように表される。
積和演算はデジタル信号処理において非常に多く使用される演算で、デジタルシグナルプロセッサでは積和算命令を1クロックで実行できる[3]専用の演算回路を持つ。また、1秒間にこの積和演算を何回実行できるか、がプロセッサの性能指標として使われることもある[4]。
なお、和ではなく差を用いる場合は、積差演算(multiply-subtract)と呼ばれる。
積和演算はドット積の計算に現れる。ベクトル と のドット積は「アキュムレータ に対し要素の積 を足し込む」という積和演算を要素分繰り返すことで得られる。行列積(GEMM)の各要素は行と列のドット積で計算されるため、行列積は積和演算の集まりと言える。
融合積和演算
[編集]積和の演算式において、途中の積算の演算結果を浮動小数点数の値としていったん丸めてしまうと、最終演算結果に大きな誤差が発生する。途中の積算を丸めず、積和演算を1命令で行なってしまうことで、最終演算結果の誤差を小さくするのが融合積和演算 (fused multiply-add, FMA/FMAD) である[5]。FMAはIEEE 754規格の2008年改訂版 (IEEE 754-2008) で標準化されている。
CPUでは、HPのPA-RISC、IBMのメインフレームコンピュータ3090のVF拡張、IBMのPowerプロセッサ、インテルのItaniumプロセッサ、インテルx86系プロセッサの拡張命令であるFMA命令セット[6]、ARMの拡張命令であるVFPv4やNEONv2で、このFMA命令が実装されている[7][8]。CPUやDSPに限らず、GPU(NVIDIA製やAMD製やインテル製など)でもFMA命令がサポートされている[9][10][2][11]。
脚注
[編集]- ^ 【後藤弘茂の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個装備 | マイナビニュース
- ^ "FMA (Fused Multiply-Add) は、インテル® AVX の別の拡張機能 ... インテル® AVX と FMA". Intel. 概要: インテル® 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の浮動小数点演算の精度:理論と実践(前編) | マイナビニュース