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

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