Параллельные вычисления в архитектуре CUDA

Автор работы: Пользователь скрыл имя, 24 Декабря 2012 в 19:12, курсовая работа

Описание работы

Устройства для преобразования персональных компьютеров в маленькие суперкомпьютеры известны довольно давно. Ещё в 80-х годах прошлого века на рынке предлагались так называемые транспьютеры, которые вставлялись в распространенные тогда слоты расширения ISA. Первое время их производительность в соответствующих задачах впечатляла, но затем рост быстродействия универсальных процессоров ускорился, они усилили свои позиции в параллельных вычислениях, и смысла в транспьютерах не осталось. Хотя подобные устройства существуют и сейчас — это разнообразные специализированные ускорители. Но зачастую сфера их применения узка и особого распространения такие ускорители не получили.

Содержание работы

1.Введение 3
2. GPGPU на примере использования технологии CUDA 5
2.1. Особенности использования GPU 5
2.1.1. Разница между CPU и GPU в параллельных расчётах 5
2.1.2. Первые попытки применения расчётов на GPU 10
2.1.3. Области применения параллельных расчётов на GPU 11
2.2. Архитектура CUDA 13
2.2.1. Возможности NVIDIA CUDA 13
2.2.2. История развития CUDA 14
2.2.3. Преимущества и ограничения CUDA 16
2.2.4. Решения с поддержкой NVIDIA CUDA 19
2.2.5. Состав NVIDIA CUDA 20
2.3. Основы создания программ на CUDA 22
2.3.1. Модель программирования CUDA 24
2.3.2. Модель памяти CUDA 26
2.3.3. Среда программирования 29
2.3.4. Стадии компиляции CUDA-приложения 30
2.3.5. Оптимизация программ на CUDA 30
3.Выводы 32
4. Список литературы 34

Файлы: 1 файл

курсовая.Параллельные вычисления в архитектуре CUDA.docx

— 289.56 Кб (Скачать файл)

Программы на CUDA могут взаимодействовать  с графическими API: для рендеринга данных, сгенерированных в программе, для считывания результатов рендеринга и их обработки средствами CUDA (например, при реализации фильтров постобработки). Для этого ресурсы графических API могут быть отображены (с получением адреса ресурса) в пространство глобальной памяти CUDA. Поддерживаются следующие типы ресурсов графических API: Buffer Objects (PBO / VBO) в OpenGL, вершинные буферы и текстуры (2D, 3D и кубические карты) Direct3D9.

 

2.3.4. Стадии компиляции CUDA-приложения

Файлы исходного кода на CUDA C компилируются при помощи программы NVCC, которая является оболочкой над  другими инструментами, и вызывает их: cudacc, g++, cl и др. NVCC генерирует: код для центрального процессора, который компилируется вместе с остальными частями приложения, написанными на чистом Си, и объектный код PTX для видеочипа. Исполнимые файлы с кодом на CUDA в обязательном порядке требуют наличия библиотек CUDA runtime library (cudart) и CUDA core library (cuda).

2.3.5. Оптимизация программ на CUDA

  Для эффективного использования возможностей CUDA нужно использовать те алгоритмы, которые хорошо распараллеливаются на тысячи потоков. Также важно найти оптимальное место для хранения данных (регистры, разделяемая память и т.п.), минимизировать передачу данных между CPU и GPU, использовать буферизацию.

При оптимизации программы CUDA необходимо добиться оптимального баланса между размером и количеством блоков. Большее количество потоков в блоке снизит влияние задержек памяти, но снизит и доступное число регистров. Кроме того, блок из 512 потоков неэффективен, сама NVIDIA рекомендует использовать блоки по 128 или 256 потоков, как компромиссное значение для достижения оптимальных задержек и количества регистров.

Основные моменты оптимизации программ CUDA: необходимо более активное использование разделяемой памяти, так как она значительно быстрее глобальной видеопамяти видеокарты; операции чтения и записи из глобальной памяти должны быть объединены (coalesced) по возможности. Для этого нужно использовать специальные типы данных для чтения и записи сразу по 32/64/128 бита данных одной операцией. Если операции чтения трудно объединить, можно попробовать использовать текстурные выборки.

 

3.Выводы

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

CUDA — это доступная  каждому разработчику ПО технология, её может использовать любой программист, знающий язык Си. Нужно только привыкнуть к иной парадигме программирования, присущей параллельным вычислениям. Но если алгоритм хорошо распараллеливается, то изучение и затраты времени на программирование на CUDA вернутся в многократном размере.

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

Пока развитие новых парадигм находится на начальном этапе, необходимо вручную создавать потоки и планировать доступ к памяти, что усложняет задачи по сравнению с привычным программированием. Но технология CUDA сделала шаг в правильном направлении.

GPU не заменят CPU. В их  нынешнем виде они и не предназначены  для этого. Сейчас как видеочипы движутся постепенно в сторону CPU, становясь всё более универсальными (расчёты с плавающей точкой одинарной и двойной точности, целочисленные вычисления), так и CPU становятся всё более «параллельными», обзаводясь большим количеством ядер, технологиями многопоточности, включая про появление блоков SIMD и проектов гетерогенных процессоров. Скорее всего, GPU и CPU в будущем просто объединятся. Известно, что многие компании, в том числе Intel и AMD работают над подобными проектами.

В работе говорилось о преимуществах CUDA. Но есть и недостатки. Один из них — слабая переносимость. Эта архитектура работает только на видеочипах этой компании, начиная с серии GeForce 8 и 9 и соответствующих Quadro и Tesla. Таких решений в мире много, NVIDIA приводит цифру в 90 миллионов CUDA-совместимых видеочипов. Но и конкуренты предлагают свои решения, отличные от CUDA. Так, у AMD есть Stream Computing, у Intel в будущем будет Ct.

Какая из технологий станет распространённой и будет использоваться дольше остальных — покажет только время. Но у CUDA есть неплохие шансы, так как по сравнению с Stream Computing, например, она представляет более развитую и удобную для использования среду программирования на обычном языке Си.

 

 

 

 

 

 

 

 

4. Список литературы

 

  1. Боресков А.В., Харламов А.А.: основы работы с технологией CUDA // ДМК-Пресс– 2010
  2. Официальный сайт компании  NVIDIA [Электронный ресурс]. – Электрон. дан. - Режим доступа свобод.:

http://www.nvidia.ru/object/cuda_home_new_ru.html

  1. Основы CUDA . Введение, GPGPU [Электронный ресурс]. – Электрон. дан. -  Режим доступа свобод.:

http://steps3d.narod.ru/tutorials/cuda-tutorial.html

  1. Программирование на CUDA (часть 2) Работа с текстурной памятью: [Электронный ресурс]. – Электрон. дан. - Режим доступа свобод.: http://steps3d.narod.ru/tutorials/cuda-2-tutorial.html
  2. Боресков А.В., Харламов А.А. Основы работы с технологией CUDA. – М.: ДМК Пресс, 2010. – 232 с.
  3. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ, 2002. – 602 с.
  4. Выхованец В.С. Методика определения эффективности параллельных вычислений // Труды 5-й Международной конференции Параллельные вычисления и задачи управления – 2010. – 1057– 064.
  5. Выхованец В.С.Параллельные вычисления во времени // Автоматика и телемеханика, 1999. № 12. – 155–165
  6. Гергель В.П., Фурсов В.А. Лекции по параллельным вычислениям. – Самара: СГАУ, 2009. – 164 с.
  7. Гергель В.П., Стронгин Р.Г.Основы параллельных вычислений для многопроцессорных вычислительных систем. Учебное пособие. Издание 2-е, дополненное. – Нижний Новгород: издательство Нижегородского университета, 2003.
  8. Гергель В.П. Теория и практика параллельных вычислений. [Электронный ресурс]. – Электрон. дан. - [23.06.2011]. - Режим доступа свобод.: http://www.intuit.ru/department/calculate/paralltp/.
  9. Дацюк В. Н., Букатов А. А., Жегуло А. И. Методическое пособие по курсу "Многопроцессорные системы и параллельное программирование", Ростов-на-Дону, 2000.
  10. Казенов А.М. Математические основы и численные методы моделирования. Основы технологии CUDA// Компьютерные исследования и моделирование – 2010. № 2. – 295–308 с.
  11. Корнеев В.В. Параллельные вычислительные системы. – М.: Нолидж, 1999. – 320 с.
  12. Сандерс Д., Кэндрот Э. Технология CUDA в примерах: введение в программирование графических процессоров. Пер. с англ. – ДМК Пресс, 2011.
  13. CUDA C Best Practices Guide. 2010. [Электронный ресурс]. – Электрон. дан. - [25.06.2011]. - Режим доступа свобод.: http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Best_Practices_Guide.pdf.
  14. CUDA ZONE [Электронный ресурс]. – Электрон. дан. - [15.12.2011]. - Режим доступа свобод.:http://www.nvidia.ru/object/cuda_home_new_ru.html
  15. GPGPU.RU Использование видеокарт для вычислений [Электронный ресурс]. – Электрон. дан. - [2011]. - Режим доступа свобод.: http://www.gpgpu.ru/
  16. NVIDIA CUDA — неграфические вычисления на графических процессорах [Электронный ресурс]. – Электрон. дан. - [15.12.2010]. - Режим доступа свобод.: http://www.ixbt.com/video3/cuda-1.shtml
  17. NVIDIA CUDA C Programming guide. 2011. [Электронный ресурс]. – Электрон. дан. - [15.05.2011]. - Режим доступа свобод.: http://developer.download.nvidia.com/compute/cuda/4_0/toolkit/docs/CUDA_C_Programming_Guide.pdf.
  18. Чеканов Д. NVIDIA CUDA: вычисления на видеокарте или смерть CPU? [Электронный ресурс]. – Электрон. дан. – [Tom’s Hardware Guide, 22.07.2008 ] -  Режим доступа свобод.:

http://www.thg.ru/graphic/nvidia_cuda/index.html.

 


Информация о работе Параллельные вычисления в архитектуре CUDA