Open3D (C++ API)  0.18.0
Public Member Functions | Static Public Member Functions | Protected Member Functions
open3d::core::HashMap Class Reference

#include <HashMap.h>

Inheritance diagram for open3d::core::HashMap:
open3d::core::IsDevice

Public Member Functions

 HashMap (int64_t init_capacity, const Dtype &key_dtype, const SizeVector &key_element_shape, const Dtype &value_dtype, const SizeVector &value_element_shapes, const Device &device, const HashBackendType &backend=HashBackendType::Default)
 Initialize a hash map given a key and a value dtype and element shape. More...
 
 HashMap (int64_t init_capacity, const Dtype &key_dtype, const SizeVector &key_element_shape, const std::vector< Dtype > &dtypes_value, const std::vector< SizeVector > &element_shapes_value, const Device &device, const HashBackendType &backend=HashBackendType::Default)
 
 ~HashMap ()=default
 Default destructor. More...
 
void Reserve (int64_t capacity)
 Reserve the internal hash map with the given capacity by rehashing. More...
 
std::pair< Tensor, TensorInsert (const Tensor &input_keys, const Tensor &input_values)
 
std::pair< Tensor, TensorInsert (const Tensor &input_keys, const std::vector< Tensor > &input_values_soa)
 
std::pair< Tensor, TensorActivate (const Tensor &input_keys)
 
std::pair< Tensor, TensorFind (const Tensor &input_keys)
 
Tensor Erase (const Tensor &input_keys)
 
Tensor GetActiveIndices () const
 
void Insert (const Tensor &input_keys, const Tensor &input_values, Tensor &output_buf_indices, Tensor &output_masks)
 
void Insert (const Tensor &input_keys, const std::vector< Tensor > &input_values_soa, Tensor &output_buf_indices, Tensor &output_masks)
 
void Activate (const Tensor &input_keys, Tensor &output_buf_indices, Tensor &output_masks)
 
void Find (const Tensor &input_keys, Tensor &output_buf_indices, Tensor &output_masks)
 
void Erase (const Tensor &input_keys, Tensor &output_masks)
 
void GetActiveIndices (Tensor &output_buf_indices) const
 
void Clear ()
 Clear stored map without reallocating the buffers. More...
 
void Save (const std::string &file_name)
 
HashMap Clone () const
 Clone the hash map with buffers. More...
 
HashMap To (const Device &device, bool copy=false) const
 Convert the hash map to another device. More...
 
int64_t Size () const
 Get the size (number of active entries) of the hash map. More...
 
int64_t GetCapacity () const
 Get the capacity of the hash map. More...
 
int64_t GetBucketCount () const
 Get the number of buckets of the internal hash map. More...
 
Device GetDevice () const override
 Get the device of the hash map. More...
 
Tensor GetKeyTensor () const
 
std::vector< TensorGetValueTensors () const
 
Tensor GetValueTensor (size_t index=0) const
 
std::vector< int64_t > BucketSizes () const
 Return number of elements per bucket. More...
 
float LoadFactor () const
 Return size / bucket_count. More...
 
std::shared_ptr< DeviceHashBackendGetDeviceHashBackend () const
 Return the implementation of the device hash backend. More...
 
- Public Member Functions inherited from open3d::core::IsDevice
 IsDevice ()=default
 
virtual ~IsDevice ()=default
 
bool IsCPU () const
 
bool IsCUDA () const
 

Static Public Member Functions

static HashMap Load (const std::string &file_name)
 

Protected Member Functions

void Init (int64_t init_capacity, const Device &device, const HashBackendType &backend)
 
void InsertImpl (const Tensor &input_keys, const std::vector< Tensor > &input_values_soa, Tensor &output_buf_indices, Tensor &output_masks, bool is_activate_op=false)
 
void CheckKeyLength (const Tensor &input_keys) const
 
void CheckKeyValueLengthCompatibility (const Tensor &input_keys, const std::vector< Tensor > &input_values_soa) const
 
void CheckKeyCompatibility (const Tensor &input_keys) const
 
void CheckValueCompatibility (const std::vector< Tensor > &input_values_soa) const
 
void PrepareIndicesOutput (Tensor &output_buf_indices, int64_t length) const
 
void PrepareMasksOutput (Tensor &output_masks, int64_t length) const
 
std::pair< int64_t, std::vector< int64_t > > GetCommonValueSizeDivisor ()
 

Constructor & Destructor Documentation

◆ HashMap() [1/2]

open3d::core::HashMap::HashMap ( int64_t  init_capacity,
const Dtype key_dtype,
const SizeVector key_element_shape,
const Dtype value_dtype,
const SizeVector value_element_shapes,
const Device device,
const HashBackendType backend = HashBackendType::Default 
)

Initialize a hash map given a key and a value dtype and element shape.

◆ HashMap() [2/2]

open3d::core::HashMap::HashMap ( int64_t  init_capacity,
const Dtype key_dtype,
const SizeVector key_element_shape,
const std::vector< Dtype > &  dtypes_value,
const std::vector< SizeVector > &  element_shapes_value,
const Device device,
const HashBackendType backend = HashBackendType::Default 
)

Initialize a hash map given a key dtype and element shape, and a vector of value dtypes and element shapes for values stored in structure of arrays.

◆ ~HashMap()

open3d::core::HashMap::~HashMap ( )
default

Default destructor.

Member Function Documentation

◆ Activate() [1/2]

std::pair< Tensor, Tensor > open3d::core::HashMap::Activate ( const Tensor input_keys)

Parallel activate arrays of keys in Tensor. Specifically useful for large value elements (e.g., a 3D tensor), where we can do in-place management after activation. Return: output_buf_indices and output_masks, their roles are the same as in Insert.

◆ Activate() [2/2]

void open3d::core::HashMap::Activate ( const Tensor input_keys,
Tensor output_buf_indices,
Tensor output_masks 
)

Same as Activate, but takes output_buf_indices and output_masks as input. If their shapes and types match, reallocation is not needed.

◆ BucketSizes()

std::vector< int64_t > open3d::core::HashMap::BucketSizes ( ) const

Return number of elements per bucket.

◆ CheckKeyCompatibility()

void open3d::core::HashMap::CheckKeyCompatibility ( const Tensor input_keys) const
protected

◆ CheckKeyLength()

void open3d::core::HashMap::CheckKeyLength ( const Tensor input_keys) const
protected

◆ CheckKeyValueLengthCompatibility()

void open3d::core::HashMap::CheckKeyValueLengthCompatibility ( const Tensor input_keys,
const std::vector< Tensor > &  input_values_soa 
) const
protected

◆ CheckValueCompatibility()

void open3d::core::HashMap::CheckValueCompatibility ( const std::vector< Tensor > &  input_values_soa) const
protected

◆ Clear()

void open3d::core::HashMap::Clear ( )

Clear stored map without reallocating the buffers.

◆ Clone()

HashMap open3d::core::HashMap::Clone ( ) const

Clone the hash map with buffers.

◆ Erase() [1/2]

Tensor open3d::core::HashMap::Erase ( const Tensor input_keys)

Parallel erase an array of keys in Tensor. Return: output_masks stores if the erase is a success or failure (key not found all already erased in another thread).

◆ Erase() [2/2]

void open3d::core::HashMap::Erase ( const Tensor input_keys,
Tensor output_masks 
)

Same as Erase, but takes output_masks as input. If its shape and type matches, reallocation is not needed.

◆ Find() [1/2]

std::pair< Tensor, Tensor > open3d::core::HashMap::Find ( const Tensor input_keys)

Parallel find an array of keys in Tensor. Return: output_buf_indices, its role is the same as in Insert. Return: output_masks stores if the finding is a success or failure (key not found).

◆ Find() [2/2]

void open3d::core::HashMap::Find ( const Tensor input_keys,
Tensor output_buf_indices,
Tensor output_masks 
)

Same as Find, but takes output_buf_indices and output_masks as input. If their shapes and types match, reallocation is not needed.

◆ GetActiveIndices() [1/2]

Tensor open3d::core::HashMap::GetActiveIndices ( ) const

Parallel collect all indices in the buffer corresponding to the active entries in the hash map. Return output_buf_indices, collected buffer indices.

◆ GetActiveIndices() [2/2]

void open3d::core::HashMap::GetActiveIndices ( Tensor output_buf_indices) const

Same as GetActiveIndices, but takes output_buf_indices as input. If its shape and type matches, reallocation is not needed.

◆ GetBucketCount()

int64_t open3d::core::HashMap::GetBucketCount ( ) const

Get the number of buckets of the internal hash map.

◆ GetCapacity()

int64_t open3d::core::HashMap::GetCapacity ( ) const

Get the capacity of the hash map.

◆ GetCommonValueSizeDivisor()

std::pair<int64_t, std::vector<int64_t> > open3d::core::HashMap::GetCommonValueSizeDivisor ( )
protected

◆ GetDevice()

Device open3d::core::HashMap::GetDevice ( ) const
overridevirtual

Get the device of the hash map.

Implements open3d::core::IsDevice.

◆ GetDeviceHashBackend()

std::shared_ptr<DeviceHashBackend> open3d::core::HashMap::GetDeviceHashBackend ( ) const
inline

Return the implementation of the device hash backend.

◆ GetKeyTensor()

Tensor open3d::core::HashMap::GetKeyTensor ( ) const

Get the key tensor buffer to be used along with buf_indices and masks. Example: GetKeyTensor().IndexGet({buf_indices.To(core::Int64).IndexGet{masks}})

◆ GetValueTensor()

Tensor open3d::core::HashMap::GetValueTensor ( size_t  index = 0) const

Get the i-th value tensor buffer to be used along with buf_indices and masks. Example: GetValueTensors(0).IndexGet({buf_indices.To(core::Int64).IndexGet{masks}})

◆ GetValueTensors()

std::vector< Tensor > open3d::core::HashMap::GetValueTensors ( ) const

Get the values tensor buffers to be used along with buf_indices and masks. Example: GetValueTensors()[0].IndexGet({buf_indices.To(core::Int64).IndexGet{masks}})

◆ Init()

void open3d::core::HashMap::Init ( int64_t  init_capacity,
const Device device,
const HashBackendType backend 
)
protected

◆ Insert() [1/4]

std::pair< Tensor, Tensor > open3d::core::HashMap::Insert ( const Tensor input_keys,
const std::vector< Tensor > &  input_values_soa 
)

Parallel insert arrays of keys and a structure of value arrays in Tensors. Return: output_buf_indices and output_masks, their role are the same as in single value Insert interface.

◆ Insert() [2/4]

void open3d::core::HashMap::Insert ( const Tensor input_keys,
const std::vector< Tensor > &  input_values_soa,
Tensor output_buf_indices,
Tensor output_masks 
)

Same as Insert with a SoA of values, but takes output_buf_indices and output_masks as input. If their shapes and types match, reallocation is not needed.

◆ Insert() [3/4]

std::pair< Tensor, Tensor > open3d::core::HashMap::Insert ( const Tensor input_keys,
const Tensor input_values 
)

Parallel insert arrays of keys and values in Tensors. Return: output_buf_indices stores buffer indices that access buffer tensors obtained from GetKeyTensor() and GetValueTensor() via advanced indexing. NOTE: output_buf_indices are stored in Int32. A conversion to Int64 is required for further indexing. Return: output_masks stores if the insertion is a success or failure (key already exists).

◆ Insert() [4/4]

void open3d::core::HashMap::Insert ( const Tensor input_keys,
const Tensor input_values,
Tensor output_buf_indices,
Tensor output_masks 
)

Same as Insert with a single value array, but takes output_buf_indices and output_masks as input. If their shapes and types match, reallocation is not needed.

◆ InsertImpl()

void open3d::core::HashMap::InsertImpl ( const Tensor input_keys,
const std::vector< Tensor > &  input_values_soa,
Tensor output_buf_indices,
Tensor output_masks,
bool  is_activate_op = false 
)
protected

◆ Load()

HashMap open3d::core::HashMap::Load ( const std::string &  file_name)
static

Load active keys and values from a npz file that contains 'key', 'n_values', 'value_{:03d}'.

◆ LoadFactor()

float open3d::core::HashMap::LoadFactor ( ) const

Return size / bucket_count.

◆ PrepareIndicesOutput()

void open3d::core::HashMap::PrepareIndicesOutput ( Tensor output_buf_indices,
int64_t  length 
) const
protected

◆ PrepareMasksOutput()

void open3d::core::HashMap::PrepareMasksOutput ( Tensor output_masks,
int64_t  length 
) const
protected

◆ Reserve()

void open3d::core::HashMap::Reserve ( int64_t  capacity)

Reserve the internal hash map with the given capacity by rehashing.

◆ Save()

void open3d::core::HashMap::Save ( const std::string &  file_name)

Save active keys and values to a npz file at 'key' and 'value_{:03d}'. The number of values is stored in 'n_values'. The file name should end with 'npz', otherwise 'npz' will be added as an extension.

◆ Size()

int64_t open3d::core::HashMap::Size ( ) const

Get the size (number of active entries) of the hash map.

◆ To()

HashMap open3d::core::HashMap::To ( const Device device,
bool  copy = false 
) const

Convert the hash map to another device.


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