Promocja!

SZTUKA TWORZENIA WYDAJNEGO KODU

80.08

Na stanie

Sztuka tworzenia wydajnego kodu. Przewodnik po zaawansowanych technikach wykorzystywania sprzętu i kompilatorów

SPIS TREŚCI

O autorze

O recenzencie

Przedmowa

Część I. Fundamenty wydajności

Rozdział 1. Wydajność i współbieżność – wprowadzenie

  • Dlaczego należy brać pod uwagę wydajność?
  • Dlaczego wydajność ma znaczenie?
  • Co rozumiemy przez wydajność?
    • Wydajność jako przepustowość
    • Wydajność jako pobór mocy
    • Wydajność w przypadku aplikacji czasu rzeczywistego
    • Wydajność w zależności od kontekstu
  • Ocenianie, szacowanie i przewidywanie wydajności
  • Poznawanie zagadnienia dużej wydajności
  • Podsumowanie
  • Pytania

Rozdział 2. Pomiary wydajności

  • Wymagania techniczne
  • Przykład pomiaru wydajności
  • Testy porównawcze wydajności
    • Liczniki czasu biblioteki chrono języka C++
    • Liczniki czasu o dużej dokładności
  • Profilowanie wydajności
    • Narzędzie profilujące perf
    • Szczegółowe profilowanie przy użyciu narzędzia perf
    • Narzędzie profilujące pakietu Google Performance
    • Profilowanie z wykorzystaniem grafu wywołań
    • Optymalizacja i wstawianie
    • Profilowanie w praktyce
  • Mikrotesty porównawcze
    • Podstawy mikrotestów porównawczych
    • Mikrotesty porównawcze i optymalizacje kompilatora
    • Google Benchmark
    • Mikrotesty porównawcze to kłamstwo
  • Podsumowanie
  • Pytania

Rozdział 3. Architektura procesorów, zasoby i wydajność

  • Wymagania techniczne
  • Wydajność zaczyna się od procesora
  • Badanie wydajności za pomocą mikrotestów porównawczych
    • Wizualizacja obliczeń równoległych na poziomie instrukcji
  • Zależności od danych i potokowanie
  • Potokowanie i rozgałęzienia
    • Przewidywanie rozgałęzień
    • Profilowanie pod kątem nieudanego przewidywania rozgałęzień
  • Wykonywanie spekulatywne
  • Optymalizacja złożonych warunków
  • Wykonywanie obliczeń bez rozgałęzień
    • Odwijanie pętli
    • Operacja wyboru bez użycia rozgałęzień
    • Przykłady wykonywania obliczeń bez rozgałęzień
  • Podsumowanie
  • Pytania

Rozdział 4. Architektura i wydajność pamięci

  • Wymagania techniczne
  • Wydajność zaczyna się od procesora, ale na nim się nie kończy
  • Pomiar szybkości dostępu do pamięci
    • Architektura pamięci
    • Pomiar szybkości pamięci głównej i podręcznej
  • Szybkość pamięci – wartości
    • Szybkość operacji losowego dostępu do pamięci
    • Szybkość operacji dostępu sekwencyjnego do pamięci
    • Optymalizacje wydajności pamięci na poziomie sprzętowym
  • Optymalizowanie wydajności pamięci
    • Struktury danych efektywne z perspektywy pamięci
    • Profilowanie wydajności pamięci
    • Optymalizowanie algorytmów pod kątem wydajności pamięci
  • „Duch” w komputerze
    • Czym jest Spectre?
    • Przykład użycia ataku Spectre
    • Atak Spectre w pełni akcji
  • Podsumowanie
  • Pytania

Rozdział 5. Wątki, pamięć i współbieżność

  • Wymagania techniczne
  • Wątki i współbieżność
    • Czym jest wątek?
    • Wielowątkowość symetryczna
    • Wątki i pamięć
    • Programy ograniczane przez pamięć i współbieżność
  • Koszt synchronizacji pamięci
  • Dlaczego współużytkowanie danych jest tak kosztowne?
  • Współbieżność i kolejność
    • Potrzeba zapewnienia kolejności
    • Uporządkowanie pamięci i związane z nią bariery
    • Uporządkowanie pamięci w języku C++
  • Model pamięci
  • Podsumowanie
  • Pytania

Część II. Zaawansowana współbieżność

Rozdział 6. Wydajność i współbieżność

  • Wymagania techniczne
  • Co jest niezbędne do efektywnego korzystania ze współbieżności?
  • Blokady, alternatywy i ich wydajność
    • Programy z blokadą, pozbawione blokady oraz bez oczekiwania
    • Różne blokady w przypadku odmiennych problemów
    • Jaka jest faktyczna różnica między programem z blokadą i programem pozbawionym blokady?
  • Tworzenie bloków pod kątem programowania współbieżnego
    • Podstawy współbieżnych struktur danych
    • Liczniki i akumulatory
    • Protokół publikowania
    • Inteligentne wskaźniki używane w programowaniu współbieżnym
  • Podsumowanie
  • Pytania

Rozdział 7. Struktury danych odpowiednie w przypadku współbieżności

  • Wymagania techniczne
  • Czym jest struktura danych bezpieczna wątkowo?
    • Najlepszy rodzaj bezpieczeństwa wątkowego
    • Rzeczywiste bezpieczeństwo wątkowe
  • Stos bezpieczny wątkowo
    • Projektowanie interfejsu pod kątem bezpieczeństwa wątkowego
    • Wydajność struktur danych chronionych przez muteks
    • Wymagania dotyczące wydajności w przypadku różnych zastosowań
    • Szczegółowa analiza wydajności stosu
    • Oszacowania wydajności w przypadku schematów synchronizacji
    • Stos bez blokady
  • Kolejka bezpieczna wątkowo
    • Kolejka pozbawiona blokady
    • Struktury danych spójne niesekwencyjnie
    • Zarządzanie pamięcią na potrzeby współbieżnych struktur danych
  • Lista bezpieczna wątkowo
    • Lista pozbawiona blokady
  • Podsumowanie
  • Pytania

Rozdział 8. Obsługa współbieżności w języku C++

  • Wymagania techniczne
  • Obsługa współbieżności w standardzie C++11
  • Obsługa współbieżności w standardzie C++17
  • Obsługa współbieżności w standardzie C++20
    • Podstawy dotyczące współprogramów
    • Składnia współprogramów w języku C++
    • Przykłady współprogramów
  • Podsumowanie
  • Pytania

Część III. Projektowanie i pisanie programów o dużej wydajności

Rozdział 9. Kod C++ o dużej wydajności

  • Wymagania techniczne
  • Czym jest efektywność języka programowania?
  • Zbędne kopiowanie
    • Kopiowanie i przekazywanie argumentów
    • Kopiowanie jako technika implementacji
    • Kopiowanie w celu przechowywania danych
    • Kopiowanie wartości zwracanych
    • Zastosowanie wskaźników w celu uniknięcia kopiowania
    • Metoda unikania zbędnego kopiowania
  • Nieefektywne zarządzanie pamięcią
    • Zbędne alokacje pamięci
    • Zarządzanie pamięcią w programach współbieżnych
    • Unikanie fragmentacji pamięci
  • Optymalizacja wykonywania warunkowego
  • Podsumowanie
  • Pytania

Rozdział 10. Optymalizacje kompilatora w kodzie C++

  • Wymagania techniczne
  • Kompilatory optymalizujące kod
    • Podstawy optymalizacji stosowanych przez kompilator
    • Wstawianie funkcji
    • Co tak naprawdę kompilator „wie”?
    • Przenoszenie informacji z fazy wykonywania do fazy kompilacji
  • Podsumowanie
  • Pytania

Rozdział 11. Zachowanie niezdefiniowane i wydajność

  • Wymagania techniczne
  • Czym jest zachowanie niezdefiniowane?
  • Dlaczego występuje zachowanie niezdefiniowane?
  • Zachowanie niezdefiniowane i optymalizacja kodu C++
  • Zastosowanie zachowania niezdefiniowanego do zapewnienia efektywnego projektu
  • Podsumowanie
  • Pytania

Rozdział 12. Projektowanie pod kątem wydajności

  • Interakcja między projektem i wydajnością
  • Projektowanie pod kątem wydajności
    • Zasada minimalnej ilości informacji
    • Zasada maksymalnej ilości informacji
  • Kwestie związane z projektowaniem interfejsu API
    • Projektowanie interfejsu API pod kątem współbieżności
    • Kopiowanie i wysyłanie danych
  • Projektowanie pod kątem optymalnego dostępu do danych
  • Kompromisy związane z wydajnością
    • Projekt interfejsu
    • Projektowanie komponentów
    • Błędy i zachowanie niezdefiniowane
  • Podejmowanie przemyślanych decyzji projektowych
  • Podsumowanie
  • Pytania

Odpowiedzi

Autor

ISBN

978-83-283-9250-2

Liczba stron

Rok wydania

Wydawca

Opinie

Na razie nie ma opinii o produkcie.

Napisz pierwszą opinię o „SZTUKA TWORZENIA WYDAJNEGO KODU”