我正在尝试在 NVIDIA 的 K10 GPU 上运行我的代码。我正在使用 5.0 CUDA 驱动程序和 4.2 CUDA 运行时。问题是内核所花费的时间随着迭代而增加,其中每次迭代使用相同数量的源和目标(或粒子)。正因为如此,内核最终会花费大量时间,并且代码会因运行时错误而崩溃,这类似于“GPU 从总线上掉下来”。
可以在此处看到显示随着迭代次数增加内核运行时间的行为的图:
https://docs.google.com/open?id=0B5QLL4ig3LVqODdmVjNBTlp5UFU
我尝试运行 NVIDIA “nbody” 示例来了解这里是否也发生了同样的事情,是的。对于粒子/物体的数量 (Np) = 1e5 和 10 次迭代,代码运行良好。对于 Np=1e5 和迭代 = 100,或 Np=1e6 和迭代 = 10,代码进入挂起整个系统的模式。
当我在使用 Tesla C2050 NVIDIA 卡(CUDA 驱动程序版本:3.2,运行时版本:3.2)的另一台机器上运行我自己的内核以及 NVIDIA 的 nbody 示例时,没有问题,并且内核每次都花费相同的时间迭代。
我试图了解装有 K10 GPU 的机器上发生了什么。我在这台机器上尝试了 CUDA 驱动程序和运行时版本的不同组合,这就是我得到的:
对于 5.0 CUDA 驱动程序,4.2 运行时,它只是挂起,有时会说“GPU 从总线上掉下来”。
对于 4.2 CUDA 驱动程序、4.2 运行时,代码(nbody 以及我的代码)崩溃并出现错误:“CUDA 运行时 API 错误 39:遇到不可纠正的 ECC 错误。”
对于 5.0 CUDA 驱动程序,5.0 运行时,它只是挂起,有时会说“GPU 从总线上掉下来”。
这是一台 64 位的 linux 机器,我们最近组装了 NVIDIA K10 GPU 卡。我正在使用 gfortran44 和 gcc44。
如果有任何其他信息,请告诉我。需要跟踪问题。
在此先感谢您的帮助!
米