diff --git a/.gitignore b/.gitignore index b1556d7d..70216951 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ UpgradeLog.htm *.bak *.vsdoc *.XML +*.so diff --git a/src/NativeWrappers/Common/lapack_common.h b/src/NativeWrappers/Common/lapack_common.h index f26298a8..7098b316 100644 --- a/src/NativeWrappers/Common/lapack_common.h +++ b/src/NativeWrappers/Common/lapack_common.h @@ -1,6 +1,8 @@ #ifndef LAPACK_COMMON_H #define LAPACK_COMMON_H +#include + void shift_ipiv_down(int m, int ipiv[]); inline void shift_ipiv_down(int m, int ipiv[]){ for(int i = 0; i < m; ++i ){ @@ -19,7 +21,7 @@ template inline T* Clone(const int m, const int n, const T* a) { T* clone = new T[m*n]; - std::memcpy(clone, a, m*n*sizeof(T)); + memcpy(clone, a, m*n*sizeof(T)); return clone; } @@ -34,4 +36,4 @@ void copyBtoX (int m, int n, int bn, T b[], T x[]){ } } -#endif \ No newline at end of file +#endif diff --git a/src/NativeWrappers/Linux/build.sh b/src/NativeWrappers/Linux/build.sh new file mode 100755 index 00000000..9c0d67ae --- /dev/null +++ b/src/NativeWrappers/Linux/build.sh @@ -0,0 +1,6 @@ +export INTEL=/opt/intel +export MKL=$INTEL/mkl + +#g++ --shared -fPIC -o ./x64/MathNET.Numerics.MKL.so -I$MKL/include -I../Common ../MKL/vector_functions.c ../MKL/blas.c ../MKL/lapack.cpp $INTEL/lib/intel64/libiomp5.a $MKL/lib/intel64/libmkl_intel_lp64.a $MKL/lib/intel64/libmkl_intel_thread.a $MKL/lib/intel64/libmkl_core.a + +g++ -m32 --shared -fPIC -o ./x86/MathNET.Numerics.MKL.so -I$MKL/include -I../Common ../MKL/vector_functions.c ../MKL/blas.c ../MKL/lapack.cpp $INTEL/lib/ia32/libiomp5.a $MKL/lib/ia32/libmkl_intel.a $MKL/lib/ia32/libmkl_intel_thread.a $MKL/lib/ia32/libmkl_core.a diff --git a/src/NativeWrappers/MKL/blas.c b/src/NativeWrappers/MKL/blas.c index c63b4beb..4eb75f1f 100644 --- a/src/NativeWrappers/MKL/blas.c +++ b/src/NativeWrappers/MKL/blas.c @@ -53,28 +53,28 @@ DLLEXPORT MKL_Complex16 z_dot_product(const MKL_INT n, const MKL_Complex16 x[], return ret; } -DLLEXPORT void s_matrix_multiply(const enum CBLAS_TRANSPOSE transA, const enum CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const float alpha, const float x[], const float y[], const float beta, float c[]){ +DLLEXPORT void s_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const float alpha, const float x[], const float y[], const float beta, float c[]){ MKL_INT lda = transA == CblasNoTrans ? m : k; MKL_INT ldb = transB == CblasNoTrans ? k : n; cblas_sgemm(CblasColMajor, transA, transB, m, n, k, alpha, x, lda, y, ldb, beta, c, m); } -DLLEXPORT void d_matrix_multiply(const enum CBLAS_TRANSPOSE transA, const enum CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const double alpha, const double x[], const double y[], const double beta, double c[]){ +DLLEXPORT void d_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const double alpha, const double x[], const double y[], const double beta, double c[]){ MKL_INT lda = transA == CblasNoTrans ? m : k; MKL_INT ldb = transB == CblasNoTrans ? k : n; cblas_dgemm(CblasColMajor, transA, transB, m, n, k, alpha, x, lda, y, ldb, beta, c, m); } -DLLEXPORT void c_matrix_multiply(const enum CBLAS_TRANSPOSE transA, const enum CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const MKL_Complex8 alpha, const MKL_Complex8 x[], const MKL_Complex8 y[], const MKL_Complex8 beta, MKL_Complex8 c[]){ +DLLEXPORT void c_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const MKL_Complex8 alpha, const MKL_Complex8 x[], const MKL_Complex8 y[], const MKL_Complex8 beta, MKL_Complex8 c[]){ MKL_INT lda = transA == CblasNoTrans ? m : k; MKL_INT ldb = transB == CblasNoTrans ? k : n; cblas_cgemm(CblasColMajor, transA, transB, m, n, k, &alpha, x, lda, y, ldb, &beta, c, m); } -DLLEXPORT void z_matrix_multiply(const enum CBLAS_TRANSPOSE transA, const enum CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const MKL_Complex16 alpha, const MKL_Complex16 x[], const MKL_Complex16 y[], const MKL_Complex16 beta, MKL_Complex16 c[]){ +DLLEXPORT void z_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const MKL_INT m, const MKL_INT n, const MKL_INT k, const MKL_Complex16 alpha, const MKL_Complex16 x[], const MKL_Complex16 y[], const MKL_Complex16 beta, MKL_Complex16 c[]){ MKL_INT lda = transA == CblasNoTrans ? m : k; MKL_INT ldb = transB == CblasNoTrans ? k : n;