22-04-2020, 12:03 PM
(This post was last modified: 22-04-2020, 12:04 PM by josemendez.)
That's really weird.
With one solver, all tasks get pushed to the pool at once. The two (or multiple) solver configuration pushes tasks for the first solver, then tasks for the second, then for the third... then waits for all these tasks to finish. So there's a slight difference in how tasks are pushed (since creating and pushing a task has very little overhead), but imho this does not justify the performance difference.
Only thing that comes to mind is that waking up threads in Quest is really expensive, and the time passed between pushing tasks for the first solver and tasks for the second solver is enough for threads to go to sleep. When the second solver pushes its tasks (almost immediately after the first one, but not at the same time), the threads have to be waken up and the tasks just lie there unattended for a long time, that varies depending on how many threads had to be woken up.
If this is theory is correct, using multiple Updaters won't have any positive impact. The only solution would be to use a single solver, then. Can you try the multiple updaters route, just to make sure?
With one solver, all tasks get pushed to the pool at once. The two (or multiple) solver configuration pushes tasks for the first solver, then tasks for the second, then for the third... then waits for all these tasks to finish. So there's a slight difference in how tasks are pushed (since creating and pushing a task has very little overhead), but imho this does not justify the performance difference.
Only thing that comes to mind is that waking up threads in Quest is really expensive, and the time passed between pushing tasks for the first solver and tasks for the second solver is enough for threads to go to sleep. When the second solver pushes its tasks (almost immediately after the first one, but not at the same time), the threads have to be waken up and the tasks just lie there unattended for a long time, that varies depending on how many threads had to be woken up.
If this is theory is correct, using multiple Updaters won't have any positive impact. The only solution would be to use a single solver, then. Can you try the multiple updaters route, just to make sure?