我一直在探索在matrix上需要一些工作的algorithm,并且我已经在我的Linux机器上得到了一些简单的代码。 这是一个摘录:
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
,并链接到库。
我现在试图从这里使用32位DLL的MinGW这个代码工作,但我看到segfaults和无效的输出。 我将继续使用gdb来确定错误的位置,但我怀疑有一个更好,更干净,更便携的方法来完成这个工作。
我所做的是编译安装fortran for mingw( mingw-get install fortran
)并链接到32位BLAS和LAPACK dll的早期链接。
我不知道我有多less在这里错过…当用gcc for win32编码时,其他人如何得到他们的LAPACK?
我正在寻找的是一个易于使用的C界面。 我不想在所有的地方包装类。
我试图find英特尔MKL的下载…甚至没有自由软件!
我解决了这个问题。 这与我调用例程的方式无关,在将值累加到它们之前,我没有将我的缓冲区memset
为零。
调用Fortran例程基本上和从Linux一样简单。
然而,另一个相当严重的问题出现了:一旦我使用lapack例程,我的程序不再处理异常。 看到这里 。