Повышение производительности расчета динамики частиц на параллельных системах

УДК 519.6

В. О. Ружников

Вестник СПбГУ. Сер. 10. 2014. Вып. 1

ПОВЫШЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ РАСЧЕТА ДИНАМИКИ ЧАСТИЦ НА ПАРАЛЛЕЛЬНЫХ СИСТЕМАХ*)

Санкт-Петербургский государственный университет, 199034, Санкт-Петербург, Российская Федерация

В статье описаны предлагаемые модификации исходного кода программного обеспечения COSY Infinity для повышения производительности вычислений на параллельных системах с общей памятью. Эти модификации проведены вручную без использования техник автоматического и автоматизированного распараллеливания. Для многопроцессорных систем с общей памятью применялась технология OpenMP, для вычислений на графических процессорах — технология NVidia CUDA. Также в статье представлены гибридные версии с использованием как связки технологий OpenMP и MPI для вычислений на кластерных системах, так и OpenMP и CUDA для персональных компьютеров. Оценка эффективности полученных версий относительно исходной версии произведена с помощью сравнения времени выполнения расчета динамики пучка в электростатическом кольце с учетом спина. Проведенное тестирование показало прирост производительности вычислений с использованием OpenMP от 5 до 10%. При одновременном применении OpenMP и NVidia CUDA прирост производительности достиг 75%. Библиогр. 9 назв. Ил. 4.

Ключевые слова: параллельное программирование, OpenMP, CUDA, MPI, COSY Infinity, расчет динамики пучка.

Ruzhnikov V. O. Calculation performance improvement of particle dynamics on parallel systems // Vestnik of St. Petersburg University. Ser. 10. Applied mathematics, computer science, control processes. 2014. Issue 1. P. 147—156.

In the article, the source code modifications of software COSY Infinity for calculation performance improvement on parallel systems with shared memory are described. These modifications are made manually without using techniques of automatic and automated parallelization. For multiprocessor systems with shared memory OpenMP technology is used. For computing on graphics processors NVidia CUDA is used. Also, in the article hybrid versions with a bunch of technologies OpenMP and MPI used for calculations on cluster systems and using of OpenMP and NVidia CUDA for personal computers are presented. Evaluation of the effectiveness of the obtained versions is made by comparing the time of the calculation of the beam dynamics in an electrostatic ring including the spin. Testing has shown an increase in computing performance using OpenMP from 5 to 10%. When using simultaneously OpenMP and NVidia CUDA performance increase reached 75%. Bibliogr. 9. Il. 4.

Keywords: parallel programming, OpenMP, CUDA, MPI, COSY Infinity, beam dynamic calculation.

Введение. В последние годы увеличение вычислительной мощности перешло с пути производства процессоров с более высокой частотой на изготовление процессоров с большим количеством вычислительных ядер из-за температурных и электронных ограничений, налагаемых на процессоры, работающие на повышенных частотах. Таким образом, для возрастания эффективности проведения расчетов необходимо адаптировать имеющийся программный код под различные технологии параллельных вычислений. Для расчета динамики пучков частиц существует множество программ, такие как OptiM, MAD-X (Methodical Accelerator Design), COSY Infinity и др. Однако многие

*) Работа выполнена при финансовой поддержке Санкт-Петербургского государственного университета (НИР 9.38.673.2013). © В. О. Ружников, 2014

из них либо не поддерживают параллельные вычисления, либо поддерживают только стандарт MPI (например, COSY Infinity).

Современные компьютеры, как и узлы супер-компьютеров, по сути являются SMP-системами с общей памятью. Применение OpenMP как раз и основывается на работе с общей памятью, в то время как технология MPI нацелена на работу с системами с распределенной памятью. Но приложения, использующие только технологию OpenMP, могут проводить расчеты только в пределах SMP-узла, а для связи между узлами применяется MPI.

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

Цели работы - повышение производительности вычислений динамики пучка частиц с учетом спина, осуществляемых с помощью ПО COSY Infinity на SMP-системах с общей памятью, и модификация исходного кода COSY Infinity для обеспечения проведения расчетов на графических ускорителях.

COSY Infinity. Программное обеспечение COSY Infinity [1] - это система для использования различных продвинутых концепций в современных научных вычислениях. Программа имеет собственный скриптовый язык с простым синтаксисом. При применении методов дифференциальной алгебры (ДА) [2] код является объектно-ориентированным, что позволяет динамически регулировать типы данных. Ядро для операций ДА хорошо оптимизировано для ускорения вычислений и полностью поддерживает разреженности, что значительно повышает производительность для систем со срединной симметрией. Присутствуют также инструменты для преобразования любого кода в формате MAD или Standard eXchange Format (SXF) в программу на языке COSY Script. Скомпилированный COSY код может быть как выполнен непосредственно, так и сохранен в бинарный файл для включения в последующий код. Компилятор имеет строгий синтаксис и анализ ошибок и сравним по скорости с компиляторами для других языков. Объектно-ориентированные особенности полезны не только для непосредственного использования в операциях ДА, но и для других важных типов данных, включая интервалы и ДА с вычислением остатков повышенной точности.

Основное применение COSY - расчет и анализ оптических элементов для пучков частиц. Поставляемый с программой пакет cosy.fox, написанный на языке Cosy Script, позволяет проводить расчеты эффектов высокого порядка в накопительных кольцах, спектрографах, электронных микроскопах и т. д. Для трекинга частиц COSY Infinity предлагает различные методы расчетов с помощью матрицы перехода M, которая соотносит начальному положению частицы zi конечное zf = M(zi). В коде матрица перехода представлена с помощью типа данных ДА. Для повышения скорости вычислений векторный тип данных используется для представления в вычислительном алгоритме координат частиц z. Трекинг может быть выполнен не только в обычных координатах частиц, обеспечивающих интуитивное понимание динамики, но и в координатах, находящихся в нормальной форме, которые позволяют проводить количественный анализ динамики. При изучении динамической апертуры важно иметь возможность использовать подходящую симплектификацию. В COSY Infinity простой трекинг частиц без

симплектификации осуществляется путем указания в коде программы режима трекин-га TY = -21 для команды TR. Режимы симплектичного трекинга с генерацией функций типов от Fi до F4 требует от пользователя поиск оптимальной генерирующей функции методом подбора для каждой конкретной задачи. Новый подход, реализованный в восьмой версии COSY, EXPO (Расширенная генерирующая функция Пуанкаре) применяет оптимальную функцию для симплектификации. В COSY Infinity такой подход предлагается для упрощения проведения симплектического трекинга. Он используется в коде с помощью включения режима трекинга TY = O.

Для обеспечения совместимости с не-Fortran?? языками для вычислений COSY Infinity обеспечивает интерфейсы для Fortran9O и C++. Все типы данных и связанные с ними операции, функции и внутренние процедуры в COSY Infinity доступны через интерфейсы как C++ классы для пользователей, а также как модули для пользователей Fortran90. Эти COSY интерфейсные C++ классы и Fortran90 модули превосходят независимые попытки создания пакетов ДА на этих языках программирования.

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

Выбор программного средства для разработки параллельных версий COSY обусловливался, во-первых, поддержкой Fortran??, так как полный перевод исходных кодов на другой язык или современную версию Fortran сопряжен с некоторыми трудностями и большими временными затратами. Во-вторых, выбранный инструментарий должен позволять создавать кросс-платформенные приложения, так как COSY Infinity используется как на персональных компьютерах с Windows и MacOS, так и на серверах и кластерах под управлением Linux. В-третьих, он должен обеспечивать удобство разработки и поддержки кода.

Наиболее простым подходом для написания параллельных приложений является автоматическое распараллеливание, например таких как CAPO (Автоматизированный распараллеливатель и оптимизатор), SUIF (промежуточный формат Стэнфордского университета), VAST/Parallel, OSCAR, Polaris. Однако не для всех этих подходов есть реализация для Fortran?? и ни одна из технологий не смогла работать с кодом COSY, кроме автоматической векторизации при компилировании с помощью OpenMP.

Чуть более эффективны инструменты автоматизированного распараллеливания, такие как Intel/GAP (Guided Auto-Parallel), CAPTools/ParaWise, BERT??, FORGE Magic/DM, ДВОР (Диалоговый высокоуровневый оптимизирующий распараллеливатель), САПФОР (Система автоматизации параллелизации Фортран программ). Однако из всех названных выше язык Fortran?? поддерживают только САПФОР и BERT??, которые не смогли сгенерировать параллельный код COSY.

Таким образом, было принято решение о ручном распараллеливании путем внесения модификаций в исходный код. За основу доработки был взят исходный код программного обеспечения COSY Infinity. Он одновременно является и параллельной MPI-версией, и последовательной. Части кода, специализированные для использования в определенной версии, закомментированы специальным образом. Модификация исходного кода для последующей компиляции происходит с помощью отдельной консольной программы, написанной на языке Fortran??, входящей в состав исходных кодов COSY. Исходный код описанных ниже переработанных версий писался с добавлением

комментариев как раз такого типа, что позволяет их быстрое интегрирование в существующий код. Так как ни CUDA, ни OpenMP не позволяют задокументированными способами осуществлять параллельную запись в файл, то данная возможность была отключена.

В исходной версии COSY параллелизм достигается с помощью распараллеливания по начальным данным в явном виде благодаря применению соответствующей конструкции языка COSY Script, при этом расчет матрицы переноса M происходит в последовательном режиме. При таких расчетах использование памяти избыточное (несколько сотен мегабайт) за счет дублирования матрицы переноса для каждого процесса. Схема работы MPI-версии показана на рис. 1.

Рис. 1. Схема работы MPI-версии

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

Для OpenMP-версии были распараллелены наиболее ресурсозатратные вычислительные части COSY. Применялись такие преимущества OpenMP:

• переменные, к которым необходимо было обеспечить общий доступ, были объединены в common-блоки и описаны специальными модификаторами shared;

• переменные, в которые MPI-версия собирала результаты вычислений, были сделаны общими в OpenMP-версии, и запись результатов проводилась непосредственно в них для повышения производительности;

• были переписаны и распараллелены наиболее ресурсозатратные циклы.

В представленных версиях программы были распараллелены следующие части: транслирование кода программы на языке COSY Script в мета-код, выполнение этого кода. Был реализован механизм распараллеливания для конструкций языка COSY Script, позволяющих явно указывать параллельные части программы (по аналогии с MPI-версией). Также было проведено распараллеливание расчета матрицы переноса M. Расчет самой динамики происходит с помощью общей памяти, в которую помещаются общая для всех пучков матрица перехода и финальные координаты частиц Zf, в которые записывается результат вычислений. Схема работы ОрепМР-версии показана на рис. 2.

Код на COSY Script

Трекинг \

Расчет по формуле Zf = Л4 • Zi

shared: М

shared: zj

private: z^

zf

Рис. 2. Схема работы ОрепМР-версии

Для гибридной версии с одновременным использованием технологий OpenMP и MPI применялось распараллеливание по начальным данным путем разбиения частиц, составляющих пучок, на группы с последующей отсылкой этих групп с помощью MPI по SMP-узлам. Затем на этих узлах проводился расчет более мелких пучков по схеме, указанной на рис. 2, и в завершение результат вычислений собирался в структуру на host-части с помощью MPI.

Для CUDA-версии за основу была взята логика работы программы OpenMP, так как эта технология применяет тот же принцип, что и CUDA, - распараллеливание по потокам с использованием преимуществ общей памяти. При написании применялись следующие моменты для оптимизации расчетов: перевод исходного кода в Fortran90 и работа с памятью, описанная ниже.

Использовалась глобальная память в сочетании с разделяемой памятью, так как программа часто обращается к различным, далеко расположенным друг от друга участкам памяти. Для увеличения производительности при обработке данных осуществлялось копирование из глобальной памяти в разделяемую с последующей обработкой данных и копированием результатов из разделяемой памяти обратно в глобальную. Также было проконтролировано размещение компилятором данных в локальной памяти, приводящее к заметному падению производительности. Эти данные были вручную помещены в разделяемую память.

Для редко используемых переменных были явно заданы модификаторы для их помещения в глобальную память. Хотя автоматическое размещение компилятором таких переменных в локальной памяти может показаться удобным, на самом деле это не так. В дальнейшем будет непросто найти узкое место при модификациях программы, если переменная начнет чаще применяться. Компилятор может как перенести такую переменную в регистровую память, так и нет. Более подробно об оптимизации работы с памятью в CUDA по описанной выше схеме и другим техникам можно прочитать в [3].

Изначально была написана программа, которая целиком состояла из вычислительного ядра CUDA (cosy.cu). Однако оперативной памяти, доступной устройству NVidia GeForce GTX560Ti, было недостаточно для расчетов. Тогда программа была переписана с большим использованием host-части, обрабатываемой CPU. В результате экспериментов было установлено, что наибольшая производительность достигается при переносе транслирующей части на host-часть, а вычислительной части - на устройство. Поскольку скорость перемещения данных между оперативной памятью и устройством является «узким местом» при вычислениях, то основная часть вычислений перенесена на GPU, а на host передаются только их результаты. Однако из-за невозможности проведения вычислений целиком на устройстве все вычисления перенести не удалось. Несмотря на проведенную оптимизацию, вследствие сильного ветвления алгоритма, больших требований к объему оперативной памяти и малого объема оперативной памяти на устройстве, производительность полученной версии была ниже, чем последовательной, реализующей расчеты на центральном процессоре [4].

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

Описание вычислительных экспериментов. Разработка и тестирование проводились в операционной системе Windows 8 64-bit Enterprise, в качестве интегрированной среды разработки была выбрана Microsoft Visual Studio 2012 Professional. Для компиляции исходного кода на языке Fortran77 был выбран Intel Fortran Composer XE 2011 Update 6, так как он обеспечивает наилучшую производительность и добавляет подсветку синтаксиса Fortran в Visual Studio. Для компиляции CUDA-ядер использовался компилятор PGI CUDA Fortran Compiler, разработанный Portland Group совместно с NVidia, так как он был единственным компилятором для Fortran под CUDA. В качестве реализации программного интерфейса MPI была выбрана версия от компании Intel, так как она является наиболее быстрой реализацией MPI под Windows и поддерживает интеграцию в Microsoft Visual Studio для упрощения процесса отладки параллельных программ.

Вычислительные эксперименты осуществлялись на персональных компьютерах

со следующими характеристиками: процессор - Intel Core i5-2500K, оперативная память - 8 Gb DDR3-2133 МГц (CL11), видеокарты - NVidia GeForce GTX670 4 Гб и NVidia GeForce GTX560Ti 1 Гб.

Эффективности гибридной OpenMP+MPI- и MPI-версий сравнивались на кластере, составленном из двух персональных компьютеров, указанной выше конфигурации, соединенных с помощью 1 Гб Ethernet. С помощью оценки времени выполнения тестов Linpack была установлена эффективность кластера в 73% относительно пиковой производительности.

Для оценки времени выполнения расчетов была написана программа на языке COSY Script, которая рассчитывает динамику поляризованного пучка в электростатическом ускорителе с учетом спина [5]. Ускоритель состоит из следующих элементов: диполи, квадруполи, секступоли и BPM (детектор положения пучка). Параметры ускорителя теоретические, разрабатываются в Научно-исследовательском институте в г. Юлих, Германия [7]. Так как для уточнения параметров элементов производятся расчеты для 32 000 частиц при 100 000 оборотов с учетом эффектов до третьего порядка, то программа была написана с использованием этих параметров и возможностью варьирования количества частиц. Результаты времени выполнения данной программы являются показательными, так как расчет динамики пучков с учетом спина и эффектов высокого порядка - наиболее ресурсоемкая задача, решаемая с помощью COSY и использующая большую часть функционала программы, доступного для проведения подобных расчетов.

Для оценки эффективности реализованных версий производилось сравнение времени выполнения программы относительно времени выполнения MPI- и последовательной версий. Каждое измерение проводилось три раза. Во всех случаях разброс времени выполнения не превосходил 0.5%. Для наглядности далее затраченное различными версиями программы на расчеты время нормализовано. За единицу взято время выполнения расчетов 4000 частиц последовательной версией, что составило 11 340 с, или 3 ч 9 мин.

В ходе проведения вычислительного эксперимента были получены следующие результаты по затраченному времени версий OpenMP и MPI:

Количество частиц.... 4000 8000 16 000 24 000 32 000

MPI................... 0.24 0.48 0.96 1.44 1.92

OpenMP............... 0.22 0.44 0.87 1.3 1.74

Прирост

производительности, % 9 9 10 11 10

Как из них видно, прирост производительности ОрепМР-версии относительно MPI-версии при проведении вычислений на SMP-системе, представляющей собой персональный компьютер, составляет в среднем 10%.

Так как для ОрепМР-версии были получены положительные результаты, следующим шагом было объединение технологий ОрепМР и MPI для создания гибридной версии, которая могла бы повысить эффективность вычислений на кластерах, состоящих из SMP-узлов:

Количество частиц . . . . 4000 8000 16 000 24 000 32 000

MPI................... 0.18 0.38 0.76 1.11 1.43

OpenMP+MPI......... 0.17 0.36 0.44 1.06 1.35

Прирост

производительности, % 5 6 5 5 6

Гибридная версия в среднем дает прирост производительности в 5.5%, что в условиях дорогого кластерного времени и многочасовых расчетов приводит к неплохой экономии.

Результаты, полученные для CUDA-версии на двух различных графических ускорителях, показаны на рис. 3. Стоит отметить, что на графическом ускорителе NVidia GeForce GTX 670 с оперативной памятью 4 Гб удалось запустить вычислительные ядра, написанные с минимизацией обмена данными между устройством и host-частью,

Количество частиц, тыс.

Рис. 3. Эффективность расчетов на GPU Версия: 1 - CUDA 560Ti, 2 - последовательная, 3 - CUDA 670, 4 - MPI.

Количество частиц, тыс.

Рис. 4- Эффективность расчетов гибридной версии на GPU Версия: 1 - CUDA 670, 2 - OpenMP, 3 - OpenMP + CUDA.

что вызвало значительный рост производительности и CUDA-версии и позволило обогнать по производительности даже ОрепМР-версию при расчете динамики большого количества частиц.

Так как в последние несколько лет набирают популярность гибридные вычисления, проводимые одновременно на CPU и GPU, была проведена реализация подобной версии, и на рис. 4 показана ее производительность относительно OpenMP- и CUDA-версий. Как следует из рисунка, при большом количестве частиц, позволяющем распараллеливание по начальным данным для уменьшения объема данных, обмениваемых между устройствами, удается достичь прироста производительности в 75%.

Заключение. Была проведена реализация параллельных версий программного обеспечения COSY Infinity, использующих технологии OpenMP и CUDA, путем внесения модификаций в исходный код ядра программы COSY с последующей оптимизацией работы с памятью с учетом особенностей SMP-систем. Проведенное тестирование производительности внесенных в код модификаций и оптимизаций показало повышение эффективности расчета динамики пучков в электростатическом кольце с учетом спина. Тестирование также установило, что наибольший выигрыш в производительности дает применение связки из наиболее подходящих технологий. В случае проведения вычислений на супер-компьютерах это связка OpenMP и MPI, давшая прирост производительности в 6% относительно версии, использовавшей только MPI. В случае вычислений на персональных компьютерах, оснащенных графическим ускорителем NVidia, такой связкой оказались OpenMP и CUDA, которые дали прирост производительности больший, чем при процессорных вычислениях на кластере из двух узлов.

В качестве пути дальнейшей модификации кода COSY Infinity можно рассматривать переход с CUDA на открытый стандарт OpenCL, что улучшит совместимость с оборудованием и позволит проводить вычисления не только на графических ускорителях компании NVidia, но и на ATI.

Литература

1. COSY Infinity // URL: http://bt.pa.msu.edu/index_cosy.htm.

2. Berz M. High-order computation and normal form analysis of repetitive systems // Physics of Particle Accelerators / ed. by M. Month. New York: American Institute of Physics, 1991. Vol. 249. P. 456.

3. Taunay P.-Y. Advanced CUDA topics — Part 3 (Optimization: Memory) // URL: https://rcc.its.psu. edu/education/seminars/pages/advanced_cuda/AdvancedCUDA3.pdf.

4. Ружников В. О. Анализ эффективности параллельных реализаций COSY Infinity // Сб. аннотаций работ 10-й Курчатовской молодежной научной школы. М., 2012. С. 142.

5. Search for Electric Dipole Moments (EDMs) at Storage Rings // URL: http://www2.fz-juelich.de/ ikp/edm/en/program.shtml.

6. Senichev Yu., Lehrach A., Maier R., Zyuzin D., Berz M., Makino K., Andrianov S., Ivanov A. Storage ring EDM simulation: methods and results // Proc. of ICAP 2012. Rostock, Germany, 2012. P. 99103.

7. Lorentz B. Spin tracking for polarized beam experiments at the Julich cooler synchrotron COSY // URL: http://www.bt.pa.msu.edu/TM11/talks/lorentz.pdf.

8. Zyuzin D., Andrianov S. N., Kulabukhova N. V. Data Management and Analysis for Beam Dynamics Simulation // Proc. of Intern. Particle Accelerator Conferences. Shanghai, China, 2013. P. 927-929 // URL: http://accelconf.web.cern.ch/AccelConf/IPAC2013/papers / mopwo021.pdf.

9. Ivanov A., Andrianov S., Kulabukhova N., Maier R., Senichev Yu., Zyuzin D. Testing of symplectic integrator of spin-orbit motion based on matrix formalism // Proc. of Intern. Particle Accelerator Conferences. Shanghai, China, 2013. P. 2582-2584 // URL: http://accelconf.web.cern.ch/AccelConf/IPAC 2013/papers/wepea037.pdf.

Статья рекомендована к печати проф. Д. А. Овсянниковым. Статья поступила в редакцию 31 октября 2013 г.

Контактная информация

Ружников Владимир Олегович — аспирант; e-mail: Nord.edu@gmail.com

Ruzhnikov Vladimir Olegovich — post-graduate, St. Petersburg State University, 199034, St. Petersburg, Russian Federation; e-mail: Nord.edu@gmail.com