Projects

PSyclone
PSyclone is a source-to-source Fortran compiler designed to programmatically optimise, parallelise and instrument HPC applications via user-provided transformation scripts. By encapsulating the performance-portability aspects (e.g. whether to parallelise with OpenMP or OpenACC), these scripts enable a separation of concerns between the scientific implementation and the optimisation choices. This allows each aspect to be explored and developed largely independently. Additionally, PSyclone supports the development of kernel-based Fortran-embedded DSLs following the PSyKAl model.

PSyclone is currently used to support the LFRic mixed finite-element PSyKAl DSL for the UK MetOffice's next generation modelling system and the GOcean finite-difference PSyKAl DSL for a prototype 2D ocean modelling system. It is also used to insert GPU offloading directives into existing directly-addressed MPI applications such as the NEMO ocean model.

PSycloneBench
PSycloneBench contains various small benchmarks used to inform the development of the PSyclone.

DopingHPC
Doping (Dynamic OPtimization INjector) is a tool to embed a dynamic recompilation infrastructure to C and C++ applications in order to optimize (and improve the vectorization) of loops. The tools targets traditional HPC applications and leverages the additional contextual information available at run-time to perform the optimizations.

Autovect-benchmark
This Test-Suite evaluates the auto-vectorization capabilities of compilers for different amounts of compile-time provided information. This contrasts with traditional test-suites that only provide an implementation-specific source to the compiler. To achieve this we have extended the TSVC benchmark and 6 micro-kernels (Binomial options, Black-Scholes, MandelBrot, Convolutions, Small matrix-matrix multiplication and Stencil computation) with preprocessor macros to choose whether the value of: loop bounds, parameters in Array Indices and offsets, parameters in Conditional Evaluations, adn array attributes such as alignment and non-aliasing constrains is provided at compile-time or hidden until the run-time.