Re[25]: Java Parallel computing: multicore, Erlang, Scala
От: Gaperton http://gaperton.livejournal.com
Дата: 01.12.08 18:32
Оценка: 4 (1)
Здравствуйте, eao197, Вы писали:

G>>Если ты не понял, мы здесь говорим о моделях параллелизма, разделяемая память vs на сообщениях


E>Не-а не понял. В указанном мной примере WideFinder наилучшего результата добиваются программы, в которых несколько потоков используют один и тот же буфер для записи данных и для их анализа. Т.е. используют разделяемые между несколькими потоками данные. Стоит только начать передавать каждому потоку копию этого буфера для эксклюзивного пользования -- и кранты, производительность упадет.


"Передача сообщений" как модель синхронизации не говорит, надо тебе передавать копии буферов, или нет. Она даже не утверждает, что нельзя иметь общих данных. Она утверждает, что нельзя иметь мутабельные общие данные, которым требуется синхронизация, и что единственный доступный способ коммуникации параллельных процессов — это асинхронная посылка сообщений с семантикой мэйлбокса. Как именно она реализована — совершенно неважно с точки зрения модели.

E>То, о чем говоришь ты -- это когда сообщения используются лишь для управления синхронизацией действий между потоками, но основная работа все равно ведется с разделяемой памятью. Когда объем передаваемых в сообщении данных настолько мал, что общая разница в затратах между явной синхронизацией и синхронизацией на сообщениях будет ниже погрешности измерений.


Да, и это правильно. "Общая память" — это вообще не модель синхронизации. На общей мутабельной памяти можно применять семафоры, wait-notify (близко к мониторам Хоара), рандеву с protected objects как в Аде, или "аккорды", как в Polyphonic C# и joint calculus. На общей иммутабельной памяти отлично живет обмен сообщениями.

В этой ветке "общая память" применяется как собирательный термин для всех методов, допускающий наличие разделяемого изменяемого состояния, из которых спорщики знакомы в массе своей только с семафорами, и поэтому не могут отличить "модель синхронизации" и "общую память", думая что это одно и то же. Это и есть источник путаницы.

Чтобы быстро поиметь представление, близкое к моему — открой учебник Танненбаума по оперсистемам (у тебя он есть? Если нет — рекомендую купить), и прочти главу про синхронизацию. Знание — свет. Особенно, если его получение занимает меньше часа. Флуд — тьма.

G>>В таком же стиле как на Эрланге, с асинхронными сообщениями, можно писать и на С++. Скажем, при помощи MPI.


E>Тем не менее, что-то не видно, чтобы MPI порвал тот же OpenMP. Даже из упомянутой тобой статьи.

E>

E>The performance analysis (hardware performance counters and breakdown of the execution time) of our OpenMP SPMD version of the NAS benchmark demonstrates that we succeed in getting the same performance as the MPI version for the computing loops and better performance than the MPI version for the communication part.


E>Прочитайте хотя бы сами то, что советуете читать другим. Это прикольно.


Я отлично знаю, что я говорю. И если бы ты внимательно читал, что пишут, то понял бы, это не я доказываю, что сообщения быстрее. Это remark доказывает, что разделяемая память быстрее, и обладает какими-то преимуществами. Разница понятна? Понятно, что это не обратные тезисы, получаемые отрицанием друг друга? Эта статья — контрпример к его тезису. Так понятнее?

Пойми хотя бы, о чем идет спор, и у кого какая позиция, прежде чем влезать — сэкономишь всем время. Ну неохота ни о чем спорить. А то как обычно — навоображали себе идиотизма, приписали его участникам, и давай шашкой махать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.