【问题标题】:Explanation to better performance with worse GPU executing few blocks解释更好的性能与更差的 GPU 执行几个块
【发布时间】:2015-08-09 10:30:07
【问题描述】:

我有两个 GPU,我正在比较它们与运行遗传算法的 CPU 之间的加速。

我在 CUDA 上的实现使用了主从方法,也就是说,种群中的每个个体都与其他个体并行运行。人口众多,意味着运行更多的块,最好的 GPU (GTX660) 比另一个 (820M) 快得多,但在运行小型的 GPU 时,我使用 820M 获得了更好的性能。

在 CUDA C 编程指南中说:

隐藏 L 时钟延迟所需的指令数 周期取决于这些指令各自的吞吐量(参见算术 各种算术指令的吞吐量指令);假设最大值 所有指令的吞吐量,它是:

L 适用于计算能力为 2.0 的设备,因为多处理器发出一条指令 如 Compute 中所述,每个 warp 在两个时钟周期内一次两个 warp 能力 2.x,

2L 用于计算能力为 2.1 的设备,因为多处理器发出一对 如在 计算能力 2.x,

8L 用于计算能力 3.x 的设备,因为多处理器发出一对 如在一个时钟周期内每次扭曲四个扭曲的指令,如 计算能力 3.x.

5.2.3 多处理器级别

这是我正在寻找的答案吗?由于 GTX660 具有 3.x 的计算能力,与 820M 相比,我需要运行更多的 warp(更大的人口)来隐藏延迟。

请务必注意,我在此测试中使用了不同的计算机,这可能是另一个原因...

提前致谢

【问题讨论】:

  • 我遇到了类似的问题,在运行我的一个内核时,NVS 5200M (2.1) 比 Grid 520 (3.0) 快 2 倍。我发现在一个地方进行双浮点除法会导致 50% 的性能损失,但我不明白为什么会这样,因为在代码的前面已经完成了类似的操作,并且不会对性能造成太大的影响 ...
  • 你有不同的分支吗?使用较新的 GPU,这些成本可能会变得更高。
  • 我确实有一些内核,是的。我将分析它们在两个 GPU 中的差异

标签: performance cuda


【解决方案1】:

不看算法很难说,但我想不出一个很好的理由为什么一个写得好的算法在 820m 上比 gtx 660 上更快。

Wikipedia 在 276-366 处的 GFlops 评级为 820m,内存带宽为 16GB/s。 gtx 660 具有 1881 GFlops FMA 和 144GB/s 带宽。我不知道有任何架构更改会导致如此大的差异。

我建议将结果 1 与 1 进行比较,并确保它们都产生相同的结果。如果是这种情况,我会仔细浏览每个架构的调优指南并进行调整。

820M: http://docs.nvidia.com/cuda/maxwell-tuning-guide/#axzz3bL3OfJ00

660: http://docs.nvidia.com/cuda/kepler-tuning-guide/#axzz3bL3OfJ00

在调整开普勒时,我要牢记的主要一点是全局内存访问默认情况下不会在 L1 中缓存。

祝你好运。

【讨论】:

    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2021-02-18
    • 2014-12-19
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多