Openacc+MPI Fortran程序入门 [英] Getting started with OpenACC + MPI Fortran program
本文介绍了Openacc+MPI Fortran程序入门的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个可以工作的串行代码和一个可以工作的并行单GPU代码,它们是通过openacc并行化的。现在,我正试图通过在多个GPU上运行,采用MPI+openacc范例来提高并行性。我用Fortran-90编写代码,并使用NVIDIA的HPC-SDK的nvfortran编译器进行编译。
我有几个初学者级别的问题:
- 如何设置编译器环境以开始编写MPI+openacc代码。除了NVIDIA的HPC-SDK之外,还有什么额外要求吗?
- 假设我有一个在MPI+openacc设置下编写的代码,我如何准确地编译它?我需要编译两次吗?一个用于CPU(Mpif90),另一个用于GPU(Openacc)。使用make文件或某些编译命令的示例会很有帮助。
- GPU-DEVICE-1和GPU-DEVICE-2之间需要通信时,有没有办法直接通信,或者我应该通过[GPU-DEVICE-1]->;[CPU-HOST-1]->;[CPU-HOST-2]->;[GPU-DEVICE-2]
- 是否有实现MPI+openacc的Fortran代码示例?
推荐答案
正如@vladimir F指出的那样,您的问题非常广泛,因此如果您对特定的点有进一步的问题,您应该考虑单独发布每个点。也就是说,我会试着逐一回答。
- 如果您安装了NVIDIA HPC SDK,您应该拥有所需的一切。它将包括为openacc安装OpenMPI以及NVIDIA的HPC编译器。您还将拥有各种数学库,如果您也需要这些库的话。
- 使用
mpif90
进行编译。例如,mpif90 -acc=gpu
将使用openacc构建包含GPU支持的文件,而不包含openacc的文件将正常编译。MPI模块应在编译期间自动找到,并且MPI库将链接到中。 - 您可以使用
acc host_data use_device
指令将数据的GPU版本传递给MPI。我没有使用MPI的Fortran示例,但它看起来类似于此文件中的调用。https://github.com/jefflarkin/openacc-interoperability/blob/master/openacc_cublas.f90#L19 - 此代码同时使用openacc和MPI,但没有使用我在3中引用的
host_data
指令。如果我找到其他指令,我会更新此答案。这是一种常见的模式,但目前我手头还没有开放的代码。https://github.com/UK-MAC/CloverLeaf_OpenACC
这篇关于Openacc+MPI Fortran程序入门的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文