新しいものを表示

自作VMこれだ><;
twitter.com/orange_in_space/st
スクリーンショットからすると足し算だけじゃなく加減乗除できたっぽい?><;

ILGeneratorで作って実行するのは前にやった事が><(互換性がある足し算しか出来ないVM作って「同じ!><」ってするためにやったような記憶が><;)

orange さんがブースト

[雑記] 動的コード生成のパフォーマンス - C# によるプログラミング入門 | ++C++; // 未確認飛行 C ufcpp.net/study/csharp/misc_dy

せっかくだからちょっとF# 弄ってみたけど、let hoge:single = 1f って書いたら、1.0f って書けって怒られた・・・><(サフィックスの存在意義・・・・><)

LINQPad入れてみたけど、出来上がったものをMSILで見ることは出来るけど、書いてアセンブルは出来ない・・・?><

たぶんだけど、JavaVMも同じくスタックマシンだから、cs版をJavaに、MSIL版をJavaバイトコードアセンブラ(?)にほぼそのまま移植したら同じくらいの差が出そう・・・?><

ものすごく前にマストドンで「MSIL(CIL)を直接書いて速くなる場面なんてあるのかな?><」って書いた記憶あるけど、一応あることはあるんだね・・・><(たぶん実用的な意味は無いけど><;)

オレンジはdnSpyで中身見てた><

orange さんがブースト

あとReflexilとかdnSpyでILいじって遊ぶのも楽しいです

orange さんがブースト

これなにがいいって、命令にカーソル乗せると意味が表示されるんですよ

スレッドを表示
orange さんがブースト

あれ?><; 最適化無しで試したら
C# 版: 3295ms
MSIL版: 1453ms
System.Math: 63ms
って結構差が・・・><;

orange さんがブースト

(Delphiじゃなくbccだったかもしれない・・・><(よく覚えてない><;))

でも、生まれて初めてアセンブラで書き直して高速化に成功できたから一応うれしい><(DelphiでMMX使って数命令の短いインラインアセンブラなコードで速くした事なら前にあるけど、処理丸ごとアセンブラで書いて速く出来たのは初めて><)

やっとdllに出来たのでベンチマークしてみたけど、10000000回ループで、
C# 版: 1477ms
手書きMSIL版: 1458ms
って速くはなったけどものすごく微妙><; そして
System.Math: 3ms
・・・・・・・・><

dllとしてアセンブルしてもなぜかVSのオブジェクトエクスプローラで中身が表示されない・・・><

ループの中身、C#バージョンではnop抜いて27命令だったのを、19命令に減らせたっぽい><

なんか頭の使い方がパズルっぽくて、普段のプログラミングよりもテラリアとかで計算機の回路作って遊んでる時に近くておもしろかった><

古いものを表示
:realtek:

思考の /dev/null