We have a case in our development that a 3rd party library requires device stream pointer to be passed in to one of its APIs - stream might be one of the most common elements to be communicated between the modules as it requires a global management. Now OCCA has nicely implemented stream related APIs including wrapStream (although it seems only available through cpp APIs at the moment) which could provide an alternative for the situation. Only drawback of that is to introduce device native calls (CUDA or HIP for instance) in the application where all the other offloading implementations are nicely encapsulated by OCCA. If we have an OCCA API that returns native device stream pointer as a void* for the current stream set for any platform it's running on, it could help to minimize the platform-specific dependency in the application and keep it in OCCA layer.
We have a case in our development that a 3rd party library requires device stream pointer to be passed in to one of its APIs - stream might be one of the most common elements to be communicated between the modules as it requires a global management. Now OCCA has nicely implemented stream related APIs including wrapStream (although it seems only available through cpp APIs at the moment) which could provide an alternative for the situation. Only drawback of that is to introduce device native calls (CUDA or HIP for instance) in the application where all the other offloading implementations are nicely encapsulated by OCCA. If we have an OCCA API that returns native device stream pointer as a void* for the current stream set for any platform it's running on, it could help to minimize the platform-specific dependency in the application and keep it in OCCA layer.