Перейти к основному контенту

Что такое CUDA

В статье мы подробно рассмотрим CUDA — что это за технология, как работает и в каких областях её можно использовать.

Облачные вычисления на базе GPU

Команда REG.RU запустила облачные серверы на GPU. Вы можете самостоятельно испытать мощность нашего оборудования, которое заточено для Machine Learning и высокопроизводительных вычислений.

Попробовать

Что такое CUDA

CUDA (англ. Compute Unified Device Architecture) — это технология на базе программно-аппаратной архитектуры, которая позволяет повысить производительность параллельных вычислений. Параллельные вычисления — это вычисления, при которых процесс разработки программного обеспечения делится на потоки. Потоки обрабатываются параллельно и взаимодействуют между собой в процессе обработки. Это возможно благодаря процессорам компании NVIDIA, на которых построена работа CUDA. В их основе лежит технология GPGPU.

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

Основные типы процессоров

CPU (англ. Central Processing Unit) — это центральный процессор, который ориентирован на обработку данных в максимально короткие сроки. Работает по следующему принципу: разбивает одну задачу на несколько потоков, каждый из которых обрабатывается отдельно. Затем эти потоки вновь объединяются и выстраиваются в нужном порядке. Такой подход позволяет увеличить скорость последовательной обработки задач. Подробнее читайте в статье Что такое процессор CPU.

GPU (англ. Graphics Processing Unit) — это специальный графический процессор, который заточен на обработку 2D или 3D-графики. Он размещается на видеокарте, что позволяет автоматически освободить основной процессор от лишней нагрузки при обработке данных. GPU состоит из нескольких тысяч ядер, которые в совокупности потребляют небольшое количество энергии. CUDA ядра «выигрывают» у CPU по производительности на 1 ватт потребляемой мощности.

что-такое-cuda-1

На базе этих основных процессоров были разработаны различные специализированные инструменты. Например, технология GPGPU.

GPGPU (англ. General-purpose computing on graphics processing units) — это технология, которая позволяет использовать графический процессор GPU в операциях, которые обычно выполняет центральный процессор CPU. Например, в математических вычислениях. С помощью GPGPU можно использовать видеокарту для выполнения неграфических вычислений. При этом графический процессор будет работать не вместо центрального, а в качестве вычислительного блока.

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

В каких областях можно использовать CUDA:

  • вычислительная математика,
  • физика,
  • молекулярная биология,
  • биоинформатика,
  • финансовая аналитика,
  • анализ баз данных,
  • искусственный интеллект и другие.

В последнее время технология высокоскоростной обработки становится ближе к рядовому пользователю. Например, уже существуют плагины для Photoshop, которые используют мощности GPU. С другими программами и проектами можно познакомиться на официальном сайте.

История возникновения

Первые попытки использовать графические ускорители для нецелевых вычислений предпринимались еще с конца 90-х годов. Однако масштабная работа в этом направлении началась немного позже. В начале 2000-х годов два основных лидера в мире процессоров — компании AMD и Intel – решили побороться за производство самого мощного «мозга» компьютера. В период жесткой конкуренции производителям удалось значимо поднять планку обработки процессорами тактовых частот (например, в промежуток между 2001-м и 2003-м годом частоты подросли с 1,5 до 3 ГГц).

Вместе с этим разработчики из Стенфордского университета поставили перед собой конкретную цель — создать графический адаптер, который позволит проводить неграфические вычисления. Так появился Brook — специализированный язык программирования и реализации. Затем были запущены аналогичные проекты: библиотека Accelerator, Brahma, GPU++ и другие.

Немногим позже к исследовательской работе присоединился лидер индустрии NVIDIA. Компания решила разработать собственные программные платформы и видеокарты для неграфических вычислений. Так появилась CUDA.

что-такое-cuda-2 NVIDIA СUDA toolkit

Архитектура

Архитектура CUDA базируется на взаимодействии между CPU и GPU процессорами. Это возможно благодаря работе шейдера — программы для исполнения видеокарты процессорами.

Взаимодействие происходит с помощью разноуровневых API. API на первом уровне — Runtime. Он позволяет сделать первичную разбивку задачи на потоки. Затем эти декомпозированные потоки переходят на второй уровень API — Driver. При этом работу API поддерживают библиотеки NVIDIA — Libraries CUBLAS (для алгебраических расчётов) и FFT (расчёт по алгоритму ускоренного вычисления Фурье).

Если говорить максимально упрощенно, то работа алгоритма CUDA выглядит следующим образом:

  1. Центральный процессор выделяет нужное количество памяти и отправляет её графическому процессору.
  2. Центральный процессор запускает ядро и также «делится» им с графическим.
  3. Графический процессор выполняет операции используя память и мощности ядра.
  4. После обработки данных центральный процессор принимает результаты.

что-такое-cuda-3 Взаимодействие CPU и GPU

Характеристики и среда разработки CUDA:

  • компилятор nvcc,
  • отладчик gdb для GPU,
  • профилировщик,
  • библиотеки численного анализа FFT и BLAS,
  • поддержка 32- и 64-битных операционных систем: Linux, macOS, Windows XP, Vista и других,
  • поддержка языков программирования: Java, Python, C++, Си, Фортран и других.

Недостатки и преимущества CUDA

CUDA имеет преимущества не только перед вычислениями на CPU, но и перед более ранними технологиями вычисления с помощью GPGPU. Рассмотрим, в чём они заключаются.

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

  • Простой в применении интерфейс программирования на С,
  • поддержка CUDA: битовые и целочисленные операции проводятся на аппаратном уровне, не требуя переноса алгоритмов в удобный для концепции графического конвейера вид,
  • не ограничена графическими API,
  • адресация памяти gather и scatter в линейном порядке,
  • эффективный взаимообмен между видеопамятью и системной памятью,
  • память размером 16 Кб на мультипроцессор: её можно разделить на потоки и настроить кеш с широкой полосой пропускания.

Как любая технология, CUDA имеет нюансы применения и ограничения.

Ограничения

  • CUDA имеет архитектуру с закрытым исходным кодом, которым владеет NVIDIA,
  • архитектура работает только на видеочипах компании NVIDIA, начиная с версии GeForce 8,
  • для выполняемых функций нет поддержки рекурсии,
  • 32 потока — минимально возможная ширина блока.

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

Теперь вы знаете, что такое и для чего нужна CUDA, а также как устроена архитектура этой технологии.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 2 из 2