Введение в программирование CUDA

Опубликовано: 17 Сентября, 2022

В этой статье мы рассмотрим обзор программирования CUDA и в основном сосредоточимся на концепции требований CUDA, а также обсудим модель выполнения CUDA. Наконец, мы увидим приложение. Давайте обсудим это один за другим.

CUDA расшифровывается как Compute Unified Device Architecture. Это расширение программирования C/C++. CUDA — это язык программирования, использующий графический процессор (GPU). Это платформа параллельных вычислений и модель API (интерфейс прикладного программирования), унифицированная архитектура вычислительных устройств, разработанная Nvidia. Это позволяет выполнять вычисления параллельно, обеспечивая правильную скорость. Используя CUDA, можно использовать мощность графического процессора Nvidia для выполнения общих вычислительных задач, таких как обработка матриц и других операций линейной алгебры, а не просто для выполнения графических вычислений.

Зачем нам CUDA?

  • Графические процессоры предназначены для выполнения высокоскоростных параллельных вычислений для отображения графики, такой как игры.
  • Используйте доступные ресурсы CUDA. Уже развернуто более 100 миллионов графических процессоров.
  • Он обеспечивает ускорение в 30-100 раз по сравнению с другими микропроцессорами для некоторых приложений.
  • Графические процессоры имеют очень маленькие арифметико-логические устройства (ALU) по сравнению с более крупными процессорами. Это позволяет выполнять множество параллельных вычислений, таких как вычисление цвета для каждого пикселя на экране и т. д.

Архитектура CUDA

  • 16 Схемы потокового мультипроцессора (SM) показаны на приведенной выше диаграмме.
  • Каждый потоковый мультипроцессор имеет 8 потоковых процессоров (SP), т.е. всего мы получаем 128 потоковых процессоров (SP).
  • Теперь у каждого потокового процессора есть блок MAD (блок умножения и сложения) и дополнительный MU (блок умножения).
  • GT200 имеет 240 потоковых процессоров (SP) и вычислительную мощность более 1 TFLOP.
  • Каждый потоковый процессор изящно разделен на потоки и может запускать тысячи потоков на одно приложение.
  • Карта G80 поддерживает 768 потоков на потоковый мультипроцессор (примечание: не на SP).
  • В конце концов, после того, как каждый потоковый мультипроцессор будет иметь 8 процессоров SP, каждый процессор SP будет поддерживать максимум 96 потоков. Всего потоков, которые могут быть запущены — 128 * 96 = 12 228 раз.
  • Поэтому эти процессоры называются массивно-параллельными.
  • Чипы G80 имеют пропускную способность памяти 86,4 ГБ/с.
  • Он также имеет канал связи 8 ГБ/с с ЦП (4 ГБ/с для загрузки в ОЗУ ЦП и 4 ГБ/с для загрузки из ОЗУ ЦП).

Как работает CUDA?

  • Графические процессоры одновременно запускают одно ядро (группу задач).
  • Каждое ядро состоит из блоков, которые представляют собой независимые группы ALU.
  • Каждый блок содержит потоки, представляющие собой уровни вычислений.
  • Потоки в каждом блоке обычно работают вместе, чтобы вычислить значение.
  • Потоки в одном блоке могут совместно использовать память.
  • В CUDA отправка информации от ЦП к ГП часто является наиболее типичной частью вычислений.
  • Для каждого потока локальная память является самой быстрой, за ней следуют разделяемая память, глобальная, статическая память и память текстур, самая медленная.

Как распределяется работа?

  • Каждый поток «знает» координаты x и y блока, в котором он находится, и координаты своего места в блоке.
  • Эти позиции можно использовать для вычисления уникального идентификатора потока для каждого потока.
  • Проделанная вычислительная работа будет зависеть от значения идентификатора потока.

Например, идентификатор потока соответствует группе элементов матрицы.

CUDA-приложения

Приложения CUDA должны выполнять параллельные операции с большим количеством данных и требовать интенсивной обработки.

  1. Вычислительные финансы
  2. Моделирование климата, погоды и океана
  3. Наука о данных и аналитика
  4. Глубокое обучение и машинное обучение
  5. Защита и разведка
  6. Производство/AEC
  7. СМИ и развлечения
  8. Медицинская визуализация
  9. Нефти и газа
  10. Исследовательская работа
  11. Безопасность и охрана
  12. Инструменты и управление

Преимущества CUDA

Есть несколько преимуществ, которые дают CUDA преимущество перед традиционными компьютерами с графическими процессорами общего назначения (GPU) с графическими API:

  • Встроенная память (CUDA 6.0 или новее) и встроенная виртуальная память (CUDA 4.0 или новее).
  • Общая память обеспечивает быструю область общей памяти для потоков CUDA. Его можно использовать в качестве механизма кэширования, и он обеспечивает большую пропускную способность, чем поиск текстуры.
  • Разрозненные коды чтения могут быть прочитаны с любого адреса в памяти.
  • Улучшена производительность при загрузке и чтении, которая хорошо работает как с графическим процессором, так и с графическим процессором.
  • CUDA полностью поддерживает побитовые и целочисленные операции.

Ограничения CUDA

  • Исходный код CUDA предоставляется на хост-компьютере или графическом процессоре в соответствии с правилами синтаксиса C++. Давние версии CUDA используют правила синтаксиса C, что означает, что актуальный исходный код CUDA может работать или не работать должным образом.
  • CUDA имеет одностороннюю совместимость (способность компьютерных систем или программного обеспечения обмениваться информацией и использовать ее) с языками передачи, такими как OpenGL. OpenGL может получить доступ к зарегистрированной памяти CUDA, но CUDA не может получить доступ к памяти OpenGL.
  • Более поздние версии CUDA не предоставляют эмуляторов или резервной поддержки для более старых версий.
  • CUDA поддерживает только оборудование NVIDIA.