写的程序里会用到矢量运算,于是想,这样的并行用CUBLAS库是不是就可以了呢?于是今天瞅了瞅CUBLAS的简单应用的例子。你问小幻为什么不看高级应用?数学不好,那个例子讲解微分方程的,俺连手工怎么解都不晓得,别说用程序了。
应用很简单,就是调用库函数,做矩阵运算。师姐后来发给小幻一个网址,是一个人做的总结,觉得写的很好很概括,所以就偷懒粘过来,嘿嘿,这样我就不用总结啦~
1. 参考文档
CUBLAS_Library_2.1.pdf (话说我还没找,明天早晨找找)
2. 环境配置
1)添加头文件:cublas.h
2.)添加链接库:在能运行cuda程序的平台上,按照下面的方法添加cublas的lib文件:Project -> ** Properties -> Configuration Properties -> Linker -> Input -> Additional Dependencies -> 添加“cublas.lib”(这里如果用的是emu模式,不管是emudebug还是emurelease,添加的库要改成”cublasemu.lib”,切记,不然会报LINK2019错误)
3 文档的使用说明
CUBLAS_Library文档中提供了两种类型的库函数。
第一种:CUBLAS Helper function,该类库函数主要是为core function(即为第二类库函数) 利用GPU资源做准备,实现的功能包括显存空间的分配和释放,对向量和矩阵做set/get 操作等。
第二种:BLAS.x Function,也称为core function。其中x 可取1,2,3分别表示三种不同类型的线性代数的运算,BLAS.1 Function实现 vector 与vector 的运算,BLAS.2 Function实现 vector 与matrix 的运算,BLAS.3 Function 实现matrix 与 matrix 的运算。
Core Function 根据矩阵的类型和特殊矩阵的存储方式,提供了不同的接口。该库中包含的特殊矩阵类型有:常规型矩阵(general matrix),三角形矩阵(triangular matrix),对称矩阵(symmetric matrix),旋转矩阵(rotation matrix)。具体的存储方式见附录一 matrix type。针对稀疏矩阵,为了节约存储空间,cublas提供了两种存储方式:banded storage 和packed storage,具体的存储方式见附录二 storage type。
4 使用cublas 库函数的程序框架
1. cublasInit();
2. 将要计算的变量拷贝到显存上
3. 调用cublas core function
4. 将计算后变量拷贝回到内存上
5. cublasShutdown();
第二和第四步的说明:
将要计算的变量“放到”显存上,这里有两种方式来实现:
第一种利用cublas提供的helper function cublasAlloc和cublasSetMatrix,
第二种:利用cuda提供的cudamalloc 和cudaMemcpy。经过测试,这两种方式的执行效率相差不大(小幻今天的example用的是第二种)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cuidiwhere/archive/2010/01/29/5271065.aspx