cublas 句柄的问题

cublas句柄被cubladestroy()掉之后,用这个句柄调用函数时所涉及到的作为输入参数的device 矩阵是不是也被释放掉了?
就像这样

cudaMalloc(A_gpu)
for (i=0;i<n;i++)
{
cublacreate(&handle);
cublafunction(handle,A_gpu);
cubladestroy(handle);
}
cudaFree(A_gpu);

程序运行时第一次结果正常,第二次循环cubla函数提示内存访问越界。

LZ您好:

一般句柄的摧毁和缓冲区的释放是分开的,摧毁句柄最多附带释放其自身申请的自用的一些缓冲区,而由用户自己申请的缓冲区需要用户自己释放。

所以尚不清楚您的问题何在,我平时不用此库,大致翻了下手册,并无强调摧毁句柄有其他特别需要注意的地方。

以及,您也可以看到,cublasDestroy()的时候,参数仅仅是句柄;cublasCreate()的时候,参数也仅仅是句柄,所以,创建和销毁句柄不应该和您自己申请的缓冲区有关的。

综上,请您再研究下您的代码,看看哪里有问题。

感谢您午夜来访,祝您调试顺利~

上面那个问题搞定了。
做了个矩阵乘法的测试,矩阵A维数为256000*3613,实数非稀疏,双精度,按列存为一个一维矩阵,用 cublasDgemm(A’,A,B) 函数执行 B=A’ *A。由于矩阵太大显存不够,所以将A按行截为五段,重写为5个一维矩阵(都为按列连续存储),分段读入显存,实际执行C=sum(Ai’ Ai) i=1~5. 由于cublasDgemm执行时会把矩阵相乘的结果直接加在B上,所以只需在5次循环中执行cublasDgemm(Ai’,Ai,B)即可。除去数据传输的时间,GPU的执行时间为34.5s。作为对比,通过c++与matlab混合编程调用matlab的矩阵乘法函数,CPU执行时间为84.7秒。GPU只比CPU快了一倍多点。:dizzy: 不知道还能优化什么不。
运行环境为 WIN7 X64 VS2008 CUDA4.0 matlab 2009a
硬件为 I7 3770, DDR3 1600
32G, GTX580 3G。

LZ您好:

这个我就不清楚了,cublas这个库我不用,也没有评估过效能。
请其他熟悉该库的网友/斑竹/总版主/NV原厂支持补充回答。

祝您好运~

从手册里翻出个函数cublasDsyr2k(),专门求矩阵和自己转置乘积的,现在的时间缩短为25秒,总算是有了个三倍多的加速比。不过这个矩阵乘法仍然做得非常肉痛,我一个五千多行代码的复杂计算,居然有一半的运算时间要用来做这个看起来简单无比的矩阵乘法,总的加速比直接被这玩意降低一半。:L