使用mpif90编译OpenACC+MPI Fortran代码报-acc=gpu选项无法识别错误
OpenACC+MPI Fortran编译报错修复方案
报错根因
你环境中默认的mpif90底层绑定的是GNU Fortran 9.3,该版本gfortran不支持OpenACC专属的-acc系列编译选项,因此会抛出无法识别命令行选项的错误。
具体修复步骤
- 切换MPI编译器底层绑定为已安装的nvfortran
MPI的编译器包装器支持指定底层编译器:
如果你使用的是OpenMPI,编译前执行export OMPI_FC=nvfortran即可临时生效,要永久生效可以将该行写入~/.bashrc后执行source ~/.bashrc
如果你使用的是MPICH,对应环境变量为MPICH_FC=nvfortran - 修改Makefile编译参数适配nvfortran与A6000显卡
A6000属于安培架构,算力版本为8.6,修改FFLAG为适配参数:FC= mpif90 # 新增-ta参数指定显卡架构,开启统一内存,打印加速编译信息 FFLAG = -acc=gpu -fast -mcmodel=medium -ta=tesla:cc86,managed -Minfo=accel - 修正后的完整Makefile参考
OBJECTS = Main.o Module.o Pre_processing.o boundary_conditions.o \ interpolation.o viscous_fluxes.o MODULES = Module.mod CASE = Riemann.f90 FC= mpif90 FFLAG = -acc=gpu -fast -mcmodel=medium -ta=tesla:cc86,managed -Minfo=accel output: a.out a.out: $(MODULES) $(OBJECTS) cases/$(CASE) $(FC) $(FFLAG) $(OBJECTS) cases/$(CASE) -o a.out %.o: %.f90 $(FC) $(FFLAG) -c $< %.mod: %.f90 $(FC) $(FFLAG) -c $< .PHONY: clean clean : rm -f *.o *.mod *.out *.qdrep
运行验证
编译完成后,可直接用mpirun -np 2 ./a.out启动双进程对应两块A6000显卡运行,nvfortran编译的OpenACC程序会自动将每个MPI进程绑定到对应本地显卡。
内容的提问来源于stack exchange,提问作者Dumbledore Albus
相关产品推荐
相关产品推荐

