鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

安装前配置

以上描述的优化特性,都已经写入到patch文件中,对源码应用patch文件之后,就可以使能该特性。

利用SVE加速向量运算

预置条件

CPU支持SVE指令优化。

查看方式

通过以下命令查看CPU是否支持SVE指令优化。

lscpu

回显结果中Flags行包含SVE,表示CPU支持SVE指令优化。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Architecture:           aarch64
  CPU op-mode(s):       64-bit
  Byte Order:           Little Endian
CPU(s):                 320
  On-line CPU(s) list:  0-319
Vendor ID:              HiSilicon
  BIOS Vendor ID:       HiSilicon
  BIOS Model name:      Kunpeng 920 7285Z
  Model:                0
  Thread(s) per core:   2
  Core(s) per socket:   80
  Socket(s):            2
  Stepping:             0x0
  Frequency boost:      disabled
  CPU max MHz:          3000.0000
  CPU min MHz:          400.0000
  BogoMIPS:             200.00
  Flags:                fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc fla
                        gm ssbs sb paca pacg dcpodp flagm2 frint svei8mm svef32mm svef64mm svebf16 i8mm bf16 dgh rng ecv
Caches (sum of all):
  L1d:                  10 MiB (160 instances)
  L1i:                  10 MiB (160 instances)
  L2:                   200 MiB (160 instances)
  L3:                   280 MiB (4 instances)
NUMA:
  NUMA node(s):         4
  NUMA node0 CPU(s):    0-79
  NUMA node1 CPU(s):    80-159
  NUMA node2 CPU(s):    160-239
  NUMA node3 CPU(s):    240-319
Vulnerabilities:
  Gather data sampling: Not affected
  Itlb multihit:        Not affected
  L1tf:                 Not affected
  Mds:                  Not affected
  Meltdown:             Not affected
  Mmio stale data:      Not affected
  Retbleed:             Not affected
  Spec rstack overflow: Not affected
  Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:           Mitigation; __user pointer sanitization
  Spectre v2:           Not affected
  Srbds:                Not affected
  Tsx async abort:      Not affected

编译选项

GCC编译时,通过“-march”编译选项指定ARM架构版本以及扩展指令集。本特性patch中通过以下编译选项使用SVE:

1
-march=armv8-a+sve -msve-vector-bits=256

前者表示使用SVE指令集,后者指定SVE可变向量长度的位数。

利用PF预取加速数据处理

在频繁进行循环操作、并行计算、缓存未命中率较高等情况下,使用PF(预取)可以加速数据处理,提高系统性能。

硬件预取

硬件预取是通过跟踪指令和数据地址的变化,将指令和地址提前读到Cache里。建议在BIOS中将预取功能开启。

  1. 重启服务器,进入BIOS设置界面。
  2. 在BIOS中,选择“Advanced>MISC Config”,按“Enter”键进入。
  3. 将“CPU Prefetching Configuration”设置为“Enabled”,按“F10”键保存退出。

软件预取

在ARM架构中,可以使用PRFM(Prefetch Memory)指令来实现数据预取。预取指令会将数据加载到缓存中,但不会立即被处理器使用。预取的数据通常会放入L1数据缓存中。如果L1缓存已满,数据可能会被放入L2缓存或L3缓存(如果存在)。除此之外,还可以通过调整预取步长来进一步优化预取效果。

以下是预取指令在C++中的实现。

1
#define PLDL1KEEP_OFF(ptr, off) __asm__ volatile("prfm PLDL1KEEP, [%0, #(%1)]"::"r"(ptr), "i"(off):)

在本特性中,预取指令会加入到SVE加载指令之前以结合使用两个优化特性。