Cudowna wielowątkowość w .NET czyli Alea GPU

Dzisiaj chciałbym przedstawić bardzo fajną bibliotekę Alea GPU, dzięki której możemy wykorzystać kartę graficzną do obliczeń wykonywanych przez aplikację napisaną w .NET. Jest tu wykorzystywana technologia CUDA, którą zaprojektowała firma Nvidia. Zacznę jednak od krótkiego wprowadzenia.

GPU (Graphics Processing Unit)
Jest to układ obliczeniowy znajdujący się na karcie graficznej. Tego typu jednostki obliczeniowe powstały w celu odciążenia procesora (CPU) od obliczeń związanych z renderowaniem grafiki. W związku z tym charakteryzują się zupełnie inną architekturą niż CPU. Mamy tu do czynienia z bardzo dużą liczbą małych rdzeni, dzięki czemu wiele zadań może być obsłużone równocześnie.

CUDA (Compute Unified Device Architecture)
Architektura wykorzystująca GPU do przeprowadzania równoległych obliczeń. Zaprojektowana przez firmę Nvidia. Daje nam możliwość pisania programów w językach wysokiego poziomu, które są w stanie przekazać do GPU konkretny zestaw danych i instrukcje dotyczące obliczeń, jakie mają być na nim wykonane.

Opisanie wszystkich możliwości biblioteki Alea GPU zdecydowanie wykracza poza objętość jednego posta. Nie będę skupiać się na konkretnych algorytmach równoległych czy też sposobach optymalizacji za pomocą CUDA. Chciałbym pokazać Wam siłę jaką daje nam ogromna liczba rdzeni. Przeprowadzę bardzo prosty test w trzech różnych konfiguracjach:

  • obliczenia na CPU (jeden wątek)
  • obliczenia równoległe na CPU (4 rdzenie, 8 wątków)
  • obliczenia równoległe na GPU (384 rdzeni CUDA)

Pojedynczy test będzie wykonywał konkretne obliczenia na każdym elemencie z tablicy. Postanowiłem wykonać go dla tablic o różnych rozmiarach aby lepiej zobrazować efekt wykorzystania przetwarzania równoległego na wielu rdzeniach. Poniżej znajdują się wyniki moich testów.

Jak można łatwo zauważyć rozwiązanie wykorzystujące GPU zdecydowanie zdeklasowało swoich konkurentów. Oczywiście nie powinniśmy zakładać, że jest to cudowny lek na każdy problem. Jednakże warto mieć świadomość potencjału drzemiącego w naszych kartach graficznych. Niestety korzystać z dobrodziejstw, jakie daje nam CUDA, mogą tylko posiadacze odpowiednich kart graficznych. To znacznie ogranicza możliwe zastosowania biblioteki Alea GPU. Nie mniej jednak według mnie temat jest bardzo ciekawy i warto się nim zainteresować. Mam nadzieję, że zachęcę tym postem czytelników do przeprowadzenia własnych testów i być może wykorzystania Alea GPU w swoich projektach.

Na koniec przedstawiam kod źródłowy wykorzystany na potrzeby testów.

 

 

5 komentarzy dotyczących “Cudowna wielowątkowość w .NET czyli Alea GPU

  1. Bardzo ciekawe.
    Pisałem inżynierkę w 2011 roku, ale wtedy to było CUDA i C++.
    Mam w domu kartę, która wspiera CUDA, to sobie pogrzebię z ciekawości, aby sprawdzić ten framework.

  2. Bardzo fajny post! Kiedyś bardzo chciałem się zainteresować Alea GPU ale bardzo mocno mnie zniechęciła licencja, która darmowe wykorzystanie ogranicza do pojedynczej karty graficznej a i też komercyjnie chyba nie zastosujemy bez płacenia? Jakieś przemyślenia na ten temat?

    1. Rzeczywiście są to ważne informacje, których niestety zabrakło w moim poście. Z tego co widzę, to jest dostępna darmowa wersja Community. Ma ona ograniczenie na tylko jedną kartę graficzą użytkownika. Dobra informacja jest taka, że możemy z niej korzystać również w przypadku produktów komercyjnych. Jeżeli mamy do czynienia z bardziej zaawansowaną kartą (np. Telsa, Grid, Tegra) lub chcemy skorzystać z kilku kart, musimy wykupić dość kosztowną licencję.

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *