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
./benchInterpré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
- Organisations des données adaptées au cache
- Prédiction des branchements et boucles intensives
- Profilage avec perf, vtune et les sanitizers
- Micro-évaluation des performances avec Google Benchmark