🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #267741

Re: Ciemna strona C++

#267741
From: Piotr Wyderski
Date: Sat, 17 Nov 2007 13:24
69 lines
5321 bytes
Sebastian Kaliszewski wrote:

> Tak przy okazji... Coraz mocniej dochodzę do wniosku,
> że wątki do realizacji równoległości nadają się marnie

Nie Ty jeden... ;-) Wątki (jądrowe) to dla mnie zaledwie interfejs
umożliwiający dostanie się do procesorów systemowych (bo jakoś
trzeba), więc zdumiewa mnie takie upowszechnienie się tego modelu.
Genralnie preferuję model puli zadań (task -- nieprzerywalne,
wykona się albo do końca, albo wcale) w trybach work sharing
i work stealing do symulowania przetwarzania strumieniowego.

> Bo przy każdej alokacji i zwalnianiu muisz mieć conajmniej dostęp do TLS.

To akurat nie jest problemem, dostęp do TLS _da_ się zrobić tak, że
będzie superwydajny. Jeśli jest odpowiednie wsparcie sprzętowe
i programowe na poziomie ABI, to nie ma powodu, by TLSy były
wolniejsze niż zwykła pamięć. Np. na IA-32 pod Windows do realizacji
TLSów służy rejestr segmentowy fs. Niestety oficjalnie nie wolno
(mharharhar...) bezpośrednio pisać do tego segmentu i trzeba używać
dość powolnych funkcji z WinAPI. Znacznie gorzej jest na systemach
uniksowych, gdzie TLSy bywają bardzo powolne. No ale jest kilka
pomysłów na ich znaczne przyspieszenie...

> Standardowy (w C++(0/1)x, dziś tr1) shared_ptr musi być synchronizowany.

Musi, ale to za mało! :-) On się w zasadzie nadaje tylko do obiektów
read-only, bo gdy następuje modyfikacja dzielonej zawartości, to nie
ma żadnego mechanizmu wymuszenia spójności obrazów pamięci i coś,
co bezbłędnie zadziała na IA-32 wygeneruje heisenbug na PowerPC.
Niestety dobre zrozumienie tych niuansów nie jest zbyt powszechne,
a będzie jeszcze gorzej, bo programowanie wielowątkowe się
upowszechnia, a modele spójności rozluźniają. Już chyba czas zacząć
pytać "GDZIE SĄ BARIERY???", bo inaczej się skończy megakatastrofą. :-)

> A Zwykle 95% obiektów nigdy między wątkami nie będzie przekazywanych.

Dlatego lubię JITy. Tam się do pewnego stopnia da automatycznie
dowodzić pewnych własności obiektów i generować domeny
synchronizacji.

> A ta synchronizacja kosztuje i to kosztuje dużo.

Bardzo dużo. Operacje atomowe są około stukrotnie (!) wolniejsze niż
zwykłe, więc jeśli są często używane, to wydajność może nieźle siąść.
To i tak znacznie lepiej niż klasychne podejście z lockowaniem, które
się nie skaluje powyżej kilku rdzeni, ale mimo tego nie jest dobrze.
Dlatego wolę work stealing niż work sharing, mimo znacznie większej
komplikacji kolejki zadań -- mogę wówczas wykonać nawet kilkaset
milionów prostych tasków na sekundę, a nie zaledwie ~10 milionów
w trybie sharing. Im bardziej złożone zadania, tym narzut na kolejkę
jest mniejszy, ale ja lubie drobnoziarniste podziały.

> Równoległe rozwiązania wieloprocesowe, gdzie komunikacja między 
> kontekstami przetwarzania jest ściśle wydzielona i gdzie jest zarządzanie 
> całością jest sensownie realizowalne, są po prostu szybsze (i to o 
> kilkadziesiąt procent).

Ja tam wolę trzymać wszytsko w jednej przestrzeni adresowej, a więc
efektywnie w jednym procesie, ale zasadniczo nie programuję wielowątkowo
w standardowo rozumiany sposób -- wolę podejście oparte na przesyłaniu
komunikatów, wzbogacone potężnymi zaletami pamięci dzielonej, co
efektywnie odtwarza pewną klasę strukur strumieniowych -- tylko, że ja
jestem "dziwny", bo podejście data-flow przyjąłem za swoje "od pierwszego
wejrzenia" i nic dla mnie nie znaczy jego porażka w latach 70-tych. :-)
No i przede wszystkim te niedoceniane powszechnie SIMDy...

    Pozdrawiam
    Piotr Wyderski
Technical Details
Message-ID: <fhmq23$o34$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhag70$6kk$1@atlantis.news.tpi.pl> <fhag1b$9or$3@news.vectranet.pl> <1194912011.15035.13.camel@qrnik> <1194962417.690643.172410@v3g2000hsg.googlegroups.com> <1195078411.24656.6.camel@qrnik> <fhhlii$cg1$1@bozon2.softax.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: "Piotr Wyderski" <wyderski@mothers.against.spam-ii.uni.wroc.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Sat, 17 Nov 2007 14:24:17 +0100
Organization: Dialog Net
Lines: 70
Message-ID: <fhmq23$o34$1@news.dialog.net.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl>  <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl>  <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl>  <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl>  <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl>  <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl>  <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl>  <fhag70$6kk$1@atlantis.news.tpi.pl> <fhag1b$9or$3@news.vectranet.pl>  <1194912011.15035.13.camel@qrnik>  <1194962417.690643.172410@v3g2000hsg.googlegroups.com> <1195078411.24656.6.camel@qrnik> <fhhlii$cg1$1@bozon2.softax.pl>
NNTP-Posting-Host: xdsl-6381.walbrzych.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1195305860 24676 87.105.52.237 (17 Nov 2007 13:24:20 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Sat, 17 Nov 2007 13:24:20 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
X-Antivirus: avast! (VPS 071116-0, 2007-11-16), Outbound message
X-Antivirus-Status: Clean
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit