如何通过cublasCreate()减少巨大的时间成本(10秒)
How to reduce the huge time cost (10 seconds) by cublasCreate()?
我正在使用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()没有问题。我把它贴在这里作为一个答案,以防有人遇到类似的情况(尽管可能性很低)。
相关文章:
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- 测量精确的时间,单位为纳秒C++
- C++,自使用boost和std::chrono的纪元以来的时间?为什么 Boost 版本慢 10 倍?
- 从双秒到标准::时间:steady_clock::d的简短转换?
- 测量我的随机数数组打印的时间始终显示为 0 秒
- 如何将标准::时间::d转换为双倍(秒)?
- Grpc 客户端C++通道析构函数需要 10 秒
- 无限循环在5到10秒后停止工作
- 如何在将秒转换为分钟且余数小于 10 秒时包含前导零
- 如果STD :: COUT发表评论,则计时器需要更长的时间才能达到10.f秒
- 我的SFML项目在约10秒后崩溃
- 如何获取自C++纪元 (MSVS) 以来的本地当前时间(以秒为单位)
- 文件名为自c++中的epoch以来的当前时间(以秒为单位)
- 每 10 秒循环一次
- 如何通过cublasCreate()减少巨大的时间成本(10秒)
- 如何使用' cin '在c++中暂停程序10秒
- 为什么我不能查看运行时间(纳秒)
- 为什么这个程序要等10秒而不是倒数?
- c++如何每10秒检查一次时间
- 打印时间以秒为单位