C++에서 코드의 일부 실행 시간 (MS)은 어떻게 계산합니까?C++ 코드의 일부 실행 시간
답변
휴대용 코드로 수행 할 수있는 최선의 작업은 clock()
으로 시간을 맞추는 것입니다.
clock_t start = clock();
// code to time goes here
clock_t stop = clock();
double seconds = double(stop-start)/CLOCKS_PER_SEC;
C++ 11은 작업이 간단하고 청소 할 수 time_point
및 duration
하기위한 클래스와 <chrono>
라는 이름의 새로운 헤더를 추가합니다. 그러나 이들 중 어느 것도 밀리 초 레벨 정확도 (또는 정밀도)를 보장하지 않습니다. 새로운 클래스에는 나노초 범위의 지속 시간 동안 typedef가 있지만 실제 결과가 정확할지 여부는 보장되지 않습니다 (그러나 가장 일반적인 OSes로는 대답이 보통 "not"입니다).
나는 "최고"라고 앉지 않았다. 'clock()'이 다소 낮은 해상도를 가질 수 있기 때문에 OS의 특정 기능을 # ifdef하는 것이 더 좋을 것입니다. –
OS 정의 함수가'#ifdef '하는 것은 이식성이없는 코드입니다. 'clock '의 해상도는 다양하지만 확실히 낮을 수 있습니다. 이식성있는 코드의 경우 여전히 최선의 방법을 사용할 수 있습니다. 그것들은이 목적을 위해 의도 된 것은 아니지만 어쨌든이 용도로 사용할 수 있습니다. –
그래도 실제로는 잘 작동하고 작은 시간 범위를 측정 할 수있는 더 나은 기능을 제공하는 코드가 생성됩니다. 하지만 그렇습니다. 비표준이므로 기술적으로 이식 가능하지 않습니다. –
대부분의 시스템은 고성능 타이밍 메커니즘을 지원합니다. 당신이 clock_getres() and clock_gettime()
을 사용할 수 있습니다 유닉스 계열의 시스템에서
: 윈도우에서 당신은 고성능 타이머 API를 사용할 수 있습니다.
코드를 사용하는 방법을 알아낼 수 있어야합니다.
여기에 C++ (11 아님)을 사용하지만 많은 라이브러리가 더 정교한 솔루션을 가지고있을 수 있습니다. 코드에는 Qt가 필요하지만 쉽게 수행 할 수 있습니다. 운영 체제에 따라 CLOCK_MONOTONIC을 교체해야 할 수도 있습니다.
#ifndef PROFILER_H
#define PROFILER_H
#include <sys/time.h>
#include <QString>
class Profiler
{
public:
Profiler(QString const& name);
long measure() const;
long measureNs() const;
double measureMs() const;
double measureS() const;
void printNs() const;
void printMs() const;
void printS() const;
private:
QString mName;
timespec mTime;
};
#endif // PROFILER_H
#include "profiler.h"
#include <QDebug>
#include <assert.h>
#include <iostream>
Profiler::Profiler(QString const& name):mName(name){
clock_gettime(CLOCK_MONOTONIC, &mTime); // Works on Linux
}
long int Profiler::measureNs() const{
timespec end;
clock_gettime(CLOCK_MONOTONIC, &end); // Works on Linux
long int diff = (end.tv_sec-mTime.tv_sec) * 1000000000 + (end.tv_nsec - mTime.tv_nsec);
assert(diff>0);
return diff;
}
double Profiler::measureMs() const{
return measureNs()/1000000.0;
}
double Profiler::measureS() const{
return measureMs()/1000.0;
}
void Profiler::printNs() const{
qDebug() << mName << "Time elapsed:" << measureNs() << "ns";
}
void Profiler::printMs() const{
qDebug() << mName << "Time elapsed:" << measureMs() << "ms";
}
void Profiler::printS() const{
qDebug() << mName << "Time elapsed:" << measureS() << "S";
}
사용법 :
Profiler pro("Tag you want");
function();
pro.printMs();
- 1. 8086 어셈블리 : 코드의 실행 시간 결정?
- 2. C 언어로 실행 시간
- 3. 찾기 C++ 실행 시간
- 4. C++ 스레드 실행 시간
- 5. C#에서 foreach를 사용하여 일부 실행 시간 오류가 발생 했습니까?
- 6. 아래 코드의 시간 복잡도
- 7. VB6 코드의 C# 어셈블리 사용. 일부 문제
- 8. C# 코드의 호기심 비트 - 일부 설명
- 9. 코드의 일부 오류 - libpcap
- 10. C++ 계산 실행 시간 오류
- 11. C++ 컴파일 시간 함수 실행
- 12. C++ 빠른 정렬 실행 시간
- 13. C++ : 코드 실행 시간 찾기 문제
- 14. C# 코드 크기 및 코드 실행 시간
- 15. 일부 재사용 가능한 코드의 아키텍처
- 16. IronPython에서 asp.net 코드의 실행 속도가 처음이고 두 번째 시간 차이가
- 17. 실행 시간 증가율이란?이 코드의 큰 점은 무엇입니까?
- 18. 어셈블리 코드의 DOS 실행
- 19. Android JNI C/C++ 실행 코드의 현재 작업 디렉토리는 무엇입니까?
- 20. 예상 실행 시간 대 최악의 실행 시간
- 21. C# - 독립 실행 형 ContextMenuStrip - 일부 좌절감
- 22. 관리자 권한이있는 C# 프로그램의 일부 실행
- 23. C++ 코드의 런타임 측정?
- 24. 어셈블리 코드의 시간 복잡도 분석
- 25. C# 코드의 GUI # C :
- 26. 일부 C 코드의 일부로 Google 번역을 사용하고 싶습니다.
- 27. 최악의 경우 실행 시간 추적
- 28. 코드의 C# 자동 테스트
- 29. Intel 듀얼 코어 Linux에서 C 코드의 섹션 실행 시간 (가능한 경우 나노초)을 찾는 방법은 무엇입니까?
- 30. PHP의 최대 실행 시간
하나는 프로파일 러를 사용하거나 관심있는 코드 섹션 후/전에 타이머 기능에 호출을 삽입합니다. 연구 노력을 보이지 않기 위해 –
-1. –
''은 C++ 11을 사용하면 잘 작동합니다. 한번 사용해 본 적이 없다면 이해하기가 약간 어려울 수도 있지만 일단 나 가면 나쁘지 않습니다. –
chris