Dynamic scheduler
A dynamic scheduler is now used for assigning and managing the GPU memory. A chunk of data of a configurable size is malloc'ed only once at the initialization of the Stream, and it is used throughout the sequence to virtually allocate and free space as required.
- A memory manager has been added to manage the space allocated on the GPU. It can free memory and allocate memory, returning just the offset of the alloc'ed memory.
- BaseDynamicScheduler is a simple dynamic scheduler that is fed with the data dependencies for all algorithms, and determines upon each sequence step what space to free or allocate.
The code in the stream folder has been duly refactored into the following folders:
- gear contains all metaprogramming tricks for Sequence, tuple indices checking and arguments.
- handlers contains the Handler machinery and custom Handlers defined by the developers.
- memory_manager is where all variants of memory management are stored. For the moment, a single one.
- scheduler contains the possible schedulers. The static scheduler is kind of deprecated, but the dynamic one could be extended.
- sequence contains the bulk of the sequence execution.
- sequence_setup is intended to be modified upon adding new algorithms.