Per-op allocs: can we get these all to zero?
The benchmark builds read streams at three abstraction levels on beman::execution and beman::execution::task to measure per-operation cost and allocations across execution models.
Per-operation allocation counts for I/O read_some, three stream abstraction levels:
awaitable (capy::task) native: 0 abstract: 0 type-erased: 0
sender (pipeline) native: 0 abstract: 1 type-erased: 1
sender (beman::task) native: 0 abstract: 1 type-erased: 1
The awaitable path preallocates at stream construction because coroutine_handle is already type-erased. The sender path heap-allocates per operation because connect produces a type-dependent operation state.
github.com/cppalliance/capy/tree/develop/bench/beman
Can someone help me get the sender rows to zero?
Here's a more detailed supporting analysis:
https://gist.github.com/sgerbino/2a64990fb221f6706197325c03e29a5e
https://redd.it/1sgvh2o
@r_cpp
Post #24942
17