MI-PPR ukončení výpočtu
Pracuju na paralelní verzi semestrálky hledání minimálních koster. Mám jasně danou spodní mez - pokud některý procesor najde kostru stupně 2, je to automaticky ta nejlepší možná a měl by se ukončit výpočet. Ale tak nějak netuším, jak to udělat.
Nedělala jsem ještě ani normální ukončení výpočtu při projití všech dat, ale mám funkční inicializační rozšíření zásobníku a rozeslání dat procesorům. Můj hlavní problém je nějaká synchronizace. Pokud se stane, že více procesorů najednou najde tu kostru stupně 2, tak se to deadlockne, ať se to snažím ukončit jakkoliv. Zkoušela jsem odeslat všem ostatním zprávu o konci výpočtu a čekat na potvrzení, což logicky nefunguje, protože když to udělá víc procesorů najednou, čekají pak donekonečna. Zkoušela jsem použít i tu redukci, ale to už se dokonce ani nedeadlockne, prostě to skončí bez chyb, i když podle výpisů je vidět, že ty procesy stejně přestaly pracovat někde uprostřed kódu.
Ta bariéra mi na tohle přijde nesmysl, protože jestli musí být umístěná v kódu tak, že k ní dojdou úplně všechny procesory, tak jí na tohle těžko můžu použít a bariérovat to po každém rozšíření zásobníku se mi taky nezdá jako moc dobrý řešení. Stejně tak broadcast jak jsem to pochopila taky musí volat všichni.
Možná se ptám na nějakej úplnej nesmysl a mám úplně špatně celej kód (což je dost dobře možný :D), ale už se tu s tím plácám spoustu hodin a trochu mi to leze na mozek :D
Protože dobrou odpověď už poslal @Josef Kokeš, tak jen okomentuji, že se můžeš podívat třeba sem: https://github.com/hroncok/mi-ppr-krs - také tam může nastat situace, že už není třeba počítat dál.
Miro Hrončok ( 2014-11-16 20:24:05 +0100 )edit