1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
8 #include "cloudViewer/core/hashmap/CUDA/SlabHashBackend.h"
9 #include "cloudViewer/core/hashmap/CUDA/StdGPUHashBackend.h"
10 #include "cloudViewer/core/hashmap/Dispatch.h"
11 #include "cloudViewer/core/hashmap/HashMap.h"
13 namespace cloudViewer {
16 /// Non-templated factory.
17 std::shared_ptr<DeviceHashBackend> CreateCUDAHashBackend(
18 int64_t init_capacity,
19 const Dtype& key_dtype,
20 const SizeVector& key_element_shape,
21 const std::vector<Dtype>& value_dtypes,
22 const std::vector<SizeVector>& value_element_shapes,
24 const HashBackendType& backend) {
25 if (backend != HashBackendType::Default &&
26 backend != HashBackendType::Slab &&
27 backend != HashBackendType::StdGPU) {
28 utility::LogError("Unsupported backend for CUDA hashmap.");
31 int64_t dim = key_element_shape.NumElements();
33 int64_t key_dsize = dim * key_dtype.ByteSize();
36 std::vector<int64_t> value_dsizes;
37 for (size_t i = 0; i < value_dtypes.size(); ++i) {
38 int64_t dsize_value = value_element_shapes[i].NumElements() *
39 value_dtypes[i].ByteSize();
40 value_dsizes.push_back(dsize_value);
43 std::shared_ptr<DeviceHashBackend> device_hashmap_ptr;
44 if (backend == HashBackendType::Default ||
45 backend == HashBackendType::StdGPU) {
46 DISPATCH_DTYPE_AND_DIM_TO_TEMPLATE(key_dtype, dim, [&] {
48 std::make_shared<StdGPUHashBackend<key_t, hash_t, eq_t>>(
49 init_capacity, key_dsize, value_dsizes, device);
51 } else { // if (backend == HashBackendType::Slab) {
52 DISPATCH_DTYPE_AND_DIM_TO_TEMPLATE(key_dtype, dim, [&] {
54 std::make_shared<SlabHashBackend<key_t, hash_t, eq_t>>(
55 init_capacity, key_dsize, value_dsizes, device);
58 return device_hashmap_ptr;
62 } // namespace cloudViewer