Recent Releases of https://github.com/stfc/psyclone
https://github.com/stfc/psyclone - Version 3.1.0
What's Changed
LFRic
- Allow user-defined DoF kernels to act on field vectors in https://github.com/stfc/PSyclone/pull/2897
- Enable split element orders and anisotropic quadrature points in https://github.com/stfc/PSyclone/pull/2865 and https://github.com/stfc/PSyclone/pull/2799
- Config command-line option added to PSyAD in https://github.com/stfc/PSyclone/pull/2829
Profiling and Kernel Extraction
- Support added for the Vernier timing library (https://github.com/stfc/PSyclone/pull/2820)
- Kernel extraction (and driver creation): support added for character and logical datatypes, for partially-written fields and for non-allocatable arrays (https://github.com/stfc/PSyclone/pull/2509, https://github.com/stfc/PSyclone/pull/2890, https://github.com/stfc/PSyclone/pull/2899)
General
- Added support for instructing the PSyIR frontend to import external modules named in the
RESOLVE_IMPORTSvariable in the transformation script (https://github.com/stfc/PSyclone/pull/2807) - Added (experimental) support for retaining comments (and directives) in the frontend (https://github.com/stfc/PSyclone/pull/2821)
- Parse-tree caching added to frontend (disabled by default) in https://github.com/stfc/PSyclone/pull/2810
- Improvements to dependence analysis including new support for finding backward accesses in https://github.com/stfc/PSyclone/pull/2814 and https://github.com/stfc/PSyclone/pull/2825
- Add some support for dependency analysis involving array ranges in https://github.com/stfc/PSyclone/pull/2880
- Frontend/backend correction to ensure that explicit parentheses on binary operations are reproduced in https://github.com/stfc/PSyclone/pull/2862
- Allow setting of the Fortran standard in the config file in https://github.com/stfc/PSyclone/pull/2855
- Exclude character assignments from ACC KERNELS regions in https://github.com/stfc/PSyclone/pull/2857
- Support for elemental functions in WHEREs in https://github.com/stfc/PSyclone/pull/2883
- NEMOv5 GPU runs added to the integration tests with full reproducibility in https://github.com/stfc/PSyclone/pull/2859
New Contributors
- @mo-alistairp made their first contribution in https://github.com/stfc/PSyclone/pull/2832
- @mo-jdendy made their first contribution in https://github.com/stfc/PSyclone/pull/2799
Full Changelog: https://github.com/stfc/PSyclone/compare/v3.0.0...v3.1.0
- Python
Published by arporter over 1 year ago
https://github.com/stfc/psyclone - Release 3.0
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: https://github.com/stfc/PSyclone/compare/2.5.0...v3.0
New Contributors
- @JulienRemy made their first contribution in https://github.com/stfc/PSyclone/pull/2567
- @mcjamieson made their first contribution in https://github.com/stfc/PSyclone/pull/2653
- @DrTVockerodtMO made their first contribution in https://github.com/stfc/PSyclone/pull/2743
- @schreiberx made their first contribution in https://github.com/stfc/PSyclone/pull/2775
Full Changelog: https://github.com/stfc/PSyclone/compare/2.5.0...v3.0
- Python
Published by arporter over 1 year ago
https://github.com/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 datadirective; - 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_randomkernel.
NEMO
- Support for OpenMP tasking transformation and directive;
- Supported added for OMP/ACC Atomics and OMP Simd directives;
- Bug fix for
VERIFYintrinsic; - Fix
Ref2ArrayRangeTransbug withALLOCATEstatements; - Addition of NEMO OpenACC loops transformation script;
NemoKernnode removed;maxval2loopand atomics used to parallelise NEMOstpctl.f90;- Bug fix for
NemoOuterArrayRange2LoopTrans; - Bug fix for
process_nemo.pyscript: ensure-Iflags are aggregated.
PSyIR Improvements
- Add
Node.siblingsproperty; - Add
depthkwarg toNode.walk; - Add
Node.get_sibling_listsmethod; Node.origin_stringmethod 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
InlineTransandLoopFusionTrans; - Support for querying the datatype of a unary/binary operation;
UnknownTyperenamed toUnsupportedTypeandDeferredTypetoUnresolvedType;same_rangefunctionality moved toArrayMixinplus other improvements.
Fortran PSyIR Frontend
- Add support for
SAVEstatement andDO CONCURRENT; - Put WHEREs containing reductions into
CodeBlocksand fix non-unity lower-bound bug; - Bug fixes for handling of Fortran types;
- Catch unsupported statements in
implicit-partof parse tree.
Full Changelog: https://github.com/stfc/PSyclone/compare/2.4.0...2.5.0
- Python
Published by arporter over 2 years ago
https://github.com/stfc/psyclone - 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. rsolver, rtrans 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 https://github.com/stfc/PSyclone/pull/1997
- @svalat made their first contribution in https://github.com/stfc/PSyclone/pull/2014
- @mo-lottieturner made their first contribution in https://github.com/stfc/PSyclone/pull/2098
- @BHFock made their first contribution in https://github.com/stfc/PSyclone/pull/2123
- @jwallwork23 made their first contribution in https://github.com/stfc/PSyclone/pull/2259
- @oakleybrunt made their first contribution in https://github.com/stfc/PSyclone/pull/2260
Full Changelog: https://github.com/stfc/PSyclone/compare/2.3.1...2.4.0
- Python
Published by arporter over 2 years ago
https://github.com/stfc/psyclone - 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 https://github.com/stfc/PSyclone/pull/1747
- (Closes #450) remove set_dirty/clean from ACC regions. by @arporter in https://github.com/stfc/PSyclone/pull/1669
- (towards #1731) Split PSyLoop node from Loop by @sergisiso in https://github.com/stfc/PSyclone/pull/1745
Full Changelog: https://github.com/stfc/PSyclone/compare/2.3.0...2.3.1
- Python
Published by arporter almost 4 years ago
https://github.com/stfc/psyclone - 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: https://github.com/stfc/PSyclone/compare/2.2.0...2.3.0
- Python
Published by arporter almost 4 years ago
https://github.com/stfc/psyclone - 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-kerncommand. - 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: https://github.com/stfc/PSyclone/compare/2.1.0...2.2.0
- Python
Published by arporter about 4 years ago