【问题标题】:What are the factors that affect CUDA kernels launch time影响CUDA内核启动时间的因素有哪些
【发布时间】:2017-10-09 21:47:56
【问题描述】:

我有一组 CUDA 内核。每个内核在不到 10 微秒的时间内完成其工作,但其启动时间为 50-70 微秒。我怀疑纹理内存的使用可能是原因,因为它在我的内核中使用。

有什么建议可以减少 CUDA 内核的启动时间吗?一般来说,影响内核启动时间的因素有哪些?

【问题讨论】:

  • 您确定要减少启动时间,还是只是减少启动时间与计算时间的比率?
  • 我需要尽量减少完成工作的总执行时间。
  • 相关:如果代码不是为原生 GPU 架构编译的,CUDA 上下文创建可能需要更长时间。不过,它可能只与第一个内核有关。

标签: cuda gpgpu


【解决方案1】:

您可以通过启动更少的内核来减少总体启动时间;例如如果您按顺序启动多个内核,则可以编写一个新的单个内核,在一次启动中完成所有这些工作。

从目前问题中的一点点上下文来看,我怀疑这是你的问题;你每个内核做的工作太少了。

(我的下一个猜测是基准测试中的错误;即时间不是你认为的那样)

【讨论】:

  • 我在每个内核上做的工作太少了,这是真的。但是,如果我将所有内核合二为一,代码看起来会非常难看,而且更难维护。更重要的是,根据工作,我调用内核的一个子集。最后,您知道影响内核启动时间的因素吗?
  • 我正在使用 nsight profiler 来了解正在发生的事情。如上所述,启动时间支配内核执行时间。
  • 把你的内核变成设备函数,然后从一个大内核中调用它们。它不应该过多地改变代码结构,除非你已经做了一些丑陋的事情。看参数。也许其中一些内核可以合并和优化?如果您坚持使用小型短期运行内核,那么您的问题(或当前解决方案)可能根本不适合大规模并行设备。
  • @caesar:基准测试仍然可能存在问题;例如编写基准代码有一个共同的缺点,这样你试图计时的东西就会被优化掉,而分析器基本上会告诉你无操作的成本。 (我提到这个是因为这不是一个罕见的问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多