Remove mjTIMER_ACCELERATION, add mjTIMER_ADVANCE.

- mjTIMER_ACCELERATION is not very useful, it's usually very tiny (0.5% for humanoid, 1% for 22humanoids). It basically times a single call to `mj_solveM`.

- Added `mjTIMER_ADVANCE` to time `mj_Euler` and `mj_implicit` (which can be significant).

- Moved `mj_transmission` to `mjTIMER_KINEMATICS` where it belongs (and used to be).

PiperOrigin-RevId: 565936880
Change-Id: I26b8a067133594e5500ca1c809beb3518b4a8d9c
This commit is contained in:
Yuval Tassa
2023-09-16 08:02:38 -07:00
committed by Copybara-Service
parent e76e1c72f9
commit 63fd23a934
7 changed files with 18 additions and 11 deletions
+1 -1
View File
@@ -61,8 +61,8 @@ typedef enum mjtTimer_ { // internal timers
mjTIMER_POSITION, // fwdPosition
mjTIMER_VELOCITY, // fwdVelocity
mjTIMER_ACTUATION, // fwdActuation
mjTIMER_ACCELERATION, // fwdAcceleration
mjTIMER_CONSTRAINT, // fwdConstraint
mjTIMER_ADVANCE, // mj_Euler, mj_implicit
// breakdown of fwdPosition
mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
+1 -1
View File
@@ -72,8 +72,8 @@ typedef enum mjtTimer_ { // internal timers
mjTIMER_POSITION, // fwdPosition
mjTIMER_VELOCITY, // fwdVelocity
mjTIMER_ACTUATION, // fwdActuation
mjTIMER_ACCELERATION, // fwdAcceleration
mjTIMER_CONSTRAINT, // fwdConstraint
mjTIMER_ADVANCE, // mj_Euler, mj_implicit
// breakdown of fwdPosition
mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
+2 -2
View File
@@ -431,8 +431,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
('mjTIMER_POSITION', 3),
('mjTIMER_VELOCITY', 4),
('mjTIMER_ACTUATION', 5),
('mjTIMER_ACCELERATION', 6),
('mjTIMER_CONSTRAINT', 7),
('mjTIMER_CONSTRAINT', 6),
('mjTIMER_ADVANCE', 7),
('mjTIMER_POS_KINEMATICS', 8),
('mjTIMER_POS_INERTIA', 9),
('mjTIMER_POS_COLLISION', 10),
+1 -1
View File
@@ -239,7 +239,7 @@ int main(int argc, char** argv) {
// save step time, add up timing of components
if (i == 0) total = istep;
if (i >= mjTIMER_POSITION && i <= mjTIMER_CONSTRAINT) {
if (i >= mjTIMER_POSITION && i <= mjTIMER_ADVANCE) {
components += istep;
}
}
+10 -3
View File
@@ -118,9 +118,12 @@ void mj_fwdPosition(const mjModel* m, mjData* d) {
if (mjENABLED(mjENBL_ISLAND)) {
mj_island(m, d);
}
mj_transmission(m, d);
TM_END(mjTIMER_POS_MAKE);
TM_RESTART;
mj_transmission(m, d);
TM_END(mjTIMER_POS_KINEMATICS);
TM_RESTART;
mj_projectConstraint(m, d);
TM_END(mjTIMER_POS_PROJECT);
@@ -400,7 +403,6 @@ void mj_fwdActuation(const mjModel* m, mjData* d) {
// add up all non-constraint forces, compute qacc_smooth
void mj_fwdAcceleration(const mjModel* m, mjData* d) {
TM_START;
mj_markStack(d);
int nv = m->nv;
@@ -414,7 +416,6 @@ void mj_fwdAcceleration(const mjModel* m, mjData* d) {
mj_solveM(m, d, d->qacc_smooth, d->qfrc_smooth, 1);
mj_freeStack(d);
TM_END(mjTIMER_ACCELERATION);
}
@@ -609,6 +610,7 @@ static void mj_advance(const mjModel* m, mjData* d,
// Euler integrator, semi-implicit in velocity, possibly skipping factorisation
void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
TM_START;
int nv = m->nv, nM = m->nM;
mj_markStack(d);
mjtNum* qfrc = mj_stackAllocNum(d, nv);
@@ -655,6 +657,8 @@ void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
mj_advance(m, d, d->act_dot, qacc, NULL);
mj_freeStack(d);
TM_END(mjTIMER_ADVANCE);
}
@@ -774,6 +778,7 @@ void mj_RungeKutta(const mjModel* m, mjData* d, int N) {
// fully implicit in velocity, possibly skipping factorization
void mj_implicitSkip(const mjModel* m, mjData* d, int skipfactor) {
TM_START;
int nv = m->nv;
mj_markStack(d);
@@ -832,6 +837,8 @@ void mj_implicitSkip(const mjModel* m, mjData* d, int skipfactor) {
mj_advance(m, d, d->act_dot, qacc, NULL);
mj_freeStack(d);
TM_END(mjTIMER_ADVANCE);
}
+1 -1
View File
@@ -82,8 +82,8 @@ const char* mjTIMERSTRING[mjNTIMER]= {
"position",
"velocity",
"actuation",
"acceleration",
"constraint",
"advance",
"pos_kinematics",
"pos_inertia",
"pos_collision",
+2 -2
View File
@@ -129,8 +129,8 @@ public enum mjtTimer : int{
mjTIMER_POSITION = 3,
mjTIMER_VELOCITY = 4,
mjTIMER_ACTUATION = 5,
mjTIMER_ACCELERATION = 6,
mjTIMER_CONSTRAINT = 7,
mjTIMER_CONSTRAINT = 6,
mjTIMER_ADVANCE = 7,
mjTIMER_POS_KINEMATICS = 8,
mjTIMER_POS_INERTIA = 9,
mjTIMER_POS_COLLISION = 10,