40 #include <viennacl/vector.hpp>
46 #include <type_traits>
52 CGPUVector<T>::CGPUVector()
58 CGPUVector<T>::CGPUVector(
index_t length) : vector(new VCLMemoryArray())
64 viennacl::backend::memory_create(*vector,
sizeof(T)*vlen,
69 CGPUVector<T>::CGPUVector(std::shared_ptr<VCLMemoryArray> mem,
index_t length,
80 CGPUVector<T>::CGPUVector(
const SGVector<T>& cpu_vec) : vector(new VCLMemoryArray())
85 viennacl::backend::memory_create(*vector,
sizeof(T)*vlen,
88 viennacl::backend::memory_write(*vector, 0, vlen*
sizeof(T),
93 CGPUVector<T>::CGPUVector(
const EigenVectorXt& cpu_vec)
94 : vector(new VCLMemoryArray())
97 vlen = cpu_vec.size();
99 viennacl::backend::memory_create(*vector,
sizeof(T)*vlen,
100 viennacl::context());
102 viennacl::backend::memory_write(*vector, 0, vlen*
sizeof(T),
107 CGPUVector<T>::CGPUVector(
const EigenRowVectorXt& cpu_vec)
108 : vector(new VCLMemoryArray())
111 vlen = cpu_vec.size();
113 viennacl::backend::memory_create(*vector,
sizeof(T)*vlen,
114 viennacl::context());
116 viennacl::backend::memory_write(*vector, 0, vlen*
sizeof(T),
121 CGPUVector<T>::operator EigenVectorXt()
const
123 EigenVectorXt cpu_vec(vlen);
125 viennacl::backend::memory_read(*vector, offset*
sizeof(T), vlen*
sizeof(T),
132 CGPUVector<T>::operator EigenRowVectorXt()
const
134 EigenRowVectorXt cpu_vec(vlen);
136 viennacl::backend::memory_read(*vector, offset*
sizeof(T), vlen*
sizeof(T),
143 CGPUVector<T>::operator SGVector<T>()
const
145 SGVector<T> cpu_vec(vlen);
147 viennacl::backend::memory_read(*vector, offset*
sizeof(T), vlen*
sizeof(T),
154 typename CGPUVector<T>::VCLVectorBase CGPUVector<T>::vcl_vector()
156 return VCLVectorBase(*vector, vlen, offset, 1);
160 void CGPUVector<T>::display_vector(
const char* name)
const
162 ((SGVector<T>)*
this).display_vector(name);
166 void CGPUVector<T>::zero()
168 vcl_vector().clear();
172 void CGPUVector<T>::set_const(T value)
174 VCLVectorBase v = vcl_vector();
175 viennacl::linalg::vector_assign(v, value);
179 viennacl::const_entry_proxy< T > CGPUVector<T>::operator[](
index_t index)
const
181 return viennacl::const_entry_proxy<T>(offset+index, *vector);
185 viennacl::entry_proxy< T > CGPUVector<T>::operator[](
index_t index)
187 return viennacl::entry_proxy<T>(offset+index, *vector);
191 void CGPUVector<T>::init()
197 template<
typename T>
struct dummy {};
198 template<
typename T>
class CGPUVector<dummy<T> > {};
200 template class CGPUVector<char>;
201 template class CGPUVector<uint8_t>;
202 template class CGPUVector<int16_t>;
203 template class CGPUVector<uint16_t>;
204 template class CGPUVector<int32_t>;
205 template class CGPUVector<uint32_t>;
206 template class CGPUVector<std::conditional<viennacl::is_primitive_type<int64_t>::value, int64_t, dummy<int64_t> >::type>;
207 template class CGPUVector<std::conditional<viennacl::is_primitive_type<uint64_t>::value, uint64_t, dummy<uint64_t> >::type>;
208 template class CGPUVector<float32_t>;
209 template class CGPUVector<float64_t>;
213 #endif // HAVE_VIENNACL
all of classes and functions are contained in the shogun namespace