intel fortran + PARDISO → gfortran + SuperLU

Screenshot from 2015-11-30 00-49-08

疎行列連立一次方程式(Ax=B)の計算には,MKLに収録されている”PARDISO”を使っていたが,環境をintel fortran + MKL からgfortran + Lapack95 に移行したのに合わせて,”SuperLU”に移行したのでメモ.(OSは,fedora 22)

まず,SuperLUをインストール.

#dnf install SuperLU

次に,正常にインストールできていることを確認する.

サンプルコードを入手するため,まずSuperLU本体をココ(http://crd-legacy.lbl.gov/~xiaoye/SuperLU/)からダウンロードする.

次に/SuperLU_*/EXAMPLE (*はSuperLUのver.)の中に入っている,”superlu.c”を以下コマンドでコンパイル/実行する.(ここで,superlu.cの冒頭を”int main(int argc, char *argv[]”と書き換えないとコンパイルは通らないので注意.)

$gcc -lsuperlu -I/usr/include/SuperLU superlu.c

$./a.out

正常なら上記コンパイル及び実行ができるはず.

 

C言語からはSuperLUを直接利用できる.しかし,FortranからSuperLUを使用する場合,ラッパーを書いてあげる必要がある.(/SuperLU_*/FORTRAN 内のファイルを参考にすると良い)

そこで,ラッパーとなるCプログラム(dgssv.c)と,SuperLUを呼び出すFortranプログラム(test.f90)を書いてみた.

なお,test.f90では例として,

A =
1 2 3 0
0 0 0 1
2 0 0 2
0 1 0 1

B =
2
3
1
2

の疎行列連立方程式を解くこととしている.

SuperLUでは,CRS形式またはCCS形式(疎行列の格納方法はココを参照)等の疎行列格納方法を使用できる.今回はCRS形式を使用することとしている.

もし,CCSなど別の形式を使用したい場合は,dgssv.cの中身を書き換える必要がある.(superlu.cはCCS形式で計算しているので,比較すればどのあたりを変えればいいかわかるはず.)

また,FortranからC言語で書いたプログラムを呼ぶ場合は,配列の処理等々注意する必要がある.(ココを参考)

dgssv.c と test.f90をコンパイルするには,以下コマンドを叩く.

$gcc -c -I/usr/include/SuperLU dgssv.c

$gfortran -lsuperlu -lblas dgssv.o test.f90

うまくコンパイルできていれば,”a.out”ができているので,実行すれば以下が表示されるはず.

$./a.out

Success dgssv
-2.5000000000000000
-1.0000000000000000
2.1666666666666665
3.0000000000000000

 

参考だがSuperLUでは,様々な設定ができる.具体的にはdgssv.cの中の以下で設定している.

set_default_options(&options);
options.ColPerm = NATURAL;

上記では,まずすべての設定をデフォルトとし,そのうち”ColPerm”の内容だけ,”NATURAL”に変更している.

なお設定項目の詳細は,/SuperLU_*/DOC 内のSuperLUのマニュアルに記載してあるので参照のこと.

 

参考

http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html

http://netlib.org/linalg/html_templates/node91.html

intel fortran + MKL → gfortran + Lapack95

Screenshot from 2015-09-07 01-50-18

intel fortran + MKL から,gfortran + Lapack95 に移行したのでメモ.(OSは,fedora 22)

まず,gfortran と LAPACK をインストール.(BLASも依存関係にあるので,同時に入るはず)

#dnf install gcc-gfortran lapack lapack-devel

問題なくインストールできていれば,DGESVのサンプルコード(software.intel.com)を “test.f” に保存して

$gfortran test.f -lblas -llapack

でコンパイルできるはず.

 

次に,LAPACK95のソースをNetlib(http://www.netlib.org/lapack95/)からダウンロードし,”lapack95.tgz”を適当なところに解凍する.

“LAPACK95″というディレクトリができているはずなので,その中で以下を実行.

$ mv SRC/makefile SRC/Makefile
$ mkdir lapack95_modules

“make.inc” を以下の通り編集.

FC = gfortran
FC1 = gfortran

OPTS0 = -O3
MODLIB = -I./../lapack95_modules
OPTS1 = -c $(OPTS0)
OPTS3 = $(OPTS1) $(MODLIB)
OPTL = -o
OPTLIB =

LAPACK_PATH = -L/usr/lib64

LAPACK95 = -llpack95
LAPACK77 = -llapack
TMG77 = -ltmglib
BLAS = -lblas

最後に,以下を実行してLAPCK95をコンパイル.

$ cd SRC
$ make single_double_complex_dcomplex

これで”lapack95.a” と “lapack95_modules” 内に,モジュール中間ファイルが作成されているはず.

後は,適当なディレクトリ(例えば”/usr/lib64/lapack95″, “/usr/include/lapack95″)を作ってその中にlapack95.aとlapack95_modulesをコピー.

# mkdir /usr/lib64/lapack95
# mkdir /usr/include/lapack95

# cp lapack95.a /usr/lib64/lapack95/liblapack95.a
# cp lapack95_modules/*.mod /usr/include/lapack95

そんでもって “liblapack95.a”に対し,pathの通っている”/usr/lib64″へシンボリックリンクを貼る.

# ln -s /usr/lib64/lapack95/liblapack95.a /usr/lib64/liblapack95.a

これでLAPACK95を使う準備完了のはず.ココ(http://nagappi.hatenablog.com)のサンプルコードを,”inv.f90″に保存して以下が実行できていればOKな「はず」.

$ gfortran inv.f90 -llapack95 -llapack -lblas -I/usr/include/lapack95/

参考

http://www.rcs.arch.t.u-tokyo.ac.jp/kusuhara/tips/linux/fortran.html

http://nagappi.hatenablog.com/entry/20121227/1356582470

X201s購入

コペン納車から4ヶ月ちょいで,1万3000キロ走る暴挙に出てしまいながらも,修士論文書き上げた・・・


自分へのご褒美として,

ThinkPad X201s を買ってしまいました.価格は,DVDドライブ付きドッグが付いてきて14万円代.

とりあえず,fedora14インストールして,無線から指紋認証まで問題なく使えている.

ただし,Compizまわりがやや難あり.

液晶が1440×900という高解像度液晶なので,ワイド液晶でもそんなに気にならないかな.

初めて,sを末尾に冠するモデルを使ってみたが,4セルということもあり,かなり軽く感じる.電池のもちはそんなに良くないが,20万出して某パナ製ノートPC買うより断然満足考えられるのではないか・・・

英語のUSBキーボードも購入.X201sより打鍵感はいい.

研究室メンバーで上海行ってきた,深セン行きたい気持ちもあったけど,自分以外は興味ないみたいで却下された.

第1回モバイルコンピューティング研究会

本日,@shoinoueさん主催の「勝手にThinkPad祭り in TDU」改め,「第1回モバイルコンピューティング研究会」に参加しました.(Twitterハッシュタグ #mobile_computer_meeting

@e_fuさんによる東京電機大学の紹介の後,初っ端から@kamiken1968さんの,ThinkPadコレクションの1割が陳列.

中には,貴重なThinkPad 700cや,ThinkPad 701c などThinkPadを代表する機種の数々.


参加者全員のボルテージが上がったところで,各々のThinkPadをはじめとするガジェットへの熱い思いのこもったプレゼンへ.

プレゼンの内容は@shoinoueさんのUstreamの録画をご覧頂くのが早道だろう.

自分の発表内容は以下のPDFファイルをご覧頂きたい.主にガジェット遍歴,ThinkPadと親和性の高いソフトウェアについて述べた.

オー マイ ガジェット!! (1MB PDFファイル)

また途中,@noricmagicさんの「多摩ガラスコートセンター」や,@ragemaxさんの「関東ノートセンター」など,趣味が趣味を越える場面もあり,会場は熱気につつまれた.

今回の催しは,ThinkPad を中心としたガジェットを語るという曖昧なテーマだったこともあり,時間がややかかりすぎてしまった感は拭いきれない.
発表テーマを明確にしまた,プログラムを事前に設定するという改善がなされることになった.

最後になりますが,主催の@shoinoueさん,会場設定等行った@e_fuさん,また参加された他の皆様,本日はお疲れ様でした!

ThinkPadとの出会い

IMG_0994







私は,ThinkPadユーザーとなってまだ2年ほどの新米である.

以前Sony vaio x505 Extream を使用していたが,この機種は大きな犠牲を伴っており,トラックポイントと同様のポインティングデバイスを装備し,このデバイス以外の選択肢が選べなくなるほどの依存性を私にもたらした.

そこで次機購入にあたって

  1. 一般的に流通しているHDDが使え,また容易に交換できる.
  2. メモリが容易に交換できる.
  3. ドライバ関係,付属ソフトウェアが後にdownloadすることができる.
  4. トラックポイント

を重要視した.

この条件は大型機になれば容易に達成できるものであるのだが,小型機では値段等の兼ね合いもあり,予算内で買える機種は限られていた.

そして偶然,秋葉原のヨドバシカメラでThinkPad x61を発見する.このころは,ThinkPadの存在をあまり認識していなかったのだが,上記条件,スペック,価格は私の理想のものでありかつ,愚直なその黒いボディーに惹かれ購入してしまった.

ThinkPadは,うれしい誤算を数多くもたらした.

堅牢さ,Think Vantage,そして他社とは比較にならない安心である.そしてこの安心とは決して,Lenovoのサポートのことだけではないのだ.

それは,他社製品と比較して技術的考察をWEB上に上げているひとが数多くいるということである.(これは日本人だけではない)

このThinkPad関係のコミュニティーは大きな財産であり,私も大きなお世話になっている.

IMG_1014

それらはThinkPadがThinkPadであるということを守り続けてきたからこそ,成り立っているということはThinkPadをよく知るユーザーにとっては明らかなことである.