CUDA. obliczenia na kartach graficznych. Łukasz Ligowski. 11 luty Łukasz Ligowski () CUDA 11 luty / 36
|
|
- Jakub Osiński
- 7 lat temu
- Przeglądów:
Transkrypt
1 CUDA obliczenia na kartach graficznych Łukasz Ligowski 11 luty 2008 Łukasz Ligowski () CUDA 11 luty / 36
2 Plan 1 Ogólne wrażenia 2 Obliczenia na kartach - wstęp 3 Wprowadzenie 4 CUDA Łukasz Ligowski () CUDA 11 luty / 36
3 GPU - CPU transfer przez PCIe 4+4 GBps (z chipsetem NVIDII 5+5), karta może jedynie ściągać lub wysyłać dane. W miarę łatwo daje się osiągnać transfer ponad 4GBps. Na nowszych kartach (compute capability 1.1) można liczyć i jednocześnie robić transfer pamięci, niestety NVIDIA Tesla na razie są compute capability 1.0. podział zadań, chcielibyśmy aby jak najwięcej wydelegować na GPU. problemy: zadanie nie mieści się w pamięci karty nie da sie wystarczająco szybko wyciągać wyników z karty lub ich wysyłać (dla compute capability 1.1 jest to mniejszy problem), załadowanie Tesli do pełna to około sekundy kiedy karta nic nie liczy... efektywny transfer do GPU wymaga wysyłania danych w większych paczkach (MB), nie zawsze da się to zrobić Łukasz Ligowski () CUDA 11 luty / 36
4 Pamięć karty memory wall, nadal jest mało: max 1.5 GB (Tesla) lub 756MB/1GB (zwykłe karty), (zwłaszcza jeśli przyszłe karty mają używać double) wektory pomocnicze, obliczenia na karcie są prawie wektorowe, i ze względu na to ze czasami chcielibyśmy skorzystać z tego podejścia i tworzyć wektory pomocnicze żeby uzyskać wysoką wydajność ale dla dużych rozmiarów danych może być to problematyczne czytanie/pisanie odbywa sie po tej samej magistrali czyli GBps przepustowości do pamięci które jest dostępne powinno się podzielić minimum przez dwa jeśli mamy operację np. A[i] = B[i] + 1 Jeśli wątki nie czytają spójnego kawałka pamięci wydajność czytania istotnie spada Łukasz Ligowski () CUDA 11 luty / 36
5 Pomiar wydajności gflopy vs GBps ilość Gflopów/s nic nie mówi o wydajności (nie znamy narzutów i pracy niezbędnej do wykonania zadania), pomiar ilości przetworzonych danych jest o wiele lepszą metryką o wiele łatwiej być ograniczonym przez transfer na karcie niż przez jej możliwości obliczeniowe (z poprzedniego seminarium:) operacji atomowych/sekunda, = 24 Mbps, dla porównania można łatwo osiągnąć 60GBps Łukasz Ligowski () CUDA 11 luty / 36
6 GPU z punktu widzenia użytkownika prawie wektoryzacja, większa swoboda w stosowaniu instrukcji warunkowych wewnątrz pętli i nie tylko próba implementacji czegokolwiek bardziej skomplikowanego powoduje że szybko pojawiają sie ograniczenia rejestry/blok multiprocesor posiada 8192 rejestry i może wykonywać 756 wątków czyli jeśli chcemy w pełni wykorzystać kartę mamy około 10 rejestrów na wątek, kompilator słabo optymalizuje wykorzystanie rejestrów, słabo obsługuje opcję maxregisters, można robić sztuczki w celu obniżenia ilości rejestrów, (jeśli dzięki temu uda się upchnąć więcej bloków poprawiamy transfer do pamięci) shared memory jw. 32 kilobajty na multiprocesor czyli 8192 int y, trochę lepiej niż rejestry Łukasz Ligowski () CUDA 11 luty / 36
7 GPU ciąg dalszy Jeśli chce się osiągnąć większą wydajność niż szybkość magistrali trzeba używać cache u. Dlaczego? Karta ma 300Gflop/s czyli trzeba przeczytać co najmniej = 2400Gbps bajtów pamięci, a wydajność magistrali to Gbps zlecenie wykonania kernela obliczeniowego na karcie ma niewielki narzut Łukasz Ligowski () CUDA 11 luty / 36
8 Klastrowanie kart farming (dużo kart/komputerów robiących to samo z minimalną komunikacją) potencjalnie niska skalowalność dla zadań z intensywną komunikacją pomiędzy kartami: GPU - synchronizacja + narzuty na uruchamianie kerneli - CPU - LAN - CPU - GPU zadania typu embarssingly parallel są OK mapreduce jest OK(?) Łukasz Ligowski () CUDA 11 luty / 36
9 Moc GPU Rysunek: Źródło: NVIDIA CUDA Programming Guide Łukasz Ligowski () CUDA 11 luty / 36
10 NVIDIA CUDA Compute Unified Device Architecture Środowisko programistyczne udostępnione przez firmę NVIDIA które umożliwia dostęp do procesorów karty graficznej. Główne cechy: Różne warstwy abstrakcji do wyboru Programy można pisać w nieco rozszerzonym C wykorzystując dwie biblioteki realizujące dostęp do sprzętu i/lub można wykorzystać assembler PTX. Dostępność Dostępna dla kart z serii 8xxx i nowszych, Windows/Linux, gwarantowana kompatybilność z następnymi generacjami kart. Łukasz Ligowski () CUDA 11 luty / 36
11 ATI CTM Close to Metal Biblioteka umożliwiająca wykorzystanie kart ATI/AMD do celów obliczeniowych. Ze względu na to, że nie używamy żadnych kart ATI, Close to Metal nie będzie omawiana. ;) Łukasz Ligowski () CUDA 11 luty / 36
12 Skąd się biorą Gigaflopy? Rysunek: Źródło: NVIDIA CUDA Programming Guide Karty osiągają większą wydajność ponieważ rezygnują z cache a i skomplikowanej kontroli wykonania na rzecz dużej ilości prostych elementów obliczeniowych. Łukasz Ligowski () CUDA 11 luty / 36
13 Karta z serii 8xxx Jak wygląda sprzęt Łukasz Ligowski Rysunek: () Źródło: NVIDIACUDA Programming Guide11 luty / 36
14 Karta z serii 8xxx Z punktu widzenia programisty Rysunek: Źródło: NVIDIA CUDA Programming Guide Łukasz Ligowski () CUDA 11 luty / 36
15 Karta z serii 8xxx Model podziału na elementy wykonawcze... Rysunek: Źródło: NVIDIA CUDA Programming Guide Łukasz Ligowski () CUDA 11 luty / 36
16 Ogranizacja CUDY Od tej pory zajmujemy się NVIDIA CUDA Rysunek: Źródło: NVIDIA CUDA Programming Guide Łukasz Ligowski () CUDA 11 luty / 36
17 Uwagi ogólne #include <cuda_runtime_api.h> nvcc --host-compilation c -lcudart *.c Nazwy funkcji cudy zaczynaja sie od cuda Podzial na kod i dane znajdujace sie na CPU i GPU. Wiekszosc funkcji cudy zwraca cudasuccess jesli wykonaja sie poprawnie Koniecznosc synchronizacji pomiedzy karta a procesorem Łukasz Ligowski () CUDA 11 luty / 36
18 Inicjalizacja karty Wybor karty Przed rozpoczeciem obliczen nalezy wybrac karte (jesli jest wiecej niz jedna) Warto sprawdzic czy zamiast karty nie liczymy na CUDA CPU Emulation. cudasetdevice() cudagetdevicecount() cudagetdeviceproperties() Łukasz Ligowski () CUDA 11 luty / 36
19 Zarzadzanie pamiecia karty Arytmetyka wskaznikowa Alokacja Pamiec na karcie mozna alokowac jedynie z CPU - alokujemy cala pamiec karty przed rozpoczeciem obliczen (wykonania kernela) a potem obliczamy odpowiednie adresy. Wskazniki Przestrzen adresow jest ciagla. Komunikacja CPU - GPU Osobne funkcje do transferu danych. Obliczenia i transfery nalezy zsynchronizowac (compute capability 1.1) cudamalloc() cudafree() cudamallochost() cudafreehost() cudamemcpy() cudamemcpyasync() Łukasz Ligowski () CUDA 11 luty / 36
20 Uruchamianie zadań na karcie - kernele Co to jest kernel? Kernel to funkcja poprzedzona kwalifikatorem global global void funkcja(uint1* in, uint1* out, int size){ int i = blockidx.x * blockdim.x + threadidx.x, int step = griddim.x*blockdim.x; int j; }; for (; i < size; i += step){ out[i] = 2 * in[i]; }; Łukasz Ligowski () CUDA 11 luty / 36
21 Kernele c.d. Wywolanie na CPU cudamalloc( (void**)&d_word_address, 2 * size * sizeof(int)); uint1* in = (uint1*)(d_word_address); uint1* out = (uint1*)(d_word_address + size); cudamemcpy( (void*)in, tablica, rozmiar * sizeof(int), cudamemcpyhosttodevice); dim3 grid( 16 ); dim3 block( 256 ); funkcja<<< grid, block >>>(in, out, size); cudamemcpy(tablica, (void*)out, rozmiar * sizeof(int), cudamemcpydevicetohost); cudathreadsynchronize(); cudafree(d_word_address); Łukasz Ligowski () CUDA 11 luty / 36
22 Kernele na GPU Przetwarzanie Hierarchia grid > blok > warp > halfwarp > wątek grid wszystkie wątki uruchamiane przez pojedynczy kernel block grupa wątków uruchamianych na jednym multiprocesorze (multiprocesor może mieć więcej niż jeden blok na raz), najlepiej jeśli łącznie jest więcej niż 192 i w liczba jest podzielna przez 64 warp/halfwarp podstawowa jednostka wykonania 32/16 wątków Łukasz Ligowski () CUDA 11 luty / 36
23 Kernele na GPU Własności block dobrze mieć co najmniej 2 razy więcej niż może wykonywać się na multiprocesorze, więcej może być lepiej ale niekoniecznie warp instrukcja if musi być ewaluowana w każdym warpie do tej samej galezi, w innym przypadku czekamy aż wątki wykonujące drugą gałąź skończą Wstępna kontrola wydajności Cuda Occupancy Calculator Łukasz Ligowski () CUDA 11 luty / 36
24 Instrukcje dodawanie odejmowanie, shift, operacje logiczne, mnożenie o gorszej precyzji (24 bit), konwersja typu, 4 cykle, 16 cykli odwrotność, mnożenie, dzielenie, wyciąganie pierwiastka, dzielenie całkowite i dzielenie modulo są bardzo drogie większość zmiennych short i char i tak zwykle jest konwertowana na int Łukasz Ligowski () CUDA 11 luty / 36
25 Pamieć Hierarchia global Główna pamięć karty, latencja czytania/pisania rzędu kilkuset cykli procesora, przepustowość 80 Gbps najlepsze karty 100Gbps texture to global memory ale: z niewielkim cache, read only, lepiej ukrywa obliczenia związane z adresowaniem, wsparcie dla graficznych metod indeksowania shared on-chip, mało, jeśli nie występują konflikty pomiędzy watkami szybkość na poziomie rejestrów rejestry w przeliczeniu na watek jest ich mało (kilkanascie) Łukasz Ligowski () CUDA 11 luty / 36
26 Pamięć cd constant constant mały kawałek cache owanej pamięci global memory, szybkość dostępu jak do rejestrów lub jak do global memory jeśli cache nie trafi, zmienna; przed użyciem trzeba wykonać cudamemcpytosymbol global device, czytanie i zapis powinny odbywać sie w ciągły sposób tzn. pojedynczy watek czyta co n-ta wartość, shared shared zorganizowana w n-banków, konflikty nie występują kiedy każdy watek z warpu korzysta z innego banku operacja broadcast - wszystkie watki mogą czytać z jednego banku dostępnych jest 16 banków Łukasz Ligowski () CUDA 11 luty / 36
27 Pamięć Łukasz Ligowski () CUDA 11 luty / 36
28 Pamięć Łukasz Ligowski () CUDA 11 luty / 36
29 Profiling Zalety ;) Pozwala sprawdzić czy w poprawny sposób korzystamy z pamięci global/shared oraz czy watki serializują instrukcje warunkowe czy je wykonują jednocześnie. Łukasz Ligowski () CUDA 11 luty / 36
30 Debugging Brak Jest coś na emulatorze? CUDA SAFE CALL() Łukasz Ligowski () CUDA 11 luty / 36
31 Technikalia - nvidia 8800 gtx 16 multiprocesorów max watków na blok 512 rejestry na multiprocesor 8192 constant memory 64Kb cache constant i texture memory po 8Kb/multiprocessor max: 8 blocks, 24 warps, 756 watków/multiprocessor Łukasz Ligowski () CUDA 11 luty / 36
Programowanie kart graficznych
CUDA Compute Unified Device Architecture Programowanie kart graficznych mgr inż. Kamil Szostek AGH, WGGIOŚ, KGIS Wykorzystano materiały z kursu Programowanie kart graficznych prostsze niż myślisz M. Makowski
Bardziej szczegółowoProgramowanie Współbieżne
Programowanie Współbieżne Agnieszka Łupińska 5 października 2016 Hello World! helloworld.cu: #include global void helloworld(){ int thid = (blockidx.x * blockdim.x) + threadidx.x; printf("hello
Bardziej szczegółowoProgramowanie aplikacji równoległych i rozproszonych
Programowanie aplikacji równoległych i rozproszonych Dr inż. Krzysztof Rojek krojek@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Strumienie operacji na GPU Domyślne
Bardziej szczegółowoProgramowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1
Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Wprowadzenie Procesory graficzne GPU (Graphics Processing Units) stosowane są w kartach graficznych do przetwarzania grafiki komputerowej
Bardziej szczegółowoWprowadzenie do programowania w środowisku CUDA. Środowisko CUDA
Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń
Bardziej szczegółowoProgramowanie procesorów graficznych w CUDA.
Programowanie procesorów graficznych w CUDA. Kompilujemy program Alokacja zasobów gpgpu oraz załadowanie modułu CUDA odbywa się za pomocą komend: qsub -q gpgpu -I -l walltime=2:00:00,nodes=1:ppn=1:gpus=1
Bardziej szczegółowoPorównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego Mariusz Uchroński 3 grudnia 2010 Plan prezentacji 1. Wprowadzenie 2.
Bardziej szczegółowoJCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski
JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski Agenda GPU Dlaczego warto używać GPU Budowa GPU CUDA JCuda Przykładowa implementacja Co to jest? GPU GPU Graphical GPU Graphical Processing GPU
Bardziej szczegółowoProgramowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład 12 OpenGL + algorytm n ciał Maciej Matyka Instytut Fizyki Teoretycznej CUDA z OpenGL 1. Dane dla kerneli znajdują się na karcie GFX. 2. Chcemy liczyć i rysować używając
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 GPGPU Historia: lata 80 te popularyzacja systemów i programów z graficznym interfejsem specjalistyczne układy do przetwarzania grafiki 2D lata 90 te standaryzacja
Bardziej szczegółowoCUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.
CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.com) 1 Architektura karty graficznej W porównaniu z tradycyjnym
Bardziej szczegółowoWysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych
Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych Ł. Kuczyński, M. Woźniak, R. Wyrzykowski Instytut Informatyki Teoretycznej i Stosowanej
Bardziej szczegółowoCUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu
CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki
Bardziej szczegółowoObliczenia na GPU w technologii CUDA
Obliczenia na GPU w technologii CUDA 1 Różnica szybkości obliczeń (GFLOP/s) pomiędzy CPU a GPU źródło NVIDIA 2 Różnica w przepustowości pamięci pomiędzy CPU a GPU źródło NVIDIA 3 Różnice architektoniczne
Bardziej szczegółowoProgramowanie CUDA informacje praktycznie i. Wersja
Programowanie CUDA informacje praktycznie i przykłady Wersja 16.12.2013 Podstawowe operacje na GPU cudasetdevice() Określenie GPU i ustanowienie kontekstu (analog w GPU tego czym jest proces dla CPU) dla
Bardziej szczegółowoi3: internet - infrastruktury - innowacje
i3: internet - infrastruktury - innowacje Wykorzystanie procesorów graficznych do akceleracji obliczeń w modelu geofizycznym EULAG Roman Wyrzykowski Krzysztof Rojek Łukasz Szustak [roman, krojek, lszustak]@icis.pcz.pl
Bardziej szczegółowoProgramowanie kart graficznych
Programowanie kart graficznych Sławomir Wernikowski swernikowski@wi.zut.edu.pl Wykład #1: Łagodne wprowadzenie do programowania w technologii NVIDIA CUDA Terminologia: Co to jest GPGPU? General-Purpose
Bardziej szczegółowoCUDA. cudniejsze przyk ady
CUDA cudniejsze przyk ady Agenda: CPU vs. GPU Mnożenie macierzy CPU Mnożenie macierzy - GPU Sploty Macierze CPU vs. GPU CPU: GPU: Mnożenie wykonywane w kolejnych iteracjach pętli. Przechodzimy przez pierwszy
Bardziej szczegółowoProgramowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe Wykład, 07.01.2014 CUDA praktycznie 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce Wykład 2: Cuda +
Bardziej szczegółowoPrzetwarzanie Równoległe i Rozproszone
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl
Bardziej szczegółowoTesla. Architektura Fermi
Tesla Architektura Fermi Tesla Tesla jest to General Purpose GPU (GPGPU), GPU ogólnego przeznaczenia Obliczenia dotychczas wykonywane na CPU przenoszone są na GPU Możliwości jakie daje GPU dla grafiki
Bardziej szczegółowoProgramowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń (processing element): jeden wątek wykonywany
Bardziej szczegółowoCUDA ćwiczenia praktyczne
CUDA ćwiczenia praktyczne 7 kwietnia 2011, Poznań Marek Błażewicz, marqs@man.poznan.pl Michał Kierzynka, michal.kierzynka@man.poznan.pl Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów
Bardziej szczegółowoCUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka
CUDA część 1 platforma GPGPU w obliczeniach naukowych Maciej Matyka Bariery sprzętowe (procesory) ok na. 1 10 00 la raz t y Gdzie jesteśmy? a ok. 2 razy n 10 lat (ZK) Rozwój 1985-2004 i dalej? O roku ów
Bardziej szczegółowoProgramowanie kart graficznych. Architektura i API część 1
Programowanie kart graficznych Architektura i API część 1 Literatura NVIDIA CUDA Programming Guide version 4.2 http//developer.download.nvidia.com/compute/devzone/ docs/html/c/doc/cuda_c_programming_guide.pdf
Bardziej szczegółowoArchitektury komputerów Architektury i wydajność. Tomasz Dziubich
Architektury komputerów Architektury i wydajność Tomasz Dziubich Przetwarzanie potokowe Przetwarzanie sekwencyjne Przetwarzanie potokowe Architektura superpotokowa W przetwarzaniu potokowym podczas niektórych
Bardziej szczegółowoProgramowanie CUDA informacje praktycznie i przykłady. Wersja
Programowanie CUDA informacje praktycznie i przykłady problemów obliczeniowych Wersja 25.11.2014 cudasetdevice() Podstawowe operacje na urządzeniu GPU Określenie GPU i ustanowienie kontekstu (analog w
Bardziej szczegółowoProcesory kart graficznych i CUDA wer
wer 1.4 18.04.2016 Litreratura: CUDA textbook by David Kirk from NVIDIA and Prof. Wen-mei Hwu from UIUC. CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GP, J.Sanders, E.Kandrot,
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Wykład 7 Jan Kazimirski 1 Pamięć podręczna 2 Pamięć komputera - charakterystyka Położenie Procesor rejestry, pamięć podręczna Pamięć wewnętrzna pamięć podręczna, główna Pamięć zewnętrzna
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 Projektowanie kerneli Zasady optymalizacji: należy maksymalizować liczbę wątków (w rozsądnych granicach, granice zależą
Bardziej szczegółowoProgramowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak
Programowanie PKG - informacje praktycznie i przykłady problemów obliczeniowych Wersja z 7.05.2018 Opracował: Rafał Walkowiak cudasetdevice() Podstawowe operacje na urządzeniu GPU Określenie GPU i ustanowienie
Bardziej szczegółowoWydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.
Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Organizacja pamięci Organizacja pamięci współczesnych systemów komputerowych
Bardziej szczegółowoLibra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.
Konrad Szałkowski Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo Skisr-kolo@libra.cs.put.poznan.pl Po co? Krótka prezentacja Skąd? Dlaczego? Gdzie? Gdzie nie? Jak? CPU Pamięć DDR3-19200 19,2 GB/s Wydajność
Bardziej szczegółowoLab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Bardziej szczegółowoProgramowanie kart graficznych. Sprzęt i obliczenia
Programowanie kart graficznych Sprzęt i obliczenia CUDA Szczegóły implementacji sprzętowej Architektura SIMT: podstawą konstrukcji urządzeń CUDA jest skalowalna macierz wielowątkowych multiprocesorów strumieniowych
Bardziej szczegółowoJacek Matulewski - Fizyk zajmujący się na co dzień optyką kwantową i układami nieuporządkowanymi na Wydziale Fizyki, Astronomii i Informatyki
Michał Matuszak, Jacek Matulewski CUDA i czyny Technologia NVIDIA CUDA W zeszłomiesięcznym numerze SDJ w artykule pt. Czyń cuda opisaliśmy
Bardziej szczegółowoProcesory kart graficznych i CUDA wer 1.2 6.05.2015
wer 1.2 6.05.2015 Litreratura: CUDA textbook by David Kirk from NVIDIA and Prof. Wen-mei Hwu from UIUC. CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GP, J.Sanders, E.Kandrot, Helion
Bardziej szczegółowoWydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1
Wydajność systemów a organizacja pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Motywacja - memory wall Krzysztof Banaś, Obliczenia wysokiej wydajności. 2 Organizacja pamięci Organizacja pamięci:
Bardziej szczegółowoMoc płynąca z kart graficznych
Moc płynąca z kart graficznych Cuda za darmo! Czyli programowanie generalnego przeznaczenia na kartach graficznych (GPGPU) 22 października 2013 Paweł Napieracz /20 Poruszane aspekty Przetwarzanie równoległe
Bardziej szczegółowoOrganizacja pamięci w procesorach graficznych
Organizacja pamięci w procesorach graficznych Pamięć w GPU przechowuje dane dla procesora graficznego, służące do wyświetlaniu obrazu na ekran. Pamięć przechowuje m.in. dane wektorów, pikseli, tekstury
Bardziej szczegółowoZARZĄDZANIE PAMIĘCIĄ W TECHNOLOGII CUDA
Zeszyty Naukowe WSEI seria: TRANSPORT I INFORMATYKA, 6(1/2016), s. 77 85 Michał MAJ Wyższa Szkoła Ekonomii i Innowacji w Lublinie ZARZĄDZANIE PAMIĘCIĄ W TECHNOLOGII CUDA MANAGEMENT COMPUTER MEMORY IN CUDA
Bardziej szczegółowoProgramowanie kart graficznych. Architektura i API część 2
Programowanie kart graficznych Architektura i API część 2 CUDA hierarchia pamięci c.d. Globalna pamięć urządzenia: funkcje CUDA API takie jak cudamalloc() i cudafree() z założenia służą do manipulowania
Bardziej szczegółowoPraca dyplomowa magisterska
Praca dyplomowa magisterska Implementacja algorytmów filtracji adaptacyjnej o strukturze transwersalnej na platformie CUDA Dyplomant: Jakub Kołakowski Opiekun pracy: dr inż. Michał Meller Plan prezentacji
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowoDr inż. hab. Siergiej Fialko, IF-PK,
Dr inż. hab. Siergiej Fialko, IF-PK, http://torus.uck.pk.edu.pl/~fialko sfialko@riad.pk.edu.pl 1 Osobliwości przedmiotu W podanym kursie główna uwaga będzie przydzielona osobliwościom symulacji komputerowych
Bardziej szczegółowoProcesory kart graficznych i CUDA wer PR
wer 1.3 14.12.2016 PR Litreratura: CUDA textbook by David Kirk from NVIDIA and Prof. Wen-mei Hwu from UIUC. CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GP, J.Sanders, E.Kandrot,
Bardziej szczegółowoProgramowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej Krzysztof Banaś Obliczenia równoległe 1 Model równoległości danych Model SPMD (pierwotnie dla maszyn SIMD) Zrównoleglenie
Bardziej szczegółowo4 NVIDIA CUDA jako znakomita platforma do zrównoleglenia obliczeń
Spis treści Spis treści i 1 Wstęp 1 1.1 Wprowadzenie.......................... 1 1.2 Dostępne technologie, pozwalające zrównoleglić obliczenia na kartach graficznych....................... 1 1.2.1 Open
Bardziej szczegółowoWprowadzenie do programowania w środowisku CUDA. Środowisko CUDA
Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM
Bardziej szczegółowoMetody optymalizacji soft-procesorów NIOS
POLITECHNIKA WARSZAWSKA Wydział Elektroniki i Technik Informacyjnych Instytut Telekomunikacji Zakład Podstaw Telekomunikacji Kamil Krawczyk Metody optymalizacji soft-procesorów NIOS Warszawa, 27.01.2011
Bardziej szczegółowoBudowa komputera. Magistrala. Procesor Pamięć Układy I/O
Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz
Bardziej szczegółowoDodatek A. CUDA. 1 Stosowany jest w tym kontekście skrót GPCPU (od ang. general-purpose computing on graphics processing units).
Dodatek A. CUDA Trzy ostatnie rozdziały książki poświęcone są zagadnieniom związanym z programowaniem równoległym. Skłoniła nas do tego wszechobecność maszyn wieloprocesorowych. Nawet niektóre notebooki
Bardziej szczegółowoDr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI
Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku
Bardziej szczegółowoPrzygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,
Przetwarzanie równoległe PROJEKT OMP i CUDA Temat projektu dotyczy analizy efektywności przetwarzania równoległego realizowanego przy użyciu komputera równoległego z procesorem wielordzeniowym z pamięcią
Bardziej szczegółowoProcesory kart graficznych i CUDA
4.05.2019 Litreratura: CUDA textbook by David Kirk from NVIDIA and Prof. Wen-mei Hwu from UIUC. CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GP, J.Sanders, E.Kandrot, Helion Getting
Bardziej szczegółowoProgramowanie współbieżne Wprowadzenie do programowania GPU. Rafał Skinderowicz
Programowanie współbieżne Wprowadzenie do programowania GPU Rafał Skinderowicz Literatura Sanders J., Kandrot E., CUDA w przykładach, Helion. Czech Z., Wprowadzenie do obliczeń równoległych, PWN Ben-Ari
Bardziej szczegółowoZrównoleglenie i przetwarzanie potokowe
Zrównoleglenie i przetwarzanie potokowe Zrównoleglenie wysoka wydajność pozostaje osiągnięta w efekcie jednoczesnego wykonania różnych części zagadnienia. Przetwarzanie potokowe proces jest rozdzielony
Bardziej szczegółowoTemat 1: Podstawowe pojęcia: program, kompilacja, kod
Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,
Bardziej szczegółowoPROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK
1 PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK POLITECHNIKA CZĘSTOCHOWSKA 2 Trendy rozwoju współczesnych procesorów Budowa procesora CPU na przykładzie Intel Kaby Lake
Bardziej szczegółowoSprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer
Sprzęt komputerowy 2 Autor prezentacji: 1 prof. dr hab. Maria Hilczer Budowa komputera Magistrala Procesor Pamięć Układy I/O 2 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Wykład 13 Jan Kazimirski 1 KOMPUTERY RÓWNOLEGŁE 2 Klasyfikacja systemów komputerowych SISD Single Instruction, Single Data stream SIMD Single Instruction, Multiple Data stream MISD
Bardziej szczegółowoWydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1
Wydajność systemów a organizacja pamięci Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Wydajność obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci
Bardziej szczegółowoProcesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.
Procesory wielordzeniowe (multiprocessor on a chip) 1 Procesory wielordzeniowe 2 Procesory wielordzeniowe 3 Konsekwencje prawa Moore'a 4 Procesory wielordzeniowe 5 Intel Nehalem 6 Architektura Intel Nehalem
Bardziej szczegółowoProgramowanie współbieżne i rozproszone
Programowanie współbieżne i rozproszone WYKŁAD 4 Jan Kazimirski 1 Programowanie GPU 1/2 2 Literatura CUDA w przykładach, J. Sanders, E. Kandrot, 2012 Computing Gems. Emerald Edition, Wen-mei W. Hwu ed.,
Bardziej szczegółowoWydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Wydajność programów sekwencyjnych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Wydajność obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci i przetwarzania
Bardziej szczegółowoSystem pamięci. Pamięć podręczna
System pamięci Pamięć podręczna Technologia Static RAM (SRAM) Ułamki nanosekund, $500-$1000 za GB (2012r) Dynamic RAM (DRAM) 50ns 70ns, $10 $20 za GB Pamięci Flash 5000-50000 ns, $0.75 - $1 Dyski magnetyczne
Bardziej szczegółowoRaport Hurtownie Danych
Raport Hurtownie Danych Algorytm Apriori na indeksie bitmapowym oraz OpenCL Mikołaj Dobski, Mateusz Jarus, Piotr Jessa, Jarosław Szymczak Cel projektu: Implementacja algorytmu Apriori oraz jego optymalizacja.
Bardziej szczegółowoPlan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową
Plan 1 Uwagi na temat wydajności CPython a 2 Podstawowe techniki poprawiające wydajność obliczeniową 3 Podstawowe techniki poprawiające zużycie pamięci krótkie opisy modułów 1 array - jak oszczędzić na
Bardziej szczegółowoWskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
Bardziej szczegółowoGTX260 i CUDA wer
GTX260 i CUDA wer 1.1 25.11.2014 Litreratura: CUDA textbook by David Kirk from NVIDIA and Prof. Wen-mei Hwu from UIUC. CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GP, J.Sanders,
Bardziej szczegółowoImplementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek
Implementacja sieci neuronowych na karcie graficznej Waldemar Pawlaszek Motywacja Czyli po co to wszystko? Motywacja Procesor graficzny GPU (Graphics Processing Unit) Wydajność Elastyczność i precyzja
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał
Bardziej szczegółowoStałe, tablice dynamiczne i wielowymiarowe
Stałe, tablice dynamiczne i wielowymiarowe tylko do odczytu STAŁE - CONST tablice: const int dni_miesiaca[12]=31,28,31,30,31,30,31,31,30,31,30,31; const słowo kluczowe const sprawia, że wartość zmiennej
Bardziej szczegółowoProgramowanie współbieżne Wykład 2. Iwona Kochańska
Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas
Bardziej szczegółowoMMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16
MMX i SSE Zbigniew Koza Wydział Fizyki i Astronomii Uniwersytet Wrocławski Wrocław, 10 marca 2011 Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16 Spis treści Spis treści 1 Wstęp Zbigniew Koza (WFiA UWr) MMX
Bardziej szczegółowoWykorzystanie architektury Intel MIC w obliczeniach typu stencil
Wykorzystanie architektury Intel MIC w obliczeniach typu stencil Kamil Halbiniak Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok IV Instytut Informatyki Teoretycznej i Stosowanej
Bardziej szczegółowoWprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy
1 Wprowadzenie do informatyki i użytkowania komputerów Kodowanie informacji System komputerowy Kodowanie informacji 2 Co to jest? bit, bajt, kod ASCII. Jak działa system komputerowy? Co to jest? pamięć
Bardziej szczegółowoSprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer
Sprzęt komputerowy 2 Autor prezentacji: 1 prof. dr hab. Maria Hilczer Budowa komputera Magistrala Procesor Pamięć Układy I/O 2 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący
Bardziej szczegółowoWskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Bardziej szczegółowoBudowa komputera Komputer computer computare
11. Budowa komputera Komputer (z ang. computer od łac. computare obliczać) urządzenie elektroniczne służące do przetwarzania wszelkich informacji, które da się zapisać w formie ciągu cyfr albo sygnału
Bardziej szczegółowoWstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek
Wstęp do informatyki Architektura komputera Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki System komputerowy systemowa (System Bus) Pamięć operacyjna ROM,
Bardziej szczegółowoProgramowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1
Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1 Organizacja przedmiotu Dr inż. Robert Banasiak Dr inż. Paweł Kapusta 1 2 Nasze kompetencje R n D Tomografia 3D To nie tylko statyczny obraz!
Bardziej szczegółowoKomputer. Komputer (computer) jest to urządzenie elektroniczne służące do zbierania, przechowywania, przetwarzania i wizualizacji informacji
Komputer Komputer (computer) jest to urządzenie elektroniczne służące do zbierania, przechowywania, przetwarzania i wizualizacji informacji Budowa komputera Drukarka (printer) Monitor ekranowy skaner Jednostka
Bardziej szczegółowoBudowa komputera. Magistrala. Procesor Pamięć Układy I/O
Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz
Bardziej szczegółowoznajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Bardziej szczegółowoBudowa Mikrokomputera
Budowa Mikrokomputera Wykład z Podstaw Informatyki dla I roku BO Piotr Mika Podstawowe elementy komputera Procesor Pamięć Magistrala (2/16) Płyta główna (ang. mainboard, motherboard) płyta drukowana komputera,
Bardziej szczegółowoArchitektura mikroprocesorów TEO 2009/2010
Architektura mikroprocesorów TEO 2009/2010 Plan wykładów Wykład 1: - Wstęp. Klasyfikacje mikroprocesorów Wykład 2: - Mikrokontrolery 8-bit: AVR, PIC Wykład 3: - Mikrokontrolery 8-bit: 8051, ST7 Wykład
Bardziej szczegółowo16. Taksonomia Flynn'a.
16. Taksonomia Flynn'a. Taksonomia systemów komputerowych według Flynna jest klasyfikacją architektur komputerowych, zaproponowaną w latach sześćdziesiątych XX wieku przez Michaela Flynna, opierająca się
Bardziej szczegółowoLock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010
Konrad Błachnio K.Blachnio@students.mimuw.edu.pl MIMUW 19 maja 2010 1 Co to jest? API Implementacja 2 ILockManagerWithDetecting s - straszny zamek 3 4 Obecna implementacja Lock vs. Synchronized Hashtable
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Wykład 3 Jan Kazimirski 1 Podstawowe elementy komputera. Procesor (CPU) 2 Plan wykładu Podstawowe komponenty komputera Procesor CPU Cykl rozkazowy Typy instrukcji Stos Tryby adresowania
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
Bardziej szczegółowoAkceleracja obliczeń algebry liniowej z wykorzystaniem masywnie równoległych, wielordzeniowych procesorów GPU Świerczewski Ł.
Akceleracja obliczeń algebry liniowej z wykorzystaniem masywnie równoległych, wielordzeniowych procesorów GPU Świerczewski Ł. Wprowadzenie do koncepcji budowy akceleratorów graficznych Pierwsze procesory
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoCUDA PROGRAMOWANIE PIERWSZE PROSTE PRZYKŁADY RÓWNOLEGŁE. Michał Bieńkowski Katarzyna Lewenda
PROGRAMOWANIE RÓWNOLEGŁE PIERWSZE PROSTE PRZYKŁADY Michał Bieńkowski Katarzyna Lewenda Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne Czym jest? PROGRAMOWANIE
Bardziej szczegółowoPodsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor
Plan wykładu 1. Pojęcie podsystemu graficznego i karty graficznej 2. Typy kart graficznych 3. Budowa karty graficznej: procesor graficzny (GPU), pamięć podręczna RAM, konwerter cyfrowo-analogowy (DAC),
Bardziej szczegółowoProcesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.
Procesory wielordzeniowe (multiprocessor on a chip) 1 Procesory wielordzeniowe 2 Procesory wielordzeniowe 3 Intel Nehalem 4 5 NVIDIA Tesla 6 ATI FireStream 7 NVIDIA Fermi 8 Sprzętowa wielowątkowość 9 Architektury
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41
Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje
Bardziej szczegółowoWiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java
Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego
Bardziej szczegółowo