この Web ページでは,Eclipse を使い,GSL (GNU Scientific Library) の機能を呼び出すような C プログラムを作る手順を図解で説明する.
「Windows で GotoBLAS と CBLAS をビルドとインストール」 の Web ページに従って, GotoBLAS のインストールが終わっていること. さらに,
「Windows で LAPACK バージョン 3.2.1 をビルドとインストール」 の Web ページに従って, LAPACK のインストールが終わっていること. ライセンス条項を確認しておくこと.
「Windows で ATLAS と LAPACK をビルドとインストール」 の Web ページに従って, ATLAS と LAPACK のインストールが終わっていること.ライセンス条項を確認しておくこと.
GSL には,BLAS の機能が標準で添付されている. 一方で,BLAS の機能を実装したプログラムは,いろいろあります. GotoBLAS や ATLAS が有名です. GSL を使うとき,BLAS の部分を, GotoBLAS や ATLAS に入れ替えることは簡単です.
以下,2000×2000の行列を2つ作り,乱数を使って値を設定することとと,行列の掛け算を行う C のプログラムを GSL を使って作ってみました.
で比較します.
■ ハードウエアとソフトウエア
コンパイル時のオプションを,「gcc -o a.exe mat3.c -lgsl -lgslcblas」 のように設定します.
コンパイル時のオプションを,「gcc -o a.exe mat3.c -lgsl -lcblas -lgoto」 のように設定します.
コンパイル時のオプションを,「gcc -o a.exe -I/usr/atlas/include mat3.c -lgsl -L/usr/atlas/lib -lptcblas -lptf77blas -latlas -lpthread」 のように設定します.
実行結果
結果からいえること:性能には明らかな差がある.GotoBLAS や ATLAS の方が早い.出てくる答えは同じ (一部分を diff コマンドで確認)
使用したプログラム
「Windows で GSL (GNU Scientific Library) をビルドとインストール」の Web ページでは,GSL の Cygwin パッケージを使わずに,ソースコードからビルドとインストールしている.
所定のコマンドを打ち込むという手順になる.ファイルを編集するなど,判断を迫られることはないです.
要するに, GSL の Cygwin パッケージを使うと,GotoBLAS の組み込み方法を調べるのが面倒です.
※ GSL の Cygwin パッケージには,Atlas が組み込み済みです.それなりに速いです(下図).下の図は,GSL の Cygwin パッケージを使っている場合です.
実行結果
下記の手順で,プロジェクトを新規に作成する.
プロジェクトを作成すると,ワークスペースのディレクトリ(C:\workspace)の下に, プロジェクトのディレクトリができる.プロジェクトのディレクトリの下には,デフォルトでは,Debug, src の2つのサブディレクトリができる.
「ファイル」→「新規 (New)」→「プロジェクト (Project)」
または,パッケージ・エキスプローラ内で,右クリック→「新規 (New)」→「プロジェクト (Project)」
新規プロジェクトのウインドウが開くので, 「C」を展開する.
展開した「C」の下にある 「C プロジェクト」を選び,「次へ」をクリック.
新規Cプロジェクトのウインドウが開くので,プロジェクト名と プロジェクト・タイプを指定する.
プロジェクト名には好きにつけて良いが,全角文字は避ける.分かりやすい名前が良い.
static ライブラリー,共有ライブラリー,実行可能,Makefile プロジェクトから選べる.ここでは,実行可能を展開し,Hello World ANSI C プロジェクト選ぶ.
終わったら,「次へ」をクリック
基本設定はデフォルトのままでよい. 「次へ」をクリック
基本設定はデフォルトのままでよい. 「完了」をクリック
パッケージ・エクスプローラで, プロジェクトHelloの srcを展開すると,ソース・ファイルの一覧が表示される.
※ Hello World ANSI C プロジェクト選んだので,Hello.c がすでに出来ている.
パッケージ・エクスプローラで, Hello.cをダブルクリックすると,エディタが開き, ソース・ファイルの編集ができる. 試しに, 先ほど紹介した 「非対称行列の固有値,固有ベクトルの C プログラム」を コピーアンドペーストする.次のようになる.
プロジェクトのプロパティーを設定し,libgsl の機能が使えるようにする.
Eclipseで,プロジェクトHelloを右クリック. 「プロパティー」を選択. 出てきたウインドウで,「C/C++ビルド」の下の「設定」を選ぶ.
「ツール設定」タブの「Cygwin C Compiler (Cygwin C コンパイラー)」の下の「その他」について,「その他のフラグ」に,次の設定を追加
「その他のフラグ」に「-I/usr/atlas/include」を追加
「その他のフラグ」の設定は必要ない
「ツール設定」タブの「Cygwin リンカー」の下の「ライブラリー」について,「ライブラリー」に,次のように設定する.
「ライブラリー」にgsl, ptcblas, ptf77blas, atlas, pthreadの 5つを設定する. 「ライブラリー検索パス」に「/usr/atlas/lib」を設定する.
gsl, cblas, gotoの 3つを設定する
CTRL + B(コントロールキーを押しながら「B」) または,「プロジェクト」メニューで「すべてビルド」
※ ビルド時のエラーや警告があれば, Eclipse 内の問題・ビューに表示されるので確認する. 問題・ビューのエラー一覧の中で,エラーをクリックすると該当箇所が強調表示される.
デフォルトでは,実行ファイルは, C:\workspace\Hello\Debug\Hello.exe に出来る.(「Hello」はプロジェクト名)
Eclipse のプロジェクト・エクスプローラで 「Debug」を展開.Hello.exe を右クリックし,「実行」から「ローカル C/C++ アプリケーション」を選ぶ. 数十秒ほど待つと,コンソールに大量に結果が出てくる.赤いボタンを押して,プログラムを強制終了させる.
※ 実行がうまくいかない場合, C:\cygwin\bin\cygwin1.dll を C:\Windows\System32 にコピーすることを忘れている可能性がある.
本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.
問い合わせ先: 金子邦彦(かねこ くにひこ) ![]()