2022-03-03 All-Hands Presentation Meeting Notes

Presenter: Matthew Norman

Title:  Introduction to the YAKL C++ Portability Library

Abstract

The Yet Another Kernel Launcher (YAKL) C++ portability library (github.com/mrnorman/YAKL) supports the E3SM project with an emphasis on simplicity, readability, and porting Fortran code to C++. YAKL currently fully supports serial CPU, OpenMP CPU threading, AMD GPU, Nvidia GPU, and Intel GPU backends. Among other features, YAKL includes a multi-dimensional array class, a "parallel_for" kernel launcher, and an efficient non-blocking pool allocator. The multi-dimensional arrays allow Fortran-like behavior with column-major index ordering, arbitrary lower bounds that default to one, and basic slicing. C-style behavior is supported as well, leaving the style of arrays to the developer's preference. YAKL also includes a (growing) subset of Fortran intrinsic functions like size, minval, maxloc, allocated, etc. The pool allocator allows the user to efficiently allocate and deallocate anywhere outside of kernels without fear of performance degradation. YAKL has Fortran hooks for its pool allocator, allowing easier data sharing between Fortran and C++. Summed together, YAKL's features significantly reduce the effort required to port a Fortran code to portable C++ with wide portions of the code looking nearly identical to the original Fortran. It can be a useful choice for new codes as well, even without the Fortran styling features.

A portion of the presentation will be dedicated to the notion of readability and productivity in the user-level code. YAKL's aim is to keep the syntax simple and require minimal concerns from the developer regarding performance and C++ complexity, and this necessarily reduces the feature set to some extent. Therefore, it will also be discussed in what situations a developer should consider a larger framework like Kokkos instead. Performance for codes using YAKL on the CPU and GPU will also be covered.

Date

 

Time

  • PT: 8:30 am
  • ET: 11:30 am

Call Info

  • web session:   https://global.gotomeeting.com/join/570361173                  
  • call number:    (571) 317-3122 Access Code: 570-361-173,            If busy, use alternate number: (773) 945-1029

    Joining from a video-conferencing room or system?       Dial: 67.217.95.2##570361173 ,  Cisco devices: 570361173@67.217.95.2 

Attendees:


Time
Title
Presenter
Presentation
Recording
Notes

30 min


Introduction to the YAKL C++ Portability LibraryMatthew Norman

 MP4 Movie (on the E3SM YouTube Channel)