함수 소요시간 측정 : clock_gettime
기능이 얼마나 걸리는지 측정하려고 합니다.
문제가 있습니다. 코드를 인쇄할 때마다 정확하게 표시하고 부동 소수점을 사용하려고 합니다.%lf두 가지 대답 중 하나를 들었습니다.1.000... 아니면0.000... 이로 인해 내 코드가 올바른지 의문이 듭니다.
#define BILLION 1000000000L;
// Calculate time taken by a request
struct timespec requestStart, requestEnd;
clock_gettime(CLOCK_REALTIME, &requestStart);
function_call();
clock_gettime(CLOCK_REALTIME, &requestEnd);
// Calculate time it took
double accum = ( requestEnd.tv_sec - requestStart.tv_sec )
+ ( requestEnd.tv_nsec - requestStart.tv_nsec )
/ BILLION;
printf( "%lf\n", accum );
이 코드의 대부분은 제가 만든 것이 아닙니다.이 예제 페이지에는 다음의 용도를 설명하는 코드가 있습니다.
누구든지 제게 무엇이 잘못되었는지, 또는 왜 제가 단지 받는 것인지 알려주실 수 있나요?int가치관을 말씀해 주시겠습니까?
정수를 정수로 나누면 정수가 됩니다.시도해 보기:
#define BILLION 1E9
그리고 줄 끝에 세미콜론을 사용하지 마세요.#define는 문장이 아닌 전처리기 지시문이며 세미콜론을 포함하면 다음과 같습니다.BILLION로 정의됨1000000000L;, 대부분의 상황에서 사용하려고 하면 깨질 겁니다표현의 맨 끝과 괄호 밖에서 사용했기 때문에 운이 좋았습니다.
( requestEnd.tv_nsec - requestStart.tv_nsec )는 정수형이며, 항상 다음보다 작습니다.BILLION, 그래서 정수 산술에서 하나를 다른 하나로 나누는 결과는 항상0. 뺄셈의 결과를 예를 들어 다음과 같이 캐스팅해야 합니다.double분할하기 전에
(requestEnd.tv _nsec - requestStart.tv _nsec)는 음수일 수 있으며, 이 경우 tv_sec 차이에서 1초를 빼고 tv_nsec 차이에 10억을 더해야 합니다.
질문이 오래 전에 게시되었다는 것은 알지만, 코드 샘플에서처럼 경과된 시간을 초 단위가 아닌 나노초(또는 밀리초) 단위로 "변환"해야 한다는 답변을 아직도 찾을 수 없습니다.
아이디어를 설명하기 위한 샘플 코드 조각:
long long accum = ( requestEnd.tv_nsec - requestStart.tv_nsec )
+ ( requestEnd.tv_sec - requestStart.tv_sec ) * BILLION;
이렇게 하면 부동 소수점 연산을 피할 수 있습니다. 일부 플랫폼에서는 무겁게 느껴질 수 있습니다.
언급URL : https://stackoverflow.com/questions/3946842/measuring-time-taken-by-a-function-clock-gettime
'programing' 카테고리의 다른 글
| 각도 물질 대화상자에서 부모 구성요소로 데이터를 전달하는 방법? (0) | 2023.09.26 |
|---|---|
| MariaDB: 권한이 없는 'root' 및 ' 둘 다(접근 거부 1044 및 1227) (0) | 2023.09.26 |
| 병합 커밋에 대한 차이점을 "깃"으로 보여주는 방법은? (0) | 2023.09.21 |
| Jquery를 사용하여 부모 디바의 ID 찾기 (0) | 2023.09.21 |
| 위도와 경도에서 완전한 주소를 얻는 방법은? (0) | 2023.09.21 |