为什么即使在孤立的内核上,c++ 函数的执行时间每次也有很大差异?

问题描述

我写了一个简单的c++程序来测量两个函数的执行时间(重复100万次,并测量总时间。),以便知道哪个更有效。我理解执行时间可能会有所不同,但结果显示执行时间差异很大。

我使用了一台安装了 centos 7 的机器,并且有几个独立的 cpu 内核。我认为将任务放在隔离的核心上应该会使测量更准确,因为没有其他线程可以使用该核心。

我还注意到第一次运行总是需要更长的时间,我认为这是由于 cpu 缓存造成的。所以我重复了这个测量 20 次。代码如下所示。

for (n = 0; n < 20; n++) {
  {
     Timer t('fun1');  // measure elapsed time when goes out of scope
     for (m = 0; m < 1000000; m++) {
       fun1(...)
     }
  }
  {
     Timer t('fun2');  // measure elapsed time when goes out of scope
     for (m = 0; m < 1000000; m++) {
       fun2(...)
     }
  }
}

我使用 taskset -c 8 将编译二进制文件放在一个孤立的核心上运行。结果显示func1和func2测得的执行时间相差很大,我预计在初始预热后执行时间会稳定。

对此有什么解释吗?谢谢。

顺便说一句:使用 htop 我看到有时在运行我的任务的隔离核心上有红条,我用谷歌搜索,这里说红条代表内核线程。 https://serverfault.com/questions/180711/what-exactly-do-the-colors-in-htop-status-bars-mean

为什么内核线程可以运行在一个独立的内核上?是不是那个核心上的内核线程导致的不准确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)