Microavaliação de desempenho com Google Benchmark
Escreva microavaliações de desempenho fiáveis com Google Benchmark e evite armadilhas de medição
Microavaliação de desempenho com Google Benchmark é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Por que fazer microtestes de desempenho?
A análise macro de desempenho mostra onde o tempo é gasto. Os microtestes de desempenho medem um código específico isoladamente — são úteis para comparar algoritmos ou implementações.
Configuração do Google Benchmark
Biblioteca de microtestes C++ praticamente só de cabeçalhos, criada pelo Google. Instale-a por meio do vcpkg, Conan ou apt; faça a ligação com -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();Compilação e execução
Compile com otimização, faça a ligação com a biblioteca de microtestes e execute.
g++ -O2 -DNDEBUG bench.cpp -lbenchmark -lpthread -o bench
./benchInterpretação da saída
A biblioteca exibe o tempo por iteração, o número de iterações e o tempo de CPU. Compare os valores de referência com as alterações propostas.
Evitando truques do otimizador
O otimizador pode excluir código inútil. Use benchmark::DoNotOptimize para forçar o resultado a "importar".
for (auto _ : state) {
auto result = expensive_function();
benchmark::DoNotOptimize(result);
}Evitando armazenamentos inúteis
benchmark::ClobberMemory informa ao compilador que o estado da memória foi observado — isso impede a eliminação de armazenamentos.
Microtestes parametrizados
Teste a mesma função com diferentes tamanhos de entrada.
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);Microtestes com múltiplos encadeamentos
Teste a escalabilidade com o modificador Threads.
BENCHMARK(BM_ConcurrentMap)->Threads(1)->Threads(4)->Threads(16);Contadores personalizados
Acompanhe métricas específicas do domínio, como bytes por segundo ou itens por segundo.
state.SetItemsProcessed(state.iterations() * input.size());
state.SetBytesProcessed(state.iterations() * input.size() * sizeof(int));Saída estatística
Execute com --benchmark_repetitions=10 para obter a média, a mediana e o desvio padrão. A biblioteca os informa automaticamente.
Armadilhas comuns
Fique atento a:
- O compilador eliminar código "inútil" → use DoNotOptimize
- Efeitos de aquecimento → meça muitas iterações
- Escalonamento da frequência da CPU → fixe a execução em um núcleo e desative o aumento automático
- Outros processos em execução → faça o microteste em uma máquina ociosa
Interpretando os números com senso crítico
Uma melhoria de 5% pode ser apenas ruído de medição. Faça várias repetições; considere confiáveis apenas as diferenças estatisticamente significativas. Compare com uma referência conhecida.
Alternativas
Outras ferramentas de microtestes de desempenho:
- Nonius — microteste C++ só de cabeçalhos
- Hayai — mais antigo, mas leve
- Catch2 oferece suporte integrado a microtestes de desempenho
Verificação rápida
Por que usar benchmark::DoNotOptimize(result) dentro de um laço de microteste?
Recapitulação
Use o Google Benchmark para medições detalhadas. Impeça truques do compilador com DoNotOptimize e ClobberMemory. Use microtestes parametrizados e com múltiplos encadeamentos para explorar o comportamento com diferentes entradas e níveis de concorrência. Considere confiáveis apenas as diferenças estatisticamente significativas.
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Microavaliação de desempenho com Google Benchmark” é grátis?
Sim — o texto completo de “Microavaliação de desempenho com Google Benchmark” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Microavaliação de desempenho com Google Benchmark”?
Escreva microavaliações de desempenho fiáveis com Google Benchmark e evite armadilhas de medição Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Microavaliação de desempenho com Google Benchmark”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Organizações de dados favoráveis à cache
- Previsão de ramificações e ciclos intensivos
- Criação de perfis com perf, vtune e Sanitizers
- Microavaliação de desempenho com Google Benchmark