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