gpt4 book ai didi

c++ - `time` 基准测试实用程序 : What does `user` + `sys` = 0 actually mean?

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:25 25 4
gpt4 key购买 nike

我觉得 Why is this C++ program so incredibly fast? 中缺少一个比较讨论是 Fortran。我翻译了Sven Hager's C++ 基准测试:

#include <iostream>
#include <cstdlib>
#include <cstdint>

int main(int argc, char* argv[]) {
uint32_t s = 0;
uint32_t outer = atoi(argv[1]);
uint32_t inner = atoi(argv[2]);
for (uint32_t i = 0; i < outer; ++i) {
for (uint32_t j = 0; j < inner; ++j)
++s;
s -= inner;
}
std::cout << s << std::endl;
return 0;
}

与其 Fortran 等效:

PROGRAM Benchmark
IMPLICIT NONE
INTEGER :: i,j,s
INTEGER, PARAMETER :: outer=1000,inner=1000000
s = 0
DO i = 1, outer
DO j = 1, inner
s = s + 1
END DO
s = s - inner
END DO
PRINT *, s
END PROGRAM Benchmark

并使用 gfortran -g -std=f2008 -Wall -Wextra -O3 Benchmark.f08 编译了一个完全优化的版本。我希望获得与 Herr Hager 相似的表现:

real    0m0.003s
user 0m0.002s
sys 0m0.002s

我得到的结果有点令人费解:

real    0m0.003s
user 0m0.000s
sys 0m0.000s

更深入地挖掘,我在 What do 'real', 'user' and 'sys' mean in the output of time(1)? 上找到了这个讨论.他们在其中说 user+sys 给出了进程使用的实际 CPU 时间。 那么,user+sys 为零实际上意味着什么?

最佳答案

在这种情况下,“零”表示“小于一毫秒”(或半毫秒,取决于它的舍入方式),因为这是 time 给出的时间分辨率。 .

它仅适用于测量运行时间明显超过 1 毫秒的程序。

Fortran 版本快得多的原因可能是因为循环边界是硬编码常量,因此整个计算可以在编译时完成,只剩下PRINT 0。在运行时做。

关于c++ - `time` 基准测试实用程序 : What does `user` + `sys` = 0 actually mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955574/

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