@@ -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 |
@@ -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) | |||
SET(HAVE_CBLAS 1) | |||
ENDIF(WITH_BLAS) | |||
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/blas-config.h.in" "${CMAKE_BINARY_DIR}/src/blas-config.h") |
@@ -7,6 +7,7 @@ | |||
#include <float.h> | |||
#include <math.h> | |||
#include "kautodiff.h" | |||
#include "blas-config.h" | |||
typedef struct { | |||
uint64_t s[2]; |
@@ -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 | |||
} |
@@ -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 |
@@ -17,6 +17,7 @@ | |||
#include "lua_common.h" | |||
#include "lua_tensor.h" | |||
#include "contrib/kann/kautodiff.h" | |||
#include "blas-config.h" | |||
/*** | |||
* @module rspamd_tensor |