Skip to content

Releases: stfc/PSyclone

Release 2.5.0

14 Feb 13:11
dadffca
Compare
Choose a tag to compare

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 with ALLOCATE statements;
  • Addition of NEMO OpenACC loops transformation script;
  • NemoKern node removed;
  • maxval2loop and atomics used to parallelise NEMO stpctl.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 to Node.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- and sum-to-code transformations;
  • Allow PSyIR backend consistency checks to be disabled;
  • Improvements to InlineTrans and LoopFusionTrans;
  • Support for querying the datatype of a unary/binary operation;
  • UnknownType renamed to UnsupportedType and DeferredType to UnresolvedType;
  • same_range functionality moved to ArrayMixin plus other improvements.

Fortran PSyIR Frontend

  • Add support for SAVE statement and DO 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

29 Sep 10:36
f78be5c
Compare
Choose a tag to compare

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

Full Changelog: 2.3.1...2.4.0

Release 2.3.1 (bug fix to 2.3.0)

17 Jun 10:08
7992612
Compare
Choose a tag to compare

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

Full Changelog: 2.3.0...2.3.1

PSyclone 2.3.0

09 Jun 13:53
Compare
Choose a tag to compare

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

17 Mar 10:07
Compare
Choose a tag to compare

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 new psyclone-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: