28-Ma’ruza. MPI texnologiyasi yordamchi parallellashtirish kutubxonalari Reja: 1. MPI texnologiyasi
2. Parallellashtirish kutubxonalari
Tayanch iboralar: MPI texnologiyasi,
MPI (xabarni uzatish interfeysi) - bu xabarlarni uzatish nuqtai nazaridan parallel jarayonlarning ishlashini qo'llab-quvvatlash uchun mo'ljallangan funktsiyalar kutubxonasi. MPI dasturchiga mashina arxitekturasidan (bir protsessorli yoki umumiy yoki mahalliy xotiraga ega ko'p protsessorli), filiallarning nisbiy joylashuvidan (bir xil protsessorda yoki turli protsessorlarda) qat'i nazar, parallel dastur doirasidagi jarayonlarning o'zaro ta'sirining yagona mexanizmini taqdim etadi va API (dasturlar dasturchilari interfeysi, ya'ni dastur ishlab chiquvchi interfeysi). Operatsion tizim MPI-dan foydalanadigan dasturni disk raskadrovka qilish osonroq (parallel dasturlashda stereotip xatolarga yo'l qo'yish imkoniyati kamroq) va boshqa platformalarga tezroq ko'chiriladi (ideal, oddiy qayta kompilyatsiya qilish orqali). Kamida MPI quyidagilarni o'z ichiga oladi: dasturlash kutubxonasi (C, C++ va FORTRAN tillari uchun sarlavha va kutubxona fayllari) va ilovalarni yuklovchi. Qo'shimcha ravishda: profil yaratish Kutubxona versiyasi (parallellashtirishning optimalligini aniqlash uchun parallel dasturni sinovdan o'tkazish bosqichida foydalaniladi); X-Window uchun grafik va tarmoq interfeysi bilan yuklovchi va boshqalar. MPI katalog tuzilmasi dasturchi foydalanuvchilarga yaxshi tanish: bin, include, lib, man, src, ... Minimal funktsiyalar to'plamini o'rganish oson va ishonchli dasturni tezda yozish imkonini beradi. MPI funktsiyalarining butun arsenalidan foydalanish ishonchlilikni saqlab, tezkor dasturni olish imkonini beradi. Bir nechta kompyuterlar bir-biri bilan uchta usuldan biri bilan bog'lanishi mumkin:
1. Umumiy xotira orqali Unix u bilan ishlash uchun qulayliklarga ega (Unixning BSD va ATT-klonlari uchun har xil)',
2. Ko'p protsessorli hisoblash tizimlarining yuqori tezlikdagi mashina ichidagi tarmog'i orqali;
3. Odatda TCP / IP protokolida ishlaydigan tarmoq orqali.
MPI dasturiy vositalar to'plami yuqori tezlikdagi mashina ichidagi tarmoq orqali ulangan ko'p protsessorli kompyuter tizimlari uchun standart sifatida ishlab chiqilgan, ammo MPI uchta ulanish usulining har qandayida ham ishlashi mumkin. Biroq, MPI ning birinchi nashri quyidagi cheklov tufayli standart bo'lib qolmadi: MPI funktsiyalari orqali bir-biri bilan aloqa qiladigan barcha jarayonlar bir vaqtning o'zida ularning bajarilishini boshlaydi va tugatadi. Bu MPI dan parallel ilovalar uchun skelet sifatida foydalanishga to'sqinlik qilmaydi, lekin navbat tizimlari (mijoz-server ilovalari va boshqalar) eski asboblar to'plami asosida ishlab chiqilishi kerak. Birgalikda xotira va semaforlar orqali past darajadagi uzatish MPI kabi kutubxonalardan foydalanish afzalroq, degan nuqtai nazar mavjud, chunki ular tezroq. Bunga quyidagi e'tirozlar bildirilishi mumkin:
1. Yaxshi parallel dasturda vaqtning kichik qismi filiallar o'rtasidagi haqiqiy o'zaro ta'sirga (ma'lumotlarni uzatish va sinxronizatsiya) sarflanadi - umumiy ish vaqtining bir necha foizi. Shunday qilib, transferlarni sekinlashtirish, masalan, ikki marta, ishlashning umumiy pasayishini bildirmaydi - bu bir necha foizga tushadi. Ko'pincha bu ishlashning pasayishi qabul qilinadi va boshqa fikrlar bilan oqlanadi.
2. MPI tabiatan tezkor vositadir. Tezlikni oshirish uchun u amaliy dasturchilar ko'pincha o'ylamaydigan usullardan foydalanadi. Masalan:
uch marta buferlash ma'lumotlarni jo'natishda kechikishlarning oldini olishga imkon beradi - qabul qiluvchi filial hali qabul qilishga tayyorlanmagan bo'lsa ham, nazorat darhol uzatuvchi filialga qaytariladi;
MPI ko'p ish zarralarini ishlatadi, ishining ko'p qismini past ustuvorliklarga qo'yadi; buferlash va multithreading ga o'tkazish paytida amaliy dasturning ishlamay qolishning salbiy ta'sirini kamaytiradi;
bittadan hammaga ma'lumotlarni uzatish ishtirokchi filiallar soniga emas, balki ushbu raqamning logarifmiga mutanosib vaqt oladi.
3. Dasturlarni boshqa platformalarga o'tkazish qayta yozish va qayta tuzatishni talab qilmaydi. Keng doiradagi odamlar tomonidan foydalaniladigan dastur uchun ajralmas sifat. Shuni ham hisobga olish kerakki, mashinalar allaqachon paydo bo'lmoqda, ularda dasturlararo o'zaro ta'sir vositalari orasida faqat MPI mavjud.
4. MPI parallel dasturlashda yo'l qo'yilgan odatiy xatolardan sug'urta qilmaydi, ammo bu kutubxonadan foydalanish ularning ehtimolini kamaytiradi. Umumiy xotira va semaforlar bilan ishlash funktsiyalari juda oddiy, ibtidoiy. Ularning yordami bilan dastur uchun zarur bo'lgan harakatni xatosiz amalga oshirish ehtimoli ko'rsatmalar sonining ko'payishi bilan tez kamayadi; disk raskadrovka orqali xatoni topish ehtimoli nolga yaqin, chunki disk raskadrovka vositasi ba'zi filiallarning bajarilishida kechikishni keltirib chiqaradi va shu bilan boshqalarning normal ishlashiga imkon beradi (filiallar umumiy ma'lumotlar uchun raqobatni to'xtatadi). Malumot uchun kutubxona sarlavhasi fayllarini include pastki katalogidan chop etish foydalidir. Convex MPI-da faqat bitta shunday fayl mavjud: mpi.1i, WinMPICHda ulardan uchtasi mavjud: mplh(konstantalar va turlarning tavsiflari), mpi_errno.1t(xato kodlari va ularning tavsiflari) va binding.h (funktsiya prototiplari). Windows-da, asl nusxalarni emas, balki amalga oshirish bilan bog'liq barcha tafsilotlar tozalangan nusxalarni chop etish tavsiya etiladi (masalan, _declspec (dllimport) va boshqalar). Keyinchalik matnda funksiya prototiplari, o'zgaruvchilarning tavsiflari, turlari va konstantalari berilmagan. Manual sahifalar yana bir yaxshi yordamdir. Qo'shimcha ma'lumot olish uchun MPI spetsifikatsiyasi, o'quv qo'llanmalari va turli ilovalarini NetLib serverida (http://www.netlib.org/mpi) topish mumkin. Bu erda MPI kitobi alohida e'tiborga loyiqdir: MIT Press tomonidan to'liq ma'lumotnoma. Parallel dastur bir vaqtning o'zida ishlaydigan bir nechta jarayonlardan (chiziqlar, oqimlar, vazifalar) iborat. Turli jarayonlar har xil protsessorlarda ham, bir xilda ham ishlashi mumkin - bu dastur uchun muhim emas, chunki ikkala holatda ham ma'lumot almashish mexanizmi bir xil. Har bir ip jarayon raqami, jarayonning o'ziga xos atributi bo'lgan manfiy bo'lmagan butun son bilan bog'langan. Jarayonlar bir-biri bilan xabarlar shaklida aloqa qiladi. Xabarning atributlari jo'natuvchining jarayon raqami, qabul qiluvchining jarayon raqami va xabar identifikatoridir. Ular uchta maydonni o'z ichiga olgan MPI_ Status tuzilishiga ega: MPI_Source (yuboruvchi jarayon raqami), MPI_Tag (xabar identifikatori), MPI_Error (xato kodi); qo'shimcha maydonlar bo'lishi mumkin. Xabar identifikatori (msgtag) 0 dan 32767 gacha bo'lgan manfiy bo'lmagan butun son bo'lgan xabar atributidir. Identifikatorlar ilova va aloqa kutubxonasiga xabarlarni bir-biridan ajratish imkonini beradi. Muayyan hisob-kitoblarni birgalikda amalga oshirish uchun dastur ichidagi jarayonlar guruhlarga birlashtiriladi. Guruhlarni joylashtirish mumkin. Guruh ichida barcha jarayonlar raqamlangan. Har bir jarayon aloqa kutubxonasidan guruh ichidagi o'z raqamini so'rashi va raqamga qarab hisob-kitoblarning tegishli qismini bajarishi mumkin. Har bir guruhning u bilan bog'langan o'z kommunikatori mavjud. Shuning uchun, yo'naltirishda siz ushbu yo'naltirish amalga oshiriladigan guruhning identifikatorini ko'rsatishingiz kerak. Barcha jarayonlar oldindan belgilangan MPICOMMWORLD ID bilan guruhda joylashgan. "Jarayon" atamasi Unixda ham qo'llaniladi va bu erda hech qanday chalkashlik yo'q: Unix da jarayon MPI orqali dasturdagi boshqa jarayonlarga ulangan oddiy Unix jarayoni kabi boshlanadi va ishlaydi. Aks holda, jarayonlarni bir-biridan ajratilgan deb hisoblash kerak: ular turli xil kod, stek va ma'lumotlar sohalariga ega.