Nanos++ with GPU support

Since several weeks ago, the runtime of Nanos++ has support for GPU devices. Although it is still under development, we have launched a first release that can be downloaded here. The main features are:

  • Multi-GPU support
  • Data management is transparent to the programmer
  • Analysis of application execution through trace generation

So, Nanos++ with GPU support allows us to run tasks on GPU devices in parallel. The application must provide the appropriate GPU kernels and the system will schedule them to run on the GPUs, taking into account data dependences between tasks and performing the appropriate memory transfers to guarantee program's correctness.The support for multi-GPU can be quite tedious when it is done manually by the programmer. In our system, there is no need to perform additional actions to increase the number of GPUs the programmer wants to use to run an application. There is an environment variable and a configuration flag to set the number of GPUs that Nanos++ will use.At low level, the system interacts with NVIDIA CUDA runtime, so it is mandatory that it is installed on the machine and that GPUs support CUDA.In addition, we are developing new features for the runtime:

  • Overlapping of GPU execution and data transfers (fully developed)
  • Take into account GPU memory capacity (under development)
  • Make scheduling policies aware of data locality (planned for the future)
  • Allow task execution on both host and device sides (planned for the future)