Wpis z mikrobloga

@Kryspin013: nie, nie zmniejsza bezpieczeństwa systemu, może nawet minimalnie zwiększyć (tak skompilowane programy dalece trudniej się debuguje, trudniejsze są też niektóre typy ataków — przy czym różnica nie musi zajść, a jeśli już zajdzie, to będzie pomijalna). Może mieć to sens, ale nie musi, gdyż wcale nie jest pewne, że te optymalizacje faktycznie coś przyspieszą (np. -funroll-loops omija instrukcje skoku, ale tworzy dalece dłuższy kod, który może np. przestać mieścić
  • Odpowiedz
@interface:

ma to jakiś sens z punktu widzenia bezpieczeństwa?

Raczej nie. Umiem sobie wyobrazić jakiś skrajny przypadek, żeby miało, ale wątpię w to, by zachodził kiedykolwiek w praktyce.

wiem, że w grach to ma znaczenie, im wyższa flaga tym bardziej monotonne/rozmyte kolory.

Eeeee, co? Nie… To nie ma z drugim nic wspólnego…
  • Odpowiedz
@Althorion: Dzięki za odpowiedź. Buduję system z apt-build world bo zależy mi chociaż minimalnie na zwiększeniu wydajności na netbooku z atomem. Na razie buduje na -03 -march=native. Zobaczymy co z tego wyjdzie, najwyżej przebuduję z -o2.

@interface:

wiem, że w grach to ma znaczenie, im wyższa flaga tym bardziej monotonne/rozmyte kolory.


Że co? xD
  • Odpowiedz
@Kryspin013: -O3 to jeszcze bezpieczna flaga (tzn. jedyna sytuacja, w której program z nią skompilowany może zacząć działać niepoprawnie, zachodzi wtedy, gdy jest napisany niezgodnie ze standardem — w szczególności gdy polega na konkretnym rozwiązaniu UB). Włącza ona natomiast optymalizacje przyspieszające wykonanie kosztem większej ilości generowanego kodu, co może paradoksalnie spowolnić działanie programu, bo wymaga większej liczby operacji na pamięci. Dlatego nie sposób z góry orzec, czy faktycznie da to
  • Odpowiedz
@Althorion: Wiem, chciałem zbudować przez aptu-build repo na innym pc, które bym sobie wrzucił na netbooka po prostu ale apt-build ma tylko opcję budowy z instalacją i nie wiem jak to pominąć. Swoją drogą to narzędzie nie wydaje się też jakoś działać szczególnie dobrze.
  • Odpowiedz
Że co? xD


@Kryspin013: oczywiście, to był jeden z głównych powodów powstania tych flag. Kolory/barwy i ruchy są reprezentowane w float/double. Podniesienie flagi optymalizacji ucina mantysę liczb zmiennoprzecinkowych przez to ruchy stają się bardziej liniowe, barwy się monotonizują.
  • Odpowiedz
@Kryspin013: tak, szukam właśnie, czytałem o tym pare lat temu jak ktoś pokazywał że zmiana optymalizacji flagi z O1 na O3 zmieniła kolory w grze na tyle że różnica była widoczna okiem.
  • Odpowiedz
Kolory/barwy i ruchy są reprezentowane w float/double. Podniesienie flagi optymalizacji ucina mantysę liczb zmiennoprzecinkowych przez to ruchy stają się bardziej liniowe, barwy się monotonizują.


@interface: nawet nie wiem, gdzie zacząć…
1. Kolory bardzo rzadko są trzymane w liczbach zmiennoprzecinkowych, niemal zawsze to trójka charów/intów prezentująca rozkład RGB.
2. Podniesienie flagi optymalizacji nie wpływa na realizację operacji zmiennoprzecinkowych aż do -Ofast, które włącza -ffast-math.
3. Nawet -ffast-math nie wpływa na typ zmiennych zmiennoprzecinkowych, więc w
  • Odpowiedz
@interface: nie no, jak się dziwnie programuje i wykorzystuje undefined behaviour, to różne rzeczy mogą się dziać. Z tym, że każdy poprawnie napisany (tzn. zgodnie ze standardem) kod musi mieć takie same efekty kompilowany na -O1 jak i na -O3 (i na -O0, i na -O2, i na…). Więc jeśli tak było, to wina konkretnego kodu, a nie ogólna zasada działania kompilatora.
  • Odpowiedz
@Althorion: @Kryspin013: o znalazłem to, to był jakiś bug w gcc :> http://blog.jwhitham.org/2015/04/gcc-bug-323-journey-to-heart-of.html tutaj kluczowy cytat

At this point, the two numbers are equivalent when converted to the "float" type. But that equivalence is not maintained when backlerp is used in a calculation. The small difference is propagated, and becomes significant enough to produce a different result:

optimised cl.vieworg[0] = -18.1849995
  • Odpowiedz
@Althorion: @Kryspin013: kurde to nie ten artykuł... tamten o którym mówię miał z 10lat co najmniej, opisywał w sumie to samo. Pokazywał screenshota z lotu pocisku że na O3 ślad pocisku był bardziej prosty, a na 01 był wznoszący i opadający ślad (
  • Odpowiedz
1. Kolory bardzo rzadko są trzymane w liczbach zmiennoprzecinkowych, niemal zawsze to trójka charów/intów prezentująca rozkład RGB.


@Althorion: to prawda, ale potem te kolory trzeba jakoś przetwarzać w grach - OGL przyjmuje do shaderów w sensie dalszych przekształceń m.in.floaty, pochodzenie szybkiej odwrotności pierwiastka też sugeruje, że zmienny przecinek w grach jest często wykorzystywany.

Fakt faktem że to pewnie była kwestia jakości kodu w aplikacji o której @interface wspomina w
  • Odpowiedz