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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值