[논문 리뷰] Short Note on Costs of Floating Point Operations on current x86-64 Architectures: Denormals, Overflow, Underflow, and Division by Zero
이 논문은 AVX, AVX2 및 FMA3/4 지시어를 사용하여 현대 x86-64 프로세서에서 부동소수점 예외—비정규화 수치, 오버플로우, 언더플로우, 및 0으로의 나누기—의 성능 비용을 정량화한다. FTZ/DAZ를 사용하지 않을 경우 비정규화 연산에서 100배의 성능 저하가 발생하며, FMA 연산은 덧셈 구성 요소가 언더플로우가 될 때에만 비용이 발생한다. 주요 기여는 인텔과 AMD 시스템에서 사이클 수준의 지연을 실측한 것으로, 이는 FTZ/DAZ 비활성화가 수치 연산 워크로드에서 성능을 심각하게 떨어뜨릴 수 있음을 드러낸다.
Simple floating point operations like addition or multiplication on normalized floating point values can be computed by current AMD and Intel processors in three to five cycles. This is different for denormalized numbers, which appear when an underflow occurs and the value can no longer be represented as a normalized floating-point value. Here the costs are about two magnitudes higher.
연구 동기 및 목표
- 현대 x86-64 프로세서에서 부동소수점 예외—비정규화 수치, 오버플로우, 언더플로우, 0으로의 나누기—의 성능 영향을 정량화하는 것.
- FTZ(플러시 투 제로) 및 DAZ(비정규화 수치는 제로) 모드의 사용이 부동소수점 연산의 실행 지연에 미치는 영향을 평가하는 것.
- AVX, AVX2 및 FMA3/4 지시어 세트를 사용하여 정규화 및 비정규화 부동소수점 연산 간의 성능 차이를 측정하는 것.
- 예외 발생 시 어떤 부동소수점 연산이 가장 높은 성능 비용을 유발하는지, 특히 FMA 지시어에서 확인하는 것.
제안 방법
- 이중 정밀도 벡터에서 부동소수점 연산을 고립시키기 위해 C/C++ 및 어셈블리어로 마이크로 벤치마크를 구현하였다.
- 내부 루프는 AVX 지시어를 사용하여 1 사이클에 4개의 요소를 처리하도록 벡터화하여 메모리 병목 현상을 최소화하였다.
- MXCSR 제어 레지스터를 인트린식 함수를 통해 조작하여 FTZ 및 DAZ 모드를 켜고 끄는 조건에서 측정를 수행하였다.
- 세 대의 인텔(SandyBridge, IvyBridge, Haswell) 및 한 대의 AMD(Interlagos) 시스템에서 고해상도 타이밍을 사용하여 지연을 측정하였다.
- 4종류의 연산 유형을 벤치마크로 사용: 덧셈, 곱셈, 나눗셈, 융합곱셈덧셈(FMA), 입력을 특정 예외를 유도하도록 설정하였다.
- 결과는 연산당 사이클 수로 보고되었으며, 다양한 프로세서 마이크로아키텍처에서 정규화 및 예외 발생 사례를 비교하였다.
실험 결과
연구 질문
- RQ1현재 x86-64 프로세서에서 비정규화 부동소수점 연산의 성능 비용은 정규화 연산 대비 얼마나 되는가?
- RQ2FTZ 및 DAZ 모드는 언더플로우, 오버플로우 또는 0으로 나누기와 관련된 부동소수점 연산의 지연에 어떤 영향을 미치는가?
- RQ3FMA 연산은 별도의 곱셈 및 덧셈 지시어에 비해 언더플로우에 더 민감한가, 아니면 덜 민감한가?
- RQ4NaN 값의 존재 또는 0으로 나누기가 AVX 및 FMA 지시어에서 실행 시간을 상당히 증가시키는가?
주요 결과
- 인텔 Haswell과 AMD Interlagos에서 정규화된 AVX 덧셈 및 곱셈은 3–5 사이클을 차지하지만, FTZ/DAZ 비활성화 상태에서 언더플로우가 발생한 연산은 30–40 사이클을 차지하여 10배에서 100배의 성능 저하가 발생한다.
- FTZ/DAZ가 켜져 있을 경우 0으로 나누기는 빠르게 처리되며 4–5 사이클이지만, 비정규화 수치가 포함된 경우 상당히 느려져 최대 64 사이클까지 소요된다.
- 나눗셈의 경우, 피젯수 또는 제수에서 언더플로우가 발생하면 Haswell에서 약 7 사이클에서 최대 56.5 사이클까지 지연이 증가하여 심각한 성능 저하가 발생한다.
- FMA 연산은 덧셈 구성 요소가 언더플로우가 될 때에만 비용이 발생한다: 곱셈 언더플로우가 발생한 FMA는 추가 비용이 없지만, 덧셈 언더플로우가 발생한 FMA는 33.5–36.5 사이클을 소요한다.
- FTZ 및 DAZ가 켜져 있을 경우, 모든 예외 상황(언더플로우, 오버플로우, NaN, 0으로 나누기)이 정규화 연산 지연과 거의 동일하게 영향을 미치며 성능에 미치는 영향이 무시할 수 있다.
- 비정규화 입력에 대한 성능 저하는 나눗셈과 덧셈에서 가장 심각하며, 곱셈과 FMA는 어떤 구성 요소가 언더플로우되는지에 따라 더 미묘한 행동을 보인다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.