Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

maeDaSol

temporizar para uma função

Mensagens Recomendadas

maeDaSol    0
maeDaSol

olá

tenho estado às voltas  com um programa que tem que medir o tempo que demora a multiplicar matrizes.

mas dá-me sempre 0 segundos.

Alguém sabe como é que meço  o tempo em milissegundos ou outra unidade mais pequena que os segundos?

o meu código é mais ou menos este:

time_t tempo1, tempo2;

time(&tempo1);
matrizR = multiplicar(d, matrizA, matrizB, matrizR);   
time(&tempo2);

printf("tempo de execução: %.2d \n", (difftime(tempo2, tempo1)));  

brigada  :biggrin:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Isso é porque a função time só conta em segundos. A tua operação sobre as matrizes deve demorar menos que 1 segundo.

Já estou um pouco ferrujado de C, mas acho que o que querias era a função clock que te dá o tempo em termos de processador usado. O valor retornado pela função é em ciclos/segundo que varia de sistema para sistema, ou seja, terias que ver o valor de CLOCK_PER_SECOND para saber o valor dele. E depois era uma questão de fazer contas...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

eu costumo usar:

clock_t start = clock();

matrizR = multiplicar(d, matrizA, matrizB, matrizR);   

clock_t ends = clock();
printf("Tempo de execucao: %.5f seg\n\n",(double) (ends - start) / CLOCKS_PER_SEC);

:P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
maeDaSol    0
maeDaSol

oi, consegiu por isto a funcionar

aqui vai o código final

struct timeval t1,t2;

( ...)

gettimeofday(&t1, NULL); 
matrizR = multiplicar(d, matrizA, matrizB, matrizR);   
gettimeofday(&t2, NULL); 


printf("%.2f segundos\n", (float)(t2.tv_usec-t1.tv_usec)/1000);  //calcular a diferença de tempo (em miliseg) e converter para float

obrigada pela ajuda, deu mt jeito

:)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

oi, consegiu por isto a funcionar

aqui vai o código final

struct timeval t1,t2;

( ...)

gettimeofday(&t1, NULL); 
matrizR = multiplicar(d, matrizA, matrizB, matrizR);   
gettimeofday(&t2, NULL); 


printf("%.2f segundos\n", (float)(t2.tv_usec-t1.tv_usec)/1000);  //calcular a diferença de tempo (em miliseg) e converter para float

obrigada pela ajuda, deu mt jeito

;)

Atenção que assim só funciona as vezes. O membro usec guarda o numero de micro-segundos entre dada segundo não o tempo todo

tipo se a primeira chamada à funções gettimeofday devolver  1001 para o tv_sec e 599999 para o tv_usec quer dizer que está quase a passar o segundo, se o calculo da matrix demorar 10 mili-segundos a segunda chamada devovel tv_sec=1002 e tv_usec = 009999, e se tentares fazer a conta como tens vai dar negativo.

deves fazer algo do género


(double)((t2_sec+(t2.tv_usec/1000000))-(t1_sec+(t1.tv_usec/1000000)))

Assim dá-te os segundos com precisão de micro-segundos (nas casas decimais)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade