目前,我正在比较四核处理器上某些代码的串行实现和并行实现。我想了解/衡量的一件事是,当串行代码在单个核心上运行时,它是如何执行的。
当我编译串行代码时,我使用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 13。
谢谢
发布于 2013-10-07 03:05:02
-O3
不会面对一个以上的核心。
您正在看到共享资源对处理器的影响:内存、带宽和缓存。
https://stackoverflow.com/questions/19216446
复制相似问题