Skip to content

Commit 05f6ac6

Browse files
authored
ggml : riscv: add xtheadvector support (#13720)
* ggml : riscv: add xtheadvector support * ggml : clean up some macro usage
1 parent bc583e3 commit 05f6ac6

File tree

6 files changed

+453
-33
lines changed

6 files changed

+453
-33
lines changed

ggml/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ option(GGML_LASX "ggml: enable lasx" ON)
129129
option(GGML_LSX "ggml: enable lsx" ON)
130130
option(GGML_RVV "ggml: enable rvv" ON)
131131
option(GGML_RV_ZFH "ggml: enable riscv zfh" OFF)
132+
option(GGML_XTHEADVECTOR "ggml: enable xtheadvector" OFF)
132133
option(GGML_VXE "ggml: enable vxe" ON)
133134

134135
option(GGML_CPU_ALL_VARIANTS "ggml: build all variants of the CPU backend (requires GGML_BACKEND_DL)" OFF)

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,10 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
357357
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "riscv64")
358358
message(STATUS "RISC-V detected")
359359
if (GGML_RVV)
360-
if (GGML_RV_ZFH)
361-
list(APPEND ARCH_FLAGS -march=rv64gcv_zfhmin -DGGML_RV_ZFH -mabi=lp64d)
360+
if (GGML_XTHEADVECTOR)
361+
list(APPEND ARCH_FLAGS -march=rv64gc_xtheadvector -mabi=lp64d)
362+
elseif (GGML_RV_ZFH)
363+
list(APPEND ARCH_FLAGS -march=rv64gcv_zfhmin -mabi=lp64d)
362364
else()
363365
list(APPEND ARCH_FLAGS -march=rv64gcv -mabi=lp64d)
364366
endif()

ggml/src/ggml-cpu/ggml-cpu-aarch64.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,7 +1191,7 @@ static void ggml_gemv_q4_0_8x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, c
11911191
}
11921192
}
11931193
return;
1194-
#elif defined(__riscv_v_intrinsic)
1194+
#elif defined __riscv_v
11951195
if (__riscv_vlenb() >= QK4_0) {
11961196
const size_t vl = QK4_0;
11971197

@@ -3783,7 +3783,7 @@ static void ggml_gemm_q4_0_8x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, c
37833783
}
37843784
return;
37853785
}
3786-
#elif defined(__riscv_v_intrinsic)
3786+
#elif defined __riscv_v
37873787
if (__riscv_vlenb() >= QK4_0) {
37883788
const size_t vl = QK4_0;
37893789

ggml/src/ggml-cpu/ggml-cpu-impl.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -320,21 +320,17 @@ inline static int32x4_t ggml_vdotq_s32(int32x4_t acc, int8x16_t a, int8x16_t b)
320320

321321
#ifdef __wasm_simd128__
322322
#include <wasm_simd128.h>
323-
#else
323+
#endif
324+
324325
#ifdef __POWER9_VECTOR__
325326
#include <altivec.h>
326-
#else
327+
#endif
328+
327329
#if defined(_MSC_VER) || defined(__MINGW32__)
328330
#include <intrin.h>
329-
#else
330-
#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) || defined(__SSE__)
331-
#if !defined(__riscv)
331+
#elif defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) || defined(__SSE__)
332332
#include <immintrin.h>
333333
#endif
334-
#endif
335-
#endif
336-
#endif
337-
#endif
338334

339335
#ifdef __riscv_v_intrinsic
340336
#include <riscv_vector.h>

0 commit comments

Comments
 (0)