CUDA

13.01.2017

CUDA от Nvidia - технология использования процессоров видеокарт фирмы для параллельных вычислений  

CUDA (Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.

Принято считать, что основополагающим фактором в развитии GPGPU (General Purpose computation on GPU – универсальные расчеты средствами видеокарты) стало появление в 2003 году проекта Brook GPU. Создателям проекта из Стэндфордского университета предстояло решить непростую проблему: аппаратно и программно заставить графический адаптер производить разноплановые вычисления. И у них это получилось. Используя универсальный язык C и С++, американские ученые заставили работать GPU как процессор, с поправкой на параллельную обработку. После Brook появился целый ряд проектов по VGA-расчетам, таких как библиотека Accelerator, библиотека Brahma, система метапрограммирования GPU++ и другие.

Задача CUDA заключается в обеспечении API, причем сразу двух. Первый – высокоуровневый CUDA Runtime, представляет собой функции, которые разбиваются на более простые уровни и передаются нижнему API - CUDA Driver. Так что определение «высокоуровневый»  к процессу не совсем применимо. И второй, а именно драйвер, работать с которым  помогут библиотеки созданные разработчиками NVIDIA: CUBLAS (средства для математических расчетов) и
FFT (расчет посредством алгоритма Фурье).

CUDA SDK - позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования С и С++ алгоритмы, выполняемые на графических процессорах Nvidia и включать специальные функции в текст программы на С и С++. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью. CUDA предоставляет возможность выбрать средства разработки: языки высокого уровня, такие как C, C++ и Fortran или же открытые стандарты, такие как директивы OpenACC.

CUDA

Собственная терминология CUDA

NVIDIA оперирует весьма своеобразными определениями для CUDA API. Они
отличаются от определений, применяемых для работы с центральным процессором.

Поток (Thread) – набор данных, который необходимо обработать (не
требует больших ресурсов при обработке).

Варп (Warp) – группа из 32 потоков. Данные обрабатываются только
варпами, следовательно варп – это минимальный объем данных.

Блок (Block) – совокупность потоков (от 64 до 512) или совокупность
варпов (от 2 до 16).

Сетка (Grid) – это совокупность блоков.

Такое разделение данных применяется исключительно для повышения производительности.
Так, если число мультипроцессоров велико, то блоки будут выполняться параллельно.
Если же с картой не повезло (разработчики рекомендуют для сложных расчетов использовать
адаптер не ниже уровня легендарной GeForce 8800 GTS 320 Мб), то блоки данных обработаются
последовательно.
Также NVIDIA вводит такие понятия, как ядро (Kernel), хост (Host) и девайс (Device).

 

Для работы с CUDA требуется видеокарта GeForce не ниже восьмой серии. С официального сайта нужно скачать три программных пакета: драйвер с поддержкой CUDA (для каждой ОС – свой), непосредственно пакет CUDA SDK (специально для новичков разработан CUDA SDK Browser) и дополнительные библиотеки (CUDA Toolkit). Технология CUDA 8.0 поддерживает операционные системы Windows (XP, Vista,7,8.1,10 и Server 2008 R2 DEPRECATED), Linux и Mac OS X. Практически все аспекты программирования описаны в документации, идущей вместе с драйвером и двумя приложениями, а также на сайте разработчиков.

Вернуться в раздел.

Вернуться на Главную.

Спасибо, мы свяжемся с вами в ближайщее время!