我有一段工作了一段时间的GPU代码。我最近做了一些小的算法更改,但是它们没有涉及CUDA部分。
我正在三台Xeon机器上运行生产,每台机器上装有780 Ti。每次运行大约需要三分钟才能完成,但是在此情况下(有5000种情况),有两种情况下应用程序挂了几个小时(直到被杀死)。两者都在同一台机器上。
第二次,我将GDB附加到正在运行的进程,并得到了一个回溯,看起来像
#0 0x00007fff077ffa01 in clock_gettime ()
#1 0x0000003e1ec03e46 in clock_gettime () from /lib64/librt.so.1
#2 0x00002b5b5e302a1e in ?? () from /usr/lib64/libcuda.so
#3 0x00002b5b5dca2294 in ?? () from /usr/lib64/libcuda.so
#4 0x00002b5b5dbbaa4f in ?? () from /usr/lib64/libcuda.so
#5 0x00002b5b5dba8cda in ?? () from /usr/lib64/libcuda.so
#6 0x00002b5b5db94c4f in cuCtxSynchronize () from /usr/lib64/libcuda.so
#7 0x000000000041cd8d in cudart::cudaApiDeviceSynchronize() ()
#8 0x0000000000441269 in cudaDeviceSynchronize ()
#9 0x0000000000408124 in main (argc=11, argv=0x7fff076fa1d8) at src/fraps3d.cu:200
Run Code Online (Sandbox Code Playgroud)
我手动执行了a frame 8; return;
来强制完成它,这导致它最终卡在了下一个cudaDeviceSynchronize()调用上。再次执行此操作会使它停留在下一个同步调用上(每次使用相同的帧0到8)。更为奇怪的是,故障发生在主循环的中间,直到第5000次。
杀死它之后,下一个作业将启动并正常运行,因此这似乎不是执行主机的系统性故障。
有什么想法会导致像这样的随机故障吗?
我正在编译并运行V6.0.1,运行驱动程序版本331.62。