ggml-cpu: add ggml_thread_cpu_relax with Zihintpause support (llama/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>
This commit is contained in:
parent
d6d44fac69
commit
c8d0ee2f9f
|
|
@ -168,6 +168,7 @@ option(GGML_RVV "ggml: enable rvv" ON)
|
||||||
option(GGML_RV_ZFH "ggml: enable riscv zfh" ON)
|
option(GGML_RV_ZFH "ggml: enable riscv zfh" ON)
|
||||||
option(GGML_RV_ZVFH "ggml: enable riscv zvfh" ON)
|
option(GGML_RV_ZVFH "ggml: enable riscv zvfh" ON)
|
||||||
option(GGML_RV_ZICBOP "ggml: enable riscv zicbop" ON)
|
option(GGML_RV_ZICBOP "ggml: enable riscv zicbop" ON)
|
||||||
|
option(GGML_RV_ZIHINTPAUSE "ggml: enable riscv zihintpause " ON)
|
||||||
option(GGML_XTHEADVECTOR "ggml: enable xtheadvector" OFF)
|
option(GGML_XTHEADVECTOR "ggml: enable xtheadvector" OFF)
|
||||||
option(GGML_VXE "ggml: enable vxe" ${GGML_NATIVE})
|
option(GGML_VXE "ggml: enable vxe" ${GGML_NATIVE})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -469,6 +469,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
||||||
if (GGML_RV_ZICBOP)
|
if (GGML_RV_ZICBOP)
|
||||||
string(APPEND MARCH_STR "_zicbop")
|
string(APPEND MARCH_STR "_zicbop")
|
||||||
endif()
|
endif()
|
||||||
|
if (GGML_RV_ZIHINTPAUSE)
|
||||||
|
string(APPEND MARCH_STR "_zihintpause")
|
||||||
|
endif()
|
||||||
list(APPEND ARCH_FLAGS "-march=${MARCH_STR}" -mabi=lp64d)
|
list(APPEND ARCH_FLAGS "-march=${MARCH_STR}" -mabi=lp64d)
|
||||||
else()
|
else()
|
||||||
# Begin with the lowest baseline
|
# Begin with the lowest baseline
|
||||||
|
|
|
||||||
|
|
@ -490,6 +490,15 @@ static inline void ggml_thread_cpu_relax(void) {
|
||||||
static inline void ggml_thread_cpu_relax(void) {
|
static inline void ggml_thread_cpu_relax(void) {
|
||||||
_mm_pause();
|
_mm_pause();
|
||||||
}
|
}
|
||||||
|
#elif defined(__riscv)
|
||||||
|
static inline void ggml_thread_cpu_relax(void) {
|
||||||
|
#ifdef __riscv_zihintpause
|
||||||
|
__asm__ __volatile__ ("pause");
|
||||||
|
#else
|
||||||
|
/* Encoding of the pause instruction */
|
||||||
|
__asm__ __volatile__ (".4byte 0x100000F");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
static inline void ggml_thread_cpu_relax(void) {;}
|
static inline void ggml_thread_cpu_relax(void) {;}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue