> 文档中心 > 3.cuBLAS开发指南中文版--cuBLAS数据类型引用

3.cuBLAS开发指南中文版--cuBLAS数据类型引用


2.2 cuBLAS数据类型引用

在这里插入图片描述

2.2.1 cublasHandle_t

cublasHandle_t 类型是指向包含 cuBLAS 库上下文的不透明结构的指针类型。 cuBLAS 库上下文必须使用 cublasCreate() 初始化,并且返回的句柄必须传递给所有后续的库函数调用。 最后应该使用 cublasDestroy() 销毁上下文。

2.2.2 cublasStatus_t

该类型用于函数状态返回。 所有 cuBLAS 库函数都返回它们的状态,它可以有以下值。

Value Meaning

CUBLAS_STATUS_SUCCESS

操作成功完成。

CUBLAS_STATUS_NOT_INITIALIZED

cuBLAS 库未初始化。 这通常是由于缺乏先验cublasCreate() 调用,由 cuBLAS 例程调用的 CUDA 运行时 API 中的错误,或硬件设置中的错误。 更正:在函数调用之前调用 cublasCreate() ; 并检查硬件、适当版本的驱动程序和 cuBLAS 库是否已正确安装。

CUBLAS_STATUS_ALLOC_FAILED

cuBLAS 库中的资源分配失败。 这通常是由 cudaMalloc() 失败引起的。 更正:在函数调用之前,尽可能多地释放先前分配的内存。

CUBLAS_STATUS_INVALID_VALUE

向函数传递了不受支持的值或参数(例如,负向量大小)。 更正:确保传递的所有参数都具有有效值。

CUBLAS_STATUS_ARCH_MISMATCH

该功能需要设备架构中缺少的功能; 通常是由低于 5.0 的计算能力引起的。 更正:在具有适当计算能力的设备上编译和运行应用程序。

CUBLAS_STATUS_MAPPING_ERROR

访问 GPU 内存空间失败,这通常是由于绑定纹理失败造成的。 更正:在函数调用之前,取消绑定任何先前绑定的纹理。

CUBLAS_STATUS_EXECUTION_FAILED

GPU 程序无法执行。 这通常是由 GPU 上的内核启动失败引起的,这可能是由多种原因引起的。 更正:检查硬件、适当版本的驱动程序和 cuBLAS 库是否已正确安装。

CUBLAS_STATUS_INTERNAL_ERROR

内部 cuBLAS 操作失败。 此错误通常是由 cudaMemcpyAsync() 失败引起的。 更正:检查硬件、适当版本的驱动程序和 cuBLAS 库是否已正确安装。 此外,检查作为参数传递给例程的内存是否在例程完成之前没有被释放。

CUBLAS_STATUS_NOT_SUPPORTED

不支持请求的功能

CUBLAS_STATUS_LICENSE_ERROR

请求的功能需要一些许可证,并且在尝试检查当前许可时检测到错误。 如果许可证不存在或已过期,或者环境变量 NVIDIA_LICENSE_FILE 设置不正确,则可能会发生此错误。

2.2.3 cublasOperation_t

cublasOperation_t 类型指示需要对密集矩阵执行哪个操作。 它的值对应于 Fortran 字符“N”或“n”(非转置)、“T”或“t”(转置)和“C”或“c”(共轭转置),这些字符通常用作传统 BLAS 的参数 实施。

Value Meaning
CUBLAS_OP_N 选择非转置操作
CUBLAS_OP_T 转置操作被选中
CUBLAS_OP_C 共轭转置操作被选中

2.2.4 cublasFillMode_t

类型指示密集矩阵的哪一部分(下部或上部)被填充,因此应该由函数使用。 它的值对应于 Fortran 字符“L”或“l”(下)和“U”或“u”(上),这些字符通常用作传统 BLAS 实现的参数。

Value Meaning
CUBLAS_FILL_MODE_LOWER 矩阵的下部被填充
CUBLAS_FILL_MODE_UPPER 矩阵的上半部分被填充
CUBLAS_FILL_MODE_FULL 整个矩阵被填充

2.2.5 cublasDiagType_t

类型指示稠密矩阵的主对角线是否为单位,因此不应被函数触及或修改。 它的值对应于 Fortran 字符“N”或“n”(非单位)和“U”或“u”(单位),这些字符通常用作传统 BLAS 实现的参数。

Value Meaning
CUBLAS_DIAG_NON_UNIT 矩阵对角线具有非单位元素
CUBLAS_DIAG_UNIT 矩阵对角线具有单位元素

2.2.6 cublasSideMode_t

类型指示稠密矩阵在由特定函数求解的矩阵方程中是位于左侧还是右侧。 它的值对应于 Fortran 字符“L”或“l”(左)和“R”或“r”(右),这些字符通常用作传统 BLAS 实现的参数。

Value Meaning
CUBLAS_SIDE_LEFT 矩阵在等式的左边
CUBLAS_SIDE_RIGHT 矩阵在等式的右边

2.2.7 cublasPointerMode_t

cublasPointerMode_t 类型指示标量值是在主机还是设备上通过引用传递。 需要指出的是,如果函数调用中存在多个标量值,则它们都必须符合相同的单指针模式。 可以分别使用 cublasSetPointerMode() cublasGetPointerMode() 例程设置和检索指针模式。

Value Meaning
CUBLAS_POINTER_MODE_HOST 标量在主机上通过引用传递
CUBLAS_POINTER_MODE_DEVICE 标量在设备上通过引用传递

2.2.8 cublasAtomicsMode_t

该类型指示是否可以使用具有使用原子的替代实现的 cuBLAS 例程。 可以分别使用 cublasSetAtomicsMode()cublasGetAtomicsMode() 和例程设置和查询原子模式。

Value Meaning
CUBLAS_ATOMICS_NOT_ALLOWED 不允许使用原子
CUBLAS_ATOMICS_ALLOWED 允许使用原子

2.2.9 cublasGemmAlgo_t

cublasGemmAlgo_t 类型是一个枚举数,用于指定 GPU 架构上的矩阵-矩阵乘法算法,最高 sm_75。 在 sm_80 和更新的 GPU 架构上,此 enumarant 无效。 cuBLAS 具有以下算法选项:

Value Meaning
CUBLAS_GEMM_DEFAULT 应用启发式方法选择 GEMM 算法
CUBLAS_GEMM_ALGO0 to CUBLAS_GEMM_ALGO23 明确选择算法 [0,23]。 注意:对 NVIDIA Ampere 架构 GPU 和更新版本没有影响。
CUBLAS_GEMM_DEFAULT_TENSOR_OP[DEPRECATED] 此模式已弃用,将在未来版本中删除。 应用启发式方法来选择 GEMM 算法,同时允许使用降低精度的 CUBLAS_COMPUTE_32F_FAST_16F 内核(为了向后兼容)。
CUBLAS_GEMM_ALGO0_TENSOR_OP to CUBLAS_GEMM_ALGO15_TENSOR_OP[DEPRECATED] 这些值已弃用,将在未来版本中删除。 明确选择 Tensor 核心 GEMM 算法 [0,15]。 允许使用降低精度的 CUBLAS_COMPUTE_32F_FAST_16F 内核(为了向后兼容)。 注意:对 NVIDIA Ampere 架构 GPU 和更新版本没有影响。

2.2.10 cublasMath_t

cublasMath_t 枚举类型在 cublasSetMathMode() 中用于选择如下定义的计算精度模式。 由于此设置不直接控制Tensor Core的使用,模式 CUBLAS_TENSOR_OP_MATH 已被弃用,并将在未来的版本中删除。

Value Meaning
CUBLAS_DEFAULT_MATH 这是默认和最高性能模式,它使用计算和中间存储精度,并且尾数和指数位数至少与请求的位数相同。 将尽可能使用Tensor Core。
CUBLAS_PEDANTIC_MATH 此模式对计算的所有阶段使用规定的精度和标准化算法,主要用于数值稳健性研究、测试和调试。 此模式的性能可能不如其他模式。
CUBLAS_TF32_TENSOR_OP_MATH 使用 TF32 Tensor Core启用单精度例程加速。
CUBLAS_MATH_DISALLOW_REDUCED_PRECISION_REDUCTION 在输出类型精度小于计算类型精度的混合精度例程中,强制矩阵乘法期间的任何归约使用累加器类型(即计算类型)而不是输出类型。 这是一个可以与任何其他值一起设置(使用按位或运算)的标志。
CUBLAS_TENSOR_OP_MATH [DEPRECATED] 此模式已弃用,将在未来版本中删除。 允许库尽可能使用 Tensor Core 操作。 对于单精度 GEMM 例程,cuBLAS 将使用 CUBLAS_COMPUTE_32F_FAST_16F 计算类型。

2.2.11 cublasComputeType_t

cublasComputeType_t 枚举类型用于 cublasGemmExcublasLtMatmul(包括所有批处理和跨步批处理变体)来选择如下定义的计算精度模式。

Value Meaning

CUBLAS_COMPUTE_16F

这是 16 位半精度浮点和所有至少具有 16 位半精度的计算和中间存储精度的默认和最高性能模式。 将尽可能使用Tensor Core。

CUBLAS_COMPUTE_16F_PEDANTIC

此模式对所有计算阶段使用 16 位半精度浮点标准化算法,主要用于数值稳健性研究、测试和调试。 此模式的性能可能不如其他模式,因为它禁用了Tensor Core。

CUBLAS_COMPUTE_32F

这是默认的 32 位单精度浮点,并使用至少 32 位的计算和中间存储精度。

CUBLAS_COMPUTE_32F_PEDANTIC

对所有计算阶段使用 32 位单精度浮点算法,并禁用算法优化,例如高斯复杂度降低 (3M)。

CUBLAS_COMPUTE_32F_FAST_16F

允许库将Tensor Core与自动下转换和 16 位半精度计算一起用于 32 位输入和输出矩阵。

CUBLAS_COMPUTE_32F_FAST_16BF

允许库将Tensor Core与自动下转换和 bfloat16 计算一起用于 32 位输入和输出矩阵。 有关 bfloat16 的更多详细信息,请参阅备用浮点部分。

CUBLAS_COMPUTE_32F_FAST_TF32

允许库将Tensor Core与 TF32 计算一起用于 32 位输入和输出矩阵。 有关 TF32 计算的更多详细信息,请参阅备用浮点部分。

CUBLAS_COMPUTE_64F

这是默认的 64 位双精度浮点,并使用至少 64 位的计算和中间存储精度。

CUBLAS_COMPUTE_64F_PEDANTIC

对所有计算阶段使用 64 位双精度浮点算法,并禁用算法优化,例如高斯复杂度降低 (3M)。

CUBLAS_COMPUTE_32I

这是默认的 32 位整数模式,并使用至少 32 位的计算和中间存储精度。

CUBLAS_COMPUTE_32I_PEDANTIC

对所有计算阶段使用 32 位整数运算。

注意: 设置环境变量 NVIDIA_TF32_OVERRIDE = 0 将覆盖 NVIDIA 库的任何默认值或编程配置,因此,cuBLAS 不会使用 TF32 Tensor Core加速 FP32 计算。