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_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
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -82,8 +82,8 @@ const char* mjTIMERSTRING[mjNTIMER]= {
|
||||
"position",
|
||||
"velocity",
|
||||
"actuation",
|
||||
"acceleration",
|
||||
"constraint",
|
||||
"advance",
|
||||
"pos_kinematics",
|
||||
"pos_inertia",
|
||||
"pos_collision",
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user