mrubyでaobenchを動かし、GIFアニメを出力できるようにした
こんばんは、奥さんが出張のため、またまた実家に来ています。3歳ともうすぐ5歳になる息子たちも一時期に比べ、電車での世田谷の自宅から、中野の実家までの移動も楽になってきたことを実感してます。@kjunichiです。
mrubyでaobenchを動かし、動画にする
静止画はつまらないので、高速化して、GIFアニメを出力できるようにした。
成果物
build_config.rb
conf.gem :github => 'kjunichi/mruby-aobench-native' conf.gem :github => 'kjunichi/mruby-mrmagick'
aoanim.rb
s0 = {:x => -2.0, :y => 0.0, :z => -3.5} s1 = {:x => -0.5, :y => 0.0, :z => -3.0} s2 = {:x => 1.0, :y => 0.0, :z => -2.2} gif = Mrmagick::ImageList.new for i in 1..50 Ao.init_scene(s0, s1, s2) img = Mrmagick::ImageList.new img.from_blob(Ao.render) gif.push img s0[:x] = s0[:x] + 0.1 s1[:x] = s1[:x] - 0.03 s1[:z] = s1[:z] + 0.08 s2[:x] = s2[:x] + 0.05 end gif.write("ao.gif")
aobenchのネイティブ化の成果
bm_ao_render.rbは256x256の出力サイズに変更済み。
$ time build/bench/bin/mruby benchmark/bm_ao_render.rb >aorender.ppm real 2m51.207s user 2m48.690s sys 0m1.311s $ time bin/mruby ao.rb fname = ao.ppm real 0m1.555s user 0m1.510s sys 0m0.015s
まとめ
mruby-juliaを作ったので、aobenchをJuliaで動かし、 これをmruby-juliaから使うことで、mrubyのaobenchを 速くしたという記事を書きたかったが、現状の自分のjulia力だと aobenchが速くならず、それならばということで、Cのオリジナル 実装をちょっと変更して、mruby側にオンメモリーでppmを出力 して、mruby-mrmagickをオンメモリーのデータを扱えるようにすることで、 このデータをGIFファイル化が可能となった。
関連記事
12年前の記事
6年前の記事
1年前の記事
aobenchをjuliaでやってみた
おはようございます。長男は初のお泊まり保育を無事終えて、ちょっとたくましくなって帰ってきたきがします。その一方、次男は相変わらず、ウンチしない、言うこと聞かないという状態の@kjunichiです。
背景
mruby-juliaなる謎のmrbgemを作成中、mruby版のaobenchを見つけるも、 Julia版は見つけられなかった
mruby版のaobench
mruby版のaobenchは、mrubyのソースに付属している。
やってみた
比べてみる
time ./a.out real 0m1.569s user 0m1.550s sys 0m0.007s time ~/work/mruby/mruby-julia/mruby/bin/mruby bm_ao_render.rb >mrbao.ppm real 0m21.985s user 0m22.110s sys 0m0.202s time /Applications/Julia-0.4.6.app/Contents/Resources/julia/bin/julia ao.jl real 0m7.082s user 0m7.195s sys 0m0.213s
参考資料
関連記事
- Juliaでaobenchを使って並列処理を試した その1
- GPUを使って、mrubyでのaobenchを更に速くした
- mrubyでaobenchを動かし、GIFアニメを出力できるようにした
- mruby-juliaでPythonもmrubyから呼び出せるようになった
- JulialangにHTTP2サーバーをさせたら
- Julia言語で任意の点を散布図を描画するには
- 1/7がつくる楕円をJulia言語でプロットする
- Juliaで日本語のワードクラウドをやってみた
4年前の記事
3年前の記事
2年前の記事
2年後の記事
TLで「mruby」を検索したらmrubyのコントリビュータになれた
こんばんは、今日は長男が初めて、親元を離れて保育園に泊まるお泊まり保育の日です。@kjunichiです。
TLでいつものようにmruby関連の何か動きはないかチェックしていたら
貼り付けたツイートではmrmagickであたかも検索した様に言ってますが、実際は、「mruby」でツイッター検索した際に発見しました。
mrmagickのエゴサで問題を発見、mrbgemsで一つでもC++なmrbgem(この場合、mrmagick)を組み込むんで、かつ、throw.hをcなmrbgemでincludeするとtryが関数とパースされ困ったことになる模様 https://t.co/6bhrsZdmGS
— kjunichi (@kjunichi) 2016年7月7日
初めてmruby本体にプルリク投げた
マージされた!
プルリク作成時に学んだこと
C99で書くが、VC++を考慮して、変数の宣言はブロックの先頭にする
プルリク出そうとしたら、
mruby/CONTRIBUTING.md at master · mruby/mruby · GitHub
を読めと出てきて、知ることができた。
for ( int i = 0; i < num_files; ++i ) {
このような書き方はダメらしい。
definedはC90から導入された
#ifdefは知っていたが、今回は、条件を複数書きたくて、ググって調査して学んだ。
今回のプルリクで解決したこと
C++とCのmrbgemを混在させた際に、Cで記述されたmrbgemでもMRB_TRYが使えるようになりました。
関連記事
- mrubyでselfを呼び出されたメソッドのインスタンスとして実行するには
- mrubyでPostgres.appを使って、LOBも扱ってみた
- mruby-juliaでPythonもmrubyから呼び出せるようになった
- mrubyでaobenchを動かし、GIFアニメを出力できるようにした
- GPUを使って、mrubyでのaobenchを更に速くした
- mrubyでHTTP/1.1のKeep-Aliveで複数回リクエストを出してみた
- cordovaのプラグインを作ってkindle fireでmrubyを動かしてみた
- mrubyのFile.openをちょっと調べたメモ
- iOSでもCordovaプラグインを作ってmrubyを動かした
- Windowsでmruby-http2を動かした
- Windows(MSVC)でmrubyからGPU対応のTensorflowを動かせた
- mrubyでWebカメラを黒い画面にそのまま表示できるようにした
- WindowsでDLLを作ろうとしてmrb_context_runの歴史を調べた