From 66ec3a0717e767c6773f051fcf60b876d9c253e6 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:13:54 +0800 Subject: [PATCH 01/14] ggml: initial s390 feat detection Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 6 +-- ggml/src/ggml-cpu/CMakeLists.txt | 2 + ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp | 59 +++++++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 3356ef550dec0..01c6032806b91 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -377,9 +377,9 @@ if (GGML_CPU_ALL_VARIANTS) endif() elseif (GGML_SYSTEM_ARCH STREQUAL "s390x") if (CMAKE_SYSTEM_NAME MATCHES "Linux") - ggml_add_cpu_backend_variant(s390x_z15 Z15 VXE) - # ggml_add_cpu_backend_variant(s390x_z16 Z16 VXE) - # ggml_add_cpu_backend_variant(s390x_z17 Z17 VXE) + ggml_add_cpu_backend_variant(s390x) + ggml_add_cpu_backend_variant(z15 Z15 VXE) + ggml_add_cpu_backend_variant(z16 Z16 VXE) else() message(FATAL_ERROR "Unsupported s390x target OS: ${CMAKE_SYSTEM_NAME}") endif() diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 34323afa0762a..8af62a4d1ed62 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -509,6 +509,8 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND ARCH_FLAGS -mvx -mzvector) list(APPEND ARCH_DEFINITIONS GGML_VXE) endif() + + ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "wasm") message(STATUS "Wasm detected") list (APPEND GGML_CPU_SOURCES ggml-cpu/arch/wasm/quants.c) diff --git a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp new file mode 100644 index 0000000000000..1fd925d039f34 --- /dev/null +++ b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp @@ -0,0 +1,59 @@ +#include "ggml-backend-impl.h" + +#if defined(__s390x__) +#include + +// find hwcap bits in asm/elf.h +#ifndef HWCAP_VXRS_EXT +#define HWCAP_VXRS_EXT (1 << 13) +#endif + +#ifndef HWCAP_VXRS_EXT2 +#define HWCAP_VXRS_EXT2 (1 << 15) +#endif + +#ifndef HWCAP_NNPA +#define HWCAP_NNPA (1 << 20) +#endif + +struct s390x_features { + bool has_vxe = false; + bool has_vxe2 = false; + bool has_nnpa = false; + + s390x_features() { + uint32_t hwcap = getauxval(AT_HWCAP); + uint32_t hwcap2 = getauxval(AT_HWCAP2); + + has_vxe = !!(hwcap & HWCAP_VXRS_EXT); + has_vxe2 = !!(hwcap & HWCAP_VXRS_EXT2); + has_nnpa = !!(hwcap & HWCAP_NNPA); + + GGML_LOG_INFO("s390x features detected: VXE=%d, VXE2=%d, NNPA=%d", + has_vxe, has_vxe2, has_nnpa); + } +}; + +static int ggml_backend_cpu_s390x_score() { + int score = 1; + s390x_features sf; + +#ifdef GGML_USE_VXE + if (!sf.has_vxe) { return 0; } + score += 1 << 1; +#endif +#ifdef GGML_USE_VXE2 + if (!sf.has_vxe2) { return 0; } + score += 1 << 2; +#endif +#ifdef GGML_USE_NNPA + if (!sf.has_nnpa) { return 0; } + score += 1 << 3; +#endif + + return score; +} + +GGML_BACKEND_DL_SCORE_IMPL(ggml_backend_cpu_s390x_score) + +#endif // __s390x__ From 480a3ecf8379756bed7a038089d857a88377914f Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:21:06 +0800 Subject: [PATCH 02/14] ggml: disable baseline s390x for now Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 01c6032806b91..880c6d8f35fd0 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -377,7 +377,7 @@ if (GGML_CPU_ALL_VARIANTS) endif() elseif (GGML_SYSTEM_ARCH STREQUAL "s390x") if (CMAKE_SYSTEM_NAME MATCHES "Linux") - ggml_add_cpu_backend_variant(s390x) + # ggml_add_cpu_backend_variant(s390x) ggml_add_cpu_backend_variant(z15 Z15 VXE) ggml_add_cpu_backend_variant(z16 Z16 VXE) else() From 6e679c88d91d687b9ea7b1e7e9bf1ae1a6b91191 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:30:48 +0800 Subject: [PATCH 03/14] ggml: fix typo in cpu-feats activation Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 8af62a4d1ed62..5e1722bbc51cf 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -510,7 +510,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND ARCH_DEFINITIONS GGML_VXE) endif() - ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) + ggml_add_cpu_backend_features(${GGML_CPU_NAME} s390 ${ARCH_DEFINITIONS}) elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "wasm") message(STATUS "Wasm detected") list (APPEND GGML_CPU_SOURCES ggml-cpu/arch/wasm/quants.c) From decb5cc06e592a48e629b0e81f62a456460d2861 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:32:36 +0800 Subject: [PATCH 04/14] ggml: add ggml-impl header for logging Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp index 1fd925d039f34..f0948a6e7e1d2 100644 --- a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp +++ b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp @@ -1,3 +1,4 @@ +#include "ggml-impl.h" #include "ggml-backend-impl.h" #if defined(__s390x__) From c376979647b234442a0d1505690d271699d6fec7 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:37:26 +0800 Subject: [PATCH 05/14] ggml: code cleanup Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/CMakeLists.txt | 2 +- ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 5e1722bbc51cf..f989b8952dbcb 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -510,7 +510,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND ARCH_DEFINITIONS GGML_VXE) endif() - ggml_add_cpu_backend_features(${GGML_CPU_NAME} s390 ${ARCH_DEFINITIONS}) + ggml_add_cpu_backend_features(${GGML_CPU_NAME} s390x ${ARCH_DEFINITIONS}) elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "wasm") message(STATUS "Wasm detected") list (APPEND GGML_CPU_SOURCES ggml-cpu/arch/wasm/quants.c) diff --git a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp index f0948a6e7e1d2..2f8f0163b2353 100644 --- a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp +++ b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp @@ -1,4 +1,3 @@ -#include "ggml-impl.h" #include "ggml-backend-impl.h" #if defined(__s390x__) @@ -23,15 +22,13 @@ struct s390x_features { bool has_nnpa = false; s390x_features() { - uint32_t hwcap = getauxval(AT_HWCAP); - uint32_t hwcap2 = getauxval(AT_HWCAP2); + uint32_t hwcap = getauxval(AT_HWCAP); + // NOTE: use hwcap2 with DFLT for z17 and later + // uint32_t hwcap2 = getauxval(AT_HWCAP2); has_vxe = !!(hwcap & HWCAP_VXRS_EXT); has_vxe2 = !!(hwcap & HWCAP_VXRS_EXT2); has_nnpa = !!(hwcap & HWCAP_NNPA); - - GGML_LOG_INFO("s390x features detected: VXE=%d, VXE2=%d, NNPA=%d", - has_vxe, has_vxe2, has_nnpa); } }; From e45bc419cc1b235046bf104492dde6adda2fba40 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:38:45 +0800 Subject: [PATCH 06/14] ggml: reactivate s390x baseline Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 880c6d8f35fd0..01c6032806b91 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -377,7 +377,7 @@ if (GGML_CPU_ALL_VARIANTS) endif() elseif (GGML_SYSTEM_ARCH STREQUAL "s390x") if (CMAKE_SYSTEM_NAME MATCHES "Linux") - # ggml_add_cpu_backend_variant(s390x) + ggml_add_cpu_backend_variant(s390x) ggml_add_cpu_backend_variant(z15 Z15 VXE) ggml_add_cpu_backend_variant(z16 Z16 VXE) else() From 411adbaa75139c81f16351e7ef7754cc74fd39a7 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:39:30 +0800 Subject: [PATCH 07/14] ggml: revert s390 name change Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 01c6032806b91..e2fa0f3e490c5 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -381,7 +381,7 @@ if (GGML_CPU_ALL_VARIANTS) ggml_add_cpu_backend_variant(z15 Z15 VXE) ggml_add_cpu_backend_variant(z16 Z16 VXE) else() - message(FATAL_ERROR "Unsupported s390x target OS: ${CMAKE_SYSTEM_NAME}") + message(FATAL_ERROR "Unsupported s390 target OS: ${CMAKE_SYSTEM_NAME}") endif() else() message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") From d997395b3b26b5e984cbaa60c3ee4aadadff1b0b Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:40:57 +0800 Subject: [PATCH 08/14] Revert "ggml: revert s390 name change" This reverts commit 411adbaa75139c81f16351e7ef7754cc74fd39a7. Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index e2fa0f3e490c5..01c6032806b91 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -381,7 +381,7 @@ if (GGML_CPU_ALL_VARIANTS) ggml_add_cpu_backend_variant(z15 Z15 VXE) ggml_add_cpu_backend_variant(z16 Z16 VXE) else() - message(FATAL_ERROR "Unsupported s390 target OS: ${CMAKE_SYSTEM_NAME}") + message(FATAL_ERROR "Unsupported s390x target OS: ${CMAKE_SYSTEM_NAME}") endif() else() message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") From 9e2d9b8b93f44d573800d4e1686b1317fb07ab57 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:42:28 +0800 Subject: [PATCH 09/14] ggml: revert s390 name change Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index f989b8952dbcb..5e1722bbc51cf 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -510,7 +510,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND ARCH_DEFINITIONS GGML_VXE) endif() - ggml_add_cpu_backend_features(${GGML_CPU_NAME} s390x ${ARCH_DEFINITIONS}) + ggml_add_cpu_backend_features(${GGML_CPU_NAME} s390 ${ARCH_DEFINITIONS}) elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "wasm") message(STATUS "Wasm detected") list (APPEND GGML_CPU_SOURCES ggml-cpu/arch/wasm/quants.c) From 1d56301879ab4b1d33ac705690971c8f1e43f0b2 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 13:54:32 +0800 Subject: [PATCH 10/14] ggml: add safeguard for baseline build Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/ggml-cpu-impl.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index 713bf85e5a832..e16db939b0c9b 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -60,12 +60,14 @@ struct ggml_compute_params { #endif #if defined(__s390x__) && defined(__VEC__) +#if defined(GGML_VXE) #ifndef __VXE__ #define __VXE__ #endif // __VXE__ #ifndef __VXE2__ #define __VXE2__ #endif // __VXE2__ +#endif // GGML_VXE #endif // __s390x__ && __VEC__ #if defined(__ARM_FEATURE_SVE) && defined(__linux__) @@ -484,13 +486,25 @@ inline static int16x8_t vec_padd_s16(int16x8_t a, int16x8_t b) { * @see https://github.com/ggml-org/llama.cpp/pull/14037 */ inline static float vec_hsum_f32x4(float32x4_t v) { +#if defined(__VXE__) || defined(__VXE2__) + // vec_reve requires z14+ (VXE) float32x4_t v_temp = v + vec_reve(v); return v_temp[0] + v_temp[1]; +#else + // Fallback for z13 (baseline VX without VXE) + return v[0] + v[1] + v[2] + v[3]; +#endif } inline static int32_t vec_hsum_i32x4(int32x4_t v) { +#if defined(__VXE__) || defined(__VXE2__) + // vec_reve requires z14+ (VXE) int32x4_t v_temp = v + vec_reve(v); return v_temp[0] + v_temp[1]; +#else + // Fallback for z13 (baseline VX without VXE) + return v[0] + v[1] + v[2] + v[3]; +#endif } inline static int32x4_t ggml_vec_dot(int32x4_t acc, int8x16_t a, int8x16_t b) { From a544e0eba138a65cd9885d78c423e0f516125a3a Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 14:30:21 +0800 Subject: [PATCH 11/14] Revert "ggml: add safeguard for baseline build" This reverts commit 1d56301879ab4b1d33ac705690971c8f1e43f0b2. Signed-off-by: Aaron Teo --- ggml/src/ggml-cpu/ggml-cpu-impl.h | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/ggml/src/ggml-cpu/ggml-cpu-impl.h b/ggml/src/ggml-cpu/ggml-cpu-impl.h index e16db939b0c9b..713bf85e5a832 100644 --- a/ggml/src/ggml-cpu/ggml-cpu-impl.h +++ b/ggml/src/ggml-cpu/ggml-cpu-impl.h @@ -60,14 +60,12 @@ struct ggml_compute_params { #endif #if defined(__s390x__) && defined(__VEC__) -#if defined(GGML_VXE) #ifndef __VXE__ #define __VXE__ #endif // __VXE__ #ifndef __VXE2__ #define __VXE2__ #endif // __VXE2__ -#endif // GGML_VXE #endif // __s390x__ && __VEC__ #if defined(__ARM_FEATURE_SVE) && defined(__linux__) @@ -486,25 +484,13 @@ inline static int16x8_t vec_padd_s16(int16x8_t a, int16x8_t b) { * @see https://github.com/ggml-org/llama.cpp/pull/14037 */ inline static float vec_hsum_f32x4(float32x4_t v) { -#if defined(__VXE__) || defined(__VXE2__) - // vec_reve requires z14+ (VXE) float32x4_t v_temp = v + vec_reve(v); return v_temp[0] + v_temp[1]; -#else - // Fallback for z13 (baseline VX without VXE) - return v[0] + v[1] + v[2] + v[3]; -#endif } inline static int32_t vec_hsum_i32x4(int32x4_t v) { -#if defined(__VXE__) || defined(__VXE2__) - // vec_reve requires z14+ (VXE) int32x4_t v_temp = v + vec_reve(v); return v_temp[0] + v_temp[1]; -#else - // Fallback for z13 (baseline VX without VXE) - return v[0] + v[1] + v[2] + v[3]; -#endif } inline static int32x4_t ggml_vec_dot(int32x4_t acc, int8x16_t a, int8x16_t b) { From f186c463b0cce7aea23ae2e74b739a90b28a1d66 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 14:30:48 +0800 Subject: [PATCH 12/14] ggml: rm baseline build it doesn't make sense tbh Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 01c6032806b91..4bfd61941881e 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -377,7 +377,6 @@ if (GGML_CPU_ALL_VARIANTS) endif() elseif (GGML_SYSTEM_ARCH STREQUAL "s390x") if (CMAKE_SYSTEM_NAME MATCHES "Linux") - ggml_add_cpu_backend_variant(s390x) ggml_add_cpu_backend_variant(z15 Z15 VXE) ggml_add_cpu_backend_variant(z16 Z16 VXE) else() From f5e2392e056b5fe8a125a0d8cd82ee58000d3fc5 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sun, 26 Oct 2025 14:34:35 +0800 Subject: [PATCH 13/14] devops: update release workflow Signed-off-by: Aaron Teo --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cab3ba9e68ee4..e72caa423ba0f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -134,8 +134,8 @@ jobs: include: - build: 'x64' os: ubuntu-22.04 - - build: 's390x-z15' # z15 because our CI runners are on z15 - os: ubuntu-22.04-s390x + - build: 's390x' + os: ubuntu-24.04-s390x # GGML_BACKEND_DL and GGML_CPU_ALL_VARIANTS are not currently supported on arm # - build: 'arm64' # os: ubuntu-22.04-arm From b62c93efc811e4302ac16535c7332f6e79c71db8 Mon Sep 17 00:00:00 2001 From: Aaron Teo Date: Sat, 1 Nov 2025 18:32:02 +0800 Subject: [PATCH 14/14] ggml: fix review comments * drop vxe feature * add nnpa feature Signed-off-by: Aaron Teo --- ggml/src/CMakeLists.txt | 8 ++++++-- ggml/src/ggml-cpu/CMakeLists.txt | 11 ++++++++--- ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp | 17 +++++------------ 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 4bfd61941881e..0cca753aaa4b4 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -308,6 +308,10 @@ function(ggml_add_cpu_backend_variant tag_name) set(GGML_INTERNAL_${feat} ON) endforeach() elseif (GGML_SYSTEM_ARCH STREQUAL "s390x") + foreach (feat VXE2 NNPA) + set(GGML_INTERNAL_${feat} OFF) + endforeach() + foreach (feat ${ARGN}) set(GGML_INTERNAL_${feat} ON) endforeach() @@ -377,8 +381,8 @@ if (GGML_CPU_ALL_VARIANTS) endif() elseif (GGML_SYSTEM_ARCH STREQUAL "s390x") if (CMAKE_SYSTEM_NAME MATCHES "Linux") - ggml_add_cpu_backend_variant(z15 Z15 VXE) - ggml_add_cpu_backend_variant(z16 Z16 VXE) + ggml_add_cpu_backend_variant(z15 Z15 VXE2) + ggml_add_cpu_backend_variant(z16 Z16 VXE2 NNPA) else() message(FATAL_ERROR "Unsupported s390x target OS: ${CMAKE_SYSTEM_NAME}") endif() diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 5e1722bbc51cf..23ec8bb08a732 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -504,10 +504,15 @@ function(ggml_add_cpu_backend_variant_impl tag_name) endforeach() endif() - if (GGML_VXE OR GGML_INTERNAL_VXE) - message(STATUS "VX/VXE/VXE2 enabled") + if (GGML_VXE OR GGML_INTERNAL_VXE2) + message(STATUS "VXE2 enabled") list(APPEND ARCH_FLAGS -mvx -mzvector) - list(APPEND ARCH_DEFINITIONS GGML_VXE) + list(APPEND ARCH_DEFINITIONS GGML_USE_VXE2) + endif() + + if (GGML_INTERNAL_NNPA) + message(STATUS "NNPA enabled") + list(APPEND ARCH_DEFINITIONS GGML_USE_NNPA) endif() ggml_add_cpu_backend_features(${GGML_CPU_NAME} s390 ${ARCH_DEFINITIONS}) diff --git a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp index 2f8f0163b2353..5f4405a7f308b 100644 --- a/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp +++ b/ggml/src/ggml-cpu/arch/s390/cpu-feats.cpp @@ -4,10 +4,6 @@ #include // find hwcap bits in asm/elf.h -#ifndef HWCAP_VXRS_EXT -#define HWCAP_VXRS_EXT (1 << 13) -#endif - #ifndef HWCAP_VXRS_EXT2 #define HWCAP_VXRS_EXT2 (1 << 15) #endif @@ -17,7 +13,6 @@ #endif struct s390x_features { - bool has_vxe = false; bool has_vxe2 = false; bool has_nnpa = false; @@ -26,7 +21,6 @@ struct s390x_features { // NOTE: use hwcap2 with DFLT for z17 and later // uint32_t hwcap2 = getauxval(AT_HWCAP2); - has_vxe = !!(hwcap & HWCAP_VXRS_EXT); has_vxe2 = !!(hwcap & HWCAP_VXRS_EXT2); has_nnpa = !!(hwcap & HWCAP_NNPA); } @@ -36,17 +30,16 @@ static int ggml_backend_cpu_s390x_score() { int score = 1; s390x_features sf; -#ifdef GGML_USE_VXE - if (!sf.has_vxe) { return 0; } - score += 1 << 1; -#endif +// IBM z15 / LinuxONE 3 #ifdef GGML_USE_VXE2 if (!sf.has_vxe2) { return 0; } - score += 1 << 2; + score += 1 << 1; #endif + +// IBM z16 / LinuxONE 4 and z17 / LinuxONE 5 #ifdef GGML_USE_NNPA if (!sf.has_nnpa) { return 0; } - score += 1 << 3; + score += 1 << 2; #endif return score;