MPQC  2.3.1
memmtmpi.h
1 //
2 // memmtmpi.h
3 // based on memmpi.h
4 //
5 // Copyright (C) 1996 Limit Point Systems, Inc.
6 //
7 // Author: Curtis Janssen <cljanss@limitpt.com>
8 // Maintainer: LPS
9 //
10 // This file is part of the SC Toolkit.
11 //
12 // The SC Toolkit is free software; you can redistribute it and/or modify
13 // it under the terms of the GNU Library General Public License as published by
14 // the Free Software Foundation; either version 2, or (at your option)
15 // any later version.
16 //
17 // The SC Toolkit is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU Library General Public License for more details.
21 //
22 // You should have received a copy of the GNU Library General Public License
23 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
24 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
25 //
26 // The U.S. Government is granted a limited license as per AL 91-7.
27 //
28 
29 #ifdef __GNUC__
30 #pragma interface
31 #endif
32 
33 #ifndef _util_group_memmtmpi_h
34 #define _util_group_memmtmpi_h
35 
36 #include <fstream>
37 #define MPICH_SKIP_MPICXX
38 #include <mpi.h>
39 
40 #include <util/group/message.h>
41 #include <util/group/memamsg.h>
42 #include <util/group/thread.h>
43 
44 namespace sc {
45 
46 class MTMPIThread;
47 
53  private:
54  Ref<ThreadGrp> th_;
55 
56  Ref<ThreadLock> serial_lock_;
57  int serial_;
58  int serial(int node);
59 
60  MPI_Comm comp_comm_;
61  MPI_Comm comm_comm_;
62  int req_tag_;
63 
64  int active_;
65 
66  unsigned int *nreq_sent_;
67  unsigned int *nreq_sent_buf_;
68 
69  MTMPIThread **thread_;
70  Ref<ThreadLock> print_lock_; // needed for debugging only
71  std::ofstream hout; // handler out
72  std::ofstream mout; // main thread out
73 
74  void init_mtmpimg(MPI_Comm comm, int nthreads);
75 
76  // parent class pure virtuals
77  void retrieve_data(void *, int node, int offset, int size, int lock);
78  void replace_data(void *, int node, int offset, int size, int unlock);
79  void sum_data(double *data, int node, int doffset, int dsize);
80 
81  friend class MTMPIThread;
82  public:
87  MTMPIMemoryGrp(const Ref<MessageGrp>& msg, const Ref<ThreadGrp> &th,
88  MPI_Comm comm = MPI_COMM_WORLD);
91  MTMPIMemoryGrp(const Ref<KeyVal> &);
92  ~MTMPIMemoryGrp();
93 
94  void activate();
95  void deactivate();
96 
97  void sync();
98 };
99 
100 }
101 
102 #endif
103 
104 // Local Variables:
105 // mode: c++
106 // c-file-style: "CLJ"
107 // End:
This MemoryGrp class requires a MT-safe MPI implementation.
Definition: memmtmpi.h:52
MTMPIMemoryGrp(const Ref< MessageGrp > &msg, const Ref< ThreadGrp > &th, MPI_Comm comm=MPI_COMM_WORLD)
Construct a MTMPIMemoryGrp given a MessageGrp, ThreadGrp, and an MPI communicator.
A template class that maintains references counts.
Definition: ref.h:332
Definition: mpqcin.h:13
void sync()
Synchronizes all the nodes.
The ActiveMsgMemoryGrp abstract class specializes the MsgMemoryGrp class.
Definition: memamsg.h:93
int size(int node)
Returns the amount of memory residing on node.
Definition: memory.h:165
distsize_t offset(int node)
Returns the global offset to node&#39;s memory.
Definition: memory.h:168
void activate()
Activate is called before the memory is to be used.
void deactivate()
Deactivate is called after the memory has been used.

Generated at Fri Feb 16 2018 01:48:56 for MPQC 2.3.1 using the documentation package Doxygen 1.8.14.