Alguém conhece alguma função em C para medir tempo
de execução em milisegundos? A maioria das funções do
tipo só dá o tempo em segundos...
Sei que o CUDA tem uma função para medir tempo as-
sim, mas preciso de uma função em C puro (pra poder
comparar meu programa em C com o programa GPU).
Abraço!
~
J. Labaki
Laboratório de Mecânica Estrutural Computacional
Departamento de Mecânica Computacional
Faculdade de Engenharia Mecânica
Unicamp - Campinas/SP
http://www.jlabaki.com & http://www.gpubrasil.com
"Todos começam com um saco vazio de experiência e um saco cheio de sorte.
O segredo é encher o saco da experiência sem esvaziar o da sorte..."
-- Seleções de Reader's Digest.
Olá, Kelligton! Tudo bem com vc?
Bem-vindo à lista! Vc é o primeiro participante externo, fora da
nossa turma de GPU! Espero que seja o primeiro de muitos!
Como vc descobriu nosso site e nossa lista?
Pesquisei essas funções que você sugeriu, mas elas só funci-
onam com Windows... Vc tem alguma sugestão para Linux?
2008/12/16 Kelligton Neves <kne...@gmail.com>:
> Opá! Olá...Olá, Kelligton! Tudo bem com vc?
>
> Já deu uma olhada nas funções QueryPerformanceFrequency(); e
> QueryPerformanceCounter();
> Não tenho certeza se elas são c ou c++... Faz um tempo q as usei.
Bem-vindo à lista! Vc é o primeiro participante externo, fora da
nossa turma de GPU! Espero que seja o primeiro de muitos!
Como vc descobriu nosso site e nossa lista?
Pesquisei essas funções que você sugeriu, mas elas só funci-
onam com Windows... Vc tem alguma sugestão para Linux?
Abraço!
#include <sys/time.h>
struct timeval startTime, endTime;
struct timezone tz;
gettimeofday(&startTime, &tz);
gettimeofday(&endTime, &tz);
startTime.tv_sec // number of seconds since some epoch
startTime.tv_usec // number of microseconds since last second.
Folks,
Eis a solução que achei para medir o tempo: uso as mesmas funções
que uso em programas do CUDA! hehehe Como não pensei nisso an-
tes? Em suma, meu programa em C é um programa CUDA, com a di-
ferença que nenhum kernel será executado, só funções em C. :P
É uma solução meio corinthiana, mas uma vez que o sou, beleza! :o)
Meu programa em C fica assim, então:
# include <cutil.h>
int main() {
unsigned int timer = 0;
CUT_SAFE_CALL(cutCreateTimer(&timer));
CUT_SAFE_CALL(cutStartTimer(timer));
// blablabla
printf("Tempo decorrido: %f \n",cutGetTimerValue(timer));
CUT_SAFE_CALL(cutDeleteTimer(timer));
}
Fácil, né?
A vantagem é que quando eu for comparar o tempo de execução desse
programa com um programa em CUDA, terei certeza de que a compara-
ção vai ser justa porque é o mesmo contador de tempo.
A desvantagem é que, além de salvar esse código C como .cu, tenho
que usar um "make" só para poder compilá-lo...
Agora só falta descobrir porque meu programa C está mais rápido que o
programa pra GPU... :'( Mas isso é outra estória.
Obrigado a todos pela ajuda!
O pior é que não... Estou rodando na placa, mesmo. O programa em C
leva em torno de 0,05 milissegundos, enquanto o da GPU leva em torno
de 30 milissegundos (é isso mesmo, 600 vezes mais rápido).
O Prof. Luiz Otávio disse que consigo um desempenho cerca de 600 ve-
zes melhor se eu passar minhas variáveis pra memória compartilhada,
em vez de usar a memória global como uso hoje. Talvez esse seja o pro-
blema. Assim que eu descobrir como se faz isso vou experimentar.
E seu problema com o emulador, resolveu?
Abraço!
2008/12/17 Kelligton Neves <kne...@gmail.com>:
> lol...O pior é que não... Estou rodando na placa, mesmo. O programa em C
>
> Boa solução!
>
> O programa em C está mais rápido!? Está emulando?
leva em torno de 0,05 milissegundos, enquanto o da GPU leva em torno
de 30 milissegundos (é isso mesmo, 600 vezes mais rápido).
O Prof. Luiz Otávio disse que consigo um desempenho cerca de 600 ve-
zes melhor se eu passar minhas variáveis pra memória compartilhada,
em vez de usar a memória global como uso hoje. Talvez esse seja o pro-
blema. Assim que eu descobrir como se faz isso vou experimentar.
E seu problema com o emulador, resolveu?
Folks,
Era isso mesmo! heheheheh Passei somente dois vetores pra memória
compartilhada, e a GPU passou de 600 vezes mais lenta para 3 vezes
mais rápida. :) Acho que isso prova o tal custo de comunicação da GPU,
que é algo a ser evitado.