Ngspice open-source simulator contributions
BSIM3SIMD is a modified version of the widely used BSIM3 model, using SIMD instructions to evaluate several devices in parallel and to speed-up the simulation, with almost the same accuracy (the only loss of accuracy comes from the use of slightly less accurate exp and log functions).
Contrary to parallel device evaluation already available with OpenMP multiprocessing, BSIM3SIMD does only load 1 CPU core per simulation while achieving about 2x speed-up. This means that this optimization is also usefull when a batch of multiple simulations is launched for statistical analysis.
For an single simulation run, BSIM3SIMD can be combined with OpenMP multiprocessing to achieve about 3x speed-up.
The actual acceleration will depend on the simulated circuit and will be the most for medium-sized circuit consisting of mainly MOS transistors in the number of one hundred to ten thousands, as it is usual in the design of integrated circuit blocks. If simulating greater circuit the matrix solving time will start to dominate and overall the optimization will have less effect.
BSIM3SIMD supports BSIM3 versions 3.20, 3.22, 3.23, 3.24 and the latest 3.3 version.
You need the Ngspice source code.
The most up-to-date version of BSIM3SIMD is now incorporated in the official ngspice git repository in the "simd" branch.:
git clone git://git.code.sf.net/p/ngspice/ngspice cd ngspice git checkout simd mkdir build-simd cd build-simd ../configure --enable-modsimd CFLAGS="-O3 -march=native" make ./src/ngspice ../example/digital/adder_mos.cir
For more information, please refer to the README.simd file.
Alternatively, use the link below to download the initial version of BSIM3V32SIMD source code, and follow instructions in the INSTALL file.