I’m not yet sure on a complete set of requirements. Currently the idea is to add a minimal set of language keywords that allow the generation of an OpenCL kernel from a Fortran subroutine. Eventually I’d like to be able to use assumed-shape arguments, multi-dimensional arrays, derived-types, optional args and operator overloading in OpenCL, just using existing Fortran syntax.
Memory management and device synchronization can be handled purely through the OpenCL API, but incorporating this into the Fortran syntax could also be useful.
Kokkos is a higher abstraction level than OpenCL C, but it looks like an OpenCL backend could be made from your C++ backend. There’s also the SYCL framework based on OpenCL which is more similar to Kokkos in abstraction level. Very exciting!