C++ Academy · Aula

Microavaliação de desempenho com Google Benchmark

Escreva microavaliações de desempenho fiáveis com Google Benchmark e evite armadilhas de medição

Aula 4 de 415 etapas

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
./bench

Interpretaçã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.

Grátis para começar

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

  1. Organizações de dados favoráveis à cache
  2. Previsão de ramificações e ciclos intensivos
  3. Criação de perfis com perf, vtune e Sanitizers
  4. Microavaliação de desempenho com Google Benchmark
← Voltar para C++ Academy