8GPUインスタンスを使って探索速度を検証した。
まず20CPU、8GPU(Tesla V100)のインスタンスを使って探索速度を検証した。
早い段階で頭打ちになっている。8GPU使うときのGPU利用率を見てもあまり高くなっていない(1GPUなら50%くらいは行く)。
1GPUでも探索中は20CPUを満遍なく使っている。
なんだかんだCPUがボトルネックになっていそうではあるので増やしてみた。(別に探索中に立てるスレッド数を増やすわけではないので意味はないと思ったが検証のため)。
20CPU→40CPUにしたときはそこそこ上がったのでお!と思ったが、60CPUにしたらまた下がったので、なにかマシンの影響だったのかもしれない。CPUの情報を見ておけばよかったか。
最後に、探索中バックアップするときのmutex
ロックを外してみたところ、8GPUでNPSが46371まで上がった(約1.5倍程度)。やはり排他制御でかなり詰まっているようだ。
考察
そもそも現状の並列化を振り返ると、次のような想定をしている。
こうやってGPUをフルに使うのが理想なのだが、現状はGPUの方が空いている時間が多く、おそらく次のようになっている。
CPUを増やす方法として、このキューを3つにするというのは実装しているのだが、3つのキューを順繰りに計算していくことになると最善読み筋を伸ばすのに時間がかかるのでかえって弱くなってしまいそうな気がしている。
フラットに図を眺めてみれば、単純にキューを埋める部分を複数スレッド化すれば良いのではないかと思えた。むしろなんで今までそれを思いつかなかったのか。実装してみます。