]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Support BLIS blas library
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 2 Sep 2020 12:46:16 +0000 (13:46 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 2 Sep 2020 12:46:16 +0000 (13:46 +0100)
blas-config.h.in
cmake/Openblas.cmake
src/libserver/cfg_utils.c
src/libutil/util.c

index 8d10ebf2e40607d1351d7bb48e16392e0d1672fd..4f8379731d4639b5c36acf2087c29173584d84d0 100644 (file)
@@ -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
 
index 042d00f8f88645e59c74d88fd0486e5f23657240..da62363ef0ad317eed8f5fbf13339859b3c41ef2 100644 (file)
@@ -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)
index 0b87bc985d6b1d69e554ad0f0eaf540cf154cf87..7ef701aed17968d8384975673e37bd9b7b817fb9 100644 (file)
@@ -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;
index 1aed0f8b480400ac626dad31e64ec7c40949ae03..795382622ba7de49e857b06085e5024b8064552d 100644 (file)
@@ -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