差分表示


*&date(Y-n-j[lL],2010/3/21); llvm lliでの実行
*&date(Y-n-j[lL],2010/3/21); LLVM lli での実行

そういや LLVM の VM(lli) ってどれくらいなんだろうか、とちょっと気になったので
[[3/12の>雑記/2010-03-12]]を lli で実行してみた。

llvm-gccでコンパイルして、
llc で生成したネイティブアセンブラソースからexeを作ったもの、と、
lli で実行したもの。
llcからのexe結果は不精して、[[前回:雑記/2010-03-12]]のからコピペ。
今回試した lli はそのときより数日新しいllvmになっていたり
多少測定環境がぶれていたりするけれど、おおざっぱな雰囲気をみる分には...で。
([[ソース&exe>http://www.6809.net/tenk/html/prog/cc_test/cc_test_lli.zip]])

,コンパイラ,Bilinear 拡大(ミリ秒), 安易 インタプリタ(秒), quick sort(μ秒), QSORT(μ秒), Dhrystone/sec, Whetstone (MWIPS)
,llcでasm→exe, 105.8   , 27.6            , 19871, 35860, (25056376), 1525.463
,lliで実行    , 103.6   , 26.0            , 17499, 39343, (26184864), 1530.688

大筋 lliの実行結果は llc でネイティブアセンブラ生成した場合と同様の結果のよう…

仕組みからすれば、lliのほうは測定範囲外の部分で余分に時間かかってる
(実行時コンパイルしてる)だろうが、
.bcサイズに対する今時の実行環境のパワーを思えば 
たいしてペナルティがあるわけでなく、ってとこ、か?

//lli ってビットコード(.bc)を随時実行(+コードキャッシュ)とかじゃなくて
ロード時に一括コンパイルしているのかな?)

ネイティブ実行以外興味なくて、最初にちょろっと試しただけで、以外に速いかも
なんて思ってたのだけど、以外に、どころじゃ、なかった。

LLVM関係の記事(appleのopenglな件とか)に書かれていることを思い返せば、
こういうことなんだろうけど、実感してなかった、というか、わかってなかったことを実感です。


----
#comment