导航:首页 > 编程语言 > pythonmpi运行

pythonmpi运行

发布时间:2022-11-06 11:33:07

A. 如何后台运行mpi并行程序

在后台作业中运行MPI程序的命令`mpijob'和`mpirun'在LSSC-II中实际上是同一个脚本,
它们可以互换, 并且用户可用'-np'选项来指定进程的数目

B. 有没有简单的中文python的openMP和MPI教程

MPI(MPI是一个标准,有不同的具体实现,比如MPICH等)是多主机联网协作进行并行计算的工具,当然也可以用于单主机上多核/多CPU的并行计算,不过效率低。它能协调多台主机间的并行计算,因此并行规模上的可伸缩性很强,能在从个人电脑到世界TOP10的超级计算机上使用。缺点是使用进程间通信的方式协调并行计算,这导致并行效率较低、内存开销大、不直观、编程麻烦。

OpenMP是针对单主机上多核/多CPU并行计算而设计的工具,换句话说,OpenMP更适合单台计算机共享内存结构上的并行计算。由于使用线程间共享内存的方式协调并行计算,它在多核/多CPU结构上的效率很高、内存开销小、编程语句简洁直观,因此编程容易、编译器实现也容易(现在最新版的C、C++、Fortran编译器基本上都内置OpenMP支持)。不过OpenMP最大的缺点是只能在单台主机上工作,不能用于多台主机间的并行计算!

如果要多主机联网使用OpenMP(比如在超级计算机上),那必须有额外的工具帮助,比如 MPI + OpenMP 混合编程。或者是将多主机虚拟成一个共享内存环境(Intel有这样的平台),但这么做效率还不如混合编程,唯一的好处是编程人员可以不必额外学习MPI编程。

C. 运行mpi报错

这是由于intel compiler的环境没设置好,应该把相应的库文件路径加入 .bashrc

用文本编辑器打开个人主目录下面的.bashrc(~/.bashrc),
加入类似于下面的两行信息(第一行是icc的、第一行是ifort的)并保存:
source /etc/Intel_Compiler/10.0/XXXX/iccvars_intel64.sh
source /etc/Intel_Compiler/10.0/XXXX/ifortvars_intel64.sh

具体绝对路径需要根据你的运行环境中两个文件所在的位置作修改,
另外如果你使用的不是64而是32位程序,那么需要找到相应的.sh文件。

D. 新司机求助 python安装mpi4py模块时出现

1、下载python安装包https://www.python.org/ftp/python/3.5.1/python-3.5.1-amd64.exe 当然,你也可以根据你的需要下载不同版本的python。 2、双击安装程序python-X.X.X.msi 3、选择Install for all users,点击下一步 4、选择安装目录,Python...

E. 如何通过Qt界面启动MPI多进程并行,并将界面参数传递给每一个进程

MPI必须是以服务的形式运行的,不能加到自己的代码中。 这涉及到进程间通信,但是可以采用这样的三种形式:1,QT应用中启动一个MPI的exe进程,将参数作为启动参数传递给这个进程。2,可以在QT应用中将参数写到一个外部文件中,MPI进程就不断监听这个文件。文件有内容,MPI程序就开始执行。3,QT应用MPI进程,一个作为TCP的服务器,一个作为TCP的客户端。用套接字进行通信。

如果你是在linux上,可以参考很多IPC机制(进程间通信机制)。

F. 如何执行python第三方包windows exe格式

python第三方包的windows安装文件exe格式, 这上面有很多python第三方包的二进制安装文件,包括32位和64位的。下载安装就ok了!
这下面有很多python第三方包的二进制安装文件,包括32位和64位的。下载安装就ok了!

包括了mysqldb,ldap等。

Index by date:

fiona

scikit-image

netcdf4

mercurial

scikits.audiolab

numba

llvmpy

python-igraph

rpy2

numpy

opencv

zope.interface

sfepy

quantlib

gdal

imread

django

psychopy

cx_freeze

msgpack

regex

cellcognition

vigra

scikit-learn

pytables

h5py

blender-mathutils

htseq

bioformats

simplejson

pyzmq

mako

simpleitk

qimage2ndarray

ujson

vlfd

libsvm

liblinear

cgkit

scipy

distribute

noise

theano

pyalembic

openimageio

pyaudio

pymca

pyamg

pgmagick

lxml

steps

sqlalchemy

cffi

biopython

python-ldap

pycurl

nipy

nibabel

pygments

mahotas

py-postgresql

pyamf

planar

holopy

pyvisa

jcc

polymode

polygon

cython

pyropes

llist

shapely

vtk

pymongo

libpython

meshpy

pandas

umysql

epydoc

coverage

cheetah

pyrxp

pybluez

pythonmagick

bsdiff4

pymssql

pymol

boost.python

orange

requests

pywcs

python-sundials

pymix

pyminuit

pylzma

pyicu

assimulo

basemap

pygraphviz

pyproj

mpi4py

spyder

pytz

pyfits

mysql-python

pygame

pycparser

twisted

pil

qutip

openexr

nipype

python-snappy

visvis

docutils

pyhdf

pyqwt

kivy

scikits.umfpack

psycopg

ets

guiqwt

veusz

pyqt

pyside

dpmix

py-fcm

scikits.hydroclimpy

smc.freeimage

scipy-stack

ipython

nose

mxbase

numexpr

pyyaml

ode

virtualenv

aspell_python

tornado

pywavelets

bottleneck

networkx

statsmodels

pylibdeconv

pyhook

lmfit

slycot

ndimage

scikits.scattpy

cvxopt

pymc

pysparse

scikits.odes

matplotlib

vpython

pycuda

pyopencl

pymvpa

pythonnet

cld

mod_wsgi

nltk

python-levenshtein

rtree

pywin32

scientificpython

sympy

thrift

pyopengl-accelerate

mdp

pyopengl

gmpy

reportlab

natgrid

scikits.vectorplot

pyreadline

milk

blosc

pycogent

pip

gevent

scons

carray

python-dateutil

jinja2

markupsafe

jsonlib

pysfml

fonttools

silvercity

console

python-cjson

pycluster

cdecimal

pytst

autopy

sendkeys

ceodbc

fipy

psutil

pyephem

pycifrw

blist

line_profiler

pydbg

bitarray

pyglet

python-lzo

faulthandler

delny

pyexiv2

ilastik

twainmole

scitools

pyspharm

casuarius

pyodbc

greenlet

nitime

pylibtiff

mmtk

pycairo

pysqlite

curses

videocapture

bazaar

nlopt

trfit

libsbml

oursql

sphinx

cellprofiler

py2exe

re2

liblas

cgal-python

pymedia

ffnet

pyfftw

libxml-python

pyfltk

pymex

pymatlab

zodb3

mmlib

pygtk

pyserial

babel

scikits.ann

scikits.delaunay

numeric

pulp

nmoldyn

pymutt

iocbio

jpype

wxpython

pybox2d

dipy

mmseg

pynifti

scikits.samplerate

scikits.timeseries

vitables

quickfix

G. mpi4py 进阶之 MPIArray

在 上一篇 中我们介绍了 caput 软件包的 mpiutil 模块中提供的若干方便和易用的函数,下面我们将介绍 caput 中另一个模块 mpiarray 提供的建立在 numpy array 基础上的并行分布式数组 MPIArray。

MPIArray 类继承自 numpy.ndarray,因此 numpy 数组的众多方法都适用于 MPIArray,不过 MPIArray 却能够以一种整体的方式管理和操作分布在不同进程间的 numpy 数组,并提供若干特有的但方便的方法和属性以供使用,下面就将介绍它们。

注意 :因为 MPIArray 类所在的 mpiarray 模块在内部导入使用我们前面介绍过的 mpiutil,因此 MPIArray 也能兼容非 MPI 环境,在此情况下只有单个进程执行,MPIArray 的 comm 属性将为 None,MPIArray 实际上就是一个单一的完整的 numpy.ndarray,附加上一些额外的属性和方法。

MPIArray 构造方法。创建一个 shape 为 global_shape , 分布在通信子对象 comm 上的,分布轴为 axis 的 MPIArray,其它可选参数同 numpy.ndarray。 comm 的默认值为 None,在 mpi4py 可用的情况下会使用 MPI.COMM_WORLD,不可用时就为 None (此时创建的 MPIArray 就存在于单个进程上)。当 comm 是一个有效的通信子对象时,所创建的 MPIArray 会按照 axis 轴分布在 comm 所包含的所有进程上。MPIArray 只能分布在一个单独的轴上,并且在该轴上的分布必须满足一定的限制,即每个进程所持有的子数组在该轴上的 shape 都相等(如果能够均分的话)或者 rank 较小的一些进程会多 1 (如果不能均分)。这一限制必须在 MPIArray 存在的整个生命时期内都得到满足。MPIArray 在除了分布轴之外的所有其它轴上的 shape 在各个进程中都相同。

由一个 numpy 数组 array 构造一个分布在通信子 comm 上,分布轴为 axis 的 MPIArray 并返回,所创建的 MPIArray 的 global_shape 同 array 的shape。参数 root 可为一个整数或 None,当其为一个整数时,数据将由 rank 等于该整数的进程的 array 散发给所有其它进程,因此其它进程的 array 参数可以为 None;当 root 为 None 时,每个进程从各自的 array 中获取对应的数据,因此一般来说每个进程的 array 应该都相同,但也可以不同。

将当前的 MPIArray 转化为 numpy array。如果 root 为一个整数,则只有 rank 为该整数的进程会返回转化后的 numpy array,其它进程返回 None;如果 root 为 None,则所有进程都返回转化后的 numpy array。

将通信子 comm 上的各个进程所持有的 numpy 数组 array 沿分布轴 axis 包装成一个 MPIArray 并返回。各个进程的 array 在 axis 轴上的 shape 必须满足 MPIArray 的限制要求,即都相等或者 rank 较小的进程多 1,在其它轴上的 shape 必须都相同。 注意 该方法与 from_numpy_array 的区别。

将当前的 MPIArray 重新分布到轴 axis 上,返回一个不与原 MPIArray 共享数据的新的 MPIArray。 注意 :这是一个通信量比较大的操作,数据会在所有进程间重新分布。

一个方便的方法来返回当前的 MPIArray 在轴 axis 上的 local_index 和 global_index 迭代器。global_index 是指在将整个 MPIArray 当作一个大的 numpy array 时的 index,而 local_index 则在每个进程所持有的子数组中的 index。当 axis 不是分布轴时,每个进程返回的 local_index 和 global_index 都是一样的,但当 axis 为分布轴时,除了 rank = 0 的的进程返回的 local_index 和 global_index 一样之外,其它进程的都不一样,因为 local_index 会从 0 开始计数。

由一个 HDF5 文件 f 中的数据 dataset 构造一个分布在通信子 comm 上,分布轴为 axis 的 MPIArray 并返回。 f 可以为一个 HDF5 文件的文件名字符串或者一个打开的 HDF5 文件句柄。HDF5 文件操作以及并行分布式的 HDF5 在后面会有相应的介绍。 注意 :该方法同 from_numpy_array 非常类似,只不过数据的来源不同。

将当前的 MPIArray 中的数据存储到 HDF5 文件 filename 中的数据集 dataset 中,当 create 为 True 时会创建一个新文件,为 False时会写入到已经存在的文件中,此时该存在的文件中如果已经有数据集 dataset 则会出错。HDF5 文件操作以及并行分布式的 HDF5 在后面会有相应的介绍。

将当前的 MPIArray 按照轴 axes 进行转置,即调整轴的次序。返回转置后的新 MPIArray,但是共享原 MPIArray 的数据。

改变当前 MPIArray 的 global_shape。返回 reshpae 后的新 MPIArray,但是共享原 MPIArray 的数据。 注意 不能改变分布轴且分布轴对应的元素必须设置成 None,除此之外同 numpy array 的 reshape。

返回一个当前 MPIArray 的复制对象,其所包含的数据也会进行复制,即不再共享原 MPIArray 的数据。

MPIArray 的整体 shape,每个进程都会返回相同的结果。

每个进程所持有的子数组的 shape。

每个进程所持有的子数组在整个 MPIArray 中各轴的偏移位置,对非分布轴偏移都为 0。

MPIArray 的分布轴。

每个进程所持有的子数组,是一个 numpy array。

MPIArray 的通信子对象,如果 mpi4py 不可用则为 None。

下面给出以上介绍的方法和属性的使用例程。

运行结果如下:

以上我们介绍了 caput 中另一个模块 miarray 提供的建立在 numpy array 基础上的并行分布式数组 MPIArray,其中也提到了 HDF5 文件及其操作,我们将在后面介绍并行分布式的 HDF5 相关操作,在此之前我们先介绍 HDF5 文件的基本内容以及 Python 中操作 HDF5 文件的方法,以为后面的介绍作铺垫,在 下一篇 中我们将介绍 HDF5 文件以及操作 HDF5 文件的 Python 工具 h5py。

H. Hp-MPI是什么做什么用的

一、HP-MPI 是由{&Tahoma8}Hewlett-Packard开发类别 Miscellaneous Shareware 软件。
二、MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。
MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。
MPI在今天仍为高性能计算的主要模型。
三、主要的MPI-1模型不包括共享内存概念,MPI-2只有有限的分布共享内存概念。
但是MPI程序经常在共享内存的机器上运行。
在MPI模型周边设计程序比在NUMA架构下设计要好因为MPI鼓励内存本地化。
尽管MPI属于OSI参考模型的第五层或者更高,它的实现可能通过传输层的sockets和Transmission Control Protocol (TCP)覆盖大部分的层。
大部分的MPI实现由一些指定惯例集(API)组成,可由C,C++,Fortran,或者有此类库的语言比如C#, java or Python直接调用。
MPI优于老式信息传递库是因为他的可移植性和速度。

I. mpi4py 点到点通信总结

在 上一篇 中我们介绍了 mpi4py 中组合发送接收通信方法,至此我们就对 mpi4py 中提供的各种点到点通信方法都做了一个简略的介绍,并给出了简短的使用例程。下面我们对点到点通信做一个小结。

通过前面的介绍可知,点到点通信有各种不同的模式,可分为阻塞通信,非重复非阻塞通信,可重复非阻塞通信,其中每一类还可分为标准、缓冲、就绪和同步模式。要理解各种模式通信的行为,关键是弄清楚各个模式对缓冲使用的方式。简言之,各个模式使用缓冲的特点可总结为:标准的 Send 实际利用了 MPI 环境提供的默认缓冲区;缓冲的 Bsend 实际相当于将 MPI 环境提供的缓冲区放在用户空间管理;就绪的 Rsend 实际相当于不要缓冲区,但发送端不能提前等待;同步的 Ssend 实际也相当于不要缓冲区,但允许等待。异步方式下各个模式工作原理也类似,只不过可将其理解为 MPI 环境会另起一个线程在后台做实际的消息传输,通过 MPI_Wait*,MPI_Test* 等机制与 MPI 进程的主线程进行通信和同步。

点到点通信特别需要注意的一件事就是预防死锁,导致死锁的原因有很多,其中最典型的是缓冲区争夺导致的死锁,比如下面这个例子:

运行结果如下:

上面这个例子中两个进程同时向对方发送且从对方接收消息,但因为发送和接收的消息比较小,并未超出 MPI 环境提供的默认缓冲区容量,所以能够顺利执行。现在我们试着将上例中的 count 改成 1024(或者更大,依赖于你的 MPI 环境配置),则运行结果如下:

两个进程都阻塞在 Send 处无法前进,原因是两者的发送操作都先于接收操作启动,当发送数据量超过 MPI 环境提供的默认缓冲区空间大小时,每个进程都要等待对方启动接收动作把这个“过量”的数据直接取走。但是因为使用的是阻塞发送,在没有完成接收之前,双方的发送函数都不会返回,因而接收动作都得不到执行,于是两个进程都因等待接收而阻塞在发送步骤上,程序出现了死锁。

对于这种类型的死锁,解决办法有如下几个:

我们不一一列举这些解决方案,只给出其中的一个例子,即调整语句的执行顺序来防止死锁,如下:

运行结果如下:

经过语句的调整,每个进程的发送操作都可优先匹配到对方的接收动作,待消息传输完毕后才进行下一次通信,因此可消除由缓冲区竞争所导致的死锁。

MPI 对消息传递的执行顺序有一定的规定,但 MPI 环境并不提供保证“公平性”的措施,具体如下:

以上简要总结了 mpi4py 中的点到点通信,在 下一篇 中我们将介绍组与通信子的基本概念。

J. Python 适合大数据量的处理吗

python可以处理大数据,python处理大数据不一定是最优的选择。适合大数据处理。而不是大数据量处理。 如果大数据量处理,需要采用并用结构,比如在hadoop上使用python,或者是自己做的分布式处理框架。

python的优势不在于运行效率,而在于开发效率和高可维护性。针对特定的问题挑选合适的工具,本身也是一项技术能力。

Python处理数据的优势(不是处理大数据):

1. 异常快捷的开发速度,代码量巨少

2. 丰富的数据处理包,不管正则也好,html解析啦,xml解析啦,用起来非常方便

3. 内部类型使用成本巨低,不需要额外怎么操作(java,c++用个map都很费劲)

4. 公司中,很大量的数据处理工作工作是不需要面对非常大的数据的

5. 巨大的数据不是语言所能解决的,需要处理数据的框架(hadoop, mpi)虽然小众,但是python还是有处理大数据的框架的,或者一些框架也支持python。

(10)pythonmpi运行扩展阅读:

Python处理数据缺点:

Python处理大数据的劣势:

1、python线程有gil,通俗说就是多线程的时候只能在一个核上跑,浪费了多核服务器。在一种常见的场景下是要命的:并发单元之间有巨大的数据共享或者共用(例如大dict)。

多进程会导致内存吃紧,多线程则解决不了数据共享的问题,单独的写一个进程之间负责维护读写这个数据不仅效率不高而且麻烦

2、python执行效率不高,在处理大数据的时候,效率不高,这是真的,pypy(一个jit的python解释器,可以理解成脚本语言加速执行的东西)能够提高很大的速度,但是pypy不支持很多python经典的包,例如numpy。

3. 绝大部分的大公司,用java处理大数据不管是环境也好,积累也好,都会好很多。

参考资料来源:网络-Python



阅读全文

与pythonmpi运行相关的资料

热点内容
解放压缩机支架 浏览:255
程序员秃顶搞笑相遇 浏览:6
IBM手机app商店叫什么名字 浏览:834
jpeg压缩质量 浏览:774
云服务器评测对比 浏览:145
java日期转string 浏览:221
openfire源码编译 浏览:897
在线小工具箱引流网站源码 浏览:337
非科班程序员自学 浏览:799
压缩泡沫鞋底底材 浏览:219
程序员职场第一课2正确的沟通 浏览:679
遇到不合法app应该怎么办 浏览:90
汇编程序编译后的文件 浏览:79
大智慧均线源码 浏览:373
单片机排阻的作用 浏览:215
滴滴金融app被下架如何还款 浏览:212
jpg转换成pdf免费软件 浏览:743
范里安pdf 浏览:447
伪造pdf 浏览:79
能删除android文件夹吗 浏览:447