Работает ли cudaFree после асинхронного вызова?

Я хочу спросить, действителен ли вызов cudaFree после некоторых асинхронных вызовов? Например

int* dev_a;

// prepare dev_a...

// launch a kernel to process dev_a (asynchronously)

cudaFree(dev_a);

В этом случае, поскольку запуск ядра выполняется асинхронно, при достижении части cudaFree ядро ​​может еще не завершить работу. Тогда будет ли cudaFree(dev_a) немедленно уничтожать данные?

2 ответа

Решение

Согласно комментарию Джареда, я на 99% уверен, что пара free/malloc драйвера CUDA реализована как блокирующие вызовы, которые синхронизируют контекст, в котором они работают, перед тем, как выполнить вызов.

CUDA теперь предоставляет функции для асинхронного управления памятью на основе потоков: cudaMallocAsync, cudaMemcpyAsync, cudaMemcpyAsync.

Краткое введение доступно здесь

Другие вопросы по тегам