Skip to content

Releases: BerkeleyLab/caffeine

0.2.0

28 Mar 22:59
42fe4f6
Compare
Choose a tag to compare

All PRIF Interfaces Defined and Basic Coarray Support Added

This release adds

  1. A new prif module providing the interface bodies for all of procedures in the Parallel Runtime Interface for Fortran (PRIF) procedures,
  2. A symmetric heap for managing the memory associated with intrinsic-type coarrays and derived-type coarrays with no allocatable or pointer components,
  3. A non-symmetric, shared heap for managing derived-type coarrays with allocatable or pointer components, and
  4. An initial working implementation of contiguous Remote Memory Access (RMA) and supporting procedures, as specified by PRIF.

Currently Supported Features

  • Program launch: image creation via the prif_init 🚀
  • Program termination: prif_stop 🛑 and prif_error_stop 🧯 with variable integer or character stop codes
  • Image enumeration: prif_this_image 🖼️ and prif_num_images 🔢
  • Image Queries: prif_image_index ☝️
  • Coarray allocation: allocation and deallocation via the prif_allocate, prif_deallocate 🗑️ , prif_allocate_non_symmetric, prif_deallocate_non_symmetric functions
  • Coarray RMA: Contiguous RMA via the prif_put and prif_get functions
  • Global synchronization: prif_sync_all 🧱
  • Collective subroutines: prif_co_min, prif_co_max, prif_co_sum , prif_co_broadcast 📣, and prif_co_reduce 🥘

Supported Platforms

Compilers

We currently build Caffeine and its dependencies with gfortran and gcc with a goal to support additional compilers in a future release.

Operating systems and architectures

We regularly test on

  • Linux: x86
  • macOS: x86 and Apple Silicon

Limitations

  • The parallel features that are not yet supported have associated PRIF subroutines that can be called and will return an unimplemented error message
  • The current prif_co_reduce implementation
    • Assumes the user-provided prif_co_reduce operation function is commutative,
    • Assumes no user-initiated communication happens during the execution of the user-definedoperation reduction function, and
    • Does not support derived type arguments.
  • Many of the parallel features listed above as supported do not contain support for the optional arguments to the corresponding PRIF routines. For example, the prif_this_image, prif_num_images, and prif_sync_all routines accept the optional arguments but do not support the semantics of the optional arguments.

Full Changelog: 0.1.0...0.2.0

Support Fortran 2018 non-coarray parallel features

04 Mar 01:07
2b9b58a
Compare
Choose a tag to compare

Initial Release

This release uses the GASNet-EX exascale-ready networking middleware to support most of the non-coarray parallel features of Fortran 2018. In the text below, any mention or depiction of standard Fortran statements or procedures refers to features that Caffeine supports. We envision that a fully Caffeinated compiler would translate standard Fortran statements and intrinsic procedures into Caffeine procedure calls when compiling parallel Fortran programs. Our initial target compilers include flang and LFortran. For verification purposes, we currently use gfortran to develop and test Caffeine. We welcome additional partner compiler projects.

Currently Supported Features

  • Program launch: image creation via the caf_caffeinate() function ☕
  • Program termination: stop and error stop statements with variable integer or character stop codes 🛑
  • Image enumeration: this_image() 🖼️ and num_images() 🔢 functions
  • Global synchronization: the sync all statement 🧱
  • Collective subroutines: co_min, co_max, co_sum , co_broadcast 📣, and co_reduce 🥘

Limitations

  • The current co_reduce implementation
    • Assumes the user-provided co_reduce operation function is commutative,
    • Assumes no user-initiated communication happens during the execution of the user-definedoperation reduction function, and
    • Does not support derived type arguments.
  • The this_image() and num_images() functions do not accept any of the optional arguments.
  • The caf_sync_all subroutine does not support the sync all statement's optional sync-stat-list.

Not In This Release

The following standard Fortran 2018 parallel features are not yet supported by Caffeine:

  • Additional forms of synchronization: the sync images, sync team, and sync memory statements
  • Teams of images: team_type; the form team and change team statements; the get_team() and team_number() functions; and the initial_team, current_team, and parent_team constants ⚽
  • Image failure detection: the failed_images() function 🆘, the fail image statement🚨, and the stat_failed_image and stat_unlocked_failed_image constants
  • Coarrays:
    • Intrinsic and user-defined coarrays and related features such as synchronized allocation/deallocation
    • Events: event_type, the event post and event wait statements, and the event_query subroutine 💃
    • Atomics: atomic_int_kind, atomic_logical_kind and atomic_* subroutines 💣
  • Image-exclusive execution: critical blocks.
  • Locks: the lock and unlock statements. 🔒