2009-05-07から1日間の記事一覧

GCの制御をまじめに考える

Rubyでゲームを動作させている場合に、処理時間が1フレーム内に収まるかどうかのぎりぎり近くなってくると、GCが動くかどうかでコマ落ちが発生するかが決まる。 GCが動いていなくても処理負荷はある程度の幅で変動しているから、変動範囲のうちの低いほうでG…

GCとDXRubyの関連

Ruby負荷40000、drawが12000、GC負荷10000として考えると、通常のGC負荷だけでdraw1回分の時間を食われる。 ということは、60fpsでコマ落ち制御を普通にしていても、負荷の変動幅の上の方でGCが発生した場合、いきなり処理落ちまで行く可能性がある。 そうい…

古ーい最適化の資料

検索してたら懐かしいものが出てきてちょっと昔を思い出した。 PentiumIIまでのCPUのアーキテクチャと最適化の文書だ。HOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR http://hp.vector.co.jp/authors/VA003988/pentopt.htm当時、これを見ながらアセンブラ書い…

CPUアーキテクチャとソートなど

スカラ型CPUはL1キャッシュのヒット率に処理速度が大きく依存する。 それを意識した仕様・アルゴリズムを書けるかどうかが、プログラムの性能を決める。 もちろん大きな設計レベルで無駄がないことは前提だ。 L1キャッシュは、キャッシュの追い出しアルゴリ…

Ruby拡張ライブラリの危なそうな間違いかた

最も多く呼び出されるであろうWindow.draw系のメソッドを、もうちょっとどーにかできないんだろうか、と思っていろいろいじっていた。 省略可能な引数のあるメソッドは引数が配列で渡されるから、はじめにrb_scan_argsをして受け取るわけだが、これはユーテ…

今日の成果

Window.draw系メソッドの改善と、DXRubySprite構造体のサイズ最適化を行った。 まだできることはあるだろうが、とりあえず現時点ではこんな感じ。 効果でかすぎて自分でビックリした。 例によってRuby1.9.1の数字だが、1.8.7だと4500だった。 またFPS表示間…