SlideShare une entreprise Scribd logo
1  sur  30
Parallel Patterns Library(PPL) Tomas Dabašinskas, Microsoft Student Partner
Lygiagretus programavimas sudėtingas Padaromas tik labiau patyrusių programuotojų Lygiagretūs šablonai nėra paplitę, gerai žinomi ir lengvai įgyvendinami Krūva galimų problemų: Gijų varžymaisi (races) Mirties taškas (deadlock) Gyvas taškas (livelock) Pamiršti pranešimai (lost event notifications) …
Ko nori programuotojai?
Visual Studio 2010
Parallel Patterns Library (PPL) Veikia kaip ConcurrencyRuntimekomponentas Abstrakcijos lygis tarp programos ir gijų mechanizmo Lengvas panaudojimas Galimybė plėstis (scalability)
Struktūrinis ir nestruktūrinis lygiagretumas Struktūrinis: Lygiagretus kodas pradedamas ir baigiamas viename kontekste Užduotis negali baigtis, kol nesibaigia jos dukterinės užduotys Didesnis našumas Nestruktūrinis: Leidžia užduotį pradėti ir baigti ar jai laukti skirtinguose kontekstuose Lankstesnis
PPL sudėtis Lygiagrečios užduotys (Task Parallelism) 	Kelios užduotys lygiagrečiai Lygiagretūs algoritmai (Parallel Algorithms) 	Bendriniai algoritmai darbui su duomenų rinkiniais Lygiagrečios talpyklos ir objektai (Parallel containers & objects) 	Bendrinės talpyklos/objektai saugiam darbui su jų viduje esančiais elementais
PPL: Užduotys Užduotis (Task)–skaičiavimas, kuris viduje gali būti išskaidytas task_handle klasė Užduočių grupė (Task group) – užduočių, formuojančių loginius skaičiavimus, grupė task_group klasė structured_task_group klasė
Užduočių tipai
Užduotys. Kada/kur naudoti? Rekursiniuose metoduose Norint išskaidyti darbą į atskiras dalis Norėdami aprašysi savo lygiagretų algoritmą, kai neužtenka standartinių PPL algoritmų. Jei galime, naudojame pastaruosius
Let’s CODE! AKA DEMO
PPL: Algoritmai PPL Algoritmai panašūs į STL algoritmus Išnaudoja jau esamą ConcurrencyRuntimefunkctionalumą Algoritmai: parallel_for parallel_for(begin,end,step,[](inti){ …}); parallel_for_each parallel_for(v.begin(),v.end(),[](inti){ … }); parallel_invoke parallel_invoke([]{…},[]{…},[]{…},…,[]{…});
parallel_for() Kartoja tą pačią užduotį lygiagrečiai Optimaliai išskaido užduotis lygiagrečiam vykdymui Balansuoja tarp išskaidytų dalių priklausomai nuo apkrovų. Užduočių vykdymas neturi numatytos tvarkos Argumentai: Pradinė reikšmė, galinė reikšmė, žingsnis, funkcija Pradinė reikšmė, galinė reikšmė, funkcija 	(Žingsnis tokiu atveju pagal nutylėjimą = 1)
for()  parallel_for() Daugelį for ciklų galima pakeisti parallel_for, tačiau: Ciklo indeksas (_Index_type) gali būti tik sveiko tipo Iteracija gali vykti tik į priekį (jei žingsnis (_Step) mažesnis nei 1, gauna klaida) Pabaigos sąlyga turi būti konkreti. Iteracija baigiama, kai iteracijos kintamasis pasiekia reikšmę _Last
parallel_for_each() Lygiagrečiai atlieka veiksmus iteruojamoje talpykloje (tarkim tokioje, kokias suteikia STL) Naudoja tą pačią užduočių skaidymo logiką kaip ir parallel_for Užduočių vykdymas taip pat neturi numatytos tvarkos Veikia tiek su einančiais į priekį (forward) iteratoriais, tiek su atsitiktinio priėjimo (randomaccess) iteratoriais. Su pastaraisiais greičiau.
parallel_invoke() Vykdo užduočių rinkinį paraleliai. Nebaigia darbo tol, kol darbo nebaigia visos lygiagrečiai vykdomos užduotys Priima nuo 2 iki 10 parametrų – funkcijų, kurias vykdys. Kiekviena perduodama funkcija neturi turėti parametrų. Užduočių vykdymas taip pat neturi numatytos tvarkos Patogus, kai norima vykdyti keletą nepriklausomų užduočių lygiagrečiai
parallel_invoke() pavyzdys unsignedintcount_primes(intstart,intend) { unsignedintcount=0u; for(intn=start;n<end;++n) { if(is_prime(n)) ++count; } returncount; } parallel_invoke( [&]{prime_count1=count_primes(0,10000);}, [&]{prime_count2=count_primes(10000,20000);}, [&]{prime_count3=count_primes(20000,30000);}, [&]{prime_count4=count_primes(30000,40000);} );
Let’s CODE! AKA DEMO
PPL: Talpyklos ir objektai
concurent_vector Naudojimas panašus į STL bibliotekos vector klasės Papildymas, paėmimas, iteracija veikia lygiagrečiai Elementus pridėti galima tik į galą (nėra insert() metodo) Galima pašalinti visus elementus su clear() metodu. Šalinti vieno elemento negalima. Nesaugo savo elementų atmintyje iš eilės, tad negalima atlikti kai kurių masyvam būdingų operacijų Galima keisti dydį su grow_by() ir grow_to_at_least() (atitikmuo resize())
concurent_queue Naudojimas panašus į STL bibliotekos queue() klasės Leidžia pasiekti pirmą (dequeue) ir paskutinį (enqueue) elementus. Nėra front() ir pop() metodų. Vietoj jų – try_pop() Nėraback() metodo, tad negalima kreiptis į eilės galą Metodu empty() galima patikrinti ar eilė tuščia. Iteracija ir bei dydžio gavimas nėra pritaikyti lygiagrečiam veikimu
combinable Suteikia daug kartų naudojamą saugyklą gijoje, iš kurių rezultatai sujungiami į bendrą Naudingas, kai reikia kažkokiu resursu dalintis keliose gijose/užduotyse Nebereikia 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>());
PPL: Lygiagretaus darbo atšaukimas (sustabdymas) tg1 t1 t2 t3 tg2 Užduotis Užduočių grupė t4 t5
Lygiagrečių užduočių stabdymas Du būdai sustabdyti: task_group::cancel() ir structured_task_group::cancel() Atšaukia užduočių grupę ir visas dukterines užduočių grupes (iš viršaus į apačią) Efektyvesnis Išimties (exception) išmetimas užduoties darbo funkcijoje. Atšaukinėja kiekvieną užduočių grupę atskirai (iš apačios į viršų)
Lygiagrečių algoritmų stabdymas Kadangi PPL lygiagretūs algoritmai veikia lygiagrečių užduočių pagrindu, jiems sustabdyti (atšaukti) galime naudoti tuos pačios būdus. structured_task_grouptg; task_group_statusstatus=tg.run_and_wait([&]{ parallel_for(0,100,[&](inti){ // Atšaukiam užduotį, kai pasiekiam 50 if(i==50) { tg.cancel(); }else{ // Normalus darbas } }); });
(NE)stabdom Lygiagretaus darbo stabdymas (atšaukimas) tinkamas naudoti, kai kiekviena susijusios grupės užduotis darbą gali baigti savo laiku Yra atvejų, kai lygiagrečios užduočių grupės sustabdymas nėra geras sprendimas: Užduotis, kuri atblokuoja kitą aktyvią užduotį, nėra startavusi  Ši užduotis nestartuoja, jei grupė atšaukiama  Galimas mirties taškas (deadlock)
Parallel Debugger
Parallel Debugger Parallel Tasks Parallel Stacks
Let’s CODE! AKA DEMO
Ačiū už dėmesį Tomas Dabašinskas tomas@studentpartners.com http://www.winblog.lt

Contenu connexe

En vedette

Future Uses Of Computer
Future Uses Of ComputerFuture Uses Of Computer
Future Uses Of Computermsanchezg001
 
Turbulent Times Leadership for Sales Managers
Turbulent Times Leadership for Sales ManagersTurbulent Times Leadership for Sales Managers
Turbulent Times Leadership for Sales ManagersBusiness Book Summaries
 
Competitive intelligence - Pubcon 2013
Competitive intelligence - Pubcon 2013Competitive intelligence - Pubcon 2013
Competitive intelligence - Pubcon 2013Brian McDowell
 
ACSI LEARNING TEAMS 10-2010
ACSI LEARNING TEAMS 10-2010ACSI LEARNING TEAMS 10-2010
ACSI LEARNING TEAMS 10-2010NNU
 
IBM Training Presentation
IBM Training PresentationIBM Training Presentation
IBM Training Presentationdkmorgan51
 
Healthcare2.0 Turning Hell care into healthcare
Healthcare2.0 Turning Hell care into healthcareHealthcare2.0 Turning Hell care into healthcare
Healthcare2.0 Turning Hell care into healthcareBetsy Bevilacqua
 
Senator Jesse Helms Letter To Russia About KAL 007
Senator Jesse Helms Letter To Russia About KAL 007Senator Jesse Helms Letter To Russia About KAL 007
Senator Jesse Helms Letter To Russia About KAL 007Ingo Breuer
 
Ppnet General Knowledge Rrb I
Ppnet General Knowledge Rrb IPpnet General Knowledge Rrb I
Ppnet General Knowledge Rrb Iguestff824c44
 
BRIAN-MCDOWELL-Austin2016-v2
BRIAN-MCDOWELL-Austin2016-v2BRIAN-MCDOWELL-Austin2016-v2
BRIAN-MCDOWELL-Austin2016-v2Brian McDowell
 
Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...
Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...
Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...Institut Català de les Empreses Culturals
 
Edad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBC
Edad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBCEdad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBC
Edad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBCAlex Castañeda-Sabogal
 
Social Media Index June 2012 Update
Social Media Index June 2012 UpdateSocial Media Index June 2012 Update
Social Media Index June 2012 UpdateAddison Group
 

En vedette (20)

Future Uses Of Computer
Future Uses Of ComputerFuture Uses Of Computer
Future Uses Of Computer
 
Turbulent Times Leadership for Sales Managers
Turbulent Times Leadership for Sales ManagersTurbulent Times Leadership for Sales Managers
Turbulent Times Leadership for Sales Managers
 
Competitive intelligence - Pubcon 2013
Competitive intelligence - Pubcon 2013Competitive intelligence - Pubcon 2013
Competitive intelligence - Pubcon 2013
 
Web2.0 part2
Web2.0 part2Web2.0 part2
Web2.0 part2
 
ACSI LEARNING TEAMS 10-2010
ACSI LEARNING TEAMS 10-2010ACSI LEARNING TEAMS 10-2010
ACSI LEARNING TEAMS 10-2010
 
IBM Training Presentation
IBM Training PresentationIBM Training Presentation
IBM Training Presentation
 
Healthcare2.0 Turning Hell care into healthcare
Healthcare2.0 Turning Hell care into healthcareHealthcare2.0 Turning Hell care into healthcare
Healthcare2.0 Turning Hell care into healthcare
 
Senator Jesse Helms Letter To Russia About KAL 007
Senator Jesse Helms Letter To Russia About KAL 007Senator Jesse Helms Letter To Russia About KAL 007
Senator Jesse Helms Letter To Russia About KAL 007
 
Service Orient Or Be Doomed
Service Orient Or Be DoomedService Orient Or Be Doomed
Service Orient Or Be Doomed
 
About Me
About MeAbout Me
About Me
 
Ppnet General Knowledge Rrb I
Ppnet General Knowledge Rrb IPpnet General Knowledge Rrb I
Ppnet General Knowledge Rrb I
 
BRIAN-MCDOWELL-Austin2016-v2
BRIAN-MCDOWELL-Austin2016-v2BRIAN-MCDOWELL-Austin2016-v2
BRIAN-MCDOWELL-Austin2016-v2
 
feelings
feelingsfeelings
feelings
 
Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...
Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...
Dossier de premsa acord Derpartament de Cultura, Gremi d'Empresaris de Cinema...
 
PackMe2
PackMe2PackMe2
PackMe2
 
Beklenen
BeklenenBeklenen
Beklenen
 
Edad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBC
Edad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBCEdad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBC
Edad sexo nutricion y recuperacion cd4 coinfeccion VIH/TBC
 
Digital ethnography
Digital ethnographyDigital ethnography
Digital ethnography
 
Social Media Index June 2012 Update
Social Media Index June 2012 UpdateSocial Media Index June 2012 Update
Social Media Index June 2012 Update
 
PrimaProva01
PrimaProva01PrimaProva01
PrimaProva01
 

Plus de Tomas Dabasinskas

WEB Taikomųjų Programų Kūrimas
WEB Taikomųjų Programų KūrimasWEB Taikomųjų Programų Kūrimas
WEB Taikomųjų Programų KūrimasTomas Dabasinskas
 
Internet Explorer 9 Apžvalga Programuotojams
Internet Explorer 9 Apžvalga ProgramuotojamsInternet Explorer 9 Apžvalga Programuotojams
Internet Explorer 9 Apžvalga ProgramuotojamsTomas Dabasinskas
 
Internet Explorer Naršyklės Administravimas Įmonėse
Internet Explorer Naršyklės Administravimas ĮmonėseInternet Explorer Naršyklės Administravimas Įmonėse
Internet Explorer Naršyklės Administravimas ĮmonėseTomas Dabasinskas
 

Plus de Tomas Dabasinskas (6)

WEB Taikomųjų Programų Kūrimas
WEB Taikomųjų Programų KūrimasWEB Taikomųjų Programų Kūrimas
WEB Taikomųjų Programų Kūrimas
 
Windows 7 Naujovės
Windows 7 NaujovėsWindows 7 Naujovės
Windows 7 Naujovės
 
PHP on Windows
PHP on WindowsPHP on Windows
PHP on Windows
 
Internet Explorer 9 Apžvalga Programuotojams
Internet Explorer 9 Apžvalga ProgramuotojamsInternet Explorer 9 Apžvalga Programuotojams
Internet Explorer 9 Apžvalga Programuotojams
 
Internet Explorer Naršyklės Administravimas Įmonėse
Internet Explorer Naršyklės Administravimas ĮmonėseInternet Explorer Naršyklės Administravimas Įmonėse
Internet Explorer Naršyklės Administravimas Įmonėse
 
Windows Phone 7
Windows Phone 7Windows Phone 7
Windows Phone 7
 

Parallel Patterns Library (PPL) in Visual C++ 2010

  • 1. Parallel Patterns Library(PPL) Tomas Dabašinskas, Microsoft Student Partner
  • 2. Lygiagretus programavimas sudėtingas Padaromas tik labiau patyrusių programuotojų Lygiagretūs šablonai nėra paplitę, gerai žinomi ir lengvai įgyvendinami Krūva galimų problemų: Gijų varžymaisi (races) Mirties taškas (deadlock) Gyvas taškas (livelock) Pamiršti pranešimai (lost event notifications) …
  • 5. Parallel Patterns Library (PPL) Veikia kaip ConcurrencyRuntimekomponentas Abstrakcijos lygis tarp programos ir gijų mechanizmo Lengvas panaudojimas Galimybė plėstis (scalability)
  • 6. Struktūrinis ir nestruktūrinis lygiagretumas Struktūrinis: Lygiagretus kodas pradedamas ir baigiamas viename kontekste Užduotis negali baigtis, kol nesibaigia jos dukterinės užduotys Didesnis našumas Nestruktūrinis: Leidžia užduotį pradėti ir baigti ar jai laukti skirtinguose kontekstuose Lankstesnis
  • 7. PPL sudėtis Lygiagrečios užduotys (Task Parallelism) Kelios užduotys lygiagrečiai Lygiagretūs algoritmai (Parallel Algorithms) Bendriniai algoritmai darbui su duomenų rinkiniais Lygiagrečios talpyklos ir objektai (Parallel containers & objects) Bendrinės talpyklos/objektai saugiam darbui su jų viduje esančiais elementais
  • 8. PPL: Užduotys Užduotis (Task)–skaičiavimas, kuris viduje gali būti išskaidytas task_handle klasė Užduočių grupė (Task group) – užduočių, formuojančių loginius skaičiavimus, grupė task_group klasė structured_task_group klasė
  • 10. Užduotys. Kada/kur naudoti? Rekursiniuose metoduose Norint išskaidyti darbą į atskiras dalis Norėdami aprašysi savo lygiagretų algoritmą, kai neužtenka standartinių PPL algoritmų. Jei galime, naudojame pastaruosius
  • 12. PPL: Algoritmai PPL Algoritmai panašūs į STL algoritmus Išnaudoja jau esamą ConcurrencyRuntimefunkctionalumą Algoritmai: parallel_for parallel_for(begin,end,step,[](inti){ …}); parallel_for_each parallel_for(v.begin(),v.end(),[](inti){ … }); parallel_invoke parallel_invoke([]{…},[]{…},[]{…},…,[]{…});
  • 13. parallel_for() Kartoja tą pačią užduotį lygiagrečiai Optimaliai išskaido užduotis lygiagrečiam vykdymui Balansuoja tarp išskaidytų dalių priklausomai nuo apkrovų. Užduočių vykdymas neturi numatytos tvarkos Argumentai: Pradinė reikšmė, galinė reikšmė, žingsnis, funkcija Pradinė reikšmė, galinė reikšmė, funkcija (Žingsnis tokiu atveju pagal nutylėjimą = 1)
  • 14. for()  parallel_for() Daugelį for ciklų galima pakeisti parallel_for, tačiau: Ciklo indeksas (_Index_type) gali būti tik sveiko tipo Iteracija gali vykti tik į priekį (jei žingsnis (_Step) mažesnis nei 1, gauna klaida) Pabaigos sąlyga turi būti konkreti. Iteracija baigiama, kai iteracijos kintamasis pasiekia reikšmę _Last
  • 15. parallel_for_each() Lygiagrečiai atlieka veiksmus iteruojamoje talpykloje (tarkim tokioje, kokias suteikia STL) Naudoja tą pačią užduočių skaidymo logiką kaip ir parallel_for Užduočių vykdymas taip pat neturi numatytos tvarkos Veikia tiek su einančiais į priekį (forward) iteratoriais, tiek su atsitiktinio priėjimo (randomaccess) iteratoriais. Su pastaraisiais greičiau.
  • 16. parallel_invoke() Vykdo užduočių rinkinį paraleliai. Nebaigia darbo tol, kol darbo nebaigia visos lygiagrečiai vykdomos užduotys Priima nuo 2 iki 10 parametrų – funkcijų, kurias vykdys. Kiekviena perduodama funkcija neturi turėti parametrų. Užduočių vykdymas taip pat neturi numatytos tvarkos Patogus, kai norima vykdyti keletą nepriklausomų užduočių lygiagrečiai
  • 17. parallel_invoke() pavyzdys unsignedintcount_primes(intstart,intend) { unsignedintcount=0u; for(intn=start;n<end;++n) { if(is_prime(n)) ++count; } returncount; } parallel_invoke( [&]{prime_count1=count_primes(0,10000);}, [&]{prime_count2=count_primes(10000,20000);}, [&]{prime_count3=count_primes(20000,30000);}, [&]{prime_count4=count_primes(30000,40000);} );
  • 19. PPL: Talpyklos ir objektai
  • 20. concurent_vector Naudojimas panašus į STL bibliotekos vector klasės Papildymas, paėmimas, iteracija veikia lygiagrečiai Elementus pridėti galima tik į galą (nėra insert() metodo) Galima pašalinti visus elementus su clear() metodu. Šalinti vieno elemento negalima. Nesaugo savo elementų atmintyje iš eilės, tad negalima atlikti kai kurių masyvam būdingų operacijų Galima keisti dydį su grow_by() ir grow_to_at_least() (atitikmuo resize())
  • 21. concurent_queue Naudojimas panašus į STL bibliotekos queue() klasės Leidžia pasiekti pirmą (dequeue) ir paskutinį (enqueue) elementus. Nėra front() ir pop() metodų. Vietoj jų – try_pop() Nėraback() metodo, tad negalima kreiptis į eilės galą Metodu empty() galima patikrinti ar eilė tuščia. Iteracija ir bei dydžio gavimas nėra pritaikyti lygiagrečiam veikimu
  • 22. combinable Suteikia daug kartų naudojamą saugyklą gijoje, iš kurių rezultatai sujungiami į bendrą Naudingas, kai reikia kažkokiu resursu dalintis keliose gijose/užduotyse Nebereikia 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>());
  • 23. PPL: Lygiagretaus darbo atšaukimas (sustabdymas) tg1 t1 t2 t3 tg2 Užduotis Užduočių grupė t4 t5
  • 24. Lygiagrečių užduočių stabdymas Du būdai sustabdyti: task_group::cancel() ir structured_task_group::cancel() Atšaukia užduočių grupę ir visas dukterines užduočių grupes (iš viršaus į apačią) Efektyvesnis Išimties (exception) išmetimas užduoties darbo funkcijoje. Atšaukinėja kiekvieną užduočių grupę atskirai (iš apačios į viršų)
  • 25. Lygiagrečių algoritmų stabdymas Kadangi PPL lygiagretūs algoritmai veikia lygiagrečių užduočių pagrindu, jiems sustabdyti (atšaukti) galime naudoti tuos pačios būdus. structured_task_grouptg; task_group_statusstatus=tg.run_and_wait([&]{ parallel_for(0,100,[&](inti){ // Atšaukiam užduotį, kai pasiekiam 50 if(i==50) { tg.cancel(); }else{ // Normalus darbas } }); });
  • 26. (NE)stabdom Lygiagretaus darbo stabdymas (atšaukimas) tinkamas naudoti, kai kiekviena susijusios grupės užduotis darbą gali baigti savo laiku Yra atvejų, kai lygiagrečios užduočių grupės sustabdymas nėra geras sprendimas: Užduotis, kuri atblokuoja kitą aktyvią užduotį, nėra startavusi  Ši užduotis nestartuoja, jei grupė atšaukiama  Galimas mirties taškas (deadlock)
  • 28. Parallel Debugger Parallel Tasks Parallel Stacks
  • 30. Ačiū už dėmesį Tomas Dabašinskas tomas@studentpartners.com http://www.winblog.lt