2012-07-28 9 views
18

Here to slajdy autorstwa Rob Pike w tej sprawie. Za każdym razem, kiedy to robię, czuję się jak kretyn. Nie jestem w stanie dojść do sedna sprawy. Dobrze wiadomo, że współbieżność to rozkład złożonego problemu na mniejsze komponenty. Jeśli nie możesz poprawnie podzielić czegoś na mniejsze części, ciężko je rozwiązać za pomocą współbieżności.Współbieżność nie jest paralelizmem?

Ale nie ma wiele szczegółów na slajdach, jak uzyskać równoległość po osiągnięciu współbieżności. W slajdzie Lekcja (nr 52) mówi Współbieżność - "Może nawet Równolegle". Ale pytanie brzmi - Kiedy i jak współbieżność może prawidłowo i skutecznie doprowadzić do równoległości?

Domyślam się, że pod maską Rob wskazuje, że programiści powinni pracować na poziomie współbieżności - a paralelizm powinien być problemem języka/vm (gomaxprocs?). Dbam tylko o inteligentną dekompozycję na mniejsze jednostki, zwracając uwagę tylko na poprawną współbieżność - paralelizm będzie dbał o "system".

Proszę rzucić trochę światła.

+0

Tutaj jest trochę za dużo miejsca na dyskusję otwartą. Pytałem modów programu Programmer.SE, czy to będzie działać tam. Dzięki. – Kev

Odpowiedz

6

Co oznacza Rob Pike

Kiedy masz abstrakcyjną formę algorytmu w umyśle, wtedy trzeba wybrać, czy będzie wdrożyć go z Message Passing lub Shared Memory lub może hybrydową. Będziesz musiał również wziąć pod uwagę rodzaj dostępu do pamięci (NUMA, UMA, itp.) I używaną topologię (Hypercube, Torus, Ring, Mesh, Tree, itp.).

To wydaje się dużo pracy komuś, kto tylko chce coś, może nawet prostego, wykonanego w sposób równoległy (np.

I to dużo pracy, zwłaszcza jeśli zmienisz topologię (abyś mógł mieć wszystkie zalety).

Zapisujesz kod równoległy (czy to prosty czy złożony), a VM lub kompilator wybierze to, co wydaje się być najlepszym sposobem, , nawet uruchamiając go sekwencyjnie! (przykładem może być Task Parallel Library for .NET)

Ważne EDIT:

należy wspomnieć, że mówię o współbieżności w program/algorytm, a nie między niezależnymi programów uruchamianych w systemie .

Mówiłeś, że

Jest dobrze zrozumiałe, że współbieżności jest dekompozycja złożonego problemu na mniejsze części. Jeśli nie można prawidłowo podzielić coś na mniejsze części, trudno go rozwiązać za pomocą współbieżności

ale jest źle b/c te mniejsze elementy mogą zależeć od siebie w sposób sekwencyjny zakończenia, więc nawet jeśli dzielisz się na małe komponenty, nie oznacza to, że osiągasz współbieżność/równoległość.

We wszystkich moich klas algorytmów równoległych i rozproszonych (zarówno w BS i MS) nigdy nie mówił o „współbieżności uzyskaliśmy a teraz zobaczmy, w jaki sposób uzyskać równoległość”. Jeśli używasz słowa współbieżność do opisu i algorytmu, oznacza to paralelizm i na odwrót.

W literaturze można również znaleźć cienką linię między rozproszoną i równoległą.

Z algorytmu punktu widzenia można używać współbieżności, równoległości i rozproszone i otrzymujesz ten sam pomysł.

Z punktu widzenia wdrożenia, jeśli mówisz "paralelizm", zazwyczaj planujesz program działający na komputerze lokalnym lub klastrze (komunikacja z dzieloną pamięcią) i "dystrybuowany" po uruchomieniu programu na siatce (Wiadomość przekazująca wiadomość).

Teraz zarówno rozproszony, jak i równoległy oznacza współbieżność.

Myślę, że powinieneś być bardziej sceptyczny co do dokładnego znaczenia tych terminów, ponieważ nawet w literaturze (i mówię o ludziach, którzy rzeczywiście przyczynili się do tej dziedziny, a nie tylko do stworzenia jakiegoś języka), są oni wykorzystywani do wyrażania abstrakcyjna koncepcja.

Współbieżność na algorytmie (czy to program) oznacza posiadanie fragmentów kodu, które mogą działać niezależnie od innych fragmentów kodu, nawet jeśli w końcu będą czekać na inne fragmenty kodu (sprawdź Prawo Amdahla, aby zobaczyć dokładnie implikację tego).

Zawsze, gdy masz współbieżność w algorytmie/programie, masz również równoległość.

Myślę, że lepiej jest zaimplementować kilka równoległych i rozproszonych algorytmów, aby lepiej zrozumieć ideę, która za tym stoi. Jeśli znasz C/C++, możesz użyć OpenMPI dla implementacji rozproszonych (Message Passing) i OpenMP dla równoległych (Shared Memory) implementacji.

EDIT:

Mógł również oznaczać współbieżność jako abstrakcyjnej zasady i równolegle jako sposób jest realizowany [Shared Memory Message Passing, hybryda obu; Typ dostępu do pamięci (numa, uma itp.)].

+1

Myślę, co mówi Rob Pike o "równoległym przetwarzaniu" - wielu wątkach działających jednocześnie na procesorach wielordzeniowych. – devundef

+1

Omówiłem to w części EDIT :). – amb

+0

Prawo Amdahla mówi o paralelizmie, gdy masz więcej niż jeden rdzeń/procesor. http://en.wikipedia.org/wiki/Amdahl's_law – devundef

Powiązane problemy