第三章 CUBLAS 数据类型参量
3.1 cublasHandle_t cublasHandle_t类型是一个不透明指针类型结构支持CUBLAS库内容。CUBLAS库内容必须通过cublasCreate()初始化,返回的处理结果必须经过所有后续库函数调用,最后必须使用cublasDestroy()摧毁其中内容。
3.2. cublasStatus_t 该函数用于函数状态的返回。所有的CUBLAS library
都返回他们的状态。通常有以下值。
(
操
作
完
全
成
功
)
CUBLAS_STATUS_SUCCESS
CUBLAS_STATUS_NOT_INITIALIZED(CUBLAS library未初始化,通常由于缺少前面的cublasCreate()函数调用引起,是CUDA运行时调用CUBLAS例程的错误,或者是一个硬件启动的错误。 纠正方法:在调用函数前先调用cublasCreate(),检查硬件,适合的驱动版本,CUBLAS库正确安装) CUBLAS_STATUS_ALLOC_FAILED(CUBLAS库中资源分配失败,通常由cudaMalloc()失败所引起。 纠正:在调用此函数之前,尽可能多的解除之前分配的内存) CUBLAS_STATUS_INVALID_VALUE(一个无效值或参数传递给了函
数
(
例
如
一
个
负
矢
量
大
小
)。
纠正:确保所有传递的参数有有效值) CUBLAS_STATUS_ARCH_MISMATCH(函数需要一个设备结构中缺少的功能,通常由于缺少支持双精度所造成。 纠正:在具备相应计算
能
力
的
设
备
上
编
译
和
运
行
程
序
)
CUBLAS_STATUS_MAPPING_ERROR (访问GPU内存空间失败,
通常由绑定纹理失败所造成。
纠正:在调用函数前,解开以前的绑定纹理) CUBLAS_STATUS_EXECUTION_FAILED(GPU项目执行失败。由于GPU发送失败的内核引起,多种原因引起。 纠正:检查硬件,一个合适的驱动程序版本,CUBLAS库的正确安装)
3.3. cublasOperation_t 该类型表明哪些操作需要被执行密集矩阵。其值对应于FORTRAN的字符‘N’或‘n’(非转置), ‘T’或 ‘t’(转置), ‘C’或’c’(共轭转置)。往往作为参数,以传统BLAS实现。其值有 CUBLAS_OP_N(非转置操作被选择) CUBLAS_OP_T(转置操作被选择) CUBLAS_OP_C(共轭转置操作被选)
3.4. cublasFillMode_t 该类型表明哪一部分密集矩阵已被填充,因此需要被函数使用。其值对应FORTRAN的字符数据类型参数‘L’ 或 ‘l’(更低)和‘U’ 或 ‘u’(更高)通常被用作参数遗留给CUBLAS实现。有以下值 CUBLAS_FILL_MODE_LOWER(矩阵的低位被填充) CUBLAS_FILL_MODE_UPPER(矩阵的高位被填充)
3.5. cublasDiagType_t 该类型表明是否稠密矩阵的主对角线归一,以此不应被函数触及和修改。其值对应FORTRAN字符‘N’ or ‘n’ (不归一) and ‘U’ or ‘u’ (归一)。通常被用作参数遗留给CUBLAS实现。有以下值 CUBLAS_DIAG_NON_UNIT(矩阵对角线有非归一元素) CUBLAS_DIAG_UNIT(矩阵对角线都为归一元素)
3.6. cublasSideMode_t 该类型表明密集矩阵是位于等式的左边还是右边。 CUBLAS_SIDE_LEFT(矩阵位于等式左边)
CUBLAS_SIDE_RIGHT(矩阵位于等式右边)
3.7. cublasPointerMode_t 该类型表明标量值是否通过主机或设备上的参数来传递。需要指出的是,如果有几个标量值在函数中被调用,它们必须符合同一指针模式。指针模式分别通过cublasSetPointerMode() 和cublasGetPointerMode()例程来进行设置和检索。 CUBLAS_POINTER_MODE_HOST(标量通过主机参数传递) CUBLAS_POINTER_MODE_DEVICE(标量通过设备参数传递) 3.8. cublasAtomicsMode_t 该类型表明CUBLAS例程通过原子实现替代功能是否可实现。原子模式可通过例程进行设置和查询。 CUBLAS_ATOMICS_NOT_ALLOWED(不能使用原子模式) CUBLAS_ATOMICS_ALLOWED(可以使用原子模式) 第四章 CUBLAS辅助函数参数
4.1. cublasCreate() cublasStatus_t cublasCreate(cublasHandle_t *handle) 该函数初始化CUBLAS库,并创造了一个支持CUBLAS库的解决方案,它在主机和设备上分配硬件资源,在调用其它CUBLAS库时必须先被调用。返回值如下: CUBLAS_STATUS_SUCCESS CUBLAS_STATUS_NOT_INITIALIZED CUBLAS_STATUS_ALLOC_FAILED
4.2. cublasDestroy() cublasStatus_t cublasDestroy(cublasHandle_t handle) 该函数释放CUBLAS库所使用的硬件资源。GPU资源的释放可能会被延迟到应用程序退出。该函数通常是对应于CUBLAS库特定处理的最后一个调用。返回值如下:
CUBLAS_STATUS_SUCCESS
CUBLAS_STATUS_NOT_INITIALIZED 4.3.cublasGetVersion()
cublasStatus_t cublasGetVersion(cublasHandle_t handle, int *version) 该函数返回CUBLAS库的版本号。返回值如下: CUBLAS_STATUS_SUCCESS CUBLAS_STATUS_NOT_INITIALIZED
4.4. cublasSetStream() cublasStatus_t cublasSetStream(cublasHandle_t handle, cudaStream_t streamId) 该函数设置CUBLAS库流,将用于执行对CUBLAS库函数所有的后续调用。如果CUBLAS库流未设置,所有内核使用默认的空流。特别地,可以使用该例程改变流之间的内核启动,然后重置CUBLAS库流归零。返回值如下: CUBLAS_STATUS_SUCCESS
CUBLAS_STATUS_NOT_INITIALIZED
4.5. cublasGetStream() cublasStatus_t cublasGetStream(cublasHandle_t handle, cudaStream_t *streamId) 这个函数获取CUBLAS库流,被用来执行CUBLAS库函数的所有调用。如果CUBLAS库流未被设置,所有内核使用默认空流。返回值如下: CUBLAS_STATUS_SUCCESS CUBLAS_STATUS_NOT_INITIALIZED 4.6.cublasGetPointerMode() cublasStatus_t
cublasGetPointerMode(cublasHandle_t
handle,
cublasPointerMode_t *mode) 该函数通过CUBLAS库获得指针模式。
返回值如下: CUBLAS_STATUS_SUCCESS
CUBLAS_STATUS_NOT_INITIALIZED 4.7.
cublasSetPointerMode()
handle,
cublasStatus_t cublasPointerMode_t
cublasSetPointerMode(cublasHandle_t
mode) 该函数通过CUBLAS库设置指针模式,默认值是通过主机上的参数来传递。返回值如下: CUBLAS_STATUS_SUCCESS CUBLAS_STATUS_NOT_INITIALIZED
4.8. cublasSetVector() cublasStatus_t cublasSetVector(int n, int elemSize, const void *x, int incx, void *y, int incy) 该函数从主机内存空间中复制向量x中n个元素到GPU的内存空间向量y中。两向量中元素都被假定有elemSize字节大小。连续元素的存储空间是源向量x到目标向量y的距离。 一般来说,y 指向一个对象或物体的一部分并通过cublasAlloc()分配。由于假定了列主格式为二维的。如果向量是矩阵的一部分,向量增量等于是访问列矩阵的一部分。类似地,使用一个增量等于是访问矩阵行中的主要维度。返
回
值
如
下
:
CUBLAS_STATUS_SUCCESS
CUBLAS_STATUS_NOT_INITIALIZED
CUBLAS_STATUS_INVALID_VALUE 参数incx, incy, elemSize<=0 CUBLAS_STATUS_MAPPING_ERROR 访问GPU内存失败 4.9. cublasGetVector() cublasStatus_t cublasGetVector(int n, int elemSize, const void *x, int incx, void *y, int incy) 这个函数从GPU内存空间复制向量x中n个元素到主机内存中y向