MPI не может скомпилировать эталонный тест (неопределенная ссылка на `MPI_Type_extent ') - PullRequest
0 голосов
/ 22 октября 2018

У меня проблема с компиляцией теста.

Как мне скомпилировать:

make MPI_HOME = / usr / mpi / gcc / openmpi-4.0.0rc2 /

make-файл:

SRC_C = $(wildcard *.c)
OBJ_C = $(subst .c$,.o,$(SRC_C))
EXE_C = $(subst .c$,,$(SRC_C))

SRC_F = $(wildcard *.f)
OBJ_F = $(subst .f$,.o,$(SRC_F))
EXE_F = $(subst .f$,,$(SRC_F))
CFLAGS = -g

MPI_HOME=
CC=$(MPI_HOME)/bin/mpicc
F90=$(MPI_HOME)/bin/mpif90

all: all-c all-f

all-c: $(OBJ_C)
        $(foreach t,$(EXE_C),$(CC) -o $(t) $(t).o -lm;)

$(OBJ_C): %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@

$(EXE_C): $(OBJ_C)
        $(CC) -o $* $@

all-f: $(OBJ_F)
        $(foreach t,$(EXE_F),$(F90) -o $(t) $(t).o;)

$(OBJ_F): %.o: %.f
        $(F90) -c $(CFLAGS) $< -o $@

$(EXE_F): $(OBJ_F)
        $(F90) -o $* $@

clean:
        @rm -f $(OBJ_F) $(OBJ_C) $(EXE_C) $(EXE_F)

после запуска make-файла

make MPI_HOME=/usr/mpi/gcc/openmpi-4.0.0rc2/

makefile doing this:                                                                                                                                
/usr/mpi/gcc/openmpi-4.0.0rc2//bin/mpicc -c -g ctxalloc.c
-o ctxalloc.o

/usr/mpi/gcc/openmpi-4.0.0rc2//bin/mpicc -c -g un_contiguous.c -o un_contiguous.o

/usr/mpi/gcc/openmpi-4.0.0rc2//bin/mpicc -c -g allgather_fail.c -o allgather_fail.o

/usr/mpi/gcc/openmpi-4.0.0rc2//bin/mpicc -o allgather_fail allgather_fail.o -lm;

/usr/mpi/gcc/openmpi-4.0.0rc2//bin/mpicc -o un_contiguous un_contiguous.o -lm;

 /usr/mpi/gcc/openmpi-4.0.0rc2//bin/mpicc -o ctxalloc ctxalloc.o -lm;

вывод:

un_contiguous.o: в функции test_allgatherv: / mswg2/E2E/Regression_logs/BabyZeusCluster/MPI/4.5-0.0.9.0_OFED/hpc_tests/mpi/misc/un_contiguous.c:236: неопределенная ссылка на MPI_Type_extent

как это исправить?

1 Ответ

0 голосов
/ 22 октября 2018

MPI_Type_extent() устарела и удалена из стандарта MPI довольно давно.

Начиная с Open MPI 4, эти удаленные подпрограммы больше не собираются по умолчанию.

Ваша лучшаявариант - модернизировать ваш код (и использовать вместо него MPI_Type_get_extent().

Если это не вариант (например, сторонняя бинарная библиотека использует это), то вам придется переустановить Open MPI и configure --with-mpi1-compatibility .... (Возможно, вы также захотите уведомить своего поставщика, поскольку этот обходной путь может быть удален из Open MPI 5)

...