logo

Parallel hisoblashning afzallik tomonlari

Yuklangan vaqt:

08.08.2023

Ko'chirishlar soni:

0

Hajmi:

145.40625 KB
Mavzu: Parallel hisoblashning afzallik tomonlari
Reja:
1. Nima uchun Parallel Hisoblash kerak ?
2. Nima uchun biz ortib boradigan ishlashga muhtojmiz?
3.  Nima uchun parallel tizimlarni ko’ramiz.
          4.Nega parallel dasturlarni yozish kerak.  
5. Parallel dasturlarni yozish.  Nima uchun Parallel Hisoblash kerak ?
1986   yildan   2002   yilgacha   mikroprotsessorlarning   ishlashi   yiliga   o'rtacha
50%   ga   oshdi.   Bu   misli   ko'rilmagan   o'sish   foydalanuvchilar   va   dasturiy   ta'minot
ishlab   chiquvchilari   degani   edi.   ko'pincha       mikroprotsessorlarning   keyingi
avlodini   kutish   mumkin   edi.   2002   yildan   beri   bitta   protsessorli   ish   faoliyatini
yaxshilash yiliga taxminan 20% gacha sekinlashdi. Bu farq juda katta: yiliga 50%,
unumdorlik deyarli bir omilga oshadi ichida 60 ga, 20% bo'lsa, u atigi 6 baravarga
oshadi.
2005   yilga   kelib,   yirik   ishlab   chiqaruvchilarning   ko'pchiligi   parallellik
yo'nalishida mikroprotsessorlar tez sur'atlar bilan o'sib borishi uchun yo'l deb qaror
qildi.
Har doim tezroq rivojlanishni davom ettirishga harakat qilish o'rniga monolit
protsessorlar,   ishlab   chiqaruvchilar   bir   nechta   to'liq   protsessorlarni   qo'yishni
boshladilar.
Ushbu   o'zgarish   dasturiy   ta'minot   ishlab   chiquvchilari   uchun   juda   muhim
oqibatlarga   olib   keladi:   oddiygina   qo'shish   ketma-ket   dasturlarning   aksariyati   ,
ya'ni bitta dasturda ishlash uchun yozilgan dasturlar protsessor  katta hajmdagi ish
faoliyatini sehrli ravishda yaxshilamaydi. Bunday dasturlar bir nechta protsessorlar
mavjudligidan   bexabar   va   bir   nechta   protsessorli   tizimda   bunday   dasturning
ishlashi bo'ladi.
Bularning barchasi bir qator savollarni tug'diradi:
1.   Nima   uchun   biz   qayg'uramiz?   Yagona   protsessorli   tizimlar   yetarlicha   tez
emasmi? Axir, har biriga 20%
yil hali ham ancha sezilarli yaxshilanishdir.
2.   Nima   uchun   protsessor   tizimlari   mikroprotsessor   ishlab   chiqaruvchilari
yanada   tezroq   singl   ishlab   chiqishda   davom   eta   olmaydilar?   Nega   parallel
tizimlar qurish  kerak? 
3.   Nima   uchun   biz   ketma-ket   dasturlarni   ichiga   parallel   dasturlar   ,   ya'ni
mavjudligidan foydalanadigan dasturlar
bir   nechta   protsessorlar   avtomatik   ravishda   o'zgartiradigan   dasturlarni   yoza
olmaymiz?
Keling, ushbu savollarning har birini qisqacha ko'rib chiqaylik. 
2.Nima uchun biz ortib boradigan ishlashga muhtojmiz?
O'nlab   yillar   davomida   fan,   Internet   va   o'yin-kulgi   kabi   turli   xil   biz
zavqlanayotgan hisoblash quvvatining ulkan o'sishi kabi sohalardagi eng dramatik
yutuqlarning   markazida   bo'ldi.   Internet   Qidiruvlar   o'sishlarsiz   va   yanada   real
kompyuter   o'yinlarining   barchasi   imkonsiz   bo'lar   edi.   Haqiqatan   ham,   hisoblash
quvvatining yaqinda o'sishi
oldingi o'sishlarsiz, agar imkonsiz bo'lmasa, qiyin bo'lar edi. Lekin biz qila olamiz
hech qachon to'xtamang. Bizning hisoblash quvvatimiz oshgani sayin, muammolar
soni hal qilishni jiddiy o'ylab ko'rishimiz mumkin bo'lgan narsalar ham ortadi . 
Quyida bir nechtasi keltirilgan misollar :.  Iqlimni modellashtirish   . Iqlim o'zgarishini yaxshiroq tushunish uchun bizga
ko'proq narsa kerak
aniq   kompyuter   modellari,   atmosfera   o'rtasidagi   o'zaro   ta'sirlarni   o'z   ichiga   olgan
modellar,   qattiq   quruqlik   va   qutblardagi   muzliklar   turli   aralashuvlar   global
miqyosga qanday ta'sir qilishi haqida batafsil tadqiqotlar o'tkazishga qodir iqlim . 
  Protein   qatlamlari   .   Noto'g'ri   qatlamli   oqsillar   kasalliklarda   ishtirok   etishi
mumkin, deb ishoniladi, ammo bizning o'qish qobiliyatimiz
oqsillar   kabi   murakkab   molekulalarning   konfiguratsiyasi   joriy   hisoblash   quvvati
tomonidan jiddiy cheklangan
  Dori  kashfiyoti   . Hisoblash  quvvatini  oshirishning ko'plab usullari  mavjud,
yangi tibbiy muolajalar bo'yicha tadqiqotlarda foydalanish mumkin . Misol uchun,
juda   ko'p   azob   chekayotganlarning   nisbatan   kichik   qismini   ba'zi   kasalliklardan
davolashda samarali bo'lgan dorilar
.   Ehtiyotkorlik   bilan   muqobil   davolash   usullarini   ishlab   chiqishimiz   mumkin
davolash ma'lum bo'lgan shaxslarning genomlarini tahlil qilish
samarasizdir   .   Biroq,   genomlar   bu   keng   qamrovli   hisoblash   tahlilini   o'z   ichiga
oladi.
Energiya   tadqiqotlari   .   Hisoblashbatareyalar   quvvatining   oshishi   ancha
batafsil modellari dasturlash imkonini beradi.
ushbu  dasturlar  uzoqni  qurish  uchun  zarur   bo'lgan  yanada   samarali  toza  energiya
manbalari ma'lumotlarni taqdim etishi mumkin . 
Ma'lumotlarni   tahlil   qilish   .   Biz   katta   hajmdagi   ma'lumotlarni   yaratamiz.
Ba'zi   hisob-kitoblarga   ko'ra,   ular   miqdori   har   ikki   yilda   ikki   baravar   ko'payadi   ,
lekin juda katta va ularning aksariyati umuman foydasizdir. Misol tariqasida, bilish
Inson   DNKsidagi   nukleotidlar   ketma-   ketligi   o'z-o'zidan   kam   qo'llaniladi.
Tushunish   uchun   u   qanday   ta'sir   qiladi   va   qanday   qilib   kasallikka   olib   kelishi
mumkin   keng   tahlil   qilinishi   kerak.   Genomikaga   qo'shimcha   ravishda   katta
hajmdagi ma'lumotlar ham ishlab chiqariladi
CERNdagi  Katta adron kollayderi  kabi  zarrachalar  kollayderlari, tibbiy tasvirlar ,
astronomik tadqiqotlar va veb-qidiruv tizimlari - bir nechtasini nomlash mumkin.
3.  N EGA  BIZ PA RA LLEL TIZIMLA RN I  KURA Y A BIZ
Yagona   protsessor   unumdorligidagi   integratsiyalashgan
tranzistorlar   -   elektron   kalitlarning   doimiy   ortib   borayotgan   zichligi
bilan   sxemalar   ulkan   o'sishning   aksariyati   sabab   bo'ldi.   Tranzistorlar
hajmi   kamayishi   bilan   ularning   tezligini   oshirish   mumkin   va   integral
mikrosxemaning   umumiy   tezligini   oshirish   mumkin.   Biroq,   tezligi
sifatida   tranzistorlar   ortadi,   ularning   quvvat   sarfi   ham   ortadi.   Bu
kuchning katta  qismi tarqaladi va  integral sxema  juda qizib ketganda,
u ishonchsiz bo'ladi. Yigirma birinchi asrning birinchi o'n yilligida havo bilan sovutilgan
integral   mikrosxemalar   issiqlikni   tarqatish   qobiliyatining   chegarasiga
yetdi.
Shu   sababli,   integratsiya   tezligini   oshirishni   davom   ettirish   imkonsiz
bo'lib bormoqda. Biroq, tranzistor zichligi o'sishi - hech bo'lmaganda
bir   muddat   davom   etishi   mumkin .   Bundan   tashqari,   bizning
mavjudligimizni   yaxshilash   uchun   hisoblash   imkoniyatlarini   hisobga
olgan   holda,   hisoblash   quvvatini   oshirishni   davom   ettirish   uchun
deyarli axloqiy shart mavjud. 
Nihoyat,   agarintegral   mikrosxemalar   sanoati   yangi   va   yaxshiroq
mahsulotlarni   ishlab   chiqarishni   davom   ettirmaydi,   amalda   mavjud
bo'lishni to'xtatadi.
Qanday   qilib   biz   tranzistor   zichligining   doimiy   o'sishidan
foydalanishimiz mumkin? 
javob  parallelizm   .  Tezroq, murakkabroq, monolit qurishdan ko'ra
protsessorlar   ,   sanoat   bir   nechta,   nisbatan   oddiy,   to'liq   protsessorlar
bitta chipda qo'yishga qaror qildi. Bunday integral mikrosxemalar  k o'p
y adroli   deb   at aladi   protsessorlar,va   y adro   markaziy   protsessor   yoki
protsessor   bilan   sinonimga   aylandi.   Ushbu   tizim   sozlama   bitta
protsessorli an'anaviy protsessor ko'pincha  bit t a y adroli deb at aladi .
4. N EGA  PA RA LLEL DA STURLA RN I  Y OZISH KERA K
An'anaviy,   bir   yadroli   tizimlar   uchun   yozilgan   dasturlarning
aksariyati   buni   qila   olmaydi.   bir   nechta   yadrolarning   mavjudligidan
foydalanamiz.   Biz   ko'p   yadroli   tizimda   dasturning   bir   nechta
nusxalarini   ishga   tushirishimiz   mumkin,   lekin   bu   ko'pincha   ozgina
yordam beradi.
Yoki   ketma-ket   dasturlarimizni   ular   foydalanishi   uchun   bir   nechta
yadrolar   yoki   tarjima   dasturlarini   yozing,   ya'ni   avtomatik   ravishda
ishlaydigan dasturlar
parallel   bo'lishi   uchun   ketma-ket   dasturlarni   parallel   dasturlarga
aylantirish   qayta   yozing .   Yomon   xabar   shundaki,   tadqiqotchilar   bor
tillardagi   ketma-ket   dasturlarni   o'zgartiruvchi   juda   cheklangan
muvaffaqiyatga   erishish   dasturlariga   C   va   C   ++   kabi   parallel
dasturlarga ega edi.
Bu   juda   ajablanarli   emas.   Biz   umumiy   taniydigan   dasturlarni
yozishimiz   mumkin,konstruksiyalarni   amalga   oshiradi   va   bu
konstruksiyalarni   avtomatik   ravishda   tarjima   qiladi,   samarali   parallel konstruktsiyalar, parallel konstruktsiyalar ketma-ketligi juda samarasiz
bo'lishi mumkin.
Masalan, ikkita   n   _   n   matritsalar nuqta hosilalari ketma- ketligi sifatida
ko'paytirishni   ko'rishimiz   mumkin ,   lekin   matritsani   ko'paytirishni   nuqta
hosilalari   ketma-ketligi   sifatida   parallellashtirish,   parallel   nuqta
mahsulotlari ko'p tizimlarda juda sekin bo'lishi mumkin.
Ketma-ket   dasturni   samarali   parallel   amalga   oshirish   uning   har   bir
bosqichining   samarali   parallellashuvlarini   topish   tomonidan
olinmasligi   mumkin.   Aksincha,   eng   yaxshi   parallelizatsiya   orqaga
chekinish   va   butunlay   yangi   algoritmni   ishlab   chiqish     orqali   olinishi
mumkin.
Misol   tariqasida,   biz   n   ta   qiymatni   hisoblashimiz   va   ularni
birlashtirishimiz kerak, deylik.
Buni   quyidagi   ketma-ket   kod   yordamida   amalga   oshirish
mumkinligini bilamiz:
sum = 0;
for  (i = 0; i  <  n; i++)  {
x = Compute next value(. . .);
sum += x;
}
Aytaylik, bizda ham  p  yadro bor va   p n  dan ancha kichik . Keyin har bir
yadro mumkin  n  =  p  qiymatlarning qisman yig'indisini hosil qiling:
my sum = 0;
my first i = . . . ;
my last i = . . . ;
     for  (my i = my first i; my i  <  my last i; my i++)  {
my x = Compute next value(. . .);
my sum += my x;
}
my   prefiksi   har   bir   yadro   o'ziga   xos,   shaxsiy   o'zgaruvchilardan
foydalanishini   bildiradi.   har   bir   yadro   ushbu   kod   blokini   boshqa
yadrolardan mustaqil ravishda bajarishi mumkin.
Har   bir   yadro   ushbu   kodning   bajarilishini   tugatgandan   so'ng,
uning o'zgaruvchisi  mening summamda  saqlanadi.
Keyingi   qiymatni   hisoblash   uchun   qo'ng'iroqlari   bilan   hisoblangan
qiymatlar   yig'indisi   .   Masalan,   agar   sakkiz   yadro   bo'lsa,   n   D   24   va
keyingi qiymatni hisoblash  uchun 24 ta qo'ng'iroqlar
qiymatlar 1, 4, 3,   9, 2, 8,    5, 1, 1,    6, 2, 7,   2, 5, 0,   4, 1, 8,   6, 5, 1,   2, 3, 9,
keyin  mening summamda  saqlangan qiymatlar bo'lishi mumkin
Y adro(core)  0 1 2 3 4 5 6 7
mening summam  8 19 7 15 7 13 12 14
Bu   erda   biz   yadrolar   diapazondagi   manfiy   bo'lmagan   butun   sonlar
bilan aniqlangan deb faraz qilamiz
0, 1 ,  : : :  ,  p    1, bu erda  p -  yadrolar  soni.
mening   summamning   qiymatlarini   hisoblab   bo'lgach   ,   ular     o'z
natijalarini   qo'shishi   mumkin   bo'lgan   belgilangan   "master"   yadroga
yuborish orqali global summa  hosil qilishi mumkin
ularning natijalari:
if  (I’m the master core)  {
sum = my x;
for  each core other than myself  {
receive value from core;
sum += value;
}}  else  {
send my x to the master;
}
Bizning misolimizda, agar asosiy yadro (CORE)yadro 0 bo'lsa, u 8  + 19  +
7  +.
15  +  7  +  13  +  12  +  14  +  95  qiymatlarini qo'shadi .
Lekin,   ehtimol,   buni   amalga   oshirishning   yaxshiroq   yo'lini
ko'rishingiz mumkin, ayniqsa, agar soni
yadrolari   katta   bo’lsa.   Asosiy   yadro   qilish   o'rniga,   barcha   hisoblash
ishlarini bajaring.
Yakuniy   yig'indi,   biz   yadrolarni   juftlashimiz   mumkin,   shunda
yadro 0 yadro 1 natijasiga qo'shsa, yadro
2   yadro   3   natijasiga   qo'shishi   mumkin,   yadro   4   yadro   5   natijasiga
qo'shishi mumkin va hokazo. Keyin
jarayonni   faqat   teng   darajali   yadrolar   bilan   takrorlashimiz   mumkin:   2
natijaga 0 qo'shiladi , 6 ning natijasiga 4 qo'shiladi va hokazo. Endi 4 ga bo'linadigan yadrolar
jarayonni   takrorlaydi   va   hokazo   .
1.1-rasmga qarang. 
Doiralarda   har   bir   yadro   yig'indisining   joriy   qiymati   vabir   yadro   o'z
summasini boshqa yadroga yuborayotganligini ko'rsatadi. The
plyus   belgilari   yadro   boshqa   yadrodan   yig'indini   olayotganini   va   uni
qo'shayotganini ko'rsatadi so'mni o'z summasiga oldi .
Ikkala   "global"   summa   uchun   asosiy   yadro   (yadro   0)   boshqalarga
qaraganda   ko'proq   ishlaydi.   Biroq,   sakkiz   yadro   bilan,birinchi   usuldan
foydalangan holda ettita qabul qilish va qo'shishni amalga oshiradi
ikkinchi   usul   faqat   uchtasini   amalga   oshiradi.   Shunday   qilib,   ikkinchi
usul   natijasida   ikki   baravardan   ortiq   yaxshilanadi   .   ko'p   sonli   yadrolar
bilan dramatik Farqi ancha katta bo'ladi. 1000 yadro bilan birinchi usul
talab qilinadi
999 qabul qiladi va qo'shadi, ikkinchisi esa faqat 10 tani talab qiladi, uni
yaxshilash deyarli 100 faktor!
Birinchi   global   yig'indi   -   bu   ketma-ket   global   summaning   aniq
umumlashtirilishi:   taqsimlang   va   har   bir   yadro   o'z   qismini   hisoblab
chiqqandan   keyin   yig'indidan   ,   asosiy   yadro   oddiygina   asosiy   ketma-
ket   qo'shishni   takrorlaydi   -   agar   p   mavjud   bo'lsa   yadrolari   ,   keyin   u   p
qiymatlarini qo'shishi kerak . Ikkinchi global summa esa o'z o'rniga ega
asl seriya qo'shilishi bilan ozgina aloqasi bor.
Gap shundaki, tarjima dasturi “kashf etishi” dargumon.
ikkinchi   global   summa.   Aksincha,   oldindan   belgilangan   samarali
bo'lishi   mumkin   tarjima   dasturi   kirish   huquqiga   ega   bo'lgan   global summa.   U   ketma   -ket   halqa   va   uni   oldindan   kodlangan   bilan
almashtiring , samarali, parallel global summa "tanishi" mumkin.
Dasturiy   ta'minot   juda   ko'p   umumiy   bo'lishi   uchun   yozilishini
kutishimiz mumkin, etma-ket konstruktsiyalarni tanib olish va samarali
parallellasht irish   ,   ya'ni   o'zgartirish   mumkin   edi   shuning   uchun   ular
bir nechta yadrolardan foydalanishlari mumkin. Biroq, biz bu tamoyilni
doimo qo'llaganimizdek
murakkabroq   seriyali   dasturlarni   tanib   olish   tobora   qiyinlashib
bormoqda
construct   ,   va   bizda   oldindan   kodlangan   parallellashtirish   ,   samarali
bo'lish ehtimoli kamroq bo'ladi.
Shunday   qilib,   biz   ketma-ket   dasturlarni   yozishni   davom   ettira
olmaymiz,   biz   dasturlar   ,   bir   nechta   protsessorlarning   kuchidan
foydalanadigan parallel dasturlar yozishimiz kerak.
5. PA RA LLEL DA STURLA RN I  QA N DA Y  Y OZA MIZ?
Bu   savolga   bir   nechta   mumkin   bo'lgan   javoblar   mavjud,   ammo
ularning   aksariyati   amalga   oshiriladigan   ishni   yadrolar   orasida
taqsimlashning   asosiy   g'oyasi   haqida.   Ikkita   keng   qo'llaniladigan
yondashuvlar bor:  t ask -parallelizm  va  dat a-parallelizm  . 
Task   -parallelizmda ,   hal   qilishda   amalga   oshirilgan   turli
vazifalarni yadrolar o'rtasida taqsimlaymiz. 
Dat a-parallelizm   ,   biz   muammoni   hal   qilishda   foydalanilgan
ma'lumotlarni   yadrolar   o'rtasida   taqsimlaymiz,   va   har   bir   yadro
ma'lumotlarning   o'z   qismida   ko'proq   yoki   kamroq   shunga   o'xshash
operatsiyalarni bajaradi.
Misol tariqasida, prof essor P “Ingliz tilini o'rganish Adabiyot”. Aytaylik,
professor P ning o'z bo'limida yuzta talaba bor
unga to'rtta o'qituvchi yordamchisi (TA) tayinlangan: janob A, B xonim,
janob C va D xonim.
Nihoyat   semestr   tugadi   va   professor   P   beshdan   iborat   yakuniy
imtihon topshiradi
savollar   .   Imtihonga   baho   qo'yish   uchun   u   va   uning   TA   xodimlari
quyidagilarni hisobga olishlari mumkin
ikkita   variant:   ularning   har   biri   savollardan   biriga   yuzta   javobni
baholashi mumkin;
P sinflar uchun 1-savol, A sinflar uchun 2-savol va hokazolarni ayting .
Shu bilan bir qatorda, ular bo'linishi mumkin yuzta   imtihon   yigirmata   imtihondan   iborat   beshta   to'plamga   bo'linadi
va ularning har biri mumkin
qoziqlardan   birida   baholang;   P   birinchi   qoziqdagi   qog'ozlarni
baholaydi, A bahosi
ikkinchi qoziqdagi qog'ozlar va boshqalar.
Ikkala   yondashuvda   ham   “yadro”   professor   va   uning   TA   lari
hisoblanadi. Birinchi yondashuv
vazifa-parallelizmga   misol   bo'lishi   mumkin.   Beshta   vazifani   bajarish
kerak
out   :   birinchi   savolni   baholash,   ikkinchi   savolni   baholash   va   hokazo.
Taxminan ,
- savolda turli xil ma'lumotlarni qidiradilar
Shekspir, 2-savoldagi ma'lumotlardan, Milton haqida va hokazo.
Shunday   qilib,   professor   va   uning   mutaxassislari   "turli   ko'rsatmalarni
bajaradilar".
Boshqa   tomondan,   ikkinchi   yondashuv   ma'lumotlarparallelizmiga
misol bo'lishi mumkin .
"Ma'lumotlar" - bu asosiy qismlarga bo'lingan talabalar qog'ozi,
va har bir yadro har bir qog'ozga ko'proq yoki kamroq bir xil baholash
ko'rsatmalarini qo'llaydi.
1.3-bo'limdagi global yig'indi misolining birinchi qismi bo'lishi mumkin
ma'lumotlar-parallellik   misoli   ko'rib   chiqildi   .   Ma'lumotlar   tomonidan
hisoblangan   qiymatlar   Keyingi   qiymatni   hisoblang   va   har   bir   yadro
taxminan   bir   xil   operatsiyalarni   bajaradi   tayinlangan   elementlar:   u
keyingi   qiymatni   hisoblashni   chaqirish   orqali   kerakli   qiymatlarni
hisoblab chiqadi
va   ularni   birga   qo'shadi.   Birinchi   global   sum   misolining   ikkinchi   qismi
bo'lishi   mumkin   vazifa-parallellik   misoli   ko'rib   chiqildi   .   Ikkita   vazifa
mavjud:   qabul   qilish   va   qo'shish   asosiy   yadro   tomonidan   amalga
oshiriladigan   va   qisman   beradigan   yadrolarning   qisman   summalari
boshqa   yadrolar   tomonidan   amalga   oshiriladigan   asosiy   yadroga
yig'indi .
 mustaqil ishlay oladigan bo'lsa, parallel dastur yozish juda ko'p
ketma-ket   dastur   yozish   bilan   bir   xil   .   Qachonki   ishlar   yanada
murakkablashadi yadrolar   o'z   ishlarini   muvofiqlashtirishi   kerak.   Ikkinchi   global   summa
misolida, garchi diagrammadagi daraxt tuzilishini tushunish juda oson,
haqiqiy kodni yozish
nisbatan murakkab. 1.3 va 1.4-mashqlarga qarang. Afsuski, bu ko'proq
koordinatsiyaga muhtoj bo'lgan yadrolar uchun umumiydir .
Ikkala global yig'indi misolida ham muvofiqlashtirish   aloqani  o'z
ichiga   oladi   :   bitta   yoki   ko'proq   yadrolar   joriy   qisman   summalarini
boshqa   yadroga   yuboradi.   Global   yig'indiga   misollar   y uk larni
muv ozanat lash   orqali muvofiqlashtirishni ham o'z ichiga olishi kerak :
biz buni qilmagan bo'lsak ham
bering   ,   biz   barcha   yadrolarning   taxminan   tayinlanishini
xohlayotganimiz aniq
bir   xil   miqdordagi   qiymatlar.   Agar,   masalan,   bitta   yadro   ko'p   qismini
hisoblashi   kerak   bo'lsa   qiymatlari   bo'lsa,   boshqa   yadrolar   og'ir
yuklangan   yadrodan   ancha   tezroq   tugaydi,   va   ularning   hisoblash
quvvati behuda ketadi.
Muvofiqlashtirishning   uchinchi   turi   -   sinxronizat siy a   .   Misol
tariqasida shunday deylik
qo'shiladigan   qiymatlarni   hisoblash   o'rniga   ,   qiymatlar   stdin   dan
o'qiladi  .  X  deb ayting
asosiy yadro tomonidan o'qiladigan massivdir:
if  ( Men asosiy yadroman)
for  (mening i = 0; mening i  <  n; mening men ++)
scanf ( "%lf", &x[mening i ]);
Aksariyat   tizimlarda   yadrolar   avtomatik   ravishda
sinxronlashtirilmaydi. Aksincha, har bir yadro
o'z   tezligida   ishlaydi   .   Bunday   holda,   muammo   shundaki,   biz   boshqa
yadrolarni xohlamaymiz
oldinga   yugurish   va   master   ishga   tushirishdan   oldin   ularning   qisman
summalarini hisoblashni boshlash
x   va uni boshqa yadrolar uchun mavjud qilish. Ya'ni, yadrolarni kutish
kerak
kodni bajarishni boshlashdan oldin : 
for    ( mening i = mening birinchi i ; mening i  <  mening oxirgi i ; mening
men ++)
mening summam += x [ mening i ];
x   va   ni   ishga   tushirish   o'rtasida   sinxronizatsiya   nuqtasini   qo'shishimiz
kerak qisman summalarni hisoblash  bo'lgunga qadar  Yadrolarni sinxronlash
funktsiyasida kutadi
yadrolar funktsiyaga kirdi - xususan, asosiy yadro kirgunga qadar
bu funksiya.
aniq  parallel yordamida yoziladi
++  kabi tillarga kengaytmalar yordamida yoziladi .
Ushbu dasturlar parallelizm uchun aniq ko'rsatmalarni o'z ichiga oladi:
yadro 0 0 vazifani bajaradi,
yadro   1   1-topshiriqni   bajaradi   ,   barcha   yadrolar   sinxronlashtiriladi,   va
hokazo, shuning uchun bunday dasturlar
ko'pincha   juda   murakkab.   Bundan   tashqari,   zamonaviy   yadrolarning
murakkabligi ko'pincha qiladi
a   tomonidan   bajariladigan   kodni   yozishda   juda   ehtiyotkorlik   bilan
foydalanish kerak bitta yadro.
Parallel   dasturlarni   yozishning   boshqa   variantlari   mavjud   -   masalan,
yuqoriroq
darajadagi   tillar   -   lekin   ular   dastur   yaratish   uchun   ishlashni   qurbon
qilishga moyildirlar rivojlanish biroz osonroq .

Mavzu: Parallel hisoblashning afzallik tomonlari Reja: 1. Nima uchun Parallel Hisoblash kerak ? 2. Nima uchun biz ortib boradigan ishlashga muhtojmiz? 3. Nima uchun parallel tizimlarni ko’ramiz. 4.Nega parallel dasturlarni yozish kerak. 5. Parallel dasturlarni yozish.

Nima uchun Parallel Hisoblash kerak ? 1986 yildan 2002 yilgacha mikroprotsessorlarning ishlashi yiliga o'rtacha 50% ga oshdi. Bu misli ko'rilmagan o'sish foydalanuvchilar va dasturiy ta'minot ishlab chiquvchilari degani edi. ko'pincha mikroprotsessorlarning keyingi avlodini kutish mumkin edi. 2002 yildan beri bitta protsessorli ish faoliyatini yaxshilash yiliga taxminan 20% gacha sekinlashdi. Bu farq juda katta: yiliga 50%, unumdorlik deyarli bir omilga oshadi ichida 60 ga, 20% bo'lsa, u atigi 6 baravarga oshadi. 2005 yilga kelib, yirik ishlab chiqaruvchilarning ko'pchiligi parallellik yo'nalishida mikroprotsessorlar tez sur'atlar bilan o'sib borishi uchun yo'l deb qaror qildi. Har doim tezroq rivojlanishni davom ettirishga harakat qilish o'rniga monolit protsessorlar, ishlab chiqaruvchilar bir nechta to'liq protsessorlarni qo'yishni boshladilar. Ushbu o'zgarish dasturiy ta'minot ishlab chiquvchilari uchun juda muhim oqibatlarga olib keladi: oddiygina qo'shish ketma-ket dasturlarning aksariyati , ya'ni bitta dasturda ishlash uchun yozilgan dasturlar protsessor katta hajmdagi ish faoliyatini sehrli ravishda yaxshilamaydi. Bunday dasturlar bir nechta protsessorlar mavjudligidan bexabar va bir nechta protsessorli tizimda bunday dasturning ishlashi bo'ladi. Bularning barchasi bir qator savollarni tug'diradi: 1. Nima uchun biz qayg'uramiz? Yagona protsessorli tizimlar yetarlicha tez emasmi? Axir, har biriga 20% yil hali ham ancha sezilarli yaxshilanishdir. 2. Nima uchun protsessor tizimlari mikroprotsessor ishlab chiqaruvchilari yanada tezroq singl ishlab chiqishda davom eta olmaydilar? Nega parallel tizimlar qurish kerak? 3. Nima uchun biz ketma-ket dasturlarni ichiga parallel dasturlar , ya'ni mavjudligidan foydalanadigan dasturlar bir nechta protsessorlar avtomatik ravishda o'zgartiradigan dasturlarni yoza olmaymiz? Keling, ushbu savollarning har birini qisqacha ko'rib chiqaylik. 2.Nima uchun biz ortib boradigan ishlashga muhtojmiz? O'nlab yillar davomida fan, Internet va o'yin-kulgi kabi turli xil biz zavqlanayotgan hisoblash quvvatining ulkan o'sishi kabi sohalardagi eng dramatik yutuqlarning markazida bo'ldi. Internet Qidiruvlar o'sishlarsiz va yanada real kompyuter o'yinlarining barchasi imkonsiz bo'lar edi. Haqiqatan ham, hisoblash quvvatining yaqinda o'sishi oldingi o'sishlarsiz, agar imkonsiz bo'lmasa, qiyin bo'lar edi. Lekin biz qila olamiz hech qachon to'xtamang. Bizning hisoblash quvvatimiz oshgani sayin, muammolar soni hal qilishni jiddiy o'ylab ko'rishimiz mumkin bo'lgan narsalar ham ortadi . Quyida bir nechtasi keltirilgan misollar :.

Iqlimni modellashtirish . Iqlim o'zgarishini yaxshiroq tushunish uchun bizga ko'proq narsa kerak aniq kompyuter modellari, atmosfera o'rtasidagi o'zaro ta'sirlarni o'z ichiga olgan modellar, qattiq quruqlik va qutblardagi muzliklar turli aralashuvlar global miqyosga qanday ta'sir qilishi haqida batafsil tadqiqotlar o'tkazishga qodir iqlim . Protein qatlamlari . Noto'g'ri qatlamli oqsillar kasalliklarda ishtirok etishi mumkin, deb ishoniladi, ammo bizning o'qish qobiliyatimiz oqsillar kabi murakkab molekulalarning konfiguratsiyasi joriy hisoblash quvvati tomonidan jiddiy cheklangan Dori kashfiyoti . Hisoblash quvvatini oshirishning ko'plab usullari mavjud, yangi tibbiy muolajalar bo'yicha tadqiqotlarda foydalanish mumkin . Misol uchun, juda ko'p azob chekayotganlarning nisbatan kichik qismini ba'zi kasalliklardan davolashda samarali bo'lgan dorilar . Ehtiyotkorlik bilan muqobil davolash usullarini ishlab chiqishimiz mumkin davolash ma'lum bo'lgan shaxslarning genomlarini tahlil qilish samarasizdir . Biroq, genomlar bu keng qamrovli hisoblash tahlilini o'z ichiga oladi. Energiya tadqiqotlari . Hisoblashbatareyalar quvvatining oshishi ancha batafsil modellari dasturlash imkonini beradi. ushbu dasturlar uzoqni qurish uchun zarur bo'lgan yanada samarali toza energiya manbalari ma'lumotlarni taqdim etishi mumkin . Ma'lumotlarni tahlil qilish . Biz katta hajmdagi ma'lumotlarni yaratamiz. Ba'zi hisob-kitoblarga ko'ra, ular miqdori har ikki yilda ikki baravar ko'payadi , lekin juda katta va ularning aksariyati umuman foydasizdir. Misol tariqasida, bilish Inson DNKsidagi nukleotidlar ketma- ketligi o'z-o'zidan kam qo'llaniladi. Tushunish uchun u qanday ta'sir qiladi va qanday qilib kasallikka olib kelishi mumkin keng tahlil qilinishi kerak. Genomikaga qo'shimcha ravishda katta hajmdagi ma'lumotlar ham ishlab chiqariladi CERNdagi Katta adron kollayderi kabi zarrachalar kollayderlari, tibbiy tasvirlar , astronomik tadqiqotlar va veb-qidiruv tizimlari - bir nechtasini nomlash mumkin. 3. N EGA BIZ PA RA LLEL TIZIMLA RN I KURA Y A BIZ Yagona protsessor unumdorligidagi integratsiyalashgan tranzistorlar - elektron kalitlarning doimiy ortib borayotgan zichligi bilan sxemalar ulkan o'sishning aksariyati sabab bo'ldi. Tranzistorlar hajmi kamayishi bilan ularning tezligini oshirish mumkin va integral mikrosxemaning umumiy tezligini oshirish mumkin. Biroq, tezligi sifatida tranzistorlar ortadi, ularning quvvat sarfi ham ortadi. Bu kuchning katta qismi tarqaladi va integral sxema juda qizib ketganda, u ishonchsiz bo'ladi.

Yigirma birinchi asrning birinchi o'n yilligida havo bilan sovutilgan integral mikrosxemalar issiqlikni tarqatish qobiliyatining chegarasiga yetdi. Shu sababli, integratsiya tezligini oshirishni davom ettirish imkonsiz bo'lib bormoqda. Biroq, tranzistor zichligi o'sishi - hech bo'lmaganda bir muddat davom etishi mumkin . Bundan tashqari, bizning mavjudligimizni yaxshilash uchun hisoblash imkoniyatlarini hisobga olgan holda, hisoblash quvvatini oshirishni davom ettirish uchun deyarli axloqiy shart mavjud. Nihoyat, agarintegral mikrosxemalar sanoati yangi va yaxshiroq mahsulotlarni ishlab chiqarishni davom ettirmaydi, amalda mavjud bo'lishni to'xtatadi. Qanday qilib biz tranzistor zichligining doimiy o'sishidan foydalanishimiz mumkin? javob parallelizm . Tezroq, murakkabroq, monolit qurishdan ko'ra protsessorlar , sanoat bir nechta, nisbatan oddiy, to'liq protsessorlar bitta chipda qo'yishga qaror qildi. Bunday integral mikrosxemalar k o'p y adroli deb at aladi protsessorlar,va y adro markaziy protsessor yoki protsessor bilan sinonimga aylandi. Ushbu tizim sozlama bitta protsessorli an'anaviy protsessor ko'pincha bit t a y adroli deb at aladi . 4. N EGA PA RA LLEL DA STURLA RN I Y OZISH KERA K An'anaviy, bir yadroli tizimlar uchun yozilgan dasturlarning aksariyati buni qila olmaydi. bir nechta yadrolarning mavjudligidan foydalanamiz. Biz ko'p yadroli tizimda dasturning bir nechta nusxalarini ishga tushirishimiz mumkin, lekin bu ko'pincha ozgina yordam beradi. Yoki ketma-ket dasturlarimizni ular foydalanishi uchun bir nechta yadrolar yoki tarjima dasturlarini yozing, ya'ni avtomatik ravishda ishlaydigan dasturlar parallel bo'lishi uchun ketma-ket dasturlarni parallel dasturlarga aylantirish qayta yozing . Yomon xabar shundaki, tadqiqotchilar bor tillardagi ketma-ket dasturlarni o'zgartiruvchi juda cheklangan muvaffaqiyatga erishish dasturlariga C va C ++ kabi parallel dasturlarga ega edi. Bu juda ajablanarli emas. Biz umumiy taniydigan dasturlarni yozishimiz mumkin,konstruksiyalarni amalga oshiradi va bu konstruksiyalarni avtomatik ravishda tarjima qiladi, samarali parallel

konstruktsiyalar, parallel konstruktsiyalar ketma-ketligi juda samarasiz bo'lishi mumkin. Masalan, ikkita n _ n matritsalar nuqta hosilalari ketma- ketligi sifatida ko'paytirishni ko'rishimiz mumkin , lekin matritsani ko'paytirishni nuqta hosilalari ketma-ketligi sifatida parallellashtirish, parallel nuqta mahsulotlari ko'p tizimlarda juda sekin bo'lishi mumkin. Ketma-ket dasturni samarali parallel amalga oshirish uning har bir bosqichining samarali parallellashuvlarini topish tomonidan olinmasligi mumkin. Aksincha, eng yaxshi parallelizatsiya orqaga chekinish va butunlay yangi algoritmni ishlab chiqish orqali olinishi mumkin. Misol tariqasida, biz n ta qiymatni hisoblashimiz va ularni birlashtirishimiz kerak, deylik. Buni quyidagi ketma-ket kod yordamida amalga oshirish mumkinligini bilamiz: sum = 0; for (i = 0; i < n; i++) { x = Compute next value(. . .); sum += x; } Aytaylik, bizda ham p yadro bor va p n dan ancha kichik . Keyin har bir yadro mumkin n = p qiymatlarning qisman yig'indisini hosil qiling: my sum = 0; my first i = . . . ; my last i = . . . ; for (my i = my first i; my i < my last i; my i++) { my x = Compute next value(. . .); my sum += my x; } my prefiksi har bir yadro o'ziga xos, shaxsiy o'zgaruvchilardan foydalanishini bildiradi. har bir yadro ushbu kod blokini boshqa yadrolardan mustaqil ravishda bajarishi mumkin. Har bir yadro ushbu kodning bajarilishini tugatgandan so'ng, uning o'zgaruvchisi mening summamda saqlanadi. Keyingi qiymatni hisoblash uchun qo'ng'iroqlari bilan hisoblangan qiymatlar yig'indisi . Masalan, agar sakkiz yadro bo'lsa, n D 24 va keyingi qiymatni hisoblash uchun 24 ta qo'ng'iroqlar qiymatlar