Kompyuter arxitekturasi fanidan tayyorlangan



Yüklə 16,84 Kb.
tarix26.12.2023
ölçüsü16,84 Kb.
#197874
Kompyuter arxitekturasi fanidan tayyorlagan 7-amaliy ish


Kompyuter arxitekturasi fanidan tayyorlangan

O’ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI

MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI

3 – BOSQICH KI-11-21-GURUH TALABASINING

KOMPYUTER ARXITEKTURASI

FANIDAN TAYYORLANGAN


7-AMALIY ISHI



Bajardi: Oʻktamov O

Qabul qildi: Xoʻjaqulov N

Mavzu: MPI paketinidan foydalanish

Ishdan maqsad:MPI paketidan foydalanishni o'rganish

Xabarlarni uzatish modelidagi eng keng tarqalgan parallel dasturlash kutubxonasi MPI (Message Passing Interface). Tavsiya etilgan bepul MPI dasturi Argonne Milliy Laboratoriyasida ishlab chiqilgan MPICH paketidir. MPI protsessorlararo xabar almashish funktsiyalari kutubxonasi bo'lib, 300 ga yaqin funksiyalarni o'z ichiga oladi, ular quyidagi sinflarga bo'linadi: nuqtadan nuqtaga operatsiyalar, kollektiv almashinuv operatsiyalari, topologik operatsiyalar, tizim va yordamchi operatsiyalar. MPI funksiyalarning standartlashtirilgan kutubxonasi bo'lganligi sababli, MPI yordamida yozilgan dastur turli xil parallel kompyuterlarda o'zgarishsiz bajariladi. Asosan, dasturlarning katta qismini yozish uchun quyida keltirilgan bir nechta funktsiyalar etarli. MPI_Send funktsiyasi nuqtadan nuqtaga operatsiya bo'lib, ma'lumotlarni ma'lum bir jarayonga yuborish uchun ishlatiladi. MPI_Recv funktsiyasi ham nuqta operatsiyasi bo'lib, ma'lum bir jarayondan ma'lumotlarni olish uchun ishlatiladi. Xuddi shu ma'lumotlarni boshqa barcha jarayonlarga yuborish uchun MPI_BCAST jamoaviy operatsiyasi qo'llaniladi, bu barcha jarayonlar, ham jo'natish, ham qabul qilish tomonidan amalga oshiriladi. MPI_REDUCE jamoaviy almashish funktsiyasi op operatsiyasidan foydalangan holda guruhdagi har bir jarayonning kirish buferi yozuvlarini birlashtiradi va birlashtirilgan qiymatni ildiz jarayoni raqamlangan chiqish buferiga qaytaradi. MPI_Send (manzil, hisob, ma'lumotlar turi, maqsad, teg, xabar), manzil - jo'natuvchining buferida yuboriladigan ma'lumotlarning manzili count - xabar uzunligi ma'lumotlar turi - yuborilgan ma'lumotlar turi maqsad - qabul qilish jarayonining nomi teg - qo'shimcha ma'lumot uchun

comm - kommunikator nomi MPI_Recv (manzil, hisob, ma'lumotlar turi, manba, teg, xabar, holat) manzil - qabul qiluvchining buferidagi qabul qilingan ma'lumotlarning manzili count - xabar uzunligi ma'lumotlar turi - qabul qilingan ma'lumotlar turi manba - yuborish jarayonining nomi

teg - qo'shimcha ma'lumot uchun

comm – kommunikator nomi

status - qo'shimcha ma'lumot uchun

MPI_BCAST (manzil, hisob, ma'lumotlar turi, ildiz, aloqa)

root - yuborish (ildiz) jarayonining soni

MPI_REDUCE (sendbuf, recvbuf, count, ma'lumotlar turi, op, root, comm)

sendbuf - jo'natish buferining manzili

recvbuf - bufer manzilini qabul qilish

count - jo'natish buferidagi elementlar soni

ma'lumotlar turi - ma'lumotlar turi

op - qisqartirish operatsiyasi

ildiz - asosiy jarayonning raqami

Bundan tashqari, bir nechta tashkiliy funktsiyalar qo'llaniladi.

MPI_INIT ()

MPI_COMM_SIZE (MPI_COMM_WORLD, numprocs)

MPI_COMM_RANK (MPI_COMM_WORLD, myid)

MPI_FINALIZE ()

MPI_INIT ga qo'ng'iroq har bir MPI dasturida mavjud va kerak birinchi MPI qo'ng'irog'i bo'ling. Bundan tashqari, dasturning har bir bajarilishida faqat bitta qo'ng'iroq qilish mumkin Ushbu bayonotni amalga oshirgandan so'ng, hammasi parallel dastur jarayonlari parallel bajariladi. MPI_INIT.

MPI_COMM_WORLD boshlang'ich (va ko'p hollarda yagona) kommunikator bo'lib, aloqa konteksti va bog'liq jarayonlar guruhini belgilaydi. MPI_COMM_SIZE ga qo'ng'iroq qilish foydalanuvchi tomonidan ushbu dasturda boshlangan numprocs jarayonlari sonini qaytaradi. MPI_COMM_RANK ga qo'ng'iroq qilish orqali har bir jarayon jarayon guruhidagi o'z raqamini qandaydir nom bilan aniqlaydi. MPI_FINALIZE () qatori dasturdagi har bir jarayon tomonidan bajarilishi kerak. Natijada, MPI bayonotlari endi bajarilmaydi. COM_WORLD o'zgaruvchisi dasturni ishga tushirish uchun tayinlangan jarayonlar ro'yxatini belgilaydi. C tilidagi p sonini hisoblash uchun MPI dasturi.Birinchi parallel dastur uchun p sonini hisoblash dasturi qulay, chunki unda ma'lumotlar yuklanmaydi va javobni tekshirish oson. Hisob-kitoblar quyidagi formula yordamida integralni hisoblash uchun qisqartiriladi:

bu erda xi = (i-1/2) / n. Dastur 4.1-rasmda ko'rsatilgan.

#"mpi.h"ni o'z ichiga oladi

#o'z ichiga

int main (int argc, char * argv [])

{

int n, myid, numprocs, i; / * ordinatalar soni, jarayonlarning nomi va soni * / juft PI25DT = 3.141592653589793238462643; / * hisob-kitoblarning to'g'riligini baholash uchun ishlatiladi * /



juft mypi, pi, h, summa, x; / * mypi - individual jarayonning shaxsiy qiymati p, pi -

umumiy qiymati p * /

MPI_Init (argc, argv); / * tizim tomonidan o'rnatilgan * /

MPI_Comm_size (MPI_COMM_WORLD va numprocs);

MPI_Comm_rank (MPI_COMM_WORLD, myid);

esa (1)


{

agar (myid == 0) {

printf (“Intervallar sonini kiriting: (0 chiqish)”); / * ordinatalar sonini kiritish * /

scanf ("% d", n);

}

MPI_Bcast (n, 1, MPI_INT, 0, MPI_COMM_WORLD);



agar (n == 0) / * dasturdan chiqish shartini belgilash * /

sindirish;

boshqa {

h = 1,0 / (ikki marta) n; / * ba'zi bir jarayonning ma'lum p qiymatini hisoblash * /

summa = 0,0; uchun (i = myid +1; i

summa + = (4,0 / (1,0 + x * x));

}

mypi = h * yig'indisi; / * ba'zi bir jarayonning ma'lum p qiymatini hisoblash * /



MPI_Reduce (mypi, pi, 1, MPI_DOUBLE, MPI_SUM, 0,

MPI_COMM_WORLD); / * to'liq p qiymatini yarating * /

agar (myid == 0) / * hisoblash xatosining taxmini * /

printf ("pi taxminan% .16f. Xato

% .16f \ n ", pi, fabs (pi - PI25DT));

}

}



MPI_Finalize (); / * MPIdan chiqish * /

qaytish 0;

}

Guruch. 4.1 Si tilidagi p sonini hisoblash dasturi Matritsani vektorga ko'paytirish dasturi Matritsani vektorga ko'paytirish natijasi natija vektoridir. Muammoni hal qilish uchun algoritm qo'llaniladi, unda bir jarayon (magistr) boshqa jarayonlar (bo'ysunuvchilar) ishini muvofiqlashtiradi. Aniqlik uchun matritsa-vektorni ko'paytirishning yagona dasturi uch qismga bo'linadi: asosiy jarayon kodining umumiy qismi va bo'ysunuvchi jarayonning kodi.Dasturning umumiy qismida masalaning asosiy ob'ektlari. tasvirlangan: matritsa A, vektor b, natijada vektor c, jarayonlar soni aniqlanadi (kamida ikkita). Vazifa ikki qismga bo'linadi: asosiy jarayon va qul jarayonlar. Matritsani vektorga ko'paytirish masalasida jarayonlarga taqsimlanadigan ish birligi A matritsa qatorining nuqta ko'paytmasidan b vektorga to'g'ri keladi. Imzo! izohlar belgilangan. program main use mpi integer MAX_ROWS, MAX_COLS, rows, cols



parameter (MAX_ROWS = 1000, MAX_COLS = 1000)

! матрица А, вектор b, результирующий вектор с

double precision a(MAX_ROWS,MAX_COLS), b(MAX_COLS), с(MAX_ROWS) double precision buffer (MAX_COLS), ans /* ans – имя результата*/ integer myid, master, numprocs, ierr, status (MPI_STATUS_SIZE)

integer i, j, numsent, sender, anstype, row /* numsent – число посланных строк,

sender – имя процесса-отправителя, anstype – номер посланной строки*/

call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )

! главный процесс – master

master = 0

! количество строк и столбцов матрицы А

rows = 100

cols = 100

if ( myid .eq. master ) then

! код главного процесса

else


! код подчиненного процесса

endif


call MPI_FINALIZE(ierr)

stop


end

Bo'ysunuvchi jarayonlar natijalarni asosiy jarayonga yuboradi va para-asosiy jarayonning qabul qilish ishidagi MPI_ANY_TAG hisoblagichi shuni ko'rsatadi asosiy jarayon har qanday tartibda chiziqlarni qabul qiladi. Parametr status qabul qilingan xabar bilan bog'liq ma'lumotlarni taqdim etadi. V Fortranda bu MPI_STATUS_SIZE o'lchamdagi butun sonlar massivi. Argu-SOURCE xabarni yuborgan jarayonning raqamini o'z ichiga oladi, bu manzilga asosiy jarayon yangi ishni yo'naltiradi. TAG argumenti qayta ishlangan satrning satr raqamini saqlaydi, bu esa olingan natijani joylashtirishni ta'minlaydi. Asosiy jarayon A matritsasining barcha qatorlarini yuborgandan so'ng, u bo'ysunuvchi jarayonlarning so'rovlariga 0 belgisi bilan javob beradi.
Yüklə 16,84 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin