トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

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)