2009-12-04 22 views
20

Wiem, że x87 ma wyższą wewnętrzną precyzję, która jest prawdopodobnie największą różnicą, jaką ludzie widzą między nią a operacjami SSE. Ale muszę się zastanowić, czy jest jakaś inna korzyść z używania x87? Mam nawyk wpisywania -mfpmath=sse automatycznie w każdym projekcie i zastanawiam się, czy brakuje mi czegoś innego, co oferuje FP7 x87.Korzyści z x87 przez SSE

Odpowiedz

14

x87 ma pewne instrukcje, które nie istnieją w zestawie instrukcji SSE.

Z głowy to wszystko trygonometryczne rzeczy, takie jak fsin, fcos, fatan, fatan2 i niektóre elementy wykładnicze/logarytmiczne.

Jeśli twój kod spędza większość czasu na trygonometrii, możesz zauważyć lekkie zwiększenie wydajności, jeśli używasz x87. Niektóre algorytmy DSP należą do tej kategorii.

Jednak w przypadku kodu matematycznego, w którym spędzasz większość czasu, robiąc dodatki, multiplikacje itp. SSE jest zwykle szybsze.

+0

@LiraNuna naprawdę? Nie jestem świadomy żadnego opcode'a, który bezpośrednio oblicza grzech lub cos z zestawu instrukcji SSE. –

+5

Podaj źródło, Quonux. – asdf

+0

http://gruntthepeon.free.fr/ssemath/ – MickLH

16
  1. Jest obecny na naprawdę starych maszynach.

EOF

4
  • Istnieje znaczne dziedzictwo i mała kompatybilność systemu z x87: SSE to stosunkowo nowa funkcja procesora. Jeśli twój kod ma działać na wbudowanym mikrokontrolerze, istnieje spora szansa, że ​​nie będzie obsługiwał instrukcji SSE.

  • Nawet systemy, które nie mają zainstalowanej jednostki FPU, często będą zapewniały emulatory 80x87, co spowoduje, że kod będzie działać w sposób przezroczysty (mniej więcej). Nie znam żadnych emulatorów SSE - na pewno jeden z moich systemów nie ma żadnych, więc najnowsze wersje elementów Adobe Photoshop nie działają.

  • Instrukcje 80x87 mają dobre cechy działania równoległego, które zostały dokładnie zbadane i przeanalizowane od czasu ich wprowadzenia w 1982 roku. Różne klony x86 mogą blokować instrukcje SSE.

+2

Twój wynik jest następujący: (a) x87 ma dobrą starszą obsługę (b) x87 został dobrze przebadany. –

+0

I (c) ustalono x87. – asdf

+0

Nie jestem w 100% pozytywny, ale wierzę, że na wielu 32-bitowych procesorach bez FPU, matematyka zmiennoprzecinkowa mogłaby być wykonana szybciej na wartościach 80-bitowych niż wartości 64-bitowe [a 53-bitowa mantysa i 12 -bit wykładnik nie jest szybszy do pracy niż 64-bitowy mantysa i 16-bitowy wykładnik, ale wymaga dodatkowego czasu na spakowanie i rozpakowanie].Zastanawiam się, dlaczego format 80-bitowy przez ostatnie kilka dekad nie dawał sobie spokoju, ponieważ jako format * computation * wydaje się lepszy pod każdym względem niż 64-bitowe podwójne. – supercat

7

instrukcje FPU są mniejsze niż instrukcji SSE, dzięki czemu są idealne do demoscenowych rzeczy

+0

Nie kupuję tego; z pewnością poważni programiści sceny demo kompresują swoje strumienie instrukcji; specyficzne dla domeny narzędzia kompresujące powinny być w stanie kompresować instrukcje SSE tak samo dobrze jak instrukcje x87. –

+0

@StephenCanon (nieskompresowany), ale twój punkt jest właściwy, jeśli używasz jakiejkolwiek kompresji – Quonux

0

Konwersja między float i double jest szybciej x87 (zwykle za darmo) niż z SSE. W przypadku x87 można załadować i zapisać do stosu rejestrów lub z niego jeden zestaw, a następnie można go przekonwertować do lub z rozszerzonej precyzji bez dodatkowych kosztów. W przypadku SSE wymagane są dodatkowe instrukcje, aby wykonać konwersję typu, jeśli typy są mieszane, ponieważ rejestry zawierają wartości float lub . Te instrukcje konwersji są dość szybkie, ale zajmują więcej czasu.

Prawdziwą poprawką jest powstrzymanie się od nadmiernego mieszania float i , aby nie używać x87, oczywiście.