clock/sec 를 세려고 하는데 이 방법이 맞나요??
글쓴이: tyolee83 / 작성시간: 수, 2007/10/31 - 1:27오전
#include <time.h> clock_t start, end; double cpu_time_used; start = clock(); ... /* Do the work. */ end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
이것이 구글링한 코드이자 제가 생각한 초당 클럭수 세는 방법인데요
(출처 : http://www.gnu.org/software/libc/manual/html_node/CPU-Time.html)
double형이므로 printf에서 %lf로 찍어보면
1.5 0.8 이런 식의 숫자로 찍히게 됩니다.
그렇다면 이게 초당 클럭이 1.5회 뛰었다는 얘기인가요? 그건 아닐거 같아서요...
프로그램의 성능을 수행시간(몇초 걸렸나)으로 재는 것은 스케쥴링 등의 영향이 있어서
cpu clock time으로 성능비교를 하려고 하는데
숫자가 이런식으로 나오는게 좀 이상하네요...
적절한 답변좀 부탁드립니다.
감사합니다.
Forums:
올리신 웹문서를
올리신 웹문서를 보면 해당 코드는 어떤 작업에 대한 프로세스 타임을 구하는 예제입니다.
you call the clock function at the beginning and end of the interval you want to time, subtract the values, and then divide by CLOCKS_PER_SEC (the number of clock ticks per second) to get processor time, like this:
만약 단순히 클럭수만 보시려면, CLOCKS_PER_SEC 로 나눌 필요가 없습니다.
그런데 이 clock_t 하고 CLOCKS_PER_SEC 이 Implementation dependent 하기 때문에 사용하실때 주의가 필요합니다.
자세한 내용은 아래 사이트를 참고하세요.
http://www.thescripts.com/forum/thread214814.html
마지막으로 성능비교는 걸린 시간으로 하기도 합니다.
따라서 리눅스에서는 time이라는 명령어를 사용하셔도 되고, 프로그램에서는 gettimeofday()사용하신후, 적당히 계산하심 될겁니다. ;-)
Linux rules!!!
Linux rules!!!
제가 원한 것은 "초당
제가 원한 것은 "초당 클럭수" 입니다. 그러니까 CLOCKS_PER_SEC으로 나누는게 맞는거 같은데
이게 processor time을 말하는 것인가요??
위에 알려주신 문서를 읽어보긴 했는데, 아직도 의미가 와닿지 않는군요 ㅠ
==========================
Toward Fully Understanding
//TODO
초당 클럭수가 바로
초당 클럭수가 바로 CLOCKS_PER_SEC이라니까요.
클럭수를 CLOCKS_PER_SEC으로 나누면 시간(초단위)이 되는 거고.
그리고 printf에서 double을 출력하려면 %f를 써야 합니다.
%lf는 long double에 쓰는 거예요.
댓글 달기