0

我目前正在比较四核处理器上某些代码的串行与并行实现。我想了解/衡量的一件事是串行代码在单核上运行时的性能。

当我编译串行代码时,我使用 gcc 的 -O3 选项,起初我注意到串行代码并没有太破旧。但是,我注意到的一件事是,当我在其中一个内核上运行另一个计算密集型进程时,串行版本的性能下降。

以下是一些数字:

Total Time elapsed: 1s, 233ms <- only serial code is running
Total Time elapsed: 1s, 238ms <- only serial code is running
Total Time elapsed: 2s, 128ms <- serial code run but other code is running on another core
Total Time elapsed: 2s, 220ms <- serial code run but other code is running on another core

我猜可能有后台进程在四个核心之一上运行。但据我所知,在四核处理器上运行两个进程不应使所有四个内核都饱和。

我想知道的是是否有理由相信 O3 过程中的某些步骤允许代码利用四核设置,或者更准确地说,为什么所谓的“串行版本”执行当其他内核可用时更好?我试图理解 GCC 文档,我收集到了一些对线程的引用。但我不太明白,想知道是否有人可以帮助我准确理解 O3 可能会或可能不会做些什么来利用多个核心。

值得一提的是,我使用的是 Intel(R) Core(TM) i7-3820 CPU @ 3.60GHz,并且正在运行 linux mint 13。

谢谢

4

1 回答 1

1

-O3面对不止一个核心。

您正在看到共享资源对处理器的影响:内存带宽和缓存。

于 2013-10-07T03:05:02.457 回答