Roll back recent change to mjData.qLD until some issues are resolved.

PiperOrigin-RevId: 724389161
Change-Id: I1b30ab0950ab5c5e611b1c6fc3bf3f42f964939c
This commit is contained in:
Yuval Tassa
2025-02-07 10:20:41 -08:00
committed by Copybara-Service
parent 06758e35ab
commit 5ee0654830
22 changed files with 153 additions and 151 deletions
+7 -9
View File
@@ -43,23 +43,21 @@ static void BM_factorI(benchmark::State& state, bool legacy, bool coil) {
// allocate inputs and outputs
mj_markStack(d);
// M: mass matrix in CSR format
mjtNum* M = mj_stackAllocNum(d, m->nC);
// CSR matrices
mjtNum* Ms = mj_stackAllocNum(d, m->nC);
mjtNum* LDs = mj_stackAllocNum(d, m->nC);
for (int i=0; i < m->nC; i++) {
M[i] = d->qM[d->mapM2C[i]];
Ms[i] = d->qM[d->mapM2C[i]];
}
// LDlegacy: legacy LD matrix (size nM)
mjtNum* LDlegacy = mj_stackAllocNum(d, m->nM);
// benchmark
while (state.KeepRunningBatch(kNumBenchmarkSteps)) {
for (int i=0; i < kNumBenchmarkSteps; i++) {
if (legacy) {
mj_factorI(m, d, d->qM, LDlegacy, d->qLDiagInv);
mj_factorI(m, d, d->qM, d->qLD, d->qLDiagInv);
} else {
mju_copy(d->qLD, M, m->nC);
mj_factorIs(d->qLD, d->qLDiagInv, m->nv,
mju_copy(LDs, Ms, m->nC);
mj_factorIs(LDs, d->qLDiagInv, m->nv,
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
}
}
+9 -12
View File
@@ -45,15 +45,13 @@ static void BM_solve(benchmark::State& state, SolveType type) {
// allocate input and output vectors
mj_markStack(d);
// M: mass matrix in CSR format
mjtNum* M = mj_stackAllocNum(d, m->nC);
// make CSR matrix
mjtNum* Ms = mj_stackAllocNum(d, m->nC);
mjtNum* LDs = mj_stackAllocNum(d, m->nC);
for (int i=0; i < m->nC; i++) {
M[i] = d->qM[d->mapM2C[i]];
Ms[i] = d->qM[d->mapM2C[i]];
}
// LDlegacy: legacy LD matrix (size nM)
mjtNum* LDlegacy = mj_stackAllocNum(d, m->nM);
// arbitrary input vector
mjtNum *res = mj_stackAllocNum(d, m->nv);
mjtNum *vec = mj_stackAllocNum(d, m->nv);
@@ -64,18 +62,17 @@ static void BM_solve(benchmark::State& state, SolveType type) {
// benchmark
while (state.KeepRunningBatch(kNumBenchmarkSteps)) {
for (int i=0; i < kNumBenchmarkSteps; i++) {
mju_copy(res, vec, m->nv);
switch (type) {
case SolveType::kLegacy:
mj_factorI(m, d, d->qM, LDlegacy, d->qLDiagInv);
mj_solveLD(m, res, 1, LDlegacy, d->qLDiagInv);
mj_factorI(m, d, d->qM, d->qLD, d->qLDiagInv);
mj_solveM(m, d, res, vec, 1);
break;
case SolveType::kCsr:
mju_copy(d->qLD, M, m->nC);
mj_factorIs(d->qLD, d->qLDiagInv, m->nv,
mju_copy(LDs, Ms, m->nC);
mj_factorIs(LDs, d->qLDiagInv, m->nv,
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
mj_solveLDs(res, d->qLD, d->qLDiagInv, m->nv, 1,
mju_copy(res, vec, m->nv);
mj_solveLDs(res, LDs, d->qLDiagInv, m->nv, 1,
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
}
}
+6 -7
View File
@@ -50,21 +50,20 @@ static void BM_solveLD(benchmark::State& state, bool featherstone, bool coil) {
vec[i] = 0.2 + 0.3*i;
}
// make legacy matrix
mjtNum* LDlegacy = mj_stackAllocNum(d, m->nM);
mju_zero(LDlegacy, m->nM);
// make CSR matrix
mjtNum* LDs = mj_stackAllocNum(d, m->nC);
for (int i=0; i < m->nC; i++) {
LDlegacy[d->mapM2C[i]] = d->qLD[i];
LDs[i] = d->qLD[d->mapM2C[i]];
}
// benchmark
while (state.KeepRunningBatch(kNumBenchmarkSteps)) {
for (int i=0; i < kNumBenchmarkSteps; i++) {
mju_copy(res, vec, m->nv);
if (featherstone) {
mj_solveLD(m, res, 1, LDlegacy, d->qLDiagInv);
mj_solveM(m, d, res, vec, 1);
} else {
mj_solveLDs(res, d->qLD, d->qLDiagInv, m->nv, 1,
mju_copy(res, vec, m->nv);
mj_solveLDs(res, LDs, d->qLDiagInv, m->nv, 1,
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
}
}