Article View: pl.comp.lang.c
Article #267732Re: Ciemna strona C++
From: Seweryn Habdank-Wojewódzki
Date: Thu, 15 Nov 2007 16:05
Date: Thu, 15 Nov 2007 16:05
42 lines
3537 bytes
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-mailReferences:
<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