Ubuntu 16.04LTS; SuiteSparse 4.5.5; CUDA 8.0.61(性能提升); Nvidia司机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驱动程序和SuiteSparse在内的所有内容。我尝试了Cuda 8.0和Cuda 9.0的各种组合。无济于事,Cuda / samples和CHOLMOD / Demos仍能正常工作,但我的CHOLMOD实现会抛出同样的错误。
我已将问题追溯到cudaMemGetInfo()函数。出于某种原因,它报告GPU上的0个可用字节,导致第一个错误(gpu_memorysize)!剩下的错误似乎是第一次失败。 CHOLMOD / Demo / cholmod_l_demo脚本中没有发生此错误,这表明我的实现存在问题。然而,我的实施没有改变。有谁知道为什么cudaMemGetInfo()会报告0个可用字节?我认为这个问题的答案将有助于我找到解决方案。
我查看了无人值守的升级历史记录,看来我在看到错误的时候更新了一些linux-headers和nvidia驱动程序。但我不太确定nvidia驱动程序更新是否应该归咎于CHOLMOD / Demo / cholmod_l_demo完全没问题。所以我怀疑它可能是一个linux-headers问题......
我的实现分布在多个文件中,因此值得查看Github commit。但正如我所提到的,与过去几个月CHOLMOD gpu加速工作时相比,我没有改变任何源文件。
非常感谢任何建议!
答案 0 :(得分:0)
cudaMemGetInfo()报告0个空闲字节的原因是因为我的程序没有libcublas和libcudart的可执行权限。一旦我使用前面的“sudo”运行我的程序,GPU就会被使用,CHOLMOD会像几周前一样工作。
我不确定内核是否更改了权限,或者某些.so安装是否需要新权限。这有点神秘。但解决方案是使用“sudo”来运行程序。