Analise o desempenhos dos seus programas em C++ com GNU Gprof

O legal desse utilitário é que ele faz parte do GNU Binutils e provavelmente já está no seu sistema.


Analise o desempenhos dos seus programas em C++ com GNU Gprof

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á:

Profile

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++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cpp cppdaily gnu


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!