죄송한데요 gettimeofday()쓰는법좀 알려주세요

geneven의 이미지

매뉴얼 페이지랑 설명서봐도 이해가 안가요,, 초보거든요..
어떤 함수가 끝났을때 걸린 시간을 알고 싶거든요?
근데 타임함수는 초밖에 안나와서요.. 소수점자리까지 출력하고 싶은데요,..
어떻게 해야하죠?
struct timeval begin, end;

gettimeofday(&begin, NULL);

xxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxx

gettimeofday(&end, NULL);

seed의 이미지

쉬워요... *.*
그냥 이렇게 쓰면 t1.tv_sec 에 초, t1.tv_usec 에 마이크로초가 채워지죠
gettimeofday( &t1 , NULL );

보통 어떤 루틴의 경과시간을 잴때 많이 사용하죠...
struct timeval t1 , t2 ;

gettimeofday( &t1 , NULL );
// routine..............................
gettimeofday( &t2 , NULL );

EX)

struct timeval diff_(struct timeval t1 , struct timeval t2 )
{
int sdiff = t2.tv_sec - t1.tv_sec ;
int udiff = t2.tv_usec - t1.tv_usec ;
struct timeval result ;

result.tv_sec = sdiff ;

if( udiff >= 0 )
result.tv_usec = udiff ;
else
{
result.tv_sec = result.tv_sec -1 ;
result.tv_usec = 1000000 + udiff ;
}

return result ;
}

geneven의 이미지

어떤 함수를 100번 실행하고 평균값을 내야하는데요..
한번 실행할때 마다 시간을 재서 더한다음 100으로 나누는거거든요?

timeval형 자료를 소수점이 있는 float형으로 변환시켜주는 함수는 없나요?
그래야 더해서 계산할수 있을꺼 같은데요..

ksil의 이미지

단순히 평균값만을 이용하시려면

그냥

gettimeofday( &start , NULL ); 
for(i=0;i<100;i++)
{
    // routine.............................. 
}
gettimeofday( &end , NULL ); 

하시면 될것 같은데요 ?

아니면 다음과 같은 함수를 만드셔서 그 결과값을 더하셔도 될테지요
(그러나 이 경우 오버 플로우도 생각하셔야 할것입니다)

아래 함수는 해상도가 밀리 단위입니다.

long CalculateTime(struct timeval *time1, struct timeval *time2) // in mili time1 - time2
{
	int nReturn=0;

	nReturn=(time1->tv_sec- time2->tv_sec)*1000;
	nReturn=nReturn+(time1->tv_usec-time2->tv_usec)/1000;
	return nReturn;
}
[/code]
cedar의 이미지

geneven wrote:

어떤 함수를 100번 실행하고 평균값을 내야하는데요..
한번 실행할때 마다 시간을 재서 더한다음 100으로 나누는거거든요?

왜 굳이 100번만 실행하죠?
한 100만번 쯤 실행하면
ANSI C time() 함수로도 충분히 정확히 측정 가능하잖아요?
realian의 이미지

struct timeval t1 , struct timeval t2 두개의 구조체가 있다면..
t1.tv_sec는 초단위, t1.tv_usec는 마이크로세컨(10^-6) 단위니까..

float time1;
time1 = t1.tv_sec + t1.tv_usec*0.000001;

float time2;
time2 = t2.tv_sec + t2.tv_usec*0.000001;

하시면 될거 같군요.. 정확하게 하려면 casting 같은거 해주면 좋겠지만..
굳이 함수까지야.. 쓸거없이 저렇게 처리하시면 되겠네요..

ksil 님의 방법대로 먼저 값을 뺀 다음에 곱하는게.. 곱셈을 단축시켜서
더 빠른 방법일거 같네요.. :)

..........No Sig.........|
-------------------+

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.