Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Google deepmind Mujoco Engine Inline

From Leeroopedia
Knowledge Sources
Domains Physics Simulation, Linear Algebra, Performance Optimization
Last Updated 2026-02-15 04:00 GMT

Overview

Provides high-performance inlined vector and quaternion math functions optimized for the MuJoCo physics engine hotpath.

Description

engine_inline.h contains private, statically inlined mathematical utility functions prefixed with mji_ that serve as performance-optimized replacements for the public mju_ math functions. The key optimization comes from the use of the C restrict qualifier, which guarantees no pointer aliasing and enables the compiler to produce more efficient assembly output with fewer memory copies. These functions cover 3D vector operations (copy, scale, add, subtract, normalize), 3x3 matrix-vector multiplication, quaternion operations (normalize, rotate, multiply, integrate), and 6D spatial vector operations.

Usage

These functions are included internally by other engine source files on the performance-critical hotpath. They should be used sparingly and only where the restrict guarantee provides measurable performance benefits, to prevent future bugs due to aliasing assumptions.

Code Reference

Source Location

Key Functions

// 3D vector operations
static inline void mji_copy3(mjtNum* restrict res, const mjtNum *vec);
static inline void mji_scl3(mjtNum* restrict res, const mjtNum vec[3], mjtNum scl);
static inline void mji_add3(mjtNum* restrict res, const mjtNum vec1[3], const mjtNum vec2[3]);
static inline void mji_sub3(mjtNum* restrict res, const mjtNum vec1[3], const mjtNum vec2[3]);
static inline void mji_addTo3(mjtNum* restrict res, const mjtNum vec[3]);
static inline void mji_subFrom3(mjtNum* restrict res, const mjtNum vec[3]);
static inline void mji_addToScl3(mjtNum* restrict res, const mjtNum vec[3], mjtNum scl);
static inline mjtNum mji__normalize3(mjtNum vec[3]);

// 3x3 matrix operations
static inline void mji_mulMatVec3(mjtNum* restrict res, const mjtNum mat[9], const mjtNum vec[3]);
static inline void mji_mulMatTVec3(mjtNum* restrict res, const mjtNum mat[9], const mjtNum vec[3]);
static inline void mji_mulMatMat3(mjtNum* restrict res, const mjtNum mat1[9], const mjtNum mat2[9]);
static inline void mji_mulMatTMat3(mjtNum* restrict res, const mjtNum mat1[9], const mjtNum mat2[9]);

// quaternion operations
static inline void mji_copy4(mjtNum* restrict res, const mjtNum data[4]);
static inline void mji_rotVecQuat(mjtNum* restrict res, const mjtNum vec[3], const mjtNum quat[4]);
static inline void mji_negQuat(mjtNum* restrict res, const mjtNum quat[4]);
static inline void mji_mulQuat(mjtNum* restrict res, const mjtNum qa[4], const mjtNum qb[4]);
static inline void mji_mat2Quat(mjtNum* restrict quat, const mjtNum mat[9]);
static inline void mji_quatIntegrate(mjtNum* restrict quat, const mjtNum vel[3], mjtNum scale);

// spatial vector operations
static inline void mji_cross(mjtNum* restrict res, const mjtNum a[3], const mjtNum b[3]);
static inline void mji_crossMotion(mjtNum* restrict res, const mjtNum vel[6], const mjtNum v[6]);
static inline void mji_crossForce(mjtNum* restrict res, const mjtNum vel[6], const mjtNum f[6]);
static inline mjtNum mji_dot6(const mjtNum vec1[6], const mjtNum vec2[6]);
static inline void mji_copy6(mjtNum* restrict res, const mjtNum *vec);
static inline void mji_copy9(mjtNum* restrict res, const mjtNum data[9]);

Import

#include "engine/engine_inline.h"

I/O Contract

Inputs

Name Type Required Description
vec / vec1 / vec2 const mjtNum* Yes Input vector(s) of size 3, 4, or 6
mat / mat1 / mat2 const mjtNum[9] Varies 3x3 rotation matrix
quat / qa / qb const mjtNum[4] Varies Unit quaternion(s)
scl / scale mjtNum Varies Scalar multiplier or integration step

Outputs

Name Type Description
res mjtNum* restrict Result vector (size depends on function: 3, 4, 6, or 9)
return value mjtNum Norm before normalization (for normalize functions)

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment