在 cudaFree() 之前需要 cudaDeviceSynchronize() 吗?

2 memory-management cuda

CUDA 版本 10.1。帕斯卡 GPU。所有命令都发送到默认流:

void * ptr;
cudaMalloc(&ptr, ...);

launch_kernel<<<...>>>(ptr);

cudaDeviceSynchronize();     // Is this required?
cudaFree(ptr);
Run Code Online (Sandbox Code Playgroud)

答案是否会改变cudaMallocManaged()

hea*_*low 8

一些 CUDA API 调用(例如cudaMalloc(), cudaFree(), cudaHostAlloc()设备到设备复制等)会更改 GPU 的虚拟内存地址映射。这些调用正在导致设备同步,因此您不需要调用,cudaDeviceSynchronize()因为它已经在同步。

同样的情况也发生在cudaMallocManaged().