Mikrobenchmarking z Google Benchmark
Pisz wiarygodne mikrobenchmarki za pomocą Google Benchmark i unikaj pułapek pomiarowych
Mikrobenchmarking z Google Benchmark to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Dlaczego mikrobenchmarki
Profilowanie makro pokazuje, gdzie tracony jest czas. Mikrobenchmarki mierzą konkretny kod w izolacji — są przydatne do porównywania algorytmów lub implementacji.
Konfiguracja Google Benchmark
Niemal wyłącznie nagłówkowa biblioteka benchmarków C++ firmy Google. Zainstaluj ją za pomocą vcpkg, Conan lub apt; połącz z -lbenchmark.
#include <benchmark/benchmark.h>
static void BM_StringCopy(benchmark::State& state) {
std::string s = "Hello, World!";
for (auto _ : state) {
std::string copy(s);
}
}
BENCHMARK(BM_StringCopy);
BENCHMARK_MAIN();Kompilowanie i uruchamianie
Skompiluj program z optymalizacją, połącz go z biblioteką benchmarków i uruchom.
g++ -O2 -DNDEBUG bench.cpp -lbenchmark -lpthread -o bench
./benchInterpretacja wyników
Biblioteka wyświetla czas na iterację, liczbę iteracji i czas procesora. Porównuj wartości bazowe z proponowanymi zmianami.
Unikanie sztuczek optymalizatora
Optymalizator może usunąć niepotrzebny kod. Użyj benchmark::DoNotOptimize, aby wymusić, by wynik „miał znaczenie”.
for (auto _ : state) {
auto result = expensive_function();
benchmark::DoNotOptimize(result);
}Zapobieganie martwym zapisom
benchmark::ClobberMemory informuje kompilator, że stan pamięci został odczytany — zapobiega usuwaniu zapisów.
Benchmarki sparametryzowane
Testuj tę samą funkcję dla różnych rozmiarów danych wejściowych.
static void BM_Sort(benchmark::State& state) {
std::vector<int> v(state.range(0));
std::iota(v.rbegin(), v.rend(), 0);
for (auto _ : state) {
auto copy = v;
std::sort(copy.begin(), copy.end());
}
}
BENCHMARK(BM_Sort)->RangeMultiplier(2)->Range(8, 1<<14);Benchmarki wielowątkowe
Testuj skalowalność za pomocą modyfikatora Threads.
BENCHMARK(BM_ConcurrentMap)->Threads(1)->Threads(4)->Threads(16);Niestandardowe liczniki
Śledź metryki specyficzne dla domeny, takie jak bajty/s lub elementy/s.
state.SetItemsProcessed(state.iterations() * input.size());
state.SetBytesProcessed(state.iterations() * input.size() * sizeof(int));Wyniki statystyczne
Uruchom program z opcją --benchmark_repetitions=10, aby uzyskać średnią, medianę i odchylenie standardowe. Biblioteka zgłasza je automatycznie.
Typowe pułapki
Zwróć uwagę na:
- Usuwanie przez kompilator „martwego” kodu → użyj DoNotOptimize
- Wpływ rozgrzewania → mierz wiele iteracji
- Skalowanie częstotliwości procesora → przypnij program do rdzenia i wyłącz tryb boost
- Uruchomione inne procesy → wykonuj benchmark na nieobciążonym komputerze
Krytyczna analiza wyników
Poprawa o 5% może być tylko szumem pomiarowym. Wykonaj wiele powtórzeń; uznawaj za wiarygodne tylko różnice istotne statystycznie. Porównuj wyniki ze znaną wartością bazową.
Alternatywy
Inne narzędzia do mikrobenchmarków:
- Nonius — nagłówkowy benchmark C++
- Hayai — starszy, ale lekki
- Catch2 ma wbudowaną obsługę benchmarków
Szybki test
Dlaczego używa się benchmark::DoNotOptimize(result) wewnątrz pętli benchmarku?
Podsumowanie
Używaj Google Benchmark do szczegółowych pomiarów. Zapobiegaj sztuczkom kompilatora za pomocą DoNotOptimize i ClobberMemory. Korzystaj z benchmarków sparametryzowanych i wielowątkowych, aby badać zachowanie dla różnych danych wejściowych i poziomów współbieżności. Uznawaj za wiarygodne tylko różnice istotne statystycznie.
Ucz się C++ dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „Mikrobenchmarking z Google Benchmark” jest bezpłatna?
Tak — pełny tekst „Mikrobenchmarking z Google Benchmark” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Mikrobenchmarking z Google Benchmark”?
Pisz wiarygodne mikrobenchmarki za pomocą Google Benchmark i unikaj pułapek pomiarowych Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Mikrobenchmarking z Google Benchmark”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Układy danych przyjazne dla pamięci podręcznej
- Przewidywanie rozgałęzień i gorące pętle
- Profilowanie za pomocą perf, VTune i sanitizerów
- Mikrobenchmarking z Google Benchmark