EDA365电子论坛网

标题: arm neon 优化技巧 [打印本页]

作者: haidaowang    时间: 2021-4-29 17:57
标题: arm neon 优化技巧

+ E6 @. J! b$ E0 D1. 去除数据依赖
  O8 h( T- ^  P+ p% a; ~0 x不要将当前指令的目的寄存器作为下一条指令的源寄存器!
, U: u  j5 K5 d8 |7 C: C原因:arm架构采用的是多级流水线技术,如果下一条指令的源寄存器是当前指令的目的寄存器,就需要当前指令执行完之后,下一条指令才能取指执行,这样会产生很大的延迟,影响性能。; N1 m6 L/ `8 X* d  r: J1 d+ C8 c

( z# C& k3 u/ p8 J2. 减少分支跳转
, v1 a9 c) |; ]2 S' i5 C7 NARM处理器中广泛使用分支预测技术。但是一旦分支预测失败,性能就会损失很大。所以, - A' I, U3 W; t) T8 ^; l
尽量不要用分支跳转!可以采用逻辑运算指令替代分支跳转!
( A: C8 n" q8 W% o. \% F比如:
3 m4 n, @$ J" }9 C# E  m0 S5 d' _VCEQ, VCGE, VCGT, VCLE, VCLT……   e2 W: l1 }* U2 {% Q- W9 V, H% }! {
VBIT, VBIF, VBSL……
8 @: v. B" z5 D  ^另外,可以使用条件执行指令,比如addgt,suble等减少分支跳转! 3 H; e) {5 U! _8 x% V
建议一次性多处理几行数据,从而减少循环跳转的次数,提升性能。8 [4 \3 x" `) B; G! I
# `; y1 g& |, z  `# Z
3. 建议使用预载指令PLD
. O( Q; I& _8 b) UPLD允许处理器告知内存系统在不久的将来会从指定地址读取数据,若数据提取加载到cache中,将会提高cache hit,从而提升性能。 5 _6 ?' o6 M5 R2 w
风险:不过最新架构对PLD指令的支持并不好,在不确定的情况下使用,可能会损失性能!
- J+ Z  A0 z' d& k" f: M
: t* l6 I+ x: ~( \5 U4 _* G5 B5 y+ h5 D+ C7 X$ z

0 y, S2 U$ C! s& G1 J  X7 Y5 m: J4. 关注指令周期延迟
; x! _$ E8 K& j5 R0 ?VMLA指令可以替代VMUL+VADD,但是由于VMLA的指令延迟比较大,在后面没有并行指令时,可能性能并不如VMUL+VADD。5 b* h5 S& v: o8 r, w

; O" T1 R9 I: b7 ^8 z! @5 \$ a5. NEON assembly and NEON intrinsic Performance Contrast + Z5 ^" r4 X; Z; f3 z; k
NEON assembly: 3 ~+ [3 ^8 T2 a8 A6 B1 `
Always shows the best performance for the specified platform for an experienced developer. 0 L5 I0 T4 f& B8 n- X
NEON intrinsic: 4 j- g4 A! ~" `9 P. S; o
Depends heavily on the toolchain that is used.
作者: Anda    时间: 2021-4-30 09:48
减少分支跳转




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2