MKL-DNN
sandmangu
这个作者很懒,什么都没留下…
展开
-
对CPU超线程与推理性能的一些理解
最近在pytorch下面做模型推理,官网pytorch默认就用了MKLDNN做优化,在pytorch里MKLDNN的多核多线程的调度用了OpenMP来做控制,所以可以用设置OpenMP环境的方法来控制OpenMP的调度逻辑,这里面发现一些有趣的现象。首先做一些代码修改以便在pytorch下面最大程度的利用MKLDNN加速通过设置环境变量MKLDNN_VERBOSE=1来观察默认pytorch里MKLDNN的运行信息mkldnn_verbose,info,Intel MKL-DNN v0..原创 2020-07-24 14:30:29 · 1961 阅读 · 0 评论 -
MKL-DNN学习笔记 (八)DRRN超分辩率推理代码的实现
前面实现了DRRN所需的各个层的MKL-DNN代码模块,接下来就是用各种模块来搭积木了。对《纯C++超分辨率重建DRRN --改编》的程序改写的时候要注意几点1. 原来程序里的vl_BatchNorm+vl_Scale+vl_ReLU, 现在可以用一个BatchNorm来代替2. 原来的vl_nnconv, 现在要改成Reorder+Convolution+Reorder来获得最...原创 2019-10-14 15:51:41 · 770 阅读 · 2 评论 -
MKL-DNN学习笔记 (七) Post-ops操作
MKL-DNN优化技术里,有一个很重要的技术就是层融合(Layer Fusion)所谓的Layer fusion, 就是把好几层的计算合并成一层的操作里,例如下图左边的计算一共包含了3层Convolution+Sum+ReLU, 每层之间都包含了输入数据和输出数据的读写。通过读取观察每层输出的数据,我们也可以知道神经网络每层到底做了些什么,但是实际应用中我们只关心神经网络最开始的输入数据和最终...原创 2019-10-12 13:48:53 · 1319 阅读 · 0 评论 -
MKL-DNN学习笔记 (六) 实现BatchNorm层
接下来实现基于MKL-DNN的BN层先复习一下BatchNorm层的计算公式这个公式里mean为均值,var为方差,scale为缩放因子,shift是平移值epsilon为一个常数,通常默认值为0.001或者可以在网络模型里读出来,主要用来防止出现方差var=0的时候出现除零错误而添加进去的在 纯C++超分辨率重建DRRN --改编--(二)归一化(BatchNorm) 和 缩...原创 2019-10-12 12:46:11 · 997 阅读 · 0 评论 -
MKL-DNN学习笔记 (一) windows下环境配置和编译sample
最近在研究超分辨率重建的推理加速,需要用到一些加速算法库。CPU下面要用到MKL-DNN的加速库,网上能找到的资源不多,这里把我学习的心得记录一下,给大家做个参考.。MKL-DNN的官方网址在这里https://github.com/intel/mkl-dnn它是由Intel开发和维护的一个开源算法库,应该很多代码是出自Intel另一个闭源算法库mkl。从其他地方看到这个库NB的...原创 2019-10-10 12:06:20 · 3252 阅读 · 4 评论 -
MKL-DNN学习笔记 (二) 超分辨率推理模型的选择 - DRRN
一切不结合实践的理论文章都是耍流氓!!!所以这里学习MKL-DNN的最终目的是把mkldnn放到一个实际的超分辨率推理应用中去做加速。这里我选中了下面这篇文章的DRRN模型推理加速来做我这次学习的最终目的纯C++超分辨率重建DRRN --改编DRRN的网络架构如下(图片来自DRRN的论文, 地址 http://cvlab.cse.msu.edu/pdfs/Tai_Yang_Liu_CV...原创 2019-10-10 14:38:54 · 925 阅读 · 0 评论 -
MKL-DNN学习笔记 (三) ReLU层的代码实现和分析
ReLU层的实现相对比较简单,第一篇文章里用到的cpu_getting_started.cpp实际上就是一个ReLU的实现。所以我们只要分析一下这部分代码就可以了,正好借着这个机会看看整个mkldnn编程的思路官方mkldnn的开发文档可以在这里看到https://intel.github.io/mkl-dnn/整个代码的流程如下可以看到整个mkldnn的开发思路都是任何对象(例...原创 2019-10-10 15:36:31 · 1711 阅读 · 0 评论 -
MKL-DNN学习笔记 (四) Conv层的代码实现和分析
接下来实现卷积层Conv的计算为了简单起见,我用了一个N=1,C=2,H=W=5的输入。同时卷积层kernel大小KH = 3, KW = 3, IC=OC=2。 const int N = 1, H = 5, W = 5, C = 2; const int IC = C, OC = IC, KH = 3, KW = 3;这样可以用手工计算卷积的结果来比较mkldnn的输出,...原创 2019-10-11 11:21:33 · 1780 阅读 · 7 评论 -
MKL-DNN学习笔记 (五) 实现Conv层的快速计算
上一篇我们实现了利用mkldnn做最基本的卷积计算的代码从mkldnn文档里的这篇文章 Understanding Memory Formats里描述了memory对象的几种基本内存排列格式和类型我们目前基于memory::format_tag::nhwc定义的内存对象的数据在内存中排列方式如下图所示但是mkldnn更推荐我们创建基于blocked layout的内存对象,据称这样...原创 2019-10-11 15:31:23 · 2744 阅读 · 0 评论