Skip to content

3.3.0

Choose a tag to compare

@arporter arporter released this 02 Jul 07:21
· 987 commits to master since this release
6f238e6

Key Highlights

LFRic

  • Generalisation of the previous GlobalSum functionality to support other types of reduction (minimum/maximum value of a field);
  • Support for new ScalarArray Kernel 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 if clauses to reduce deeply nested structures in output;
  • Support added for preserving ACC ROUTINE/OMP DECLARE TARGET directives in existing code;
  • Initial support for Fortran array constructors;

New Contributors

Full Changelog: 3.2.2...v3.3.0-rc1