k_order_perturbation MEX: number of threads is now configurable

time-shift
Sébastien Villemot 2019-07-09 17:32:33 +02:00
parent 5b6c3bb452
commit 4030169db9
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
3 changed files with 14 additions and 0 deletions

View File

@ -72,6 +72,7 @@ options_.huge_number = 1e7;
options_.threads.kronecker.sparse_hessian_times_B_kronecker_C = num_procs;
options_.threads.local_state_space_iteration_2 = 1;
options_.threads.perfect_foresight_problem = num_procs;
options_.threads.k_order_perturbation = max(1, num_procs/2);
% steady state
options_.jacobian_flag = true;

View File

@ -42,6 +42,8 @@ switch mexname
options_.threads.local_state_space_iteration_2 = n;
case 'perfect_foresight_problem'
options_.threads.perfect_foresight_problem = n;
case 'k_order_perturbation'
options_.threads.k_order_perturbation = n;
otherwise
message = [ mexname ' is not a known parallel mex file.' ];
message_id = 'Dynare:Threads:UnknownParallelMex';

View File

@ -113,6 +113,14 @@ extern "C" {
if (qz_criterium_mx && mxIsScalar(qz_criterium_mx) && mxIsNumeric(qz_criterium_mx))
qz_criterium = mxGetScalar(qz_criterium_mx);
const mxArray *threads_mx = mxGetField(options_mx, 0, "threads");
if (!threads_mx)
DYN_MEX_FUNC_ERR_MSG_TXT("Can't find field options_.threads");
const mxArray *num_threads_mx = mxGetField(threads_mx, 0, "k_order_perturbation");
if (!(num_threads_mx && mxIsScalar(num_threads_mx) && mxIsNumeric(num_threads_mx)))
DYN_MEX_FUNC_ERR_MSG_TXT("options_.threads.k_order_perturbation be a numeric scalar");
int num_threads = static_cast<int>(mxGetScalar(num_threads_mx));
// Extract various fields from M_
const mxArray *fname_mx = mxGetField(M_mx, 0, "fname");
if (!(fname_mx && mxIsChar(fname_mx) && mxGetM(fname_mx) == 1))
@ -200,6 +208,9 @@ extern "C" {
// intiate tensor library
TLStatic::init(kOrder, nStat+2*nPred+3*nBoth+2*nForw+nExog);
// Set number of parallel threads
sthread::detach_thread_group::max_parallel_threads = num_threads;
// make KordpDynare object
KordpDynare dynare(endoNames, exoNames, nExog, nPar,
ySteady, vCov, modParams, nStat, nPred, nForw, nBoth,