단일 곱셈-누산기
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
단일 곱셈-누산기(FMA, fused multiply-add)는 부동 소수점 곱셈과 덧셈 연산을 한 번의 반올림으로 수행하는 연산이다. IEEE 754-2008 표준에서 권장하며, 곱셈과 덧셈을 개별적으로 수행하는 것보다 더 정확한 결과를 제공한다. FMA는 내적, 행렬 곱셈, 다항식 평가 등 다양한 계산에 활용되며, CPU, GPU, DSP 등 다양한 하드웨어에서 지원된다. C 프로그래밍 언어는 fma() 함수를 통해 FMA 연산을 지원한다.
더 읽어볼만한 페이지
- 컴퓨터 산술 - IEEE 754
IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다. - 컴퓨터 산술 - 1의 보수
1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다. - 디지털 신호 처리 - 라플라스 변환
라플라스 변환은 함수 f(t)를 복소수 s를 사용하여 적분을 통해 다른 함수 F(s)로 변환하는 적분 변환이며, 선형성을 가지고 미분방정식 풀이 등 공학 분야에서 널리 사용된다. - 디지털 신호 처리 - 디랙 델타 함수
디랙 델타 함수는 원점에서 무한대 값을 갖고 그 외 지점에서 0의 값을 갖는 수학적 개념으로, 분포 또는 측도로 정의되며, 순간적인 충격이나 점 형태 현상 모델링에 활용되고 푸리에 변환, 스케일링, 평행 이동 등의 성질을 가진다.
단일 곱셈-누산기 | |
---|---|
연산 개요 | |
종류 | 곱셈-누산 |
분야 | 디지털 신호 처리 |
약칭 | MAC |
활용 | 디지털 필터링 신경망 푸리에 변환 내적 계산 |
정의 | |
수식 | a ← a + (b × c) |
설명 | '곱셈 결과(b × c)를 누산기 변수 a에 더하여 갱신하는 연산이다.' |
특징 | |
정확도 향상 | 중간 계산 결과의 정밀도를 유지하여 최종 결과의 정확도를 높임. |
성능 향상 | 곱셈과 덧셈을 하나의 단계로 결합하여 처리 속도를 향상시킴. |
FMA (Fused Multiply-Add) | 일부 프로세서에서 지원하는 기능으로, 반올림 오차를 줄여 더 정확한 결과를 얻을 수 있다. |
응용 분야 | 디지털 신호 처리 (DSP) 그래픽 처리 (GPU) 머신 러닝 (신경망) |
하드웨어 구현 | |
곱셈-누산 장치 (MAC 유닛) | 곱셈과 덧셈을 동시에 수행하는 전용 하드웨어 회로. |
구성 요소 | 곱셈기 덧셈기 누산기 (결과 저장) |
성능 지표 | 처리량, 지연 시간, 전력 소비량 |
FMA (융합 곱셈-덧셈) | |
설명 | 곱셈과 덧셈을 단일 연산으로 결합하여 중간 반올림 없이 최종 결과를 얻는 방식. |
장점 | 높은 정확도 빠른 연산 속도 향상된 성능 |
2. 부동소수점 연산과 FMA
부동 소수점 연산은 수학적 정밀도가 제한되어 있어, 일반적인 곱셈과 덧셈 연산을 각각 수행하면 반올림을 두 번 거치게 되고, 이로 인해 오차가 발생할 수 있다. IEEE 754-2008 표준[6]에서는 이러한 오차를 줄이기 위해 융합 곱셈-덧셈 (Fused Multiply-Add, FMA) 연산을 도입했다. FMA는 곱셈과 덧셈을 하나의 단계로 결합하여 한 번의 반올림만 수행하므로, 더 정확한 결과를 얻을 수 있다.
2. 1. FMA 연산의 정의
'''융합 곱셈-덧셈'''('''FMA''' 또는 '''fmadd''')[7]은 부동 소수점 곱셈-덧셈 연산을 한 번의 반올림만으로 수행하는 것이다. 즉, 일반적인 곱셈-덧셈 연산이 를 계산하고 결과를 ''N''개의 유효 비트로 반올림한 다음, 에 더하고 다시 ''N''개의 유효 비트로 반올림하는 반면, FMA는 전체 식 를 최종 결과를 ''N''개의 유효 비트로 반올림하기 전에 전체 정밀도로 계산한다.FMA 연산은 IEEE 754 규격의 2008년 개정판(IEEE 754-2008)에서 표준화되었다.[23] FMA 명령어는 CPU에서는 HP의 PA-RISC, IBM의 메인프레임 컴퓨터 3090의 VF 확장, IBM의 Power 프로세서, 인텔의 Itanium 프로세서, 인텔 x86계 프로세서의 FMA 명령어 세트[24], ARM의 확장 명령어인 VFPv4와 NEONv2에서 구현되어 있다.[25][26] 또한, CPU나 DSP뿐만 아니라 GPU(NVIDIA제, AMD제, 인텔제 등)에서도 지원된다.[27][28][20][29]
곱셈-덧셈 연산을 두 번의 반올림 대신 FMA를 사용하여 한 번의 반올림으로 수행하면 더 정확한 결과를 얻을 수 있다.[6] 중간 곱셈 의 결과를 부동 소수점 수 값으로 반올림하지 않고 연산을 1 명령어로 수행함으로써 최종 결과의 오차를 줄일 수 있다.[23]
2. 2. FMA의 장점
FMA는 다음과 같은 여러 계산에서 속도와 정확도를 향상시킬 수 있다.[6]융합 곱셈-덧셈(FMA)은 일반적으로 더 정확한 결과를 제공한다. 그러나 윌리엄 카한은 FMA를 무심코 사용하면 문제가 발생할 수 있다고 지적했다.[8]
FMA 명령어를 사용하면 나눗셈 (나눗셈 알고리즘 참조) 및 제곱근 (제곱근 계산 방법 참조) 연산의 효율적인 소프트웨어 구현을 가능하게 하여, 이러한 연산에 필요한 전용 하드웨어를 줄일 수 있다.[10]
2. 3. FMA 사용 시 주의점
윌리엄 카한은 융합 곱셈-덧셈(FMA)을 무심코 사용하면 문제가 발생할 수 있다고 지적했다.[8] x|x영어2 - y|y영어2가 ((''x'' × ''x'') - ''y'' × ''y'')로 계산되는 경우 (중복 괄호가 컴파일러에게 먼저 (''x'' × ''x'') 항을 반올림하도록 지시하는 카한의 제안된 표기법을 따름) FMA를 사용하면, 첫 번째 곱셈이 낮은 유효 비트를 버리기 때문에 x|x영어 = y|y영어일 때조차 결과가 음수가 될 수 있다. 예를 들어 결과의 제곱근을 계산하는 경우 오류가 발생할 수 있다.3. FMA 지원 하드웨어 및 소프트웨어
FMA 연산은 IEEE 754-2008 표준에 포함되어 있다.
IBM POWER1 (1990) 프로세서에서 "곱셈-덧셈 융합"으로 처음 도입되었으며, 그 이후 많은 다른 프로세서에 추가되었다. 또한, 1999년 표준 C 프로그래밍 언어는 `fma()` 표준 수학 라이브러리 함수와 곱셈에 이은 덧셈의 자동 변환(부동 소수점 표현식 축약)을 통해 FMA 연산을 지원한다.
3. 1. FMA를 지원하는 프로세서
IBM POWER1 (1990) 프로세서에서 "곱셈-덧셈 융합"으로 처음 도입되었다.[7] 이후 다양한 프로세서에서 FMA를 지원한다.제조사 | 제품명 | 연도 |
---|---|---|
HP | PA-8000 | 1996 |
히타치 | SuperH SH-4 | 1998 |
SCE-Toshiba | Emotion Engine | 1999 |
인텔 | Itanium | 2001 |
STI | Cell | 2006 |
Fujitsu | SPARC64 VI | 2007 |
(MIPS 호환) | Loongson-2F | 2008[15] |
Elbrus-8SV | 2018 | |
AMD | Bulldozer (FMA4만) | 2011 |
AMD | Piledriver (FMA3 및 FMA4) | 2012[16] |
AMD | Steamroller | 2014 |
AMD | Excavator | 2015 |
AMD | Zen (FMA3만) | 2017 |
인텔 | Haswell (FMA3만) | 2013[17] |
인텔 | Skylake (FMA3만) | 2015 |
ARM 프로세서 | ARM Cortex-M4F | 2010 |
STM32 Cortex-M33 (VFMA 연산) | [18] | |
ARM | ARM Cortex-A5 | 2012 |
ARM | ARM Cortex-A7 | 2013 |
ARM | ARM Cortex-A15 | 2012 |
퀄컴 | Krait | 2012 |
애플 | Apple A6 | 2012 |
ARMv8 | 모든 프로세서 | |
Fujitsu | A64FX ("접두사 명령어를 사용한 4-피연산자 FMA") | |
IBM | z/Architecture | 1998년 이후 |
AMD GPU | TeraScale 2 "Evergreen"-시리즈 기반, Graphics Core Next 기반 | 2009 |
Nvidia GPU | Fermi 기반, Kepler 기반, Maxwell 기반, Pascal 기반, Volta 기반 | 2010 |
인텔 | Sandy Bridge 이후 GPU | |
인텔 | 인텔 MIC | 2012 |
ARM Mali | T600 시리즈 이상 | 2012 |
NEC | SX-Aurora TSUBASA | |
RISC-V 명령어 집합 | 2010 |
3. 2. FMA를 지원하는 프로그래밍 언어
1999 표준의 C 프로그래밍 언어는 `fma()` 표준 수학 라이브러리 함수와 곱셈에 이은 덧셈의 자동 변환(부동 소수점 표현식 축약)을 통해 FMA 연산을 지원하며, 이는 표준 프라그마를 사용하여 명시적으로 활성화하거나 비활성화할 수 있다. GCC 및 Clang C 컴파일러는 FMA 명령어를 지원하는 프로세서 아키텍처에 대해 기본적으로 이러한 변환을 수행한다. GCC는 앞서 언급한 프라그마를 지원하지 않으므로,[12]-ffp-contract
명령줄 옵션을 통해 전역적으로 제어할 수 있다.[13]4. 추가 정보
(내용 없음)
4. 1. 내적 연산 (Dot product instruction)
내적은 FMA 연산을 통해 속도와 정확성을 향상시킬 수 있는 계산 중 하나이다.[7] 일부 기계는 여러 개의 융합 곱셈-덧셈 연산을 단일 단계로 결합하기도 한다. 예를 들어, 두 개의 128비트 SIMD 레지스터 `a0×b0 + a1×b1 + a2×b2 + a3×b3`에 대한 4-요소 내적을 단일 사이클 처리량으로 수행하는 경우가 있다.참조
[1]
웹사이트
The Feasibility of Ludgate's Analytical Machine
http://www.fano.co.u[...]
2020-08-30
[2]
논문
A Method of Increasing Digital Filter Performance Based on Truncated Multiply-Accumulate Units
2020-01
[3]
서적
2009 IEEE International Symposium on Parallel & Distributed Processing
2009-05
[4]
논문
PV-MAC: Multiply-and-accumulate unit structure exploiting precision variability in on-device convolutional neural networks
https://www.scienced[...]
2020-03-01
[5]
웹사이트
mad - ps
https://docs.microso[...]
2019-11-20
[6]
웹사이트
Precision & Performance: Floating Point and IEEE 754 Compliance for NVIDIA GPUs
https://developer.nv[...]
nvidia
2013-08-31
[7]
웹사이트
fmadd instrs
https://www.ibm.com/[...]
[8]
웹사이트
IEEE Standard 754 for Binary Floating-Point Arithmetic
http://www.cs.berkel[...]
1996-05-31
[9]
간행물
Floating-Point Fused Multiply–Add Architectures
http://repositories.[...]
2007-05
[10]
conference
Software Division and Square Root Using Goldschmidt's Algorithms
http://www.informati[...]
2004-11
[11]
웹사이트
VAX instruction of the week: POLY
http://uranium.vaxpo[...]
[12]
웹사이트
Bug 20785 - Pragma STDC * (C99 FP) unimplemented
https://gcc.gnu.org/[...]
2022-02-02
[13]
웹사이트
Optimize Options (Using the GNU Compiler Collection (GCC))
https://gcc.gnu.org/[...]
2022-02-02
[14]
논문
Design of the IBM RISC System/6000 floating-point execution unit
1990-01
[15]
웹사이트
Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation
http://www.mdronline[...]
[16]
웹사이트
New "Bulldozer" and "Piledriver" Instructions
https://developer.am[...]
AMD Developer Central
2012-10
[17]
웹사이트
Intel adds 22nm octo-core 'Haswell' to CPU design roadmap
http://www.reghardwa[...]
2008-08-19
[18]
웹사이트
STM32 Cortex-M33 MCUs programming manual
https://www.st.com/r[...]
2024-05-06
[19]
뉴스
HaswellのGPUコア「Iris」はなぜ強力なのか - PC Watch
https://pc.watch.imp[...]
[20]
뉴스
科学技術計算向け演算能力が引き上げられたGPUアーキテクチャ「Fermi」 (2) 科学技術計算向けのさまざまな工夫 | マイナビニュース
https://news.mynavi.[...]
[21]
논문
イチから学ぶDSP基礎の基礎(2):専用プロセッサとしてのDSPの特徴 (1-3)
https://ednjapan.com[...]
2012-06-29
[22]
문서
2013年のプロセッサのFLOPS値計算方法 - トータル・ディスクロージャ・サイト(事実をありのままに)
http://topsecret.hpc[...]
[23]
뉴스
HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備 | マイナビニュース
https://news.mynavi.[...]
[24]
문서
"FMA (Fused Multiply-Add) は、インテル® AVX の別の拡張機能 ... インテル® AVX と FMA"
https://www.xlsoft.c[...]
Intel
[25]
문서
インテル® Advanced Vector Extensions (インテル® AVX) 組み込み関数と FMA (Fused Multiply-Add) 組み込み関数の詳細
https://www.xlsoft.c[...]
[26]
문서
FMA(Fused Multiply Add)コンパイラ組み込み関数
http://infocenter.ar[...]
[27]
뉴스
後藤弘茂のWeekly海外ニュース: GeForce GTX 280の倍精度浮動小数点演算
https://pc.watch.imp[...]
[28]
뉴스
4Gamer.net ― AMD,世界初のDX11 GPU「ATI Radeon HD 5800」を発表。HD 4800の大幅な進化形
https://www.4gamer.n[...]
[29]
뉴스
GTC 2014 - GPUの浮動小数点演算の精度:理論と実践(前編) | マイナビニュース
https://news.mynavi.[...]
[30]
서적
http://domino.resear[...]
2011-01-15
[31]
문서
Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation
http://www.mdronline[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com