15#include <alien/kernels/sycl/data/HCSRVector.h>
16#include <alien/kernels/sycl/data/HCSRVectorInternal.h>
18#include <alien/kernels/sycl/data/SYCLParallelEngine.h>
19#include <alien/kernels/sycl/data/SYCLParallelEngineImplT.h>
21#include <alien/handlers/scalar/sycl/VectorAccessorT.h>
37 template <
typename ValueT>
38 class VectorAccessorT<ValueT>::Impl
41 typedef typename HCSRVector<ValueT>::InternalType VectorInternalType ;
42 typedef typename VectorInternalType::ValueBufferType ValueBufferType ;
44 Impl(ValueBufferType& buffer)
49 ValueBufferType& m_buffer ;
52 return m_buffer.template get_access<sycl::access::mode::read_write>(cgh.m_internal) ;
56 template <
typename ValueT>
57 VectorAccessorT<ValueT>::VectorAccessorT(
IVector& vector,
bool update)
58 : m_time_stamp(nullptr)
62 auto& v = vector.
impl()->get<BackEnd::tag::hcsr>(update);
64 m_impl.reset(
new Impl(v.internal()->values())) ;
68 template <
typename ValueT>
70 assert(m_impl.get()) ;
76 template <
typename ValueT>
77 void VectorAccessorT<ValueT>::end()
84 template <
typename ValueT>
85 class VectorAccessorT<ValueT>::View
87 sycl::handler* m_h = nullptr ;
88 sycl::buffer<ValueT,1>* m_b = nullptr ;
89 using AccessorType =
decltype(m_b->template get_access<sycl::access::mode::read_write>(*m_h));
92 explicit View(AccessorType accessor)
93 : m_accessor(accessor)
96 ValueT& operator[](std::size_t index)
const {
97 return m_accessor[index] ;
101 AccessorType m_accessor ;
105 template <
typename ValueT>
106 class VectorAccessorT<ValueT>::ConstView
108 sycl::handler* m_h = nullptr ;
109 sycl::buffer<ValueT,1>* m_b = nullptr ;
110 using AccessorType =
decltype(m_b->template get_access<sycl::access::mode::read>(*m_h));
113 explicit ConstView(AccessorType accessor)
114 : m_accessor(accessor)
117 ValueT operator[](std::size_t index)
const {
118 return m_accessor[index] ;
122 AccessorType m_accessor ;
126 template <
typename ValueT>
127 class VectorAccessorT<ValueT>::HostView
130 typedef typename HCSRVector<ValueT>::InternalType VectorInternalType ;
131 typedef typename VectorInternalType::ValueBufferType ValueBufferType ;
133 sycl::buffer<ValueT,1>* m_b = nullptr ;
134 using AccessorType =
decltype(m_b->get_host_access());
136 explicit HostView(AccessorType values)
142 ValueType operator[](std::size_t index)
const {
143 return m_values[index] ;
147 AccessorType m_values ;
151 template <
typename ValueT>
154 return View(m_impl->m_buffer.template get_access<sycl::access::mode::read_write>(cgh.m_internal)) ;
157 template <
typename ValueT>
163 template <
typename ValueT>
164 typename VectorAccessorT<ValueT>::HostView VectorAccessorT<ValueT>::hostView()
const
166 return HostView(m_impl->m_buffer.get_host_access()) ;
Interface for all vectors.
virtual MultiVectorImpl * impl()=0
Get the multivector implementation.
const VectorDistribution & distribution() const
Get the vector distribution.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --