1#ifndef __IMPL_ASYNC_MPI_HPP__
2#define __IMPL_ASYNC_MPI_HPP__
4#include "common/common.hpp"
5#include <mpi_w/message_t.hpp>
6#include <mpi_w/mpi_types.hpp>
8#include <common/execinfo.hpp>
21 inline MPI_Status
wait(MPI_Request& request)
24 MPI_Wait(&request, &status);
21 inline MPI_Status
wait(MPI_Request& request) {
…}
28 template <POD_t DataType>
30 MPI_Request& request, DataType* buf,
size_t buf_size,
size_t dest,
size_t tag)
noexcept
32 return MPI_Isend(buf, buf_size,
get_type<DataType>(), dest, tag, MPI_COMM_WORLD, &request);
34 template <POD_t DataType>
int send(MPI_Request& request, DataType data,
size_t dest,
size_t tag)
34 template <POD_t DataType>
int send(MPI_Request& request, DataType data,
size_t dest,
size_t tag) {
…}
39 template <POD_t DataType>
41 std::span<const DataType> data,
44 bool send_size)
noexcept
46 int send_status = MPI_SUCCESS;
50 send_status =
send<size_t>(request, data.size(), dest, tag);
53 if (send_status == MPI_SUCCESS)
55 send_status =
_send_unsafe(request, data.data(), data.size(), dest, tag);
61 template <POD_t DataType>
62 int recv_span(MPI_Request& request, std::span<DataType> buf,
size_t src,
size_t tag)
noexcept
62 int recv_span(MPI_Request& request, std::span<DataType> buf,
size_t src,
size_t tag)
noexcept {
…}
Definition impl_async.hpp:19
int send_v(MPI_Request &request, std::span< const DataType > data, size_t dest, size_t tag, bool send_size) noexcept
Definition impl_async.hpp:40
int recv_span(MPI_Request &request, std::span< DataType > buf, size_t src, size_t tag) noexcept
Definition impl_async.hpp:62
static int _send_unsafe(MPI_Request &request, DataType *buf, size_t buf_size, size_t dest, size_t tag) noexcept
Definition impl_async.hpp:29
MPI_Status wait(MPI_Request &request)
Definition impl_async.hpp:21
int send(MPI_Request &request, DataType data, size_t dest, size_t tag)
Definition impl_async.hpp:34
constexpr MPI_Datatype get_type() noexcept
Definition mpi_types.hpp:11