G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon


Download 1.46 Mb.
bet66/85
Sana24.12.2022
Hajmi1.46 Mb.
#1062519
1   ...   62   63   64   65   66   67   68   69   ...   85
Bog'liq
ParVychGafGal (1)

MPI_Reduce funksiyasidan foydalanish misolini ko'rib chiqamiz . DA

Oldingi bo'limda biz o'rtachani qanday hisoblashni bilib oldik




MPI_Scatter va MPI_Gather funktsiyalari . MPI_Reduce- dan foydalanish soddalashtiradi

juda ko'p kod, bu erda kodning faqat asosiy qismi ko'rsatilgan.


float *rand_nums = NULL;

rand_nums = yaratish_rand_raqamlari (har_proc uchun_elementlar_soni);


float local_sum = 0; int i;


uchun (i = 0; i < har_proc uchun_elementlar soni; i++) {


mahalliy_sum += rand_sonlar[i];


}



printf("%d - %f jarayoni uchun mahalliy yig'indi, avg = %f\n",
mahalliy_sum, mahalliy_sum / har_proc uchun_elementlar soni);
dunyo_darajasi,

float global_sum;



Machine Translated by Google
MPI_Reduce(&local_sum, &global_sum, 1, MPI_FLOAT, MPI_SUM, 0, MPI_COMM_WORLD);

agar (jahon_darajasi == 0) {


printf("Jami summa = %f, avg = %f\n", global_sum,


global_sum / (jahon_o'lchami * har bir ish uchun_elementlar soni));


} Yuqoridagi kodda har bir jarayon tasodifiy sonlarni hosil qiladi




va local_sum mahalliy summasini hisoblab chiqadi. Keyin local_sum ga kamayadi


MPI_SUM yordamida ildiz jarayoni .

Bir vaqtning o'zida ko'p ilovalar uchun qisqartirilgan ruxsat kerak bo'ladi faqat ildiz jarayoniga emas, balki barcha jarayonlarga olib keladi. Buning uchun MPI_Allreduce funktsiyasidan foydalaniladi:


MPI_Allreduce( bekor* yuborish_maÿlumotlari, bekor* recv_maÿlumotlari, int soni, MPI_Datatype ma'lumotlar turi, MPI_Op op, MPI_Comm kommunikatori)
MPI_Allreduce ning bajarilish strukturasi quyida tasvirlangan.


Download 1.46 Mb.

Do'stlaringiz bilan baham:
1   ...   62   63   64   65   66   67   68   69   ...   85




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