Software Design

Design de software em C, C++, Java, etc…

C++: Utilizando Hayai para benchmark de código

O Hayai é um framework para benchmark baseado no gtest do Google. A idéia é criar testes de performance de forma simples e rápida. Os tempos de execução são medidos em nanosegundos ( só testei em linux ).

Como exemplo ( e por curiosidade ) criei um código que faz replace em strings de duas formas diferentes. A primeira é utilizando string::find(…) e string::replace. A segunda utiliza expressões regulares para fazer a busca. O screenshot abaixo nos mostra o resultado:

Resultado do Benchmark

Se compararmos o tempo médio de execução é possível notar que o tempo com regex (83701us) é em torno de 100 vezes mais lento do que o tempo sem regex ( 868us ). Não é difícil de explicar, afinal precisamos compilar a regex e depois executá-la para enfim fazer a troca da string. Por outro lado, utilizar regex permite uma maior flexibilidade na hora de fazer a busca, o que em muitos casos é mais importante do que a velocidade ( apesar de ser 100 vezes mais lento a diferença (média) é de apenas 0.082833 ms, ou seja menos de 1 decimo de milisegundo ), além do que em aplicações reais é possível otimizar isso fazendo cache da expressão regular já compilada, etc..

Para o Hayai medir a performance de alguma coisa, utilizamos a macro BENCHMARK, que vai gerar o código necessário para medir o tempo de execução. Exemplo:

BENCHMARK(Sql, regexReplace, 10, 1000)
{
 string sql = "select * from aa where a_param like :a_param and b_param = :b_param";
 regexReplace(sql, ":a_param", "a_value");
}

Quando o código for executado, este benchmark vai rodar 10 vezes com 1000 iterações a cada execução e no final mostrar os tempos de execução ( pior, melhor, médio ).

Simples não?

O hayai está disponível em: https://github.com/nickbruun/hayai

E o código completo do exemplo acima está em: https://github.com/filipenf/snippets/tree/master/c%2B%2B/benchmark

Informação

Publicado às dezembro 11, 2013 por em C++, Linux, Profiling e marcado , , , , .
%d blogueiros gostam disto: