Python modul PyCUDA -- funkcije i tipovi podatka dostupni u CUDA bibliotekama - GASERI


Kompletna dokumentacija svih funkcija koje opisujemo u nastavu dostupna je u PyCUDA dokumentaciji, u dijelu koji opisuje funkcije za rad s višedimenzionalnim poljima na GPU-u



Onion Details



Page Clicks: 0

First Seen: 03/15/2024

Last Indexed: 09/18/2024

Domain Index Total: 397



Onion Content



Python modul PyCUDA: funkcije i tipovi podatka dostupni u CUDA bibliotekama - Kompletna dokumentacija svih funkcija koje opisujemo u nastavu dostupna je u PyCUDA dokumentaciji, u dijelu koji opisuje funkcije za rad s višedimenzionalnim poljima na GPU-u . Modul pycuda.gpuarray - Pored dosad korištenih modula, koristimo i pycuda.gpuarray ; on radi konverziju iz numpy polja u polja s kojima GPU može manipulirati. Konverzija se inače izvodi automatski korištenjem pomoćnih funkcija pycuda.driver.In() , pycuda.driver.Out() i pycuda.driver.InOut() . Inicijalizacija, izračun rezultata na GPU-u za zbroj matrica je oblika - Uočite da su result_gpu , a_gpu i b_gpu već gpuarray polja i nema potrebe za pycuda.driver.In() , pycuda.driver.Out() i pycuda.driver.InOut() . Korištenjem činjenice da gpuarray preopterećuje operator zbrajanja, gornji kod može se i dodatno pojednostaviti. Modul pycuda.cumath: funkcije koje rade element-po-element na poljima tipa GPUArray - CUDA Math API ima predefinirane funkcije uređaja s jednostrukom preciznošću i dvostrukom preciznošću . Kada se koristi PyCUDA, navedene funkcije su dostupne putem modula pycuda.cumath koji opisujemo u nastavku. Zaokruživanje i apsolutna vrijednost: Exponencijalne i logaritamske funkcije, korjenovanje: Trigonometrijske funkcije: Računamo li zbroj oblika \(sin(a) + cos(b)\) element po element, kod je oblika - Zadatak - Promijenite kod da računa element po element rezultat oblika \(\sqrt{e^a + \tan(b)}\) . Incijalizirate GPUArray sa 10 redaka i 5 stupaca u kojem ćemo retke tretirati kao vektore. Napišite kod koji vrši zbrajanje svakog vektora sa svakim vektorom a rezultat vraća kao GPUArray veličine \(\binom{10}{2}\) redaka i 5 stupaca. Aproksimativno računanje broja \(\pi\) kao sume niza - Broj \(\pi\) može se aproksimirati formulom - sekvencijalni kod je oblika - vektorizirani kod koji koristi numpy je oblika - paralelni kod je oblika - Modul pycuda.curandom: generiranje polja sa slučajnim brojevima - XORWOW i MRG32k3a generatori - identično sučelje za pristup funkcionalnosti, primjer sa XORWOW generatorom - Usporedite u terminu vremena izvođenja numpy generator koji se izvodi na CPU-u (funkcija np.random.random() ) i PyCUDA MRG32k3a generator koji se izvodi na GPU-u kod generiranja: Tip - Poziv funkcije set_printoptions() iz modula numpy oblika np.set_printoptions(threshold=np.nan) čini da se ispisuju svi brojevi numpy polja, bez obzira na njegovu veličinu. Generatori zasnovani sa Soboljevim nizovima - Note - Generatori Sobol32 , ScrambledSobol32 , Sobol64 i ScrambledSobol64 zasnovani su na Soboljevim nizovima . Više informacija o njima možete naći u službenoj PyCUDA dokumentaciji . Aproksimativno računanje broja \(\pi\) korištenjem Monte Carlo metode - Monte Carlo metode su skupina metoda koja na temelju slučajnih brojeva i velikog broja pokusa daju aproksimaciju određene vrijednosti. Broj \(\pi\) može se aproksimativno računati i korištenjem Monte Carlo metode. Da bi to vidjeli, uzmimo da je u koordinatnom sustavu ucrtan jedinični krug unutar jediničnog kvadrata. Promotrimo njegovu četvrtinu u prvom kvadrantu: Slučajno odabrana točka unutar četvrtine kvadrata ima vjerojatnost \(\frac{\pi}{4}\) da upadne unutar četvrtine kruga. Dakle, ako s \(n\) označimo broj slučajno odabranih točaka, a s \(h\) broj točaka koje se od \(n\) slučajno odabranih nalaze unutar četvrtine kruga, aproksimativno možemo odrediti broj \(\pi\) kao - Povećavajući \(n\) dobivamo točniju aproksimaciju, a navedena metoda naziva se Monte Carlo metoda. Programski kod koji aproksimira broj \(\pi\) korištenjem Monte Carlo metode je oblika: sekvencijalni kod - paralelni kod - lošiji pristup; for petlja vrši 10000 * 4 dohvaćanja elemenata iz memorije GPU-a - bolji pristup, eliminacija for petlje, radimo na polju - Usporedite vrijeme izvođenja programa i točnost aproksimacije pi korištenjem: na CPU-u i na GPU-u za 10^4^, 10^5^, 10^6^ iteracija. Opišite svoje zaključke. Simulirajmo ekonomiju. Inicijalizirajte GPUArray veličine 200 elemenata koji predstavlja financijsko stanje 200 jediniki u ekonomiji koju simuliramo. Incijalizirajte vrijednosti elemenata na 10. Definirajte dvije operacije - Izvedite Monte Carlo simulaciju veličine 100000 iteracija od kojih svaka iteracija vrši - Author: Vedran Miletić