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::index
now represents indices assize_t
Added
- Add
clear_queues
argument toworld::sync
, to optionally retain all messages from the previous superstep. - Expose
clear
method ofqueue
. - Add DGEMM example (Cannon’s algorithm).
Changed
- Default barrier for thread backend is now
std::barrier
. - Added
Barrier
concept, and constrain the associatedenvironment
andworld
parameters. - Span based coarray puts are now based on
std::span
.
Removed
bulk::span
was removed in favor ofstd::span
.
Fixed
- Prevent
bulk::sum
andbulk::product
from silently truncating values (@TimoMaarse, #11) - Fix const correctness of
bulk::product(bulk::world&, T)
. - Fix data race in shared state creation for
world::split
in the thread backend. - Explicitly cast to
T*
in the implementation ofbulk::coarray:data
.
2.0.0 - 2020-03-27
Breaking changes
- Use
size_t
for indices in arrays and slices coarray::data
now returns aT*
instead ofvoid*
- The iterator overload for
coarray::put
now requires an explicit offset - Index type for D = 1 now wraps an
int
, instead of a singleton array
Added
- Add
foldl
andfoldl_each
for coarrays. - Add aliases for common folds:
sum
,product
,min
, andmax
, for values, variables and coarrays. Example:bulk::max(world, s + 1) == p
. - Add
bulk::span
for coarrays, allowing contiguous sequences as slice data sources in addition tostd::vector
. - Add
coarray::data
to 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_change
to timer class (@SdeBerg, #10)
Changed
- Use
size_t
for indices in arrays and slices coarray::data
now returns aT*
instead ofvoid*
- The iterator overload for
coarray::put
now 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
bulk
andbulk_[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
success
counter - Fix coarray unittest relying on
p > 2
- Fix
-Werror=format-security
issue inworld::log
Changed
- Update default value for
start_value
offoldl
to{}
from0
for non-numeric types - Allow different type for accumulator of
foldl
1.1.0 - 2018-10-10
Added
- Add a spinlock barrier
bulk::thread::spinning_barrier
to 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::put
take values by const reference - Allow non-uniform local array sizes in
coarray
- Require
T
to satisfyis_trivially_copyable
forcoarray<T>
- Add more type safety checks to (de-)serialization
- (De-)serialization in
var
andfuture
now 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::string
variables and queues - Add support for array components in messages, i.e.
queue<T[], U, V, ...>
- Deprecate
processor_id
in favor ofrank
, renamed{next,prev}_processor
to{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.