[PARPRO] 3. laboratorijska vježba - 2021/2022
Skenk
Svudec
Znam ali nazalost ne radi kako god, napravio sam bez lokalne grupe
neksi
jel se u c++ ovako radi povecavanje s atomic int: atomic_inc(B) , ako je B -> global int *B? Iz nekog razloga mi uvijek vraća count 0, a ne vidim grešku nigdi
DoktorKanye
Koje ste petlje odlučili paralelizirati? Meni se povraca od ovog labosa.
Lukak
DoktorKanye Kljucan rezultat ce ti dati paralelizacija ove petlje:
for i in range(1, m+1):
for j in range(1, n+1):
psitmp[i*(m+2)+j]=0.25*(psi[(i-1)*(m+2)+j]+psi[(i+1)*(m+2)+j]+psi[i*(m+2)+j-1]+psi[i*(m+2)+j+1])
mozes ih teoretski paralelizirati sve, ali ova je kljucan krivac za sporo izvrsavanje tako da nju moras da bi dobio neke pametne rezultate
Skenk
Vam se izvede ovaj 3. u nekom razumnom vremenu kad koristite zadane ulazne parametre?
Polifem
Treći zadatak - paralelno napravio jacobi , ali kako bi rijesio problem da mi error postaje 0 nakon 1. iteracije moram u svakoj iteraciji radit novi buffer A koji mi pokazuje na “psi”- sad mi je paralena izvedba skoro pa ista kao serijska. Ako je netko imao sličan problem da je riješio na pametniji način …C++ implementacija (kostur++)
Polifem
Polifem
hmmm naravno sad odmah isprobao nešto i radi bez stvaranja buffera 🙂 … treba staviti CL_MEM_USE_HOST_PTR, za buffer iz kojeg se čitaju podatci
Fikalo
Polifem E kak si uspio to napravit, ja imam CL_MEM_USE_HOST_PTR u bufferu iz kojeg citam, ali ako ga ne refresham pri svakom loopu mi error postaje 0.
Tompa007
Jel u drugom zadatku treba koristiti ovu formulu za PI
ili mogu ono s dva random broja ?
Bisolvon
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 Mislim da pise u tekstu zadatka da se treba to koristiti. Tako ti je i lakse , ja sam samo taj dio kod copy pasto u kernel.
Tompa007
Bisolvon tocnije mi ispada s onim nacinom , s ovim mi nije tolko precizan
Bisolvon
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 Imaj onda oboje spremno za pokazat, s obzirom da je zadnja predaja a i sva tri zadatka navodno moraju radit da bi “predao” vježbu i ne pao predmet.
Tompa007
Jel vam se uspjelo u trecem cfd izvrtit u nekom razumnom vremenu na pythonu ? il ste morali smanjivat paramtre one 64 i 1000 ili ?
Bisolvon
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 1000, 64 bez paralelizacije je meni bilo nekih 50min, kad sam paralaliziro jacoba je palo na nekih 20. Na predaji sam pokazivao 1000, 4. Bitno samo da je onaj error isti u slijednoj i paralelnoj inacici.
nnn
𝐓𝐇𝐄 𝐒𝐄𝐂𝐑𝐄𝐓 - 𝐂𝐋𝐔𝐁 meni je 50s paralelizirano (64, 1000), svaki dupli for loop mi je paraleliziran, intel integrirana graficka
neksi
Jel se u 3. zadatku u svakoj iteraciji mora stvarat buffer i postavljat argumente za kernel ako paraleliziramo jacobistep?
MOXY
jesu u 3. zadatku m i n zapravo G i L?
Dlaid
1 records have invalid timestamps due to insufficient device buffer space. You can configure the buffer space using the option –device-buffer-size.
Kako ovo rijesiti ako koristim cudu
- zad
tempest
Peter Jordanson
Nisam više siguran dal je to ta greška jer se ne sjećam koji je točno ispis greške meni bio, ali provjeri dal u cudaMalloc()
i cudaMemcpy()
stavljaš točnu veličinu, za Psi bi trebala biti (m + 2) * (n + 2) * sizeof(double)
DoktorKanye
Kako da predam ovaj labos ponovno ako sam vec zakljucao labos koji su mi odbili jer nisam imao 3. zadatak?
Smolaa
Moze neki savjet kako paralelizirat jakobijevu funkciju.
Smolaa
Smolaa I kako bi trebali izgledati bufferi koje saljemo u kernel jer mi nikako nece proradit
Retard00
Pseudokod za jacobija može biti ovakav:
kernel void jacobi_step(psi, psinew, m, n, threadcount, psi_size):
id = get_global_id(0)
repeats = (int)ceil((float)(m * n) / threadcount)
for (int iter = 0; iter < repeats; iter++)
number = id + iter * thread_count
if (number >= psi_size)
break
i = (number % m) + 1
j = ((number / m) % n) + 1
psinew[i * (m + 2) + j] = 0.25 * (psi[(i - 1) * (m + 2) + j] + psi[(i + 1) * (m + 2) + j] + psi[i * (m + 2) + j - 1] + psi[i * (m + 2) + j + 1])
return
Za buffere se može stavit CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR
radi jednostavnosti i veličinu (m+2) * (n+2) * sizeof(double) za varijable psi i psitmp.