What's Changed
IMPORTANT: graphviz
and termcolor
are now mandatory dependencies (rather than optional). You will need these python packages installed in order to run psyclone.
The functionality for handling existing Fortran code which we used to term the "NEMO API" is now named "Generic Code Transformation". All NEMO-specific naming has been removed from the codebase. This change has been made to emphasise
that this functionality is intended to be general purpose. As part of this, the concept of a 'default' API has been removed since
the default is now to process generic code. If a user has code that conforms to an API then they must specify which one using
the -api/--psykal-dsl
flag to PSyclone.
LFRic and PSyAD
- More moving and renaming of classes out of
dynamo0p3.py
; - Use of the PSyIR Fortran backend for LFRic loops and anything inside them;
- Comments generated for Builtins in the PSy Layer;
- Support for user-defined kernels that operate on DoFs;
- GungHo on GPU now part of integration tests;
- LFRic PSy-layer now looks up nlevels for each kernel individually;
- Update the PSyKAl transformation script signature to accept PSyIR nodes;
- Add support for kernels that operate on halos (for FFSL in LFRic);
- Derive module and subroutine names of adjoint tests from supplied filename for LFRic API;
- Improvements to kernel-extraction and driver-generation (PSyKE) functionality (including MPI support);
- NaN-checking support generalised so that kernel inputs can be checked for validity against user-provided ranges;
- Updates to support new operator index ordering in LFRic;
NEMO
- Passthrough of BENCH for NEMOv4 now requires only one file to be omitted;
- Passthrough of BENCH for NEMOv5 works for all source files;
- OpenACC and OpenMP offload to GPU for both versions now part of integration testing;
- Several bug fixes for issues around incorrect parallelisation of loops;
Generic Code Transformation
-
New support for Fortran features:
- NAMELIST
- SELECT TYPE
- Procedure interfaces
- Calls to type-bound procedures
- INTRINSIC modules and USE association
- ELEMENTAL and IMPURE routines
- Pointer assignments
- WHERE without explicit array notation
- OPTIONAL arguments - partial type information now retained
- Calls to polymorphic routines
-
Improved support for inlining and "module inlining".
-
The reason for a CodeBlock is now included as a comment in the output Fortran code;
-
Improved lifetime analysis (used to improve robustness of loop parallelisation);
-
Many bug fixes and improvements;
-
Improvements to various intrinsic-to-code transformations;
-
Initial support for array-privatisation in parallel-loop transformations;
Other
- Experimental backend for xDSL Python-Native Compiler Toolkit
- PSyclone performance improvements
- Updated to use release 0.2.0 of fparser (https://github.com/stfc/fparser)
Full Changelog: 2.5.0...v3.0
New Contributors
- @JulienRemy made their first contribution in #2567
- @mcjamieson made their first contribution in #2653
- @DrTVockerodtMO made their first contribution in #2743
- @schreiberx made their first contribution in #2775
Full Changelog: 2.5.0...v3.0