-
Notifications
You must be signed in to change notification settings - Fork 26
Description
Describe the Enhancement
OpenMP has been successfully applied to a handful of places in the MET library code to make the tools run more efficiently. This task is to apply that OpenMP approach across the MET codebase where possible in the library and application code.
Roughly speaking, the MET library code in src/basic
and src/libcode
contains around 100 instances of for
loops traversing all the points in a grid. And the application code in src/tools
contains around 50 instances. This parent issue should be broken down into sub-issues for using OpenMP to parallelize single libraries and applications or groups of them.
When making these changes, consider benchmarking to quantify and track performance gains.
For example, when parallelizing the vx_regrid
library:
- Benchmark the current behavior as of the MET-12.1.0-beta2 release by running
regrid_data_plane
to regrid 1km MRMS data to the 3km RRFS model domain using the benchmarking utility from @bikegeek. Test using nearest neighbor and bilinear interpolation at a minimum. Find sample test data inseneca:/d1/personal/briannen
. - Enhance the
vx_regrid
library to apply OpenMP to that regridding. - Re-run the benchmarking tests to quantify how the timing of regridding improves based on the number
OMP_NUM_THREADS
are used.
Time Estimate
About 2 weeks
Sub-Issues
Consider breaking the enhancement down into sub-issues.
Sub-issues defined for adding OpenMP based on the number of loops to be parallelized.
- Application code:
- Apply OpenMP to parallelize loops over grid dimensions in MET Applications #3140 for pcp_combine (7), gen_vx_mask (12)
- Apply OpenMP to parallelize loops over grid dimensions in the remaining MET applications #3145 for ensemble_stat (1), grid_stat (2), mode (3), series_analysis (1), wavelet_stat (6), dev_utils/gen_climo_bin (2), gen_ens_prod (6), point2grid (2), regrid_data_plane (1), shift_data_plane (2), tc_dland (1), tc_gen (1)
- Library code:
- Apply OpenMP to the
vx_regrid
library and initialize OpenMP for all applications #3131 for vx_regrid (5) - Apply OpenMP to the
vx_util
library #3132 for vx_util (45) - Apply OpenMP to remaining MET library code #3134 for vx_data2d (4), vx_nc_util (3), vx_series_data (2), vx_shapedata (29), vx_statistics (7), internal/test_util/libcode/vx_series_data (1)
- Apply OpenMP to the
Relevant Deadlines
Attempt to include in the MET-12.1.0-rc1, but the NOAA EPIC funding supporting this work actually runs through July 31, 2025.
Funding Source
NOAA EPIC METP 2784544 (PRJ013287)
Define the Metadata
Assignee
- Select engineer(s) or no engineer required: John HG
- Select scientist(s) or no scientist required: Bri to provide data and validate performance
Labels
- Review default alert labels
- Select component(s)
- Select priority
- Select requestor(s)
Milestone and Projects
- Select Milestone as a MET-X.Y.Z version, Consider for Next Release, or Backlog of Development Ideas
- For a MET-X.Y.Z version, select the MET-X.Y Development project
Define Related Issue(s)
Consider the impact to the other METplus components.
Enhancement Checklist
See the METplus Workflow for details.
- Complete the issue definition above, including the Time Estimate and Funding Source.
- Fork this repository or create a branch of develop.
Branch name:feature_<Issue Number>_<Description>
- Complete the development and test your changes.
- Add/update log messages for easier debugging.
- Add/update unit tests.
- Add/update documentation.
- Push local changes to GitHub.
- Submit a pull request to merge into develop.
Pull request:feature <Issue Number> <Description>
- Define the pull request metadata, as permissions allow.
Select: Reviewer(s) and Development issue
Select: Milestone as the next official version
Select: MET-X.Y Development project for development toward the next coordinated release - Iterate until the reviewer(s) accept and merge your changes.
- Delete your fork or branch.
- Close this issue.