-
Data: 2022-07-19 22:37:26
Temat: Re: Rynek pracy STM32
Od: heby <h...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 19/07/2022 22:15, Grzegorz Niemirowski wrote:
>> Jesli kompilator wyoptymzliował Ci tą zmienną, a nie powinien, to masz
>> buga w kodzie, który załatałeś nieprawidłowym volatile.
> Co to znaczy, że nie powinien?
Janusz Twierdzi, że kompilator zredukował mu kod do zera, który robił
coś z jakąs zmienną.
Odrzucając hipoteze o bugu w kompilatorze:
Jedynym powodem, że jakiś kod korzystajacy ze zmiennej został
wyoptymalizowana do zera, to że kompilator w kodzie nie zakładał zmian
tej zmiennej w zewnątrznych funkcjach, lub mógł je wyliczyć statycznie
widąc cały kod.
Skoro tak, to miał prawo zoptymalizować ten kod do zera.
Janusz narzeka że tak sie stało.
Wnioskuje więc że:
1) to nie była zmienna a register - tutaj nalezy użyć volatile
2) to była zmienna modyfikowana w innym wątku albo przerwaniu - wtedy
volatile można uzyć tylko, jesli procesor nie wspiera barier. Nawet
mikrokontrolerowe ARMy miewają bariery.
https://developer.arm.com/documentation/den0024/a/Th
e-A64-instruction-set/Memory-access-instructions/Mem
ory-barrier-and-fence-instructions
> Jakie to jest nieprawidłowe volatile?
Użyte w sytuacji, kiedy tak naprawdę chcesz barierę. Bariera mówi
kompilatorowo: uwaga, ta zmienna może zostać zmodyfikowana przez inny,
nieznany czynnik, w tym miejscu nie wolno jej przechować ani zakładać że
ma jakaś starą wartość po przejściu bariery.
> Janusz podał 3 poprawne przykłady użycia volatile.
Zaznaczenie "volatile" na zmiennej powoduje, że kompialator wyłączy
cacheowanie jej wartości, co uniemożliwi optymalizację kodu.
Tymczasem prawie na pewno w algorytmie jest bug, albo wcale nie chodziło
o wyłaczenie optymalizacji, tylko o poinformowanie kompilatora, że
zmienna może być zmodyfikowana poza tym kodem. Od tego są bariery.
Dla procesorów posiadajacychc cache, baeriery są *JEDYNYM* sposobem
zapewnienia synchronizacji stanu zmiennych między watkami. Na niektórych
złośliwych architekturach możliwe jest, że mimo volatile, zmiana
zmiennej w wątku A nigdy nie będzie widoczna w wątku B bez użycia
bariery. Na innych może się zdażyć, że zapis z jednego watku w
kolejności A a potem B, bedzie widziany w innym wątku jako zapis B a
potem A. Tutaj znowu, volatile nic nie pomoże - od tego są bariery.
Ponieważ Janusz nie przedstawił spornego kawałka kodu - nie wiadomo
dlaczego kompilator usunął mu ten kod. Wiec można sobie na sucho
pogdybać w jakich okolicznościach może i dlaczego volatile nie jest od
tego, do czego go źle używają prawie wszyscy.
https://en.wikipedia.org/wiki/Memory_barrier
[...] The keyword volatile does not guarantee a memory barrier to
enforce cache-consistency. Therefore, the use of volatile alone is not
sufficient to use a variable for inter-thread communication on all
systems and processors.[...]
PS. To nie aby ja podałem 3 przykłady, w tym dwa błedne ;) ?
Następne wpisy z tego wątku
- 19.07.22 22:47 Janusz
- 19.07.22 22:47 Janusz
- 19.07.22 22:48 Janusz
- 19.07.22 22:51 Janusz
- 19.07.22 22:56 heby
- 19.07.22 22:58 heby
- 19.07.22 22:59 heby
- 19.07.22 23:03 Grzegorz Niemirowski
- 20.07.22 04:27 a...@m...uni.wroc.pl
- 20.07.22 05:18 Rutkowski, Jacek
- 20.07.22 09:51 Janusz
- 20.07.22 09:55 Janusz
- 20.07.22 09:57 Janusz
- 20.07.22 10:08 Dawid Rutkowski
- 20.07.22 10:20 heby
Najnowsze wątki z tej grupy
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
Najnowsze wątki
- 2025-05-15 Nowy rodzaj zagrożenie ze strony elektryków :)
- 2025-05-15 Bus inpostu, przemycający ludzi, walnął w nocy w tira zaparkowanego na autostradzie 5 ofiar
- 2025-05-15 Alert RCB w sprawie dziewczynki
- 2025-05-15 Kurierski bus przemycał ludzi i zasnął nad ranem za kierownicą.
- 2025-05-15 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-05-14 Tsue i smsy
- 2025-05-14 Biedna kobieta jechała samochodem na targ aby sprzedać klamoty i dostała 300 zł mandatu
- 2025-05-14 hot spot traci connected device
- 2025-05-14 John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- 2025-05-14 John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- 2025-05-14 Wariant rumuński
- 2025-05-14 Rolnicy protestują w Szczecinie
- 2025-05-14 Rolnicy protestują w Szczecinie
- 2025-05-14 Rolnicy protestują w Szczecinie
- 2025-05-14 Niemcy: Przychody ze sprzedaży produktów Fairtrade w 2024r. wzrosły o rekordowe 13% do 2,9GEUR