Open3D (C++ API)  0.15.1
cuda_utils.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// The MIT License (MIT)
5//
6// Copyright (c) 2018-2021 www.open3d.org
7//
8// Permission is hereby granted, free of charge, to any person obtaining a copy
9// of this software and associated documentation files (the "Software"), to deal
10// in the Software without restriction, including without limitation the rights
11// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12// copies of the Software, and to permit persons to whom the Software is
13// furnished to do so, subject to the following conditions:
14//
15// The above copyright notice and this permission notice shall be included in
16// all copies or substantial portions of the Software.
17//
18// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24// IN THE SOFTWARE.
25// ----------------------------------------------------------------------------
26//***************************************************************************************/
27//
28// Based on Pointnet2 Library (MIT License):
29// https://github.com/sshaoshuai/Pointnet2.PyTorch
30//
31// Copyright (c) 2019 Shaoshuai Shi
32//
33// Permission is hereby granted, free of charge, to any person obtaining a
34// copy of this software and associated documentation files (the "Software"),
35// to deal in the Software without restriction, including without limitation
36// the rights to use, copy, modify, merge, publish, distribute, sublicense,
37// and/or sell copies of the Software, and to permit persons to whom the
38// Software is furnished to do so, subject to the following conditions:
39//
40// The above copyright notice and this permission notice shall be included in
41// all copies or substantial portions of the Software.
42//
43// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
46// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
48// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
49// DEALINGS IN THE SOFTWARE.
50//
51//***************************************************************************************/
52
53#pragma once
54
55#include <cmath>
56
57namespace open3d {
58namespace ml {
59namespace contrib {
60
61#define TOTAL_THREADS 1024
62#define THREADS_PER_BLOCK 256
63#define DIVUP(m, n) ((m) / (n) + ((m) % (n) > 0))
64
65inline int OptNumThreads(int work_size) {
66 const int pow_2 = std::log(static_cast<double>(work_size)) / std::log(2.0);
67
68 return max(min(1 << pow_2, TOTAL_THREADS), 1);
69}
70
71inline dim3 OptBlockConfig(int x, int y) {
72 const int x_threads = OptNumThreads(x);
73 const int y_threads =
74 max(min(OptNumThreads(y), TOTAL_THREADS / x_threads), 1);
75 dim3 block_config(x_threads, y_threads, 1);
76 return block_config;
77}
78
79} // namespace contrib
80} // namespace ml
81} // namespace open3d
#define TOTAL_THREADS
Definition: cuda_utils.h:61
int OptNumThreads(int work_size)
Definition: cuda_utils.h:65
dim3 OptBlockConfig(int x, int y)
Definition: cuda_utils.h:71
Definition: PinholeCameraIntrinsic.cpp:35