在 CUDA 中,Nsight 不会在时间轴中显示 cuInit(0) 调用

In CUDA, Nsight doesn't show cuInit(0) call in timeline

本文关键字:cuInit 调用 显示 时间 CUDA Nsight      更新时间:2023-10-16

我的程序中有以下代码,可以使用纯驱动程序 API,

cuInit(0)

并且 Nvidia Visual Profiler 8.0 没有在时间轴图上显示它。

我可以偶尔调用它一次,或者像 pc 唤醒一样频繁地调用它,或者每个进程最多只调用一次(这需要应用程序类似单例或一些全局同步的初始值设定项包装器)?

我是否应该期望每次通话总是造成微不足道的时间损失?

cuda 驱动程序 API 是否有内部计数器,以便在驱动程序 API 以某种方式卸载时,它会自动重新加载它,这样我以后就不必再次运行它?

如果这个C++是一个DLL,并且将从C#,Java,Phyton调用怎么办?其他第三方库是否可以在我的应用程序之前初始化它? 我知道 GPU 在进程之间进行上下文切换(驱动程序 API 是否独立于每个进程?),但是此初始化命令是否意外地阻碍了其他人的工作(例如,在 N 个其他用户也运行 CUDA 的云计算机中)?

在使用任何其他 cuda 驱动程序 API 调用之前,每个应用程序应调用一次cuInit()

我认为它没有出现在时间线中是预期的行为。

cuInit()会有一些时间成本。 我不会称它为"微不足道"。 它将因各种系统配置参数而异。

没有驱动程序 API "卸载"的概念。

如果在库中使用任何驱动程序 API 调用,则在库代码中,此调用也必须位于它们之前。

我想你可能会对 CUDA 上下文感到困惑。cuInit()不会创建上下文(忽略主要上下文)。 如果创建了上下文,则可以将该上下文传递给其他例程,即使它们位于动态链接的库中也是如此。

此调用与在另一个进程中运行的 CUDA 无关。