Gprof, Notas de estudo de Engenharia Informática
wellington-cassio-faria-8
wellington-cassio-faria-8

Gprof, Notas de estudo de Engenharia Informática

9 páginas
21Números de download
1000+Número de visitas
Descrição
Gprof Desempenho de Algoritmos
30 pontos
Pontos de download necessários para baixar
este documento
Baixar o documento
Pré-visualização3 páginas / 9
Esta é apenas uma pré-visualização
3 mostrados em 9 páginas
Esta é apenas uma pré-visualização
3 mostrados em 9 páginas
Esta é apenas uma pré-visualização
3 mostrados em 9 páginas
Esta é apenas uma pré-visualização
3 mostrados em 9 páginas

Teste de desempenho

Teste de desempenho Gprof é uma ferramenta GNU que faz parte do conjunto de ferramentas binárias GNU Binutils. Ela permite a análise dinâmica de programas binários através da coleta de informações e identificação de trechos de código mais constantemente solicitados por um programa em execução, além do tempo consumido por cada rotina.

Este tipo de informação permite analisar a quantidade de métodos (ou funções) existentes no código, bem como o número de chamadas de cada uma delas, bem como a porcentagem de tempo gasto para executar pra tal

Esta informação é relevante, pois mostra quais partes do programa estão demorando para serem executadas ou quais partes estão sendo executadas mais ou menos vezes do que era esperado.

Com este tipo de informação é possível aplicar técnicas de otimização para melhorar a performance de seu programa.

Teste de desempenho Executando o Gprof

Antes de executar o Gprof é preciso compilar o programa em análise, apropriadamente, para produzir informações a serem futuramente interpretadas pelo Gprof.

Essencialmente, o código-fonte precisa ser compilado com a opção de profiling habilitada.

Para habilitar esta opção, adicione as flags -pg ao processo de compilação.

Exemplo:

#gcc -pg codigo_fonte.c –o programa

Teste de desempenho Como funciona?

Primeiramente é preciso compilar o programa, que esteja dentro das linguagens suportadas pelo Gprof, através do GCC, usando a opção -pg. Essa opção fará com que o programa gere o arquivo gmon.out depois que o código é executado, assim é possível utilizar o Gprof. Para utilizar a opção -pg durante a compilação deve-se digitar:

gcc nome_do_código_fonte -pg -o nome_do_arquivo_executável -lc

Teste de desempenho Após a compilação executa-se o programa usando ./nome_do_programa. É gerado o arquivo gnom.out no diretório, a partir daí as opções dos Gprof podem ser utilizadas.

Teste de desempenho #include <stdio.h>

int a(void) { int i=0; int g=0; while (i++<100000){ g+=i; } return g; }

int b(void) { int i=0; int g=0; while (i++<400000){ g+=i; } return g; }

int main(int argc, char** argv){ int interations;

if(argc != 2){ printf("Usage %s <No of Interations>\n",argv[0]); } else { interations = atoi(argv[1]); } printf("No of interations = %d\n", interations);

while(interations--){ a(); b(); } return 0; }

Teste de desempenho O algoritmo é composto por duas funções a e b, onde a função b vai executar um número de repetições 4 vezes maior do que a. Através disso é possível supor que a porcentagem de tempo gasto nas funções vai ter relação ao que se nota no número de repetições da função, ou seja, a porcentagem de tempo gasto na primeira função vai ser, aproximadamente, quatro vezes menor do que o tempo gasto na segunda.

Foi feita a análise utilizando a opção -p do Gprof, mostrando que a suposição estava correta. As funções foram rodadas 500 vezes. Foram utilizadas outras opções, para verificação de seus respectivos aspectos.

Opção -p:

Flat profile:Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 77.23 0.78 0.78 500 1.56 1.56 b 22.77 1.01 0.23 500 0.46 0.46 a

Teste de desempenho Opção -q:

Um ponto notável no Gprof, é que ele sempre envia as informações sobre os termos usados, o que cada um significa, o que facilita muito o entendimento. Call graph (explanation follows)granularity: each sample hit covers 4 byte(s) for 0.99% of 1.01 seconds

index % time self children called name <spontaneous> [1] 100.0 0.00 1.01 main [1] 0.78 0.00 500/500 b [2] 0.23 0.00 500/500 a [3] ———————————————– 0.78 0.00 500/500 main [1] [2] 77.2 0.78 0.00 500 b [2] ———————————————– 0.23 0.00 500/500 main [1] [3] 22.8 0.23 0.00 500 a [3] ———————————————–

This table describes the call tree of the program, and was sorted by the total amount of time spent in each function and its children.

Teste de desempenho •Site oficial:

http://www.delorie.com/gnu/docs/binutils/gpro f_toc.html#SEC_Contents

Até o momento nenhum comentário
Esta é apenas uma pré-visualização
3 mostrados em 9 páginas