【发布时间】:2017-03-23 15:29:42
【问题描述】:
我正在使用 cuSPARSE_v2/cuBLAS_v2 库实现一个共轭梯度 (CG) 求解器,以应对我研究中的大型稀疏矩阵。我观察到的奇怪的事情是 cublasCreate() 函数的巨大时间成本,大约 10 秒。我知道库初始化成本通常很大,但通过搜索论坛,我发现 cublasCreate 的通常时间成本约为 100 毫秒,而不是 10 秒。而整个CG迭代部分只需要0.6~1秒。我还使用 CUSP 库实现了 CG 求解器,该库执行得非常好 - 总代码时间约为 0.5 秒。
那么如何通过cublasCreate()降低时间成本呢?另外,如果 cuda 库初始化需要 10 秒,为什么 CUSP 库的性能要好得多,而初始化成本几乎可以忽略不计?
我在 GTX 980 Ti 上使用 CUDA-7.5。这是我的代码 sn-p 时间:
// 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);
非常感谢!
【问题讨论】:
-
使用 cublas 的 cuda 示例代码是否也显示了如此大的初始化时间?你在哪个平台(windows/linux)上运行这个?
-
明确地说,这段代码以毫秒为单位输出时间。你看到的是 10.000000 还是 10000.000000?
-
嗨罗伯特,我在 GTX 980 Ti 上使用 CUDA-7.5。来自 cuda-7.5 库的 cuda 示例也显示了 cublasCreate() 的相同 ~ 10 秒成本。谢谢!
-
@chux 嗨 chux,是的,实际输出总是接近 9945.0 毫秒。谢谢!
-
@RobertCrovella 我在 CentOS 6.6 上运行我的代码。