- 博客(27)
- 资源 (2)
- 收藏
- 关注
原创 深度学习模型量化(低精度推理)大总结
模型量化作为一种能够有效减少模型大小,加速深度学习推理的优化技术,已经得到了学术界和工业界的广泛研究和应用。模型量化有 8/4/2/1 bit等,本文主要讨论目前相对比较成熟的 8-bit 低精度推理。 通过这篇文章你可以学习到以下内容:1)量化算法介绍及其特点分析,让你知其然并知其所以然; 2)Pytorch 量化实战,让你不再纸上谈兵;3)模型精度及性能的调优经验分享,让你面对问题不再束手无策...
2020-03-04 20:54:12 42752 15
原创 程序性能优化知识框架
1.计算机基础知识1.1 缓存 1)What is a “cache-friendly” code? https://stackoverflow.com/questions/16699247/what-is-a-cache-friendly-code/16699282#16699282 2)计算机缓存Cache以及Cache L...
2020-02-21 14:04:58 916
原创 离散傅里叶变换(DFT)(一)
离散傅里叶变换(DFT)傅里叶变换的优点就是能够将信号从时序空间转换到频域,从频率的角度去分析信号,能够容易发现一些时域内不容易发现的频率。这句话在N多博客里都有类似的描述。那么为什么呢?怎么转换到的频域?1. 欧拉公式欧拉公式被誉为“宇宙第一公式”,在傅里叶级数、泰勒级数、三角函数等都存在它的身影,欧拉公式的具体形式如公式 (1.1) 所示。当x为π的时候,欧拉公式将产生欧拉恒等式公...
2018-08-11 11:17:40 44632 4
原创 VNNI 指令集检测
VNNI 指令集从 Intel Xeon 第二代 cascade lake开始支持,你可以通过以下途径检测是否用oneDNN 正常运行VNNI 指令加速.git clone https://github.com/oneapi-src/oneDNN.gitcd oneDNN/mkdir buildcd build/cmake ../make -jDNNL_VERBOSE=1 ./tests/benchdnn/benchdnn --matmul --cfg=u8s8u8 12x128x768:
2022-06-09 17:03:29 1455
原创 深度学习分布式训练
1. Large Batch Size Distributed Training LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS
2021-10-12 16:01:37 228
原创 leetcode刷题之并查集
学习链接:https://zhuanlan.zhihu.com/p/93647900三个关键点:1)初始化底层数组,一般是若干个孤立的点。2)合并连通域3)查找每个连通域的代表元素。性能优化:1)路径压缩即将当前节点的父节点设置成代表元(递归设置成父节点的父节点)。2)秩合并将秩小的的元素的代表元合并到秩大的代表元。题目:684. 冗余连接对无向图类型的树而言,N个节点有N-1条边。如果有N条边,则有一条边加进来的时候会形成环。如果一条边在合并之前属于两个不.
2021-01-26 20:27:28 275
原创 leetcode 刷题之深度优先搜索
##自底向上17. 电话号码的字母组合先求字串的字母组合,再枚举添加当前字符之后的结果。## 自顶向下109. 有序链表转换二叉搜索树利用快慢指针确定根节点的位置,然后分别递归处理左右子树。...
2021-01-05 13:12:41 395
原创 leetcode刷题之二叉树题目分类
## 二叉树### 路径问题129. 求根到叶子节点数字之和### 二叉搜索树96. 不同的二叉搜索树230. 二叉搜索树中第K小的元素### 层次遍历199. 二叉树的右视图### 完全二叉树222. 完全二叉树的节点个数从1开始编号,从上到下从左到右给完全二叉树编号,其二进制表示的特点是最高位为1表示从根节点出发,0表示沿着左节点往下,1表示沿着右节点往下。完全二叉树只有最后一层节点不满,其节点编号为 [2^h,2^h-1] h为树的高度(h从0开始)。..
2020-12-16 21:02:34 239
原创 debug
1. sleep for gdb attach#include <sys/types.h>#include <unistd.h>volatile int i = 0;static char hostname[256] = "local johnlu";printf("PID %d on %s ready for attach\n", getpid(), hostname);fflush(stdout);sleep(30);
2020-11-30 12:39:32 105
原创 liangan1@github
## issue && PR https://github.com/pytorch/FBGEMM/issues/125https://github.com/pytorch/pytorch/pull/30153## My toolhttps://github.com/liangan1/FBGEMM/tree/prv-dequantizeAVX2https://github.com/liangan1/pytorch_imperative_quantization_tool..
2020-11-19 10:22:04 138
原创 深度学习工程化(1)多维图片在内存的高效存储和访问
大多数计算都是关于数据的:分析数据,调整数据,读取和存储数据,生成数据等。深度学习框架也不例外。图像,权重/过滤器,声音和文本需要有效地表示在计算机内存中,以便于以最便捷的方式快速执行操作。对计算机内存了解的同学应该知道,应用程序看到的内存是线性存储空间(即1D),而图片等数据是多维数据,如何建立多维逻辑表示和线性物理排布的映射关系并高效访问指定的指定的元素?本文致力于数据格式-一种数据表示形式,它描述了多维数组(nD)如何存储在线性(1D)内存地址空间中以及为什么这对深度学习算法非常重要。.
2020-10-22 12:53:43 669
原创 内存优化系列文章(3)可能被误导的多级页表--虚拟内存管理(续)
上一篇文章中我们解释了虚拟内存的基本实现原理,但是也存在一级页表过多占用内存的问题,并且每次在从内存中访问页表也会增加额外的读取操作。这篇文章将详细解释为什么多级页表可以节省内存空间,以及TLB如何减少地址映射带来的开销。我们将首先从多级页表开始谈起。多级页表为了方便理解,我们先从二级页表开始图解。假设虚拟内存和物理内存都是4G, 地址32位,页面大小4K。虚拟地址的表示如下:VPN0 是第一级页表项的索引, 第一级页表的页表项(PTE)共有1024 个页表项,每个页表项指向第二级页表的起始地址。VP
2020-10-22 12:48:07 359
原创 内存优化系列文章(3)程序员眼中的虚拟内存管理
开门见山虚拟内存的初衷是采用页表管理机制使得程序即使在物理内存不足时也可以运行。在内存大幅度增加的当下,你可能会问虚拟内存还有用吗?如果你只是普通用户,买根内存条完事!但作为一名软件工程师,虚拟内存管理将直接影响你开发程序的性能! 灵魂拷问作为一名程序员,小编认为以下关于虚拟内存的知识需要搞懂:1)什么是虚拟内存? 核心观点是什么?2)页表机制和页面置换算法的基本原理?为什么需要多级页表?3)哪些虚拟内存的关键点可能影响程序性能?4)应用程序开发应该从哪些方面减少缺页异常和 TLB 不命中带来的性能影响?
2020-10-22 12:36:18 317
原创 内存优化系列文章(2)3分钟入门TCMalloc和JeMalloc
本系列文章采用实战+理论的分析方式,前两篇主要作为实战的入门教程。在上一篇文章中我们展示了3种 malloc 算法的性能,并采用 Linux 的性能工具 ps 和 perf 分析了不同算法对缺页异常和 TLB 不命中的影响。为了让大家能快速尝试不同分配算法在你的应用上的性能情况,这篇文章将提供一个快速入门教程。应用程序利用 malloc 和 free 等函数在堆空间中申请和释放动态内存。默认情况下,glibc 采用 PTMalloc 内存管理算法。为了采用不同的内存分配策略,我们只需要链接时采用指定库(
2020-10-22 12:29:04 1158
原创 内存优化系列文章(1)AI性能加速1.3x倍就靠一个环境变量!
内存优化系列文章(1)AI性能加速1.3x倍就靠一个环境变量!虚拟内存、物理内存、内存分配、内存泄漏、TLB 不命中、缺页异常这些看似熟悉的计算名词却似懂非懂,没关系!本系列文章通过理论和实战带你一网打尽!自从工作中接触到深度学习内存优化知识以来,白丁决定重新系统研究一下计算机背后的内存故事。通读本文你将获得以下干货知识:为什么内存优化可以大幅度提升深度学习算法的性能?如何通过工具定量分析内存优化带来的性能好处?操作系统为什么采用虚拟内存管理而不直接使用物理内存?虚拟内存的核心思想是什么?虚拟内存管
2020-10-22 12:21:34 346
原创 计算机缓存知识大总结
1. 如何查看计算机的缓存信息1 ) getconf 命令查看$ getconf -a|grep CACHELEVEL1_ICACHE_SIZE 32768LEVEL1_ICACHE_ASSOC 8LEVEL1_ICACHE_LINESIZE 64LEVEL1_DCACHE_SIZE ...
2020-04-19 15:28:16 283
原创 Linux环境下的动态链接库基础与常见调试技巧总结
Linux环境下的动态链接库基础与常见调试技巧总结要点速览Linux 三个调试必会命令两个重要的环境变量动态链接库的基础动态链接库的编译及使用Linux 下动态链接库的调试技巧常见问题一:常见问题二:LD_PRELOAD之偷梁换柱要点速览Linux 三个调试必会命令ldd 查看可执行文件和动态链接库文件的依赖nm 查看对象的名称列表c++filt 帮助转化 nm/objectdump ...
2020-03-21 16:21:30 639
原创 SSH 免密登陆
1. 在本地生成 public key ssh-keygen -o -t rsa -b 4096 -C "xxx@xxx.com"2. 将密钥拷贝到远程主机 ssh-copy-id -i ~/.ssh/id_rsa.pub your_user_name@your_remote_host...
2020-03-10 20:06:42 270
原创 int8 矩阵乘法
C=A×BC=A\times BC=A×BA 矩阵采用 per tensor 量化, B 矩阵采用 per_channel 量化Aiint8=Aifp32scaleA+zeroAA_i^{int8} = \frac{A_i^{fp32}}{scale_{A}} + zero_AAiint8=scaleAAifp32+zeroABiint8=Bifp32scaleBcolj+zero...
2019-09-24 21:23:05 1532
原创 Linux下安装 llvm 和 clang
1. 下载git clone https://github.com/llvm/llvm-project.gitgit checkout llvmorg-7.0.1 ( llvm8.0.1 later 需要 GCC5.1 above)2. 编译cd llvm-projectcp -r clang llvm/tools/Cd llvm Mkdir buildCd build c...
2019-06-21 10:16:13 11019 2
翻译 静态变量(static)的线程安全
静态变量(static)的线程安全C++11 Singleton. Static variable is thread safe? Why? stack overflow在单例模式中我们常常会遇到如下的方法,但是假如同时有多个线程调用了这个函数,它能保证线程安全吗?Singleton& Singleton::GetInstance(){ static Singleton i...
2019-05-31 16:02:20 6472
原创 C++ 实现单例模式
C++实现单例模式单例模式的基本概念基本实现完整实现单例模式的基本概念基本实现#include<cstdio>class singleton{ public: static singleton* get_singleton(){ if(instance_ == nullptr){ instance_ = new single...
2019-05-12 15:12:11 5488
原创 C++11 特性之继承构造函数
《深入理解 C++11 特性》 阅读笔记(三)继承构造函数1. 为什么需要继承构造函数 ?2. 如何继承父类的构造函数?3. 继承构造函数的特点与其使用场景4. 默认构造函数冲突问题继承构造函数1. 为什么需要继承构造函数 ?C++ 中子类无法直接继承父类的构造函数,如果要使用父类的构造函数,必须通过显式的调用。如代码清单3-2所示, 派生类 A 定义了多个构造函数,派生类 B 只添加了一个...
2019-04-14 10:31:00 402
原创 一图让你理解Linux中的环境变量设置
本文首先介绍了环境变量的通俗理解,然后给出了几种不同设置方式的详细解释,与其他博客不同,本博客通过一张图总体描述不同设置方式的作用范围,生效时间。最后通过一个具体的例子说明了环境变量的设置格式。 什么是环境变量 所谓的环境变量有时候是一种“快捷方式”,有时候又是一种类“宏”。比如说你某个目录中安装了jdk,为了能够在任何目录中都能直接运行 java 命令此时你需要将 java命令所在的目...
2018-09-15 15:37:49 735
原创 大小端的判断及其转换
1. 什么是大端小端? 以16bit 的一个数字 0x0102 为例,尾部的02为低序字节,01为高序字节。大端小端的定义如下:低序字节处在起始地址的为小端(Little Endian),也称为低尾端;低序字节处在高地址的为大端(Big Endian)也称为高尾端。不同的CPU采用的端处理方式可能不同,...
2018-09-08 17:36:40 5830
原创 离散傅里叶变换(DFT)(二)
1. 各种频率之间的关系模拟频率:f=1/T,其中 T 是变化周期,单位是秒 s,f 是模拟频率,单位是 HZ/s, 因此, f 的物理含义是信号在 1 秒钟内含有变化周期的个数。模拟角频率:y=sin(Ωt) 其中 Ω 表示的是模拟角频率,Ω=2π/T 单位是 rad/s ,其表示信号在在 2π 时间内变化周期的个数。假如另 t=1s 那么 Ωt 则表示在 1 秒钟绕圆圈运动的...
2018-08-18 16:58:52 7581 1
原创 位运算常见面试题
位运算常见面试题1. 不用临时变量交换两个整数。思路:两个相同数异或结果为0 int a=a^b; int b=a^b; int a=a^b;2. 一个数组中的整数只有1 个出现1 次,其余数字都出现两次,请找出,这个出现一次的数字思路:两个相同数异或结果为0,让数组中所有的数字相异或,留下的结果即为出现⼀次的数字int find_one_time_number(vector <int > d
2017-07-24 15:04:47 661
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人