MPI 无法编译基准(未定义引用“MPI_Type_extent”)
MPI fail to compile benchmark (undefined reference to `MPI_Type_extent')
我在编译基准时遇到问题。
我是如何编译的:
make MPI_HOME=/usr/mpi/gcc/openmpi-4.0.0rc2/
生成文件:
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 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: In function test_allgatherv:
/mswg2/E2E/Regression_logs/BabyZeusCluster/MPI/4.5-0.0.9.0_OFED/hpc_tests/mpi/misc/un_contiguous.c:236:
undefined reference to MPI_Type_extent
我该如何解决这个问题?
MPI_Type_extent()
很久以前就已被弃用并从 MPI 标准中删除。
从 Open MPI 4 开始,这些删除的子例程默认不再构建。
您最好的选择是使您的代码现代化(并改用 MPI_Type_get_extent()
。
如果这不是一个选项(例如,第 3 方二进制库正在使用它),那么您必须重新安装 Open MPI 和 configure --with-mpi1-compatibility ...
。
(您可能还想通知您的供应商,因为此解决方法可能已从 Open MPI 5 中删除)
我在编译基准时遇到问题。
我是如何编译的:
make MPI_HOME=/usr/mpi/gcc/openmpi-4.0.0rc2/
生成文件:
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 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: In function test_allgatherv: /mswg2/E2E/Regression_logs/BabyZeusCluster/MPI/4.5-0.0.9.0_OFED/hpc_tests/mpi/misc/un_contiguous.c:236: undefined reference to MPI_Type_extent
我该如何解决这个问题?
MPI_Type_extent()
很久以前就已被弃用并从 MPI 标准中删除。
从 Open MPI 4 开始,这些删除的子例程默认不再构建。
您最好的选择是使您的代码现代化(并改用 MPI_Type_get_extent()
。
如果这不是一个选项(例如,第 3 方二进制库正在使用它),那么您必须重新安装 Open MPI 和 configure --with-mpi1-compatibility ...
。
(您可能还想通知您的供应商,因为此解决方法可能已从 Open MPI 5 中删除)