diff --git a/matlab/run_simulations.m b/matlab/run_simulations.m index 7dad1d92807fe19ada8b4b295c1a9ef3bfac804f..0de88ea45eaa572929dbac47a80258dee14151e2 100644 --- a/matlab/run_simulations.m +++ b/matlab/run_simulations.m @@ -19,6 +19,12 @@ function run_simulations(model, stack_solve_algo, static_solve_algo, niter, ccri global oo_ +if niter==0 + error('Fourth argument (number of iterations) cannot be equal to zero.') +end + +weight = @(n) (n<0) + (n>0)*(1/n); + id = 1:length(stack_solve_algo); jd = 1:length(static_solve_algo); @@ -62,13 +68,13 @@ for algo = [0, 1] % Try to simulate the model if this configuration has not been tried before (with or without success). try disp_title(sprintf('| MATLAB (solve_algo=%u, no blocks, model=%s) |', algo, model)); - dprintf('dynare %s onlyclearglobals -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u', model, niter, algo); + dprintf('dynare %s onlyclearglobals -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u', model, abs(niter), algo); skipline() Timings.MATLAB_computing(id(stack_solve_algo==algo), 1) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', niter), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', abs(niter)), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); if oo_.deterministic_simulation.error<ccrit Timings.MATLAB_preprocessing(id(stack_solve_algo==algo), 1) = info.time.preprocessor; - Timings.MATLAB_computing(id(stack_solve_algo==algo), 1) = info.time.compute/niter; + Timings.MATLAB_computing(id(stack_solve_algo==algo), 1) = info.time.compute*weight(niter); else Timings.MATLAB_preprocessing(id(stack_solve_algo==algo), 1) = info.time.preprocessor; Timings.MATLAB_computing(id(stack_solve_algo==algo), 1) = -2; @@ -85,13 +91,13 @@ for algo = [0, 1] % Try to simulate the model if this configuration has not been tried before (with or without success). try disp_title(sprintf('| MATLAB (solve_algo=%u, no blocks, model=%s) |', algo, model)); - dprintf('dynare %s onlyclearglobals -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DSTEADY_SOLVE_ALGO_VALUE=%u', model, niter, algo, solver); + dprintf('dynare %s onlyclearglobals -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DSTEADY_SOLVE_ALGO_VALUE=%u', model, abs(niter), algo, solver); skipline() Timings.MATLAB_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', niter), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo), sprintf('-DSTEADY_SOLVE_ALGO_VALUE=%u', solver)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', abs(niter)), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo), sprintf('-DSTEADY_SOLVE_ALGO_VALUE=%u', solver)); if oo_.deterministic_simulation.error<ccrit Timings.MATLAB_preprocessing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.preprocessor; - Timings.MATLAB_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.compute/niter; + Timings.MATLAB_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.compute*weight(niter); else Timings.MATLAB_preprocessing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.preprocessor; Timings.MATLAB_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = -2; @@ -118,13 +124,13 @@ for algo = [0, 1] try if isnan(Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1)) disp_title(sprintf('| USE_DLL (solve_algo=%u, no blocks, model=%s) |', algo, model)); - dprintf('dynare %s onlyclearglobals fast -DUSE_DLL=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u', model, niter, algo); + dprintf('dynare %s onlyclearglobals fast -DUSE_DLL=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u', model, abs(niter), algo); skipline() Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', 'fast', '-DUSE_DLL=true', sprintf('-DITERATIONS=%u', niter), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', 'fast', '-DUSE_DLL=true', sprintf('-DITERATIONS=%u', abs(niter)), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); if oo_.deterministic_simulation.error<ccrit Timings.USE_DLL_preprocessing(id(stack_solve_algo==algo), 1) = info.time.preprocessor; - Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1) = info.time.compute/niter; + Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1) = info.time.compute*weight(niter); else Timings.USE_DLL_preprocessing(id(stack_solve_algo==algo), 1) = info.time.preprocessor; Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1) = -2; @@ -140,13 +146,13 @@ for algo = [0, 1] try if isnan(Timings.USE_DLL_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo))) disp_title(sprintf('| USE_DLL (solve_algo=%u, no blocks, model=%s) |', algo, model)); - dprintf('dynare %s onlyclearglobals fast -DUSE_DLL=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DSTEADY_SOLVE_ALGO_VALUE=%u', model, niter, algo, solver); + dprintf('dynare %s onlyclearglobals fast -DUSE_DLL=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DSTEADY_SOLVE_ALGO_VALUE=%u', model, abs(niter), algo, solver); skipline() Timings.USE_DLL_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', 'fast', '-DUSE_DLL=true', sprintf('-DITERATIONS=%u', niter), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo), sprintf('-DSTEADY_SOLVE_ALGO_VALUE=%u', solver)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', 'fast', '-DUSE_DLL=true', sprintf('-DITERATIONS=%u', abs(niter)), sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo), sprintf('-DSTEADY_SOLVE_ALGO_VALUE=%u', solver)); if oo_.deterministic_simulation.error<ccrit Timings.USE_DLL_preprocessing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.preprocessor; - Timings.USE_DLL_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.compute/niter; + Timings.USE_DLL_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.compute*weight(niter); else Timings.USE_DLL_preprocessing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = info.time.preprocessor; Timings.USE_DLL_computing(id(stack_solve_algo==algo), jd(solver==static_solve_algo)) = -2; @@ -172,13 +178,13 @@ for algo = [0, 1, 2, 3, 4, 5] try if isnan(Timings.BYTECODE_computing(id(stack_solve_algo==algo), 1)) disp_title(sprintf('| BYTECODE (solve_algo=%u, no blocks, model=%s) |', algo, model)); - dprintf('dynare %s onlyclearglobals -DBYTECODE=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u', model, niter, algo); + dprintf('dynare %s onlyclearglobals -DBYTECODE=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u', model, abs(niter), algo); skipline() Timings.BYTECODE_computing(id(stack_solve_algo==algo), 1) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', niter), '-DBYTECODE=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', abs(niter)), '-DBYTECODE=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); if oo_.deterministic_simulation.error<ccrit Timings.BYTECODE_preprocessing(id(stack_solve_algo==algo), 1) = info.time.preprocessor; - Timings.BYTECODE_computing(id(stack_solve_algo==algo), 1) = info.time.compute/niter; + Timings.BYTECODE_computing(id(stack_solve_algo==algo), 1) = info.time.compute*weight(niter); else Timings.BYTECODE_preprocessing(id(stack_solve_algo==algo), 1) = info.time.preprocessor; Timings.BYTECODE_computing(id(stack_solve_algo==algo), 1) = -2; @@ -198,13 +204,13 @@ for mfs = 0:3 if isnan(Timings.MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1)) try disp_title(sprintf('| MATLAB (solve_algo=%u, with blocks, mfs=%u, model=%s) |', algo, mfs, model)); - dprintf('dynare %s onlyclearglobals -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DMFS_VALUE=%u -DBLOCKS=true', model, niter, algo, mfs); + dprintf('dynare %s onlyclearglobals -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DMFS_VALUE=%u -DBLOCKS=true', model, abs(niter), algo, mfs); skipline() Timings.MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', niter), sprintf('-DMFS_VALUE=%u', mfs), '-DBLOCKS=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', abs(niter)), sprintf('-DMFS_VALUE=%u', mfs), '-DBLOCKS=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); if oo_.deterministic_simulation.error<ccrit Timings.MATLAB_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = info.time.preprocessor; - Timings.MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = info.time.compute/niter; + Timings.MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = info.time.compute*weight(niter); else Timings.MATLAB_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = info.time.preprocessor; Timings.MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -2; @@ -225,13 +231,13 @@ for mfs = 0:3 if isnan(Timings.USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1)) try disp_title(sprintf('| USE_DLL (solve_algo=%u, with blocks, mfs=%u, model=%s) |', algo, mfs, model)); - dprintf('dynare %s onlyclearglobals fast -DUSE_DLL=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DMFS_VALUE=%u -DBLOCKS=true', model, niter, algo, mfs); + dprintf('dynare %s onlyclearglobals fast -DUSE_DLL=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DMFS_VALUE=%u -DBLOCKS=true', model, abs(niter), algo, mfs); skipline() Timings.USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', 'fast', sprintf('-DITERATIONS=%u', niter), '-DBLOCKS=true', sprintf('-DMFS_VALUE=%u', mfs), '-DUSE_DLL=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', 'fast', sprintf('-DITERATIONS=%u', abs(niter)), '-DBLOCKS=true', sprintf('-DMFS_VALUE=%u', mfs), '-DUSE_DLL=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); if oo_.deterministic_simulation.error<ccrit Timings.USE_DLL_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = info.time.preprocessor; - Timings.USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = info.time.compute/niter; + Timings.USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = info.time.compute*weight(niter); else Timings.USE_DLL_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = info.time.preprocessor; Timings.USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -2; @@ -254,13 +260,13 @@ for mfs = 0:3 if isnan(Timings.BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1)) try disp_title(sprintf('| BYTECODE (solve_algo=%u, with blocks, mfs=%u, model=%s) |', algo, mfs, model)); - dprintf('dynare %s onlyclearglobals -DBYTECODE=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DMFS_VALUE=%u -DBLOCKS=true', model, niter, algo, mfs); + dprintf('dynare %s onlyclearglobals -DBYTECODE=true -DITERATIONS=%u -DSTACK_SOLVE_ALGO_VALUE=%u -DMFS_VALUE=%u -DBLOCKS=true', model, abs(niter), algo, mfs); skipline() Timings.BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -3; % Provision for MATLAB crash - info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', niter), '-DBLOCKS=true', sprintf('-DMFS_VALUE=%u', mfs), '-DBYTECODE=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); + info = dynare(sprintf('%s', model), 'onlyclearglobals', sprintf('-DITERATIONS=%u', abs(niter)), '-DBLOCKS=true', sprintf('-DMFS_VALUE=%u', mfs), '-DBYTECODE=true', sprintf('-DSTACK_SOLVE_ALGO_VALUE=%u', algo)); if oo_.deterministic_simulation.error<ccrit Timings.BYTECODE_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = info.time.preprocessor; - Timings.BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = info.time.compute/niter; + Timings.BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = info.time.compute*weight(niter); else Timings.BYTECODE_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = info.time.preprocessor; Timings.BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -2; @@ -278,7 +284,6 @@ end % system(sprintf('touch %s-done.info', model)) - function disp_title(txt) len = length(txt); skipline() diff --git a/run.sh b/run.sh index 4b152467458c6d2d462204a523e27ba82d0179c6..1188619ece109def2a5a9b9f850ccdf7fafb7251 100755 --- a/run.sh +++ b/run.sh @@ -1,16 +1,36 @@ -#!/usr/bin/bash +#!/usr/bin/env bash -while [ ! -f m10-done.info ] -do - matlab -batch "MODELS=1; compute_transition;" |& tee -a m10-all.log -done +SCRIPT=$(realpath "$0") +SCRIPTPATH=$(dirname "$SCRIPT") +echo "$SCRIPTPATH" + +if [ $# -eq 0 ] +then + echo "The name of one model at least is required." +else + if [ $# -eq 1 ] + then + echo "I will run perfect foresight simulations with 1 model:" + else + echo "I will run perfect foresight simulations with $# models:" + fi +fi -while [ ! -f m20-done.info ] +for model in "$@" do - matlab -batch "MODELS=2; compute_transition;" |& tee -a m20-all.log + printf " \u25A1 $model\n" done -while [ ! -f m30-done.info ] +for model in "$@" do - matlab -batch "MODELS=3; compute_transition;" |& tee -a m30-all.log + if [ ! -f $model-done.info ] + then + while [ ! -f $model-done.info ] + do + matlab -batch "addpath $MATLAB_PATH; MODEL='$model'; compute_all_transitions;" |& tee -a $model-all.log + done + printf " \u2714 $model\n" + else + printf " \u2714 $model (already done)\n" + fi done