wrf-model / WRF

The official repository for the Weather Research and Forecasting (WRF) model
Other
1.18k stars 658 forks source link

Restructure alloc space calls into simpler smaller files #2068

Open islas opened 2 weeks ago

islas commented 2 weeks ago

TYPE: enhancement

KEYWORDS: intel, compilation, llvm, memory

SOURCE: internal

DESCRIPTION OF CHANGES: Problem: The Intel oneAPI compilers (and others like nvhpc) struggle with some of the larger (15k+ lines of code) files within WRF. This causes intense memory usage that is not often available to the average user not in a resource-rich environment. This often limits compilation to single threaded if even possible or to a dedicated environment with enough memory if available. If neither of those is available to a user, they will be unable to use these configurations entirely.

Solution: This PR focuses on the module_alloc_space* sections of code to reduce their individual file size to manageable levels. They are instead broken out into many smaller files as external subroutines, not requiring a wrapper module to house the subroutine call. The files are now fully generated source code from the registry, with the calls to the subroutines also being generated as well. This also makes it relatively easy to change the number of files generated from a source code perspective. Build rules would need to be modified accordingly as seen in these changes.

TESTS CONDUCTED: Attached to this PR are plots of the respective effects of theses changes. Changes were tested with intel and gcc compilers, but only intel memory usage is shown as it exacerbates the memory usage issue.

islas commented 2 weeks ago

Highlighted is the region during compilation which memory usage spikes that this PR addresses (module_alloc_space*) before these changes take place : pre_alloc

This usage is then dropped when using this PR's edits : post_alloc_split

Zooming in we can now see that allocs_ comprise a number of smaller compilation units : post_alloc_split_zoom