Recent Releases of Caffeine

Caffeine - 0.5.2

Support PRIF 0.5 Collectives Subroutines, Events, Notifications, and more

Caffeine release 0.5.2:

  1. Added distributed-memory platform support
  2. Implemented remaining and updated existing Collective Subroutines with PRIF 0.5-compliant interfaces:
    • prif_co_max_character
    • prif_co_min_character
    • prif_co_reduce
    • prif_co_max, prif_co_min, prif_co_sum
  3. Implemented remaining Strided Coarray Access and Contiguous Coarray Access procedures that include notifications:
    • prif_put_with_notify, prif_put_with_notify_indirect
    • prif_put_indirect_with_notify, prif_put_indirect_with_notify_indirect
    • prif_put_strided_with_notify, prif_put_strided_with_notify_indirect
    • prif_put_strided_indirect_with_notify, prif_put_strided_indirect_with_notify_indirect
  4. Implemented Events and Notifications:
    • prif_notify_wait
    • prif_event_post, prif_event_post_indirect
    • prif_event_wait
    • prif_event_query
  5. Implemented remaining SYNC Statements:
    • prif_sync_images
  6. Implemented remaining Storage Management procedures:
    • prif_alias_create, prif_alias_destroy
  7. Implemented remaining Coarray Queries procedures:
    • prif_set_context_data, prif_get_context_data
    • prif_image_index_with_team
    • prif_image_index_with_team_number (partial support)
  8. Implemented remaining Image Queries procedures:
    • prif_this_image_with_coarray, prif_this_image_with_dim
    • prif_num_images_with_team_number (partial support)
  9. Fixed a number of critical defects
    • Fixed prif_sync_all synchronizes the wrong team - issue #208
    • Fixed missing required synchronization for prif_change_team and prif_end_team - issue #209
    • Fixed coarray handles not correctly registered in team list - issue #210
  10. Expanded CI testing to include more compiler versions, OS versions, and distributed memory

Currently Supported Features & Limitations

Please see the Implementation Status doc

Supported Platforms

Compilers

We currently build Caffeine and its dependencies with LLVM compilers (flang-new and clang) and GNU compilers (gfortran and gcc).

Operating systems and architectures

We regularly test on * Linux: x8664 * macOS: x8664 and Apple Silicon

Full Changelog: https://github.com/BerkeleyLab/caffeine/compare/0.5.0...0.5.2

Scientific Software - Peer-reviewed - Fortran
Published by ktras 7 months ago

Caffeine - 0.5.0

Support LLVM Flang and More of PRIF 0.5

Caffeine release 0.5.0:

  1. Implement more PRIF procedures:
    • prif_num_images_with_team
    • prif_get_team
    • prif_team_number
    • prif_get_strided, prif_get_strided_indirect
    • prif_put_strided, prif_put_strided_indirect
    • prif_lcobound_with_dim, prif_lcobound_no_dim
    • prif_ucobound_with_dim, prif_ucobound_no_dim
    • prif_coshape
    • prif_failed_images, prif_stopped_images, prif_image_status
    • prif_sync_team, prif_sync_memory
    • prif_size_bytes
  2. Add support for optional arguments for more PRIF procedures:
    • prif_this_image_no_coarray - team argument
  3. Improve CI and testing
    • Improve assertions in tests by using the assert library
    • Add CI action to compile and test 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. Starting in this release, we also build Caffeine and its dependencies with LLVM flang, but when building with this compiler, there is a current known bug in our test suite that we are working towards resolving.

Operating systems and architectures

We regularly test on * Linux: x8664 * macOS: x8664 and Apple Silicon

Full Changelog: https://github.com/BerkeleyLab/caffeine/compare/0.4.0...0.5.0

Scientific Software - Peer-reviewed - Fortran
Published by ktras 9 months ago

Caffeine - 0.4.0

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: x8664 * macOS: x8664 and Apple Silicon

Full Changelog: https://github.com/BerkeleyLab/caffeine/compare/0.3.0...0.4.0

Scientific Software - Peer-reviewed - Fortran
Published by ktras about 1 year ago

Caffeine - 0.3.0

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: x8664 * macOS: x8664 and Apple Silicon

Full Changelog: https://github.com/BerkeleyLab/caffeine/compare/0.2.0...0.3.0

Scientific Software - Peer-reviewed - Fortran
Published by ktras over 1 year ago

Caffeine - 0.2.0

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: https://github.com/BerkeleyLab/caffeine/compare/0.1.0...0.2.0

Scientific Software - Peer-reviewed - Fortran
Published by rouson over 1 year ago

Caffeine - Support Fortran 2018 non-coarray parallel features

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. πŸ”’

Scientific Software - Peer-reviewed - Fortran
Published by rouson almost 4 years ago