ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
SVDCUDA.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
12 
13 namespace cloudViewer {
14 namespace core {
15 
16 void SVDCUDA(const void* A_data,
17  void* U_data,
18  void* S_data,
19  void* VT_data,
20  void* superb_data,
21  int64_t m,
22  int64_t n,
23  Dtype dtype,
24  const Device& device) {
25  cusolverDnHandle_t handle =
26  CuSolverContext::GetInstance().GetHandle(device);
27 
29  int len;
30  Blob dinfo(sizeof(int), device);
31 
32  OPEN3D_CUSOLVER_CHECK(
33  gesvd_cuda_buffersize<scalar_t>(handle, m, n, &len),
34  "gesvd_buffersize failed in SVDCUDA");
35 
36  Blob workspace(len * sizeof(scalar_t), device);
37 
38  OPEN3D_CUSOLVER_CHECK_WITH_DINFO(
39  gesvd_cuda<scalar_t>(
40  handle, 'A', 'A', m, n,
41  const_cast<scalar_t*>(
42  static_cast<const scalar_t*>(A_data)),
43  m, static_cast<scalar_t*>(S_data),
44  static_cast<scalar_t*>(U_data), m,
45  static_cast<scalar_t*>(VT_data), n,
46  static_cast<scalar_t*>(workspace.GetDataPtr()), len,
47  static_cast<scalar_t*>(superb_data),
48  static_cast<int*>(dinfo.GetDataPtr())),
49  "gesvd failed in SVDCUDA",
50  static_cast<int*>(dinfo.GetDataPtr()), device);
51  });
52 }
53 } // namespace core
54 } // namespace cloudViewer
#define DISPATCH_LINALG_DTYPE_TO_TEMPLATE(DTYPE,...)
Definition: LinalgUtils.h:23
void * GetDataPtr()
Definition: Blob.h:75
ccGuiPythonInstance * GetInstance() noexcept
Definition: Runtime.cpp:72
void SVDCUDA(const void *A_data, void *U_data, void *S_data, void *VT_data, void *superb_data, int64_t m, int64_t n, Dtype dtype, const Device &device)
Definition: SVDCUDA.cpp:16
Generic file read and write utility for python interface.