This shows you the differences between two versions of the page.
| — |
gnucap:user:queuesandoptbypass [2015/12/11 15:39] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | === Queues and OPT::bypass === | ||
| + | To improve speed GNucap solver uses device queues, most queues are activated when OPT::bypass is set to true. | ||
| + | |||
| + | This section will create analysis of how this is implemented. | ||
| + | |||
| + | == No bypass (OPT::bypass==false) == | ||
| + | |||
| + | Looking at code of SIM::evaluate_models() - if (OPT::bypass==false) then | ||
| + | only _late_evalq queue is used. | ||
| + | |||
| + | * first for all devices do_tr() is performed (no queues); | ||
| + | * then - for devices in _late_evalq queue is executed method do_tr_last(); | ||
| + | |||
| + | |||
| + | Same approach is used in TRANSIENT::sweep(): | ||
| + | |||
| + | * for all devices is executed do_tr() | ||
| + | * for _late_evalq is executed do_tr_last() | ||
| + | |||
| + | _late_evalq itself is declared in u_sim_data.h | ||
| + | |||
| + | elements can be added to _late_evalq are: | ||
| + | |||
| + | * d_cccs | ||
| + | * d_ccvs | ||
| + | * d_coil | ||
| + | |||
| + | == bypass (OPT::bypass==true) == | ||
| + | TBD | ||