Recent Releases of Caffeine
Caffeine - 0.5.2
Support PRIF 0.5 Collectives Subroutines, Events, Notifications, and more
Caffeine release 0.5.2:
- Added distributed-memory platform support
- Implemented remaining and updated existing Collective Subroutines with PRIF 0.5-compliant interfaces:
prif_co_max_characterprif_co_min_characterprif_co_reduceprif_co_max,prif_co_min,prif_co_sum
- Implemented remaining Strided Coarray Access and Contiguous Coarray Access procedures that include notifications:
prif_put_with_notify,prif_put_with_notify_indirectprif_put_indirect_with_notify,prif_put_indirect_with_notify_indirectprif_put_strided_with_notify,prif_put_strided_with_notify_indirectprif_put_strided_indirect_with_notify,prif_put_strided_indirect_with_notify_indirect
- Implemented Events and Notifications:
prif_notify_waitprif_event_post,prif_event_post_indirectprif_event_waitprif_event_query
- Implemented remaining SYNC Statements:
prif_sync_images
- Implemented remaining Storage Management procedures:
prif_alias_create,prif_alias_destroy
- Implemented remaining Coarray Queries procedures:
prif_set_context_data,prif_get_context_dataprif_image_index_with_teamprif_image_index_with_team_number(partial support)
- Implemented remaining Image Queries procedures:
prif_this_image_with_coarray,prif_this_image_with_dimprif_num_images_with_team_number(partial support)
- Fixed a number of critical defects
- Fixed
prif_sync_allsynchronizes the wrong team - issue #208 - Fixed missing required synchronization for
prif_change_teamandprif_end_team- issue #209 - Fixed coarray handles not correctly registered in team list - issue #210
- Fixed
- 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:
- Implement more PRIF procedures:
prif_num_images_with_teamprif_get_teamprif_team_numberprif_get_strided,prif_get_strided_indirectprif_put_strided,prif_put_strided_indirectprif_lcobound_with_dim,prif_lcobound_no_dimprif_ucobound_with_dim,prif_ucobound_no_dimprif_coshapeprif_failed_images,prif_stopped_images,prif_image_statusprif_sync_team,prif_sync_memoryprif_size_bytes
- Add support for optional arguments for more PRIF procedures:
prif_this_image_no_coarray-teamargument
- Improve CI and testing
- Improve assertions in tests by using the
assertlibrary - Add CI action to compile and test with LLVM
flang
- Improve assertions in tests by using the
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:
- Updates and adds interfaces and named constant definitions to the
prifmodule, 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_pointerandprif_register_stop_callback - Replace integer kinds
c_intmax_twithc_int64_t - Update
prif_allocate_coarrayinterface and definition
- Add interfaces and definitions for
- Remove pure from
prif_error_stopand update bothprif_error_stopandprif_stopto support PRIF semantics - 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
- Updates and adds interfaces and named constant definitions to the
prifmodule to support the latest version of the PRIF specification, revision 0.4 - Add basic team support
- Enables FORM TEAM and CHANGE TEAM
- Collectives and coarray allocations work on the current team
- Adds an implementation status doc
- Updates the installer script to allow passing configure options to GASNet
- 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
- A new
prifmodule providing the interface bodies for all of procedures in the Parallel Runtime Interface for Fortran (PRIF) procedures, - A symmetric heap for managing the memory associated with intrinsic-type coarrays and derived-type coarrays with no
allocatableorpointercomponents, - A non-symmetric, shared heap for managing derived-type coarrays with
allocatableorpointercomponents, and - An initial working implementation of
contiguousRemote 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π andprif_error_stopπ§― with variableintegerorcharacterstop codes - Image enumeration:
prif_this_imageπΌοΈ andprif_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_symmetricfunctions - Coarray RMA: Contiguous RMA via the
prif_putandprif_getfunctions - Global synchronization:
prif_sync_allπ§± - Collective subroutines:
prif_co_min,prif_co_max,prif_co_sum,prif_co_broadcastπ£, andprif_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_reduceimplementation- Assumes the user-provided
prif_co_reduceoperationfunction is commutative, - Assumes no user-initiated communication happens during the execution of the user-defined
operationreduction function, and - Does not support derived type arguments.
- Assumes the user-provided
- Many of the parallel features listed above as supported do not contain support for the
optionalarguments to the corresponding PRIF routines. For example, theprif_this_image,prif_num_images, andprif_sync_allroutines accept theoptionalarguments but do not support the semantics of theoptionalarguments.
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:
stopanderror stopstatements with variableintegerorcharacterstop codes π - Image enumeration:
this_image()πΌοΈ andnum_images()π’ functions - Global synchronization: the
sync allstatement π§± - Collective subroutines:
co_min,co_max,co_sum,co_broadcastπ£, andco_reduceπ₯
Limitations
- The current
co_reduceimplementation- Assumes the user-provided
co_reduceoperationfunction is commutative, - Assumes no user-initiated communication happens during the execution of the user-defined
operationreduction function, and - Does not support derived type arguments.
- Assumes the user-provided
- The
this_image()andnum_images()functions do not accept any of the optional arguments. - The
caf_sync_allsubroutine does not support thesync allstatement'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