Draft: Structured parameters and buffer dependencies - Part I
The long-term goal for this MR is to allow a Gaudi-like syntax for algorithm and reduce the number of input/outputs, making configuration and algorithm definitions more user-friendly and maintainable. As this goal involve a lot of changes in the backend, and in the user-facing api, this MR will be split in 2 parts. The first part focuses on the backend changes, while the 2nd will implement features that need change to all algorithms and lines.
Goals for part I:
- Implement reference counted shared buffer to manage data dependencies
- Decouple store and memory managers => remove tags from memory managers, make them behave like standard allocators
- Also free host arguments when their lifetime ends (there is no distinction between host and device in the scheduler, it is now part of the type)
- Make the output handler a functional algorithm
- Merge Host and device store => Remove HostBufferManager
- Add memory visualisation tool
Goals for part II:
- Decouple argument and buffer classes => allow storage of any struct in arguments
- Group together relevant buffers to reduce the number of input/output of algorithms
- Make algorithms adopt Gaudi's std::tuple<Out...> operator(In...) syntax
- Remove set_argument_size => do reserve directly in operator()
FYI @raaij @dovombru @cagapopo @sponce @graven @clemenci
Updated main loop:
Edited by Arthur Marius Hennequin
