Autor Wątek: Float a utrata precyzji / różne wyniki na różnych CPU.  (Przeczytany 2299 razy)

Offline komorra

  • Użytkownik
    • Blog naszego teamu (o grze Voxelfield)

# Kwiecień 11, 2016, 15:28:07
Czy jest możliwa sytuacja, w której na różnych CPU (różne ARM, różne Intel, różne AMD) ten sam kod, wykonujący złożone operacje matematyczne, da różne wyniki końcowe? (zakładając że pracujemy tym samym kodem C++ nad tymi samymi danymi wejściowymi i kod jest zaprojektowany aby dawał wynik deterministycznie).

Chodzi mi o to czy różni producenci urządzeń, implementując operacje na liczbach zmiennoprzecinkowych (np. float) robią to w minimalnie inny sposób, który doprowadza do sytuacji, że końcowy wynik w sytuacji opisanej wyżej będzie się różnił nieznacznie na różnych CPU. Czy jest taka możliwość?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline albireo

  • Użytkownik

# Kwiecień 11, 2016, 15:51:53
W zasadzie to mogą wystąpić różnice nawet na tym samym procesorze w zależności od kompilatora, flag kompilacji, czy ustawień zaokrąglania na CPU.

Offline komorra

  • Użytkownik
    • Blog naszego teamu (o grze Voxelfield)

# Kwiecień 11, 2016, 16:04:23
Ok, miałem na myśli raczej tan sam kod, ale już skompilowany, ewentualnie zakładając że flagi kompilacji były te same. Generalnie chodzi mi o to czy rozbieżności mogą być spoowodowane hardware-owo.


Offline Xion

  • Redaktor
    • xion.log

# Kwiecień 12, 2016, 00:48:29
TL;DR powyższego artykułu: tak, wyniki mogą się różnić między procesorami. Podany jest tam chociażby przykład funkcji trygonometrycznych których wyniki różniły się między różnymi wersjami CPU Intela i AMD.

Offline komorra

  • Użytkownik
    • Blog naszego teamu (o grze Voxelfield)

# Kwiecień 12, 2016, 11:13:20
Czyli dla funkcji trygonometrycznych nie ma gwarancji deterministyczności per CPU? A co z mnożeniem i dodawaniem - ono chyba jest gwarantowane przez IEEE by odbywało się w pełni deterministycznie.

W związku z tym mam jeszcze jedno pytanie. Załóżmy że kompiluję kod dla ARM z poziomu VC++. Czy tutaj pomoże ustawienie flag /fp:precise w zwiększeniu deterministyczności/zagwarantowaniu jej? Czy są jeszcze jakieś inne flagi mające wpływ na ten proces?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 12, 2016, 11:16:44
Może trochę kontekstu? Co kodujesz konkretnie? :) Bo jeśli to zastosowania gamedevove, to polecal bym po prostu fixed point na intach i tyle. :)

Offline koirat

  • Użytkownik

# Kwiecień 12, 2016, 17:36:30
Albo client server, bo zakładam że o multiplayer tu chodzi.