【问题标题】:Nasa paralell benchmarks - MPI error美国国家航空航天局并行基准 - MPI 错误
【发布时间】:2014-10-05 09:25:20
【问题描述】:

我有一个非常特殊的问题。我需要为我的学校项目审查 NASA Parallel Benchmarks,但我发现这是一个非常有问题的任务 :-) 起初,我尝试使用 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

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

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


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

我正在尝试编译和启动的文件 is.c:hostcode.sourceforge.net/view/2436

生成文件:hostcode.sourceforge.net/view/2437

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

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

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

【问题讨论】:

  • 哪个程序导致错误?源代码看起来如何?它的编译命令是什么样子的?你有哪个 MPI 实现?您的问题目前可能无法回答。
  • 我的错误,现在我尝试改进一下,我添加了一个下载整个基准测试的链接(它是一个非常小的包)。我认为,唯一需要更改的是“MPI 链接器”CMPI_LIB 的变量,但我不知道应该分配哪个程序给它。该错误是由编译 is.c 创建的程序引起的,并且我使用嵌入式 Makefile 进行编译 - 我应该在此处发布所有代码,这样您就不必下载存档了吗?如果更好,请随时告诉我 :-) 我的 'mpicc' 版本是 cc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
  • 我不会下载一些软件并为您调试(您至少应该说哪个基准测试失败),但也许有人会这样做。我认为您不太可能更改链接器,因为您遇到了运行时故障。 MPI 程序通常与mpiccmpif90 等链接。
  • IS 基准测试失败,我在我的问题描述中写了它 - 如果您的意思更具体,对不起,老实说我从未使用过这样的旧代码(某些部分我认为是来自 80 年代)或使用 MPI,所以我真的很困惑。好的,我会尝试在其他地方寻找这个阴险的错误:-)
  • 好的,您不能将导致错误的源代码粘贴到您的问题中吗?你有行号的回溯吗?

标签: c bash parallel-processing mpi benchmarking


【解决方案1】:

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。

【讨论】:

  • 感谢您的回复,但恐怕我的问题比这更大 :-( 我已经“注释掉”了这两个变量的内容,但错误仍然存​​在。这是我的 make.def 现在:pastebin.com/G5qq4DkX P.s.:我正在尝试使用命令 mpirun -n 4 ./is.A.4 运行我的代码 - 也许这就是问题所在?我真的没有想法,我觉得我已经尝试了所有可能的方法:-)
猜你喜欢
  • 2020-02-28
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 2014-06-09
  • 2014-03-30
  • 2014-08-04
相关资源
最近更新 更多