Openacc+MPI Fortran程序入门 [英] Getting started with OpenACC + MPI Fortran program

查看:35
本文介绍了Openacc+MPI Fortran程序入门的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可以工作的串行代码和一个可以工作的并行单GPU代码,它们是通过openacc并行化的。现在,我正试图通过在多个GPU上运行,采用MPI+openacc范例来提高并行性。我用Fortran-90编写代码,并使用NVIDIA的HPC-SDK的nvfortran编译器进行编译。

我有几个初学者级别的问题:

  1. 如何设置编译器环境以开始编写MPI+openacc代码。除了NVIDIA的HPC-SDK之外,还有什么额外要求吗?
  2. 假设我有一个在MPI+openacc设置下编写的代码,我如何准确地编译它?我需要编译两次吗?一个用于CPU(Mpif90),另一个用于GPU(Openacc)。使用make文件或某些编译命令的示例会很有帮助。
  3. GPU-DEVICE-1和GPU-DEVICE-2之间需要通信时,有没有办法直接通信,或者我应该通过[GPU-DEVICE-1]->;[CPU-HOST-1]->;[CPU-HOST-2]->;[GPU-DEVICE-2]
  4. 是否有实现MPI+openacc的Fortran代码示例?

推荐答案

正如@vladimir F指出的那样,您的问题非常广泛,因此如果您对特定的点有进一步的问题,您应该考虑单独发布每个点。也就是说,我会试着逐一回答。

  1. 如果您安装了NVIDIA HPC SDK,您应该拥有所需的一切。它将包括为openacc安装OpenMPI以及NVIDIA的HPC编译器。您还将拥有各种数学库,如果您也需要这些库的话。
  2. 使用mpif90进行编译。例如,mpif90 -acc=gpu将使用openacc构建包含GPU支持的文件,而不包含openacc的文件将正常编译。MPI模块应在编译期间自动找到,并且MPI库将链接到中。
  3. 您可以使用acc host_data use_device指令将数据的GPU版本传递给MPI。我没有使用MPI的Fortran示例,但它看起来类似于此文件中的调用。https://github.com/jefflarkin/openacc-interoperability/blob/master/openacc_cublas.f90#L19
  4. 此代码同时使用openacc和MPI,但没有使用我在3中引用的host_data指令。如果我找到其他指令,我会更新此答案。这是一种常见的模式,但目前我手头还没有开放的代码。https://github.com/UK-MAC/CloverLeaf_OpenACC

这篇关于Openacc+MPI Fortran程序入门的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆