Mavzu: mpi-2 standarti tushunchasi. Mundarij kirish. 5 I. Bob parallel kompyuterlar tasnifi 8


Download 64 Kb.
bet6/10
Sana08.01.2022
Hajmi64 Kb.
#243794
1   2   3   4   5   6   7   8   9   10
Bog'liq
kurs

2.2 Kollektiv asoslar 


Kollektiv funktsiyalar jarayonlar guruhidagi barcha jarayonlar o'rtasidagi aloqani o'z ichiga oladi (bu butun jarayonlar havzasini yoki dastur tomonidan belgilangan pastki qismni anglatishi mumkin). Odatda funktsiya - bu MPI_Bcastqo'ng'iroq (" translyatsiya " uchun qisqartma ). Ushbu funktsiya bitta tugundan ma'lumotlarni oladi va jarayonlar guruhidagi barcha jarayonlarga yuboradi. Teskari operatsiya - bu MPI_Reduceqo'ng'iroq, bu guruhdagi barcha jarayonlardan ma'lumotlarni olib, operatsiyani bajaradi (masalan, yig'ish) va natijalarni bitta tugunda saqlaydi. MPI_Reduceko'pincha har bir protsessor ma'lumotlarning bir qismida ishlaydi va keyin ularni natijaga birlashtirgan katta taqsimlangan hisob-kitoblarning boshida yoki oxirida foydalidir.

Boshqa operatsiyalar yanada murakkab vazifalarni bajaradi, masalan n ta ma'lumotni MPI_Alltoallqayta tartibga soladi , masalan n- tugun har biridan ma'lumotning n- elementini oladi .

Ko'p MPI funktsiyalari jarayonlar o'rtasida yuboriladigan ma'lumotlar turini belgilashni talab qiladi. Buning sababi shundaki, MPI turli xil tugunlarda turlicha aks ettirilishi mumkin bo'lgan heterojen muhitni qo'llab-quvvatlashga qaratilgan [14] (masalan, ular har xil endiannessga ega bo'lgan turli xil CPU arxitekturalarida ishlayotgan bo'lishi mumkin ), bu holda MPI dasturlari ma'lumotlar konvertatsiyasini amalga oshirishi mumkin . [14] C tili bir turini o'zi, bir parametr sifatida qabul qilinishi uchun ruxsat bermaydi boshlab, MPI konstantalarni bashorat MPI_INTMPI_CHARMPI_DOUBLEmos uchun intchardouble, va hokazo

S qatorlarini intbarcha jarayonlardan bittasiga o'tkazadigan misol C. Qabul qiluvchi jarayon "ildiz" jarayoni deb ataladi va u har qanday belgilangan jarayon bo'lishi mumkin, lekin odatda bu jarayon 0 bo'ladi. Barcha jarayonlar o'z massivlarini ildizga yuborishni so'raydi MPI_Gather, bu har bir jarayonga (shu jumladan, root o'zi) chaqiradi MPI_Sendva ildiz MPI_Recvbarcha ushbu massivlarni kattaroq qismga yig'ish uchun buyurtma qilingan qo'ng'iroqlarning tegishli sonini qiladi : [15]

int send_array [ 100 ];

int root = 0 ; / * yoki har qanday narsa * /

int num_procs , * recv_array ;

MPI_Comm_size ( comm , & num_procs );

recv_array = malloc ( num_procs * sizeof ( send_array ));

MPI_Gather ( send_array , sizeof ( send_array ) / sizeof ( * send_array ), MPI_INT,

recv_array , sizeof ( send_array ) / sizeof ( * send_array ), MPI_INT ,

root , comm );

Biroq, buning o'rniga siz 100 ints dan farqli o'laroq ma'lumotlarni bitta blok sifatida yuborishni xohlashingiz mumkin . Buning uchun ma'lumotlar turini "tutashgan blok" ni belgilang:

MPI_Datatype yangi turi ;

MPI_Type_contiguous ( 100 , MPI_INT , & newtype );

MPI_Type_commit ( & yangi turi );

MPI_Gather ( massiv , 1 , newtype , ece_array , 1 , newtype , root , comm );

Ma'lumotlar sinfidan yoki ma'lumot strukturasidan MPI_Type_create_structo'tish uchun MPI_predefinedma'lumotlar turlaridan quyidagicha MPI olingan ma'lumotlar turini yaratadi :

int MPI_Type_create_struct ( int soni ,

int * blocklen ,

MPI_Aint * disp ,

MPI_Datatype * turi ,

MPI_Datatype * newtype )

qaerda:


  • countbloklar bir qator bo'lib, tillo (elementlarda) uzunligini belgilaydi blocklendispva type.

  • blocklen har bir blokdagi elementlarning sonini o'z ichiga oladi,

  • disp har bir blokning bayt siljishlarini o'z ichiga oladi,

  • type har bir blokdagi element turlarini o'z ichiga oladi.

  • newtype (chiqish) ushbu funktsiya tomonidan yaratilgan yangi olingan turini o'z ichiga oladi

disp(Dislokatsiyalar) array uchun zarur bo'lgan ma'lumotlar strukturasi hamjihatlikni , kompilyator may pad beri bir sinf yoki ma'lumotlar tarkibida o'zgaruvchilar. Turli xil maydonlar orasidagi masofani topishning eng xavfsiz usuli bu ularning manzillarini xotirada olishdir. Bu MPI_Get_addressodatda C &operatori bilan bir xil bo'lgan, lekin bu xotirani segmentatsiya qilishda to'g'ri bo'lmasligi mumkin . [16]

Ma'lumotlar strukturasini bitta blok sifatida o'tkazish, bir vaqtning o'zida bitta elementni uzatishga qaraganda ancha tezroq, ayniqsa operatsiya takrorlanishi kerak bo'lsa. Buning sababi shundaki, belgilangan o'lchamdagi bloklar uzatish paytida ketma-ketlikni talab qilmaydi . [17]

Quyidagi ma'lumotlar tuzilmalari berilgan:


Download 64 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling