eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaRynek pracy STM32Re: Rynek pracy STM32
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erj
    e.net!feeder.erje.net!feeds.phibee-telecom.net!news.mixmin.net!eternal-septembe
    r.org!reader01.eternal-september.org!.POSTED!not-for-mail
    From: heby <h...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Rynek pracy STM32
    Date: Tue, 19 Jul 2022 22:37:26 +0200
    Organization: A noiseless patient Spider
    Lines: 64
    Message-ID: <tb74m7$16k1b$1@dont-email.me>
    References: <b...@h...invalid>
    <tb43lu$1ls$1$PiotrGalka@news.chmurka.net> <tb44nf$fm11$1@dont-email.me>
    <tb4abv$5ml$1$PiotrGalka@news.chmurka.net> <tb4e3k$i1rd$1@dont-email.me>
    <tb4epm$88p$1$PiotrGalka@news.chmurka.net> <tb4ffr$icc3$1@dont-email.me>
    <tb4hhs$9qd$1$PiotrGalka@news.chmurka.net> <tb4iek$j5sm$1@dont-email.me>
    <tb4irf$ahm$1$PiotrGalka@news.chmurka.net> <tb4jc1$jcbf$2@dont-email.me>
    <tb63t5$ajv$1$PiotrGalka@news.chmurka.net> <tb650r$12ec9$1@dont-email.me>
    <tb69h8$edq$1$PiotrGalka@news.chmurka.net> <tb6a9r$13mqc$1@dont-email.me>
    <tb6cd5$g3f$1$PiotrGalka@news.chmurka.net> <tb6d2u$143ic$1@dont-email.me>
    <tb6llt$lti$1$PiotrGalka@news.chmurka.net> <tb6mpq$1564q$1@dont-email.me>
    <tb6o7a$ngq$1$Janusz@news.chmurka.net> <tb6ofk$15ag0$3@dont-email.me>
    <tb6u08$r17$3$Janusz@news.chmurka.net> <tb6uuu$161mj$1@dont-email.me>
    <tb705t$sbc$2$Janusz@news.chmurka.net> <tb72qn$16ds0$2@dont-email.me>
    <62d710e1$0$562$65785112@news.neostrada.pl>
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Tue, 19 Jul 2022 20:37:27 -0000 (UTC)
    Injection-Info: reader01.eternal-september.org;
    posting-host="cb0f2a898241a13f7214c9fa7e9a291c";
    logging-data="1265707";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX18KgoDlgRLcqlWnSwbJDHH6"
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
    Thunderbird/91.11.0
    Cancel-Lock: sha1:IC0hgtbDfOHuzRlmAHyc7HEfu4o=
    Content-Language: en-US
    In-Reply-To: <62d710e1$0$562$65785112@news.neostrada.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:773293
    [ ukryj 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 ;) ?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: