🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Ciemna strona C++

#267732
From: Seweryn Habdank-Wojewódzki
Date: Thu, 15 Nov 2007 16:05
42 lines
3537 bytes
Witam

Sebastian Kaliszewski wrote:

> Tak przy okazji... Coraz mocniej dochodzę do wniosku, że wątki do
> realizacji równoległości nadają się marnie, a przy nierównoległym
> concurrency lepsze byłoby coś, co nigdy nie jest równoległe. Dlaczego?
> Wątki w tej postaci w jakiej zwykle występują oznaczają złamanie zasady
> "You don't pay for what you don't use". Bo przy każdej alokacji i
> zwalnianiu muisz mieć conajmniej dostęp do TLS. Standardowy (w C++(0/1)x,
> dziś tr1) shared_ptr musi być synchronizowany. A Zwykle 95% obiektów nigdy
> między wątkami nie będzie przekazywanych. A ta synchronizacja kosztuje i
> to kosztuje dużo. Sporo do myślenia dała mi kiedyś wypowiedź gościa z
> jakiegoś brytyjskiego centrum superkompuetrowego, który stwoerdził, że
> przez 10 lat pracy nie widział ani jednego programu wielowątkowego.
> 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).

O widzisz. I to stanowi podstawę mojej praktyki. Co więcej procesy się
łatwiej rozprasza. Trudniej się je komunikuje i bardziej są procesorożerne,
ale przy dobrym projekcie z uwzględnieniem możliwości rozpraszania zyski są
zazwyczaj o wiele większe. W szczególności jeden z moich ostatnich
programów to aplikacja składająca się z 6 różnych procesów z czego w
wersji "demo" miałem wszystkich procesów 18 (niektóre są uruchamiane
równolegle mając inne parametry pracy). Okazało się, że program na jednym
procesorze jedno rdzeniowym działa 12 razy szybciej niż czas rzeczywisty.
Ale na dwóch rdzeniach (o podobnej częstotliwości) działa 30 razy szybciej.
Dodatkowo "za darmo" mam rozpraszanie, to znaczy mając dwie maszyny mogę
procesy podzielić i uruchamiać na każdej maszynie stosowną liczbę, albo też
idąc nieco dalej mogę uruchomić np. Mosix i on sam będzie się starał
zrównoważyć obciążenia klastra. Wątków nie da się tak przenosić. Wątki
kontekstowo powinny być bardzo związane z konkretną instancją procesu.
Jeśli połączenie jest słabe, ale wymagana jest szybka komunikacja, to
często lepiej jest użyć pamięci dzielonej.

Pozdrawiam.

-- 
|\/\/|   Seweryn Habdank-Wojewódzki
 \/\/
Technical Details
Message-ID: <fhhpuk$aht$1@news.vectranet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
References: <fghsb4$kpq$1@news.dialog.net.pl> <20071106073039.433f4934@Vorago> <618565031.20071107113041@pkierski.net> <fgtb6j$nur$1@news.vectranet.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fhag70$6kk$1@atlantis.news.tpi.pl> <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!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
From: Seweryn Habdank-Wojewódzki <shw_mail@wp.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Thu, 15 Nov 2007 17:05:29 +0100
Organization: VectraNET - http://www.vectranet.pl
Lines: 43
Message-ID: <fhhpuk$aht$1@news.vectranet.pl>
References: <fghsb4$kpq$1@news.dialog.net.pl> <20071106073039.433f4934@Vorago> <618565031.20071107113041@pkierski.net> <fgtb6j$nur$1@news.vectranet.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fhag70$6kk$1@atlantis.news.tpi.pl> <1194962417.690643.172410@v3g2000hsg.googlegroups.com> <1195078411.24656.6.camel@qrnik> <fhhlii$cg1$1@bozon2.softax.pl>
Reply-To: shw_mail@wp.pl
NNTP-Posting-Host: 078088193244.osw.vectranet.pl
Mime-Version: 1.0
X-Trace: news.vectranet.pl 1195141908 10813 78.88.193.244 (15 Nov 2007 15:51:48 GMT)
X-Complaints-To: usenet@news.vectranet.pl
NNTP-Posting-Date: Thu, 15 Nov 2007 15:51:48 +0000 (UTC)
User-Agent: KNode/0.10.5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit