Is anyone aware of how one might check what "modes...
# xyce
r
Is anyone aware of how one might check what "modes" Xyce is using or specify what "mode" it should use for the "Load" and "Solve" phases as described by Table 10-1 in the Xyce user guide?
e
@User If you are running in parallel, the mode is set from the netlist (implicitly) by which solver you tell Xyce to use. So, if you tell Xyce to use KLU in parallel, that forces the “parallel load, serial solve” option, because KLU is a serial direct solver. If you tell Xyce to use AztecOO, then it will use the “parallel load, parallel solve” option.
If you don’t tell Xyce anything, then it will attempt to guess which is the best mode to use based on problem size. So, for small circuits it will automatically use “parallel load, serial solve” with KLU. The threshold for this choice is 1e4 unknowns. So, any circuit with fewer unknowns than 1e4 will automatically use serial KLU for the linear solve.
Anecdotally, the “parallel load, serial solve” mode is sometimes the best choice for problems larger than 1e4. But as the problem size increases, you get into more of a grey area. The parallel solvers are, in general, more fragile than a serial direct solver such as KLU. So sometimes coming up with the best preconditioner (which is crucial for a parallel iterative solver such as AztecOO) is difficult.
In my experience, direct solvers can work on problems as large as 0.5M unknowns, but once you get to that size they are very slow. And beyond that size they simply choke. For small problems they are much faster than iterative methods, but they scale poorly. So, as the problem size increases, you eventually reach a point where they are slower. Where, exactly, that point is, is somewhat problem dependent.