Neon优化前篇

这里想简单说明一下自己为什么想写这个系列的文档。

笔者从事的是安防行业的端侧算法性能优化工作。在工作中会遇到很多性能优化问题,刚好前一阵子需要考虑使用Neon对某个算子进行优化(也差不多是整个pipline的最后一道优化工序了),而之前只听过Neon优化,没有接触过,同事里使用的也不多。自己去网上搜资料发现很多资料要么停留在对Neon的介绍层面,要么就直接上比较大的代码,说明性的东西也很少,读起来很费劲。笔者学习方式比较传统,接触一个新的技术的时候,总希望能搞清楚细节,至少在自己用的时候,能有8成的把握。虽然后来自己通过看一些材料,解决了当时工作中的问题。但不想做完就抛弃了这个技术,也想到当前国内关于Neon的资料参差不齐,因此打算把官方的资料翻译过来,写成一个专栏的形式,希望能对自己和各位同行有点作用,由于自己的学习也不是很深入,专栏前期可能也大都是比较浅的东西,但至少能保证新手能看,老手可以绕道,在这里给大家安利一位大佬关于Neon的博客

官方的教程文档也比较简单,而且很多概念给的比较详细又重复,因此整个专栏里也有一些自己的"意见"在里面,只不过是跟着官方的架构走,同时会提供自己写得完整验证代码,供各位盆友来验证。这个专栏将是我的第一个专栏,后续会持续更新,可能由于工作原因和自己懒惰原因,更新不太及时,但保证一定写完这个专栏。后续会写关于GPU,CPU和其他芯片优化的专栏。对于专栏里的任何问题可以私聊我讨论(邮箱:kkchen.lg@qq.com)。

性能优化在我的理解里分为两部分,一部分是系统级的优化,这个是涉及到pipline的问题。一部分是关于底层具体算子的优化,这个是需要熟悉芯片和对应的优化技巧的。笔者目前主要集中在底层算子优化方面。后面也会做系统级优化,因为实在不想自己的代码写得像流水账一样。在这两个层次的优化之外,还有算法级的优化,这个算法单指人工智能算法,笔者也持续关注人工智能算法加速的话题,比如最近是在调研int4模型的推理。有兴趣的盆友可以一起交流。

由于自己的学习方式比较笨拙,我更喜欢用撸代码的方式来进行学习,简单点说就是用代码复现别人的理论。因此写得东西大部分都是别人家的东西,可能写得还不如原作,希望各位盆友不喜勿喷。

刚开始写这个专栏是在2022年年初的时候,但到了2023年元旦,依然没有发布出去,中间拖更了好久,有很多原因吧:

  1. 自己懒

  1. 当时工作内容跟这这方面契合不大。

  1. 自己信心还不足

这里主要分享下第三点吧,22年元旦想写这个专栏,是心血来潮的想法,当时刚接触Neon不多,也是刚写博客不久,自己也是一个想把事情做好的人,所以给自己定了很多规则,比如某处的Neon代码一定要吃透,某些概念一定要能讲出来通俗易懂,不要像很多博客一样翻译外文,甚至翻译前言不搭后语,没有自己理解的那种,然后就是想尽量做一个完整的教程,能做到让会c++编程的人能轻松的开始Neon编程...... 基于这些给自己设立了条条框框的规则后,就会压得自己喘不过气来,尤其自己当时对Neon编程还是理解比较粗浅,虽然自己玩过一点,但终究没有来自于工作中的push更直接,更有效,因此刚写了三章就搁置了,遂成了三分钟热度的一件事。

今天重新开始看这个系列,是因为自己有幸在工作中能稍微深度的接触一下Simd编程(Neon,Avx等),并且体验了一把从算法设计,到具体实现全流程,期间写了很多个"轮子"去验证不同的想法,也得到了在这方面经验丰富的同事的帮助,看到自己的代码一步步地更快更准,信心更足了。 还记得自己第一次接触Neon编程的时候,仅仅是看感觉很难很难了,等好不容易敢写下第一个demo的时候,我居然连这么编译代码都不知道,一直以为这是跟什么第三方库,有什么特殊的文件需要链接..... 后来自己一步步摸索,这也是为什么自己感觉国内很多关于这方面的博客对新手很不友好的原因之一,所以自己想写一个保姆级教程

关于写Neon编程,让我再一次对害怕这个事情有了不一样的理解。 自己回顾了下为什么喜欢编程这个问题,后来发现自己是一步步被害怕push成兴趣的。 记得准备读研一的那个暑假,我是第一次听说人工智能linuxpython...这些当下热门概念,自己之前最多就是在window上用keil对51单片机点亮过一个流水灯而已(大学实在太菜了)。在那个准备研一的暑假,当自己敲下print("hello, world")的时候,一下子被python这种所见即所得的感觉抓住,但在那之前,那种情况下不学python不行,害怕完成不了导师给的任务。万事开头难,稀里糊涂安装好环境,然后稀里糊涂敲下第一行代码,然后被这种所见即所得的感觉抓住, 打开了那个暑假和后面的研究生生活。 第一次参加工作的时候也害怕,研究生用了三年的python,但自己一直有一个写c++的梦(该死的胜负欲吧),第一次参加工作主要语言就是c++,当时确实很害怕,万事开头难,想到要编译,链接才能运行代码,想到写个函数还要用括号,想到不能所见即所得,心里一阵阵犯难。 自己当时连编译,链接是啥都不知道的人,想起不能完成工作,就害怕,于是乎push自己尽快学习这些东西,想起研究生期间也想过要写c++,但依然是害怕不够吧,半途而废。 害怕过做编程题,体验过计算机校招的朋友应该都知道编程题的重要性,研二的时候,师兄提醒过自己:"你从现在开始,每天刷一道leetcode,一年后找工作肯定轻轻松松",但当时的自己,属于那种“道理我都懂”的人,而且最重要的是,没有那种害怕push自己,研二的自己,会python就能应付很多事情了,当时还有一件事可能导致自己的短视,当时自己还学了一门fortran语言,想着这种上古语言可以给自己更多的底气,反正当时会得那些东西可以让自己过得很舒服,为什么要自己找不自在呢,后来研三找工作的时候,虽然及时补救,但还是有不少不如人意的地方。在对未来的害怕下,逼着自己去写算法题,由于还是使用c++写,没有智能提示,从开始举步维艰到后来作为茶余饭后的谈资。 最近经历的害怕,是自己真的在工作中接到要写Simd的时候,刚开始人是畏惧的,没有底气,虽然理论懂一大堆,但几乎0实操,这让人如何不虚,但后来想想,事情总是可以熬出来的,而且这个东西有很多借鉴的先例,还有很多经验丰富的同事可以请教,或许能成。 还是一样,经历了万事开头难的那一步后,后面自己一点点打磨,有时候骑车上下班也是在想那些pipline该这么排,为什么这么排,看了博客不放心,还想看论文,感觉论文更权威....

印象中,也有被害怕击垮的时候,但总的来说,还不至于怕死,活蹦乱跳地到了2023年。 虽然怕的要死,但心里多默念两句:"自己是成年人,遇事不能慌",总是有用的,就像自己小时候在夜路上心里默念:"我是大法师,妖魔鬼怪快走开"一样。

2023,祝各位读者万事顺遂,心里无惧。2023年,争取做好博客学习。

2023年元旦补。

这是一个专栏的博客内容,目前已经发布在我个人社交账号包括:

公众号:kkchen, 公众号文章

知乎: TaurusMoon 知乎文章

欢迎关注我的公众号,可以私信我一起讨论技术问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值