-
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
- Pęczniejące LiPo
- wyłącznik ścienny
- "Wybitna" inteligencja AI
- test stereo
- Bluetooth stereo
- W USA budują pierwszą komercyjną elektrownię fuzji jądrowej
- Weryfikacja myjki ultradźwiękowej
- zasieg radaru
- Zmywarka Bosch SRV55T43EU - awaria
- Kod zniżkowy w TME do 26.09.2025
- SFP, 10G, simplex sc/apc
- [słabe wiatry powodują - przyp. JMJ] Energetyczny paraliż w Niemczech
- NxtPaper
- Programiści nie przestają zadziwiać świat
- Długi kabel zasilający a na końcu procek
Najnowsze wątki
- 2025-09-25 Pęczniejące LiPo
- 2025-09-25 wyłącznik ścienny
- 2025-09-25 Cenckiewicz ma czy nie ma poświadczenia bezpieczeństwa? [SKW cofnęła, WSA uchylił cofnięcie, NSA się ma wypowiedzieć]
- 2025-09-25 iKO
- 2025-09-25 jęczy wspomaganie
- 2025-09-24 "Wybitna" inteligencja AI
- 2025-09-24 test stereo
- 2025-09-24 Bluetooth stereo
- 2025-09-24 Rzeszów => International Freight Forwarder <=
- 2025-09-24 Gdańsk => Delphi Programmer <=
- 2025-09-24 Warszawa => BI Developer / Analityk BI <=
- 2025-09-24 Alior zmiana logowania
- 2025-09-24 Warszawa => Senior Microsoft Dynamics 365 Business Central Consultant
- 2025-09-24 Andżelika Borys odwiedziła [WIELKIEGO PATRIOTĘ - przyp. JMJ] Andrzeja Poczobuta w [białoruskiej - przyp. JMJ] kolonii karnej
- 2025-09-24 W USA budują pierwszą komercyjną elektrownię fuzji jądrowej