Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
HCSRViewT.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7
8#pragma once
9
10namespace Alien
11{
12 template<typename MatrixT>
13 class HCSRViewT
14 {
15 public:
16 using IndexType = typename MatrixT::IndexType ;
17 using ValueType = typename MatrixT::ValueType ;
18 HCSRViewT(MatrixT const* parent,
19 BackEnd::Memory::eType memory,
20 std::size_t nrows,
21 std::size_t nnz)
22 : m_parent(parent)
23 , m_memory(memory)
24 , m_nrows(nrows)
25 , m_nnz(nnz)
26 {
27 switch(m_memory)
28 {
29 case BackEnd::Memory::Device :
30 {
31 if constexpr (requires{m_parent->allocateDevicePointers(nrows,nnz,&m_rows,&m_ncols,&m_cols,&m_values);})
32 {
33 m_parent->allocateDevicePointers(nrows,nnz,&m_rows,&m_ncols,&m_cols,&m_values);
34 }
35 else
36 throw Arccore::FatalErrorException(A_FUNCINFO, "Matrix Type doest not support allocateDevicePointers");
37 }
38 break ;
39 case BackEnd::Memory::Host :
40 default:
41 {
42 if constexpr (requires{m_parent->allocateHostPointers(nrows,nnz,&m_rows,&m_ncols,&m_cols,&m_values);})
43 {
44 m_parent->allocateHostPointers(nrows,nnz,&m_rows,&m_ncols,&m_cols,&m_values);
45 }
46 else
47 throw Arccore::FatalErrorException(A_FUNCINFO, "Matrix Type doest not support allocateHostPointers");
48
49 }
50 break ;
51 }
52 }
53
54 virtual ~HCSRViewT()
55 {
56 switch(m_memory)
57 {
58 case BackEnd::Memory::Device :
59 {
60 if constexpr (requires{m_parent->freeDevicePointers(m_rows,m_ncols,m_cols,m_values);})
61 {
62 m_parent->freeDevicePointers(m_rows,m_ncols,m_cols,m_values);
63 }
64 }
65 break ;
66 case BackEnd::Memory::Host :
67 default:
68 {
69 if constexpr (requires{m_parent->freeHostPointers(m_rows,m_ncols,m_cols,m_values);})
70 {
71 m_parent->freeHostPointers(m_rows,m_ncols,m_cols,m_values);
72 }
73 }
74 break ;
75 }
76 }
77
78 MatrixT const* m_parent = nullptr ;
79 BackEnd::Memory::eType m_memory = BackEnd::Memory::Host ;
80 std::size_t m_nrows = 0 ;
81 std::size_t m_nnz = 0 ;
82 IndexType* m_rows = nullptr ;
83 IndexType* m_ncols = nullptr ;
84 IndexType* m_cols = nullptr ;
85 ValueType* m_values = nullptr ;
86 };
87
88 template<typename VectorT>
89 class HVectorViewT
90 {
91 public:
92 using IndexType = typename VectorT::IndexType ;
93 using ValueType = typename VectorT::ValueType ;
94 HVectorViewT(VectorT const* parent,
95 BackEnd::Memory::eType memory,
96 std::size_t nrows)
97 : m_parent(parent)
98 , m_memory(memory)
99 , m_nrows(nrows)
100 {
101 switch(m_memory)
102 {
103 case BackEnd::Memory::Device :
104 {
105 if constexpr (requires{m_parent->allocateDevicePointers(nrows,&m_values);})
106 {
107 m_parent->allocateDevicePointers(nrows,&m_values);
108 }
109 else
110 throw Arccore::FatalErrorException(A_FUNCINFO, "Vector Type doest not support allocateDevicePointers");
111 }
112 break ;
113 case BackEnd::Memory::Host :
114 default:
115 {
116 if constexpr (requires{m_parent->allocateHostPointers(nrows,&m_values);})
117 {
118 m_parent->allocateHostPointers(nrows,&m_values);
119 }
120 else
121 throw Arccore::FatalErrorException(A_FUNCINFO, "Vector Type doest not support allocateHostPointers");
122 }
123 break ;
124 }
125 }
126
127 virtual ~HVectorViewT()
128 {
129 switch(m_memory)
130 {
131 case BackEnd::Memory::Device :
132 {
133 if constexpr (requires{m_parent->freeDevicePointers(m_values);})
134 {
135 m_parent->freeDevicePointers(m_values);
136 }
137 }
138 break ;
139 case BackEnd::Memory::Host :
140 default:
141 {
142 if constexpr (requires{m_parent->freeHostPointers(m_values);})
143 {
144 m_parent->freeHostPointers(m_nrows,m_values);
145 }
146 }
147 break ;
148 }
149 }
150
151 VectorT const* m_parent = nullptr ;
152 BackEnd::Memory::eType m_memory = BackEnd::Memory::Host ;
153 std::size_t m_nrows = 0 ;
154 ValueType* m_values = nullptr ;
155 };
156}
157
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17