Вы находитесь на странице: 1из 10

Кластер — группа компьютеров, объединённых высокоскоростными каналами

связи и представляющая с точки зрения пользователя единый аппаратный ресурс.


Один из первых архитекторов кластерной технологии Грегори Пфистер (Gregory F.
Pfister) дал кластеру следующее определение: «Кластер — это разновидность
параллельной или распределённой системы, которая: состоит из нескольких связанных
между собой компьютеров;используется как единый, унифицированный компьютерный
ресурс».
В чем идея подобного объединения? Кластеры ассоциируются у нас с
суперкомпьютерами, круглые сутки решающими на десятках, сотнях и тысячах
вычислительных узлов какую-нибудь сверхбольшую задачу, но на практике существует и
множество куда более "приземленных" кластерных применений. Часто встречаются
кластеры, в которых одни узлы, дублируя другие, готовы в любой момент перехватить
управление, или, например, одни узлы, проверяя получаемые с другого узла результаты,
радикально повышают надежность системы. Еще одно популярное применение кластеров
- решение задачи массового обслуживания, когда серверу приходится отвечать на
большое количество независимых запросов, которые можно легко раскидать по разным
вычислительным узлам (Обычно эту штуку называют серверной фермой, именно по
такому принципу работает Google). Однако рассказывать об этих двух, если угодно,
"вырожденных" случаях кластерных систем практически нечего - из их краткого описания
и так ясно, как они работают; поэтому разговор наш пойдет именно о суперкомпьютерах.
Итак, суперкомпьютер-кластер. Он состоит из трех основных компонентов:
собственно "вычислялок" - компьютеров, образующих узлы кластера; интерконнекта,
соединяющего эти узлы в сеть, и программного обеспечения, заставляющего всю
конструкцию "почувствовать" себя единым компьютером. В роли вычислительных узлов
может выступать что угодно - от старой никому не нужной персоналки до современного
четырехпроцессорного сервера, причем их количество ничем не ограниченно (ну разве
что площадью помещения да здравым смыслом). Чем быстрее и чем больше - тем лучше;
и как эти узлы устроены, тоже неважно. Обычно для упрощения решения и непростой
задачи балансировки нагрузки на разные узлы кластера все узлы в кластере делают
одинаковыми, но даже это требование не абсолютно.
История развития кластерных систем неразрывно связана с развитием сетевых
технологий. Дело в том, что, чем больше элементов в кластере и чем они быстрее, (и,
соответственно, чем выше быстродействие всего кластера), тем более жесткие требования
предъявляются к скорости интерконнекта. Можно собрать кластерную систему хоть из 10
тысяч узлов, но если вы не обеспечите достаточной скорости обмена данными, то
производительность компьютера по-прежнему оставит желать лучшего. А поскольку
кластеры в высокопроизводительных вычислениях - это практически всегда
суперкомпьютеры. Программирование для кластеров - весьма трудоемкая задача, и если
есть возможность обойтись обычным сервером SMP-архитектуры с эквивалентной
производительностью, то так и предпочитают делать. Поэтому кластеры используются
только там, где SMP обходится слишком дорого, а со всех практических точек зрения
требующие такого количества ресурсов машины - это уже суперкомпьютеры, то и
интерконнект для них просто обязан быть очень быстрым, иначе полностью раскрыть
свои возможности кластер не сможет. В результате практически все известные сетевые
технологии хотя бы раз использовались для создания кластеров, была попытка
использования в качестве интерконнекта стандартных портов USB, причем разработчики
зачастую не ограничивались стандартом и изобретали "фирменные" кластерные решения,
как, например, интерконнект, основанный на нескольких линиях Ethernet, включаемых
между парой компьютеров в параллель. К счастью, с повсеместным распространением
гигабитных сетевых карт, ситуация в этой области становится проще. Почти половину
списка суперкомпьютеров Top 500 составляют кластеры, построенные на основе Gigabit
Ethernet, - они довольно дешевы, и в большинстве случаев предоставляемых ими
скоростей вполне достаточно.
Вообще, по пропускной способности интерконнект почти дошел до разумного
предела: так, постепенно появляющиеся на рынке 10-гигабитные адаптеры Ethernet
вплотную подобрались к скоростям внутренних шин компьютера, и если создать некий
гипотетический 100-гигабитный Ethernet, то не найдется ни одного компьютера,
способного пропустить через себя такой огромный поток данных. Но на практике
десятигигабитная локальная сеть, несмотря на всю свою перспективность, встречается
редко - технология Ethernet допускает использование только топологии "звезда", а в
подобной системе центральный коммутатор, к которому подключаются все остальные
элементы, обязательно будет узким местом. Кроме того, у Ethernet-сетей довольно
большая латентность (Время между отправкой запроса одним узлом и получением этого
запроса другим узлом), что тоже затрудняет их использование в "тесно связанных"
задачах, где отдельные вычислительные узлы должны активно обмениваться
информацией. Поэтому несмотря на почти предельную пропускную способность Ethernet-
решений в кластерах широко используются сети со специфической топологией - старая
добрая Myrinet, дорогая элитная Quadrics, новенькая InfiniBand и др. Все эти технологии
"заточены" под распределенные приложения и обеспечивают минимальную латентность
исполнения команд и максимальную производительность. Вместо традиционной "звезды"
здесь из вычислительных элементов строятся плоские и пространственные решетки,
многомерные гиперкубы, поверхности трехмерного тора и другие "топологически
хитрые" объекты. Такой подход позволяет одновременно передавать множество данных
по сети, гарантируя отсутствие узких мест и увеличивая суммарную пропускную
способность.
Как развитие идей быстрого интерконнекта отметим, например, адаптеры сети
InfiniBand, подключающиеся через специальный слот HTX к процессорной шине
HyperTransport. Фактически адаптер напрямую подключается к процессору (Напомним,
что в многопроцессорных системах на базе AMD Opteron межпроцессорное
взаимодействие происходит именно по этой шине)! Лучшие образцы подобных решений
обеспечивают столь высокую производительность, что построенные на их основе
кластеры вплотную приближаются по характеристикам к классическим SMP-системам, а
то и превосходят их. Уже имеются на рынке интереснейший чип под названием Chorus,
который по четырем шинам HyperTransport подключается к четырем или двум
процессорам AMD Opteron, расположенным на одной с ним материнской плате, и с
помощью трех линков InfiniBand может подключаться еще к трем другим "Хорусам",
контролирующим другие четверки (или пары) процессоров. Один Chorus - это одна
материнская плата и один сравнительно независимый узел с несколькими процессорами,
подключаемый стандартными кабелями InfiniBand к остальным узлам. Внешне вроде бы
получается кластер, но - только внешне: оперативная память у всех материнских плат
общая. Всего в текущем варианте может объединяться до восьми "Хорусов" (и
соответственно до 32 процессоров), причем все процессоры будут работать уже не как
кластер, а как единая SUMA-система, сохраняя, однако, главное достоинство кластеров -
невысокую стоимость и возможность наращивания мощности. Такой вот получается
"суперкластеринг", стирающий границы между кластерами и SMP.
Впрочем, все эти новомодные решения совсем не дешевы, - а ведь начинали мы с
невысокой себестоимости кластера. Поэтому "Хорусы" да "Инфинибенды", стоящие
солидных денег (несколько тысяч долларов на каждый узел кластера, что хоть и гораздо
меньше, чем у аналогичных SMP-систем, но все равно дорого), встречаются нечасто. В
секторе "академических" суперкомпьютеров, принадлежащих университетам, обычно
используются самые дешевые решения, так называемые Beowulf–кластеры, состоящие из
набора персоналок, соединенных гигабитной или даже стомегабитной Ethеrnet-сетью и
работающих под управлением бесплатных операционных систем типа Linux. Несмотря на
то что собираются такие системы буквально "на коленке", иногда из них все равно
вырастают сенсации: к примеру, "биг-мак" - собранный из 1100 обычных "макинтошей"
самодельный кластер, обошедшийся организаторам всего в 5,2 млн. долларов и
умудрившийся занять в 2003 году третье место в рейтинге Top 500.

Обычно различают следующие основные виды кластеров:


1. отказоустойчивые кластеры (High-availability clusters, HA)
2. кластеры с балансировкой нагрузки (Load balancing clusters)
3. вычислительные кластеры (Сomputing clusters)
4. grid-системы

Классификация кластеров
Кластеры высокой доступности. Обозначаются аббревиатурой HA (англ. High
Availability — высокая доступность). Создаются для обеспечения высокой доступности
сервиса, предоставляемого кластером. Избыточное число узлов, входящих в кластер,
гарантирует предоставление сервиса в случае отказа одного или нескольких серверов.
Типичное число узлов — два, это минимальное количество, приводящее к повышению
доступности. Создано множество программных решений для построения такого рода
кластеров. В частности, для OpenVMS, GNU/Linux, FreeBSD и Solaris существует проект
бесплатного ПО Linux-HA.
Кластеры распределения нагрузки. Принцип их действия строится на
распределении запросов через один или несколько входных узлов, которые
перенаправляют их на обработку в остальные, вычислительные узлы. Первоначальная
цель такого кластера — производительность, однако, в них часто используются также и
методы, повышающие надёжность. Подобные конструкции называются серверными
фермами. Программное обеспечение (ПО) может быть как коммерческим (OpenVMS,
MOSIX, Cluster, Platform LSF HPC, Sun Grid Engine, Moab Cluster Suite, Maui Cluster
Scheduler), так и бесплатным (Linux Virtual Server).
Вычислительные кластеры. Кластеры используются в вычислительных целях, в
частности в научных исследованиях. Для вычислительных кластеров существенными
показателями являются высокая производительность процессора в операциях над числами
с плавающей точкой (flops) и низкая латентность объединяющей сети, и менее
существенными — скорость операций ввода-вывода, которая в большей степени важна
для баз данных и web-сервисов. Вычислительные кластеры позволяют уменьшить время
расчетов, по сравнению с одиночным компьютером, разбивая задание на параллельно
выполняющиеся ветки, которые обмениваются данными по связывающей сети. Одна из
типичных конфигураций — набор компьютеров, собранных из общедоступных
компонентов, с установленной на них операционной системой Linux, и связанных сетью
Ethernet, Myrinet, InfiniBand или другими относительно недорогими сетями. Такую
систему принято называть кластером Beowulf. Специально выделяют
высокопроизводительные кластеры (Обозначаются англ. аббревиатурой HPC Cluster —
High-performance computing cluster). Список самых мощных высокопроизводительных
компьютеров (также может обозначаться англ. аббревиатурой HPC) можно найти в
мировом рейтинге TOP500. В России ведется рейтинг самых мощных компьютеров СНГ
TOP50 Суперкомпьютеры.
Системы распределенных вычислений (grid). Такие системы не принято считать
кластерами, но их принципы в значительной степени сходны с кластерной технологией.
Их также называют grid-системами. Главное отличие — низкая доступность каждого узла,
то есть невозможность гарантировать его работу в заданный момент времени (узлы
подключаются и отключаются в процессе работы), поэтому задача должна быть разбита
на ряд независимых друг от друга процессов. Такая система, в отличие от кластеров, не
похожа на единый компьютер, а служит упрощённым средством распределения
вычислений. Нестабильность конфигурации, в таком случае, компенсируется большим
числом узлов.
Самые производительные
Дважды в год организацией TOP500 публикуется список пятисот самых
производительных вычислительных систем в мире, среди которых последнее время
преобладают кластеры. Самым быстрым является кластер IBM Roadrunner (Лос-
Аламосская национальная лаборатория, США, созданный в 2008), его максимальная
производительность (на июль 2008) составляет 1,026 Петафлопа. Самая быстрая система в
Европе (на июль 2008) — суперкомпьютер, BlueGene/P находится в Федеративной
Республике Германия, в исследовательском центре города Юлих, земля Северный Рейн-
Вестфалия, максимально достигнутая производительность 167,3 Терафлопа.
Кластерные системы занимают достойное место в списке самых быстрых, при этом
значительно выигрывая у суперкомпьютеров в цене. На июль 2008 на 7 месте рейтинга
TOP500 находится кластер SGI Altix ICE 8200 (Chippewa Falls, шт. Висконсин, США).
Сравнительно дешёвую альтернативу суперкомпьютерам представляют кластеры,
основанные на концепции Beowulf, которые строятся из обыкновенных недорогих
компьютеров на основе бесплатного программного обеспечения. Один из практических
примеров такой системы — Stone Soupercomputer (Оак Ридж, шт. Теннесси, США, 1997).
Крупнейший кластер, принадлежащий частному лицу (из 1000 процессоров), был
построен Джоном Козой (John Koza).
Высокопроизводительные кластеры (high performance computing clusters, HPC) –
один из типов высокопроизводительных суперкомпьютеров, обладающий достаточно
существенной особенностью – гораздо меньшей ценой по сравнению с большими
параллельными системами.
Кластеры для высокопроизводительных вычислений реализуют
мультикомпьютерную архитектуру для параллельных вычислений и состоят из одного
(реже – нескольких) управляющего узла (master node) и вычислительных узлов (compute
nodes), объединенных между собой частной высокоскоростной сетью. Узлы такого
кластера представляют собой обычные рабочие станции или серверы с установленным на
них специализированным ПО – на базе ОС Linux или Windows.
Проекты на основе кластеров.
Самым известным проектом на основе кластеров является проект Beowulf . Он
возник в научно-космическом центре NASA - Goddard Space Flight Center (GSFC), точнее
в созданном на его основе CESDIS (Center of Excellence in Space Data and Information
Sciences).
Проект Beowulf начался летом 1994 года сборкой в GSFC 16-процессорного
кластера (на процессорах 486DX4/100MHz, 16MB памяти и 3 сетевых адаптера на каждом
узле, 3 "параллельных" Ethernet-кабеля по 10Mbit). Данный кластер, который и был назван
"Beowulf", создавался как вычислительный ресурс проекта Earth and Space Sciences Project
(ESS). Есть картинка с изображением этого первого Beowulf-а.
Далее в GSFC и других подразделениях NASA были собраны другие, более
мощные кластеры. Например, кластер theHIVE (Highly-parallel Integrated Virtual
Environment) содержит 64 узла по 2 процессора Pentium Pro/200MHz и 4GB памяти в
каждом, 5 коммутаторов Fast Ethernet. Общая стоимость этого кластера составляет
примерно $210 тыс.
В рамках проекта Beowulf был разработан ряд высокопроизводительных и
специализированных сетевых драйверов (в частности, драйвер для использования
нескольких Ethernet-каналов одновременно).
Изначательно термин "Beowulf" возник как собственное имя Linux-кластера в
GSFC. Затем он стал применяться ко всем аналогичным кластерным системам (Beowulf-
кластер, кластер "а-ля" Beowulf).
Avalon, суперкомпьютер на базе Linux
В 1998 году в Лос-аламосской национальной лаборатории астрофизик Michael
Warren и другие ученые из группы теоретической астрофизики построили
суперкомпьютер Avalon, который представляет из себя Linux-кластер на базе процессоров
DEC Alpha/533MHz. Avalon первоначально состоял из 68 процессоров, затем был
расширен до 140. В каждом узле установлено 256MB оперативной памяти, EIDE-жесткий
диск на 3.2GB, сетевой адаптер от Kingston (общая стоимость узла - $1700). Узлы
соединены с помощью 4-х 36-портовых коммутаторов Fast Ethernet и расположенного "в
центре" 12-портового коммутатора Gigabit Ethernet от 3Com.
Общая стоимость Avalon - $313 тыс., а его производительность по LINPACK (47.7
GFLOPS) позволила ему занять 114 место в 12-й редакции списка Top500 (рядом с 152-
процессорной системой IBM SP2). 70-процессорная конфигурация Avalon по многим
тестам показала такую же производительность, как 64-процессорная система SGI
Origin2000/195MHz стоимость которой превышает $1 млн.
В настоящее время Avalon активно используется в астрофизических, молекулярных
и других научных вычислениях. На конференции SC'98 создатели Avalon представили
доклад, озаглавленный "Avalon: An Alpha/Linux Cluster Achieves 10 Gflops for $150k" и
заслужили премию по показателю цена/производительность ("1998 Gordon Bell
Price/Performance Prize").
Другие интересные проекты на основе кластеров.
Проект Berkeley NOW (Network Of Workstations) - технология, очень похожая на
Beowulf, разработана в университете шт. Калифорния в Беркли. В 1997 году на кластере
из 100 рабочих станций на базе UltraSPARC была достигнута производительность в
10GFLOPS по LINPACK, что позволило ему войти в 200 самых мощных компьютеров
мира. Проект официально завершен в мае 1998 года. Доступно разработанное в рамках
проекта ПО, в том числе ОС GLUnix (специализированная версия UNIX), система
передачи сообщений Active Messages, реализация MPI и др.
Доступна статья "A Case for Networks of Workstations: NOW" (PS, 58K),
опубликованная в феврале 1995 г. журналом IEEE Micro. Обсуждаются основные идеи
проекта NOW.
Проект Condor (High Throughput Computing). Система Condor разрабатывается в
университете шт. Висконсин (Madison). Condor распределяет независимые подзадачи по
существующей в организации сети рабочих станций, заставляя компьютеры работать в
свободное время (то есть в то время, когда они простаивали бы без своих пользователей).
Программное обеспечение системы Condor доступно бесплатно. В настоящее время
поддерживаются платформы SGI, Solaris, Linux, HP-UX, и Digital Unix, однако
планируется также поддержка Windows NT.
Проект T-Система - система программирования и run-time среда, реализующие
автоматическое динамическое распараллеливание программ. Разрабатывается в ИПС РАН
(Переславль-Залесский). В рамках проекта создан специальный язык t2cp -
функциональное расширение С. Система ориентирована на задачи с динамическим
(скрытым до момента запуска) параллелизмом. В настоящее время T-система реализована
для TCP/IP-сети Linux-компьютеров (в т.ч. SMP).
Проект MOSIX - программный модуль для поддержки кластерных вычислений на
Linux. Разрабатывается в Hebrew University (Израиль). Обеспечивает элементы NUMA-
функциональности на кластере. Встроены алгоритмы автоматического распределения
загрузки. Программное обеспечение доступно бесплатно.
В России на сегодняшний момент самым известным является
Высокопроизводительный вычислительный кластер ННГУ
Для проведения вычислительных экспериментов использовался вычислительный
кластер Нижегородского университета, оборудование для которого было передано в
рамках Академической программы Интел в 2001 г. В состав кластера входит (см. рис. 1.3):
2 вычислительных сервера, каждый из которых имеет 4 процессора Intel Pentium III
700 Мгц, 512 MB RAM, 10 GB HDD, 1 Гбит Ethernet card;
12 вычислительных серверов, каждый из которых имеет 2 процессора Intel Pentium
III 1000 Мгц, 256 MB RAM, 10 GB HDD, 1 Гбит Ethernet card;
12 рабочих станций на базе процессора Intel Pentium 4 1300 Мгц, 256 MB RAM, 10
GB HDD, CD-ROM, монитор 15", 10/100 Fast Ethernet card.
Следует отметить, что в результате передачи подобного оборудования
Нижегородский госуниверситет оказался первым вузом в Восточной Европе, оснащенным
ПК на базе новейшего процессора INTEL® PENTIUM® 4.
Важной отличительной особенностью кластера является его неоднородность
(гетерогенность). В состав кластера входят рабочие места, оснащенные процессорами Intel
Pentium 4 и соединенные относительно медленной сетью (100 Мбит), а также
вычислительные 2- и 4- процессорные сервера, обмен данными между которыми
выполняется при помощи быстрых каналов передачи данных (1000 Мбит). В результате
кластер может использоваться не только для решения сложных вычислительно-
трудоемких задач, но также и для проведения различных экспериментов по исследованию
многопроцессорных кластерных систем и параллельных методов решения научно-
технических задач.
В качестве системной платформы для построения кластера выбраны современные
операционные системы семейства Microsoft Windows (для проведения отдельных
экспериментов имеется возможность использования ОС Unix).
Рис. 1.3. Структура вычислительного кластера Нижегородского университета
(Нажмите на изображение для его увеличения)
В результате принятых решений программное обеспечение кластера является
следующим:
вычислительные сервера работают под управлением ОС Microsoft Windows 2000
Advanced Server; на рабочих местах разработчиков установлена ОС Microsoft Windows
2000 Professional;
в качестве сред разработки используются Microsoft Visual Studio 6.0; для
выполнения исследовательских экспериментов возможно использование компилятора
Intel C++ Compiler 5.0, встраиваемого в среду Microsoft Visual Studio;
на рабочих местах разработчиков установлены библиотеки:
Plapack 3.0 (см. www.cs.utexas.edu/users/plapack);
MKL (см. developer.intel.com/software/products/mkl/index.htm);
в качестве средств передачи данных между процессорами установлены две
реализации стандарта MPI:
Argonne MPICH (www-unix.mcs.anl.gov/mpi/MPICH/);
MP-MPICH (www.lfbs.rwth-aachen.de/~joachim/MP-MPICH.html).
Как построить Beowulf? (Некоторые практические рекомендации по построению
параллельных кластеров).
Кластер состоит из отдельных машин (узлов) и объединяющей их сети
(коммутатора). Кроме ОС, необходимо установить и настроить сетевые драйверы,
компиляторы, ПО поддержки параллельного программирования и распределения
вычислительной нагрузки.
1. Узлы кластера. Подходящим выбором в данный момент являются системы на
базе процессоров Intel. Одну из машин следует выделить в качестве центральной
(головной) куда следует установить достаточно большой жесткий диск, возможно более
мощный процессор и больше памяти, чем на остальные (рабочие) узлы. Имеет смысл
обеспечить (защищенную) связь этой машины с внешним миром. Управляющий узел
кластера выполняет функции сервера с сетевой файловой системой (network file system,
NFS) и шлюза с «внешним» миром. При необходимости обеспечения высокой
отказоустойчивости управляющего узла, его реализуют в виде отказоустойчивого
кластера из двух серверов.
Поскольку вычислительные узлы системы предназначены для решения
вычислительных задач в параллельном режиме, они не нуждаются в подключении
монитора, клавиатуры, мыши. Иногда в зависимости от особенностей решаемых задач
такие узлы собираются и без жестких дисков, используя возможность загрузки
операционной системы по сети. Все управление вычислительными узлами осуществляется
через мастер-узел. Если эти узлы не будут одновременно использоваться в качестве
пользовательских рабочих мест, нет необходимости устанавливать на них видеокарты и
мониторы. Возможна установка узлов в стойки (rackmounting), что позволит уменьшить
место, занимаемое узлами, но будет стоить несколько дороже.
Возможна организация кластеров на базе уже существующих сетей рабочих
станций, т.е. рабочие станции пользователей могут использоваться в качестве узлов
кластера ночью и в выходные дни. Системы такого типа иногда называют COW (Cluster of
Workstations).
Количество узлов следует выбирать исходя из необходимых вычислительных
ресурсов и доступных финансовых средств. Следует понимать, что при большом числе
узлов придется также устанавливать более сложное и дорогое сетевое оборудование.
2. Сеть. В простейшем случае используется один сегмент Ethernet (10Mbit/sec на
витой паре). Однако дешевизна такой сети, вследствие коллизий оборачивается большими
накладными расходами на межпроцессорные обмены; а хорошую производительность
такого кластера следует ожидать только на задачах с очень простой параллельной
структурой и при очень редких взаимодействиях между процессами (например, перебор
вариантов).
Для получения хорошей производительности межпроцессорных обменов
используют полнодуплексный Fast Ethernet на 100Mbit/sec. При этом для уменьшения
числа коллизий или устанавливают несколько "параллельных" сегментов Ethernet, или
соединяют узлы кластера через коммутатор (switch).
Более дорогостоящим, но также популярным вариантом являются использование
коммутаторов типа Myrinet (1.28Gbit/sec, полный дуплекс). Менее популярными, но также
реально используемыми при построении кластеров сетевыми технологиями являются
технологии сLAN, SCI и Gigabit Ethernet.
Высокопроизводительные кластерные комплексы применяются для решения
геологоразведочных задач в нефтегазовой отрасли, наукоемких задач в образовательной
среде, прогнозирования гидрометеоусловий и природных катастроф, моделирования
различных физических и химических процессов, в том числе в автомобилестроении и на
других производствах, при расшифровке генной и вирусной информации в медицине и
биоинформатике. Благодаря тому, что такие мощные системы собираются из
стандартизованных блоков, они в первую очередь привлекательны своей низкой «входной
ценой» в область высокопроизводительных вычислений.
Вычислительные кластеры могут быть собраны из стандартных одно- и
двухпроцессорных серверов, а также могут быть поставлены в виде готовых
сконфигурированных и настроенных решений.
Как использовать возможности кластера?
Существует несколько способов задействовать вычислительные мощности
кластера.
1. Запускать множество однопроцессорных задач. Это может быть разумным
вариантом, если нужно провести множество независимых вычислительных экспериментов
с разными входными данными, причем срок проведения каждого отдельного расчета не
имеет значения, а все данные размещаются в объеме памяти, доступном одному процессу.
2. Запускать готовые параллельные программы. Для некоторых задач доступны
бесплатные или коммерческие параллельные программы, которые при необходимости Вы
можете использовать на кластере. Как правило, для этого достаточно, чтобы программа
была доступна в исходных текстах, реализована с использованием интерфейса MPI на
языках С/C++ или Фортран. Примеры свободно распространяемых параллельных
программ, реализованных с помощью MPI: GAMESS-US (квантовая химия), POVRay-MPI
(трассировка лучей).
3. Вызывать в своих программах параллельные библиотеки. Также для некоторых
областей, таких как линейная алгебра, доступны библиотеки, которые позволяют решать
широкий круг стандартных подзадач с использованием возможностей параллельной
обработки. Если обращение к таким подзадачам составляет большую часть
вычислительных операций программы, то использование такой параллельной библиотеки
позволит получить параллельную программу практически без написания собственного
параллельного кода. Примером такой библиотеки является SCALAPACK. Русскоязычное
руководство по использованию этой библиотеки и примеры можно найти на сервере по
численному анализу НИВЦ МГУ. Также доступна параллельная библиотека FFTW для
вычисления быстрых преобразований Фурье (БПФ). Информацию о других параллельных
библиотеках и программах, реализованных с помощью MPI, можно найти по адресу
http://www-unix.mcs.anl.gov/mpi/libraries.html.
4. Создавать собственные параллельные программы. Это наиболее трудоемкий, но
и наиболее универсальный способ. Существует два основных варианта. 1) Вставлять
параллельные конструкции в имеющиеся параллельные программы. 2) Создавать "с нуля"
параллельную программу.

Как работают параллельные программы на кластере?


Параллельные программы на вычислительном кластере работают в модели
передачи сообщений (message passing). Это значит, что программа состоит из множества
процессов, каждый из которых работает на своем процессоре и имеет свое адресное
пространство. Причем непосредственный доступ к памяти другого процесса невозможен,
а обмен данными между процессами происходит с помощью операций приема и посылки
сообщений. То есть процесс, который должен получить данные, вызывает операцию
Receive (принять сообщение), и указывает, от какого именно процесса он должен
получить данные, а процесс, который должен передать данные другому, вызывает
операцию Send (послать сообщение) и указывает, какому именно процессу нужно
передать эти данные. Эта модель реализована с помощью стандартного интерфейса MPI.
Существует несколько реализаций MPI, в том числе бесплатные и коммерческие,
переносимые и ориентированные на конкретную коммуникационную сеть.
Как правило, MPI-программы построены по модели SPMD (одна программа -
много данных), то есть для всех процессов имеется только один код программы, а
различные процессы хранят различные данные и выполняют свои действия в зависимости
от порядкового номера процесса.
Как оценить и улучшить качество распараллеливания?
Для ускорения работы параллельных программ стоит принять меры для снижения
накладных расходов на синхронизацию и обмены данными. Возможно, приемлемым
подходом окажется совмещение асинхронных пересылок и вычислений. Для исключения
простоя отдельных процессоров нужно наиболее равномерно распределить вычисления
между процессами, причем в некоторых случаях может понадобиться динамическая
балансировка.
Важным показателем, который говорит о том, эффективно ли в программе
реализован параллелизм, является загрузка вычислительных узлов, на которых работает
программа. Если загрузка на всех или на части узлов далека от 100% - значит, программа
неэффективно использует вычислительные ресурсы, т.е. создает большие накладные
расходы на обмены данными или неравномерно распределяет вычисления между
процессами. Пользователи НИВЦ МГУ могут посмотреть загрузку через веб-интерфейс
для просмотра состояния узлов.
В некоторых случаях для того, чтобы понять, в чем причина низкой
производительности программы и какие именно места в программе необходимо
модифицировать, чтобы добиться увеличения производительности, имеет смысл
использовать специальные средства анализа производительности - профилировщики и
трассировщики.