如何通过cublasCreate()减少巨大的时间成本(10秒)

How to reduce the huge time cost (10 seconds) by cublasCreate()?

本文关键字:时间 10秒 何通过 cublasCreate 巨大      更新时间:2023-10-16

我正在使用cuSPARSE_v2/cuBLAS_v2库实现共轭梯度(CG)求解器,以在我的研究中处理大型稀疏矩阵。我观察到的奇怪的事情是cublasCreate()函数花费了巨大的时间,大约10秒。我知道库初始化成本通常很大,但通过搜索论坛,我发现cublasCreate的通常时间成本约为100毫秒,而不是10秒。而整个CG迭代部分只需要0.6 ~ 1秒。我还使用CUSP库实现了CG求解器,它的性能相当好-总代码时间约为0.5秒。

那么如何减少cublasCreate()的时间成本呢?另外,如果10s是cuda库初始化的必要条件,为什么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);

非常感谢!

我终于找到了原因——我们的主服务器节点工作不正常,无法与GPU节点正常通信,这导致了cuBLAS库的动态链接受阻。重启恢复所有。

所以此时cublasCreate()没有问题。我把它贴在这里作为一个答案,以防有人遇到类似的情况(尽管可能性很低)。