深度学习ARM算子性能优化上手指南个人文章

GaussianBlur是一种线性平滑滤波。它的计算过程是:原图每一个点都和周边点进行加权求和,得到对应位置的输出,权重矩阵是kernel。以kernel_size=3为例,如图:

示例代码如下:

它可以由两个向量相乘得到:$\{0.25,0.5,0.25\}^T*\{0.25,0.5,0.25\}$。

接下来,笔者将以kernel_size=3的GaussianBlur为例,介绍一些常见的优化思路:

根据笔者的经验,性能优化的主要效益来自于算法层面的优化,这是从根本上减少计算量,所以第一步是考虑算法层面的优化。对于高斯滤波来说,它是一个可分离滤波,这意味着

前2步基本保证运算是必需且最少的,第三步就需要考虑提高数据级并行度。

数据级并行(DataLevelParallelism,简称DLP),主要手段是SIMD/SIMT,简单理解成一条指令同时处理多个数据。ARM上主要是使用NEON指令集/SVE指令集。受限于篇幅,以下的示例代码,只拿示例代码2中先计算前2行的行内卷积的部分做演示。

//示例代码3constexprsize_tstep=128/sizeof(float);//一条NEON指令能处理的数据长度为128bit,可以并行处理step个floatflaot32x4_tvload[3];//暂存load的结果,用于向量化计算float32x4_tk[3];k[0]=vdupq_n_f32(kx[0]);//k[0]={0.25,0.25,0.25}k[1]=vdupq_n_f32(kx[1]);//k[1]={0.5,0.5,0.5}for(inti=0;i

这一步是前三步的补充,主要是利用编译器再尝试优化一下。

简单理解循环展开(unrollloop)就是增大for循环的步长,让每一个迭代可以多处理一些数据,给编译器提供了更多调度的空间(比如指令重排,寄存器重命名,寄存器复用等),同时也减少了分支判断的次数,从而提升性能。操作很简单,示例代码如下:

前面4步完成了计算的优化,还需要考虑访存的优化,同样是考虑减少重复的访存。

观察一下示例代码3,它的三次vld1q_f32分别load了

可以发现src0这个位置被重复load了3次。于是考虑引入一组向量head,body,tail去减少重复访存。示例代码如下:

简单总结一下:当算子是memory-bound时,可以考虑减少访存次数。比如:设计数据结构去缓存访存结果,减少重复访存。

当计算和访存都优化完,保证计算和访存都是必要且最少的,之后考虑引入多线程。

在示例代码2中,可以把整个height拆成若干段,每一段执行相同的代码,这样就可以开多个线程去并行处理。

前6步属于C++/instrinsic层面的粗调,这一步是汇编层面的优化,属于微调,性能优化应该遵循“先粗调再细调”的原则。当在C++层面想不到其它优化点时,可以考虑进行汇编优化。这里简单介绍一下,不过多展开。主要有以下要点:

需要注意的是:

这里的LDR指令(D-form)负责从指定地址load64bit的数据到寄存器里

*execlatency为3:它的执行需要3个cycle*execthroughput为1:一个cycle只能发射一条LDR指令*Dual-issue编号为11:可以从slot0或者slot1发射出去。知道这些信息,我们可以通过选择可以双发射的指令组合,达到掩盖部分指令的开销的目的。比如

于是可以用LDR(D-form)替换LDR(Q-form),去和FADD(Q-form)做双发射,从而掩盖了LDR指令的开销。

例子3:cortex-a7是一个单发射,顺序执行的核心。那么主要是考虑根据指令的latency,进行指令重排,尽可能排满流水。

完成上述优化步骤后,如果性能还不达标,可以再考虑如下几点优化。

这里至少涉及两个方面。一方面是内存地址的对齐,不同硬件设备都有一些地址对齐的要求,比如ARMAArch64Load/Store指令要求访问的地址和所访问元素的大小(比如4字节)对齐,不然可能会触发对齐错误,带来额外的性能损失。另一方面是内存布局,比如NHCW,NCHW等,对于同一段代码,不同的内存布局,访存的连续性是不一样的。也会有自定义的内存布局,在一些情况下可以取得不错的优化效果。

这样的做法可以让编译器在编译链接时进行一些简单的运算,提前知道一些参数信息也有助于编译器的优化。比如可以把一些if判断的flag抽离,做为模板参数。

上述通过GaussianBlur的例子,介绍了一些可能的优化点,但这只是整个优化流程的一个步骤。

性能优化是一个不断迭代的过程,很难追求一步到位。一般的优化流程可以用下图表示:

为了得到一个正确的优化反馈,需要做科学严谨地benchmark。笔者认为benchmark至少需要考虑以下因素:

也可以考虑使用google_benchmark等benchmark工具。

做性能优化之前,往往需要先做一下profile,了解程序的热点(耗时最多的地方),观察有没有异常的开销(比如函数封装的overhead过大)。

可以使用一些profiling工具,硬件厂商通常会提供自己的profiling工具,比如x86上用intel的vtune,nvidia用上nsightcompute,arm上用armmap,android上用simple_perf等。

也可以手动加计时函数,比较核心代码的速度和封装后的速度,确定封装带来的overhead是否合理。

THE END
1.上算的解释上算的意思汉典“上算”词语的解释(2)[excellent plan]∶好计策;好主意 (3)[be taken in]∶中计;上当 --- 德语lohnend, rentabel (Adj)? ? 汉典 上算网络解释 百度百科 上算 上算,读音为shàng suàn,汉语词语,意思是指上策,好主意。 ? 汉典https://www.zdic.net/hans/%E4%B8%8A%E7%AE%97
2.上算是什么意思?上算的含义简明汉英字典在线工具上算 worthwhilehttps://www.wenjiangs.com/tool/langdaoCeGb/4591e4b88ae7
3.上算的意思,上算造句,上算注音上算 注音ㄕㄤˋㄙㄨㄢˋ 拼音shànɡsuàn 簡體上算 解釋合算;不吃虧。[例]不上算|自己親手做菜,挺上算|搭公車比開車上算許多。 德語lohnend, rentabel (Adj)? 上算詳細解釋 1.合算、占便宜。《二十年目睹之怪現狀.第八四回》:「那和尚與流痞,以為一隻指頭的地,賣他四十元,很是上算的。」http://twdict.lookup.tw/%E4%B8%8A%E7%AE%97.html
4.上算的意思上算的解释上算 上算[shàng suàn] worthwhilehttps://www1.dict.li/%E4%B8%8A%E7%AE%97/
5.上算意思上算解释上算意思解释:1.犹上策。https://m.zuowenku.net/cidian/220391.shtml
6.上算词语解释意思现代汉语词典《宋书·袁淑传》:“咸云及经之棘,犹闕上算,烛郛之敬,裁收下策。”《隋书·梁睿传》:“周无上算,汉收下策。”宋苏舜钦《论西事状》:“况清衷近辅,自有上算,故不当復有所献也。” 上当,中计。 《儒林外史》第十五回:“他原来结交我是要借我骗胡三公子!幸得胡家时运高,不得上算。” 合算;不http://m.46644.com/cidian/word/%C9%CF%CB%E3
7.汉语词语“上算”的读音意思用法释义同义词近义词词语上算 释义shàng/shǎng suàn 1.犹上策。 随便看 人生若寄 人生行乐耳 人生观 人生识字忧患始 人生路不熟 人生面不熟 人痾 人瘼 人百其身 人的价值 人的正确思想是从哪里来的? 人皆掩鼻 人皇 人皮囤 人相 人眷 人眼 人眼是秤 人祀 http://cd.newdu.com/5956.html
8.“上算”的意思“上算”词语解释上算词语读音:上(shàng shǎng)算(suàn)词典解释: 1.犹上策。 相关词语: 上馆子 上层路线 上纲上线 上农夫 上尊酒 上场诗 上阳宫 上阳白发人 上将军 上梁文 上清观 上清童子 上陵下替 上气不接下气 上马杯 上方宝剑 上方不足,下比有余 上元甲子 上中农 上天梯 阿上 安上 凹上 傲上 巴高望上 https://tool.httpcn.com/Html/Word/16/60623016069.shtml
9.上算是什么意思上算的拼音怎么读音啥意思含义《二十年目睹之怪现状.第八四回》:「那和尚与流痞,以为一只指头的地,卖他四十元,很是上算的。」上当,中人的计谋。《儒林外史.第一五回》:「他原来结交我是要借我骗胡三公子!幸得胡家时运高,不得上算。」上等的计策。《隋书.卷三七.梁睿传》:「所以周无上算,汉收下策,以其倏来忽往,云屯雾散,强http://www.yuwenke.com/yisi/shangsuan.html
10.上算造句用上算造句30、读完一本书再打通儿架,不上算。 用“上算”造句 第4组 31、虽经历了5000余年的风霜,至今干壮体美、枝叶繁茂,树冠覆盖面积达178平方米,树围号称“七搂八扎半,疙里疙瘩不上算”。 32、由于用料随意这基本上算是入门级的肉类料理,对于刚学做菜的人来说,这算是拿的出手的大菜了。 33、东汉时谷http://m.ouf.cn/zaoju/%E4%B8%8A%E7%AE%97
11.上算的近义词上算的反义词上算的近义词: 合算 划算 上算的反义词: 无 上算的解释:更多 上算(shàngsuàn) 合算;不吃亏 economical;worthwhile;paying 烧煤气比烧煤上算 好计策;好主意 excellent plan 中计;上当 be taken in 0 纠错/补充 猜你喜欢 不瞅不睬的近义词反义词 近义词:不偢不倸,不理不睬 反义词:热情 检修的近义词反义词https://m.dancihu.com/jinfanyi/s38370.htm
12.上算造句上算造句 1.我自己也觉得买得很上算! 2.自己做衣服比买成衣上算。 3.“现在,我这本字典基本上算正式成书了,就差一个部首检字表。 4.我不是广场上算卦的,唠不出那么多你爱听的嗑。 5.我不是天桥上算命的,唠不出那么多你爱听的磕。 6.我们小时候家里面基本上算得上是并日而食的,因为当时家里面https://m.zcdian.com/zaoju/d2bsj7.html
13.[算得对]计算是小学数学的主要内容。算得对,是学好数学的基本要求。你也许还不知 道,由于小学四则运算不过关,不仅影响当前的学习成绩,还会影响今后的学习、 工作和生活。有的人可能不信,正是因为20以内的加减法不熟练,有的考生失去了 关键的几分,使自己痛失升入大学的机会。由此看来,算得对并不是一个简单问题。 https://www.360doc.cn/mip/193143999.html
14.上算DT个人资料/图片/视频全集上算DT的歌曲上算DT 地区:内地 出生地:中国 / 四川 / 自贡 生日:1987-10-26 职业:歌手 星座:天蝎座 别名:Desting / DT / 陈馨儿 上算DT,是一个56网我秀的美女主播,代表作品《我会想念你》、《几多十年》、《遇到》等。 分享:https://tv.sohu.com/star/NzE2MTEyXw==.shtml
15.计算一棵大树有多少树叶尽然跟它有关系区间设定其实是一种非常精准的定位方式,就像上面计算大树的树叶,我们把一根树枝上树叶数量的上限和下限找到,就能相对精准的回答出一棵树(复杂的现象)有多少树叶的问题。 在SEO工作中与百度蜘蛛打交道的过程中就需要有区间思维,但这里的区间与树叶计算的区间略微不同,SEO中区间思维是用一个固定的点来框定另外一个点https://www.jianshu.com/p/699ebfc18e57
16.03146化工原理(二)(2)工业上三种换热类型及其结构、操作特点。 (3)加热剂与冷却剂的选择。 2、热传导 (1)温度场,傅立叶定律。 (2)单层与多层平壁、圆筒壁的定态导热。 3、对流传热 (1)给热概念,给热的四种类型及其特点。 (2)牛顿冷却定律,给热系数及其主要影响因素。 https://www.jseea.cn/webfile/selflearning_jcdg/2007-05-24/5312.html
17.医保问答医疗保险持卡就医实时结算问题解答6、医保病人的自费药与目录内药能否开在一张处方上,是否必须分开两张处方? 答:必须分开两张处方。 7、晚间就真时,开药量应按门诊还是急诊执行? 答:急诊、门诊的界定应根据医政部门有关规定执行。 三、门诊特殊病 1、门诊特殊病种首次往卡内写数据时是否须写入所有历史数据? https://www.bj-fxh.com/Html/News/Articles/20001986.html
18.上下班多久算工伤本篇将详细为大家解答“上下班多久算工伤”这个问题。1、具体是什么时间的范围内才能算是工伤,在我国的相关法律中的规定是在合理的时间区域内。2、总之满足合理的上下班时间范围之内,并且是在合理的上下班路途线……https://mip.64365.com/zs/1021330.aspx
19.如何上好小学数学计算课所以我们要立足生活,服务生活,以趣导入让学生体会计算在生活中的应用,在具体的情境中产生计算的内在渴求,达到"算以致用"的目的.精心创设计算学习情境就要从学生熟悉的生活经验入手,创设一种实际生活得情境,让学生从情境中发现问题,提出问题,引出计算教学的内容,而不是教师的简单说教。https://www.qinxue365.com/fangfa/446209.html
20.上一篇:房屋建筑面积计算规则6.属 性结构有上盖的室外楼梯,按各楼层外围水平投影面积计算。 7.房屋屋面上属 性建筑,在2.20 米以上的楼梯间、水箱间、电梯机房按外围水平面积计算。 8.原始设计斜面结构屋顶下加以利用的空间,高度在2.20 米以上的部位,按其外围水平投影面积计算。 https://zhishi.fang.com/esf/qg_117667.html
21.生男生女清宫图2021年推算表!史上最全最准!速看降备孕生男生女看怀孕月分,这里涉及到一个温度影响生男生女的因素,如果按今天的科学来分析,在清宫表中并未具体分析,只是告诉你、受孕月份则以农历月份为准(按受孕当天,不是末次月经第一天,和今天医学上算怀孕时间是不一样的!)注意、如果是遇到怀孕月分是在润年的润月,那么,润月的上半个月算上个月,下半个月怀孕https://www.snsnb.com/post-167595-1.html
22.上六休一工资怎么计算律师普法上六休一,周六上班算加班,双休日加班应当支付双倍工资;周六加班工资计算方式为:2000/21.75/8*2*加班时间。日工资000元/21.75天1.95元/天。一般来说,月计薪天数365天-104天(休息日))/12月1.75天,周六周日属于法定公休日,法定公休日工资是日工资的两倍,所以每周工作六天休息一天,有一天是公休日,公休日工资应当是https://www.110ask.com/tuwen/12295104795155676197.html
23.线上销售平台使用常见问题从经济上算,用户租赁燃气公司的气瓶,气瓶保养,安全均由企业负责,按照每月1元算,气瓶使用8年,租赁费用共计96元;而自有瓶,按照每只气瓶150元计算,中间保养一次40元,除去残值10元,共计费用180元。显然租赁钢瓶更合算。 当前有些用户并没有付押金和租金,是由于使用的是“黄牛”瓶,这些瓶一不合法,二不安全,政府https://www.zh.gov.cn/art/2022/6/23/art_1229659750_59083922.html
24.干粉灭火系统设计规范GB503472004:4管网计算注册消防工程师4.0.1管网起点是从干粉储存容器输出容器阀出口算起,单元独立系统和组合分配系统均如此计算。管网起点压力是干粉储存容器的输出压力。管网起点压力不应大于2.5MPa是依据干粉储存容器的设计压力确定的。管网最不利点所要求的压力是依据喷头工作压力规定的,这里等效采用了日本标准。日本消防法施行规则第21条 §1指出:喷头工https://www.educity.cn/xfgcs/1951159.html