无法使用OpenMPI使用OpenMP编译MPI程序

时间:2017-12-04 03:48:14

标签: fortran mpi openmp openmpi

我正在尝试比较其中一个在OpenMP中并行化的解算器;求解器在OpenMPI下使用Fixed Form Fortran 77并行运行; mpif77不允许我使用-fopenmp开关链接目标文件; Make不会创建可执行文件。我尝试使用gfortran单独编译OpenMP源文件,然后尝试将它们与mpif77链接 - 不起作用;当我不使用开关时,它会引发常见错误:

Undefined symbols for architecture x86_64:
  "_GOMP_parallel", referenced from:
      _parmatdiff_ in matdiff.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [solvercomp] Error 

1

我的问题是OpenMPI是否支持OpenMP,如果是,我如何确保'make'链接为OpenMP库中的函数创建的对象文件?

这是我的makefile的副本:

SOURCES = solvcomp.f matdiff.f seqjacobi.f seqconjgrad.f parsor.f
FCC = mpif77
MPIRUN = mpirun
OBJECTS = $(SOURCES:.f=.o)
TARGET = soln
FFLAGS = -o
CFLAGS = -c
NP = 4

all: $(TARGET) clean

$(TARGET): $(OBJECTS)
        $(FCC) $(FFLAGS) $(TARGET) $(OBJECTS)

$(OBJECTS): $(SOURCES)
        $(FCC) $(CFLAGS) $(SOURCES)

clean:
    rm -rf *.o *.dSYM

2 个答案:

答案 0 :(得分:1)

你的链接命令是假的

mpif77 -o -fopenmp a.out foo.o

尝试

LDFLAGS='-fopenmp -o'

就我而言,-o LDFLAGS中的RewriteCond %{QUERY_STRING} ^id=88&itemID=([0-9]*)$ RewriteRule ^index\.php$ https://www.mydomain.ac/item/item-detail/?itemID=%1 [L] 看起来非常混乱。

答案 1 :(得分:0)

OpenMPI编译器mpicc|mpic++|mpif70|...基本上是一个程序,它使用您需要的相应标志来调用后端编译器,以便包含必要的标头并与运行时库链接。

如果添加标志-showme,您将能够看到您使用的是哪个编译器。虽然OpenMP是标准,但编译器可能使用不同的标志来指示您的程序必须解释OMP构造并与OpenMP运行时库链接。您可以将-showme:link添加到link命令中,以查看将哪些选项传递给后端fortran编译器。

MPI和OpenMP是两种常用的并行编程模型,因此在您的程序中不应该有任何问题。

https://www.open-mpi.org/doc/v2.0/man1/mpicc.1.php