@@ -57,9 +57,13 @@ void set_memory_op<FPTYPE, base_device::DEVICE_GPU>::operator()(const base_devic
5757 const int var,
5858 const size_t size)
5959{
60- hipErrcheck (hipMemset (arr, var, sizeof (FPTYPE ) * size));
60+ hipErrcheck (hipMemset (arr, const size_t height)
61+ {
62+ hipErrcheck (hipMemset2D (arr, sizeof (FPTYPE ) * pitch , var, sizeof (FPTYPE ) * width, height));
6163}
6264
65+
66+
6367template <typename FPTYPE >
6468void synchronize_memory_op<FPTYPE , base_device::DEVICE_CPU , base_device::DEVICE_GPU >::operator ()(
6569 const base_device::DEVICE_CPU * dev_out,
@@ -68,33 +72,34 @@ void synchronize_memory_op<FPTYPE, base_device::DEVICE_CPU, base_device::DEVICE_
6872 const FPTYPE * arr_in,
6973 const size_t size)
7074{
71- hipErrcheck (hipMemcpy (arr_out, arr_in, sizeof (FPTYPE ) * size, hipMemcpyDeviceToHost));
72- }
73-
74- template <typename FPTYPE >
75- void synchronize_memory_op<FPTYPE , base_device::DEVICE_GPU , base_device::DEVICE_CPU >::operator ()(
75+ hipErrcheck (hipMemcpy (arr_op<FPTYPE , base_device::DEVICE_GPU , base_device::DEVICE_GPU >::operator ()(
7676 const base_device::DEVICE_GPU * dev_out,
77- const base_device::DEVICE_CPU * dev_in,
77+ const base_device::DEVICE_GPU * dev_in,
7878 FPTYPE * arr_out,
7979 const FPTYPE * arr_in,
8080 const size_t size)
8181{
82- hipErrcheck (hipMemcpy (arr_out, arr_in, sizeof (FPTYPE ) * size, hipMemcpyHostToDevice ));
82+ hipErrcheck (hipMemcpy (arr_out, arr_in, sizeof (FPTYPE ) * size, hipMemcpyDeviceToDevice ));
8383}
8484
8585template <typename FPTYPE >
86- void synchronize_memory_op<FPTYPE , base_device::DEVICE_GPU , base_device::DEVICE_GPU >::operator ()(
87- const base_device::DEVICE_GPU * dev_out,
88- const base_device::DEVICE_GPU * dev_in,
86+ void synchronize_memory_2d_op<FPTYPE , base_device::DEVICE_CPU , base_device::DEVICE_GPU >::operator ()(
87+ const base_device::DEVICE_CPU * dev_out,
88+ const basICE_GPU* dev_out,
89+ const base_device::DEVICE_CPU * dev_in,
8990 FPTYPE * arr_out,
91+ const size_t dpitch,
9092 const FPTYPE * arr_in,
91- const size_t size)
93+ const size_t spitch,
94+ const size_t width,
95+ const size_t height)
9296{
93- hipErrcheck (hipMemcpy (arr_out, arr_in, sizeof (FPTYPE ) * size, hipMemcpyDeviceToDevice ));
97+ hipErrcheck (hipMemcpy2D (arr_out, dpitch * sizeof ( FPTYPE ), arr_in, spitch * sizeof (FPTYPE ), width * sizeof ( FPTYPE ), height, hipMemcpyHostToDevice ));
9498}
9599
96- template <typename FPTYPE_out, typename FPTYPE_in>
97- struct cast_memory_op <FPTYPE_out, FPTYPE_in, base_device::DEVICE_GPU , base_device::DEVICE_GPU > {
100+ template <typename FPTYPE >
101+ void synchronize_memory_2d_op<FPTYPE , base_device::DEVICE_GPU , base_device::DEVICE_GPU >::operator ()(
102+ const base_device::DEVI_GPU , base_device::DEVICE_GPU > {
98103 void operator ()(const base_device::DEVICE_GPU * dev_out,
99104 const base_device::DEVICE_GPU * dev_in,
100105 FPTYPE_out* arr_out,
@@ -104,34 +109,13 @@ struct cast_memory_op<FPTYPE_out, FPTYPE_in, base_device::DEVICE_GPU, base_devic
104109 if (size == 0 ) {return ;}
105110 const int block = (size + THREADS_PER_BLOCK - 1 ) / THREADS_PER_BLOCK ;
106111 hipLaunchKernelGGL (cast_memory, dim3 (block), dim3 (THREADS_PER_BLOCK ), 0 , 0 , arr_out, arr_in, size);
107- hipCheckOnDebug ();
108- }
109- };
110-
111- template <typename FPTYPE_out, typename FPTYPE_in>
112- struct cast_memory_op <FPTYPE_out, FPTYPE_in, base_device::DEVICE_GPU , base_device::DEVICE_CPU > {
113- void operator ()(const base_device::DEVICE_GPU * dev_out,
114- const base_device::DEVICE_CPU * dev_in,
115- FPTYPE_out* arr_out,
116- const FPTYPE_in* arr_in,
117- const size_t size) {
118-
119- if (size == 0 ) {return ;}
120- // No need to cast the memory if the data types are the same.
112+ hipCheckOnDebug ();y if the data types are the same.
121113 if (std::is_same<FPTYPE_out, FPTYPE_in>::value)
122114 {
123115 synchronize_memory_op<FPTYPE_out, base_device::DEVICE_GPU , base_device::DEVICE_CPU >()(dev_out,
124116 dev_in,
125117 arr_out,
126- reinterpret_cast <const FPTYPE_out*>(arr_in),
127- size);
128- return ;
129- }
130- FPTYPE_in * arr = nullptr ;
131- hipErrcheck (hipMalloc ((void **)&arr, sizeof (FPTYPE_in) * size));
132- hipErrcheck (hipMemcpy (arr, arr_in, sizeof (FPTYPE_in) * size, hipMemcpyHostToDevice));
133- const int block = (size + THREADS_PER_BLOCK - 1 ) / THREADS_PER_BLOCK ;
134- hipLaunchKernelGGL (cast_memory, dim3 (block), dim3 (THREADS_PER_BLOCK ), 0 , 0 , arr_out, arr, size);
118+ reinterpret_clGGL (cast_memory, dim3 (block), dim3 (THREADS_PER_BLOCK ), 0 , 0 , arr_out, arr, size);
135119 hipCheckOnDebug ();
136120 hipErrcheck (hipFree (arr));
137121 }
@@ -143,47 +127,23 @@ struct cast_memory_op<FPTYPE_out, FPTYPE_in, base_device::DEVICE_CPU, base_devic
143127 const base_device::DEVICE_GPU * dev_in,
144128 FPTYPE_out* arr_out,
145129 const FPTYPE_in* arr_in,
146- const size_t size) {
147-
148- if (size == 0 ) {return ;}
149- // No need to cast the memory if the data types are the same.
150- if (std::is_same<FPTYPE_out, FPTYPE_in>::value)
151- {
152- synchronize_memory_op<FPTYPE_out, base_device::DEVICE_CPU , base_device::DEVICE_GPU >()(dev_out,
153- dev_in,
154- arr_out,
130+ const siz arr_out,
155131 reinterpret_cast <const FPTYPE_out*>(arr_in),
156132 size);
157133 return ;
158134 }
159135 auto * arr = (FPTYPE_in*) malloc (sizeof (FPTYPE_in) * size);
160136 hipErrcheck (hipMemcpy (arr, arr_in, sizeof (FPTYPE_in) * size, hipMemcpyDeviceToHost));
161137 for (int ii = 0 ; ii < size; ii++) {
162- arr_out[ii] = static_cast <FPTYPE_out>(arr[ii]);
163- }
164- free (arr);
165- }
166- };
167-
168- template <typename FPTYPE >
169- void delete_memory_op<FPTYPE , base_device::DEVICE_GPU >::operator ()(const base_device::DEVICE_GPU * dev, FPTYPE * arr)
170- {
171- hipErrcheck (hipFree (arr));
172- }
173-
174- template struct resize_memory_op <int , base_device::DEVICE_GPU >;
175- template struct resize_memory_op <float , base_device::DEVICE_GPU >;
176- template struct resize_memory_op <double , base_device::DEVICE_GPU >;
177- template struct resize_memory_op <std::complex <float >, base_device::DEVICE_GPU >;
138+ arr_out[mplate struct resize_memory_op <std::complex <float >, base_device::DEVICE_GPU >;
178139template struct resize_memory_op <std::complex <double >, base_device::DEVICE_GPU >;
140+ template struct resize_memory_op <char , base_device::DEVICE_GPU >;
179141
180142template struct set_memory_op <int , base_device::DEVICE_GPU >;
181143template struct set_memory_op <float , base_device::DEVICE_GPU >;
182144template struct set_memory_op <double , base_device::DEVICE_GPU >;
183145template struct set_memory_op <std::complex <float >, base_device::DEVICE_GPU >;
184- template struct set_memory_op <std::complex <double >, base_device::DEVICE_GPU >;
185-
186- template struct synchronize_memory_op <int , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
146+ template struct set_memory_op <std::complex <double >, base_dee_device::DEVICE_GPU >;
187147template struct synchronize_memory_op <int , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
188148template struct synchronize_memory_op <int , base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
189149template struct synchronize_memory_op <float , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
@@ -199,12 +159,16 @@ template struct synchronize_memory_op<std::complex<double>, base_device::DEVICE_
199159template struct synchronize_memory_op <std::complex <double >, base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
200160template struct synchronize_memory_op <std::complex <double >, base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
201161
202- template struct cast_memory_op <float , float , base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
203- template struct cast_memory_op <double , double , base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
204- template struct cast_memory_op <float , double , base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
205- template struct cast_memory_op <double , float , base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
206- template struct cast_memory_op <std::complex <float >,
207- std::complex <float >,
162+ template struct synchronize_memory_2d_op <int , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
163+ template struct synchronize_memory_2d_op <int , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
164+ template struct synchronize_memory_2d_op <int , base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
165+ template struct synchronize_memory_2d_op <float , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
166+ template struct synchronize_memory_2d_op <float , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
167+ template struct synchronize_memory_2d_op <float , base_devic:complex <float >, base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
168+ template struct synchronize_memory_2d_op <std::complex <float >, base_device::DEVICE_GPU , base_device::DEVICE_GPU >;
169+ template struct synchronize_memory_2d_op <std::complex <double >, base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
170+ template struct synchronize_memory_2d_op <std::complex <double >, base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
171+ template struct synchronize_memory_2d_op <std::complex <double >, base_device::DEVICE_GPU , base_devic:complex <float >,
208172 base_device::DEVICE_GPU ,
209173 base_device::DEVICE_GPU >;
210174template struct cast_memory_op <std::complex <double >,
@@ -214,46 +178,21 @@ template struct cast_memory_op<std::complex<double>,
214178template struct cast_memory_op <std::complex <float >,
215179 std::complex <double >,
216180 base_device::DEVICE_GPU ,
217- base_device::DEVICE_GPU >;
218- template struct cast_memory_op <std::complex <double >,
219- std::complex <float >,
220- base_device::DEVICE_GPU ,
221- base_device::DEVICE_GPU >;
222- template struct cast_memory_op <float , float , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
223- template struct cast_memory_op <double , double , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
224- template struct cast_memory_op <float , double , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
181+ memory_op<float , double , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
225182template struct cast_memory_op <double , float , base_device::DEVICE_GPU , base_device::DEVICE_CPU >;
226183template struct cast_memory_op <std::complex <float >,
227184 std::complex <float >,
228185 base_device::DEVICE_GPU ,
229186 base_device::DEVICE_CPU >;
230187template struct cast_memory_op <std::complex <double >,
231188 std::complex <double >,
232- base_device::DEVICE_GPU ,
233- base_device::DEVICE_CPU >;
234- template struct cast_memory_op <std::complex <float >,
235- std::complex <double >,
236- base_device::DEVICE_GPU ,
237- base_device::DEVICE_CPU >;
238- template struct cast_memory_op <std::complex <double >,
239- std::complex <float >,
240- base_device::DEVICE_GPU ,
241- base_device::DEVICE_CPU >;
189+ base_device::DEVICE_CPU >;
242190template struct cast_memory_op <float , float , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
243191template struct cast_memory_op <double , double , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
244192template struct cast_memory_op <float , double , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
245193template struct cast_memory_op <double , float , base_device::DEVICE_CPU , base_device::DEVICE_GPU >;
246194template struct cast_memory_op <std::complex <float >,
247- std::complex <float >,
248- base_device::DEVICE_CPU ,
249- base_device::DEVICE_GPU >;
250- template struct cast_memory_op <std::complex <double >,
251- std::complex <double >,
252- base_device::DEVICE_CPU ,
253- base_device::DEVICE_GPU >;
254- template struct cast_memory_op <std::complex <float >,
255- std::complex <double >,
256- base_device::DEVICE_CPU ,
195+ std::comp base_device::DEVICE_CPU ,
257196 base_device::DEVICE_GPU >;
258197template struct cast_memory_op <std::complex <double >,
259198 std::complex <float >,
@@ -263,12 +202,6 @@ template struct cast_memory_op<std::complex<double>,
263202template struct delete_memory_op <int , base_device::DEVICE_GPU >;
264203template struct delete_memory_op <float , base_device::DEVICE_GPU >;
265204template struct delete_memory_op <double , base_device::DEVICE_GPU >;
266- template struct delete_memory_op <std::complex <float >, base_device::DEVICE_GPU >;
267- template struct delete_memory_op <std::complex <double >, base_device::DEVICE_GPU >;
268- template struct delete_memory_op <float *, base_device::DEVICE_GPU >;
269- template struct delete_memory_op <double *, base_device::DEVICE_GPU >;
270- template struct delete_memory_op <std::complex <float >*, base_device::DEVICE_GPU >;
271- template struct delete_memory_op <std::complex <double >*, base_device::DEVICE_GPU >;
272-
205+ template struct delete_memor base_device::DEVICE_GPU >;
273206} // namespace memory
274- } // end of namespace base_device
207+ } // end of namespace base_device
0 commit comments