【问题标题】:How to reduce the huge time cost (10 seconds) by cublasCreate()?如何通过 cublasCreate() 减少巨大的时间成本(10 秒)?
【发布时间】: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 上运行我的代码。

标签: c++ cuda gpu cublas


【解决方案1】:

我终于找到了原因——我们的主服务器节点运行不好,无法正常与GPU节点通信,导致cuBLAS库的动态链接受阻。重新启动恢复了一切。

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

【讨论】:

  • 如果你能在某个时候接受这个答案来得到 CUDA 标签的未回答列表的问题,那就太好了
猜你喜欢
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多