]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Use cblas_saxpy where possible
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 1 Sep 2020 11:41:09 +0000 (12:41 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 1 Sep 2020 11:41:09 +0000 (12:41 +0100)
cmake/Openblas.cmake
contrib/kann/kautodiff.c

index 2155b29551b115b96815468918b9c65c10d648d1..7615408b2ee95f6214bd9d84ac5f191b49dcdd35 100644 (file)
@@ -51,6 +51,22 @@ int main(int argc, char **argv)
             COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
             LINK_LIBRARIES ${BLAS_REQUIRED_LIBRARIES}
             OUTPUT_VARIABLE SGEMM_ERR)
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/saxpy.c" "
+#include <stddef.h>
+extern void cblas_saxpy(const int __N,
+    const float __alpha, const float *__X, const int __incX, float *__Y, const int __incY);
+int main(int argc, char **argv)
+{
+    cblas_saxpy(0, 0, NULL, 0, NULL, 0);
+    return 0;
+}
+")
+    try_compile(HAVE_CBLAS_SAXPY
+            ${CMAKE_CURRENT_BINARY_DIR}
+            "${CMAKE_CURRENT_BINARY_DIR}/saxpy.c"
+            COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+            LINK_LIBRARIES ${BLAS_REQUIRED_LIBRARIES}
+            OUTPUT_VARIABLE SAXPY_ERR)
 
     # Cmake is just brain damaged
     #CHECK_LIBRARY_EXISTS(${BLAS_REQUIRED_LIBRARIES} cblas_sgemm "" HAVE_CBLAS_SGEMM)
@@ -60,5 +76,11 @@ int main(int argc, char **argv)
     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
index a8af6796b82e750b937b5ee8587230aabb2fb40b..f336c958b15b57e39a71af29149f8fecdc7429f2 100644 (file)
@@ -897,8 +897,6 @@ void kad_vec_mul_sum(int n, float *a, const float *b, const float *c)
        for (i = 0; i < n; ++i) a[i] += b[i] * c[i];
 }
 
-void kad_saxpy(int n, float a, const float *x, float *y) { kad_saxpy_inlined(n, a, x, y); }
-
 /* This is actually lapack not cblas, but this definition is used */
 #ifdef HAVE_CBLAS
 #ifndef __APPLE__
@@ -958,6 +956,17 @@ void kad_sgemm_simple(int trans_A, int trans_B, int M, int N, int K, const float
 }
 #endif
 
+#ifdef HAVE_CBLAS_SAXPY
+#ifndef HAVE_CBLAS_H
+extern void cblas_saxpy(const int __N,
+    const float __alpha, const float *__X, const int __incX, float *__Y, const int __incY);
+#endif
+
+void kad_saxpy(int n, float a, const float *x, float *y) { cblas_saxpy(n, a, x, 1, y, 1); }
+#else
+void kad_saxpy(int n, float a, const float *x, float *y) { kad_saxpy_inlined(n, a, x, y); }
+#endif
+
 bool kad_ssyev_simple(int N, float *A, float *eigenvals)
 {
 #ifndef HAVE_CBLAS