Skip to content

Commit 79d6189

Browse files
authored
ggml-cpu: add ggml_thread_cpu_relax with Zihintpause support (ggml-org#17784)
* ggml-cpu: add ggml_thread_cpu_relax with Zihintpause support Signed-off-by: Wang Yang <yangwang@iscas.ac.cn> * cmake: enable RISC-V zihintpause extension for Spacemit builds * readme : add ZIHINTPAUSE support for RISC-V --------- Signed-off-by: Wang Yang <yangwang@iscas.ac.cn>
1 parent 4d37262 commit 79d6189

File tree

6 files changed

+16
-1
lines changed

6 files changed

+16
-1
lines changed

.github/workflows/build-linux-cross.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ jobs:
291291
-DGGML_RVV=ON \
292292
-DGGML_RV_ZFH=ON \
293293
-DGGML_RV_ZICBOP=ON \
294+
-DGGML_RV_ZIHINTPAUSE=ON \
294295
-DRISCV64_SPACEMIT_IME_SPEC=RISCV64_SPACEMIT_IME1 \
295296
-DCMAKE_TOOLCHAIN_FILE=${PWD}/cmake/riscv64-spacemit-linux-gnu-gcc.cmake
296297

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ range of hardware - locally and in the cloud.
6161
- Plain C/C++ implementation without any dependencies
6262
- Apple silicon is a first-class citizen - optimized via ARM NEON, Accelerate and Metal frameworks
6363
- AVX, AVX2, AVX512 and AMX support for x86 architectures
64-
- RVV, ZVFH, ZFH and ZICBOP support for RISC-V architectures
64+
- RVV, ZVFH, ZFH, ZICBOP and ZIHINTPAUSE support for RISC-V architectures
6565
- 1.5-bit, 2-bit, 3-bit, 4-bit, 5-bit, 6-bit, and 8-bit integer quantization for faster inference and reduced memory use
6666
- Custom CUDA kernels for running LLMs on NVIDIA GPUs (support for AMD GPUs via HIP and Moore Threads GPUs via MUSA)
6767
- Vulkan and SYCL backend support

docs/build-riscv64-spacemit.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ cmake -B build \
1919
-DGGML_RVV=ON \
2020
-DGGML_RV_ZFH=ON \
2121
-DGGML_RV_ZICBOP=ON \
22+
-DGGML_RV_ZIHINTPAUSE=ON \
2223
-DRISCV64_SPACEMIT_IME_SPEC=RISCV64_SPACEMIT_IME1 \
2324
-DCMAKE_TOOLCHAIN_FILE=${PWD}/cmake/riscv64-spacemit-linux-gnu-gcc.cmake \
2425
-DCMAKE_INSTALL_PREFIX=build/installed

ggml/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ option(GGML_RVV "ggml: enable rvv" ON)
168168
option(GGML_RV_ZFH "ggml: enable riscv zfh" ON)
169169
option(GGML_RV_ZVFH "ggml: enable riscv zvfh" ON)
170170
option(GGML_RV_ZICBOP "ggml: enable riscv zicbop" ON)
171+
option(GGML_RV_ZIHINTPAUSE "ggml: enable riscv zihintpause " ON)
171172
option(GGML_XTHEADVECTOR "ggml: enable xtheadvector" OFF)
172173
option(GGML_VXE "ggml: enable vxe" ${GGML_NATIVE})
173174

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
469469
if (GGML_RV_ZICBOP)
470470
string(APPEND MARCH_STR "_zicbop")
471471
endif()
472+
if (GGML_RV_ZIHINTPAUSE)
473+
string(APPEND MARCH_STR "_zihintpause")
474+
endif()
472475
list(APPEND ARCH_FLAGS "-march=${MARCH_STR}" -mabi=lp64d)
473476
else()
474477
# Begin with the lowest baseline

ggml/src/ggml-cpu/ggml-cpu.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,15 @@ static inline void ggml_thread_cpu_relax(void) {
490490
static inline void ggml_thread_cpu_relax(void) {
491491
_mm_pause();
492492
}
493+
#elif defined(__riscv)
494+
static inline void ggml_thread_cpu_relax(void) {
495+
#ifdef __riscv_zihintpause
496+
__asm__ __volatile__ ("pause");
497+
#else
498+
/* Encoding of the pause instruction */
499+
__asm__ __volatile__ (".4byte 0x100000F");
500+
#endif
501+
}
493502
#else
494503
static inline void ggml_thread_cpu_relax(void) {;}
495504
#endif

0 commit comments

Comments
 (0)