金子邦彦研究室インストールCygwin の活用Windows で GotoBLAS2 バージョン 1.13 と CBLAS をビルドとインストール(Windows 上の Cygwin を使用)

Windows で GotoBLAS2 バージョン 1.13 と CBLAS をビルドとインストール(Windows 上の Cygwin を使用)

GotoBLAS とは,ATLAS と並んで,BLAS 実装の決定版です. (所定の条件下で,無料で使えるソフトウェアの範囲では,そう言い切ってしまって良いと考えています.ライセンス条項は各自でよく確認すること.どちらもソフトウェアです).

CBLAS は,それらの BLAS 実装を,C 言語から使えるようにするためのプログラムです(本来の BLAS 実装は FORTRAN).

このページでは, GotoBLAS と CBLAS のインストール手順を説明する.

GotoBLAS は「フリーソフトウェア」ではない.ダウンロードしたら、同封のライセンス条項をよく確認すること. 特に、商用や業務での利用でも十分に気をつけてください.また、 ライセンス条項に定められている 再配布の条件にも十分に気をつけてください。 ライセンス条項を理解せずに, バイナリやソースコードを人にあげること(再配布すること)はできません.(「パソコンを借りてインストールしてあげる」こともやめましょう).

※ GotoBLAS を octave に組み込む方法は,別の Web ページなどで説明する.

BLAS の主な機能(ごく一部を紹介)

関連する外部ページ

◆ 謝辞

「Octave for Windows メモの筆者」様 (http://www40.atwiki.jp/gnuoctavejp)に、 MinGW コンパイラ等の情報をいただきました。ありがとうございます

前準備

前もってインストールしておくべきソフトウェア

事前に決めておく事項

前もって調べておく事項

インストール手順

GotoBLAS と CBLAS のコンパイルに必要なソフトウェア等を Cygwin のパッケージを使ってインストール

Cygwin のセットアッププログラム setup.exe を使って, GotoBLAS と CBLAS をソースプログラムからコンパイルするのに必要となる他のソフトウェアをインストールする.簡単にインストールできる.

  1. セットアッププログラムの開始
  2. パッケージ選択画面 (Select Packages)」まで進む
  3. パッケージ選択画面で,パッケージを選ぶ

    下記のパッケージを選ぶ.

    gcc4, gcc4-fortran などは,必ず最新バージョンを選ぶ (gcc バージョン 4.3 系列では、GotoBLAS のビルド時にエラーが無くても、あとで不具合が見つかる場合がある)

    [image]

    libstdc++ なども,必ず gcc とバージョンを一致させておく

    [image]
  4. 終了の確認

GotoBLAS のインストール手順

関連する外部ページ】http://jasp.ism.ac.jp/kinou2sg/contents/RTutorial_Goto1211.pdf

  1. GotoBLAS の Web ページ: https://www.tacc.utexas.edu/research-development/tacc-software/gotoblas2
  2. ダウンロードしたいので,「Download GotoBLAS2 Code」をクリック(現在リンク切れ)
  3. ダウンロードしたいので,「click here」をクリック

    [image]
  4. ダウンロードが始まる

    [image]
  5. ダウンロードしたファイルを展開(解凍)

    ここから先の操作は,Cygwin のコンソール で行う.

    まず,ダウンロードしたファイルを,C:\cygwin\tmp の下にコピー.

    次のように「tar -xvzof ...」で展開(解凍)する.

    tar -xvzof GotoBLAS2-1.13_bsd.tar.gz
    

    [image]
  6. ライセンス条項の確認

    ライセンス条項を理解できないのならば使用してはいけない(下につけたスクリーンショットではなく、必ず、同封のライセンス条項を確認してください)

    cd GotoBLAS2
    cat 00License.txt
    

    [image]
  7. (オプション)CPU の種類の確認

    CPU の種類を確認するために「cat /proc/cpuinfo」を実行 下記のように「processor :」の行が複数あるときは,マルチプロセッサあるいはマルチコアという意味になる.

    [image]
  8. インストールの方法については 02QuickInstall.txt 等を確認する
  9. ビルド

    Cygwin のコンソール で,make を実行

    ■ GNU のコンパイラを使う場合の実行例

    まずは gcc のバージョンを確認しておく(gcc バージョン 4.3 系列では、ビルド時にエラーが無くても、あとで不具合が見つかる場合がある)

    [image]

    ※ なお CC=gcc-4, FC=gfortran-4 と指定するよりは CC=gcc, FC=gfortran の方が良さそう.詳しくは Makefile.sysstem

    ※ なお 「USE_OPENMP=1」を付けると途中で止まる場合があります.

    ○ マルチスレッド版が欲しい場合の実行例

    make -j 2 BINARY=32 USE_THREAD=1 CC=gcc FC=gfortran
    

    [image]

    ○ シングルスレッド版が欲しい場合の実行例

    make -j 2 BINARY=32 USE_THREAD=0 CC=gcc FC=gfortran
    

    [image]

    ■ MinGW のコンパイラを使う場合の実行例

    まずは i686-w64-mingw32-gcc のバージョンを確認しておく.

    [image]

    make -j 2 BINARY=32 USE_THREAD=1 CC=i686-w64-mingw32-gcc FC=i686-w64-mingw32-gfortran
    
    

    [image]
  10. ビルドの終了の確認

    ■ GNU のコンパイラを使う場合の実行結果例

    [image]

    ■ MinGW のコンパイラを使う場合の実行結果例

    「make BINARY=32 USE_THREAD=1 CC="i686-w64-mingw32-gcc -mthreads" FC="i686-w64-mingw32-gfortran -mthreads"」を実行した場合の実行結果例

    [image]
  11. インストール

    ■ GNU のコンパイラを使う場合の実行例

    dll ファイルもコピー(役立つ可能性がある)

    cp *.a /usr/lib
    cp exports/libgoto2.dll /usr/lib/libgoto2.dll.a
    cp exports/libgoto2.def /usr/lib/libgoto2.def
    

    [image]

    ■ MinGW のコンパイラを使う場合の実行例

    cp *.lib /usr/lib
    cp exports/*.dll /usr/lib
    cp exports/*.def /usr/lib
    cd /usr/lib
    cp libgoto2.dll libgoto2.dll.a
    

    [image]
  12. (オプション)lapack のビルドとインストール
    1. まず、lapack-3.1.1/make.inc を編集.BLASLIB, FORTRAN を設定

      ■ GNU のコンパイラを使う場合の設定例

      FORTRAN = gfortran-4 -fimplicit-none -g -fexceptions -m32 -mthreads
      ...
      TMGLIB = libtmglib_LINUX.a
      

      [image]

      ■ MinGW のコンパイラを使う場合の設定例

      FORTRAN = i686-w64-mingw32-gfortran -fimplicit-none -g -fexceptions -m32 -mthreads
      ...
      LAPACKLIB = liblapack_LINUX.lib
      LAPACKLIB_O = liblapack_LINUX_p.lib
      ...
      BLASLIB = /usr/lib/libgoto2.lib
      TMGLIB = libtmglib_LINUX.lib
      

      [image]
    2. 次の手順でビルドとインストール

      ■ GNU のコンパイラを使う場合

      cd lapack-3.1.1
      make clean
      make
      cp liblapack_LINUX.a /usr/lib
      cp libtmglib_LINUX.a /usr/lib
      

      [image]

      ■ MinGW のコンパイラを使う場合

      cd lapack-3.1.1
      make clean
      make
      cp liblapack_LINUX.lib /usr/lib
      cp libtmglib_LINUX.lib /usr/lib
      

      [image]

性能測定の例

■ ハードウェアとソフトウェア

■ 実測値の例 (Intel Core2 Duo E8500)

【要点】 Octave は,ソースコードからビルド, Intel Core2 Duo E8500, Cygwin, Windows XP, Octave バージョン 3.0.3 + GotoBLAS バージョン 1.26

[image]
(a) 行列と行列の積
[image]
(b) 分散共分散行列
[image]
(c) 分散共分散行列の固有値と固有ベクトル(主成分分析)
[image]
(d) 条件分岐プログラム( 2ch の「データ解析ツールoctaveを語ろう」掲示板で話題になっているもの.この掲示板のプログラムを引用している)

実測値

CBLAS のインストール方法

  1. BLAS Technical Forum の Web ページを開く

    http://www.netlib.org/blas/blast-forum/

  2. Reference implementation for the C interface to the Legacy BLAS」をクリック.ダウンロードが始まる.

    [image]
  3. ダウンロードしたソースコードを,/tmp の下に展開./tmp/CBLAS ができる

    [image]
  4. (オプション)もし Makefile.in が存在しないときは ln -s Makefile.LINUX Makefile.in を実行

    [image]
  5. Makefine.in を編集

    CC と FC については,GotoBLAS をビルドしたときに使われた C, FORTRAN コンパイラを指定する.

    ■ GNU のコンパイラを使う場合の設定例

    BLLIB = /usr/lib/libgoto2.a   ・・・  GotoBLASのパスを指定
    
    CC = gcc
    FC = gfortran
    

    [image]

    ■ MinGW のコンパイラを使う場合の設定例

    BLLIB = /usr/lib/libgoto2.lib   ・・・  GotoBLASのパスを指定
    
    CC = i686-w64-mingw32-gcc
    FC = i686-w64-mingw32-gfortran
    

    [image]
  6. ビルド

    make all
    

    [image]
  7. ビルド結果の確認

    ■ GNU のコンパイラを使う場合の実行結果例

    [image]

    ■ MinGW のコンパイラを使う場合の実行結果例

    [image]
  8. インストール

    cd /tmp/CBLAS/lib
    cp cblas_LINUX.a /usr/lib/libcblas.a
    cd /tmp/CBLAS/include
    cp *.h /usr/include
    
  9. サンプルプログラムのテスト実行

    ■ GNU のコンパイラを使う場合の実行例

    cd /tmp/CBLAS/examples
    gcc cblas_example1.c -lcblas -lgoto2
    ./a.exe
    

    [image]

    ■ MinGW のコンパイラを使う場合の実行例

    cd /tmp/CBLAS/examples
    i686-w64-mingw32-gcc -I/usr/include cblas_example1.c -L/usr/lib -lcblas /usr/lib/libgoto2.lib
    ./a.exe
    

[image]

cblas_example1.c を引用すると次の通り。