TechEd Europe

Paralelní vývoj v .NET frameworku a Visual Studiu

  • Comments 3

Příští verze .NET frameworku bude obsahovat knihovny pro vývoj paralelních aplikací a Visual Studio nástroje pro jejich ladění. Vaše aplikace tak budou moci využít více procesorů či jader. To je jistě pozivitní, ale předčasný optimismus není na místě. Paralelizace vyžaduje jisté úsilí a vaše aplikace se paralelizací zrychlí pouze za splnění řady podmínek:

  1. Provádí spíše málo dlouhotrvajících operací. Ideální jsou např. výpočty. Opačným příkladem je např. webová prezentace - zde IIS rozděluje krátce trvající zpracování stránek mezi jednotlivá jádra a žádná parelizace není třeba.
  2. Úzkým hrdlem aplikace je procesor. Pokud tráví většinu času čekáním na zápis na disk anebo na data ze sítě, paralelizace nepomůže.
  3. Aplikace je paralelizovatelná - pokud např. operace 2 vyžaduje výsledek operace 1, a operace 3 vyžaduje výsledek operace 2, nelze operace 1, 2 a 3 vůbec paralelizovat.
  4. Paralelizovaná operace jsou dostatečně dlouhé. Vytvoření a zpětná synchronizace každé úlohy má nezanedbatelnou režii, tato by neměla přesahovat režii výpočtu. Např. pokud byste chtěli paralelizovat násobení matic, je lepší paralelizovat výsledky jednotlivých řádků než jednotlivých buněk. Neboli pokud mám pouze jednotky jader, stačí vytvořit desítky úloh a tyto paralelizovat. Vytvářet milióny paralelních úloh by jenom zvyšovalo režii.

Pokud se vám povede operaci paralelizovat, může být výsledné zrychlení velmi blízké počtu jader, např. na 4 jádrech můžete dostat 3.8x vyšší výkon než na jednom. Ale paralelizace má též svoje úskalí a vyžaduje změny některých myšlenkových postupů. Namátkou:

  1. Úlohy nemusí skončit v pořadí, v jakém byly spuštěny, přestože každá úloha by teoreticky měla trvat stejně dlouho
  2. Může vzniknout několik vyjímek zároveň
  3. Musíte dávat pozor při ukládání výsledků, k příslušné datové struktuře může přistupovat více vláken současně (zde pomohou speciální třídy ze jmenného prostoru System.Collections.Concurrent

Pokud se již nemůžete dočkat, až si to sami vyzkoušíte, je to relativně snadné.

Zde jsou dvě krátká ilustrační videa v češtině:
http://www.mstv.cz/vyvojari/videos/243/Paralelni-provadeni-v--NET-frameworku-4
http://www.mstv.cz/vyvojari/videos/244/Paralelizace-a-nastroje-pro-ladeni-aplikaci

Zde je přehledný článek v MSDN magazínu: 
http://msdn.microsoft.com/en-us/magazine/cc817396.aspx

A zde web, odkud si můžete stáhnout Beta verzi .NET frameworku 4.0 a Visual Studia 2010:
http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx

Michael

  • >> Pokud tráví většinu času čekáním na zápis na disk anebo na data ze sítě, paralelizace nepomůže.

    Tenhle 2. bod je trochu diskutabilní. Některé úlohy, které pracují se sítí, je naopak velmi vhodné paralelizovat a pomůže to - když budu psát nějaké hromadné stahovátko na webové stránky, tak můžu pustit klidně 20 vláken najednou a pokud je přenosová kapacita sítě dostatečně velká, tak to nijak zdržovat nebude a bude to daleko rychlejší než stahování stránek po jedné.

  • Přesně. Ono taky ale záleží, jaké to čekání je. Pokud je to opravdu čekání na úrovni procesoru, myšleno jako aktivní čekání, pak paralelizace nepomůže. Možná tak to autor myslel...

  • S vyse uvedenymi pripominkami samozrejme souhlasim. Otazka je, zda bych jeste mluvil v tomto pripade o paralelizaci. Spise bych to oznacil za asynchronni zpracovani (kteremu moc nepomuze, zda mam 1 nebo 4 jadra). Kazdopadne na to lze paralelni knihovny v .NET frameworku dobre vyuzit.

    Michael

Page 1 of 1 (3 items)
Leave a Comment
  • Please add 6 and 5 and type the answer here:
  • Post