Programowanie Współbieżne

Podobne dokumenty
CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (

Programowanie kart graficznych

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Procesory kart graficznych i CUDA wer

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Programowanie kart graficznych

CUDA. cudniejsze przyk ady

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Programowanie aplikacji równoległych i rozproszonych

Procesory kart graficznych i CUDA wer PR

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

Programowanie procesorów graficznych w CUDA.

Procesory kart graficznych i CUDA

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

GTX260 i CUDA wer

Przetwarzanie Równoległe i Rozproszone

Programowanie CUDA informacje praktycznie i. Wersja

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej

Tesla. Architektura Fermi

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

Programowanie GPU jako procesora ogólnego przeznaczenia.

CUDA. obliczenia na kartach graficznych. Łukasz Ligowski. 11 luty Łukasz Ligowski () CUDA 11 luty / 36

Obliczenia na GPU w technologii CUDA

Programowanie kart graficznych. Architektura i API część 1

Programowanie CUDA informacje praktycznie i przykłady. Wersja

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie procesorów graficznych GPGPU

CUDA ćwiczenia praktyczne

Programowanie procesorów graficznych GPGPU

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

Procesory kart graficznych i CUDA wer

i3: internet - infrastruktury - innowacje

Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

CUDA jako platforma GPGPU w obliczeniach naukowych

Programowanie kart graficznych. Architektura i API część 2

Programowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak

Programowanie współbieżne Wprowadzenie do programowania GPU. Rafał Skinderowicz

Programowanie Rozproszone i Równoległe

CUDA PROGRAMOWANIE PIERWSZE PROSTE PRZYKŁADY RÓWNOLEGŁE. Michał Bieńkowski Katarzyna Lewenda

Instruction Set Instruction Set Extensions Embedded Options Available. Recommended Customer Price TRAY: $999.00

Klasyfikacja systemów komputerowych. Architektura von Neumanna Architektura harwardzka Zmodyfikowana architektura harwardzka. dr inż.

dr inż. Jarosław Forenc

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Dodatek A. CUDA. 1 Stosowany jest w tym kontekście skrót GPCPU (od ang. general-purpose computing on graphics processing units).

Organizacja pamięci w procesorach graficznych

Akceleracja obliczeń algebry liniowej z wykorzystaniem masywnie równoległych, wielordzeniowych procesorów GPU Świerczewski Ł.

Programowanie kart graficznych. Kompilator NVCC Podstawy programowania na poziomie API sterownika

4 NVIDIA CUDA jako znakomita platforma do zrównoleglenia obliczeń

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Hybrydowy system obliczeniowy z akceleratorami GPU

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

ZARZĄDZANIE PAMIĘCIĄ W TECHNOLOGII CUDA

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera

Jacek Matulewski - Fizyk zajmujący się na co dzień optyką kwantową i układami nieuporządkowanymi na Wydziale Fizyki, Astronomii i Informatyki

Przetwarzanie Równoległe i Rozproszone

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Programowanie równoległe Wprowadzenie do OpenCL. Rafał Skinderowicz

Obliczenia Wysokiej Wydajności

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

Laboratorium Programowania Kart Elektronicznych

Moc płynąca z kart graficznych

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

Laboratorium Programowania Kart Elektronicznych

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Java. Programowanie Obiektowe Mateusz Cicheński

1 Atrybuty i metody klasowe

Komputery przemysłowe i systemy wbudowane

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Programowanie niskopoziomowe

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Programowanie wielowątkowe. Jarosław Kuchta

Model pamięci. Rafał Skinderowicz

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Programowanie kart graficznych. Sprzęt i obliczenia

Architektura von Neumanna

Praca dyplomowa magisterska

Metody Metody, parametry, zwracanie wartości

Wstęp do programowania

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak,

Programowanie równoległe Wprowadzenie do programowania GPU. Rafał Skinderowicz

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Programowanie komputerów

Programowanie Równoległe wykład 13. Symulacje komputerowe cieczy LBM w CUDA. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie współbieżne i rozproszone

Klasyfikacja systemów komputerowych. Architektura von Neumanna. dr inż. Jarosław Forenc

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Transkrypt:

Programowanie Współbieżne Agnieszka Łupińska 5 października 2016

Hello World! helloworld.cu: #include <cstdio> global void helloworld(){ int thid = (blockidx.x * blockdim.x) + threadidx.x; printf("hello World! thread #%d\n", thid); } int main(){ int NUM_BLOCKS = 4; int NUM_THREADS = 5; helloworld<<<num_blocks, NUM_THREADS>>>(); cudadevicesynchronize(); return 0; } aga@ubuntu$ nvcc -arch=sm 20 helloworld.cu

Hello World! - Output Hello World! thread #5 Hello World! thread #6 Hello World! thread #7 Hello World! thread #8 Hello World! thread #9 Hello World! thread #0 Hello World! thread #1 Hello World! thread #2 Hello World! thread #3 Hello World! thread #4 Hello World! thread #15 Hello World! thread #16 Hello World! thread #17 Hello World! thread #18 Hello World! thread #19 Hello World! thread #10 Hello World! thread #11 Hello World! thread #12 Hello World! thread #13 Hello World! thread #14

Model programowania CUDA Host - działa na CPU - wątek główny programu - obsługuje Device Device - działa na GPU - jest koprocesorem Hosta - fizycznie oddzielony od Hosta - obsługuje CUDA wątki - wykonuje funkcje zwane kernelami Host i Device mają odzielną, niezależną pamięć.

Deklaracja CUDA funkcji device int DeviceFunc() - wykonywana na Device, wywoływana z Device (przez CUDA wątki) global void KernelFunc() - wykonywana na Device, wywoływana z Hosta, zawsze jest void host int HostFunc() - wykonywana na Hoscie, wywoływana z Hosta, można pominąć host, chyba, że jest używana razem z device

Zmienne wbudowane griddim.x griddim.y griddim.z blockdim.x blockdim.y blockdim.z blockidx.x blockidx.y blockidx.z threadidx.x threadidx.y threadidx.z int thid = (blockidx.x * blockdim.x) + threadidx.x;

Zarządzanie pamięcią Host - tak jak w C/C++ Device: local memory - każdy wątek ma swoją własną prywatną pamięć, niewidoczną dla pozostałych wątków shared memory - pamięć współdzielona przez wszystkie wątki w bloku, nietrwała - czas życia taki jak bloku global memory - pamięć globalna, współdzielona przez wszystkie wątki działające w programie, trwała. cache - pamięć podręczna, dwa poziomy: L1 - jeden dla każdego multiprocesora, L2 - współdzielony między wszystkie multiprocesory. Keszują dostęp do pamięci lokalnej i globalnej. Cache i shared memory używają pamięci on-chip, więc dostęp tam jest bardzo szybki. Local memory jest pamięcią off-chip i dostęp kosztuje tyle samo co dostęp do pamięci globalnej.

Synchronizacja Wątki wewnątrz bloku można synchronizować za pomocą funkcji: syncthreads() Nie powinno się synchronizować wątków w obrębie gridu, ale można to zrobić za pomocą zmiennych globalnych. Poza tym kod, który wymaga synchronizacji wszystkich wątków w gridzie można podzielić w miejscu synchronizacji na dwa osobne kernele i wykonać najpierw jeden, potem drugi.

Compute Capability Compute Capability karty graficznej jest zadany przez dwie liczby: znaczący i mniej znaczący numer wersji. Urządzenia o tym samym znaczącym numerze mają tą samą architekturę rdzeni. Na przykład, cc dla kart z architekturą Fermi to 2.x (znaczący wynosi 2). Karty z architekturą Maxwell mają cc 5.x. cc sprzętu na Satori: 2.x. cc sprzętu na Miracle: 5.x. Jak sprawdzić architekturę sprzętu? Najlepiej skorzystać z SDK Nvidii i uruchomić devicequery:./nvidia GPU Computing SDK/C/bin/linux/release/deviceQuery Przykłady z SDK /usr/local/cuda/samples/

devicequery Device 0: GeForce GTX 560 Ti CUDA Driver Version / Runtime Version 5.0 / 4.2 CUDA Capability Major/Minor version number 2.1 Total amount of global memory: 1023 MBytes (1072889856 ( 8) Multiprocessors x ( 48) CUDA Cores/MP: 384 CUDA Cores GPU Clock rate: 1800 MHz (1.80 GHz) Memory Clock rate: 2004 Mhz Memory Bus Width: 256-bit L2 Cache Size: 524288 bytes Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,6 Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=( Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 32768 Warp size: 32 Maximum number of threads per multiprocessor: 1536 Maximum number of threads per block: 1024 Maximum sizes of each dimension of a block: 1024 x 1024 x 64 Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535

Maximum memory pitch: Texture alignment: Concurrent copy and execution: Run time limit on kernels: Integrated GPU sharing Host Memory: Support host page-locked memory mapping: Concurrent kernel execution: Alignment requirement for Surfaces: 2147483647 bytes 512 bytes Yes with 1 copy engine(s) Yes No Yes Yes Yes

Specyfikacja według Compute Capability

Specyfikacja według Compute Capability

Interfejsy programowania w CUDA CUDA Driver API - niskopoziomowe CUDA Runtime - zaimplementowane powyżej CUDA Driver API