2021-06-28 14:47:06 +00:00
|
|
|
# Taskpools
|
|
|
|
|
|
|
|
## API
|
|
|
|
|
|
|
|
The API spec follows https://github.com/nim-lang/RFCs/issues/347#task-parallelism-api
|
|
|
|
|
|
|
|
## Overview
|
|
|
|
|
|
|
|
This implements a lightweight, energy-efficient, easily auditable multithreaded taskpools.
|
|
|
|
|
|
|
|
This taskpools will be used in a highly security-sensitive blockchain application
|
|
|
|
targeted at resource-restricted devices hence desirable properties are:
|
|
|
|
|
|
|
|
- Ease of auditing and maintenance.
|
|
|
|
- Formally verified synchronization primitives are highly-sought after.
|
|
|
|
- Otherwise primitives are implemented from papers or ported from proven codebases
|
|
|
|
that can serve as reference for auditors.
|
|
|
|
- Resource-efficient. Threads spindown to save power, low memory use.
|
|
|
|
- Decent performance and scalability. The workload to parallelize are cryptography-related
|
|
|
|
and require at least 1ms runtime per thread.
|
|
|
|
This means that only a simple scheduler is required.
|
|
|
|
|
|
|
|
Non-goals:
|
|
|
|
- Supporting task priorities
|
|
|
|
- Being distributed
|
|
|
|
- Supporting GC-ed memory on Nim default GC (sequences and strings)
|
|
|
|
- Have async-awaitable tasks
|
|
|
|
|
|
|
|
In particular compared to [Weave](https://github.com/mratsim/weave), here are the tradeoffs:
|
|
|
|
- Taskpools only provide spawn/sync (task parallelism).\
|
|
|
|
There is no parallel for (data parallelism)\
|
|
|
|
or precise in/out dependencies (dataflow parallelism).
|
|
|
|
- Weave can handle trillions of small tasks that require only 10µs per task. (Load Balancing overhead)
|
|
|
|
- Weave maintains an adaptive memory pool to reduce memory allocation overhead,
|
|
|
|
Taskpools allocations are as-needed. (Scheduler overhead)
|
2021-06-29 14:49:53 +00:00
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
Licensed and distributed under either of
|
|
|
|
|
|
|
|
* MIT license: [LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT
|
|
|
|
* Apache License, Version 2.0, ([LICENSE-APACHEv2](LICENSE-APACHEv2) or http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
|
|
|
|
at your option. This file may not be copied, modified, or distributed except according to those terms.
|