FMA 명령어 집합

FMA 명령어 집합(영어: FMA instruction set)은 단일 곱셈-누산기(FMA)계산을 하기위한 x86 마이크로프로세서 명령어 집합에서의 128비트 SIMD명령어들이다. 여기에는 두가지의 종류가 있다.

새 명령어들

FMA3와 FMA4 명령어 집합은 기능면에서는 거의 동일하지만 상호 호환은 되지 않는다. 이 둘은 부동소수점 연산과 SIMD연산을 위한 단일 곱셈-누산기(FMA) 명령어들이다.

호환성 문제

FMA3와 FMA4의 차이점은 명령어가 세개의 피연산자(operand)를 갖느냐 네개의 피연산자를 갖느냐이다. 이 차이점은 호환성 문제를 야기한다. 단일 곱셈-누산기(FMA)는 다음과 같은 형태로 이루어진다.

d=a+b×c

FMA4는 네개의 피연산자가 네개의 프로세서 레지스터를 사용하고 FMA3는 세개의 피연산자와 세개의 레지스터를 사용한다. 따라서 d 가 a와 같다. FMA3는 코드가 좀 더 짧게 되며 하드웨어의 구현이 좀 더 단순한반면 FMA4는 프로그램의 유연성을 제공한다.

FMA3 명령어 집합

FMA3지원 CPU

  • 인텔
    • 인텔은 22nm공정기술을 사용하는 하스웰부터 지원한다.
  • AMD

Excerpt from FMA3

Mnemonic (AT&T) 피연산자 연산
VFMADD132PDx xmm, xmm, xmm/m128 $0 = $0*$2 + $1
VFMADD132PDy ymm, ymm, ymm/m256 $0 = $0*$2 + $1
VFMADD213PDx xmm, xmm, xmm/m128 $0 = $1*$0 + $2
VFMADD213PDy ymm, ymm, ymm/m256 $0 = $1*$0 + $2
VFMADD231PDx xmm, xmm, xmm/m128 $0 = $1*$2 + $0
VFMADD231PDy ymm, ymm, ymm/m256 $0 = $1*$2 + $0
VFMADD132PSx xmm, xmm, xmm/m128 $0 = $0*$2 + $1
VFMADD132PSy ymm, ymm, ymm/m256 $0 = $0*$2 + $1
VFMADD213PSx xmm, xmm, xmm/m128 $0 = $1*$0 + $2
VFMADD213PSy ymm, ymm, ymm/m256 $0 = $1*$0 + $2
VFMADD231PSx xmm, xmm, xmm/m128 $0 = $1*$2 + $0
VFMADD231PSy ymm, ymm, ymm/m256 $0 = $1*$2 + $0
VFMADD132SD xmm, xmm, xmm/m64 $0 = $0*$2 + $1
VFMADD213SD xmm, xmm, xmm/m64 $0 = $1*$0 + $2
VFMADD231SD xmm, xmm, xmm/m64 $0 = $1*$2 + $0
VFMADD132SS xmm, xmm, xmm/m32 $0 = $0*$2 + $1
VFMADD213SS xmm, xmm, xmm/m32 $0 = $1*$0 + $2
VFMADD231SS xmm, xmm, xmm/m32 $0 = $1*$2 + $0

FMA4 명령어 집합

FMA4지원 CPU

  • AMD
    • 2011년에 양산될 불도저 프로세서 코어.
  • 인텔
    • 인텔 프로세서에서 FMA4를 지원할지는 미정.

Excerpt from FMA4

Mnemonic (AT&T) 피연산자 연산
VFMADDPDx xmm, xmm, xmm/m128, xmm/m128 $0 = $1*$2 + $3
VFMADDPDy ymm, ymm, ymm/m256, ymm/m256 $0 = $1*$2 + $3
VFMADDPSx xmm, xmm, xmm/m128, xmm/m128 $0 = $1*$2 + $3
VFMADDPSy ymm, ymm, ymm/m256, ymm/m256 $0 = $1*$2 + $3
VFMADDSD xmm, xmm, xmm/m64, xmm/m64 $0 = $1*$2 + $3
VFMADDSS xmm, xmm, xmm/m32, xmm/m32 $0 = $1*$2 + $3

내력

인텔과 AMD는 양사간에 FMA3와 FMA4의 코딩 기법에 대한 협력없이 서로의 지원 계획을 바꿈으로서 호환성 문제가 발생했다. AMD는 FMA3에서 FMA4로 변경을 했고 이와 거의 동시에 인텔은 FMA4에서 FMA3로 계획을 변경했다. 대략적인 내력은 다음과 같다.

같이 보기

각주

  1. ↑ “Striking a balance”. Dave Christie, AMD Developer blogs. 2009년 5월 7일. 2009년 5월 8일에 확인함.
  2. ↑ Maffeo, Robin. “AMD and the Visual Studio 11 Beta”. AMD. 2012년 4월 19일에 확인함.
  3. ↑ “AMD64 Architecture Programmer’s Manual Volume 6: 128-Bit and 256-Bit XOP, FMA4 and CVT16 Instructions” (PDF). AMD. 2009년 5월 1일.
  4. ↑ “128-Bit SSE5 Instruction Set”. AMD Developer Central. 2008년 1월 15일에 원본 문서에서 보존된 문서. 2008년 1월 28일에 확인함.
  5. ↑ “Intel Advanced Vector Extensions Programming Reference”. 인텔. 2011년 8월 7일에 원본 문서 (PDF)에서 보존된 문서. 2008년 4월 5일에 확인함.
  6. ↑ “Intel Advanced Vector Extensions Programming Reference”. 인텔. 2009년 5월 6일에 확인함.
  7. ↑ “Striking a balance”. Dave Christie, AMD Developer blogs. 2009년 5월 7일. 2012년 4월 5일에 원본 문서에서 보존된 문서. 2009년 5월 8일에 확인함.