Iteration 10
This iteration will address the issues discovered during the performance testing in the previous iteration as well as the new features discussed at the team meeting. It will also include work to complete the functionality of the core framework and the succession library.
- Phase: Construction
- Dates: April 4 - 20, 2005
Tasks to be Completed
Core Framework
- Landscape module
- Revise the site-related classes to minimize the use of temporary objects, in order to address the high garbage-collection rate which is adversely affecting performance.
- Utility module
- Modify how relative file paths in an input file are interpreted. Currently they are interpreted relative to the directory where the model is running. However users intuitively assume that relative paths are interpreted relative to the directory containing the input file. Example: if a scenario file has the path "species.txt", users assume that this species input file is in the same directory where the scenario file is located. Currently, the model looks for the species input file in the directory where it's executing.
- Raster-IO
- Complete transition from v1 of interfaces (single library) to v2 (multiple drivers), for example, remove ILibrary interface, switch to v2 of Erdas 7.4 driver.
- Ecoregions
- Allow the use of 16-bit maps.
- Main module
- Add optional parameter to scenario file which allows user to specify a starting timestep other than 1 (e.g., the year 1990).
- Plug-ins module
- Modify the interfaces to all types of plug-ins so that the initialization method includes the starting timestep.
Plug-in Components
- Succession library
- Allow the use of 16-bit maps for initial communities.
- Modify the handling of the definitions of the initial communities so that ages listed for a particular species are binned into cohorts based on the succession timestep. For example, if a community has the ages 10, 15, 20, 30, and 35 for the species pinubank, and the succession timestep is 20 years, then the ages 10, 15 and 20 mean the cohort 1-20 is present, and the ages 30 and 35 mean the cohort 21-40 is present.
- Age-only Succession (time permitting)
- Add new parameter to initialization file that allows user to select the seeding algorithm (no dispersal, universal dispersal, Ward seed dispersal).
Documentation
- User Guide
- Write the chapter that describes the format and contents of the input files associated with the core (e.g., scenario file, species file, initial communities). (Rob)
- Web site
- Add a page that describes the project's priorities and relative timeline for various components (core, plug-ins, GUI). Sort of a "roadmap". (Rob)
- Plug-ins
- Reorganize the conceptual document for the wind disturbance (Landis 3.7) into a new structure which will be basis for its user guide. The conceptual description will be a chapter in this guide, along with descriptions of its data files and a list of references.
Assessment
Summary
Iteration 10 was almost entirely devoted to optimization to achieve desired program performance. Our software requirements call for a run time of Landis-II that is no more than 25% (1.25x) longer than the run time of Landis 3.7. But at the beginning of the iteration, Landis-II's run time was more than 200x!
This enormous difference was largely due to a lack of understanding how certain C# language features and code designs impact memory management in the NET Framework. The Landis-II code was designed and written to utilize these powerful C# language features; however, this resulted in a significant burden on the memory management system (very high rates of garbage collection) which only became apparent with the large landscape used for performance comparison. The comparison was conducted using the BWCA landscape, which has 4.2 million cells (of which 1.8 million are active).
By the end of the iteration, performance tuning had reduced Landis-II's run time down to ~0.95x that of Landis 3.7!! Unfortunately, the tuning process took approximately a week and half longer than estimated.
Hits and Misses
Big Hit The number of temporary objects was significantly reduced and thus, garbage collection was reduced. This created the greatest gain in model performance. Other optimization changes also contributed to large gains in performance.
Miss Utility module not updated to recognize relative paths.
Hit Raster-IO updated to use v2 driver interfaces.
Miss 16-bit maps not yet allowed for ecoregions or initial communities.
Miss An alternate starting time step (e.g., 1990) not implemented.
Miss Initial community cohort binning not implemented.
Miss Seed dispersal parameter not implemented.
Hit User's Guide beta completed.
Miss Timeline with estimated benchmarks and priorities not created.
Hit Started the user guide for wind disturbances by reorganizing the structure of the associated conceptual document.

