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

时间:2016-11-09 18:13:53

标签: c++ cuda gpu cublas

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

那么如何通过cublasCreate()减少时间成本?此外,如果cuda库初始化必须具有10s的大,那么为什么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);

非常感谢!

1 个答案:

答案 0 :(得分:1)

我终于找到了原因 - 我们的主服务器节点运行不正常并且无法正常与GPU节点通信,这在某种程度上导致了cuBLAS库的动态链接受阻。重启全部恢复。

此时cublasCreate()没有问题。我在这里发布它作为答案,以防任何人遇到类似的情况(尽管概率很低)。