Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

CUDA

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Informatyka
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SZCZUR
żul



Dołączył: 09 Lis 2005
Posty: 603
Przeczytał: 0 tematów


PostWysłany: Wto 14:19, 30 Paź 2007    Temat postu: CUDA

topic dedykowany głównie dla Cedrica...


przesyłanie tablic do GPU:

float* cpu_mem = new float[size];
cpu_mem[...] = ....

void* gpu_mem;
cudaMalloc((void**) &gpu_mem, size * sizeof(float));

cudaMemcpy(gpu_mem, cpu_mem, size * sizeof(float), cudaMemcpyHostToDevice);

//teraz przesylasz do kernela
abcd<<< grid, threads >>>(gpu_mem);

//jak byś chciał coś przesłać z powrotem to:
cudaMemcpy(hcpu_mem, gpu_mem, mem_size, cudaMemcpyDeviceToHost)



GPU może pracować tylko z float i int przy czym inty są ok 4x wolniejsze. reszta typów jest emulowana i nie wiem jaka ma wydajność..

trzeba jeszcze pamiętać ze float nie jest zgodny z IEEE-754.
(dotyczy to miedzy innymi odwrotności, sqrt, NaN...)

jak byś allokowal na gpu tablice 2D to używasz "cudaMallocPitch"

można tez przesyłać dane jako tekstury i jak byś tego potrzebował to pisz...
(tekstury automatycznie mogą zmieniać np: byte na float ale to komplikuje trochę sprawę)


edit:
gpu działa asynchronicznie z cpu wiec w czasie gdy gpu jest zajęte warto sie zając generowaniem następnych danych dla gpu a dopiero później pobierać wyniki z gpu. pobieranie wyników z gpu wymusza wstrzymanie pracy cpu dopóki gpu nie jest gotowe.

edit2:
nie wiem jak dobrze znasz CUDA wiec dam ci jeszcze parę hintów:

-zamiast if/for/while... używaj operacji matematycznych o ile to możliwe bo każdy multiprocesor ma tylko jedna jednostkę dekodująca rozkazy i jeśli hoc jeden watek wejdzie do if to wszystkie inne czekaj aż on z niego wyjdzie.

-operacjie +, -, * na floatach trwaja 4 cykle "1/x", "1/sqrt(x)" trwaja 16 cykli
-operacjie + - * na intach trwaja 16 cykli
-dostęp do shared mem trwa 2 cykle, do global 600~800 cykli

-nvidia wydala kalkulatorek do obliczania optymalnych ilosci watków. (w pliku xml)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
dzendras
Germański oprawca



Dołączył: 07 Mar 2006
Posty: 1326
Przeczytał: 0 tematów

Skąd: Chorzów

PostWysłany: Wto 19:01, 30 Paź 2007    Temat postu:

hm a nie można po prostu wysłać PW?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
jagm
zielony żul



Dołączył: 01 Lut 2006
Posty: 1421
Przeczytał: 0 tematów


PostWysłany: Wto 19:29, 30 Paź 2007    Temat postu:

dostal taki prace w drimlabie i od razu sie wymadrza ;p bys sie uczyl od szczura, a nie marudzil ;p
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
dzendras
Germański oprawca



Dołączył: 07 Mar 2006
Posty: 1326
Przeczytał: 0 tematów

Skąd: Chorzów

PostWysłany: Wto 19:53, 30 Paź 2007    Temat postu:

staż, nie pracę ;P
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
jagm
zielony żul



Dołączył: 01 Lut 2006
Posty: 1421
Przeczytał: 0 tematów


PostWysłany: Wto 20:08, 30 Paź 2007    Temat postu:

wiem, wiem ;]
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Informatyka Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin