Любая конкретная функция для инициализации GPU, кроме первого вызова cudaMalloc? - программирование
Подтвердить что ты не робот

Любая конкретная функция для инициализации GPU, кроме первого вызова cudaMalloc?

Первый вызов cudaMalloc медленный (например, 0,2 секунды) из-за некоторой работы по инициализации на GPU. Есть ли какая-либо функция, которая выполняет только инициализацию, чтобы я мог отделить время? cudaSetDevice, похоже, сокращает время до 0,15 с, но все же не устраняет все накладные расходы init.

4b9b3361

Ответ 1

Вызов

cudaFree(0);

- канонический способ принудительного создания ленивого контекста в среде выполнения CUDA. Вы не можете уменьшить накладные расходы, это функция времени ожидания драйвера, времени выполнения и операционной системы. Но вызов выше позволит вам контролировать, как/когда эти накладные расходы возникают во время выполнения программы.

ИЗМЕНИТЬ в 2015 году, чтобы добавить, что эвристика инициализации контекста в API времени выполнения тонко изменилась со временем, так что cudaSetDevice теперь устанавливает контекст, поэтому вызов cudaFree() не является явно для интуиции контекста, вы можете использовать cudaSetDevice вместо этого. Также обратите внимание, что некоторое время настройки будет по-прежнему возникать при первом запуске ядра, тогда как раньше этого не было. Для синхронизации ядра лучше всего включить разминочный вызов, прежде чем запускать ядро, вы будете время, чтобы удалить эту задержку настройки. Похоже, что различные инструменты профилирования имеют достаточную детализацию, чтобы избежать этого без каких-либо дополнительных вызовов API или вызовов ядра.