Tolok Ukur Mikro dengan Google Benchmark
Tulis tolok ukur mikro yang andal dengan Google Benchmark dan hindari jebakan pengukuran
Tolok Ukur Mikro dengan Google Benchmark adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Mengapa Tolok Ukur Mikro?
Pembuatan profil makro menunjukkan tempat waktu dihabiskan. Tolok ukur mikro mengukur kode tertentu secara terisolasi—berguna untuk membandingkan algoritma atau implementasi.
Penyiapan Google Benchmark
Pustaka tolok ukur C++ yang hampir hanya berupa header, dibuat oleh Google. Instal melalui vcpkg, Conan, atau apt; tautkan dengan -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();Mengompilasi dan Menjalankan
Kompilasi dengan optimasi, tautkan dengan pustaka tolok ukur, lalu jalankan.
g++ -O2 -DNDEBUG bench.cpp -lbenchmark -lpthread -o bench
./benchMenafsirkan Keluaran
Pustaka mencetak waktu per iterasi, jumlah iterasi, dan waktu CPU. Bandingkan tolok ukur dasar dengan perubahan yang diusulkan.
Menghindari Trik Pengoptimal
Pengoptimal dapat menghapus kode yang tidak berguna. Gunakan benchmark::DoNotOptimize untuk memaksa hasil agar "berarti".
for (auto _ : state) {
auto result = expensive_function();
benchmark::DoNotOptimize(result);
}Mencegah Penyimpanan Tak Terpakai
benchmark::ClobberMemory memberi tahu kompilator bahwa status memori telah diamati—sehingga mencegah penghapusan penyimpanan.
Tolok Ukur Berparameter
Uji fungsi yang sama dengan berbagai ukuran input.
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);Tolok Ukur dengan Banyak Utas
Uji skalabilitas dengan pengubah Threads.
BENCHMARK(BM_ConcurrentMap)->Threads(1)->Threads(4)->Threads(16);Penghitung Khusus
Lacak metrik khusus domain seperti byte/detik atau item/detik.
state.SetItemsProcessed(state.iterations() * input.size());
state.SetBytesProcessed(state.iterations() * input.size() * sizeof(int));Keluaran Statistik
Jalankan dengan --benchmark_repetitions=10 untuk mendapatkan rata-rata, median, dan simpangan baku. Pustaka melaporkannya secara otomatis.
Jebakan Umum
Waspadai hal-hal berikut:
- Kompilator menghapus kode "mati" → gunakan DoNotOptimize
- Efek pemanasan → lakukan pengukuran selama banyak iterasi
- Penskalaan frekuensi CPU → tetapkan inti dan nonaktifkan peningkatan frekuensi otomatis
- Proses lain sedang berjalan → lakukan tolok ukur pada mesin yang tidak sibuk
Membaca Angka secara Kritis
Peningkatan 5% mungkin hanya derau pengukuran. Jalankan beberapa pengulangan; percayai hanya perbedaan yang signifikan secara statistik. Bandingkan dengan tolok ukur dasar yang sudah diketahui.
Alternatif
Alat tolok ukur mikro lainnya:
- Nonius—tolok ukur C++ yang hanya berupa header
- Hayai—lebih lama, tetapi ringan
- Catch2 memiliki dukungan tolok ukur bawaan
Pemeriksaan Singkat
Mengapa menggunakan benchmark::DoNotOptimize(result) di dalam perulangan tolok ukur?
Ringkasan
Gunakan Google Benchmark untuk pengukuran terperinci. Cegah trik kompilator dengan DoNotOptimize dan ClobberMemory. Gunakan tolok ukur berparameter dan dengan banyak utas untuk mengeksplorasi perilaku pada berbagai input dan tingkat konkurensi. Percayai hanya perbedaan yang signifikan secara statistik.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tolok Ukur Mikro dengan Google Benchmark” gratis?
Ya — teks lengkap “Tolok Ukur Mikro dengan Google Benchmark” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tolok Ukur Mikro dengan Google Benchmark”?
Tulis tolok ukur mikro yang andal dengan Google Benchmark dan hindari jebakan pengukuran Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Tolok Ukur Mikro dengan Google Benchmark” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tata Letak Data yang Ramah Cache
- Prediksi Percabangan dan Perulangan Panas
- Pembuatan Profil dengan perf, vtune, dan Sanitizer
- Tolok Ukur Mikro dengan Google Benchmark