我可以使用 cudaFree 来释放在另一个设备中分配的 GPU 内存吗
cudaSetDevice(0);
cudaMalloc(&devPtr, size);
cudaSetDevice(1);
cudaFree(devPtr);
我的系统是否支持统一虚拟地址空间?(cuda ver9.2)
是的,如果您有一个使用统一虚拟寻址(UVA)和 CUDA 运行时 API 的平台,那么您可以在任何有效的设备指针上调用
cudaFree
,同时运行时 API 设置为当前地址空间中的任何设备。
cudaPointerGetAttributes
调用,该调用可以询问裸指针并检索 GPU 运行时元数据,包括逻辑统一地址空间中的物理内存所在的设备。我想这就是您提出的方案在 UVA 系统中发挥作用的方式/原因。