Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 3

Bui 1: Gii thiu v MPI

Ni dung:
Gii thiu v LAM MPI: l mt th vin hin thc cho m hnh lp trnh MPI. N
bao gm cc hm MPI phin bn 1.2 v 2.0, cho php to ra h thng
multicomputer gm nhiu my trn mng LAN cc b, h tr m hnh lp trnh
SPMD v MPMD, h tr checkpointing. Xem thm trn LAM web site:
http://www.lam-mpi.org
Ci t LAM MPI: 3 cch:
o T gi RPM:
$ rpm ivh lam-7.1.1.rpm
o T source LAM MPI:
Lm theo hng dn, nhng thng thng s gm 3 bc:
$ configure prefix=SSH
$ make
$ make install
o T binary nn:
Unzip file nn cha phin bn chy khng cn ci ca LAM MPI.
V d:
$ tar xzvf lam-7.1.1.tar.gz
Khi ng mi trng LAM MPI: (booting LAM)
o Chy trn 1 my n cc b:
$ lamboot v
o Chy trn nhiu my: v d bn ang ngi my PC01 nay mun thm
my PC02 tham gia vo mi trng LAM MPI:
Kim tra ng truyn mng gia 2 my PC01 v PC02 l tt.
$ ping pc01
$ ping pc02
Kim tra dch v ssh l c trn 2 my:
$ ssh pc01
$ ssh pc02
Thm tn 2 my vo file cu hnh s chy. V d t tn l
lamhosts c ni dung nh sau:
$ vi lamhosts
PC01
PC02
n phm <ESC>, ri lu li vi lnh
:wq!
Thng thng chng trnh lamd daemon s dng rsh ng
nhp vo my xa, nhng v rsh khng an ton cao nn thng
cc h thng dng ssh, nay chuyn sang dng ssh th chng ta
phi thay i bin mi trng LAMRSH.
$ export LAMRSH=ssh x
Dng mi trng LAM

o $ lamhalt -v
Gii phng ti nguyn ca ln chy chng trnh MPI trc chy tip mt
chng trnh MPI. Cch ny gip khng cn gi lamboot v lamhalt nhiu ln.
o $ lamclean v
Xem s lng cc task hin ang thc thi:
o $ mpitask
Ngoi ra LAM cho php chng ta lp trnh m hnh master/slave dng MPMD
nh sau: binary code ca chng trnh master v slave l t trn 2 file khc nhau:
o $ vi appfile
# 1 master v 2 slave
n0 master
n0-1 slave
o $ mpirun v appfile
Vit mt chng trnh hellompi.c v chy trn my cc b:
Bin dch (compile) chng trnh MPI:
o $ mpicc -o hellompi hellompi.c I .
o C th thm cc thng s link n th vin cn dng: VD: -lmath
o Hoc c th dng GNU gcc vi:
o $ gcc o -o hellompi hellompi.c I . -lmpi
Chy chng trnh MPI trn LAM:
o $ mpirun v -np 4 hellompi
o Nu chng trnh hellompi cn ly thng s t dng lnh mpirun th:
$ mpirun v np 4 hellompi 1000
Gi tr 1000 s c truyn vo 2 tham s hm main() ca chng
trnh hellompi, c th: argc = 1 v argv[] = {1000}.
Trong bui 1, cc sinh vin cn phi lm c bi tp:
Bi 1: Vit chng trnh hello in ra dng ch helloworld mpi trn nhiu process.
Bi 2: Tnh tng N s thc vi:
o i) Khi N <= 1000
o ii) Khi N cc ln: N >=
106.
o Yu cu: i) cc s s
c sinh ngu nhin;
ii) N ly t thng s
dng lnh; iii) gii thut
tnh tng ch dng hm
MPI_Send()
v
MPI_Recv()
khng
a
b
c dng cc hm
MPI_Reduce(),
MPI_Bcast()
Bi 3: Tnh tch phn ca hm f(x) lin tc trong khong [a, b] bng phng php
chia min ny thnh nhiu hnh thang nh. Sai s ty thuc vo s lng hnh
thang ny.
Ghi ch: Tt c cc bi tp s PHI np li (bt buc).

/**************************
* Source File: hellompi.c
* Chng trnh hellompi m t c bn cc vit chng trnh MPI.
* Chng trnh ny s in ra tn my v ch s rank ca process MPI ang
* thc thi tn my ny. V d mt output c th l:
$ mpirun np 4 hellompi
Hello world from: host@process_rank = pc01@0
Hello world from: host@process_rank = pc02@1
Hello world from: host@process_rank = pc02@3
Hello world from: host@process_rank = pc01@2
**************************/
#include <mpi.h>
int main(int argc, char* argv[]) {
int rank, nprocs;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
char s[30];
gethostname(s, 30);
printf("Hello world from: host@process_rank = %s@%d \n", s, rank);
MPI_Finalize();
return 0;
}

You might also like