Вопрос по c++ – Как создать контекст CUDA?

5

Как я могу создать контекст CUDA? Первый вызов CUDA медленный, и я хочу создать контекст, прежде чем запустить свое ядро.

Ваш Ответ

2   ответа
11

я выполнения - это вызовcudaFree(0), Если у вас есть несколько устройств, позвонитеcudaSetDevice() с идентификатором устройства, на котором вы хотите установить контекст, затемcudaFree(0) установить контекст.

РЕДАКТИРОВАТЬ: Обратите внимание, что начиная с CUDA 5.0, кажется, что эвристика установления контекста немного отличается иcudaSetDevice() сам устанавливает контекст на устройстве, на котором он вызывается. Так явноеcudaFree(0) вызов больше не требуется (хотя это ничего не повредит).

2

cudaDeviceSynchronize, cudaDeviceGetLimitили все, что на самом деле обращается к контексту, должно работать.

Я совершенно уверен, что вы не используете API драйвера, так как он не выполняет такую ленивую инициализацию, но для других ". благо вызов водителя будетcuCtxCreate.

Я использую библиотека openCV, и первый вызов идет медленно. Я могу выбрать устройство в своем приложении, но я хотел бы инициализировать контекст Cuda при запуске приложения. Я пытаюсь cudaDeviceSynchronize, но не работает Arkerone
Вы уверены, что это действительно создание контекста в этом случае? Это довольно быстро на большинстве аппаратных средств. OpenCV мог бы (догадываясь здесь) делать большой memcpy, и преинициализированный контекст там не поможет.
В opencv FAQ: "Это связано с накладными расходами при инициализации. При первом вызове функции графического процессора Cuda Runtime API инициализируется неявно. Также некоторый код GPU скомпилирован (компиляция Just In Time) для вашей видеокарты при первом использовании. Таким образом, для измерения производительности необходимо выполнить фиктивный вызов функции и только затем выполнить временные тесты. Если для приложения крайне важно запускать код графического процессора только один раз, можно использовать кэш компиляции, который является постоянным в течение нескольких запусков. Пожалуйста, прочтите подробности в документации nvcc (переменная окружения CUDA_DEVCODE_CACHE). & Quot; Arkerone

Похожие вопросы