Примеры для разработчиков CUDA, демонстрирующие функции CUDA Toolkit. Эта версия поддерживает CUDA Toolkit 12.5.
В этом разделе описаны примечания к выпуску только для образцов CUDA на GitHub.
Загрузите и установите CUDA Toolkit 12.5 для соответствующей платформы. Системные требования и инструкции по установке набора инструментов cuda см. в Руководстве по установке Linux и Руководстве по установке Windows.
С помощью git клонируйте репозиторий образцов CUDA, используя команду ниже.
git clone https://github.com/NVIDIA/cuda-samples.git
Без использования git самый простой способ использовать эти примеры — загрузить zip-файл, содержащий текущую версию, нажав кнопку «Загрузить ZIP» на странице репозитория. Затем вы можете разархивировать весь архив и использовать образцы.
Примеры Windows созданы с использованием интегрированной среды разработки Visual Studio. Файлы решений (.sln) предоставляются для каждой поддерживаемой версии Visual Studio в следующем формате:
*_vs<version>.sln - for Visual Studio <version>
Полные файлы решений примеров находятся в родительском каталоге репозитория:
Каждый отдельный образец имеет свой собственный набор файлов решения по адресу: <CUDA_SAMPLES_REPO>Samples<sample_dir>
Чтобы построить/проверить все образцы одновременно, следует использовать полные файлы решения. Для построения/исследования одного образца следует использовать отдельные файлы решения образца.
Примеры Linux собираются с использованием make-файлов. Чтобы использовать файлы makefile, измените текущий каталог на каталог примера, который вы хотите собрать, и запустите make:
$ cd <sample_dir>
$ make
Образцы make-файлов могут использовать определенные параметры:
TARGET_ARCH= — кросс-компиляция для конкретной архитектуры. Разрешенные архитектуры: x86_64, ppc64le, Armv7l, aarch64. По умолчанию для TARGET_ARCH установлено значение HOST_ARCH. На компьютере x86_64 отсутствие установки TARGET_ARCH эквивалентно настройке TARGET_ARCH=x86_64.
$ make TARGET_ARCH=x86_64
$ make TARGET_ARCH=ppc64le
$ make TARGET_ARCH=armv7l
$ make TARGET_ARCH=aarch64
Дополнительную информацию о кроссплатформенной компиляции образцов cuda см. здесь.
dbg=1 — сборка с отладочными символами
$ make dbg=1
SMS="AB..." - переопределить архитектуры SM, для которых будет построен образец, где "AB ..."
- это список архитектур SM, разделенный пробелами. Например, чтобы сгенерировать SASS для SM 50 и SM 60, используйте SMS="50 60"
.
$ make SMS="50 60"
HOST_COMPILER=<host_compiler> — переопределить хост-компилятор g++ по умолчанию. См. Руководство по установке Linux для получения списка поддерживаемых хост-компиляторов.
$ make HOST_COMPILER=g++
Базовые примеры CUDA для начинающих, иллюстрирующие ключевые концепции использования CUDA и API-интерфейсов среды выполнения CUDA.
Примеры утилит, демонстрирующие, как запрашивать возможности устройства и измерять пропускную способность графического процессора/процессора.
Примеры, демонстрирующие концепции, связанные с CUDA, и распространенные методы решения проблем.
Примеры, демонстрирующие функции CUDA (кооперативные группы, динамический параллелизм CUDA, графики CUDA и т. д.).
Примеры, демонстрирующие использование библиотек платформы CUDA (NPP, NVJPEG, NVGRAPH cuBLAS, cuFFT, cuSPARSE, cuSOLVER и cuRAND).
Примеры, специфичные для предметной области (графика, финансы, обработка изображений).
Примеры, демонстрирующие оптимизацию производительности.
Примеры, демонстрирующие использование libNVVVM и NVVM IR.
Для сборки или выполнения некоторых примеров CUDA используются сторонние приложения и/или библиотеки или функции, предоставляемые набором инструментов и драйвером CUDA. Эти зависимости перечислены ниже.
Если образец имеет стороннюю зависимость, доступную в системе, но не установленную, образец будет отключен во время сборки.
Зависимости каждого примера перечислены в разделе «Зависимости» README.
Эти сторонние зависимости необходимы для некоторых образцов CUDA. Если они доступны, эти зависимости либо устанавливаются в вашу систему автоматически, либо могут быть установлены через менеджер пакетов вашей системы (Linux) или сторонний веб-сайт.
FreeImage — это библиотека изображений с открытым исходным кодом. FreeImage обычно можно установить в Linux с помощью системы менеджера пакетов вашего дистрибутива. FreeImage также можно загрузить с веб-сайта FreeImage.
Чтобы настроить FreeImage в системе Windows, извлеките дистрибутив FreeImage DLL в папку ../../../Common/FreeImage/Dist/x64
, чтобы он содержал файлы .h и .lib. Скопируйте файл .dll в папки корневого уровня bin/win64/Debug
и bin/win64/Release
.
MPI (интерфейс передачи сообщений) — это API для передачи данных между распределенными процессами. Компилятор MPI можно установить с помощью системы менеджера пакетов вашего дистрибутива Linux. Он также доступен на некоторых онлайн-ресурсах, таких как Open MPI. В Windows для создания и запуска приложений MPI-CUDA можно установить MS-MPI SDK.
Некоторые образцы можно запустить только в 64-разрядной операционной системе.
DirectX — это набор API-интерфейсов, предназначенных для разработки мультимедийных приложений на платформах Microsoft. Для платформ Microsoft драйвер CUDA NVIDIA поддерживает DirectX. Несколько образцов CUDA для Windows демонстрируют совместимость CUDA-DirectX. Для создания таких примеров необходимо установить Microsoft Visual Studio 2012 или более позднюю версию, которая предоставляет Microsoft Windows SDK для Windows 8.
DirectX 12 — это набор передовых API-интерфейсов низкоуровневого программирования, которые могут снизить нагрузку на драйверы и позволяют разрабатывать мультимедийные приложения на платформах Microsoft, начиная с ОС Windows 10. Для платформ Microsoft драйвер CUDA NVIDIA поддерживает DirectX. Несколько образцов CUDA для Windows демонстрируют совместимость CUDA-DirectX12. Для создания таких образцов необходимо установить Windows 10 SDK или более позднюю версию с VS 2015 или VS 2017.
OpenGL — графическая библиотека, используемая для 2D- и 3D-рендеринга. В системах, поддерживающих OpenGL, реализация OpenGL от NVIDIA поставляется с драйвером CUDA.
OpenGL ES — это встроенная системная графическая библиотека, используемая для 2D- и 3D-рендеринга. В системах, поддерживающих OpenGL ES, реализация OpenGL ES от NVIDIA поставляется с драйвером CUDA.
Vulkan — это кроссплатформенный API для 3D-графики и вычислений с низкими затратами. Vulkan ориентирован на высокопроизводительные приложения с 3D-графикой в реальном времени, такие как видеоигры и интерактивные медиа, на всех платформах. В системах, поддерживающих Vulkan, реализация Vulkan от NVIDIA поставляется с драйвером CUDA. Для создания и запуска приложений Vulkan необходимо установить Vulkan SDK.
OpenMP — это API для многопроцессорного программирования. OpenMP можно установить с помощью системы менеджера пакетов вашего дистрибутива Linux. Обычно он поставляется с предустановленным GCC. Его также можно найти на веб-сайте OpenMP.
Screen — это оконная система, присутствующая в операционной системе QNX. Screen обычно находится как часть корневой файловой системы.
X11 — это оконная система, обычно встречающаяся в операционных системах типа *-nix. X11 можно установить с помощью менеджера пакетов вашего дистрибутива Linux, и он поставляется предустановленным в системах Mac OS X.
EGL — это интерфейс между API-интерфейсами рендеринга Khronos (такими как OpenGL, OpenGL ES или OpenVG) и базовой оконной системой платформы.
EGLOutput — это набор расширений EGL, которые позволяют EGL выполнять рендеринг непосредственно на дисплее.
EGLSync — это набор расширений EGL, который предоставляет объекты синхронизации, являющиеся примитивами синхронизации, представляющими события, завершение которых можно протестировать или дождаться.
NvSci — это набор библиотек интерфейса связи, из которых CUDA взаимодействует с NvSciBuf и NvSciSync. NvSciBuf позволяет приложениям выделять и обмениваться буферами в памяти. NvSciSync позволяет приложениям управлять объектами синхронизации, которые координируют начало и окончание последовательности операций.
NvMedia обеспечивает мощную обработку мультимедийных данных для настоящего аппаратного ускорения на устройствах NVIDIA Tegra. Приложения используют интерфейс прикладного программирования (API) NvMedia для обработки изображений и видеоданных.
Эти функции CUDA необходимы для некоторых образцов CUDA. Они предоставляются либо набором инструментов CUDA, либо драйвером CUDA. Некоторые функции могут быть недоступны в вашей системе.
Подпрограммы обратного вызова CUFFT — это предоставляемые пользователем подпрограммы ядра, которые CUFFT будет вызывать при загрузке или сохранении данных. Эти процедуры обратного вызова доступны только в системах Linux x86_64 и ppc64le.
CDP (CUDA Dynamic Parallellism) позволяет запускать ядра из потоков, выполняемых на графическом процессоре. CDP доступен только на графических процессорах с архитектурой SM 3.5 или выше.
Многоблочные кооперативные группы (MBCG) расширяют кооперативные группы и модель программирования CUDA для реализации синхронизации блоков между потоками. MBCG доступен на графических процессорах с архитектурой Pascal и выше.
Кооперативные группы нескольких устройств расширяют кооперативные группы и модель программирования CUDA, позволяя блокам потоков, выполняющимся на нескольких графических процессорах, взаимодействовать и синхронизироваться во время их выполнения. Эта функция доступна на графических процессорах с архитектурой Pascal и выше.
CUBLAS (CUDA Basic Linear Algebra Subroutines) — это версия библиотеки BLAS с графическим ускорением.
IPC (межпроцессное взаимодействие) позволяет процессам совместно использовать указатели устройств.
CUFFT (CUDA Fast Fourier Transform) — это библиотека БПФ с графическим ускорением.
CURAND (генерация случайных чисел CUDA) — это библиотека RNG с ускорением на графическом процессоре.
CUSPARSE (CUDA Sparse Matrix) предоставляет функции линейной алгебры, используемые для вычислений с разреженной матрицей.
Библиотека CUSOLVER — это пакет высокого уровня, основанный на библиотеках CUBLAS и CUSPARSE. Он объединяет три отдельные библиотеки под одной крышей, каждую из которых можно использовать независимо или совместно с другими библиотеками набора инструментов. Целью CUSOLVER является предоставление полезных функций, подобных LAPACK, таких как общая факторизация матриц и процедуры треугольного решения для плотных матриц, разреженный решатель наименьших квадратов и решатель собственных значений. Кроме того, cuSolver предоставляет новую библиотеку рефакторизации, полезную для решения последовательностей матриц с общим шаблоном разреженности.
NPP (NVIDIA Performance Primitives) обеспечивает функции обработки изображений, видео и сигналов с графическим ускорением.
NVGRAPH — это библиотека графовой аналитики с ускорением на графическом процессоре.
Библиотека NVJPEG обеспечивает высокопроизводительную функцию декодирования JPEG с графическим ускорением для форматов изображений, обычно используемых в глубоком обучении и гипермасштабируемых мультимедийных приложениях.
NVRTC (CUDA RunTime Compilation) — это библиотека компиляции времени выполнения для CUDA C++.
Приоритеты потоков позволяют создавать потоки с указанными приоритетами. Приоритеты потока доступны только на графических процессорах с архитектурой SM 3.5 или выше.
UVM (унифицированная виртуальная память) обеспечивает доступ к памяти как для ЦП, так и для графического процессора без явного копирования между ними. UVM доступен только в системах Linux и Windows.
FP16 — это 16-битный формат с плавающей запятой. Один бит используется для знака, пять битов для показателя степени и десять битов для мантиссы.
Поддержка NVCC функций C++11.
Примеры libNVVM создаются с использованием CMake 3.10 или более поздней версии.
Мы приветствуем ваше мнение по вопросам и предложения по образцам. В настоящее время мы не принимаем пожертвования от общественности. Следите за обновлениями нашей модели пожертвований.
Мы используем Руководство по стилю Google C++ для всех источников https://google.github.io/styleguide/cppguide.html.
Ответы на часто задаваемые вопросы о CUDA можно найти по адресу http://developer.nvidia.com/cuda-faq и в примечаниях к выпуску набора инструментов CUDA.