OpenAtom  Version1.5a
MapFile.C
Go to the documentation of this file.
1 /** \file MapFile.C
2  *
3  */
4 
5 #include "TopoManager.h"
6 #include "MapFile.h"
7 
8 #include <cstdio>
9 #include <cstdlib>
10 #include <cstring>
11 #include <assert.h>
12 extern TopoManager *topoMgr;
13 
14 MapFile::~MapFile()
15 {
16  if (mapName !=NULL)
17  free(mapName);
18  if(sizeDim!=NULL)
19  free(sizeDim);
20  if(mapOrder!=NULL)
21  free(mapOrder);
22 }
23 MapFile::MapFile(const char* name, int numpes)
24 {
25  if(topoMgr==NULL)
26  topoMgr= new TopoManager(); // just to keep dump coord from flaking
27  mapName = (char *)malloc(sizeof(char)*15);
28  strcpy(mapName, name);
29  numProcs = numpes;
30 }
31 
32 
33 MapFile::MapFile(const char* name, int num, int* size, int numpes, const char *order, int x, int y, int z, int t, int _stride)
34 {
35  if(topoMgr==NULL)
36  topoMgr= new TopoManager(); // just to keep dump coord from flaking
37  mapName = (char *)malloc(sizeof(char)*15);
38  strcpy(mapName, name);
39  numDim = num;
40  sizeDim = (int *)malloc(sizeof(int)*numDim);
41  for(int i=0; i<numDim; i++)
42  sizeDim[i] = size[i];
43  numProcs = numpes;
44  mapOrder = (char *)malloc(sizeof(char)*5);
45  strcpy(mapOrder, (const char*)order);
46  Xmax = x;
47  Ymax = y;
48  Zmax = z;
49  Tmax = t;
50  stride=_stride;
51 }
52 
53 
54 void MapFile::setSize(int num, int* size)
55 {
56  numDim = num;
57  if(sizeDim==NULL)
58  sizeDim = (int *)malloc(sizeof(int)*numDim);
59  for(int i=0; i<numDim; i++)
60  sizeDim[i] = size[i];
61 }
62 
63 
64 void MapFile::setAttributes(int num, int* size, char *order, int x, int y, int z, int t, int _stride)
65 {
66  numDim = num;
67  if(sizeDim==NULL)
68  sizeDim = (int *)malloc(sizeof(int)*numDim);
69  for(int i=0; i<numDim; i++)
70  sizeDim[i] = size[i];
71  if(mapOrder==NULL)
72  mapOrder = (char *)malloc(sizeof(char)*5);
73  strcpy(mapOrder, (const char*)order);
74  Xmax = x;
75  Ymax = y;
76  Zmax = z;
77  Tmax = t;
78  stride=_stride;
79 }
80 
81 
82 void MapFile::dumpMapCoords(MapType2 *map, char c)
83 {
84  char name[100];
85  sprintf(name, "%s_inst_%d", mapName, (int)c);
86  FILE *fp = fopen(name, "w");
87  fprintf(fp, "%s %d ", mapName, numDim);
88  for(int i=0; i<numDim; i++)
89  fprintf(fp, "%d ", sizeDim[i]);
90  fprintf(fp, "\n%d %d %d %d %d\n", numProcs, topoMgr->getDimNX(), topoMgr->getDimNY(), topoMgr->getDimNZ(), topoMgr->getDimNT());
91  for(int i=0; i<sizeDim[0]; i++)
92  for(int j=0; j<sizeDim[1]; j++)
93  {
94  int proc=map->get(i, j);
95  int X, Y, Z, T;
96  topoMgr->rankToCoordinates(proc, X, Y, Z, T);
97  fprintf(fp, "%d %d %d %d %d %d %d\n", i, j, proc,X,Y,Z,T);
98  }
99  fclose(fp);
100 }
101 
102 
103 void MapFile::dumpMapCoords(MapType4 *map, char c)
104 {
105  char name[100];
106  sprintf(name, "%s_inst_%d", mapName, (int)c);
107  FILE *fp = fopen(name, "w");
108  fprintf(fp, "%s %d ", mapName, numDim);
109  for(int i=0; i<numDim; i++)
110  fprintf(fp, "%d ", sizeDim[i]);
111  fprintf(fp, "\n%d %d %d %d %d\n", numProcs, topoMgr->getDimNX(), topoMgr->getDimNY(), topoMgr->getDimNZ(), topoMgr->getDimNT());
112  for(int i=0; i<sizeDim[0]; i++)
113  for(int j=0; j<sizeDim[1]*stride; j+=stride)
114  for(int k=0; k<sizeDim[2]*stride; k+=stride)
115  for(int l=0; l<sizeDim[3]; l++)
116  {
117  int proc=map->get(i, j, k, l);
118  int X, Y, Z, T;
119  topoMgr->rankToCoordinates(proc, X, Y, Z, T);
120 
121  fprintf(fp, "%d %d %d %d %d %d %d %d %d\n", i, j, k, l, proc, X, Y, Z, T);
122  }
123  fclose(fp);
124 }
125 
126 
127 void MapFile::dumpMapCoords(MapType3 *map, char c)
128 {
129  char name[100];
130  sprintf(name, "%s_inst_%d", mapName, (int)c);
131  FILE *fp = fopen(name, "w");
132  fprintf(fp, "%s %d ", mapName, numDim);
133  for(int i=0; i<numDim; i++)
134  fprintf(fp, "%d ", sizeDim[i]);
135  fprintf(fp, "\n%d %d %d %d %d\n", numProcs, topoMgr->getDimNX(), topoMgr->getDimNY(), topoMgr->getDimNZ(), topoMgr->getDimNT());
136  for(int i=0; i<sizeDim[0]; i++)
137  for(int j=0; j<sizeDim[1]; j++)
138  for(int k=0; k<sizeDim[2]; k++)
139  {
140  int proc=map->get(i, j, k);
141  int X, Y, Z, T;
142  topoMgr->rankToCoordinates(proc, X, Y, Z, T);
143 
144  fprintf(fp, "%d %d %d %d %d %d %d %d\n", i, j, k, proc, X, Y ,Z, T);
145  }
146  fclose(fp);
147 }
148 
149 
150 void MapFile::dumpMap(MapType2 *map, char c)
151 {
152  char name[100];
153  sprintf(name, "%s_inst_%d", mapName, (int)c);
154  FILE *fp = fopen(name, "w");
155  fprintf(fp, "%s %d ", mapName, numDim);
156  for(int i=0; i<numDim; i++)
157  fprintf(fp, "%d ", sizeDim[i]);
158  fprintf(fp, "\n%d %d %d %d %d\n", numProcs, topoMgr->getDimNX(), topoMgr->getDimNY(), topoMgr->getDimNZ(), topoMgr->getDimNT());
159  for(int i=0; i<sizeDim[0]; i++)
160  for(int j=0; j<sizeDim[1]; j++)
161  fprintf(fp, "%d %d %d\n", i, j, map->get(i, j));
162  fclose(fp);
163 }
164 
165 
166 void MapFile::dumpMap(MapType4 *map, char c)
167 {
168  char name[100];
169  sprintf(name, "%s_inst_%d", mapName, (int)c);
170  FILE *fp = fopen(name, "w");
171  fprintf(fp, "%s %d ", mapName, numDim);
172  for(int i=0; i<numDim; i++)
173  fprintf(fp, "%d ", sizeDim[i]);
174  fprintf(fp, "\n%d %d %d %d %d\n", numProcs, topoMgr->getDimNX(), topoMgr->getDimNY(), topoMgr->getDimNZ(), topoMgr->getDimNT());
175  for(int i=0; i<sizeDim[0]; i++)
176  for(int j=0; j<sizeDim[1]*stride; j+=stride)
177  for(int k=0; k<sizeDim[2]*stride; k+=stride)
178  for(int l=0; l<sizeDim[3]; l++)
179  fprintf(fp, "%d %d %d %d %d\n", i, j, k, l, map->get(i, j, k, l));
180  fclose(fp);
181 }
182 
183 
184 void MapFile::dumpMap(MapType3 *map, char c)
185 {
186  char name[100];
187  sprintf(name, "%s_inst_%d", mapName, (int)c);
188  FILE *fp = fopen(name, "w");
189  fprintf(fp, "%s %d ", mapName, numDim);
190  for(int i=0; i<numDim; i++)
191  fprintf(fp, "%d ", sizeDim[i]);
192  fprintf(fp, "\n%d %d %d %d %d\n", numProcs, topoMgr->getDimNX(), topoMgr->getDimNY(), topoMgr->getDimNZ(), topoMgr->getDimNT());
193  for(int i=0; i<sizeDim[0]; i++)
194  for(int j=0; j<sizeDim[1]; j++)
195  for(int k=0; k<sizeDim[2]; k++)
196  fprintf(fp, "%d %d %d %d\n", i, j, k, map->get(i, j, k));
197  fclose(fp);
198 }
199 
200 
201 int MapFile::loadMap(const char *filename, MapType2 *map)
202 {
203  int x, y, pe;
204  FILE *fp = fopen(filename, "r");
205  if(fp==NULL)
206  return 0;
207  assert(fscanf(fp, "%s%d%d%d%d", mapName, &numDim, &sizeDim[0], &sizeDim[1], &numProcs));
208  for(int i=0; i<sizeDim[0]; i++)
209  for(int j=0; j<sizeDim[1]; j++)
210  {
211  assert(fscanf(fp, "%d%d%d\n", &x, &y, &pe));
212  map->set(x, y, pe);
213  }
214  fclose(fp);
215  CkPrintf("%s loaded from file ----\n", filename);
216  return 1;
217 }
218 
219 int MapFile::loadMap(const char *filename, MapType3 *map)
220 {
221  int x, y, z, w, pe;
222  FILE *fp = fopen(filename, "r");
223  if(fp==NULL)
224  return 0;
225  assert(fscanf(fp, "%s%d%d%d%d%d", mapName, &numDim, &sizeDim[0], &sizeDim[1], &sizeDim[2], &sizeDim[3], &numProcs));
226  for(int i=0; i<sizeDim[0]; i++)
227  for(int j=0; j<sizeDim[1]; j++)
228  for(int k=0; k<sizeDim[2]; k++)
229  {
230  assert(fscanf(fp, "%d%d%d%d", &x, &y, &z, &pe));
231  map->set(x, y, z, pe);
232  }
233  fclose(fp);
234  CkPrintf("%s loaded from file ----\n", filename);
235  return 1;
236 }
237 
238 
239 int MapFile::loadMap(const char *filename, MapType4 *map)
240 {
241  int x, y, z, w, pe;
242  FILE *fp = fopen(filename, "r");
243  if(fp==NULL)
244  return 0;
245  assert(fscanf(fp, "%s%d%d%d%d%d%d", mapName, &numDim, &sizeDim[0], &sizeDim[1], &sizeDim[2], &sizeDim[3], &numProcs));
246  for(int i=0; i<sizeDim[0]; i++)
247  for(int j=0; j<sizeDim[1]*stride; j+=stride)
248  for(int k=0; k<sizeDim[2]*stride; k+=stride)
249  for(int l=0; l<sizeDim[3]; l++)
250  {
251  assert(fscanf(fp, "%d%d%d%d%d", &x, &y, &z, &w, &pe));
252  map->set(x, y, z, w, pe);
253  }
254  fclose(fp);
255  CkPrintf("%s loaded from file ----\n", filename);
256  return 1;
257 }
258 
Author: Abhinav S Bhatele Date Created: December 28th, 2006.
Definition: IntMap.h:26