MPI Kullanım Kılavuzu

UHeM sitesinden
Uhem (Mesaj | katkılar) tarafından oluşturulmuş 09:51, 19 Şubat 2013 tarihli sürüm

(fark) ← Önceki hâli | en güncel halini göster (fark) | Sonraki hâli → (fark)
Atla: kullan, ara

MPI başta dağıtık bellekli sistemler olmak üzere paralel algoritma yazmaya yarayan bir kütüphane standartıdır. Bir programlama dili değildir. MPI kütüphanelerinin C, C++ ve Fortran dili aileleri için sürümleri bulunmaktadır.MPI, “mesaj geçme" mantığına dayalıdır. Değişik işlemciler, birbirleriyle iletiler sayesinde haberleşirler. Sistemimizde Intel MPI Library 3.1 ve mvapich-1.0 /mvapich2- 1.2p1 yüklüdür.

MVAPICH/MVAPICH2 Nedir?

MVAPICH , MPI1’in infiniband üzerinden MPICH1 tabanlı ,yüksek performansl bir uygulamasıdır.MVAPICH2 ise MPICH2 tabanlı ,yüksek performanslı MPI2 uygulamasıdır.Verbs Level Interface (VAPI) üzerinden yüksek performans ve ölçeklenebilir desteği bu paketlerle sağlanır.Bu paketler uDAPL, OpenIB/Gen2 ve TCP/IP standartı gibi iletim arayüzleri tarafından desteklenir.

MPI Nasıl Derlenir?

Öncelikle bazı çevre değişkenlerinin ayarlanması gerekiyor. Bash için olan ayarlarda .bashrc ya da profile dosyamıza aşağıdaki satırları eklemeliyiz:

export INTEL_LICENSE_FILE=/RS/progs/intel/licenses
# intel mpi için
. /RS/progs/intel/impi/3.1/bin64/mpivars.sh
# c, c++ ve fortran derleyicileri kullanabilmek için
. /RS/progs/intel/Compiler/11.1/069/bin/iccvars.sh intel64

tcsh için .tcshrc dosyamıza aşağıdaki satırları ekleyelim:

source /RS/progs/intel/impi/3.1/bin64/mpivars.csh
source /RS/progs/intel/Compiler/11.1/069/bin/iccvars.csh intel64

Böylece intel derleyicilerini kullanabilir duruma geldik. Kullanılacak olan programın kaynak koduna sahip ve kodu derlemek durumda olan kullanıcılar, kod derleme ve kod çalıştırma denemelerini login node'ların lokal disk'inde bulunan /tmp dizininde, başka dosya ya da dizin isimleriyle çakışmayacak şekilde isimlendirilmiş bir dizin hiyerarşisi içinde yapabilirler. [UYBHM paralel dosya sistemlerinin performansını düşürmemek için /tmp dizinin kullanılması önerilmekte, ancak kimi uygulama kod paketlerinin büyüklüğü göz önüne alınarak bu uygulama zorunlu tutulmamaktadır.] Kullanıcılar derlenen bu yazılımı, kod derleme ve test işlemleri sonrasında, yazılımın hesaplama düğümleri tarafından ulaşılması için öncelikli olarak AKDENIZ dosya sistemine taşımalı, sonrasındaysa kullanım sıklığı ya da şekline göre RS dizinine kopyalamalıdır. Login node'ların /tmp dizinlerinin diski doldurmaması için belirli aralıklarla bu dizin içindeki dosyalar silinecektir. Derleme ve test işlemleri sonrasında ilgili dosya ve dizinlerin kullanıcılarca silinmesi gerekmektedir. Aksi halde belirli aralıklarla yapılan temizlik sonrasında derleme işleminin yapıldığı kodlar da silinmiş olabilir. Artık programımızı derleyelim:

[admin.yildirim@lnode2 tmp]$ mpicc -o mpihello.x mpihello.c
[admin.yildirim@lnode2 tmp]$ mpifort -o mpihello.x mpihello.f

MPI Programlarının Teslimi

$ bsub -q  short -P sairler -n 6 -m anadolu_s –a intelmpi -o cikti%J.txt mpirun.lsf \
 /AKDENIZ/users/admin.yildirim/rs/sairler/mpihello/mpihello.x
Job <9430> is submitted to queue <short>.

burada "-n 6" programın kaç cpu kullanacağıdır. Fazladan yazdığımız "-a intelmpi" ile bsub'a hangi mpi kütüphanesini kullanacağımızı söylüyoruz. Ayrıca programı mpirun.lsf ile çalıştırdığımıza dikkat edin. Gelin bir de bjobs çıktısına bakalım:

$ bjobs
JOBID USER  STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME   SUBMIT_TIME
9430   admin.y RUN     short       anadolu1         2*d020              *llo.HP64    Oct 16 12:57 
                                                                             2*d021
                                                                             2*d022

burada görüldüğü gibi işimiz 3 farklı makinede 2'şer süreç (process) olarak çalışmıştır. Toplamda istediğimiz gibi 6 cpu ediyor. LSF her makinede kaç cpu olduğunu bildiği için, 2 cpu'lu makinelere, her makineye 2 süreç gelecek şekilde işi boş makinelere dağıtmıştır. LSF işimizi en hızlı çalıştıracağını düşündüğü makinelere otomatik olarak gönderir. Ancak istersek bu aşamada ek şartlar sunarak işimizi belli özelliklere sahip makinelere gönderebiliriz.

MPI+OpenMP (Mixed) Programlarının Derlenmesi ve Teslimi

Mixed programalama düğüm içinde ortak paylaşımlı hafızanın dolayısıyla OpenMP’nin özelliklerini, düğümler arasında da MPI’?n özelliklerini kullanarak yapılan programlama çeşitidir. MPI+OpenMP kodu aşağıdaki şekilde derlenebilir:

[admin.yildirim@lnode2 tmp]$ mpiicc -o mixed -openmp mixedHello.c
mixedHello.c(32) : (col. 1) remark: OpenMP DEFINED REGION WAS PARALLELIZED
Kodları çalıştırmak için;
[admin.yildirim@lnode2 ~]$ bsub -a intelmpi -P sairler -q short -m anadolu_s -o out.%J -e err.%J \
mpirun.lsf ./mixed
Job <6243> is submitted to queue <short>
[admin.yildirim@lnode2 ~]$ bjobs
JOBID USER              STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
6243    admin.yildirim PEND  short     anadolu2             *f ./mixed                            Mar 15 14:4
[admin.yildirim@lnode2 ~]$ bjobs
JOBID USER             STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
6243    admin.yildirim RUN   short     anadolu2                  d023        *f ./mixed        Mar 15 14:4
The output (if any) follows:
INFO: 10.128.1.23:Number of CPUs: 4
10.128.1.23: Hello world from process 0 of 1 thread number = 0
10.128.1.23: Hello world from process 0 of 1 thread number = 110.128.1.23: Hello world from process 0 of 1 thread number = 2
10.128.1.23: Hello world from process 0 of 1 thread number = 3
Job  /SFS/LSF_HPC/6.2/linux2.6-glibc2.3-x86_64/bin/intelmpi_wrapper ./mixed
TID   HOST_NAME   COMMAND_LINE            STATUS           TERMINATION_TIME
======================= ================ ========== =====
00000       d023       ./mixed        Done           03/15/2007 14:45:26

ÖNEMLİ NOT: Infiniband networkunu kullanacak uygulamalarınızda Intel MPI ya da MVAPICH MPI sürümlerini kullanılması tavsiye edilmektedir.