gpt4 book ai didi

c++ - 测量 C++ 中的执行时间 : clock() and clock_gettime() give absolutely different results

转载 作者:行者123 更新时间:2023-11-30 02:00:00 26 4
gpt4 key购买 nike

我正在尝试测量我的代码性能(这是 OpenCL 内核的执行),我真的需要了解加速。我尝试使用 clock() 和 clock_gettime() 函数。

在第一种情况下,我的代码简单明了,而且测量正确:

    struct timespec start_r, start_m, stop_r, stop_m;
double realtime, monotonic;

time_t start2 = clock();

if(clock_gettime(CLOCK_REALTIME, &start_r) == -1) {
cout << "clock realtime error!" << endl;
}

if(clock_gettime(CLOCK_MONOTONIC, &start_m) == -1) {
cout << "clock realtime error!" << endl;
}

double res = 0.0;
for(unsigned long i = 0; i < total; i++) {
res += data[i];
}

cout << "res = " << res << endl;

time_t end2 = clock();
if(clock_gettime(CLOCK_REALTIME, &stop_r) == -1) {
cout << "clock realtime error!" << endl;
}

if(clock_gettime(CLOCK_MONOTONIC, &stop_m) == -1) {
cout << "clock realtime error!" << endl;
}

cout << "Time clock() = " << (end2 - start2)/(double)CLOCKS_PER_SEC << endl;

realtime = (stop_r.tv_sec - start_r.tv_sec) + (double)(stop_r.tv_nsec - start_r.tv_nsec) / (double)BILLION;
monotonic = (stop_m.tv_sec - start_m.tv_sec) + (double)(stop_m.tv_nsec - start_m.tv_nsec) / (double)BILLION;

cout << "Realtime = " << realtime << endl << "Monotonic = " << monotonic << endl;

它给出了可以理解的结果 - 所有三个结果几乎相同。

当谈到测量 OpenCL 内核的执行时间时,我做了完全相同的事情,但我得到的结果很糟糕:

Time = 0.04
Realtime = 0.26113
Monotonic = 0.26113

你能告诉我它有什么问题吗?如果这是测量 OpenCL 内核性能的常见问题,您能否建议最好的测量方法?谢谢!

最佳答案

如果您可以访问 C++11 编译器,请考虑改用 std::chrono:http://en.cppreference.com/w/cpp/chrono

新的 C++ 标准内置了三种时钟类型:

  1. std::steady_clock
  2. std::system_clock
  3. std::high_resolution_clock

此外,该库经过精心设计,可以处理不同级别的粒度,无论您需要微秒精度还是其他精度。对于我过去编写的软件(大型工业工程类模拟),我一直依赖 std::steady_clock 来完成我所有的计时,没有任何提示:-)。

关于c++ - 测量 C++ 中的执行时间 : clock() and clock_gettime() give absolutely different results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com