ВКР: Компилятор Fortran DVMH - генерация ядер для графического процессора
Описание
Московский Государственный Университет им. М.В. Ломоносова
Факультет Вычислительной математики и кибернетики
Кафедра Системного программирования
Дипломная работа
«Компилятор Fortran DVMH: генерация ядер для графического процессора»
Научный руководитель
д. ф-м. н., профессор Крюков Виктор Алексеевич
Аннотация
Данная работа посвящена созданию блока транслятора с языка Fortran-DVMH в C-CUDA. (DVMH – система, позволяющая разрабатывать параллельные программы на языках С и Fortran, с возможностью исполнения программ на различных ускорителях. CUDA — архитектура параллельных вычислений с использованием GPU). Проводится обзор инструментариев, предоставляющих пользователю возможность изменения внутреннего представления программы и генерации нового файла на целевом языке по этому внутреннему представлению. Описаны основные преобразования, выполняемые транслятором и представлены результаты тестирования, показывающие корректность работы данного транслятора.
1. Введение
За последние десятилетия для всех областей науки значительно выросла потребность в обработке огромного количества данных. Для этого необходимы мощные вычислительные системы и специалисты, имеющие навыки параллельного программирования. Дефицит высококвалифицированных специалистов и отсутствие требуемых вычислительных мощностей вызвали бурное развитие суперкомпьютерных технологий по всему миру: почти во всех университетах были введены курсы по технологиям параллельного программирования и многие из них стали обязательными, были поставлены новые мощные суперкомпьютерные комплексы в исследовательские лаборатории, и TOP 500 самых мощных суперкомпьютеров обновляется с большой скоростью. В конце первого десятилетия и в начале следующего десятилетия XXI века, с появлением мощных графических карт возникли гибридные суперкомпьютеры, где вычисления происходят и на CPU, и на GPU [1]. GPU вывели параллельное программирование на новый уровень — при их использовании можно достигнуть ускорения работы приложений в десятки раз. Для написания программ, которые должны быть выполнены на графическом процессоре были придуманы специальные языки программирования: CUDA C, CUDA Fortran, OpenCL и другие .
Графические процессоры и их преимущества по сравнению с центральными процессорами.
Графический процессор (Graphics Processing Unit, GPU) — микропроцессор, специализированный для обработки графической информации. Он берет на себя часть функций по формированию трехмерного изображения и позволяет разгрузить центральный микропроцессор от выполнения операций, связанных с расчетами геометрических трансформаций, моделей освещения и т.д. Как правило, графическим процессором оснащены все современные видеокарты.
Термин Graphics Processing Unit (GPU) был впервые использован корпорацией NVIDIA для обозначения того факта, что графический ускоритель, первоначально используемый только для ускорения трехмерной графики, стал мощным программируемым устройством (процессором), пригодным для решения значительно более широкого класса вычислительных задач [2].
Отличительными особенностями GPU по сравнению с центральным процессором (CPU) являются:
- архитектура GPU, максимально нацелена на увеличение скорости расчета текстур и сложных графических объектов;
- GPU имеет ограниченный набор команд
Различия в архитектуре приводят к различию в принципах работы процессоров. Исторически сложилось так, что CPU предполагает последовательную обработку информации, а GPU первоначально предназначался для обработки компьютерной графики, поэтому рассчитан на максимальное распараллеливание.
Нельзя сказать, что одна из этих архитектур лучше, чем другая, каждая из них имеет свои плюсы. С последовательными вычислениями лучше работает СPU, а при обрабатывании больших объемов данных, над которыми нужно произвести одинаковые вычисления, очевидное преимущество имеет GPU.
Метод программирования графических ускорителей следует из их архитектуры . Концепция – разделить большие объемы входной информации (массивы, матрицы, кубы) на независимые участки и для обработки каждого участка по некоторому алгоритму запустить отдельные группы потоков.
Все группы выполняют одинаковый алгоритм над различными частями исходного набора данных. Отдельные нити сгруппированы в блоки. Блоки могут быть одномерными, двумерными или трехмерными. Гарантируется, что каждый блок полностью запускается на исполнение в пределах одного симметричного мультипроцессора со своей общей памятью. Поэтому, нити в пределах одного блока могут пользоваться разделяемой памятью, при этом необходимо обеспечить синхронизацию явно, так как порядок выполнения нитей внутри блока неизвестен и определяется динамически. Максимальное число нитей в каждом блоке ограничено параметрами и ресурсами конкретного ускорителя [3].
CUDA.
CUDA (Compute Unified Device Architecture) — это архитектура параллельных вычислений от NVIDIA, позволяющая существенно увеличить вычислительную производительность благодаря использованию GPU (графических процессоров) [4].
С точки зрения программного обеспечения, реализация CUDA представляет собой кроссплатформенную систему компиляции и исполнения программ, части которых работают на CPU и GPU. CUDA предназначена для разработки GPU-приложений без привязки к графическим API и поддерживается всеми GPU NVIDIA, начиная с серии GeForce 8 [2].
CUDA SDK позволяет программистам реализовывать на специальном упрощенном диалекте языка программирования С (Fortran) алгоритмы, выполнимые на графических процессорах NVIDIA, и включать специальные функции в текст программы на C (Fortran).
Несмотря на хорошую документированность, наличие множества хороших руководств, online/offline-курсов и вебинаров, разработка приложений с помощью CUDA все равно является очень трудоемкой и «временно-затратной» задачей. Поэтому для облегчения работы программистов с графическими процессорами были созданы такие технологии как DVMН[5][6] и openACC[7].

Файлы условия, демо
Характеристики ВКР
Список файлов
