Исследование технологий реализации алгоритмов линейной алгебры с использованием технологии CUDA
|
ВВЕДЕНИЕ 4
Глава 1 УМНОЖЕНИЕ МАТРИЦ БОЛЬШИХ РАЗМЕРНОСТЕЙ НА ЭЛЕКТРОННО-ВЫЧИСЛИТЕЛЬНОЙ МАШИНЕ 7
1.1 Применение матричного умножения в современном мире 7
1.2 Общий вид умножения матриц 13
1.3 Математическое описание 14
1.4 Архитектура графического процессора 18
1.5 Описание вычислителя на графическом процессоре лаборатории
распределенных вычислений ТГУ 20
Глава 2 РЕАЛИЗАЦИЯ МАТРИЧНОГО УМНОЖЕНИЯ 27
2.1 Сравнение различных технологий внедрения параллельного
программного обеспечения 27
2.2 Особенности решения систем линейных алгебраических уравнений на
CUDA 28
2.3 Реализация и тестирование алгоритмов матричного умножения 30
2.3.1 Умножение матриц при ленточной схеме разделения данных 30
2.3.2 Метод Фокса 33
Глава 3 АНАЛИЗ ЭФФЕКТИВНОСТИ РАЗРАБОТАННЫХ АЛГОРИТМОВ . 38
3.1 Разработка технологии анализа эффективности алгоритмов 38
3.2 Описание эксперимента и их анализ полученных данных 44
3.2.1 Умножение матриц при ленточной схеме разделения данных 44
3.2.2 Метод Фокса 44
3.3 Проведение экспериментов по эффективности 45
3.4 Анализ эффективности 48
ЗАКЛЮЧЕНИЕ 50
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 51
ПРИЛОЖЕНИЕ
Глава 1 УМНОЖЕНИЕ МАТРИЦ БОЛЬШИХ РАЗМЕРНОСТЕЙ НА ЭЛЕКТРОННО-ВЫЧИСЛИТЕЛЬНОЙ МАШИНЕ 7
1.1 Применение матричного умножения в современном мире 7
1.2 Общий вид умножения матриц 13
1.3 Математическое описание 14
1.4 Архитектура графического процессора 18
1.5 Описание вычислителя на графическом процессоре лаборатории
распределенных вычислений ТГУ 20
Глава 2 РЕАЛИЗАЦИЯ МАТРИЧНОГО УМНОЖЕНИЯ 27
2.1 Сравнение различных технологий внедрения параллельного
программного обеспечения 27
2.2 Особенности решения систем линейных алгебраических уравнений на
CUDA 28
2.3 Реализация и тестирование алгоритмов матричного умножения 30
2.3.1 Умножение матриц при ленточной схеме разделения данных 30
2.3.2 Метод Фокса 33
Глава 3 АНАЛИЗ ЭФФЕКТИВНОСТИ РАЗРАБОТАННЫХ АЛГОРИТМОВ . 38
3.1 Разработка технологии анализа эффективности алгоритмов 38
3.2 Описание эксперимента и их анализ полученных данных 44
3.2.1 Умножение матриц при ленточной схеме разделения данных 44
3.2.2 Метод Фокса 44
3.3 Проведение экспериментов по эффективности 45
3.4 Анализ эффективности 48
ЗАКЛЮЧЕНИЕ 50
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 51
ПРИЛОЖЕНИЕ
Все вычислительные системы, от мобильных до суперкомпьютеров, становятся гетерогенными, огромное количество параллельных компьютеров используется для повышения энергоэффективности и вычислительной пропускной способности.
Ускоренные вычисления с GPU- это использование графического процессора (GPU) вместе с процессором CPU для ускорения научных, аналитических, инженерных, потребительских и корпоративных приложений. Впервые они были открыты компанией NVIDIA® в 2007 году, ускорители GPU стали энергоэффективными центрами обработки данных в государственных лабораториях, университетах, предприятиях, а также широко используются на малых и средних предприятиях по всему миру. Графические процессоры ускоряют приложения на платформах, начиная от автомобилей, мобильных телефонов и планшетов, до беспилотных летательных аппаратов и роботов.
Существует много преимуществ использования суперкомпьютеров. Во- первых, использование графических ускорителей NVIDIA позволяет значительно увеличить скорость вычислений, она становится в тысячу раз быстрее обычного персонального компьютера, что очень полезно, например, при прогнозировании погоды. Потребовались бы десять дней для ПК, чтобы спрогнозировать прогноз погоды всего на одни сутки, что нельзя сказать о суперкомпьютере, который значительно отливается своей мощностью, а следовательно и скоростью выполнения сложных операций. Второе преимущество суперкомпьютера заключается в то, что он обладает самым передовым технологическим уровнем, например, арсенид Галлума (GaAS).Третий аспект, касающийся этих удивительных машин, которые помогают людям во всем мире, заключается во множестве конкретных архитектурных решений, направленных на повышение быстродействия выполняемых задач.
Суперкомпьютеры дали возможность решению задач огромного размера. Стало возможным приступить к реализации реалистических математических моделей сложных физических явлений и технических устройств, которые ранее невозможно было решать на маломощных последовательных компьютерах[6].
В течение десятилетий суперкомпьютеры стремились к повышению производительности. Но, кроме умопомрачительного повышения быстродействия одного микропроцессора, производители суперкомпьютеров зачастую увеличивали число процессоров в целом. Их труды не прошли даром, потому что в наше время суперкомпьютеры насчитывают десятки и сотни тысяч согласованно работающих процессорных ядер[1].
Производительность в разы увеличилась благодаря распараллеливанию алгоритмов под многоядерные цифровые преобразователи (ЦП), но, к сожалению, увеличивать скорость на традиционных архитектура становится с каждым годом сложнее.
В настоящее время, применение дополнительных ускорителей, которые принимают на себя часть вычислительной нагрузки, является актуальным для высокопроизводительной обработки данных
Основной отличительной чертой современных GPU является включение в архитектуру CUDA (Compute Unified Device Architecture) унифицированного шейдерного конвейера, который в свою очередь позволяет программе задействовать разнообразные фрифмитически-логические устройства (АЛУ), входящее в микросхему [1].
Данное добавление средств было произведено с целью расширения возможности решения спектра задач, начиная от традиционных задач компьютерной графики и заканчивая вычислениями общего назначения.
Производительность вычислений на GPU может в разы увеличиться за счет количества ядер и других архитектурных особенностей. Таким образом, мы приходим к тому, что решение задач матричного умножения на программно-аппаратной архитектуре параллельных вычислений NVidia CUDA является актуальной.
Практическая новизна работы заключается в сравнительном анализе программных технологий перемножения матриц на графическом процессоре с учетом архитектурных особенностей плат NVidia Tesla K10.
Объектом бакалаврской работы является вычислительный процесс умножения матриц на аппаратно-программной платформе CUDA.
Предмет бакалаврской работы - параллельные алгоритмы и программная реализация процесса умножения матриц.
Цель работы: анализ эффективности разработанных алгоритмов матричного умножения с использованием программно-аппаратной архитектуры параллельных вычислений NVidia CUDA.
Задачами работы являются:
1. Изучить методы параллельных алгоритмов матричного умножения.
2. Спроектировать параллельные алгоритмы матричного умножения.
3. Реализовать параллельные алгоритмы умножения матриц на языке CUDA C/C++.
4. Протестировать и исследовать эффективность разработанных алгоритмов матричного умножения.
Бакалаврская работа состоит из трех глав.
Первая глава работы посвящена анализу матричного умножения и численных способов решения под ЭВМ с распараллеливанием. А также анализу суперкомпьютера ТГУ, технологии CUDA и архитектуры NVidia Kepler.
Вторая глава описывает особенности умножения матриц под технологию CUDA, реализацию алгоритмов решения и их тестирование.
Третья глава посвящена процессу анализа эффективности реализованных алгоритмов матричного умножения и их улучшению.
В заключении подводится общая оценка данных реализаций алгоритма, анализ возникших при разработке трудностей, а также перспективы применения алгоритма в различных ситуациях.
Ускоренные вычисления с GPU- это использование графического процессора (GPU) вместе с процессором CPU для ускорения научных, аналитических, инженерных, потребительских и корпоративных приложений. Впервые они были открыты компанией NVIDIA® в 2007 году, ускорители GPU стали энергоэффективными центрами обработки данных в государственных лабораториях, университетах, предприятиях, а также широко используются на малых и средних предприятиях по всему миру. Графические процессоры ускоряют приложения на платформах, начиная от автомобилей, мобильных телефонов и планшетов, до беспилотных летательных аппаратов и роботов.
Существует много преимуществ использования суперкомпьютеров. Во- первых, использование графических ускорителей NVIDIA позволяет значительно увеличить скорость вычислений, она становится в тысячу раз быстрее обычного персонального компьютера, что очень полезно, например, при прогнозировании погоды. Потребовались бы десять дней для ПК, чтобы спрогнозировать прогноз погоды всего на одни сутки, что нельзя сказать о суперкомпьютере, который значительно отливается своей мощностью, а следовательно и скоростью выполнения сложных операций. Второе преимущество суперкомпьютера заключается в то, что он обладает самым передовым технологическим уровнем, например, арсенид Галлума (GaAS).Третий аспект, касающийся этих удивительных машин, которые помогают людям во всем мире, заключается во множестве конкретных архитектурных решений, направленных на повышение быстродействия выполняемых задач.
Суперкомпьютеры дали возможность решению задач огромного размера. Стало возможным приступить к реализации реалистических математических моделей сложных физических явлений и технических устройств, которые ранее невозможно было решать на маломощных последовательных компьютерах[6].
В течение десятилетий суперкомпьютеры стремились к повышению производительности. Но, кроме умопомрачительного повышения быстродействия одного микропроцессора, производители суперкомпьютеров зачастую увеличивали число процессоров в целом. Их труды не прошли даром, потому что в наше время суперкомпьютеры насчитывают десятки и сотни тысяч согласованно работающих процессорных ядер[1].
Производительность в разы увеличилась благодаря распараллеливанию алгоритмов под многоядерные цифровые преобразователи (ЦП), но, к сожалению, увеличивать скорость на традиционных архитектура становится с каждым годом сложнее.
В настоящее время, применение дополнительных ускорителей, которые принимают на себя часть вычислительной нагрузки, является актуальным для высокопроизводительной обработки данных
Основной отличительной чертой современных GPU является включение в архитектуру CUDA (Compute Unified Device Architecture) унифицированного шейдерного конвейера, который в свою очередь позволяет программе задействовать разнообразные фрифмитически-логические устройства (АЛУ), входящее в микросхему [1].
Данное добавление средств было произведено с целью расширения возможности решения спектра задач, начиная от традиционных задач компьютерной графики и заканчивая вычислениями общего назначения.
Производительность вычислений на GPU может в разы увеличиться за счет количества ядер и других архитектурных особенностей. Таким образом, мы приходим к тому, что решение задач матричного умножения на программно-аппаратной архитектуре параллельных вычислений NVidia CUDA является актуальной.
Практическая новизна работы заключается в сравнительном анализе программных технологий перемножения матриц на графическом процессоре с учетом архитектурных особенностей плат NVidia Tesla K10.
Объектом бакалаврской работы является вычислительный процесс умножения матриц на аппаратно-программной платформе CUDA.
Предмет бакалаврской работы - параллельные алгоритмы и программная реализация процесса умножения матриц.
Цель работы: анализ эффективности разработанных алгоритмов матричного умножения с использованием программно-аппаратной архитектуры параллельных вычислений NVidia CUDA.
Задачами работы являются:
1. Изучить методы параллельных алгоритмов матричного умножения.
2. Спроектировать параллельные алгоритмы матричного умножения.
3. Реализовать параллельные алгоритмы умножения матриц на языке CUDA C/C++.
4. Протестировать и исследовать эффективность разработанных алгоритмов матричного умножения.
Бакалаврская работа состоит из трех глав.
Первая глава работы посвящена анализу матричного умножения и численных способов решения под ЭВМ с распараллеливанием. А также анализу суперкомпьютера ТГУ, технологии CUDA и архитектуры NVidia Kepler.
Вторая глава описывает особенности умножения матриц под технологию CUDA, реализацию алгоритмов решения и их тестирование.
Третья глава посвящена процессу анализа эффективности реализованных алгоритмов матричного умножения и их улучшению.
В заключении подводится общая оценка данных реализаций алгоритма, анализ возникших при разработке трудностей, а также перспективы применения алгоритма в различных ситуациях.
В ходе проведенной работы была изучена архитектура видео ускорителей от NVidia, были изучены и реализованы методы повышения производительности алгоритмов под графические процессоры NVidia Tesla K10, А также проведен сравнительный анализ методов матричного умножения, были представлены параллельные реализации матричного умножения с использованием как общих, так и распределенных подходов к памяти. Матричное умножение является превосходным алгоритмом параллельной обработки, как показали показатели ускорения / эффективности. Чтобы избежать конфликтов памяти при использовании подхода с разделяемой памятью, важно перенести данные на встроенную / локальную память для выполнения. Поскольку межпроцессорная связь требуется только изначально, она не оказывает сильного влияния на производительность подхода с распределенной памятью; Но с использованием методов двойной буферизации, это можно свести к минимуму еще больше. Также необходимо учитывать балансировку нагрузки.
Для хорошо распараллеливаемых вычислений и сложных алгоритмов использование CUDA дает лучший результат.
На примере умножения матриц мы видим эффективность и способы оптимизации реализации параллельных алгоритмов на технологии Nvidia Cuda. Серия экспериментов выявила один небольшой недостаток, заключающийся в том, что передача данных в видеопамять и обратно требует много времени.
Графические процессоры от NVIDIA и программно-аппаратная архитектура параллельных вычислений NVidia CUDA позволяют программистам использовать тысячи CUDA ядер для параллельных вычислений. Для простых вычислений глубокие знание архитектуры GPU не требуются. Однако только реализация программ под конкретную архитектуру конкретного GPU даст максимальную производительность.
Для хорошо распараллеливаемых вычислений и сложных алгоритмов использование CUDA дает лучший результат.
На примере умножения матриц мы видим эффективность и способы оптимизации реализации параллельных алгоритмов на технологии Nvidia Cuda. Серия экспериментов выявила один небольшой недостаток, заключающийся в том, что передача данных в видеопамять и обратно требует много времени.
Графические процессоры от NVIDIA и программно-аппаратная архитектура параллельных вычислений NVidia CUDA позволяют программистам использовать тысячи CUDA ядер для параллельных вычислений. Для простых вычислений глубокие знание архитектуры GPU не требуются. Однако только реализация программ под конкретную архитектуру конкретного GPU даст максимальную производительность.



