* ggml-cpu: add ggml_thread_cpu_relax with Zihintpause support
Signed-off-by: Wang Yang <redacted>
* cmake: enable RISC-V zihintpause extension for Spacemit builds
* readme : add ZIHINTPAUSE support for RISC-V
---------
Signed-off-by: Wang Yang <redacted>
option(GGML_RV_ZFH "ggml: enable riscv zfh" ON)
option(GGML_RV_ZVFH "ggml: enable riscv zvfh" 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_VXE "ggml: enable vxe" ${GGML_NATIVE})
if (GGML_RV_ZICBOP)
string(APPEND MARCH_STR "_zicbop")
endif()
+ if (GGML_RV_ZIHINTPAUSE)
+ string(APPEND MARCH_STR "_zihintpause")
+ endif()
list(APPEND ARCH_FLAGS "-march=${MARCH_STR}" -mabi=lp64d)
else()
# Begin with the lowest baseline
static inline void ggml_thread_cpu_relax(void) {
_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
static inline void ggml_thread_cpu_relax(void) {;}
#endif