トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2010-1-25の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!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)