MPI bilan taqsimlangan xotirali dasturlash
MPI bilan taqsimlangan xotirali dasturlash 3.1.1 Ishni boshlash 3.1.2 Tuzish va bajarish 3.1.3 MPI dasturlari 3.1.4 MPI Init va MPI yakunlash
1.Eslatib o'tamiz, xabarlarni uzatish dasturlarida bitta asosiy xotirada ishlaydigan dastur juftlik odatda jarayon deb ataladi va ikkita jarayon funksiyalarni chaqirish orqali muloqot qilishi mumkin: bir jarayon jo‘natish funksiyasini, ikkinchisi esa qabul qilish funksiyasini chaqiradi. amalga oshirish MPI deb ataladi, ya'ni Message-Passing Interface qisqartmasi . MPI yangi dasturlash tili emas. U C, C++ va Fortran tillaridan chaqiriladigan funksiyalar kutubxonasini belgilaydi dasturlari . Biz MPI ning turli xil yuborish va qabul qilish funksiyalari haqida bilib olamiz. Biz ko'proq ishtirok etishi mumkin bo'lgan ba'zi "global" aloqa funktsiyalari haqida bilib olamiz ikkita jarayondan ko'ra . Ushbu funktsiyalar jamoaviy aloqalar deb ataladi . Ushbu MPI funktsiyalarining barchasini o'rganish jarayonida biz ba'zilari haqida ham bilib olamiz 3.1.1 Ishni boshlash Ehtimol, ko'pchiligimiz ko'rgan birinchi dastur "salom, dunyo" ning bir varianti edi. Kernighan va Ritchie klassik matnidagi dastur [29]: #include < stdio.h > int main(void) f printf ( "salom, dunyonn "); qaytish 0;
Keling , MPI-dan biroz foydalanadigan “salom, dunyo”ga o'xshash dastur yozaylik. Buning o'rniga Har bir jarayon shunchaki xabarni chop etishi uchun biz buni amalga oshirish uchun bitta jarayonni belgilaymiz chiqish , va boshqa jarayonlar unga xabarlarni yuboradi va u chop etadi. Parallel dasturlashda bu jarayonlar uchun keng tarqalgan (standart deyish mumkin). bilan aniqlanishi kerak. Shunday qilib, agar p jarayonlar mavjud bo'lsa, jarayonlar 0 , 1, darajalariga ega bo'ladi . Bizning parallel "salom, dunyo" uchun keling. jarayoni belgilangan jarayonga o'tadi va boshqa jarayonlar unga xabarlar yuboradi. 3.1.2 Tuzish va bajarish Dasturni kompilyatsiya qilish va ishga tushirish tafsilotlari sizning tizimingizga bog'liq, shuning uchun siz mahalliy mutaxassis bilan tekshirish kerak bo'lishi mumkin . Biroq, qachon bo'lishimiz kerakligini eslang aniq , biz dastur manbasini yozish uchun matn muharriridan foydalanmoqdamiz deb taxmin qilamiz va
3.1.2-dastur: Jarayonlardan salomlarni chop etuvchi MPI dasturi uchun buyruq qatori. Ko'pgina tizimlar mpicc deb nomlangan buyruqdan foydalanadi kompilyatsiya uchun : $ mpicc g devor yoki mpi salom mpi salom.c Odatda, mpicc - bu C kompilyatori uchun o'ram bo'lgan skript . O'rash skripti uning asosiy maqsadi qandaydir dasturni ishga tushirishdir. Bunday holda, dastur C kompilyatoridir. Biroq, o'rash kompilyatorning ishlashini soddalashtiradi kerakli sarlavhali fayllarni qayerdan topish va qaysi kutubxonalar bilan bog'lanish kerakligini ayting ob'ekt fayli.
Eslatib o'tamiz, dollar belgisi ($) qobiq so'rovidir, shuning uchun uni kiritmaslik kerak. Shuni ham esda tutingki, uchun biz Gnu C kompilyatoridan gcc foydalanamiz deb taxmin qilamiz va biz har doim variantlari -g, -Wall, va -o. Qo'shimcha ma'lumot uchun yuqoridagi bo'limga qarang. MPI bilan taqsimlangan xotirada dasturlash Ko'pgina tizimlar mpiexec bilan dasturni ishga tushirishni ham qo'llab-quvvatlaydi : $ mpiexec n <jarayonlar soni> ./ mpi salom Shunday qilib , dasturni bitta jarayon bilan ishga tushirish uchun biz yozamiz $ mpiexec n 1 ./ mpi salom va dasturni to'rtta jarayon bilan ishga tushirish uchun biz yozamiz $ mpiexec n 4 ./ mpi salom Bitta jarayon bilan dasturning chiqishi bo'ladi 0/1 jarayondan salom! va to'rtta jarayon bilan dasturning chiqishi bo'ladi 0/4 jarayondan salom! 1/4 jarayondan salom! 2/4 jarayondan salom! 3/4 jarayondan salom! Qanday qilib mpiexecni chaqirishdan bir yoki bir nechta salomlashishga erishamiz? The mpiexec buyrug'i tizimga <jarayonlar soni> misollarini ishga tushirishni aytadi bizning < mpi salom> dasturimiz. Shuningdek, u tizimga qaysi yadro har biri ishlashi kerakligini aytishi mumkin dasturning namunasi . Jarayonlar bajarilgandan so'ng, MPI amalga oshiriladi jarayonlar bir-biri bilan aloqa qilishiga ishonch hosil qilish haqida g'amxo'rlik qiladi. Katalog protokollari yordamida kesh muvofiqligini saqlashning asosiy komponentlari 4.3-rasmda ko'rsatilgan. Protsessorlar bilan bog'langan mahalliy keshlar mahalliyga ega saqlangan umumiy o'zgaruvchilarning nusxalarini yangilashni muvofiqlashtirish uchun kesh kontrollerlari mahalliy keshlar. Markaziy boshqaruvchi kesh kogerentligini asosiy yo'lga qo'yish uchun javobgardir tizimi uchun. Umumiy xotiraning bir qismi belgilovchi yozuvlarni saqlaydigan katalogdir har bir umumiy blokning holati. Katalogdagi har bir