24
24
#include " coreneuron/mpi/nrnmpidec.h"
25
25
#include " coreneuron/utils/utils.hpp"
26
26
27
+ #ifdef CRAYPAT
28
+ #include < pat_api.h>
29
+ #endif
30
+
27
31
#ifdef _OPENACC
28
32
#include < openacc.h>
29
33
#endif
30
- #ifdef CORENEURON_PREFER_OPENMP_OFFLOAD
31
- #include < omp.h>
32
- #endif
33
34
34
- #ifdef CRAYPAT
35
- #include < pat_api.h>
36
- #endif
37
35
namespace coreneuron {
38
36
extern InterleaveInfo* interleave_info;
39
37
void copy_ivoc_vect_to_device (const IvocVect& iv, IvocVect& div);
@@ -43,51 +41,6 @@ void nrn_ion_global_map_delete_from_device();
43
41
void nrn_VecPlay_copyto_device (NrnThread* nt, void ** d_vecplay);
44
42
void nrn_VecPlay_delete_from_device (NrnThread* nt);
45
43
46
- template <typename T>
47
- T* cnrn_target_deviceptr (const T* h_ptr) {
48
- #if defined(CORENEURON_ENABLE_GPU) && !defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENACC)
49
- return static_cast <T*>(acc_deviceptr (const_cast <T*>(h_ptr)));
50
- #elif defined(CORENEURON_ENABLE_GPU) && defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENMP)
51
- return static_cast <T*>(omp_get_mapped_ptr (const_cast <T*>(h_ptr), omp_get_default_device ()));
52
- #else
53
- throw std::runtime_error (" cnrn_target_deviceptr() not implemented without OpenACC/OpenMP and gpu build" );
54
- #endif
55
- }
56
-
57
- template <typename T>
58
- T* cnrn_target_copyin (const T* h_ptr, std::size_t len = 1 ) {
59
- #if defined(CORENEURON_ENABLE_GPU) && !defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENACC)
60
- return static_cast <T*>(acc_copyin (const_cast <T*>(h_ptr), len * sizeof (T)));
61
- #elif defined(CORENEURON_ENABLE_GPU) && defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENMP)
62
- #pragma omp target enter data map(to:h_ptr[:len])
63
- return cnrn_target_deviceptr (const_cast <T*>(h_ptr));
64
- #else
65
- throw std::runtime_error (" cnrn_target_copyin() not implemented without OpenACC/OpenMP and gpu build" );
66
- #endif
67
- }
68
-
69
- template <typename T>
70
- void cnrn_target_delete (T* h_ptr, std::size_t len = 1 ) {
71
- #if defined(CORENEURON_ENABLE_GPU) && !defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENACC)
72
- acc_delete (h_ptr, len * sizeof (T));
73
- #elif defined(CORENEURON_ENABLE_GPU) && defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENMP)
74
- #pragma omp target exit data map(delete: h_ptr[:len])
75
- #else
76
- throw std::runtime_error (" cnrn_target_delete() not implemented without OpenACC/OpenMP and gpu build" );
77
- #endif
78
- }
79
-
80
- template <typename T>
81
- void cnrn_target_memcpy_to_device (T* d_ptr, const T* h_ptr, std::size_t len = 1 ) {
82
- #if defined(CORENEURON_ENABLE_GPU) && !defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENACC)
83
- acc_memcpy_to_device (d_ptr, const_cast <T*>(h_ptr), len * sizeof (T));
84
- #elif defined(CORENEURON_ENABLE_GPU) && defined(CORENEURON_PREFER_OPENMP_OFFLOAD) && defined(_OPENMP)
85
- omp_target_memcpy (d_ptr, const_cast <T*>(h_ptr), len* sizeof (T), 0 , 0 , omp_get_default_device (), omp_get_initial_device ());
86
- #else
87
- throw std::runtime_error (" cnrn_target_memcpy_to_device() not implemented without OpenACC/OpenMP and gpu build" );
88
- #endif
89
- }
90
-
91
44
/* note: threads here are corresponding to global nrn_threads array */
92
45
void setup_nrnthreads_on_device (NrnThread* threads, int nthreads) {
93
46
#ifdef _OPENACC
0 commit comments