1 #ifndef OMEGA_H_Future_HPP
2 #define OMEGA_H_Future_HPP
7 #include <Omega_h_mpi.h>
8 #include "Omega_h_array.hpp"
9 #include "Omega_h_fail.hpp"
21 #if OMEGA_H_MPI_NEEDS_HOST_COPY
34 #ifdef OMEGA_H_USE_MPI
35 using requests_type = std::vector<MPI_Request>;
37 using requests_type = std::vector<int>;
40 #if OMEGA_H_MPI_NEEDS_HOST_COPY
42 const requests_type&& requests,
const callback_type callback);
50 explicit Future(Write<T> recvbuf);
54 explicit Future(Read<T> buf);
58 auto cur_cb = callback_;
60 return callback(cur_cb(recvbuf));
80 sendbuf_type sendbuf_;
81 recvbuf_type recvbuf_;
83 requests_type requests_;
87 #if OMEGA_H_MPI_NEEDS_HOST_COPY
88 #define OMEGA_H_EXPL_INST_DECL(T) \
89 extern template Future<T>::Future(HostRead<T> sendbuf, HostWrite<T> recvbuf, \
90 const requests_type&&, const callback_type callback);
92 #define OMEGA_H_EXPL_INST_DECL(T) \
93 extern template Future<T>::Future(Read<T> sendbuf, Write<T> recvbuf, \
94 const requests_type&& requests, const callback_type callback); \
95 extern template Future<T>::Future(Write<T> recvbuf);
97 OMEGA_H_EXPL_INST_DECL(I8)
98 OMEGA_H_EXPL_INST_DECL(I32)
99 OMEGA_H_EXPL_INST_DECL(I64)
100 OMEGA_H_EXPL_INST_DECL(Real)
101 #undef OMEGA_H_EXPL_INST_DECL
103 #define OMEGA_H_EXPL_INST_DECL(T) \
104 extern template Future<T>::Future(Read<T> buf); \
105 extern template bool Future<T>::completed(); \
106 extern template Read<T> Future<T>::get();
108 OMEGA_H_EXPL_INST_DECL(I8)
109 OMEGA_H_EXPL_INST_DECL(I32)
110 OMEGA_H_EXPL_INST_DECL(I64)
111 OMEGA_H_EXPL_INST_DECL(Real)
112 #undef OMEGA_H_EXPL_INST_DECL
Abstraction for asynchronous communication.
Definition: Omega_h_future.hpp:19
bool completed()
Definition: Omega_h_future.cpp:42
std::function< Read< T >(recvbuf_type)> callback_type
post-processing callback for asynchronous communication
Definition: Omega_h_future.hpp:30
void add_callback(const additional_callback_type &callback)
register a additional post-communication callback
Definition: Omega_h_future.hpp:57
std::function< Read< T >(Read< T >)> additional_callback_type
optional additional processing callbacks (see add_callback method)
Definition: Omega_h_future.hpp:32
Read< T > get()
Definition: Omega_h_future.cpp:61
Definition: Omega_h_array.hpp:135
Definition: Omega_h_array.hpp:154
Definition: Omega_h_array.hpp:89
Definition: Omega_h_array.hpp:50
Definition: amr_mpi_test.cpp:6