【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记

2023-11-10

1 CUDA学习资料合集

【OneFlow】岁末年初,为你打包了一份技术合订本

2 GPU概念介绍

《GPU的硬件结构与执行原理 —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

2.1 内存模型

2.1.1 Bank介绍

《GPU硬件结构之bank —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化》

3 算子优化

3.1 Conv

3.1.1 Img2col:卷积优化算法

博文《基于OneFlow实现Unfold、Fold算子》(以下简称为“《Fold优化》”)
《基于OneFlow实现Unfold、Fold算子》:理解img2col

3.1.2 Unfold & Fold

《基于OneFlow实现Unfold、Fold算子》:Unfold、Fold算子是卷积优化的基础操作

为什么这里out在索引时设计成6维的方式来进行操作呢?

在阅读《Fold优化》时,我们发现out采用6维的形式来进行操作,
在这里插入图片描述
这样是为了CUDA编程时,索引可以直接对应上去,这样代码写作起来会更加简单;

3.2 Norm

3.2.2 LayerNorm

《CUDA优化之LayerNorm性能优化实践》

3.3 Elementwise operator

《高效、易用、可拓展我全都要:OneFlow CUDA Elementwise模板库的设计优化思路》

3.4 Softmax

《如何实现一个高效的 Softmax CUDA kernel?——OneFlow 性能优化分享》

(1)OneFlow为什么在Softmax实现时会使用ReduceMax操作呢?

这个问题的来源是这样的,博文《如何实现一个高效的 Softmax CUDA kernel?——OneFlow 性能优化分享》(以下简称为“《Softmax优化》”)在描述Softmax的CUDA实现时表示使用了ReduceMax操作,(也就是求某个维度上的最大值),但是根据Softmax的公式,这个操作在数学上其实是没有必要的,那为什么OneFlow会在CUDA实现时使用ReduceMax操作呢?
关于这一点,我们请教了晓雨哥,

【晓雨哥】:
应该是防溢出吧。

于是我们可以知道,先进行ReduceMax操作的目的是为了减去最大值,从而减小每个元素的绝对值,防止指数操作可能产生的数值溢出。

3.5 Dim transformation

《如何实现比PyTorch快6倍的Permute/Transpose算子?》

4 性能优化方法

4.1 CUDA Kernel中 grid_size 和 block_size 的设置优化

《如何设置CUDA Kernel中的grid_size和block_size?》

4.2 访存优化

《OneFlow GPU性能优化方法一:减少全局内存的访问 —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

4.2.1 Kernel fusion:核函数融合,一次访存,多次计算

(1)Element-wise kernel fusion

《1. Element-wise kernel fusion —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

(2)借助 shared memory 合并带有Reduce计算的Kernel

《2. 借助shared memory合并带有Reduce计算的Kernel —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

(3)使用bitset优化mask计算

《3. 减少实际需要的访存大小(以ReLU为例) —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

4.1.1 Memory access merging:内存访问合并

《OneFlow GPU性能优化方法二:确保全局内存访问合并 —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

以 bitset mask 生成为例讲解访存合并

《如何生成这个 bitset mask 加速Kernel的访存 —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》

4.2 计算优化

《OneFlow GPU性能优化方法三:优化Kernel计算量 》

4.3 延迟隐藏

《OneFlow GPU性能优化方法四:延迟隐藏 》

4.4 优化小技巧

《OneFlow 其他GPU性能优化小技巧 》

5 CUDA高性能计算经典优化问题

① 归约

《CUDA高性能计算经典问题①:归约》

② 前缀和

《CUDA高性能计算经典问题②:前缀和》

③ 矩阵乘法

《关于ChatGPT的一切;CUDA入门之矩阵乘;PyTorch 2.0发布|AI系统前沿动态》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记 的相关文章

随机推荐

  • CAS单点登录-自定义认证登录策略(五)

    在上一节中我们使用了CAS的提供的JDBC 方式的登录认证 基本上能够满足我们多种需求的认证 但是如果CAS框架提供的方案还是不能满足我们的需要 比如我们不仅需要用户名和密码 还要验证其他信息 比如邮箱 手机号 但是邮箱 手机信息在另一个数
  • 毕业设计 - 基于stm32的WiFi监控小车

    文章目录 1 背景 2 系统设计方案 2 1 实现功能 2 1 1 硬件部分 2 1 2 软件部分 2 1 3 WIFI通信功能 2 2 系统架构 2 2 1 WiFi 通信 2 2 2 电机驱动 2 2 3 摄像头 2 2 4 舵机 2
  • 淘宝商品详情

    contact link 待签名参数 uid ttid 231200 taobao android 9 16 0 data 7B 22itemNumId 22 3A 22638728868726 22 7D lng 23 366706 ut
  • 【报错记录】解决CentOS免密失败的问题,以及解决免密问题的排查流程

    前言 本文相当于对之前的文章进行的补充 原创 三台CentOS7非root用户间实现相互间的免密登录 DCTANT的博客 CSDN博客 现场遇到一台旧服务器与其他服务器免密失败的问题 明明 ssh目录中authorized keys中的公钥
  • 图片等比例缩放,javademo

    图片等比缩小 放大需要将图片适配到现有的目标中 思想就是 下面代码 int w Integer parseInt width 原始宽 int h Integer parseInt height 原始高 int w1 450 固定宽 int
  • Ubuntu下如何创建文本文件

    找到要创建文件的位置 右键单机打开终端 输入sudo gedit 文件名字 就可以创建成功啦
  • STM32 USART—串口通信

    目录 一 串口通信协议物理层电平标准 1 RS232标准 2 USB转串口通讯 常用 3 原生的串口到串口 二 串口通信协议软件层 三 串口功能框图 1 引脚 2 数据寄存器USART DR 3 字符帧组成介绍 4 发送与接收数据 5 串口
  • python加速之numpy与numba

    最近在看深度学习加速计算时 发现了numba加速库 声称能加速python运行速速度高达百倍 首先是测速的工具 常规的测速工具是time time 但是在internet上看到有人说 这个不准确 python有个强大的代码测速库 timei
  • linux top进程状态D

    什么是D状态 运行在KVM虚拟机里的一些进程突然出了问题 这些出了问题的进程无法用kill杀掉 使用ps可以看到这些进程处于D状态 build kbuild john ps a o pid ppid stat command PID PPI
  • 浅谈Redis网络模型

    1 Redis介绍 Redis 是C语言开发的一个开源高性能键值对的内存数据库 也是一种NoSQL not only sql 非关系型数据库 的数据库 可以用来做数据库 缓存 消息中间件等场景 在目前的技术选型中 Redis常常被用来作为数
  • python使用xpath批量爬取图片

    import requests from lxml import etree import os if name main 创建文件夹存放照片 if not os path exists day07图片解析 素材 os mkdir day0
  • C语言输出中文

    include
  • 【CSS模块化之路3】 使用

    CSS是一门几十分钟就能入门 但是却需要很长的时间才能掌握好的语言 它有着它自身的一些复杂性与局限性 其中非常重要的一点就是 本身不具备真正的模块化能力 系列文章链接 CSS模块化之路1 使用BEM与命名空间来规范CSS CSS模块化之路2
  • 如何对云服务进行安装措施

    云服务器系统安全建议 1 修改云服务器系统默认远程登录端口 Linux远程端口修改参考文档 https cloud tencent com developer article 1124500 2 腾讯云平台有安全组功能 里面您只需要放行业务
  • 【Shader\j简单\Unity】Flowmap与光栅立体卡片效果

    Flowmap与光栅立体卡片效果 前言 FlowMap 代码 前言 实际上是尝试复原ta101第五课的一个小demo 目前还没有开课 我也穷 既然大纲给出来了 如果有时间摸鱼那么就可以慢慢磨 前面一大半的章节都比较基础适合我这种菜鸟 前期咱
  • 华为云主机被植入挖矿,主机变肉鸡破解实录。

    1 主机被植入挖矿主机现象 早上一大早来公司发现自己的华为云主机cpu使用一直飙高 然后使用top命令查看 发现top命令不能用 此时得我知道事情不简单了 然后使用last查看登录记录 发现记录都被清空了 然后history也是清空的 看不
  • 【华为OD机试真题 python】数字字符串组合倒序 【2022 Q4

    题目描述 数字字符串组合倒序 对数字 字符 数字串 字符串 以及数字与字符串组合进行倒序排列 字符范围 由 a 到 z A 到 Z 数字范围 由 0 到 9 符号的定义 作为连接符使用时作为字符串的一部分 例如 20 years 作为一个整
  • 初体验ipad

    初体验ipad 今天星期六 阳光明媚 在去饭堂吃早餐的路上 远远看见排球场人群涌动 听见舞台上有人在唱歌 心想肯定是什么飚歌大赛 跟咱无关 正准备转头离开 突然瞄到 3G体验 几个大字 由于没戴眼镜 看不清 就眯着眼睛看了看 写着 ipho
  • 群晖服务器性能测试,对群晖DS716+进行性能测试_群晖 DS716+_企业存储技术与评测-中关村在线...

    Iometer是一个工作在单系统和集群系统上用来衡量和描述I O子系统的工具 可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I O的负载 或者用来产生整个综合的I O负载 它也可以用来产生并测量单系统或者多系统 网络 的负载 在性能测
  • 【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记

    1 CUDA学习资料合集 OneFlow 岁末年初 为你打包了一份技术合订本 2 GPU概念介绍 GPU的硬件结构与执行原理 开源100天 OneFlow送上 百天大礼包 深度学习框架如何进行性能优化 2 1 内存模型 2 1 1 Bank