11 static_assert(std::is_same_v<T, float> || std::is_same_v<T, double>,
12 "now only support real number");
16 using auto_const_t =
typename Base::template auto_const_t<U>;
23 using CBufferView = CBufferView<T>;
24 using BufferView = BufferView<T>;
25 using ThisBufferView = std::conditional_t<IsConst, CBufferView, BufferView>;
29 using ThisViewer = std::conditional_t<IsConst, CViewer, Viewer>;
32 auto_const_t<T>* m_data =
nullptr;
33 mutable cusparseDnVecDescr_t m_descr =
nullptr;
37 int m_origin_size = -1;
43 cusparseDnVecDescr_t descr,
53 , m_origin_size(origin_size)
59 return ConstView{m_data, m_descr, m_offset, m_inc, m_size, m_origin_size};
61 operator ConstView()
const {
return as_const(); }
66 return ThisViewer{m_data, m_offset, m_size, m_origin_size};
70 return ThisBufferView{m_data, size_t(m_offset), size_t(m_inc * m_size)};
73 auto data() {
return m_data + m_offset; }
74 auto origin_data() {
return m_data; }
77 auto offset()
const {
return m_offset; }
78 auto size()
const {
return m_size; }
79 auto data()
const {
return m_data + m_offset; }
80 auto origin_data()
const {
return m_data; }
82 CBufferView buffer_view()
const
84 return remove_const(*this).buffer_view();
89 MUDA_KERNEL_ASSERT(inc() == 1,
"When using cviewer(), inc!=1 is not allowed");
90 return CViewer{m_data, m_offset, m_size, m_origin_size};
93 auto inc()
const {
return m_inc; }
97 MUDA_KERNEL_ASSERT(inc() == 1,
"When using descr(), inc!=1 is not allowed");
101 auto subview(
int offset,
int size)
103 MUDA_KERNEL_ASSERT(inc() == 1,
"When using subview(), inc!=1 is not allowed");
104 MUDA_KERNEL_ASSERT(offset + size <= m_size,
"subview out of range");
105 return ThisView{m_data, m_descr, m_offset + offset, m_inc, size, m_origin_size};
108 auto subview(
int offset,
int size)
const
110 MUDA_KERNEL_ASSERT(inc() == 1,
"When using subview(), inc!=1 is not allowed");
111 MUDA_KERNEL_ASSERT(offset + size <= m_size,
"subview out of range");
112 return ConstView{m_data, m_descr, m_offset + offset, m_inc, size, m_origin_size};