gpt4 book ai didi

c++ - 为了准确地对其进行基准测试,我应该使一个大函数成为原子吗?

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

我想知道执行某些代码需要多长时间。我正在执行的代码处理 openCV 矩阵和操作。该代码将在 Linux 上的 ROS 环境中运行。我不希望代码在基准测试期间被系统函数中断。

查看this post关于benchmarking,回答者说结果的粒度是15ms。我想做得比这更好,所以我正在考虑使函数成为原子函数(仅用于基准测试目的)。由于某些原因,我不确定这是否是个好主意,主要是因为我对处理器架构没有深入的了解。


void atomic_wrapper_function(const object& A, const object& B) {
static unsigned long running_sum = 0;
unsigned long before, after;
before = GetTimeMs64();
function_to_benchmark(A, B);
after = GetTimeMs64();
running_sum += (after - before);
}

我尝试进行基准测试的函数不是短函数。

  1. 结果会准确吗?为了标记时间,我正在考虑使用 this function by Andreas Bonini .

  2. 它会不会对我的电脑造成影响?说我迷信,但我认为问这个问题很好。


我在 Linux 内核上使用 C++11。

最佳答案

C++11 原子不是 RTOS 方式中的原子,它们只是在编写多线程代码时提供保证。 Linux 不是 RTOS。您的代码可以而且将始终被中断。虽然有一些方法可以减轻影响,但必须深入研究 Linux。

例如,您可以配置 niceness减少被其他用户空间程序打断。您可以告诉内核在哪个 CPU 内核上处理中断,然后将您的程序固定到不同的 cpu。您可以提高计时器精度等,但是:

还有许多其他因素可能会改变您的算法的运行时间,例如多层 CPU 缓存、CPU 的省电功能等...如果您真的只对非基准函数的执行时间感兴趣- 硬实时问题,只需多次运行算法并获得执行时间的统计估计会更容易。

  1. 在基准测试和平均期间调用该函数十亿次。或者
  2. 将函数的基准测试次数从 1 次提高到 10 亿次。您感兴趣的执行时间度量应该线性扩展。然后进行某种线性回归以获得对此的估计。

或者:你说你想知道算法对你的程序总运行时间有什么影响?使用分析工具,如 callgrind (可集成到 QtCreator 中)。

关于c++ - 为了准确地对其进行基准测试,我应该使一个大函数成为原子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150311/

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