Fenix
@develop
Loading...
Searching...
No Matches
fenix_data_buffer.hpp
1
/*
2
//@HEADER
3
// ************************************************************************
4
//
5
//
6
// _|_|_|_| _|_|_|_| _| _| _|_|_| _| _|
7
// _| _| _|_| _| _| _| _|
8
// _|_|_| _|_|_| _| _| _| _| _|
9
// _| _| _| _|_| _| _| _|
10
// _| _|_|_|_| _| _| _|_|_| _| _|
11
//
12
//
13
//
14
//
15
// Copyright (C) 2016 Rutgers University and Sandia Corporation
16
//
17
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
18
// the U.S. Government retains certain rights in this software.
19
//
20
// Redistribution and use in source and binary forms, with or without
21
// modification, are permitted provided that the following conditions are
22
// met:
23
//
24
// 1. Redistributions of source code must retain the above copyright
25
// notice, this list of conditions and the following disclaimer.
26
//
27
// 2. Redistributions in binary form must reproduce the above copyright
28
// notice, this list of conditions and the following disclaimer in the
29
// documentation and/or other materials provided with the distribution.
30
//
31
// 3. Neither the name of the Corporation nor the names of the
32
// contributors may be used to endorse or promote products derived from
33
// this software without specific prior written permission.
34
//
35
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
36
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
39
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
40
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
41
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
42
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
43
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
44
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
45
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46
//
47
// Author Marc Gamell, Eric Valenzuela, Keita Teranishi, Manish Parashar,
48
// Michael Heroux, and Matthew Whitlock
49
//
50
// Questions? Contact Keita Teranishi (knteran@sandia.gov) and
51
// Marc Gamell (mgamell@cac.rutgers.edu)
52
//
53
// ************************************************************************
54
//@HEADER
55
*/
56
57
#ifndef FENIX_DATA_BUFFER_HPP
58
#define FENIX_DATA_BUFFER_HPP
59
60
#include <memory>
61
#include <vector>
62
63
#include <mpi.h>
64
#include "fenix/tasks/forward.hpp"
65
66
namespace
fenix {
67
namespace
detail {
68
69
template
<
typename
T>
70
struct
UninitializedCharAllocator
:
public
std::allocator<T> {
71
UninitializedCharAllocator
()
noexcept
{};
72
template
<
typename
U>
73
UninitializedCharAllocator
(
const
U& other)
noexcept
{};
74
75
using
value_type = T;
76
void
construct(
char
*) {};
77
78
template
<
typename
U>
79
struct
rebind
{
80
using
other
=
UninitializedCharAllocator<U>
;
81
};
82
};
83
84
using
BufferVec = std::vector<char, UninitializedCharAllocator<char>>;
85
86
}
87
88
class
DataBuffer
:
public
detail::BufferVec {
89
public
:
90
using
BufferVec = detail::BufferVec;
91
using
MPITask
=
tasks::mpi::MPITask
;
92
93
//Set to new size, possibly discarding old data
94
void
reset(
size_t
new_size = 0) {
95
//Clear first, to be sure any re-allocations don't actually move data
96
clear();
97
resize(new_size);
98
}
99
100
MPITask
send(
int
dst,
int
tag, MPI_Comm comm);
101
102
//Recv n bytes
103
MPITask
recv(
int
n,
int
src,
int
tag, MPI_Comm comm);
104
105
//Recv an unknown amount of data and resize to fit
106
MPITask
recv_unknown(
int
src,
int
tag, MPI_Comm comm);
107
};
108
109
}
// namespace fenix
110
111
#endif
//FENIX_DATA_BUFFER_HPP
fenix::DataBuffer
Definition
fenix_data_buffer.hpp:88
fenix::tasks::Task
Definition
task.hpp:16
fenix::detail::UninitializedCharAllocator::rebind
Definition
fenix_data_buffer.hpp:79
fenix::detail::UninitializedCharAllocator
Definition
fenix_data_buffer.hpp:70
include
fenix_data_buffer.hpp
Generated by
1.12.0