[Yt-svn] yt-commit r699 - branches/parallel_profiles/yt/lagos
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Sat Jul 26 16:52:09 PDT 2008
Author: mturk
Date: Sat Jul 26 16:52:09 2008
New Revision: 699
URL: http://yt.spacepope.org/changeset/699
Log:
Changed the queueing a bit. Still not well tested, but preloading works.
Changed the reader to take a list of integer ids, which it will process. This
preserves the id-as-key idea.
Modified:
branches/parallel_profiles/yt/lagos/DataReadingFuncs.py
branches/parallel_profiles/yt/lagos/HDF5LightReader.c
Modified: branches/parallel_profiles/yt/lagos/DataReadingFuncs.py
==============================================================================
--- branches/parallel_profiles/yt/lagos/DataReadingFuncs.py (original)
+++ branches/parallel_profiles/yt/lagos/DataReadingFuncs.py Sat Jul 26 16:52:09 2008
@@ -142,3 +142,41 @@
def getExceptionHDF5():
return (exceptions.KeyError, HDF5LightReader.ReadingError)
+
+class BaseDataQueue(object):
+
+ def __init__(self):
+ self.queue = defaultdict(lambda: {})
+
+ # We need a function for reading a list of sets
+ # and a function for *popping* from a queue all the appropriate sets
+
+ def preload(self, grids, sets):
+ pass
+
+ def pop(self, grid, field):
+ if grid.id in self.queue and field in self.queue[grid.id]:
+ return self.queue[grid.id].pop(field)
+ else:
+ # We only read the one set and do not store it if it isn't pre-loaded
+ return self._read_set(grid, field)
+
+ def peek(self, grid, field):
+ return self.queue[grid.id].get(field, None)
+
+ def push(self, grid, field, data):
+ if grid.id in self.queue and field in self.queue[grid.id]:
+ raise ValueError
+ self.queue[grid][field] = data
+
+class DataQueuePackedHDF5(BaseDataQueue):
+ _read_set = readDataHDF5
+
+ def preload(self, grids, sets):
+ # We need to deal with files first
+ files_keys = defaultdict(lambda: [])
+ for g in sorted(grids): files_keys[g.filename].append(g)
+ for file in files_keys:
+ nodes = [g.id for g in grids]
+ data = HDF5LightReader.ReadMultipleGrids(file, nodes, sets)
+ for gid in data: self.queue[gid].update(data[gid])
Modified: branches/parallel_profiles/yt/lagos/HDF5LightReader.c
==============================================================================
--- branches/parallel_profiles/yt/lagos/HDF5LightReader.c (original)
+++ branches/parallel_profiles/yt/lagos/HDF5LightReader.c Sat Jul 26 16:52:09 2008
@@ -471,17 +471,18 @@
// Format arguments
char *filename = NULL;
- PyObject *grid_names = NULL;
+ char *format_string = NULL;
+ PyObject *grid_ids = NULL;
PyObject *set_names = NULL;
Py_ssize_t num_sets = 0;
Py_ssize_t num_grids = 0;
if (!PyArg_ParseTuple(args, "sOO",
- &filename, &grid_names, &set_names))
+ &filename, &grid_ids, &set_names))
return PyErr_Format(_hdf5ReadError,
"ReadMultipleGrids: Invalid parameters.");
- num_grids = PyList_Size(grid_names);
+ num_grids = PyList_Size(grid_ids);
num_sets = PyList_Size(set_names);
PyObject *grids_dict = PyDict_New(); // New reference
PyObject *grid_key = NULL;
@@ -492,6 +493,8 @@
hid_t file_id, grid_node;
file_id = grid_node = 0;
int i, n;
+ long id;
+ char grid_node_name[13]; // Grid + 8 + \0
file_id = H5Fopen (filename, H5F_ACC_RDONLY, H5P_DEFAULT);
@@ -502,14 +505,16 @@
}
for(i = 0; i < num_grids; i++) {
- grid_key = PyList_GetItem(grid_names, i);
+ grid_key = PyList_GetItem(grid_ids, i);
+ id = PyInt_AsLong(grid_key);
+ sprintf(grid_node_name, "Grid%08li", id);
grid_data = PyDict_New(); // New reference
PyDict_SetItem(grids_dict, grid_key, grid_data);
- grid_node = H5Gopen(file_id, PyString_AsString(grid_key));
+ grid_node = H5Gopen(file_id, grid_node_name);
if (grid_node < 0) {
PyErr_Format(_hdf5ReadError,
"ReadHDF5DataSet: Error opening (%s, %s)",
- filename, grid_key);
+ filename, grid_node_name);
goto _fail;
}
for(n = 0; n < num_sets; n++) {
More information about the yt-svn
mailing list