我目前正在比较四核处理器上某些代码的串行与并行实现。我想了解/衡量的一件事是串行代码在单核上运行时的性能。
当我编译串行代码时,我使用 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。
谢谢