문제

X87의 내부 정밀도가 높아서 사람들이 IT와 SSE 운영 사이에서 볼 수있는 가장 큰 차이 일 것입니다. 그러나 x87을 사용하는 데 다른 이점이 있습니까? 타이핑의 습관이 있습니다 -mfpmath=sse 모든 프로젝트에서 자동으로, X87 FPU가 제공하는 다른 것이 누락되었는지 궁금합니다.

도움이 되었습니까?

해결책

손으로 쓴 ASM의 경우 X87에는 SSE 명령 세트에 존재하지 않는 몇 가지 지침이 있습니다.

내 머리 꼭대기에서 FSIN, FCOS, FATAN, FATAN2 및 일부 지수/로그와 같은 삼각법입니다.

와 함께 gcc -O3 -ffast-math -mfpmath=387, GCC9 ~ 할 것이다 실제로 인라인 sin(x) 로서 fsin LIBM의 구현이 무엇을 사용했는지에 관계없이 교육은 지침. (https://godbolt.org/z/euc5gp).

MSVC 호출 __libm_sse2_sin_precise 32 비트 x86을 컴파일 할 때.


코드가 삼각법을 수행하는 데 대부분의 시간을 소비하는 경우 SSE1/SSE2를 사용한 표준 수학 라이브러리 구현이 느린 마이크로 코드보다 빠르거나 느리게하는지 여부에 따라 x87을 사용하는 경우 약간의 성능 게인 또는 손실이 표시 될 수 있습니다. fsin 사용하는 CPU에서.

CPU 공급 업체는 일반적으로 쓸모없고 거의 사용되지 않는 것으로 간주되기 때문에 최신 세대의 CPU에서 X87 지침에 대한 마이크로 코드를 최적화하는 데 많은 노력을 기울이지 않습니다. (복잡한 x87 지침에 대한 UOP 카운트 및 처리량을 살펴보십시오. Agner Fog의 지침 테이블 최근 세대의 CPU : 구형 CPU보다 더 많은 사이클). CPU가 최신 일수록 로그, Exp, POW 또는 트리그 함수를 계산하기 위해 많은 SSE 또는 AVX 지침보다 X87이 느려질 가능성이 높습니다.

X87을 사용할 수있는 경우에도 모든 수학 라이브러리가 복잡한 지침을 사용하기로 선택한 것은 아닙니다. fsin 같은 기능을 구현합니다 sin(), 또는 특히 로그 기반 FP 비트 패턴을 조작하기위한 정수 트릭이 유용한 Exp/Log가 유용합니다.

일부 DSP 알고리즘은 많은 트리그를 사용하지만 일반적으로 많은 SIMD 수학 라이브러리와의 자동 벡터화에서.

그러나 대부분의 시간을 추가, 곱셈 등을하는 수학 코드의 경우 SSE는 일반적으로 더 빠릅니다.


또한 관련 : 인텔은 오류 경계를 1.3 Quintillion으로 과소 평가합니다 - 최악의 경우 fsin (치명적인 취소 fsin 매우 가까운 입력 pi)는 매우 나쁩니다. 소프트웨어는 더 잘 작동 할 수 있지만 느리게 확장 된 확장 기술로만 수행 할 수 있습니다.

다른 팁

  1. 정말 오래된 기계에 있습니다.

EOF

FPU 지침은 SSE 지침보다 작으므로 데모 스킨에 이상적입니다.

  • X87 : SSE에는 상당한 레거시 및 소규모 시스템 호환성이 있습니다. SSE는 비교적 새로운 프로세서 기능입니다. 코드가 임베디드 마이크로 컨트롤러에서 실행되는 경우 SSE 지침을 지원하지 않을 가능성이 높습니다.

  • FPU가 설치되지 않은 시스템조차도 종종 80x87 에뮬레이터를 제공하여 코드를 투명하게 (또는 그 이상) 실행할 수 있습니다. SSE 에뮬레이터는 모릅니다. 특히 내 시스템 중 하나가 없으므로 최신 Adobe Photoshop Elements 버전은 실행을 거부합니다.

  • 80x87 지침에는 1982 년에 도입 된 이후 철저히 탐색 및 분석 된 평행 조작 특성이 우수합니다. X86의 다양한 클론이 SSE 지침에 중단 될 수 있습니다.

사이의 전환 float 그리고 double SSE보다 X87 (일반적으로 무료)에서 더 빠릅니다. x87을 사용하면 a를로드하고 저장할 수 있습니다 float, double 또는 long double 레지스터 스택으로 또는 여분의 비용없이 연장 정밀도로 전환됩니다. SSE를 사용하면 레지스터에 포함되므로 유형이 혼합 된 경우 유형 변환을 수행하려면 추가 지침이 필요합니다. float 또는 double 가치. 이러한 전환 지침은 상당히 빠르지 만 시간이 더 걸립니다.

실제 해결책은 혼합을 자제하는 것입니다 float 그리고 double 물론 X87을 사용하지 않아도됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top