在CUDA中,Nsight没有在时间轴

时间:2018-01-22 22:09:22

标签: c++ cuda initialization

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

cuInit(0)

和Nvidia Visual Profiler 8.0未在时间线图上显示。

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

我是否应该期望每次通话都能节省大量时间?

cuda驱动程序API是否有一个内部计数器,以便在某种程度上驱动程序API卸载时,它会自动重新加载它,所以我不必在以后再次运行它?

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

1 个答案:

答案 0 :(得分:1)

每个应用程序before any other cuda driver API calls are used应该调用

cuInit()

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

cuInit()会产生一些时间成本。我不会称它为“琐碎的”#34;它将根据各种系统配置参数而有所不同。

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

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

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

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