Currently CUDA streams are managed by StreamManagerTy. It works very well. Now
we have the need that some resources, such as CUDA stream and event, will be
hold by libomptarget. It is always good to buffer those resources. What's more
important, given the way that libomptarget and plugins are connected, we cannot
make sure whether plugins are still alive when libomptarget is destroyed. That
leads to an issue that those resouces hold by libomptarget might not be
released correctly. As a result, we need an unified management of all the resources
that can be shared between libomptarget and plugins.
ResourcePoolTy is designed to manage the type of resource for one device.
It has to work with an allocator which is supposed to provide create and
destroy. In this way, when the plugin is destroyed, we can make sure that
all resources allocated from native runtime library will be released correctly,
no matter whether libomptarget starts its destroy.