V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Parallel.For()
V 1.0 Parallel System.Threading.Tasks névtér Előny: nem kell kézzel párhuzamosítanom, CPU darabszámra optimalizálni A párhuzamosítást (konkrét szálakra bontást, optimalizációt) a keretrendszer végzi Szintaxis: Parallel.For(Min, Max, Action ) Min: az intervallum zárt alsó határa Max: az intervallum felső nyitott határa Action : olyan lambda kifejezés, amelynek bemeneti paramétere int, kimeneti típusa pedig void Szabó Zsolt, Óbudai Egyetem,
V 1.0 Parallel.For feladat A és B barátságos számok, ha osztóösszegük kölcsönösen egyenlő a másik számmal Vagyis: „A” osztóösszege (önmagát kihagyva) B „B” osztóösszege (önmagát kihagyva) A Feladat: írjuk ki az összes barátságos számot ig a lehető leggyorsabban Szabó Zsolt, Óbudai Egyetem,
V 1.0 Parallel.For problémák A lambda kifejezésen kívül definiált változók közös elérésűek – ennek megfelelően kell elérni őket (lehetőleg: sehogy, védelemmel, odafigyeléssel) Osztóösszegek meghatározása –Szokványos módszerrel: Ciklus i=2-től Gyök(X)-ig, minden osztót és osztópárt hozzáadok az összeghez sok osztás –Eratosthenes szita: a 2-t mint osztót hozzá kell adni az osztóösszeghez a következő számoknál: 4, 6, 8, … A 3-t mint osztót a 6, 9, 12 számoknál … etc Oldjuk meg mindkét módszerrel + sima illetve párhuzamos for ciklussal, és mérjük az időket! Szabó Zsolt, Óbudai Egyetem,
V 1.0 Szabó Zsolt, Óbudai Egyetem,
6