在我的研究中,我正在使用cuSPARSE_v2/cuBLAS_v2库来实现共轭梯度(CG)求解器来处理一个大的稀疏矩阵。我观察到的奇怪之处是cublasCreate()函数花费了大量的时间,~10秒。我知道库的初始化成本通常很大,但是通过搜索论坛,我发现cublasCreate的通常时间成本是100 ms,而不是10s。而整个CG迭代部分仅需0.6 ~1秒。我还使用CUSP库实现了CG求解器,它的性能很好--总代码时间为0.5秒。
那么,如何通过cublasCreate()降低时间成本呢?另外,如果cuda库的初始化必须有10 s,那么为什么CUSP库的性能要好得多,初始化成本几乎可以忽略呢?
我在GTX 980 Ti上使用CUDA-7.5。下面是我的带有计时的代码片段:
// Timing begin
struct timeval begin, end;
gettimeofday(&begin, 0);
cublasStatus = cublasCreate(&cublasHandle);
// Timing end
gettimeofday(&end, 0);
float cgtime = (end.tv_sec - begin.tv_sec) * 1000.0 + (end.tv_usec - begin.tv_usec) / 1000.0;
printf("\nTime elapse: %f ms.\n", cgtime);非常感谢!
发布于 2016-11-11 01:53:05
最后,我发现了一个原因:我们的主服务器节点不能正常工作,无法正常与GPU节点通信,这就阻碍了cuBLAS库的动态链接。一次重启就恢复了一切。
因此,cublasCreate()在这一点上没有问题。我在这里张贴它作为一个答案,以防任何人遇到类似的情况(虽然可能性很低)。
https://stackoverflow.com/questions/40513446
复制相似问题