From 70d944b4588920e68cad5aeef3e3e26758d6691a Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Wed, 30 Oct 2024 08:38:12 -0700 Subject: [PATCH] micro-optimization to `mju_mulMatTVecSparse` PiperOrigin-RevId: 691431137 Change-Id: I95f94ff38ae911194b21aa220af35c7374af9739 --- src/engine/engine_util_sparse.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/engine/engine_util_sparse.c b/src/engine/engine_util_sparse.c index f6d05cfd..434a0ce4 100644 --- a/src/engine/engine_util_sparse.c +++ b/src/engine/engine_util_sparse.c @@ -224,13 +224,16 @@ void mju_mulMatTVecSparse(mjtNum* res, const mjtNum* mat, const mjtNum* vec, int mju_zero(res, nc); for (int i=0; i < nr; i++) { + mjtNum scl = vec[i]; + + // skip if 0 + if (!scl) continue; + + // add row scaled by the corresponding vector element int nnz = rownnz[i]; int adr = rowadr[i]; const int* ind = colind + adr; const mjtNum* row = mat + adr; - mjtNum scl = vec[i]; - - // add row scaled by the corresponding vector element for (int j=0; j < nnz; j++) { res[ind[j]] += row[j] * scl; }