如何取消CUDA的初始化?
CUDA在调用第一个CUDA运行时函数时隐式初始化 我对代码的运行时间进行计时,并通过循环(如何取消CUDA的初始化?,cuda,initialization,gpgpu,Cuda,Initialization,Gpgpu,CUDA在调用第一个CUDA运行时函数时隐式初始化 我对代码的运行时间进行计时,并通过循环(for([100次]{[Time-CUDA-code and-log]})重复100次,这还需要考虑每次迭代中CUDA的初始化时间。因此,我需要在每次迭代后取消CUDA的初始化-如何做到这一点 我尝试过使用cudaDeviceReset(),但似乎没有未初始化的CUDA 非常感谢。cudaDeviceReset是在运行时API中销毁上下文的标准方法(调用cudaFree(0)是创建上下文的标准方法)。这些
for([100次]{[Time-CUDA-code and-log]}
)重复100次,这还需要考虑每次迭代中CUDA的初始化时间。因此,我需要在每次迭代后取消CUDA的初始化-如何做到这一点
我尝试过使用cudaDeviceReset()
,但似乎没有未初始化的CUDA
非常感谢。
cudaDeviceReset
是在运行时API中销毁上下文的标准方法(调用cudaFree(0)
是创建上下文的标准方法)。这些是运行中的进程唯一可用的“重新初始化”级别。当一个进程加载CUDA驱动程序和运行时库并连接到内核驱动程序时,会发生其他每进程事件,但我知道,在没有派生新进程的情况下,无法通过编程实现这些事件
但我真的怀疑您是否希望或应该在计算性能指标时考虑这种设置时间。
cudaDeviceReset
是在运行时API中销毁上下文的标准方法(调用cudaFree(0)
是创建上下文的标准方法)。这些是运行中的进程唯一可用的“重新初始化”级别。当一个进程加载CUDA驱动程序和运行时库并连接到内核驱动程序时,会发生其他每进程事件,但我知道,在没有派生新进程的情况下,无法通过编程实现这些事件
但我真的怀疑,在计算性能指标时,您是否希望或是否需要考虑这种设置时间。为什么要在循环中包含初始化时间?因为如果您的程序运行得如此短暂,以致CUDA初始化时间成为一个因素,那么在重复启动程序时可能会有很多开销。因此,每次启动程序时,最好做更多的工作。你也可以考虑将它作为一种服务来实现。如果你真的想在你的测量中包括初始化和厨房接收器,你可以把你的整个应用程序时间。例如,在Linux中使用
time
。为什么要将初始化时间包括在循环中?因为这将最准确地反映我的代码的完整执行时间。如果您的程序运行得如此短暂,以至于CUDA初始化时间成为一个因素,那么您可能会在重复启动程序时产生大量开销。因此,每次启动程序时,最好做更多的工作。你也可以考虑将它作为一种服务来实现。如果你真的想在你的测量中包括初始化和厨房接收器,你可以把你的整个应用程序时间。例如,在Linux.AFAIK中使用time
,无法正确地取消初始化驱动程序,但在任何情况下都不会占用大量资源。它初始化的几乎所有数据结构都是静态分配的,设备属性可能除外。AFAIK没有办法取消驱动程序的初始化,但在任何情况下都不会占用大量资源。它初始化的几乎所有数据结构都是静态分配的,设备属性可能除外。