인텔의 Haswell 칩이 FP 곱셈을 추가 속도보다 두 배 더 빠른 이유는 무엇입니까?


35

Stack Overflow 에서이 흥미로운 질문을 읽었습니다.

정수 곱셈은 현대 CPU의 추가와 동일한 속도로 실제로 수행됩니까?

의견 중 하나는 말했다 :

"Haswell에서 FP 곱하기 처리량은 FP add의 처리량의 두 배입니다. 그 이유는 포트 0과 1을 곱하기 위해 사용할 수 있지만 포트 1 만 추가 할 수 있기 때문입니다. -두 포트가 모두 할 수 있으므로 곱하기를 추가하십시오. "

덧셈에 비해 두 배의 동시 곱셈을 허용하는 이유는 무엇입니까?


3
@DKNguyen 감사합니다! 그러나 곱셈은 덧셈보다 더 많은 전자 장치를 필요로합니다 (사실 덧셈은 곱셈의 마지막 단계이므로 곱셈에 필요한 회로에는 덧셈에 필요한 모든 것이 포함될 것입니다).
user1271772

5
FP 곱셈 추가됩니다. 로그를 참조하십시오.
Janka

9
@Janka FP 곱셈에는 지수를 더해야하지만 실제로 가수를 곱해야합니다. 저장된 가수는 로그가 아닙니다.
Elliot Alderson

6
Skylake의 FWIW는 "순수한 추가"처리량을 두 배로 늘 렸기 때문에 Haswell / Broadwell 시대의 호기심이자 고유 한 것이 아닙니다.
해롤드

4
@ user1271772 그렇습니다. 포트 0과 1에 추가하고 포트 0과 1에도 곱하기 같은 포트입니다. Skylake 이전에는 포트 1 만 순수 추가를 처리 할 수있었습니다. 이것은 또한 일부 또한 같은 작업으로 확장, 즉 최소 / 최대 / (거기 셔플 또는 부하 μop 너무 자주있다) 변환 실제를 수행하는 변환의 μop 비교
해롤드

답변:


37

본문이 아닌 경우 질문 제목에 답할 수 있습니다.

부동 소수점 추가에는 두 가수를 추가하기 전에 두 가수를 정렬해야합니다 (두 지수의 차이에 따라 다름). 더하기 전에 가변적 인 양의 이동이 필요할 수 있습니다. 그런 다음 가수 추가 결과를 다시 정규화해야 할 수 있으며, 부동 소수점 결과를 올바르게 형식화하기 위해 다른 많은 양의 이동이 필요할 수 있습니다. 따라서 2 개의 가수 배럴 시프터는 잠재적으로 더 많은 게이트 지연, 더 큰 와이어 지연 또는 잘 압축 된 캐리-세이브-애더 트리 멀티 플라이어 프론트 엔드의 지연을 초과하는 추가 사이클을 필요로합니다.

OP에 추가됨 : 2 밀리미터와 2 킬로미터의 길이를 추가해도 두 단위 중 4 개가 아닙니다. 추가하기 전에 하나 또는 다른 측정 값을 동일한 스케일 또는 단위 표시로 변환해야하기 때문입니다. 이 변환은 본질적으로 10의 거듭 제곱에 의한 곱셈을 필요로합니다. 부동 소수점 숫자는 가변적으로 스케일링 된 정수의 형태이기 때문에 일반적으로 부동 소수점 덧셈 동안 발생해야합니다 (예 : 단위 또는 스케일 팩터, 지수, 각 번호). 따라서 원시 가수 비트를 추가하기 전에 같은 단위 또는 스케일을 나타내려면 숫자 중 하나를 2의 거듭 제곱으로 스케일링해야 할 수도 있습니다. 이 스케일링은 본질적으로 2의 거듭 제곱에 의한 단순한 곱셈입니다. 따라서 부동 소수점 더하기에는 곱셈이 필요합니다(2의 거듭 제곱은 가변 비트 시프트 또는 배럴 시프터로 수행 될 수 있으며, 이는 트랜지스터 크기와 관련하여 비교적 긴 와이어를 필요로 할 수 있으며, 깊은 서브 마이크론 리소그래피 회로에서는 비교적 느릴 수있다). 두 숫자가 대부분 취소되는 경우 (하나는 거의 다른 음수이므로) 결과의 크기를 조정하고 결과의 형식을 적절하게 조정해야 할 수도 있습니다. 따라서 숫자 형식 (IEEE 부동 소수점)의 특성으로 인해 동등한 단위 또는 스케일을 나타내는 원시 고정 (유한) 가수 비트의 이진 추가를 둘러싼 2 개의 곱셈 (사전 및 사후) 단계가 더 필요한 경우 더하기가 느려질 수 있습니다. ).

추가 된 # 2 : 또한 많은 벤치 마크에서 FMACS (곱하기 누산)가 베어 추가보다 더 중요합니다. 융합 MAC에서, 첨가물의 정렬 (시프트)은 종종 곱셈과 병행하여 수행 될 수 있고, 가수 추가는 종종 최종 캐리 전파 전에 CSA 트리에 포함될 수있다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 . 도달 한 모든 결론은 질문 및 / 또는 답변으로 다시 편집해야합니다.
Dave Tweed

3
나는 BS를 부르고있다. 분명히 실제 FP 곱셈 연산의 승산 가능성 개의 배럴 시프트보다 어렵게 될 수 없다.
user253751

5
프로젝트 제약과 목표를 감안할 때 잠재적으로 더 빠르며 최적화 할 가치가있는 "더 세게"는 4 가지입니다.
hotpaw2

3
@immibis : Haswell 이전에 Intel CPU는 1 개의 SIMD FP 추가 장치 (3주기 대기 시간)와 1 개의 SIMD FP mul 장치 (5주기 대기 시간)를 가졌습니다. 곱하기보다 더하기가 더 빠릅니다. (이 때문에 Haswell은 SKL처럼 FMA 장치에서 FMA 및 mul에 FMA 장치를 실행하는 대신 2 개의 FMA 장치를 추가 할 때 별도의 FP 추가 장치를 유지했습니다.) 또한 SIMD-int 시프트는 1c 레이턴시로 실행되고 5c 레이턴시에서 SIMD-int mul (FMA 장치의 중요 배수에 피기 백)로 실행됩니다. 예, 교대는 곱하는 것보다 훨씬 저렴합니다. add와 mul은 완전히 파이프 라인되어 있으므로 출력을 정규화하려면 별도의 배럴 시프터가 필요합니다.
Peter Cordes

22

FP 곱셈에서 지수 처리는 단순한 덧셈으로 나타납니다 (로그 도메인에서의 곱셈은 단순히 덧셈과 같은 이유로). 당신은 로그를 보았습니다.

이제 로그 형식으로 두 개의 숫자 를 추가 하는 것이 얼마나 어려운지 고려 하십시오 ...

부동 소수점은 선형과 로그 도메인 사이에 회색 영역이 있으며 양쪽 모두 측면이 있습니다. 각 FP 번호는 가수 (선형) 및 (대수) 지수로 구성됩니다. 가수에서 각 비트의 의미를 결정하려면 먼저 지수 (스케일 팩터) 인 지수를 살펴 봐야합니다.

FP 추가에서, 일반적인 경우의 지수 처리는 배럴이 가수를 두 번 이동시키는 것을 필요로하며, 여기서 각각의 배럴 이동은 사실상 약간 단순화 된 곱셈의 특수한 경우이다.

첫 번째 시프트는 두 입력을 모두 2의 동일한 제곱으로 정렬하므로 가수 비트는 각 피연산자에서 동일한 이진 가중치를 갖습니다.

소수 예제는 충분할 것입니다 (바이너리가 분명히 사용되지만) ...

(3103)+(1101)=(3103)+(0.0001103)

두 번째는 출력을 다시 조정합니다 ...

1100+(0.999100)=0.001100=1103

역설적으로, FP 추가는 두 개의 곱셈과 매우 유사하며, 그 사이에 가수 추가와 함께 순차적으로 수행되어야합니다. 그런 점에서보고 된 성능은 그리 놀라운 일이 아닙니다.


8
"대수 형태로 두 개의 숫자를 더하는 것이 얼마나 어려운지 고려하십시오"는 꽤 깨달았습니다.
피터-모니카

1
운 좋게도 부동 소수점 지수는 정수이므로 1.3 + 2.3 = 2.34와 같은 것을 추가 할 필요는 없으며 가수의 변화 일뿐입니다.
ilkkachu

1
사이클 당 두 번의 곱셈을 수행 할 수있는 이유는 곱하기 단위가 더하기 단위보다 빠르지 않기 때문에 두 개의 곱하기 단위가 있기 때문입니다 (pjc50의 답변 그림 참조). 추가 단위가 곱하기 단위보다 느리다고 생각하는 이유를 설명하여이 질문에 대답 할 수 없습니다. 게다가 다른 답변은 추가 장치가 대기 시간이 짧아서 추가가 더 간단한 작업임을 암시합니다.
user253751

2
@immibis : 귀하의 관찰이 정확합니다. 그러나 문제는 "왜 이런 경우인가? 왜 추가가 mpy보다 훨씬 간단하고 저렴하다는 것을 감안할 때 두 개의 추가 장치가없는 이유는 무엇입니까?" 대답의 일부는 "FP에서는 실제로 더 간단하지 않다"는 것입니다. 나머지는 경제학으로 귀결됩니다. 실제 비용과 예상되는 작업량에 대한 많은 연구를 통해 두 번째 가산기는 그 자리를 정당화하지 못했습니다. 규소. 그 부분을 확장하기 위해 다른 답변을 남겨 두겠습니다.
브라이언 드럼 몬드

일부 컴퓨터 과학자 (예 : Kahan (IEEE754 FP의 아키텍처) 및 Knuth)는 "mantissa"가 선형 (로그가 아닌) 선형 이기 때문에 잘못된 단어라고 주장합니다 . 선호하는 현대 용어는 의미가 있습니다. en.wikipedia.org/wiki/Significand#Use_of_%22mantissa%22 . "mantissa"는 음절 수가 적은 더 시원해 보이는 단어입니다.
Peter Cordes

16

TL : DR : 인텔은 SSE / AVX FP 추가 대기 시간이 처리량보다 중요하다고 생각했기 때문에 Haswell / Broadwell의 FMA 장치에서 실행하지 않기로 결정했습니다.


Haswell Run (SIMD) FP는 FMA ( Fused Multiply-Add ) 와 동일한 실행 단위에서 곱하기 때문에 일부 FP 집약적 코드는 대부분 FMA를 사용하여 명령 당 2 개의 FLOP를 수행 할 수 있기 때문에 2 개가 있습니다. FMA 및 mulps이전 CPU (Sandybridge / IvyBridge) 와 동일한 5주기 대기 시간 . Haswell은 2 개의 FMA 장치를 원 했으며 이전 CPU의 전용 배수 장치와 동일한 대기 시간이기 때문에 배수를 실행할 수 있다는 단점은 없습니다 .

하지만 여전히 실행 이전의 CPU에서 전용 SIMD FP의 추가를 유지하기 addps/ addpd3주기 대기 시간. 가능한 추론은 많은 FP 추가 기능을 수행하는 코드가 처리량이 아닌 지연 시간에 병목 현상을 일으키는 경향이 있다는 것을 읽었습니다. 그것은 종종 GCC 자동 벡터화에서 얻는 것처럼 하나의 (벡터) 누산기가있는 배열의 순전 한 합계에 해당됩니다. 그러나 인텔이 그 추론임을 공개적으로 확인했는지는 모르겠습니다.

브로드 웰은 동일합니다 ( 그러나 가속화 mulps/mulpd FMA는 5C에 머물 동안 3C 대기 시간). 어쩌면 그들은 FMA 장치를 지름길로 만들 수 있었고, 더미 추가를 수행하기 전에 곱셈 결과를 얻었을 0.0수도 있고 , 완전히 다른 것일 수도 있고 너무 단순합니다. BDW는 대부분 HSW의 다이 축소입니다.

Skylake에서 모든 FP (추가 포함)는 div / sqrt 및 비트 부울 (예 : 절대 값 또는 부정)을 제외하고 4주기 대기 시간 및 0.5c 처리량으로 FMA 장치에서 실행됩니다. 인텔은 지연 시간이 짧은 FP 추가를위한 추가 실리콘 가치가 없거나 불균형 한 addps처리량에 문제가 있다고 판단했습니다. 또한 지연 시간을 표준화하면 쓰기 예약 충돌을 피할 수 있습니다 (2 개의 결과가 같은 주기로 준비된 경우). 즉, 스케줄링 및 / 또는 완료 포트를 단순화합니다.

예, 인텔은 다음 주요 마이크로 아키텍처 개정판 (Skylake)에서이를 변경했습니다. FMA 레이턴시를 1 사이클 단축하면 전용 SIMD FP 애드 유닛의 이점이 레이턴시 바운드 인 경우에 비해 훨씬 작습니다.

Skylake는 또한 별도의 SIMD-FP 가산기를 512 비트 폭으로 확장하면 다이 영역이 더 많이 늘어난 AVX512에 대한 인텔의 징후를 보여줍니다. Skylake-X (AVX512 포함)는 더 큰 L2 캐시 및 포트 5에 "볼트 된"추가 512 비트 FMA 장치를 제외하고 일반 Skylake 클라이언트와 거의 동일한 코어를 가지고있는 것으로 알려졌습니다.

SKX는 512 비트 UOP가 비행 중일 때 포트 1 SIMD ALU를 종료하지만 vaddps xmm/ymm/zmm언제든 실행할 수있는 방법이 필요합니다 . 이로 인해 포트 1에 전용 FP ADD 장치를 사용하는 것이 문제가되었으며 기존 코드의 성능을 바꾸는 별도의 동기가되었습니다.

재미있는 사실 : Skylake, KabyLake, Coffee Lake 및 Cascade Lake의 모든 항목은 새로운 AVX512 명령을 추가하는 Cascade Lake를 제외하고 Skylake와 마이크로 아키텍처 적으로 동일합니다. IPC는 달리 변경되지 않았습니다. 최신 CPU는 더 나은 iGPU를 갖습니다. Ice Lake (Sunny Cove 마이크로 아키텍처)는 몇 년 만에 실제로 새로운 마이크로 아키텍처를 본 적이 있습니다 (전 세계적으로 출시되지 않은 캐논 레이크 제외).


FMUL 유닛 대 FADD 유닛의 복잡도에 근거한 인수는 흥미롭지 만이 경우에는 관련 없습니다 . FMA 장치에는 FMA 1의 일부로 FP를 추가하는 데 필요한 모든 변속 하드웨어가 포함되어 있습니다.

참고 : 나는 x87 fmul명령어를 의미하지 않으며 32 비트 단 정밀도 float64 비트 double정밀도 (53 비트 유효 및 일명 가수) 를 지원하는 SSE / AVX SIMD / 스칼라 FP 곱하기 ALU를 의미합니다 . 예를 들어 mulps또는 같은 명령어 mulsd. 실제 80 비트 x87 fmul은 여전히 ​​포트 0의 Haswell에서 1 / 클럭 처리량입니다.

최신 CPU에는 가치가 있거나 물리적 거리 전파 지연 문제를 일으키지 않을 때 문제를 발생시키기에 충분한 트랜지스터가 있습니다. 특히 일부만 활성화 된 실행 단위의 경우. https://en.wikipedia.org/wiki/Dark_silicon 및 2011 년 컨퍼런스 백서 : 다크 실리콘 및 멀티 코어 스케일링 종료를 참조 하십시오 .. 이것은 CPU가 대량의 FPU 처리량과 대량의 정수 처리량을 가질 수 있지만 동시에 두 가지 모두를 수행 할 수는 없습니다 (다른 실행 단위가 동일한 디스패치 포트에 있기 때문에 서로 경쟁하기 때문입니다). mem 대역폭에서 병목 현상이 발생하지 않는 신중하게 조정 된 많은 코드에서, 제한 요소 인 백엔드 실행 단위가 아니라 프런트 엔드 명령 처리량입니다. ( 와이드 코어는 매우 비싸다 ). 참조 http://www.lighterra.com/papers/modernmicroprocessors/ .


Haswell 전에

HSW 이전 에는 Nehalem 및 Sandybridge와 같은 인텔 CPU가 포트 0에서 SIMD FP를 곱하고 포트 1에서 SIMD FP를 추가했습니다. 따라서 별도의 실행 단위가 있었고 처리량이 균형을 이루었습니다. ( https://stackoverflow.com/questions/8389648/how-do-i-achieve-the-theoretical-maximum-of-4-flops-per-cycle

Haswell은 Intel CPU에 FMA 지원을 도입했습니다 (AMD가 Bulldozer에서 FMA4를 도입한지 2 년 후, Intel이 4 오퍼랜드가 아닌 3 오퍼랜드가 아닌 3 오퍼랜드 FMA를 구현할 수 있도록 늦게 기다렸다가 가짜로 가짜를 발표 한 후 2 년) -파괴 목적지 FMA4). 재미있는 사실 : AMD Piledriver 는 여전히 2013 년 6 월 Haswell보다 약 1 년 전에 FMA3를 사용하는 최초의 x86 CPU였습니다.

이를 위해서는 3 개의 입력으로 단일 UOP를 지원하기 위해 내부의 주요 해킹이 필요했습니다. 그러나 어쨌든 인텔은 올인을하면서 끊임없이 축소되는 트랜지스터를 활용하여 256 비트 SIMD FMA 장치를 두 개 배치하여 FP 수학을위한 Haswell (및 그 후속 제품)을 만들었습니다.

인텔이 생각한 성능 목표는 BLAS 고밀도 matmul 및 벡터 도트 제품이었습니다. 이들 모두는 대부분 FMA를 사용할 수 있으며 필요하지 않습니다 추가 할 수 있습니다.

앞에서 언급했듯이 대부분 또는 FP 추가를 수행하는 일부 워크로드는 처리량이 아닌 추가 대기 시간으로 인해 병목 현상이 발생합니다.


각주 1 :의 곱셈을 1.0사용하면 문자 그대로 FMA를 사용할 수 있지만 addps명령어 보다 지연 시간이 더 깁니다 . 이는 잠재적으로 FP 추가 처리량이 지연 시간보다 중요한 L1d 캐시에서 핫 어레이를 합산하는 등의 워크로드에 유용합니다. 이것은 물론 다중 벡터 누산기를 사용하여 대기 시간을 숨기고 FP 실행 단위에서 비행 중 FMA 작업 10 개를 유지하는 경우에만 도움이됩니다 (5c 대기 시간 / 0.5c 처리량 = 10 작업 대기 시간 * 대역폭 제품). 벡터 내적 제품에 FMA를 사용할 때도 그렇게해야합니다 .

NHM, SnB 및 AMD 불도저 제품군의 포트에 어떤 EU가 있는지에 대한 블록 다이어그램이있는 David Kanter의 Sandybridge 마이크로 아키텍처 작성을 참조하십시오 . ( Agner Fog의 명령어 표 및 asm 최적화 마이크로 아치 안내서 및 https://uops.info/참조하십시오. 여기에는 여러 세대의 Intel 마이크로 아키텍처에 대한 거의 모든 명령어의 Uops, 포트 및 대기 시간 / 처리량에 대한 실험 테스트도 있습니다.)

또한 관련 : https://stackoverflow.com/questions/8389648/how-do-i-achieve-the-theoretical-maximum-of-4-flops-per-cycle


1
만일 당신이 내 말을할지에 대해 궁금 : 스택 오버플로에, 나는 금을 포함 배지가 [cpu-architecture], [performance], [x86-64], [assembly],와 [sse]. 손으로 쓴 어셈블리보다 Collatz 추측을 더 빨리 테스트하기 위해 C ++ 코드에 대한 답변을 작성했습니다. 왜 그렇 습니까? 많은 사람들이 좋다고 생각합니다 또한 오픈 오피스에 대한 실행을 파이프 라인.
Peter Cordes

"BDW는 대부분 HSW의 축소 과정이며 대부분의 변경 사항이 적습니다." 재정상의 이유로 인해 처음에 일부 최적화를 의도적으로 취소 한 것처럼 들립니다.
jpaugh

2
@jpaugh : en.wikipedia.org/wiki/Tick%E2%80%93tock_model 참조-2006 년 경 인텔의 계획 (10nm의로드 블록에 도달 할 때까지)은 사소한 다른 변경 사항이있는 새로운 프로세스에서 축소 된 후 새로운 아키텍처였습니다. 이미 테스트 된 프로세스에서 여러 개의 미래 디자인이 비행 중이면서 몇 년 동안 개발이 파이프 라인에 있음을 기억하십시오. Broadwell은 Skylake "tock"이전에 14nm 제조 공정을 최대한 활용했으며 공정 디버깅, 설계 만 걱정할 필요가 없었던 "틱"으로 항상 의도되었습니다
Peter Cordes

나는 링크를 주셔서 감사합니다. 당신은 필자가 할 수있는 것보다 훨씬 더 정밀하지만 본질적으로 내 감정을 반향했습니다.
jpaugh

8

저는이 부분을 살펴볼 것입니다 :
"왜 그들이 "... TL; DR을 허용
할까요?-그렇게 설계했기 때문입니다. 관리 결정입니다. 물론 가수와 비트 시프터에 대한 답변이 있지만 관리 결정에 들어가는 것입니다.

왜 그렇게 설계 했습니까? 그 대답은 사양이 특정 목표를 달성하도록 만들어 졌다는 것입니다. 이러한 목표에는 성능과 비용이 포함됩니다. 성능은 운영을위한 것이 아니라 CLO의 FLOPS 또는 FPS와 같은 벤치 마크입니다.
이 벤치 마크에는 여러 기능이 혼합되어 있으며 일부 기능은 동시에 처리 될 수 있습니다.
설계자가 위젯 A의 두 가지 기능을 갖는 것이 위젯 B의 두 가지 기능보다 훨씬 더 빠르다고 생각하면 위젯 A와 함께 진행됩니다.

상용 칩에서 슈퍼 스칼라 및 슈퍼 파이프 라인 (멀티 코어 이전)이 처음으로 일반화되었을 때를 되돌아 보면 성능이 향상되었습니다. 펜티엄에는 두 개의 파이프가 있으며 벡터 단위는 없습니다. Haswell에는 더 많은 파이프, 벡터 장치, 더 깊은 파이프, 전용 기능 등이 있습니다. 왜 두 가지가 없습니까? 그들이 그렇게 설계했기 때문입니다.


보다 관련성이 높은 성능 목표는 BLAS 고밀도 matmul 및 벡터 내적 제품 일 수 있습니다. 둘 다 대부분 FMA를 사용할 수 있으며 추가 할 필요는 없습니다.
Peter Cordes

제품 상자에서 BLAS 고밀도 matmul 및 벡터 도트 제품을 본 적이 없습니다. 광고에서는 볼 수 없습니다. 제품 리뷰에서 이러한 내용을 볼 수 없습니다. (중요하지만 엔지니어링은 경영진을 따르고, 경영진은 마케팅을 따르고, 마케팅은 판매를 따릅니다. 판매는 일반인이 구매합니다.
MikeP

1
Linpack과 같은 벤치 마크가 포함 된 CPU 리뷰를 보았습니다. 그러나 어쨌든 (이론적 최대) FLOPS는 광고되며, 캐시가 유지 될 수 있다면 기본적으로 matmul 성능을위한 프록시입니다. SPECfp 벤치 마크가 HSW 또는 SKL에서 두 FMA 장치를 모두 포화시키는 지 확실하지 않지만 SPEC 벤치 마크는 매우 중요합니다. 모든 판매가 한 번에 한 소매 판매되는 것은 아닙니다. 일부는 업그레이드시기를 결정하는 슈퍼 컴퓨터 클러스터 구매자 또는 회사 서버 팜과 같은 고급 구매자입니다. 그 판매에서 마진도 더 높다고 생각합니다.
Peter Cordes

6

인텔의이 다이어그램이 도움이 될 수 있습니다.

Haswell 실행 장치 개요

그들은 각 단위에 FMA (fused multiply-add)뿐만 아니라 곱하기와 하나의 가산기를 부여한 것으로 보입니다. 하드웨어를 공유하거나 공유하지 않을 수 있습니다.

내부 설계 근거없이 대답하기가 더 어려운지에 대한 질문이 있지만 자주색 상자의 텍스트는 "이중 피크 FLOP"에 대한 힌트를 제공합니다. 프로세서는 실제 사용 사례에서 파생 된 일련의 벤치 마크를 대상으로합니다. FMA는 행렬 곱셈의 기본 단위이기 때문에 매우 인기가 있습니다. 베어 추가는 덜 인기가 있습니다.

지적한 바와 같이 곱셈 매개 변수가 1 인 컴퓨팅 (A x 1) + B 인 FMA 명령어를 사용하여 두 포트를 모두 사용하여 덧셈을 수행 할 수 있습니다. 이는 덧셈보다 약간 느립니다.


FP Multiply는 FMA 장치에서 실행됩니다. FP add는 포트 1의 전용 SIMD FP add 장치에서만 대기 시간이 짧습니다. 해당 포트의 FMA 장치와 일부 트랜지스터를 공유 할 수는 있지만 읽은 내용에서이를 제공하는 데 상당한 추가 영역이 필요하다는 인상을 받았습니다.
Peter Cordes

자세한 내용과 함께 답변 을 게시 했습니다 .
Peter Cordes

4

시간이 걸리는 단계를 살펴 보겠습니다.

추가 : 지수를 정렬하십시오 (대규모 시프트 작업 일 수 있음). 53 비트 가산기 1 개 정규화 (최대 53 비트)

곱셈 : 53 x 53 1 비트 제품을 2 개의 106 비트 수의 합계로 줄이는 하나의 대규모 가산기 네트워크. 하나의 106 비트 가산기. 표준화. 비트 제품을 두 숫자로 줄이는 것이 최종 가산기만큼 빠를 수 있다고 말합니다.

곱셈을 가변 시간으로 할 수 있다면 정규화는 대부분 1 비트 만 이동한다는 장점이 있으며 다른 경우를 매우 빠르게 감지 할 수 있습니다 (비정규 화 된 입력 또는 지수의 합이 너무 작음).

또한 정규화 단계가 필요합니다 (크기가 같지 않은 숫자를 더하고 가까운 숫자를 빼는 경우). 곱셈을 위해서는 빠른 길을 가고 여유로운 길을 가야합니다. 또한 당신은 할 수 없습니다.

추신. 주석 읽기 : 비정규 화 된 숫자를 추가해도 페널티가 발생하지 않는다는 것은 의미가 있습니다. 지수를 정렬하기 위해 이동 된 비트 중 많은 수는 0입니다. 그리고 정규화되지 않은 결과는 지수가 너무 작 으면 선행 0을 제거하기 위해 이동을 중단한다는 것을 의미합니다.


인텔 CPU는 실제로 마이크로 코드 지원을 통해 비정규 곱하기 (입력 또는 출력)를 처리합니다. 즉, 일반 FPU는이 경우에 추가 파이프 라인 단계를 갖지 않고 예외 신호를 보냅니다. Agner Fog는 re : Sandybridge를 말합니다 . 내 테스트에서 언더 플로 및 비정규 수의 경우는 더하기 위해 일반 부동 소수점 수만큼 빠르게 처리되었지만 곱셈에는 적용되지 않았습니다. -ffast-mathFT 어시스트 대신 FTZ / DAZ (비정상 플러시를 0으로 설정)를 사용하여 컴파일하면 컴파일됩니다 .
Peter Cordes

아그 너 (Agner)의 마이크로 아치 안내서 에서 정상 입력 작업이 비정상 출력을 생성 할 때는 항상 페널티 가 있다고 말했다 . 그러나 normal + subnormal을 추가해도 페널티가 없습니다. 요약 검토가 정확하지 않거나 uarch 안내서가 정확하지 않을 수 있습니다. Agner는 Knight 's Landing (Xeon Phi)은 mul / add에 대한 subnormals에 대해 페널티가없고 단지 나눗셈이라고 말한다. 그러나 KNL은 주류 Haswell (5c) / SKL (4c)보다 대기 시간이 긴 add / mul / FMA (6c)가 높습니다. 흥미롭게도 AMD Ryzen은 불도저 가족에게 큰 벌금을 부과하는 것과 비교하여 몇 사이클의 벌금을 부과합니다.
Peter Cordes

대조적으로 GPU는 대기 시간이 아니라 처리량에 관한 것이므로 일반적으로 비정상 이하의 경우에도 모든 경우에 대해 고정 대기 시간을 갖습니다. 마이크로 코드로 트래핑하는 것은 아마도 그런 파이프 라인을위한 옵션이 아닐 수도 있습니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.