Skip to content

Releases: BerkeleyLab/caffeine

0.4.0

24 Dec 00:11
9dbdd5b
Compare
Choose a tag to compare

PRIF Specification Revision 0.5 (Partial Support) Added

Caffeine release 0.4.0:

  1. Updates and adds interfaces and named constant definitions to the prif module, moving towards the latest version of the PRIF specification, revision 0.5 (support remains incomplete in this release)
    • Add interfaces and definitions for prif_local_data_pointer and prif_register_stop_callback
    • Replace integer kinds c_intmax_t with c_int64_t
    • Update prif_allocate_coarray interface and definition
  2. Remove pure from prif_error_stop and update both prif_error_stop and prif_stop to support PRIF semantics
  3. Fix some bugs preventing Caffeine from being built with LLVM Flang

Currently Supported Features & Limitations

Please see the Implementation Status doc

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_64
  • macOS: x86_64 and Apple Silicon

Full Changelog: 0.3.0...0.4.0

0.3.0

12 Sep 22:15
7325b89
Compare
Choose a tag to compare

PRIF Specification Revision 0.4 Support and Basic Team Support Added

This release

  1. Updates and adds interfaces and named constant definitions to the prif module to support the latest version of the PRIF specification, revision 0.4
  2. Add basic team support
    • Enables FORM TEAM and CHANGE TEAM
    • Collectives and coarray allocations work on the current team
  3. Adds an implementation status doc
  4. Updates the installer script to allow passing configure options to GASNet
  5. Replaces remaining usages of Fortran features that have PRIF equivalents with those PRIF equivalents

Currently Supported Features & Limitations

Please see the Implementation Status doc

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_64
  • macOS: x86_64 and Apple Silicon

Full Changelog: 0.2.0...0.3.0

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_64
  • macOS: x86_64 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
    • 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. 🔒