首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BLAS和CUBLAS

BLAS和CUBLAS
EN

Stack Overflow用户
提问于 2010-04-30 16:22:18
回答 3查看 4.8K关注 0票数 6

我想知道NVIDIA的cuBLAS库。有谁有使用它的经验吗?例如,如果我使用BLAS编写C程序,我是否能够将对BLAS的调用替换为对cuBLAS的调用?或者更好地实现一种让用户在运行时选择的机制?

如果我在C++中使用Boost提供的BLAS库怎么办?

EN

回答 3

Stack Overflow用户

发布于 2014-02-26 01:00:53

janneb的回答是不正确的,cuBLAS is 不是CPU BLAS的临时替代品。它假设数据已经在设备上,并且函数签名有一个额外的参数来跟踪cuBLAS上下文。

然而,CUDA 6.0中引入了一个名为NVBLAS的新库,它提供了这种“插入式”功能。它拦截PCIE调用(GEMM、TRSV等),并自动将它们发送到GPU,有效地将Level3传输与GPU上的计算平铺。

这里有一些信息:https://developer.nvidia.com/cublasxt,CUDA6.0现在可供CUDA注册开发人员使用。

一旦CUDA 6.0向公众发布,完整的文档将在网上发布。

票数 5
EN

Stack Overflow用户

发布于 2012-10-22 10:05:51

CUBLAS不会环绕BLAS。CUBLAS还以列为主的顺序访问矩阵,例如一些Fortran代码和BLAS。

我更习惯于用C编写代码,即使是CUDA。使用CBLAS (它是BLAS的C包装)编写的代码可以很容易地更改为CUDA代码。请注意,使用BLAS的Fortran代码与使用CBLAS的C/C++代码有很大不同。Fortran和BLAS通常以列为主的顺序存储矩阵或双精度数组,但C/C++通常处理行为主的排序。我通常通过将矩阵保存在一维数组中来处理这个问题,并使用#define编写一个宏来访问矩阵的元素i,j,如下所示:

代码语言:javascript
复制
/* define macro to access Aij in the row-wise array A[M*N] */
#define indrow(ii,jj,N) (ii-1)*N+jj-1 /* does not depend on rows M  */
/* define macro to access Aij in the col-wise array A[M*N] */
#define indcol(ii,jj,M) (jj-1)*M+ii-1 

CBLAS库有一个组织良好的参数和约定(常量枚举变量),为每个函数提供矩阵的顺序。请注意,矩阵的存储也有所不同,行带状矩阵的存储方式与列带状矩阵的存储方式不同。

我不认为有机制允许用户在使用BLAS或CUBLAS之间进行选择,而无需编写两次代码。在大多数函数调用中,CUBLAS也有一个在BLAS中不出现的“处理”变量。我想在每次函数调用时使用#define来更改名称,但这可能不起作用。

票数 2
EN

Stack Overflow用户

发布于 2013-04-04 22:06:38

我一直在把BLAS代码移植到CUBLAS上。我使用的BLAS库是ATLAS,所以我所说的可能只有在选择BLAS库时才是正确的。

ATLAS BLAS要求您指定是使用列主排序还是使用行主排序,我之所以选择列主排序,是因为我使用的是使用列主排序的CLAPACK。另一方面,LAPACKE将使用行主排序。CUBLAS是列主序。您可能需要相应地进行调整。

即使排序不是问题,移植到CUBLAS也绝不是一种替代。最大的问题是您必须将数据移入和移出GPU的内存空间。该内存是使用cudaMalloc()设置的,并使用cudaFree()释放,这与预期的一样。您可以使用cudaMemcpy()将数据移动到GPU内存中。做这件事的时间将是决定是否值得从CPU迁移到GPU的一个很大的决定因素。

然而,一旦完成,调用就会非常相似。CblasNoTrans变成了CUBLAS_OP_N,CblasTrans变成了CUBLAS_OP_T。如果你的BLAS库(就像ATLAS那样)允许你按值传递标量,你必须把它转换成按引用传递(这对于FORTRAN来说是很正常的)。

鉴于此,任何允许选择CPU/GPU的开关都很容易处于比使用BLAS的函数更高的级别。在我的例子中,我有算法的CPU和GPU变体,并根据问题的大小在更高的级别上选择它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2743190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档