1#include <muda/check/check_cusparse.h>
2#include <muda/ext/linear_system/type_mapper/data_type_mapper.h>
7DeviceDenseVector<T>::DeviceDenseVector(
size_t size)
12DeviceDenseVector<T>::~DeviceDenseVector()
15 checkCudaErrors(cusparseDestroyDnVec(m_descr));
18DeviceDenseVector<T>::DeviceDenseVector(
const DeviceDenseVector<T>& other)
19 : m_data{other.m_data}
21 checkCudaErrors(cusparseCreateDnVec(
22 &m_descr, m_data.size(), m_data.data(), cuda_data_type<T>()));
25DeviceDenseVector<T>::DeviceDenseVector(DeviceDenseVector<T>&& other)
26 : m_data{std::move(other.m_data)}
27 , m_descr{other.m_descr}
29 other.m_descr =
nullptr;
32DeviceDenseVector<T>& DeviceDenseVector<T>::operator=(
const DeviceDenseVector<T>& other)
36 m_data = other.m_data;
38 checkCudaErrors(cusparseDestroyDnVec(m_descr));
39 checkCudaErrors(cusparseCreateDnVec(
40 &m_descr, m_data.size(), m_data.data(), cuda_data_type<T>()));
45DeviceDenseVector<T>& DeviceDenseVector<T>::operator=(DeviceDenseVector<T>&& other)
49 m_data = std::move(other.m_data);
50 m_descr = other.m_descr;
51 other.m_descr =
nullptr;
56void DeviceDenseVector<T>::reserve(
size_t size)
61void DeviceDenseVector<T>::resize(
size_t size)
65 checkCudaErrors(cusparseDestroyDnVec(m_descr));
71 cusparseCreateDnVec(&m_descr, size, m_data.data(), cuda_data_type<T>()));
74void DeviceDenseVector<T>::fill(T value)
79void DeviceDenseVector<T>::copy_to(Eigen::VectorX<T>& vec)
const
81 vec.resize(m_data.size());
82 m_data.view().copy_to(vec.data());
85void DeviceDenseVector<T>::copy_to(std::vector<T>& vec)
const
87 vec.resize(m_data.size());
88 m_data.view().copy_to(vec.data());
91DeviceDenseVector<T>::DeviceDenseVector(
const Eigen::VectorX<T>& vec)
93 this->resize(vec.size());
94 m_data.view().copy_from(vec.data());
97DeviceDenseVector<T>& DeviceDenseVector<T>::operator=(
const Eigen::VectorX<T>& vec)
99 this->resize(vec.size());
100 m_data.view().copy_from(vec.data());
105CDenseVectorView<T> DeviceDenseVector<T>::view()
const
107 return CDenseVectorView<T>{m_data.data(), descr(), 0, 1, (int)size(), (int)size()};
111DenseVectorView<T> DeviceDenseVector<T>::view()
113 return DenseVectorView<T>{m_data.data(), descr(), 0, 1, (int)size(), (int)size()};