我正在尝试比较其中一个在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
答案 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编译器。