Releases: stfc/PSyclone
Releases · stfc/PSyclone
Release 2.5.0
What's Changed
LFRic and PSyAD
- Much renaming and moving of LFRic-related classes from 'dyn' to 'LFRic';
- PSy-layer generation now creates array pointers for use as kernel arguments (required for GPU compilation);
- Bug fix for missing maps in
enter data
directive; - Bug fixes for LFRic dependency analysis;
- PSyKE: use proper NetCDF variable names for array of fields;
- Metadata support for multi-precision kernels;
- Bug fix for PSy-layer generation involving CMA operators;
- All LFRic built-ins are now generated using PSyIR and lowering;
- Precision-map values moved to configuration file;
- New real-to-real conversion built-in;
- Generated PSyAD test harness now uses LFRic logging API;
- Bug fix for
setop_random
kernel.
NEMO
- Support for OpenMP tasking transformation and directive;
- Supported added for OMP/ACC Atomics and OMP Simd directives;
- Bug fix for
VERIFY
intrinsic; - Fix
Ref2ArrayRangeTrans
bug withALLOCATE
statements; - Addition of NEMO OpenACC loops transformation script;
NemoKern
node removed;maxval2loop
and atomics used to parallelise NEMOstpctl.f90
;- Bug fix for
NemoOuterArrayRange2LoopTrans
; - Bug fix for
process_nemo.py
script: ensure-I
flags are aggregated.
PSyIR Improvements
- Add
Node.siblings
property; - Add
depth
kwarg toNode.walk
; - Add
Node.get_sibling_lists
method; Node.origin_string
method to retrieve original filename and line number information;- Improvements to
ACCRoutineTrans.validate()
; - Improvements to
maxval
-,minval
- andsum
-to-code transformations; - Allow PSyIR backend consistency checks to be disabled;
- Improvements to
InlineTrans
andLoopFusionTrans
; - Support for querying the datatype of a unary/binary operation;
UnknownType
renamed toUnsupportedType
andDeferredType
toUnresolvedType
;same_range
functionality moved toArrayMixin
plus other improvements.
Fortran PSyIR Frontend
- Add support for
SAVE
statement andDO CONCURRENT
; - Put WHEREs containing reductions into
CodeBlocks
and fix non-unity lower-bound bug; - Bug fixes for handling of Fortran types;
- Catch unsupported statements in
implicit-part
of parse tree.
Full Changelog: 2.4.0...2.5.0
2.4.0
What's Changed
LFRic
- Significant progress towards fully-automatic driver generation for extracted kernels (using PSyIR);
- Support for standalone and NetCDF kernel extraction;
- Significant progress towards generating PSyIR for the Algorithm layer;
- Many classes have been moved out of the (extremely large) dynamo0p3.py file and renamed (replacing "Dyn" with "LFRic");
- New setval_random built-in;
- Bug fixes to KernelModuleInlineTrans;
- New kernel metadata handling;
- Support for new field/operator precisions (e.g. r_solver, r_trans etc.)
- Invoke names now constrained to be valid Fortran names;
- Add compilation support to lfric/eg14 (OpenACC example);
- Allow for GH_WRITE access to arguments to inter-grid kernels;
PSyAD
- Assorted bug fixes (including kind parameter declarations, routine naming, unary minus operators);
- Application to Functions now forbidden;
- LFRic-specific support added;
- New ReferenceToArrayTrans transformation;
- Support for test-harness generation (both generic and LFRic-specific);
- Support for LFRic kernel arguments containing geometry information;
- Selection of LFRic tangent-linear kernels added under examples;
PSyIR
- Improvements to dependence analysis (induction variables, variables with names matching Sympy reserved names)
- New HoistLoopBoundExprTrans transformation;
- New routine-inlining transformation (including support for routines in a different Container);
- Support for new OpenMP tasking transformations;
- Improvements to support of OpenMP Target directives;
- Improvements to identification of private, firstprivate etc. attributes on OpenMP directives;
- SIR backend - support for intrinsics;
- Bug fix to DotproductTrans;
- New Sum2CodeTrans and {Min,Max}Val2Code transformations;
- Support for OpenMP 'teams distribute parallel do' directive;
- Improvements to SymbolTable functionality;
- Add support for static/save Symbol attribute;
- Support for Symbols that are renamed upon import;
- New HoistLocalArraysTrans;
- Addition of 'force' option to ParallelLoopTrans;
- New 'is_independent' method added to Loop to encapsulate dependence analysis;
- Support for ACC ENTER DATA and ACC UPDATE directives (data movement);
- Support for GANG and VECTOR clauses on ACC LOOP directive;
- New ACCClause nodes for specifying data movement;
- New automatic tree-update mechanism to allow ancestor nodes to update if their descendants change;
- New 'IntrinsicCall' node type used for all intrinsics (previously, some were Operations);
- All Fortran2018 intrinsics now supported;
- Fortran 'INCLUDE' statements are now forbidden (must be handled by fparser);
- Support for Fortran parameter statements;
- Support for Fortran declarations containing initialisation expressions;
- Support for Fortran 'DO WHILE' loops;
- Generic "kernel" extraction support;
- Support for assumed-shape arrays;
- Bug fix to handling of USE statements in Fortran backend;
- Improved support for Fortran INTERFACEs;
- Support for Fortran Common blocks;
- Support for 'elemental' and 'pure' Routines;
- Bug fixes for Routines CONTAINed within other Routines in Fortran;
- Added support for Fortran EQV operator;
- Bug fix for SELECT CASE involving a logical variable;
- UnknownFortranType extended to allow capture of known type information;
- Support for the use of array expressions and derived types in Sympy;
- Improvements to Node.ancestor() and new Node.path_from() method;
GOcean
- New kernel metadata handling;
- Support for OpenMP tasking;
General
- Fix to locations searched for PSyclone config file;
- Improve CLI --version interface;
- Remove constraint that supplied Fortran is free-form;
- Update to fparser 0.1.3;
- Improvements to NEMO training/tutorial material;
- Fixes to the handling of compiler flags for the libraries, examples and tutorials;
- Bug fixes to the line-length limiting module to avoid generation of lines containing only whitespace and a line-continuation character;
- Support for logical data in PSyData;
- Support for the Tau profiler using the PSyData interface;
- PSyclone integration testing implemented - correctness and performance tested for both LFRic and NEMO.
New Contributors
- @matthewrmshin made their first contribution in #1997
- @svalat made their first contribution in #2014
- @mo-lottieturner made their first contribution in #2098
- @BHFock made their first contribution in #2123
- @jwallwork23 made their first contribution in #2259
- @oakleybrunt made their first contribution in #2260
Full Changelog: 2.3.1...2.4.0
Release 2.3.1 (bug fix to 2.3.0)
This is essentially a bug-fix release. The primary change is to adopt fparser 0.0.16 in which the symbol-table consistency checks
are now disabled by default (pending further development work).
What's Changed
- Update to use fparser 0.0.16 (with symbol-table validation disabled)
- psyad ifs [closes 1720] by @rupertford in #1747
- (Closes #450) remove set_dirty/clean from ACC regions. by @arporter in #1669
- (towards #1731) Split PSyLoop node from Loop by @sergisiso in #1745
Full Changelog: 2.3.0...2.3.1
PSyclone 2.3.0
What's Changed
LFRic Functionality
- Support for mixed precision.
- Support for new built-ins (min/max, scalar subtraction and division by a scalar).
- Fix for halo exchange bug involving stencil depths.
- GH_WRITE access for fields on continuous spaces is now permitted in certain special circumstances.
- Access to CMA Operators has been updated to match the latest LFRic infrastructure.
Core PSyclone Functionality
- Significant improvements to the dependence-analysis functionality.
- Parameter declarations are now ordered so as to satisfy those compilers that do not obey the Fortran standard.
- Improvements to the Node.view() functionality.
- Nodes now support checking for equality.
- Extension to PSyIR towards supporting named routine arguments.
- Support for Algorithm-layer PSyIR.
- Extension and bug-fixes to matmul transformation.
- Bug fixes and improvements to Symbol Table functionality.
PSyAD
- PSyAD now supports expansion of expressions involving active variables.
Full Changelog: 2.2.0...2.3.0
Release 2.2.0
What's Changed
LFRic:
- All loop-bounds lookups in the LFRic PSy layer are done before the loops themselves. This removes type-bound procedure calls from those loops which will facilitate acceleration with e.g. OpenACC.
- The kernel-stub generator (
gen_kernel_stub
) functionality has moved and is now available as part of the newpsyclone-kern
command. - Work towards supporting mixed precision in the LFRic API. Precision for kernel arguments is now obtained by interrogating the Algorithm layer.
- All LFRic built-ins (barring those that do reductions and type casting) are now constructed using PSyIR.
NEMO:
- Improvements to the PSyIR to better support object-orientated style Fortran.
- Various bug fixes related to the construction and use of PSyIR for NEMO, MEDUSA and NEMOVAR, particularly for structures of arrays.
- New ACCRoutineTrans and OMPTargetTrans transformations to allow routines to be flagged for compilation for a remote device.
- New HoistLocalArraysTrans transformation which transforms local, automatic arrays into module scope allocatables.
GOcean:
- An example of the use of the PSyData API for checking for NANs before and after kernels has been added.
- OpenCL functionality has been moved out of code generation and into code transformations in order to improve code structure.
- Kernel data extraction can now create a stand-alone driver to read in the data, execute the kernel and verify the results.
PSyclone Adjoint generator (PSyAD):
- Various improvements including support for dot_product and matmul intrinsics.
General:
- Loop blocking and tiling transformations have been added.
- Support for Python 2 has been removed. Testing is now performed for Python 3.6, 3.8 and 3.10.0.
- Dependence analysis now utilises SymPy.
- Parallel-loop transformations now check for loop-carried dependencies.
- Dynamo 0.1 and GOcean 0.1 APIs have been removed.
- Improved representation of directive clauses in the PSyIR.
- GitHub Actions now performs link checking for all Sphinx documentation as well as running the doctests in the Developer Guide.
Detailed changes:
- Changelog: https://github.com/stfc/PSyclone/blob/master/changelog
- Code changes between 2.1 and 2.2: 2.1.0...2.2.0