eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAtomowość operacji vs wieloprocesorowość › Re: Atomowość operacji vs wieloprocesorowość
  • X-Received: by 10.140.87.70 with SMTP id q64mr215270qgd.10.1428996089565; Tue, 14 Apr
    2015 00:21:29 -0700 (PDT)
    X-Received: by 10.140.87.70 with SMTP id q64mr215270qgd.10.1428996089565; Tue, 14 Apr
    2015 00:21:29 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!
    m20no3337962iga.0!news-out.google.com!k20ni156qgd.0!nntp.google.com!z60no136211
    2qgd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 14 Apr 2015 00:21:29 -0700 (PDT)
    In-Reply-To: <a...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=178.36.94.29;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 178.36.94.29
    References: <1...@n...fucking.idea>
    <5...@g...com>
    <a...@g...com>
    <0...@g...com>
    <f...@g...com>
    <5...@g...com>
    <6...@g...com>
    <a...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <5...@g...com>
    Subject: Re: Atomowość operacji vs wieloprocesorowość
    From: "M.M." <m...@g...com>
    Injection-Date: Tue, 14 Apr 2015 07:21:29 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:207810
    [ ukryj nagłówki ]

    On Monday, April 13, 2015 at 8:27:29 PM UTC+2, Wojciech Muła wrote:
    > On Thursday, April 9, 2015 at 6:45:16 PM UTC+2, M.M. wrote:
    > > > Ale to jest już inny przypadek.
    > > Ściśle inny, generalnie ten sam - wątek jakoś zmodyfikował zawartość
    > > zmiennej, a programista nie jest pewny:
    > > 1) czy zmodyfikowana zmienna jest widoczna dla innych wątków,
    >
    > No to do tego jest bariera pamięci.
    >
    > > 2) czy inny wątek może zobaczyć zmienną zmodyfikowana 'w połowie'.
    >
    > A od tego mamy gwarancje spójności od producenta. :)
    >
    > > > Dodawanie, odejmowanie i operacje
    > > > bitowe też mogą być atomowe na x86, ale dla pozostałych rzeczywiście
    > > > trzeba mieć jakąś formę sekcji krytycznej.
    > > Ok, ale w praktyce używamy języków wysokiego poziomu. Piszę np.
    > > a = b;
    > > a kompilator wywnioskował że b będzie równe zero i zrobi:
    > > a ^= a;
    > > Na jakimś procesorze xor może nie być już atomowe.
    >
    > Oczywiście, o to trzeba zadbać. C++11 ma std::atomic, które daje ładne
    > API do atomiców, barier itp., natomiast kompilator ma wiedzę, którą
    > jest w stanie wykorzystać. Nie wiem, jak to wygląda w innych językach
    > imperatywnych (Ada, C#).
    >
    > > > Sekcje krytyczne, w sensie mutexy, czy semafory, jako obiekty systemowe
    > > > są wolne, a nawet bardzo wolne. Dlatego tam gdzie liczy się wydajność
    > > > pojawiają się algorytmy lockfree, czyli nie ma jako takiej blokady na
    > > > sekwencję instrukcji, ale np. próbuje się do skutku wykonać jakąś
    > > > operację, powiedzmy dopisania do kolejki. I tu już można to robić
    > > > wydajnie właśnie operacjami atomowymi (głównie compare & exchange)
    > > > no i trzeba pamiętać o barierach pamięci (memory fence).
    > >
    > > Myślałem że memory fence też jest wolne, ale jeszcze nigdy na oczy
    > > nie widziałem pomiarów czasu. Może faktycznie to się opłaca...
    >
    > Ostatnio kolega wykonał proste testy: prefiks lock na instrukcji
    > increment (tj. pełna blokada) vs increment, później store fence --
    > z barierą było 2-3 razy szybciej. Podejrzewam, że to trochę
    > zależy od całego komputera (kontroler pamięci, liczba procesorów),
    > ale sądzę, że czynnik 2 jest dobrym przybliżeniem.

    Czyli przyspieszenie niezbyt duże. Blokady są koszmarnie wolne, dwukrotnie
    przyspieszenie to za mało dla wielu praktycznych zastosowań. Z kolei
    jeśli dzielimy zadania na bardzo duże porcje, to nawet 10cio krotne
    przyspieszenie mechanizmu synchronizacji nie przyniesie mierzalnego
    przyspieszenia całego programu.

    Ciekawym rozwiązaniem, jak pisałeś, wydają się klasy obudowujące inta w
    bibliotece qt czy std. Jest też klasa atomic pointer. Jeszcze nigdy nie używałem tych
    klas, trudno mi się wypowiedzieć o ich przydatności i
    wydajności. Najbardziej ciekawe jest jednak, jak się mają możliwości tych
    klas do spotykanych problemów w praktyce. Może warto im się przyjrzeć.

    Pozdrawiam

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: