投稿
InDoor TheInDoor12
もしもし配列よ 配列さんよ~ プチコンのうちで お前ほど 歩みののろい ものはない~ どうしてそんなに のろいのか ...いやホント配列さん遅すぎです。 配列を省けるところを省いたらFPSがぐーんと上がりました。 便利なのになあ
9そうだね
プレイ済み
返信[1]
親投稿
ゆうたん yu-tan-sama
構文解析の手間とかそんな感じの理由で遅いのかなぁ C言語とかと比較して劇的に遅くなる理由があるとしたらまずそこでしょうし でもそれだと普通の変数では早いってことの説明にはならないですよねぇ うーん
0そうだね
プレイ済み
返信[2]
親投稿
InDoor TheInDoor12
うーん... あ、3号って内部でコードを実行形式に変換してから実行していたような。 何か関係あるのかなあ ...うー、サッパリわかりません。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
New3DSで動作時はA[0]=A[0]+1は2450ナノ秒、A=A+1は345ナノ秒で配列変数の方が7倍以上遅いですからね。配列変数を減らすことで大幅に高速化が可能でしょう。
0そうだね
プレイ済み
返信[4]
親投稿
ナツキ natukin1978
ゲームだとレスポンスが重要だから大問題ですね。 ツールとかユーティリティだと多少は遅くても問題ないですが… 勿論、限度はありますけど。
0そうだね
プレイ済み
返信[5]
親投稿
ゆうたん yu-tan-sama
>あ、3号って内部でコードを実行形式に変換してから実行していたような。 昔ながらのBASICってインタプリタなので毎回ソースコードを読み解いて、ループならループの中身も通るたびに構文解析してるんだったと記憶してます プチコンもたぶんそういう系 それにしても7倍かー A[]って変数とリテラルの0の二つの値を処理してるからちょい遅くなるのはしゃーないけど…うーん A[0]ではなくて、B%=0:A%[B%]みたいに全部データ型を明示したら変わるのかな? 変わんないよね さすがに
0そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
ゆうたんさんへ プチコン3号は実行時に仮想マシンコードに変換しているとのことです。 構文解析もその時行っているため実行されない行のSyntax errarも検出されてしまいます。 ちなみにA%[B%}=A%[B%}+1は2412ナノ秒でした。配列の読み出しそのものが遅いため整数化しても微々たる高速化しかできません。
0そうだね
プレイ済み
返信[7]
親投稿
ゆうたん yu-tan-sama
あらら、一応仮想マシンコードになってるのか にしては遅いなぁ こうなってくると見た目配列なのにメモリアドレスが連続してなくてどこかで変換かけてるとかそういうオチまで考えないと…
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
配列変数が遅いというのは旧来のBASICでもそうでしたがプチコン3号ほど極端な違いはありませんでした。 旧来のBASICでは三角関数が遅く配列変数に事前に演算結果を入れてそれを参照するテーブル化はポピュラーな高速化テクニックでしたが、プチコン3号は配列変数の読み出しよりも三角関数はそのまま計算した方が高速なんですよね(笑)
0そうだね
プレイ済み
返信[9]
親投稿
れい rei-nntnd
逆に考えるんだ。 配列は速い。 ただしほかの計算はもっと速い。
1そうだね
プレイ済み
返信[10]
親投稿
if vnconfig
どうしてこうなった!?!? 評価が遅いのか代入が遅いのかどっちも遅いのか、どうなんでしょう? A=A A=B[0] B[0]=A B[0]=B[0] どっちも遅いのかな 指標の評価がよくないような気がします。
0そうだね
プレイ済み
返信[11]
親投稿
say sayer.exe
速度が7分の1になったところで、元々が速いから誤差みたいなもんだと思うけどなぁ と、思って試しに百万回ループテストしてみたら、 なるほど遅いね 配列→配列が遅いんで、ユーザ関数を介してみた 余計遅くなったしw←よく考えりゃ当たり前 でも、多くて100回程度のループまでしか使わないから今のままでいいや
1そうだね
プレイ済み
返信[12]
親投稿
say sayer.exe
そらそうと、昔MSXでスプライト定義に時間のかかるゲームがあってね その定義時間に苛ついたんで、定義したVRAM内容をBSAVEして、定義ルーチンをBLOADするだけにした上に、定義用のDATA文を全部削った改造?をしたんだけど、 なぜかメインルーチンまで体感的に速くなったことがあったんだよね リストが短くなった分、処理量が減ったからなのかな? プチコンに関係ない戯言です><
0そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
ワイヤーフレーム表示の場合は描画負荷が小さいので処理時間のほとんどが配列変数を使った演算です。 InDoorさんがプチコン3号を使っているのが旧3DSとはいえ私がプチコンmkIIで作ったものと比べても大して速くないのはプチコン3号では配列変数がボトルネックになっていると容易に予想が付きます。(プチコン3号は旧3DSでもmkII比の5~10倍の処理速度であるため) mkIIも配列変数は遅かったですが1.8倍程度の差で7倍も差があるプチコン3号ほどではありませんでした。
0そうだね
プレイ済み
返信[14]
親投稿
おちゃめ ochame_nako
配列変数の演算速度はNew3DSで試してみてもmkIIと比べて約6倍速少々でしたので旧3DSではmkIIの2倍程度になるでしょう。 ちなみにmkIIはA[0]=A[0}+1が約16300ナノ秒でした。(ループ回数が少ないので誤差がかなりあると思う)
0そうだね
プレイ済み
返信[15]
親投稿
pz PLASMA0001
PUSH,POPなんかの命令も用意してますし、実装は線形リストなんじゃないですかね。
0そうだね
プレイ済み
返信[16]
親投稿
ちーたけ hello.world256
二分木の可能性もあり得る
0そうだね
プレイ済み
返信[17]
親投稿
InDoor TheInDoor12
いつの間にやら高度な話に... さておき、ちょっと検証。 自分は初心者なんでPUSHやPOPを使うとメモリリークが発生するもんだと思い込んでいたけど、そんなことはなかったのか... 線形リストや二分木なら参照の遅さも納得がいくかなあ
0そうだね
プレイ済み