]> source.dussan.org Git - rspamd.git/commitdiff
[Rework] Change and improve openblas detection and usage
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 2 Sep 2020 12:05:58 +0000 (13:05 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 2 Sep 2020 12:05:58 +0000 (13:05 +0100)
blas-config.h.in [new file with mode: 0644]
cmake/Openblas.cmake
contrib/kann/kautodiff.c
src/libserver/cfg_utils.c
src/libutil/util.c
src/lua/lua_tensor.c

diff --git a/blas-config.h.in b/blas-config.h.in
new file mode 100644 (file)
index 0000000..8d10ebf
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef RSPAMD_BLAS_CONFIG_H_IN
+#define RSPAMD_BLAS_CONFIG_H_IN
+
+#cmakedefine HAVE_CBLAS_SGEMM 1
+#cmakedefine HAVE_CBLAS_SAXPY 1
+#cmakedefine HAVE_OPENBLAS_SET_NUM_THREADS 1
+#cmakedefine HAVE_CBLAS_H 1
+#cmakedefine HAVE_CBLAS 1
+
+#endif
\ No newline at end of file
index 7615408b2ee95f6214bd9d84ac5f191b49dcdd35..042d00f8f88645e59c74d88fd0486e5f23657240 100644 (file)
@@ -22,10 +22,10 @@ IF(WITH_BLAS)
         IF(NOT HAVE_CBLAS_H)
             MESSAGE(STATUS "Blas header cblas.h has not been found, use internal workaround")
         ELSE()
-            ADD_COMPILE_OPTIONS(-DHAVE_CBLAS_H)
+            SET(HAVE_CBLAS_H 1)
         ENDIF()
     ELSE()
-        ADD_COMPILE_OPTIONS(-DHAVE_CBLAS_H)
+        SET(HAVE_CBLAS_H 1)
     ENDIF()
     file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sgemm.c" "
 #include <stddef.h>
@@ -68,19 +68,35 @@ int main(int argc, char **argv)
             LINK_LIBRARIES ${BLAS_REQUIRED_LIBRARIES}
             OUTPUT_VARIABLE SAXPY_ERR)
 
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/openblas_set_num_threads.c" "
+#include <stddef.h>
+extern void openblas_set_num_threads(int num_threads);
+int main(int argc, char **argv)
+{
+    openblas_set_num_threads(1);
+    return 0;
+}
+")
+    try_compile(HAVE_OPENBLAS_SET_NUM_THREADS
+            ${CMAKE_CURRENT_BINARY_DIR}
+            "${CMAKE_CURRENT_BINARY_DIR}/openblas_set_num_threads.c"
+            COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+            LINK_LIBRARIES ${BLAS_REQUIRED_LIBRARIES}
+            OUTPUT_VARIABLE OPENBLAS_SET_NUM_THREADS_ERR)
+
     # Cmake is just brain damaged
     #CHECK_LIBRARY_EXISTS(${BLAS_REQUIRED_LIBRARIES} cblas_sgemm "" HAVE_CBLAS_SGEMM)
     if(HAVE_CBLAS_SGEMM)
         MESSAGE(STATUS "Blas has CBLAS sgemm")
-        ADD_COMPILE_OPTIONS(-DHAVE_CBLAS_SGEMM)
     else()
         MESSAGE(STATUS "Blas has -NOT- CBLAS sgemm, use internal workaround: ${SGEMM_ERR}")
     endif()
     if(HAVE_CBLAS_SAXPY)
         MESSAGE(STATUS "Blas has CBLAS saxpy")
-        ADD_COMPILE_OPTIONS(-DHAVE_CBLAS_SAXPY)
     else()
         MESSAGE(STATUS "Blas has -NOT- CBLAS saxpy, use internal workaround: ${SAXPY_ERR}")
     endif()
-    ADD_COMPILE_OPTIONS(-DHAVE_CBLAS)
-ENDIF(WITH_BLAS)
\ No newline at end of file
+    SET(HAVE_CBLAS 1)
+ENDIF(WITH_BLAS)
+
+CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/blas-config.h.in" "${CMAKE_BINARY_DIR}/src/blas-config.h")
\ No newline at end of file
index f336c958b15b57e39a71af29149f8fecdc7429f2..d05cc00a416c3422f3c7ed3114f6fe74e597f609 100644 (file)
@@ -7,6 +7,7 @@
 #include <float.h>
 #include <math.h>
 #include "kautodiff.h"
+#include "blas-config.h"
 
 typedef struct {
        uint64_t s[2];
index 6b3f3e15bfb36bec95a49d7f8833e2f3b203c4d6..0b87bc985d6b1d69e554ad0f0eaf540cf154cf87 100644 (file)
@@ -55,6 +55,8 @@
 #endif
 #include <math.h>
 
+#include "blas-config.h"
+
 #define DEFAULT_SCORE 10.0
 
 #define DEFAULT_RLIMIT_NOFILE 2048
@@ -2782,13 +2784,9 @@ rspamd_free_zstd_dictionary (struct zstd_dictionary *dict)
        }
 }
 
-#ifdef HAVE_CBLAS
-#ifdef HAVE_CBLAS_H
-#include "cblas.h"
-#else
+#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
 extern void openblas_set_num_threads(int num_threads);
 #endif
-#endif
 
 gboolean
 rspamd_config_libs (struct rspamd_external_libs_ctx *ctx,
@@ -2892,7 +2890,7 @@ rspamd_config_libs (struct rspamd_external_libs_ctx *ctx,
                        ZSTD_freeCStream (ctx->out_zstream);
                        ctx->out_zstream = NULL;
                }
-#ifdef HAVE_CBLAS
+#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
                openblas_set_num_threads (cfg->max_blas_threads);
 #endif
        }
index 9e5147ab57ee462a2f1ad343aa02b18a104b4055..1aed0f8b480400ac626dad31e64ec7c40949ae03 100644 (file)
@@ -64,6 +64,7 @@
 
 #include "zlib.h"
 #include "contrib/uthash/utlist.h"
+#include "blas-config.h"
 
 /* Check log messages intensity once per minute */
 #define CHECK_TIME 60
@@ -1705,17 +1706,8 @@ void rspamd_gerror_free_maybe (gpointer p)
 
 
 
-#ifdef HAVE_CBLAS
-#ifdef HAVE_CBLAS_H
-#include "cblas.h"
-#else
-#ifdef __APPLE__
-/* OSX is pure evil: number of threads must be set via env: VECLIB_MAXIMUM_THREADS */
-void openblas_set_num_threads(int num_threads) {}
-#else
+#ifdef HAVE_OPENBLAS_SET_NUM_THREADS
 extern void openblas_set_num_threads(int num_threads);
-#endif
-#endif
 /*
  * Openblas creates threads that are not supported by
  * jemalloc allocator (aside of being bloody stupid). So this hack
index 06b7cdffe5b1c5fbbb908bab26fb8b7fb10387ff..960fc31e012cdefbc53ff0b97d3d9a3217c47a72 100644 (file)
@@ -17,6 +17,7 @@
 #include "lua_common.h"
 #include "lua_tensor.h"
 #include "contrib/kann/kautodiff.h"
+#include "blas-config.h"
 
 /***
  * @module rspamd_tensor