17-lekciya_paradigma_qq
.pdf17-lekciya. Parallel programmalastırıw. Parallel programmalardı jaratıw kózqarası. Parallel programmalastırıw tilleri.
Jobası:
1.Parallel programmalastırıwdıń mánisi, maqseti hám apparatlıq tiykarları.
2.Processler, aǵımlar hám parallelizmniń tiykarǵı mashqalaları (Jarısıwshı jaǵday,
Sinxronizaciya).
3.Parallel programmalastırıw modelleri: Ulıwma yad hám Xabar almasıw (MPI).
4.Zamanagóy parallel tiller hám texnologiyalar: Go, Rust hám GPU esaplawlar.
Parallelizmniń tiykarları hám zárúrligi
Parallel programmalastırıw – bul esaplaw máselesin bir neshe bóleklerge bólip, olardı bir waqıtta (simultaneously) orınlaw usılı bolıp tabıladı. Dástúrli izbeiz (sequential) programmalastırıwda buyrıqlar processorda birinen soń biri, gezek penen orınlanadı. Bul jerde kompyuterdiń tezligi processordıń taktlıq jiyligine tikkeley baylanıslı boladı. Al parallel programmalastırıwda bolsa, másele bir neshe processorlarǵa yamasa bir processordıń bir neshe yadrolarına bólistiriledi. Bunıń tiykarǵı maqseti – programmanıń orınlanıw waqtın qısqartıw hám úlken kólemdegi maǵlıwmatlardı tezirek qayta islew bolıp tabıladı.
Bul paradigmanıń zárúrligi kompyuter apparatlıq támiynatınıń (hardware) rawajlanıwı menen tikkeley baylanıslı. 2000-jıllardıń basına shekem processorlardıń tezligi olardıń jiyligin (GHz) arttırıw esabına ósti. Biraq, fizikalıq sheklewler (shamaǵa tıs qızıw hám energiya jumsalıwı) sebepli, jiylikti sheksiz kóteriw múmkin bolmay qaldı. Nátiyjede, óndiriwshiler (Intel, AMD) "Kóp yadrolı" (Multi-core) arxitekturaǵa ótti. Búgingi kúnde ápiwayı noutbuktan baslap smartfonlarǵa shekem hámme qurılmalar kóp yadrolı. Eger programma parallel programmalastırıw principleri tiykarında jazılmasa, ol tek bir yadronı paydalanadı, al qalǵan yadrolar bos turadı, yaǵnıy resurslardan tolıq paydalanılmaydı.
Parallel programmalastırıwdıń eń tiykarǵı túsinikleri – bul "Process" hám "Aǵım" (Thread). Process – bul operativ yadda óziniń jeke ornına (adresler keńisligine) iye bolǵan, izolaciyalanǵan programma nusqası. Bir process ekinshisiniń yadına tikkeley kire almaydı. Aǵım (lightweight process) bolsa – bul process ishinde isleytuǵın kishi ǵárezsiz orınlanıw birligi. Bir processtiń ishindegi
barlıq aǵımlar ulıwma yadtı hám resurslardı paydalanadı. Zamanagóy parallel programmalastırıw kóbinese usı "kóp aǵımlı" (multithreading) usılǵa tiykarlanǵan, sebebi aǵımlardı jaratıw hám basqarıw processlerge qaraǵanda jeńilirek hám tezirek.
Degen menen, parallelizm "Jarıs jaǵdayı" (Race Condition) hám "Tuyıqqa tireliw" (Deadlock) sıyaqlı quramalı mashqalalardı payda etedi. Jarısıw jaǵdayı – eki yamasa onnan kóp aǵım bir waqıtta bir ulıwma ózgeriwshini ózgertpekshi bolǵanda hám nátiyje qaysı aǵımnıń birinshi kelgenine ǵárezli bolıp qalatuǵın jaǵday. Bul boljawǵa bolmaytuǵın qátelerge alıp keledi. Tuyıqqa tireliw bolsa – eki aǵımnıń biri-birinen resurs bosatıwın kútip, máńgi toqtap qalıwı. Bul mashqalalardı sheshiw ushın "Sinxronizaciya" mexanizmleri (Mutex, Semaphore, Lock) qollanıladı, olar aǵımlardıń ulıwma resurslarǵa gezek penen kiriwin támiyinleydi.
Parallel programmalastırıw modelleri
Parallel programmalardı jaratıwdıń bir neshe tiykarǵı modelleri bar, olardıń eń keń tarqalǵanı – "Ulıwma yad modeli" (Shared Memory Model). Bul modelde barlıq parallel aǵımlar bir ulıwma operativ yad keńisligine iye boladı hám maǵlıwmat almasıw usı yadtaǵı ózgeriwshilerdi oqıw/jazıw arqalı ámelge asırıladı. OpenMP (Open Multi-Processing) standartı usı modelge jaqsı mısal bola aladı. C++ yamasa Fortran tillerinde programmist arnawlı direktivalar (#pragma) qoyıw arqalı kompilyatorǵa cikllerdi parallel orınlawdı buyıradı. Bul model programmalastırıw ushın qolaylı, biraq sinxronizaciya qátelerine (data races) júdá sezimtal keledi.
Ekinshi model – "Xabar almasıw modeli" (Message Passing Model). Bul modelde parallel processlerdiń hárqaysısınıń óz jeke yadı boladı hám olar bir-biri menen tikkeley baylanısqa, tek "xabarlar" (messages) jiberiw arqalı sóylesedi. Bul model "Bólistirilgen sistemalar" (Distributed Systems) hám superkompyuterler ushın tiykarǵı standart bolıp tabıladı. MPI (Message Passing Interface) kitapxanası usı modeldiń eń ayqın wákili. Xabar almasıw modeli quramalıraq bolıwı múmkin, biraq ol ulıwma yadtaǵı konfliktlerdi boldırmaydı hám júzlegen kompyuterlerden turatuǵın klasterlerde effektiv isleydi.
Úshinshi baǵdar – "Maǵlıwmatlar parallelizmi" (Data Parallelism). Bul jaǵdayda programma logikası (buyrıqlar) bólinbeydi, al qayta islenetuǵın maǵlıwmatlar bóleklerge bólinedi. Birdey operaciya maǵlıwmatlardıń hár túrli bóleklerinde bir waqıtta orınlanadı. Bul SIMD (Single Instruction, Multiple Data) arxitekturasına sáykes keledi. Búgingi kúnde bul model GPU (Videokarta)
programmalastırıwda eń joqarı nátiyje bermekte. Videokartalarda mıńlaǵan kishi yadrolar bolıp, olar matritsalıq esaplawlar hám piksellerdi qayta islew sıyaqlı birdey tiptegi wazıypalardı CPU-ǵa qaraǵanda júzlegen ese tezirek orınlaydı.
Tórtinshi kózqaras – "Task Parallelism" (Wazıypalar parallelizmi). Bunda parallel aǵımlar hár túrli wazıypalardı orınlaydı. Mısalı, bir aǵım paydalanıwshı interfeysin (UI) sızsa, ekinshi aǵım serverden maǵlıwmat júkleydi, úshinshi aǵım bolsa maǵlıwmatlardı diskke jazadı. Bul usıl kóbinese qosımshalardıń "juwap beriwshiligin" (responsiveness) arttırıw ushın qollanıladı. Asinxron programmalastırıw (Asynchronous programming) usı modeldiń bir kórinisi bolıp, ol "Callback" yamasa "Future/Promise" mexanizmleri arqalı tiykarǵı aǵımdı toqtatpastan, uzaq waqıt alatuǵın operaciyalardı fonda orınlawǵa imkaniyat beredi.
Programmalastırıw tilleri hám zamanagóy qurallar
Parallelizmdi qollap-quwatlaw dárejesine qaray tillerdi bir neshe toparǵa bóliwge boladı. C hám C++ sıyaqlı "tómen dárejeli" tillerde parallelizm Pthreads (POSIX Threads) kitapxanası yamasa std::thread arqalı ámelge asırıladı. Bul programmistke processlerdi hám yadtı tolıq basqarıw imkaniyatın beredi, biraq barlıq juwapkershilikti (qátelerdiń aldın alıwdı) programmisttiń moynına júkleydi. Java hám C# sıyaqlı joqarı dárejeli tiller bolsa, Thread klassları hám ExecutorService sıyaqlı quramalı freymvorklar arqalı aǵımlardı basqarıwdı jeńillestiredi, biraq báribir ulıwma yad modeliniń qıyınshılıqların saqlap qaladı.
Zamanagóy tiller arasında Go (Golang) tili parallel programmalastırıwdı eń ańsatlastırǵan til bolıp esaplanadı. Go tili "Goroutines" dep atalatuǵın júdá jeńil aǵımlardı hám olar arasındaǵı baylanıs ushın "Channels" (Kanallar) mexanizmin usınıs etedi. Go tiliniń filosofiyası: "Yadtı bólisiw arqalı baylanıspań, kerisinshe, baylanısıw (xabar jiberiw) arqalı yadtı bólisiń". Bul CSP (Communicating Sequential Processes) modeline tiykarlanǵan bolıp, ol deadlock hám race condition qátelerin minimumǵa túsiredi. Goroutineler operaciyalıq sistemanıń aǵımlarına qaraǵanda júdá az resurs talap etedi, sonlıqtan bir programmada millionlaǵan goroutinelerdi qollana beriwge boladı.
Rust tili bolsa parallel programmalastırıwdaǵı "Yad qáwipsizligi" (Memory Safety) máselesine revolyuciyalıq sheshim alıp keldi. Rust kompilyatorı "Ownership" (Iyelik etiw) hám "Borrowing" (Qarızǵa alıw) qaǵıydaları arqalı, kod orınlanbastan burın-aq (compile-time) data race qátelerin anıqlaydı hám toqtatadı. Eger siz bir ózgeriwshini eki aǵımnan qorǵawsız paydalanbaqshı bolsańız, Rust programmanı kompilyaciya etpey qoyadı. Bul programmistlerge C++ tiliniń
tezliginde, biraq júdá joqarı qáwipsizlik dárejesinde parallel programmalar jazıwǵa imkaniyat beredi.
Sonıń menen birge, arnawlı parallel esaplaw tilleri hám keńeytpeleri bar.
CUDA (Compute Unified Device Architecture) – bul NVIDIA tárepinen islep shıǵılǵan platforma bolıp, C/C++ tiliniń keńeytpesi retinde videokartalarda (GPU) parallel kod jazıwǵa imkaniyat beredi. Bul texnologiya búgingi kúnde Jasalma Intellekt (Deep Learning), ilimiy modellestiriwde (mısalı, hawa-rayın boljaw) tiykarǵı quralǵa aylandı. Parallel programmalastırıw endi tek qánigelerdiń emes, al har qanday effektiv programma jaratıwshınıń kónlikpesine aylanbaqta.
BAQLAW SORAWLARÍ:
1.Parallel programmalastırıw menen izbe-iz (sequential) programmalastırıwdıń tiykarǵı ayırmashılıǵı nede?
2.Process hám Aǵım (Thread) arasındaǵı parıqtı túsindirip beriń.
3."Jarısıwshı jaǵday" (Race Condition) degen ne hám ol ne ushın qáwipli?
4.Ulıwma yad modeli (Shared Memory) hám Xabar almasıw modeli (Message
Passing) qalay ózgeshelenedi?
5.Go hám Rust tilleriniń parallel programmalastırıwdaǵı ózgeshelikleri (artıqmashılıqları) nede?
