Open3D (C++ API)  0.20.0
Loading...
Searching...
No Matches
RaggedToDenseSYCL.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2026 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8// SYCL implementation of RaggedToDense — ports RaggedToDense.cuh to DPC++.
9// One work-item per row: copy values into the dense output and pad with
10// default_value when the row is shorter than out_col_size. Single-stage op:
11// launched via core::ParallelFor(queue, n, func).
12
13#pragma once
14
15#include <sycl/sycl.hpp>
16
18
19namespace open3d {
20namespace ml {
21namespace impl {
22
25template <class T>
26void RaggedToDenseSYCL(sycl::queue& queue,
27 const T* const values,
28 const int64_t* const row_splits,
29 const size_t row_splits_size,
30 const size_t out_col_size,
31 const T* const default_value,
32 const size_t default_value_size,
33 T* out_values) {
34 if (row_splits_size <= 1) return;
35
36 const size_t num_rows = row_splits_size - 1;
37
39 queue, static_cast<int64_t>(num_rows), [=](int64_t idx64) {
40 const size_t i = static_cast<size_t>(idx64);
41
42 const int64_t start = row_splits[i];
43 const int64_t end_raw = row_splits[i + 1];
44 const int64_t end = sycl::min(
45 static_cast<int64_t>(out_col_size) + start, end_raw);
46
47 // Copy valid values
48 T* out_ptr = out_values + i * out_col_size * default_value_size;
49 for (int64_t inp_idx =
50 start * static_cast<int64_t>(default_value_size);
51 inp_idx < end * static_cast<int64_t>(default_value_size);
52 ++inp_idx, ++out_ptr) {
53 *out_ptr = values[inp_idx];
54 }
55
56 // Pad remaining columns with default_value
57 out_ptr = out_values + i * out_col_size * default_value_size +
58 (end - start) *
59 static_cast<int64_t>(default_value_size);
60 for (int64_t j = end - start;
61 j < static_cast<int64_t>(out_col_size);
62 ++j, out_ptr += default_value_size) {
63 for (size_t k = 0; k < default_value_size; ++k) {
64 out_ptr[k] = default_value[k];
65 }
66 }
67 });
68}
69
70} // namespace impl
71} // namespace ml
72} // namespace open3d
sycl::queue queue
Definition SYCLContext.cpp:88
void ParallelFor(const Device &device, int64_t n, const func_t &func)
Definition ParallelFor.h:190
void RaggedToDenseSYCL(sycl::queue &queue, const T *const values, const int64_t *const row_splits, const size_t row_splits_size, const size_t out_col_size, const T *const default_value, const size_t default_value_size, T *out_values)
Definition RaggedToDenseSYCL.h:26
Definition PinholeCameraIntrinsic.cpp:16