MPI 代码不适用于 2 个节点,但适用于 1 个节点

Posted

技术标签:

【中文标题】MPI 代码不适用于 2 个节点,但适用于 1 个节点【英文标题】:MPI code does not work with 2 nodes, but with 1 【发布时间】:2015-10-28 06:42:24 【问题描述】:

超级编辑:

添加广播步骤,将导致ncols 被主节点的两个进程打印(我可以从中检查输出)。但为什么?我的意思是,所有广播的变量在它们的声明行中已经有一个值!!! (题外话image)。


我有一些基于此example 的代码。

我用这个简单的程序检查了集群配置是否正常,它也是它将运行到的机器的printed the IP:

int main (int argc, char *argv[])

  int rank, size;

  MPI_Init (&argc, &argv);      /* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);        /* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);        /* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  // removed code that printed IP address
  MPI_Finalize();
  return 0;

将每台机器的 IP 打印两次。


EDIT_2

如果我(仅)打印网格,如示例中所示,我将获得一台计算机:

Processes grid pattern:
0 1
2 3

两个人:

Processes grid pattern:

【问题讨论】:

不幸的是,我不熟悉 BLACS。您可以尝试提炼一个显示您的问题的最小示例吗?例如,我们不知道init 做了什么,所以问题可能就藏在那里了。 @mort 我更新了,现在读者都清楚了! 能否在两个节点上运行一个简单的 MPI ping pong 测试来验证 MPI 是否配置正确。如果您使用的是英特尔 MPI,则应该有一组称为 IMB 的 MPI 基准测试,其中包含测试以及其他几个测试。这些测试是确保 MPI 在两个节点上正常工作的好方法。 @Matt,检查我的编辑。我正在使用 MPICH2。配置没问题。 我很高兴你能够解决这个问题,集群配置和管理涉及很多活动部件,如果你打算在集群环境中做很多工作,我建议使用某种集群管理和配置工具,如warewulf 或ROCKS,它们可以使集群管理的许多方面变得更加容易。还有各种可用的参考设计,它们使用这两种工具并完成构建具有已知良好配置的集群的整个过程。 【参考方案1】:

两个节点中的可执行文件不同!


当我配置集群时,我很辛苦,所以当我遇到挂载问题时,我就跳过了。所以现在,更改只会出现在一个节点中。除非部分(或全部)代码相同,否则代码的行为会很奇怪。

【讨论】:

感谢您的投票,如果您对设置和维护集群有任何疑问,Server Fault 社区对许多相关主题都非常了解。如果您认为这会有所帮助,我可以编写有关设置和维护集群指南的基础知识并将其发布在某处。 好吧@Matt,我对我喜欢的东西投了赞成票!你真是太好了,但我只是想要一个 uni 项目,所以它几乎完成了,因此我不会测试你的文章(我将无法访问集群),但如果你愿意,我可以阅读它.再次感谢!

以上是关于MPI 代码不适用于 2 个节点,但适用于 1 个节点的主要内容,如果未能解决你的问题,请参考以下文章

mpifort -DMPI 编译错误:派生类型“mpi_status”用作实际参数。适用于英特尔 Fortran,但不适用于 GNU Fortran

表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是啥破坏了验证检查

我的代码确实适用于小样本,但不适用于大样本

此 JS/jQuery 代码适用于 Firefox,但不适用于 Chrome

函数适用于双引号,但不适用于单引号

用于 DynamoDB 查询的 Python 代码适用于 v3.6,但不适用于 python 2.7