kabooom pisze:że nie dostaję praktycznie żadnego przyspieszenia.
Nie we wszystkich algorytmach uzyskasz przyspieszenie (może być dużo wolniejszy) - przy gt210 to nawet przy maksymalnym jego wykorzystaniu będzie wolniejszy niż CPU(jeśli użyjesz w swoich algorytmach instrukcji SSE).
kabooom pisze:Program rozwiązuje dość duże układy równań liniowych (do 10mln zmiennych). W załączniku znajdują się dwa programy- jeden liczy na cpu, drugi na gpu, oraz skrypt który je odpala. Wymagania od strony sprzętu to min. 2GB ramu (żeby zmieściła się ta największa macierz). Wyniki zostaną wyplute na std. wyjście więc można je przekierować do pliku
Te 2GB to jest wrzucane na raz na GPU (jeśli tak to dziwne, że to działa na 210 ;p)? Kartę mam GeForce 460 1GB (czyli 13.5x szybsza niż Twoja biorąc pod uwagę same obliczenia (GFLOPs), a dodatkowo przepustowość pamięci od 9x do 15x większa niż w 210 (9 jeśli masz 210 z ddr3, a prawie 15 z ddr2)), ale nie przetestuje Ci programu (nie ufam programom wrzucanym na fora), a nie dałeś wersji debug, żebym mógł popatrzeć na kod i zobaczyć czy to faktycznie nie jakiś złośliwy program.
PS. przy pracy nad wydajnością swoich programów na GPU pamiętaj o architekturze kart graficznych - ważne jest to, że podobnie do SSE/NEON/AVX, czyli architektura SIMD (jedna instrukcja jest wykonywana na wszystkich rdzeniach SIMD, a tylko każdy ma inne dane) dlatego pamiętaj o tym, żeby nie nadużywać instrukcji if (i całej reszty kontroli programu (np. pętle)), bo wystarczy niewygodne dane dla GPU dać i z 16 rdzeni w 210 masz 2 bardzo słabe rdzenie (reszta wykonuje instrukcje które robią te 2, ale nie zapisuje obliczeń (bo nie spełniły warunków if)) - jeśli używasz to na GPU powinieneś to przemyśleć. Ogólnie jeśli chcesz pisać w CUDA/OpenCL to powinieneś poznać architekturę sprzętu na którym program ma działać (jak już poznasz to będziesz wiedział czy kod który napisałeś jest dobry, czy wręcz przeciwnie (rzadko przeniesienie kodu 1:1 z CPU na GPU jest dobrym pomysłem)).