From e046817d34ed9ae52cb39ff44d47803c70f5b43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 2 Oct 2024 18:13:28 +0200 Subject: [PATCH] stack_solve_algo={2,3} now work in unstable without block nor bytecode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By the way: – no longer hardcode unavailable algorithms in the LaTeX templates, but rather handle them with a special value (-10) as for the other types of failures – no longer hardcode the possible values of stack_solve_algo in run_simulations.m, but rather use the vector of values passed as argument --- matlab/run_simulations.m | 50 ++++++++++++++++++++++++++------------ matlab/write_table_short.m | 24 +++++++++++++----- tables/template-short.tex | 8 +++--- tables/template.tex | 8 +++--- 4 files changed, 60 insertions(+), 30 deletions(-) diff --git a/matlab/run_simulations.m b/matlab/run_simulations.m index 0de88ea..4966512 100644 --- a/matlab/run_simulations.m +++ b/matlab/run_simulations.m @@ -19,6 +19,10 @@ function run_simulations(model, stack_solve_algo, static_solve_algo, niter, ccri global oo_ +dynare_config; +tmp = strsplit(dynare_version, {'.','-'}); +dynare_version_major = str2num(tmp{1}); + if niter==0 error('Fourth argument (number of iterations) cannot be equal to zero.') end @@ -62,7 +66,13 @@ end % % Matlab % -for algo = [0, 1] +for algo = stack_solve_algo + if ismember(algo, [4 5]) || (ismember(algo, [2 3]) && dynare_version_major <= 6) + % These algorithms are not available + Timings.MATLAB_preprocessing(id(stack_solve_algo==algo), 1) = -10; + Timings.MATLAB_computing(id(stack_solve_algo==algo), 1) = -10; + continue + end if algo<7 if isnan(Timings.MATLAB_computing(id(stack_solve_algo==algo), 1)) % Try to simulate the model if this configuration has not been tried before (with or without success). @@ -111,15 +121,16 @@ for algo = [0, 1] end end end -for algo = [2, 3, 4, 5] - % These algorithms are not available - Timings.MATLAB_preprocessing(id(stack_solve_algo==algo), 1) = -10; - Timings.MATLAB_computing(id(stack_solve_algo==algo), 1) = -10; -end % % use_dll % -for algo = [0, 1] +for algo = stack_solve_algo + if ismember(algo, [4 5]) || (ismember(algo, [2 3]) && dynare_version_major <= 6) + % These algorithms are not available + Timings.USE_DLL_preprocessing(id(stack_solve_algo==algo), 1) = -10; + Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1) = -10; + continue + end if algo<7 try if isnan(Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1)) @@ -166,15 +177,10 @@ for algo = [0, 1] end end end -for algo = [2, 3, 4, 5] - % These algorithms are not available - Timings.USE_DLL_preprocessing(id(stack_solve_algo==algo), 1) = -10; - Timings.USE_DLL_computing(id(stack_solve_algo==algo), 1) = -10; -end % % Bytecode % -for algo = [0, 1, 2, 3, 4, 5] +for algo = stack_solve_algo 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)); @@ -200,7 +206,13 @@ end % Matlab with blocks % for mfs = 0:3 - for algo = [0, 1, 2, 3, 4] + for algo = stack_solve_algo + if algo == 5 + % Algorithm not available + Timings.MATLAB_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = -10; + Timings.MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -10; + continue + end 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)); @@ -227,7 +239,13 @@ end % USE_DLL with blocks % for mfs = 0:3 - for algo = [0, 1, 2, 3, 4] + for algo = stack_solve_algo + if algo == 5 + % Algorithm not available + Timings.USE_DLL_WITH_BLOCKS_preprocessing(id(stack_solve_algo==algo), mfs+1) = -10; + Timings.USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) = -10; + continue + end 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)); @@ -256,7 +274,7 @@ end % Bytecode with blocks % for mfs = 0:3 - for algo = [0, 1, 2, 3, 4, 5] + for algo = stack_solve_algo 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)); diff --git a/matlab/write_table_short.m b/matlab/write_table_short.m index 9b69fa0..3dac9da 100644 --- a/matlab/write_table_short.m +++ b/matlab/write_table_short.m @@ -32,7 +32,7 @@ fclose(fid); % % Matlab % -for algo = [0, 1] +for algo = stack_solve_algo if ~isnan(MATLAB_computing(id(stack_solve_algo==algo), 1)) switch MATLAB_computing(id(stack_solve_algo==algo), 1) case -1 @@ -41,6 +41,8 @@ for algo = [0, 1] T = strrep(T, sprintf('{a%u_mat}', algo), 'FAIL'); % algorithm did not converge case -3 T = strrep(T, sprintf('{a%u_mat}', algo), 'CRASH'); % matlab crash + case -10 + T = strrep(T, sprintf('{a%u_mat}', algo), 'NA'); % not available otherwise T = strrep(T, sprintf('{a%u_mat}', algo), int2str(MATLAB_computing(id(stack_solve_algo==algo), 1))); end @@ -49,7 +51,7 @@ end % % use_dll % -for algo = [0, 1] +for algo = stack_solve_algo if ~isnan(USE_DLL_computing(id(stack_solve_algo==algo), 1)) switch USE_DLL_computing(id(stack_solve_algo==algo), 1) case -1 @@ -58,6 +60,8 @@ for algo = [0, 1] T = strrep(T, sprintf('{a%u_dll}', algo), 'FAIL'); case -3 T = strrep(T, sprintf('{a%u_dll}', algo), 'CRASH'); + case -10 + T = strrep(T, sprintf('{a%u_dll}', algo), 'NA'); otherwise T = strrep(T, sprintf('{a%u_dll}', algo), int2str(USE_DLL_computing(id(stack_solve_algo==algo), 1))); end @@ -66,7 +70,7 @@ end % % Bytecode % -for algo = [0, 1, 2, 3, 4, 5] +for algo = stack_solve_algo if ~isnan(BYTECODE_computing(id(stack_solve_algo==algo), 1)) switch BYTECODE_computing(id(stack_solve_algo==algo), 1) case -1 @@ -75,6 +79,8 @@ for algo = [0, 1, 2, 3, 4, 5] T = strrep(T, sprintf('{a%u_byt}', algo), 'FAIL'); case -3 T = strrep(T, sprintf('{a%u_byt}', algo), 'CRASH'); + case -10 + T = strrep(T, sprintf('{a%u_byt}', algo), 'NA'); otherwise T = strrep(T, sprintf('{a%u_byt}', algo), int2str(BYTECODE_computing(id(stack_solve_algo==algo), 1))); end @@ -84,7 +90,7 @@ end % Matlab with blocks % for mfs = 0:3 - for algo = [0, 1, 2, 3, 4] + for algo = stack_solve_algo if ~isnan(MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1)) switch MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) case -1 @@ -93,6 +99,8 @@ for mfs = 0:3 T = strrep(T, sprintf('{a%u_mat_blk_%u}', algo, mfs), 'FAIL'); case -3 T = strrep(T, sprintf('{a%u_mat_blk_%u}', algo, mfs), 'CRASH'); + case -10 + T = strrep(T, sprintf('{a%u_mat_blk_%u}', algo, mfs), 'NA'); otherwise T = strrep(T, sprintf('{a%u_mat_blk_%u}', algo, mfs), int2str(MATLAB_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1))); end @@ -103,7 +111,7 @@ end % USE_DLL with blocks % for mfs = 0:3 - for algo = [0, 1, 2, 3, 4] + for algo = stack_solve_algo if ~isnan(USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1)) switch USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) case -1 @@ -112,6 +120,8 @@ for mfs = 0:3 T = strrep(T, sprintf('{a%u_dll_blk_%u}', algo, mfs), 'FAIL'); case -3 T = strrep(T, sprintf('{a%u_dll_blk_%u}', algo, mfs), 'CRASH'); + case -10 + T = strrep(T, sprintf('{a%u_dll_blk_%u}', algo, mfs), 'NA'); otherwise T = strrep(T, sprintf('{a%u_dll_blk_%u}', algo, mfs), int2str(USE_DLL_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1))); end @@ -122,7 +132,7 @@ end % Bytecode with blocks % for mfs = 0:3 - for algo = [0, 1, 2, 3, 4, 5] + for algo = stack_solve_algo if ~isnan(BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1)) switch BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1) case -1 @@ -131,6 +141,8 @@ for mfs = 0:3 T = strrep(T, sprintf('{a%u_byt_blk_%u}', algo, mfs), 'FAIL'); case -3 T = strrep(T, sprintf('{a%u_byt_blk_%u}', algo, mfs), 'CRASH'); + case -10 + T = strrep(T, sprintf('{a%u_byt_blk_%u}', algo, mfs), 'NA'); otherwise T = strrep(T, sprintf('{a%u_byt_blk_%u}', algo, mfs), int2str(BYTECODE_WITH_BLOCKS_computing(id(stack_solve_algo==algo), mfs+1))); end diff --git a/tables/template-short.tex b/tables/template-short.tex index c685215..7625f79 100644 --- a/tables/template-short.tex +++ b/tables/template-short.tex @@ -11,10 +11,10 @@ \cline{2-16} \texttt{0} & {a0_mat} & {a0_dll} & {a0_byt} & {a0_mat_blk_0} & {a0_mat_blk_1} & {a0_mat_blk_2} & {a0_mat_blk_3} & {a0_dll_blk_0} & {a0_dll_blk_1} & {a0_dll_blk_2} & {a0_dll_blk_3} & {a0_byt_blk_0} & {a0_byt_blk_1} & {a0_byt_blk_2} & {a0_byt_blk_3} \\ \texttt{1} & {a1_mat} & {a1_dll} & {a1_byt} & {a1_mat_blk_0} & {a1_mat_blk_1} & {a1_mat_blk_2} & {a1_mat_blk_3} & {a1_dll_blk_0} & {a1_dll_blk_1} & {a1_dll_blk_2} & {a1_dll_blk_3} & {a1_byt_blk_0} & {a1_byt_blk_1} & {a1_byt_blk_2} & {a1_byt_blk_3} \\ - \texttt{2} & NA & NA & {a2_byt} & {a2_mat_blk_0} & {a2_mat_blk_1} & {a2_mat_blk_2} & {a2_mat_blk_3} & {a2_dll_blk_0} & {a2_dll_blk_1} & {a2_dll_blk_2} & {a2_dll_blk_3} & {a2_byt_blk_0} & {a2_byt_blk_1} & {a2_byt_blk_2} & {a2_byt_blk_3} \\ - \texttt{3} & NA & NA & {a3_byt} & {a3_mat_blk_0} & {a3_mat_blk_1} & {a3_mat_blk_2} & {a3_mat_blk_3} & {a3_dll_blk_0} & {a3_dll_blk_1} & {a3_dll_blk_2} & {a3_dll_blk_3} & {a3_byt_blk_0} & {a3_byt_blk_1} & {a3_byt_blk_2} & {a3_byt_blk_3} \\ - \texttt{4} & NA & NA & {a4_byt} & {a4_mat_blk_0} & {a4_mat_blk_1} & {a4_mat_blk_2} & {a4_mat_blk_3} & {a4_dll_blk_0} & {a4_dll_blk_1} & {a4_dll_blk_2} & {a4_dll_blk_3} & {a4_byt_blk_0} & {a4_byt_blk_1} & {a4_byt_blk_2} & {a4_byt_blk_3} \\ - \texttt{5} & NA & NA & {a5_byt} & NA & NA & NA & NA & NA & NA & NA & NA & {a5_byt_blk_0} & {a5_byt_blk_1} & {a5_byt_blk_2} & {a5_byt_blk_3}\\ + \texttt{2} & {a2_mat} & {a2_dll} & {a2_byt} & {a2_mat_blk_0} & {a2_mat_blk_1} & {a2_mat_blk_2} & {a2_mat_blk_3} & {a2_dll_blk_0} & {a2_dll_blk_1} & {a2_dll_blk_2} & {a2_dll_blk_3} & {a2_byt_blk_0} & {a2_byt_blk_1} & {a2_byt_blk_2} & {a2_byt_blk_3} \\ + \texttt{3} & {a3_mat} & {a3_dll} & {a3_byt} & {a3_mat_blk_0} & {a3_mat_blk_1} & {a3_mat_blk_2} & {a3_mat_blk_3} & {a3_dll_blk_0} & {a3_dll_blk_1} & {a3_dll_blk_2} & {a3_dll_blk_3} & {a3_byt_blk_0} & {a3_byt_blk_1} & {a3_byt_blk_2} & {a3_byt_blk_3} \\ + \texttt{4} & {a4_mat} & {a4_dll} & {a4_byt} & {a4_mat_blk_0} & {a4_mat_blk_1} & {a4_mat_blk_2} & {a4_mat_blk_3} & {a4_dll_blk_0} & {a4_dll_blk_1} & {a4_dll_blk_2} & {a4_dll_blk_3} & {a4_byt_blk_0} & {a4_byt_blk_1} & {a4_byt_blk_2} & {a4_byt_blk_3} \\ + \texttt{5} & {a5_mat} & {a5_dll} & {a5_byt} & {a5_mat_blk_0} & {a5_mat_blk_1} & {a5_mat_blk_2} & {a5_mat_blk_3} & {a5_dll_blk_0} & {a5_dll_blk_1} & {a5_dll_blk_2} & {a5_dll_blk_3} & {a5_byt_blk_0} & {a5_byt_blk_1} & {a5_byt_blk_2} & {a5_byt_blk_3} \\ \hline \end{tabular} diff --git a/tables/template.tex b/tables/template.tex index 130811b..99ef7eb 100644 --- a/tables/template.tex +++ b/tables/template.tex @@ -11,10 +11,10 @@ \cline{2-16} \texttt{0} & {a0_mat} & {a0_dll} & {a0_byt} & {a0_mat_blk_0} & {a0_mat_blk_1} & {a0_mat_blk_2} & {a0_mat_blk_3} & {a0_dll_blk_0} & {a0_dll_blk_1} & {a0_dll_blk_2} & {a0_dll_blk_3} & {a0_byt_blk_0} & {a0_byt_blk_1} & {a0_byt_blk_2} & {a0_byt_blk_3} \\ \texttt{1} & {a1_mat} & {a1_dll} & {a1_byt} & {a1_mat_blk_0} & {a1_mat_blk_1} & {a1_mat_blk_2} & {a1_mat_blk_3} & {a1_dll_blk_0} & {a1_dll_blk_1} & {a1_dll_blk_2} & {a1_dll_blk_3} & {a1_byt_blk_0} & {a1_byt_blk_1} & {a1_byt_blk_2} & {a1_byt_blk_3} \\ - \texttt{2} & NA & NA & {a2_byt} & {a2_mat_blk_0} & {a2_mat_blk_1} & {a2_mat_blk_2} & {a2_mat_blk_3} & {a2_dll_blk_0} & {a2_dll_blk_1} & {a2_dll_blk_2} & {a2_dll_blk_3} & {a2_byt_blk_0} & {a2_byt_blk_1} & {a2_byt_blk_2} & {a2_byt_blk_3} \\ - \texttt{3} & NA & NA & {a3_byt} & {a3_mat_blk_0} & {a3_mat_blk_1} & {a3_mat_blk_2} & {a3_mat_blk_3} & {a3_dll_blk_0} & {a3_dll_blk_1} & {a3_dll_blk_2} & {a3_dll_blk_3} & {a3_byt_blk_0} & {a3_byt_blk_1} & {a3_byt_blk_2} & {a3_byt_blk_3} \\ - \texttt{4} & NA & NA & {a4_byt} & {a4_mat_blk_0} & {a4_mat_blk_1} & {a4_mat_blk_2} & {a4_mat_blk_3} & {a4_dll_blk_0} & {a4_dll_blk_1} & {a4_dll_blk_2} & {a4_dll_blk_3} & {a4_byt_blk_0} & {a4_byt_blk_1} & {a4_byt_blk_2} & {a4_byt_blk_3} \\ - \texttt{5} & NA & NA & {a5_byt} & NA & NA & NA & NA & NA & NA & NA & NA & {a5_byt_blk_0} & {a5_byt_blk_1} & {a5_byt_blk_2} & {a5_byt_blk_3}\\ + \texttt{2} & {a2_mat} & {a2_dll} & {a2_byt} & {a2_mat_blk_0} & {a2_mat_blk_1} & {a2_mat_blk_2} & {a2_mat_blk_3} & {a2_dll_blk_0} & {a2_dll_blk_1} & {a2_dll_blk_2} & {a2_dll_blk_3} & {a2_byt_blk_0} & {a2_byt_blk_1} & {a2_byt_blk_2} & {a2_byt_blk_3} \\ + \texttt{3} & {a3_mat} & {a3_dll} & {a3_byt} & {a3_mat_blk_0} & {a3_mat_blk_1} & {a3_mat_blk_2} & {a3_mat_blk_3} & {a3_dll_blk_0} & {a3_dll_blk_1} & {a3_dll_blk_2} & {a3_dll_blk_3} & {a3_byt_blk_0} & {a3_byt_blk_1} & {a3_byt_blk_2} & {a3_byt_blk_3} \\ + \texttt{4} & {a4_mat} & {a4_dll} & {a4_byt} & {a4_mat_blk_0} & {a4_mat_blk_1} & {a4_mat_blk_2} & {a4_mat_blk_3} & {a4_dll_blk_0} & {a4_dll_blk_1} & {a4_dll_blk_2} & {a4_dll_blk_3} & {a4_byt_blk_0} & {a4_byt_blk_1} & {a4_byt_blk_2} & {a4_byt_blk_3} \\ + \texttt{5} & {a5_mat} & {a5_dll} & {a5_byt} & {a5_mat_blk_0} & {a5_mat_blk_1} & {a5_mat_blk_2} & {a5_mat_blk_3} & {a5_dll_blk_0} & {a5_dll_blk_1} & {a5_dll_blk_2} & {a5_dll_blk_3} & {a5_byt_blk_0} & {a5_byt_blk_1} & {a5_byt_blk_2} & {a5_byt_blk_3} \\ \texttt{7(0)} & {a7_0_mat} & {a7_0_dll} & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\ \texttt{7(1)} & {a7_1_mat} & {a7_1_dll} & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA & NA\\ -- GitLab