From 8f768be2dafbdd3a61bd664343362a72791e10dd Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Wed, 23 Apr 2025 03:26:40 -0700 Subject: [PATCH] Remove solver_nisland field from mjData. PiperOrigin-RevId: 750527660 Change-Id: I6b34944c92483ea2abc774df75efd868255a2bac --- doc/includes/references.h | 1 - include/mujoco/mjdata.h | 1 - include/mujoco/mjxmacro.h | 1 - python/mujoco/introspect/structs.py | 5 ----- sample/testspeed.cc | 2 +- simulate/simulate.cc | 6 +++--- src/engine/engine_forward.c | 4 ---- src/engine/engine_io.c | 1 - src/engine/engine_print.c | 3 +-- unity/Runtime/Bindings/MjBindings.cs | 1 - 10 files changed, 5 insertions(+), 20 deletions(-) diff --git a/doc/includes/references.h b/doc/includes/references.h index 35fd7ff1..89890efc 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -154,7 +154,6 @@ struct mjData_ { // solver statistics mjSolverStat solver[mjNISLAND*mjNSOLVER]; // solver statistics per island, per iteration - int solver_nisland; // number of islands processed by solver int solver_niter[mjNISLAND]; // number of solver iterations, per island int solver_nnz[mjNISLAND]; // number of nonzeros in Hessian or efc_AR, per island mjtNum solver_fwdinv[2]; // forward-inverse comparison: qfrc, efc diff --git a/include/mujoco/mjdata.h b/include/mujoco/mjdata.h index b5b0373b..d6f98775 100644 --- a/include/mujoco/mjdata.h +++ b/include/mujoco/mjdata.h @@ -182,7 +182,6 @@ struct mjData_ { // solver statistics mjSolverStat solver[mjNISLAND*mjNSOLVER]; // solver statistics per island, per iteration - int solver_nisland; // number of islands processed by solver int solver_niter[mjNISLAND]; // number of solver iterations, per island int solver_nnz[mjNISLAND]; // number of nonzeros in Hessian or efc_AR, per island mjtNum solver_fwdinv[2]; // forward-inverse comparison: qfrc, efc diff --git a/include/mujoco/mjxmacro.h b/include/mujoco/mjxmacro.h index 704ba353..7c73c598 100644 --- a/include/mujoco/mjxmacro.h +++ b/include/mujoco/mjxmacro.h @@ -777,7 +777,6 @@ X( size_t, maxuse_arena ) \ X( int, maxuse_con ) \ X( int, maxuse_efc ) \ - X( int, solver_nisland ) \ X( int, ncon ) \ X( int, ne ) \ X( int, nf ) \ diff --git a/python/mujoco/introspect/structs.py b/python/mujoco/introspect/structs.py index 3db9e84c..db237c74 100644 --- a/python/mujoco/introspect/structs.py +++ b/python/mujoco/introspect/structs.py @@ -4816,11 +4816,6 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), doc='solver statistics per island, per iteration', ), - StructFieldDecl( - name='solver_nisland', - type=ValueType(name='int'), - doc='number of islands processed by solver', - ), StructFieldDecl( name='solver_niter', type=ArrayType( diff --git a/sample/testspeed.cc b/sample/testspeed.cc index 84eb78bd..8074f68e 100644 --- a/sample/testspeed.cc +++ b/sample/testspeed.cc @@ -97,7 +97,7 @@ void simulate(int id, int nstep, mjtNum* ctrl) { // accumulate statistics contacts[id] += d[id]->ncon; constraints[id] += d[id]->nefc; - int nisland = d[id]->solver_nisland; + int nisland = mjMAX(1, mjMIN(d[id]->nisland, mjNISLAND)); if (nisland == 1 || nisland == 0) { iterations[id] += d[id]->solver_niter[0]; } else { diff --git a/simulate/simulate.cc b/simulate/simulate.cc index 8d5013a3..78a5e312 100644 --- a/simulate/simulate.cc +++ b/simulate/simulate.cc @@ -298,7 +298,7 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) { memset(sim->figcost.linepnt, 0, mjMAXLINE*sizeof(int)); // number of islands that have diagnostics - int nisland = mjMIN(d->solver_nisland, mjNISLAND); + int nisland = mjMAX(1, mjMIN(d->nisland, mjNISLAND)); // iterate over islands for (int k=0; k < nisland; k++) { @@ -413,7 +413,7 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) { static_cast(d->nefc), static_cast(sqrt_nnz), static_cast(d->ncon), - static_cast(solver_niter) + static_cast(solver_niter) / nisland }; // update figsize @@ -582,7 +582,7 @@ void UpdateInfoText(mj::Simulate* sim, const mjModel* m, const mjData* d, char tmp[20]; // number of islands with statistics - int nisland = mjMIN(d->solver_nisland, mjNISLAND); + int nisland = mjMAX(1, mjMIN(d->nisland, mjNISLAND)); // compute solver error (maximum over islands) mjtNum solerr = 0; diff --git a/src/engine/engine_forward.c b/src/engine/engine_forward.c index 42520046..3857bcae 100644 --- a/src/engine/engine_forward.c +++ b/src/engine/engine_forward.c @@ -730,7 +730,6 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) { // solve using threads mj_solCG_island_multithreaded(m, d); } - d->solver_nisland = nisland; } // run solver over all constraints @@ -751,9 +750,6 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) { default: mjERROR("unknown solver type %d", m->opt.solver); } - - // one (monolithic) island - d->solver_nisland = 1; } // save result for next step warmstart diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index 0f6878e1..78aed97d 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -1904,7 +1904,6 @@ static void _resetData(const mjModel* m, mjData* d, unsigned char debug_value) { memset(d->warning, 0, mjNWARNING*sizeof(mjWarningStat)); memset(d->timer, 0, mjNTIMER*sizeof(mjTimerStat)); memset(d->solver, 0, mjNSOLVER*mjNISLAND*sizeof(mjSolverStat)); - d->solver_nisland = 0; mju_zeroInt(d->solver_niter, mjNISLAND); mju_zeroInt(d->solver_nnz, mjNISLAND); mju_zero(d->solver_fwdinv, 2); diff --git a/src/engine/engine_print.c b/src/engine/engine_print.c index fcea96b2..49d0afa3 100644 --- a/src/engine/engine_print.c +++ b/src/engine/engine_print.c @@ -1008,9 +1008,8 @@ void mj_printFormattedData(const mjModel* m, const mjData* d, const char* filena // SOLVER STAT if (d->nefc) { fprintf(fp, "SOLVER STAT\n"); - fprintf(fp, " solver_nisland = %d\n", d->solver_nisland); printVector(" solver_fwdinv = ", d->solver_fwdinv, 2, fp, float_format); - int nisland_stat = mjMIN(d->solver_nisland, mjNISLAND); + int nisland_stat = mjMAX(1, mjMIN(d->nisland, mjNISLAND)); for (int island=0; island < nisland_stat; island++) { int niter_stat = mjMIN(mjNSOLVER, d->solver_niter[island]); if (niter_stat) { diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 592ca0da..2af0cb51 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -4826,7 +4826,6 @@ public unsafe struct mjData_ { public mjSolverStat_ solver3997; public mjSolverStat_ solver3998; public mjSolverStat_ solver3999; - public int solver_nisland; public fixed int solver_niter[20]; public fixed int solver_nnz[20]; public fixed double solver_fwdinv[2];