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
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.
- Jest obecny na naprawdę starych maszynach.
EOF
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.
Twój wynik jest następujący: (a) x87 ma dobrą starszą obsługę (b) x87 został dobrze przebadany. –
I (c) ustalono x87. – asdf
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
instrukcje FPU są mniejsze niż instrukcji SSE, dzięki czemu są idealne do demoscenowych rzeczy
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. –
@StephenCanon (nieskompresowany), ale twój punkt jest właściwy, jeśli używasz jakiejkolwiek kompresji – Quonux
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.
@LiraNuna naprawdę? Nie jestem świadomy żadnego opcode'a, który bezpośrednio oblicza grzech lub cos z zestawu instrukcji SSE. –
Podaj źródło, Quonux. – asdf
http://gruntthepeon.free.fr/ssemath/ – MickLH