Сложилось так, что представление о высокопроизводительных системах ассоциируется с кластерами, и действительно, в Top500 эта архитектура пока превалирует, однако, несмотря на количественный перевес, кластеры уступают как высшие места на подиуме, так и по суммарной мощности — чисто арифметически объединенные мощности всех кластеров против всех систем с массовым параллелизмом (Massively Parallel Processing, MPP) из списка Top500 соотносятся между собой примерно в пропорции 50:50, то есть средняя MPP-машина в пять раз мощнее среднего кластера. В чем секрет такого дисбаланса и можно ли напрямую сравнивать эти два архитектурных решения?

Вопрос с историей

Суперкомпьютинг вглубь и вширь

Несколько лет назад развитие суперкомпьютерных систем разделилось на два направления — элитное классическое и демократическое кластерное. Увлечение развитием вширь вполне оправданно: для целого ряда задач относительно дешевые кластерные решения являются оптимальными, но далеко не для всех.

Леонид Черняк

Своим хорошо известным риторическим вопросом: «Что лучше использовать для полевых работ — пару быков или 1024 цыпленка?» Сеймур Крей стремился показать очевидную ему абсурдность любых попыток конкуренции со стороны еще зарождавшегося класса многопроцесорных систем с созданными им векторными компьютерами. И правда, шел 1991 год, в существовавших на тот момент условиях ответ не вызывал сомнения — однозначно быки. Однако всего через несколько лет с появлением дешевых и производительных микропроцессоров ситуация радикально изменилась. Ошибочность позиции стала очевидной и Крею, который решил пересесть на цыплят, и только ранний уход помешал ему завершить собственный MPP-проект на процессорах Intel.

Прошло 20 лет, многопроцессорные высокопроизводительные системы уверенно взяли свое, преимущество оказалось на стороне цыплят, а теперь и муравьев (ядер). Но возник новый вопрос — «Как разумнее организовать совместную работу множества процессоров и ядер для получения общей мощности?». Теоретически на него можно дать несколько альтернативных ответов, каждый из которых соответствует определенному способу организации сообщества процессоров. Они различаются между собой по тому, как именно решается проблема совместного сосуществования множества процессоров, что по-английски очень точно называют всего одним словом — сoncurrency, а в русском такого слова нет. Такое сосуществование ошибочно переводят как «конкуренция», чуть лучше — как «параллелизм», но и это не точно, по-видимому, в данном контексте его стоило бы перевести как «совмещение во времени», или «совместное функционирование» различных компонентов одной системы, отразив таким образом тот факт, что оно шире, чем параллелизм.

Можно выделить четыре основных варианта решения проблемы сoncurrency, различающиеся по степени интеграции (рис. 1). Наиболее интегрированными являются (а) системы с общей памятью (Shared Memory), далее следуют (б) системы с когерентным кэшем и распределенной общей памятью (например, ccNUMA), еще дальше (в) — системы с мощными заказными сетями и завершают список (г) системы с коммерческими сетями. Чем выше степень интеграции, тем выше эффективность, и в то же время при слабой интеграции проще решаются задачи согласования и программирования параллельных вычислений.

Флопсы и лошадиные силы
Рис. 1. Четыре варианта решения проблемы concurrency

 

В некотором смысле Top500 рисует не вполне достоверную картину — рекордные показатели могут быть достигнуты за счет уникальных технологических решений, что дорого и сложно, а можно ограничиться использованием готовых коммерчески доступных модулей или «неразрабатываемых компонентов» (NonDevelopmental Item, NDI), этот путь не столь затратен и в ряде случаев эффективен. Вот так и наступила полоса всеобщей кластеризации, и теперь около 80% машин из списка Top500 очень похожи между собой.

Возможность продемонстрировать рекордные результаты при относительно скромных инвестициях вызывает у неспециалистов впечатление, будто «суперкомпьютер — это очень просто» (см. книжку HPC for Dummies) и что, скажем, преодоление экзафлопсного рубежа пусть и серьезная, но всего лишь инженерная проблема, в основном сводящаяся к решению энергетических проблем. Удивительно, но подобные суждения можно услышать от представителей серьезных организаций и в речах, произносимых с высоких трибун, что крайне опасно. Да, 13-е место «Ломоносова» в рейтинге Top500 (июнь 2011 года) заслуженно и вызывает уважение, и благодаря ему России принадлежит общее 12-е место по суммарной производительности в Top500. Однако эти успехи не дают достаточных оснований считать, что наша страна заняла подобающее ей место среди развитых стран, суперкомпьютерное пространство имеет большее число измерений, а ограничение национальной суперкомпьютерной программы России лишь кластерами означает пожизненное пребывание на вторых ролях. Но это не главное, невнимание к альтернативным архитектурам означает отказ от попыток решения фундаментальных задач науки. В этом контексте стоит вспомнить еще один, менее популярный афоризм Крея: «Кто угодно может построить быстрый процессор. Фокус в том, чтобы построить быструю систему». Сегодня его можно было бы переформулировать так: любой может построить формально производительную систему на основе кластеров, фокус в том, чтобы создать систему с большой мощностью, которую можно было бы эффективно использовать.

Флопсы и лошади

Причина описанных заблуждений легко объяснима — завышение оценки вызвано единственностью критерия, определяющего вхождение в Top500 за счет достижения максимальной производительности на одном тесте. Толковый словарь Ожегова приводит расхожее выражение: «Подходить ко всем с одной меркой или мерить всех одной меркой». Сравним единицу измерения мощности компьютеров, FLOPS, с хорошо известной единицей мощности — лошадиная сила. Возьмем три транспортных средства: туристический автобус, магистральный тягач для дальних перевозок и тягач для перемещения тяжелых грузов. Мощность двигателей у всех трех, выраженная в лошадиных силах, может быть одинаковой, но используется она по-разному. В среде суперкомпьютеров аналогом автобуса можно считать кластер, аналогом трейлера — системы MPP, а тягача — системы с разделяемой памятью. Автобус — средство общественного транспорта, в нем с хорошей скоростью и в прекрасных условиях едут 40-50 пассажиров; магистральный трейлер с чуть меньшей скоростью доставляет несколько десятков тонн общей массы, а тягач-тяжеловес может, пусть не столь быстро, перемещать грузы весом в сотни тонн. Не требующее профессионализма понимание очевидности разного предназначения и функциональности исключает объединение этих машин в один список и сравнение их по максимальной мощности двигателя. Даже начинающему автомобилисту ясно, что мощности двигателей достигаются различными способами, у форсированных — за счет высоких оборотов, но при этом моторесурс болидов "Формулы-1" составляет несколько часов, а у судовых дизелей той же мощности — за счет крутящего момента и низких оборотов — ресурс составляет сотни тысяч часов. Вывод — сравнение между собой двигателей внутреннего сгорания по мощности без учета функции лишено какого-либо смысла. А вот компьютеры все же сравнивают. Мало того, LINPACK не ко всем компьютерам применим, в частности к системам с общей памятью. Если продолжить двигательную аналогию, то мощность реактивных и ракетных двигателей не измеряется в лошадиных силах, ее нельзя измерить на валу, их главный показатель — тяга, а мощность в силах или в киловаттах можно оценить лишь косвенно.

 

Чем и как измеряется производительность?

Проблема оценки производительности параллельных суперкомпьютеров пока не имеет внятного решения. Еще в 1991 году Дэвид Бэйли опубликовал статью «Двенадцать способов задурить голову, представляя производительность параллельных компьютеров» (Twelve Ways to Fool the Masses When Giving Performance Results on Parallel Computers). За прошедшие двадцать лет количество способов, используемых в этом своеобразном жульничестве, только увеличилось. Более того, появились специалисты, компании и технологии, занятые тьюнингом, обеспечивающим компьютерным системам более высокие показатели на тестах, например встроенные в компиляторы модули, способные определить принадлежность задачи к тестам с тем, чтобы оптимизировать ее выполнение. Как ни странно, но до сих пор ни в одной стране мира нет хотя бы какой-либо правительственной организации, которая бы могла сертифицировать компьютеры по производительности (хотя такие попытки предпринимались).

На все про все существует канонизированный тест LINPACK, но и он сложился почти случайно, и во всем «виноват» Джек Донгарра, который признался в своих воспоминаниях: «Мы писали книгу и задумались, как создать у читателя представление о том, сколько времени потребуется для решения задачи на определенном компьютере». Исходным материалом для книги служила работа, выполненная в 70-е годы Донгаррой вместе с коллегами по Аргонской лаборатории, где они разрабатывали известную по сей день математическую библиотеку EISPACK, созданную на основе работ по численным методам программирования английского математика Джеймса Уилкинсона. Позже, в 1979 году, уже будучи сотрудником Университета штата Теннесси, Донгарра с соавторами собрал результаты тестирования в книгу, где в приложении были приведены сравнительные данные по 20 машинам. Чтобы получить их, и был создан тест LINPACK (LINear algebra PACKage), который решает плотно заполненную систему линейных алгебраических уравнений большой размерности методом исключения Гаусса с числами в формате с плавающей запятой двойной точности.

Критики упрекают LINPACK в недостатке системности, в том, что он переоценивает роль процессоров и кэш-памяти, но недооценивает роль системы коммутации. Донгарра согласен с этим и разработал более эффективный тест LAPACK (Linear Algebra PACKage), который пока массово не принят. Не получили всеобщего признания и альтернативные тесты: Livermore Loops, ScaLAPACK, NAS Parallel Benchmarks, Perfect Club, ParkBENCH, SLALOM, HINT и др.

В публикуемых таблицах Top500 приводятся два показателя — R-Peak и R-Max. Первый вычисляется как сумма производительности отдельных процессоров, то есть это теоретический предел максимально возможной мощности. Второй — измеренная мощность, а для автомобильной аналогии это «мощность на валу», составляющая 50-80% пиковой.

 

Как «пахать» на цыплятах?

Уверенность Крея в предпочтительности «тягловой силы» для сельхозработ объяснялась отсутствием в начале 90-х конкурентов его машинам в лице совершенно нового класса систем с массовым параллелизмом. Общим для всех модификаций MPP стала идея объединения узлов, являющихся автономными компьютерами, в один суперкомпьютер с использованием специально разработанных систем коммуникации (с двухмерной или трехмерной сетевой топологией, с многомерными торами и гиперкубами). Многие из компаний, создававших такие машины, после многообещающего начала канули в лету (Connection Machine, Thinking Machines, Kendall и nCUBE), но сама идея получила развитие.

Закон Мура поставил окончательную точку на быках, и победа цыплят оказалось неизбежной. Позже, с появлением многоядерных процессоров, их сменили муравьи, то есть отдельное процессорное ядро стало «транзистором современности». Теперь появилась возможность создавать компьютеры, заметно различающиеся по своей конструкции и функционалу.

 

Показательный пример

В конце 2009 года Росгидромет создал собственный Центр компетенции по высокопроизводительным вычислениям в приложении к метеорологии, для чего приобрел систему с общей памятью SGI Altix 4700 (1664 процессорных ядра Intel Itanium 2 9140М, память 6,6 Tбайт, производительность 11 TFLOPS) и кластер SGI Altix ICE (1408 процессорных ядер Intel Xeon е5440, память 2,8 Тбайт, производительность 16 TFLOPS). Такое сочетание интересно тем, что в нем, как в зеркале, отражаются две тенденции построения суперкомпьютеров — общая память и разделяемая память в каждом узле. В принятой системе измерений SGI Altix 4700 в полтора раза медленнее, но этот компьютер обошелся втрое дороже своего собрата, и он стоит того — на целом ряде реальных задач он показывает в несколько раз большую производительность и позволяет решать задачи, недоступные кластеру.

Совмещение двух типов компьютеров в одном вычислительном центре отражает две стороны одной медали высокопроизводительных вычислений: capability computing и capacity computing. Слова capability и capacity почти синонимы («мощный», «производительный», «с высокой пропускной способностью»), но есть оттенок — первое скорее качественное свойство, а второе — количественное. В компьютерах этих типов равная производительность достигается разными способами, в первом случае за счет свойств архитектуры, а во втором за счет количества ядер и их мощности. Справедливо будет еще раз провести сравнение с двумя типами автомобильных двигателей, имеющих одинаковую мощность. Грубо говоря, мощность на валу является произведением крутящего момента на число оборотов — низкооборотный двигатель грузовика (до 3 тыс. оборотов в минуту) и форсированный мотор спорткара (до 20 тыс. оборотов в минуту) могут развивать по 1000 лошадиных сил, при этом у них разные моментные характеристики: тяговитый двигатель грузовика обеспечивает перевозку десятков тонн груза, а гоночный мотор обеспечивает легкому экипажу высокую скорость и ускорение. Несмотря на равную мощность, поменять местами их нельзя. Примерно то же самое относится к двум типам суперкомпьютеров.

 

Два основных класса

Чтобы отличить тягачей-тяжеловозов от автобусов, профессор Калифорнийского университета в Беркли Сюзан Грэхем предложила термин сapability computing, в эту категорию попадают компьютеры с архитектурой MPP и разделяемой памятью, а «автобусы»-кластеры попадают в альтернативную категорию capacity computing (слову capability ближе «грузоподъемность», а слову capacity — «вместимость»). Иногда используют более точный термин High-End Capability Computing (HECC). Упрощенно говоря, все, что не есть кластеры, — это сapability computing, однако в каких-то случаях разрыв между двумя категориями может оказаться весьма условным (кластеры становятся все более производительными). Верхняя категория, High End Cluster, образована кластерами с меньшим числом мощных узлов и более быстрым интерконнектом. Нижняя, Low End Cluster, — с большим числом менее мощных узлов, объединенных доступным на рынке межсоединением. Первая сближается по своим возможностям с сapability computing.

Стимулом к созданию самых больших компьютеров является capability computing — машин, способных решать серьезные задачи, которые не могут быть решены иначе, или же решающих одну задачу за более короткий промежуток времени. Иначе говоря, capability computing обеспечивает решение качественно новых задач в условиях, когда необходимо обеспечить приемлемое время решения. Capacity computing предполагает использование всех ресурсов суперкомпьютера для одной задачи, в то время как системы класса capacity одновременно решают несколько задач. При создании систем capability computing вопрос экономичности не имеет первостепенного значения, и, наоборот, кластеры строятся прежде всего по экономическим мотивам.

Гигантские затраты из государственных бюджетов на capability computing (например, в самый мощный по состоянию на июнь 2011 года компьютер Fujtsu К computer было вложено более миллиарда долларов) оправдываются тем, что средства идут на стратегически важные цели — формирование научно-технического потенциала страны. Технологии компьютеров класса capability computing со временем мигрируют в коммерческий сектор, но с очень заметным отрывом по времени. Очевидно, что машины, представляющие сapability и capacity computing, в принципе нельзя сравнивать между собой.

Производительные кластеры

Джек Донгарра, сделавший больше всех для продвижения кластеров (ведь формируемые по его методике показатели вдохновляют тех, кто финансирует отрасль), высказался по поводу кластеров следующим образом: «До сих пор существует различие по областям применения между кластерами и их более интегрированными конкурентами. Кластеры в подавляющем большинстве используются для целей capacity computing, в то время как интегрированные машины решают задачи класса capability computing». Однако, например, создатели кластера «Ломоносов» считают, что кластеры имеют большой потенциал, а их суперкомпьютер попадает в категорию capability computing благодаря тому, что серверы-лезвия T-Blade 2 на процессорах Xeon X5570 в сочетании с межсоединением QDR Infiniband с пропускной способностью 40 Гбит/с спроектированы именно так, чтобы можно было закрыть зазор между системами capacity и capability computing. Они видят в «Ломоносове» более дешевую альтернативу системам MPP.

Собирать отдельные машины в кластеры стали прежде всего по соображениям надежности, первыми были кластеры высокой доступности (high availability), и много позже появились высокопроизводительные вычислительные кластеры (high performance computing cluster). Они приобрели популярность в исследовательском сообществе, поскольку открыли доступ к неведомым прежде вычислительным мощностям — вместе с ними появилась реальная альтернатива дорогим коммерческим серверам. Кластеры приобрели популярность в силу ряда преимуществ, среди которых и высокие показатели RAS (Reliability, Availability, Serviceability). Создание крупных кластеров, попадающих в верхушку Top500, экономически обосновано тем, что эксплуатировать одну большую конфигурацию с высокими суммарными R-Peak и R-Max выгоднее, чем множество маленьких, что, собственно, и служит обоснованием capacity computing — на большом автобусе обычно выгоднее возить пассажиров, чем на множестве маленьких.

В 1998 году в Институт проблем химической физики РАН в Черноголовке были поставлены три сервера компании Siemens Nixdorf, названные тогда «суперкомпьютерным вычислительным комплексом». Комплекс включал два сервера RM600 E20 (8 процессоров MIPS R10000) и сервер RM600 E60 (16 процессоров MIPS R10000), его суммарная производительность составляла 10 GFLOPS. Наибольшее восхищение принятие комплекса в эксплуатацию вызывало у руководства института, но научные сотрудники сетовали, что, будь средства в их руках, они бы сами собрали именно то, что требуется. Так были настроены ученые во всем мире, потому неудивительно, что с 1999 года крупные производители стали поддерживать Linux-кластеры, предназначенные для вычислений, способствовать формированию сообщества. Результаты не заставили себя ждать — на смену примитивным по технологическому уровню исполнения сетям из рабочих станций пришли промышленные изделия, способные составить реальную конкуренцию известным прежде классам компьютеров.

 

Флопсы и лошадиные силы
Рис. 2. Throughput Cluster

Сети рабочих станций можно рассматривать в качестве предтечи кластеров — их создание преследовало две цели: во-первых, получить большую совокупную мощность, во-вторых, использовать простаивающие ресурсы (idle cycle). Кластеры стали следующим шагом, но они имели несколько фундаментальных отличий:

  • все компьютеры, входящие в кластер, предназначены только для работы в кластере и уже не рассматриваются как отдельные станции;
  • сети рабочих станций строились на основе обычных локальных сетей, а сети, объединяющие узлы кластера, специализированы;
  • для управления кластером специально выделяется рабочее место.

Следующим шагом после сетей рабочих станций стали кластеры с высокой пропускной способностью (throughput cluster), решающие задачи capacity computing (рис. 2). Машины этого типа создаются для решения множества небольших задач, занимающих обычно 10-30% максимальной мощности. Здесь одной из важнейших становится задача планирования работ и диспетчеризации загрузки.

Развитие коммерческих сетей Infiniband и Ethernet позволяет адаптировать кластеры к решению более крупных задач и приблизиться к решению проблем capability computing (рис. 3).

 

Флопсы и лошадиные силы
Рис. 3. Capability Cluster

В capability cluster не система коммутации, а программное обеспечение распределяет нагрузку между узлами. Создание таких кластеров стимулировано тем, что стоимость сборки множества небольших серверов всегда оказывается существенно ниже, чем стоимость сервера архитектуры SMP или MPP с соответствующим числом процессоров, поскольку инфраструктура простая, то нет затрат на системные средства, определяющие высокую производительность. В данном случае решается дилемма, во что вкладывать средства, в программистов или в технологии коммутации. Если есть возможность вместить задачу в простой кластер и труд выполняющих эту работу программистов оценивается меньше стоимости железа и ПО, то надо использовать кластер, но есть очевидный предел того и другого. Границы развития гигантских одноуровневых архитектур устанавливают и закон Амдала, и технологическая возможность распределения задач по сотням тысяч узлов, если даже используются средства автоматизации.

MPP

Принятый перевод Massively Parallel Processor — «массивно-параллельная архитектура» — недостаточно дистанцирован от сложного термина parallel computing, переводимого и как «параллельные вычислительные системы», и как «параллельные вычисления». Точнее, MPP — лишь одна из альтернативных реализаций параллельных вычислительных систем, один из возможных подходов к параллельным вычислениям. Система MPP строится из отдельных модулей (узлов), содержащих процессор или процессоры с собственной локальный памятью, доступ к ней имеют только процессоры из этого же модуля. Модули соединяются в систему проприетарными (специальными, заказными) коммуникационными каналами. Число модулей может исчисляться сотнями тысяч. Каждый модуль работает под управлением собственной ОС.

От кластеров MPP отличаются заказной системой коммутации, объединяющей узлы. Общим для MPP и кластеров является взаимодействие узлов посредством обмена сообщениями. MPP — это одна машина с большим количеством тесно связанных процессоров, в то время как кластер — это множество машин, объединяемых в одну усилиями программистов. Архитектура MPP может реализовывать схемы SIMD (Single Instruction, Multiple Data) и MIMD (Multiple Instruction, Multiple Data). В первом случае процессоры имеют общий счетчик команд, во втором — свой индивидуальный. Конструкции могут различаться по степени гранулярности от «тонкой» (fine grane) с распараллеливанием на уровне команд до «грубой» (coarse grane) с распараллеливанием на уровне крупных модулей.

Первой машиной с межпроцессорной коммуникацией был Solomon, построенный компанией Westinghouse в 1962 году, в котором была использована двухмерная решетка, где каждый процессор взаимодействовал с четырьмя соседними, а при такой схеме никаких специальных средств маршрутизации не требовалось. В 70-е годы приобрели популярность более сложные топологии: многомерные кубы (binary n-cube и hypercube), линейные массивы (Linear Array), звезды и созвездия (Star и Constellation), кольца (Ring), двухмерные и трехмерные решетки (2-D и 3-D mesh), многомерные торы (n-D Torus), бабочки (Butterfly) и деревья (Tree), в том числе толстые (Fat Tree).

***

Популярная сейчас аббревиатура HPC, расшифровываемая как High Performance Computing («высокопроизводительные компьютерные системы»), может интерпретироваться иначе — High Productive Computing, то есть «высокопродуктивные компьютерные системы». В этом совпадении заложен большой скрытый смысл — производительность важна, но не как самоцель, а лишь при условии эффективного использования мощности.