나는 행렬에 대한 작업이 필요한 알고리즘을 탐색 해 왔으며 Linux 컴퓨터에서 작동하는 간단한 코드를 얻었습니다. 여기에서 발췌 한 것입니다 :LAPACK on Win32
extern "C" {
// link w/ LAPACK
extern void dpptrf_(const char *uplo, const int *n, double *ap, int *info);
extern void dpptri_(const char *uplo, const int *n, double *ap, int *info);
// BLAS todo: get sse2 up in here (ATLAS?)
extern void dgemm_(const char *transa, const char *transb, const int *m,
const int *n, const int *k, const double *alpha, const double *a,
const int *lda, const double *b, const int *ldb, const double *beta,
double *c, const int *ldc);
}
// in-place: be sure that (N*(N+1)/2) doubles have been initialized
inline void invert_mat_sym_packed(double *vd, int n) {
int out = 0;
dpptrf_("U",&n,vd,&out);
ASSERT(!out);
dpptri_("U",&n,vd,&out);
ASSERT(!out);
}
// use with col-major ordering!!!
inline void mult_cm(double *a, double *b, double alpha, int m, int k, int n, double *c) {
int lda = m, ldb = k, ldc = m; double beta = 1.0;
dgemm_("N","N",&m,&n,&k,&alpha,a,&lda,b,&ldb,&beta,c,&ldc);
}
은 내가했던 일은 sudo apt-get install liblapack
, 그리고 라이브러리에 대한 링크.
저는이 코드가 MinGW에서 작동하기 위해 here의 32 비트 DLL을 사용하려고 노력하고 있지만 segfaults와 잘못된 출력을보고 있습니다. 나는 오류의 위치를 결정하기 위해 gdb를 진행할 것이다. 그러나 이것을 수행하는 더 나은, 더 깔끔하고, 더 이식 가능한 방법이 있다고 의심된다.
내가 컴파일하려면 mingw (mingw-get install fortran
)의 fortran을 설치하고 이전 링크의 32 비트 BLAS 및 LAPACK dll에 연결하십시오.
내가 여기에 얼마나 빠졌는지 잘 모르겠다 ... gcc로 Win32 용으로 코딩 할 때 다른 사람들이 어떻게 LAPACK을 할 수 있을까?
내가 찾고있는 것은 사용하기 쉬운 C 인터페이스입니다. 나는 래퍼 클래스를 온통 원하지 않는다.
인텔 MKL 용 다운로드를 찾으려고했습니다 ... 무료 소프트웨어도 아닌가요?