【问题标题】:How to initialize CUDA so I can make valid execution time measurements?如何初始化 CUDA,以便我可以进行有效的执行时间测量?
【发布时间】:2015-05-25 12:09:55
【问题描述】:

在我的应用程序中,我使用 CUDA 为 CPU 和 GPU 实现了相同的算法,我必须测量在 CPU 和 GPU 上执行算法所需的时间。我注意到在GPU版本的算法中有一些时间用于CUDA初始化,并在程序代码的开头添加了cudaFree(0);,因为它推荐here进行CUDA初始化,但第一个GPU CUDA仍然需要更多时间算法执行,比第二个。

是否有任何其他与 CUDA 相关的东西必须在开始时进行初始化才能正确测量实际算法执行时间?

【问题讨论】:

  • 我不确定谁否决了这个问题,但这是完全有效的 CUDA 问题,我认为以前没有被问过和回答过。

标签: c++ cuda


【解决方案1】:

CUDA 运行时 API 中惰性上下文初始化的启发式已经发生了微妙的变化,因为我知道您链接到的答案是用两种方式编写的:

  1. cudaSetDevice() 现在启动一个上下文,而之前它没有(因此需要在该答案中讨论 cudaFree() 调用)
  2. 运行时 API 用于在上下文初始化时执行的一些与设备代码相关的初始化现在在第一次调用内核时完成

对于第二项,我知道的唯一解决方案是运行一次您想要计时的 CUDA 内核代码作为“热身”以吸收设置延迟,然后然后执行您的计时用于基准测试的代码。

或者,您可以使用驱动程序 API 并更精细地控制应用程序启动期间何时会出现延迟。

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 2016-01-12
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2020-09-17
    相关资源
    最近更新 更多