Convert qLD to CSR format.
PiperOrigin-RevId: 723955038 Change-Id: I30c3dc7f59739e89ae5fff8841432bc74717ec1b
This commit is contained in:
committed by
Copybara-Service
parent
cb1696eb34
commit
c27d3758c2
@@ -43,21 +43,23 @@ static void BM_factorI(benchmark::State& state, bool legacy, bool coil) {
|
||||
// allocate inputs and outputs
|
||||
mj_markStack(d);
|
||||
|
||||
// CSR matrices
|
||||
mjtNum* Ms = mj_stackAllocNum(d, m->nC);
|
||||
mjtNum* LDs = mj_stackAllocNum(d, m->nC);
|
||||
// M: mass matrix in CSR format
|
||||
mjtNum* M = mj_stackAllocNum(d, m->nC);
|
||||
for (int i=0; i < m->nC; i++) {
|
||||
Ms[i] = d->qM[d->mapM2C[i]];
|
||||
M[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, d->qLD, d->qLDiagInv);
|
||||
mj_factorI(m, d, d->qM, LDlegacy, d->qLDiagInv);
|
||||
} else {
|
||||
mju_copy(LDs, Ms, m->nC);
|
||||
mj_factorIs(LDs, d->qLDiagInv, m->nv,
|
||||
mju_copy(d->qLD, M, m->nC);
|
||||
mj_factorIs(d->qLD, d->qLDiagInv, m->nv,
|
||||
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,13 +45,15 @@ static void BM_solve(benchmark::State& state, SolveType type) {
|
||||
// allocate input and output vectors
|
||||
mj_markStack(d);
|
||||
|
||||
// make CSR matrix
|
||||
mjtNum* Ms = mj_stackAllocNum(d, m->nC);
|
||||
mjtNum* LDs = mj_stackAllocNum(d, m->nC);
|
||||
// M: mass matrix in CSR format
|
||||
mjtNum* M = mj_stackAllocNum(d, m->nC);
|
||||
for (int i=0; i < m->nC; i++) {
|
||||
Ms[i] = d->qM[d->mapM2C[i]];
|
||||
M[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);
|
||||
@@ -62,17 +64,18 @@ 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, d->qLD, d->qLDiagInv);
|
||||
mj_factorI(m, d, d->qM, LDlegacy, d->qLDiagInv);
|
||||
mj_solveLD(m, res, 1, LDlegacy, d->qLDiagInv);
|
||||
mj_solveM(m, d, res, vec, 1);
|
||||
break;
|
||||
case SolveType::kCsr:
|
||||
mju_copy(LDs, Ms, m->nC);
|
||||
mj_factorIs(LDs, d->qLDiagInv, m->nv,
|
||||
mju_copy(d->qLD, M, m->nC);
|
||||
mj_factorIs(d->qLD, d->qLDiagInv, m->nv,
|
||||
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
|
||||
mju_copy(res, vec, m->nv);
|
||||
mj_solveLDs(res, LDs, d->qLDiagInv, m->nv, 1,
|
||||
mj_solveLDs(res, d->qLD, d->qLDiagInv, m->nv, 1,
|
||||
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,20 +50,21 @@ static void BM_solveLD(benchmark::State& state, bool featherstone, bool coil) {
|
||||
vec[i] = 0.2 + 0.3*i;
|
||||
}
|
||||
|
||||
// make CSR matrix
|
||||
mjtNum* LDs = mj_stackAllocNum(d, m->nC);
|
||||
// make legacy matrix
|
||||
mjtNum* LDlegacy = mj_stackAllocNum(d, m->nM);
|
||||
mju_zero(LDlegacy, m->nM);
|
||||
for (int i=0; i < m->nC; i++) {
|
||||
LDs[i] = d->qLD[d->mapM2C[i]];
|
||||
LDlegacy[d->mapM2C[i]] = d->qLD[i];
|
||||
}
|
||||
|
||||
// benchmark
|
||||
while (state.KeepRunningBatch(kNumBenchmarkSteps)) {
|
||||
for (int i=0; i < kNumBenchmarkSteps; i++) {
|
||||
mju_copy(res, vec, m->nv);
|
||||
if (featherstone) {
|
||||
mj_solveM(m, d, res, vec, 1);
|
||||
mj_solveLD(m, res, 1, LDlegacy, d->qLDiagInv);
|
||||
} else {
|
||||
mju_copy(res, vec, m->nv);
|
||||
mj_solveLDs(res, LDs, d->qLDiagInv, m->nv, 1,
|
||||
mj_solveLDs(res, d->qLD, d->qLDiagInv, m->nv, 1,
|
||||
d->C_rownnz, d->C_rowadr, m->dof_simplenum, d->C_colind);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user