Перспективные подходы к созданию масштабируемых приложений для суперкомпьютеров гибридной архитектуры Ю.А.Климов, А.Ю.Орлов, А.Б.Шворин Аннотация. В работе обсуждается вопрос создания эффективных и масштабируемых приложений для современных перспективных суперкомпьютеров. Очерчен круг возникающих при этом проблем, связанных с усложнением иерархии памяти, вызванной, в частности, использованием ускорителей вычислений (то есть гибридной архитектурой). Сделан краткий обзор известных подходов к решению этих проблем. Из всего спектра возможных решений выделена и описана наиболее продуктивная, по мнению авторов, область. Ключевые слова: высокопроизводительные вычисления, гибридная архитектура, иерархия памяти, балансировка нагрузки. Введение На протяжении всей истории использования ЭВМ для высокопроизводительных вычислений главной задачей программиста является организация оптимального расположения и перемещения данных в памяти машины. Такое положение вещей отражает эпиграф к данной статье, который является цитатой из знаменитой лекции Джона Бэкуса, произнесенной им в 1977 году по случаю вручения ему премии Тьюринга [1]. Именно в этой лекции им было впервые введено понятие <фоннеймановского узкого горла" – канала между вычислительным устройством и памятью, проблему недостаточной пропускной способности которого впоследствии стали называть "стеной памяти". В течение нескольких десятков лет для решения этой проблемы было изобретено множество механизмов, таких как многоуровневые ассоциативные кэши, предвыборка, мультитре-довость, внеочередное исполнение инструкций и векторные инструкции, среди которых все в том или ином виде присутствуют во всех современных высокопроизводительных процессорах. Совершенствование аппаратной поддержки позволило на протяжении многих лет увеличивать производительность вычислений, не меняя существенным образом парадигму программирования. Тем не менее, такое развитие событий привело к появлению иерархии памяти, которую программисту необходимо учитывать для максимально эффективного использования машины. Например, для компьютера на базе современной многосокетной материнской платы мы имеем при грубой оценке, три уровня памяти, существенно различающиеся по скорости доступа: кэш, память своего процессора, память чужого процессора. Переход от последовательных программ к многонитевым, исполняемым в пределах SMP-системы, требует аккуратного разделения данных между нитями. Однако высокие скорости коммуникаций в пределах платы, а также поддержка со стороны компиляторов (ОрепМР [9]) делают этот переход относительно несложным. Гораздо хуже обстоит дело с программированием систем, имеющих распределенную память. Относительно низкие характеристики межузловых сетей привели к появлению новой парадигмы программирования, основанной на передаче сообщений (классическим представителем является библиотека МР? [6]). Таким образом, при создании эффективной программы для типичного современного суперкомпьютера кластерного типа необходимо иметь в виду не только "фоннеймановское узкое горло", но сразу несколько уровней иерархии памяти и особенности передачи данных внутри них и между ними. Именно это является основной сложностью при написании распределенных параллельных программ, и этим же объясняется тот факт, что для некоторых типичных задач, решаемых на SMP-системах, распределенные версии до сих пор не были созданы (например, некоторые из тестов NAS [5]). Сложности написания эффективной распределенной программы велики, но обозримы. Для адекватного использования уровней иерархии памяти зачастую прибегают к написанию так называемых "гибридных" программ, использующих МР? на межузловом уровне и ОрепМР на внутриузловом. Критическим же с точки зрения сложности программирования стало массовое использование в составе суперкомпьютеров ускорителей вычислений (в первую очередь GPGPU [2]), то есть появление уже по-настоящему, на аппаратном уровне, гибридных машин. Гибридность, то есть неоднородность состава вычислительного узла, вносит в иерархию памяти дополнительные уровни – обмен данными между вычислительными устройствами разного типа плюс зачастую нетривиальная иерархия памяти внутри ускорителя. Количество переходит в качество – корректно и эффек- тивно запрограммировать перемещение данных в такой расслоенной системе становится титанической задачей. Кроме того, чрезвычайно остро встает проблема балансировки вычислительной нагрузки на различные устройства с учетом их особенностей. В результате на сегодняшний день практически нет примеров решения на гибридных суперкомпьютерах сколь-нибудь нерегулярных задач, таких как, например, вычисления на адаптивных стеках. Использование в составе суперкомпьютера вычислительных ускорителей позволяет значительно сократить необходимый размер и, следовательно, цену и стоимость владения машиной при том же пиковом уровне производительности. Не случайно три из пяти самых мощных машин мира на данный момент – на втором, четвертом и пятом местах (по данным списка ТОР500 за июнь 2011 года [7]) – построены с использованием ускорителей на базе GPGPU. По мнению многих авторитетных специалистов, использование ускорителей – набирающая силу долговременная тенденция. Сама аппаратура ускорителей и способ их интеграции в вычислительные блоки могут претерпеть значительные изменения, но с большой долей уверенности можно утверждать, что суперкомпьютеры эксафлопсного класса будут гибридными. Возможно, на смену GPGPU придут М?С как более легкие в программировании или FPGA как более энергоэффективные или что-нибудь более новое. Однако практически нет сомнений, что программистам придется задействовать для решения задач целый парк разнородных вычислительных устройств со сложной иерархией памяти. Отсюда можно сделать вывод, что проблемы, обсуждаемые в данной работе, не потеряют своей актуальности, и основная задача, которую придется решить на пути достижения реальной эксафлопсной производительности, – это задача оптимизации перемещения данных в памяти машины (как и на протяжении всей истории развития ВТ). В следующем разделе мы несколько подробнее остановимся на сложностях программирования гибридных суперкомпьютеров. Затем будет сделана попытка очертить спектр возможных подходов к их программированию и указать наиболее перспективную, по мнению авторов, область этого спектра, в развитие которой имеет смысл инвестировать усилия. |