CUDNN学习笔记(3)

简介:

线程安全:
该库是线程安全的,并且它的函数可以从多个主机线程中调用,只要线程不同时共享同一个cuDNN句柄。
重现性(决定论):
根据设计,在具有相同架构和相同SM数量的GPU上执行时,来自给定版本的cuDNN的大部分例程在运行时会产生相同的按位结果。 然而,不同版本之间的位重复性不能保证,因为给定例程的实现可能会改变。 在当前版本中,以下例程不保证可重复性,因为它们使用原子操作:

  • cudnnConvolutionBackwardFilter when
    CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0 or

CUDNN_CONVOLUTION_BWD_FILTER_ALGO_3 is used

  • cudnnConvolutionBackwardData when
    CUDNN_CONVOLUTION_BWD_DATA_ALGO_0 is used
  • cudnnPoolingBackward when CUDNN_POOLING_MAX is used
  • cudnnSpatialTfSamplerBackward

缩放参数alpha和beta:
像cudnnConvolutionForward这样的许多cuDNN例程采用指向缩放因子的指针(在主机内存中),用于将计算值与目标张量中的初始值混合如下:dstValue = alpha [0] computedValue + beta [0] priorDstValue。 当beta [0]为零时,输出不会被读取,并可能包含任何未初始化的数据(包括NaN)。 alpha [0],beta [0]的存储数据类型对于HALF和FLOAT张量为float,对于DOUBLE张量为double。 这些参数使用主机内存指针传递。
为了提高性能,建议使用beta [0] = 0.0。 只有在需要与存储在输出张量中的先前值混合时,才使用β[0]的非零值。

Tensor Core 操作(没volta GPU):
cuDNN v7在支持的GPU SM版本上引入使用Tensor Core硬件加速计算密集型例程。 用户可以通过cudnnMathType_t枚举器利用张量核心加速(使用张量核心操作)。 此枚举器指定张量核心启用的可用选项,并且预计将在每个例程的基础上应用。
使用Tensor Core操作的内核可用于卷积和RNN。
卷积函数是:

  • cudnnConvolutionForward
  • cudnnConvolutionBackwardData
  • cudnnConvolutionBackwardFilter

只有在以下情况下才会在这些路径中触发张量核心操作内核:

  • 在适当的卷积描述符设置mathType到CUDNN_TENSOR_OP_MATH时调用cudnnSetConvolutionMathType。
  • 使用algo = CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM或CUDNN_CONVOLUTION_FWD_ALGO_WINOGRAD_NONFUSED调用cudnnConvolutionForward; 使用算法cudnnConvolutionBackwardData = CUDNN_CONVOLUTION_BWD_DATA_ALGO_1或CUDNN_CONVOLUTION_BWD_DATA_ALGO_WINOGRAD_NONFUSED; 和cudnnConvolutionBackwardFilter使用algo = CUDNN_CONVOLUTION_BWD_FILTER_ALGO_1或CUDNN_CONVOLUTION_BWD_FILTER_ALGO_WINOGRAD_NONFUSED。

对于* _ALGO_WINOGRAD_NONFUSED以外的算法,以下是运行Tensor Core操作的一些要求:

  • 输入,过滤和输出描述符(如适用,xDesc,yDesc,wDesc,dxDesc,dyDesc和dwDesc)具有dataType = CUDNN_DATA_HALF。
  • 输入和输出特征映射的数量是8的倍数。
  • 过滤器类型为CUDNN_TENSOR_NCHW或CUDNN_TENSOR_NHWC。 使用CUDNN_TENSOR_NHWC类型的滤波器时,需要将输入,滤波器和输出数据指针(X,Y,W,dX,dY和dW,如适用)对齐到128位边界。

RNN功能是:

  • cudnnRNNForwardInference
  • cudnnRNNForwardTraining
  • cudnnRNNBackwardData
  • cudnnRNNBackwardWeights

只有在以下情况下才会在这些路径中触发张量核心操作内核:

  • cudnnSetRNNMatrixMathType在适当的RNN描述符设置mathType到CUDNN_TENSOR_OP_MATH上被调用。
  • 所有例程都使用algo = CUDNN_RNN_ALGO_STANDARD调用。
  • 隐藏状态大小,输入大小和批量大小都是8的倍数。

对于所有情况,CUDNN_TENSOR_OP_MATH枚举器是允许使用张量内核的一个指标,但不是必需的。 cuDNN可能更喜欢不使用张量核心操作(例如,当问题大小不适合Tensor Core加速时),而是使用基于常规浮点操作的替代实现。
timg

目录
相关文章
|
机器学习/深度学习 并行计算 TensorFlow
Cuda | Cudnn安装及其配置
Cuda | Cudnn安装及其配置
Cuda | Cudnn安装及其配置
|
机器学习/深度学习 异构计算 并行计算
CUDNN学习笔记(1)
cuDNN概述NVIDIA cuDNN是一个GPU加速深层神经网络原语库。它提供了在DNN应用程序中频繁出现的例程的高度优化的实现: 卷积前馈和反馈, pooling前馈和反馈 softmax前馈和反馈 神经元前馈和反馈: 整流线性(ReLU)-sigmoid 双曲线正切(TANH) 张量转换函数 LRN,LCN和批量归一化前进和后退 cuDNN的卷积程序旨在提高性能,以最快的GEMM(矩阵乘法)为基础实现此类例程,同时使用更少的内存。
8038 0
|
机器学习/深度学习 API
|
并行计算 异构计算
|
并行计算 API 异构计算
|
存储 并行计算 异构计算
|
机器学习/深度学习 缓存 并行计算
|
缓存 并行计算 调度