5. Parallel Patterns Library (PPL)Veikia kaip ConcurrencyRuntimekomponentasAbstrakcijos lygis tarp programos ir gij迭 mechanizmoLengvas panaudojimasGalimyb plstis (scalability)
6. Strukt笛rinis ir nestrukt笛rinis lygiagretumasStrukt笛rinis:Lygiagretus kodas pradedamas ir baigiamas viename konteksteU転duotis negali baigtis, kol nesibaigia jos dukterins u転duotysDidesnis na邸umasNestrukt笛rinis:Leid転ia u転duot眺 pradti ir baigti ar jai laukti skirtinguose kontekstuoseLankstesnis
7. PPL sudtisLygiagreios u転duotys (Task Parallelism) Kelios u転duotys lygiagreiaiLygiagret笛s algoritmai (Parallel Algorithms) Bendriniai algoritmai darbui su duomen迭 rinkiniaisLygiagreios talpyklos ir objektai (Parallel containers & objects) Bendrins talpyklos/objektai saugiam darbui su j迭 viduje esaniais elementais
8. PPL: U転duotysU転duotis (Task)skaiiavimas, kuris viduje gali b笛ti i邸skaidytastask_handle klasU転duoi迭 grup (Task group) u転duoi迭, formuojani迭 loginius skaiiavimus, gruptask_group klasstructured_task_group klas
13. parallel_for()Kartoja t pai u転duot眺 lygiagreiaiOptimaliai i邸skaido u転duotis lygiagreiam vykdymuiBalansuoja tarp i邸skaidyt迭 dali迭 priklausomai nuo apkrov迭.U転duoi迭 vykdymas neturi numatytos tvarkosArgumentai:Pradin reik邸m, galin reik邸m, 転ingsnis, funkcijaPradin reik邸m, galin reik邸m, funkcija (貼ingsnis tokiu atveju pagal nutyljim = 1)
14. for() parallel_for()Daugel眺 for cikl迭 galima pakeisti parallel_for, taiau:Ciklo indeksas (_Index_type) gali b笛ti tik sveiko tipoIteracija gali vykti tik 眺 priek眺 (jei 転ingsnis (_Step) ma転esnis nei 1, gauna klaida)Pabaigos slyga turi b笛ti konkreti. Iteracija baigiama, kai iteracijos kintamasis pasiekia reik邸m _Last
15. parallel_for_each()Lygiagreiai atlieka veiksmus iteruojamoje talpykloje (tarkim tokioje, kokias suteikia STL)Naudoja t pai u転duoi迭 skaidymo logik kaip ir parallel_forU転duoi迭 vykdymas taip pat neturi numatytos tvarkosVeikia tiek su einaniais 眺 priek眺 (forward) iteratoriais, tiek su atsitiktinio prijimo (randomaccess) iteratoriais. Su pastaraisiais greiiau.
16. parallel_invoke()Vykdo u転duoi迭 rinkin眺 paraleliai.Nebaigia darbo tol, kol darbo nebaigia visos lygiagreiai vykdomos u転duotysPriima nuo 2 iki 10 parametr迭 funkcij迭, kurias vykdys. Kiekviena perduodama funkcija neturi turti parametr迭.U転duoi迭 vykdymas taip pat neturi numatytos tvarkosPatogus, kai norima vykdyti kelet nepriklausom迭 u転duoi迭 lygiagreiai
20. concurent_vectorNaudojimas pana邸us 眺 STL bibliotekos vector klassPapildymas, pamimas, iteracija veikia lygiagreiaiElementus pridti galima tik 眺 gal (nra insert() metodo)Galima pa邸alinti visus elementus su clear() metodu. alinti vieno elemento negalima.Nesaugo savo element迭 atmintyje i邸 eils, tad negalima atlikti kai kuri迭 masyvam b笛ding迭 operacij迭Galima keisti dyd眺 su grow_by() ir grow_to_at_least() (atitikmuo resize())
21. concurent_queueNaudojimas pana邸us 眺 STL bibliotekos queue() klassLeid転ia pasiekti pirm (dequeue) ir paskutin眺 (enqueue) elementus.Nra front() ir pop() metod迭. Vietoj j迭 try_pop()Nraback() metodo, tad negalima kreiptis 眺 eils galMetodu empty() galima patikrinti ar eil tu邸ia.Iteracija ir bei dyd転io gavimas nra pritaikyti lygiagreiam veikimu
22. combinableSuteikia daug kart迭 naudojam saugykl gijoje, i邸 kuri迭 rezultatai sujungiami 眺 bendrNaudingas, kai reikia ka転kokiu resursu dalintis keliose gijose/u転duotyseNebereikia naudoti papildom迭 priemoni迭 (tarkim mutex)combinable<int>sum;parallel_for_each(a.begin(),a.end(),[&](inti){sum.local()+=(is_prime(i)?i:0);});prime_sum=sum.combine(plus<int>());
24. Lygiagrei迭 u転duoi迭 stabdymasDu b笛dai sustabdyti:task_group::cancel() ir structured_task_group::cancel()At邸aukia u転duoi迭 grup ir visas dukterines u転duoi迭 grupes (i邸 vir邸aus 眺 apai)EfektyvesnisI邸imties (exception) i邸metimas u転duoties darbo funkcijoje.At邸aukinja kiekvien u転duoi迭 grup atskirai (i邸 apaios 眺 vir邸迭)
25. Lygiagrei迭 algoritm迭 stabdymasKadangi PPL lygiagret笛s algoritmai veikia lygiagrei迭 u転duoi迭 pagrindu, jiems sustabdyti (at邸aukti) galime naudoti tuos paios b笛dus.structured_task_grouptg;task_group_statusstatus=tg.run_and_wait([&]{parallel_for(0,100,[&](inti){// At邸aukiam u転duot眺, kai pasiekiam 50if(i==50) {tg.cancel();}else{// Normalus darbas}});});
26. (NE)stabdomLygiagretaus darbo stabdymas (at邸aukimas) tinkamas naudoti, kai kiekviena susijusios grups u転duotis darb gali baigti savo laikuYra atvej迭, kai lygiagreios u転duoi迭 grups sustabdymas nra geras sprendimas:U転duotis, kuri atblokuoja kit aktyvi u転duot眺, nra startavusi i u転duotis nestartuoja, jei grup at邸aukiama Galimas mirties ta邸kas (deadlock)