potass' blog

ポタシウムのことが書いてないブログ。

Cygwin (64 bit) への LAPACK のインストール

今度は LAPACK のインストール。
ALTAS を kkaneko.com に従ってインストールしてみたものの configure で上手くいかない。
あと

$ cat /proc/cpuinfo

で CPU のコア数を調べるとき、鵜呑みにしないで IntelAMD のサイトを確認したほうがいいかも。(物理的なコア数と仮想コア数が一致しないらしい。)

結局、諦めて LAPACKBLAS を使う。
スペックは PC 周りの設定 - potass' blog 参照。

結論

前提として Cygwin のインストールで gccgcc-fortran をインストールしておく。

Cygwin の setup.exe (私の場合は setup-x86_64.exe、ver. 2.850) を起動して*1

Debug/lapack-debuginfo
Math/lapack
Math/liblapack-devel
Math/liblapack-doc
Math/liblapack 0

をインストールした。(version はすべて 3.5.0-2 だった。)
なお、今回 arpack 系もインストールしておいた。

うまく行ったかどうかは ここ のソースファイル (sample.c とする。) をコンパイルしてみればいい。

/*-- source: http://www.cazoo.jp/calcsoft/library/lapack/clapack/usage/dgesv/ --*/
#include <stdio.h>
#define N 3

double A[N*N], x[N];

int main (void)
{
  static long int i, n = N, inc = 1, info, piv[N];

  A[0]=1.;A[1]=3.;A[2]=1.;
  A[3]=1.;A[4]=1.;A[5]=-2.;
  A[6]=1.;A[7]=-3.;A[8]=-5.;
  x[0]=1.;x[1]=5.;x[2]=10.;

  fprintf(stdout, "N = %d\n", N);
  dgesv_(&n, &inc, A, &n, piv, x, &n, &info);

  for(i = 0; i < N; i++) fprintf(stdout, "%lf\n", x[i]);
  return 0;
}

コンパイル

$ gcc sample.c -o sample -llapack -lblas -lm
$ ./sample

として、

N = 3
6.000000
-7.000000
2.000000

と表示されれば OK(なはず)。これでダメだったら(投げやりですが)頑張りましょう。*2

試したこと

1. Cygwin を起動して、

$ cd /tmp
$ wget http://www.netlib.org/clapack/clapack.tgz
$ tar zxvf clapack.tgz
$ cd CLAPACK-3.2.1
$ cp make.inc.example make.inc

とする。
2. emacs を起動して make.inc の 61 行目を

#BLASLIB      = ../../blas$(PLAT).a
BLASLIB	= /usr/lib/libblas.a

とする。*3
3. あとは make する。

$ make f2clib
$ make blaslib
$ cd SRC
$ make
$ cd ../TESTING/MATGEN/
$ make
$ cd ../../

4. あとは出来たライブラリを lib ファイルへコピーするだけ…なのだが、lapack_LINUX.a も blas_LINUX.a も出来ていなかった。tmglib_LINUX.a なるものは出来ていた。ATLAS に引き続きここで断念…。

その後

「結論」の方法を他の PC で試したらどうなるだろうか。今後、機会があったら試す予定。
※早速試す機会ができた。研究室の Windows 7 (32 bit) に (32 bit 版の) Cygwin を入れた後に LAPACK を setup.exe だけを使って入れてみた(つまり、「結論」の方法。)がうまくコンパイルできて過去の C プログラムも無事動いた。

*1:もちろん apt-cyg から拾ってこれます。$ apt-cyg find lapack とでもして見つかったやつを apt-cyg install すれば OK。

*2:ちなみにこの問題は以下の連立方程式を解くことと同値。

*3:<作成中> BLAS/LAPACK install on Cygwin x86 (32bit): Gehe's blog にあるように patch を当てる…のか…。よくわからんので無視。