Releases: orxfun/orx-parallel
Releases · orxfun/orx-parallel
Direct Parallelization of VecDeque, SplitVec and FixedVec
Upgrades the concurrent iterator dependency which will enable parallelization of the following additional collections:
alloc::collections::VecDeque
orx_split_vec::SplitVec
orx_fixed_vec::FixedVec
v2: Redesign parallelization traits
Parallel computation through iterators is re-designed.
- Updates in the downstream crates are integrated, specifically the improvements in
ConcurrentIter
crate, v2.0, are benefited. - Functional compositions are re-designed. This led to improvements in performance, as well as, simplification of the code and implementations.
- In order to achieve this, required abstractions over values and arrays (in the mathematical sense) is defined. This allows us to perform on a value or a collection of values using the same generic code, while the actual implementation is monomorphized and optimized under the hood.
- With this design, we are required to have only four generic computational variants of the iterators without loss of performance:
- empty -> this is equivalent to the input concurrent iterator source, no computation is defined over it yet.
- map -> this is a map operation on the input in the classical sense
- xap -> this on the other hand is a map with superpowers, it is a generalization of (i) one-to-one map, (ii) filter-map and (iii) flat-map operations.
- xap-filter-xap -> finally, this is a sequence of xap, followed by a filter, followed by another xap.
- These four variants are sufficient to represent all possible iterator compositions without loss of performance due to abstraction.
- Significant performance improvements achieved and reported.
- The concepts defined in orx_iterable are brought to this crate defining traits such as
IntoParIter
,Parallelizable
andParallelizableCollection
. - Extensibility of input collections through concurrent iterators is defined.
ParallelRunner
is converted into a trait. This allows for customization of the parallel executor. Therefore, it enables improvements in performance in parallel workstreams. Meanwhile, a performant default parallel executor is provided.- The complexity of collecting ordered or in-arbitrary-order is resolved using the
CollectOrder
parameter. - The api is extended by enabling new methods such as
inspect
. - Contribution guideline is revised.
GenericIterator
defined mainly for experimentation purposes.GenericIterator
is a generalization of sequential iterators, rayon's parallel iterators and orx-parallel's parallel iterators. The computation can be defined as a composition of iterator transformations in the same way and can be executed with either of the variants.- ci.yml is added.
- Fixes #16
- Fixes #26
Upgrade PseudoDefault dependency
Merge pull request #49 from orxfun/Upgrade-PseudoDefault-dependency Upgrade PseudoDefault dependency
Dual license
Merge pull request #48 from orxfun/dual-license dual license
Use of Collection constrained PinnedVecs
Upgraded pinned vectors to v3.12
Upgraded dependencies with no_std support
1.11.0 Merge pull request #44 from orxfun/upgraded-dependencies-with-no_std-…
Unordered iteration is revisited
Unordered iteration is revisited
- Upgraded the dependency to concurrent iterator to 1.27.0; see the release notes.
- Syntax for creating a parallel iterator from a sequential iterator is fixed.
- prior:
inputs.into_con_iter().into_par()
. - new:
inputs.iter().par()
- prior:
- Parallel reductions use transformation into
ConcurrentIterX
to have the performance benefits whenever possible. collect_x
executions use transformation intoConcurrentIterX
to have the performance benefits whenever possible.
ConIterOfIter simplification and performance
Additionally iter-map-collect benchmarks are defined.
Upgrade queue and iter deps
With these upgrades, all failing miri tests pass.
- orx-priority-queue = "1.3"
- orx-concurrent-iter = "1.25"
ConVecIter early exit memory leak issue is fixed
The fix is applied in one of the dependencies, see here: https://github.com/orxfun/orx-concurrent-iter/releases/tag/1.24.0