|
2 | 2 |
|
3 | 3 | ### v0.x.x - Unreleased
|
4 | 4 |
|
| 5 | +### v0.4.0 - April 2020 - "Bespoke" |
| 6 | + |
| 7 | +#### Compatibility |
| 8 | + |
| 9 | +Weave now targets Nim 1.2.0 instead of `devel`. This is the first Nim release |
| 10 | +that supports all requirements of Weave. |
| 11 | + |
| 12 | +#### Features |
| 13 | + |
| 14 | +Weave now provides an experimental "dataflow parallelism" mode. |
| 15 | +Dataflow parallelism is also known under the following names: |
| 16 | +- Graph parallelism |
| 17 | +- Stream parallelism |
| 18 | +- Pipeline parallelism |
| 19 | +- Data-driven parallelism |
| 20 | + |
| 21 | +Concretely this allows delaying tasks until a condition is met. |
| 22 | +This condition is called `Pledge`. |
| 23 | +Programs can now create a "computation graph" |
| 24 | +or a pipeline of tasks ahead of time that depends on one or more `Pledge`. |
| 25 | + |
| 26 | +For example a game engine might want to associate a pipeline of transformations |
| 27 | +to each frame and once the frame prerequisites are met, set the `Pledge` to `fulfilled`. |
| 28 | + |
| 29 | +The `Pledge` can be combined with parallel loops and programs can wait on specific |
| 30 | +iterations or even iteration ranges for example to implement parallel video processing |
| 31 | +as soon as a subset of the frame is ready instead of waiting for the whole frame. |
| 32 | +This exposes significantly more parallelism opportunities. |
| 33 | + |
| 34 | +Dataflow parallelism cannot be used with the C++ backend at the moment. |
| 35 | + |
| 36 | +Weave now provides the 3 main parallelism models: |
| 37 | +- Task Parallelism (spawn/sync) |
| 38 | +- Data Parallelism (parallel for loop) |
| 39 | +- Dataflow Parallelism (delayed tasks) |
| 40 | + |
| 41 | +#### Performance |
| 42 | + |
| 43 | +Weave scalability has been carefully measured and improved. |
| 44 | + |
| 45 | +On matrix multiplication, the traditional benchmark to classify the top 500 supercomputers of the world, Weave speedup on an 18-core CPU is 17.5x while the state-of-the-art Intel implementation using OpenMP allows 15.5x-16x speedup. |
| 46 | + |
5 | 47 | ### v0.3.0 - January 2020
|
6 | 48 |
|
7 | 49 | `sync(Weave)` has been renamed `syncRoot(Weave)` to highlight that it is only valid on the root task in the main thread. In particular, a procedure that uses syncRoot should not be called be in a multithreaded section. This is a breaking change. In the future such changes will have a deprecation path but the library is only 2 weeks old at the moment.
|
|
0 commit comments