Введение 3
1. Теоретические аспекты использования GPU в массивно-параллельной архитектуре 5
1.1 Массивно-параллельная архитектура 5
1.2 Архитектура GPU и ее использование в массивно-параллельной
архитектуре 7
1.3 Архитектура GPU в сравнении с CPU 14
1.4 NVidia CUDA и ее применение 17
1.5 Архитектура CUDA 18
1.6 Типы памяти в CUDA 22
1.7 OpenGl и ее взаимосвязь с CUDA 28
2. Программирование CUDA 30
3. Реализация алгоритма синусоиды 32
4. Описание функций для создания синусоиды 33
5. Полученные результаты 41
Заключение 44
Список использованной литературы 46
Приложение А
В настоящее время среди наиболее актуальных тем для исследования выделяются параллельные вычисления. Практически во всех ведущих IT- компаниях уже давно были созданы подразделения, отвечающие за проектирование и разработку высокопроизводительных систем на основе параллельной обработки данных. Такому пристальному вниманию параллельные вычисления обязаны стремительному росту обрабатываемых объемов данных. Спектр задач, решение которых можно получить при помощи параллельных вычислений, довольно широк. В него входит симуляция физических процессов, анализ и обработка изображения, задачи прогнозирования, анализ данных, финансовые и электромагнитные расчеты и многое другое. Некоторые из задач могут быть решены с использованием распределенных облачных вычислений, другие же могут быть решены за приемлемое время только лишь, будучи запущенными на суперкомпьютере с заявленной производительностью в сотни терафлопов. Но также существует ряд задач, которые по тем или иным причинам должны выполняться здесь и сейчас, на клиентской машине. Центральный процессор, которым оснащены современные компьютеры, является их основным вычислительным устройством и просто не способен решать эти задачи за приемлемое время. Решение данной проблемы было найдено сравнительно недавно.
Но в настоящее время практически каждый персональный компьютер оснащен отдельными видеокартами. Именно они и стали решением проблемы обработки трудоемких вычислительных задач. Графические процессоры спроектированы так, чтобы обрабатывать огромные объемы данных за приемлемое время. На настоящий момент они способны обеспечить производительность, оцениваемую сотнями и тысячами гигафлоп.
Целью данной работы является рассмотрение аспектов реализации параллельных алгоритмов, практическое применение их в GPU в массивно-параллельной архитектуре. Также реализация алгоритма графического 3
отображения «синусоиды» посредством CUDA [1] и OpenGl [2] для ускорения работы видеокарты путем распараллеливания, то есть использование графических процессоров GPU самой видеокарты
В процессе выполнения данной работы было рассмотрено одно из решений для вычисления графических задач средствами GPU — технология NVIDIA CUDA. Данная технология является эффективным средством, имеющим ряд преимуществ: доступность, поддержка любой современной видеокартой NVIDIA, производительность, легкость в освоении и другие. Результатом работы компилятора является сгенерированный на языке С++ код для демонстрации как динамически изменять буфер вершин используя ядро CUDA.
Были изучены теоретические аспекты, связанные с использованием GPU в массивно-параллельной архитектуре. Проведено сравнение архитектур GPU и CPU. Вышеперечисленное доказывает, что, применение CUDA довольно хорошо сокращает время обработки данных больших размерностей.
С использованием данной технологии CUDA был реализован алгоритм синусоиды:
1. Создание пустого объекта буфера вершин (VBO)
2. Регистрация объекта буфера (VBO)
3. Связывание объекта буфера (VBO) в память Cuda
4. Запуск ядра Cuda для изменения позиции вершин.
5. Выгрузка объекта буфера (VBO) из памяти Cuda
6. Представление результатов вычисления, используя OpenGL.
Подводя итог данной работы, можно отметить, что графический процессор, обладая большим вычислительным потенциалом, однако по- прежнему не может полностью заменить работу центрального процессора, являющегося универсальным вычислительным средством. Он имеет возможность облегчить загрузку CPU, взяв на себя операции, представляющие собой наиболее трудоемкие и сложные вычисления. Но сейчас видеочипы движутся постепенно в сторону CPU, становясь все более универсальными, как и CPU становятся все более «параллельными», увеличивая количество ядер, используя многопоточность. Возможно, GPU и CPU в будущем просто сольются. Известно, что многие компании, в том числе Intel и AMD работают над подобными проектами. Но на данном этапе наиболее актуальной для объемных вычислений остается, и будет становиться все более популярной технология GPGPU.
В данной работе, к сожалению, из-за нехватки времени не удалось провести анализ скорости выполнения алгоритма «синусоиды» с использованием параллелизма и без. В связи с этим отсутствует наглядность использования процессоров GPU для ускорения работы видеокарты путем распараллеливания.
На сегодняшний день о CUDA можно говорить, как о весьма удачно нашедшей свое применение перспективной технологии, поддержка которой уже давно не роскошь, а напротив - весьма затруднительно будет найти чипсет, который бы ее не поддерживал.
Исходные тексты программной реализации алгоритма графического представления «синусоиды» прилагаются на компакт-диске.
1. CUDA Toolkit Documentation
2. The Industry's Foundation for High Performance Graphics OpenGl Documentation
3. http://docs.nvidia.com/cuda/index.html
4. Богданов, Корхов, Мареев, Станкова: Архитектуры и топологии многопроцессорных вычислительных систем. - М.: ПрессЛит, 2011. - 154 с.
5. Пахомов,С.Г.Революция в мире графических процессоров /С.Г.Пахомов //КомпьютерПресс - 2010. - 12. - с.2-7.
6. Дымченко,Л.А.Вычисления на GPU/Л.А.Дымченко//IT-Expert - 2013. - 10. - c.15-23.
7. Боресков А. В., Харламов А. В. Основы работы с технологией CUDA. — М.: ДМКПресс, 2010. — 232 с.
8. Сандерс Дж., Кэндрот Э.: Технология CUDA в примерах: введение в программирование графических процессоров: Пер. с англ. Слинкина А.А. - М.:ДМК Пресс, 2013. - 232с.
9. Боресков, Харламов, Марковский: Параллельные вычисления на GPU. Архитектура и программная модель CUDA: Учебное пособие. - М.: Издательство Московского Университета, 2012. - 336 с.
10. А.В. Григорьев, И.С. Еремеев, М.И. Алексеева: Параллельное
программирование с использованием технологии CUDA: Учебное пособие. - М.: Издательство Екатеринбургского Университета, 2012. - 143
11. Захаров П.Е., Григорьев А.В., Васильева М.В. Параллельное
программирование на основе библиотек. - Якутск: Издательско- полиграфический комплекс СВФУ, 2011. - 94 с.
12. Cuda Tutorial [Электронный ресурс] / Nvidia Developer Zone - Электр. дан. - Режим доступа: http://developer.nvidia.com/cuda/, свободный. - Загл. с экрана - Яз. англ.
13. Wen-mei W. Hwu GPU Computing Gems Emerald Edition , Morgan Kaufmann, 2011.
14. А.В. Старченко, В.Н. Берцун: Методы параллельных вычислений: Учебник. — М.: Издательство Томского Университета, 2013. -224
15. Ю.М. Баянковский, А.В. Игнатенко: Начальный курс OpenGl - М.:Планета зананий, 2007. - 221с.
16. Самарский А.А., Николаев Е.С. Методы решения сеточных уравнений - М.: Наука, 1978. - 592 с.