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

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

Retard00

Smolaa

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.


Smolaa

Retard00 Hvala !


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.


Polifem

Fikalo
Prije petlje za iteraciju postavljam buffere i kernel.setArgs i sve ono za CL, onda u petlji za iteraciju pozivam
queue.enqueueNDRangeKernel , finish , i enqueueReadBuffer koji znaci obavlja jacobi, a nakon toga se vrti sve ono iz cfd sto je ispod jacobi.


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)


neksi

Polifem meni je uvik greska 0 ovako


Polifem

filip
nez, paralelno si napravio samo jacobi ili i copy_back ? jer npr. ako probam i copy back paralelno onda mi je greska kriva a nez zašto jer bi trebala bit ista stvar. tako da radim samo jacobi paralelno s CL_MEM_USE_HOST_PTR i to mi funkcionira, smanji mi za 10 sek izvođenje.


neksi

Polifem radia sam samo jacobi, jesi koristia samo CL_MEM_USE_HOST_PTR ili još neke druge zastave?


JoKing

Polifem Imao sam sličan problem, kad napravim svoju verziju copy dobijem nekoliko puta manju grešku, i na kraju skužim da sam ja kopirao čitavu listu, a i u copy treba staviti ogradu da se ne kopiraju rubni elementi “matrice”, kao i za računanje jacobia i onda dobivam točno rješenje pa provjeri i ti imaš li istu situaciju


Polifem

filip
Buffer A = Buffer(context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, (m + 2) * (n + 2) * sizeof(double), &psi[0]);

Samo ovo


Fikalo

Polifem i ja imam tako, al ak ne napravim to opet u svakoj petlji mi i dalje bude error 0


TheCrimsonChin

Je li netko tko je radio u cudi uspio napravit atomicAdd za double vrijednosti?


JoKing

TheCrimsonChin Nisam radio u cudi pa ne mogu reći, ali jesi probao ovo


TheCrimsonChin

JoKing da, funkcionira za integere, ali neće mi se kompajlirat ako zbrajam doublove


tempest

TheCrimsonChin

Ja sam prvo probao kopirati kod za double atomicAdd s linka JoKing, isto mi nije htjelo funkcionirati pa sam funkciju preimenovao u atomicAdd_double, ali onda mi je izvođenje trajalo duže nego serijski.

Na kraju sam uspio tako da sam definirao unsigned long long int varijablu za npr. Pi, koja ce se slati u kernel funkciju i nad kojom ce se izvodit atomicAdd. U kernel funkciji sam onda kalkulacije napravio koristeći double varijable i prije dodavanja u atomicAdd rezultat pomnozio sa 10 na veliku potenciju i castao u unsigned long long int. I na kraju nakon povratka rezultata castao ga u double i podijelio.


BK-

Kod mi samo vrati exited with code -1073741676. Nešto je do openCL -a. Iz kostrur++.cpp sam kopirao stvari za pokretanje kernel programa i imam jednostavnu kernel funkciju koja računa jednu iteraciju psinew. Ne dobiva errore da mi ne valja dimenzija ili nesto slicno. Ima li netko ideju sto bi moglo bit krivo?


AK10

jel mogu proc labos ako imam kod za 3. koji ne radi al eto imam nesto napisano, a prva 2 mi rade dobro?


Bisolvon

endyyyy Mene su prvo pitali dali sam napravio treci, koliko sam shvatio ne prihvacaju predaju ako nemas treci.


TheCrimsonChin

endyyyy kad sam bio na predaji drugog labosa čuo sam da asistentica nekom liku govori nešto tipa “bitno mi je da ste svaki zadatak pokušali riješit, a sad je li funkcionira…”


TheCrimsonChin

tempest Zanimljivo rješenje. Ja sam našo nečiji repozitorij gdje je nteko implementiro za sve ove tipove što fale pa sam to kopirao. Da znam tko je, častio bih ga


huhu

Ima li netko neki konstruktivan hint za 3. zadatak ako se radi u pythonu s OpenCL (tipa da napise neke korake kako imati nesto, ne mora raditi cisto da mogu predat)?


SuperSjajan3

huhu Prepisi njihov kod iz c++ u python i samo paraleliziraj n2 for petlje. Znaci onaj jacobistep, dsquare i copy. Zapravo nije komplicirano, najvise ti je drkanja s tipovima podataka, svi su imali probleme da im je error 0 zbog neke gluposti. Scrollaj gore malo, vjerojatno ces nac sve sta ce te zanimat


« Prethodna stranica Sljedeća stranica »