1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

velocidade de codigo

Discussão em 'Programação' iniciada por DnlCY, 25 de Maio de 2005. (Respostas: 10; Visualizações: 823)

  1. DnlCY

    DnlCY Power Member

    Boas ppl
    Alguem sabe aonde posso saber o tempo de execucao de uma funcao de C? ou pelo menos comparacao de tempo de execucao de funcoes? algum site?
    Eu sei que o tempo depende do hardware usado, mas independentemente do hardware sabe-se que uma soma é mais rapida que uma divisao..., essencialmente eu queria saber comparacoes., ois tou a fazer um programa que dava jeito ser mais eficiente do que esta, e queria saber se vale apena mudar por exemplo de um 'for' para um 'if' para ganhar eficiencia.
    Obvio que estas funcoes nao sao corridas uma unica vez, eles sao corridas 'ciclicamente', e portanto por cada milisegundo da troca de uma funcao podera corresponder a segundos no resultado final.
    DnlCY (aka UNOwen)
     
  2. fap

    fap Power Member

    podes usar o time do linux/unix para ver o tempo que demora a correr
    time ./proggie
     
  3. NoMercy

    NoMercy Power Member

    Tambem podes sempre verificar a hora de sistema antes da funcção correr e depois da funcção correr. Subtrais uma á outra e ficas com o tempo que a funcção levou a correr.
     
  4. sapropel

    sapropel Power Member

    em windows:

    (...)
    int inicial = timeGetTime();

    (... o codigo a ser temporizado aqui ...)

    printf( "levou cerca de: %d\n", (timeGetTime() - inicial) );

    (...)

    existem outras, queryperformancefrequency, gettickcount, etc, mas a timegettime dizem ser a de maior resolução. btw, tens de linkar a biblioteca winmm.lib para a usares.


    em *nix:

    (...)
    timespec inicial;
    lock_gettime( CLOCK_REALTIME, &inicial );

    (... o codigo a ser temporizado aqui ...)

    timespec final;
    lock_gettime( CLOCK_REALTIME, &final );

    printf( "levou cerca de: %d\n", (final.tv_nsec - inicial.tv_nsec) );

    tens de linkar a librt que está incluida na glibc.


    nota:

    se os valores forem muito elevados, usa o modificador L no printf que assim os valores sao interpretados como long double
     
  5. DnlCY

    DnlCY Power Member

    Sim eu sei dessas coisas, talvez nao me tenha explicado bem, mas o que queria era so o tempo de uma unica funcao e nao um conjunto de funcoes/ciclos, obvio que posso testar eu proprio todas as funcoes usando o k voces indicam, mas gostava de poupar esse tempo se houve ja alguma coisa sobre isso.
     
  6. sapropel

    sapropel Power Member

    queres ver o tempo que demora uma função?
    então man.. no sitio aonde pus o "(... codigo a ser temporizado ...)" metes a função que queres chamar..

    quanto aos calculos inicias e finais, só precisas de escrever uma vez.. faz 2 funções ou assim.

    genero:

    StartTimer(); //esta função faz os calculos inicias, double inicial = timeGetTime();
    FuncaoATestar();
    EndTimer(); //esta faz os calculos finais

    EDIT: se quiseres escrevo-te as funções.
     
    Última edição: 25 de Maio de 2005
  7. DnlCY

    DnlCY Power Member

    Pois sapropel eu percebi, mas eu nao queria tar a testar isso eu...mas tudo bem, obrigado na mm pelas dicas ppl
     
  8. sapropel

    sapropel Power Member

    mas então escreve aí um exemplo de como supostamente querias fazer, pode ser que perceba melhor
     
  9. Sadino

    Sadino I'm cool cuz I Fold

  10. DnlCY

    DnlCY Power Member

    Sapropel, o que eu queria é possivel com o k tas a sugerir, mas talvez ja houvessem resultados feitos que eu pudesse pegar.
    Mas dando-te um exemplo: se eu soubesse que 'eventualmente se' um ciclo while fosse mais rapido que um ciclo for, eu substituia todos os ciclos for por while. e o que eu quero saber é quem é na realidade o mais rapido, se ja houvesse por ai uma tabela com esses valores, eu evita de me xatear. Mas dei o exemplo de um ciclo, mas podia tb ser +'s em vez de *'s, trocar codigo mm so para aumentar a velocidade.

    Sadino, eu nao sei bem o k tavas a indicar foi o que eu tive a ver mas este analizado parece mt interessante, mas ai vem a questao? vale a pena arranja-lo? eu tb nao quero algo tao complexo...mas tnks pela indicacao:)
     
  11. Xpirit

    Xpirit Banido

    O Vtune é excelente. Para Linux é à borla se não for para fins comerciais. Qualquer bom programador usa o vtune para analisar as partes dos programas mais pesadas e merecedoras de optimização.
     

Partilhar esta Página