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:
committed by
Copybara-Service
parent
e76e1c72f9
commit
63fd23a934
@@ -61,8 +61,8 @@ typedef enum mjtTimer_ { // internal timers
|
|||||||
mjTIMER_POSITION, // fwdPosition
|
mjTIMER_POSITION, // fwdPosition
|
||||||
mjTIMER_VELOCITY, // fwdVelocity
|
mjTIMER_VELOCITY, // fwdVelocity
|
||||||
mjTIMER_ACTUATION, // fwdActuation
|
mjTIMER_ACTUATION, // fwdActuation
|
||||||
mjTIMER_ACCELERATION, // fwdAcceleration
|
|
||||||
mjTIMER_CONSTRAINT, // fwdConstraint
|
mjTIMER_CONSTRAINT, // fwdConstraint
|
||||||
|
mjTIMER_ADVANCE, // mj_Euler, mj_implicit
|
||||||
|
|
||||||
// breakdown of fwdPosition
|
// breakdown of fwdPosition
|
||||||
mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
|
mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ typedef enum mjtTimer_ { // internal timers
|
|||||||
mjTIMER_POSITION, // fwdPosition
|
mjTIMER_POSITION, // fwdPosition
|
||||||
mjTIMER_VELOCITY, // fwdVelocity
|
mjTIMER_VELOCITY, // fwdVelocity
|
||||||
mjTIMER_ACTUATION, // fwdActuation
|
mjTIMER_ACTUATION, // fwdActuation
|
||||||
mjTIMER_ACCELERATION, // fwdAcceleration
|
|
||||||
mjTIMER_CONSTRAINT, // fwdConstraint
|
mjTIMER_CONSTRAINT, // fwdConstraint
|
||||||
|
mjTIMER_ADVANCE, // mj_Euler, mj_implicit
|
||||||
|
|
||||||
// breakdown of fwdPosition
|
// breakdown of fwdPosition
|
||||||
mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
|
mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
|
||||||
|
|||||||
+2
-2
@@ -431,8 +431,8 @@ ENUMS: Mapping[str, EnumDecl] = dict([
|
|||||||
('mjTIMER_POSITION', 3),
|
('mjTIMER_POSITION', 3),
|
||||||
('mjTIMER_VELOCITY', 4),
|
('mjTIMER_VELOCITY', 4),
|
||||||
('mjTIMER_ACTUATION', 5),
|
('mjTIMER_ACTUATION', 5),
|
||||||
('mjTIMER_ACCELERATION', 6),
|
('mjTIMER_CONSTRAINT', 6),
|
||||||
('mjTIMER_CONSTRAINT', 7),
|
('mjTIMER_ADVANCE', 7),
|
||||||
('mjTIMER_POS_KINEMATICS', 8),
|
('mjTIMER_POS_KINEMATICS', 8),
|
||||||
('mjTIMER_POS_INERTIA', 9),
|
('mjTIMER_POS_INERTIA', 9),
|
||||||
('mjTIMER_POS_COLLISION', 10),
|
('mjTIMER_POS_COLLISION', 10),
|
||||||
|
|||||||
+1
-1
@@ -239,7 +239,7 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
// save step time, add up timing of components
|
// save step time, add up timing of components
|
||||||
if (i == 0) total = istep;
|
if (i == 0) total = istep;
|
||||||
if (i >= mjTIMER_POSITION && i <= mjTIMER_CONSTRAINT) {
|
if (i >= mjTIMER_POSITION && i <= mjTIMER_ADVANCE) {
|
||||||
components += istep;
|
components += istep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,9 +118,12 @@ void mj_fwdPosition(const mjModel* m, mjData* d) {
|
|||||||
if (mjENABLED(mjENBL_ISLAND)) {
|
if (mjENABLED(mjENBL_ISLAND)) {
|
||||||
mj_island(m, d);
|
mj_island(m, d);
|
||||||
}
|
}
|
||||||
mj_transmission(m, d);
|
|
||||||
TM_END(mjTIMER_POS_MAKE);
|
TM_END(mjTIMER_POS_MAKE);
|
||||||
|
|
||||||
|
TM_RESTART;
|
||||||
|
mj_transmission(m, d);
|
||||||
|
TM_END(mjTIMER_POS_KINEMATICS);
|
||||||
|
|
||||||
TM_RESTART;
|
TM_RESTART;
|
||||||
mj_projectConstraint(m, d);
|
mj_projectConstraint(m, d);
|
||||||
TM_END(mjTIMER_POS_PROJECT);
|
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
|
// add up all non-constraint forces, compute qacc_smooth
|
||||||
void mj_fwdAcceleration(const mjModel* m, mjData* d) {
|
void mj_fwdAcceleration(const mjModel* m, mjData* d) {
|
||||||
TM_START;
|
|
||||||
mj_markStack(d);
|
mj_markStack(d);
|
||||||
int nv = m->nv;
|
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_solveM(m, d, d->qacc_smooth, d->qfrc_smooth, 1);
|
||||||
|
|
||||||
mj_freeStack(d);
|
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
|
// Euler integrator, semi-implicit in velocity, possibly skipping factorisation
|
||||||
void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
|
void mj_EulerSkip(const mjModel* m, mjData* d, int skipfactor) {
|
||||||
|
TM_START;
|
||||||
int nv = m->nv, nM = m->nM;
|
int nv = m->nv, nM = m->nM;
|
||||||
mj_markStack(d);
|
mj_markStack(d);
|
||||||
mjtNum* qfrc = mj_stackAllocNum(d, nv);
|
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_advance(m, d, d->act_dot, qacc, NULL);
|
||||||
|
|
||||||
mj_freeStack(d);
|
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
|
// fully implicit in velocity, possibly skipping factorization
|
||||||
void mj_implicitSkip(const mjModel* m, mjData* d, int skipfactor) {
|
void mj_implicitSkip(const mjModel* m, mjData* d, int skipfactor) {
|
||||||
|
TM_START;
|
||||||
int nv = m->nv;
|
int nv = m->nv;
|
||||||
|
|
||||||
mj_markStack(d);
|
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_advance(m, d, d->act_dot, qacc, NULL);
|
||||||
|
|
||||||
mj_freeStack(d);
|
mj_freeStack(d);
|
||||||
|
|
||||||
|
TM_END(mjTIMER_ADVANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ const char* mjTIMERSTRING[mjNTIMER]= {
|
|||||||
"position",
|
"position",
|
||||||
"velocity",
|
"velocity",
|
||||||
"actuation",
|
"actuation",
|
||||||
"acceleration",
|
|
||||||
"constraint",
|
"constraint",
|
||||||
|
"advance",
|
||||||
"pos_kinematics",
|
"pos_kinematics",
|
||||||
"pos_inertia",
|
"pos_inertia",
|
||||||
"pos_collision",
|
"pos_collision",
|
||||||
|
|||||||
@@ -129,8 +129,8 @@ public enum mjtTimer : int{
|
|||||||
mjTIMER_POSITION = 3,
|
mjTIMER_POSITION = 3,
|
||||||
mjTIMER_VELOCITY = 4,
|
mjTIMER_VELOCITY = 4,
|
||||||
mjTIMER_ACTUATION = 5,
|
mjTIMER_ACTUATION = 5,
|
||||||
mjTIMER_ACCELERATION = 6,
|
mjTIMER_CONSTRAINT = 6,
|
||||||
mjTIMER_CONSTRAINT = 7,
|
mjTIMER_ADVANCE = 7,
|
||||||
mjTIMER_POS_KINEMATICS = 8,
|
mjTIMER_POS_KINEMATICS = 8,
|
||||||
mjTIMER_POS_INERTIA = 9,
|
mjTIMER_POS_INERTIA = 9,
|
||||||
mjTIMER_POS_COLLISION = 10,
|
mjTIMER_POS_COLLISION = 10,
|
||||||
|
|||||||
Reference in New Issue
Block a user