comm
Toggle main menu visibility
Loading...
Searching...
No Matches
class_handle.h
1
/*
2
//@HEADER
3
// *****************************************************************************
4
//
5
// class_handle.h
6
// DARMA/comm => Communicator
7
//
8
// Copyright 2019-2024 National Technology & Engineering Solutions of Sandia, LLC
9
// (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
10
// Government retains certain rights in this software.
11
//
12
// Redistribution and use in source and binary forms, with or without
13
// modification, are permitted provided that the following conditions are met:
14
//
15
// * Redistributions of source code must retain the above copyright notice,
16
// this list of conditions and the following disclaimer.
17
//
18
// * Redistributions in binary form, must reproduce the above copyright notice,
19
// this list of conditions and the following disclaimer in the documentation
20
// and/or other materials provided with the distribution.
21
//
22
// * Neither the name of the copyright holder nor the names of its
23
// contributors may be used to endorse or promote products derived from this
24
// software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
// POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact darma@sandia.gov
39
//
40
// *****************************************************************************
41
//@HEADER
42
*/
43
44
#if !defined INCLUDED_COMM_COMM_CLASS_HANDLE_H
45
#define INCLUDED_COMM_COMM_CLASS_HANDLE_H
46
47
#include <mpi.h>
48
49
#include <unordered_map>
50
#include <vector>
51
52
namespace
comm
{
53
54
struct
CommMPI
;
55
56
template
<
typename
T>
57
struct
ClassHandle
;
58
59
template
<
typename
T>
60
struct
ClassHandleRank {
61
ClassHandleRank(
ClassHandle<T>
in_handle,
int
in_rank);
62
63
template
<
auto
fn,
typename
... Args>
64
void
send(Args&&... args);
65
66
template
<
auto
fn,
typename
... Args>
67
void
sendTerm(Args&&... args);
68
69
private
:
70
ClassHandle<T>
handle_;
71
int
rank_ = -1;
72
};
73
74
template
<
typename
T>
75
struct
ClassHandle {
76
ClassHandle() =
default
;
77
ClassHandle(
int
in_index,
CommMPI
* in_comm);
78
ClassHandle(ClassHandle
const
&) =
default
;
79
ClassHandle& operator=(ClassHandle
const
&) =
default
;
80
81
void
unregister();
82
T* get();
83
ClassHandleRank<T>
operator[](
int
rank);
84
85
template
<
auto
fn,
typename
... Args>
86
void
send(
int
dest, Args&&... args);
87
88
template
<
auto
fn,
typename
... Args>
89
void
sendTerm(
int
dest, Args&&... args);
90
91
template
<
typename
U,
typename
V>
92
void
reduce(
int
root, MPI_Datatype datatype, MPI_Op op, U sendbuf, V recvbuf,
int
count);
93
94
template
<
typename
U>
95
void
broadcast(
int
root, MPI_Datatype datatype, U buffer,
int
count);
96
97
template
<
typename
U>
98
std::unordered_map<int, std::vector<U>> allgather(U
const
* sendbuf,
int
sendcount);
99
100
friend
struct
ClassHandleRank
<T>;
101
102
int
getIndex()
const
{
return
index_; }
103
104
private
:
105
int
index_ = 0;
106
CommMPI
* comm_;
107
};
108
109
}
// namespace comm
110
111
#endif
/*INCLUDED_COMM_COMM_CLASS_HANDLE_H*/
comm
Communication layer implemented in straight MPI code.
Definition
comm_traits.h:52
comm::ClassHandleRank
Definition
class_handle.h:60
comm::ClassHandle
Definition
class_handle.h:75
comm::CommMPI
MPI-based communication manager.
Definition
comm_mpi.h:77
comm
src
comm
comm
MPI
class_handle.h
Generated by
1.17.0