This is the top level issue to track all the work we plan to do to make the glow runtime supports concurrent execution, pipelining, batching and so on.
At a high level, the idea for the runtime is to be able to:
Among other things, the glow runtime will have to:
Right now, we started by splitting the compilation and runtime stages properly.
This work is tracked in:
Adding #2125 to the list. Work is being done on the HostManager. This is part of the new runtime design. The design has five major components: HostManager, Partitioner, Provisioner, DeviceManager, and Executor.
Partitioner:
This component is responsible for breaking up the provided network into subnetworks that can be run on multiple devices. It does its partitioning based on hardware constraints and heuristics to optimize execution time. It outputs a DAG to be used by the other components.
DeviceManager:
The DeviceManager handles interactions with the device. The manager handles initializing the device, copying constants to the device and preparing the device for execution. It also handles unloading networks from the device.
Provisioner:
The Provisioner takes the output from the partitioner and assigns sub networks to specific devices updating the DAG with device assignments. The Provisioner handles the code generation part of compilation and calls into the device manager to load the subnetworks to the device.
Executor:
The Executor handles the execution of the network. It walks the DAG calling execution of each sub network in accordance with their dependencies.
HostManager:
The HostManager is the container for the other components. It serves as the interface externally, handling network init and run requests. The HostManager routes a request through the other components and holds the DAGs for each network.
Most helpful comment
Adding #2125 to the list. Work is being done on the HostManager. This is part of the new runtime design. The design has five major components: HostManager, Partitioner, Provisioner, DeviceManager, and Executor.
Partitioner:
This component is responsible for breaking up the provided network into subnetworks that can be run on multiple devices. It does its partitioning based on hardware constraints and heuristics to optimize execution time. It outputs a DAG to be used by the other components.
DeviceManager:
The DeviceManager handles interactions with the device. The manager handles initializing the device, copying constants to the device and preparing the device for execution. It also handles unloading networks from the device.
Provisioner:
The Provisioner takes the output from the partitioner and assigns sub networks to specific devices updating the DAG with device assignments. The Provisioner handles the code generation part of compilation and calls into the device manager to load the subnetworks to the device.
Executor:
The Executor handles the execution of the network. It walks the DAG calling execution of each sub network in accordance with their dependencies.
HostManager:
The HostManager is the container for the other components. It serves as the interface externally, handling network init and run requests. The HostManager routes a request through the other components and holds the DAGs for each network.