微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么即使在孤立的内核上,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 举报,一经查实,本站将立刻删除。