SimCMinMax / AutoSimC

Python script to create multiple profiles for Simcraft to find Best-in-Slot and best enchants/gems/talents combination.
GNU General Public License v3.0
54 stars 17 forks source link

Run multiple SimC instances to bypass slow 'merging data from thread X' behavior #13

Closed ssateneth closed 6 years ago

ssateneth commented 6 years ago

When doing a sim with a large amount of threads (20+), a significant amount of time is spent merging data from thread X, ruining any time speed gains from using larger thread amounts.

SimC sims quite quickly obviously with more threads on a many-core CPU, but after the last actor, it seems a single thread is used to 'merge data from thread X', which significantly slows down the process, sometimes taking longer than the actor simulations themselves.

Could this behavior be optimized maybe? I had an 8c/16t intel CPU before, but now I'm running on a 16c/32t AMD threadripper CPU, and I do see very significant gains in simming speed, but the thread merging behavior is much slower now, negating any sim speed gains.

So in order to bypass this slowness, could something be implemented to run multiple SimC instances instead? So instead of running 1 SimC instance for stage 1 with 32 threads, instead run 4 instances with 8 threads each, or 8 instances with 4 threads each? Or some configurable amount? Obviously stage 2 and stage 3 could probably remain single-instance since they don't seem to support maximum actor counts per sim like stage 1 does, but if max actor coutns is implemented for stage 2/3, the multi-instance behavior could probably be carried over too.

theoneandlonely commented 6 years ago

I implemented this; it seems to run more stable using n simc-instances with 1 thread each than 1 simc-instance and n threads. Also much more faster, with Threadripper 16core we saw an increase up to 5 times for stage1.

It is enabled now as default.