CUDA编程实践--cuBLAS

在一些应用中我们需要在GPU中实现一些诸如线性求解器,非线性优化、等矩阵分析和线性代数的功能。CUDA库中提供一个BLAS线性代数库,cuBLAS。

BLAS指定了一系列低层次的运行常用的线性代数操作的路线,如向量加,常量乘,内积,线性变换,矩阵乘法等。BLAS为线性代数准备了de facto的标准低层次范例,这些 例范例包含了c和Fortran接口。所以BLAS的规则是通用的,BLAS的实现会针对机器优化,使用BLAS可以带来性能上的提升,BLAS的实现利用了特殊的读点硬件如向量寄存器和SIMD指令等。

官网说明

cuBLAS库是一个BLAS的实现,他允许用户使用NVIDIA的GPU的计算资源。cuBLAS在CUDA6.0中出现,现在包含2个类API,常规cuBLAS,简称为cuBLAS API,另外一种是CUBLASXT API。使用cuBLAS 的时候,应用程序应该分配矩阵或向量所需的GPU内存空间,并加载数据,调用所需的cuBLAS函数,然后从GPU的内存空间上传计算结果至主机,cuBLAS API也提供一些帮助函数来写或者读取数据从GPU中。
当使用CUBLASXT API的时候,应用程序应该保存数据在主机上,并且库会进行调度系统中的一个或多个GPU,这个会根据用户的需求完成。

cublasStatus_t CUBLASWINAPI cublasSetMatrix (int rows, int cols, int elemSize, const void *A, int lda, void *B, int ldb);

该函数从矩阵A(位于CPU中)中复制了一个矩形区域 rows x cols的元素到GPU的矩阵B的内存中。 每个元素需要elemSize字节的存储空间。
Both matrices are assumed to be stored in column major format, with the leading dimension (i.e. number of rows) of source matrix A provided in lda, and the leading dimension of matrix B provided in ldb. In general, B points to an object, or part of an object, that was allocated via cublasAlloc().

cublasHandle_t handle;
stat = cublasCreate(&handle); if (stat != CUBLAS_STATUS_SUCCESS) { printf ("CUBLAS initialization failed\n"); return EXIT_FAILURE; }

首先创建一个cuBLAS库的句柄,使用该函数初始cuBLAS库的上下文。这个句柄需要显式的传递给之后被调用的API函数。在使用多个主机的线程和多个GPU的时候,用户可以对库的设置实现更完整的控制。

stat = cublasCreate(&handle); if (stat != CUBLAS_STATUS_SUCCESS) { printf ("CUBLAS initialization failed\n"); return EXIT_FAILURE; }

矩阵的元素排列形式

C语言是按行存储的,在内存中,矩阵A的首行首先被连续存储,然后是首行后的一行再被连续的存储,依次类推,我们称A的这个存储结构为Host_A。

那么CUBLAS会如何理解HOST_A呢?

CUBLAS中,矩阵会被按照列存储,所以CUBLAS也是按照 按列存储的方式理解内存中的数据的,如果我们告诉CUBLAS,HOST_A存储的是一个M X N的矩阵,那么,CUBLAS会把连续存储的首次M个元素作为矩阵首列的元素存储单元,按照我们原先C中的使用,这显然是不对的,因为C中,我们认为HOST_A的首N个连续存储单元为A的首行元素。

编译和链接

在函数调用的文件中包含头文件 “cublas.h” 和 “cublas_v2.h”另外链接的时候指定cublas.so (Linux), the DLL cublas.dll

常用的数据类型

<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值