積和演算 |
辞書:科学用語の基礎知識 算数・数学編 (NMATH) |
読み:せきわえんざん |
外語:MAC: Multiply and ACcumulation |
品詞:名詞 |
積の和を求める演算。つまり、二つの値の積を累算中の値に加算する演算。
|
概要 |
DSPの得意とする処理であり、かつ信号処理では必須の処理となる。
積和演算は、式で書くと、次のようになる。
a ← b + (c × d)
このままだと4項演算だが、aとbを同じにして3項演算とし、累算に特化した実装も多い。
a ← a + (b × c)
極めて単純明快な演算ではあるが、この演算速度が信号処理における最大の律速要因になり、信号処理速度そのものを決めてしまうので侮れない。
この積和演算速度を表わすために、MMACS(メガ積和演算/秒)やGMACS(ギガ積和演算/秒)といった単位も存在するほどである。
従って、全てのDSPには汎用のMPUにはない高速乗算器とともに積和演算器が搭載され、積和演算命令(MAC命令)が用意されている。これにより、ほぼ全てのDSPはこの演算を1命令サイクルで実行するのである。
特徴 |
呼称 |
一般的には、Multiply and ACcumulationからMACという。
Intelは、Fused Multiply addからFMAと呼んでいる。
DSPの場合 |
DSPでも様々な実装があり、それぞれに特徴がある。一般的には、ニーモニックで次のように書くことが多いようではある。
MAC A,B,SUM
AとBが二つの値で、SUMが累算する積和演算レジスターである。
積和演算レジスターが一つしかないようなDSPの場合は、これは省略されることになるだろう。
SuperHの場合 |
SuperHなど汎用のプロセッサーでも、積和演算器が組み込まれた製品がある。こういったプロセッサーでは汎用レジスターよりも大きな値を扱う必要があるため、積和演算レジスターとして、専用にレジスターを持っていることが多い。
SuperHの場合は2つの汎用レジスターで16または32ビットの値二つのポインターを示して使う。積和演算レジスターは一つしかないので指定する必要が無い。例えば次のようになる。
MAC.L @R0+,@R1+
演算終了後、レジスターは自動で増分される。このため、メモリー上に連続してデータを用意しておけば、連続して命令を実行することができる。
SuperHの場合は汎用レジスターが32ビット、積和演算レジスターは64ビットなので、積和演算レジスターの上位・下位32ビットごとに分けて、汎用レジスターやメモリーに複写する命令が存在する。
ARMの場合 |
ARMも汎用のプロセッサーだが、組み込みを想定していることから、積和演算回路を搭載している。しかもARMの場合、4項演算が可能など、非常に贅沢な作りとなっている。
MLA{<cond>}{S} Rd, Rm, Rs, Rn ; Rd = (Rm * Rs) + Rn
UMLAL{<cond>}{S} RdLo, RdHi, Rm, Rs ; RdHi:RdLo += (Rm * Rs)
SMLAL{<cond>}{S} RdLo, RdHi, Rm, Rs ; RdHi:RdLo += (Rm * Rs)
MLAは、32ビットで演算し、結果を32ビットで返す命令である。
UMLALとSMLALは、32ビット× 32ビットを実行し64ビットの整数に加算した結果を返す命令で、うちUは無符号、Sは符号付きを意味する。Sは、Rm, Rs, Rdの3値全てが符号ありとして扱われる。
ちなみにARMv6T2以降には、MLSという積差演算の命令が搭載された。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |