Skip to content

Commit

Permalink
[Rework] Change and improve openblas detection and usage
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed Sep 2, 2020
1 parent 75d2e6e commit 54daeb8
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 22 deletions.
10 changes: 10 additions & 0 deletions blas-config.h.in
@@ -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
28 changes: 22 additions & 6 deletions cmake/Openblas.cmake
Expand Up @@ -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>
Expand Down Expand Up @@ -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")
1 change: 1 addition & 0 deletions contrib/kann/kautodiff.c
Expand Up @@ -7,6 +7,7 @@
#include <float.h>
#include <math.h>
#include "kautodiff.h"
#include "blas-config.h"

typedef struct {
uint64_t s[2];
Expand Down
10 changes: 4 additions & 6 deletions src/libserver/cfg_utils.c
Expand Up @@ -55,6 +55,8 @@
#endif
#include <math.h>

#include "blas-config.h"

#define DEFAULT_SCORE 10.0

#define DEFAULT_RLIMIT_NOFILE 2048
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
}
Expand Down
12 changes: 2 additions & 10 deletions src/libutil/util.c
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/lua/lua_tensor.c
Expand Up @@ -17,6 +17,7 @@
#include "lua_common.h"
#include "lua_tensor.h"
#include "contrib/kann/kautodiff.h"
#include "blas-config.h"

/***
* @module rspamd_tensor
Expand Down

0 comments on commit 54daeb8

Please sign in to comment.