Nasa paralell基准测试 - MPI错误

时间:2014-10-05 09:25:21

标签: c bash parallel-processing mpi benchmarking

我有一个非常特殊的问题。我需要为我的学校项目审查NASA并行基准测试,但我发现这是一个非常有问题的任务:-)起初,我尝试使用IS(整数排序),但代码无法编译,我发现,我需要重写 make.def 文件。所以我为 mpi.h 重写了它的变量并编译了它,但程序一直警告我:

Fatal error in PMPI_Comm_rank: Invalid communicator, error stack:
PMPI_Comm_rank(108): MPI_Comm_rank(comm=0x0, rank=0x6084e8) failed
PMPI_Comm_rank(66).: Invalid communicator

说实话,我真的不知道,我应该知道吗?我甚至尝试将旧的编译器更改为 cc gcc 等,但它似乎没有任何效果。我试图重写的最后一件事是变量CMPI_LIB,但我不知道如何正确地做到这一点。

非常感谢您的所有回复;-) 我很抱歉我的英语不好,我不是母语人士。


整个基准测试可供下载(cca 600kB):uloz.to/xTSEzTX8/npb3-3-1-zip

文件 is.c 我试图编译并启动:hostcode.sourceforge.net/view/2436

Makefile:hostcode.sourceforge.net/view/2437

文件 make.common - 负责编译具有特殊功能的文件等:hostcode.sourceforge.net/view/2438

我的 make.def 在这里:#veeylg84-46196 - BASH - Sourcecode

我的'基准文件夹中的文件结构':http://www.sourcepod.com/sozaoh48-46200

1 个答案:

答案 0 :(得分:3)

PMPI_Comm_rank(108): MPI_Comm_rank(comm=0x0, rank=0x6084e8) failed消息说明了很多。您的MPI_COMM_WORLD常量是0,而不是基于MPICH的情况(可以从错误消息的格式猜测)实现。它是MPICH(#define MPI_COMM_WORLD ((MPI_Comm)0x44000000))中的编译时常量和Open MPI中的运行时常量引用。造成此类错误的首要原因是混合MPI实现,即包括来自一个实现的mpi.h和链接到另一个实现的库。

从您的make.def可以看出,您从虚拟MPI实现中包含mpi.h并链接到真正的MPI库。这根本不会起作用。由于mpicc负责将正确的包含路径和库选项传递给后端编译器,因此您不必明确设置CMPI_LIBCMPI_INC,并且应该将它们留给而不是。这些是为MPI实现不提供编译器包装器(mpiccmpif90等)的情况保留的,并且必须明确指定所有选项,例如, MS-MPI。