Ubuntu 16.04LTS;套件解析4.5.5;CUDA 8.0.61(性能提升);英伟达驱动程序384.98;
我让GPU加速的CHOLMOD成功地实现到我的代码中,并在几个月内正常工作。然后最近突然(源代码没有更改),我开始在我的输出中看到这些错误:
GPU failure in cholmod_gpu: gpu_memorysize 8.38861e+06 0 MB
CHOLMOD error: gpu memorysize failure
. file: ../GPU/cholmod_gpu.c line: 384
CHOLMOD error: CUBLAS initialization. file: ../GPU/cholmod_gpu.c line: 433
CHOLMOD error: cudaMemcpy(d_Ls). file: ../Supernodal/../GPU/t_cholmod_gpu.c line: 129
CHOLMOD error: CUDA stream. file: ../Supernodal/../GPU/t_cholmod_gpu.c line: 140
我怀疑是第三方图书馆在无人看管的情况下进行了自我更新。但我对CHOLMOD/Demo/CHOLMOD_l_Demo(导出CHOLMOD_USE_GPU=1)的测试证明,CHOLMOD本身工作得非常好,并且使用了完整的GPU(使用nvidia-smi监控活动)。同样,Cuda/样品都运行良好。我已经清除并重新安装了所有东西,包括Cuda、Nvidia驱动程序和SuiteParse。我试过Cuda 8.0和Cuda 9.0的各种组合。毫无效果,Cuda/samples和CHOLMOD/Demos仍然工作得很好,但我的CHOLMOD实现也出现了同样的错误。
我已经将问题追溯到cudaMemGetInfo()函数。由于某种原因,它报告GPU上有0个可用字节,导致第一个错误(GPU_memoryize)!剩下的错误似乎是从第一个开始的。CHOLMOD/Demo/CHOLMOD_l_Demo脚本中没有出现此错误,这表明我的实现有问题。然而,我在执行过程中没有任何改变。有人知道为什么cudaMemGetInfo()会报告0个可用字节吗?我认为这个问题的答案将有助于指导我找到解决方案。
我查阅了我的无人值守升级历史记录,在我开始看到错误的时候,我似乎更新了一些linux头文件和nvidia驱动程序。但我不太确定英伟达驱动程序更新是罪魁祸首,因为CHOLMOD/Demo/CHOLMOD_l_Demo运行得很好。所以我怀疑这可能是linux头的问题。。。
我的实现分布在几个文件中,因此可能值得查看Github提交。但正如我所提到的,与过去几个月CHOLMOD gpu加速工作时相比,我没有更改任何源文件。
非常感谢您的任何建议!
cudaMemGetInfo()报告0个可用字节的原因是我的程序在libcublas和libcudart上没有可执行权限。当我运行前面有"sudo"的程序时,GPU就被使用了,CHOLMOD的工作方式和几周前一样。
我不确定内核是否更改了权限,或者某些.so安装是否需要新的权限。这有点神秘。但解决方案是使用"sudo"来运行程序。