- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!Fotran->LLVM IR->C
Fortanのプログラム(なすぱら)をLLVMの中間表現にして、
そこからC言語に変換して、MIPSのクロスコンパイラでバイナリ生成という
長い道のりでプログラムを実行してみた。
だいたい、↓のような感じでコンパイル
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-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
まず、うまくいくというのがすごいなあ、と。
で、実行時間の比較をしてみると、仕方ないのだけど、割と遅くなってしまっている。
まず,うまくいくというのがすごいなあ,と.
で,実行時間の比較をしてみると,仕方ないのだけど,割と遅くなってしまっている.
{{ref_image comp-gcc-llvm_s.png}}
{{ref_image comp-gcc-llvm_ratio_s.png}}
コアの部分だけLLVM介するとかやってみるかなあ。
llvm-gfotranのところで最適化しない方がいいとか,ちょこちょこ試してみたけど,
実行時間におけるたいした違いは確認できなかった.
ここで,BT,LU,SPはいくつかのFotranソースから構成されているベンチマーク...
うーん,コアのソースの部分だけLLVM介するとかやってみるかなあ.
ちなみにコード数
{{ref_image loc_s.png}}
...コード数っていう,ざっくりな割に,なんとなくの相関がみられるのが面白い
!日々メモ
* 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)