【发布时间】:2013-07-20 13:06:32
【问题描述】:
当我们谈论在 GPU 上的 Cuda 中的并行程序比 CPU 上类似的顺序程序更快时,顺序程序是否应该由编译器优化器 (gcc -O2) 编译?
我在 GPU 上并行了一个程序。与没有编译器优化器的 CPU 实现相比,它的速度提高了 18 倍。但是当我在 nvcc 编译器中添加选项 -O2 时,加速率降低到 8。
【问题讨论】:
-
CUDA 编译器默认使用完整的编译器优化。您可能通过选择
O2来降低编译优化程度。 -
@talonmies 您应该将此评论转换为答案。也许这会给其他有类似问题的用户提供更直接的帮助。从这个评论中,我会说应该使用完整的优化选项编译顺序代码以进行公平比较,对吗?因此,如果用户当前没有对顺序代码应用任何编译器优化,则加速可能小于
18。 -
除了编译器选项之外,在 CPU 中使用 OpenMP 的并行版本将是一个更有价值的比较。大多数新计算机都具有多线程,并且大多数适用于 CUDA 的代码都可以通过一些 OpenMP 指令轻松并行化。因此,您会将您的 CUDA 程序与 CPU 中的最佳版本进行比较。
-
通过编译器启用最大可能优化来比较加速。一般来说,-O3 应该足够了。有时仅通过传递 -O3 无法实现高度优化的代码,您必须传递其他标志(以启用默认禁用的优化)。
标签: gcc cuda gpu compiler-optimization nvcc