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

目录
相关文章
|
JSON 前端开发 API
fetchEventSource源码解析
fetchEventSource源码解析
3760 1
|
Unix 数据安全/隐私保护 Python
python自动生成Excel表格数据并发送邮件案例
python自动生成Excel表格数据并发送邮件案例
1144 0
|
存储 机器学习/深度学习 缓存
软考软件评测师——计算机组成与体系结构(分级存储架构)
本内容全面解析了计算机存储系统的四大核心领域:虚拟存储技术、局部性原理、分级存储体系架构及存储器类型。虚拟存储通过软硬件协同扩展内存,支持动态加载与地址转换;局部性原理揭示程序运行特性,指导缓存设计优化;分级存储架构从寄存器到外存逐级扩展,平衡速度、容量与成本;存储器类型按寻址和访问方式分类,并介绍新型存储技术。最后探讨了存储系统未来优化趋势,如异构集成、智能预取和近存储计算等,为突破性能瓶颈提供了新方向。
|
存储 监控 数据可视化
开源数据管理工具的差异化定位:Grafana 与 MyEMS 在能源监控领域的技术路径与价值边界
在工业数字化与能源智能化趋势下,Grafana 与 MyEMS作为代表性开源工具,分别以“数据可视化”和“能源全链路管理”为核心,功能、场景与架构差异显著。本文从技术与实践角度深度对比两者,助力企业精准选型。
453 2
|
数据采集 机器学习/深度学习 大数据
基于Python实现xgboost回归模型(XGBRegressor)项目实战
基于Python实现xgboost回归模型(XGBRegressor)项目实战
|
数据采集 存储 数据挖掘
构建高效Web爬虫:Python与BeautifulSoup实战指南
【8月更文挑战第31天】本文将引导读者步入Web爬虫的世界,通过Python编程语言和BeautifulSoup库的强强联手,解锁数据抓取的艺术。文章不仅提供代码示例,还将深入探讨如何设计高效、可维护且符合伦理的爬虫程序。
|
供应链 JavaScript 前端开发
TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
搜索推荐 前端开发 C#
推荐7款美观且功能强大的WPF UI库
推荐7款美观且功能强大的WPF UI库
2477 2
|
SQL 数据库
SQL DISTINCT 用法总结
SQL DISTINCT 用法总结
5832 3

热门文章

最新文章