ISUCON7にて優勝した方のブログ(http://ken39arg.hatenablog.com/entry/2017/11/27/153843)によると、
1000回loop内の
totalMilliIsu.Cmp
で使っているnew(big.Int).Mul(itemPrice[itemID], big.NewInt(1000))
をloopの外にだしloop内で初期化させないようにする
という修正によって一気にスコアが上昇したとのことだが、 big.NewInt(1000)
を再利用すると本当に早くなるのかを検証した。
(言及されていると思われる部分: https://github.com/isucon/isucon7-final/blob/master/webapp/go/src/app/game.go#L442)
2^128から始めて、1000を100000回掛けるということをする。
a.go
- 一番最適そうなやつ
b.go
big.NewInt(1000)
を再利用せずに、ループの中で初期化するようにした
./a 0.67s user 0.02s system 101% cpu 0.676 total
./b 0.70s user 0.03s system 97% cpu 0.738 total
big.NewInt(1000)
を再利用するかどうかでベンチマークの結果はほとんど変わっていないように見える。
元のブログ記事を見ると、「様々な修正を入れたが効果が現れなかったところ」
./c 1.84s user 0.26s system 126% cpu 1.663 total