Browse Source

added linux build script and tweaked code to compile on Ubuntu

pull/73/head
Marcus Cuda 14 years ago
parent
commit
60406513b3
  1. 1
      .gitignore
  2. 6
      src/NativeWrappers/Common/lapack_common.h
  3. 6
      src/NativeWrappers/Linux/build.sh
  4. 8
      src/NativeWrappers/MKL/blas.c

1
.gitignore

@ -19,3 +19,4 @@ UpgradeLog.htm
*.bak
*.vsdoc
*.XML
*.so

6
src/NativeWrappers/Common/lapack_common.h

@ -1,6 +1,8 @@
#ifndef LAPACK_COMMON_H
#define LAPACK_COMMON_H
#include <string.h>
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<typename T>
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
#endif

6
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

8
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;

Loading…
Cancel
Save