Stage1st

 找回密码
 立即注册
搜索
查看: 2508|回复: 37
打印 上一主题 下一主题

[求助] 大手子们有没有速成汇编的书或者视频啥的

[复制链接]
     
跳转到指定楼层
楼主
发表于 2023-11-9 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
过段时间要搞汇编优化,听说要给我分armv7的,总之现在特别抓瞎,,组里大牛准备给我们培训一下,但都是那种特别入门的,感觉要胜任工作还得自学。有没有能让人快速上手掌握的公开课视频或者教材让我突击一把

回复

使用道具 举报

     
2#
发表于 2023-11-9 10:01 | 只看该作者
本帖最后由 hourousha 于 2023-11-9 10:08 编辑

现在多数都是直接写Intrinsic了吧,别说直接写汇编,写inline assembly都不太多了吧。
而且说到底,比如SIMD等优化,基本都得从数据布局开始,比如搞SOA等等,也就是需要由主程甚至架构师来主导。
至于学,简单的角度,先要重点考虑cache命中率,然后再看指令集说明,了解指令在具体硬件的的延迟与吞吐,减少流水线气泡。

回复

使用道具 举报

     
3#
 楼主| 发表于 2023-11-9 10:12 | 只看该作者
hourousha 发表于 2023-11-9 10:01
现在多数都是直接写Intrinsic了吧,别说直接写汇编,写inline assembly都不太多了吧。
而且说到底,比如SIM ...

感觉好丢人🤦‍自己连要做什么都搞不清,但是听组里人说是要为加密算法写汇编优化,大概是把加密时复杂的轮运算提出来写个汇编版的,这样可以减少各种分配内存和调用等开销可以把加密速度提上去,就是直接编写.s文件
回复

使用道具 举报

     
4#
发表于 2023-11-9 10:15 来自手机 | 只看该作者
你的基础到了啥程度啊
回复

使用道具 举报

     
5#
发表于 2023-11-9 10:17 | 只看该作者
速成有啥用.....汇编就那些命令,有个手册查不就完了.

问题是你要写出有商业价值的,能把性能榨出来的汇编,这玩意是什么教材能教的么?
回复

使用道具 举报

     
6#
发表于 2023-11-9 10:23 | 只看该作者
SunGrrrr 发表于 2023-11-9 10:12
感觉好丢人🤦‍自己连要做什么都搞不清,但是听组里人说是要为加密算法写汇编优化,大概是把加密时复杂的 ...

一些arm硬件有专门的加密算法的专用指令集,比如AES,可以明显提升速度。不过不是所有硬件都支持,比如树莓派4用的那个A72就不支持。
对于不支持的硬件,大概也就是用一下AdvSimd里的128位的比如左移右移指令吧。有提升,不见得很明显。
如果这些都用不上,那还是直接用C吧,编译器很多时候还是比手写汇编靠谱的。
回复

使用道具 举报

7#
发表于 2023-11-9 10:23 | 只看该作者
arm architecture reference manual

汇编能看懂就行了,坑太多,不建议写。

回复

使用道具 举报

     
8#
发表于 2023-11-9 10:34 来自手机 | 只看该作者
要不考虑下halide?
回复

使用道具 举报

头像被屏蔽
     
9#
发表于 2023-11-9 10:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
10#
发表于 2023-11-9 10:38 | 只看该作者
本帖最后由 绕指流光 于 2023-11-9 10:39 编辑

指令直接找CHATGPT问,示例代码丢给他解释个大概,但是能做项目的汇编不可能速成老老实实抱大腿
回复

使用道具 举报

11#
发表于 2023-11-9 10:40 | 只看该作者
这种都是看具体硬件系统的,工作的事情你为什么不直接问带你的大牛
回复

使用道具 举报

     
12#
 楼主| 发表于 2023-11-9 10:40 | 只看该作者
hourousha 发表于 2023-11-9 10:23
一些arm硬件有专门的加密算法的专用指令集,比如AES,可以明显提升速度。不过不是所有硬件都支持,比如树 ...

害,我们就是写C的,AES等算法有比较成熟的汇编加速了,但是咱国家研发的密码算法很多还没有配套,写完了领导嫌国密速度太慢,跟国际的差太远,就说要再加个汇编,这年底了大家都开始学汇编
回复

使用道具 举报

头像被屏蔽
     
13#
发表于 2023-11-9 10:42 来自手机 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
14#
发表于 2023-11-9 10:44 来自手机 | 只看该作者
既然你是新手肯定不会要你设计结构的,而是让你套用,会教你具体怎么改的,你不用太懂。
回复

使用道具 举报

     
15#
 楼主| 发表于 2023-11-9 10:44 | 只看该作者
iriyano 发表于 2023-11-9 10:40
这种都是看具体硬件系统的,工作的事情你为什么不直接问带你的大牛

我们组是写C的,大领导嫌太慢就说要搞汇编优化我们组科班出身的大牛也说早忘光了,现在正在重新捡起来学。。
回复

使用道具 举报

头像被屏蔽
     
16#
发表于 2023-11-9 10:44 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
17#
发表于 2023-11-9 10:48 来自手机 | 只看该作者
听着像是把原来的代码用neon翻译下....
回复

使用道具 举报

     
18#
发表于 2023-11-9 10:49 | 只看该作者
armv7一堆单片机,可以看单片机讲汇编的书,可以忽略你不关心的定时器gpio、中断之类的
不过那也就是入门,你要优化那确实cache命中率、流水线之类比汇编重要
回复

使用道具 举报

     
19#
发表于 2023-11-9 10:53 来自手机 | 只看该作者
汇编层优化得看所运行的硬件平台吧,根据处理器流水线特征,缓存特征等等来做优化。不然我觉得没经验的人写汇编不如直接写c然后编译器o3。一定要学汇编的话,找下ISA的手册然后把指令列表看一遍,有不懂的问chatgpt应该就够了。
回复

使用道具 举报

     
20#
发表于 2023-11-9 10:56 | 只看该作者
bl0ck 发表于 2023-11-9 10:44
你没个一两年上手摸过codepath的经验,优化出来的肯定没有c语言编译器强

—— 来自 S1Fun ...

虽然一直都有这种说法,但实际真写起来编译器没那么牛逼
我之前在28335的DSP和x86上写小波算法,小波算法说复杂也不复杂,但说不复杂也有点复杂。因为要求实时,只能硬着头皮写汇编,虽然最后也没实时,但自己写的改一改还是比开优化的C++编译器强一点
回复

使用道具 举报

     
21#
发表于 2023-11-9 11:10 | 只看该作者
说真的密码学算法如果效率有问题最好还是先看看C代码哪里没优化好,从C换成汇编最后可能变成是优化不好的汇编代码
回复

使用道具 举报

     
22#
发表于 2023-11-9 11:17 | 只看该作者
einhorn 发表于 2023-11-9 11:10
说真的密码学算法如果效率有问题最好还是先看看C代码哪里没优化好,从C换成汇编最后可能变成是优化不好的汇 ...

你懂技术不懂绩效,分配了汇编的工作就不能反驳领导,把自己这片做好了就可以pua其他人
回复

使用道具 举报

     
23#
发表于 2023-11-9 11:25 来自手机 | 只看该作者
本身都没经验,能写出比编译器优化得更好的代码?
真要看汇编,不如从编译器入手,看看调整后的C代码能不能被编译器优化得更好。
回复

使用道具 举报

     
24#
发表于 2023-11-9 11:35 来自手机 | 只看该作者
之前优化过sm4,不过没到汇编层级。一个技巧是,适当添加查找表可以显著提高编译后程序的性能(提高cache命中率)。至于sm2这一类的椭圆曲线公钥加速就更难些,和曲线参数相关,可以参考其他开源椭圆曲线库的优化,不过椭圆曲线本来也快不起来。

—— 来自 Xiaomi MIX 3, Android 10上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
25#
 楼主| 发表于 2023-11-9 11:36 | 只看该作者
einhorn 发表于 2023-11-9 11:10
说真的密码学算法如果效率有问题最好还是先看看C代码哪里没优化好,从C换成汇编最后可能变成是优化不好的汇 ...

您说的有道理,但是排查C代码时间代价太大了,现在领导意思是土法上马,先把大领导的速度指标完成了再说。像SM9签个名用时是RSA的1.5倍,差点被喷惨了,说交出去丢脸啥的。。。好🀁办呀
回复

使用道具 举报

     
26#
 楼主| 发表于 2023-11-9 11:37 | 只看该作者
诚司 发表于 2023-11-9 11:17
你懂技术不懂绩效,分配了汇编的工作就不能反驳领导,把自己这片做好了就可以pua其他人 ...

大手子所言极是,这道理我最近才明白太亏了
回复

使用道具 举报

27#
发表于 2023-11-9 11:39 | 只看该作者
SunGrrrr 发表于 2023-11-9 10:40
害,我们就是写C的,AES等算法有比较成熟的汇编加速了,但是咱国家研发的密码算法很多还没有配套,写完了 ...

做这个事情感觉你需要对这个算法本身有特别深入的研究,甚至要找到它的一些漏洞才能找到优化空间,至少学历得是个博士吧,密码学的
回复

使用道具 举报

     
28#
 楼主| 发表于 2023-11-9 11:43 | 只看该作者
张子虚 发表于 2023-11-9 11:35
之前优化过sm4,不过没到汇编层级。一个技巧是,适当添加查找表可以显著提高编译后程序的性能(提高cache命 ...

谢谢谢谢🙇‍我们之前也参考过一些知名的开源密码学库比如OPENSSL,椭圆曲线比人家慢6倍,但是又不能抄人家的实现
回复

使用道具 举报

     
29#
 楼主| 发表于 2023-11-9 11:47 | 只看该作者
我们的R你们的UR 发表于 2023-11-9 11:39
做这个事情感觉你需要对这个算法本身有特别深入的研究,甚至要找到它的一些漏洞才能找到优化空间,至少学 ...

嗯,我们组收了好多相关专业的,比如我是数学专业的,还有好多人是密码学专业的,但我们有个共同的特点就是都不是计算机科班,所以就没学过汇编(扫盲班刚毕业的那种)。科班出身的同事 本科学过汇编但是数学一般。。。这班上的。。。
回复

使用道具 举报

     
30#
发表于 2023-11-9 11:54 | 只看该作者
这种优化还是挺有意思的,ARM汇编也不算难懂吧,如果没用SIMD的话看看汇编里有没有多余的LD ST操作,指令间的依赖关系。可以把计算强度大的代码拿出来看看有没有什么瓶颈。不过我估计看C代码就能看出不少问题,可以翻翻 深入理解计算机系统 优化的相关章节,里面写的比较细。
回复

使用道具 举报

     
31#
发表于 2023-11-9 11:57 | 只看该作者
SunGrrrr 发表于 2023-11-9 11:47
嗯,我们组收了好多相关专业的,比如我是数学专业的,还有好多人是密码学专业的,但我们有个共同的特点就 ...

一般来说,效率差距超过3倍的,除了使用特殊指令集外,就是本身算法实现有本质差异。
比如你上面说的OpenSSL,数学不够扎实的计算机专业,大概能知道这代码快在哪,但不清楚该代码的数学含义;而你这样数学专业的,能知道代码实现的数学含义,但不知道这样写到底是快是慢。那你们两边一结合不就OK了,让计算机专业的告诉你怎样的代码快,然后你们数学专业的给出符合这个结构的等效数学表达式。
回复

使用道具 举报

头像被屏蔽
     
32#
发表于 2023-11-9 11:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
33#
发表于 2023-11-9 11:58 | 只看该作者
SunGrrrr 发表于 2023-11-9 11:36
您说的有道理,但是排查C代码时间代价太大了,现在领导意思是土法上马,先把大领导的速度指标完成了再说 ...

问个问题。你们把传统密码学的优化技术用完了吗?
椭圆曲线优化门道很多的。不一定先汇编吧。
回复

使用道具 举报

     
34#
发表于 2023-11-9 12:01 | 只看该作者
我看了一下openssl的库,人家也没汇编啊。
你把你那算法优化一下行不行
回复

使用道具 举报

     
35#
发表于 2023-11-9 12:08 来自手机 | 只看该作者
SunGrrrr 发表于 2023-11-9 11:43
谢谢谢谢🙇‍我们之前也参考过一些知名的开源密码学库比如OPENSSL,椭圆曲线比人家慢6倍,但是又 ...

是和gmssl里的sm9对比吗?其实不抄也行啊,参考下主要的优化技巧,位操作。不用到汇编层面也可以有不错速度的。

—— 来自 Xiaomi MIX 3, Android 10上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
36#
发表于 2023-11-9 12:10 | 只看该作者
yunxyz 发表于 2023-11-9 10:42
这玩意我都写了十几年了,其实汇编没你想的那么难,培训的时候给个例子一放,很快就能上手。滤波器或者FFT ...

没那么简单的。
如果干了很多年,那些know-how的东西对你来说是吃饭喝水一样自然。但是对于一个没有接触过的人来说短时间上手有困难,尤其是要理解流水线中的行为(各种hazard,latency,fwd规则等等)
性能优化则更难了。我遇到不少性能不好有stall然后在emu上抓波形的场景。结果发现解释波形上PC和stall不属于同一流水级这件事情就花了不少功夫。
回复

使用道具 举报

     
37#
发表于 2023-11-9 12:13 | 只看该作者
实际上我发现,能够用汇编写好的,其实是设计流水线的架构工程师。
而且汇编开发这个东西,十分不利于软件的开发速度
回复

使用道具 举报

     
38#
发表于 2023-11-9 12:14 来自手机 | 只看该作者
要我来就是借鉴一下别人的优化方法,然后gcc -S搞个汇编出来,再把改一改无关精要的内容让领导看不出来这是gcc搞出来的,应付一下得了

—— 来自 Xiaomi 22041211AC, Android 13上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|stage1st 沪ICP备13020230号-1 沪公网安备 31010702007642号

GMT+8, 2024-4-28 07:34 , Processed in 0.044332 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表