• [rcssserver] コード整理.多重継承解消.inline化 (akiyama) 18:35:58

モニタのinitコマンドでバージョン指定された場合に,不正なバージョン番号も受け付けるようになっていたのを修正.ついでに,バージョン番号に浮動小数を指定できるにも関わらず,整数値でのチェックしか行われていなかったので,指定されたバージョン番号に応じた処理を正しく扱えるように修正.

PlayerやCoachクラスが多重継承になっていたのをかなり解消した. 設計的にはコンポジションに変更したことになる.

継承元のObserverクラスがテンプレートになっていたために多重継承で凌いでいたのだと思うが,Playerクラスに特化したObserverPlayerのような特殊化クラスを用意することで前方宣言可能にした. 後は,Coach用のObserverクラスとSerializer関数を作って同じ設計にそろえないといけない.

多重継承を解消したことで,VisualSenderの多くの関数をインライン化出来たんだけど,全然高速化されない. gprofによると,sendHighFlag()とsendHighPlayer()が全体の70%近くのCPUを消費しているので,ここを何とかすれば相当早くなるはずなんだが,具体的なボトルネックの発生箇所がよく分からない. Serializerの仮想関数を全て非仮想にしてインライン化しても,同様に全く変わらないので,単に呼び出し回数が桁外れに多いことが原因なだけな気もするが,だとしても,高速化する方法が何か無いものだろうか.

InitObserverを直していて気づいたが,初期化処理の場所と手順がPlayerとCoachとOnlineCoachでバラバラなので,統一すべきだろう.

  • [rcssserver] ちょっとだけ高速化. (akiyama) 19:12:43

よく見たら,see情報を送信するしないに関わらず,全ての物体の距離の量子化計算を実行していた.量子化計算にはlogやらexpやらを使っているので,これはかなり負荷になっているはず.ということで,必要な状況になるまで計算を遅らせてみたところ,少し効果が出た. sendHighFlagとsendHighPlayerのCPU使用率が逆転するくらいに大きな違いが出たが,全体のパフォーマンスが劇的に変わったというほどでは無い(とは言え,10〜20%くらいは高速化されたと思うので,遅めのマシンだと違いがよく分かるかもしれない). 後は何が出来るだろうか.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (1219d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.