MUDA
Loading...
Searching...
No Matches
device_dense_matrix.h
1#pragma once
2#include <muda/ext/linear_system/dense_matrix_view.h>
3#include <muda/buffer/device_buffer_2d.h>
4
5namespace muda::details
6{
7template <typename T, int N>
8class MatrixFormatConverter;
9}
10
11namespace muda
12{
13// A column major dense matrix on device.
14template <typename Ty>
16{
17 static_assert(std::is_same_v<Ty, float> || std::is_same_v<Ty, double>,
18 "now only support real number");
19
20 DeviceBuffer2D<Ty> m_data;
21 size_t m_row = 0;
22 size_t m_col = 0;
23 bool m_sym = false;
24
25 public:
26 using value_type = Ty;
27 DeviceDenseMatrix() = default;
28 DeviceDenseMatrix(size_t row, size_t col, bool sym = false);
29 void sym(bool sym = true) { m_sym = sym; }
30 bool sym() const { return m_sym; }
31
32 DeviceDenseMatrix(const DeviceDenseMatrix&) = default;
34
35 DeviceDenseMatrix& operator=(const DeviceDenseMatrix&) = default;
37
38 size_t row() const { return m_row; }
39 size_t col() const { return m_col; }
40
41 void reshape(size_t row, size_t col);
42 void fill(Ty value);
43 void copy_to(Eigen::MatrixX<Ty>& mat) const;
44 void copy_to(std::vector<Ty>& vec) const;
45
46 DeviceDenseMatrix(const Eigen::MatrixX<Ty>&);
47 DeviceDenseMatrix& operator=(const Eigen::MatrixX<Ty>&);
48
49 DenseMatrixViewer<Ty> viewer() { return view().viewer(); }
50 CDenseMatrixViewer<Ty> cviewer() const { return view().cviewer(); }
51
52 auto buffer_view() const { return m_data.view(); }
53 auto buffer_view() { return m_data.view(); }
54
56 CDenseMatrixView<Ty> T() const;
57
59 CDenseMatrixView<Ty> view() const;
60 CDenseMatrixView<Ty> cview() const { return view(); }
61
62 operator DenseMatrixView<Ty>();
63 operator CDenseMatrixView<Ty>() const;
64};
65} // namespace muda
66
67#include "details/device_dense_matrix.inl"
Definition dense_matrix_view.h:93
Definition dense_matrix_viewer.h:111
Definition dense_matrix_view.h:108
Definition dense_matrix_viewer.h:142
Definition device_buffer_2d.h:13
Definition device_dense_matrix.h:16