[PARPRO] 2. laboratorijska vježba - 2021/2022
Daeyarn
indythedog moze, hvala ti
anon00
indythedog Spomenuo je to da pokrenemo na 2 računala (bez objašnjenja kako), ali je i spomenuo da računala u labaratoriju imaju 8 jezgri pa se možemo dogovoriti.
Nezz kako je to mislio s nama koji planiramo raditi labos 3h i 20minuta prije predaje
anon00
Ima li netko tko je voljan napisati kako konceptualno riješiti ovaj labos?
Profesor je kolegici napisao “Jedan zadatak je jedan cvor stabla tj provjera jednog stanja ploce, s rezultatom je li netko pobijedio. Zbog aglomeracije sva podstabla ispod neke dubine (npr 2) smatramo jednim zadatkom koji se prolazi slijedno rekurzivno. Na dubini 2 je 47 takvih zadataka i to se onda rasporedi po radnicima”
Moja konceptualna ideja je da je vrh stabla trenutno stanje na ploči. Zatim (ako je ploča 7×7) imamo 7 čvorova djece i svaki taj čvor predstavlja stanje ploče koje bi bilo da smo kružić bacili na i-to mjesto (prvi čvor - prvo mjesto). Tad provjerimo da li je neki od njih pobjenički - ako je automatski njega odabiremo. Zatim, svaki od tih čvorova ima svojih 7 deca koji opet predstavljaju 7 mogućih opcija gdje je neprijatelj mogao baciti kružić - ako je neki od njih pobjednički automatski nam je to poraz i samim tim i čvor roditelj predstavlja poraz (jer ako mi odigramo taj korak neprijatelj će sigurno odigrati onaj koji mu nosi sigurno pobjedu).
I tako idemo dok ne prođemo čitavo stablo s tim da ne idemo više u dubinu ako smo naišli na pobjedu/poraz.
Kad smo na svaki čvor stavili -1 i 1 onda računamo one razlomke i odaberemo jedan od onih prvotnih 7 čvorova u prvoj razini koji ima najveći koeficijent.
I tako se ponavlja kod svakog poteza.
Osim 100 dodatnih pitanja koje imam - mene najviše zanima odakle ovo profesorovo da ima 47 čvorova u 2. razini? Nezz je li zatipak i zapravo je mislio 49 ili sam ja totalno krivo postavio zadatak?
Daeyarn
anon00 tako sam nekako ja rjesavao, znaci kada mi odigramo neki potez, racunalo ima 7 mogucih opcija tj. sljedecih stanja
Ta stanja rasporedi po procesorima tako da svaki dobije jednak broj tih “prvih” mogucih stanja
I svaki proces zapravo izvrsava slijedni algoritam ocjene poteza do neke dubine kako bi izracunao dobrotu onih stanja za koja ga je glavni procesor zaduzio
Ovako kako sam ja radio, zapravo svaki procesor moze sam skuziti po svojem ranku i ukupnom broju procesora za koja je stanja zaduzen pa mu ne treba to reci glavni procesor
Jos mi program nije dovoljno pametan pri ocjenjivanju stanja, ali radi za najvise 7 radnika, ako ih je vise onda ovaj ostatak nista ne radi
I na drugoj razini bi trebalo biti 49 stanja, da…
anon00
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁
Pogledaj ovaj odgovor u mailu sto je profesor napisao anon00
Po tom bi ja rekao da treba napraviti ovako (pa nek me netko ispravi ako je krivo)
Glavni proces uzme trenutno stanje ploce i za njega krene raditi stablo. Na vrhu stabla je čvor koji sadrži trenutno stanje ploce i onda u sljedecoj razini stoji 7 mogucih koraka koje racunalo moze napraviti, a za svaki od tih 7 mogucih koraka ima jos 7 mogucih koraka koje nakon tog covjek moze napraviti (ovo je sad 2. razina stabla). Ovo se vrtilo u glavnom procesu slijedno i sad imas stablo koje ima 2 razine, a u toj drugoj razini imas 49 cvorova - to ces pretvoriti u 49 zadataka koje ces dodjeljivati radnicima, a svaki radnik ce u jednom zadatku slijedno dalje za sebe napraviti podstablo do one razine koja mu je određena parametrom (npr do razine 7).
Dakle glavni proces pocinje kreirati stablo do druge razine gdje ima 49 cvorova - to pretvoris u zadatke i paraleliziras i daš radnicima da za svaki od tih zadataka slijedno izvrše algoritam (prakticki samo trebaju pokrenuti onaj njihov c++ primjer) i vrate ti najbolji rezultat (onaj decimalni broj).
Kad se na toj 2. razini svih 49 radnika izvrši i vrate tu ocjenu onda valjda (slijedno, samo glavni proces) treba odrediti koji je potez najbolji.
Moguce da sam totalno u krivo, ali mi ovo jedino ima smisla
Spuk Pretpostavljam kao i prosli labos - pokreni program i pokazi da radi, zatim komentiraj kod i sto si gdje napravio i zbog cega i jos ce trebati pokazati ona dva grafa (ubrzanje i ucinskovitost)
Daeyarn
Daeyarn zapravo mislim da ni ne treba raditi za vise od 8 procesora(7 radnika) kad mjerenja moramo napraviti za najvise 8 procesora? Jedino ne znam jel bi ova ideja prekrsila ono njihovo “rjesenja sa stalnim brojem od najvise 7 zadataka(radnika) se nece priznavati”?
Jel to ogranicenje znaci da procesor mora raditi za broj radnika = 1,2,3,4,5,6,7, ili na sto se to odnosi
Daeyarn
anon00
Daeyarn Ako se ne varam da je ideja da se problem podijeli na zadatke koji se dinamicki dodijeljuju procesoru pa tako ne ovisis o broju procesora - u tom slucaju je svejedno imao ih 4 i 8 ili 16.
Pretpostavljam da su s tom recenicom mislili da upravo to ne smijemo napraviti tj. da ce svaki od 8 procesora preuzeti onaj zadatak koji odgovara njegovom indexu jer ce u tom slucaju raditi samo za iskljucivo 8 procesora
Artemis
Zna netko do kad je otvorena burza grupa?
bodilyfluids
Artemis zadnji put je bila do roka predaje labosa
Spuk
Dragi prijatelj strojnog učenja Kad je rok predaje labosa? nmg nac nigdje
Daeyarn
anon00 ee ali ne radi mi samo za 7 radnika nego i za jednog(on mora sva stanja obradivati), za dva(prvi dobije 4 stanja, drugi 3), za tri(prvi dobije 3, drugi dobije 2,treci 2) itd.
Pa zato nisam siguran jel ok na taj nacin ili ne 🤔
anon00
Daeyarn Iskreno, posalji mail profesoru pa javi da i mi znamo jer nije ni meni najjasnije je li to okej ili ne
Daeyarn
anon00 will do
Fikalo
A jel neko doznao kaj da radimo za tih 8 jezgri?
indythedog
Fikalo Sad sam poslao Jakoboviću mail, nisam stigao jučer
Pa javim kad mi odgovori
indythedog
indythedog Evo odgovora
Na pitanje možemo li doći isprobati na računalima na faksu koja imaju >8 jezgri, kaže da se može doći ali da imaju samo Windows 7/linux i mpich, tj. pretpostavljam da ovo znači da podržavaju samo C/C++ jer kad sam ga pitao podržavaju li Python kaže da ne. Drugim rječima tough luck za nas koji smo radili u Pythonu/nekom drugom jeziku
Na pitanje kako pokrenuti na više računala, kaže na isti način na koji je pokazao za 1. labos - pokrenemo više procesa na različitim računalima, a da točan način ovisi o konkretnoj MPI implementaciji. Kaže da npr. za microsoft mpi prilikom pokretanja se koristi mpiexec i njegove opcije, pa se u argumentima navedu čvorovi na kojima se pokreće kao IP ili mrežno ime.
Jedino što sam ja mogao naći u vezi toga je ovako nešto https://stackoverflow.com/questions/39709877/mpi-execute-program-on-more-than-one-computer, sama naredba je jednostavna ali se čini da prije toga treba napraviti dosta podešavanja, pa se ovo čini kao jako zeznut način
tldr: tko nije radio u C/C++ i nema komp sa 8 jezgri je u problemima
bodilyfluids
Spuk jesi probao na ferku xd?
17.5. 12:00
Retard00
Jel burza grupa na kojoj treba prijavit labos pod nazivom “Lab 3”?
MsBrightside
Retard00 da
Spuk
Dragi prijatelj strojnog učenja sto je najtuznije jesam, al me ferko zbunjuje. Tnx na info.
Ardura
Kako saljete u cpp zadatke radnicima? Mislila sam slati stanje ploce, ali ne znam kako to poslati preko MPI.
Daeyarn
Maddy ja saljem stanje u obliku dva integera koji predstavljaju stupce, prvi oznacava potez racunala, a drugi oznacava potez covjeka
viliml
Maddy U MPI možeš slati niz brojeva - tome služi size
poruke. Znači možeš poslati svih N x M
brojeva koji predstavljaju ploču, samo ih treba postaviti sekvencijalno u buffer.
Ja sam kako bih smanjio volumen poruka slao samo niz poteza (indeksa stupaca). Svi procesi na početku pročitaju datoteku sa stanjem ploče i onda kad zaprime novi zadatak odsimuliraju taj prvi dio.