Paralel Sanal Makinelerde Paralel Programlama Ümit Çiftçi
1. PVM ÇEVRE VE UYGULAMA YAPISI
1.1 Supervisors & Workers
Şekil.1 Bağımsız workerlarla Supervisor-Worker sıralama yapısı
Şekil.2 İletişim halindeki workerlarla Supervisor-Worker sıralama yapısı
1.2 Hiyerarşik Yapı
Şekil.3 Supervisor-Worker Hiyerarşik Sıralama Yapısı
2. GÖREV YARATMA
2.1 Görev Tanımlayıcısı Alımı a-)Task’s TID mytid=pvm_mytid b-)Child’s TID pvm_spawn(………………&tid); c-)Parent’s TID my_parent_tid=pvm_parent( ); d-)Deamon’s TID deamon_tid=pvm_tidohost(id);
2.2 Dinamik Görev Oluşturma num=pvm_spawn(Child,Arguments,Flag,Where,HowMany,&Tids) Örnek: n1=pvm_spawn(“/user/rewini/worker”, 0, 1, “homer”, 2, &tid1) n2=pvm_spawn(“/user/rewini/worker”, 0, 1, “fermi”, 4, &tid2)
3. GÖREV GRUPLARI i=pvm_joingroup(group_name) info=pvm_lvgroup(group_name) pvm_gsize(group_name) pvm_gettid(group_name, intance number) pvm_getinst(group_name, TID)
Varsayalım; T0,T1,T2 ve T3 görevlerimiz ve TID değerleri sırasıyla 200, 100, 300 ve 400 olsun. T > i1=pvm_joingroup(“slave”) Grup ilk kez oluşturuluyor. (i1=0). T > i2=pvm_joingroup(“slave”) (i2=1). T > i3=pvm_joingroup(“slave”) (i3=2). T > info=pvm_lvgroup(“slave”) (1 numara kullanılabilir durumda) Herhangi bir görev -----> size=pvm_gsize(“slave”) (size=2). T > i4=pvm_joingroup(“slave”) (i4=1). T > i5=pvm_joingroup(“slave”) (i5=3). Herhangi bir görev -----> tid=pvm_gettid(“slave”,1) (tid=400) Herhangi bir görev -----> inst=pvm_getinst(“slave”,100) (inst=3)
3. GÖREVLER ARASI İLETİŞİM
3.1 Mesaj Tamponları Bufid=pvm_initsend(encoding_option) Bufid=pvm_mkbuf(encoding_option) ________________________________________ Kodlama Seçeneği Anlamı 0 XDR 1 No encoding 2 Leave data in place Tablo.1 Tampon Oluşturma için Kodlama Seçenekleri
3.2 Veri Paketleme info=pvm_pkint(my_array, n, 1) pvm_pkstr(), pvm_pkbyte(), pvm_pkdouble(), pvm_pkfloat(), pvm_pkint(), pvm_pklong(), pvm_pkshort()