Bytecode: move more cached information about current block out of the Evaluate class
parent
36e8062e25
commit
d71db85c71
|
@ -2231,12 +2231,7 @@ Evaluate::gotoBlock(int block)
|
||||||
if (fb->op_code != Tags::FBEGINBLOCK)
|
if (fb->op_code != Tags::FBEGINBLOCK)
|
||||||
throw FatalException {"Evaluate::gotoBlock: internal inconsistency"};
|
throw FatalException {"Evaluate::gotoBlock: internal inconsistency"};
|
||||||
|
|
||||||
Block_Contain = fb->get_Block_Contain();
|
|
||||||
size = fb->get_size();
|
size = fb->get_size();
|
||||||
type = fb->get_type();
|
|
||||||
is_linear = fb->get_is_linear();
|
|
||||||
symbol_table_endo_nbr = fb->get_endo_nbr();
|
|
||||||
u_count_int = fb->get_u_count_int();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -53,6 +53,9 @@ private:
|
||||||
// Index of beginnings of blocks within instructions_list
|
// Index of beginnings of blocks within instructions_list
|
||||||
vector<size_t> begin_block;
|
vector<size_t> begin_block;
|
||||||
|
|
||||||
|
int block_num; // Index of the current block
|
||||||
|
int size; // Size of the current block
|
||||||
|
|
||||||
ExpressionType EQN_type;
|
ExpressionType EQN_type;
|
||||||
int EQN_equation, EQN_dvar1;
|
int EQN_equation, EQN_dvar1;
|
||||||
int EQN_lag1, EQN_lag2, EQN_lag3;
|
int EQN_lag1, EQN_lag2, EQN_lag3;
|
||||||
|
@ -76,13 +79,6 @@ protected:
|
||||||
BasicSymbolTable &symbol_table;
|
BasicSymbolTable &symbol_table;
|
||||||
void evaluateBlock(int it_, double *y, const double *ya, int y_size, double *x, int nb_row_x, double *params, const double *steady_y, double *u, int Per_u_, double *T, int T_nrows, map<int, double> &TEF, map<pair<int, int>, double> &TEFD, map<tuple<int, int, int>, double> &TEFDD, double *r, double *g1, double *jacob, double *jacob_exo, double *jacob_exo_det, bool evaluate, bool no_derivatives);
|
void evaluateBlock(int it_, double *y, const double *ya, int y_size, double *x, int nb_row_x, double *params, const double *steady_y, double *u, int Per_u_, double *T, int T_nrows, map<int, double> &TEF, map<pair<int, int>, double> &TEFD, map<tuple<int, int, int>, double> &TEFDD, double *r, double *g1, double *jacob, double *jacob_exo, double *jacob_exo_det, bool evaluate, bool no_derivatives);
|
||||||
|
|
||||||
int block_num; // Index of the current block
|
|
||||||
int size; // Size of the current block
|
|
||||||
BlockSimulationType type;
|
|
||||||
bool is_linear;
|
|
||||||
int symbol_table_endo_nbr, u_count_int;
|
|
||||||
vector<Block_contain_type> Block_Contain;
|
|
||||||
|
|
||||||
bool steady_state;
|
bool steady_state;
|
||||||
|
|
||||||
/* Prints a bytecode expression in human readable form.
|
/* Prints a bytecode expression in human readable form.
|
||||||
|
@ -99,6 +95,31 @@ protected:
|
||||||
|
|
||||||
int getNumberOfTemporaryTerms() const;
|
int getNumberOfTemporaryTerms() const;
|
||||||
|
|
||||||
|
auto
|
||||||
|
getCurrentBlockSize() const
|
||||||
|
{
|
||||||
|
return currentBlockTag()->get_size();
|
||||||
|
}
|
||||||
|
auto
|
||||||
|
getCurrentBlockType() const
|
||||||
|
{
|
||||||
|
return currentBlockTag()->get_type();
|
||||||
|
}
|
||||||
|
auto
|
||||||
|
isCurrentBlockLinear() const
|
||||||
|
{
|
||||||
|
return currentBlockTag()->get_is_linear();
|
||||||
|
}
|
||||||
|
auto
|
||||||
|
getCurrentBlockEquationsAndVariables() const
|
||||||
|
{
|
||||||
|
return currentBlockTag()->get_Block_Contain();
|
||||||
|
}
|
||||||
|
auto
|
||||||
|
getCurrentBlockUCount() const
|
||||||
|
{
|
||||||
|
return currentBlockTag()->get_u_count_int();
|
||||||
|
}
|
||||||
auto
|
auto
|
||||||
getCurrentBlockExogenous() const
|
getCurrentBlockExogenous() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -565,7 +565,7 @@ Interpreter::simulate_a_block(const vector_table_conditional_local_type &vector_
|
||||||
copy_n(y_save, y_size*(periods+y_kmax+y_kmin), y);
|
copy_n(y_save, y_size*(periods+y_kmax+y_kmin), y);
|
||||||
u_count = u_count_saved;
|
u_count = u_count_saved;
|
||||||
int prev_iter = iter;
|
int prev_iter = iter;
|
||||||
Simulate_Newton_Two_Boundaries(block_num, symbol_table_endo_nbr, y_kmin, y_kmax, size, periods, cvg, minimal_solving_periods, stack_solve_algo, vector_table_conditional_local);
|
Simulate_Newton_Two_Boundaries(block_num, y_size, y_kmin, y_kmax, size, periods, cvg, minimal_solving_periods, stack_solve_algo, vector_table_conditional_local);
|
||||||
iter++;
|
iter++;
|
||||||
if (iter > prev_iter)
|
if (iter > prev_iter)
|
||||||
{
|
{
|
||||||
|
@ -589,7 +589,7 @@ Interpreter::simulate_a_block(const vector_table_conditional_local_type &vector_
|
||||||
compute_complete_2b(false, &res1, &res2, &max_res, &max_res_idx);
|
compute_complete_2b(false, &res1, &res2, &max_res, &max_res_idx);
|
||||||
|
|
||||||
cvg = false;
|
cvg = false;
|
||||||
Simulate_Newton_Two_Boundaries(block_num, symbol_table_endo_nbr, y_kmin, y_kmax, size, periods, cvg, minimal_solving_periods, stack_solve_algo, vector_table_conditional_local);
|
Simulate_Newton_Two_Boundaries(block_num, y_size, y_kmin, y_kmax, size, periods, cvg, minimal_solving_periods, stack_solve_algo, vector_table_conditional_local);
|
||||||
max_res = 0; max_res_idx = 0;
|
max_res = 0; max_res_idx = 0;
|
||||||
}
|
}
|
||||||
slowc = 1; // slowc is modified when stack_solve_algo=4, so restore it
|
slowc = 1; // slowc is modified when stack_solve_algo=4, so restore it
|
||||||
|
@ -692,6 +692,12 @@ Interpreter::MainLoop(const string &bin_basename, bool evaluate, int block, bool
|
||||||
for (int current_block : blocks)
|
for (int current_block : blocks)
|
||||||
{
|
{
|
||||||
gotoBlock(current_block);
|
gotoBlock(current_block);
|
||||||
|
block_num = current_block;
|
||||||
|
size = getCurrentBlockSize();
|
||||||
|
type = getCurrentBlockType();
|
||||||
|
is_linear = isCurrentBlockLinear();
|
||||||
|
Block_Contain = getCurrentBlockEquationsAndVariables();
|
||||||
|
u_count_int = getCurrentBlockUCount();
|
||||||
|
|
||||||
if (constrained)
|
if (constrained)
|
||||||
check_for_controlled_exo_validity(current_block, sconstrained_extended_path);
|
check_for_controlled_exo_validity(current_block, sconstrained_extended_path);
|
||||||
|
|
|
@ -218,6 +218,14 @@ protected:
|
||||||
map<pair<int, int>, double> TEFD;
|
map<pair<int, int>, double> TEFD;
|
||||||
map<tuple<int, int, int>, double> TEFDD;
|
map<tuple<int, int, int>, double> TEFDD;
|
||||||
|
|
||||||
|
// Information about the current block
|
||||||
|
int block_num; // Index of the current block
|
||||||
|
int size; // Size of the current block
|
||||||
|
BlockSimulationType type;
|
||||||
|
bool is_linear;
|
||||||
|
int u_count_int;
|
||||||
|
vector<Block_contain_type> Block_Contain;
|
||||||
|
|
||||||
void compute_block_time(int Per_u_, bool evaluate, bool no_derivatives);
|
void compute_block_time(int Per_u_, bool evaluate, bool no_derivatives);
|
||||||
bool compute_complete(bool no_derivatives, double &res1, double &res2, double &max_res, int &max_res_idx);
|
bool compute_complete(bool no_derivatives, double &res1, double &res2, double &max_res, int &max_res_idx);
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit faa12910552c82bf5cb92d700bd12817408d22aa
|
Subproject commit 34edd4e1433ad4047a9b1f5535d9147135f26f53
|
Loading…
Reference in New Issue