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
66namespace fenix {
67namespace detail {
68
69template <typename T>
70struct 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 {
81 };
82};
83
84using BufferVec = std::vector<char, UninitializedCharAllocator<char>>;
85
86}
87
88class DataBuffer : public detail::BufferVec {
89 public:
90 using BufferVec = detail::BufferVec;
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
Definition fenix_data_buffer.hpp:88
Definition task.hpp:16
Definition fenix_data_buffer.hpp:79
Definition fenix_data_buffer.hpp:70