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