In the times in which we are witnessing the emergence of new high-performance computational technologies (like GPUs, many-cores processors like Knight Landing) and, along with them, programming tools and libraries (CUDA, OpenACC, OpenMP, OpenCL, …) how ready is Fortran to cope with that?
Of course, we can always do it the hard way, combine our codes with codes or directives for any of the above mentioned libraries, plus traditional MPI, compile them with proper compiler and flags and run, but that clearly brings concerns on portability. You may spend many months learning CUDA, tuning your code for Nvidia GPUs, but that will all be in vein should the next super-computer available to you is not Nvidia based.
The question of Performance, Portability, and Productivity in HPC (P3HPC) naturally arises, and has been addressed for some time now with libraries such as KOKKOS or RAJA introducing portable performance through abstraction - but these are geared towards C++ codes. Even new computer languages such as Julia with native support for parallelism on a plethora of hardware architectures. But Julia is not Fortran.
I wonder, how is Fortran going to cope with these emerging technologies? I am not sure if there is a Fortran model for performance and portability across various and emerging computer architectures. Any thoughts on this? (I might be missing something obvious. Do coarrays (which I never used, I am all into MPI), for example, hold a potential to embed abstraction of hybrid HPC platforms?)