OpenMP에서 병렬 처리되는 솔버 중 하나와 솔버를 비교하려고합니다. 솔버는 모두 Fixed Form Fortran 77을 사용하는 OpenMPI에서 병렬로 실행됩니다. mpif77은 -fopenmp 스위치로 오브젝트 파일을 링크시키지 않습니다. make는 실행 파일을 생성하지 않습니다. gfortran을 사용하여 OpenMP 소스 파일을 개별적으로 컴파일하려고 시도한 다음 mpif77
과 링크하려고했습니다. 작동하지 않습니다. 예 경우OpenMPI를 사용하여 OpenMP로 MPI 프로그램을 컴파일 할 수 없습니다.
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을 수행하고, 내가 링크 기능으로 생성 된 오브젝트 파일을 '할'수 있도록 어떻게 : I 스위치를 사용하지 않는 경우는 일반적인 오류가 발생합니다 OpenMP 라이브러리에서? 여기
내 메이크 파일의 복사본입니다 :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
어떤 MPI 버전을 사용하고 있습니까? 'mpif77 -fopenmp'에 의해 생성 된 에러를 게시 할 수 있습니까? –
OpenMPI는 OpenMP가 표준 인 반면 MPI의 많은 구현 중 하나 일뿐입니다. 그래서 아주 다른 두 가지. 우리는 세부 사항을 더 알 필요가 있습니다 ([ask] 참조). 어떤 버전을 사용합니까? 'mpif77 -v'는 무엇을 인쇄합니까? 'make '에 의해 실행 된 마지막 명령은 어떻게 생겼습니까? 'make '의 완전한 출력은 어떻게 생겼습니까? –
또한 "mpif77을 사용하여 개체 파일을 -fopenmp 스위치"*와 연결할 수없는 경우 정확히 무엇이 발생 했습니까? 세부 사항, 세부 사항, 세부 사항이 필요합니까? 오류 메시지가 있습니까? 'make'는 어떤 코만도를 실행합니까? * 완성 된 출력은 무엇입니까? 오류 메시지가 있습니까? 어디에서 플래그를 Makefile에 넣었습니까? –