CUDA.net

30.11.2008 22:21 in programowanie, cuda, .net, nvidia

cudamini.jpg
Ta papuga była kiedyś czerwona

Wiele osób narzeka na platformy z maszyną wirtualną (.net, Java), twierdząc, że programy działające na nich mają gorszą wydajność niż te uruchomione w swoim natywnym środowisku. Nie mam zamiaru zaczynać kolejnej świętej wojny, chciałbym jednak przeciwnikom pokazać, że program .net-owy może być bardzo szybki.

Można bowiem w ogóle nie przejmować się wydajnością maszyny wirtualnej i cały ciężar obliczeniowy zrzucić na sprzęt bardziej odpowiedni do tego typu zadań. Co powiecie na kartę graficzną? OK, normalnie można by zastosować CUDA, ale jak z owych cudów skorzystać w platformie zarządzanej? Odpowiedź może być prosta: użyć mechanizmów współpracy kodu zarządzanego i natywnego, albo jeszcze prostsza: skorzystać z gotowego kodu, który wykona za nas brudną robotę.

Biblioteka nazywa się CUDA.net (jakżeby inaczej). Co ważne, jest cały czas rozwijana. Jak można dzięki niej skorzystać z dobrodziejstw CUDA w programie .net-owym? Prosto:

  • piszemy zwykłą aplikację
  • piszemy funkcje wykonywane na urządzeniu obliczeniowym (pliki .cu)
  • dodajemy build rule nvcc *.cu --cubin
  • dodajemy referencję do CUDA.net i dopisujemy kod pośredniczący, który wygląda mniej więcej tak:
int BLOCK_SIZE = 256;
CUDA cuda = new CUDA(0, true);

cuda.LoadModule(Path.Combine(Environment.CurrentDirectory,
    "kernel.cubin"));

CUfunction func = cuda.GetModuleFunction("hslfilter");
cuda.SetParameter(func, 0, (uint)dev_values.Pointer);
cuda.SetParameter(func, (int)IntPtr.Size, ratio);
cuda.SetParameterSize(func, (uint)IntPtr.Size+4);
cuda.SetFunctionBlockShape(func, BLOCK_SIZE, 1, 1);

cuda.Launch(func, (input.Length / 3) / BLOCK_SIZE, 1);

output = new byte[input.Length];
cuda.CopyDeviceToHost(dev_values, output);

cuda.Free(dev_values);

Jak widać, nie jest to dużo bardziej skomplikowane niż użycie CUDA z poziomu C(++), a efekt przyrostu wydajności jest dokładnie ten sam. Pliki .cu są kompilowane do plików .cubin, z których możemy już swobodnie korzystać w dowolnej aplikacji.

A tu linki do całego programu, który wykonuje prostą operację na obrazku (obraca kolory o 36 stopni):

Jak to się robi, czyli BlogEditor XP

20.11.2008 23:25 in blog, programowanie

Ponieważ ostatnio miałem okazję użyć mojego programu w bardzo słusznej sprawie (zaliczenie projektu), to z tej okazji nie omieszkam poświęcić mu notki. Program nazywa się BlogEditor i jak jego nazwa wskazuje, służy do pracy nad blogiem. Cóż, silnikologia jest chorobą bardzo niebezpieczną i człowiek nią dotknięty nie jest w stanie używać żadnego gotowego rozwiązania przez dłużej niż półtora instalacji. Tak czy inaczej, można zerknąć okiem na to i owo. Have fun.

Więcej o BlogEditor...

Napisz komentarz / Komentarze do artykułu

Dzień Politechniki

18.11.2008 22:23 in politechnika, kni

W ostatnią sobotę miałem okazję podczas obchodów Dnia Politechniki zaprezentować razem z Kołem Naukowym Informatyków nasz najnowszy projekt o nazwie Suzie's attack.

Choć jest w bardzo wczesnym etapie, to zapowiada się obiecująco. Generalne założenia projektu są takie: mamy trójwymiarową grę, w którą gramy nie korzystając z żadnych urządzeń typu myszka/klawiatura/pad. Co mamy do dyspozycji? Wszystko, co operuje bezpośrednio ,,na graczu'': akcelerometr, kamerę (taką nagrywającą obraz i śledzącą podczerwień), czujniki nacisku, i tak dalej.

Póki co robimy testy z kontrolerem Wiimote i wygląda to całkiem nieźle. Ponieważ nikt nie uwiecznił działania projektu w postaci filmowej, musicie uwierzyć na słowo, że renderowanie sceny na podstawie pozycji, z której ją oglądamy naprawdę działa. Mam nadzieję, że niedługo w projekcie pojawi się duży update, a póki co - dwa zdjęcia z 15.11.

dp1s.jpg dp2s.jpg

Bardzo podręczne repozytorium

14.11.2008 21:03 in IO, humor

svn.png

Ostatnio miałem okazję być uczestnikiem pewnego konkursu programistycznego. O ile sam konkurs nie był jakiś przesadnie ciekawy, to był bardzo rozwijający pod względem inżynierii oprogramowania.

Przy 3-osobowych zespołach (i 1 komputerze) okazało się na przykład, jak przydatne jest programowanie ekstremalne. Ponieważ zaś dostępna była opcja wydrukowania swojego kodu, powstał (widoczny na rysunku) bardzo ciekawy system wersjonowania kodu, który serdecznie polecam. Zwłaszcza, jeżeli mamy dodatkowy tuzin osób na robienie diffów i merge'ów. :)


CUDA jako wydajna platforma obliczeń równoległych

04.11.2008 21:55 in cuda, nvidia, wykłady

Dzisiaj miałem przyjemność wygłosić wykład na temat użycia platformy CUDA w wydajnych obliczeniach równoległych. Słuchacze zostali zapoznani z ewolucją kart graficznych, która doprowadziła do możliwości przeprowadzania na nich dowolnych obliczeń. Następnie poznali ogólną architekturę platformy CUDA, jak również jej wymagania sprzętowo-programowe. Po krótkim porównaniu możliwości CPU i GPU, możliwości produktu firmy nVidia zostały pokazane w praktyce. Uczestnicy mogli prześledzić jak wygląda pisanie od podstaw prostego programu wykorzystującego równoległe obliczenia na GPU.

Materiały do pobrania (prezentacja i przykładowy program)