MPQC  2.3.1
memrdma.h
1 //
2 // memrdma.h
3 // Based on memamsg.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_memrdma_h
34 #define _util_group_memrdma_h
35 
36 #include <iostream>
37 #include <vector>
38 
39 #include <util/group/pool.h>
40 #include <util/group/memmsg.h>
41 
42 namespace sc {
43 
46 class RDMAMemoryGrp : public MsgMemoryGrp {
47  protected:
48  char *data_;
49 
50  virtual void retrieve_data(void *, int node, int offset, int size,
51  int lock) = 0;
52  virtual void replace_data(void *, int node, int offset, int size,
53  int unlock) = 0;
54  virtual void sum_data(double *data, int node, int doffset, int dsize) = 0;
55 
56  std::vector<Pool*> pools_;
57  size_t default_pool_size_;
58  void* malloc_region(size_t nbyte);
59  void free_region(void*);
60  public:
61  RDMAMemoryGrp(const Ref<MessageGrp>& msg);
62  RDMAMemoryGrp(const Ref<KeyVal>&);
63  ~RDMAMemoryGrp();
64 
65  void *localdata();
66 
67  void set_localsize(size_t localsize);
68 
72  void release_readonly(void *data, distsize_t offset, int size);
73  void release_writeonly(void *data, distsize_t offset, int size);
74  void release_readwrite(void *data, distsize_t offset, int size);
75 
76  void sum_reduction(double *data, distsize_t doffset, int dsize);
77  void sum_reduction_on_node(double *data, size_t doffset, int dsize,
78  int node = -1);
79 
80  void print(std::ostream &o = ExEnv::out0()) const;
81 };
82 
83 }
84 
85 #endif
86 
87 // Local Variables:
88 // mode: c++
89 // c-file-style: "CLJ"
90 // End:
sc::RDMAMemoryGrp::set_localsize
void set_localsize(size_t localsize)
Set the size of locally held memory.
sc::MemoryGrp::offset
distsize_t offset(int node)
Returns the global offset to node's memory.
Definition: memory.h:168
sc::Ref
A template class that maintains references counts.
Definition: ref.h:332
sc::RDMAMemoryGrp::release_readwrite
void release_readwrite(void *data, distsize_t offset, int size)
This is called when read/write access is no longer needed.
sc::RDMAMemoryGrp::obtain_writeonly
void * obtain_writeonly(distsize_t offset, int size)
This gives write access to the memory location. No locking is done.
sc::RDMAMemoryGrp
The RDMAMemoryGrp abstract class specializes the MsgMemoryGrp class.
Definition: memrdma.h:46
sc::MemoryGrp::size
int size(int node)
Returns the amount of memory residing on node.
Definition: memory.h:165
sc::RDMAMemoryGrp::localdata
void * localdata()
Returns a pointer to the local data.
sc::RDMAMemoryGrp::print
void print(std::ostream &o=ExEnv::out0()) const
Prints out information about the object.
sc::RDMAMemoryGrp::release_readonly
void release_readonly(void *data, distsize_t offset, int size)
This is called when read access is no longer needed.
sc::RDMAMemoryGrp::obtain_readwrite
void * obtain_readwrite(distsize_t offset, int size)
Only one thread can have an unreleased obtain_readwrite at a time.
sc::MemoryGrp::localsize
size_t localsize()
Returns the amount of memory residing locally on me().
Definition: memory.h:159
sc::distsize_t
Definition: memory.h:44
sc::RDMAMemoryGrp::obtain_readonly
void * obtain_readonly(distsize_t offset, int size)
This gives read access to the memory location. No locking is done.
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
sc::RDMAMemoryGrp::release_writeonly
void release_writeonly(void *data, distsize_t offset, int size)
This is called when write access is no longer needed.
sc::MsgMemoryGrp
A MsgMemoryGrp that initializes its data using a messagegrp.
Definition: memmsg.h:41

Generated at Sun Jan 26 2020 23:33:04 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.