Open3D (C++ API)
0.18.0
|
#include <HashMap.h>
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, Tensor > | Insert (const Tensor &input_keys, const Tensor &input_values) |
std::pair< Tensor, Tensor > | Insert (const Tensor &input_keys, const std::vector< Tensor > &input_values_soa) |
std::pair< Tensor, Tensor > | Activate (const Tensor &input_keys) |
std::pair< Tensor, Tensor > | Find (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< Tensor > | GetValueTensors () 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< DeviceHashBackend > | GetDeviceHashBackend () 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 () |
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.
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.
|
default |
Default destructor.
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.
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.
std::vector< int64_t > open3d::core::HashMap::BucketSizes | ( | ) | const |
Return number of elements per bucket.
|
protected |
|
protected |
|
protected |
|
protected |
void open3d::core::HashMap::Clear | ( | ) |
Clear stored map without reallocating the buffers.
HashMap open3d::core::HashMap::Clone | ( | ) | const |
Clone the hash map with buffers.
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).
Same as Erase, but takes output_masks as input. If its shape and type matches, reallocation is not needed.
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).
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.
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.
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.
int64_t open3d::core::HashMap::GetBucketCount | ( | ) | const |
Get the number of buckets of the internal hash map.
int64_t open3d::core::HashMap::GetCapacity | ( | ) | const |
Get the capacity of the hash map.
|
protected |
|
overridevirtual |
Get the device of the hash map.
Implements open3d::core::IsDevice.
|
inline |
Return the implementation of the device hash backend.
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}})
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}})
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}})
|
protected |
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.
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.
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).
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.
|
protected |
|
static |
Load active keys and values from a npz file that contains 'key', 'n_values', 'value_{:03d}'.
float open3d::core::HashMap::LoadFactor | ( | ) | const |
Return size / bucket_count.
|
protected |
|
protected |
void open3d::core::HashMap::Reserve | ( | int64_t | capacity | ) |
Reserve the internal hash map with the given capacity by rehashing.
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.
int64_t open3d::core::HashMap::Size | ( | ) | const |
Get the size (number of active entries) of the hash map.
Convert the hash map to another device.