Берденев Владислав Технология CUDA Технология CUDA — это программно-аппаратная вычислительная архитектура NVIDIA, основанная на расширении языка Си, которая даёт возможность организации доступа к набору инструкций графического ускорителя и управления его памятью при организации параллельных вычислений.
«Технология NVIDIA CUDA» Берденев Владислав
Основные характеристики CUDA: • унифицированное программно-аппаратное решение для параллельных вычислений на видеочипах NVIDIA; • большой набор поддерживаемых решений, от мобильных до мультичиповых; • стандартный язык программирования Си; • стандартные библиотеки численного анализа FFT (быстрое преобразование Фурье) и BLAS (линейная алгебра); • оптимизированный обмен данными между CPU и GPU; • возможность разработки на низком уровне.
«Технология NVIDIA CUDA» Берденев Владислав
Преимущества и ограничения CUDA
Рисунок 1 - Традиционная модель программирования GPGPU
«Технология NVIDIA CUDA» Берденев Владислав Преимущества CUDA • интерфейс программирования приложений CUDA основан на стандартном языке программирования Си с расширениями, что упрощает процесс изучения и внедрения архитектуры CUDA; • более эффективная передача данных между системной и видеопамятью отсутствие необходимости в графических API с избыточностью и накладными расходами; • линейная адресация памяти, и gather и scatter, возможность записи по произвольным адресам; • аппаратная поддержка целочисленных и битовых операций.
«Технология NVIDIA CUDA» Берденев Владислав
Ограничения CUDA • отсутствие поддержки рекурсии для выполняемых функций; • минимальная ширина блока в 32 потока; • закрытая архитектура CUDA, принадлежащая NVIDIA.
«Технология NVIDIA CUDA» Берденев Владислав
Состав NVIDIA CUDA CUDA включает два API: • высокого уровня (CUDA Runtime API); • и низкого (CUDA Driver API).
Также CUDA имеет две библиотеки:
• CUBLAS — CUDA вариант BLAS , предназначенный для вычислений задач линейной алгебры и использующий прямой доступ к ресурсам GPU; • CUFFT — CUDA вариант библиотеки Fast Fourier Transform для расчёта быстрого преобразования Фурье, широко используемого при обработке сигналов.. Рисунок 2 - Состав NVIDIA CUDA
«Технология NVIDIA CUDA» Берденев Владислав
Модель программирования CUDA
Рисунок 3 - Модель программирования CUDA
«Технология NVIDIA CUDA» Берденев Владислав Модель программирования CUDA Модель программирования в CUDA предполагает группирование потоков. Потоки объединяются в блоки потоков (thread block) — одномерные или двумерные сетки потоков, взаимодействующих между собой при помощи разделяемой памяти и точек синхронизации. Блоки потоков выполняются в виде небольших групп, называемых варп (warp), размер которых — 32 потока. Группировка блоков в сетки позволяет уйти от ограничений и применить ядро к большему числу потоков за один вызов. «Технология NVIDIA CUDA» Берденев Владислав Среда программирования В состав CUDA входят runtime библиотеки:
• общая часть, предоставляющая
встроенные векторные типы и подмножества вызовов RTL, поддерживаемые на CPU и GPU; • CPU-компонента, для управления одним или несколькими GPU; • GPU-компонента, предоставляющая Рисунок 4 - Стадии компиляции CUDA-приложения специфические функции для GPU. «Технология NVIDIA CUDA» Берденев Владислав Заключение Представленная компанией NVIDIA программно-аппаратная архитектура для расчётов на видеочипах CUDA хорошо подходит для решения широкого круга задач с высоким параллелизмом. CUDA работает на большом количестве видеочипов NVIDIA, и улучшает модель программирования GPU, значительно упрощая её и добавляя большое количество возможностей, таких как разделяемая память, возможность синхронизации потоков, вычисления с двойной точностью и целочисленные операции.