潜在的问题
为了简化操作, 我们直接跳转到一些统计信息:
- Facebook目前拥有15亿每月活跃用户。
- Google至少执行1万亿每年的搜索量。
- 关于48小时每分钟都会有一部分视频上传到YouTube。
什么是分布式计算?
分布式系统由一组自治计算机组成, 这些自治计算机通过网络和分布式中间件连接, 使计算机能够协调其活动并共享系统资源, 从而使用户将系统视为一个集成的计算设施。
让我们说说Google Web Server, 从用户的角度来看, 当他们提交搜索查询时, 他们将Google Web Server视为一个单一系统。但是, 在幕后, 谷歌构建了很多服务器(分布在地理和计算上), 以便在几秒钟内为我们提供结果。
分布式计算的优势?
- 高效率
- 可扩展性
- 对失败的容忍度较低
- 高可用性
例如。如果我们有一个数组, 一种, 具有?元素, a = [1、2、3、4、5、6]
我们要对数组的所有元素求和并输出。现在, 假设有10个20数组中的元素以及计算时间的时间总和是x。
如果我们现在将数组分为三部分, a1, a2和a3其中
a1 = {元素集, 其中modulo(a的元素)== 0}
a2 = {元素集, 其中modulo(a的元素)== 1}
a3 = {元素集, 其中modulo(a的元素)== 2}
我们会将这3个数组发送给3个不同的进程, 以计算这些单独进程的总和。平均而言, 假设每个数组都有n / 3个元素。因此, 每个过程所花费的时间也将减少为x / 3。由于这些进程将并行运行, 因此将同时计算三个" x / 3", 并将每个数组的总和返回给主进程。最后, 我们可以计算a的最终和对数组的单个和求和:a1, a2和a3.
因此, 我们能够减少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目前是B.Tech的3年级学生, 是一名狂热的软件追随者和全栈Web开发人员。他热衷于Web开发, NLP和网络。
【MPI–简化分布式计算】如果你还希望在此处展示你的博客, 请参阅日志用于在lsbin上撰写访客博客。
推荐阅读
- 计算机组织|不同的指令周期
- Python MongoDB – insert_one查询用法介绍
- JavaScript break和continue用法详细介绍
- 如何检测Angular中@Input()值何时更改()
- 算法设计(打印对称双三角图案)
- jQuery :first-child第一个元素选择器用法
- 算法设计(模幂(递归)介绍和代码实现)
- Java中的编译时和运行时多态之间的区别
- C++标准模板库(STL)中的双端队列用法介绍