単純なllvm / libjitテストパートIII、今もオウム

この記事は記事の続きです:

簡単なテストlibjitとllvm

シンプルなテストllvm / libjitパートII、同じ+ gnu稲妻



入門カード





以前の記事では、エラトステインのふるいの例を使用して、llvm、libjit、およびgnu lightningのパフォーマンスを調べました。 検討されるすべてのオプションは、発射速度が良好な低レベルのライブラリですが、本質的に特殊なアセンブラーであり、たとえば、文字列を使用した作業を自分で実装する必要があります。



DSLのバックエンドとしてプログラムに含めることができる他の仮想マシンがあります。 たとえば、 エイプリルフールのジョークから生まれたオウム -未来の真珠の基礎。



文字列、ハッシュテーブル、無次元配列、ガベージコレクション、コンソールおよびファイルI / O、その他の便利な機能など、さらに多くの機能があります。 質問-これらのすてきな追加すべての価格(パフォーマンスの低下)は?



やってみましょう。



オウムのエラトステネスふるい




前と同様に、これらは2つの手順であり、そのうちの1つ(エラト)はアルゴリズム自体を実装し、2つ目(メイン)は1〜50_000の素数を検索するために100_000回エラトを開始します。



.loadlib 'trans_ops'

.loadlib 'math_ops'



.sub 'erato'

.param int n

$P0 = new 'ResizableIntegerArray' # a = P0

$P0 = n

$N0 = sqrt n # q = I0

$I0 = floor $N0 # i = I1

$I1 = 2

for_cond:

if $I1 > $I0 goto for_end

$I2 = $P0[$I1]

if $I2 == 1 goto end_if

$I3 = $I1 * $I1 # j = I3

while_cond:

if $I3 > n goto while_end

$P0[$I3] = 1

$I3 += $I1

goto while_cond

while_end:

end_if:

$I1 += 1

goto for_cond

for_end:

.end



.sub main :main

$I10 = 0

for_test1:

if $I0>100000 goto for_end1

erato(50000)

$I0 += 1

goto for_test1

for_end1:

.end











そして-これをすべて実行する制御プログラム:



001 : #include <parrot/embed.h>

002: #include <parrot/extend.h>

003:


004: int main ( int argc, char * argv[])

005: {

006: Parrot_Interp interp;

007: Parrot_PackFile pf;

008:

009: interp = Parrot_new( NULL );

010: if ( ! interp) {

011: return 1 ;

012: }

013:

014: pf = Parrot_pbc_read(interp, "erato.pbc" , 0 );

015: Parrot_pbc_load(interp, pf);

016: Parrot_runcode(interp, argc, argv);

017:

018: Parrot_destroy(interp);

019:

020: return 0 ;

021: }

022:








したがって、新しいオプションをコンパイルします。

parrot -o erato.pbc erato.ptr

gcc -O2 erato.c -I /usr/include/parrot/2.0.0/ -lparrot -o erato







そして起動:

/usr/bin/time -f "%U" ./erato

2361.2







著者の思考運動の産物と成果



合計、テーブルは次の形式を取ります。



VM 秒単位の実行時間(少ない=良い)
LLVM 13.77
リブジット 14.17
GNUライトニング 32.59
パロット 2361
そして情報だけのために:
gcc -O0 50.09
gcc -O1 13.79
同様のperlプログラム 4288




つまり、この例では、parrot仮想マシンの実行速度はjitマシンの150倍です。 ただし、pearlプログラムの2倍の速度です。 これは実際には良いニュースです。オウムをベースにした真珠の次のバージョンは今日よりも速く動作するようです...しかし、オウムは明らかに速度が必要な場合に考慮される他のマシンの代替品ではありません。



最終和音





一般に、オウムは非常に心地よい印象を残し、すべてが説明どおりに機能し、落とし穴はなく、可能性は海であり、ドキュメントは良好です。 llvmの後にそれを書くことは喜びです。 それで、私自身のために、私は次の推奨事項を作りました。






All Articles