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.

Installation

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.

Download

Note: for an more up-to-date version, please use the official ngspice git repository and switch to the "simd" branch as described above.

BSIM3V32SIMD Source code

Publication