Skip to content

Deprecating mixed precision inner product subroutines#373

Open
Matthew Walker (mattatmet) wants to merge 2 commits into
MetOffice:mainfrom
mattatmet:mixed-precision
Open

Deprecating mixed precision inner product subroutines#373
Matthew Walker (mattatmet) wants to merge 2 commits into
MetOffice:mainfrom
mattatmet:mixed-precision

Conversation

@mattatmet

@mattatmet Matthew Walker (mattatmet) commented May 19, 2026

Copy link
Copy Markdown
Contributor

PR Summary

Sci/Tech Reviewer: thomasmelvin
Code Reviewer: Oakley Brunt (@oakleybrunt)

This is a PR reflecting the Trac ticket #4449. The changes in this PR are a like-for-like replica of that ticket. This involves removing the PSyKAL light code introduced to perform mixed precision inner product operations in order to deprecate that feature. These inner product operations have been replaced in the solver with PSyclone built-ins that were introduced in PSyclone#1786.

Code Quality Checklist

  • I have performed a self-review of my own code
  • My code follows the project's style guidelines
  • Comments have been included that aid understanding and enhance the readability of the code
  • My changes generate no new warnings
  • All automated checks in the CI pipeline have completed successfully

Testing

  • I have tested this change locally, using the LFRic Core rose-stem suite
  • If required (e.g. API changes) I have also run the LFRic Apps test suite using this branch
  • If any tests fail (rose-stem or CI) the reason is understood and acceptable (e.g. kgo changes)
  • I have added tests to cover new functionality as appropriate (e.g. system tests, unit tests, etc.)
  • Any new tests have been assigned an appropriate amount of compute resource and have been allocated to an appropriate testing group (i.e. the developer tests are for jobs which use a small amount of compute resource and complete in a matter of minutes)

trac.log

Test Suite Results - lfric_core - mixed-precision-core/run1

Suite Information

Item Value
Suite Name mixed-precision-core/run1
Suite User matthew.walker
Workflow Start 2026-05-19T09:23:57
Groups Run all
Dependency Reference Main Like
lfric_core mattatmet/lfric_core@mixed-precision False
SimSys_Scripts MetOffice/SimSys_Scripts@2025.12.1 True

Task Information

❌ failed tasks - 1
Task State
validate_rose_meta failed
✅ succeeded tasks - 382
⌛ waiting tasks - 1
Task State
housekeep_azspice waiting

Security Considerations

  • I have reviewed my changes for potential security issues
  • Sensitive data is properly handled (if applicable)
  • Authentication and authorisation are properly implemented (if applicable)

Performance Impact

  • Performance of the code has been considered and, if applicable, suitable performance measurements have been conducted

AI Assistance and Attribution

  • Some of the content of this change has been produced with the assistance of Generative AI tool name (e.g., Met Office Github Copilot Enterprise, Github Copilot Personal, ChatGPT GPT-4, etc) and I have followed the Simulation Systems AI policy (including attribution labels)

Documentation

  • Where appropriate I have updated documentation related to this change and confirmed that it builds correctly

PSyclone Approval

  • If you have edited any PSyclone-related code (e.g. PSyKAl-lite, Kernel interface, optimisation scripts, LFRic data structure code) then please contact the TCD Team

Sci/Tech Review

  • I understand this area of code and the changes being added
  • The proposed changes correspond to the pull request description
  • Documentation is sufficient (do documentation papers need updating)
  • Sufficient testing has been completed

(Please alert the code reviewer via a tag when you have approved the SR)

Code Review

  • All dependencies have been resolved
  • Related Issues have been properly linked and addressed
  • CLA compliance has been confirmed
  • Code quality standards have been met
  • Tests are adequate and have passed
  • Documentation is complete and accurate
  • Security considerations have been addressed
  • Performance impact is acceptable

@mattatmet Matthew Walker (mattatmet) added Linked Apps This PR is linked to a MetOffice/lfric_apps PR KGO This PR contains changes to KGO labels May 19, 2026
@github-actions github-actions Bot added the cla-required The CLA has not yet been signed by the author of this PR - added by GA label May 19, 2026
@mattatmet Matthew Walker (mattatmet) changed the title psykal_light removal and replace calls in solver and signature Deprecating mixed precision inner product subroutines May 19, 2026
@github-actions github-actions Bot added cla-signed The CLA has been signed as part of this PR - added by GA and removed cla-required The CLA has not yet been signed by the author of this PR - added by GA labels May 19, 2026
@mo-alistairp

Copy link
Copy Markdown
Contributor

Happy with these changes from a TCD team/PSyclone perspective - thanks for removing some PSyKAl-lite!

@mattatmet Matthew Walker (mattatmet) marked this pull request as ready for review May 19, 2026 15:23
@mattatmet Matthew Walker (mattatmet) requested review from mo-lucy-gordon and removed request for a team May 19, 2026 15:23
@github-actions github-actions Bot requested a review from thomasmelvin May 19, 2026 15:23

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Always good to see some psykal-light code removed. I don't think the corresponding innerproduct routines are called in LFRic-Apps so no linked PR is necessary?

If you haven't already, it might be worth double-checking by running an LFRic-Apps branch linked to this Core branch.

@mattatmet

Copy link
Copy Markdown
Contributor Author

Always good to see some psykal-light code removed. I don't think the corresponding innerproduct routines are called in LFRic-Apps so no linked PR is necessary?

If you haven't already, it might be worth double-checking by running an LFRic-Apps branch linked to this Core branch.

Thanks for the quick review Tom (Thomas Bendall (@tommbendall))! There's actually an integration test in apps that has these inner product calls that I've had to change as well as a significant number of KGOs that have to be adjusted as well. I've put those into #501 in apps. So I think it might be necessary but happy to be wrong on that?

@tommbendall

Copy link
Copy Markdown
Contributor

Always good to see some psykal-light code removed. I don't think the corresponding innerproduct routines are called in LFRic-Apps so no linked PR is necessary?
If you haven't already, it might be worth double-checking by running an LFRic-Apps branch linked to this Core branch.

Thanks for the quick review Tom (Thomas Bendall (Thomas Bendall (@tommbendall)))! There's actually an integration test in apps that has these inner product calls that I've had to change as well as a significant number of KGOs that have to be adjusted as well. I've put those into #501 in apps. So I think it might be necessary but happy to be wrong on that?

Ah sorry, I completely missed that there already was a linked Apps PR! So I'm not sure that I understand why every KGO changes... are the sums now happening at the native precision rather than r_double precision?

@mattatmet

Copy link
Copy Markdown
Contributor Author

Ah sorry, I completely missed that there already was a linked Apps PR! So I'm not sure that I understand why every KGO changes... are the sums now happening at the native precision rather than r_double precision?

Thomas Bendall (@tommbendall), yes, the psykal-lite code promotes the solver field within the subroutine to r_double, whereas the PSyclone built-ins (I think) are set to use whatever the precision is of the argument that it's given, which will be r_solver.

@tommbendall

Copy link
Copy Markdown
Contributor

Ah sorry, I completely missed that there already was a linked Apps PR! So I'm not sure that I understand why every KGO changes... are the sums now happening at the native precision rather than r_double precision?

Thomas Bendall (Thomas Bendall (@tommbendall)), yes, the psykal-lite code promotes the solver field within the subroutine to r_double, whereas the PSyclone built-ins (I think) are set to use whatever the precision is of the argument that it's given, which will be r_solver.

I thought that must be the case! I have chatted with Tom M and Chris M and am happy that this is fine -- I also ran some NWP case studies to check that the impact is negligible and stability wouldn't be impacted, and everything looked OK.

@mattatmet

Copy link
Copy Markdown
Contributor Author

I thought that must be the case! I have chatted with Tom M and Chris M and am happy that this is fine -- I also ran some NWP case studies to check that the impact is negligible and stability wouldn't be impacted, and everything looked OK.

Awesome, thanks for doing that! Glad they were stable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The CLA has been signed as part of this PR - added by GA KGO This PR contains changes to KGO Linked Apps This PR is linked to a MetOffice/lfric_apps PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants