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

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

---

koliko vam traje slijedno u 2. zadatku?


madukali

Hoće li biti još jedna predaja jer vidim da je predviđena još jedna predaja na https://www.fer.unizg.hr/predmet/parpro/ispiti ,ali na ferku je LAB 5 samo ovaj tjedan


Spuk

madukali da to je i mene zbunilo. Razmisljam polako poslat mail profesoru.


miss_anthropocene

madukali

Spuk
https://www.fer.unizg.hr/predmet/parpro/obavijesti?@=2vxzv#news_24710
VAŽNO: Iznimno je u ovom tjednu predaje omogućena prijava i za predaju dodatne domaće zadaće u istom tjednu (izostanci zbog STEM games, bolesti i slično). Ukoliko želite predati dodatnu domaću zadaću, za dodatnu prijavu koristite burzu grupa pod nazivom Lab 5. Dodatna predaja (još jedne zadaće) moguća je samo uz prijavu na odgovarajuću burzu.


aerius

AE
Jel zna neko možda rješenje za ovo? hhahah


MrDREDD

Kako ste u drugom zadatku dodavali u globalnu memoriju? Koliko sam shvatio, ne postoji atomic_add za float vrijednosti…


Daeyarn

MrDREDD treba pohraniti sve vrijednosti u polje, i onda ce host kada iskopira polje iz gpu pozbrajati sve
gpu samo racuna clanove, ne zbraja ih


---

zna netko zasto mi u prvom polje koje posaljem na device postane sjebano? posaljem npr [1, 2, 3, 4….] nule na mjestima neparnih indeksa??


steker

moze neko pojasnit kako u prvom ostvarit da jedna dretva moze obradit vise elemenata niza, kako znamo od kojeg do kojeg indeksa niza treba ici?


Daeyarn

steker ja posaljem svim dretvama koliko elemenata treba obraditi(broj elemenata niza N mora biti visekratnik od broja dretvi G tako da svaka dobije jednak broj elemenata) i onda dretva moze na temelju toga i svog global id-a izracunati koje elemente obraduje


Bica

Koje ste G i L postavili u 3? Pokusao sam paralelizirati samo jacobistep tako da podijelim na workgroups i onda pomocu workgroup_id i local_id racunam psi, ali dobijem grešku zbog krivog G i L.


MsBrightside

Bica koje si vrijednosti stavija


Bucc

jedan kolega me zamolio da napravim kao neke natuknice za pyopencl. primjer programa koji obrađuje elemente s n dretvi malo je objašnjeno u comm.py koliko sam bio sposoban. dvije slike gdje sam izvrtio taj kod, pp.py i pp.cl da se može pokrenuti sa python pp.py. možda nekome pomogne


gladiator

Olive Oil god’s work kolega


Bucc

Olive Oil sad sam vidio da u comm.py u drugoj petlji size treba bit threads, krivo sam vidio. u pp.cl je dobro napisano


Jaster111

Olive Oil

😎


Reznox

MsBrightside ma slucajno san ostavia na float vrijednosti umisto int


aerius

jel rok za predaju onda sutra do 12 ili ponoći?


gladiator

ako vam pip install pyopencl prođe u prvom pokušaju, jeste li uopće živjeli?


aerius

btw jel ima ko ili je imo problema sa pokretanjem jakobovićevim opencl primjera sa amd-ovom grafičkom na windowsu?


---

Može netko podijeliti py kod za slijednu verziju CFD? Taj dio je ionako svima isti pa da uštedimo vrijeme 😃


MsBrightside

🤡 imas ti kakvu ideju?


Bucc

🤡

MsBrightside

import numpy as np, math, time,sys
np.set_printoptions(threshold=sys.maxsize)
def main():

    error, bnorm, tolerance, scalefactor, numiter, printfreq = 0, 0, 0, 0, 0, 1000
    bbase, hbase, wbase, mbase, nbase = 10, 15, 5, 32, 32
    irrotational, checkerr = 1, 0
    m, n, b, h, w, iter, i, j = 0, 0, 0, 0, 0, 0, 0, 0
    tstart, tstop, ttot, titer = 0, 0, 0, 0

    print("Usage: cfd <scale> <numiter>\n")

    scalefactor, numiter = 64, 1

    print("Scale Factor = {}, iterations = {}\n".format(scalefactor, numiter))

    b = bbase*scalefactor
    h = hbase*scalefactor
    w = wbase*scalefactor
    m = mbase*scalefactor
    n = nbase*scalefactor

    print("Running CFD on {} x {} grid in serial\n".format(m,n))

    psi = np.zeros(((m+2)*(n+2)), dtype=np.float32)
    psitmp = np.zeros(((m+2)*(n+2)), dtype=np.float32)
    i, j = 0, 0

    for i in range(b+1, b+w):
        psi[i*(m+2)+0] = i-b

    for i in range(b+w, m+1):
        psi[i*(m+2)+0] = w

    for j in range(1, h+1):
        psi[(m+1)*(m+2)+j] = w

    for j in range(h+1, h+w):
        psi[(m+1)*(m+2)+j]= w-j+h

    bnorm=0.0
    for i in range(0, m+2):
        for j in range(0, n+2):
            bnorm += psi[i*(m+2)+j]*psi[i*(m+2)+j]
    
    bnorm=math.sqrt(bnorm)

    print("\nStarting main loop...\n\n")
    tstart=time.time()

    for iter in range(1, numiter+1):
  
        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])
        if checkerr or iter == numiter: 
            dsq = 0

            for i in range(1, m+1):
                for j in range(1, n+1):
                    tmp = psitmp[i*(m+2)+j]-psi[i*(m+2)+j]
                    dsq += tmp*tmp
            error = dsq
            error=math.sqrt(error)
            error=error/bnorm

        if checkerr: 
            if (error < tolerance):
                print("Converged on iteration {}\n".format(iter))
                break

        for i in range(1, m+1):
            for j in range(1, n+1):
                psi[i*(m+2)+j]=psitmp[i*(m+2)+j]

        if(iter%printfreq == 0):
            if not checkerr:
                print("Completed iteration {}\n".format(iter))
            else:
                print("Completed iteration {}, error = {}\n".format(iter,error))

    if iter > numiter:
        iter=numiter

    tstop=time.time()

    ttot=tstop-tstart
    titer=ttot/iter

    print("\n... finished\n")
    print("After {} iterations, the error is {}\n".format(iter,error))
    print("Time for {} iterations was {} seconds\n".format(iter,ttot))
    print("Each iteration took {} seconds\n".format(titer))
    print("... finished\n")

if __name__ == '__main__':
    main()

« Prethodna stranica Sljedeća stranica »