gpt4 book ai didi

c++ - 用于分布式计算的 C/C++ 框架(MPI?)

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:46 28 4
gpt4 key购买 nike

我正在调查是否有框架/库可以帮助我实现分布式计算系统。

我有一个母版,其中有大量数据被分割成几百兆字节的文件。这些文件将被分成约 1MB 的 block 并分发给工作人员进行处理。一旦初始化,每个 worker 的处理依赖于从前一个 chunk 获得的状态信息,因此 worker 必须在整个过程中保持事件状态,master 需要能够将正确的 chunk 发送给正确的 worker。另一件需要注意的事情是,该系统只是更大处理链的一部分。

我对 MPI(特别是 Open MPI)做了一些调查,但我不确定它是否合适。它似乎适用于发送小消息(几个字节),尽管我确实找到了一些图表,显示它的吞吐量随着更大的文件(最多 1/5 MB)而增加。

我担心除非在消息中不断来回发送状态,否则可能无法维护状态。查看一些 MPI 示例的结构,看起来 master(等级 0)和 workers(等级 1-n)是同一 block 的一部分,并且它们的操作由条件决定。我可以让工作人员保持事件状态(保持状态)并等待更多消息到达吗?

既然我正在写这篇文章,我认为它会奏效。等级 1...n 部分只是一个循环,其中包含一个阻塞接收,然后是处理代码。状态将保持在该循环中,直到收到“没有更多数据”消息,此时它将发回结果。我可能在这里开始掌握 MPI 结构......

我关于 MPI 的另一个问题是如何实际运行代码。请记住,该系统是更大系统的一部分,因此需要从其他代码调用它。我看到的示例使用了 mpirun,您可以使用它指定处理器的数量或主机文件。我可以通过从其他代码调用我的 MPI 函数来获得相同的行为吗?

所以我的问题是 MPI 是合适的框架吗?有没有更适合这项任务的东西,还是我要从头开始做?

最佳答案

MPI似乎是您任务的合理选择。它使用 SPMD 体系结构,这意味着您可以在可能的分布式甚至异构系统上同时执行相同的程序。所以rank 0为主进程,其他进程为worker的进程的选择不是必须的,可以选择其他模式。

如果您想为您的应用程序提供状态,您可以使用持续运行的 MPI 应用程序和主进程随时间向工作进程发送命令。您可能还应该考虑将该状态保存到磁盘,以便为故障提供更强的鲁棒性。

MPI 进程的运行最初由 mpirun 完成.例如,您创建一些程序 program.c , 然后使用 mpicc -o program program.c 编译它.然后你必须运行 mpirun -np 20 ./program <params>运行 20 个进程。您将拥有 20 个独立的流程,每个流程都有自己的等级,因此您的申请会取得进一步的进展。这 20 个进程在节点/处理器之间的分布方式由主机文件等控制,应该更仔细地查看文档。

如果您希望您的代码可重用,即可以从另一个 MPI 程序运行,您通常至少应该了解 MPI Communicator 是什么以及如何创建/使用它。网上有文章,关键词是“Creating MPI library”。

如果使用你的库的代码不在MPI本身,那也不是什么大问题,你在MPI中的程序在通信上并不局限于MPI。它只是应该通过 MPI 在其逻辑内部进行通信。您可以使用 mpirun 调用任何程序,除非它尝试调用 MPI 库,否则它不会注意到它正在 MPI 下运行。

关于c++ - 用于分布式计算的 C/C++ 框架(MPI?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6815559/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com