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

[PARPRO] 3. laboratorijska vježba - 2021/2022

Reznox

[obrisani korisnik] Mozda imas gresku u dimenzijama koje saljes/koristis unutar kernela


MsBrightside

meni je greska u trecem cijelo vrijeme 0, jel ima jos netko da mu se to dogada


Daeyarn

MsBrightside jel imas postavljeno checkerr na 1?


__builtin_popcount

MsBrightside
Meni se događalo kad bih slučajno staro stanje pregazio novim (ili obrnuto), pa bih u funkciju za izračun greške i pod staro, i pod novo stanje poslao iste podatke.


Rope

MsBrightside Meni isto, pokusavam paralelizirati jacobistep i vec nakon dvije iteracije greska je 0. Jesi mozda uspjela skuzit u cem je stvar?


gladiator

kako generirati random broj u opencl-u?


Bucc

gladiator najbolje ga je poslat jer za generiranje treba nekakva magija


SuperSaiyano

gladiator https://github.com/bstatcomp/RandomCL imaš ovdje kod koji mozes iskoristiti. Ja sam doslovno copy paste jednu od inacica, čak ima i primjer sa računanjem broja pi.


MsBrightside

Daeyarn ma probala sam i sa chekerrom i sa bez, izgleda da mi u jacobi kernelu sve budu 0 umjesto vrijednosti


MsBrightside

std::popcount a ne bi trebalo bit do toga jer nikad ne mijenjam oba prije racunanja greske


MsBrightside

Rops MsBrightside


MsBrightside

Kod kreiranja buffera koje mem_flags koristite


__builtin_popcount

SuperSaiyano
Za što vama trebaju slučajni brojevi, zar ne trebamo ovo paralelizirati (piše “tekst programa na kraju poglavlja 2. MPI u skripti”):


SuperSaiyano

std::popcount Da u pravu si, nisam ni čitao i pomislio na drugi algoritam sa nasumičnim brojevima. “ali također trivijalno paralelan”, možda jeste veća točnost rješenja ali sam nešto uradio, neće mi valjda sad ne priznati zadatak.


Jaster111

Ne kužim, meni već negdje oko 10. iteracije bude error otprilike kao i u njihovom primjeru nakon 1000 i onda se samo nastavi smanjivat prema nuli… jel se netko suočio s tim i neki help?


---

kako osigurati da kernel radi i ako je N < G ?


Jaster111

🤡 to i mene zanima pls help ppl


ZalutaliStudent

🤡 Ja bi radije osigurao da uvijek N bude veci od G. Cini se jednostavnije nego osiguravat da kernel radi za N < G.


Svudec

🤡 šalješ kernelu parametar N iz hosta i onda u kernelu staviš if njegov globalni index < N računa, inače samo return.

To ti rješava i da N mora bit djeljiv sa G. Znači dio threadova neće raditi ništa, al nema drugog načina


---

također zad1 “potrebno je odrediti optimalne parametre G i L koji daju najbrže izvođenje”
koji bi to bili parametri?


ZalutaliStudent

🤡 Ja sam testirao s razno raznim parametrima, i zapisao rezultate. Nasao sam optimalno od tih mojih testiranih (za 2 na 21, dakle 2 milijuna podataka) zadatak mi se izvrsi za 50ak sekundi i pronade 155 613 prostih brojeva. Ako se stavi G=a_np.shape, a L=None onda traje 80ak sekundi. Znaci uspio sam ga malo smanjiti. Moji optimalni parametri su G=(N/local_size)*6, a local_size je local_size = prg.prim.get_work_group_info(cl.kernel_work_group_info.WORK_GROUP_SIZE, device)
MIslim da je poanta samo se poigrat s G i L da vidis kak funkcioniraju, ne trebas sad stvarno nac najoptimalnije i najbrze izvodenje moguce.


Svudec

🤡 Ja sam pronašao da je za moj procesor u dokumentaciji najbolji L=64 jer procesor ima fizički 16 threads, naredbe se izvode u 4 koraka i onda je to efektivno 64 threads istovremeno.
I onda staviš G takav da uvijek bude djeljiv sa L i što veći (isprobavaj samo potencije broja 2).

Npr meni je za prvi N= 2 na 25, G= 2 na 19, L=64 i to se izračuna za cca 3.8 sekunde


« Prethodna stranica Sljedeća stranica »