Стратегии против архитектур - II

 

Эксперимент:
Летняя HPC-школа МФТИ

 

На предыдущей, первой по счету HPC-школе МФТИ, задача распараллеливания ставилась для классической кластерной архитектуры и для архитектуры CUDA — требовалось представить код, эффективно работающий на 8-16 процессорах(ядрах) с использованием MPI, либо эффективную CUDA-программу. Однако, сама задача, взятая из области физики высокотемпературной плазмы, оказалась слишком сложна. Несмотря на то, что численная схема решения системы дифференциальных уравнений была локальной и подразумевала эффективное распараллеливание на множестве процессоров, технически это было сделать сложно, в том числе и из-за некоторой запутанности последовательного кода. В результате только несколько человек справилось с MPI-программой, а достаточно эффективный код для видеопроцессора разработан не был.

Этим летом профессор А.И. Лобанов поставил перед участниками школы более простую с научной точки зрения задачу: моделирование конечных автоматов. Пример конечного автомата - всем известная игра “Жизнь”. Такая задача более проста для понимания, и подход к распараллеливанию представляется весьма очевидным. Кроме того, большинство вычислений при моделировании конечных автоматов являются целочисленными, что позволяет избежать любых проблем с арифметикой с плавающей точкой, свойственных графическим процессорам.
Непосредственной задачей было моделирование нескольких типов конечных автоматов в трехмерном пространстве. Слушателям были прочитаны курсы по различным параллельным платформам (OpenMP для систем с общей памятью, MPI для кластера, а также CUDA и OpenCL для графических процессоров), и каждому предлагалось предоставить задачу, распараллеленную с помощью любой из этих технологий, либо же сразу несколько вариантов.
Каковы же итоги эксперимента? Насколько хорошо показали себя слушатели школы, и насколько удобной оказалась каждая из этих параллельных платформ?
Итак, последовательно расскажем о различных архитектурах.
Достаточно небольшое число участников справилось с решением
Язык OpenCL, будучи самым молодым и “экзотическим”, был выбран несколькими участниками школы, и только двое справились с распараллеливанием задачи для этой технологии. Основным надостатком является некоторое несовершенство средств разработки OpenCL, на данный момент программировать на нем все еще недостаточно удобно.
В основном, все участники справились с распараллеливанием для кластерной архитектуры с использованием технологии MPI. И здесь, опять же, было указано на главную ошибку: чтобы написать работающую программу на MPI, необходимо обладать мышлением в рамках этой технологии, а при отсутствии серьезного опыта лучше сначала написать последовательный, или, что еще лучше, параллельный OpenMP-код, на нем отладить возможные ошибки в самом алгоритме и ошибки параллелизма, и уже после этого перенести код на более сложную архитектуру.
Наконец, все участники школы, которые распараллеливали приложение с помощью технологии OpenMP, и в случае использования одной этой технологии, и впри применении OpenMP как промежуточной технологии при переходе к “более серьезной”, справились с этой задачей.
Несмотря на общий интерес участников школы к GPU-технологиям, даже в случае идеально подходящих для таких платформ задач, применение “классических” CPU-технологий пока еще дает больший результат по проценту справившихся с заданием. Естественно, ускорение решения задачи в каждом конкретном случае применения CUDA или OpenCL на графическом процессоре сильно превосходит ускорение для технологий OpenMP и MPI.
Обратим особое внимание на технологию OpenMP. Большинство участников школы не отнеслось к ней с большим интересом, При этом оказалось, что добиться результатов с использованием OpenMP гораздо проще, чем для остальных платформ, и кроме того, наличие OpenMP-кода здорово помогает в распараллеливании программы для более сложных платформ.
Можно сделать следующий вывод: базисом для распараллеливания последовательного алгоритма в большинстве случаев является технология OpenMP. Имея в наличии последовательный код, с помощью технологии OpenMP можно простейшим способом получить код, обладающий параллелизмом, с помощью различных удобных инструментов (например, параллельных дебаггеров или профилировщиков Intel) обнаружить и изучить возможные проблемы и ошибки в параллельной программе, и уже затем переводить код на другие платформы. Для программиста, не имеющего исчерпывающего опыта в программировании на какой-то одной платформе, такой подход к проблеме является предпочтительным. OpenMP лучше всего подходит и для написания параллельного кода “с нуля”.
Но основной проблемой технологии OpenMP является, конечно, не удобство программирования, а то, что много лет эта технология была мало применима для “настоящего” HPC. Действительно, долгое время на доступных системах с общей памятью нельзя было добиться существенного (хотя бы на порядок) ускорения, просто из-за недостаточной степени параллелизма (количества ядер). За эпоху гонки частот кластеры благодаря своей доступности вытеснили решения с общей памятью, и даже в сегодняшних гетерогенных кластерах ядра внутри одного процессора на практике часто обмениваются MPI-сообщениями. Но в последние годы ситуация стала меняться. Многоядерность проникает даже в мобильные устройства, становятся популярны “суперкомпьютеры на столе”, состоящие обычно из мощной мультиядерной системы и графического сопроцессора. 
Все это наводит на мысли о том, что, казалось бы, позабытая в “настоящем” высокопроизводительном программмировании модель OpenMP-параллелизма, похоже, в ближайшем будущем стать ключевым звеном в решении “среднеразмерных” HPC-задач, потеснив и MPI, и GPU-решения. Последние новости о процессорах Intel и AMD говорят, что мультиядерность уже не за горами, и к ней нужно быть готовым.
А “возвращение” и развитие OpenMP - это, возможно, ключ и к автоматическому распараллеливанию кода, о котором мы будем говорить в следующих статьях.
 

Оставить комментарий.
Подпись
Код на картинке
© 2010-2016, ООО ПАРСЕР , Все права защищены.
Деловая сеть Санкт-Петербург и Ленинградская область. Жёлтые страницы, телефонный справочник и каталог компаний, товаров и услуг.
top.dp.ru