맨위로가기

단일 곱셈-누산기

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의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의 값을 갖는 수학적 개념으로, 분포 또는 측도로 정의되며, 순간적인 충격이나 점 형태 현상 모델링에 활용되고 푸리에 변환, 스케일링, 평행 이동 등의 성질을 가진다.

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를 지원한다.

제조사제품명연도
HPPA-80001996
히타치SuperH SH-41998
SCE-ToshibaEmotion Engine1999
인텔Itanium2001
STICell2006
FujitsuSPARC64 VI2007
(MIPS 호환)Loongson-2F2008[15]
Elbrus-8SV2018
AMDBulldozer (FMA4만)2011
AMDPiledriver (FMA3 및 FMA4)2012[16]
AMDSteamroller2014
AMDExcavator2015
AMDZen (FMA3만)2017
인텔Haswell (FMA3만)2013[17]
인텔Skylake (FMA3만)2015
ARM 프로세서ARM Cortex-M4F2010
STM32 Cortex-M33 (VFMA 연산)[18]
ARMARM Cortex-A52012
ARMARM Cortex-A72013
ARMARM Cortex-A152012
퀄컴Krait2012
애플Apple A62012
ARMv8모든 프로세서
FujitsuA64FX ("접두사 명령어를 사용한 4-피연산자 FMA")
IBMz/Architecture1998년 이후
AMD GPUTeraScale 2 "Evergreen"-시리즈 기반, Graphics Core Next 기반2009
Nvidia GPUFermi 기반, Kepler 기반, Maxwell 기반, Pascal 기반, Volta 기반2010
인텔Sandy Bridge 이후 GPU
인텔인텔 MIC2012
ARM MaliT600 시리즈 이상2012
NECSX-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