Продолжу разговор про кластеры. Вернее, не я сам, а один из читателей, который
имел непосредственное к ним отношение, в особенности к программированию под
кластерные системы. В результате некоторой переписки с Денисом появилась его
статья, которую я здесь с удовольствием представляю:
Идея о создании мощного компьютера на базе стандартных компонентов, попросту
говоря, объединение их под управлением единой системы не нова. Достаточно
сказать, что первые такие работы были проведены в 1994 в Center of Excellence
in Space Data and Information Sciences. Томас Стерлинг и Дон Беккер построили
кластерную систему, состоящую из шестнадцати процессоров класса i486DX4, соединенных
посредством сети Ethernet. Этот проект получил название Beowulf.
Кстати сказать, сейчас, когда говорят о машинах такого типа, их называют
машинами класса Beowulf. Не так давно (год-полтора) в Штатах был скандал,
связанный с экспортными ограничениями на суперкомпьютеры. Объектом разбирательства
стала как раз система класса Beowulf, собранная на базе PII-400 и работающая
под управлением Red Hat 4.5. Как оказалось, система, состоящая из 15-и машин
(если я не прав, то пусть меня поправят), уже легко преодолевала означенный
барьер. Однако, после судебного разбирательства, ограничения на эту систему
были сняты.
Наш институт (Институт
Высокопроизводительных Вычислений и Баз Данных), конечно, не мог
пройти мимо такой интересной темы. Тем более, что он является одним из крупнейших
суперкомпьютерных центров в Восточной Европе и возглавляет Top10 российских.
(COMPUTERWORLD
РОССИЯ #06/99). В конце 97 года были произведены некоторые испытания,
которые показали, что тема очень интересна.
1 апреля 1998 года этот проект был одобрен Министерством Науки и Технологий
РФ.
Итак, ТТХ компьютера класса Beowulf "Паритет":
Конфигурация отдельного узла:
Процессоры: 2 x Intel Pentium II (450 МГц); HDD: 9,1 Гб (Ultra Wide SCSI);
RAM: 512 Мб;
Конфигурация системы:
Процессоры: 8 x Intel Pentium II (450 МГц); Диски: 36,4 Гб (Ultra Wide
SCSI); Оперативная память: 2048 Мб;
Я не буду пересказывать результаты тестов, подробнее Вы можете прочитать
здесь:
Все же, давайте разберемся, что же такое суперкомпьютер ? "Суперкомпьютер
- это устройство, сводящее проблему вычислений к проблеме ввода/вывода" (c)
Ken Batcher.
На самом деле, пожалуй, что, нет точного определение, что же такое суперкомпьютер.
Понятно, что классу супер-ЭВМ принадлежат лишь те компьютеры, которые имеют
максимальную производительность в настоящее время. Но развитие вычислительной
техники сегодня просто стремительно -- вспомните закон Мура. Возможно, неким
критерием мощности можно считать границу, установленную США. Не вдаваясь в
цифры, можно сказать, что под ограничение попадают системы, при помощи которых
можно проводить численные моделирования ядерных реакций. Серьезно? -- еще
бы. Чтобы представить о чем идет речь посмотрите на
http://parallel.srcc.msu.su/vvv/intro2hpc.html
, здесь приведены характеристики современных суперкомпьютеров.
Однако, без соответствующего программного обеспечения эти махины -- только
груда железа. Поправка -- ужасно дорогого железа. Итак, Пиво бывает светлое
и темное. Хм... А суперкомпьютеры бывают векторные и параллельные (и векторно-параллельные,
естественно).
В чем выигрыш векторных ? Расскажу, с чем работал лично -- CONVEX C-3440
* 4 векторных процессора;
* 1 процессор ввода-вывода;
* Объем физической памяти 512 Мб;
* Объем виртуальной памяти до 4 Гб;
* Объем памяти на жестких дисках 4,5 Гб;
* 9-дорожечный накопитель на магнитной ленте;
* Ethernet (10 Мбит/сек) - интерфейс;
* DAS FDDI (100 Мбит/сек) - интерфейс;
* 16-канальный мультиплексор
Пиковая производительность 800 Мфлоп/сек.
В чем изюминка ? -- в векторном процессоре. В отличие от обычного, он имеет
128 8-ми байтных регистров. И за один такт может сложит один вектор с другим,
просуммировать, умножить и т.д. Класс! На тестовых задачах -- летает, но :((
когда дело доходит до реальных, все несколько мрачнее. Реально, мы получали
выигрыш (хотя другие лаборатории может и поболее) в 1.5-2 раза. Все лучше,
чем ничего. Не так много в газодинамике задач, которые хорошо под вектор ложатся.
Параллельные -- Пиво верхнего и нижнего брожения (это лето, наверное, свое
берет :)) ) -- с общей и разделенной памятью. Ну здесь все понятно, или все
процессы в едином адресном пространстве или "каждому свое". Beowulf, кстати,
ко вторым относиться. Ну что сказать, я на параллельных компьютерах получал
выигрыш почти линейно от числа процессоров. Только это не всегда, просто повезло.
Если в компьютерах с разделенной памятью межпроцессорный обмен достаточно
велик, то накладные расходы могут быть большие. Ну тут арифметика проста:
100Mb Ethernet - от него и считаем. Если, конечно, обмен как-нибудь похитрее
не организован. Это для машин с разделенной памятью. С общей таких проблем
нет, но там свои погремушки -- семафоры и прочая дребедень, я с ними не работал.
Во тут мы и дошли до самого интересного :)) А программить -то как (@@) ?!!
Не, ну можно, конечно, на asme (не все -- а межпроцессорный обмен). Ладно,
ладно, шуткую, как говорит мой приятель...
А на "С"? -- fork() никто не отменял.
Можно, но где гарантии, что это будет другой процессор (а не процесс)? Есть,
конечно, всякие хитрости. На любом сперкомпьютере есть и компиляторы соответствующие
и средства. Обычно это выглядит в виде директив компилятора (для векторных,
кстати, та же история, но там еще хуже) и соответствующих сред (например Parix
на Parsytec'е).
Но, вот приходит момент, которого Вы так боялись -- надо перенести все на
другую платформу OOPS...
Ну не буду Вас больше мучать -- ЕСТЬ ТАКАЯ ПАРТИЯ!
1) Специальные языки (минус - а кто их видел?)
2) Расширение существующих, например, дедушка Фортран.
Об этом надо сказать особо -- High Performance Fortran -- High Performance
Fortran (HPF) is a set of extensions to the Fortran 90 standard that permits
programmers to specify how data is to be distributed across multiple processors.
Расширение языка Фортран для параллельных вычислительных систем. В текст,
написанный на обычном Фортране, вставляются директивы, которые с точки зрения
Фортрана являются комментариями. В директивах, в конечном счете, содержатся
указания, как данные и операции над ними должны быть распределены по ОЗУ и
процессорам. --- этот язык достаточно широко используется и составляет большую
конкуренцию следующему пункту.
(У одного из известных программистов была фраза, на тему того, что если в
3000 году и будет использоваться программное обеспечение, работающее ныне,
то это будут программы на Фортране). Я начинаю в это верить. В чем секрет
успеха этого языка? Мне, человеку привыкшему к объектным, на худой конец,
к структурным языкам, это трудно понять.
3) Стандартизированные интерфейсы.
Рассмотрим подробнее.
DCOM, CORBA -- без комментариев. Скажу лишь, что вещи хорошие (DCOM,
правда, пока фактически только под NT), но слишком мощные и сложные.
PVM (Parallel Virtual Machine) -- интерфейс, созданный в рамках исследовательского
проекта. Достаточно прост и легок в освоении, но и возможности его ограничены.
По-моему, на сегодняшний день, фактически не используется в промышленном (профессиональном)
программировании -- вытеснен более прогрессивным и быстро развивающимся интерфейсом
MPI.
OpenMP -- стандарт для программирования в модели общей памяти. Я его
ни разу не использовал (см. выше), поэтому и говорить ничего не буду.
MPI -- Message passing interface (Взаимодействие через передачу сообщений)
- "Рулез форева"!
MPI предоставляет программисту единый механизм взаимодействия ветвей внутри
параллельного приложения независимо от машинной архитектуры (однопроцессорные/многопроцессорные
с общей/раздельной памятью), взаимного расположения ветвей (на одном процессоре/на
разных) и API операционной системы. Т.е., можете отладить все дома на писишке,
закинуть по ftp, компильнуть и вперед.
"Программа, использующая MPI, легче отлаживается (сужается простор для
совершения стереотипных ошибок параллельного программирования) и быстрее переносится
на другие платформы (в идеале, простой перекомпиляцией). Минимально в состав
MPI входят: библиотека программирования (заголовочные и библиотечные файлы
для языков Си, Си++ и Фортран) и загрузчик приложений."
MPI быстро развивается. Фактически MPI-I был принят в 97, и вот уже на подходе
MPI-III.
А теперь "Bonus Pack": когда я говорил об отладке дома, я не имел ввиду отладку
под Линуксом. Конечно, есть версии MPI и под него, но есть и под 95/98/NT!!
Причем не одна, и есть бесплатные. Я использую WMPI - Win32 Message Passing
Interface -- http://dsg.dei.uc.pt/wmpi/intro.html
Скачиваете библиотеки, берете Visual C (лучше как я - лицензионный :) и вперед.
Причем, отлаживать можете даже на одной машине (будут запускаться несколько
параллельных задач), а считать -- на Вашей обычной сети TCP/IP с несколькими
писишками. Причем под NT средства WMPI можно запустить как сервисы -- и вообще
никому мешать не будет (почти :)).
Так что, для изготовления параллельного компьютера (почти супер) у Вас все
есть под руками.
Если есть какие вопросы или замечания - милости просим - mailto:sheshire_rat@hotmail.com
(Denis Moskvin) Для особо заинтересовавшихся могу порекомендовать http://parallel.srcc.msu.su
Замечательная статья - если бы у меня был журнал про параллельное программирование
и про суперкомпьютеры, а Денис решил бы завести свое издание, то я бы закрылся
и пошел вышивать крестиком.
Кстати, Денис может прислать и описать подробный пример использования MPI.
Я уже его попросил :)