2020年5月7日木曜日

嗚呼、またやってしまった

C#という言語とVB.NETという言語はバックボーンを.netとする2卵生双生児のようなものである。
で、コンパクトな書き方ができるっていう理由でC#を使うようにしてきた。
しかし本当にVB.NETでC#と同じ速さが出るのか体感したくてちょっと書いてみた。
またしてもmandelbrot描画なのだ。
これが速い方、で次が
こちらが遅い方。この2つの画面、ソースは2,3行違うだけ
で、実行速度は199倍(ま、ほぼ200倍やね)の差がついた。
※厳密なことを言えば遅い方のpictureBoxのgraphicに書く方はsetpixcelが使えなかったのでdrawLineで元のx,yからx+1,y+1に直線を引いてみたらちょっと黒い発散しない領域が侵食されて見える。これは速度とは無関係
どうしてこんなに速度差がでたのかというと遅い方はpictureBoxのcreategrphicsで得たグラフィックアエリアにそのまま描画をしたもので1ドットごとに画面の再描画がされていると思う。一方速い方はべつに画面と同サイズのビットマップを用意してそちらに書いてからpictureBoxに張り付けた。忘れていたなあダブルバッファリングとか・・・
で、295msはc#のオブジェクトよりも速い。
(さらにコンパイルされたbinのreleaseのフォルダのexeで試すと160mSで更に速い)

VB.NETといえどもBASIC・・どういう訳か書いていて肩の力が抜ける気がするのはなぜなのだろう。原点回帰のようなものか?
ただifの直後の丸かっこがないとか各行末に;がないとかのせいで全体が見やすく感じるのとvisual studioのエディタが強力でfor,ifなどの終端部分をほとんど補ってくれるのでさほどend系のタイピングが多くないこともわずらわしさの解消になっているのかも・・
※visualbasic.netとc#は本来全く同じコードを吐くことのできる言語なのだけどvisualbasic.netのほうがVBから流れてきたユーザを考慮して敷居が低くなるような配慮があちらこちらにあるようだ。その1つが①Microsoft.Viasual.Basic ②System ③System.Collections ④System.Collections.Generics ⑤System.Data ⑥System.Drawing ⑦System.Diagnostics ⑧System.Windows.Forms よく使いそうな8つのライブラリーをあらかじめImportするようになっている(逆に言えばこれら以外が必要になった時に最初はものすごく悩むだろうね)

いろいろ調子に乗ってc#のmandelbrot描画で目下最速のアンマネージドアレィのさらなる高速化を狙ってparallel化してみた。
使用前
所要時間:42mS 立派!これをparallel化すると
なんですと!この他にも妙に歪んだものや2重化のものなど実行のたびに様相は変わるがどうしてこうなった!

ちょっと悔しかったので他の環境に逃げてしまった。
次の画像はLSI-C試食版簡易グラフィクスライブラリを使ったもの
描画の所要時間は5.5秒くらいで16bitCPUのMS-DOS系のエミュレータの実行速度とは思えないほど高速だ。LSI-Cもグラフィクスライブラリーも使い方も明快だしドキュメントも日本語でしっかりとあるので使いやすい。強いて言えばvirtualboxのスクリーンショットがちょっと取りにくかったけどこうして画像を得ました。

そしてvisual studioでC++を使ってDxLibと組み合わせてみた。
流石のスピードです。速い方のPC m-bookで計測すると26mSecと出る。やっぱりゲーム作成を意識したライブラリーは速いこと

(200519)
またやってしまったと言えば、またしてもおもちゃを買った。
wio terminalというガジェットである。
日本製しかこの手のものが無かったときはしばしば数万円単位で散在してたが昨今の傾向として某大国の影響なのか安くなった。
この内容で@3,700円は実にお買い得なのである。
さっそく開封の儀もそこそこにarduinoのIDEに環境を作ってmandelbrotを入れてみた。一部描画関数の呼び方などを修正するだけなのですぐに実働までこぎつけた。
320x240の2.4"LCDが内臓なのでarduinoとかよりも断然楽しい。
描画時間1.8秒ほどはこの手のものとしてはそうとう速いと思う。
実はLCDのサイズをうっかりコピペ元のVGA向けのソフトのままで動かして画面に期待した画像の1/4のエリアが映っていたときは驚いた。
しかし描画範囲を超えて計算させてもエラーで止まるわけでもなくしれっと描き切るあたりは面白い。またスピードもさほど変わらない。
描画時間が1830mSecと出ているがなにも描画しない画面の初期化だけを測定しても400mS以上かかるのでこの数値はかなりのものだと思う。

またいろいろと遊んでいくことになろう。





0 件のコメント:

dosvaxj3が更新されていた。

 最近、エミュレータ系をあまり触っていなかったのだけど久しぶりに見てみたらタイトルのようにdosvaxj3が更新されていた。 on emulatorでセルフにcなどのソースを書いて実行するのに母艦側の特定のフォルダをドライブとしてマウント出来たり普通に母艦のimeで漢字が入力でき...