Google Benchmark ile Mikro Karşılaştırma
Google Benchmark ile güvenilir mikro karşılaştırmalar yazın ve ölçüm tuzaklarından kaçının
Google Benchmark ile Mikro Karşılaştırma, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Neden Mikro Kıyaslama Yapmalı?
Makro düzeyde profil oluşturma, zamanın nerede harcandığını gösterir. Mikro kıyaslamalar, belirli kodları yalıtılmış biçimde ölçer; algoritmaları veya uygulamaları karşılaştırmak için yararlıdır.
Google Benchmark Kurulumu
Google tarafından geliştirilen, neredeyse yalnızca başlık dosyasından oluşan C++ kıyaslama kitaplığıdır. vcpkg, Conan veya apt ile kurun; -lbenchmark ile bağlayın.
#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();Derleme ve Çalıştırma
Eniyileme ile derleyin, kıyaslama kitaplığına bağlayın ve çalıştırın.
g++ -O2 -DNDEBUG bench.cpp -lbenchmark -lpthread -o bench
./benchÇıktıyı Yorumlama
Kitaplık, yineleme başına süreyi, yineleme sayısını ve CPU süresini yazdırır. Temel ölçümleri önerilen değişikliklerle karşılaştırın.
Eniyileyici Hilelerinden Kaçınma
Eniyileyici, işe yaramayan kodu silebilir. Sonucu "önemli" hâle getirmek için benchmark::DoNotOptimize kullanın.
for (auto _ : state) {
auto result = expensive_function();
benchmark::DoNotOptimize(result);
}Kullanılmayan Yazma İşlemlerini Önleme
benchmark::ClobberMemory, derleyiciye bellek durumunun gözlemlendiğini bildirir ve yazma işlemlerinin silinmesini önler.
Parametreli Kıyaslamalar
Aynı işlevi farklı girdi boyutlarıyla sınayın.
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);Çok İş Parçacıklı Kıyaslamalar
Threads değiştiricisiyle ölçeklenebilirliği sınayın.
BENCHMARK(BM_ConcurrentMap)->Threads(1)->Threads(4)->Threads(16);Özel Sayaçlar
Saniyedeki bayt veya saniyedeki öğe gibi alana özgü ölçümleri izleyin.
state.SetItemsProcessed(state.iterations() * input.size());
state.SetBytesProcessed(state.iterations() * input.size() * sizeof(int));İstatistiksel Çıktı
Ortalama, medyan ve standart sapmayı elde etmek için --benchmark_repetitions=10 ile çalıştırın. Kitaplık bunları otomatik olarak raporlar.
Yaygın Tuzaklar
Şunlara dikkat edin:
- Derleyicinin "kullanılmayan" kodu silmesi → DoNotOptimize kullanın
- Isınma etkileri → çok sayıda yineleme ölçün
- CPU frekans ölçeklendirmesi → çekirdeği sabitleyin ve turbo yükseltmeyi devre dışı bırakın
- Diğer işlemlerin çalışması → kıyaslamayı sakin bir makinede yapın
Sayıları Eleştirel Değerlendirme
%5'lik bir iyileşme ölçüm gürültüsü olabilir. Birden fazla yineleme çalıştırın; yalnızca istatistiksel olarak anlamlı farklara inanın. Bilinen bir temel ölçümle karşılaştırın.
Alternatifler
Diğer mikro kıyaslama araçları:
- Nonius — yalnızca başlık dosyasından oluşan C++ kıyaslaması
- Hayai — daha eski ama hafif
- Catch2, yerleşik kıyaslama desteğine sahiptir
Hızlı Kontrol
Kıyaslama döngüsü içinde benchmark::DoNotOptimize(result) neden kullanılır?
Özet
Ayrıntılı ölçümler için Google Benchmark kullanın. DoNotOptimize ve ClobberMemory ile derleyici hilelerini önleyin. Girdiler ve eşzamanlılık farklılıklarındaki davranışı incelemek için parametreli ve çok iş parçacıklı kıyaslamalar kullanın. Yalnızca istatistiksel olarak anlamlı farklara inanın.
Yapay zeka eğitmeniyle C++ öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“Google Benchmark ile Mikro Karşılaştırma” dersi ücretsiz mi?
Evet — “Google Benchmark ile Mikro Karşılaştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Google Benchmark ile Mikro Karşılaştırma” dersinde ne öğreneceğim?
Google Benchmark ile güvenilir mikro karşılaştırmalar yazın ve ölçüm tuzaklarından kaçının C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Google Benchmark ile Mikro Karşılaştırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Önbellek Dostu Veri Düzenleri
- Dallanma Tahmini ve Sıcak Döngüler
- perf, vtune ve Sanitizer'larla Profil Oluşturma
- Google Benchmark ile Mikro Karşılaştırma