if ( my_rank == 0 ) {
int other_rank ;
printf ( "Bizda% i jarayon bor. \ n " , num_procs );
/ * Boshqa barcha jarayonlar uchun jo`natgan xabarlar * /
uchun ( other_rank = 1 ; other_rank < num_procs ; other_rank ++ )
{
sprintf'i ( tampon , "Salom% i!" , Other_rank );
MPI_Send ( buf , sizeof ( buf ), MPI_CHAR , other_rank ,
0 , MPI_COMM_WORLD );
}
/ * Boshqa barcha jarayonlardan xabarlarni qabul qilish * /
for ( other_rank = 1 ; other_rank < num_procs ; other_rank ++ )
{
MPI_Recv ( buf , sizeof ( buf ), MPI_CHAR , other_rank ,
0 , MPI_COMM_WORLD , MPI_STATUS_IGNORE );
printf ( "% s \ n " , buf );
}
} boshqa {
/ * # 0 jarayonidan xabar olish * /
MPI_Recv ( buf , sizeof ( buf ), MPI_CHAR , 0 ,
0 , MPI_COMM_WORLD , MPI_STATUS_IGNORE );
assert ( memcmp ( buf , "Salom" , 6 ) == 0 );
/ *
Process # 0 ga xabar yuboring * / sprintf ( buf , "Jarayon uchun hisobot berish% i." , My_rank );
MPI_Send ( buf , sizeof ( buf ), MPI_CHAR , 0 ,
0 , MPI_COMM_WORLD );
}
/ * Aloqa infratuzilmasini buzish * /
MPI_Finalize ();
qaytish 0 ;
}
4 ta jarayon bilan ishlaganda u quyidagi natijani berishi kerak: [43]
$ mpicc example.c && mpiexec -n 4 ./a.out
Bizda 4 ta jarayon mavjud.
Xizmat uchun 1 ta hisobot berish jarayoni.
Vazifa bo'yicha hisobot 2-jarayon.
Vazifa bo'yicha hisobot 3-jarayon.
Bu erda, mpiexec4 misol dasturini amalga oshirish uchun ishlatiladigan bir buyruq jarayonlar nomi ish vaqtida dasturining mustaqil holat har biri, va tayinlangan saf (ya'ni, ularning soni identifikatorlar) 0, 1, 2, va 3 mpiexectomonidan tavsiya etiladi MPI standarti, garchi ba'zi ilovalar nom ostida shunga o'xshash buyruqni taqdim etsa ham mpirun. Bu MPI_COMM_WORLDbarcha jarayonlardan iborat bo'lgan kommunikator.
Bitta dastur, bir nechta ma'lumotlar ( SPMD ) dasturlash modeli shu bilan osonlashtiriladi, ammo kerak emas; ko'plab MPI dasturlari bir xil, turli xil, bajariladigan fayllarni bir xil MPI ishida boshlashga imkon beradi. Har bir jarayon o'z darajasiga, dunyodagi jarayonlarning umumiy soniga va ular o'rtasida yoki nuqta-nuqta (yuborish / qabul qilish) aloqasi bilan yoki guruh o'rtasida jamoaviy aloqa orqali aloqa qilish qobiliyatiga ega. MPI uchun SPMD uslubidagi dasturni taqdim etish kifoyaMPI_COMM_WORLD, o'z darajasiga va algoritmlarga nima qilishni hal qilishga imkon beradigan dunyoning kattaligi. Keyinchalik real vaziyatlarda I / U ushbu misolga qaraganda ancha ehtiyotkorlik bilan boshqariladi. MPI ma'lum bir tizimda qanday standart I / O (stdin, stdout, stderr) ishlashi kerakligini belgilamaydi. Umuman olganda Rank-0 jarayonida kutilganidek ishlaydi va ba'zi bir dasturlar boshqa jarayonlardan olingan natijalarni ushlab turadi.
MPI protsessordan ko'ra jarayon tushunchasidan foydalanadi. Dastur nusxalari haritalanmış MPI ish vaqti tomonidan protsessorlari uchun. Shu ma'noda, parallel mashina 1 ta fizik protsessorni yoki N ni mavjud bo'lgan protsessorlarning umumiy sonini yoki ularning orasidagi narsalarni xaritalashi mumkin. Maksimal parallel tezlikni oshirish uchun ko'proq jismoniy protsessorlardan foydalaniladi. Ushbu misol o'z xatti-harakatlarini N dunyosining o'lchamiga moslashtiradi, shuning uchun ham har bir o'lcham o'zgarishi uchun kompilyatsiya qilinmasdan ish vaqti konfiguratsiyasini o'lchamoqchi bo'ladi, garchi ish vaqti qarorlari mavjud bo'lgan bir xil miqdordagi mutanosiblik miqdoriga qarab farq qilishi mumkin.
Do'stlaringiz bilan baham: |