我有一个 CUDA 应用程序,它在一台计算机(带有 GTX 275)上运行良好,而在另一台计算机上,GeForce 8400 的运行速度慢了大约 100 倍。我的怀疑是有某种回退使代码实际上在 CPU 上而不是在 GPU 上运行。
有没有办法真正确保代码在 GPU 上运行?
这个后备是否记录在某处?
什么条件可以触发它?
编辑:代码是使用 8400 所具有的计算能力 1.1 编译的。
这有很多可能的原因。
大概您没有使用仿真设备。您可以从 SDK 运行设备查询示例吗?这将显示您是否正确安装了工具包和驱动程序。
您还可以从应用程序中查询设备属性,以检查您连接的设备。
8400 的性能远低于 GTX275,因此它可能是真实的,但请看下一点。
从计算能力 1.1 到 1.2 及更高版本的主要变化之一是处理内存访问的方式。在 1.1 中,您必须非常小心,不仅要合并您的内存访问,还要确保每个半扭曲对齐,否则每个线程将发出它自己的 32 字节事务。在 1.2 及更高版本中,对齐不再是一个问题,因为它会优雅地降级以最小化事务。
这与 8400 的较低性能相结合,也可以解释您所看到的情况。
如果我没记错的话,您可以从主机代码中列出所有可用的设备(并选择用于内核的设备)。您可以尝试确定可用设备是否是软件仿真并发出警告。