MPICH 示例 cpi 在多个新安装的 vps 上运行时会生成错误

2024-01-04

我刚刚开始学习mpi,所以我买了3个vps来创建一个实验环境。我成功安装并配置了 ssh 和 mpich。这三个节点可以在没有密码的情况下相互连接(但不能连接自身)。并且 cpi 示例通过了,在本地计算机上没有任何问题。当我尝试在所有 3 个节点上运行它时,cpi 程序始终存在并出现错误Fatal error in PMPI_Reduce: Unknown error class, error stack:。 这是我所做的以及错误所说的完整描述。

[root@fire examples]# mpiexec -f ~/mpi/machinefile  -n 6 ./cpi
Process 3 of 6 is on mpi0
Process 0 of 6 is on mpi0
Process 1 of 6 is on mpi1
Process 2 of 6 is on mpi2
Process 4 of 6 is on mpi1
Process 5 of 6 is on mpi2
Fatal error in PMPI_Reduce: Unknown error class, error stack:
PMPI_Reduce(1263)...............: MPI_Reduce(sbuf=0x7fff1c18c440, rbuf=0x7fff1c18c448, count=1, MPI_DOUBLE, MPI_SUM, root=0, MPI_COMM_WORLD) failed
MPIR_Reduce_impl(1075)..........:
MPIR_Reduce_intra(826)..........:
MPIR_Reduce_impl(1075)..........:
MPIR_Reduce_intra(881)..........:
MPIR_Reduce_binomial(188).......:
MPIDI_CH3U_Recvq_FDU_or_AEP(636): Communication error with rank 1
MPIR_Reduce_binomial(188).......:
MPIDI_CH3U_Recvq_FDU_or_AEP(636): Communication error with rank 2
MPIR_Reduce_intra(846)..........:
MPIR_Reduce_impl(1075)..........:
MPIR_Reduce_intra(881)..........:
MPIR_Reduce_binomial(250).......: Failure during collective

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   PID 1563 RUNNING AT mpi0
=   EXIT CODE: 1
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
[proxy:0:2@mpi2] HYD_pmcd_pmip_control_cmd_cb (pm/pmiserv/pmip_cb.c:885): assert (!closed) failed
[proxy:0:2@mpi2] HYDT_dmxu_poll_wait_for_event (tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:2@mpi2] main (pm/pmiserv/pmip.c:206): demux engine error waiting for event
[proxy:0:1@mpi1] HYD_pmcd_pmip_control_cmd_cb (pm/pmiserv/pmip_cb.c:885): assert (!closed) failed
[proxy:0:1@mpi1] HYDT_dmxu_poll_wait_for_event (tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:1@mpi1] main (pm/pmiserv/pmip.c:206): demux engine error waiting for event
[mpiexec@mpi0] HYDT_bscu_wait_for_completion (tools/bootstrap/utils/bscu_wait.c:76): one of the processes terminated badly; aborting
[mpiexec@mpi0] HYDT_bsci_wait_for_completion (tools/bootstrap/src/bsci_wait.c:23): launcher returned error waiting for completion
[mpiexec@mpi0] HYD_pmci_wait_for_completion (pm/pmiserv/pmiserv_pmci.c:218): launcher returned error waiting for completion
[mpiexec@mpi0] main (ui/mpich/mpiexec.c:344): process manager error waiting for completion

我只是不知道发生了什么,有一些见解吗? 正如评论所暗示的,这里是 mpi cpi 代码。

#include "mpi.h"
#include <stdio.h>
#include <math.h>

double f(double);

double f(double a)
{
    return (4.0 / (1.0 + a*a));
}

int main(int argc,char *argv[])
{
    int    n, myid, numprocs, i;
    double PI25DT = 3.141592653589793238462643;
    double mypi, pi, h, sum, x;
    double startwtime = 0.0, endwtime;
    int    namelen;
    char   processor_name[MPI_MAX_PROCESSOR_NAME];

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);
    MPI_Get_processor_name(processor_name,&namelen);

    fprintf(stdout,"Process %d of %d is on %s\n",
    myid, numprocs, processor_name);
    fflush(stdout);

    n = 10000;          /* default # of rectangles */
    if (myid == 0)
    startwtime = MPI_Wtime();

    MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);

    h   = 1.0 / (double) n;
    sum = 0.0;
    /* A slightly better approach starts from large i and works back */
    for (i = myid + 1; i <= n; i += numprocs)
    {
        x = h * ((double)i - 0.5);
        sum += f(x);
    }
    mypi = h * sum;

    MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

    if (myid == 0) {
        endwtime = MPI_Wtime();
        printf("pi is approximately %.16f, Error is %.16f\n",
               pi, fabs(pi - PI25DT));
        printf("wall clock time = %f\n", endwtime-startwtime);         
        fflush(stdout);
    }

    MPI_Finalize();
    return 0;
}

可能为时已晚,无论如何我会提供我的答案,我遇到了同样的问题,经过一番研究后我找到了问题

如果您有一个包含主机名而不是 ip 地址的机器文件,并且机器在本地连接,那么您也应该有一个本地运行的名称服务器,否则将机器文件中的条目更改为 ip 地址而不是主机名。仅 /etc/hosts 并不能解决问题

这似乎是我的问题,一旦我将机器文件中的条目更改为 ip 地址,它就可以工作

问候 戈皮

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPICH 示例 cpi 在多个新安装的 vps 上运行时会生成错误 的相关文章

  • 使用 MPI 分散不同大小的矩阵块

    假设所有矩阵都按行优先顺序存储 说明该问题的一个示例是将 10x10 矩阵分布在 3x3 网格上 以便每个节点中的子矩阵的大小如下所示 3x3 3x3 3x4 3x3 3x3 3x4 4x3 4x3 4x4 我在 Stackoverflow
  • MSMPI 就地 MPI_Allreduce 不适用于 MinGW-w64 gfortran

    我正在尝试使用就地MPI Allreduce结合MinGW w64 gfortran MSYS64提供的版本9 2 和Microsoft MPI 版本10 call MPI Allreduce MPI IN PLACE srcdst n M
  • MPI_Allgather 和 MPI_Allgatherv 之间的区别

    有什么区别MPI Allgather and MPI Allgatherv 来自MPI标准 http www mpi forum org docs MPI GATHERV 扩展了功能 MPI GATHER 通过允许变化 每个进程的数据计数
  • MPI sendbuf 和recvbuf 可以是同一个东西吗?

    我将每个进程中的大量数组元素添加到一起 double rho 1024 Some operation to calculate rho for each process MPI Allreduce rho rho 1024 MPI DOUB
  • 关于 MPI_Reduce

    就一个问题 如果我使用函数 MPI Reduce 当这是一个动态数组时 只有根可以分配接收缓冲区 例如 int r 10 int yloc y yloc calloc r sizeof int for all processes if I
  • 居委会集体——减少运营

    我需要 allreduce MPI Ineighbor allreduce 来进行 MPI 中的集体通信 遗憾的是它尚未包含在内 明显但效率不高的解决方案是使用 MPI Neighbor alltoall 以增加缓冲区大小为代价 您有什么建
  • Python 初学者 - 没有名为“mpi4py”的模块

    我是一名学生 第一次使用Python 目前我在虚拟机上使用 Xubuntu 19 10 我检查了 python 和 mpi4py 安装 我的 并行编程 教授给了我这个简单的 python 代码 from mpi4py import MPI
  • 除了snow SOCK之外的集群并行计算

    最近 R2 14 中添加的对并行计算的直接支持在我脑海中引发了一个问题 在 R 中创建集群有很多选项 我使用snow定期进行SOCK集群 但我知道还有其他方式 例如MPI 我用的是SOCKsnow集群 因为我不需要安装任何额外的软件 我使用
  • Visual Studio C++ 中的 msmpi.dll 错误消息

    我正在研究 mpi 但我一直收到此错误消息 程序无法启动 因为您的计算机缺少 msmpi dll 尝试 重新安装程序以解决此问题 所以我的问题是 卸载Visual Studio并重新安装可以解决这个问题吗 或者我应该使用电脑修复工具包程序和
  • 使用 Open MPI 运行并行程序时出现分段错误

    在我之前的文章中 我需要在 10 台计算机之间分发 pgm 文件的数据 在 Jonathan Dursi 和 Shawn Chin 的帮助下 我集成了代码 我可以编译我的程序 但出现分段错误 我跑了 但什么也没发生 mpirun np 10
  • 在 C++ 程序上使用 mpicc 链接失败

    我正在运行 Ubuntu 11 04 64 位 我已经安装了 OpenMPI 我正在尝试构建以下代码 这是 Gropp Lusk Skjellum 所著的 Using MPI 一书中测试问题的片段 include
  • MPI:MPICH2 在 Windows 局域网中安装和编程

    我正在学习MPI 我遵循的第一个教程是here http curveto blogspot in search label Parallel 我在 Windows 7 上使用 MSVC 2010 成功运行的代码是 include mpi h
  • R 在 HPC MPIcluster 上运行 foreach dopar 循环

    我可以访问带有 MPI 分区的 HPC 集群 我的问题是 无论我尝试什么 我的代码 在我的 PC 上运行良好 都无法在 HPC 集群上运行 代码如下所示 图书馆 TM 图书馆 qdap 图书馆 雪 图书馆 doSNOW 库 foreach
  • MPI 是否提供预处理器宏?

    MPI 标准是否提供了预处理器宏 因此如果我的 C C 代码由支持 MPI 的编译器编译 它可以分支吗 就像是 OPENMPOpenMP 的宏 根据MPI标准 http www mpi forum org docs mpi 3 0 mpi3
  • 如何通过 mpi c++ 发送布尔数据类型?

    我是 C 新手 尝试通过 MPI 发送 bool 数据类型 但 C 不支持此数据类型 我试着做到了MPI BYTE and MPI INT但它什么也没打印 include
  • MPI_Type_create_subarray 和 MPI_Gather

    我必须解决一些 mpi 问题 我有 4 个从进程 每个进程都想发送一个 2d 子数组 CHUNK ROWS X CHUNK COLUMNS 到 master 0 Master 0 收集 ddd ROWS COLUMNS 中的所有块并打印它
  • 无法使用 conda 安装 mpi4py 并指定预安装的 mpicc 路径

    我已经尝试安装mpi4py with env MPICC path to openmpi bin mpicc conda install c anaconda mpi4py 但我收到这样的消息 The following NEW packa
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • GProf 输出中缺少函数

    我正在尝试分析一些 C 代码 但最直观地成本最高的函数之一并未出现在 GProf 输出中 int main initialise haloSwap for functions propagate functions void propaga
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut

随机推荐