Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 18:08 sub, 10. 3. 2012 Naslov: |
|
|
Evo odgovora na zanimljiva pitanja u vezi zadaće, tako da ih svi vidite:
Pod a) (cuBLAS):
Broj streamova zadajete sami (možete ga npr. učitati kao komandnolinijski argument programa). Poanta je da isprobate sa sve većim i većim brojem streamova, dok god dobivate ubrzanje. Kad se brzina stabilizira, znači da ste uspjeli postići maksimalno zauzeće procesnih jedinica.
Također, pod a) i b) pretpostavite da vam čitava matrica (dakle, svi stupci) stanu u RAM grafičke kartice (na Fermiju je to cca 3 GB). Kad testirate korektnost programa, možete uzimati relativno male matrice (dimenzija pokoju stotinu), a kad želite vidjeti efekte brzine (kao za streamove gore) morat ćete ići na veće dimenzije.
Napominjem da ćemo tehnike brzog računanja normi, točnog mjerenja vremena i redukciju raditi na vježbama, pa se ne brinite trenutno ako niste sigurni kako sve to treba napraviti.
Evo odgovora na zanimljiva pitanja u vezi zadaće, tako da ih svi vidite:
Pod a) (cuBLAS):
Broj streamova zadajete sami (možete ga npr. učitati kao komandnolinijski argument programa). Poanta je da isprobate sa sve većim i većim brojem streamova, dok god dobivate ubrzanje. Kad se brzina stabilizira, znači da ste uspjeli postići maksimalno zauzeće procesnih jedinica.
Također, pod a) i b) pretpostavite da vam čitava matrica (dakle, svi stupci) stanu u RAM grafičke kartice (na Fermiju je to cca 3 GB). Kad testirate korektnost programa, možete uzimati relativno male matrice (dimenzija pokoju stotinu), a kad želite vidjeti efekte brzine (kao za streamove gore) morat ćete ići na veće dimenzije.
Napominjem da ćemo tehnike brzog računanja normi, točnog mjerenja vremena i redukciju raditi na vježbama, pa se ne brinite trenutno ako niste sigurni kako sve to treba napraviti.
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 21:57 sub, 17. 3. 2012 Naslov: |
|
|
Evo odgovora na neka pitanja koja su u međuvremenu iskrsnula:
Ako imate polje tipa T alocirano na device-u, npr.
T *polje
onda ne možete s host-a dereferencirati polje, tj. pristupiti njegovim elementima, npr.
polje[2]
S druge strane, polju alociranom na host-u device može tako pristupiti ako je pri alokaciji mapirano s flag-om
cudaHostAllocMapped
u CUDA adresni prostor.
Pripazite na tu asimetriju!
Kad koristite cuBLAS, pazite gdje ćete spremati skalare.
Neki skalari se uvijek šalju s host-a po vrijednosti (npr. u dnrm2 to su int parametri).
Rezultat dnrm2 možete birati gdje želite da završi pomoću funkcije
cublasSetPointerMode
Inicijalno se očekuje da pokazivači na skalare pokazuju u host memoriju, tj.
CUBLAS_POINTER_MODE_HOST
Ako to želite promijeniti, postavite gornjom funkcijom
CUBLAS_POINTER_MODE_DEVICE
Pitanje oko (globalne) redukcije:
Redukcijski kernel možete napisati tako da su svi threadovi u jednom bloku threadova.
Tada možete reducirati kompletno polje.
Ako imate više thread blokova, svaki od njih napravi parcijalnu redukciju pridruženog potpolja.
Te parcijalne rezultate opet treba reducirati.
Kako to optimalno izvesti bit će - među ostalim - tema sljedećih vježbi, gdje ćemo vidjeti
i redukcije na razini warp-ova, te dodatne napomene oko korištenja shared memorije.
Generalna ideja:
Svi warpovi u jednom bloku naprave svoju (zasebnu) parcijalnu redukciju.
Zatim se ti parcijalni rezultati opet reduciraju u jedan, unutar svakog bloka, i spreme u globalnu memoriju.
Novim pozivom redukcijskog kernela (s odgovarajuće manje blokova ili warpova po bloku) postupak se ponavlja dok god ne dobijemo finalni rezultat.
Ima dosta slobode u odabiru veličine grida i blokova, pa ćemo to detaljnije raspraviti na vježbama.
Ako vam se ne zamara s tom kvazi-rekurzivnom idejom, i zelite napraviti maksimalno jednostavno, uzmite jedan blok threadova.
Evo odgovora na neka pitanja koja su u međuvremenu iskrsnula:
Ako imate polje tipa T alocirano na device-u, npr.
T *polje
onda ne možete s host-a dereferencirati polje, tj. pristupiti njegovim elementima, npr.
polje[2]
S druge strane, polju alociranom na host-u device može tako pristupiti ako je pri alokaciji mapirano s flag-om
cudaHostAllocMapped
u CUDA adresni prostor.
Pripazite na tu asimetriju!
Kad koristite cuBLAS, pazite gdje ćete spremati skalare.
Neki skalari se uvijek šalju s host-a po vrijednosti (npr. u dnrm2 to su int parametri).
Rezultat dnrm2 možete birati gdje želite da završi pomoću funkcije
cublasSetPointerMode
Inicijalno se očekuje da pokazivači na skalare pokazuju u host memoriju, tj.
CUBLAS_POINTER_MODE_HOST
Ako to želite promijeniti, postavite gornjom funkcijom
CUBLAS_POINTER_MODE_DEVICE
Pitanje oko (globalne) redukcije:
Redukcijski kernel možete napisati tako da su svi threadovi u jednom bloku threadova.
Tada možete reducirati kompletno polje.
Ako imate više thread blokova, svaki od njih napravi parcijalnu redukciju pridruženog potpolja.
Te parcijalne rezultate opet treba reducirati.
Kako to optimalno izvesti bit će - među ostalim - tema sljedećih vježbi, gdje ćemo vidjeti
i redukcije na razini warp-ova, te dodatne napomene oko korištenja shared memorije.
Generalna ideja:
Svi warpovi u jednom bloku naprave svoju (zasebnu) parcijalnu redukciju.
Zatim se ti parcijalni rezultati opet reduciraju u jedan, unutar svakog bloka, i spreme u globalnu memoriju.
Novim pozivom redukcijskog kernela (s odgovarajuće manje blokova ili warpova po bloku) postupak se ponavlja dok god ne dobijemo finalni rezultat.
Ima dosta slobode u odabiru veličine grida i blokova, pa ćemo to detaljnije raspraviti na vježbama.
Ako vam se ne zamara s tom kvazi-rekurzivnom idejom, i zelite napraviti maksimalno jednostavno, uzmite jedan blok threadova.
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 16:18 sri, 11. 4. 2012 Naslov: |
|
|
U petak 13.04. predaje zadaca bit ce od podne na PMF-MO, kabinet Rogina-Singer.
Ako mislite doci, molim predbiljezbe ovdje, s razmakom od pola sata.
Slobodno se javite i do podneva, bitno je samo da znamo koliko vas se ocekuje (tj. do kad).
P.S. Ako imate koliziju s nekim kolokvijem, javite se.
U petak 13.04. predaje zadaca bit ce od podne na PMF-MO, kabinet Rogina-Singer.
Ako mislite doci, molim predbiljezbe ovdje, s razmakom od pola sata.
Slobodno se javite i do podneva, bitno je samo da znamo koliko vas se ocekuje (tj. do kad).
P.S. Ako imate koliziju s nekim kolokvijem, javite se.
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
|
[Vrh] |
|
bleki88 Forumaš(ica)
Pridružen/a: 24. 09. 2009. (17:13:58) Postovi: (27)16
|
|
[Vrh] |
|
Mas Forumaš(ica)
Pridružen/a: 18. 10. 2008. (11:22:20) Postovi: (53)16
Spol:
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Thor Forumaš(ica)
Pridružen/a: 24. 04. 2009. (10:57:50) Postovi: (15)16
|
|
[Vrh] |
|
bubble Forumaš(ica)
Pridružen/a: 14. 02. 2007. (00:21:29) Postovi: (8C)16
Spol:
|
|
[Vrh] |
|
itizaj Forumaš(ica)
Pridružen/a: 02. 02. 2010. (13:11:57) Postovi: (4)16
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
ssinger Forumaš(ica)
Pridružen/a: 14. 02. 2009. (23:46:32) Postovi: (38)16
Lokacija: 45.35 st. sjeverno, 16 st. istočno
|
|
[Vrh] |
|
itizaj Forumaš(ica)
Pridružen/a: 02. 02. 2010. (13:11:57) Postovi: (4)16
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
lajka Forumaš(ica)
Pridružen/a: 13. 02. 2008. (23:00:13) Postovi: (39)16
Lokacija: Zagreb
|
|
[Vrh] |
|
|