さらに高速化

operator=で13%の時間を消費している。今気づいたんだけど、いちいち破壊先を元の状態に復元してそれを渡すんじゃなくて、変更前の値と破壊していい領域とを渡せばいいだけじゃない?

0.97秒から0.73秒と、32%の高速化になった。

http://coderepos.org/share/changeset/27184/lang/python/saichugen/experiments/cpp/saichugen_simple.cpp

0.65秒になった。さらに12%の高速化だ。

http://coderepos.org/share/changeset/27185/lang/python/saichugen/experiments/cpp/saichugen_simple.cpp


贅肉が落ちた。


さらに高速化するとしたらend_turnとその中のget_mediumを手動インライン展開して、自分が中央値なのかどうかの情報を使って枝刈りをすれば1/5~6程度の削減にはなると思う。

        • -

まだまだ甘かった。

+scores new_game_score(3);
+scores new_round_score(3);
 Result turn(const int iturn, Cards& unknowns, Cards &hand, 
 		   const scores &round_score, const scores &game_score){
 
   Result result;
   size_t N = unknowns.len;
-  scores new_game_score(3);
-  scores new_round_score(3);

これで0.53秒になった。22%高速化。とにかくmalloc/freeは重たいから動的に確保する必要のないものは極力最初に確保して使い回す方がいいのか。