在C ++中测量函数的执行时间

我想知道我的C ++程序在Linux上执行某个函数需要多less时间。 之后,我想做一个速度比较。 我看到了几个时间的function,但从这个提升结束了。 计时:

process_user_cpu_clock, captures user-CPU time spent by the current process 

现在,我不清楚,如果我使用上述function,我会得到CPU花费在该function的唯一时间?

其次,我找不到使用上述function的例子。 任何人都可以帮助我如何使用上述function?

PS:现在,我正在使用std::chrono::system_clock::now()来获得时间,但是这给了我不同的结果,因为每次CPU负载不同。

在C ++ 11中这是一个非常容易使用的方法。 你必须使用<chrono>标题中的std::chrono::high_resolution_clock

像这样使用它:

 #include <iostream> #include <chrono> using namespace std; using namespace std::chrono; void function() { long long number = 0; for( long long i = 0; i != 2000000; ++i ) { number += 5; } } int main() { high_resolution_clock::time_point t1 = high_resolution_clock::now(); function(); high_resolution_clock::time_point t2 = high_resolution_clock::now(); auto duration = duration_cast<microseconds>( t2 - t1 ).count(); cout << duration; return 0; } 

这将测量function的持续时间。

注意:不要求总是获得相同的输出,因为您的计算机的CPU可能会less或多用于您的计算机上运行的其他进程。 正如你要解决math练习一样,你的思维可能或多或less集中在一起,所以你会在不同的时间解决这个问题。 在人脑中,我们可以记住math问题的解决方法,但对于一台计算机来说,同样的过程总是新的东西,所以,正如我所说的那样,不需要总是得到相同的结果!

这是一个函数,它将测量任何作为parameter passing的函数的执行时间:

 #include <chrono> #include <utility> typedef std::chrono::high_resolution_clock::time_point TimeVar; #define duration(a) std::chrono::duration_cast<std::chrono::nanoseconds>(a).count() #define timeNow() std::chrono::high_resolution_clock::now() template<typename F, typename... Args> double funcTime(F func, Args&&... args){ TimeVar t1=timeNow(); func(std::forward<Args>(args)...); return duration(timeNow()-t1); } 

用法示例:

 #include <iostream> #include <algorithm> typedef std::string String; //first test function doing something int countCharInString(String s, char delim){ int count=0; String::size_type pos = s.find_first_of(delim); while ((pos = s.find_first_of(delim, pos)) != String::npos){ count++;pos++; } return count; } //second test function doing the same thing in different way int countWithAlgorithm(String s, char delim){ return std::count(s.begin(),s.end(),delim); } int main(){ std::cout<<"norm: "<<funcTime(countCharInString,"precision=10",'=')<<"\n"; std::cout<<"algo: "<<funcTime(countWithAlgorithm,"precision=10",'='); return 0; } 

输出:

 norm: 15555 algo: 2976 

简单的程序来查找一个函数执行时间。

 #include <iostream> #include <ctime> // time_t #include <cstdio> void function() { for(long int i=0;i<1000000000;i++) { // do nothing } } int main() { time_t begin,end; // time_t is a datatype to store time values. time (&begin); // note time before execution function(); time (&end); // note time after execution double difference = difftime (end,begin); printf ("time taken for function() %.2lf seconds.\n", difference ); return 0; }