HPC systems employ a growing variety of compute accelerators with different architectures and from different vendors. Large scientific applications are required to run efficiently across these systems but need to retain a single code-base in order to not stifle development. Directive-based offloading programming models set out to provide the required portability, but, to existing codes, they themselves represent yet another API to port to. Here, we present our approach of porting the GPU-accelerated particle-in-cell code PIConGPU to OpenACC and OpenMP target by adding two new backends to its existing C++-template metaprogramming-based offloading abstraction layer alpaka and avoiding other modifications to the application code. We introduce our approach in the face of conflicts between requirements and available features in the standards as well as practical hurdles posed by immature compiler support.
翻译:HPC系统使用各种不同建筑和不同销售商的计算加速器。大型科学应用需要在这些系统之间有效运行,但需要保留一个单一的代码库,以避免抑制发展。基于指令的卸载编程模型设定了必要的可移动性,但对现有代码来说,它们本身代表着另一个可以移植的API。在这里,我们介绍了我们将GPU加速的微粒细胞代码 PICONGPU 移植到开放ACC和 OpenMP 目标的方法,在现有的C++-template元程序的基础上卸载抽象藻层,并避免对应用代码的其他修改。我们介绍了我们面对标准中的要求和现有特点之间的冲突以及不成熟的编译者支持造成的实际障碍的方法。