MPQC  2.3.1
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:
sc::FileGrp::set_filename
void set_filename(char *name)
Sets the filename for the FileGrp.
sc::FileGrp::offset
distsize_t offset(int node)
Returns the global offset to node's data.
Definition: file.h:110
sc::FileGrp::open
void open()
Opens the files.
sc::Ref
A template class that maintains references counts.
Definition: ref.h:332
sc::FileGrp::size
int size(int node)
Returns the amount of data residing on node.
Definition: file.h:107
sc::FileGrp::release_readonly
virtual void release_readonly(void *data, distsize_t offset, int size)=0
This is called when read access is no longer needed.
sc::FileGrp::set_localsize
virtual void set_localsize(size_t)=0
Set the size of locally held data.
sc::FileGrp::clone
virtual FileGrp * clone()=0
Clones the given FileGrp. The new FileGrp may need to be initialized additionally.
sc::FileGrp::n
int n() const
Returns how many nodes there are.
Definition: file.h:96
sc::FileGrp
The FileGrp abstract class provides a way of accessing distributed file in a parallel machine.
Definition: file.h:55
sc::FileGrp::activate
virtual void activate()
Activate is called before the data is to be used.
sc::FileGrp::get_default_filegrp
static FileGrp * get_default_filegrp()
Returns the default file group.
sc::FileGrp::print
virtual void print(std::ostream &o=ExEnv::out0()) const
Prints out information about the object.
sc::FileGrp::obtain_readonly
virtual void * obtain_readonly(distsize_t offset, int size)=0
This gives read access to the file location. No locking is done.
sc::FileGrp::close
void close()
Closes the files.
sc::distsize_t
Definition: memory.h:44
sc::FileGrp::catchup
virtual void catchup()
Processes outstanding requests.
sc::FileGrp::set_default_filegrp
static void set_default_filegrp(const Ref< FileGrp > &)
The default file group contains the primary file group to be used by an application.
sc::FileGrp::localoffset
distsize_t localoffset()
Returns the global offset to this node's data.
Definition: file.h:105
sc::FileGrp::obtain_writeonly
virtual void * obtain_writeonly(distsize_t offset, int size)=0
This gives write access to the data location. No locking is done.
sc::FileGrp::deactivate
virtual void deactivate()
Deactivate is called after the data has been used.
sc::FileGrp::sync
virtual void sync()=0
Synchronizes all the nodes.
sc::DescribedClass
Classes which need runtime information about themselves and their relationship to other classes can v...
Definition: class.h:244
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.
sc::FileGrp::me
int me() const
Returns who I am.
Definition: file.h:94
sc::FileGrp::obtain_readwrite
virtual void * obtain_readwrite(distsize_t offset, int size)=0
Only one thread can have an unreleased obtain_readwrite at a time.
sc::FileGrp::totalsize
distsize_t totalsize()
Returns the sum of all data allocated on all nodes.
Definition: file.h:112
sc::FileGrp::release_writeonly
virtual void release_writeonly(void *data, distsize_t offset, int size)=0
This is called when write access is no longer needed.
sc::FileGrp::release_readwrite
virtual void release_readwrite(void *data, distsize_t offset, int size)=0
This is called when read/write access is no longer needed.
sc::FileGrp::localsize
size_t localsize()
Returns the amount of data residing locally on me().
Definition: file.h:103
sc::FileGrp::get_filename
const char * get_filename() const
Returns the filename for the FileGrp.
Definition: file.h:91

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