Existem diversos softwares para fazer análise de desempenho, no entanto, nesse cpp::daily de hoje vamos ver como utilizar o GNU Gprof que faz parte do GNU Binutils um pacote com diversas ferramentas úteis e que muito provavelmente já está instalado no seu sistema.
Para isso vamos ver como proceder para análisar um binário de um código.
Para esse exemplo vamos utilizar o seguinte código: vim main.cpp
.
#include <iostream>
int decrement_25mi( int );
int decrement_50mi( int );
int decrement_100mi( int );
int main( int argc, char ** argv ){
int i = 0;
for( int j = 0; j < 100000000; ++j){
i++;
}
i = decrement_100mi(i);
std::cout << "Contador = " << i << '\n';
return 0;
}
int decrement_25mi( int i ){
for( int j = 0; j < 25000000; ++j){
--i;
}
return i;
}
int decrement_50mi( int i){
i = decrement_25mi(i);
i = decrement_25mi(i);
return i;
}
int decrement_100mi( int i){
i = decrement_50mi(i);
i = decrement_25mi(i);
i = decrement_25mi(i);
return i;
}
Agora vamos compilar nosso código com a opção -pg
para o GNU Gprof:
g++ -pg main.cpp
Agora precisamos rodar nosso binário para o GNU Gprof gerar o arquivo gmon.out
no mesmo diretório
./a.out
Se quisermos obter os dados do desempenho basta rodar o comando:
gprof ./a.out
A saída será extensa com diversas informações detalhadas.
Se quisermos dados gráficos que são mais fáceis de analisar, precisaremos de duas ferramentas do Python:
Você pode usar o PIP para instalá-los
pip install graphviz --user
pip install gprof2dot --user
Lembrando que o diretório dos binários do
pip
precisam estar na sua variável$PATH
para você utilizar os comandos direto do seu terminal.
Após instalados, próximo passo é gerar a saída do GNU Gprof junto do binário com o gmon.out
para um arquivo, exemplo:
gprof ./a.out gmon.out > report.txt
Agora vamos utilizar o gprof2dot
para gerar um .dot
:
gprof2dot report.txt > report.dot
E por fim gerar uma imagem com o comando dot
:
dot -Tpng -o profile.png report.dot
Basta vermos a imagem e analisar o desempenho:
xdg-open profile.png
E o resultado será:
Show, né?! Para mais informações rode: main gprof
.
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: