我正在尝试比较GPU与CPU的性能。对于NVIDIA GPU,我一直在使用这些cudaEvent_t类型来获得非常精确的时间。
cudaEvent_t
对于CPU,我一直在使用以下代码:
// Timers clock_t start, stop; float elapsedTime = 0; // Capture the start time start = clock(); // Do something here ....... // Capture the stop time stop = clock(); // Retrieve time elapsed in milliseconds elapsedTime = (float)(stop - start) / (float)CLOCKS_PER_SEC * 1000.0f;
显然,这段代码只有在您数秒的情况下才是好的。而且,结果有时出来很奇怪。
有谁知道在Linux中创建高分辨率计时器的某种方法?
签出clock_gettime,这是高分辨率计时器的POSIX接口。
clock_gettime
如果已经阅读手册页,留给你想知道的区别CLOCK_REALTIME和CLOCK_MONOTONIC,看到CLOCK_REALTIME和CLOCK_MONOTONIC之间的区别?
CLOCK_REALTIME
CLOCK_MONOTONIC
有关完整的示例,请参见以下页面:http : //www.guyrutenberg.com/2007/09/22/profiling-code- using-clock_gettime/
#include <iostream> #include <time.h> using namespace std; timespec diff(timespec start, timespec end); int main() { timespec time1, time2; int temp; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); for (int i = 0; i< 242000000; i++) temp+=temp; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl; return 0; } timespec diff(timespec start, timespec end) { timespec temp; if ((end.tv_nsec-start.tv_nsec)<0) { temp.tv_sec = end.tv_sec-start.tv_sec-1; temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; } else { temp.tv_sec = end.tv_sec-start.tv_sec; temp.tv_nsec = end.tv_nsec-start.tv_nsec; } return temp; }