我刚刚完成的一项任务要求我创建一组脚本,这些脚本可以将随机 Ubuntu 机器配置为 MPI 计算集群中的节点。这一切都已经完成,节点之间可以正常通信。但是,我现在想通过向它抛出一个并行程序来展示所述 MPI 集群的效率。我只是在寻找一种可以在可用进程(=节点)数量之间划分工作的直接蛮力计算:如果一个节点需要 10 秒来运行程序,4 个节点应该只需要大约 2.5 秒。
考虑到这一点,我寻找了一个用 C 编写的素数计算程序。对于任何纯粹主义者来说,该程序实际上并不是我作业的一部分,因为我正在学习的课程纯粹是系统管理。我只需要任何能表明我的集群正在运行的东西。我有一些编程经验,但很少使用 C 语言,也没有使用 MPI。我发现了很多示例程序,但这些程序似乎都没有真正并行运行。它们确实在我的节点之间分配了所有步骤,因此如果一个节点具有更快的处理器,则总时间将会减少,但添加额外的节点并不能加快计算速度。
难道我做错了什么?我发现的程序根本不是并行的吗?我需要为 MPI 学习 C 编程来编写自己的程序吗?是否有任何其他并行 MPI 程序可用于演示我的集群在工作中?
编辑
感谢下面的答案,我设法让几个 MPI 脚本正常工作,其中前 N 个自然数的总和(这不是很有用,因为它遇到数据类型限制)、素数的计数和生成以及Pi 的蒙特卡洛计算。有趣的是,只有素数程序才能通过多个节点/进程实现(有时是戏剧性的)性能提升。
导致我最初的脚本运行问题的大部分问题都相当模糊,显然是由于节点上的主机文件问题。使用参数运行 mpiexec-disable-hostname-propagation
解决了这个问题,它可能以多种方式表现出来:MPI(R) 屏障错误、TCP 连接错误和其他一般连接失败。我相信集群中的所有节点可能有必要通过主机名相互了解,这对于在服务器节点上运行 DHCP/DNS 的经典 Beowulf 集群来说并不是一个真正的问题。