2

我有一个 CUDA 应用程序,它在一台计算机(带有 GTX 275)上运行良好,而在另一台计算机上,GeForce 8400 的运行速度慢了大约 100 倍。我的怀疑是有某种回退使代码实际上在 CPU 上而不是在 GPU 上运行。

有没有办法真正确保代码在 GPU 上运行?
这个后备是否记录在某处?
什么条件可以触发它?

编辑:代码是使用 8400 所具有的计算能力 1.1 编译的。

4

3 回答 3

7

难道只是性能差距那么大。链接表明 8400 以 22-62 GFlops 运行,此链接表明 GTX 275 以 1010.88 GFlops 运行。

于 2009-12-22T14:15:32.147 回答
2

这有很多可能的原因。

  1. 大概您没有使用仿真设备。您可以从 SDK 运行设备查询示例吗?这将显示您是否正确安装了工具包和驱动程序。

    您还可以从应用程序中查询设备属性,以检查您连接的设备。

  2. 8400 的性能远低于 GTX275,因此它可能是真实的,但请看下一点。

  3. 从计算能力 1.1 到 1.2 及更高版本的主要变化之一是处理内存访问的方式。在 1.1 中,您必须非常小心,不仅要合并您的内存访问,还要确保每个半扭曲对齐,否则每个线程将发出它自己的 32 字节事务。在 1.2 及更高版本中,对齐不再是一个问题,因为它会优雅地降级以最小化事务。

    这与 8400 的较低性能相结合,也可以解释您所看到的情况。

于 2009-12-22T14:41:43.430 回答
1

如果我没记错的话,您可以从主机代码中列出所有可用的设备(并选择用于内核的设备)。您可以尝试确定可用设备是否是软件仿真并发出警告。

于 2009-12-22T14:12:08.437 回答