Changelog
All notable changes to Bulk will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
3.0.0 - 2021-08-19
Breaking changes
- Bulk now requires C++20.
bulk::indexnow represents indices assize_t
Added
- Add
clear_queuesargument toworld::sync, to optionally retain all messages from the previous superstep. - Expose
clearmethod ofqueue. - Add DGEMM example (Cannon’s algorithm).
Changed
- Default barrier for thread backend is now
std::barrier. - Added
Barrierconcept, and constrain the associatedenvironmentandworldparameters. - Span based coarray puts are now based on
std::span.
Removed
bulk::spanwas removed in favor ofstd::span.
Fixed
- Prevent
bulk::sumandbulk::productfrom silently truncating values (@TimoMaarse, #11) - Fix const correctness of
bulk::product(bulk::world&, T). - Fix data race in shared state creation for
world::splitin the thread backend. - Explicitly cast to
T*in the implementation ofbulk::coarray:data.
2.0.0 - 2020-03-27
Breaking changes
- Use
size_tfor indices in arrays and slices coarray::datanow returns aT*instead ofvoid*- The iterator overload for
coarray::putnow requires an explicit offset - Index type for D = 1 now wraps an
int, instead of a singleton array
Added
- Add
foldlandfoldl_eachfor coarrays. - Add aliases for common folds:
sum,product,min, andmax, for values, variables and coarrays. Example:bulk::max(world, s + 1) == p. - Add
bulk::spanfor coarrays, allowing contiguous sequences as slice data sources in addition tostd::vector. - Add
coarray::datato access the underlying (sequential) storage of coarrays. - Allow externally managed data buffers for
coarray. - Add support for splitting a world into multiple parts, allowing subset syncs and communication. See also
bulk::world::split. - Add
get_changeto timer class (@SdeBerg, #10)
Changed
- Use
size_tfor indices in arrays and slices coarray::datanow returns aT*instead ofvoid*- The iterator overload for
coarray::putnow requires an explicit offset - Index type for D = 1 now wraps an
int, instead of a singleton array
Fixed
- Fixed ‘element owner’ and ‘local <-> global’ computations for block partitionings with sizes that are not perfect divisors
- Fixed virtual qualifications on a number of internal functions
1.2.0 - 2018-11-02
Added
- Add CMake targets
bulkandbulk_[backend] - Add partitionings: cyclic, block, tree, rectangular, Cartesian
- Add parallel scientific computing examples and documentation
- Add
partitioned_array - Add Travis CI support
- Add
world::log_once
Fixed
- Remove duplicate sync from
foldl - Fix certain unittests relying on shared-memory access to
successcounter - Fix coarray unittest relying on
p > 2 - Fix
-Werror=format-securityissue inworld::log
Changed
- Update default value for
start_valueoffoldlto{}from0for non-numeric types - Allow different type for accumulator of
foldl
1.1.0 - 2018-10-10
Added
- Add a spinlock barrier
bulk::thread::spinning_barrierto the thread backend, which is now used by default - Add citation instruction to README
1.0.0 - 2018-02-27
Added
- Backend for the Epiphany coprocessor
Fixed
- Let
coarray::image::puttake values by const reference - Allow non-uniform local array sizes in
coarray - Require
Tto satisfyis_trivially_copyableforcoarray<T> - Add more type safety checks to (de-)serialization
- (De-)serialization in
varandfuturenow avoids redundant memory allocation and copying, by making the memory buffer objects non-owning
0.2.0 - 2017-08-09
Added
- Add support for
std::stringvariables and queues - Add support for array components in messages, i.e.
queue<T[], U, V, ...> - Deprecate
processor_idin favor ofrank, renamed{next,prev}_processorto{next, prev}_rank
Fixed
- Fixed bug in MPI backend where messages could get truncated
0.1.0 - 2017-06-01
- Initial release. A complete modern replacement for BSPlib.