2

我正在进行一项比较研究,其中我必须对算法的串行和并行版本进行比较(NSGA-II 算法是精确的下载链接)。NSGA-II 是一种启发式优化方法,因此取决于生成的初始随机种群。如果使用 CPU 和 GPU 生成的初始种群不同,那么我无法进行公正的加速研究。

我拥有一块计算能力为 1.3 的 NVIDIA-TESLA-C1060 卡。根据这个答案这个 NVIDIA 文档,我们不能指望 sm_13 设备总是产生符合 IEEE-754 的浮点(单精度)值。换句话说,这意味着在我当前的设备上,我无法对其串行对应的 CUDA 程序进行公正的加速研究。

我的问题是:改用 Fermi 架构能解决问题吗?

4

1 回答 1

3

浮点运算在不同的架构上会产生不同的结果,无论它们是否支持 IEEE754,因为浮点不是关联的。即使在 x86 上切换编译器通常也会给出不同的结果。本白皮书给出了一些很好的解释。

话虽如此,您真正的问题是您有一个数据相关算法,其中操作取决于您生成的随机数。因此,如果您在 CPU 和 GPU 上生成相同的数字,那么两次运行都将遵循相同的路径。考虑使用cuRAND,它可以在 CPU 和 GPU 上生成相同的数字。

于 2012-04-26T16:38:57.753 回答