Sztuka tworzenia wydajnego kodu. Przewodnik po zaawansowanych technikach wykorzystywania sprz - Helion
Tytuł oryginału: The Art of Writing Efficient Programs: An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples
TÅ‚umaczenie: Piotr Pilch
ISBN: 978-83-283-9250-2
stron: 446, Format: 168x237, okładka: mi
Data wydania: 2022-07-01
Księgarnia: Helion
Cena książki: 53,40 zł (poprzednio: 89,00 zł)
Oszczędzasz: 40% (-35,60 zł)
Osoby które kupowały "Sztuka tworzenia wydajnego kodu. Przewodnik po zaawansowanych technikach wykorzystywania sprz", wybierały także:
- Windows Media Center. Domowe centrum rozrywki 66,67 zł, (8,00 zł -88%)
- 66,67 zł, (14,00 zł -79%)
- Superinteligencja. Scenariusze, strategie, zagro 66,67 zł, (14,00 zł -79%)
- Przywództwo w świecie VUCA. Jak być skutecznym liderem w niepewnym środowisku 58,64 zł, (12,90 zł -78%)
- Twoja firma w social mediach. Podr 58,33 zł, (14,00 zł -76%)
Spis treści
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