Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[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

Daeyarn

Daeyarn

anon00

poslao sam mail profesoru, profesor kaze da to rjesenje nije bas prihvatljivo jer je neucinkovita podjela na ~8 procesora, i da treba doci barem do dubine 2 gdje je 49 stanja i njih podijeliti medu radnicima


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.


« Prethodna stranica Sljedeća stranica »