Parallel dasturlash
Von Neumann mashina modeli protsessor ko'rsatmalar ketma-ketligini bajarishini taxmin qiladi. Ko'rsatmalar turli xil arifmetik operatsiyalarga qo'shimcha ravishda, xotirada o'qilishi / yozilishi kerak bo'lgan ma'lumotlarning manzillarini va / yoki keyingi qo'llanmaning manzilini belgilashi mumkin. Faqatgina ushbu asosiy model nuqtai nazaridan kompyuterni dasturlash mumkin bo'lsa-da, ushbu usul ko'p maqsadlar uchun juda qiyin, chunki biz millionlab xotira pozitsiyalarini kuzatib borishimiz va minglab mashina ko'rsatmalarining bajarilishini tashkil etishimiz kerak. Shunday qilib, modulli dizayn uslubi qo'llaniladi, bunda murakkab tarkibiy qismlar oddiy tarkibiy qismlardan va tarkibiy qismlardan yuqori darajadagi mavhumliklar nuqtai nazaridan (masalan, ma'lumotlar tuzilishi, iteratsiya looplari va protseduralari) tuziladi. Abstraktsiyalar (masalan, protseduralar) ob'ektlarning ichki tuzilishi haqida qayg'urmasdan manipulyatsiya qilinishiga imkon berish orqali modulli foydalanishni osonlashtiradi. Shunday qilib, Fortran, C, Ada va Java kabi yuqori darajadagi tillar ushbu abstraksiyalar nuqtai nazaridan ifodalangan rivojlanish uchun imkon yaratadi va avtomatik ravishda bajariladigan kodga tarjima qilinadi. Parallel dasturlash qo'shimcha murakkablik manbalarini taqdim etadi: agar biz eng past darajada dasturlashimiz kerak bo'lsa, unda biz nafaqat bajarish uchun ko'rsatmalar sonini ko'paytirishimiz kerak, balki minglab protsessorlarning bajarilishini boshqarishimiz va millionlab protsessorlararo o'zaro aloqalarni muvofiqlashtirishimiz kerak. Shunday qilib, abstraktsiya va modullik hech bo'lmaganda ketma-ket dasturlash kabi muhimdir. Aslida, biz modullikni parallel dasturiy ta'minot uchun to'rtinchi asosiy talab sifatida ajratamiz, bu parallelizm, miqyoslilik va mahalliylikdan tashqari.
Parallel dasturlashda ishlatiladigan asosiy abstraksiyalar vazifalar va kanallarga qisqartiriladi:
1. Parallel hisoblash bir yoki bir nechta vazifadan iborat. Vazifalar parallel ravishda ishlaydi. Dastur ishlayotgan vaqtda vazifalar soni o'zgarishi mumkin.
2. Vazifa ketma-ket dastur va mahalliy xotirani ajratishdir. Bundan tashqari, kirish va chiqishlarning to'plami uning muhitidagi interfeysni aniqlaydi.
3. Vazifa mahalliy xotiraga o'qish va yozishdan tashqari to'rtta asosiy amalni bajarishi mumkin: chiqish portlariga xabar yuborish, kirish portlaridan xabar olish, yangi vazifalarni yaratish va vazifani o'ldirish (bajarish).
4. Xabarni yuborish jarayoni asenkron bo'lib, u darhol tugaydi. Qabul qilish jarayoni sinxrondir, bu vazifani bajarishga olib keladi, xabar kelguncha jarayonni blokirovka qiladi.
5. I / O juftlarini quvurlar deb nomlangan navbatdagi xabarlar orqali bog'lash mumkin. Quvurlar yaratilishi va o'chirilishi mumkin, ulanish dinamik ravishda o'zgarishi uchun quvurlarga (portlarga) ulanishlar xabarlarga qo'shilishi mumkin.
6. Ishlarni fizik protsessorlarda har xil ko'rinishda ko'rsatish mumkin; xaritalash dasturi dasturning semantikasiga ta'sir qilmaydi. Xususan, bir nechta ishlarni bitta protsessor bilan taqqoslash mumkin (shuningdek, bitta vazifani bir nechta protsessorlarga taqqoslash mumkinligini tasavvur qilishingiz mumkin, ammo bu xususiyat bu erda mavjud emas).
Vazifalarni qisqartirish mahalliy xususiyatni talab qiladi: vazifaning mahalliy xotirasida joylashgan ma'lumotlar "yopiq"; boshqa ma'lumotlar o'chiriladi. Kanal abstraktsiyasi boshqa vazifani boshlash uchun bitta vazifadan qaysi ma'lumotni hisoblash kerakligini aniqlash mexanizmini ta'minlaydi. (Bu ma'lumotlar bog'liqligi bilan tavsiflanadi). Vazifa va kanal modeli boshqa ba'zi xususiyatlarga ega:
Do'stlaringiz bilan baham: |