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.