1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Tính toán song song và phân toán - Chương 8: PVM trong việc lập trình song song

16 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 1,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Tính toán song song và phân toán - Chương 8: PVM trong việc lập trình song song bao gồm những nội dung về môi trường truyền thông điệp, hệ thống truyền thông điệp, PVM – parallel virtual machine, kiến trúc PVM, cài đặt PVM, sử dụng PVM.

Trang 1

• 

– 

– 

– 

• 

• 

• 

• 

–  – 

– 

Trang 2

– 

– 

– 

• 

–  – 

• 

Trang 3

• 

• 

– 

– 

• 

• 

• 

• 

• 

Trang 4

• 

• 

• 

• 

• 

• 

• 

Trang 5

• 

$ tar xvfz pvm3.4.6.tgz

• 

• 

$ export PVM_ROOT=$HOME/pvm3

$ export PVM_ARCH=LINUX

• 

$ cd $HOME

$ make

• 

$ pvm pvm>

Trang 6

pvm> add

pvm> delete

pvm> conf

• 

• 

pvm>quit

$

• 

pvm>halt

$

• 

• 

$PVM_ROOT/bin/$PVM_ARCH

• 

• 

– cd $HOME/folder – $aimk hello hello_other – $./hello

Trang 7

SDIR = $(HOME)/folder

XDIR = $(PVM_ROOT)/bin/$(PVM_ARCH) INC = $(ARCHCFLAGS) -I$(PVM_ROOT)/include LIB = -L$(PVM_ROOT)/lib/$(PVM_ARCH) -lpvm3 PROGS = hello hello_other

default: hello

hello: $(SDIR)/hello.c

$(CC) -o $@ $(SDIR)/$@.c $(INC) $(LIB) hello_other: $(SDIR)/hello_other.c $(CC) -o $@ $(SDIR)/$@.c $(INC) $(LIB)

mv $@ $(XDIR)

• 

• 

• 

Trang 8

–  – 

• 

pvm_recv

pvm_send

send

receive

Trang 9

• 

• 

• 

• 

– 

bin/$PVM_ARCH/

int numt = pvm_spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids)

Trang 10

int numt = pvm_spawn(char *task, char **argv, int

flag, char *where, int ntask, int *tids)

int numt = pvm_spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids)

• 

–  –  –  –  –  –  – 

• 

– 

"mar.lang.ac.vn:/home/lang/project”

int numt = pvm_spawn(char *task, char **argv, int

flag, char *where, int ntask, int *tids)

• 

• 

int numt = pvm_spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids)

Trang 11

– 

– 

• 

• 

• 

– 

– 

/* spawn P lslave program */

pvm_spawn("lslave",(char**)0,0,"",P,tid); /* receive buf from slaves */

for ( i = 0; i <P; i++ ){

pvm_recv(-1,-1);

pvm_upkstr(buf);

printf( "%x %s\n", tid[i], buf ); }

Trang 12

/* get hostname of slave */

gethostname( buf, 10 );

/* send buf to master */

pvm_initsend( 0 );

pvm_pkstr( buf );

pvm_send( pvm_parent(), 111 );

•  See hello.c and hello_other.c

• 

• 

• 

–  – 

• 

Trang 13

• 

• 

• 

– 

– 

pvm_spawn( "psumslave", (char**)0, PvmTaskDefault, "", P, tid );

for ( p = 0; p < aP; p++ ){

pvm_initsend( PvmDataDefault );

pvm_pkint( &r, 1, 1 );

pvm_send( tid[p], 11111 );

pvm_initsend( PvmDataDefault );

pvm_pkdouble( &a[p*r], r, 1 );

pvm_send( tid[p], 22222 );

} for ( i = P*r; i < N; i++ )

s += a[i];

for ( p = 0; p < aP; p++ ){

pvm_upkdouble( &sp, 1, 1 );

s += sp;

}

Trang 14

– 

pvm_recv( ptid, 11111 ); pvm_upkint( &r, 1, 1 );

data = new double[r];

pvm_recv( ptid, 22222 ); pvm_upkdouble( data, r, 1 );

for ( i = 0; i < r; i++ )

sp += data[i];

pvm_initsend( PvmDataDefault ); pvm_pkdouble( &sp, 1, 1 ); pvm_send( ptid, 99999 );

• 

• 

• 

• 

• 

Trang 15

if (pvm_parent() == PvmNoParent)

//Master's statements

else

//Slave's statements

pvm_exit();

• 

• 

• 

• 

• 

• 

Trang 16

• 

Ngày đăng: 10/05/2021, 23:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm