Open3D (C++ API)
0.19.0
Toggle main menu visibility
Loading...
Searching...
No Matches
cpp
open3d
core
linalg
LinalgUtils.h
Go to the documentation of this file.
1
// ----------------------------------------------------------------------------
2
// - Open3D: www.open3d.org -
3
// ----------------------------------------------------------------------------
4
// Copyright (c) 2018-2024 www.open3d.org
5
// SPDX-License-Identifier: MIT
6
// ----------------------------------------------------------------------------
7
8
#pragma once
9
10
#include <string>
11
12
#include "
open3d/core/Device.h
"
13
#include "
open3d/core/Dtype.h
"
14
#include "
open3d/core/MemoryManager.h
"
15
#include "
open3d/core/linalg/LinalgHeadersCPU.h
"
16
#include "
open3d/core/linalg/LinalgHeadersCUDA.h
"
17
#include "
open3d/utility/Logging.h
"
18
19
namespace
open3d
{
20
namespace
core
{
21
22
#define DISPATCH_LINALG_DTYPE_TO_TEMPLATE(DTYPE, ...) \
23
[&] { \
24
if (DTYPE == open3d::core::Float32) { \
25
using scalar_t = float; \
26
return __VA_ARGS__(); \
27
} else if (DTYPE == open3d::core::Float64) { \
28
using scalar_t = double; \
29
return __VA_ARGS__(); \
30
} else { \
31
utility::LogError("Unsupported data type."); \
32
} \
33
}()
34
35
inline
void
OPEN3D_LAPACK_CHECK
(
OPEN3D_CPU_LINALG_INT
info,
36
const
std::string& msg) {
37
if
(info < 0) {
38
utility::LogError(
"{}: {}-th parameter is invalid."
, msg, -info);
39
}
else
if
(info > 0) {
40
utility::LogError(
"{}: singular condition detected."
, msg);
41
}
42
}
43
44
#ifdef BUILD_CUDA_MODULE
45
inline
void
OPEN3D_CUBLAS_CHECK(cublasStatus_t status,
const
std::string& msg) {
46
if
(CUBLAS_STATUS_SUCCESS != status) {
47
utility::LogError(
"{}"
, msg);
48
}
49
}
50
51
inline
void
OPEN3D_CUSOLVER_CHECK(cusolverStatus_t status,
52
const
std::string& msg) {
53
if
(CUSOLVER_STATUS_SUCCESS != status) {
54
utility::LogError(
"{}"
, msg);
55
}
56
}
57
58
inline
void
OPEN3D_CUSOLVER_CHECK_WITH_DINFO(cusolverStatus_t status,
59
const
std::string& msg,
60
int
* dinfo,
61
const
Device
& device) {
62
int
hinfo;
63
MemoryManager::MemcpyToHost
(&hinfo, dinfo, device,
sizeof
(
int
));
64
if
(status != CUSOLVER_STATUS_SUCCESS || hinfo != 0) {
65
if
(hinfo < 0) {
66
utility::LogError(
"{}: {}-th parameter is invalid."
, msg, -hinfo);
67
}
else
if
(hinfo > 0) {
68
utility::LogError(
"{}: singular condition detected."
, msg);
69
}
else
{
70
utility::LogError(
"{}: status error code = {}."
, msg, status);
71
}
72
}
73
}
74
75
class
CuSolverContext {
76
public
:
77
static
CuSolverContext& GetInstance();
78
79
CuSolverContext(
const
CuSolverContext&) =
delete
;
80
CuSolverContext& operator=(
const
CuSolverContext&) =
delete
;
81
~CuSolverContext();
82
83
cusolverDnHandle_t& GetHandle(
const
Device& device);
84
85
private
:
86
CuSolverContext();
87
std::unordered_map<Device, cusolverDnHandle_t> map_device_to_handle_;
88
};
89
90
class
CuBLASContext {
91
public
:
92
static
CuBLASContext& GetInstance();
93
94
CuBLASContext(
const
CuBLASContext&) =
delete
;
95
CuBLASContext& operator=(
const
CuBLASContext&) =
delete
;
96
~CuBLASContext();
97
98
cublasHandle_t& GetHandle(
const
Device& device);
99
100
private
:
101
CuBLASContext();
102
std::unordered_map<Device, cublasHandle_t> map_device_to_handle_;
103
};
104
#endif
105
}
// namespace core
106
}
// namespace open3d
Device.h
Dtype.h
LinalgHeadersCPU.h
OPEN3D_CPU_LINALG_INT
#define OPEN3D_CPU_LINALG_INT
Definition
LinalgHeadersCPU.h:23
LinalgHeadersCUDA.h
Logging.h
MemoryManager.h
open3d::core::Device
Definition
Device.h:18
open3d::core::MemoryManager::MemcpyToHost
static void MemcpyToHost(void *host_ptr, const void *src_ptr, const Device &src_device, size_t num_bytes)
Same as Memcpy, but with host (CPU:0) as default dst_device.
Definition
MemoryManager.cpp:85
open3d::core
Definition
AdvancedIndexing.cpp:15
open3d::core::OPEN3D_LAPACK_CHECK
void OPEN3D_LAPACK_CHECK(OPEN3D_CPU_LINALG_INT info, const std::string &msg)
Definition
LinalgUtils.h:35
open3d
Definition
PinholeCameraIntrinsic.cpp:16
Generated by
1.17.0