From 05d69cbf14984ef021bc8b746c7fdf1f91316648 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Sat, 21 Nov 2020 15:33:46 +0100 Subject: [PATCH] Remove more new/delete, this time for lmm::System in maxmin tests. --- src/kernel/lmm/maxmin_test.cpp | 122 +++++++++---------- teshsuite/surf/lmm_usage/lmm_usage.cpp | 87 +++++++------ teshsuite/surf/maxmin_bench/maxmin_bench.cpp | 46 +++---- 3 files changed, 122 insertions(+), 133 deletions(-) diff --git a/src/kernel/lmm/maxmin_test.cpp b/src/kernel/lmm/maxmin_test.cpp index bc26a8ee99..7e51fb2d57 100644 --- a/src/kernel/lmm/maxmin_test.cpp +++ b/src/kernel/lmm/maxmin_test.cpp @@ -12,7 +12,7 @@ namespace lmm = simgrid::kernel::lmm; TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-single-sys]") { - lmm::System* Sys = lmm::make_new_maxmin_system(false); + lmm::System Sys(false); SECTION("Variable penalty") { @@ -29,13 +29,13 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si * o rho1 + rho2 = C (because all weights are 1) */ - lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 3); - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2); + lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 3); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2); - Sys->expand(sys_cnst, rho_1, 1); - Sys->expand(sys_cnst, rho_2, 1); - Sys->solve(); + Sys.expand(sys_cnst, rho_1, 1); + Sys.expand(sys_cnst, rho_2, 1); + Sys.solve(); REQUIRE(double_equals(rho_1->get_value(), 2, sg_maxmin_precision)); REQUIRE(double_equals(rho_2->get_value(), 1, sg_maxmin_precision)); @@ -57,13 +57,13 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si * o so, rho1 = rho2 = 1 (because C is 3) */ - lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 3); - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 1); + lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 3); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 1); - Sys->expand(sys_cnst, rho_1, 1); - Sys->expand(sys_cnst, rho_2, 2); - Sys->solve(); + Sys.expand(sys_cnst, rho_1, 1); + Sys.expand(sys_cnst, rho_2, 2); + Sys.solve(); REQUIRE(double_equals(rho_1->get_value(), 1, sg_maxmin_precision)); REQUIRE(double_equals(rho_2->get_value(), 1, sg_maxmin_precision)); @@ -85,13 +85,13 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si * o rho1 + 2*rho2 = C (because consumption weight of rho2 is 2) */ - lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 20); - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2); + lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 20); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2); - Sys->expand(sys_cnst, rho_1, 1); - Sys->expand(sys_cnst, rho_2, 2); - Sys->solve(); + Sys.expand(sys_cnst, rho_1, 1); + Sys.expand(sys_cnst, rho_2, 2); + Sys.solve(); double rho_1_share = 10; REQUIRE(double_equals(rho_1->get_value(), rho_1_share, sg_maxmin_precision)); @@ -117,21 +117,21 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si * o 2*rho1 + rho3 = C2 (because consumption weight of rho1 is 2) */ - lmm::Constraint* sys_cnst_1 = Sys->constraint_new(nullptr, 20); - lmm::Constraint* sys_cnst_2 = Sys->constraint_new(nullptr, 60); + lmm::Constraint* sys_cnst_1 = Sys.constraint_new(nullptr, 20); + lmm::Constraint* sys_cnst_2 = Sys.constraint_new(nullptr, 60); - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1, -1, 2); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2, -1, 1); - lmm::Variable* rho_3 = Sys->variable_new(nullptr, 1, -1, 1); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1, -1, 2); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2, -1, 1); + lmm::Variable* rho_3 = Sys.variable_new(nullptr, 1, -1, 1); // Constraint 1 - Sys->expand(sys_cnst_1, rho_1, 1); - Sys->expand(sys_cnst_1, rho_2, 2); + Sys.expand(sys_cnst_1, rho_1, 1); + Sys.expand(sys_cnst_1, rho_2, 2); // Constraint 2 - Sys->expand(sys_cnst_2, rho_1, 2); - Sys->expand(sys_cnst_2, rho_3, 1); - Sys->solve(); + Sys.expand(sys_cnst_2, rho_1, 2); + Sys.expand(sys_cnst_2, rho_3, 1); + Sys.solve(); double rho_1_share = 10; // Start by solving the first constraint (results is the same as previous tests) REQUIRE(double_equals(rho_1->get_value(), rho_1_share, sg_maxmin_precision)); @@ -139,13 +139,12 @@ TEST_CASE("kernel::lmm Single constraint shared systems", "[kernel-lmm-shared-si REQUIRE(double_equals(rho_3->get_value(), 60 - 2 * rho_1_share, sg_maxmin_precision)); } - Sys->variable_free_all(); - delete Sys; + Sys.variable_free_all(); } TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshared-single-sys]") { - lmm::System* Sys = lmm::make_new_maxmin_system(false); + lmm::System Sys(false); SECTION("Variable penalty") { @@ -163,14 +162,14 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare * o rho2 = max_share/2 (because penalty of rho2 is 2) */ - lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 10); + lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 10); sys_cnst->unshare(); // FATPIPE - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2); - Sys->expand(sys_cnst, rho_1, 1); - Sys->expand(sys_cnst, rho_2, 1); - Sys->solve(); + Sys.expand(sys_cnst, rho_1, 1); + Sys.expand(sys_cnst, rho_2, 1); + Sys.solve(); REQUIRE(double_equals(rho_1->get_value(), 10, sg_maxmin_precision)); REQUIRE(double_equals(rho_2->get_value(), 10 / 2, sg_maxmin_precision)); @@ -193,14 +192,14 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare * o rho2 = max_share/2 (because penalty of rho2 is 1) */ - lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 10); + lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 10); sys_cnst->unshare(); // FATPIPE - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 1); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 1); - Sys->expand(sys_cnst, rho_1, 1); - Sys->expand(sys_cnst, rho_2, 2); - Sys->solve(); + Sys.expand(sys_cnst, rho_1, 1); + Sys.expand(sys_cnst, rho_2, 2); + Sys.solve(); REQUIRE(double_equals(rho_1->get_value(), 5, sg_maxmin_precision)); REQUIRE(double_equals(rho_2->get_value(), 5, sg_maxmin_precision)); @@ -223,14 +222,14 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare * o rho1 <= C and 2*rho2 <= C */ - lmm::Constraint* sys_cnst = Sys->constraint_new(nullptr, 10); + lmm::Constraint* sys_cnst = Sys.constraint_new(nullptr, 10); sys_cnst->unshare(); - lmm::Variable* sys_var_1 = Sys->variable_new(nullptr, 1); - lmm::Variable* sys_var_2 = Sys->variable_new(nullptr, 2); + lmm::Variable* sys_var_1 = Sys.variable_new(nullptr, 1); + lmm::Variable* sys_var_2 = Sys.variable_new(nullptr, 2); - Sys->expand(sys_cnst, sys_var_1, 1); - Sys->expand(sys_cnst, sys_var_2, 2); - Sys->solve(); + Sys.expand(sys_cnst, sys_var_1, 1); + Sys.expand(sys_cnst, sys_var_2, 2); + Sys.solve(); REQUIRE(double_equals(sys_var_1->get_value(), 10, sg_maxmin_precision)); REQUIRE(double_equals(sys_var_2->get_value(), 5, sg_maxmin_precision)); @@ -255,23 +254,23 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare * o Each constraint should satisfy max(a_i * rho_i) <= C_r */ - lmm::Constraint* sys_cnst_1 = Sys->constraint_new(nullptr, 10); - lmm::Constraint* sys_cnst_2 = Sys->constraint_new(nullptr, 60); + lmm::Constraint* sys_cnst_1 = Sys.constraint_new(nullptr, 10); + lmm::Constraint* sys_cnst_2 = Sys.constraint_new(nullptr, 60); sys_cnst_1->unshare(); // FATPIPE sys_cnst_2->unshare(); - lmm::Variable* rho_1 = Sys->variable_new(nullptr, 1, -1, 2); - lmm::Variable* rho_2 = Sys->variable_new(nullptr, 2, -1, 1); - lmm::Variable* rho_3 = Sys->variable_new(nullptr, 1, -1, 1); + lmm::Variable* rho_1 = Sys.variable_new(nullptr, 1, -1, 2); + lmm::Variable* rho_2 = Sys.variable_new(nullptr, 2, -1, 1); + lmm::Variable* rho_3 = Sys.variable_new(nullptr, 1, -1, 1); // Constraint 1 - Sys->expand(sys_cnst_1, rho_1, 1); - Sys->expand(sys_cnst_1, rho_2, 2); + Sys.expand(sys_cnst_1, rho_1, 1); + Sys.expand(sys_cnst_1, rho_2, 2); // Constraint 2 - Sys->expand(sys_cnst_2, rho_1, 2); - Sys->expand(sys_cnst_2, rho_3, 1); - Sys->solve(); + Sys.expand(sys_cnst_2, rho_1, 2); + Sys.expand(sys_cnst_2, rho_3, 1); + Sys.solve(); double rho_1_share = 10; // Start by solving the first constraint (results is the same as previous tests) REQUIRE(double_equals(rho_1->get_value(), rho_1_share, sg_maxmin_precision)); @@ -279,6 +278,5 @@ TEST_CASE("kernel::lmm Single constraint unshared systems", "[kernel-lmm-unshare REQUIRE(double_equals(rho_3->get_value(), 60, sg_maxmin_precision)); } - Sys->variable_free_all(); - delete Sys; + Sys.variable_free_all(); } diff --git a/teshsuite/surf/lmm_usage/lmm_usage.cpp b/teshsuite/surf/lmm_usage/lmm_usage.cpp index 249ddf7a72..6175cd6d9b 100644 --- a/teshsuite/surf/lmm_usage/lmm_usage.cpp +++ b/teshsuite/surf/lmm_usage/lmm_usage.cpp @@ -31,67 +31,65 @@ static void test1() double a = 1.0; double b = 10.0; - lmm::System* Sys = lmm::make_new_maxmin_system(false); - lmm::Constraint* L1 = Sys->constraint_new(nullptr, a); - lmm::Constraint* L2 = Sys->constraint_new(nullptr, b); - lmm::Constraint* L3 = Sys->constraint_new(nullptr, a); + lmm::System Sys(false); + lmm::Constraint* L1 = Sys.constraint_new(nullptr, a); + lmm::Constraint* L2 = Sys.constraint_new(nullptr, b); + lmm::Constraint* L3 = Sys.constraint_new(nullptr, a); - lmm::Variable* R_1_2_3 = Sys->variable_new(nullptr, 1.0, -1.0, 3); - lmm::Variable* R_1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - lmm::Variable* R_2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - lmm::Variable* R_3 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_1_2_3 = Sys.variable_new(nullptr, 1.0, -1.0, 3); + lmm::Variable* R_1 = Sys.variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_2 = Sys.variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_3 = Sys.variable_new(nullptr, 1.0, -1.0, 1); - Sys->update_variable_penalty(R_1_2_3, 1.0); - Sys->update_variable_penalty(R_1, 1.0); - Sys->update_variable_penalty(R_2, 1.0); - Sys->update_variable_penalty(R_3, 1.0); + Sys.update_variable_penalty(R_1_2_3, 1.0); + Sys.update_variable_penalty(R_1, 1.0); + Sys.update_variable_penalty(R_2, 1.0); + Sys.update_variable_penalty(R_3, 1.0); - Sys->expand(L1, R_1_2_3, 1.0); - Sys->expand(L2, R_1_2_3, 1.0); - Sys->expand(L3, R_1_2_3, 1.0); + Sys.expand(L1, R_1_2_3, 1.0); + Sys.expand(L2, R_1_2_3, 1.0); + Sys.expand(L3, R_1_2_3, 1.0); - Sys->expand(L1, R_1, 1.0); - Sys->expand(L2, R_2, 1.0); - Sys->expand(L3, R_3, 1.0); + Sys.expand(L1, R_1, 1.0); + Sys.expand(L2, R_2, 1.0); + Sys.expand(L3, R_3, 1.0); - Sys->solve(); + Sys.solve(); PRINT_VAR(R_1_2_3); PRINT_VAR(R_1); PRINT_VAR(R_2); PRINT_VAR(R_3); - Sys->variable_free(R_1_2_3); - Sys->variable_free(R_1); - Sys->variable_free(R_2); - Sys->variable_free(R_3); - delete Sys; + Sys.variable_free(R_1_2_3); + Sys.variable_free(R_1); + Sys.variable_free(R_2); + Sys.variable_free(R_3); } static void test2() { - lmm::System* Sys = lmm::make_new_maxmin_system(false); + lmm::System Sys(false); - lmm::Constraint* CPU1 = Sys->constraint_new(nullptr, 200.0); - lmm::Constraint* CPU2 = Sys->constraint_new(nullptr, 100.0); + lmm::Constraint* CPU1 = Sys.constraint_new(nullptr, 200.0); + lmm::Constraint* CPU2 = Sys.constraint_new(nullptr, 100.0); - lmm::Variable* T1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - lmm::Variable* T2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* T1 = Sys.variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* T2 = Sys.variable_new(nullptr, 1.0, -1.0, 1); - Sys->update_variable_penalty(T1, 1.0); - Sys->update_variable_penalty(T2, 1.0); + Sys.update_variable_penalty(T1, 1.0); + Sys.update_variable_penalty(T2, 1.0); - Sys->expand(CPU1, T1, 1.0); - Sys->expand(CPU2, T2, 1.0); + Sys.expand(CPU1, T1, 1.0); + Sys.expand(CPU2, T2, 1.0); - Sys->solve(); + Sys.solve(); PRINT_VAR(T1); PRINT_VAR(T2); - Sys->variable_free(T1); - Sys->variable_free(T2); - delete Sys; + Sys.variable_free(T1); + Sys.variable_free(T2); } static void test3() @@ -129,34 +127,33 @@ static void test3() A[13][14] = 1.0; A[14][15] = 1.0; - lmm::System* Sys = lmm::make_new_maxmin_system(false); + lmm::System Sys(false); /* Creates the constraints */ std::array tmp_cnst; for (int i = 0; i < 15; i++) - tmp_cnst[i] = Sys->constraint_new(nullptr, B[i]); + tmp_cnst[i] = Sys.constraint_new(nullptr, B[i]); /* Creates the variables */ std::array tmp_var; for (int j = 0; j < 16; j++) { - tmp_var[j] = Sys->variable_new(nullptr, 1.0, -1.0, 15); - Sys->update_variable_penalty(tmp_var[j], 1.0); + tmp_var[j] = Sys.variable_new(nullptr, 1.0, -1.0, 15); + Sys.update_variable_penalty(tmp_var[j], 1.0); } /* Link constraints and variables */ for (int i = 0; i < 15; i++) for (int j = 0; j < 16; j++) if (A[i][j] != 0.0) - Sys->expand(tmp_cnst[i], tmp_var[j], 1.0); + Sys.expand(tmp_cnst[i], tmp_var[j], 1.0); - Sys->solve(); + Sys.solve(); for (int j = 0; j < 16; j++) PRINT_VAR(tmp_var[j]); for (int j = 0; j < 16; j++) - Sys->variable_free(tmp_var[j]); - delete Sys; + Sys.variable_free(tmp_var[j]); } int main(int argc, char** argv) diff --git a/teshsuite/surf/maxmin_bench/maxmin_bench.cpp b/teshsuite/surf/maxmin_bench/maxmin_bench.cpp index a8a0086250..59bff100d7 100644 --- a/teshsuite/surf/maxmin_bench/maxmin_bench.cpp +++ b/teshsuite/surf/maxmin_bench/maxmin_bench.cpp @@ -20,15 +20,14 @@ static double test(int nb_cnst, int nb_var, int nb_elem, unsigned int pw_base_limit, unsigned int pw_max_limit, double rate_no_limit, int max_share, int mode) { - auto* cnst = new simgrid::kernel::lmm::Constraint*[nb_cnst]; - auto* var = new simgrid::kernel::lmm::Variable*[nb_var]; - auto* used = new int[nb_cnst]; + std::vector constraints(nb_cnst); + std::vector variables(nb_var); /* We cannot activate the selective update as we pass nullptr as an Action when creating the variables */ - auto* Sys = new simgrid::kernel::lmm::System(false); + simgrid::kernel::lmm::System Sys(false); - for (int i = 0; i < nb_cnst; i++) { - cnst[i] = Sys->constraint_new(nullptr, simgrid::xbt::random::uniform_real(0.0, 10.0)); + for (auto& cnst : constraints) { + cnst = Sys.constraint_new(nullptr, simgrid::xbt::random::uniform_real(0.0, 10.0)); int l; if (rate_no_limit > simgrid::xbt::random::uniform_real(0.0, 1.0)) { // Look at what happens when there is no concurrency limit @@ -37,59 +36,54 @@ static double test(int nb_cnst, int nb_var, int nb_elem, unsigned int pw_base_li // Badly logarithmically random concurrency limit in [2^pw_base_limit+1,2^pw_base_limit+2^pw_max_limit] l = (1 << pw_base_limit) + (1 << simgrid::xbt::random::uniform_int(0, pw_max_limit - 1)); } - cnst[i]->set_concurrency_limit(l); + cnst->set_concurrency_limit(l); } - for (int i = 0; i < nb_var; i++) { - var[i] = Sys->variable_new(nullptr, 1.0, -1.0, nb_elem); + for (auto& var : variables) { + var = Sys.variable_new(nullptr, 1.0, -1.0, nb_elem); //Have a few variables with a concurrency share of two (e.g. cross-traffic in some cases) short concurrency_share = 1 + static_cast(simgrid::xbt::random::uniform_int(0, max_share - 1)); - var[i]->set_concurrency_share(concurrency_share); + var->set_concurrency_share(concurrency_share); - for (int j = 0; j < nb_cnst; j++) - used[j] = 0; + std::vector used(nb_cnst, 0); for (int j = 0; j < nb_elem; j++) { int k; do { k = simgrid::xbt::random::uniform_int(0, nb_cnst - 1); } while (used[k] >= concurrency_share); - Sys->expand(cnst[k], var[i], simgrid::xbt::random::uniform_real(0.0, 1.5)); - Sys->expand_add(cnst[k], var[i], simgrid::xbt::random::uniform_real(0.0, 1.5)); + Sys.expand(constraints[k], var, simgrid::xbt::random::uniform_real(0.0, 1.5)); + Sys.expand_add(constraints[k], var, simgrid::xbt::random::uniform_real(0.0, 1.5)); used[k]++; } } fprintf(stderr, "Starting to solve(%i)\n", simgrid::xbt::random::uniform_int(0, 999)); double date = xbt_os_time(); - Sys->solve(); + Sys.solve(); date = (xbt_os_time() - date) * 1e6; if(mode==2){ fprintf(stderr,"Max concurrency:\n"); int l=0; for (int i = 0; i < nb_cnst; i++) { - int j = cnst[i]->get_concurrency_maximum(); - int k = cnst[i]->get_concurrency_limit(); + int j = constraints[i]->get_concurrency_maximum(); + int k = constraints[i]->get_concurrency_limit(); xbt_assert(k<0 || j<=k); if(j>l) l=j; fprintf(stderr,"(%i):%i/%i ",i,j,k); - cnst[i]->reset_concurrency_maximum(); - xbt_assert(not cnst[i]->get_concurrency_maximum()); + constraints[i]->reset_concurrency_maximum(); + xbt_assert(not constraints[i]->get_concurrency_maximum()); if(i%10==9) fprintf(stderr,"\n"); } fprintf(stderr,"\nTotal maximum concurrency is %i\n",l); - Sys->print(); + Sys.print(); } - for (int i = 0; i < nb_var; i++) - Sys->variable_free(var[i]); - delete Sys; - delete[] cnst; - delete[] var; - delete[] used; + for (auto const& var : variables) + Sys.variable_free(var); return date; } -- 2.20.1