[Radiance-dev] time needed for octree reading (was Re: setting
buffer size on octree reads (setvbuf) )
Peter Apian-Bennewitz
apian at pab-opto.de
Wed Apr 30 02:41:23 PDT 2008
Hi all,
The observed slow reading of frozen octrees happens if and only if:
- the geometric object (polygons in this case) each have their own,
different modifier. This is probably rare, but may happen if each
polygon uses a texfunc to interpolate the normal.
- each of these modifiers have a unique name
It is only relevant if there are millions of such objects (e.g.
tessellated surfaces imported from CAD).
Then the octree reading spends 96% of its time in otndx() (readoct.c),
which handles a hash table. I would *guess* (not be field of expertise
anyway) that the hash algorithm is slow under these extreme
circumstances, since these unique modifier names are only inserted, but
never ever re-used. Effectively this exotic scenario screws up the idea
of having a hash table.
The solution (thanks Greg) was to use a modifier name for the texfunc
that applies to all polygons with the same material, although each
texfunc is different. This works since the texfunc is specified just
prior to its polygon.
The decrease in loading time is noticeable: 18 versus 148 seconds for
320MB of frozen octrees.
It is worth to note that, in a wider context and from a different
perspective, this specific use of texfunc/polygons might be better
served with the Radiance mesh primitive, resulting in less file and
memory use and with faster reading and rendering.
As a general hint, reading of non-frozen octrees may be slower. Use of
frozen octrees is recommended for speed (by Greg).
Regarding my suggestion to increase the stream buffer size for octree
readings: The above timings use a 2MB buffer. Likely the 4k standard
buffer size doesn't matter much for local discs, although I'm inclined
to stick with the 2MB, because of the reduced. number of system calls.
It may have a larger influence on NFS mounts, depending on the mount
options. The only reason not to change the source is that *any*
non-urgent change may introduce unforeseen side effects on some systems.
Even if setvbuf seems to be a pretty much standardized call.
Thanks to Greg and the gprof profiler
cheers
Peter
--
pab-opto, Freiburg, Germany, http://www.pab-opto.de
[see web page to check digital email signature]
More information about the Radiance-dev
mailing list