Среда выполнения CUDA позволяет компилировать и связывать ваши ядра CUDA в исполняемые файлы. Это означает, что вам не нужно распространять файлы cubin вместе с приложением или загружать их через API драйвера. Как вы заметили, как правило, его проще использовать.
Напротив, API драйвера сложнее программировать, но обеспечивает больший контроль над использованием CUDA. Программист должен непосредственно заниматься инициализацией, загрузкой модуля и т. Д.
Очевидно, более подробную информацию об устройстве можно запросить через API драйвера, чем через API времени выполнения. Например, свободная память, доступная на устройстве, может быть запрошена только через API драйвера.
Из Руководства программиста CUDA:
Он состоит из двух API:
- Низкоуровневый API, называемый API драйвера CUDA,
- API более высокого уровня, называемый API времени выполнения CUDA, который реализован поверх
API драйвера CUDA.
Эти API являются взаимоисключающими: приложение должно использовать либо один, либо
другой.
Среда выполнения CUDA упрощает управление кодом устройства, предоставляя неявные
инициализация, управление контекстом и управление модулями. Код хоста C
генерируется nvcc на основе среды выполнения CUDA (см. раздел 4.2.5), поэтому
приложения, ссылающиеся на этот код, должны использовать API времени выполнения CUDA.
Напротив, API драйвера CUDA требует больше кода, его сложнее программировать и
отладка, но предлагает лучший уровень контроля и не зависит от языка, так как он только
имеет дело с объектами кубин (см. раздел 4.2.5). В частности, сложнее
настраивать и запускать ядра с помощью API драйвера CUDA, так как выполнение
параметры конфигурации и ядра должны быть указаны с явными вызовами функций
вместо синтаксиса конфигурации выполнения, описанного в разделе 4.2.3. Также устройство
эмуляция (см. раздел 4.5.2.9) не работает с API драйвера CUDA.
Нет заметной разницы в производительности между API. То, как ваши ядра используют память и как они расположены на GPU (в деформациях и блоках), будет иметь гораздо более выраженный эффект.