【发布时间】: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