Введение 3
1 Архитектуры современных параллельных вычислительных систем 7
1.1 Архитектура сопроцессора Intel ® Xeon Phi™ 7
1.2 Архитектура GPGPU NVidia 9
1.3 Сравнение архитектур Intel ® Xeon Phi™ и NVidia Tesla 14
2 Технологии программирования современных
параллельных вычислительных систем на базе гибридных архитектур 16
2.1 Технология OpenMP 16
2.2 Технология векторизации Intel 20
2.3 Технология NVidia CUDA 23
2.4 Сборка программы для Intel ® Xeon Phi™ 25
2.5 Сборка программы для NVidia CUDA 28
3. Сравнение технологии программирования Intel ® Xeon Phi™ и CUDA .. 29
3.1 Описание модельных задач 29
3.2 Вычислительная база 32
3.3 Последовательные версии программ 33
3.4. Анализ алгоритмов 34
3.5 Применение технологии векторизации Intel 35
3.6 Применение технологии OpenMP 36
3.7 Совместное применение технологий OpenMP и векторизации Intel ... 39
3.8 Технология NVidia CUDA 41
3.9 Влияние увеличения вычислительной нагрузки на производительность
сопроцессоров Intel ® Xeon Phi™ и NVidia CUDA 43
Заключение 46
Список использованных источников 48
Приложение А 51
Высокопараллельные высокопроизводительные вычисления (англ. High Performance Computing - HPC) применяются для решения ресурсоемких задач вычислительной физики, химии, биологии, а также на рынке банковских и финансовых услуг. Сегодня такие задачи в основном решаются на дорогих высокопроизводительных вычислительных системах (ВС) кластерной архитектуры, где на основе высокоскоростных сетевых соединений (англ. Interconnect) объединяются многопроцессорные или многоядерные чипы на общей памяти.
Однако в настоящее время рынок завоевывают ВС гибридной архитектуры, построенные на основе взаимодействия хоста (в роли которого выступает один или несколько современных универсальных многоядерных процессоров на общей памяти) и специального сопроцессора с массовым параллелизмом. Следует заметить, что на основе таких элементов, в свою очередь, могут строиться кластерные ВС гибридной архитектуры.
Первопроходцами такого подхода являются производители высокопроизводительных видеокарт. Например, компания NVidia одной из первых выпустила графический сопроцессор общего назначения Fermi (англ. General Purpose Graphic Processor Unit - GPGPU), воспользовавшись удачной архитектурой своих видеокарт. В таком сопроцессоре вычисления производятся большим количеством специализированных графических ядер, со сложной процедурой частичного согласования, слабой синхронизацией, целой иерархией памяти и прочим наследием, доставшимся новой архитектуре от оптимизации алгоритмов графической обработки данных. Дальнейшее развитие подхода идет в сторону универсализации ядер и увеличения возможностей их синхронизации.
универсальных Intel CPU ядер. Первым устройством, построенным на данной архитектуре, является сопроцессор Intel ® Xeon Phi™.
Не смотря на многочисленные попытки экранировать от разработчика приложений архитектуру параллельных ВС, следует признать, что эффективное программирование современных высокопроизводительных систем остается во многом архитектурозависимым. Безусловно существуют общепризнанные стандартизированные технологии параллельного программирования (например, OpenMP и Pthread для ВС с общей памятью, MPI для ВС с распределенной памятью, OpenGL и Nvidia CUDA для графических сопроцессоров), но применение каждой из этих технологий требует знание низкоуровневых подробностей строения ВС.
Например, невозможно написать эффективную, а зачастую, и просто корректную многопоточную OpenMP-программу без учета проблем синхронизации, принятой модели памяти и прочее.
Чтобы написать приложение на CUDA, необходимо не только разобраться, как распределять работу по нитям, учесть тонкости обращения с разными видами памяти сопроцессора, но и построить отображение логики данных задачи на логику сетки нитей, принять во внимание слабые возможности синхронизации нитей внутри кода ядра CUDA, изучить подробности эффективной загрузки потокового мультипроцессора и ограничений, связанных с использованием блока вычислений специальных функций.
Численное решение систем линейных алгебраических уравнений (СЛАУ) является, с одной стороны, конечной задачей во многих областях вычислительной математики, математического моделирования, оптимизации, анализа больших объемов данных, алгоритмов обработки изображений, теории игр и многих других, с другой стороны, это достаточно простой и вычислительноемкий процесс для анализа возможностей и эффективности параллельных вычислительных систем и технологий программирования. Достаточно сказать, что ранжирование современных суперкомпьютеров в мировом списке самых производительных компьютеров top500 происходит на основе теста, оценивающего скорость решения суперкомпьютером СЛАУ.
Поэтому для анализа архитектур сопроцессоров нами были выбраны два итерационных метода решения СЛАУ. Первый из них - простой итерационный метод Якоби (МЯ). Он хоть и является не самым эффективным с точки зрения вычислительной алгебры, но на его основе построен целый класс итерационных алгоритмов. Кроме того, метод Якоби обладает хорошим потенциальным параллелизмом. Второй - метод сопряженных градиентов (МСГ) - является нелинейным итерационным процессом Крыловского типа. Если все вычисления выполняются точно, то метод сопряженных градиентов находит точное решение за количество итераций равное размерности матрицы в одном направлении. Метод сопряженных градиентов обладает несколько худшим потенциалом к распараллеливанию, особенно для параллельных ВС с распределенной памятью. В то же время этот метод хорошо поддается векторизации, что и послужило основным мотивом выбора его в качестве второй тестовой задачи.
Таким образом целью данной работы является освоение новой технологии программирования для сопроцессора Intel® Xeon Phi™, а также сравнение архитектур сопроцессора Intel® Xeon Phi™ и графического процессора NVidia Tesla и технологий программирования для них на классе задач, связанных с итерационными алгоритмами решения СЛАУ.
В ходе выполнения работы были решены следующие задачи.
1. Освоена технология программирования для сопроцессора Intel® Xeon Phi™.
2. Освоена технология программирования CUDA для графического сопроцессора NVidia Tesla.
4. Проведен анализ ускорения, эффективности алгоритмов, влияние архитектуры на их реализацию.
Работа состоит из введения, трех глав, заключения, списка цитируемых источников и приложения.
В первой главе приводится краткое описание архитектур сопроцессора Intel ® Xeon Phi™ 5110P и графического процессора NVidia Tesla C2050, а также их сравнение. Глава написана на основе следующих источников [1-5].
Во второй главе описаны исследуемые технологии программирования: технология параллелизации циклов OpenMP, технология векторизации от компании Intel, технология NVidia CUDA. Здесь же приведено описание возможных алгоритмов компиляции и сборки программ для Intel ® Xeon Phi™ в нативном режиме и NVidia CUDA. Глава написана с использованием следующих источников [6-16].
В третьей главе описаны модельные алгоритмы, приведены результаты численных экспериментов, обсуждается ускорение параллельного и векторного кода в различных аспектах.
Результаты работы частично доложены на Открытой конференции молодых ученых ИВМ СО РАН по математическому моделированию и информационным технологиям, проходившей в марте 2017 года, а также на конференции молодых ученых «Проспект Свободный-2017» в секции Mathematics and Computer Science (in English). Также результаты работы частично опубликованы в тезисах этих конференций [20].
1. Проведено исследование эффективности применения сопроцессора Intel® Xeon Phi™ на программах, реализующих базовые алгоритмы, связанные с итерационными методами решения СЛАУ.
2. Для метода Якоби и метода сопряженных градиентов написаны и протестированы векторизованные с помощью технологии от компании Intel версии кода. Показано, что при выполнении векторизованного программного кода на одном ядре сопроцессора Intel® Xeon Phi™ 5110P достигается ускорение по отношению к последовательному коду в среднем в 5 раз для обоих рассматриваемых итерационных методов.
3. Для метода Якоби и метода сопряженных градиентов написаны c помощью технологии OpenMP и протестированы параллельные версии кода. Показано, что при выполнении программ на сопроцессоре Intel® Xeon Phi™ 5110P наблюдается классическая картина линейного ускорения параллельной версии программы относительно последовательной вплоть до 60 потоков. Дальнейший рост ускорения замедляется и становится неустойчивым, однако наблюдается вплоть до 240 потоков.
4. Для изучения совместного применения технологий векторизации Intel и OpenMP была написана и оттестирована векторно-параллельные версии программ для метода Якоби и метода сопряженных градиентов. Ускорение векторно-параллельного кода относительно просто параллельного на одном и том же количестве нитей постепенно снижается с 5 раз до 1 раза при увеличении количества потоков вплоть до максимальных 240.
5. Проведено исследование эффективности применения технологии программирования CUDA для графического сопроцессора NVidia
Tesla C2050 на программах, реализующих базовые алгоритмы, связанные с итерационными методами решения СЛАУ.
6. Для метода Якоби написаны и протестированы параллельные версии кода с помощью технологии CUDA. Показано, что параллельный код выполняется на GPU NVidia Tesla C2050 в 6-7 быстрее относительно последовательного, выполненного на хост-машине.
7. Было проведено сравнение влияния увеличения вычислительной нагрузки (увеличением размерности СЛАУ) на производительность сопроцессоров Intel ® Xeon Phi™ и NVidia CUDA. Из полученных данных было выявлено, что время выполнения кода на GP NVidia Tesla растёт быстрее, чем на Intel ® Xeon Phi™. В результате можно констатировать, что Intel ® Xeon Phi™ менее резко реагирует на увеличение вычислительной трудоемкости задачи.
1. НОУ ИНТУИТ Лекция 2: Архитектура Intel Xeon Phi http://www.intuit.ru/studies/courses/10611/1095/lecture/22906 (дата обращения: ноябрь 2015 - июль 2017).
2. Intel® Xeon Phi™ X100 Family Coprocessor - the Architecture https://software.intel.com/en-us/articles/intel-xeon-phi-coprocessor-
codename-knights-corner (дата обращения: ноябрь 2015 - июль 2017).
3. Intel® Xeon Phi™ Core Micro-architecture https://software.intel.com/en-
us/articles/intel-xeon-phi-core-micro-architecture (дата обращения: ноябрь 2015 - июль 2017).
4. Intel® Xeon Phi™ Coprocessor Architecture Overview https://software.intel.com/sites/default/files/Intel%C2%AE_Xeon_Phi%E2
%84%A2_Coprocessor_Architecture_Overview.pdf (дата обращения: ноябрь 2015 - июль 2017).
5. NVidia. Fermi Compute Architecture White Paper v1.1 http://www.nvidia.ru/object/fermi_architecture_ru.html (дата обращения: декабрь 2016 - июль 2017).
6. Карепова, Е. Д. Основы многопоточного и параллельного программирования: учеб. пособие / Е. Д. Карепова. - Красноярск: Сиб. федер. ун-т, 2016. - 356 с.
7. Гергель, В. П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем: учеб. пособие / В. П. Гергель. - Изд-во Московского университета, 2010. - 544 с.
8. Гергель, В. П. Основы параллельных вычислений для многопроцессорных вычислительных систем: учеб. пособие / В. П. Гергель, Р. Г. Стронгин. - Н. Новгород: Изд-во Нижегор. ун-та, 2003. - 184 с.
9. Антонов, А. С. Параллельное программирование с использованием технологии OpenMP: учеб. пособие / А. С. Антонов. - М.: Изд-во МГУ. - 2009. - 77 с.
10. Боресков, А. В. Основы работы с технологией CUDA / А. В. Боресков,
A. А. Харламов. - М.: ДМК Пресс, 2010. - 232 c.
11. Сандерс, Дж. Технология CUDA в примерах: введение в программирование графических процессоров / Дж. Сандерс, Э. Кэндрот. - М.: ДМК Пресс, 2011. - 232 c.
12. Getting Started with OpenMP https://software.intel.com/ru- ru/articles/getting-started-with-openmp/ (дата обращения: ноябрь 2016 - июль 2017).
13. The OpenMP API specification for parallel programming http://www.openmp.org/specifications/ (дата обращения: ноябрь 2016 - июль 2017).
14. Data Alignment to Assist Vectorization https://software.intel.com/en- us/articles/data-alignment-to-assist-vectorization (дата обращения: январь 2017 - июль 2017).
15. Using Automatic Vectorization https://software.intel.com/en-us/node/522572 (дата обращения: январь 2017 - июль 2017).
16. EARLY EXPERIENCES RUNNING THE 3D STENCIL JACOBI
METHOD IN INTEL XEON PHI
https://www.researchgate.net/publication/274509348 (дата обращения: январь 2017 - июль 2017).
17. НОУ ИНТУИТ Самостоятельная работа 1: Компиляция и запуск
приложений на Intel Xeon Phi
http://www.intuit.ru/studies/courses/10611/1095/lecture/22914?page=2 (дата обращения: март 2016 - июль 2017).
18. Вержбицкий, В. М. Основы численных методов: Учебник для вузов /
B. М. Вержбицкий. - М.: Высш. шк., 2002. - 840 c.
19. Баркалов, К. А. Методы параллельных вычислений / К. А. Баркалов. - Н. Новгород: Изд-во Нижегородского госуниверситета им. Н.И. Лобачевского, 2011. - 124 с.
20. Патрикеев, В. В. Материалы Открытой конференции молодых учёных ИВМ СО РАН по математическому моделированию и информационным технологиям. - Красноярск: ИВМ СО РАН, 2017. - 34 с.
21. O que e o Intel® Xeon Phi™ e como ele atinge o impressionante
processamento de 1 TFlops https://software.intel.com/en-us/node/371593 (дата обращения: май 2017 - июль 2017).
22. How CUDA's Abstractions Map to a GPU Implementation
http://15418.courses.cs.cmu.edu/spring2013/article/11 (дата обращения: июль 2017).