vppinfra: Multiarch support for AMD EPYC processors 89/38689/3
authorSivaprasad Tummala <sivaprasad.tummala@amd.com>
Mon, 17 Apr 2023 12:05:15 +0000 (05:05 -0700)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 18 Apr 2023 12:12:05 +0000 (12:12 +0000)
Type: feature

- Added multiarch support for AMD Zen architectures

Change-Id: I65d3fe94b6cc622ebecbe1ac803efa674e87c87a
Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
src/cmake/cpu.cmake
src/vppinfra/cpu.h

index 031a9bc..b54155d 100644 (file)
@@ -136,6 +136,11 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
     OFF
   )
 
+  add_vpp_march_variant(znver3
+    FLAGS -march=znver3 -mtune=znver3 -mprefer-vector-width=256
+    OFF
+  )
+
   if (GNU_ASSEMBLER_AVX512_BUG)
      message(WARNING "AVX-512 multiarch variant(s) disabled due to GNU Assembler bug")
   else()
@@ -151,6 +156,11 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
       FLAGS -march=sapphirerapids -mtune=sapphirerapids -mprefer-vector-width=512
       OFF
     )
+
+    add_vpp_march_variant(znver4
+      FLAGS -march=znver4 -mtune=znver4 -mprefer-vector-width=512
+      OFF
+    )
   endif()
 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
   set(VPP_DEFAULT_MARCH_FLAGS -march=armv8-a+crc)
index 29992bb..017ecb1 100644 (file)
@@ -27,7 +27,9 @@
   _ (skx, "Intel Skylake (server) / Cascade Lake")                            \
   _ (icl, "Intel Ice Lake")                                                   \
   _ (adl, "Intel Alder Lake")                                                 \
-  _ (spr, "Intel Sapphire Rapids")
+  _ (spr, "Intel Sapphire Rapids")                                            \
+  _ (znver3, "AMD Milan")                                                     \
+  _ (znver4, "AMD Genoa")
 #elif defined(__aarch64__)
 #define foreach_march_variant                                                 \
   _ (octeontx2, "Marvell Octeon TX2")                                         \
@@ -147,7 +149,8 @@ _CLIB_MARCH_FN_REGISTRATION(fn)
   _ (movdir64b, 7, ecx, 28)                                                   \
   _ (enqcmd, 7, ecx, 29)                                                      \
   _ (avx512_fp16, 7, edx, 23)                                                 \
-  _ (invariant_tsc, 0x80000007, edx, 8)
+  _ (invariant_tsc, 0x80000007, edx, 8)                                       \
+  _ (monitorx, 0x80000001, ecx, 29)
 
 #define foreach_aarch64_flags \
 _ (fp,          0) \
@@ -300,6 +303,22 @@ clib_cpu_march_priority_hsw ()
   return -1;
 }
 
+static inline int
+clib_cpu_march_priority_znver4 ()
+{
+  if (clib_cpu_supports_avx512_bitalg () && clib_cpu_supports_monitorx ())
+    return 250;
+  return -1;
+}
+
+static inline int
+clib_cpu_march_priority_znver3 ()
+{
+  if (clib_cpu_supports_avx2 () && clib_cpu_supports_monitorx ())
+    return 70;
+  return -1;
+}
+
 #define X86_CPU_ARCH_PERF_FUNC 0xA
 
 static inline int