From: Sun Yuechi <sunyue...@iscas.ac.cn>

This patch series adds support for the RISC-V Vector (V) extension and
provides an optimized implementation of `rte_lpm_lookupx4` using RVV.

The initialization of lpm/vtbl_entry is not fully vectorized here because
doing so would require __riscv_vluxei32_v_u32m1, which is slower
than the scalar approach in this small-scale scenario.

- Test: app/test/lpm_perf_autotest
- Platform: Banana Pi BPI-F3
- SoC: Spacemit X60 (8 cores with Vector extension)
- CPU Frequency: up to 1.6 GHz
- Cache: 256 KiB L1d ×8, 256 KiB L1i ×8, 1 MiB L2 ×2
- Memory: 16 GiB
- Kernel: Linux 6.6.36
- Compiler: GCC 14.2.0 (with RVV intrinsic support)

LPM LookupX4:
    scalar: 5.7 cycles
    rvv:    4.6 cycles

FIB lookup_bulk:
    scalar: 5.9 cycles
    rvv:    5.4 cycles

v2:
- Add RTE_RISCV_FEATURE_V check.

Sun Yuechi (5):
  config/riscv: detect V extension
  eal/riscv/spinlock: add rte_cpuflag.h
  lib/lpm: R-V V rte_lpm_lookupx4
  lib/fib: R-V V rte_fib_lookup_bulk
  riscv: override machine_args only when default

 .mailmap                             |  1 +
 MAINTAINERS                          |  2 +
 config/riscv/meson.build             | 39 ++++++++++++++---
 lib/eal/riscv/include/rte_spinlock.h |  1 +
 lib/eal/riscv/include/rte_vect.h     |  4 ++
 lib/fib/dir24_8.c                    | 20 +++++++++
 lib/fib/dir24_8_rvv.c                | 64 ++++++++++++++++++++++++++++
 lib/fib/dir24_8_rvv.h                | 24 +++++++++++
 lib/fib/meson.build                  |  2 +
 lib/lpm/meson.build                  |  1 +
 lib/lpm/rte_lpm.h                    |  2 +
 lib/lpm/rte_lpm_rvv.h                | 59 +++++++++++++++++++++++++
 12 files changed, 213 insertions(+), 6 deletions(-)
 create mode 100644 lib/fib/dir24_8_rvv.c
 create mode 100644 lib/fib/dir24_8_rvv.h
 create mode 100644 lib/lpm/rte_lpm_rvv.h

-- 
2.50.0

Reply via email to