📜  MPI – 分布式计算变得简单

📅  最后修改于: 2021-10-19 08:28:31             🧑  作者: Mango

根本问题

为了方便起见,让我们直接跳到一些统计数据:

  • Facebook 目前每月有15 亿活跃用户。
  • 谷歌每年至少执行1 万亿次搜索。
  • Youtube 每分钟上传大约48 小时的视频。

有如此高的需求,我相信单个系统将无法处理。因此,需要分布式系统。

什么是分布式计算?

分布式系统由一组自治计算机组成,这些计算机通过网络和分布式中间件连接,使计算机能够协调其活动并共享系统资源,从而使用户将系统视为一个单一的、集成的计算设施。

让我们说一下 Google Web Server,从用户的角度来看,当他们提交搜索查询时,他们假设 google Web 服务器是一个单一的系统。然而,在幕后,谷歌构建了许多分布式(地理和计算)服务器,以便在几秒钟内为我们提供结果。

分布式计算的优势?

  • 高效
  • 可扩展性
  • 对失败的容忍度较低
  • 高可用性

让我们看一个使用分布式计算节省计算时间的例子。

例如。如果我们有一个数组a ,有n 个元素, a=[1, 2, 3, 4, 5, 6]

我们想对数组的所有元素求和并输出它。现在,让我们假设数组中有 10 20 个元素,计算总和的时间是 x。

如果我们现在将数组分成 3 部分, a1a2a3其中

a1 = { 一组元素,其中模(来自 a 的元素)== 0 }

a2 = { 一组元素,其中模(来自 a 的元素)== 1 }

a3 = { 一组元素,其中模(来自 a 的元素)== 2 }

我们将这 3 个数组发送到 3 个不同的进程,以计算这些单个进程的总和。平均而言,让我们假设每个数组有n/3 个元素。因此,每个进程所花费的时间也将减少到x/3 。由于这些进程将并行运行,因此将同时计算三个“x/3”并将每个数组的和返回给主进程。最后,我们可以通过对数组 a1、a2 和 a3 的各个总和求和来计算 a 的最终总和。

因此,如果我们同时运行处理,我们能够将时间从x减少到 x/3

什么是 MPI?

消息传递接口 (MPI) 是为分布式和并行计算开发的标准化和可移植的消息传递系统。 MPI 为并行硬件供应商提供了一组明确定义的基本例程,可以有效地实现这些例程。因此,硬件供应商可以在此标准低级例程集合的基础上为并行机提供的分布式内存通信环境创建高级例程。

MPI 为用户提供了从C、C++、Fortran、C#、 Java或Python调用一组例程的灵活性 MPI 相对于旧的消息传递库的优势在于可移植性(因为几乎所有分布式内存架构都实现了 MPI)和速度(因为每个实现原则上都针对其运行的硬件进行了优化)

MPI 相对于其他消息传递框架的优势在于可移植性和速度。它已针对几乎所有分布式内存架构实施,并且每个实施原则上都针对其运行的硬件进行了优化。

尽管有多种语言可供选择,但由于简单、易于编写代码, Python是最受欢迎的一种。所以,现在,我们现在来看看如何在 ubuntu 14.10 上安装 MPI。

在 Ubuntu 上安装 MPI

1)第1步:在终端中复制以下代码行以安装NumPy,这是一个适用于Python所有科学计算的包。

sudo apt-get install python-numpy

2)成功完成上述步骤后,执行以下命令更新系统并安装pip包。

sudo apt-get update
                           sudo apt-get -y install python-pip

3) 现在,我们将下载 MPI 最新版本的文档。

sudo apt-get install libcr-dev mpich2 mpich2-doc

4)输入命令使用pip for Python下载MPI

sudo pip install mpi4py

现在 MPI 安装成功。

有时,由于Python缺少开发工具,因此在安装 MPI 后清理包时可能会弹出问题。您可以使用以下命令安装它们:

sudo apt-get install python-dev

Windows/MAC 上的 MPI

对于 Windows/MAC 用户,他们可以访问以下链接并下载 .zip 文件并解压缩并执行它:

MPI框架

教程

安装完成后,您可以参考以下文档使用Python使用 MPI。

https://mpi4py.scipy.org/docs/usrman/tutorial.html

参考

https://www.open-mpi.org/

https://en.wikipedia.org/wiki/Message_Passing_Interface

关于作者:Anurag Mishra 目前是一名 3 年级的 B.Tech 学生,他是一名狂热的软件追随者和全栈 Web 开发人员。他对网络开发、NLP 和网络有着浓厚的兴趣。

如果您还想在这里展示您的博客,请参阅 GBlog,了解 GeeksforGeeks 上的客座博客写作。