Multiple Linear Solvers Introduced in SmartSpice

Introduction

Acknowledging the need for more flexibility, SmartSpice now provides three numerical methods for linear system solution. The additional solvers provide for greater capacity by minimizing memory requirements and reducing the overall simulation time.

Historically, spice simulation tool vendors were locked into using the Berkeley Sparse linear system solver in their products due to its tight integration with the simulation engine, and sometimes even with the implementation of certain analyses and models.

Therefore, adding a better linear solver into a spice package has proven to be extremely difficult, unless “reverse integration” is accomplished. The solver should be decoupled from the the rest of the spice package so as to present a very clean interface to the simulator. Silvaco has succeeded in this decoupling approach in SmartSpice and managed to avoid any runtime overhead that usually occurs with this kind of restructuring thanks to the approach it chose to perform this task: instead of introducing a new interface layer between the solver and the simulator, Silvaco stripped away the old interface altogether and replaced it with a clean one.

Once this decoupling was implemented, a multitude of different solvers can ce plugged in through the common solver interface without interfering with what customers are used to with previous versions of SmartSpice. This new approach to solving spice linear systems yielded immediate results. What is to become the default SmartSpice solver is an enhanced version of the Berkeley Sparse1.3 solver. The gain with this solver is an average of 10% on overall simulation time. This gain is achieved by merely using a more compact data structure than the original one provided by Berkeley Sparse. The main objective is to improve memory access patterns by putting data accessed around the same time in memory locations close to one another. This is known as spatial locality. This technique was coupled with a cache blocking approach that increases the percentage of useful data loaded into the processor’s cache with each load request from the main memory. Future versions of this solver library will show much better speeds as there is still room for improvement using for instance temporal locality.