Работает ли 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.
Краткое введение доступно здесь