Basically netlist converts schematics into a mixed mode circuit model. These consist of two connected models: a logic emulator and a model for the analogue parts: transistors, resistor, capacitors ... The analogue model converts the schematics - abstracted as a netlist - into a linear differential equation system. This is the expensive part to solve.
This leads to a linear system (vulgo Matrix equation) of the following form: A x = y which has to be solved for x. The fastest approach for the sizes of this system (1x1 to 15x15) currently is an optimized Gaussian elimination on a compressed row format matrix. Advanced techniques like GMRES only start to beat this approach with sizes exceeding 200x200.
The Gaussian elimination unfortunately is neither vector nor parallel friendly. However, with static compilation of the specific matrix, an performance increase of about 50% could be achieved. There is some very alpha code in code.
And since the question will come up. Yes, I have investigated outsourcing this to GPU. With current latencies in CPU<->GPU memory transfers, the frequency of the audio stream and typical matrix sizes I currently see no real success path and prefer to concentrate my scarce resources elsewhere.
|