velocidade de codigo

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)
 
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.
 
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
 
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.
 
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:
Pois sapropel eu percebi, mas eu nao queria tar a testar isso eu...mas tudo bem, obrigado na mm pelas dicas ppl
 
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:)
 
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.
 
Back
Topo