之前一直使用neon内联函数优化代码?但有些代码优化后效率实在不如人意?是不是代码顺序不好不利于cpu流水线工作?有没有相关的文档介绍下每条内联函数的时钟周期,这样是不是可以更好的安排代码顺序呢?
你好!
是使用O0的版本进行反汇编吗?O3以个人目前水平看着费劲
用你测试性能的选项来查看反汇编,才能反映测试代码的情况。一般是O2/O3。
看到关键代码就可以,比如包含NEON代码的循环体,不用了解所有细节
在O3下有些neon内联指令的汇编并不是对应的neon汇编,有些也没有显式的指出使用了neon寄存器。
比如
add v2.8b,v1.8b,v1.8b //a=vadd_u8(a,a) ldr q0,[2]//a=vld1_u8(aa)
谢谢!
add v2.8b,v1.8b,v1.8b //a=vadd_u8(a,a)
这个是aarch64的neon汇编ldr q0,[2]//a=vld1_u8(aa)
q0是v0的别称,在ldr指令里面一般叫q0,在ld1/2/3/4里面叫v0
虽然跑在armv8a上,但是一直使用arm32的neon指令,从反汇编上来看,32/64共用的内联函数,在64位芯片上编译器会使用64位的neon汇编替换,请问是这样吗?
我翻了下64的文档,发现64的指令要比32的多了不少,这些指令可以实现32位不能实现的一些功能吗?
intrinsic可以借助编译器自动匹配运行平台。
aarch64的指令比aarch32的要丰富,你可以参考指令文档。
我计划学习一下aarch64的指令,可是面对茫茫多指令不知如何下手 :)
现在手里有2份aarch64的文档
1.armv8a architecture profile errata markup
2.arm neon intrinsics reference
请问我这两份文档可以用来学习吗?我发现armv8a architecture profile errata markup中aarch64部分的汇编是用伪代码写的,好难读....
有没有更常用一些的aarch64指令文档?
对于指令列表,你参考ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile文档就可以,里面有所有指令列表