Neon优化前篇

news/2025/2/22 22:07:39/

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

笔者从事的是安防行业的端侧算法性能优化工作。在工作中会遇到很多性能优化问题,刚好前一阵子需要考虑使用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 知乎文章

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


http://www.ppmy.cn/news/134298.html

相关文章

Nexus详解

Maven的仓库只有两大类:1.本地仓库 2.远程仓库 远程仓库中分成了3种: 中央仓库私服其它公共库 私服:是一种特殊的远程仓库,架设在局域网内。私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载…

neon介绍及建议

使用NEON主要有四种方法: NEON优化库(Optimized libraries)向量化编译器(Vectorizing compilers)NEON intrinsicsNEON assembly 根据优化程度需求不同,第4种最为底层,若熟练掌握效果最佳,一般也会配合第3种一起使用。本文将会重点…

nexux安装与配置

nexux安装与配置 安装nexux 下载Nexus Repository Manager OSS 3.x,官网地址https://www.sonatype.com/download-oss-sonatype,复制下载链接,使用wget下载 wget https://sonatype-download.global.ssl.fastly.net/repository/repositoryMa…

NSX产品许可介绍( 适用于vSphere 6.2.x,6.3.x和6.4.x的VMware NSX的产品产品(2145269))

目的 本文提供有关以下信息: VMware NSX for vSphere 6.x的许可版本以及与VMware NSX for vSphere 6.2.x,6.3.x和6.4.x的各种许可版本相关的功能列表。适用于vSphere 6.4.1的VMware NSX Data Center的许可版本,以及适用于vSphere 6.4.1的VMwa…

Neoaxis

NeoAxis是一个3D游戏框架,它包含了3D渲染,物理,粒子,声音,GUI等一切你需要的库,以及比较完整的编辑工具 NeoAxis 以最强大的开源引擎 Ogre作为渲染引擎,支持所有 .net语言 NeoAxis简介 Neoaxi…

想来一杯奶昔吗?NEX-5R、NEX-6强势登场

松下、索尼、奥林巴斯可以说是微单市场的“三天王”,而索尼NEX又是其中比较特别的一个系列,它紧凑的机身设计,巨大的镜头甚至被笑称机身是“镜头盖”。较早前NEX系列出了一款低端的NEX-F3,近日新加波的VR-ZONE网站公布了中高端机型…

Android10相机,方向错了?一亿像素只是噱头?小米10pro硬刚相机评测

方向错了?一亿像素只是噱头?小米10pro硬刚相机评测 2020-06-23 13:14:27 33点赞 24收藏 38评论 创作立场声明:本文所测所有商品为自费购入。 前言 高能预警,4600字,51图。 好久没写过一篇像样的评测了,在拿到小米10pro的时候,试了下拍照感觉这个话题可以写写,毕竟小米1…

IMX6使用

uboot 手动网络设置 setenv ipaddr 192.168.0.199 setenv ethaddr 00:04:9f:04:d2:35 setenv gatewayip 192.168.0.1 setenv netmask 255.255.255.0 setenv serverip 192.168.0.166 saveenv 设置远程nfs启动rootfs setenv bootargs ‘consolettymxc0,115200 root/dev/nfs n…