代码之家  ›  专栏  ›  技术社区  ›  huseyin tugrul buyukisik

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

  •  0
  • huseyin tugrul buyukisik  · 技术社区  · 8 年前

    我的程序中有以下与纯驱动程序API一起工作的代码,

    cuInit(0)
    

    Nvidia Visual Profiler 8.0没有在时间线图上显示它。

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

    我是否应该期望每次通话都会有轻微的时间损失?

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

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Robert Crovella    8 年前

    cuInit() 应为每个应用程序调用一次, before any other cuda driver API calls are used .

    我认为,它没有出现在时间表中的事实是预期的行为。

    将有一些时间成本与 cuInit() . 我不会称之为“琐碎”。它将根据各种系统配置参数而变化。

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

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

    我想你可能会被CUDA搞糊涂了 context . cuInit() 不创建上下文(忽略主上下文)。如果创建了上下文,则可以将该上下文传递给其他例程,即使它们位于动态链接库中。

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