Amdahl qonuni
bu erda S - tezlashuv, a - ketma-ket bajarilishi kerak bo'lgan operatsiyalarning ulushi, p - protsessorlar soni.
Oqibati Amdal qonuni: dasturning bajarilishini q marta tezlashtirish uchun dasturning q qidan kamida (1-1 / q) va ikkinchi qismidan kam bo'lmasligi kerak. Shuning uchun, agar siz dasturni uning ketma-ket versiyasi bilan taqqoslaganda 100 marta tezlashtirishingiz kerak bo'lsa, kodning kamida 99.99% ga kam tezlashtirish kerak!
2.2. Xotira ierarxiyasi.
Xotira ierarxiyasining parallelizmga to'g'ridan-to'g'ri aloqasi yo'q, ammo bu shubhasiz kompyuterlarning arxitekturasining xususiyatlarini, ularning ishlashini oshirish uchun katta ahamiyatga ega (protsessor tezligi va xotira olish vaqti o'rtasidagi farqni tekislash). Asosiy darajalari: registrlar, kesh-xotira, RAM, disk xotirasi. Diskdan registrlarga qadar xotira darajasi bo'yicha vaqtni saralash vaqti kamayadi, 1 so'z (bayt) narxining o'sishi kuzatilmoqda. Hozirgi vaqtda bunday ierarxiya hatto shaxsiy kompyuterlarda ham qo'llab-quvvatlanadi.
Hozirgi vaqtda yuqori samarali hisoblash mashinalarini rivojlantirish qaysi sohalarda olib borilmoqda? To'rt asosiy yo'nalish mavjud.
Aytaylik, sizning dasturingizda ketma-ket bajarilishi kerak bo'lgan operatsiyalar nisbati f, bu erda 0
Agar 9/10 dasturlari parallel ravishda bajarilsa va 1/10 qismi ketma-ket bo'lsa, unda kodning parallel qismini amalga oshirish sifati va ishlatilgan protsessorlar sonidan qat'i nazar, 10 martadan ko'proq tezlashtirish printsipial jihatdan mumkin emas. parallel qismning bajarilish vaqti 0 bo'lsa).
Muammoni boshqa tomondan ko'rib chiqaylik: ko'rsatilgan tezlashtirishni olish uchun kodning qaysi qismini tezlashtirish kerak (va shuning uchun oldindan o'rganib chiqilishi kerak)? Javobni Amdaxl qonunining tasodifidan topish mumkin: dasturni amalga oshirishni tezlashtirish uchun. q marta tezlashtirish kerak, kamida q kam emas (1-1 / q) - dasturning uchinchi qismi. Shuning uchun, agar dasturni ketma-ket versiyasi bilan taqqoslaganda 100 marta tezlashtirish istagi bo'lsa, unda kodning 99,99% dan kam bo'lmagan tezlashuvni olish kerak, bu deyarli har doim dasturning muhim qismini tashkil etadi!
Shunday qilib, birinchi xulosa - parallel kompyuterga o'tish uchun kodni sinchkovlik bilan qayta ishlashdan oldin (va har qanday superkompyuter, xususan bitta), yaxshilab o'ylab ko'rishingiz kerak. Agar dasturga kiritilgan algoritmni baholab, ketma-ket bajariladigan operatsiyalarning nisbati yuqori ekanligini anglagan bo'lsangiz, unda aniq tezlashishga ishonishingiz shart emas va algoritmning alohida qismlarini almashtirish haqida o'ylashingiz kerak.
Ba'zi hollarda algoritmning ketma-ket tabiatini o'zgartirish unchalik qiyin emas. Aytaylik, dasturda n sonlarining yig'indisini hisoblash uchun quyidagi qism mavjud:
S \u003d 0 Do i \u003d 1, n s \u003d s + a (i) EndDo (boshqa tillarda ham shunday qilishingiz mumkin)
O'z mohiyati bo'yicha, u qat'iy izchil, chunki tsiklning i-chi iteratsiyasi (i-1) th natijani talab qiladi va barcha iteratsiyalar birma-bir amalga oshiriladi. Bizda 100% ketma-ket operatsiyalar mavjud, shuning uchun parallel kompyuterlardan foydalanish samarasi yo'q. Biroq, echim aniq. Ko'pgina haqiqiy dasturlarda (savol: nima uchun ko'pchilikda va umuman emas?) Raqamlarni qo'shish tartibida sezilarli farq yo'qligi sababli biz boshqa qo'shimcha sxemani tanlaymiz. Avval qo'shni elementlarning juftlik yig'indisini topamiz: a (1) + a (2), a (3) + a (4), a (5) + a (6) va boshqalar. E'tibor bering, ushbu sxema bilan barcha juftliklar bir vaqtning o'zida katlanabilir! Keyingi bosqichlarda biz parallel algoritmning bir variantini olgan holda xuddi shunday harakat qilamiz.
Bu holatda barcha muammolar hal qilinganga o'xshaydi. Ammo siz uchun mavjud bo'lgan protsessorlar ishlashida turlicha ekanligini tasavvur qiling. Shunday qilib, ulardan biri hali ham ishlayotgan payt bo'ladi, va kimdir allaqachon hamma narsani qilgan va juda kutmoqda. Agar kompyuterning ishlashida tarqalish katta bo'lsa, protsessorlarning bir xil yuklanishi bilan butun tizimning samaradorligi juda past bo'ladi.
Ammo keling, bundan keyin ham barcha protsessorlar bir xil deb faraz qilaylik. Muammolar tugadimi? Yo'q! Protsessorlar o'z ishlarini yakunladilar, ammo natijani yig'ish jarayonini davom ettirish uchun boshqasiga o'tkazish kerak . va uzatish vaqt talab etadi ... va o'sha paytda protsessorlar yana ishlamayapti
Bir so'z bilan aytganda, ma'lum bir dastur bo'yicha maksimal samaradorlik bilan parallel hisoblash tizimini yoki superkompyuterlarni ishlash oson ish emas, chunki dasturlar va algoritmlarning tuzilishini parallel hisoblash tizimlarining arxitektura xususiyatlari bilan sinchkovlik bilan muvofiqlashtirish zarur.
Do'stlaringiz bilan baham: |