Math API#
cunls/math contains low-level Lie-group and dense-matrix operations used by
state/factor implementations.
Headers:
cunls/math/lie_math.hcunls/math/dense_matrix_ops.h
Common parameter semantics#
Most batched math functions in this module follow the same conventions.
Parameters#
stream- [in] CUDA stream used for asynchronous kernel/library execution.twist/rotation/transform/matrix- [in] Device pointer to input batched data.*_pitch- [in] Leading dimension (row stride) for each matrix in the batch.*_stride- [in] Stride between consecutive batch elements.size/num_matrices- [in] Number of batch elements.output pointer parameters (for example
skew,jacobian,inverse_transform) - [out] Device pointer to destination buffer.
Returns#
All functions in this module return
void.
Lie math API (lie_math.h)#
SO(3) family#
void ComputeSkewSO3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t skew_pitch,
size_t skew_stride, size_t size, float* skew)
void ComputeExpSO3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t rotation_pitch,
size_t rotation_stride, size_t size, float* rotation)
void ComputeLogSO3(cudaStream_t stream, const float* rotation,
size_t rotation_pitch, size_t rotation_stride,
size_t twist_stride, size_t size, float* twist)
void ComputeJacobianLeftSO3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t jacobian_pitch,
size_t jacobian_stride, size_t size,
float* jacobian)
void ComputeJacobianRightSO3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t jacobian_pitch,
size_t jacobian_stride, size_t size,
float* jacobian)
void ComputeJacobianLeftInverseSO3(cudaStream_t stream, const float* twist,
size_t twist_stride,
size_t jacobian_inv_pitch,
size_t jacobian_inv_stride, size_t size,
float* jacobian_inv)
void ComputeJacobianRightInverseSO3(cudaStream_t stream, const float* twist,
size_t twist_stride,
size_t jacobian_inv_pitch,
size_t jacobian_inv_stride, size_t size,
float* jacobian_inv)
SE(3) family#
void ComputeInverseSE3(cudaStream_t stream, const float* transform,
size_t transform_pitch, size_t transform_stride,
size_t inverse_pitch, size_t inverse_stride,
size_t size, float* inverse_transform)
void ComputeExpSE3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t transform_pitch,
size_t transform_stride, size_t size, float* transform)
void ComputeLogSE3(cudaStream_t stream, const float* transform,
size_t transform_pitch, size_t transform_stride,
size_t twist_stride, size_t size, float* twist)
void ComputeAdjointSE3(cudaStream_t stream, const float* transform,
size_t transform_pitch, size_t transform_stride,
size_t adjoint_pitch, size_t adjoint_stride,
size_t size, float* adjoint)
void ComputeInverseAdjointSE3(cudaStream_t stream, const float* transform,
size_t transform_pitch, size_t transform_stride,
size_t inv_adjoint_pitch,
size_t inv_adjoint_stride, size_t size,
float* inv_adjoint)
void ComputeJacobianLeftSE3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t jacobian_pitch,
size_t jacobian_stride, size_t size,
float* jacobian)
void ComputeJacobianLeftInverseSE3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t jacobian_pitch,
size_t jacobian_stride, size_t size,
float* jacobian)
void ComputeJacobianRightSE3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t jacobian_pitch,
size_t jacobian_stride, size_t size,
float* jacobian)
void ComputeJacobianRightInverseSE3(cudaStream_t stream, const float* twist,
size_t twist_stride, size_t jacobian_pitch,
size_t jacobian_stride, size_t size,
float* jacobian)
General utility#
void ComputeNegateMatrix(cudaStream_t stream, const float* matrix,
size_t rows, size_t cols, size_t pitch,
size_t stride, size_t size,
float* negated_matrix)
Additional parameter docs for ComputeNegateMatrix#
rows- [in] number of rows in each matrix.cols- [in] number of columns in each matrix.
Sim(3) family#
void ComputeAdjointSim3(cudaStream_t stream, const float* transforms,
size_t transform_stride, float* adjoints,
size_t adjoint_stride, size_t size)
ComputeAdjointSim3 parameters#
transforms- [in] Sim(3) transforms as row-major 4x4 matrices ([[R, t], [0, 1/s]]).transform_stride- [in] stride between consecutive transforms (in floats).adjoints- [out] 7x7 adjoint matrices (row-major, flattened).adjoint_stride- [in] stride between consecutive adjoints (in floats).
Dense matrix API (dense_matrix_ops.h)#
void ComputeSqrtMatrix(cuBLASHandle& cublas_handle, cudaStream_t stream,
float* spd_matrix, size_t matrix_size,
size_t pitch, size_t num_matrices)
ComputeSqrtMatrix parameters#
cublas_handle- [in] external cuBLAS handle wrapper.stream- [in] CUDA stream.spd_matrix- [in,out] Device pointer to SPD matrices; replaced in-place by square-root factors.matrix_size- [in] matrix dimension (NforN x N).pitch- [in] leading dimension for matrix storage.num_matrices- [in] batch size.
void ScatterToRightBlock(cudaStream_t stream, const float* src,
size_t block_dim, size_t src_stride, float* dst,
size_t dst_pitch, size_t dst_stride,
size_t num_blocks)
ScatterToRightBlock parameters#
src- [in] source dense NxN blocks (device pointer).block_dim- [in] block dimension N.src_stride- [in] stride between consecutive source blocks.dst- [out] destination pointer (start of right sub-block).dst_pitch- [in] leading dimension (row stride) of the destination.dst_stride- [in] stride between consecutive destination blocks.num_blocks- [in] number of blocks in the batch.