NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
>>>>> "Russ" == Russ Rew <russ@xxxxxxxxxxxxxxxx> writes: Russ> There still may be a bug under some other combination of Russ> circumstances that is causing an anomalous performance problem, Russ> but we'll need to be able to duplicate it here to determine what Russ> the problem is. I have worked up a python script that clearly shows the problem on my system. In doing so, I discovered that the slowdown only occurs if you have both scalar variables and higher dimensional variables together. In Konrad Hinson's netcdf module, scalar values are treated slightly differently and are written with ncvarput1(), instead of ncvarputg() like all other array shapes. Russ, if you don't use python then I can try to port this to C. This script makes one vector variable and one scalar variable. It then writes 1000 garbage values to the file while timing the loop. On my system, the printed values start at zero and linearly approach .7 seconds per ten iterations. John from Scientific.IO.NetCDF import NetCDFFile from Numeric import * from RandomArray import uniform from time import clock cdf = NetCDFFile('garbage.nc', 'w') dims = [10, 50, 23, 15, 125] for i in range(len(dims)): cdf.createDimension('x%d' % i, dims[i]) cdf.createDimension('time', None) vardims = [ ('time', 'x1', 'x2'), ('time',) ] vars = [] for i in range(len(vardims)): vars.append(cdf.createVariable('y%d' % i, Float, vardims[i])) time = 0 c = clock() for time in range(1000): for v in vars: try: v[time,:] = uniform(-1, 1, tuple(list(v.shape[1:]))) except IndexError: v.assignValue(uniform(-1, 1)) if time % 10 == 0 : new_c = clock() print new_c - c c = new_c -- John Galbraith email: john@xxxxxxxxxxxxxxx Los Alamos National Laboratory, home phone: (505) 662-3849 work phone: (505) 665-6301
netcdfgroup
archives: