0Pricing
C++ Academy · Leçon

Micro-évaluation des performances avec Google Benchmark

Écrire des micro-évaluations fiables avec Google Benchmark et éviter les pièges de mesure

Micro-évaluation des performances avec Google Benchmark est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Pourquoi effectuer un micro-test de performance ?

Le profilage à grande échelle montre où le temps est passé. Les micro-tests de performance mesurent un code précis isolément — ce qui est utile pour comparer des algorithmes ou des implémentations.

Configuration de Google Benchmark

Bibliothèque de tests de performance C++ presque exclusivement composée d’en-têtes, créée par Google. Installez-la avec vcpkg, Conan ou apt ; liez-la avec -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();

Compiler et exécuter

Compilez avec les optimisations, liez la bibliothèque de tests de performance, puis exécutez le programme.

g++ -O2 -DNDEBUG bench.cpp -lbenchmark -lpthread -o bench
./bench

Interpréter les résultats

La bibliothèque affiche le temps par itération, le nombre d’itérations et le temps CPU. Comparez les références aux modifications proposées.

Éviter les astuces de l’optimiseur

L’optimiseur peut supprimer le code inutile. Utilisez benchmark::DoNotOptimize pour forcer le compilateur à considérer le résultat comme « important ».

for (auto _ : state) {
    auto result = expensive_function();
    benchmark::DoNotOptimize(result);
}

Empêcher la suppression des écritures

benchmark::ClobberMemory indique au compilateur que l’état de la mémoire a été observé — cela empêche la suppression des écritures.

Tests de performance paramétrés

Évaluez la même fonction avec différentes tailles d’entrée.

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);

Tests de performance multithreads

Évaluez la capacité à monter en charge avec le modificateur Threads.

BENCHMARK(BM_ConcurrentMap)->Threads(1)->Threads(4)->Threads(16);

Compteurs personnalisés

Suivez des métriques propres au domaine comme les octets/s ou les éléments/s.

state.SetItemsProcessed(state.iterations() * input.size());
state.SetBytesProcessed(state.iterations() * input.size() * sizeof(int));

Résultats statistiques

Exécutez avec --benchmark_repetitions=10 pour obtenir la moyenne, la médiane et l’écart type. La bibliothèque les calcule automatiquement.

Pièges courants

Faites attention aux points suivants :

  • Le compilateur supprime le code « mort » → utilisez DoNotOptimize
  • Effets de préchauffage → mesurez de nombreuses itérations
  • Mise à l’échelle de la fréquence du CPU → affectez un cœur et désactivez le mode boost
  • Exécution d’autres processus → effectuez le test sur une machine peu sollicitée

Lire les chiffres avec esprit critique

Une amélioration de 5 % peut être due au bruit de mesure. Effectuez plusieurs répétitions ; ne vous fiez qu’aux différences statistiquement significatives. Comparez avec une référence connue.

Alternatives

Autres outils de micro-tests de performance :

  • Nonius — test de performance C++ composé uniquement d’en-têtes
  • Hayai — plus ancien, mais léger
  • Catch2 prend en charge les tests de performance intégrés

Vérification rapide

Pourquoi utiliser benchmark::DoNotOptimize(result) dans une boucle de test de performance ?

Récapitulatif

Utilisez Google Benchmark pour effectuer des mesures précises. Empêchez les astuces du compilateur avec DoNotOptimize et ClobberMemory. Utilisez des tests de performance paramétrés et multithreads pour étudier le comportement selon les entrées et la concurrence. Ne retenez que les différences statistiquement significatives.

Questions Fréquemment Posées

La leçon « Micro-évaluation des performances avec Google Benchmark » est-elle gratuite ?

Oui — le texte complet de « Micro-évaluation des performances avec Google Benchmark » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Micro-évaluation des performances avec Google Benchmark » ?

Écrire des micro-évaluations fiables avec Google Benchmark et éviter les pièges de mesure Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Micro-évaluation des performances avec Google Benchmark » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Organisations des données adaptées au cache
  2. Prédiction des branchements et boucles intensives
  3. Profilage avec perf, vtune et les sanitizers
  4. Micro-évaluation des performances avec Google Benchmark
← Retour à C++ Academy