2424#include " coreneuron/mpi/nrnmpidec.h"
2525#include " coreneuron/utils/utils.hpp"
2626
27+ #ifdef CRAYPAT
28+ #include < pat_api.h>
29+ #endif
30+
2731#ifdef _OPENACC
2832#include < openacc.h>
2933#endif
30- #ifdef CORENEURON_PREFER_OPENMP_OFFLOAD
31- #include < omp.h>
32- #endif
3334
34- #ifdef CRAYPAT
35- #include < pat_api.h>
36- #endif
3735namespace coreneuron {
3836extern InterleaveInfo* interleave_info;
3937void copy_ivoc_vect_to_device (const IvocVect& iv, IvocVect& div);
@@ -43,51 +41,6 @@ void nrn_ion_global_map_delete_from_device();
4341void nrn_VecPlay_copyto_device (NrnThread* nt, void ** d_vecplay);
4442void nrn_VecPlay_delete_from_device (NrnThread* nt);
4543
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-
9144/* note: threads here are corresponding to global nrn_threads array */
9245void setup_nrnthreads_on_device (NrnThread* threads, int nthreads) {
9346#ifdef _OPENACC
0 commit comments