Feature #3115

Updated by Artem Zhmurov 10 months ago

Create a class that will manage GPU streams and context. The first version may be nothing more than just a collection of streams (PME, local, non-local and update streams) and OpenCL context. Everything would be constructed with the object and have an appropriate getters. The streams are then should be passed to all the consumers and the management of streams/contexts there should be removed.

Tentative plan:
* Make a plain object.
* Connect to PME.
* Connect to NBNXM/Bonded.

Will solve the following issues:
* Currently we have two contexts for OpenCL. Consequently one has to make sure that they are in-sync for the device buffers. OpenCL
* It is not transparent when and if certain streams are created. This leads to necessity of having "if (pmeStream != nullptr) {...}" constructions.