aboutsummaryrefslogtreecommitdiff
path: root/src/Panda/Simple_IO.h
blob: 4df48310b9f6ac57d31a6cb27b710dcf020c13d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#ifndef Simple_IO_dot_h
#define Simple_IO_dot_h

#include "Collective_IO.h"


class ArrayGroup;
class Array;
class Chunk;
class App_Info;

//#include "../IEEEIO/IEEEIO.h"
//#include "../IEEEIO/IOProtos.h"

class Simple_IO : public Collective_IO
{
 protected:
  Boolean       dummy_;  /* Do the instance variables mean anything */
  int           *schema_string_;
  int           schema_size_;
  int           *current_schema_ptr_;
  Array         *current_array_;
  Chunk         *current_chunk_;
  int           num_of_subchunks_;
  int           current_subchunk_id_;
  int           num_of_chunks_;
  int           current_chunk_id_;
  IOFile	file_ptr_;
  FILE          *schema_file_ptr_;
  int           num_io_nodes_;
  int           my_io_rank_;
  int           compute_app_num_;
  App_Info      *app_info_;
  Boolean       part_time_io_;
  Array         *compute_node_array_;
  int		op_type_;
  Boolean       nat_chunked_;
  Boolean       sub_chunked_;
  Boolean	overlaped_;
  Boolean       contiguous_;
  int           world_rank_;

  int           num_overlaps_;
  int           max_overlaps_;
  int           *overlap_chunk_ids_;
  int           *dest_ids_;
  int           **schema_bufs_;
  MPI_Request   *schema_requests_;
  MPI_Request   *requests_;
  MPI_Status    *statuses_;
  MPI_Datatype  *datatypes_;
  int           max_rank_;
  int           array_rank_;
  int           *overlap_base_;
  int           *overlap_stride_;
  int           *overlap_size_;
  char          **data_ptrs_;
  char          *mem_buf_;
  int            mem_buf_size_;  


  void          realloc_buffers(int);
  void          compute_chunk_overlaps(Array*,Chunk*);
  void          compute_schemas(Array*,Chunk*,Chunk*);
  virtual void  send_schema_message(int);
  void          make_datatype(Chunk*,int);
  void          receive_data(Chunk*,int, int&);
  void          send_data(Chunk*, int, int&);
  void          read_data(Chunk*);
  void          read_data(char*,int,int);
  void          write_data(char*,int,int);
  void          write_data(Chunk*);
  void          copy_data(Chunk*,int,Boolean,int&);
  void          direct_io(int,Boolean,int&);
  void          free_datatypes();
  void          wait_for_completion(int&,Array*);
  void          send_data_to_compute_nodes(Chunk*, int&);
  void          receive_data_from_compute_nodes(Chunk*, int&);
  void          realloc_schema_bufs(int);
  void          realloc_mem_bufs(int);
  void          process_compute_message(int&,Array*);
  void          process_chunk_schema_request(int,int,int&,MPI_Status*,Array*);
 public:
                Simple_IO();
                Simple_IO(int*,int,int,int, int , App_Info*, IOFile);
  virtual      ~Simple_IO();
  virtual void  start_to_finish(Boolean part_time_io,Array*);
  virtual void  compute_node_io_loop(Array*);
};

#endif