私は行列に関するいくつかの作業を必要とするアルゴリズムを探求しています。私は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のダウンロードを検索しようとしました...フリーソフトウェアでもありません!