【问题标题】:Why am I failing to overlap data transfers and computation with GTX 480 and CUDA 5?为什么我无法使用 GTX 480 和 CUDA 5 重叠数据传输和计算?
【发布时间】:2013-01-05 13:06:51
【问题描述】:

我曾尝试将内核执行与 memcpyasync 重叠,但它不起作用。我遵循编程指南中的所有建议,使用固定内存、不同的流等。我看到内核执行确实重叠,但它与内存传输无关。我知道我的卡只有一个复制引擎和一个执行引擎,但是执行和传输应该重叠,对吧?

似乎“复制引擎”和“执行引擎”总是执行我调用函数的顺序。工作包括执行 [HtoD x2, Kernel, DtoH] 的 4 个流。如果我在每个流上发出 HtoDx2,Kernel,DtoH 系列,我会在分析器中看到 stream2 HtoD 第一个操作在第一个 DtoH 操作结束之前不会开始。如果我首先在每个流上发布 HtoD,然后是第二个 HtoD,然后是内核,然后是 DtoH(宽度),我看不到重叠,并且发布顺序也由 GPU 强制执行。

我已尝试使用 CUDA SDK 中给出的 simpleStreams 示例,我也看到了相同的行为。

我附上了一些屏幕截图,显示了 VS2008 的视觉分析器和 Nsight 中的问题。

ps。我没有设置 CUDA_LAUNCH_BLOCKING 环境

简单的流视觉分析器

MyApp Nsight 时间线广度优先

MyApp Nsight 时间线深度优先

编辑

添加额外的 x4 内核(总共 2HtoD,5 个内核,每个流 1DtoH)--> 如果我在使用和不使用 --concurrent-kernels-off 的情况下运行 nvprof,则经过的时间是相同的。如果我设置 env CUDA_LAUNCH_BLOCKING=1,那么我会看到(从命令行)7.5% 的性能提升!

系统规格:

  • Windows 7
  • 第一个 PCI-E 插槽中的 NVIDIA 6800 VGA
  • 第二个 PCI-E 插槽中的 GTX480
  • NVIDIA 驱动程序:306.94
  • 视觉工作室 2008
  • CUDA v5.0
  • 视觉分析器 5.0
  • Nsight 3.0

【问题讨论】:

  • 在深度优先示例中,可能存在并发,因为 GTX480 只有一个复制引擎,因此不可能重叠。在广度优先示例中,HtoD 与内核以及内核与 DtoH 之间存在重叠的可能性。对于 Nsight VSE,您可能需要确保未启用序列化跟踪。请检查 Nsight|Options...|Analysis|CUDA Kernel Trace Mode 下的选项。如果您发布可重现的内容,我可以帮助您确定问题。
  • 已编辑:深入第一个示例,当来自第一个流的 memcpy 结束并(部分)与内核执行(等等)重叠时,我希望来自第二个流的 memcpy 开始。
  • btw 内核跟踪模式是并发的(感谢您指出)
  • 请提供重现问题的具体源代码。
  • @Dredok:注册后,登录并发布您的票证here

标签: concurrency cuda overlapping nsight


【解决方案1】:

正如我在评论中所说,CUDA 驱动程序确实存在一个错误,它使流媒体无法与我的设置一起使用。我已经测试了 1.1 功能卡 (8800 GTS) 和 3.5 功能卡 (GTX Titan) 并且两张卡都可以正常工作。似乎某些 Fermi 卡有问题(我的 GTX 480 不工作)。

【讨论】:

    【解决方案2】:

    我刚刚遇到了同样的问题。我同意你的观点,有一个BUG。我认为这个错误要么在 Windows 的 CUDA 驱动程序中,要么在 Windows 本身中。我已经测试了我的代码,它在 Linux 中运行良好(有重叠)。

    事实上,您可以在 SDK 中测试“simpleStreams”示例。我发现在 Windows 中运行的“simpleStreams”在内核和内存副本之间根本没有重叠,但在 Linux 中它可以完美运行。

    我正在使用 CUDA 5.0 和 Fermi GTX570。通过您在 8800GT 和 GTX Titan 上的测试,我同意这是 Windows CUDA 驱动程序中的一个错误。希望它会尽快修复。

    【讨论】:

      【解决方案3】:

      TL;DR: 该问题是由 Nsight Monitor 中的 WDDM TDR 延迟选项引起的!当设置为 false 时,会出现问题。相反,如果您设置 TDR 延迟值到一个非常高的数字,并且“启用”选项 真的,问题消失了。 请尝试以下描述的选项(更常见),因为它们也与问题有关!

      请阅读下面的其他(旧)步骤,直到我找到上述解决方案,以及其他一些可能的原因。

      我最近才能够部分解决这个问题!我认为它是特定于 windows 和 aero 的。请尝试这些步骤并发布您的结果以帮助他人!我在 GTX 650 和 GT 640 上试过。

      在您做任何事情之前,请考虑using both onboard gpu(as display) and the discrete gpu (for computations),因为已验证适用于 Windows 的 nvidia 驱动程序存在问题!当您使用板载 gpu 时,所说的驱动程序没有完全加载,因此避免了很多错误。此外,在工作时保持系统响应能力!

      1. 确保您的并发问题与旧驱动程序(包括 bios)、错误代码、无法使用的设备等其他问题无关。
      2. 转到计算机>属性
      3. 选择左侧的高级系统设置
      4. 转到“高级”选项卡
      5. 关于性能点击设置
      6. 在“视觉效果”选项卡中,选择“调整以获得最佳性能”项目符号。

      这将禁用航空和几乎所有视觉效果。如果此配置有效,您可以尝试逐一启用视觉效果框,直到找到导致问题的精确框!

      或者,您可以:

      1. 桌面右键,选择个性化
      2. 从基本主题中选择一个不包含 aero 的主题。

      这也可以像上面那样工作,但启用了更多的视觉选项。对于我的两台设备,这个设置也有效,所以我保留了它。

      当您尝试这些解决方案时,请回到这里并发布您的发现!

      对我来说,它解决了大多数情况下的问题(我制作了一个平铺的 dgemm),但请注意我仍然无法正确运行“simpleStreams”并且实现并发...

      更新:问题已通过新的 Windows 安装完全解决!!之前的步骤改善了某些情况下的行为,但全新安装解决了所有问题!

      我会尝试找到一种不太激进的方法来解决这个问题,也许只恢复注册表就足够了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 2020-12-04
        • 2019-02-15
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        相关资源
        最近更新 更多