MPQC
2.3.1
Main Page
Related Pages
Classes
Files
File List
src
lib
util
group
memamsg.h
1
//
2
// memamsg.h
3
//
4
// Copyright (C) 1996 Limit Point Systems, Inc.
5
//
6
// Author: Curtis Janssen <cljanss@limitpt.com>
7
// Maintainer: LPS
8
//
9
// This file is part of the SC Toolkit.
10
//
11
// The SC Toolkit is free software; you can redistribute it and/or modify
12
// it under the terms of the GNU Library General Public License as published by
13
// the Free Software Foundation; either version 2, or (at your option)
14
// any later version.
15
//
16
// The SC Toolkit is distributed in the hope that it will be useful,
17
// but WITHOUT ANY WARRANTY; without even the implied warranty of
18
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
// GNU Library General Public License for more details.
20
//
21
// You should have received a copy of the GNU Library General Public License
22
// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23
// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
//
25
// The U.S. Government is granted a limited license as per AL 91-7.
26
//
27
28
#ifdef __GNUC__
29
#pragma interface
30
#endif
31
32
#ifndef _util_group_memamsg_h
33
#define _util_group_memamsg_h
34
35
#include <iostream>
36
37
#include <util/group/memmsg.h>
38
39
namespace
sc {
40
41
class
MemoryDataRequest
{
42
public
:
43
enum
{ NData = 6 };
44
enum
Request { Deactivate, Sync, Retrieve, Replace, DoubleSum };
45
private
:
46
int
data_[NData];
47
public
:
48
MemoryDataRequest
() {}
49
MemoryDataRequest
(Request r,
int
node = 0,
int
offset = 0,
int
size = 0,
50
int
lock = 0,
int
serial = 0);
51
void
assign(Request r,
int
node,
int
offset,
int
size,
52
int
lock,
int
serial);
53
void
*data()
const
{
return
(
void
*) data_; }
54
int
nbytes()
const
{
return
sizeof
(int)*NData; }
55
56
const
char
*request_string()
const
;
57
58
MemoryDataRequest::Request request()
const
{
return
(Request) data_[0]; }
59
int
node()
const
{
return
data_[1]; }
60
int
offset()
const
{
return
data_[2]; }
61
int
size()
const
{
return
data_[3]; }
62
int
serial_number()
const
{
return
data_[4]; }
63
int
lock()
const
{
return
data_[5]; }
64
65
int
touches_data()
const
{
return
request()!=Deactivate&&request()!=Sync;}
66
67
// Sync messages only define one datum besides type and node
68
int
reactivate()
const
{
return
data_[2]; }
69
70
void
operator =(
const
MemoryDataRequest
&r);
71
72
void
print(
const
char
* msg = 0, std::ostream & o =
ExEnv::out0
())
const
;
73
};
74
75
class
MemoryDataRequestQueue
{
76
public
:
77
enum
{ MaxDepth = 1024 };
78
private
:
79
MemoryDataRequest
q_[MaxDepth];
80
int
n_;
81
public
:
82
MemoryDataRequestQueue
(): n_(0) {}
83
int
n()
const
{
return
n_; }
84
void
push(
MemoryDataRequest
&);
85
void
pop(
MemoryDataRequest
&);
86
87
MemoryDataRequest
& operator[](
int
i) {
return
q_[i]; }
88
void
clear() { n_ = 0; }
89
};
90
93
class
ActiveMsgMemoryGrp
:
public
MsgMemoryGrp
{
94
protected
:
95
char
*data_;
96
97
virtual
void
retrieve_data(
void
*,
int
node,
int
offset
,
int
size
,
98
int
lock) = 0;
99
virtual
void
replace_data(
void
*,
int
node,
int
offset,
int
size,
100
int
unlock) = 0;
101
virtual
void
sum_data(
double
*data,
int
node,
int
doffset,
int
dsize) = 0;
102
public
:
103
ActiveMsgMemoryGrp
(
const
Ref<MessageGrp>
& msg);
104
ActiveMsgMemoryGrp
(
const
Ref<KeyVal>
&);
105
~
ActiveMsgMemoryGrp
();
106
107
void
set_localsize
(
size_t
);
108
void
*
localdata
();
109
110
void
*
obtain_writeonly
(
distsize_t
offset,
int
size);
111
void
*
obtain_readwrite
(
distsize_t
offset,
int
size);
112
void
*
obtain_readonly
(
distsize_t
offset,
int
size);
113
void
release_readonly
(
void
*data,
distsize_t
offset,
int
size);
114
void
release_writeonly
(
void
*data,
distsize_t
offset,
int
size);
115
void
release_readwrite
(
void
*data,
distsize_t
offset,
int
size);
116
117
void
sum_reduction(
double
*data,
distsize_t
doffset,
int
dsize);
118
void
sum_reduction_on_node(
double
*data,
size_t
doffset,
int
dsize,
119
int
node = -1);
120
121
void
print
(std::ostream &o =
ExEnv::out0
())
const
;
122
};
123
124
}
125
126
#endif
127
128
// Local Variables:
129
// mode: c++
130
// c-file-style: "CLJ"
131
// End:
Generated at Mon Dec 23 2013 21:14:29 for
MPQC
2.3.1 using the documentation package
Doxygen
1.8.3.1.