Skip to content

Enhance MET using OpenMP parallelization in both the library and application code #3120

@JohnHalleyGotway

Description

@JohnHalleyGotway

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:

  1. 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 in seneca:/d1/personal/briannen.
  2. Enhance the vx_regrid library to apply OpenMP to that regridding.
  3. 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.

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.

Sub-issues

Metadata

Metadata

Type

No type

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions