가능한 중복을 : 난 시간이 일부 C++ 코드에서 문장의 특정 설정에 의해 지출 얻을 수있는 방법
How to Calculate Execution Time of a Code Snippet in C++문 실행 타이밍 - C++
?
리눅스에서는 time
유틸리티와 같지만 일부 특수한 경우에만 유용합니다.
가능한 중복을 : 난 시간이 일부 C++ 코드에서 문장의 특정 설정에 의해 지출 얻을 수있는 방법
How to Calculate Execution Time of a Code Snippet in C++문 실행 타이밍 - C++
?
리눅스에서는 time
유틸리티와 같지만 일부 특수한 경우에만 유용합니다.
당신은 GNU를 사용하는 경우의 gcc/g ++ :
이 --coverage으로 재 컴파일 시도 프로그램을 다시 실행하고 gprof은 유틸리티 결과 파일을 분석합니다. 함수의 실행 시간도 인쇄합니다.
편집 : --coverage가 아닌 -pg로 컴파일하고 링크하십시오. --coverage는 gcov (실제로 실행되는 행)입니다.
여기에 윈도우와 리눅스에서 잘 작동 코드의 매우 미세한 조각,이다 : "시작 시간"과 같은 https://stackoverflow.com/a/1861337/1483826
이 그것을 사용하여 실행하고 결과를 저장하려면 작업 후 - "종료 시간". 원하는 정확도로 빼십시오.
다른 대답에 대한 단순한 링크 자체가 답이 아닙니다. "깃발"기능을 사용하여 중복 된 질문을 보내주십시오. – Mat
@Mat : mrowa가 아직 깃발을 쌓을 수있을만큼 충분한 평판을 가지고 있는지 확실하지 않습니다. –
@Mat : 나는 기원을 신용하려고합니다. 이것이 복사 및 붙여 넣기 대신 스 니펫에 연결하는 이유입니다. 가능한 복제본에 대해서는 꽤 옳다. (그리고 예, 15 기자부터 지금 기권하고 있습니다) –
간단한 타이밍 시스템을 작성해야합니다. C++에는 내장 된 방법이 없습니다.
#include <sys/time.h>
class Timer
{
private:
struct timeval start_t;
public:
double start() { gettimeofday(&start_t, NULL); }
double get_ms() {
struct timeval now;
gettimeofday(&now, NULL);
return (now.tv_usec-start_t.tv_usec)/(double)1000.0 +
(now.tv_sec-start_t.tv_sec)*(double)1000.0;
}
double get_ms_reset() {
double res = get_ms();
reset();
return res;
}
Timer() { start(); }
};
int main()
{
Timer t();
double used_ms;
// run slow code..
used_ms = t.get_ms_reset();
// run slow code..
used_ms += t.get_ms_reset();
return 0;
}
측정 자체가 런타임에 상당한 영향을 줄 수 있습니다.
#inclide <ctime>
헤더를 사용할 수 있습니다. It's functions and their uses are here. 코드가 소비하는 시간을보고 싶다고합시다. 해당 부분이 시작되기 직전에 현재 시간을 가져야하고 해당 부분이 끝난 직후에 현재 시간을 가져야합니다. 그런 다음이 두 번 차이를 가져 오십시오. Readymade 함수는이 모든 작업을 수행하기 위해 ctime
내에 선언됩니다. 위의 링크를 체크 아웃하십시오.
std::chrono
또는 boost::chrono
(컴파일러가 C++ 11을 지원하지 않는 경우)을이 용도로 사용할 수 있습니다.
std::chrono::high_resolution_clock::time_point start(
std::chrono::high_resolution_clock::now());
....
std::cout << (std::chrono::high_resolution_clock::now() - start);
'high_resolution_timer'가 아니라'high_resolution_clock'입니다 –
@BenoitBlanchon 실수로 미안 해요. 내 대답을 편집했습니다. – BigBoss
스스로 시간을 측정해야합니다. 작은 스톱워치 클래스 I는 일반적으로 다음과 같습니다를 사용하고이 이름을 가진 함수가 이미 표준 라이브러리에 존재하기 때문에
#include <chrono>
#include <iostream>
template <typename Clock = std::chrono::steady_clock>
class stopwatch
{
typename Clock::time_point last_;
public:
stopwatch()
: last_(Clock::now())
{}
void reset()
{
*this = stopwatch();
}
typename Clock::duration elapsed() const
{
return Clock::now() - last_;
}
typename Clock::duration tick()
{
auto now = Clock::now();
auto elapsed = now - last_;
last_ = now;
return elapsed;
}
};
template <typename T, typename Rep, typename Period>
T duration_cast(const std::chrono::duration<Rep, Period>& duration)
{
return duration.count() * static_cast<T>(Period::num)/static_cast<T>(Period::den);
}
int main()
{
stopwatch<> sw;
// ...
std::cout << "Elapsed: " << duration_cast<double>(sw.elapsed()) << '\n';
}
duration_cast은 함수에 대한 최적의 이름이 될 수 없습니다. 자유롭게 더 나은 것을 생각해 내십시오. ;)
편집 : chrono는 C++ 11입니다.
당신은 표준 라이브러리에 <chrono>
헤더를 사용할 수 있습니다
#include <chrono>
#include <iostream>
unsigned long long fib(unsigned long long n) {
return (0==n || 1==n) ? 1 : fib(n-1) + fib(n-2);
}
int main() {
unsigned long long n = 0;
while (true) {
auto start = std::chrono::high_resolution_clock::now();
fib(++n);
auto finish = std::chrono::high_resolution_clock::now();
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>(finish-start);
std::cout << microseconds.count() << "µs\n";
if (microseconds > std::chrono::seconds(1))
break;
}
}
가능한 중복 : How to Calculate Execution Time of a Code Snippet in C++
당신은 (http://www.cplusplus.com/reference/clibrary/ctime/에서 자세히 설명)을 time.h의 C 표준 라이브러리를 사용할 수 있습니다.
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
clock_t t1,t2;
t1=clock();
//code goes here
t2=clock();
float diff = ((float)t2-(float)t1)/CLOCKS_PER_SEC;
cout << "Running time: " << diff << endl;
return 0;
}
당신은이 작업을 수행 할 수 있습니다 :
int start_s=clock();
// the code you wish to time goes here
int stop_s=clock();
cout << "time: " << (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000 << endl;
이것은 좋지 않습니다. 초당 시계 수를 계산하면 시계 속도가 변경 될 때 차이가 발생할 것입니다. 그 기술은 2005 년부터 존재했습니다. 위키피디아에 따르면 : https://en.wikipedia.org/wiki/SpeedStep 나는 이것을 downvote해야합니다. – Joeppie
다음, 문 시작 실행 직전에 시간을 절약 할 그들이 실행하자, 다시 시간을 얻을 첫 번째를 빼지 다음 프로그램은 당신이 원하는 것을 그것으로부터의 시간. –