MPQC
2.3.1
Main Page
Related Pages
Classes
Files
File List
src
lib
util
group
file.h
1
//
2
// file.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_file_h
33
#define _util_group_file_h
34
35
#include <iostream>
36
37
#include <scconfig.h>
38
#include <util/class/class.h>
39
#include <util/group/thread.h>
40
#include <util/group/memory.h>
41
42
namespace
sc {
43
55
class
FileGrp
:
public
DescribedClass
{
56
private
:
57
int
datafile_;
58
char
*filename_;
59
60
Ref<ThreadLock>
*locks_;
61
int
nlock_;
62
63
void
init_locks();
64
65
66
protected
:
67
68
// derived classes must fill in all these
69
// ~FileGrp deletes the arrays
70
int
me_;
71
int
n_;
72
distsize_t
*offsets_;
// offsets_[n_] is the fence for all data
73
74
// set to nonzero for debugging information
75
int
debug_;
76
77
void
obtain_local_lock(
size_t
start,
size_t
fence);
78
void
release_local_lock(
size_t
start,
size_t
fence);
79
public
:
80
FileGrp
();
81
FileGrp
(
const
Ref<KeyVal>
&);
82
virtual
~
FileGrp
();
83
85
void
open
();
87
void
close
();
89
void
set_filename
(
char
*name);
91
const
char
*
get_filename
()
const
{
return
datafile_; };
92
94
int
me
()
const
{
return
me_; }
96
int
n
()
const
{
return
n_; }
97
101
virtual
void
set_localsize
(
size_t
) = 0;
103
size_t
localsize
() {
return
distsize_to_size(offsets_[me_+1]-offsets_[me_]); }
105
distsize_t
localoffset
() {
return
offsets_[me_]; }
107
int
size
(
int
node)
108
{
return
distsize_to_size(offsets_[node+1] - offsets_[node]); }
110
distsize_t
offset
(
int
node) {
return
offsets_[node]; }
112
distsize_t
totalsize
() {
return
offsets_[n_]; }
113
115
virtual
void
activate
();
117
virtual
void
deactivate
();
118
120
virtual
void
*
obtain_writeonly
(
distsize_t
offset
,
int
size
) = 0;
126
virtual
void
*
obtain_readwrite
(
distsize_t
offset
,
int
size
) = 0;
128
virtual
void
*
obtain_readonly
(
distsize_t
offset
,
int
size
) = 0;
130
virtual
void
release_readonly
(
void
*data,
distsize_t
offset
,
int
size
) = 0;
132
virtual
void
release_writeonly
(
void
*data,
distsize_t
offset
,
int
size
)=0;
135
virtual
void
release_readwrite
(
void
*data,
distsize_t
offset
,
int
size
)=0;
136
137
virtual
void
sum_reduction(
double
*data,
distsize_t
doffset,
int
dsize);
138
virtual
void
sum_reduction_on_node(
double
*data,
size_t
doffset,
int
dsize,
139
int
node = -1);
140
143
virtual
void
sync
() = 0;
144
151
virtual
void
catchup
();
152
154
virtual
void
print
(std::ostream &o =
ExEnv::out0
())
const
;
155
163
static
FileGrp
* initial_filegrp(
int
&argc,
char
** argv);
164
static
FileGrp
* initial_filegrp();
167
static
void
set_default_filegrp
(
const
Ref<FileGrp>
&);
169
static
FileGrp
*
get_default_filegrp
();
171
virtual
FileGrp
*
clone
() =0;
172
};
173
174
}
175
176
#endif
177
178
// Local Variables:
179
// mode: c++
180
// c-file-style: "CLJ"
181
// End:
Generated at Mon Dec 23 2013 21:14:28 for
MPQC
2.3.1 using the documentation package
Doxygen
1.8.3.1.