ngspice circuit simulator porting to cuda - mos-ak

38
Francesco Lannutti 1,2 , Stefano Perticaroli 1,2 1 University of Roma ”Sapienza, DIET 2 NGSPICE Project KLU and PSS Analysis Implementations into NGSPICE Dec 12 th , 2012 MOS-AK 2012, San Francisco (CA) USA

Upload: others

Post on 10-Feb-2022

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ngspice circuit simulator porting to CUDA - MOS-AK

Francesco Lannutti1,2, Stefano Perticaroli1,2

1 University of Roma ”Sapienza”, DIET 2 NGSPICE Project

KLU and PSS Analysis Implementations into NGSPICE

Dec 12th, 2012 – MOS-AK 2012, San Francisco (CA) – USA

Page 2: Ngspice circuit simulator porting to CUDA - MOS-AK

NGSPICE People

20/12/2012 KLU and PSS Analysis Implementations into

NGSPICE

Page 2

Francesco Lannutti

Stefano Perticaroli

Paolo Nenzi

Dietmar Warning

Holger Vogt

Robert Larice

Italian Wing German Wing

Page 3: Ngspice circuit simulator porting to CUDA - MOS-AK

Overview

A short introduction to SPICE

SPICE Challenges

SPICE Algorithm

KLU integration into NGSPICE – New Version

KLU data structures

The Binding Table Idea

Performance Analysis and Conclusion

PSS implementation into NGSPICE

Transient Shooting Algorithm

Autonomous Case Implementation

Examples

Appendix: KLU Sparse Direct Linear Solver

Properties of the Circuit Sparse Matrices (Davis)

How KLU works

20/12/2012 Page 3 KLU and PSS Analysis Implementations into

NGSPICE

Page 4: Ngspice circuit simulator porting to CUDA - MOS-AK

SPICE Challenge

20-Dec-12

1 10 100 1000 10000 100000

1.0000E-006

1.0000E-005

1.0000E-004

1.0000E-003

1.0000E-002

1.0000E-001

1.0000E+000

f(x) = 2.9256E-007 x^1.2013E+000R² = 9.2062E-001

Solve time/transient iteration vs Circuit equations

all netlists

equations

seconds

SPICE3 transient analysis performances

Kapre

N, P

hD

Thesis

, 2010

D

elit

ala

V, B

achelo

r’s T

hesis

, 2009

• The processing power of CPUs scales as N0.96

• The total solve time of spice scale as N1.2

• New technologies are described increasing models

complexity

• As technology improves, SPICE will become

slower in simulating denser circuits

Actual performances over number of circuit

equations:

Total analysis time 8.75E-7 * N^1.3

Total factor time 4.36E-7 * N^1.4

Total solve time 2.93E-7 * N^1.2

Page 4 KLU and PSS Analysis Implementations into

NGSPICE

Page 5: Ngspice circuit simulator porting to CUDA - MOS-AK

20-Dec-12

Initial trial Operating Point

Discretize differential equations in time

Linearize non-linear devices around trial

Load linear conductances in circuit matrix

Solve Linear Equations

Define new trial

Operating Point

Convergence ?

LTE Calculation

End of Time Interval

?

F x,x, t( ) = 0

xn+1 = aixn-1 + hn+1 bif xn-i, tn-i( )i=-1

k

åi=0

k

å

hn+1 = tn+1 - tn

xr

m+1 = xr

m -a xr

m( )g xr

m( )¢g xr

m( ), 0 <a £1

J xm( )xm+1 = J xm( )xm -g xm( )

Axm+1 = b where

A= J xm( ) +G

b= J xm( ) xm - g xm( ) +C

SPICE Algorithm SPICE3 transient analysis algorithm

Page 5

We will focus

on this part

for KLU Increment Time

KLU and PSS Analysis Implementations into

NGSPICE

Page 6: Ngspice circuit simulator porting to CUDA - MOS-AK

KLU INTEGRATION INTO

NGSPICE – NEW VERSION

20/12/2012 Page 6 KLU and PSS Analysis Implementations into

NGSPICE

Page 7: Ngspice circuit simulator porting to CUDA - MOS-AK

How spice loads devices into the matrix

20/12/2012

BSIM4

45nmHP_n

nmos1

nmos2

........

nmos3

nmosn

45nmHP_p

pmos1

pmos2

........

pmos3

pmosn

RES

resmod

res1

…….

Page 7

for each device_type (i.e. BSIM4)

for each device_model (i.e N_type)

for each instance_of_the_model

Evaluate J(V) and RHS(V)

Load J and RHS

RHS

J

SPARSE 1.3:

• The matrix is stored as a linked list (Setup Phase)

• The matrix is built iteratively by the instances (Setup Phase)

• Each instance knows the memory address of its elements

• This feature gives to device code an O(1) access to the matrix

elements

• Matrix factorization operations alter the structure of the matrix

by changing pointer relationships between elements

• We want to keep this, but KLU doesn’t, so we need a

solution!

KLU and PSS Analysis Implementations into

NGSPICE

Page 8: Ngspice circuit simulator porting to CUDA - MOS-AK

KLU Data Structures

20/12/2012 Page 8

Ai Ap Ax b

Co

lum

n P

oin

ters

Ro

w in

dic

es

No

n-z

ero

ele

me

nts

n+

1

nnz

nnz

n

RH

S D

en

se

Ve

cto

rs

KLU uses data structures based on array for both A and LU factorization

n

Co

lum

n p

erm

uta

tio

n v

ecto

r (M

ax T

rans, B

TF

and

CO

LA

MD

)

n

Row

pe

rmu

tation v

ecto

r (B

TF

an

d C

OL

AM

D)

q p

LU

Fa

cto

rization

of a

ll d

iag

on

al b

locks

LU

s

LU

LU

bx

Blo

ck in

de

x v

ecto

r N

b

• Sparse Matrix is n-by-n

• It has «nnz» non-zero elements

• The RHS vector is dense

• The «p» and «q» vectors contain row

and column permutations

• LU Factorization creates two new

vectors:

1. LUbx, that hosts the pointers to

every LU structure, for every

diagonal block

2. LU, that hosts the factorization

for each diagonal block

Thus KLU sacrifices space to

improve time, but this is a good

feature, because today space costs

less than time!

KLU and PSS Analysis Implementations into

NGSPICE

Page 9: Ngspice circuit simulator porting to CUDA - MOS-AK

1) Netlist Parsing

2) Devices Setup

3) Matrix Allocation as linked list of nodes – no values written yet, only locations

4) Binding Table Creation

5) Linked List to CSC Data Structure Conversion

20/12/2012

KLU integration into NGSPICE

Binding solution idea to respect both SPICE and KLU requirements

Page 9

Linked list of

nodes

CSC

data

structure

KLU and PSS Analysis Implementations into

NGSPICE

Page 10: Ngspice circuit simulator porting to CUDA - MOS-AK

Binding Table (“Associative Cache”) Example

20/12/2012 Page 10

Array Of Structure

Sparse original address KLU new address KLU Complex new address

5233563 5982185 5990465

5238545 5985402 5992089

. . .

. . .

. . .

. . .

5236487 5988432 5995679

The New Binding Table is reordered using Quick Sort Algorithm

Every element now is searched using Binary Search Algorithm

instead of Linear Search Algorithm

KLU and PSS Analysis Implementations into

NGSPICE

Page 11: Ngspice circuit simulator porting to CUDA - MOS-AK

Model Binding Example

20/12/2012 Page 11

here -> DEVptr += expression ; Model code

matched = BinarySearch (DEVptr, Binding Table) ;

here -> DEVbindStructPtr = matched ;

here -> DEVptr = here -> DEVbindStructPtr -> CSC ;

DEVbindCSC routine

here -> DEVptr += expression ; Model code

This New Binding System let switch

between KLU (and KLU Complex) and

SPARSE 1.3 representations very quickly

DEVptr contains the

address of an element

in the matrix

KLU and PSS Analysis Implementations into

NGSPICE

Page 12: Ngspice circuit simulator porting to CUDA - MOS-AK

Conclusion

20/12/2012 Page 12

• KLU is faster than SPARSE 1.3 in

all matrices extracted from the

ISCAS85 suite circuits, with a

speedup up to about 100x

• This very good behavior in the linear

solution decreases when KLU is

inserted into NGSPICE, where there

are other factors needed to be

accounted for timing calculation, but

KLU is however faster than

SPARSE 1.3

• When KLU is inserted into

NGSPICE, the speedup over

SPARSE 1.3 is up to about 11x.

With the New Binding System, it’s

up to about 13x and KLU has

always faster or the same time

KLU and PSS Analysis Implementations into

NGSPICE

Page 13: Ngspice circuit simulator porting to CUDA - MOS-AK

Conclusion

20/12/2012 Page 13

• The difference between with

scaling and without scaling is

often ignorable, but sometimes

scaling improves convergence,

even though the total time

expended is less when scaling

feature is disabled. The new

version includes scaling

too!

• KLU generally improves

convergence, but, even when

the DC iterations count is

higher than SPARSE 1.3,

NGSPICE with KLU is

however faster

KLU and PSS Analysis Implementations into

NGSPICE

Page 14: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS IMPLEMENTATION INTO

NGSPICE

Author: Stefano Perticaroli

Reviewers: Francesco Lannutti and Stefano Perticaroli

20/12/2012 Page 14 KLU and PSS Analysis Implementations into

NGSPICE

Page 15: Ngspice circuit simulator porting to CUDA - MOS-AK

Periodic Steady State Implementation in NGSPICE

20/12/2012 Pagina 15

PSS is a RF dedicated analysis needed when:

• large signal / non-linear behavior of a periodic dynamical system has to be investigated

• accurate prediction of harmonic content and harmonic related parameters are required

0.18um CMOS LNA 0.5um CMOS mixer 45nm CMOS fully integrated PLL

non autonomous circuits autonomous circuits

KLU and PSS Analysis Implementations into

NGSPICE

Page 16: Ngspice circuit simulator porting to CUDA - MOS-AK

non autonomous circuits autonomous circuits

PSS solution of a circuit (if exists) can be reached in general by means of:

• transient shooting (TS)

• harmonic balance (HB)

• mixed domain techniques (MDT)

Unknows: nodes voltages and

branches currents at PSS

Knowns: amplitudes and frequencies

of driving signals and IC set

Unknows: nodes voltages, branches

currents and also working frequency

at PSS

Knowns: only IC set

preferred for

• highly non linear circuits

• large circuits

20/12/2012 Page 16

PSS methods and type of circuits

KLU and PSS Analysis Implementations into

NGSPICE

Page 17: Ngspice circuit simulator porting to CUDA - MOS-AK

Period T is an unknown in autonomous circuits -> no closed-form solution exists

TS is considered in the proposed implementation

PSS solution is reached when:

u(t) input sources

v(t) nodes voltages

i(v(t)) resistive currents

q(v(t)) nodes charges or fluxes

Everyone is RN

A residual error e must be accepted in any

numerical formulation: tilde expresses quantized quantities

The problem becomes finding an iterative algorithm capable to decrease residual

error under an acceptable tolerance. Many algorithms have already been proposed

to address this problem in time domain

circuit system-equation in

space state TD form [1]

20/12/2012 Page 17

Transient Shooting

𝑣 𝑡 + 𝑇 − 𝑣 𝑡 = 𝜀, ∀𝑡𝜖𝑹

𝑣 𝑡 + 𝑇 − 𝑣 𝑡 = 0, ∀𝑡𝜖𝑹

𝑓 𝑣 𝑡 , 𝑡 =𝑑

𝑑𝑡𝑞 𝑣 𝑡 + 𝑖 𝑣 𝑡 + 𝑢 𝑡 = 0

KLU and PSS Analysis Implementations into

NGSPICE

Page 18: Ngspice circuit simulator porting to CUDA - MOS-AK

error and derivative

calculation

convergence ?

transient stabilization

evolution

START

END

shooting code

block

YES

NO

AUTONOMOUS

CASE

IMPLEMENTATION

frequency check

through DFT

20/12/2012 Page 18

YES

estimated period

update

NO Is it good ?

next time

point

KLU and PSS Analysis Implementations into

NGSPICE

PSS code

block

Page 19: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Stabilization Time

During the Stabilization Time we wait until the circuit becomes stable

after some time, specified by the tstab parameter

Voltage Transient during the Stabilization Time of a VdP oscillator

effective stabilization

20/12/2012 Page 19 KLU and PSS Analysis Implementations into

NGSPICE

Page 20: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Out of Stabilization Time

Exiting from stabilization, RHS [k] is taken as reference pseudo-state

vector (PSV)

We can infer that RHS is a PSV, because it contains the solution due to

equivalent conductance of the components with memory plus other stuff, like

conductance of the components without memory, independent sources and

controlled sources

It’s true that a state vector should contain only state variables, but it can be

demonstrated that a pseudo-state vector can be used to infer steady state

condition

MNA formulation used in NGSPICE – 𝑡 is the transient step index

(N+M)x(N+M) matrix where N is the

number of voltage nodes and M is

the number of current branches

(N+M)x1 knows vector (N+M)x1 solutions vector

20/12/2012 Page 20

𝐺 𝑡 𝐵𝐶 𝐷

𝑅𝐻𝑆 𝑡 + 1 = 𝑅𝐻𝑆 𝑡

KLU and PSS Analysis Implementations into

NGSPICE

Page 21: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Incremental Time Steps

During every accepted time point of transient evolution, the mean

quadratic error of PSV in time and its derivative are computed.

The calculated mean quadratic error, the PSV error and the derivative

are used to update the period. This new period can be used in the

next shooting iteration or can be the final one.

Transient time steps in the current estimated period are not constant:

The choice of {Tx} and {kx} influences heavily:

• convergence accuracy

• algorithm speed

• convergence trend (monotonic, oscillating, etc.)

2.165 2.17 2.175 2.18 2.185 2.19

x 10-5

-2

-1

0

1

2

capacitor

voltage [

V]

VdP oscillator - Transient evolution

2.165 2.17 2.175 2.18 2.185 2.19

x 10-5

-0.05

0

0.05

inducto

r curr

ent

[A]

2.165 2.17 2.175 2.18 2.185 2.19

x 10-5

-2

-1

0

1

2

time [s]

1-n

orm

err

or

with r

espect

to r

efe

rence

Vref

Dt=Test/k1 Dt=Test/k2

Dt=Test/k3

Dt=Test/k4

T1 T2

T3 Time Steps Progression along the estimated period

20/12/2012 Page 21 KLU and PSS Analysis Implementations into

NGSPICE

Page 22: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Convergence Condition

Convergence criterion is based on the fulfillment of the following condition at

every node or branch which satisfies a “dynamic consistency” test:

voltage_error <= (max(V) * rel_tol + v_abstol) * tr_tol * steady_coeff

current_error <= (max(I) * rel_tol + i_abstol) * tr_tol * steady_coeff

The “dynamic consistency” test in based on the following condition:

abs (RHS [max] – RHS [min]) > 10uV

abs (RHS [max] – RHS [min]) > 10nA

Convergence is reached when every node and branch verifies the condition

The following values are set as default in NGSPICE:

rel_tol=1e-3

v_abstol=1e-6 V

i_abstol=1e-9 A

tr_tol=7

steady_coeff (grabbed from outside) inserted for PSS only

20/12/2012 Page 22 KLU and PSS Analysis Implementations into

NGSPICE

Page 23: Ngspice circuit simulator porting to CUDA - MOS-AK

When convergence is reached:

• circuit is evolved one more time at the final frequency with

CONSTANT time steps

• results are stored for Time Domain plotting

When all the Time Domain results are gathered, they are passed to a

DFT routine that calculates the required harmonics and stores results

for Frequency Domain plotting and Frequency Checking

20/12/2012 Page 23

PSS Algorithm – PSS reached

KLU and PSS Analysis Implementations into

NGSPICE

Page 24: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Frequency Check Trough DFT

If the shooting cycle converges to a local minimum, expressed as multiple of the first

harmonic, a check to estimate the correct frequency is performed through the data

collected by the DFT

Generally, in this case, a very ‘far’ initial guessed frequency is provided: algorithm can

lock into a local minimum for PSV error, without the chance to get out

20/12/2012 Page 24

RING OSCILLATOR

Final circuit time is

5.062813106e-07 seconds

(iteration n° 3) and

predicted fundamental

frequency is

641.4261187e+06 Hz

The predicted fundamental

frequency is incorrect.

Relaunching the

analysis...

The new guessed

fundamental frequency is:

3.84856e+09

Convergence not reached.

However the most near

convergence iteration has

predicted (iteration 5) a

fundamental frequency of

3.848555145e+09 Hz

KLU and PSS Analysis Implementations into

NGSPICE

Page 25: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Examples

20/12/2012 Page 25 KLU and PSS Analysis Implementations into

NGSPICE

Colpitt’s Oscillator – f=3.343MHz

Page 26: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Examples

20/12/2012 Page 26 KLU and PSS Analysis Implementations into

NGSPICE

Complementary CMOS Oscillator – f=559.208MHz

Page 27: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Examples

20/12/2012 Page 27 KLU and PSS Analysis Implementations into

NGSPICE

Hartley Oscillator – f=122.423Hz

Page 28: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Examples

20/12/2012 Page 28 KLU and PSS Analysis Implementations into

NGSPICE

Vackar Oscillator – f=1.927MHz

Page 29: Ngspice circuit simulator porting to CUDA - MOS-AK

PSS Algorithm – Examples

20/12/2012 Page 29 KLU and PSS Analysis Implementations into

NGSPICE

Van Der Pol Oscillator – f=4.590MHz

Page 30: Ngspice circuit simulator porting to CUDA - MOS-AK

20/12/2012 Page 30

Thanks for your attention

KLU and PSS Analysis Implementations into

NGSPICE

Page 31: Ngspice circuit simulator porting to CUDA - MOS-AK

Appendix: KLU SPARSE

DIRECT LINEAR SOLVER

20/12/2012 Page 31 KLU and PSS Analysis Implementations into

NGSPICE

Page 32: Ngspice circuit simulator porting to CUDA - MOS-AK

Properties of the MNA matrices (Davis)

• Zero-free (or nearly zero-free) diagonal (zeroes removed by Maximum Transversal Algorithm)

• Unsymmetric values with a non-zero pattern only roughly symmetric

• Permutable to block triangular form (BTF)

• Non-zero pattern of each block is typically more symmetric than the whole matrix (peculiarity of circuit matrices)

• Presence of dense rows/columns (removed by COLAMD or AMD)

• Very sparse (using BLAS is not appropriate)

• Very sparse LU factors if properly ordered (peculiarity of circuit matrices)

• High number of fill-ins if ordered with usual strategies

KLU exploits all these properties

20/12/2012 Page 32 KLU and PSS Analysis Implementations into

NGSPICE

Page 33: Ngspice circuit simulator porting to CUDA - MOS-AK

20/12/2012

Matrix Pre-Ordering in KLU

Pre-Ordering avoids zeroes along the main diagonal, reduces the workload and

reduces the fill-ins

Pre-Ordering sequence performed on the transient simulation of the «c432» ISCAS85 suite circuit

Page 33

Partitioning generates 40

blocks with a DOMINANT

one.

Original Sparse

Matrix

Maximum

Transversal

Block Triangular

Form

COLAMD

KLU and PSS Analysis Implementations into

NGSPICE

Page 34: Ngspice circuit simulator porting to CUDA - MOS-AK

Gilbert-Peierls LU Factorization in KLU

L = I

for each column j

b = A (: , j)

x = L \ b

(Partial Pivoting)

U (1 : j, j) = x (1 : j)

L (j + 1 : n, j) = x (j + 1 : n) / U (j, j)

end

% To solve x = L \ b the following algorithm is used:

x = b

for columns i in (1 : j - 1)

x (i + 1 : n) = x (i + 1 : n) -

L (i + 1 : n, i) * x (i)

end

L = I

for each column j

b = A (: , j)

x = L \ b

(Partial Pivoting)

U (1 : j, j) = x (1 : j)

L (j + 1 : n, j) = x (j + 1 : n) / U (j, j)

end

% To solve x = L \ b the following algorithm is used:

x = b

for columns i in (1 : j - 1)

if L (i + 1 : n, i) != 0

x (i + 1 : n) = x (i + 1 : n) -

L (i + 1 : n, i) * x (i)

end

20/12/2012

Dense matrix version

Base GP algorithm MATLAB pseudo code:

Sparse matrix version

The sparse matrix version of the GP algorithm exploits the sparsity of L:

Page 34

Triangular system with

Partial Pivoting

Triangular system

without Partial Pivoting

Piv

ot

Candid

ate

s

KLU and PSS Analysis Implementations into

NGSPICE

Page 35: Ngspice circuit simulator porting to CUDA - MOS-AK

20/12/2012

Gilbert-Peierls LU Factorization in KLU Sparse matrix version improved through the DFS

L Aj

How the DFS works in the Gilbert-Peierls algorithm

x (i + 1 : n) = x (i + 1 : n) - L (i + 1 : n, i) * x (i)

• This is a reachability

problem

• The DFS (depth-first search)

is applied on L, starting from

each non-zero element of

the jth column of A

Considering all the non-zeros of L, it’s necessary to access to 36 elements divided in 14 columns

Page 35 KLU and PSS Analysis Implementations into

NGSPICE

Page 36: Ngspice circuit simulator porting to CUDA - MOS-AK

Reachability Set portion of L pointed by Aj

20/12/2012

Gilbert-Peierls LU Factorization in KLU Reachability reduces the number of elements accessed

Lj Aj

Considering Lj instead of L, it’s necessary to access only to 20 elements in 8 columns

• Number of elements

reduced by 44%

• Number of columns

reduced by 43%

Page 36 KLU and PSS Analysis Implementations into

NGSPICE

Page 37: Ngspice circuit simulator porting to CUDA - MOS-AK

Gilbert-Peierls LU Factorization in KLU

L = I for each column j V = Reachability (L, A (: , j)) b = A (: , j) x = L \ b (Partial Pivoting) U (1 : j, j) = x (1 : j) L (j + 1 : n, j) = x (j + 1 : n) / U (j, j) end % To solve x = L \ b the following algorithm is used :

x = b for columns i in V if L (i + 1 : n, i) != 0

x (i + 1 : n) = x (i + 1 : n) - L (i + 1 : n, i) * x (i) end

20/12/2012

Sparse Matrix version (as said

before) Improved Sparse Matrix version

L = I

for each column j

b = A (: , j)

x = L \ b

(Partial Pivoting)

U (1 : j, j) = x (1 : j)

L (j + 1 : n, j) = x (j + 1 : n) / U (j, j)

end

% To solve x = L \ b the following algorithm is used:

x = b

for columns i in (1 : j - 1)

if L (i + 1 : n, i) != 0

x (i + 1 : n) = x (i + 1 : n) -

L (i + 1 : n, i) * x (i)

end

Page 37 KLU and PSS Analysis Implementations into

NGSPICE

Page 38: Ngspice circuit simulator porting to CUDA - MOS-AK

KLU Key Facts

20/12/2012 Page 38

• KLU exploits the structure of

MNA matrices better than

SPARSE 1.3 (pre-order)

• KLU minimizes the number of

computations (GP Algorithm

has a complexity O(flops(LU))

• Features not shown:

• Symmetric pruning to

reduce DFS time

• Re-factorization

• DFS is not used during

re-factorization

Reference: T. Davis, E. Natarajan, Algorithm 907:

KLU, a direct sparse solver for circuit simulation

problems, ACM Trans. on Math. Soft., 2010

KLU and PSS Analysis Implementations into

NGSPICE