пятница, 29 июня 2007 г.

PRAM. Немного подробностей

На этой, уже подходящей к концу, неделе про многоядерность и параллельное программирование говорили часто и много (не все к сожалению удалось осветить в блоге). Тем кого заинтересовало сообщение о "многопроцессорном чуде" из Мирланда советую прочитать комментарий Clay Breshears на ISN. В кратце он критически оценивает подход Узи Вишкина к параллельному программированию. Как мы уже знаем, Узи большой поклонник PRAM-подхода. В дополнении к статье на Вики, Clay Breshears отлично объясняет сущность PRAM - по сути PRAM это абстракция, которую в нашей литературе называют концепцией неограниченного параллелизма. Концепция родилась на заре суперкомпьютеров и смысл её предельно прост - будем рассматривать параллельную машину как систему с неограниченным множеством процессоров, каждый элемент которого подсоединен к RAM памяти с бесконечно малым временем доступа. Между RAM и процессорами находятся модули контроля доступа (memory access unit (MAU)). Эти модули "рулят" операциями чтения(Read(R)) и записи(Write(W)) - в зависимости от типа MAU разрешает(Concurrent(C)) или запрещает(Exclusive(E)) параллельное выполнение чтения\записи. Соответственно мы имеем 4 типа MAU. До недавнего времени PRAM оставался лишь концепцией, но усилиями Узи Вишкина PRAM обрел форму языка программирования (XMT-С). Фишка, как говорится в том, что в PRAM синхронизация (или точнее то, что в многопоточном программировании называется потокобезопасностью) возлагается на программиста - скажем если мы используем CREW-MAU (Concurrent Reading Exclusive Writing), то программист должен таким образом составить алгоритм, что уж если алгоритм выполняет параллельную запись в память, то запись эта должна вестись по разным адресам(в разные ячейки памяти). Выглядит страннова-то. Чтобы не показалось, что PRAM это совсем оторванная от жизни модель, отмечу, что разумный подход к PRAM предполагает составление библиотек таких распараллельных алгоритмов и их последующее использование, т.е. в этом плане PRAM ближе к OpenMP\IntelTBB, а не скажем к акторной модели параллелизма или ещё какой-либо модели параллельного программирования, целью которой является взаимодействие\интерактивность\повышение пропускной способности системы, а не пиковая производительность.
Более подробно о PRAM вы можете прочесть в статье Узи Вишкина и в уже упомянутой заметке Clay Breshears.