Diary/2010-1-25
Fotran->LLVM IR->C
Fortanのプログラム(なすぱら)をLLVMの中間表現にして,
そこからC言語に変換して,MIPSのクロスコンパイラでバイナリ生成という
長い道のりでプログラムを実行してみた.(ISは,C->LLVM IR->C)
だいたい,↓のような感じでコンパイル.
BT,LU,SPは各ソースコードからまずOBJ作ってリンク
# compile OBJ=`echo $1 | sed 's/\.f$/.o/g'` CBE=`echo $1 | sed 's/\.f$/.cbe.c/g'` LL=`echo $1 | sed 's/\.f$/.ll/g'` BC=`echo $1 | sed 's/\.f$/.bc/g'` /usr/local/llvm-gcc-4.2-2.6-x86_64-linux/bin/llvm-gfortran \ -S -emit-llvm -I../../lib/MPI -O2 -Wall $1 -o $LL /usr/local/llvm-2.6/bin/llvm-as -o - $LL | /usr/local/llvm-2.6/bin/opt -std-compile-opts -o $BC /usr/local/llvm-2.6/bin/llc -march=c $BC /usr/local/mipsel-gcc4.2/usr/bin/mipsel-linux-gcc -O2 -Wall -I../../lib/MPI -O2 -c $CBE -o $OBJ # link /usr/local/mipsel-gcc4.2/usr/bin/mipsel-linux-gcc \ -O2 -Wall -static \ -o ../bin/cg.S.4 \ ../common/print_results.o ../common/timers.o ../common/randdp.o \ ../../lib/MClib.o ../../lib/MPI/mpi.o ../../lib/MPI/mpif.o \ $OBJ \ -lgfortran -lgfortranbegin -lm
まず,うまくいくというのがすごいなあ,と.
で,実行時間の比較をしてみると,仕方ないのだけど,割と遅くなってしまっている.
llvm-gfotranのところで最適化しない方がいいとか,ちょこちょこ試してみたけど,
実行時間におけるたいした違いは確認できなかった.
ここで,BT,LU,SPはいくつかのFotranソースから構成されているベンチマーク...
うーん,コアのソースの部分だけLLVM介するとかやってみるかなあ.
ちなみにコード数
...コード数っていう,ざっくりな割に,なんとなくの相関がみられるのが面白い
日々メモ
- VMWareFusion上のdebianとのファイル共有が面倒になったので,すっぱりとhomeを/mnt/hgfs/miyoに変更.楽になった. (Mon Jan 25 17:51:18 2010 +0900)
- ParsecのblackscholesをC->LLVM->Cでコンパイルしたバイナリの実行時間は2%増.これは嬉しい. (Mon Jan 25 17:40:59 2010 +0900)
- やっぱりLLVMでFotran->C変換したプログラムは断然遅い.コア部分だけ変換するようにしないとだめだな... (Mon Jan 25 14:38:01 2010 +0900)