Sébastien Villemot
bd9943a695
Bytecode: fix memory leak in Evaluate class
...
The newly-created FBEGINBLOCK_ and FCALL_ instances were freed using a
base-class pointer. But the latter does not have a virtual destructor.
Those class instances are now stored by value in containers, so that the
destructor of the derived class is used.
2023-09-01 14:52:57 +02:00
Sébastien Villemot
d6ea315a18
Bytecode: further improve some informative messages
2023-06-15 15:37:45 +02:00
Sébastien Villemot
192f136b96
Bytecode: improve some informative messages
2023-06-13 16:59:08 +02:00
Sébastien Villemot
277c5d4c4f
Bytecode: display real iteration time instead of CPU time
2023-06-13 16:59:08 +02:00
Sébastien Villemot
7c9e261355
Bytecode: fix treatment of maxit option
...
It would do one extra iteration.
2023-06-13 16:59:08 +02:00
Sébastien Villemot
dcf56b89cd
Bytecode: rework message verbosity
...
Now uses options_.verbosity to decide what to print:
– if options_.verbosity == 0, prints nothing
– if options_.verbosity >= 1, prints iteration counter and duration, and fatal errors
– if options_.verbosity >= 2, additionally print floating point exceptions and
details about algorithmic decisions
2023-06-13 16:59:07 +02:00
Sébastien Villemot
73b1850cb5
Bytecode: remove unused function
2023-06-13 16:58:06 +02:00
Sébastien Villemot
08d378c244
Bytecode: in evaluate+dynamic mode, return residuals with as many columns as periods
...
Previously it would also include initial and terminal conditions (i.e.
residuals would have periods+maximum_lag+maximum_lead columns). But we do not
care about residuals at the initial and terminal conditions.
This change is for consistency with the perfect_foresight_problem MEX.
2023-06-12 19:18:44 +02:00
Sébastien Villemot
90d790f1c3
Bytecode: fix error message
2023-06-12 19:18:44 +02:00
Sébastien Villemot
d814a4090b
Bytecode: improve display of residuals error during iterations
2023-06-12 15:12:00 +02:00
Sébastien Villemot
e86aeaf787
C++20 modernization: use new standard mathematical constants
2023-05-25 19:07:23 +02:00
Sébastien Villemot
030316f2d8
Bytecode: misc simplifications
2023-04-18 22:25:58 +02:00
Sébastien Villemot
afe147d88d
Bytecode: the class dynSparseMatrix is no longer derived from Evaluate
2023-04-18 18:10:45 +02:00
Sébastien Villemot
e22972849b
Bytecode: make Evaluate::{symbol_table, steady_state} private and const
2023-04-18 17:46:48 +02:00
Sébastien Villemot
4313640f80
Bytecode: allow better compiler optimization of the main evaluation function
...
Use the __restrict__ GCC extension on double* pointers, to avoid aliasing.
NB: the C “restrict” keyword does not exist in C++.
2023-04-18 17:45:15 +02:00
Sébastien Villemot
d71db85c71
Bytecode: move more cached information about current block out of the Evaluate class
2023-04-18 17:44:55 +02:00
Sébastien Villemot
36e8062e25
Bytecode: remove Evaluate::{EQN_block,EQN_block_number}
2023-04-18 17:37:35 +02:00
Sébastien Villemot
d789e6a4c5
Bytecode: move storage for variable and parameter values out of the Evaluate class
2023-04-18 17:37:33 +02:00
Sébastien Villemot
d0864689d2
Bytecode: minor simplification related to Evaluate::steady_state
2023-04-18 14:23:26 +02:00
Sébastien Villemot
9f29e2f292
Bytecode: add missing floating point exception handling for sqrt and several trigonometric functions
2023-04-07 17:32:36 +02:00
Sébastien Villemot
2740bdee58
Bytecode: remove default clause in switch/case clauses for opcodes
...
This ensures that we will get a compiler warning reminding us to support
opcodes that may be added in the future.
2023-04-07 16:46:35 +02:00
Sébastien Villemot
1622c74a53
Bytecode: add missing support for cbrt(), abs() and sign() operators
2023-04-07 16:46:35 +02:00
Sébastien Villemot
f27c3abd2f
Bytecode: refactor floating point exception handling
2023-04-07 16:46:32 +02:00
Sébastien Villemot
fbaa051489
Bytecode: minor simplification
2023-04-07 10:26:57 +02:00
Sébastien Villemot
8128fd4cc3
Bytecode: minor improvements of interfacing with UMFPACK
2023-04-03 18:34:55 +02:00
Sébastien Villemot
c4ad1d58e8
Bytecode: minor simplification to debug mode
2023-04-03 18:34:45 +02:00
Sébastien Villemot
f0888468e6
Bytecode: optimize memory consumption during iterations
...
mxArray objects were not properly destroyed within the iteration loop, leading
to higher memory usage. Note that there was no memory leak, because these
objects would be destroyed later by MATLAB when exiting the MEX.
2023-04-03 14:14:33 +02:00
Sébastien Villemot
5a1abb1b87
Bytecode: cleanup memory management for UMPACK memory buffers
...
There was probably no bug but it is safer this way.
2023-03-31 18:43:16 +02:00
Sébastien Villemot
8dae5393f5
Bytecode: remove unused function
2023-03-31 17:37:31 +02:00
Sébastien Villemot
c7d2ea0a62
Bytecode: remove meaningless initializations
2023-02-24 15:29:52 -05:00
Sébastien Villemot
325e6487d4
Bytecode: move computation routines out of the Evaluate class
2023-02-24 15:18:43 -05:00
Sébastien Villemot
17df930eb9
Bytecode: remove unused function
2023-02-24 15:01:35 -05:00
Sébastien Villemot
0e1678c13a
Bytecode: no longer have instruction pointer as a member variable of Evaluate class
2023-02-24 14:30:15 -05:00
Sébastien Villemot
13b3208cdb
Bytecode: move all logic for navigating through the .cod file into the Evaluate class
2023-02-23 17:37:08 -05:00
Sébastien Villemot
aaab993ccf
Bytecode: merge CodeLoad class into Evaluate
2023-02-23 11:21:22 -05:00
Sébastien Villemot
895ce96c61
Bytecode: fix memory management for FBEGINBLOCK and FCALL tags
...
FCALL was not properly deallocated, hence leading to a memory leak.
Also simplify the handling of FBEGINBLOCK through a std::unique_ptr.
2023-02-21 16:58:45 -05:00
Sébastien Villemot
1ad6b29936
Bytecode: misc minor simplifications
2023-02-21 16:31:08 -05:00
Sébastien Villemot
24b2976ac2
Bytecode: move CodeLoad class out of the preprocessor
2023-02-21 16:02:21 -05:00
Sébastien Villemot
05ba2970be
Bytecode: diminish the number of data members in Evaluate class
2023-02-17 13:46:41 -05:00
Sébastien Villemot
c3e1480a52
C++17 modernization: use std::extent_v to get raw arrays size
...
This can prevent mistakes when the array is modified.
2023-01-24 13:43:02 +01:00
Sébastien Villemot
4ecc78a931
Preprocessor: drop unused per-block max lead/lag fields
2023-01-17 14:43:56 +01:00
Sébastien Villemot
0c5c96e724
Bytecode w/ block decomposition: no longer output derivatives w.r.t. exogenous and endogenous outside the block
2023-01-17 14:24:02 +01:00
Sébastien Villemot
f84753025d
Bytecode: the block and non-block versions now coexist in parallel
...
As a consequence, a new “block_decomposed” option of the bytecode MEX has been
introduced to explicitly select the block-decomposed version.
Note that we do not always use the “block_decomposed” option even when the
“block” option has been passed to the user, in situations where the block
decomposition brings nothing (e.g. when evaluating the residuals of the whole
model).
2023-01-09 15:20:46 +01:00
Sébastien Villemot
24d7f569f1
Bytecode MEX: fix compilation under GCC ⩾ 11
...
Problem introduced in previous commit.
2022-07-29 14:30:45 +02:00
Sébastien Villemot
e22ca82ab6
Bytecode MEX: drop the ErrorMsg class and integrate most of its members inside the Evaluate class
2022-07-29 13:04:31 +02:00
Sébastien Villemot
034a981daa
Bytecode MEX: streamline error handling
2022-07-29 13:04:29 +02:00
Sébastien Villemot
4ec6c0dab4
Bytecode MEX: streamline preprocessor guards in includes
2022-07-29 12:40:33 +02:00
Sébastien Villemot
0076644bda
Bytecode MEX: fix bug with PowerDeriv printing introduced in ff85fc6489
2022-07-28 17:13:23 +02:00
Sébastien Villemot
7c4dc1abce
Bytecode MEX: in error messages, revert back to default floating point format
...
A move to fixed format was erroneously made in
4893f0e82c
and
ff85fc6489
, where stream formatting of floating
points has been replaced by the use of std::to_string().
2022-07-28 17:10:12 +02:00
Sébastien Villemot
6e1635658f
Bytecode MEX: split out code for dealing with variable names into a dedicated BasicSymbolTable class
2022-07-28 16:56:40 +02:00