В июне 2011 года рейтинг Top500 возглавил K computer из японского Института физико-химических исследований с производительностью 8,162 PFLOPS на тесте Linpack, что почти в пять раз выше, чем у предыдущего лидера – Tianhe-1A. Аналитики предсказывают появление еще более мощных суперкомпьютеров и преодоление к концу нынешнего десятилетия барьера в один экзафлопс. Но нужна ли с практической точки зрения эта гонка?

Большую часть времени современные суперкомпьютеры загружены небольшими задачами, и в первую очередь это система коллективного доступа, готовая в разумный срок предоставить пользователю запрашиваемые ресурсы (см. рисунок). Отсутствие больших задач, требующих для запуска нескольких тысяч процессорных ядер, объясняется просто. Среди широкого круга решаемых на таких системах задач к наиболее перспективным с точки зрения внутреннего параллелизма относятся явные численные алгоритмы моделирования задач механики сплошной среды — расчеты течений жидкости и газа, в частности метеорологические прогнозы. Точность результатов расчетов повышается путем перехода к более подробным дискретным моделям расчетных областей, однако легко доказать, что в условиях неограниченных вычислительных ресурсов время моделирования при улучшении детализации пространственной модели только растет. Кроме того, существует проблема подготовки исходных данных для крупномасштабных вычислительных экспериментов. Можно покрыть карту территории России сеткой из миллиардов ячеек, но какова будет точность задания исходных данных для прогноза погоды и точность последующего результата моделирования, если в 2010 году на территории всей страны был только 1691 пункт наземных метеорологических наблюдений? Другой вопрос, какими средствами построить аналогичного размера модель, например, перспективного истребителя? Актуальные расчеты турбулентных газодинамических течений вблизи моделей шасси самолетов проходят на 512-1024 процессорных ядрах и занимают не более недели. Расчет реальной задачи за неделю – хороший результат, разумный компромисс в условиях коллективного использования ресурсов, ведь помимо непосредственно вычислений сюда входит многократная запись результатов, которая не учитывается при замере производительности и практически не распараллеливается. Можно и дальше увеличивать число процессоров, но эффект от этого на общем фоне будет слабым. Тем не менее полностью загрузить одной такой задачей с грубыми начальными данными систему, подобную, например, «Ломоносову», можно, но время ее расчета, записи и оценки результатов будет уже за гранью разумного. Во многом это проблема существующих на сегодняшний день вычислительных алгоритмов, альтернативы которым пока нет. Поэтому даже петафлопсная система как инструмент для решения одной важной задачи сейчас неактуальна. А широкомасштабные вычислительные эксперименты с использованием десяти и более тысяч процессорных ядер, по сути, носят характер тестово-показательных мероприятий.

 

Пример типичной диаграммы загрузки суперкомпьютера. Относительное число запущенных и ожидающих запуска задач в зависимости от числа требуемых процессорных ядер. Система из 10 тыс. процессорных ядер

 

В этой ситуации скептики считают дальнейший рост мощности суперкомпьютеров на практике бесполезным. В самом деле, есть ли смысл заниматься трудоемким администрированием и техническим обслуживанием системы с сотней тысяч процессорных ядер, чтобы запускать на ней множество небольших задач, ведь намного проще управлять несколькими менее мощными компьютерами. Руководители суперкомпьютерных центров и производители оборудования это мнение, естественно, не разделяют. Тем более что попадание в Top500 стало статусным событием, свидетельствующим о высоком уровне научно-технического развития страны.

Выручит ли GPU?

Большинство из созданных за последнее время суперкомпьютеров — это кластеры (множество многопроцессорных модулей, объединенных высокоскоростной коммуникационной средой). Очевидно, что такая система хорошо масштабируется, но тут возникает проблема энергопотребления. Предыдущий кризис, когда дальнейший рост производительности процессоров за счет увеличения их тактовой частоты стал невозможен по причинам повышенного энергопотребления и тепловыделения, разрешился появлением многоядерных процессоров. Сейчас та же проблема возникла вновь, но теперь со стороны высокопроизводительных комплексов. Например, только 50 тыс. процессорных ядер гипотетической петафлопсной системы, построенной на базе шестиядерных процессоров Intel Xeon, будут в рабочем режиме потреблять около 800 кВт. А есть еще климатические установки, источники бесперебойного питания и другое вспомогательное оборудование. Перспективы расширения в этой ситуации выглядят мрачно.

В роли палочки-выручалочки, позволяющей перепрыгнуть через канаву на пути роста мощности высокопроизводительной вычислительной техники, представляется графический процессор. Главное преимущество графических процессоров заключается в их существенном превосходстве над CPU по теоретической производительности на единицу потребляемой энергии. Так, например, выигрыш Tesla C2050 по сравнению с Xeon X5670 2,93 ГГц составляет три раза, а выигрыш просто в теоретической производительности для того же случая – более семи раз. Но энергопотребление GPU будет выше в два с половиной раза. И этот показатель можно считать минимальным уровнем ускорения вычислений, которое должно сопровождать переход на GPU, а минимальное ускорение вычислений относительно запуска последовательной программы на одном процессорном ядре должно быть и вовсе порядка 15 раз. Поэтому, например, сокращение времени работы программы на GPU в 20 раз относительно запуска ее последовательной версии на одном ядре CPU – вполне ожидаемый результат, если речь идет о работе с вещественными числами двойной точности. Но это лишь теоретические оценки, а что происходит на практике?

Для начала посмотрим на результаты теста Linpack для Tianhe-1A и Jaguar, расположенных на второй и третьей строчке Top500 соответственно. Показатель Rmax Tianhe-1A в 1,46 раза выше, чем у Jaguar, но при этом энергопотребление на единицу производительности у построенной на графических процессорах Tianhe-1A в 2,5 раза ниже. Теория совпадает с практикой. Но есть два интересных момента. Во-первых, отношение Rmax/Rpeak у Tianhe-1A составляет лишь 55% (тогда как у Jaguar это 75%), что несколько странно для решаемой в рамках Linpack алгоритмически простой и хорошо масштабируемой задачи. А, во-вторых, выигрыш Jaguar по объему вычислений пошедшего в зачет теста Linpack составляет 3,5 раза, в то время как более логичным здесь было бы лидерство Tianhe-1A. И тут стоит упомянуть о проблемах GPU с точки зрения как последовательных, так и параллельных вычислений.

Архитектурно графический процессор ориентирован на решение задач, оперирующих большим числом идентичных и независимых по выходным данным заданий. При этом объем памяти устройства по сегодняшним меркам мизерный; например, 6 Гбайт памяти при теоретической производительности порядка 500 GFLOPS сопоставимо со 150 Мбайт оперативной памяти на процессорное ядро CPU. Но еще более важен уровень ограничения объема разделяемой памяти на блок нитей. Измеряемый десятками Кбайт, этот параметр во многом определяет возможность загрузки вычислительных ресурсов GPU. Прибавим сюда необходимость специфического выравнивания данных в памяти устройства для последующего объединения запросов на чтение и запись и потери производительности, связанные с обработкой ветвлений и циклов с переменным числом витков. И получится, что для использования всех плюсов GPU переносимый алгоритм должен быть логически простым, не требовать больших объемов памяти, обладать высочайшей степенью внутреннего параллелизма, обеспечивать возможность структурированного размещения данных в памяти устройства. Много ли алгоритмов решения актуальных задач отвечают этим требованиям? Ответ скорее отрицательный. В противном случае была бы высокой и производительность вычислений на CPU. А она у вычислительных модулей реальных инженерных приложений редко достигает хотя бы 10% теоретической производительности процессорного ядра.

Построенные на графических процессорах суперкомпьютеры имеют всю ту же кластерную архитектуру, а производительность многопроцессорного модуля увеличивается путем установки одного или нескольких GPU. Возникает новый вид накладных расходов – потери времени на передачу данных между CPU и GPU, избежать которых можно только в последовательном приложении, полностью перенеся его вычислительный алгоритм на GPU. Но внутри запускаемого на нескольких модулях параллельного приложения потери на дополнительную передачу данных уже неминуемы.

В довершение всего имеется еще и человеческий фактор. После появления многоядерных процессоров многие пользователи суперкомпьютерных центров не стали тратить время на разработку новых алгоритмов в рамках гибридной модели параллелизма и борьбу с проблемой когерентности кэш-процессоров и их ядер, а стали запускать старые MPI-программы таким образом, что число параллельных процессов просто совпадало с общим числом доступных приложению процессорных ядер. Это снижает масштабируемость программы, но упрощает ее логику и модификацию. Между тем перенос алгоритмов на GPU потребует еще более существенных изменений, для внесения которых, очевидно, необходима и соответствующая мотивация. И то, что достичь петафлопсной производительности суперкомпьютера на тесте Linpack можно только используя графические процессоры, крайне сомнительный аргумент для переворачивания логики программы с ног на голову. Тем более что для отдельно взятой задачи такая производительность пока не нужна.

Неоднозначные итоги

Сегодня трудно переоценить роль высокопроизводительных вычислений, когда большинство сложных объектов проектируются виртуально и очевидно, что число и производительность суперкомпьютеров будет расти. Какой будет архитектура и элементная база экзафлопсной системы? Ответ будет получен еще не скоро, но уже сегодня есть предпосылки для изменения существующей системы приоритетов. Изначально основная задача суперкомпьютера заключалась в ускорении процесса виртуального моделирования, но теперь один из важных аргументов появления новой системы – успешное тестирование по Linpack с последующим попаданием в Top500 и другие списки. При этом разработчики параллельного программного обеспечения должны адаптироваться к архитектурным особенностям новых систем. В случае работы с GPU такой адаптацией может стать переход к реализации менее точных, но алгоритмически простых вычислительных методов. Главная роль здесь, как это ни печально, отводится собственно суперкомпьютеру, а не качеству получаемых с его помощью результатов. Безусловно, остается возможность разрабатывать и запускать параллельные приложения, ориентированные только на CPU, однако в этом случае мощность систем с графическими ускорителями будет крайне малой, и их основные ресурсы по факту будут простаивать. Насколько этот печальный прогноз оправдается – покажет время, но вероятность подобного развития событий достаточно велика.

Сергей Суков (ssoukov@gmail.com) — научный сотрудник Института прикладной математики им. М.В.Келдыша РАН (Москва).