![]() |
Здравствуйте, Гость |
0 |
|||||||||
| корзина | home | профайл | поиск | подписка | книга | контакты | |||||
|
Параллельные системы, их создание и применение23.06.2003
А. Кильпио, П. Кайгородов
Введение Рано или поздно, все пользователи персональных компьютеров сталкиваются с нехваткой производительности. Недостаточно быстрая реакция на сигналы клавиатуры и мыши могут вывести из себя кого угодно. Так что не удивительно, что пользователи сравнительно легко готовы тратить суммы порядка 1000$ на покупку более быстрого процессора, дополнительную память, графические ускорители и прочие компоненты, широко представленные на рынке. Как правило, пользователь всегда может найти решение, подходящее ему по производительности. Несколько по иному обстоят дела у тех, кто занят обслуживанием крупных web-серверов, баз данных, файловых архивов. Производительности даже самых мощных персоналок как правило не хватает для обеспечения должного качества обслуживания. Кроме того, надежность даже для самых лучших "ширпотребовских" компонентов оставляет желать лучшего. Выходом в данном случае является покупка специализированных решений от SUN, HP, IBM и других производителей. Стоимость таких систем может составлять десятки и сотни тысяч долларов, в добавок необходимо нанять для их обслуживания грамотный персонал -- программистов, техников, системных администраторов, обеспечить надежное электропитание, охлаждение и прочие условия. А если со временем потребность в вычислительных ресурсах возрастет, необходимо будет озаботиться весьма недешевой модернизацией или покупкой новой системы.
Тем не менее, практически у любого ученого занимающегося расчетами, есть задачи, для обработки которых требуются большие вычислительные ресурсы. Получить доступ к крупным вычислительным машинам очень трудно, как по финансовым причинам, так и по причине сильной их загрузки. Даже если и удается иногда выбить вожделенные машинные часы, большую их часть приходится бесплодно потратить на отладку программы и оптимизацию ее для выполнения на данной конкретной архитектуре. Параллельные архитектуры и методика выбор средств решения поставленной задачи. С точки зрения пользователя, идеальный компьютер должен обладать следующими свойствами:
В погоне за идеалом было разработано множество различных аппаратных решений. Рассмотрим наиболее удачные из них. Симметричные (SMP) системы: Состоят из двух или более процессоров, единого массива оперативной памяти и набора устройств ввода-вывода (картинка). Каждый процессор может свободно оперировать любыми данными находящимися в оперативной памяти, что делает все процессоры равноправными а систему симметричной. К достоинствам SMP можно отнести сравнительную простоту программирования, что позволяет адаптировать для них множество программ, используя сравнительно простые приемы. К сожалению, для получения высокой производительности, программист должен соблюдать ряд условий, например постараться исключить одновременное обращение двух или более процессоров к одной области памяти, так как при этом возникают слишком большие накладные расходы на аппаратное поддержание "когерентности кэшей" процессоров. Вдобавок, во многих SMP системах процессоры и память соединены общей шиной, пропускной способности которой зачастую едва хватает для обеспечения нужд одного процессора. Не трудно догадаться, как будут себя чувствовать 2, 4, 8 или большее их количество при одновременной работе. Все это, плюс плохая масштабируемость (очень трудно соединить в SMP более 16 процессоров без применения различных технических ухищрений) делают SMP-системы малопригодными для действительно крупных задач. Массивно-параллельные (MPP) системы (кластеры): Состоят из множества так называемых "узлов". В общем случае, каждый узел содержит процессор, собственную память и (возможно) устройства хранения информации (диск). Все узлы объединены в локальную сеть, так что могут достаточно быстро взаимодействовать друг с другом (картинка). В качестве узлов можно использовать практически любые компьютеры, в том числе и SMP-системы. Наиболее дешевые кластеры можно строить даже на базе персональных компьютеров, которые в большинстве учреждений все равно простаивают в ночное время. Единственным необходимым условием является объединение узлов надежной высокопроизводительной сетью передачи данных. В качестве таковой можно использовать (в зависимости от потребностей) как дешевые системы на базе Ethernet и FastEthernet, так и более дорогие и
высокопроизводительные сети Gigabit Ethernet, Myrinet, SCI и пр.
При выборе кластера следует прежде всего очертить класс задач, которые на нем будут решаться. Обычно задачи можно разделить на два типа -- вычислительные задачи и задачи массового обслуживания. К задачам массового обслуживания можно отнести все задачи, где критично время отклика системы на внешние запросы. Например, web-сервер, сервер баз данных, файловый сервер и пр. Для большинства из них могут быть применимы кластеры. Помимо высокой производительности при этом часто многократно повышается устойчивость системы к сбоям.
Для вычислительных задач, требования несколько иные. Здесь главную роль играет пропускная способность сети и ее латентность (задержки прохождения пакетов). Хорошо заранее определить объемы передачи данных и частоту взаимодействий. Если один вычислительный шаг вашей задачи длится 10 секунд, после чего каждый процессор обменивается с двумя другими массивами данных размером в 1 мегабайт, то при пропускной способности сети 10 мегабит (обычный Ethernet), задержки составят ~4 секунд (так как надо и послать и принять данные), либо ~2 секунды если связь дуплексная (см. ниже -- обсуждение аппаратной части кластеров). При этом результирующая производительность составит соответственно 60 или 80% от пиковой. При использовании FastEthernet (100 мегабит), задержки составят соответственно ~0.4 и ~0.2 секунды, а производительность -- 96 или 98%. Однако, если время обработки данных между обменами составляет 0.1 секунды, то потери даже при использовании FastEthernet составят более 60-80 процентов времени. При этом уже следует задуматься о применении более высокопроизводительной сети, например Myrinet. Часто можно встретить заблуждение, что только использование суперкомпьютера может само по себе дать прирост производительности. Это не верно. Если ваша задача не имеет внутреннего параллелизма и не адаптирована соответствующим образом, максимум, что вы можете получить от кластера -- это запуск на выполнение нескольких экземпляров программы одновременно, работающих с различными начальными данными. Это не ускорит выполнение одной конкретной программы, но позволит сэкономить много времени, если необходимо посчитать множество вариантов за ограниченное время. Можно привести следующую аналогию: один корабль переплывает море за 7 дней, но семь кораблей не смогут переплыть море за день. За то, они смогут перевезти за неделю в 7раз больше груза. Если объемы вашей задачи таковы, что только один прогон на однопроцессорной машине может длиться сутками, неделями и месяцами, то очевидно, следует приложить усилия по адаптации алгоритма. Следует разделить задачу на несколько (по числу процессоров) более мелких подзадач, которые могут выполняться независимо, а в тех местах, где независимое выполнение невозможно, явно вызывать процедуры синхронизации, для обмена данными через сеть. Например, если вы обрабатываете большой массив данных, то разумно будет разделить его на области и распределить их по процессорам, обеспечив равномерную загрузку всего кластера. Из вышеизложенного ясно, что выбор аппаратного и программного обеспечения
кластера следует начать "сверху" -- первым делом выяснить круг задач, исходя из него подобрать приложения их решающие, выбрать операционную систему, под которой данные приложения могут работать, подобрать аппаратную часть, подходящую для всех вышеперечисленных программных средств. Только после этого следует приступать к закупке всего необходимого, сборке и наладке системы. Как правило, выбор приложений решающих ваши задачи будет невелик. Еще до закупки полезно будет связаться с разработчиками, обсудить возможность применения их продукта на кластере, необходимые аппаратные ресурсы, тип и настройки операционной системы, другие технические вопросы. После этого вы уже будете иметь четкое представление о том, что именно вам потребуется, оценить стоимость и характеристики системы и написать техническое задание.
Если вы успешно прошли все эти этапы, больших вопросов о типе аппаратного обеспечения у вас уже быть не должно. Тем не менее, если вы собираетесь самостоятельно разрабатывать приложения для своего кластера, вам необходимо
озаботиться подбором подходящих средств разработки. Например, если вы собираетесь использовать процессоры Intel, то лучшим выбором будет разработанные Intel компиляторы с языков C/C++/Fortran95 (доступны бесплатно для некоммерческого использования в версии Linux), либо компиляторы от Portland Group (С/С++/Fortran90/HPF). Для процессоров DEC Alpha (ныне принадлежит HP) наиболее продвинутыми являются компиляторы от Compaq (тоже доступные для Linux бесплатно). Для процессоров других типов (PPC, SUN и пр.) тоже существуют специализированные компиляторы, позволяющие выжимать из них максимально возможную производительность. Однако, даже если вам не удалось достать "родные" компиляторы, вы можете использовать свободно распространяемые компиляторы серии gcc (Gnu Compiller Collection), которые поддерживают большинство современных аппаратных и программных платформ и поставляются практически со всеми дистрибутивами Linux и Unix.
При выборе операционной системы следует основываться прежде всего на рекомендациях разработчиков программного обеспечения. Однако, если есть выбор, то при прочих равных условиях следует отдать предпочтение Linux.
Отдельного рассмотрения заслуживает система запуска задач. Если кластером будут пользоваться большое количество людей, необходимо организовать автоматическое распределение заданий между свободными процессорами. Если на момент запуска задания нет нужного количества свободных процессоров, необходимо отложить запуск задачи до их освобождения, организовать очередь заданий. Выбор аппаратной платформы Выбор аппаратной платформы - важнейший шаг. Очень просто сэкономить в начале, но очень нелегко бороться с капризным железом потом. Один компьютер, стоящий на рабочем столе под вечным приглядом неутомимого пользователя – не проблема. Все огрехи и глюки ловятся быстро и более или менее своевременно исправляются. Другое дело, когда машин не одна и не две, а несколько десятков. Неотлучно при них находиться никто не будет, поэтому, даже предоставленные сами себе, они должны работать безупречно. Ну, или почти безупречно. Компоненты, из которых собирается кластер, должны изначально считаться надежными. Еще один важный фактор - в узлах кластера не должно быть ничего лишнего. Во-первых, каждый лишний десяток долларов, помноженный на число узлов, выльется в круглую сумму, а во-вторых, чем сложнее
система, тем ниже по определению ее надежность. Наличие интегрированных компонентов на системной плате в виде звуковой платы или RAID-контроллера вам не
пригодится, хотя встроенная графическая плата может оказаться хорошим решением. Интегрированный сетевой контроллер, скорее всего, также окажется ненужным. Почему? Об этом чуть ниже.
В зависимости от обстоятельств вам может потребоваться установить в помещении деувлажнитель или фильтр воздуха. Высокая влажность или пыль, которые в обычной ситуации выведут из строя один компьютер, в помещении, где находится кластер, могут причинить значительный ущерб. Температурный контроль. Практически все современные системные платы имеют средства мониторинга температуры процессора и воздуха внутри системного блока. Не стоит пренебрегать этой возможностью. Своевременная диагностика поможет не только отключить кластер в случае тотального перегрева узлов из-за выхода из строя кондиционера, но и помочь обнаружить испортившийся вентилятор в одном из многочисленных системных блоков. Существует множество программ для разных операционных систем, с тем или иным успехом справляющихся с этой задачей. Электропитание. Конечно же, питание должно быть бесперебойным. Обеспечить бесперебойное питание можно при помощи одного матричного ИБП, обслуживающего весь кластер, либо с помощью отдельных источников бесперебойного питания, к которым подключено по нескольку узлов. Устанавливать матричный ИБП становится экономически выгодно только при достаточно большом числе узлов, так что для пары десятков компьютеров, соединенных в кластер, подойдут и отдельные ИБП. Рассчитывая мощность ИБП следует, во-первых, определить, в течение какого времени кластер должен работать в случае пропадания напряжения, а во-вторых, необходимо помнить что Ватты и Вольт-Амперы – не одно и тоже. Для поддержки работы четырех узлов в течение 15-20 минут должно хватить ИБП мощностью 1000 ВА. Выбирая ИБП, следует позаботиться и о том, чтобы он вовремя мог предупредить операционную систему об отсутствии напряжения питания в сети, чтобы система смогла корректно завершить все задачи, прежде чем иссякнет энергия аккумуляторов ИБП, если напряжение так и не появится. Качественный ИБП - еще и залог долгой жизни всех аппаратных компонентов кластера. Сигнализация. Большое количество дорогой техники в небольшом помещении -- чем не лакомый кусок для вора? Конечно же, стоит позаботиться о надежной охране своего сокровища. В небольшом помещении есть и свои плюсы - обеспечить его охрану проще, чем множества компьютеров, разбросанных по разным местам. Стандартные средства охраны помещений вполне подойдут для кластера. Не стоит ими пренебрегать! Постарайтесь также сократить число сотрудников, имеющих доступ к помещению, где находится кластер. Узлы можно опечатать или опломбировать. Конечно, пропажу целого компьютера легко обнаружить. Однако в течение долгого времени вы можете и не замечать, что объем оперативной памяти во всех узлах кластера уменьшился, по непонятной причине, ровно наполовину!
Ссылки по теме
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||