導航:首頁 > 編程語言 > 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運行相關的資料

熱點內容
壓縮泡沫鞋底底材 瀏覽:217
程序員職場第一課2正確的溝通 瀏覽:677
遇到不合法app應該怎麼辦 瀏覽:90
匯編程序編譯後的文件 瀏覽:77
大智慧均線源碼 瀏覽:371
單片機排阻的作用 瀏覽:213
滴滴金融app被下架如何還款 瀏覽:210
jpg轉換成pdf免費軟體 瀏覽:741
范里安pdf 瀏覽:443
偽造pdf 瀏覽:75
能刪除android文件夾嗎 瀏覽:446
LINUX使用V2ray 瀏覽:797
找人幫忙注冊app推廣是什麼 瀏覽:820
獨立伺服器如何恢復初始化 瀏覽:11
優秀到不能被忽視pdf 瀏覽:316
導遊程序員家政 瀏覽:586
22乘28的快速演算法 瀏覽:338
軟通動力程序員節2021 瀏覽:845
安卓系統如何卸載安裝包 瀏覽:870
簡訊刪除助手文件夾 瀏覽:688