cuDevicePrimaryCtxReset() 和 cudaDeviceReset() 做同样的事情吗?

Do cuDevicePrimaryCtxReset() and cudaDeviceReset() do the same thing?

阅读了CUDA Runtime API和Driver API文档,好像是两个函数:

CUresult cuDevicePrimaryCtxReset ( CUdevice dev );
__host__ ​cudaError_t cudaDeviceReset ( void );

做同样的事情(直到必须 cudaSetDevice(dev) 在运行时 API 调用之前):

Destroy all allocations and reset all state on the primary context.

第一个和

Destroy all allocations and reset all state on the current device in the current process.

他们确实也这样做吗?或者是否存在我遗漏或未记录的细微差异?例如与线程与进程相关的内容?

它们完全不同。

检查链接到@RobertCrovella 的程序,似乎是:

  • cuDevicePrimaryCtxReset() 仅 destroys/resets 主要上下文,不涉及其他上下文。
  • cudaDeviceReset() 销毁指定设备的所有上下文,将它们从上下文堆栈中删除。