Co to jest CUDA Enroll dzisiaj Wprowadzenie do programowania równoległego Otwarty, internetowy kurs od instruktorów Udacity: Dr. John Owens, UC Davis i Dr. David Luebke, NVIDIA CUDA reg jest platformą obliczeniową równoległą i modelem programowania wymyślonym przez firmę NVIDIA. Umożliwia dramatyczne zwiększenie wydajności obliczeniowej dzięki wykorzystaniu mocy procesora graficznego (GPU). Ponieważ do tej pory sprzedano miliony procesorów graficznych obsługujących CUDA, twórcy oprogramowania, naukowcy i badacze znajdują szerokie zastosowanie w komputerach typu GPU z CUDA. Oto kilka przykładów: Zidentyfikuj ukrytą płytkę w tętnicach. Zawały serca są główną przyczyną śmierci na całym świecie. Harvard Engineering, Harvard Medical School i Brigham Womens Hospital połączyły siły, aby wykorzystać procesory graficzne do symulacji przepływu krwi i identyfikacji ukrytej płytki tętniczej bez inwazyjnych technik obrazowania lub operacji eksploracyjnej. Analizuj przepływ ruchu lotniczego. Krajowy system przestrzeni powietrznej zarządza ogólnokrajową koordynacją przepływu ruchu lotniczego. Modele komputerowe pomagają znaleźć nowe sposoby na zmniejszenie zatłoczenia i sprawne poruszanie się samolotu. Wykorzystując moc obliczeniową układów GPU, zespół NASA uzyskał duży wzrost wydajności, skracając czas analizy z dziesięciu minut do trzech sekund. Wizualizuj cząsteczki. Symulacja molekularna o nazwie NAMD (nanoskalowa dynamika molekularna) zapewnia duży wzrost wydajności dzięki procesorom graficznym. Przyspieszenie jest wynikiem równoległej architektury procesorów graficznych, która umożliwia programistom NAMD przenoszenie intensywnych obliczeniowo części aplikacji na GPU przy użyciu zestawu narzędzi CUDA Toolkit. Tło obliczeń GPU: rewolucja Masz do czynienia z imperatywami: popraw wydajność. Szybciej rozwiązuj problem. Równoległe przetwarzanie byłoby szybsze, ale krzywa uczenia się jest stroma, nie jest już. Dzięki CUDA możesz wysyłać kody C, C i Fortran bezpośrednio do procesora graficznego, bez konieczności używania języka asemblerowego. Programiści takich firm jak Adobe, ANSYS, Autodesk, MathWorks i Wolfram Research budzą tego śpiącego giganta, GPU, aby wykonywać ogólne i naukowe obliczenia naukowe i inżynierskie na wielu platformach. Korzystając z wysokopoziomowych języków, aplikacje akcelerowane przez GPU uruchamiają sekwencyjną część swojego obciążenia na procesorze, który jest zoptymalizowany pod kątem wydajności jednowątkowej przy jednoczesnym przyspieszeniu przetwarzania równoległego na GPU. Nazywa się to przetwarzaniem GPU. Obliczenia GPU są możliwe, ponieważ dzisiejszy GPU robi o wiele więcej niż renderowanie grafiki: Skwierczy z teraflopem wydajności zmiennoprzecinkowej i wykonuje zadania aplikacji przeznaczone do wszystkiego, od finansów po medycynę. CUDA jest szeroko wdrażana dzięki tysiącom aplikacji i opublikowanym materiałom badawczym oraz wspieranym przez zainstalowaną bazę ponad 375 milionów układów GPU z obsługą CUDA w notebookach, stacjach roboczych, klastrach obliczeniowych i superkomputerach. Odwiedź Strefę CUDA, gdzie znajdziesz przykłady aplikacji na różnych rynkach wertykalnych i przebudź swojego giganta GPU. Historia obliczeń GPU Pierwsze GPU zostały zaprojektowane jako akceleratory graficzne, obsługujące tylko określone rurociągi o ustalonej funkcji. Począwszy od końca lat 90., sprzęt stał się coraz bardziej programowalny, zakończony pierwszym procesorem graficznym NVIDIA w 1999 roku. Mniej niż rok po tym, jak firma NVIDIA wymyśliła termin GPU, artyści i twórcy gier nie byli jedynymi, którzy zajmowali się przełomową technologią: badacze wykorzystując doskonałą wydajność zmiennoprzecinkową. Rozpoczął się ruch GPU (GPGPU) ogólnego przeznaczenia. Ale GPGPU nie było wtedy łatwe, nawet dla tych, którzy znają języki programowania graficznego, takie jak OpenGL. Programiści musieli mapować obliczenia naukowe na problemy, które mogą być reprezentowane przez trójkąty i wielokąty. GPGPU było praktycznie niedostępne dla tych, którzy nie zapamiętali najnowszych interfejsów graficznych API, dopóki grupa naukowców ze Stanford University nie zdecydowała się na ponowne wyobrazić GPU jako procesora strumieniowego. W 2003 r. Zespół naukowców pod kierownictwem Iana Bucka zaprezentował Brook, pierwszy szeroko stosowany model programowania rozszerzający C o konstrukcje równoległe do danych. Korzystając z pojęć, takich jak strumienie, jądra i operatory redukcji, kompilator i system wykonawczy Brook ujawniły GPU jako procesor ogólnego przeznaczenia w języku wysokiego poziomu. Co ważniejsze, programy Brook były nie tylko łatwiejsze do napisania niż ręcznie dostrojony kod GPU, były siedmiokrotnie szybsze niż podobny istniejący kod. Firma NVIDIA wiedziała, że niesamowicie szybki sprzęt musi być połączony z intuicyjnym oprogramowaniem i narzędziami sprzętowymi, i zaprosił Iana Bucka do przyłączenia się do firmy i rozpoczęcia prac nad rozwiązaniem, które pozwoli płynnie uruchomić C na GPU. Łącząc oprogramowanie i sprzęt, NVIDIA zaprezentowała CUDA w 2006 roku, pierwsze na świecie rozwiązanie do ogólnych obliczeń na GPU. Narzędzia i szkolenia Dzisiaj ekosystem CUDA rozwija się dynamicznie, ponieważ coraz więcej firm dostarcza światowej klasy narzędzia, usługi i rozwiązania. Jeśli chcesz napisać własny kod, najprostszym sposobem na wykorzystanie wydajności procesorów graficznych jest pakiet narzędziowy CUDA. który zapewnia kompleksowe środowisko programistyczne dla programistów C i C. Zestaw narzędzi CUDA zawiera kompilator, biblioteki matematyczne i narzędzia do debugowania i optymalizacji wydajności twoich aplikacji. Znajdziesz tu również próbki kodu, przewodniki programowania, podręczniki użytkownika, odniesienia do API i inne dokumenty, które pomogą Ci rozpocząć. NVIDIA zapewnia to wszystko bezpłatnie, w tym NVIDIA Parallel Nsight dla Visual Studio, pierwszego w branży środowiska programistycznego dla masowo równoległych aplikacji korzystających zarówno z procesorów graficznych, jak i procesorów. Nauka korzystania z CUDA jest wygodna, dostępne są wszechstronne szkolenia online, a także inne zasoby, takie jak seminaria internetowe i książki. Ponad 400 uniwersytetów i szkół wyższych uczy programowania CUDA, w tym dziesiątki Centrów Doskonałości CUDA i Ośrodków Badawczo-Szkoleniowych CUDA. Dla programistów nie jest programistą o żadnych umiejętnościach. Po prostu ktoś ciekawy CUDA, więc robię małe czytanie. Przeszedłem przez przykład użycia narzędzia Thrust do wykonania średniej ruchomej: Przykład taki, jaki jest, działa i działa prawidłowo. Jest to jednak trywialne w tym sensie, że wykonuje tylko jedną operację średniej ruchomej. Jak mogłem powiedzieć, 352 z tych średniej ruchomej operacji równolegle, wszystkie działające na tym samym strumieniu danych Moim zdaniem przepływem programu może być: Wygeneruj wzmacniacz danych, wyślij go do jednego rdzenia CUDA. (Tak jak w przypadku istniejącego kodu, ale myślę, że długość wynosi 1000 lub 10000 zamiast 30). Skopiuj go z rdzenia CUDA do wszystkich pozostałych 351 rdzeni CUDA w moim GTX 465. Powiedz każdemu rdzeniu CUDA, na jaką liczbę elementów danych ma być średnia. (4. 5. 6. 352. 353. 354) Powiedz urządzeniu, aby uruchamiało średnią w każdym rdzeniu równolegle Odczytaj wyniki z każdego rdzenia, które dostaję, że ten kod sprawia, że wszystko się dzieje, ale w jaki sposób ustawić funkcję Thrust wiele z nich równolegle Moje zainteresowanie tutaj dotyczy czegoś w rodzaju danych giełdowych. Jeśli zastanawiam się nad cenami GOOG, zaznaczę to na GPU używając wszystkich rdzeni i zostawię je tam. Teraz będę mógł wykonywać dużo przetwarzania bez ładowania danych i po prostu odczytywanie wyników z każdego rdzenia. UWAGA: Może nie chcę używać GOOG we wszystkich rdzeniach. Niektóre rdzenie mogą być GOOG, inne z innym symbolem, ale Ill się tam później. Po prostu myślę, że nie chcę danych o stanie w pamięci globalnej, jeśli jest wystarczająco dużo miejsca w każdym rdzeniu. Zakładam, że jest to bardzo proste dla CUDA amp Thrust Zapytany 12 września 12 o 19:39 Rozumiem, że jesteś zainteresowany następującymi dwiema sytuacjami: Masz długą sekwencję pozycji i chcesz obliczyć określoną liczbę średnich, przez uśrednianie dla różnych liczb elementów, tj. stosowanie różnych długości dla okna średniej ruchomej. Oto, co rozumiem z twojego pierwotnego pytania. Masz serię sekwencji zapisanych kolejno w pamięci i chcesz je uśrednić równolegle ze stałym okienkiem uśredniania o rozmiarze 2 RADIUS 1. Tak właśnie kod ArrayFire zaproponował asm - zaakceptowałeś go. Zamiast używać CUDA Thrust, myślę, że łatwiej byłoby napisać własne jądro CUDA, aby wykonać powyższe operacje. Poniżej, w pełni działający przykład, który działa w taki sam sposób, jak kod ArrayFire zaproponowany przez ASM, w ten sposób obejmujący przypadek 2. Modyfikowanie go w celu objęcia sprawy 1 byłoby proste. Odpowiedź 15 listopada 14 o 15:42 Twoja wymiana stosów w 2017 r. W przypadku innego podejścia można obciąć okno wykładniczej średniej ruchomej, a następnie obliczyć przefiltrowany sygnał, wykonując splot między sygnałem a wyskakującym wykładnikiem. Splot można obliczyć przy użyciu bezpłatnej biblioteki CUDA FFT (cuFFT), ponieważ, jak wiadomo, splot można wyrazić jako punktowe mnożenie dwóch sygnałów w domenie Fouriera (jest to trafne twierdzenie o sprzeciwie, który działa ze złożonością O (n log (n))). Tego typu podejście zminimalizuje kod jądra CUDA i działa bardzo szybko, nawet na GeForce 570 Szczególnie, jeśli możesz wykonać wszystkie swoje obliczenia w pojedynczej precyzji (zmiennoprzecinkowej). odpowiedziała 30 kwietnia 14 o 17:04 zaproponowałbym manipulację powyższym równaniem różnicy, jak wskazano poniżej, a następnie użycie prymitywów CUDA Thrust. MANIPULACJA RÓWNOLEGŁOŚCI RÓŻNICOWYCH - WYJAŚNIAJĄCA FORMA RÓWNEGO RÓWNOWARTOŚCI Za pomocą prostej algebry można znaleźć następujące: W związku z tym wyraźna forma jest następująca: CUDA THRUST IMPLEMENTATION Możesz zaimplementować powyższy jawny formularz, wykonując następujące kroki: Inicjalizuj przerwanie sekwencji wejściowej do alfa z wyjątkiem dinput0 1. Zdefiniuj wektor d1overbetatothen równy 1, 1beta, 1beta2, 1beta3. Pomnóżmy dinozaury elementarne przez d1overbetatothen Wykonaj inclusivescan, aby otrzymać sekwencję yn betan Podziel powyższą sekwencję na 1, 1beta, 1beta2, 1beta3. Powyższe podejście może być zalecane w systemach Liniowego Zmiennego Czasu (LTV). W przypadku liniowych systemów pomiaru czasu (LTI) można zalecić podejście FFT wymienione przez Paula. Podam przykład tego podejścia, używając CUDA Thrust i cuffT w mojej odpowiedzi na filtr FIR w CUDA.
Comments
Post a Comment