Kto mówi? Inżynier systemów wbudowanych Linux, ARMv7, ARMv8

Podobne dokumenty
Architektura komputerów

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

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

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

Zrównoleglenie i przetwarzanie potokowe

Materiały pomocnicze do laboratorium. 1. Miary oceny efektywności 2. Mnożenie macierzy 3. Znajdowanie liczb pierwszych

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Organizacja pamięci współczesnych systemów komputerowych : pojedynczy procesor wielopoziomowa pamięć podręczna pamięć wirtualna

System pamięci. Pamięć wirtualna

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

Optymalizacja programów Open Source. Pamięć część 3. Krzysztof Lichota

Procesory. Schemat budowy procesora

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

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Przykładowe sprawozdanie. Jan Pustelnik

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

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

Programowanie procesorów graficznych GPGPU

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

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Rozproszone i Równoległe

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

System pamięci. Pamięć wirtualna

Kompilator języka C na procesor 8051 RC51 implementacja

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

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

Budowa i zasada działania komputera. dr Artur Bartoszewski

Elementy składowe systemu komputerowego

System obliczeniowy laboratorium oraz. mnożenia macierzy

Architektura systemów informatycznych

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wykład 6. Mikrokontrolery z rdzeniem ARM

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

Języki i metodyka programowania. Wskaźniki i tablice.

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

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

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

Programowanie Współbieżne

System pamięci. Pamięć wirtualna

Wydajność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

WIDEOS O ER E WER E ÓW

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Wydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Pomiary efektywności dla AMD. Na podstawie dokumentacji AMD opracował: Rafał Walkowiak Listopad 2012

WIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

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

SZCZEGÓŁOWY OPIS PRZEDMIOTU ZAMÓWIENIA CZĘŚĆ I

Programowanie aplikacji równoległych i rozproszonych

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Tesla. Architektura Fermi

Podstawowe zagadnienia informatyki

Struktury czyli rekordy w C/C++

2 Przygotował: mgr inż. Maciej Lasota

System pamięci. Pamięć podręczna

i3: internet - infrastruktury - innowacje

Wydajny Linux. Jakub Woźniak KN Sieci Komputerowych i Systemów Rozproszonych Tenesys

Inżynieria Wytwarzania Systemów Wbudowanych

Wstęp. do języka C na procesor (kompilator RC51)

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

Podstawy programowania w języku C i C++

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Architektura systemów informatycznych

MATERIAŁY POMOCNICZE DO LABORATORIUM Z PRZETWARZANIA RÓWNOLEGŁEGO KWIECIEŃ 2018

Wskaźniki. Informatyka

Tablice, funkcje - wprowadzenie

Architektura komputerów

Ograniczenia efektywności systemu pamięci

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Metody optymalizacji soft-procesorów NIOS

Konsolidacja i wirtualizacja na platformie IBM Power: najlepszą metodą obniżenia kosztów IT

IMPLEMENTACJA I PORÓWNANIE WYDAJNOŚCI WYBRANYCH ALGORYTMÓW GRAFOWYCH W WARUNKACH OBLICZEŃ RÓWNOLEGŁYCH

Nr sprawy 25/2017/KO Gdańsk, 5 lipca 2017 r. zgodnie z art. 4 pkt. 8 ustawy - Prawo zamówień publicznych (tj. Dz.U z późn. zm.

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Technika mikroprocesorowa. Linia rozwojowa procesorów firmy Intel w latach

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Algorytmy Apriori i Partition C++, Linux

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

Moc płynąca z kart graficznych

Struktury. Przykład W8_1

Przetwarzanie potokowe pipelining

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Lab 9 Podstawy Programowania

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

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

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Programowanie kart graficznych

Opis przedmiotu zamówienia / Formularz Oferty Technicznej (dokument należy złożyć wraz z ofertą)

Informatyka. Wy-05 Struktury, unie, organizacja pól struktur w pamięci

Ograniczenia efektywności systemu pamięci

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

KURS C/C++ WYKŁAD 6. Wskaźniki

System pamięci. Pamięć podręczna

ZASADY PROGRAMOWANIA KOMPUTERÓW

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Transkrypt:

Kto mówi? Inżynier systemów wbudowanych Linux, ARMv7, ARMv8

Kto mówi? Inżynier systemów wbudowanych Linux, ARMv7, ARMv8...które mają 16GB RAM

Kto mówi? Inżynier systemów wbudowanych Linux, ARMv7, ARMv8...które mają 16GB RAM...40 Gb/s przepustowość sieci

Kto mówi? Inżynier systemów wbudowanych Linux, ARMv7, ARMv8...które mają 16GB RAM...40 Gb/s przepustowość sieci...i są wbudowane w rack

Quiz #define N (1024 * 1024) long a[n]; void quiz(unsigned step) { unsigned i; for (i = 0; i < N; i += step) a[i] *= 3; }

Relatywny koszt quiz(1), quiz(2)...? #define N (1024 * 1024) long a[n]; void quiz(unsigned step) { unsigned i; for (i = 0; i < N; i += step) a[i] *= 3; } Przemnóż co n-ty element tablicy.

Koszt quiz(n) dla 1 <= n < 16 czas (ms) step

Koszt quiz(n) dla 1 <= n < 16 czas (ms) quiz(1) ~ quiz(8)! step

$ Perf stat./quiz <N> 0,997 CPUs utilized 3,141 GHz 13,33% frontend cycles idle 3,02 instructions per cycle Wysokie IPC -> procesor zajęty 0,997 CPUs utilized 3,114 GHz 84,84% frontend cycles idle 0,52 instructions per cycle Niskie IPC -> procesor bezczynny

Hierarchia pamięci Dlaczego pamięć nie jest płaska Maciej Czekaj

Plan 1. Cache i RAM 2. Dostęp nie taki znowu swobodny 3. Dostęp lepiej niż sekwencyjny 4. Współbieżność a pamięć 5. Optymalizacja kodu

Architektura pamięci - Intel Core i7 DDR - osobno L2 - kod i dane L3 - wspólny RAM <-> CPU przez L1, L2, L3 CPU <-> CPU?

Cache to znaczna część krzemu i ciągle rośnie! *http://www.hardwarezone.com.sg/tech-news-intel-launches-its-4th-generation-haswell-processors

Prawo Moore a działa wybiórczo *http://www.techdesignforums.com/practice/files/2013/02/tdf-snps-armcc-feb13-fig1lg.jpg

Plan 1. Cache i RAM 2. Dostęp nie taki znowu swobodny 3. Dostęp lepiej niż sekwencyjny 4. Współbieżność a pamięć 5. Optymalizacja kodu

Czas dostępu do pamięci - Intel * 3 gen Corei-7 2.20GHz

Czas dostępu do pamięci - Intel L3 8MB L2 256KB L1 32KB * 3 gen Corei-7 2.20GHz

Czas dostępu do pamięci - ARM * 4x Cortex A15 1.60 GHz

Czas dostępu do pamięci - ARM L2 4MB L1 16KB * 4x Cortex A15 1.60 GHz

Wnioski 1ns - średnio 2 cykle CPU (2GHz) 1 cykl ~ 1 operacja dodawania (mnożenia) Większy cache - dłuższy dostęp Dostęp do DDR prawie nie zależy od CPU Zasada lokalności

Program pomiarowy struct list { struct list *next; /* Zmienne wypełnienie */ long pad[0]; };

Program pomiarowy void benchmark(void) { struct list *l = list; unsigned iters = iterations; } while (iters--) { l = l->next; // Skacz do kolejnej linijki }

Plan 1. Cache i RAM 2. Dostęp nie taki znowu swobodny 3. Dostęp lepiej niż sekwencyjny 4. Współbieżność a pamięć 5. Optymalizacja kodu

Dostęp sekwencyjny Czas odczytu (ns) Ilość bajtów * 3 gen Corei-7 2.20GHz

Dostęp sekwencyjny Czas odczytu (ns) Częściowo L3 L2 L1 Ilość bajtów * 3 gen Corei-7 2.20GHz

Wracamy do quizu $ perf stat -e L1-dcache-loads,L1-dcache-load-misses./quiz 7 7 115.0 Performance counter stats for './quiz 7': 155435733 L1-dcache-loads 134733981 L1-dcache-load-misses # 86,68% of all L1-dcache hits $ perf stat -e L1-dcache-loads,L1-dcache-load-misses./quiz 1 1 125.4 Performance counter stats for './quiz 1': 1075973403 L1-dcache-loads 134758255 L1-dcache-load-misses # 12,52% of all L1-dcache hits

Prefetch Wczytywanie z wyprzedzeniem Działa dobrze w pętlach Iteracja po tablicy gwarantuje prefetch Load 0x00 Load 0x40 Load 0x80 Load 0xC0... 0x0... 0x40 0x80... 0xC0

Lmbench - par_mem Ilość równoległych operacji Ilość bajtów * 3 gen Corei-7 2.20GHz

Plan 1. Cache i RAM 2. Dostęp nie taki znowu swobodny 3. Dostęp lepiej niż sekwencyjny 4. Współbieżność a pamięć 5. Optymalizacja kodu

Wiele wątków na raz - false sharing Czas odczytu (ns) Ilość bajtów * 3 gen Corei-7 2.20GHz

Wiele wątków na raz - false sharing Czas odczytu (ns) Cache L3 - punkt wymiany danych Ilość bajtów * 3 gen Corei-7 2.20GHz

Kod pomiarowy struct list { struct list *next; long pad[15]; };

Kod pomiarowy void benchmark(long id) { struct list *l = list; unsigned iters = iterations; } while (iters--) { l->pad[id] += 1; // synchronizacja cache l = l->next; }

Hyper-threading Dwa (więcej) logiczne wątki dzielą jeden rdzeń Wspólny cache L1 Tania synchronizacja (przez L1, nie L3) Większe zużycie cache (nawet 50% na wątek) SPARC T5 (2012) - 8 wątków, 16 rdzeni

Plan 1. Cache i RAM 2. Dostęp nie taki znowu swobodny 3. Dostęp lepiej niż sekwencyjny 4. Współbieżność a pamięć 5. Optymalizacja kodu

Techniki poprawy lokalności danych Tablice jako główny kontener danych Rozkładanie pól w strukturach / klasach Podział danych na lokalne i wspólne Alternatywne metody alokacji pamięci Pule pamięci inne implementacje malloc() HugeTLB

Problemy z obiektami Sktruktury wskaźnikowe a zasada lokalności

Obiekty przyjazne dla cache Grupowe zarządzanie obiektami Alokacja w tablicach

Lokalna optymalizacja struktur / klas struct Bad { int flags; long a[7]; int counter; }; $ pahole -C Bad test_prog struct Bad { int flags; /* 0 4 */ /* XXX 4 bytes hole, try to pack */ long int a[7]; /* 8 56 */ /* --- cacheline 1 boundary (64 bytes) --- */ int counter; /* 64 4 */ /* size: 72, cachelines: 2, members: 3 */ /* sum members: 64, holes: 1, sum holes: 4 */ /* padding: 4 */ /* last cacheline: 8 bytes */ };

Pakiet dwarves - program pahole Rozmieszczenie pól w pamięci przerwy w strukturach wypełnienie na końcu struktury sugeruje reorganizację (opcja -R) diagnozuje problemy z niezgodnością struktur (łatwo porównać wydruki)

Lokalna optymalizacja struktur c.d struct Good { int flags; int counter; long a[7]; }; $ pahole -C Good test_prog struct Good { int flags; /* 0 4 */ int counter; /* 4 4 */ long int array[7]; /* 8 56 */ /* --- cacheline 1 boundary (64 bytes) --- */ /* size: 64, cachelines: 1, members: 3 */ };

Poprawiamy struktury c.d. struct Pretty { int flags; /* 0 4 */ int counter; /* 4 4 */ long int array[7]; /* 8 56 */ /* -- cacheline 1 boundary (64 bytes) -- */ long int not_used; /* 64 8 */ /* size: 72, cachelines: 2, members: 4 */ /* last cacheline: 8 bytes */ }; struct Ugly { long int not_used; /* 0 8 */ long int array[7]; /* 8 56 */ /* -- cacheline 1 boundary (64 bytes) -- */ int flags; /* 64 4 */ int counter; /* 68 4 */ /* size: 72, cachelines: 2, members: 4 */ /* last cacheline: 8 bytes */ };

Unikanie false sharing - GCC struct Shared { struct producer prod; /* -- nowa linijka cache -- */ struct consumer cons attribute ((aligned(64))); } ;

Unikanie false sharing - inne CC Wyrównanie = rozmiar zmiennej struct Shared { struct producer prod; /* -- nowa linijka cache -- */ struct {... char pad[64 - SIZE]; } cons; /* cons ma rozmiar 64B i wyrównanie 64B */ };

Alternatywy dla malloc() - pula wolne Stały rozmiar obiektów Minimalny czas alokacji/zwalniania Bezpieczne dla wielu wątków Oparte na tablicach! (cyklicznych) zajęte

Alternatywy dla malloc() c.d. jemalloc() Firefox od wersji 3 libhugetlb Przyspiesza użycie pamięci wirtualnej 2MB strony zamiast 4KB Dobre dla dużych zbiorów danych

Podsumowanie Jeśli nie wiadomo o co chodzi.

Podsumowanie Jeśli nie wiadomo o co chodzi. to chodzi o cache

Podsumowanie Jeśli nie wiadomo o co chodzi. to chodzi o cache Pomiar, pomiar, pomiar perf top -e cache-misses Drobne zmiany mają znaczenie Rozkład pól w strukturze 2X mniej pamięci! Może zmieścimy się w cache L1?

Do poduchy Urlich Depper: What every programmer should know about memory Learn more about CUDA http://www.nvidia. com/object/cudau_ucdavis

Pytania?

Dziękuję! mjc@semihalf.com