目录

前言

im2col+GEMM算法简介

GEMM算法优化

optimize1

optimize2

optimize3


前言

神经网络前向耗时主要由卷积的耗时决定,参考賈杨青毕业论文,那么如何对卷积加速便成了重要的一个点,主流的加速方法有

以下几种:

im2col+GEMM:目前几乎所有的主流计算框架包括 Caffe, MXNet 等都实现了该方法. 该方法把整个卷积过程转化成了GEMM过程,而GEMM在各种 BLAS 库中都是被极致优化的,一般来说,速度较快。

Winograd Winograd 是存在已久最近被重新发现的方法,在大部分场景中, Winograd方法都显示和较大的优势,目前cudnn中计算卷积就使用了该方法。

Strassen:1969年,Volker Strassen提出了第一个时间复杂度低于O(N^3)的算法,其复杂度为O(N^(2^(log2(7)))),但这种方法只在大卷积核情况下优势才比较明显,目前还没有在开源框架中见到这种方法。

FFT:傅里叶变换和快速傅里叶变化是在经典图像处理里面经常使用的计算方法,但是,在 ConvNet中通常不采用,主要是因为在 ConvNet 中的卷积模板通常都比较小,例如 3×3 等,这种情况下,FFT 的时间开销反而更大,所以很少在CNN中利用FFT实现卷积。

很高兴你看完前言:最近发现这篇文章写的很好,阿里那边的,《支付宝如何优化移动端深度学习引擎》推荐给大家~

im2col+GEMM算法简介

GEMM在深度学习中是十分重要的,全连接层以及卷积层基本上都是通过GEMM来实现的,而网络中大约90%的运算都是在这两层中。而一个良好的GEMM的实现可以充分利用系统的多级存储结构程序执行的局部性来充分加速运算。

常规的卷积操作为:

3维卷积运算执行完毕,得一个2维的平面:

将卷积操作的3维立体变为二维矩阵乘法,可以调用BLAS中的GEMM库,按 [kernel_height, kernel_width, kernel_depth] ⇒ 将输入分成 3 维的 patch,并将其展成一维向量:

此时的卷积操作就可转化为矩阵乘法:

下面我们将以M=K=N=600为例说明GEMM算法的优化过程:

直接暴力卷积:

for (int m = 0; m < M; m++) {for (int n = 0; n < N; n++) {for (int k = 0; k < K; k++) {C[m][n]+= A[m][k] * B[k][n];}}
}

上述公式总计算量为2MNK FLOPs(其中

GEMM算法及优化流程详解相关推荐

  1. 扫雷-空白展开算法(优化)-详解

    扫雷是电脑上很经典的游戏,虽然我没玩过.为了写这个博客,我特意去网上玩了一会. 几次调试之后,我觉得这个比三子棋要复杂一些,尤其是空白展开算法上和堵截玩家有的一拼.这个与实际游戏差别较大,不能使用光标 ...

  2. 推荐系统整体架构及算法流程详解

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 知识图谱在美团推荐场景中的应用实践 搜索场景下的智能实体推荐 机器学习在B站推荐系统中的应用实践 小红书推荐系统 ...

  3. 推荐系统架构与算法流程详解

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 zhuanlan.zhihu.com/p/259985388 推荐:https://www.xtt ...

  4. SMART S7-200PLC流量累计算法实现(梯形图算法详解+优化)

    流量累计基于积分的原理,采用细分面积的方法近似计算瞬时流量的累加.离散上也就是累加求和.公式虽然简单但是流量累计仍有些需要注意的地方,下面一一和大家举例说明. 1.数值积分的通式 2.梯形积分公式 从 ...

  5. 【线上沙龙直播报名】App 启动流程详解及其优化

    点击上方"公众号"可以订阅哦 [美团点评技术沙龙Online]是美团点评技术团队推出的线上分享课程,每月2-3期,采用目前最火热的线上直播形式,邀请美团点评技术专家,面向互联网技术 ...

  6. MySQL系列---架构与SQL执行流程详解

    文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...

  7. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  8. .jpg图片转化流程详解

    .jpg文件转化流程详解 概要 色彩空间转换 缩减采样 图像分成8×8像素块 离散余弦变换 量化 压缩 理解质量参数 总结 原文地址 本篇文章翻译自谷歌出的优化视频里面的光头佬(Colt McAnli ...

  9. 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)

    - 点击上方"中国统计网"订阅我吧!- 我们在Spark高级分析指南 | 机器学习和分析流程详解(上)快速介绍了一下不同的高级分析应用和用力,从推荐到回归.但这只是实际高级分析过程 ...

最新文章

  1. 机器学习的门槛再度降低,AI小白如何用5分钟搞定建模?
  2. 句法依存分析_恭喜 | 黑龙江大学自然语言处理实验室获得NLPCC2019跨领域移植中文依存句法分析封闭测试第一名!...
  3. 1月28日昆山杜克大学和西交利物浦大学太仓校区参观有感
  4. 各项兼容坑的记录-持续更新
  5. php怎么获取栏目,thinkphp获取栏目和文章当前位置的方法
  6. Bat+PowerShell实现windows网络一键共享
  7. android 双拼输入法,高效输入解决方案——双拼输入法
  8. steam安裝位置linux,「Linux」- 安装 Steam 客户端 @20210219
  9. Vue3 npm run serve 太慢的解决方法
  10. 《别做正常的傻瓜》后续笔记—幸福的准则
  11. TortoiseSVN—Repo-browser,打开你要比较的两个版本所在的地址,选择一个版本做为比较的基础(单击右键—选择mark for comparison),再选择另外一个版本(单击右键—选
  12. 在unity中,模型自动旋转
  13. Vue 2.0 真实点餐项目实战
  14. echart 广州3d_一个3D可视化项目背后的心酸:ECharts-X的坎坷路
  15. TinyOS02:TinyOS2.1的安装(Windows平台)
  16. Directx11教程(49) stencil的应用-镜面反射
  17. 看完面经,他拿出一打大厂offer玩起了斗地主,人生不过是如此枯燥乏味....
  18. Java SE学习之【网络编程JavaSocket】
  19. H5游戏性能测试工具 选择与实践总结
  20. python----模块

热门文章

  1. Hulu 2013北京地区校招笔试题
  2. 《dinv into python》开始了解python
  3. ReactNative手势解锁(react-native-ok-gesture-password)
  4. Python 批量处理特定格式文件
  5. 跨服务器上传文件方式
  6. Hadoop系统架构
  7. Xtrabackup 安装使用
  8. 5个php实例,细致说明传值与传引用的区别
  9. oracle段管理方式设为自动,oracle自动段管理ASSM笔记
  10. [python] 使用scikit-learn工具计算文本TF-IDF值