Graphite  0.5.0
GPU-accelerated graph optimization framework
Loading...
Searching...
No Matches
graphite::SchurComplement< T, S > Class Template Reference

Class for computing the explicit Schur complement. More...

#include <schur.hpp>

Public Types

using P = std::conditional_t< is_low_precision< S >::value, T, S >
 

Public Member Functions

 SchurComplement (Hessian< T, S > &H)
 
void build_structure (Graph< T, S > *graph, StreamPool &streams)
 
void update_values (Graph< T, S > *graph, StreamPool &streams)
 
thrust::device_vector< T > & get_b_Schur ()
 
void build_indices (Graph< T, S > *graph, StreamPool &streams)
 
template<typename I >
void build_csc_structure (Graph< T, S > *graph, CSCMatrix< S, I > &matrix)
 
template<typename I >
void update_csc_values (Graph< T, S > *graph, CSCMatrix< S, I > &matrix)
 
void compute_landmark_update (Graph< T, S > *graph, StreamPool &streams, T *xl, T *xp)
 
void setup_schur_vector_multiply (Graph< T, S > *graph, StreamPool &streams)
 
void execute_schur_vector_multiply (Graph< T, S > *graph, StreamPool &streams, T *vec_out, const T *vec_in)
 

Public Attributes

size_t lowest_eliminated_block_col
 
size_t pose_col_start
 
size_t landmark_col_start
 
size_t num_block_columns
 
size_t pose_dim
 
size_t landmark_dim
 
thrust::device_vector< S > values
 
thrust::device_vector< P > diagonal_values
 
Hessian< T, S > & H
 
std::unordered_map< BlockCoordinates, size_t > block_indices
 
std::unordered_map< BlockCoordinates, size_t > diagonal_indices
 
std::unordered_map< size_t, std::vector< BlockCoordinates > > diagonal_coords_by_dim
 
std::unordered_map< ProductDim, thrust::device_vector< ops::MulOp< S > > > mul_ops
 
std::unordered_map< ProductDim, std::vector< ops::MulOp< S > > > h_mul_ops
 
std::unordered_map< MatVecDim, thrust::device_vector< ops::HplMatVecOp > > hpl_vec_ops
 
std::unordered_map< MatVecDim, std::vector< ops::HplMatVecOp > > h_hpl_vec_ops
 
std::unordered_map< MatVecDim, thrust::device_vector< ops::HplMatVecOp > > hplt_vec_ops
 
std::unordered_map< MatVecDim, std::vector< ops::HplMatVecOp > > h_hplt_vec_ops
 
std::unordered_map< MatVecDim, thrust::device_vector< ops::HplMatVecOp > > schur_vec_ops
 
std::unordered_map< MatVecDim, std::vector< ops::HplMatVecOp > > h_schur_vec_ops
 
std::unordered_map< MatVecDim, thrust::device_vector< ops::HplMatVecOp > > schur_vec_t_ops
 
std::unordered_map< MatVecDim, std::vector< ops::HplMatVecOp > > h_schur_vec_t_ops
 
std::unordered_map< MatVecDim, thrust::device_vector< ops::BlockCopyOp > > hpp_copy_ops
 
std::unordered_map< MatVecDim, std::vector< ops::BlockCopyOp > > h_hpp_copy_ops
 
thrust::host_vector< P * > A_ptrs
 
thrust::host_vector< P * > Ainv_ptrs
 
std::unordered_map< size_t, thrust::device_vector< P * > > A_ptrs_device_by_dim
 
std::unordered_map< size_t, thrust::device_vector< P * > > Ainv_ptrs_device_by_dim
 
std::unordered_map< size_t, thrust::device_vector< int > > info_by_dim
 
std::unordered_map< size_t, thrust::device_vector< size_t > > diagonal_value_offsets_by_dim
 
std::unordered_map< size_t, thrust::device_vector< size_t > > landmark_local_offsets_by_dim
 
thrust::host_vector< size_t > h_block_col_pointers
 
thrust::host_vector< size_t > h_block_row_indices
 
thrust::host_vector< size_t > h_block_offsets
 
thrust::device_vector< size_t > d_col_pointers
 
thrust::device_vector< size_t > d_row_indices
 
thrust::device_vector< size_t > d_offsets
 
thrust::device_vector< size_t > d_schur_offsets
 
thrust::device_vector< size_t > scalar_to_block_map
 
thrust::device_vector< T > b_Schur
 
thrust::device_vector< T > l_workspace
 
thrust::device_vector< T > p_workspace
 
thrust::device_vector< T > diagonal_workspace
 
thrust::device_vector< size_t > d_pose_counts
 
thrust::device_vector< size_t > d_pair_counts
 
thrust::device_vector< size_t > d_pair_offsets
 
thrust::device_vector< BlockCoordinatesd_pairs
 
thrust::host_vector< BlockCoordinatesh_pairs
 
thrust::device_vector< ops::SchurMulTupled_mul_tuples
 
thrust::host_vector< ops::SchurMulTupleh_mul_tuples
 
std::vector< size_t > block_dims
 
thrust::host_vector< size_t > h_diagonal_offsets
 
thrust::host_vector< size_t > h_local_offsets
 
thrust::host_vector< size_t > h_schur_offsets
 
std::vector< BlockCoordinatesblock_coords
 
cublasHandle_t handle
 

Private Member Functions

void build_schur_structure (Graph< T, S > *graph, StreamPool &streams)
 
void setup_schur_multiplication (Graph< T, S > *graph, StreamPool &streams)
 
void execute_Hpp_copy (Graph< T, S > *graph, StreamPool &streams)
 
void setup_Hpp_copy (Graph< T, S > *graph, StreamPool &streams)
 
void execute_schur_multiplication (Graph< T, S > *graph, StreamPool &streams)
 
void setup_diagonal_inverse_multiply (Graph< T, S > *graph, StreamPool &streams)
 
void execute_diagonal_inverse_multiply (Graph< T, S > *graph, StreamPool &streams, T *vec_out, T *vec_in)
 
void setup_Hpl_vector_multiply (Graph< T, S > *graph, StreamPool &streams)
 
void execute_Hpl_vector_multiply (Graph< T, S > *graph, StreamPool &streams, T *vec_out, T *vec_in)
 
void setup_b_Schur_computation (Graph< T, S > *graph, StreamPool &streams)
 
void execute_b_Schur_computation (Graph< T, S > *graph, StreamPool &streams, T *b_Schur)
 
void setup_HplT_vector_multiply (Graph< T, S > *graph, StreamPool &streams)
 
void execute_HplT_vector_multiply (Graph< T, S > *graph, StreamPool &streams, T *vec_out, T *vec_in)
 
void build_diagonal_structure (Graph< T, S > *graph, StreamPool &streams)
 
void setup_batched_inverse_buffers (StreamPool &streams)
 
void execute_block_diagonal_inversion (Graph< T, S > *graph, StreamPool &streams)
 

Detailed Description

template<typename T, typename S>
class graphite::SchurComplement< T, S >

Class for computing the explicit Schur complement.


The documentation for this class was generated from the following file: