commit 8f2ad1d: [Feature] Support BLIS blas library
Vsevolod Stakhov
vsevolod at highsecure.ru
Wed Sep 2 12:49:13 UTC 2020
Author: Vsevolod Stakhov
Date: 2020-09-02 13:46:16 +0100
URL: https://github.com/rspamd/rspamd/commit/8f2ad1d853940a3d601f20d4aaa66bc9e9cb1103 (HEAD -> master)
[Feature] Support BLIS blas library
---
blas-config.h.in | 1 +
cmake/Openblas.cmake | 19 ++++++++++++++++++-
src/libserver/cfg_utils.c | 7 +++++++
src/libutil/util.c | 17 +++++++++++------
4 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/blas-config.h.in b/blas-config.h.in
index 8d10ebf2e..4f8379731 100644
--- a/blas-config.h.in
+++ b/blas-config.h.in
@@ -4,6 +4,7 @@
#cmakedefine HAVE_CBLAS_SGEMM 1
#cmakedefine HAVE_CBLAS_SAXPY 1
#cmakedefine HAVE_OPENBLAS_SET_NUM_THREADS 1
+#cmakedefine HAVE_BLI_THREAD_SET_NUM_THREADS 1
#cmakedefine HAVE_CBLAS_H 1
#cmakedefine HAVE_CBLAS 1
diff --git a/cmake/Openblas.cmake b/cmake/Openblas.cmake
index 042d00f8f..da62363ef 100644
--- a/cmake/Openblas.cmake
+++ b/cmake/Openblas.cmake
@@ -1,14 +1,16 @@
option (ENABLE_BLAS "Enable openblas for fast neural network processing [default: OFF]" OFF)
IF(ENABLE_BLAS MATCHES "ON")
- ProcessPackage(BLAS OPTIONAL_INCLUDE LIBRARY openblas blas
+ ProcessPackage(BLAS OPTIONAL_INCLUDE LIBRARY openblas blas blis
INCLUDE cblas.h INCLUDE_SUFFIXES include/openblas
include/blas
+ include/blis
ROOT ${BLAS_ROOT_DIR}
LIB_OUTPUT BLAS_REQUIRED_LIBRARIES)
ProcessPackage(BLAS_LAPACK OPTIONAL_INCLUDE LIBRARY lapack
INCLUDE cblas.h INCLUDE_SUFFIXES include/openblas
include/blas
+ include/blis
ROOT ${BLAS_ROOT_DIR}
LIB_OUTPUT BLAS_REQUIRED_LIBRARIES)
ENDIF()
@@ -84,6 +86,21 @@ int main(int argc, char **argv)
LINK_LIBRARIES ${BLAS_REQUIRED_LIBRARIES}
OUTPUT_VARIABLE OPENBLAS_SET_NUM_THREADS_ERR)
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/bli_thread_set_num_threads.c" "
+#include <stddef.h>
+extern void bli_thread_set_num_threads(int num_threads);
+int main(int argc, char **argv)
+{
+ bli_thread_set_num_threads(1);
+ return 0;
+}
+")
+ try_compile(HAVE_BLI_THREAD_SET_NUM_THREADS
+ ${CMAKE_CURRENT_BINARY_DIR}
+ "${CMAKE_CURRENT_BINARY_DIR}/bli_thread_set_num_threads.c"
+ COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+ LINK_LIBRARIES ${BLAS_REQUIRED_LIBRARIES}
+ OUTPUT_VARIABLE BLI_SET_NUM_THREADS_ERR)
# Cmake is just brain damaged
#CHECK_LIBRARY_EXISTS(${BLAS_REQUIRED_LIBRARIES} cblas_sgemm "" HAVE_CBLAS_SGEMM)
if(HAVE_CBLAS_SGEMM)
diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c
index 0b87bc985..7ef701aed 100644
--- a/src/libserver/cfg_utils.c
+++ b/src/libserver/cfg_utils.c
@@ -2787,6 +2787,9 @@ rspamd_free_zstd_dictionary (struct zstd_dictionary *dict)
#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
extern void openblas_set_num_threads(int num_threads);
#endif
+#ifdef HAVE_BLI_THREAD_SET_NUM_THREADS
+extern void bli_thread_set_num_threads(int num_threads);
+#endif
gboolean
rspamd_config_libs (struct rspamd_external_libs_ctx *ctx,
@@ -2893,6 +2896,10 @@ rspamd_config_libs (struct rspamd_external_libs_ctx *ctx,
#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
openblas_set_num_threads (cfg->max_blas_threads);
#endif
+#ifdef HAVE_BLI_THREAD_SET_NUM_THREADS
+ bli_thread_set_num_threads (cfg->max_blas_threads);
+#endif
+
}
return ret;
diff --git a/src/libutil/util.c b/src/libutil/util.c
index 1aed0f8b4..795382622 100644
--- a/src/libutil/util.c
+++ b/src/libutil/util.c
@@ -1704,19 +1704,24 @@ void rspamd_gerror_free_maybe (gpointer p)
}
}
-
-
-#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
-extern void openblas_set_num_threads(int num_threads);
/*
* Openblas creates threads that are not supported by
* jemalloc allocator (aside of being bloody stupid). So this hack
* is intended to set number of threads to one by default.
* FIXME: is it legit to do so in ctor?
*/
-RSPAMD_CONSTRUCTOR (openblas_stupidity_fix_ctor)
+#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
+extern void openblas_set_num_threads(int num_threads);
+RSPAMD_CONSTRUCTOR (openblas_thread_fix_ctor)
+{
+ bli_thread_set_num_threads (1;
+}
+#endif
+#ifdef HAVE_BLI_THREAD_SET_NUM_THREADS
+extern void bli_thread_set_num_threads(int num_threads);
+RSPAMD_CONSTRUCTOR (blis_thread_fix_ctor)
{
- openblas_set_num_threads (1);
+ bli_thread_set_num_threads (1;
}
#endif
More information about the Commits
mailing list