プレイ日記
スー thanks_0u0
ライフゲーム!好きなのですけれど、速度が全然出ないぃ……( ; д ; ) ネットで見かけたビットボードの方法を使って、旧3ds、64x48のフィールドがfps18くらいです。高速化って難しい……
13そうだね
プレイ済み
返信[1]
親投稿
ish owlis1
勉強不足で、ビッドボードによる処理高速化を始めて知りました。 むむむ、なるほど、と。 思えば、プチコン3号で始めて公開させて頂いたプログラムはライフゲームでした。 愚直に2次元配列で実装した所、当然スピードが出なかったので、計算数を減らすため生きているセルのみを評価するように修正、随分スピードが出るようになりました。 (速度差はセル数依存なので参考になりませんが、10倍以上のスピード差は出ました。どれだけ無駄な処理があったんだよと) データ構造から違うので少し手間がかかりますが、スピード差を検証してみたい所です。
1そうだね
プレイ済み
返信[2]
親投稿
すう SU-KUN
ビットボードと言う物を知らず、検索もしてないので憶測ですが、数個をまとめて、テーブル化すると言う感じなのでしょうか? プチコン3号は、基本的にそれなりに高速ですが、単純な加算やメモリの読み書きでも一定のオーバーヘッドがあるため、マルチメディア系のブロック演算のような処理は思った以上に遅くなるようです。 これは、お絵描きソフトでも同じで、ペンの形状をテーブル化して処理しようとしても、結局最後は1ドットずつ描かなくてはいけないので、思ったほど速度が出ませんでした。テーブルの参照自体が遅いのですね。 「ある配列と、別の配列を決まった演算式で計算し、別の配列に入れてくれる命令」、みたいなのがあれば、オーバーヘッドは大幅に削減され、かなり高速化できるんじゃないかと思ってるんですけどね。ライフゲームに応用可能かどうかはわかりませんが…
1そうだね
プレイ済み
返信[3]
親投稿
ΖΕΧ ZEX256
>旧3ds、64x48のフィールドがfps18くらい これはかなり速い 自分のライフゲームでは旧3DS、67×40で6fpsでした。 ビットボード初めて知りました、素晴らしいですね。
1そうだね
プレイ済み
返信[4]
親投稿
スー thanks_0u0
皆さんコメントありがとうございます!ライフゲーム作っている方が多くて良いですね!( ´ ▽ ` )ノ あの後色々やって、64x48が47fps、96x60が25.5fpsになりました!これならかなり鑑賞に堪える速度だと思います! 上下左右ループにしたので、なかなか死滅せずに眺めていられますし、グライダーを眺め続けるのも乙な感じ。。。( ´ ω ` ) すうさんの仰る通り描画部分がかなり遅かったみたいでした。ビットボードの場合、各ビットを見るのに32回ループでGPSETしないといけないのがかなりダメだったみたいです。 あらかじめ画像パターンを用意することでループ回避したら速くなりました( `・ω・´ )
0そうだね
プレイ済み
返信[5]
親投稿
スー thanks_0u0
更に速くなりました( ´ ∀ ` )ノ 64x48、残像をつけても45fps、残像なしなら52fpsくらい出ます!でももうちょっと大きなサイズでも出来ると良いなぁ。あとはどうやったら早くなるだろう。。。
0そうだね
プレイ済み
返信[6]
親投稿
ΖΕΧ ZEX256
GLINE使うの代わりにGPSETで点を打つ 拡大表示はSPで
1そうだね
プレイ済み
返信[7]
親投稿
スー thanks_0u0
ありがとうございますー( ´ ▽ ` )ノ GPSETは数が増えすぎて遅いので、GRP0〜GRP3に0〜65535のパターンをあらかじめ描画しておいて、GCOPYで16dotずつ描画しています。 SPは最初から使っていました。便利ですよね( ´ ω ` ) 今はDIVやMODをビット演算に置き換えて、地味にスピードアップしたところです。 64x48、残像ありで47fps、なしで53.5fpsくらいです(・u・)
0そうだね
プレイ済み
返信[8]
親投稿
ΖΕΧ ZEX256
OPTION DEFINT ループの展開 定数は遅いので変数に入れて使う など おちゃめさんまとめ「プチコン3号 プログラムの高速化手法」 http://ochameclub.web.fc2.com/petitcom3/lecture/speedup_nano.htm
1そうだね
プレイ済み
返信[9]
親投稿
スー thanks_0u0
色々書いてありますね、すごい( ´ u ` ) 教えていただいたのを参考にして、もうちょっと詰めてみますー。ありがとうございます!( `・ω・´ )
0そうだね
プレイ済み
返信[10]
親投稿
ΖΕΧ ZEX256
限界カリカリの処理速度追及って楽しいよなぁ
1そうだね
プレイ済み
返信[11]
親投稿
ΖΕΧ ZEX256
定数より変数が速いのは乗算だけでした 勘違いしてた
1そうだね
プレイ済み
返信[12]
親投稿
れい rei-nntnd
俺も作ってみた。 【4RE4XEVD】 64x48、周期的境界条件(上と下、右と左が繋がってる)、ビットボード、new3DSでちょっとズルして約360ステップ/秒。 無印でも120くらいでるのではないかな。 普通の実行環境とだいぶ違うので、最適化もそれにあわせないといけなくてちょとむずい。 もう少し早くできるけど、展開とか変数置き換えはあまり楽しくないのでこのへんで。 そういうんじゃなく、画期的アイデアあるといいんだけど。
1そうだね
プレイ済み
返信[13]
親投稿
スー thanks_0u0
キーありがとうございます!( ´ ▽ ` )ノ れいさんのライフゲーム、旧3dsでは51〜54fpsくらいでした。newとの速度差が思っていたより大きかったです。 でもGPSETでこんなにスピードが出るのはびっくりしました!\(( °ω° ))/ 中身を見てもテクニックがわからないのが悔やまれます。。
0そうだね
プレイ済み
返信[14]
親投稿
れい rei-nntnd
50かー! ズルしたからだな。ズルはよくない。 旧3DSモードほしい。60は欲しいんだよなぁ。 もう一つ二つ、ズルすればいけるとおもうんだけど。
1そうだね
プレイ済み
返信[15]
親投稿
スー thanks_0u0
旧3DSモード良いですね!( ´ u ` ) でも違う環境の速度差をシミュレートするのはかなり難しそう。。。 私の頭ではFORの展開までしても58〜59が限界でしたー(´=ω= ` ) ちゃんとできる方が高速化するとどれくらいになるのかは興味があります!(・ω・)
0そうだね
プレイ済み
返信[16]
親投稿
れい rei-nntnd
これでどうだ! 【2S3NF3Q4】 汚い醜いズルいキモいコードだけど。 new3DSで約650ステップ/秒。 旧でも今度は60越えるはず。 32ビット幅のボードを2段同時計算、 GRP4面使ったGCOPYテーブル、 上下の接続はCOPY、左右の接続はループ展開、 MAINCNT監視して描画最適化、 さらに描画時の配列読み込み避けるため分岐の展開。 昼休み潰れた…
1そうだね
プレイ済み
返信[17]
親投稿
スー thanks_0u0
すごいです!153~154fps出ています!まさかこんなに早くなるとはー( ° д ° ) こんなに色々な方法があるんですね。それも昼休みだけでなんて……。 理解出来るかわかりませんけれど、じっくり見てみようと思います。ありがとうございます(・ω・)ノ こんな辺境の地では勿体ないので、良かったらぜひ表のプレイ日記にもキーを教えてあげてください( ´ u ` )
0そうだね
プレイ済み
返信[18]
親投稿
れい rei-nntnd
150か… まだできるだろ。 ちょっと本気になってシャア専用にすればあと3倍くらい… と思ったが ぐあああ 突然左手があぁ!奴が、奴がでてきてしまう! このままでは世界が! 鎮まれ!俺の左手! ってことで後はスー氏にまかせた。 旧3DSで200、new3DSで1000超えたら教えて♪
1そうだね
プレイ済み
返信[19]
親投稿
スー thanks_0u0
れいさんの左手で世界が危ない!これは開発続けられなくてもしょうがない!(`・д´・ ;) 私は高速化の方法を全然知らないので、これ以上なにも思いつきませんー(´=ω= ` ) 速度は妥協して、もう少し遊びやすくしてから公開しようかと思っています( ´ ω ` ) 高速化チャレンジは誰かもっと出来る方に託します!
0そうだね
プレイ済み
返信[20]
親投稿
Oskar oskar_liebig
昔の日記に唐突なコメントで失礼しますが、64×48の周期境界で旧3DSで164~165fps程度まで出せたので一応ご報告。 【2XNE434J】⇒ファイル:OK_LIFED04P 要は、腕がないので高度サウンドユニットでドーピング(笑) 結局、れいさんの最高速コードに比べて劇的に改善というほどでもなかったので、やはり、もっと誰かできる方に託したいところです。
1そうだね
プレイ済み
返信[21]
親投稿
スー thanks_0u0
おぉー、最高速更新ですね!サウンドユニットの新たな使い道が…! 配列の一括演算?はうまく使えば色々なことに使えるみたいですけれど私はまだ全然使い道がわかっていないので、そのうちテストしてみたいです。 今は見られないので、後でDLして見てみます、教えてくださってありがとうございます!( ´ ▽ ` )ノ
0そうだね
プレイ済み
返信[22]
親投稿
れい rei-nntnd
おおぉ 最高速度更新か すばらしい
1そうだね
プレイ済み
返信[23]
親投稿
Oskar oskar_liebig
どうもです。 一括演算でビット演算やオフセット指定ができれば(他力本願で)もっと異次元な速度が実現できたかも。 でなければ、ディジタルフィルタで2D/3Dフィルタとか長い遅延のFIRフィルタとか使えればほとんど一発で計算できるんだけど。こっちなら画像効果をつけるのにも使えそうだし…… あっ、これは不満を持たせておいて、後出しの「高度グラフィックユニット」で実現っていうDLC商法なんだな。納得。(一人芝居すぎ)
1そうだね
プレイ済み
返信[24]
親投稿
スー thanks_0u0
高度グラフィックユニット、難しそうですが是非使ってみたいですね!期待です( ´ u ` )
0そうだね
プレイ済み
返信[25]
親投稿
Oskar oskar_liebig
ごめんなさい。ループ展開が一部間違っていて、数が足りませんでした。 修正したところ旧3DSで158~159fpsまで性能が落ちました。残念。 【534N3JKY】⇒ファイル:OK_LIFED05P
1そうだね
プレイ済み