3.3.0
Key Highlights
LFRic
- Generalisation of the previous GlobalSum functionality to support other types of reduction (minimum/maximum value of a field);
- Support for new
ScalarArrayKernel arguments; - Extensive new training material added;
- Improvements for kernel extraction;
- Improvements to value-range check functionality, including new example;
- Access mapping moved from configuration file to LFRic constants;
- Shortening of generated symbol names plus additional checks to avoid invalid names;
- PSyclone integration tests updated to use LFRic 3.1;
- Functionality to write and re-name kernels removed - all kernel transformations must now be applied to kernels that have been brought into the same module as the call site (using
KernelModuleInlineTrans);
NEMO
- Integration tests extended to exercise netcdf output and check the results;
- Transformation to increase rank of work arrays applied to solfrac and zdftke;
- Lists of NEMO functions removed from transformation scripts in favour of resolving imports;
- All supported reduction-replacement transformations are now applied when processing code (MIN/MAX with arguments other than default real now supported);
- Example transformation scripts have been unified and simplified;
- Transformations now applied to extract and then parallelise array expressions in arguments to
iom_put.
General
- New profiling wrappers for the ROCTx (AMD) library;
- Use of the Python logging infrastructure has been introduced (but not yet fully adopted);
- Significant improvement/generalisation for handling existing code (change the default assumption such that unresolved symbols with parentheses are now assumed to be function calls rather than array accesses);
- Improved support for Fortran intrinsics, including keyword arguments and the ability to reason about their return type;
- New transformation to replace an expression with a temporary (
DataNodeToTempTrans); - New meta-transformation to construct the largest possible transformed region (
MaximalRegionTrans), and largest possible OpenMP Parallel region (MaximalOMPParallelRegionTrans); - Improvements to the handling of existing directives, including in the presence of comments;
- Various bug fixes and improvements to the handling of scalar variables in parallel regions, including the ability to explicitly specify private variables (was previously restricted to Loops);
- Initial support added for OMPCritical;
- Support for OpenMP conditional compilation;
- Improvements to the handling of symbols within WHERE constructs;
- Improvements and fixes to Reference2ArrayRangeTrans (including derived-type accessors and nested WHEREs);
- Bug fixes to ArrayAssignment2LoopTrans (allowing for dependencies and making use of Call/RoutineSymbol type information);
- Improvements to handling of Fortran derived types containing unsupported components;
- More code re-structuring - moving Transformation sub-classes out of transformations.py and deprecation of TransInfo;
- Performance optimisations, especially for dependence analysis;
- New command-line option to override configuration-file settings;
- Bug-fix for line-length limiting of inline comments;
- Null (integer) operations removed when constructing PSyIR;
- Support for Fortran character variables declared with a length attribute;
- Compatibility with OpenMP 5.2: SUB reduction replaced with ADD;
- Fortran backend extended to generate
else ifclauses to reduce deeply nested structures in output; - Support added for preserving
ACC ROUTINE/OMP DECLARE TARGETdirectives in existing code; - Initial support for Fortran array constructors;
New Contributors
- @addy419 made their first contribution in #3282
- @thomasgibson made their first contribution in #3317
Full Changelog: 3.2.2...v3.3.0-rc1