Optymalizacja programów Open- Source Profilery niskiego poziomu część 2 Krzysztof Lichota

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Język C/C++ Funkcje.
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Wykonał : Marcin Sparniuk
Wprowadzenie do języka skryptowego PHP
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
CPU.
CLR na platformie .NET Tomasz Kostarski.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 1: Wprowadzenie do programowania.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Wirtotechnologia – Funkcje Grupa: 1A
Systemy operacyjne Wykład nr 5: Wątki Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Systemy operacyjne Bibliografia:
Temat nr 10: System przerwań
SO – LAB3 Wojciech Pieprzyca
Procesory RISC.
Zapis informacji Dr Anna Kwiatkowska.
Wprowadzenie do programowania w języku Turbo Pascal
Wieloprocesowy system operacyjny dla komputerów ATARI XL/XE
Konfiguracja polcenie SUDO
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
opracowanie: Agata Idczak
Wypożyczalnia NARZĘDZI
Zbiór do posortowania mieści się w pamięci
Programowanie strukturalne i obiektowe
Arkusze kalkulacyjne, część 3
Wielozadaniowowść systemu operacyjnego Linux
Instrukcja USOS Rejestracja na zajęcia obieralne wersja by Marek Opacki.
Instrukcja USOSweb Wersja: Opracował: Sebastian Sieńko Moduł sprawdzianów.
Mikroprocesory.
Mikroprocesory mgr inż. Sylwia Glińska.
Systemy plików FAT, FAT32, NTFS
5 Etapów Pracy Kompilatora
Przerwanie ang. interrupt.
Maszyna wirtualna ang. virtual machine, VM.
Buforowanie D e f i n i c j a.
MICROSOFT Access TWORZENIE MAKR
Etapy uruchamiania systemu Pliki konfiguracyjne
Podstawy programowania
Procesor – charakterystyka elementów systemu. Parametry procesora.
System plików.
Procesor, pamięć, przerwania, WE/WY, …
Architektury procesorów rdzeniowych mikrokontrolerów.
1. Logowanie z usługą Active Directory. a) logowanie do domeny Windows 2003 Server odbywa się znacznie szybciej niż w poprzednich wersjach. b) nie ma odwołania.
JabTalk - instrukcja. Przyciski paska wypowiedzi – odtwarzanie i czyszczenie Pasek wypowiedzi – wyświetla wybrane symbole i pozwala na ich odtworzenie.
Podstawy programowania
Struktura systemu operacyjnego
Pętle – instrukcje powtórzeń
Tryby adresowania i formaty rozkazów mikroprocesora
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Akademia ETI 2016 LABORATORIUM 2 – OBSŁUGA WYŚWIETLACZA GRAFICZNEGO.
Optymalizacja programów Open- Source Inne zagadnienia Krzysztof Lichota
Optymalizacja programów Open-Source Pamięć część 3 Krzysztof Lichota
Optymalizacja programów Open- Source Dostęp do dysku Krzysztof Lichota
Optymalizacja programów Open-Source Profilery wysokiego poziomu część 1 Krzysztof Lichota
Optymalizacja programów Open-Source
Optymalizacja programów Open-Source
Optymalizacja programów Open-Source
Podział mikroprocesorów
AudaPad / AudaShare AudaShare PRO (2.8)
PROGRAMY DO KONTROLI RODZICIELSKIEJ
PROGRAMY DO KONTROLI RODZICIELSKIEJ
Haskell Składnia funkcji.
Format rozkazu Tryby adresowania.
Informacje ogólne Mgr Inż. Jerzy Orlof
Excel Informacje różne.
Zapis prezentacji:

Optymalizacja programów Open- Source Profilery niskiego poziomu część 2 Krzysztof Lichota

oprofile

● Działa na zasadzie odczytywania pozycji w kodzie i stanu stosu, gdy sprzętowe rejestry procesora dotyczące różnych zdarzeń osiągną określoną wartość (generowane jest przerwanie) ● Umożliwia badanie sprzętowych zdarzeń, które inaczej nie są możliwe do zbadania ● Umożliwia uzyskanie wyników z dość dużą dokładnością ● Umożliwia uzyskanie grafu wywołań

Zalety oprofile ● Pozwala na profiling jądra systemu, w tym procedur obsługi przerwań ● Mały narzut dzięki wykorzystaniu sprzętowych liczników (zwykle 1-3%) ● Pozwala na profiling bardzo niskopoziomowy (np. nietrafienia w cache CPU, złe branch prediction) na podstawie faktycznego działania procesora

Wady oprofile ● Wymaga uprawnień administratora ● Nie zapewnia 100% dokładności na poziomie instrukcji (ze względu na próbkowanie) ● Działa tylko na niektórych architekturach (m.in. i386/x86_64) ● Wyniki są trudne w interpretacji – trzeba znać dobrze architekturę i sposób działania procesora

Liczniki ● Różne rodzaje liczników, w zależności od procesora ● Najciekawsze (dla Pentium IV): – BRANCH_RETIRED – ominięte gałęzie wykonania – BSQ_CACHE_REFERENCE – trafienia/nietrafienia w cache różnych poziomów – MACHINE_CLEAR – opróżnienia pipeline procesora – RETIRED_MISPRED_BRANCH_TYPE – gałęzie wykonywania pominięte, podzielone według typu – PAGE_WALK_TYPE – dostępy do tablic stron – 64BIT_MMX_UOP – liczba mikrooperacji MMX ● Pełna lista:

Obsługa ● opcontrol --start --no-vmlinux – rozpoczęcie profilowania (bez jądra, z domyślnymi licznikami) ● opcontrol --shutdown – zatrzymanie profilowania ● opcontrol --dump – zrzut obecnego stanu, żeby można go było przetwarzać ● opcontrol --save nazwa – zapisanie sesji profilowania ● opreport – generuje raporty zbiorcze ze śladu ● opannotate – generuje anotację do kodu źródłowego lub asemblera

Obsługa (2) ● Zdarzenia do śledzenia podaje się przy uruchomieniu demona, za pomocą opcji --events ● Podaje się nazwę licznika i maskę zdarzeń (o ile jest potrzebna) ● Przykład: --event=DATA_MEM_REFS:30000 ● Nie wszystkie kombinacje zdarzeń są możliwe ● Listę zdarzeń można uzyskać za pomocą wywołania: opcontrol --list-events ● Domyślnie na i386 jest CPU_CLK_UNHALTED ● Najlepiej użyć GUI: oprof_start

Przydatne opcje ● opreport --exclude-dependent --demangle=smart --symbols biblioteka – pokazuje wyniki z podziałem na symbole dla podanej biblioteki/pliku wykonywalnego ● opreport --demangle=smart --symbols plik-exe – pokazuje wyniki dla programu wykonywalnego i jego bibliotek ● opreport --long-filenames – pokazuje wyniki z podziałem na biblioteki/pliki wykonywalne ● opannotate --source --assembly plik-exe – tworzy anotację kodu źródłowego z wplecionym asemblerem

Użycie z kcachegrind ● Kcachegrind ma możliwość wyświetlenia wyników oprofile, dzięki czemu łatwiej można oglądać wyniki ● Należy skonwertować wyniki oprofile do postaci znanej Kcachegrind za pomocą polecenia: opreport -gdf | op2calltree ● op2calltree jest częścią pakietu kcachegrind (są również skrypty do konwersji z innych formatów, np. gprofa)

Na co zwrócić uwagę ● Ustawienie bardzo niskiego okresu zbierania danych może spowodować zamrożenie systemu ● Wartość graniczna licznika nie powinna być „równa”, żeby licznik nie zgrał się w fazie z naszym programem

Inne profilery ● Komercyjne – Rational Quantify – Intel VTune ● Wolnodostępne – HPCView – MemSpy (Martonosi/Gupta/Anderson) – CProf (Lebeck/Wood) – VProf – MTools (Goldberg/Hennessy) – MHSim (Fowler/Mellor-Crummey/Whalley) – SIP (Berg/Hagersten) – DCPI (HP Profiling Infrastructure for Alpha Processors) ● Źródło: bin/show.cgi/KcacheGrindWhatRelatedhttp://kcachegrind.sourceforge.net/cgi- bin/show.cgi/KcacheGrindWhatRelated

Instrukcje MMX/SSE

● Zestawy instrukcji do obrabiania dużych ilości danych, najczęściej multimedialnych (obraz, dźwięk), ale przydaje się też w innych sytuacjach, gdy obrabiamy dane strumieniowo ● Zawiera instrukcje SIMD (Single Instruction Multiple Data – zwane również wektorowymi) oraz inne przydatne instrukcje, np. do kontroli cache procesora, konwersji danych

Instrukcje SIMD ● Jedna instrukcja operuje na wielu danych jednocześnie, wykonując tę samą operację (np. xor, dodawanie, porównywanie, mnożenie, dzielenie, max) ● Większość instrukcji działa „pionowo” (np. dodajemy 4 słowa 2-bajtowe z jednego rejestru do 4 słów 2-bajtowych z 2 rejestru) ● Niektóre instrukcje działają „poziomo” (np. dodajemy 4 słowa 2-bajtowe w jednym rejestrze) ● Instrukcje mogą używać liczb całkowitych lub zmiennoprzecinkowych

Instrukcje kontroli cache ● Pozwalają z wyprzedzeniem wczytać do cache potrzebne dane i pozwalają określić do którego poziomu cache wczytać – PREFETCHTx ● Pozwalają określić, że dane będą użyte raz i nie należy trzymać ich w cache (zapobiegają cache pollution przy obróbce dużej ilości danych) – PREFETCHNTA ● Pozwalają wyrzucić z cache określone linie pamięci – CLFLUSH

Na co zwrócić uwagę ● Nie każdy procesor obsługuje dany zestaw instrukcji, należy zrobić przynajmniej wersję SIMD i zwykłą (w C) ● Instrukcje MMX są obsługiwane przez praktycznie każdy procesor dzisiaj w użyciu, więc najbezpieczniej pisać w tym zestawie instrukcji ● Niektóre kompilatory (np. GCC 4) są w stanie wygenerować kod w MMX, pod warunkiem użycia odpowiedniej docelowej architektury ● Czasem kod w C lub za pomocą wcześniejszego zestawu instrukcji jest szybszy!

Na co zwrócić uwagę (2) ● Po użyciu instrukcji MMX (nie SSE) należy wykonać instrukcję EMMS, ponieważ MMX używają rejestrów zmiennoprzecinkowych koprocesora ● Jeśli rozmiar danych nie jest wielokrotnością ilości danych przetwarzanych w naszym kodzie, należy dodać „ogon”, który przetworzy te ostatnie dane ● Dane powinny być wyrównane w pamięci do wielokrotności rozmiaru linii cache (16 bajtów), można do tego użyć funkcji posix_memalign() lub samemu alokować więcej i wyrównywać do wybranej granicy.

Bibliografia ● ● ● ● ● – lub jak nie działa: ourceforge.net/doc/html/nasmdocb.html+ e.net/doc/html/nasmdocb.html&hl=pl&ct=clnk&cd=1 ourceforge.net/doc/html/nasmdocb.html+ e.net/doc/html/nasmdocb.html&hl=pl&ct=clnk&cd=1 ● HOWTO.html HOWTO.html ● fe pdf?sequence=1 fe pdf?sequence=1 ● performance-analyzer-events-ratios-optimizing-applications/ performance-analyzer-events-ratios-optimizing-applications/ ● (3.4.1)