Как обещал, выкладываю статью 2000 года, публиковавшуюся двух первых январских номерах минского научно-популярного журнала. Не утверждаю, что она полностью верна на тот момент и уж тем более на сегодняшний, но раз обещал -- вот она. К сожалению, я не уверен, что это самый последний вариант, но альтернатива -- только набирать снова или отсканировать два журнала
Суперкомпьютерные системы
"Суперкомпьютер
–
это устройство, сводящее проблему
вычислений
к проблеме ввода/вывода" (c) Ken Batcher
(шутка
из USENET
news:comp.parallel).
Суперкомпьютеры –
кто это?
На
самом деле, пожалуй, нет точного
определения, что же
такое
суперкомпьютер. Понятно, что классу
супер-ЭВМ
принадлежат
лишь те компьютеры, которые имеют
максимальную
производительность
в настоящее время. Сегодняшние
персоналки
соизмеримы по вычислительной мощности
с
суперкомпьютерами
70-х.
Однако
развитие вычислительной техники сегодня
просто
стремительно
-- вспомните закон Мура. Возможно, неким
критерием
мощности можно
считать
границу, установленную
правительством
США. На сегодняшний день для стран
третьей категории (сюда
входят Россия,
Китай, Индия и Пакистан) не требуется
лицензирования компьютеров с
быстродействием до 2 тысяч
MTOPS.
Экспорт
компьютеров производительностью от 2
до 7 тысяч
MTOPS требует
от поставщика "уведомления и
консультаций"
с министерством
торговли.
Поставка
компьютеров с быстродействием свыше 7
тысяч MTOPS невозможна без получения
экспортной
лицензии
(правда, в
последнее время в прессе мелькали
сообщения о
намерении
повысить планку до 12300 MTOPS).
Здесь
требуются некоторые пояснения по поводу
единиц измерения:
-
MTOPS – число
теоретических операций в секунду;
-
MIPS --
миллион команд в секунду;
-
MFLOPS
–
миллион
чисел-результатов вычислений с плавающей
точкой в
секунду, или миллион элементарных
арифметических
операций над
числами с плавающей точкой, выполненных
в секунду.
Этот термин требует особого пояснения,
поскольку он является
одним из
основных показателей. Единица измерения
MFLOPS предназначена для оценки
производительности только
операций с
плавающей точкой и поэтому неприменима
вне этой области. Однако при решении
научно-технических задач именно этот
показатель является наиболее существенным.
Одним
из основных тестов, определяющих
производительность системы, является
LINPACK – пакет фортран-программ для решения
систем линейных алгебраических уравнений.
Алгоритмы линейной алгебры весьма
широко используются в самых разных
задачах, поэтому измерение производительности
на LINPACK представляет интерес для многих
пользователей. Сведения о производительности
различных машин на пакете LINPACK публикуются
сотрудниками Аргоннской национальной
лаборатории (США) Jack Dongarra, Hans Meuer и Erich
Strohmaie и периодически обновляются.
Таким
образом и формируется так называемый
Top500 (http://www.top500.org/) – список 500 самых
мощных компьютеров мира, компиляцией
которого указанные авторы занимаются.
Итак, на первую половину 1999 года (10 июня
1999 года) -- это первая десятка:
-
2121,3
GFLOPs (максимально полученная
производительность по тесту LINPACK) –
Intel ASCI Red Sandia National Labs
(http://www.sandia.gov/ASCI/Red.htm), США, 1999. Кстати, это
первый в мире компьютер, преодолевший
планку в 1 TFLOPS (1068 GFLOPS, 1997 год);
-
1608 GFLOPs – SGI ASCI Blue Mountain Los Alamos National Laboratory
(http://www.lanl.gov/Internal/projects/asci/bluemtn/bluemtn.html),
США, 1998;
-
891,5 GFLOPs –
SGI T3E1200
– Правительство
США,
1998;
-
873,6 GFLOPs –
Hitachi SR8000/128 –
Токийский Университет
(http://www.cc.u-tokyo.ac.jp/), Япония, 1999;
-
815,1
GFLOPs –
SGI T3E900 –
Правительство США,
1997;
-
690,9 GFLOPs –
SGI ORIGIN 2000 Los Alamos National Laboratory/ACL
(http://server.acl.lanl.gov/),США, 1999
-
552,92
GFLOPs –
SGI T3E900 –
United Kingdom Meteorological Office Bracknell
(http://www.met-office.gov.uk/),
Великобритания, 1997;
-
547
GFLOPs –
IBM SP Silver –
IBM
(http://www.ibm.com/),
США,
1998;
-
515,1
GFLOPs –
SGI T3E900 Naval Oceanographic Office (NAVOCEANO)
(http://www.navo.hpc.mil/),
США, 1999;
-
509,9
GFLOPs –
SGI T3E1200 –
UK Centre for
Science (http://www.csar.cfs.ac.uk/),
Великобритания,
1998.
Здесь
можно отметить лидерство компании
SGI/Cray. Так, в первой десятке списка
компьютерам SGI принадлежит 7 мест, в
двадцатке – 14 мест, а в первых 50-ти
позициях SGI занимает 31 место.
Первое
место среди них принадлежит системе
SGI ASCI Blue Mountain c производительностью 1,6
TFLOPS, содержащей 5040 микропроцессоров
R10000 с тактовой частотой 200 МГц.
Установленные
в России суперкомпьютеры пока не попали
в список 500 мощнейших. Что же у нас? Вот
первая десятка по данным Лаборатории
параллельных информационных технологий
научно-исследовательского вычислительного
центра Московского государственного
университета им.М.В.Ломоносова:
-
Межведомственный Суперкомпьютерный
Центр (http://www.jscc.ru/) – HP 9000 V-class –15360 MFLOPs;
-
Институт высокопроизводительных
вычислений и баз данных (http://www.csa.ru/) –
Parsytec CCe – 12000 MFLOPs;
-
Институт прикладной математики им М.В.
Келдыша РАН (http://www.keldysh.ru/) – HP 9000 S-class –
11520 MFLOPs;
-
Институт математического моделирования
РАН (http://imamod.ru) – Parsytec CC – 6400 MFLOPs;
-
Институт
проблем химической физики РАН
(http://www.icp.ac.ru/)
– SNI RM600 E60 –
6400 MFLOPs;
-
Объединенный
институт ядерных исследований
(http://www.jinr.dubna.su) – HP 9000 S-class –
5760 MFLOPs;
-
Институт
высокопроизводительных вычислений и
баз данных (http://www.csa.ru/)
– Parsytec CC/PP –
4800 MFLOPs;
-
Институт
высокопроизводительных вычислений и
баз данных (http://www.csa.ru/) – Parsytec PowerMouse –
4800 MFLOPs;
-
Институт
физики высоких энергий (http://www.ihep.su)
– DEC AlphaServer
8200 –
3600 MFLOPs;
-
Институт
проблем химической физики РАН
(http://www.icp.ac.ru/)
– SNI RM600 E20 –
3200 MFLOPs;
Суперкомпьютеры
– что это?
В
принципе, на сегодняшний день можно
выделить следующие
основные
группы суперкомпьютеров -- векторные,
параллельные
и их комбинации.
Векторные
Несколько
лет назад векторные суперкомпьютеры
были очень популярны.
Рассмотрим
векторный суперкомпьютер на примере
системы Convex C-3440:
- 4
векторных процессора;
- 1
процессор ввода-вывода;
-
объем физической памяти – 512 Мб;
-
объем виртуальной памяти до – 4 Гб;
-
объем памяти на жестких дисках – 4,5 Гб;
-
9-дорожечный накопитель на магнитной
ленте;
-
Ethernet (10 Мбит/сек) – интерфейс;
-
DAS FDDI (100 Мбит/сек) – интерфейс;
-
16-канальный мультиплексор.
Пиковая
производительность этого суперкомпьютера
– 800 МFLOPs.
Основной
выигрыш достигается за счет использования
векторного процессора. В отличие от
обычного, он имеет 128 (сто двадцать
восемь) 8-байтных регистров, и за один
такт может сложить один вектор с другим,
просуммировать, умножить и т.д.
На
тестовых задачах производительность
потрясающая, но когда дело доходит до
реальных задач, все несколько хуже.
Реально мы получали выигрыш на задачах
газодинамики в 1,5...2 раза.
Для
использования векторной архитектуры
языки программирования в данной машине
имели специальные директивы, предписывающие
компилятору преобразовать тот или иной
участок программы в векторный код. При
этом оптимизация может касаться лишь
циклов, причем тех, в теле которых нет
вызовов других функций (кроме inline),
операторов ветвления и пр. Это довольно
сильное ограничение, однако с компилятором
поставляются математические бибиотеки,
уже оптимизированные под векторный
процессор.
Параллельные
Паралллельные
компьютеры можно разделить на две
основные группы:
-
MPP -- компьютеры с моделью разделенной
памяти;
-
SMP -- компьютеры с моделью общей памяти.
Существует
также нечто среднее между SMP и MPP. Это
так называемые NUMA-архитектуры. У них
память физически распределена, но
логически общедоступна.
Следует
также выделить кластерные системы,
которые являются более дешевым вариантом
MPP, а также векторно-конвейерные,
архитектурно представляющие собой
гибрид векторных (конвейерных) и
параллельных систем. Они называются
PVP-системы. В этих системах, в свою очередь
также возможно использование модели
общей или распределенной памяти.
Массивно-параллельные
системы (MPP)
Архитектурно
система состоит из однородных
вычислительных узлов, включающих
(минимально):
-
один или несколько центральных
процессоров;
-
оперативную память (прямой доступ к
памяти других узлов невозможен);
-
сетевой адаптер (коммуникационный
процессор).
Яркий
пример такой архитектуры – лидер Top500
– SGI/CRAY T3E.
Существуют
два основных варианта установки
операционной системы:
-
полная ОС работает только на главной
машине, а на каждом узле работает
облегченная версия операционной
системы, которая обеспечивает работу
ветви параллельного приложения (Cray
T3E);
- на
каждом узле работает ОС (чаще всего
вариант UNIX), например IBM RS/6000 SP под
управлением ОС IBM AIX.
Программирование
для таких систем производится в рамках
модели передачи сообщений (MPI, PVM, BSPlib).
Симметричные
мультипроцессорные системы (SMP)
Архитектурно
система состоит из нескольких однородных
процессоров
и блока общей памяти (который, в свою
очередь,
аппаратно
может состоять из
нескольких
блоков меньшего
размера).
Процессоры подключаются к памяти при
помощи общей шины
(2...4 процессорные)
или при помощи коммутатора (например,
серверы на базе процессоров Intel –
IBM, HP, Compaq и
пр..)
Такой
компьютер обычно работает под управлением
единой ОС
(UNIX –
для процессоров
Alpha или Intel – для Windows NT).
ОС
в таких системах автоматически
распределяет процессы по CPU
(если не
затребовано явное распределение).
Наиболее близким аналогом SMP можно
считать двухпроцессорные PC под управлением
WinNT. Программирование для таких систем
производится в рамках модели общей
памяти. Используются интерфейсы WinAPI
threads, POSIX threads или специальные средства,
например OpenMP. Модель общей памяти
позволяет строить разработчикам
компиляторов достаточно эффективные
средства автоматической оптимизации
под такую архитектуру.
Системы
с неоднородным доступом к памяти (NUMA)
Архитектурно
такая система состоит из однородных
базовых модулей, которые, в свою очередь,
состоят из небольшого числа процессоров
и блока памяти. Эти модули объединяют
при помощи коммутатора в единый комплекс,
в котором аппаратно поддерживается
единое адресное пространство (например
SGI Origin2000, Sun HPC 10000). Такой компьютер обычно
работает под управлением единой ОС.
Однако существуют варианты, когда
отдельные узлы работают под управлением
"различных" операционных систем.
Так, например, в NUMA-Q 2000
(http://www.sequent.com/products/highend_srv/numa.html) различные
части работают под управлением WinNT и
Unix.
Параллельные
векторные системы (PVP)
Основным
отличием таких систем является наличие
векторных процессоров (см. ранее) в узлах
параллельной архитектуры. Реально это
новый виток развития векторных компьютеров
– гибрид векторного и параллельного
подходов. Сейчас такие системы получают
всё большее распространение.
Обычно
архитектура таких суперкомпьютеров
представляет собой объединение нескольких
векторных узлов (1...8 процессоров,
работающих в модели общей памяти) в один
компьютер при помощи высокоскоростного
коммутатора (здесь просматривается
аналогия с MPP). Так реализованы системы
NEC SX-4/SX-5, Fujitsu VPP.
Остановимся
теперь подробнее на следующем типе –
кластерных систем (суперкомпьютер-конструктор
"сделай сам").
Архитектурно
узлы таких систем представляют собой
рабочие станции или просто персональные
компьютеры. Связи узлов осуществляются
при помощи стандартной сетевой технологии
(например Ethernet). При такой реализации
системы в кластере могут участвовать
компьютеры разной мощности или разной
архитектуры. В этом случае их называют
гетерогенными кластерами (например
NT-кластер в NCSA, Beowulf-кластеры). В качестве
ОС чаще всего используются Linux/FreeBSD или
Windows NT вместе со специальными средствами
поддержки параллельного программирования
и распределения нагрузки.
Программирование
в кластерах аналогично MPP (чаще всего
используется MPI или PVM), однако рамки
применения таких систем сильно ограничены.
Одна из причин – сравнительно малый
объем памяти, доступный одному узлу.
Кроме того, передача больших объемов
данных между узлами может вести к потере
производительности из-за низкой
пропускной способности сети.
Следует
отметить низкую стоимость подобных
систем. Сейчас практически любая
лаборатория, имея несколько ПК,
объединенных в сеть, может построить
такую систему для решения сложных задач.
При этом возможно построение "виртуального"
кластера – т.е. кластера, узлы которого
могут одновременно использоваться и
как рабочие станции. Например, использование
пакета WinMPI (http://dsg.dei.uc.pt/wmpi/intro.html) позволяет
создать кластер на базе компьютеров
под управлением Windows 95/98/NT, не внося
существенных изменений в систему. Данный
пакет берет на себя функции распределения
подпроцессов в сети и обмена данными
между узлами. Кстати сказать, не так
давно (год-полтора назад) в США был
скандал, связанный с экспортными
ограничениями на суперкомпьютеры.
Объектом разбирательства стала как раз
система класса Beowulf (см. ниже), собранная
на базе процессоров PII-400 и работающая
под управлением операционной системы
Red Hat 4.5. Как оказалось, система, состоящая
из 15 машин, уже легко преодолевала
установленный барьер производительности.
Однако после судебного разбирательства
ограничения на эту систему были сняты.
В
качестве примера рассмотрим NT-кластер
системы NCSA (1998 г.)
http://access.ncsa.uiuc.edu/News/980407.Compaq.html. Кластер
состоит из 128 двухпроцессорных машин с
процессорами Intel. Используются компьютеры
двух типов – Compaq Professional Workstation 6000 model
(Pentium II/333MHz) и HP Kayak XU PC workstation (Pentium
II/300MHz). Для связи используется сетевое
оборудование Myrinet компании Myricom. Система
работает под управлением пакета HPVM
(Illinois High Performance Virtual Machine)
(http://www-csag.cs.uiuc.edu/projects/hpvm.html), включающего
в себя реализацию MPI.
Beowulf
В
1994 г. в Center of Excellence in Space Data and Information
Sciences (http://cesdis.gsfc.nasa.gov/) – подразделении
NASA – Томас Стерлинг и Дон Беккер построили
кластерную систему, состоящую из
шестнадцати процессоров класса i486DX4,
соединенных посредством сети Ethernet. Этот
проект получил название Beowulf
(http://www.beowulf.org/gallery/wiglaf.jpg).
В
1998 г. в Лос-Аламосской национальной
лаборатории Michael Warren с коллегами
построили суперкомпьютер Avalon
(http://cnls.lanl.gov/avalon/). Этот компьютер
представляет собой Linux-кластер на базе
процессоров DEC Alpha/533MHz (140 процессоров).
Его производительность по LINPACK – 48,6
GFLOPS, что позволило ему занять 160-е место
в Top500 (рядом с 152-процессорной системой
IBM SP2).
Из
наших аналогичных систем можно отметить,
например, проект Паритет
(http://www.csa.ru/CSA/MICRO/mikro1.htmr).
Конфигурация
отдельного узла этого проекта:
-
процессоры: 2 x Intel Pentium II (450 МГц);
-
HDD – 10 Гб (Ultra Wide SCSI);
-
RAM -- 512 Мб.
Конфигурация
всей системы:
-
процессоры – 8 x Intel Pentium II (450 МГц);
-
суммарный объем дискового пространства
-- 40 Гб (Ultra Wide SCSI);
-
суммарный объем оперативной памяти –
2048 Мб.
Каждый
узел снабжен двумя сетевыми интерфейсами
– адаптером Fast Ethernet и адаптером Myrinet.
Кроме того, входной узел системы имеет
дополнительную сетевую карту,
обеспечивающую доступ во внешнюю сеть.
Пиковая производительность – 3,2
GFLOP/сек.
Следует
сказать, что кроме Beowulf существуют и
другие интересные кластерные проекты,
например Condor (http://www.cs.wisc.edu/condor/), позволяющий
использовать простаивающие рабочие
станции, или Berkeley NOW (Network Of Workstations)
(http://now.cs.berkeley.edu/) – технология аналогичная
Beowulf, разработаная в университете Беркли.
На этом кластере, состоящем из100 рабочих
станций на процессорах UltraSPARC, была
достигнута производительность в 10
GFLOPS (1997 г.).
Об
этих и других технологиях можно прочитать
на сайте Лаборатории параллельных
информационных технологий
научно-исследовательского вычислительного
центра Московского государственного
университета им.М.В.Ломоносова
(http://parallel.srcc.msu.su).
Языки
и интерфейсы программирования
Рассмотрим
средства написания параллельных
программ. Их условно можно разделить
на две группы:
-
специальные языки или расширения
существующих, в конструкцию которых
введены операторы, предназначенные для
распараллеливания программ;
-
библиотеки (интерфейсы), позволяющие
эффективно распараллеливать программу
при использовании стандартных языков
программирования.
Обычно
производитель той или иной суперкомпьютерной
системы предоставляет соответствующие
средства для конкретной платформы. Это,
например, система Parix на компьютерах
компании Parsytec или управляющие директивы
для компилятора на векторных компьютерах
компании Convex. Однако очевидно, что
использование средств, ориентированных
на конкретную платформу, затрудняет, а
подчас делает невозможным перенос
программы на другой компьютер.
Существует
довольно много специальных языков
программирования, ориентированных на
параллельные компьютеры. Среди них
хотелось бы отметить:
-
Ada (Ada-95) – официальный язык программирования
министерства обороны США;
-
Modula-3 –
наследник
Modula-2 и Pascal;
-
Fortran 90,95 –
развитие
языка Fortran 77. Fortran 90 включает в себя
возможность оптимизации (с использованием
векторной и параллельной архитектур)
работы с массивами, а в Fortran 95 включены
средства для оптимизации циклов и еще
некоторые усовершенствования;
-
HPF – усовершенствование языка Fortran 90. В
него включены средства (часть как --
операторы и функции языка, часть – как
директивы компилятора) для распределения
данных по процессорам. Этот язык успешно
развивается – на сегодняшний день
существует версия 2.0
(http://www.crpc.rice.edu/HPFF/versions/hpf2/hpf-v20/index.html);
-
HPC, HPC++ -- языки,
похожие на HPF, содержащие в основе C/C++.
Эти
и другие языки достаточно активно
применяются (особенно это касается
вариантов Fortran) в инженерных и научных
расчетах. Существует также и другой
путь – использование имеющихся языков
программирования с дополнительными
библиотеками. Этот подход, на мой взгляд,
имеет то преимущество, что, имея библиотеку
в версии для персонального компьютера,
можно отладить программу на рабочей
станции. Кроме того, используя директивы
условной компиляции, можно иметь в
рамках одного проекта две версии –
параллельную и обычную.
Рассмотрим
подробнее некоторые существующие
программные интерфейсы:
-
RPC – удаленный
вызов процедур. "В чистую" используется
редко, чаще служит основой для следующих
двух;
-
DCOM –
распределенная компонентная объектная
модель. Применима только на платформе
Windows NT. Позволяет создавать программу,
основанную на компонентах (программных
модулях), распределенных в сети и
запускаемых в адресном пространстве
другого компьютера;
-
CORBA – объектный
брокер запросов. Технология, во многом
аналогичная DCOM, но поддерживаемая
большим числом операционных систем.
Надо
отметить, что данные интерфейсы на
суперкомпьютерах пока применяются
очень редко. В инженерных и научных
расчетах большей популярностью пользуются
следующие:
-
PVM -- Parallel Virtual Machine. Это интерфейс, созданный
в рамках исследовательского проекта.
Достаточно прост и легок в освоении, но
и возможности его ограничены по сравнению
с MPI;
-
OpenMP -- стандарт для программирования в
модели общей памяти. Существуют библиотеки
OpenMP для Fortran и C/C++. В OpenMP организационно
входят спецификации набора директив
компилятора, процедур и переменных
среды;
-
MPI – Message passing interface (взаимодействие через
передачу сообщений). MPI предоставляет
программисту единый механизм взаимодействия
ветвей внутри параллельного приложения
независимо от машинной архитектуры
(однопроцессорные/многопроцессорные
с общей/раздельной памятью), взаимного
расположения ветвей (на одном процессоре/на
нескольких) и API операционной системы.
Кроме того, существуют библиотеки MPI
для Fortran и C/C++ и версии практически для
всех платформ и операционных систем
(коммерческие и свободные). Фактически,
на сегодняшний день это стандарт
параллельного программирования. MPI
быстро развивается – MPI-I был принят в
1997 г., и вот уже на подходе версия MPI-III.
Существует также большое количество
библиотек, базирующихся на MPI, например
P4 – библиотека,
состоящая из макросов и процедур,
которые
позволяют писать программы для компьютеров
с
распределенной
памятью, используя посылку сообщений
и эмуляцию общей памяти. Версии этой
библиотеки разработаны для Fortran и C/C++ и
практически для всех платформ.
При
написании статьи были использованы
материалы:
-
Института высокопроизводительных
вычислений и баз данных
(http://www.csa.ru);
-
Лаборатории параллельных информационных
технологий
научно-исследовательского
вычислительного центра Московского
государственного
университета им.М.В.Ломоносова
(http://parallel.srcc.msu.su)
-
Журнала ComputerWorld
(http://www.osp.ru/cw/)