superdurszlak napisał
Z materiałów:
materiały np. MIMUW - na pewno coś jest
dokumentacja nVidii (CUDA)
dokumentacja OpenCL
Dziękuję, będę za jakiś czas się przekopywał przez to :)
Nie wiem na jakim poziomie skomplikowania chcesz te przykłady,
Przykłady bym chciał klasyczne, znane, najprostsze, minimalne, różnorodne.
Przykładowo:
- Mnożenie macierzy, różne rozmiary macierzy, różne typy, różna ilość
transferów. Np. mnożymy miliardy razy jedną i samą małą parę macierzy, czyli
wszystkie dane mieszczą się w pamięci GPU. Robimy to Javie na CPU, w C++ na
CPU (z użyciem SIMD), w OpenCL na CPU i na GPU, w CUDA z biblioteki na CPU i w
CUDA napisanym adhoc na kolanie. Potem celowo raz na ileś mnożeń robimy
transfer do karty, no a do CPU nie trzeba bo dane z RAM są dostępne dla CPU.
- Potem może jakiś problem kombinatoryczny, np. problem skoczka szachowego, albo
problem komiwojażera metodą burut-force. Chciałbym zobaczyć jakie w praktyce
są różnice w czasach wykonania pomiędzy dobrą a przeciętną implementacją i
pomiędzy CPU, GPU, OpenCL i CUDA.
- Rozkłąd na czynniki pierwsze.
- Dowodzenie twierdzeń logicznych.
Wszystko oczywiscie tym samym algorytmem w każdym sprzęcie. Mogą być przykłady
inne, byle były ogólnie znane i proste, aby łatwo wyrabiały pogląd.
Choć jeśli mam być szczery, to jeśli i tak nigdy niczego nie robiłeś czegoś takiego,
Robiłem, ale na CPU, z uwzględnieniem wątków, rozszerzeń procesora, wstawek asemblerowych.
to prawdopodobnie lepiej wyjdziesz na zaprzągnięciu do roboty jakiejś biblioteki
Nie ma do tego bibliotek, muszę zrobić sam... albo odpuścić jak uznam że będzie
zbyt ciężko lub zbyt drogo.
języka wyższego poziomu (języka, w którym masz już działający kod na CPU?),
Jakieś minimalne fragmenty które może nadawawałyby się do testow mam w C++ na CPU, ale
chyba nie można tego łatwo do OpenCL przerzucić? Chyba trzeba na nowo napisać?
GPU rządzi się trochę innymi prawami niż CPU, do tego stopnia, że to, co na CPU jest
optymalizacją, na GPU potrafi zabić wydajność i odwrotnie ;)
Tak, to nie jest zaskoczeniem dla mnie.
A, no i zanim utopisz kasę w kartach graficznych, to lepiej popróbuj na tym, co masz, bo
może się okazać, że np. wydajność wersji na GPU zostanie ubita przez częste wymiany danych
między pamięcią RAM a pamięcią RAM karty.
Powiedzmy na potrzeby rozmowy, że komunikacja pomiędzy GPU a pamiecią RAM będzie rzadko,
np. raz na kilka minut.
Pozdrawiam