9#include <alien/kernels/sycl/SYCLPrecomp.h>
12#include <alien/kernels/sycl/data/HCSRVectorInternal.h>
16template <
typename ValueT>
17typename HCSRVector<ValueT>::ValueType
const*
18HCSRVector<ValueT>::dataPtr()
const
20 if(m_internal.get()==
nullptr)
23 auto env = SYCLEnv::instance() ;
24 auto& queue = env->internal()->queue() ;
25 auto max_num_treads = env->maxNumThreads() ;
27 auto values = malloc_device<ValueT>(m_local_size, queue);
29 queue.submit( [&](sycl::handler& cgh)
31 auto access_x = m_internal->m_values.template get_access<sycl::access::mode::read>(cgh);
32 std::size_t y_length = m_local_size ;
33 cgh.parallel_for<
class init_vector_ptr>(sycl::range<1>{max_num_treads}, [=] (sycl::item<1> itemId)
35 auto id = itemId.get_id(0);
36 for (
auto i =
id; i < y_length; i += itemId.get_range()[0])
37 values[i] = access_x[i];
45template <
typename ValueT>
47HCSRVector<ValueT>::copyValuesTo(ValueType* values)
const
49 if(m_internal.get()==
nullptr)
52 auto env = SYCLEnv::instance() ;
53 auto& queue = env->internal()->queue() ;
54 auto max_num_treads = env->maxNumThreads() ;
56 queue.submit( [&](sycl::handler& cgh)
58 auto access_x = m_internal->m_values.template get_access<sycl::access::mode::read>(cgh);
59 std::size_t y_length = m_local_size ;
60 cgh.parallel_for<
class init_vector_ptr>(sycl::range<1>{max_num_treads}, [=] (sycl::item<1> itemId)
62 auto id = itemId.get_id(0);
63 for (
auto i =
id; i < y_length; i += itemId.get_range()[0])
64 values[i] = access_x[i];
70template <
typename ValueT>
71void HCSRVector<ValueT>::initDevicePointers(
int** rows, ValueType** values)
const
73 if(m_internal.get()==
nullptr)
76 auto env = SYCLEnv::instance() ;
77 auto& queue = env->internal()->queue() ;
78 auto max_num_treads = env->maxNumThreads() ;
80 auto values_ptr = malloc_device<ValueT>(m_local_size, queue);
81 auto rows_ptr = malloc_device<IndexType>(m_local_size, queue);
83 queue.submit( [&](sycl::handler& cgh)
85 auto access_x = m_internal->m_values.template get_access<sycl::access::mode::read>(cgh);
86 std::size_t y_length = m_local_size ;
87 cgh.parallel_for<
class init_hcsrvector_ptr>(sycl::range<1>{max_num_treads}, [=] (sycl::item<1> itemId)
89 auto id = itemId.get_id(0);
90 for (
auto i =
id; i < y_length; i += itemId.get_range()[0])
92 values_ptr[i] = access_x[i];
102template <
typename ValueT>
103void HCSRVector<ValueT>::freeDevicePointers(
int* rows, ValueType* values)
const
105 auto env = SYCLEnv::instance() ;
106 auto& queue = env->internal()->queue() ;
107 sycl::free(values,queue) ;
108 sycl::free(rows,queue) ;
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --