Skip to content

Commit 0ef8583

Browse files
committed
ggml-cpu: Add ARM variant targeting neoverse-v2
1 parent 4f04a23 commit 0ef8583

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

ggml/src/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,7 @@ if (GGML_CPU_ALL_VARIANTS)
317317
endif()
318318
elseif(GGML_SYSTEM_ARCH STREQUAL "ARM")
319319
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
320-
# Many of these features are optional so we build versions with popular
321-
# combinations and name the backends based on the version they were
322-
# first released with
320+
# Generic ARM builds
323321
ggml_add_cpu_backend_variant(armv8.0_1)
324322
ggml_add_cpu_backend_variant(armv8.2_1 DOTPROD)
325323
ggml_add_cpu_backend_variant(armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC)
@@ -328,6 +326,9 @@ if (GGML_CPU_ALL_VARIANTS)
328326
ggml_add_cpu_backend_variant(armv8.6_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2)
329327
ggml_add_cpu_backend_variant(armv9.2_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME)
330328
ggml_add_cpu_backend_variant(armv9.2_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME)
329+
# Builds optimized for specific cores
330+
# neoverse-v2: AWS Graviton4, NVIDIA Grace
331+
ggml_add_cpu_backend_variant(neoverse-v2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2)
331332
elseif (CMAKE_SYSTEM_NAME MATCHES "Android")
332333
# Android-specific backends with SoC-compatible feature sets
333334
ggml_add_cpu_backend_variant(android_armv8.0_1)

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,30 +157,30 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
157157
elseif (GGML_CPU_ARM_ARCH)
158158
list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH})
159159
elseif(GGML_CPU_ALL_VARIANTS)
160-
# Begin with the lowest baseline
161-
set(ARM_MCPU "armv8-a")
160+
# For the generic builds, begin with the lowest supported baseline
161+
set(ARM_GENERIC_ARCH "armv8-a")
162162
set(ARCH_TAGS "")
163163
set(ARCH_DEFINITIONS "")
164164

165-
# When a feature is selected, bump the MCPU to the first
166-
# version that supported it
165+
# When a feature is selected, bump GENERIC_ARCH to the earliest
166+
# version which supported that feature
167167
if (GGML_INTERNAL_DOTPROD)
168-
set(ARM_MCPU "armv8.2-a")
168+
set(ARM_GENERIC_ARCH "armv8.2-a")
169169
set(ARCH_TAGS "${ARCH_TAGS}+dotprod")
170170
list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD)
171171
endif()
172172
if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC)
173-
set(ARM_MCPU "armv8.2-a")
173+
set(ARM_GENERIC_ARCH "armv8.2-a")
174174
set(ARCH_TAGS "${ARCH_TAGS}+fp16")
175175
list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC)
176176
endif()
177177
if (GGML_INTERNAL_SVE)
178-
set(ARM_MCPU "armv8.2-a")
178+
set(ARM_GENERIC_ARCH "armv8.2-a")
179179
set(ARCH_TAGS "${ARCH_TAGS}+sve")
180180
list(APPEND ARCH_DEFINITIONS GGML_USE_SVE)
181181
endif()
182182
if (GGML_INTERNAL_MATMUL_INT8)
183-
set(ARM_MCPU "armv8.6-a")
183+
set(ARM_GENERIC_ARCH "armv8.6-a")
184184
set(ARCH_TAGS "${ARCH_TAGS}+i8mm")
185185
list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8)
186186
endif()
@@ -197,7 +197,14 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
197197
set(ARCH_TAGS "${ARCH_TAGS}+sme")
198198
list(APPEND ARCH_DEFINITIONS GGML_USE_SME)
199199
endif()
200-
list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}")
200+
201+
# CPU targeted builds first, else do the generic build
202+
if (${tag_name} STREQUAL "neoverse-v2")
203+
list(APPEND ARCH_FLAGS "-mcpu=neoverse-v2${ARCH_TAGS}")
204+
list(APPEND ARCH_DEFINITIONS GGML_ARM_MCPU=NEOVERSE_V2)
205+
else()
206+
list(APPEND ARCH_FLAGS "-march=${ARM_GENERIC_ARCH}${ARCH_TAGS}")
207+
endif()
201208
ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS})
202209
endif()
203210

0 commit comments

Comments
 (0)