save all, was: Re: [ng-spice-devel] Catching up
> "Save all" is a big resource consumer
> -------------------------------------
>
> I really must beg to differ here :-) We just said that the main
> time consumer was the model evaluation step, but that was actually
> a simplification. As circuits get bigger, then the model evaluation
> effort should just go up linearly with the size of the circuit
This is not good enough. As circuits get bigger, it becomes
necessary to exploit latency, duplication, and other factors. With
old technology you get linear growth. With appropriate algorithms it
can be very much sublinear.
> (i.e. the number of devices which must be evaluated. However,
> matrix solution goes up more than linearly with matrix size. (I
> can't remember how much more than linearly).
It depends on the connections. In theory, it is cubic, but a good
sparse matrix package fixes this. ACS is linear in number of nodes,
times quadratic in number of connections per node. I have ideas that
could make this sublinear.
> ..... Also, it would be
> reasonable to assume that the bigger the circuit, the more times
> spice will have to go round the evaluate-solve loop. So for bigger
> circuits, the matrix solution becomes more significant, and the
> overall effort goes up more than linearly.
Maybe. But, the bigger the circuit, the more tricks become
available. I have a benchmark of cascaded NMOS buffers, that takes
the same number of iterations regardless of the number of stages
(above about 5 stages), with linear growth in time, and slightly
sublinear growth in memory requirements. Spice fails to converge on
it. Numeric overflow.
Big circuits have a lot of duplication.
> The data size, though, only goes up linearly. In fact, I think I'm
> correct in saying that if you just save all the node voltages, then
> the data size does not even go up linearly with circuit size. Think
> of supply lines and busses, for instance. Many times when you add
> more devices, you don't add many new nodes. Even if you save all
> terminal currents, that can only go up linearly with circuit size
> (i.e. number of devices in the circuit).
But what I usually want is lots of detail in a small section. Why
save all the nodes when I don't need them? Then, what about the
detail? Probes other than node voltages? What if I want to see how
junction capacitance varies with signal? Spice only gives you this
in steady state, but ACS has the extended probes in transient, too.
ACS has 55 parameters on a MOSFET that you can probe in transient
analysis, and this is not counting what is available by treating it
as a subcircuit and probing its components (17 parameters on each of
the 2 diodes, 26 on each of the 5 capacitors, 18 on each of 4
resistors, 18 on the transfer element) That's 309 total per MOSFET,
assuming I counted correctly. There is some duplication, so the
useful number of somewhat less.
Uh ..... save all??????
ACS doesn't save. It outputs data immediately as it is calculated.
This is the only way all this information can be reasonably available.
Now, taking this to the future, with different models, it is
impossible today to predict what info you will want to see. I will
offer a few as food for thought:
Grid probes in a finite element transistor model.
Internal probes, at some point inside a transmission line.
Radiation.
Ground bounce.
Field measurements in a detailed transistor model.
Field measurements in a wire.
Fault detection, like a device exceeding safe operating region, which
may be determined by phenomena that is difficult to calculate, like
localized breakdown.
Crosstalk between wires.
Other types of devices, like connectors. How about one with 5000
pins?
Looking at these examples, they may seem like they are really
stretching things, but I am aware of real cases where all of these
are needed.
Enough, for now...
Partial thread listing:
- save all, was: Re: [ng-spice-devel] Catching up, (continued)