Opened 9 years ago

Last modified 9 years ago

#3668 assigned defect

Memory allocation of the back-end and code generation grows quadratically with the system size — at Version 2

Reported by: Francesco Casella Owned by: Lennart Ochel
Priority: high Milestone: Future
Component: Backend Version: v1.9.4-dev-nightly
Keywords: Cc: andrea.bartolini@…

Description (last modified by Francesco Casella)

Consider the attached test package: it has one large algebraic system of equations driven by a scalar differential equation.

I have used these settings, which include some that are essential for the efficient handling of the large algebraic system:

setCommandLineOptions("--preOptModules-=clockPartitioning 
--postOptModules-=detectJacobianSparsePattern --postOptModules+=wrapFunctionCalls 
--disableLinearTearing --removeSimpleEquations=new
--indexReductionMethod=uode --tearingMethod=omcTearing 
-d=dumpSimCode,gcProfiling,execstat,nogen,initialization,backenddaeinfo,discreteinfo,stateselection");

simulate(LargeAlgebraic.M_2000, method = "rungekutta", stopTime = 1,
         numberOfIntervals = 10, simflags = "-lv LOG_STATS,LOG_LS -ls=klu"); 

Under Windows, the size of memory allocated by the back-end and code generation phases grows approximately as O(N2), N being the size of the algebraic system:

N Memory (MB)
2000 260
4000 1000
6000 2000

Note that the number of non-zero elements in the incidence matrix of the system grows as O(N), as there are 3 non-zero elements in each row.

This is not sustainable for systems that have more than a few thousands unknowns.

Change History (4)

by Francesco Casella, 9 years ago

Attachment: LargeAlgebraic.mo added

comment:1 by Francesco Casella, 9 years ago

Cc: andrea.bartolini@… added

comment:2 by Francesco Casella, 9 years ago

Description: modified (diff)
Summary: Memory allocation of the back-end grows quadratically with the system sizeMemory allocation of the back-end and code generation grows quadratically with the system size

by Lennart Ochel, 9 years ago

A first analysis of the backend memory usage for model LargeAlgebraic.

Note: See TracTickets for help on using tickets.