使用流时是否需要在 cudamalloc 之后同步

When using streams do you need to sync after cudamalloc

在 cuda 中使用流时,是否有必要在内存分配和流使用此内存之间执行任何同步(假设 cudaMallocAsync 不可用,这对我来说不可用)。

示例:

cudaStream_t stream;
cudaStreamCreateWithFlags(&stream, cudaStreamNonBlocking);
... Other code

int *a;
gpuErrchk(cudaMalloc((void **)&a, sizeof(int)));
foo<<<1, 1, 0, stream>>>(a);
gpuErrchk(cudaStreamSynchronize(stream));
cudafree(a);

在这种情况下调用 foo 时,是否有可能未完成内存分配?

我会在分配后强制执行设备同步吗?

没有内存分配不完成的可能。内存分配后不需要显式设备同步。

cudaMalloc调用returns时,内存已分配并可用。